Built with Alectryon, running Coq+SerAPI v8.19.0+0.19.3. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use ⌘ instead of Ctrl.
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Require Import HFiber Homotopy.IdentitySystems Cubical.PathSquare.Require Import Diagrams.CommutativeSquares.LocalOpen Scope path_scope.(** * Pullbacks *)(** The pullback as an object *)DefinitionPullback {ABC} (f : B -> A) (g : C -> A)
:= { b : B & { c : C & f b = g c }}.GlobalArguments Pullback {A B C}%_type_scope (f g)%_function_scope.(** The universal commutative square *)Definitionpullback_pr1 {ABC} {f : B -> A} {g : C -> A}
: Pullback f g -> B := (funz => z.1).Definitionpullback_pr2 {ABC} {f : B -> A} {g : C -> A}
: Pullback f g -> C := (funz => z.2.1).Definitionpullback_commsq {ABC} (f : B -> A) (g : C -> A)
: f o pullback_pr1 == g o pullback_pr2
:= (funz => z.2.2).(** The universally induced map into it by any commutative square *)Definitionpullback_corec {ABCD}
{f : A -> B} {g : C -> D} {h : A -> C} {k : B -> D}
(p : k o f == g o h)
: A -> Pullback k g
:= funa => (f a ; h a ; p a).
A, B, C, D: Type k: B -> D g: C -> D
{f : A -> B & {h : A -> C & k o f == g o h}} ->
A -> Pullback k g
A, B, C, D: Type k: B -> D g: C -> D
{f : A -> B & {h : A -> C & k o f == g o h}} ->
A -> Pullback k g
A, B, C, D: Type k: B -> D g: C -> D f: A -> B h: A -> C p: (funx : A => k (f x)) == (funx : A => g (h x))
A -> Pullback k g
exact (pullback_corec p).Defined.
A, B, C, D: Type k: B -> D g: C -> D
IsEquiv (pullback_corec_uncurried k g)
A, B, C, D: Type k: B -> D g: C -> D
IsEquiv (pullback_corec_uncurried k g)
A, B, C, D: Type k: B -> D g: C -> D
(A -> Pullback k g) ->
{f : A -> B & {h : A -> C & k o f == g o h}}
A, B, C, D: Type k: B -> D g: C -> D
pullback_corec_uncurried k g o ?g == idmap
A, B, C, D: Type k: B -> D g: C -> D
?g o pullback_corec_uncurried k g == idmap
A, B, C, D: Type k: B -> D g: C -> D
(A -> Pullback k g) ->
{f : A -> B & {h : A -> C & k o f == g o h}}
A, B, C, D: Type k: B -> D g: C -> D m: A -> Pullback k g
{f : A -> B & {h : A -> C & k o f == g o h}}
exact (pullback_pr1 o m ; pullback_pr2 o m ; (pullback_commsq k g) o m).
A, B, C, D: Type k: B -> D g: C -> D
pullback_corec_uncurried k g
o (funm : A -> Pullback k g =>
(pullback_pr1 o m; pullback_pr2 o m;
pullback_commsq k g o m)) == idmap
reflexivity.
A, B, C, D: Type k: B -> D g: C -> D
(funm : A -> Pullback k g =>
(pullback_pr1 o m; pullback_pr2 o m;
pullback_commsq k g o m))
o pullback_corec_uncurried k g == idmap
reflexivity.Defined.Definitionequiv_pullback_corec {ABCD} (k : B -> D) (g : C -> D)
: { f : A -> B & { h : A -> C & k o f == g o h }} <~> (A -> Pullback k g)
:= Build_Equiv _ _ _ (isequiv_pullback_corec k g).(** A homotopy commutative square is equivalent to a pullback of arrow types *)
H: Funext A, B, C, D: Type k: B -> D g: C -> D
{f : A -> B & {h : A -> C & k o f == g o h}} <~>
Pullback (funf : A -> B => k o f)
(funh : A -> C => g o h)
H: Funext A, B, C, D: Type k: B -> D g: C -> D
{f : A -> B & {h : A -> C & k o f == g o h}} <~>
Pullback (funf : A -> B => k o f)
(funh : A -> C => g o h)
H: Funext A, B, C, D: Type k: B -> D g: C -> D f: A -> B
{h : A -> C &
(funx : A => k (f x)) == (funx : A => g (h x))} <~>
{c : A -> C &
(funx : A => k (f x)) = (funx : A => g (c x))}
H: Funext A, B, C, D: Type k: B -> D g: C -> D f: A -> B h: A -> C
(funx : A => k (f x)) == (funx : A => g (h x)) <~>
(funx : A => k (f x)) = (funx : A => g (h x))
apply equiv_path_forall.Defined.(** The diagonal of a map *)Definitiondiagonal {XY : Type} (f : X -> Y) : X -> Pullback f f
:= funx => (x;x;idpath).(** The fiber of the diagonal is a path-space in the fiber. *)
X, Y: Type f: X -> Y p: Pullback f f
hfiber (diagonal f) p <~>
(p.1; (p.2).2) = ((p.2).1; 1)
X, Y: Type f: X -> Y p: Pullback f f
hfiber (diagonal f) p <~>
(p.1; (p.2).2) = ((p.2).1; 1)
{x : X &
{p0 : x = x1 &
transport (funb : X => {c : X & f b = f c}) p0 (x; 1) =
(x2; p)}} <~> (x1; p) = (x2; 1)
X, Y: Type f: X -> Y x1, x2: X p: f x1 = f x2
{ap : {a : X & a = x1} &
transport (funb : X => {c : X & f b = f c}) ap.2
(ap.1; 1) = (x2; p)} <~> (x1; p) = (x2; 1)
X, Y: Type f: X -> Y x1, x2: X p: f x1 = f x2
(x1; 1) = (x2; p) <~> (x1; p) = (x2; 1)
X, Y: Type f: X -> Y x1, x2: X p: f x1 = f x2
{p0 : x1 = x2 &
transport (func : X => f x1 = f c) p0 1 = p} <~>
{p0 : x1 = x2 &
transport (funx : X => f x = f x2) p0 p = 1}
X, Y: Type f: X -> Y x1, x2: X p: f x1 = f x2 q: x1 = x2
transport (func : X => f x1 = f c) q 1 = p <~>
transport (funx : X => f x = f x2) q p = 1
X, Y: Type f: X -> Y x1: X p: f x1 = f x1
1 = p <~> p = 1
apply equiv_path_inverse.Defined.(** Symmetry of the pullback *)
A, B, C: Type f: B -> A g: C -> A
Pullback f g <~> Pullback g f
A, B, C: Type f: B -> A g: C -> A
Pullback f g <~> Pullback g f
A, B, C: Type f: B -> A g: C -> A
{b : C & {a : B & f a = g b}} <~> Pullback g f
A, B, C: Type f: B -> A g: C -> A c: C
{a : B & f a = g c} <~> {c0 : B & g c = f c0}
A, B, C: Type f: B -> A g: C -> A c: C b: B
f b = g c <~> g c = f b
apply equiv_path_inverse.Defined.(** Pullback over [Unit] is equivalent to a product. *)
A, B: Type
Pullback (const_tt A) (const_tt B) <~> A * B
A, B: Type
Pullback (const_tt A) (const_tt B) <~> A * B
A, B: Type
Pullback (const_tt A) (const_tt B) <~> {_ : A & B}
A, B: Type a: A
{c : B & const_tt A a = const_tt B c} <~> B
rapply equiv_sigma_contr.Defined.(** Pullback of [Unit] is equivalent to [hfiber]. *)
A, B: Type f: A -> B g: Unit -> B
Pullback f g <~> hfiber f (g tt)
A, B: Type f: A -> B g: Unit -> B
Pullback f g <~> hfiber f (g tt)
A, B: Type f: A -> B g: Unit -> B a: A
{c : Unit & f a = g c} <~> f a = g tt
exact (equiv_contr_sigma (func => _ = g c)).Defined.(** The same for the symmetrical pullback. *)Definitionequiv_pullback_unit_hfiber' {AB : Type} (f : Unit -> B) (g : A -> B)
: Pullback f g <~> hfiber g (f tt)
:= equiv_pullback_unit_hfiber _ _ oE equiv_pullback_symm _ _.(** When both corners are [Unit] you get the path type. *)
B: Type f, g: Unit -> B
Pullback f g <~> f tt = g tt
B: Type f, g: Unit -> B
Pullback f g <~> f tt = g tt
B: Type f, g: Unit -> B
{c : Unit & f (center Unit) = g c} <~> f tt = g tt
exact (equiv_contr_sigma (func => _ = g c)).Defined.(** The property of a given commutative square being a pullback *)DefinitionIsPullback {ABCD}
{f : A -> B} {g : C -> D} {h : A -> C} {k : B -> D}
(p : k o f == g o h)
:= IsEquiv (pullback_corec p).Definitionequiv_ispullback {ABCD}
{f : A -> B} {g : C -> D} {h : A -> C} {k : B -> D}
(p : k o f == g o h) (ip : IsPullback p)
: A <~> Pullback k g
:= Build_Equiv _ _ (pullback_corec p) ip.(** This is equivalent to the transposed square being a pullback. *)
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: g o h == k o f pb: IsPullback (funa : A => (p a)^)
IsPullback p
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: g o h == k o f pb: IsPullback (funa : A => (p a)^)
IsPullback p
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: g o h == k o f pb: IsPullback (funa : A => (p a)^)
IsEquiv
(funx : A =>
equiv_pullback_symm g k (pullback_corec p x))
exact pb.Defined.(** The pullback of the projections [{d:D & P d} -> D <- {d:D & Q d}] is equivalent to [{d:D & P d * Q d}]. *)
D: Type P, Q: D -> Type
IsPullback
(funz : {d : D & P d * Q d} =>
1 : (z.1; fst z.2).1 = (z.1; snd z.2).1)
D: Type P, Q: D -> Type
IsPullback
(funz : {d : D & P d * Q d} =>
1 : (z.1; fst z.2).1 = (z.1; snd z.2).1)
D: Type P, Q: D -> Type
Pullback pr1 pr1 -> {d : D & P d * Q d}
D: Type P, Q: D -> Type
pullback_corec
(funz : {d : D & P d * Q d} =>
1 : (z.1; fst z.2).1 = (z.1; snd z.2).1) o ?g ==
idmap
D: Type P, Q: D -> Type
?g
o pullback_corec
(funz : {d : D & P d * Q d} =>
1 : (z.1; fst z.2).1 = (z.1; snd z.2).1) == idmap
D: Type P, Q: D -> Type
Pullback pr1 pr1 -> {d : D & P d * Q d}
D: Type P, Q: D -> Type d1: D p: P d1 d2: D q: Q d2 e: d1 = d2
{d : D & P d * Q d}
D: Type P, Q: D -> Type d1: D p: P d1 d2: D q: Q d2 e: d1 = d2
intros [d [p q]]; reflexivity.Defined.Definitionequiv_sigprod_pullback {D : Type} (PQ : D -> Type)
: {d:D & P d * Q d} <~> Pullback (@pr1 D P) (@pr1 D Q)
:= Build_Equiv _ _ _ (ispullback_sigprod P Q).(** For any commutative square, the fiber of the fibers is equivalent to the fiber of the "gap map" [pullback_corec]. *)
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h b: B c: C q: k b = g c
hfiber (pullback_corec p) (b; c; q) <~>
hfiber (functor_hfiber p b) (c; q^)
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h b: B c: C q: k b = g c
hfiber (pullback_corec p) (b; c; q) <~>
hfiber (functor_hfiber p b) (c; q^)
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h b: B c: C q: k b = g c
{x : A & pullback_corec p x = (b; c; q)} <~>
{x : {x : A & f x = b} &
(h x.1; (p x.1)^ @ ap k x.2) = (c; q^)}
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h b: B c: C q: k b = g c
{x : A & pullback_corec p x = (b; c; q)} <~>
{a : A &
{p0 : f a = b &
(h (a; p0).1; (p (a; p0).1)^ @ ap k (a; p0).2) =
(c; q^)}}
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h b: B c: C q: k b = g c a: A
pullback_corec p a = (b; c; q) <~>
{p0 : f a = b & (h a; (p a)^ @ ap k p0) = (c; q^)}
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h b: B c: C q: k b = g c a: A
{p0 : f a = b &
transport (funb : B => {c : C & k b = g c}) p0
(h a; p a) = (c; q)} <~>
{p0 : f a = b & (h a; (p a)^ @ ap k p0) = (c; q^)}
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h b: B c: C q: k b = g c a: A p0: f a = b
transport (funb : B => {c : C & k b = g c}) p0
(h a; p a) = (c; q) <~>
(h a; (p a)^ @ ap k p0) = (c; q^)
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h b: B c: C q: k b = g c a: A p0: f a = b
(h a; transport (funx : B => k x = g (h a)) p0 (p a)) =
(c; q) <~> (h a; (p a)^ @ ap k p0) = (c; q^)
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h b: B c: C q: k b = g c a: A p0: f a = b
{p1 : h a = c &
transport (func : C => k b = g c) p1
(transport (funx : B => k x = g (h a)) p0 (p a)) =
q} <~>
{p1 : h a = c &
transport (funx : C => g x = k b) p1
((p a)^ @ ap k p0) = q^}
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h b: B c: C q: k b = g c a: A p0: f a = b p1: h a = c
transport (func : C => k b = g c) p1
(transport (funx : B => k x = g (h a)) p0 (p a)) =
q <~>
transport (funx : C => g x = k b) p1
((p a)^ @ ap k p0) = q^
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h b: B c: C q: k b = g c a: A p0: f a = b p1: h a = c
((ap k p0)^ @ p a) @ ap g p1 = q <~>
(ap g p1)^ @ ((p a)^ @ ap k p0) = q^
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h b: B c: C q: k b = g c a: A p0: f a = b p1: h a = c
(((ap k p0)^ @ p a) @ ap g p1)^ = q^ <~>
(ap g p1)^ @ ((p a)^ @ ap k p0) = q^
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h b: B c: C q: k b = g c a: A p0: f a = b p1: h a = c
(ap g p1)^ @ ((p a)^ @ ap k p0) =
(((ap k p0)^ @ p a) @ ap g p1)^
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h b: B c: C q: k b = g c a: A p0: f a = b p1: h a = c
(ap g p1)^ @ ((p a)^ @ ap k p0) =
(ap g p1)^ @ ((ap k p0)^ @ p a)^
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h b: B c: C q: k b = g c a: A p0: f a = b p1: h a = c
(p a)^ @ ap k p0 = ((ap k p0)^ @ p a)^
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h b: B c: C q: k b = g c a: A p0: f a = b p1: h a = c
(p a)^ @ ap k p0 = (p a)^ @ ((ap k p0)^)^
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h b: B c: C q: k b = g c a: A p0: f a = b p1: h a = c
ap k p0 = ((ap k p0)^)^
symmetry; apply inv_V.Defined.(** If the induced maps on fibers are equivalences, then a square is a pullback. *)
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: forallb : B, IsEquiv (functor_hfiber p b)
IsPullback p
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: forallb : B, IsEquiv (functor_hfiber p b)
IsPullback p
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: forallb : B, IsEquiv (functor_hfiber p b)
IsEquiv (pullback_corec p)
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: forallb : B, IsEquiv (functor_hfiber p b) x: Pullback k g
Contr (hfiber (pullback_corec p) x)
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: forallb : B, IsEquiv (functor_hfiber p b) x: Pullback k g
?Goal <~> hfiber (pullback_corec p) x
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: forallb : B, IsEquiv (functor_hfiber p b) x: Pullback k g
Contr ?Goal
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: forallb : B, IsEquiv (functor_hfiber p b) x: Pullback k g
?Goal <~> hfiber (pullback_corec p) x
symmetry; apply hfiber_pullback_corec.
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: forallb : B, IsEquiv (functor_hfiber p b) x: Pullback k g
Contr
(hfiber (functor_hfiber p x.1) ((x.2).1; ((x.2).2)^))
exact _.Defined.(** Conversely, if the square is a pullback then the induced maps on fibers are equivalences. *)
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsPullback p
forallb : B, IsEquiv (functor_hfiber p b)
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsPullback p
forallb : B, IsEquiv (functor_hfiber p b)
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsPullback p
IsEquiv (functor_sigma idmap (functor_hfiber p))
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p)
IsEquiv (functor_sigma idmap (functor_hfiber p))
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p)
Type
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p)
Type
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p)
?C -> ?D
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p)
{x : _ & hfiber f x} -> ?C
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p)
{a : B & hfiber g (k a)} -> ?D
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p)
?g o ?h == ?k o functor_sigma idmap (functor_hfiber p)
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p)
IsEquiv ?g
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p)
IsEquiv ?h
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p)
IsEquiv ?k
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p)
Type
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p)
A -> ?D
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p)
{a : B & hfiber g (k a)} -> ?D
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p)
?g o (equiv_fibration_replacement f)^-1%equiv ==
?k o functor_sigma idmap (functor_hfiber p)
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p)
IsEquiv ?g
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p)
IsEquiv (equiv_fibration_replacement f)^-1%equiv
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p)
IsEquiv ?k
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p)
A -> Pullback k g
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p)
{a : B & hfiber g (k a)} -> Pullback k g
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p)
?g o (equiv_fibration_replacement f)^-1%equiv ==
?k o functor_sigma idmap (functor_hfiber p)
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p)
IsEquiv ?g
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p)
IsEquiv (equiv_fibration_replacement f)^-1%equiv
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p)
IsEquiv ?k
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p)
{a : B & hfiber g (k a)} -> Pullback k g
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p)
pullback_corec p
o (equiv_fibration_replacement f)^-1%equiv ==
?k o functor_sigma idmap (functor_hfiber p)
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p)
IsEquiv (pullback_corec p)
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p)
IsEquiv (equiv_fibration_replacement f)^-1%equiv
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p)
IsEquiv ?k
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p)
{a : B & hfiber g (k a)} -> Pullback k g
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p) b: B
hfiber g (k b) -> {c : C & k b = g c}
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p) b: B c: C
g c = k b -> k b = g c
exact inverse.
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p)
pullback_corec p
o (equiv_fibration_replacement f)^-1%equiv ==
functor_sigma idmap
(funb : B =>
functor_sigma idmap (func : C => inverse))
o functor_sigma idmap (functor_hfiber p)
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p)
IsEquiv (pullback_corec p)
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p)
IsEquiv (equiv_fibration_replacement f)^-1%equiv
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p)
IsEquiv
(functor_sigma idmap
(funb : B =>
functor_sigma idmap (func : C => inverse)))
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p)
pullback_corec p
o (equiv_fibration_replacement f)^-1%equiv ==
functor_sigma idmap
(funb : B =>
functor_sigma idmap (func : C => inverse))
o functor_sigma idmap (functor_hfiber p)
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p) x: B y: A q: f y = x
pullback_corec p
((equiv_fibration_replacement f)^-1%equiv (x; y; q)) =
functor_sigma idmap
(funb : B =>
functor_sigma idmap (func : C => inverse))
(functor_sigma idmap (functor_hfiber p) (x; y; q))
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p) y: A
pullback_corec p
((equiv_fibration_replacement f)^-1%equiv
(f y; y; 1)) =
functor_sigma idmap
(funb : B =>
functor_sigma idmap (func : C => inverse))
(functor_sigma idmap (functor_hfiber p) (f y; y; 1))
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p) y: A
transport (funb : B => {c : C & k b = g c}) 1
(h
((equiv_fibration_replacement f)^-1%equiv
(f y; y; 1));
p
((equiv_fibration_replacement f)^-1%equiv
(f y; y; 1))) =
functor_sigma idmap (func : C => inverse)
(functor_sigma idmap (functor_hfiber p) (f y; y; 1)).2
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p) y: A
transport
(func : C =>
k
(f
((equiv_fibration_replacement f)^-1%equiv
(f y; y; 1))) = g c) 1
(p
((equiv_fibration_replacement f)^-1%equiv
(f y; y; 1))) =
(((functor_sigma idmap (functor_hfiber p) (f y; y; 1)).2).2)^
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p) y: A
p y = ((p y)^ @ 1)^
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p) y: A
1^ @ p y = p y
apply concat_1p.
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p)
IsEquiv (pullback_corec p)
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p)
IsEquiv (equiv_fibration_replacement f)^-1%equiv
A, B, C, D: Type f: A -> B g: C -> D h: A -> C k: B -> D p: k o f == g o h e: IsEquiv (pullback_corec p)
IsEquiv
(functor_sigma idmap
(funb : B =>
functor_sigma idmap (func : C => inverse)))
all: exact _.Defined.(** The pullback of a map along another one *)Definitionpullback_along {ABC} (f : B -> A) (g : C -> A)
: Pullback f g -> B
:= pr1.Notation"f ^*" := (pullback_along f) : function_scope.
A, B, C: Type f: B -> A g: C -> A b: B
hfiber (f^* g) b <~> hfiber g (f b)
A, B, C: Type f: B -> A g: C -> A b: B
hfiber (f^* g) b <~> hfiber g (f b)
A, B, C: Type f: B -> A g: C -> A b: B
hfiber (f^* g) b <~> {c : C & f b = g c}
make_equiv_contr_basedpaths.Defined.(** And the dual sort of pullback *)Definitionpullback_along' {ABC} (g : C -> A) (f : B -> A)
: Pullback f g -> C
:= funz => z.2.1.Arguments pullback_along' / .Notation"g ^*'" := (pullback_along' g) : function_scope.
A, B, C: Type g: C -> A f: B -> A c: C
hfiber (g ^*' f) c <~> hfiber f (g c)
A, B, C: Type g: C -> A f: B -> A c: C
hfiber (g ^*' f) c <~> hfiber f (g c)
make_equiv_contr_basedpaths.Defined.(** A version where [g] is pointed, but we unbundle the pointed condition to avoid importing pointed types. *)
A, B, C: Type c: C a: A g: C -> A f: B -> A p: g c = a
hfiber (g ^*' f) c <~> hfiber f a
A, B, C: Type c: C a: A g: C -> A f: B -> A p: g c = a
hfiber (g ^*' f) c <~> hfiber f a
A, B, C: Type c: C a: A g: C -> A f: B -> A p: g c = a
hfiber f (g c) <~> hfiber f a
A, B, C: Type c: C a: A g: C -> A f: B -> A p: g c = a
1%equiv o f == f o 1%equiv
A, B, C: Type c: C a: A g: C -> A f: B -> A p: g c = a
1%equiv (g c) = a
A, B, C: Type c: C a: A g: C -> A f: B -> A p: g c = a
1%equiv o f == f o 1%equiv
reflexivity.
A, B, C: Type c: C a: A g: C -> A f: B -> A p: g c = a
1%equiv (g c) = a
assumption.Defined.SectionFunctor_Pullback.Context {A1B1C1A2B2C2}
(f1 : B1 -> A1) (g1 : C1 -> A1)
(f2 : B2 -> A2) (g2 : C2 -> A2)
(h : A1 -> A2) (k : B1 -> B2) (l : C1 -> C2)
(p : f2 o k == h o f1) (q : g2 o l == h o g1).Definitionfunctor_pullback : Pullback f1 g1 -> Pullback f2 g2
:= functor_sigma k
(funb1 => (functor_sigma l
(func1e1 => p b1 @ ap h e1 @ (q c1)^))).
A1, B1, C1, A2, B2, C2: Type f1: B1 -> A1 g1: C1 -> A1 f2: B2 -> A2 g2: C2 -> A2 h: A1 -> A2 k: B1 -> B2 l: C1 -> C2 p: f2 o k == h o f1 q: g2 o l == h o g1 z: Pullback f2 g2
hfiber functor_pullback z <~>
Pullback
(transport (hfiber h) (z.2).2 o functor_hfiber p z.1)
(functor_hfiber q (z.2).1)
A1, B1, C1, A2, B2, C2: Type f1: B1 -> A1 g1: C1 -> A1 f2: B2 -> A2 g2: C2 -> A2 h: A1 -> A2 k: B1 -> B2 l: C1 -> C2 p: f2 o k == h o f1 q: g2 o l == h o g1 z: Pullback f2 g2
hfiber functor_pullback z <~>
Pullback
(transport (hfiber h) (z.2).2 o functor_hfiber p z.1)
(functor_hfiber q (z.2).1)
A1, B1, C1, A2, B2, C2: Type f1: B1 -> A1 g1: C1 -> A1 f2: B2 -> A2 g2: C2 -> A2 h: A1 -> A2 k: B1 -> B2 l: C1 -> C2 p: f2 o k == h o f1 q: g2 o l == h o g1 b2: B2 c2: C2 e2: f2 b2 = g2 c2
A1, B1, C1, A2, B2, C2: Type f1: B1 -> A1 g1: C1 -> A1 f2: B2 -> A2 g2: C2 -> A2 h: A1 -> A2 k: B1 -> B2 l: C1 -> C2 p: f2 o k == h o f1 q: g2 o l == h o g1 b2: B2 c2: C2 e2: f2 b2 = g2 c2
{w : hfiber k b2 &
hfiber
(functor_sigma l
(fun (c1 : C1) (e1 : f1 w.1 = g1 c1) =>
(p w.1 @ ap h e1) @ (q c1)^))
(transport (funb : B2 => {c : C2 & f2 b = g2 c})
(w.2)^ (c2; e2))} <~>
Pullback
(funx : hfiber k (b2; c2; e2).1 =>
transport (hfiber h) ((b2; c2; e2).2).2
(functor_hfiber p (b2; c2; e2).1 x))
(functor_hfiber q ((b2; c2; e2).2).1)
A1, B1, C1, A2, B2, C2: Type f1: B1 -> A1 g1: C1 -> A1 f2: B2 -> A2 g2: C2 -> A2 h: A1 -> A2 k: B1 -> B2 l: C1 -> C2 p: f2 o k == h o f1 q: g2 o l == h o g1 b2: B2 c2: C2 e2: f2 b2 = g2 c2
foralla : hfiber k b2,
hfiber
(functor_sigma l
(fun (c1 : C1) (e1 : f1 a.1 = g1 c1) =>
(p a.1 @ ap h e1) @ (q c1)^))
(transport (funb : B2 => {c : C2 & f2 b = g2 c})
(a.2)^ (c2; e2)) <~>
{c : hfiber l ((b2; c2; e2).2).1 &
transport (hfiber h) ((b2; c2; e2).2).2
(functor_hfiber p (b2; c2; e2).1 a) =
functor_hfiber q ((b2; c2; e2).2).1 c}
A1, B1, C1, A2, B2, C2: Type f1: B1 -> A1 g1: C1 -> A1 f2: B2 -> A2 g2: C2 -> A2 h: A1 -> A2 k: B1 -> B2 l: C1 -> C2 p: f2 o k == h o f1 q: g2 o l == h o g1 b2: B2 c2: C2 e2: f2 b2 = g2 c2 b1: B1 e1: k b1 = b2
hfiber
(functor_sigma l
(fun (c1 : C1) (e1 : f1 b1 = g1 c1) =>
(p b1 @ ap h e1) @ (q c1)^))
(transport (funb : B2 => {c : C2 & f2 b = g2 c})
e1^ (c2; e2)) <~>
{c : hfiber l c2 &
transport (hfiber h) e2 (functor_hfiber p b2 (b1; e1)) =
functor_hfiber q c2 c}
A1, B1, C1, A2, B2, C2: Type f1: B1 -> A1 g1: C1 -> A1 f2: B2 -> A2 g2: C2 -> A2 h: A1 -> A2 k: B1 -> B2 l: C1 -> C2 p: f2 o k == h o f1 q: g2 o l == h o g1 b2: B2 c2: C2 e2: f2 b2 = g2 c2 b1: B1 e1: k b1 = b2
hfiber
(functor_sigma l
(fun (c1 : C1) (e1 : f1 b1 = g1 c1) =>
(p b1 @ ap h e1) @ (q c1)^))
((c2; e2).1;
transport (funx : B2 => f2 x = g2 (c2; e2).1) e1^
(c2; e2).2) <~>
{c : hfiber l c2 &
transport (hfiber h) e2 (functor_hfiber p b2 (b1; e1)) =
functor_hfiber q c2 c}
A1, B1, C1, A2, B2, C2: Type f1: B1 -> A1 g1: C1 -> A1 f2: B2 -> A2 g2: C2 -> A2 h: A1 -> A2 k: B1 -> B2 l: C1 -> C2 p: f2 o k == h o f1 q: g2 o l == h o g1 b2: B2 c2: C2 e2: f2 b2 = g2 c2 b1: B1 e1: k b1 = b2
{w : hfiber l c2 &
hfiber
(fune1 : f1 b1 = g1 w.1 =>
(p b1 @ ap h e1) @ (q w.1)^)
(transport (func : C2 => f2 (k b1) = g2 c) (w.2)^
(transport (funx : B2 => f2 x = g2 c2) e1^ e2))} <~>
{c : hfiber l c2 &
transport (hfiber h) e2 (functor_hfiber p b2 (b1; e1)) =
functor_hfiber q c2 c}
A1, B1, C1, A2, B2, C2: Type f1: B1 -> A1 g1: C1 -> A1 f2: B2 -> A2 g2: C2 -> A2 h: A1 -> A2 k: B1 -> B2 l: C1 -> C2 p: f2 o k == h o f1 q: g2 o l == h o g1 b2: B2 c2: C2 e2: f2 b2 = g2 c2 b1: B1 e1: k b1 = b2
foralla : hfiber l c2,
hfiber
(fune1 : f1 b1 = g1 a.1 =>
(p b1 @ ap h e1) @ (q a.1)^)
(transport (func : C2 => f2 (k b1) = g2 c) (a.2)^
(transport (funx : B2 => f2 x = g2 c2) e1^ e2)) <~>
transport (hfiber h) e2 (functor_hfiber p b2 (b1; e1)) =
functor_hfiber q c2 a
A1, B1, C1, A2, B2, C2: Type f1: B1 -> A1 g1: C1 -> A1 f2: B2 -> A2 g2: C2 -> A2 h: A1 -> A2 k: B1 -> B2 l: C1 -> C2 p: f2 o k == h o f1 q: g2 o l == h o g1 b2: B2 c2: C2 e2: f2 b2 = g2 c2 b1: B1 e1: k b1 = b2 c1: C1 e3: l c1 = c2
hfiber
(fune1 : f1 b1 = g1 c1 =>
(p b1 @ ap h e1) @ (q c1)^)
(transport (func : C2 => f2 (k b1) = g2 c) e3^
(transport (funx : B2 => f2 x = g2 c2) e1^ e2)) <~>
transport (hfiber h) e2 (functor_hfiber p b2 (b1; e1)) =
functor_hfiber q c2 (c1; e3)
A1, B1, C1, A2, B2, C2: Type f1: B1 -> A1 g1: C1 -> A1 f2: B2 -> A2 g2: C2 -> A2 h: A1 -> A2 k: B1 -> B2 l: C1 -> C2 p: f2 o k == h o f1 q: g2 o l == h o g1 b2: B2 c2: C2 e2: f2 b2 = g2 c2 b1: B1 e1: k b1 = b2 c1: C1 e3: l c1 = c2
hfiber
(fune1 : f1 b1 = g1 c1 =>
(p b1 @ ap h e1) @ (q c1)^)
(transport (func : C2 => f2 (k b1) = g2 c) e3^
((ap f2 e1^)^ @ e2)) <~>
transport (hfiber h) e2 (functor_hfiber p b2 (b1; e1)) =
functor_hfiber q c2 (c1; e3)
A1, B1, C1, A2, B2, C2: Type f1: B1 -> A1 g1: C1 -> A1 f2: B2 -> A2 g2: C2 -> A2 h: A1 -> A2 k: B1 -> B2 l: C1 -> C2 p: f2 o k == h o f1 q: g2 o l == h o g1 b2: B2 c2: C2 e2: f2 b2 = g2 c2 b1: B1 e1: k b1 = b2 c1: C1 e3: l c1 = c2
hfiber
(fune1 : f1 b1 = g1 c1 =>
(p b1 @ ap h e1) @ (q c1)^)
(((ap f2 e1^)^ @ e2) @ ap g2 e3^) <~>
transport (hfiber h) e2 (functor_hfiber p b2 (b1; e1)) =
functor_hfiber q c2 (c1; e3)
A1, B1, C1, A2, B2, C2: Type f1: B1 -> A1 g1: C1 -> A1 f2: B2 -> A2 g2: C2 -> A2 h: A1 -> A2 k: B1 -> B2 l: C1 -> C2 p: f2 o k == h o f1 q: g2 o l == h o g1 b2: B2 c2: C2 e2: f2 b2 = g2 c2 b1: B1 e1: k b1 = b2 c1: C1 e3: l c1 = c2
hfiber
(fune1 : f1 b1 = g1 c1 =>
(p b1 @ ap h e1) @ (q c1)^)
(((ap f2 e1^)^ @ e2) @ ap g2 e3^) <~>
transport (hfiber h) e2
(functor_sigma f1
(fun (a : B1) (e : k a = b2) => (p a)^ @ ap f2 e)
(b1; e1)) =
functor_sigma g1
(fun (a : C1) (e : l a = c2) => (q a)^ @ ap g2 e)
(c1; e3)
A1, B1, C1, A2, B2, C2: Type f1: B1 -> A1 g1: C1 -> A1 f2: B2 -> A2 g2: C2 -> A2 h: A1 -> A2 k: B1 -> B2 l: C1 -> C2 p: f2 o k == h o f1 q: g2 o l == h o g1 b2: B2 c2: C2 e2: f2 b2 = g2 c2 b1: B1 e1: k b1 = b2 c1: C1 e3: l c1 = c2
hfiber
(fune1 : f1 b1 = g1 c1 =>
(p b1 @ ap h e1) @ (q c1)^)
(((ap f2 e1^)^ @ e2) @ ap g2 e3^) <~>
(f1 b1;
transport (funx : A2 => h (f1 b1) = x) e2
((p b1)^ @ ap f2 e1)) =
functor_sigma g1
(fun (a : C1) (e : l a = c2) => (q a)^ @ ap g2 e)
(c1; e3)
A1, B1, C1, A2, B2, C2: Type f1: B1 -> A1 g1: C1 -> A1 f2: B2 -> A2 g2: C2 -> A2 h: A1 -> A2 k: B1 -> B2 l: C1 -> C2 p: f2 o k == h o f1 q: g2 o l == h o g1 b2: B2 c2: C2 e2: f2 b2 = g2 c2 b1: B1 e1: k b1 = b2 c1: C1 e3: l c1 = c2
hfiber
(fune1 : f1 b1 = g1 c1 =>
(p b1 @ ap h e1) @ (q c1)^)
(((ap f2 e1^)^ @ e2) @ ap g2 e3^) <~>
{p0 : f1 b1 = g1 c1 &
transport (funy : A1 => h y = g2 c2) p0
(transport (funx : A2 => h (f1 b1) = x) e2
((p b1)^ @ ap f2 e1)) = (q c1)^ @ ap g2 e3}
A1, B1, C1, A2, B2, C2: Type f1: B1 -> A1 g1: C1 -> A1 f2: B2 -> A2 g2: C2 -> A2 h: A1 -> A2 k: B1 -> B2 l: C1 -> C2 p: f2 o k == h o f1 q: g2 o l == h o g1 b2: B2 c2: C2 e2: f2 b2 = g2 c2 b1: B1 e1: k b1 = b2 c1: C1 e3: l c1 = c2 e0: f1 b1 = g1 c1
(p b1 @ ap h e0) @ (q c1)^ =
((ap f2 e1^)^ @ e2) @ ap g2 e3^ <~>
transport (funy : A1 => h y = g2 c2) e0
(transport (funx : A2 => h (f1 b1) = x) e2
((p b1)^ @ ap f2 e1)) = (q c1)^ @ ap g2 e3
A1, B1, C1, A2, B2, C2: Type f1: B1 -> A1 g1: C1 -> A1 f2: B2 -> A2 g2: C2 -> A2 h: A1 -> A2 k: B1 -> B2 l: C1 -> C2 p: f2 o k == h o f1 q: g2 o l == h o g1 b2: B2 c2: C2 e2: f2 b2 = g2 c2 b1: B1 e1: k b1 = b2 c1: C1 e3: l c1 = c2 e0: f1 b1 = g1 c1
(p b1 @ ap h e0) @ (q c1)^ =
((ap f2 e1^)^ @ e2) @ ap g2 e3^ <~>
(ap h e0)^ @
transport (funx : A2 => h (f1 b1) = x) e2
((p b1)^ @ ap f2 e1) = (q c1)^ @ ap g2 e3
A1, B1, C1, A2, B2, C2: Type f1: B1 -> A1 g1: C1 -> A1 f2: B2 -> A2 g2: C2 -> A2 h: A1 -> A2 k: B1 -> B2 l: C1 -> C2 p: f2 o k == h o f1 q: g2 o l == h o g1 b2: B2 c2: C2 e2: f2 b2 = g2 c2 b1: B1 e1: k b1 = b2 c1: C1 e3: l c1 = c2 e0: f1 b1 = g1 c1
(p b1 @ ap h e0) @ (q c1)^ =
((ap f2 e1^)^ @ e2) @ ap g2 e3^ <~>
(ap h e0)^ @ (((p b1)^ @ ap f2 e1) @ e2) =
(q c1)^ @ ap g2 e3
A1, B1, C1, A2, B2, C2: Type f1: B1 -> A1 g1: C1 -> A1 f2: B2 -> A2 g2: C2 -> A2 h: A1 -> A2 k: B1 -> B2 l: C1 -> C2 p: f2 o k == h o f1 q: g2 o l == h o g1 b2: B2 c2: C2 e2: f2 b2 = g2 c2 b1: B1 e1: k b1 = b2 c1: C1 e3: l c1 = c2 e0: f1 b1 = g1 c1
(p b1 @ ap h e0) @ (q c1)^ =
((ap f2 e1^)^ @ e2) @ ap g2 e3^ <~>
((p b1)^ @ ap f2 e1) @ e2 =
ap h e0 @ ((q c1)^ @ ap g2 e3)
A1, B1, C1, A2, B2, C2: Type f1: B1 -> A1 g1: C1 -> A1 f2: B2 -> A2 g2: C2 -> A2 h: A1 -> A2 k: B1 -> B2 l: C1 -> C2 p: f2 o k == h o f1 q: g2 o l == h o g1 b2: B2 c2: C2 e2: f2 b2 = g2 c2 b1: B1 e1: k b1 = b2 c1: C1 e3: l c1 = c2 e0: f1 b1 = g1 c1
(p b1 @ ap h e0) @ (q c1)^ =
((ap f2 e1^)^ @ e2) @ ap g2 e3^ <~>
(p b1)^ @ (ap f2 e1 @ e2) =
ap h e0 @ ((q c1)^ @ ap g2 e3)
A1, B1, C1, A2, B2, C2: Type f1: B1 -> A1 g1: C1 -> A1 f2: B2 -> A2 g2: C2 -> A2 h: A1 -> A2 k: B1 -> B2 l: C1 -> C2 p: f2 o k == h o f1 q: g2 o l == h o g1 b2: B2 c2: C2 e2: f2 b2 = g2 c2 b1: B1 e1: k b1 = b2 c1: C1 e3: l c1 = c2 e0: f1 b1 = g1 c1
(p b1 @ ap h e0) @ (q c1)^ =
((ap f2 e1^)^ @ e2) @ ap g2 e3^ <~>
ap f2 e1 @ e2 =
p b1 @ (ap h e0 @ ((q c1)^ @ ap g2 e3))
A1, B1, C1, A2, B2, C2: Type f1: B1 -> A1 g1: C1 -> A1 f2: B2 -> A2 g2: C2 -> A2 h: A1 -> A2 k: B1 -> B2 l: C1 -> C2 p: f2 o k == h o f1 q: g2 o l == h o g1 b2: B2 c2: C2 e2: f2 b2 = g2 c2 b1: B1 e1: k b1 = b2 c1: C1 e3: l c1 = c2 e0: f1 b1 = g1 c1
(p b1 @ ap h e0) @ (q c1)^ =
((ap f2 e1^)^ @ e2) @ ap g2 e3^ <~>
ap f2 e1 @ e2 =
((p b1 @ ap h e0) @ (q c1)^) @ ap g2 e3
A1, B1, C1, A2, B2, C2: Type f1: B1 -> A1 g1: C1 -> A1 f2: B2 -> A2 g2: C2 -> A2 h: A1 -> A2 k: B1 -> B2 l: C1 -> C2 p: f2 o k == h o f1 q: g2 o l == h o g1 b2: B2 c2: C2 e2: f2 b2 = g2 c2 b1: B1 e1: k b1 = b2 c1: C1 e3: l c1 = c2 e0: f1 b1 = g1 c1
(p b1 @ ap h e0) @ (q c1)^ =
((ap f2 e1^)^ @ e2) @ ap g2 e3^ <~>
(ap f2 e1 @ e2) @ (ap g2 e3)^ =
(p b1 @ ap h e0) @ (q c1)^
abstract (rewrite !ap_V, inv_V; exact (equiv_path_inverse _ _)).Defined.EndFunctor_Pullback.SectionEquivPullback.Context {ABCfgA'B'C'f'g'}
(eA : A <~> A') (eB : B <~> B') (eC : C <~> C')
(p : f' o eB == eA o f) (q : g' o eC == eA o g).
A, B, C: Type f: B -> A g: C -> A A', B', C': Type f': B' -> A' g': C' -> A' eA: A <~> A' eB: B <~> B' eC: C <~> C' p: f' o eB == eA o f q: g' o eC == eA o g
Pullback f g <~> Pullback f' g'
A, B, C: Type f: B -> A g: C -> A A', B', C': Type f': B' -> A' g': C' -> A' eA: A <~> A' eB: B <~> B' eC: C <~> C' p: f' o eB == eA o f q: g' o eC == eA o g
Pullback f g <~> Pullback f' g'
A, B, C: Type f: B -> A g: C -> A A', B', C': Type f': B' -> A' g': C' -> A' eA: A <~> A' eB: B <~> B' eC: C <~> C' p: f' o eB == eA o f q: g' o eC == eA o g
{b : B & {c : C & f b = g c}} <~>
{b : B' & {c : C' & f' b = g' c}}
A, B, C: Type f: B -> A g: C -> A A', B', C': Type f': B' -> A' g': C' -> A' eA: A <~> A' eB: B <~> B' eC: C <~> C' p: f' o eB == eA o f q: g' o eC == eA o g b: B
{c : C & f b = g c} <~> {c : C' & f' (eB b) = g' c}
A, B, C: Type f: B -> A g: C -> A A', B', C': Type f': B' -> A' g': C' -> A' eA: A <~> A' eB: B <~> B' eC: C <~> C' p: f' o eB == eA o f q: g' o eC == eA o g b: B c: C
f b = g c <~> f' (eB b) = g' (eC c)
A, B, C: Type f: B -> A g: C -> A A', B', C': Type f': B' -> A' g': C' -> A' eA: A <~> A' eB: B <~> B' eC: C <~> C' p: f' o eB == eA o f q: g' o eC == eA o g b: B c: C
f b = g c <~> eA (f b) = g' (eC c)
A, B, C: Type f: B -> A g: C -> A A', B', C': Type f': B' -> A' g': C' -> A' eA: A <~> A' eB: B <~> B' eC: C <~> C' p: f' o eB == eA o f q: g' o eC == eA o g b: B c: C
f b = g c <~> eA (f b) = eA (g c)
exact (equiv_ap' eA _ _).Defined.EndEquivPullback.(** Pullbacks commute with sigmas *)SectionPullbackSigma.Context
{XYZ : Type}
{A : X -> Type} {B : Y -> Type} {C : Z -> Type}
(f : Y -> X) (g : Z -> X)
(r : forallx, B x -> A (f x))
(s : forallx, C x -> A (g x)).
X, Y, Z: Type A: X -> Type B: Y -> Type C: Z -> Type f: Y -> X g: Z -> X r: forallx : Y, B x -> A (f x) s: forallx : Z, C x -> A (g x)
{p : Pullback f g &
Pullback (transport A (p.2).2 o r p.1) (s (p.2).1)} <~>
Pullback (functor_sigma f r) (functor_sigma g s)
X, Y, Z: Type A: X -> Type B: Y -> Type C: Z -> Type f: Y -> X g: Z -> X r: forallx : Y, B x -> A (f x) s: forallx : Z, C x -> A (g x)
{p : Pullback f g &
Pullback (transport A (p.2).2 o r p.1) (s (p.2).1)} <~>
Pullback (functor_sigma f r) (functor_sigma g s)
X, Y, Z: Type A: X -> Type B: Y -> Type C: Z -> Type f: Y -> X g: Z -> X r: forallx : Y, B x -> A (f x) s: forallx : Z, C x -> A (g x) y: {x : _ & B x}
foralla : {x : _ & C x},
?Goal a <~> functor_sigma f r y = functor_sigma g s a
X, Y, Z: Type A: X -> Type B: Y -> Type C: Z -> Type f: Y -> X g: Z -> X r: forallx : Y, B x -> A (f x) s: forallx : Z, C x -> A (g x)
{p : Pullback f g &
Pullback
(funx : B p.1 => transport A (p.2).2 (r p.1 x))
(s (p.2).1)} <~>
{H : {x : _ & B x} & {x : _ & ?Goal@{y:=H} x}}
X, Y, Z: Type A: X -> Type B: Y -> Type C: Z -> Type f: Y -> X g: Z -> X r: forallx : Y, B x -> A (f x) s: forallx : Z, C x -> A (g x) y: {x : _ & B x}
foralla : {x : _ & C x},
?Goal a <~> functor_sigma f r y = functor_sigma g s a
intros; rapply equiv_path_sigma.
X, Y, Z: Type A: X -> Type B: Y -> Type C: Z -> Type f: Y -> X g: Z -> X r: forallx : Y, B x -> A (f x) s: forallx : Z, C x -> A (g x)
{p : Pullback f g &
Pullback
(funx : B p.1 => transport A (p.2).2 (r p.1 x))
(s (p.2).1)} <~>
{H : {x : _ & B x} &
{a : {x : _ & C x} &
{p : (functor_sigma f r H).1 = (functor_sigma g s a).1
&
transport A p (functor_sigma f r H).2 =
(functor_sigma g s a).2}}}
make_equiv.Defined.EndPullbackSigma.(** ** Paths in pullbacks *)
A, B, C: Type f: B -> A g: C -> A x, y: Pullback f g
{p : x.1 = y.1 &
{q : (x.2).1 = (y.2).1 &
PathSquare (ap f p) (ap g q) (x.2).2 (y.2).2}} <~>
x = y
A, B, C: Type f: B -> A g: C -> A x, y: Pullback f g
{p : x.1 = y.1 &
{q : (x.2).1 = (y.2).1 &
PathSquare (ap f p) (ap g q) (x.2).2 (y.2).2}} <~>
x = y
A, B, C: Type f: B -> A g: C -> A x: Pullback f g
{p : x.1 = x.1 &
{q : (x.2).1 = (x.2).1 &
PathSquare (ap f p) (ap g q) (x.2).2 (x.2).2}}
A, B, C: Type f: B -> A g: C -> A x: Pullback f g
Contr
{y : Pullback f g &
{p : x.1 = y.1 &
{q : (x.2).1 = (y.2).1 &
PathSquare (ap f p) (ap g q) (x.2).2 (y.2).2}}}
A, B, C: Type f: B -> A g: C -> A x: Pullback f g
{p : x.1 = x.1 &
{q : (x.2).1 = (x.2).1 &
PathSquare (ap f p) (ap g q) (x.2).2 (x.2).2}}
A, B, C: Type f: B -> A g: C -> A x: Pullback f g
{q : (x.2).1 = (x.2).1 &
PathSquare (ap f 1) (ap g q) (x.2).2 (x.2).2}
A, B, C: Type f: B -> A g: C -> A x: Pullback f g
PathSquare (ap f 1) (ap g 1) (x.2).2 (x.2).2
A, B, C: Type f: B -> A g: C -> A x: Pullback f g
PathSquare 11 (x.2).2 (x.2).2
apply sq_refl_v.
A, B, C: Type f: B -> A g: C -> A x: Pullback f g
Contr
{y : Pullback f g &
{p : x.1 = y.1 &
{q : (x.2).1 = (y.2).1 &
PathSquare (ap f p) (ap g q) (x.2).2 (y.2).2}}}
A, B, C: Type f: B -> A g: C -> A b: B c: C p: f b = g c
Contr
{y : {b : B & {c : C & f b = g c}} &
{p0 : b = y.1 &
{q : c = (y.2).1 &
PathSquare (ap f p0) (ap g q) p (y.2).2}}}
A, B, C: Type f: B -> A g: C -> A b: B c: C p: f b = g c
Contr
{y : {c : C & f b = g c} &
{q : c = ((b; y).2).1 &
PathSquare (ap f 1) (ap g q) p ((b; y).2).2}}
A, B, C: Type f: B -> A g: C -> A b: B c: C p: f b = g c
Contr
{y : f b = g c &
PathSquare (ap f 1) (ap g 1) p ((b; c; y).2).2}
A, B, C: Type f: B -> A g: C -> A b: B c: C p: f b = g c
Contr {y : f b = g c & PathSquare 11 p y}
A, B, C: Type f: B -> A g: C -> A b: B c: C p: f b = g c
{p' : f b = g c & p = p'} <~>
{y : f b = g c & PathSquare 11 p y}
A, B, C: Type f: B -> A g: C -> A b: B c: C p, p': f b = g c
p = p' <~> PathSquare 11 p p'
exact sq_1G.Defined.(** Maps into pullbacks are determined by their composites with the projections, and a coherence. This can also be proved directly. With [Funext], we could also prove an equivalence analogous to [equiv_path_pullback_rec_hset] below. Not sure of the best name for this version. *)
A, B, C, D: Type g: C -> D k: B -> D f, h: A -> Pullback k g p1: pullback_pr1 o f == pullback_pr1 o h p2: pullback_pr2 o f == pullback_pr2 o h q: foralla : A,
ap k (p1 a) @ ((h a).2).2 =
((f a).2).2 @ ap g (p2 a)
f == h
A, B, C, D: Type g: C -> D k: B -> D f, h: A -> Pullback k g p1: pullback_pr1 o f == pullback_pr1 o h p2: pullback_pr2 o f == pullback_pr2 o h q: foralla : A,
ap k (p1 a) @ ((h a).2).2 =
((f a).2).2 @ ap g (p2 a)
f == h
A, B, C, D: Type g: C -> D k: B -> D f, h: A -> Pullback k g p1: pullback_pr1 o f == pullback_pr1 o h p2: pullback_pr2 o f == pullback_pr2 o h q: foralla : A,
ap k (p1 a) @ ((h a).2).2 =
((f a).2).2 @ ap g (p2 a) a: A
f a = h a
A, B, C, D: Type g: C -> D k: B -> D f, h: A -> Pullback k g p1: pullback_pr1 o f == pullback_pr1 o h p2: pullback_pr2 o f == pullback_pr2 o h q: foralla : A,
ap k (p1 a) @ ((h a).2).2 =
((f a).2).2 @ ap g (p2 a) a: A
{p : (f a).1 = (h a).1 &
{q : ((f a).2).1 = ((h a).2).1 &
PathSquare (ap k p) (ap g q) ((f a).2).2 ((h a).2).2}}
A, B, C, D: Type g: C -> D k: B -> D f, h: A -> Pullback k g p1: pullback_pr1 o f == pullback_pr1 o h p2: pullback_pr2 o f == pullback_pr2 o h q: foralla : A,
ap k (p1 a) @ ((h a).2).2 =
((f a).2).2 @ ap g (p2 a) a: A
{q : ((f a).2).1 = ((h a).2).1 &
PathSquare (ap k (p1 a)) (ap g q) ((f a).2).2
((h a).2).2}
A, B, C, D: Type g: C -> D k: B -> D f, h: A -> Pullback k g p1: pullback_pr1 o f == pullback_pr1 o h p2: pullback_pr2 o f == pullback_pr2 o h q: foralla : A,
ap k (p1 a) @ ((h a).2).2 =
((f a).2).2 @ ap g (p2 a) a: A
PathSquare (ap k (p1 a)) (ap g (p2 a)) ((f a).2).2
((h a).2).2
apply sq_path, q.Defined.(** When [A] is a set, the [PathSquare] becomes trivial. *)
A, B, C: Type IsHSet0: IsHSet A f: B -> A g: C -> A x, y: Pullback f g
(x.1 = y.1) * ((x.2).1 = (y.2).1) <~> x = y
A, B, C: Type IsHSet0: IsHSet A f: B -> A g: C -> A x, y: Pullback f g
(x.1 = y.1) * ((x.2).1 = (y.2).1) <~> x = y
A, B, C: Type IsHSet0: IsHSet A f: B -> A g: C -> A x, y: Pullback f g
{p : x.1 = y.1 &
{q : (x.2).1 = (y.2).1 &
PathSquare (ap f p) (ap g q) (x.2).2 (y.2).2}} <~>
(x.1 = y.1) * ((x.2).1 = (y.2).1)
A, B, C: Type IsHSet0: IsHSet A f: B -> A g: C -> A x, y: Pullback f g
{pq : (x.1 = y.1) * ((x.2).1 = (y.2).1) &
PathSquare (ap f (fst pq)) (ap g (snd pq)) (x.2).2
(y.2).2} <~> (x.1 = y.1) * ((x.2).1 = (y.2).1)
make_equiv.Defined.EndPullback3x3.(** Pasting for pullbacks (or 2-pullbacks lemma) *)SectionPasting.(** Given the following diagram where the right square is a pullback square, then the outer square is a pullback square if and only if the left square is a pullback. *)(* A --k--> B --l--> C | // | // | f comm g comm h | // | // | V // V // V X --i--> Y --j--> Z *)Context
{ABCXYZ : Type}
{k : A -> B} {l : B -> C}
{f : A -> X} {g : B -> Y} {h : C -> Z}
{i : X -> Y} {j : Y -> Z}
(H : i o f == g o k) (K : j o g == h o l) {e1 : IsPullback K}.
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K
IsPullback (comm_square_comp' H K) -> IsPullback H
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K
IsPullback (comm_square_comp' H K) -> IsPullback H
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback (comm_square_comp' H K)
IsPullback H
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback (comm_square_comp' H K)
forallb : X, IsEquiv (functor_hfiber H b)
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback (comm_square_comp' H K) b: X
IsEquiv (functor_hfiber H b)
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback (comm_square_comp' H K) b: X e1':= isequiv_functor_hfiber_ispullback K e1 (i b): IsEquiv (functor_hfiber K (i b))
IsEquiv (functor_hfiber H b)
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback (comm_square_comp' H K) b: X e1':= isequiv_functor_hfiber_ispullback K e1 (i b): IsEquiv (functor_hfiber K (i b)) e2':= isequiv_functor_hfiber_ispullback
(comm_square_comp' H K) e2 b: IsEquiv (functor_hfiber (comm_square_comp' H K) b)
IsEquiv (functor_hfiber H b)
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback (comm_square_comp' H K) b: X e1':= isequiv_functor_hfiber_ispullback K e1 (i b): IsEquiv (functor_hfiber K (i b)) e2':= isequiv_functor_hfiber_ispullback
(comm_square_comp' H K) e2 b: IsEquiv (functor_hfiber (comm_square_comp' H K) b)
Type
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback (comm_square_comp' H K) b: X e1':= isequiv_functor_hfiber_ispullback K e1 (i b): IsEquiv (functor_hfiber K (i b)) e2':= isequiv_functor_hfiber_ispullback
(comm_square_comp' H K) e2 b: IsEquiv (functor_hfiber (comm_square_comp' H K) b)
Type
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback (comm_square_comp' H K) b: X e1':= isequiv_functor_hfiber_ispullback K e1 (i b): IsEquiv (functor_hfiber K (i b)) e2':= isequiv_functor_hfiber_ispullback
(comm_square_comp' H K) e2 b: IsEquiv (functor_hfiber (comm_square_comp' H K) b)
?C -> ?D
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback (comm_square_comp' H K) b: X e1':= isequiv_functor_hfiber_ispullback K e1 (i b): IsEquiv (functor_hfiber K (i b)) e2':= isequiv_functor_hfiber_ispullback
(comm_square_comp' H K) e2 b: IsEquiv (functor_hfiber (comm_square_comp' H K) b)
hfiber f b -> ?C
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback (comm_square_comp' H K) b: X e1':= isequiv_functor_hfiber_ispullback K e1 (i b): IsEquiv (functor_hfiber K (i b)) e2':= isequiv_functor_hfiber_ispullback
(comm_square_comp' H K) e2 b: IsEquiv (functor_hfiber (comm_square_comp' H K) b)
hfiber g (i b) -> ?D
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback (comm_square_comp' H K) b: X e1':= isequiv_functor_hfiber_ispullback K e1 (i b): IsEquiv (functor_hfiber K (i b)) e2':= isequiv_functor_hfiber_ispullback
(comm_square_comp' H K) e2 b: IsEquiv (functor_hfiber (comm_square_comp' H K) b)
?g o ?h == ?k o functor_hfiber H b
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback (comm_square_comp' H K) b: X e1':= isequiv_functor_hfiber_ispullback K e1 (i b): IsEquiv (functor_hfiber K (i b)) e2':= isequiv_functor_hfiber_ispullback
(comm_square_comp' H K) e2 b: IsEquiv (functor_hfiber (comm_square_comp' H K) b)
IsEquiv ?g
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback (comm_square_comp' H K) b: X e1':= isequiv_functor_hfiber_ispullback K e1 (i b): IsEquiv (functor_hfiber K (i b)) e2':= isequiv_functor_hfiber_ispullback
(comm_square_comp' H K) e2 b: IsEquiv (functor_hfiber (comm_square_comp' H K) b)
IsEquiv ?h
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback (comm_square_comp' H K) b: X e1':= isequiv_functor_hfiber_ispullback K e1 (i b): IsEquiv (functor_hfiber K (i b)) e2':= isequiv_functor_hfiber_ispullback
(comm_square_comp' H K) e2 b: IsEquiv (functor_hfiber (comm_square_comp' H K) b)
IsEquiv ?k
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback (comm_square_comp' H K) b: X e1':= isequiv_functor_hfiber_ispullback K e1 (i b): IsEquiv (functor_hfiber K (i b)) e2':= isequiv_functor_hfiber_ispullback
(comm_square_comp' H K) e2 b: IsEquiv (functor_hfiber (comm_square_comp' H K) b)
Type
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback (comm_square_comp' H K) b: X e1':= isequiv_functor_hfiber_ispullback K e1 (i b): IsEquiv (functor_hfiber K (i b)) e2':= isequiv_functor_hfiber_ispullback
(comm_square_comp' H K) e2 b: IsEquiv (functor_hfiber (comm_square_comp' H K) b)
hfiber f b -> ?C
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback (comm_square_comp' H K) b: X e1':= isequiv_functor_hfiber_ispullback K e1 (i b): IsEquiv (functor_hfiber K (i b)) e2':= isequiv_functor_hfiber_ispullback
(comm_square_comp' H K) e2 b: IsEquiv (functor_hfiber (comm_square_comp' H K) b)
hfiber g (i b) -> ?C
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback (comm_square_comp' H K) b: X e1':= isequiv_functor_hfiber_ispullback K e1 (i b): IsEquiv (functor_hfiber K (i b)) e2':= isequiv_functor_hfiber_ispullback
(comm_square_comp' H K) e2 b: IsEquiv (functor_hfiber (comm_square_comp' H K) b)
idmap o ?h == ?k o functor_hfiber H b
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback (comm_square_comp' H K) b: X e1':= isequiv_functor_hfiber_ispullback K e1 (i b): IsEquiv (functor_hfiber K (i b)) e2':= isequiv_functor_hfiber_ispullback
(comm_square_comp' H K) e2 b: IsEquiv (functor_hfiber (comm_square_comp' H K) b)
IsEquiv ?h
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback (comm_square_comp' H K) b: X e1':= isequiv_functor_hfiber_ispullback K e1 (i b): IsEquiv (functor_hfiber K (i b)) e2':= isequiv_functor_hfiber_ispullback
(comm_square_comp' H K) e2 b: IsEquiv (functor_hfiber (comm_square_comp' H K) b)
IsEquiv ?k
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback (comm_square_comp' H K) b: X e1':= isequiv_functor_hfiber_ispullback K e1 (i b): IsEquiv (functor_hfiber K (i b)) e2':= isequiv_functor_hfiber_ispullback
(comm_square_comp' H K) e2 b: IsEquiv (functor_hfiber (comm_square_comp' H K) b)
IsEquiv
(funu : {x : A & f x = b} =>
((funx : A => l (k x)) u.1;
(fun (a : A) (e : (funx : A => f x = b) a) =>
(comm_square_comp' H K a)^ @
ap (funx : X => j (i x)) e) u.1 u.2))
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback (comm_square_comp' H K) b: X e1':= isequiv_functor_hfiber_ispullback K e1 (i b): IsEquiv (functor_hfiber K (i b)) e2':= isequiv_functor_hfiber_ispullback
(comm_square_comp' H K) e2 b: IsEquiv (functor_hfiber (comm_square_comp' H K) b)
IsEquiv (functor_hfiber K (i b))
1,2: exact _.Defined.
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K
IsPullback H -> IsPullback (comm_square_comp' H K)
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K
IsPullback H -> IsPullback (comm_square_comp' H K)
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback H
IsPullback (comm_square_comp' H K)
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback H
forallb : X,
IsEquiv (functor_hfiber (comm_square_comp' H K) b)
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback H b: X
IsEquiv (functor_hfiber (comm_square_comp' H K) b)
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback H b: X e1':= isequiv_functor_hfiber_ispullback K e1 (i b): IsEquiv (functor_hfiber K (i b))
IsEquiv (functor_hfiber (comm_square_comp' H K) b)
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback H b: X e1':= isequiv_functor_hfiber_ispullback K e1 (i b): IsEquiv (functor_hfiber K (i b)) e2':= isequiv_functor_hfiber_ispullback H e2 b: IsEquiv (functor_hfiber H b)
IsEquiv (functor_hfiber (comm_square_comp' H K) b)
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback H b: X e1':= isequiv_functor_hfiber_ispullback K e1 (i b): IsEquiv (functor_hfiber K (i b)) e2':= isequiv_functor_hfiber_ispullback H e2 b: IsEquiv (functor_hfiber H b)
Type
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback H b: X e1':= isequiv_functor_hfiber_ispullback K e1 (i b): IsEquiv (functor_hfiber K (i b)) e2':= isequiv_functor_hfiber_ispullback H e2 b: IsEquiv (functor_hfiber H b)
Type
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback H b: X e1':= isequiv_functor_hfiber_ispullback K e1 (i b): IsEquiv (functor_hfiber K (i b)) e2':= isequiv_functor_hfiber_ispullback H e2 b: IsEquiv (functor_hfiber H b)
?C -> ?D
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback H b: X e1':= isequiv_functor_hfiber_ispullback K e1 (i b): IsEquiv (functor_hfiber K (i b)) e2':= isequiv_functor_hfiber_ispullback H e2 b: IsEquiv (functor_hfiber H b)
hfiber f b -> ?C
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback H b: X e1':= isequiv_functor_hfiber_ispullback K e1 (i b): IsEquiv (functor_hfiber K (i b)) e2':= isequiv_functor_hfiber_ispullback H e2 b: IsEquiv (functor_hfiber H b)
hfiber h (j (i b)) -> ?D
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback H b: X e1':= isequiv_functor_hfiber_ispullback K e1 (i b): IsEquiv (functor_hfiber K (i b)) e2':= isequiv_functor_hfiber_ispullback H e2 b: IsEquiv (functor_hfiber H b)
?g o ?h ==
?k o functor_hfiber (comm_square_comp' H K) b
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback H b: X e1':= isequiv_functor_hfiber_ispullback K e1 (i b): IsEquiv (functor_hfiber K (i b)) e2':= isequiv_functor_hfiber_ispullback H e2 b: IsEquiv (functor_hfiber H b)
IsEquiv ?g
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback H b: X e1':= isequiv_functor_hfiber_ispullback K e1 (i b): IsEquiv (functor_hfiber K (i b)) e2':= isequiv_functor_hfiber_ispullback H e2 b: IsEquiv (functor_hfiber H b)
IsEquiv ?h
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback H b: X e1':= isequiv_functor_hfiber_ispullback K e1 (i b): IsEquiv (functor_hfiber K (i b)) e2':= isequiv_functor_hfiber_ispullback H e2 b: IsEquiv (functor_hfiber H b)
IsEquiv ?k
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback H b: X e1':= isequiv_functor_hfiber_ispullback K e1 (i b): IsEquiv (functor_hfiber K (i b)) e2':= isequiv_functor_hfiber_ispullback H e2 b: IsEquiv (functor_hfiber H b)
Type
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback H b: X e1':= isequiv_functor_hfiber_ispullback K e1 (i b): IsEquiv (functor_hfiber K (i b)) e2':= isequiv_functor_hfiber_ispullback H e2 b: IsEquiv (functor_hfiber H b)
?C -> hfiber h (j (i b))
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback H b: X e1':= isequiv_functor_hfiber_ispullback K e1 (i b): IsEquiv (functor_hfiber K (i b)) e2':= isequiv_functor_hfiber_ispullback H e2 b: IsEquiv (functor_hfiber H b)
hfiber f b -> ?C
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback H b: X e1':= isequiv_functor_hfiber_ispullback K e1 (i b): IsEquiv (functor_hfiber K (i b)) e2':= isequiv_functor_hfiber_ispullback H e2 b: IsEquiv (functor_hfiber H b)
?g o ?h ==
idmap o functor_hfiber (comm_square_comp' H K) b
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback H b: X e1':= isequiv_functor_hfiber_ispullback K e1 (i b): IsEquiv (functor_hfiber K (i b)) e2':= isequiv_functor_hfiber_ispullback H e2 b: IsEquiv (functor_hfiber H b)
IsEquiv ?g
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback H b: X e1':= isequiv_functor_hfiber_ispullback K e1 (i b): IsEquiv (functor_hfiber K (i b)) e2':= isequiv_functor_hfiber_ispullback H e2 b: IsEquiv (functor_hfiber H b)
IsEquiv ?h
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback H b: X e1':= isequiv_functor_hfiber_ispullback K e1 (i b): IsEquiv (functor_hfiber K (i b)) e2':= isequiv_functor_hfiber_ispullback H e2 b: IsEquiv (functor_hfiber H b)
IsEquiv (functor_hfiber K (i b))
A, B, C, X, Y, Z: Type k: A -> B l: B -> C f: A -> X g: B -> Y h: C -> Z i: X -> Y j: Y -> Z H: i o f == g o k K: j o g == h o l e1: IsPullback K e2: IsPullback H b: X e1':= isequiv_functor_hfiber_ispullback K e1 (i b): IsEquiv (functor_hfiber K (i b)) e2':= isequiv_functor_hfiber_ispullback H e2 b: IsEquiv (functor_hfiber H b)