12
12
Copyright © Groupoid Infinity, 2021—2022,
13
13
© @siegment, 2022—2023 -}
14
14
15
- import library/data/path
15
+ import library/mathematics/prop
16
16
17
- def fiber (A B : U) (f : A → B) (y : B) : U := Σ (x : A), Path B y (f x)
18
- def isEquiv (A B : U) (f : A → B) : U := Π (y : B), isContr (fiber A B f y)
19
- def equiv (A B : U) : U := Σ (f : A → B), isEquiv A B f
17
+ section
18
+ variables (n : L) (A B : U n)
19
+
20
+ def fiberω (f : A → B) (y : B) := Σ (x : A), PathP (<_> B) y (f x)
21
+ def isEquivω (f : A → B) := Π (y : B), isContrω n (fiberω n A B f y)
22
+ def equivω := Σ (f : A → B), isEquivω n A B f
23
+ end
24
+
25
+ def fiber := fiberω L₀
26
+ def isEquiv := isEquivω L₀
27
+ def equiv := equivω L₀
20
28
21
29
def contrSingl (A : U) (a b : A) (p : Path A a b) : Path (Σ (x : A), Path A a x) (a, <_> a) (b, p) :=
22
30
<i> (p @ i, <j> p @ i ∧ j)
23
31
24
32
def idIsEquiv (A : U) : isEquiv A A (id A) := λ (a : A), ((a, <_> a), λ (z : fiber A A (id A) a), contrSingl A a z.1 z.2)
25
33
def idEquiv (A : U) : equiv A A := (id A, isContrSingl A)
26
34
35
+ def equiv-respects-contrω (n : L) (A B : U n) (w : equivω n A B) (H : isContrω n A) : isContrω n B :=
36
+ (w.1 H.1, λ (y : B), transp (<i> PathP (<_> B) (w.1 H.1) ((w.2 y).1.2 @ -i)) 0 (<j> w.1 (H.2 ((w.2 y).1.1) @ j)))
37
+
27
38
section
28
39
variables (A B : U)
29
40
@@ -58,10 +69,24 @@ transp (<i> equiv A (p @ i)) 0 (idEquiv A)
58
69
def ua (A B : U) (e : equiv A B) : PathP (<_> U) A B :=
59
70
<i> Glue B (∂ i) [(i = 0) → (A, e), (i = 1) → (B, idEquiv B)]
60
71
61
- def univ-computation (A B : U) (p : PathP (<_> U) A B) : PathP (<_> PathP (<_> U) A B) (ua A B (idtoeqv A B p)) p :=
72
+ def ua-idtoeqv (A B : U) (p : PathP (<_> U) A B) : PathP (<_> PathP (<_> U) A B) (ua A B (idtoeqv A B p)) p :=
62
73
<j i> Glue B (j ∨ ∂ i) [(i = 0) → (A, idtoeqv A B p),
63
74
(i = 1) → (B, transp (<_> equiv B B) (-j) (idEquiv B)),
64
75
(j = 1) → (p @ i, idtoeqv (p @ i) B (<k> p @ (i ∨ k)))]
65
76
66
77
def ua-β (A B : U) (e : equiv A B) : Path (A → B) (trans A B (ua A B e)) e.1 :=
67
78
<i> λ (x : A), (idfun=idfun″ B @ -i) ((idfun=idfun″ B @ -i) ((idfun=idfun′ B @ -i) (e.1 x)))
79
+
80
+ def isEquivProp (A B : U) (f : A → B) : isProp (isEquiv A B f) :=
81
+ propPi B (λ (y : B), isContr (fiber A B f y))
82
+ (λ (y : B), propIsContr (fiber A B f y))
83
+
84
+ def idtoeqv→trans (A B : U) (p : PathP (<_> U) A B) : Path (A → B) (idtoeqv A B p).1 (trans A B p) :=
85
+ <i> λ (a : A), transp p 0 (transp (<_> A) i a)
86
+
87
+ def ideqv-compute (A B : U) (e : equiv A B) : Path (A → B) (idtoeqv A B (ua A B e)).1 e.1 :=
88
+ comp-Path (A → B) (idtoeqv A B (ua A B e)).1 (trans A B (ua A B e)) e.1 (idtoeqv→trans A B (ua A B e)) (ua-β A B e)
89
+
90
+ -- should “isEquiv” be opaque?
91
+ --def idtoeqv-ua (A B : U) (e : equiv A B) : Path (equiv A B) (idtoeqv A B (ua A B e)) e :=
92
+ --lemSig (A → B) (isEquiv A B) (isEquivProp A B) (idtoeqv A B (ua A B e)) e (ideqv-compute A B e)
0 commit comments