Built with Alectryon. 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.
From HoTT Require Import Basics Types.From HoTT Require Import Basics Types.From HoTT.WildCat Require Import Core Equiv.Require Import HFiber.Require Import Pointed.Core.Require Import Pointed.pEquiv.Require Import Pointed.Loops.LocalOpen Scope pointed_scope.(** ** Pointed fibers *)Instanceispointed_fiber {AB : pType} (f : A ->* B) : IsPointed (hfiber f (point B))
:= (point A; point_eq f).Definitionpfiber {AB : pType} (f : A ->* B) : pType := [hfiber f (point B), _].Definitionpfib {AB : pType} (f : A ->* B) : pfiber f ->* A
:= Build_pMap pr1 1.
A, B: pType f: A ->* B
pfiber (fmap loops f) <~>* loops (pfiber f)
A, B: pType f: A ->* B
pfiber (fmap loops f) <~>* loops (pfiber f)
A, B: pType f: A ->* B
pfiber (fmap loops f) <~> loops (pfiber f)
A, B: pType f: A ->* B
?f pt = pt
A, B: pType f: A ->* B
pfiber (fmap loops f) <~> loops (pfiber f)
A, B: pType f: A ->* B
pfiber (fmap loops f) <~> ?Goal
A, B: pType f: A ->* B
?Goal <~> loops (pfiber f)
A, B: pType f: A ->* B
pfiber (fmap loops f) <~>
{p : pt.1 = pt.1 & transport (funx : A => f x = pt) p pt.2 = pt.2}
A, B: pType f: A ->* B
{x : pt = pt & (point_eq f)^ @ (ap f x @ point_eq f) = pt} <~>
{p : pt = pt & transport (funx : A => f x = pt) p (point_eq f) = point_eq f}
A, B: pType f: A ->* B
foralla : pt = pt,
(funx : pt = pt => (point_eq f)^ @ (ap f x @ point_eq f) = pt) a <~>
(funp : pt = pt =>
transport (funx : A => f x = pt) p (point_eq f) = point_eq f) a
A, B: pType f: A ->* B p: pt = pt
(point_eq f)^ @ (ap f p @ point_eq f) = pt <~>
transport (funx : A => f x = pt) p (point_eq f) = point_eq f
A, B: pType f: A ->* B p: pt = pt
ap f p @ point_eq f = point_eq f @ pt <~>
transport (funx : A => f x = pt) p (point_eq f) = point_eq f
A, B: pType f: A ->* B p: pt = pt
ap f p @ point_eq f = point_eq f <~>
transport (funx : A => f x = pt) p (point_eq f) = point_eq f
A, B: pType f: A ->* B p: pt = pt
point_eq f = (ap f p)^ @ point_eq f <~>
transport (funx : A => f x = pt) p (point_eq f) = point_eq f
A, B: pType f: A ->* B p: pt = pt
(ap f p)^ @ point_eq f = point_eq f <~>
transport (funx : A => f x = pt) p (point_eq f) = point_eq f
A, B: pType f: A ->* B p: pt = pt
transport (funx : A => f x = pt) p (point_eq f) = (ap f p)^ @ point_eq f
apply transport_paths_Fl.
A, B: pType f: A ->* B
(fun (xyz : Type) (f0 : x <~> y) (g : y <~> z) => equiv_compose g f0)
(pfiber (fmap loops f))
{p : pt.1 = pt.1 & transport (funx : A => f x = pt) p pt.2 = pt.2}
(loops (pfiber f))
((equiv_functor_sigma_id
(funp : pt = pt =>
equiv_concat_l (transport_paths_Fl p (point_eq f)) (point_eq f)
oE equiv_path_inverse (point_eq f) ((ap f p)^ @ point_eq f)
oE equiv_moveL_Vp (point_eq f) (point_eq f) (ap f p)
oE equiv_concat_r (concat_p1 (point_eq f)) (ap f p @ point_eq f)
oE equiv_moveL_Mp pt (ap f p @ point_eq f) (point_eq f)
:
(funx : pt = pt => (point_eq f)^ @ (ap f x @ point_eq f) = pt) p <~>
(funp0 : pt = pt =>
transport (funx : A => f x = pt) p0 (point_eq f) = point_eq f) p)
:
hfiber (funp : pt = pt => (point_eq f)^ @ (ap f p @ point_eq f)) pt <~>
{p : pt = pt &
transport (funx : A => f x = pt) p (point_eq f) = point_eq f})
:
pfiber (fmap loops f) <~>
{p : pt.1 = pt.1 & transport (funx : A => f x = pt) p pt.2 = pt.2})
(equiv_path_sigma (funx : A => f x = pt) pt pt) pt =
pt
A, B: pType n: nat f: A ->* B IHn: pfiber (fmap (iterated_loops n) f) <~>* iterated_loops n (pfiber f)
pfiber (fmap (iterated_loops n) f) $<~>
(fix F (m : nat) : pType :=
match m with
| 0%nat => pfiber f
| m'.+1%nat => loops (F m')
end)
n
exact IHn.Defined.
A, B, C, D: pType f: A ->* B g: C ->* D h: A ->* C k: B ->* D p: k o* f ==* g o* h
pfiber f ->* pfiber g
A, B, C, D: pType f: A ->* B g: C ->* D h: A ->* C k: B ->* D p: k o* f ==* g o* h
pfiber f ->* pfiber g
A, B, C, D: pType f: A ->* B g: C ->* D h: A ->* C k: B ->* D p: k o* f ==* g o* h
pfiber f -> pfiber g
A, B, C, D: pType f: A ->* B g: C ->* D h: A ->* C k: B ->* D p: k o* f ==* g o* h
?f pt = pt
A, B, C, D: pType f: A ->* B g: C ->* D h: A ->* C k: B ->* D p: k o* f ==* g o* h
pfiber f -> pfiber g
A, B, C, D: pType f: A ->* B g: C ->* D h: A ->* C k: B ->* D p: k o* f ==* g o* h
hfiber f pt -> hfiber g pt
exact (functor_hfiber2 p (point_eq k)).(** A shorter proof of this component via [path_hfiber] is possible, but this [path_sigma'] form compiles faster. *)
A, B, C, D: pType f: A ->* B g: C ->* D h: A ->* C k: B ->* D p: k o* f ==* g o* h
(functor_hfiber2 p (point_eq k) : pfiber f -> pfiber g) pt = pt
A, B, C, D: pType f: A ->* B g: C ->* D h: A ->* C k: B ->* D p: k o* f ==* g o* h
h pt.1 = pt
A, B, C, D: pType f: A ->* B g: C ->* D h: A ->* C k: B ->* D p: k o* f ==* g o* h
transport (funx : C => g x = pt) ?p (((p pt.1)^ @ ap k pt.2) @ point_eq k) =
point_eq g
A, B, C, D: pType f: A ->* B g: C ->* D h: A ->* C k: B ->* D p: k o* f ==* g o* h
h pt.1 = pt
exact (point_eq h).
A, B, C, D: pType f: A ->* B g: C ->* D h: A ->* C k: B ->* D p: k o* f ==* g o* h
transport (funx : C => g x = pt) (point_eq h)
(((p pt.1)^ @ ap k pt.2) @ point_eq k) =
point_eq g
A, B, C, D: pType f: A ->* B g: C ->* D h: A ->* C k: B ->* D p: k o* f ==* g o* h
(ap g (point_eq h))^ @ (((p pt.1)^ @ ap k pt.2) @ point_eq k) = point_eq g
A, B, C, D: pType f: A ->* B g: C ->* D h: A ->* C k: B ->* D p: k o* f ==* g o* h
(ap g (point_eq h))^ @ ((p pt.1)^ @ (ap k pt.2 @ point_eq k)) = point_eq g
A, B, C, D: pType f: A ->* B g: C ->* D h: A ->* C k: B ->* D p: k o* f ==* g o* h
(ap g (point_eq h))^ @ ((p pt.1)^ @ (p pt @ dpoint_eq (g o* h))) = point_eq g
A, B, C, D: pType f: A ->* B g: C ->* D h: A ->* C k: B ->* D p: k o* f ==* g o* h
(ap g (point_eq h))^ @ dpoint_eq (g o* h) = point_eq g
napply concat_V_pp.Defined.Definitionpequiv_pfiber {ABCD}
{f : A ->* B} {g : C ->* D} (h : A <~>* C) (k : B <~>* D)
(p : k o* f ==* g o* h)
: pfiber f $<~> pfiber g
:= Build_pEquiv (functor_pfiber p) _.
A, B, C, D: pType f: A ->* B g: C ->* D h: A ->* C k: B ->* D p: k o* f ==* g o* h
h o* pfib f ==* pfib g o* functor_pfiber p
A, B, C, D: pType f: A ->* B g: C ->* D h: A ->* C k: B ->* D p: k o* f ==* g o* h
h o* pfib f ==* pfib g o* functor_pfiber p
A, B, C, D: pType f: A ->* B g: C ->* D h: A ->* C k: B ->* D p: k o* f ==* g o* h
h o* pfib f == pfib g o* functor_pfiber p
A, B, C, D: pType f: A ->* B g: C ->* D h: A ->* C k: B ->* D p: k o* f ==* g o* h
A, B, C, D: pType f: A ->* B g: C ->* D h: A ->* C k: B ->* D p: k o* f ==* g o* h
1 @
(ap pr1
(path_sigma' (funx : C => g x = pt) (point_eq h)
(transport_paths_Fl (point_eq h)
(((p pt)^ @ ap k (point_eq f)) @ point_eq k) @
(whiskerL (ap g (point_eq h))^
(concat_pp_p (p pt)^ (ap k (point_eq f)) (point_eq k)) @
(whiskerL (ap g (point_eq h))^ (whiskerL (p pt)^ (point_htpy p)^) @
(whiskerL (ap g (point_eq h))^
(concat_V_pp (p pt) (ap g (point_eq h) @ point_eq g)) @
concat_V_pp (ap g (point_eq h)) (point_eq g)))))) @
1) =
1 @ point_eq h
A, B, C, D: pType f: A ->* B g: C ->* D h: A ->* C k: B ->* D p: k o* f ==* g o* h
ap pr1
(path_sigma' (funx : C => g x = pt) (point_eq h)
(transport_paths_Fl (point_eq h)
(((p pt)^ @ ap k (point_eq f)) @ point_eq k) @
(whiskerL (ap g (point_eq h))^
(concat_pp_p (p pt)^ (ap k (point_eq f)) (point_eq k)) @
(whiskerL (ap g (point_eq h))^ (whiskerL (p pt)^ (point_htpy p)^) @
(whiskerL (ap g (point_eq h))^
(concat_V_pp (p pt) (ap g (point_eq h) @ point_eq g)) @
concat_V_pp (ap g (point_eq h)) (point_eq g)))))) =
point_eq h
exact (ap_pr1_path_sigma
(u := functor_hfiber2 p (point_eq k) (ispointed_fiber f))
(v := ispointed_fiber g) (point_eq h) _).Defined.Definitionsquare_pequiv_pfiber {ABCD}
{f : A ->* B} {g : C ->* D} (h : A <~>* C) (k : B <~>* D)
(p : k o* f ==* g o* h)
: h o* pfib f ==* pfib g o* pequiv_pfiber h k p
:= square_functor_pfiber p.(** The double fiber object is equivalent to loops on the base. *)
bydestruct p, q.Defined.(** [pfiber2_loops] commutes with the fiber functor of a square, for an arbitrary square of pointed maps. *)(** TODO: The second half of this proof and the Defined line are a bit slow. *)
A, B, C, D: pType f: A ->* B g: C ->* D h: A ->* C k: B ->* D p: k o* f ==* g o* h
pfiber2_loops g o* functor_pfiber (square_functor_pfiber p) ==*
fmap loops k o* pfiber2_loops f
A, B, C, D: pType f: A ->* B g: C ->* D h: A ->* C k: B ->* D p: k o* f ==* g o* h
pfiber2_loops g o* functor_pfiber (square_functor_pfiber p) ==*
fmap loops k o* pfiber2_loops f
A: Type point2: IsPointed A B, C, D: Type f: A -> B g: C -> D k: B -> D h: A -> C dpoint_eq1: g (h point2) = k (f point2) p: forallx : A, k (f x) = g (h x) H: p point2 = (ap k 1 @ 1) @ (ap g 1 @ dpoint_eq1)^
pfiber2_loops {| pointed_fun := g; dpoint_eq := dpoint_eq1 |}
o* functor_pfiber
(square_functor_pfiber {| pointed_fun := p; dpoint_eq := H |}) ==*
Build_pMap (funp0 : f point2 = f point2 => 1 @ (ap k p0 @ 1)) 1
o* Build_pMap
(funH0 : hfiber pr1 point2 =>
paths_ind_r point2
(fun (y : A) (_ : y = point2) =>
f y = f point2 -> f point2 = f point2)
idmap (H0.1).1 H0.2 (H0.1).2)
1
A: Type point2: IsPointed A B, C, D: Type f: A -> B g: C -> D k: B -> D h: A -> C dpoint_eq1: g (h point2) = k (f point2) p: forallx : A, k (f x) = g (h x) H: p point2 = 1 @ (1 @ dpoint_eq1)^
pfiber2_loops {| pointed_fun := g; dpoint_eq := dpoint_eq1 |}
o* functor_pfiber
(square_functor_pfiber {| pointed_fun := p; dpoint_eq := H |}) ==*
Build_pMap (funp0 : f point2 = f point2 => 1 @ (ap k p0 @ 1)) 1
o* Build_pMap
(funH0 : hfiber pr1 point2 =>
paths_ind_r point2
(fun (y : A) (_ : y = point2) =>
f y = f point2 -> f point2 = f point2)
idmap (H0.1).1 H0.2 (H0.1).2)
1
A: Type point2: IsPointed A B, C, D: Type f: A -> B g: C -> D k: B -> D h: A -> C dpoint_eq1: g (h point2) = k (f point2) p: forallx : A, k (f x) = g (h x) H: p point2 = 1 @ (1 @ dpoint_eq1)^
pfiber2_loops {| pointed_fun := g; dpoint_eq := dpoint_eq1 |}
o* functor_pfiber
(square_functor_pfiber {| pointed_fun := p; dpoint_eq := H |}) ==
Build_pMap (funp0 : f point2 = f point2 => 1 @ (ap k p0 @ 1)) 1
o* Build_pMap
(funH0 : hfiber pr1 point2 =>
paths_ind_r point2
(fun (y : A) (_ : y = point2) =>
f y = f point2 -> f point2 = f point2)
idmap (H0.1).1 H0.2 (H0.1).2)
1
A: Type point2: IsPointed A B, C, D: Type f: A -> B g: C -> D k: B -> D h: A -> C dpoint_eq1: g (h point2) = k (f point2) p: forallx : A, k (f x) = g (h x) H: p point2 = 1 @ (1 @ dpoint_eq1)^
?p pt =
dpoint_eq
(pfiber2_loops {| pointed_fun := g; dpoint_eq := dpoint_eq1 |}
o* functor_pfiber
(square_functor_pfiber {| pointed_fun := p; dpoint_eq := H |})) @
(dpoint_eq
(Build_pMap (funp0 : f point2 = f point2 => 1 @ (ap k p0 @ 1)) 1
o* Build_pMap
(funH0 : hfiber pr1 point2 =>
paths_ind_r point2
(fun (y : A) (_ : y = point2) =>
f y = f point2 -> f point2 = f point2)
idmap (H0.1).1 H0.2 (H0.1).2)
1))^
A: Type point2: IsPointed A B, C, D: Type f: A -> B g: C -> D k: B -> D h: A -> C dpoint_eq1: g (h point2) = k (f point2) p: forallx : A, k (f x) = g (h x) H: p point2 = 1 @ (1 @ dpoint_eq1)^
pfiber2_loops {| pointed_fun := g; dpoint_eq := dpoint_eq1 |}
o* functor_pfiber
(square_functor_pfiber {| pointed_fun := p; dpoint_eq := H |}) ==
Build_pMap (funp0 : f point2 = f point2 => 1 @ (ap k p0 @ 1)) 1
o* Build_pMap
(funH0 : hfiber pr1 point2 =>
paths_ind_r point2
(fun (y : A) (_ : y = point2) =>
f y = f point2 -> f point2 = f point2)
idmap (H0.1).1 H0.2 (H0.1).2)
1
A: Type point2: IsPointed A B, C, D: Type f: A -> B g: C -> D k: B -> D h: A -> C dpoint_eq1: g (h point2) = k (f point2) p: forallx : A, k (f x) = g (h x) H: p point2 = 1 @ (1 @ dpoint_eq1)^ c: [A, point2] w: {| pointed_fun := f; dpoint_eq := 1 |} c = pt v: pfib {| pointed_fun := f; dpoint_eq := 1 |} (c; w) = pt
(pfiber2_loops {| pointed_fun := g; dpoint_eq := dpoint_eq1 |}
o* functor_pfiber
(square_functor_pfiber {| pointed_fun := p; dpoint_eq := H |}))
((c; w); v) =
(Build_pMap (funp0 : f point2 = f point2 => 1 @ (ap k p0 @ 1)) 1
o* Build_pMap
(funH0 : hfiber pr1 point2 =>
paths_ind_r point2
(fun (y : A) (_ : y = point2) =>
f y = f point2 -> f point2 = f point2)
idmap (H0.1).1 H0.2 (H0.1).2)
1)
((c; w); v)
A: Type point2: IsPointed A B, C, D: Type f: A -> B g: C -> D k: B -> D h: A -> C dpoint_eq1: g (h point2) = k (f point2) p: forallx : A, k (f x) = g (h x) H: p point2 = 1 @ (1 @ dpoint_eq1)^ c: A w: f c = f point2 v: c = point2
(pfiber2_loops {| pointed_fun := g; dpoint_eq := dpoint_eq1 |}
o* functor_pfiber
(square_functor_pfiber {| pointed_fun := p; dpoint_eq := H |}))
((c; w); v) =
(Build_pMap (funp0 : f point2 = f point2 => 1 @ (ap k p0 @ 1)) 1
o* Build_pMap
(funH0 : hfiber pr1 point2 =>
paths_ind_r point2
(fun (y : A) (_ : y = point2) =>
f y = f point2 -> f point2 = f point2)
idmap (H0.1).1 H0.2 (H0.1).2)
1)
((c; w); v)
A, B, C, D: Type f: A -> B g: C -> D k: B -> D h: A -> C c: A w: f c = f c dpoint_eq1: g (h c) = k (f c) p: forallx : A, k (f x) = g (h x) H: p c = 1 @ (1 @ dpoint_eq1)^
(pfiber2_loops {| pointed_fun := g; dpoint_eq := dpoint_eq1 |}
o* functor_pfiber
(square_functor_pfiber {| pointed_fun := p; dpoint_eq := H |}))
((c; w); 1) =
(Build_pMap (funp0 : f c = f c => 1 @ (ap k p0 @ 1)) 1
o* Build_pMap
(funH0 : hfiber pr1 c =>
paths_ind_r c (fun (y : A) (_ : y = c) => f y = f c -> f c = f c)
idmap (H0.1).1 H0.2 (H0.1).2)
1)
((c; w); 1)
A, B, C, D: Type f: A -> B g: C -> D k: B -> D h: A -> C c: A w: f c = f c dpoint_eq1: g (h c) = k (f c) p: forallx : A, k (f x) = g (h x) H: p c = 1 @ (1 @ dpoint_eq1)^
((point_eq {| pointed_fun := g; dpoint_eq := dpoint_eq1 |})^ @
(ap {| pointed_fun := g; dpoint_eq := dpoint_eq1 |}
(((square_functor_pfiber {| pointed_fun := p; dpoint_eq := H |}
((c; w); 1).1)^ @
ap {| pointed_fun := h; dpoint_eq := 1 |} ((c; w); 1).2) @
point_eq {| pointed_fun := h; dpoint_eq := 1 |}))^) @
((({| pointed_fun := p; dpoint_eq := H |} (((c; w); 1).1).1)^ @
ap {| pointed_fun := k; dpoint_eq := 1 |} (((c; w); 1).1).2) @
point_eq {| pointed_fun := k; dpoint_eq := 1 |}) =
(Build_pMap (funp0 : f c = f c => 1 @ (ap k p0 @ 1)) 1
o* Build_pMap
(funH0 : hfiber pr1 c =>
paths_ind_r c (fun (y : A) (_ : y = c) => f y = f c -> f c = f c)
idmap (H0.1).1 H0.2 (H0.1).2)
1)
((c; w); 1)
A, B, C, D: Type f: A -> B g: C -> D k: B -> D h: A -> C c: A w: f c = f c dpoint_eq1: g (h c) = k (f c) p: forallx : A, k (f x) = g (h x) H: p c = 1 @ (1 @ dpoint_eq1)^
(dpoint_eq1^ @ 1) @ (((p c)^ @ ap k w) @ 1) = 1 @ (ap k w @ 1)
A, B, C, D: Type f: A -> B g: C -> D k: B -> D h: A -> C c: A w: f c = f c dpoint_eq1: g (h c) = k (f c)
(dpoint_eq1^ @ 1) @ (((1 @ (1 @ dpoint_eq1)^)^ @ ap k w) @ 1) =
1 @ (ap k w @ 1)
exact (pfiber2_loops_natural_functor_helper dpoint_eq1 (ap k w)).
A: Type point2: IsPointed A B, C, D: Type f: A -> B g: C -> D k: B -> D h: A -> C dpoint_eq1: g (h point2) = k (f point2) p: forallx : A, k (f x) = g (h x) H: p point2 = 1 @ (1 @ dpoint_eq1)^
((funx : pfiber (pfib {| pointed_fun := f; dpoint_eq := 1 |}) =>
(funproj1 : pfiber {| pointed_fun := f; dpoint_eq := 1 |} =>
(fun (c : [A, point2]) (w : {| pointed_fun := f; dpoint_eq := 1 |} c = pt)
(v : pfib {| pointed_fun := f; dpoint_eq := 1 |} (c; w) = pt) =>
match
v as p0 in (_ = a)
return
(forall (dpoint_eq0 : g (h a) = k (f a))
(H0 : p a = 1 @ (1 @ dpoint_eq0)^) (w0 : f c = f a),
(pfiber2_loops {| pointed_fun := g; dpoint_eq := dpoint_eq0 |}
o* functor_pfiber
(square_functor_pfiber {| pointed_fun := p; dpoint_eq := H0 |}))
((c; w0); p0) =
(Build_pMap (funp1 : f a = f a => 1 @ (ap k p1 @ 1)) 1
o* Build_pMap
(funH1 : hfiber pr1 a =>
paths_ind_r a
(fun (y : A) (_ : y = a) => f y = f a -> f a = f a) idmap
(H1.1).1 H1.2 (H1.1).2)
1)
((c; w0); p0))
with
| 1 =>
fun (dpoint_eq0 : g (h c) = k (f c))
(H0 : p c = 1 @ (1 @ dpoint_eq0)^) (w0 : f c = f c) =>
pfiber2_loops_beta {| pointed_fun := g; dpoint_eq := dpoint_eq0 |}
({| pointed_fun := h; dpoint_eq := 1 |} (((c; w0); 1).1).1)
((({| pointed_fun := p; dpoint_eq := H0 |} (((c; w0); 1).1).1)^ @
ap {| pointed_fun := k; dpoint_eq := 1 |} (((c; w0); 1).1).2) @
point_eq {| pointed_fun := k; dpoint_eq := 1 |})
(((square_functor_pfiber {| pointed_fun := p; dpoint_eq := H0 |}
((c; w0); 1).1)^ @
ap {| pointed_fun := h; dpoint_eq := 1 |} ((c; w0); 1).2) @
point_eq {| pointed_fun := h; dpoint_eq := 1 |}) @
((letp0 := H0^ inletp1 := p c inmatch
p0 in (_ = p2)
return
(p2 = 1 @ (1 @ dpoint_eq0)^ ->
(dpoint_eq0^ @ 1) @ ((p2^ @ ap k w0) @ 1) = 1 @ (ap k w0 @ 1))
with
| 1 =>
fun_ : 1 @ (1 @ dpoint_eq0)^ = 1 @ (1 @ dpoint_eq0)^ =>
pfiber2_loops_natural_functor_helper dpoint_eq0 (ap k w0)
end H0)
:
((point_eq {| pointed_fun := g; dpoint_eq := dpoint_eq0 |})^ @
(ap {| pointed_fun := g; dpoint_eq := dpoint_eq0 |}
(((square_functor_pfiber {| pointed_fun := p; dpoint_eq := H0 |}
((c; w0); 1).1)^ @
ap {| pointed_fun := h; dpoint_eq := 1 |} ((c; w0); 1).2) @
point_eq {| pointed_fun := h; dpoint_eq := 1 |}))^) @
((({| pointed_fun := p; dpoint_eq := H0 |} (((c; w0); 1).1).1)^ @
ap {| pointed_fun := k; dpoint_eq := 1 |} (((c; w0); 1).1).2) @
point_eq {| pointed_fun := k; dpoint_eq := 1 |}) =
(Build_pMap (funp0 : f c = f c => 1 @ (ap k p0 @ 1)) 1
o* Build_pMap
(funH1 : hfiber pr1 c =>
paths_ind_r c
(fun (y : A) (_ : y = c) => f y = f c -> f c = f c) idmap
(H1.1).1 H1.2 (H1.1).2)
1)
((c; w0); 1))
end dpoint_eq1 H w) proj1.1 proj1.2) x.1 x.2)
:
pfiber2_loops {| pointed_fun := g; dpoint_eq := dpoint_eq1 |}
o* functor_pfiber
(square_functor_pfiber {| pointed_fun := p; dpoint_eq := H |}) ==
Build_pMap (funp0 : f point2 = f point2 => 1 @ (ap k p0 @ 1)) 1
o* Build_pMap
(funH0 : hfiber pr1 point2 =>
paths_ind_r point2
(fun (y : A) (_ : y = point2) =>
f y = f point2 -> f point2 = f point2)
idmap (H0.1).1 H0.2 (H0.1).2)
1)
pt =
dpoint_eq
(pfiber2_loops {| pointed_fun := g; dpoint_eq := dpoint_eq1 |}
o* functor_pfiber
(square_functor_pfiber {| pointed_fun := p; dpoint_eq := H |})) @
(dpoint_eq
(Build_pMap (funp0 : f point2 = f point2 => 1 @ (ap k p0 @ 1)) 1
o* Build_pMap
(funH0 : hfiber pr1 point2 =>
paths_ind_r point2
(fun (y : A) (_ : y = point2) =>
f y = f point2 -> f point2 = f point2)
idmap (H0.1).1 H0.2 (H0.1).2)
1))^
A: Type point2: IsPointed A B, C, D: Type f: A -> B g: C -> D k: B -> D h: A -> C dpoint_eq1: g (h point2) = k (f point2) p: forallx : A, k (f x) = g (h x) H: p point2 = 1 @ (1 @ dpoint_eq1)^
pfiber2_loops_beta {| pointed_fun := g; dpoint_eq := dpoint_eq1 |}
(h point2) (((p point2)^ @ 1) @ 1) 1 @
match
H^ in (_ = p0)
return
(p0 = 1 @ (1 @ dpoint_eq1)^ -> (dpoint_eq1^ @ 1) @ ((p0^ @ 1) @ 1) = 1)
with
| 1 =>
fun_ : 1 @ (1 @ dpoint_eq1)^ = 1 @ (1 @ dpoint_eq1)^ =>
pfiber2_loops_natural_functor_helper dpoint_eq1 1end H =
(ap (pfiber2_loops {| pointed_fun := g; dpoint_eq := dpoint_eq1 |})
(path_sigma' (funx : hfiber g (k (f point2)) => x.1 = h point2)
(path_sigma' (funx : C => g x = k (f point2)) 1
(match
((p point2)^ @ 1) @ 1as p0 in (_ = b) return (p0 = 1 @ p0)
with
| 1 => 1end @
(whiskerL 1match
(p point2)^ as p0 in (_ = a) return ((p0 @ 1) @ 1 = p0 @ 1)
with
| 1 => 1end @
(whiskerL 1
(whiskerL (p point2)^
(moveR_pM (1 @ dpoint_eq1) 1 (p point2) H)^) @
(whiskerL 1 (concat_V_pp (p point2) (1 @ dpoint_eq1)) @
concat_V_pp 1 dpoint_eq1)))))
(transport_paths_Fl
(path_sigma' (funx : C => g x = k (f point2)) 1
(match
((p point2)^ @ 1) @ 1as p0 in (_ = b) return (p0 = 1 @ p0)
with
| 1 => 1end @
(whiskerL 1match
(p point2)^ as p0 in (_ = a) return ((p0 @ 1) @ 1 = p0 @ 1)
with
| 1 => 1end @
(whiskerL 1
(whiskerL (p point2)^
(moveR_pM (1 @ dpoint_eq1) 1 (p point2) H)^) @
(whiskerL 1 (concat_V_pp (p point2) (1 @ dpoint_eq1)) @
concat_V_pp 1 dpoint_eq1)))))
1 @
(1 @
(whiskerL
(ap pr1
(path_sigma' (funx : C => g x = k (f point2)) 1
(match
((p point2)^ @ 1) @ 1as p0 in (_ = b)
return (p0 = 1 @ p0)
with
| 1 => 1end @
(whiskerL 1match
(p point2)^ as p0 in (_ = a)
return ((p0 @ 1) @ 1 = p0 @ 1)
with
| 1 => 1end @
(whiskerL 1
(whiskerL (p point2)^
(moveR_pM (1 @ dpoint_eq1) 1 (p point2) H)^) @
(whiskerL 1 (concat_V_pp (p point2) (1 @ dpoint_eq1)) @
concat_V_pp 1 dpoint_eq1))))))^
(whiskerL 1
(moveR_pM
(ap pr1
(path_sigma' (funx : C => g x = k (f point2)) 1
(match
((p point2)^ @ 1) @ 1as p0 in (_ = b)
return (p0 = 1 @ p0)
with
| 1 => 1end @
(whiskerL 1match
(p point2)^ as p0 in (_ = a)
return ((p0 @ 1) @ 1 = p0 @ 1)
with
| 1 => 1end @
(whiskerL 1
(whiskerL (p point2)^
(moveR_pM (1 @ dpoint_eq1) 1 (p point2) H)^) @
(whiskerL 1
(concat_V_pp (p point2) (1 @ dpoint_eq1)) @
concat_V_pp 1 dpoint_eq1))))) @
1)
11
(moveL_pV
(ap pr1
(path_sigma' (funx : C => g x = k (f point2)) 1
(match
((p point2)^ @ 1) @ 1as p0 in (_ = b)
return (p0 = 1 @ p0)
with
| 1 => 1end @
(whiskerL 1match
(p point2)^ as p0 in (_ = a)
return ((p0 @ 1) @ 1 = p0 @ 1)
with
| 1 => 1end @
(whiskerL 1
(whiskerL (p point2)^
(moveR_pM (1 @ dpoint_eq1) 1 (p point2) H)^) @
(whiskerL 1
(concat_V_pp (p point2) (1 @ dpoint_eq1)) @
concat_V_pp 1 dpoint_eq1))))) @
1)
11
(1 @@
(concat_p1
(ap pr1
(path_sigma' (funx : C => g x = k (f point2)) 1
(match
((p point2)^ @ 1) @ 1as p0 in (_ = b)
return (p0 = 1 @ p0)
with
| 1 => 1end @
(whiskerL 1match
(p point2)^ as p0 in (_ = a)
return ((p0 @ 1) @ 1 = p0 @ 1)
with
| 1 => 1end @
(whiskerL 1
(whiskerL (p point2)^
(moveR_pM (1 @ dpoint_eq1) 1
(p point2) H)^) @
(whiskerL 1
(concat_V_pp (p point2) (1 @ dpoint_eq1)) @
concat_V_pp 1 dpoint_eq1)))))) @
matchmatch
((p point2)^ @ 1) @ 1as p0 in (_ = b)
return (p0 = 1 @ p0)
with
| 1 => 1end @
(whiskerL 1match
(p point2)^ as p0 in (_ = a)
return ((p0 @ 1) @ 1 = p0 @ 1)
with
| 1 => 1end @
(whiskerL 1
(whiskerL (p point2)^
(moveR_pM (1 @ dpoint_eq1) 1 (p point2) H)^) @
(whiskerL 1
(concat_V_pp (p point2) (1 @ dpoint_eq1)) @
concat_V_pp 1 dpoint_eq1)))
as p1 in (_ = p0)
return
((path_sigma_uncurried
(funx : C => g x = k (f point2))
(h point2; ((p point2)^ @ 1) @ 1)
(h point2; p0) (1; p1))
..1 = 1)
with
| 1 => 1end))))^) @
(whiskerL
(ap pr1
(path_sigma' (funx : C => g x = k (f point2)) 1
(match
((p point2)^ @ 1) @ 1as p0 in (_ = b)
return (p0 = 1 @ p0)
with
| 1 => 1end @
(whiskerL 1match
(p point2)^ as p0 in (_ = a)
return ((p0 @ 1) @ 1 = p0 @ 1)
with
| 1 => 1end @
(whiskerL 1
(whiskerL (p point2)^
(moveR_pM (1 @ dpoint_eq1) 1 (p point2) H)^) @
(whiskerL 1 (concat_V_pp (p point2) (1 @ dpoint_eq1)) @
concat_V_pp 1 dpoint_eq1))))))^
(concat_V_pp 1
(ap pr1
(path_sigma' (funx : C => g x = k (f point2)) 1
(match
((p point2)^ @ 1) @ 1as p0 in (_ = b)
return (p0 = 1 @ p0)
with
| 1 => 1end @
(whiskerL 1match
(p point2)^ as p0 in (_ = a)
return ((p0 @ 1) @ 1 = p0 @ 1)
with
| 1 => 1end @
(whiskerL 1
(whiskerL (p point2)^
(moveR_pM (1 @ dpoint_eq1) 1 (p point2) H)^) @
(whiskerL 1 (concat_V_pp (p point2) (1 @ dpoint_eq1)) @
concat_V_pp 1 dpoint_eq1))))) @
1)) @
match
ap pr1
(path_sigma' (funx : C => g x = k (f point2)) 1
(match
((p point2)^ @ 1) @ 1as p0 in (_ = b)
return (p0 = 1 @ p0)
with
| 1 => 1end @
(whiskerL 1match
(p point2)^ as p0 in (_ = a)
return ((p0 @ 1) @ 1 = p0 @ 1)
with
| 1 => 1end @
(whiskerL 1
(whiskerL (p point2)^
(moveR_pM (1 @ dpoint_eq1) 1 (p point2) H)^) @
(whiskerL 1 (concat_V_pp (p point2) (1 @ dpoint_eq1)) @
concat_V_pp 1 dpoint_eq1)))))
as p0 in (_ = a) return (p0^ @ (p0 @ 1) = 1)
with
| 1 => 1end))))) @
point_eq (pfiber2_loops {| pointed_fun := g; dpoint_eq := dpoint_eq1 |})) @
1
(* The next two lines are essentially [destruct H^], with [H] also replaced by [idpath]. *)
A: Type point2: IsPointed A B, C, D: Type f: A -> B g: C -> D k: B -> D h: A -> C dpoint_eq1: g (h point2) = k (f point2) p: forallx : A, k (f x) = g (h x)
forall (p0 : k (f point2) = g (h point2)) (H : p0 = 1 @ (1 @ dpoint_eq1)^),
pfiber2_loops_beta {| pointed_fun := g; dpoint_eq := dpoint_eq1 |}
(h point2) ((p0^ @ 1) @ 1) 1 @
match
H^ in (_ = p1)
return
(p1 = 1 @ (1 @ dpoint_eq1)^ -> (dpoint_eq1^ @ 1) @ ((p1^ @ 1) @ 1) = 1)
with
| 1 =>
fun_ : 1 @ (1 @ dpoint_eq1)^ = 1 @ (1 @ dpoint_eq1)^ =>
pfiber2_loops_natural_functor_helper dpoint_eq1 1end H =
(ap (pfiber2_loops {| pointed_fun := g; dpoint_eq := dpoint_eq1 |})
(path_sigma' (funx : hfiber g (k (f point2)) => x.1 = h point2)
(path_sigma' (funx : C => g x = k (f point2)) 1
(match (p0^ @ 1) @ 1as p1 in (_ = b) return (p1 = 1 @ p1) with
| 1 => 1end @
(whiskerL 1match p0^ as p1 in (_ = a) return ((p1 @ 1) @ 1 = p1 @ 1) with
| 1 => 1end @
(whiskerL 1 (whiskerL p0^ (moveR_pM (1 @ dpoint_eq1) 1 p0 H)^) @
(whiskerL 1 (concat_V_pp p0 (1 @ dpoint_eq1)) @
concat_V_pp 1 dpoint_eq1)))))
(transport_paths_Fl
(path_sigma' (funx : C => g x = k (f point2)) 1
(match (p0^ @ 1) @ 1as p1 in (_ = b) return (p1 = 1 @ p1) with
| 1 => 1end @
(whiskerL 1match
p0^ as p1 in (_ = a) return ((p1 @ 1) @ 1 = p1 @ 1)
with
| 1 => 1end @
(whiskerL 1 (whiskerL p0^ (moveR_pM (1 @ dpoint_eq1) 1 p0 H)^) @
(whiskerL 1 (concat_V_pp p0 (1 @ dpoint_eq1)) @
concat_V_pp 1 dpoint_eq1)))))
1 @
(1 @
(whiskerL
(ap pr1
(path_sigma' (funx : C => g x = k (f point2)) 1
(match
(p0^ @ 1) @ 1as p1 in (_ = b) return (p1 = 1 @ p1)
with
| 1 => 1end @
(whiskerL 1match
p0^ as p1 in (_ = a) return ((p1 @ 1) @ 1 = p1 @ 1)
with
| 1 => 1end @
(whiskerL 1
(whiskerL p0^ (moveR_pM (1 @ dpoint_eq1) 1 p0 H)^) @
(whiskerL 1 (concat_V_pp p0 (1 @ dpoint_eq1)) @
concat_V_pp 1 dpoint_eq1))))))^
(whiskerL 1
(moveR_pM
(ap pr1
(path_sigma' (funx : C => g x = k (f point2)) 1
(match
(p0^ @ 1) @ 1as p1 in (_ = b) return (p1 = 1 @ p1)
with
| 1 => 1end @
(whiskerL 1match
p0^ as p1 in (_ = a)
return ((p1 @ 1) @ 1 = p1 @ 1)
with
| 1 => 1end @
(whiskerL 1
(whiskerL p0^ (moveR_pM (1 @ dpoint_eq1) 1 p0 H)^) @
(whiskerL 1 (concat_V_pp p0 (1 @ dpoint_eq1)) @
concat_V_pp 1 dpoint_eq1))))) @
1)
11
(moveL_pV
(ap pr1
(path_sigma' (funx : C => g x = k (f point2)) 1
(match
(p0^ @ 1) @ 1as p1 in (_ = b)
return (p1 = 1 @ p1)
with
| 1 => 1end @
(whiskerL 1match
p0^ as p1 in (_ = a)
return ((p1 @ 1) @ 1 = p1 @ 1)
with
| 1 => 1end @
(whiskerL 1
(whiskerL p0^
(moveR_pM (1 @ dpoint_eq1) 1 p0 H)^) @
(whiskerL 1 (concat_V_pp p0 (1 @ dpoint_eq1)) @
concat_V_pp 1 dpoint_eq1))))) @
1)
11
(1 @@
(concat_p1
(ap pr1
(path_sigma' (funx : C => g x = k (f point2)) 1
(match
(p0^ @ 1) @ 1as p1 in (_ = b)
return (p1 = 1 @ p1)
with
| 1 => 1end @
(whiskerL 1match
p0^ as p1 in (_ = a)
return ((p1 @ 1) @ 1 = p1 @ 1)
with
| 1 => 1end @
(whiskerL 1
(whiskerL p0^
(moveR_pM (1 @ dpoint_eq1) 1 p0 H)^) @
(whiskerL 1
(concat_V_pp p0 (1 @ dpoint_eq1)) @
concat_V_pp 1 dpoint_eq1)))))) @
matchmatch
(p0^ @ 1) @ 1as p1 in (_ = b) return (p1 = 1 @ p1)
with
| 1 => 1end @
(whiskerL 1match
p0^ as p1 in (_ = a)
return ((p1 @ 1) @ 1 = p1 @ 1)
with
| 1 => 1end @
(whiskerL 1
(whiskerL p0^ (moveR_pM (1 @ dpoint_eq1) 1 p0 H)^) @
(whiskerL 1 (concat_V_pp p0 (1 @ dpoint_eq1)) @
concat_V_pp 1 dpoint_eq1)))
as p2 in (_ = p1)
return
((path_sigma_uncurried
(funx : C => g x = k (f point2))
(h point2; (p0^ @ 1) @ 1)
(h point2; p1) (1; p2))
..1 = 1)
with
| 1 => 1end))))^) @
(whiskerL
(ap pr1
(path_sigma' (funx : C => g x = k (f point2)) 1
(match
(p0^ @ 1) @ 1as p1 in (_ = b) return (p1 = 1 @ p1)
with
| 1 => 1end @
(whiskerL 1match
p0^ as p1 in (_ = a) return ((p1 @ 1) @ 1 = p1 @ 1)
with
| 1 => 1end @
(whiskerL 1
(whiskerL p0^ (moveR_pM (1 @ dpoint_eq1) 1 p0 H)^) @
(whiskerL 1 (concat_V_pp p0 (1 @ dpoint_eq1)) @
concat_V_pp 1 dpoint_eq1))))))^
(concat_V_pp 1
(ap pr1
(path_sigma' (funx : C => g x = k (f point2)) 1
(match
(p0^ @ 1) @ 1as p1 in (_ = b) return (p1 = 1 @ p1)
with
| 1 => 1end @
(whiskerL 1match
p0^ as p1 in (_ = a)
return ((p1 @ 1) @ 1 = p1 @ 1)
with
| 1 => 1end @
(whiskerL 1
(whiskerL p0^ (moveR_pM (1 @ dpoint_eq1) 1 p0 H)^) @
(whiskerL 1 (concat_V_pp p0 (1 @ dpoint_eq1)) @
concat_V_pp 1 dpoint_eq1))))) @
1)) @
match
ap pr1
(path_sigma' (funx : C => g x = k (f point2)) 1
(match
(p0^ @ 1) @ 1as p1 in (_ = b) return (p1 = 1 @ p1)
with
| 1 => 1end @
(whiskerL 1match
p0^ as p1 in (_ = a) return ((p1 @ 1) @ 1 = p1 @ 1)
with
| 1 => 1end @
(whiskerL 1
(whiskerL p0^ (moveR_pM (1 @ dpoint_eq1) 1 p0 H)^) @
(whiskerL 1 (concat_V_pp p0 (1 @ dpoint_eq1)) @
concat_V_pp 1 dpoint_eq1)))))
as p1 in (_ = a) return (p1^ @ (p1 @ 1) = 1)
with
| 1 => 1end))))) @
point_eq (pfiber2_loops {| pointed_fun := g; dpoint_eq := dpoint_eq1 |})) @
1
A: Type point2: IsPointed A B, C, D: Type f: A -> B g: C -> D k: B -> D h: A -> C dpoint_eq1: g (h point2) = k (f point2) p: forallx : A, k (f x) = g (h x)
pfiber2_loops_beta {| pointed_fun := g; dpoint_eq := dpoint_eq1 |}
(h point2) (((1 @ (1 @ dpoint_eq1)^)^ @ 1) @ 1) 1 @
match1^ in (_ = p0)
return
(p0 = 1 @ (1 @ dpoint_eq1)^ -> (dpoint_eq1^ @ 1) @ ((p0^ @ 1) @ 1) = 1)
with
| 1 =>
fun_ : 1 @ (1 @ dpoint_eq1)^ = 1 @ (1 @ dpoint_eq1)^ =>
pfiber2_loops_natural_functor_helper dpoint_eq1 1end1 =
(ap (pfiber2_loops {| pointed_fun := g; dpoint_eq := dpoint_eq1 |})
(path_sigma' (funx : hfiber g (k (f point2)) => x.1 = h point2)
(path_sigma' (funx : C => g x = k (f point2)) 1
(match
((1 @ (1 @ dpoint_eq1)^)^ @ 1) @ 1as p0 in (_ = b)
return (p0 = 1 @ p0)
with
| 1 => 1end @
(whiskerL 1match
(1 @ (1 @ dpoint_eq1)^)^ as p0 in (_ = a)
return ((p0 @ 1) @ 1 = p0 @ 1)
with
| 1 => 1end @
(whiskerL 1
(whiskerL (1 @ (1 @ dpoint_eq1)^)^
(moveR_pM (1 @ dpoint_eq1) 1 (1 @ (1 @ dpoint_eq1)^) 1)^) @
(whiskerL 1
(concat_V_pp (1 @ (1 @ dpoint_eq1)^) (1 @ dpoint_eq1)) @
concat_V_pp 1 dpoint_eq1)))))
(transport_paths_Fl
(path_sigma' (funx : C => g x = k (f point2)) 1
(match
((1 @ (1 @ dpoint_eq1)^)^ @ 1) @ 1as p0 in (_ = b)
return (p0 = 1 @ p0)
with
| 1 => 1end @
(whiskerL 1match
(1 @ (1 @ dpoint_eq1)^)^ as p0 in (_ = a)
return ((p0 @ 1) @ 1 = p0 @ 1)
with
| 1 => 1end @
(whiskerL 1
(whiskerL (1 @ (1 @ dpoint_eq1)^)^
(moveR_pM (1 @ dpoint_eq1) 1 (1 @ (1 @ dpoint_eq1)^) 1)^) @
(whiskerL 1
(concat_V_pp (1 @ (1 @ dpoint_eq1)^) (1 @ dpoint_eq1)) @
concat_V_pp 1 dpoint_eq1)))))
1 @
(1 @
(whiskerL
(ap pr1
(path_sigma' (funx : C => g x = k (f point2)) 1
(match
((1 @ (1 @ dpoint_eq1)^)^ @ 1) @ 1as p0 in (_ = b)
return (p0 = 1 @ p0)
with
| 1 => 1end @
(whiskerL 1match
(1 @ (1 @ dpoint_eq1)^)^ as p0 in (_ = a)
return ((p0 @ 1) @ 1 = p0 @ 1)
with
| 1 => 1end @
(whiskerL 1
(whiskerL (1 @ (1 @ dpoint_eq1)^)^
(moveR_pM (1 @ dpoint_eq1) 1
(1 @ (1 @ dpoint_eq1)^) 1)^) @
(whiskerL 1
(concat_V_pp (1 @ (1 @ dpoint_eq1)^) (1 @ dpoint_eq1)) @
concat_V_pp 1 dpoint_eq1))))))^
(whiskerL 1
(moveR_pM
(ap pr1
(path_sigma' (funx : C => g x = k (f point2)) 1
(match
((1 @ (1 @ dpoint_eq1)^)^ @ 1) @ 1as p0 in (_ = b)
return (p0 = 1 @ p0)
with
| 1 => 1end @
(whiskerL 1match
(1 @ (1 @ dpoint_eq1)^)^ as p0 in (_ = a)
return ((p0 @ 1) @ 1 = p0 @ 1)
with
| 1 => 1end @
(whiskerL 1
(whiskerL (1 @ (1 @ dpoint_eq1)^)^
(moveR_pM (1 @ dpoint_eq1) 1
(1 @ (1 @ dpoint_eq1)^) 1)^) @
(whiskerL 1
(concat_V_pp (1 @ (1 @ dpoint_eq1)^)
(1 @ dpoint_eq1)) @
concat_V_pp 1 dpoint_eq1))))) @
1)
11
(moveL_pV
(ap pr1
(path_sigma' (funx : C => g x = k (f point2)) 1
(match
((1 @ (1 @ dpoint_eq1)^)^ @ 1) @ 1as p0 in
(_ = b) return (p0 = 1 @ p0)
with
| 1 => 1end @
(whiskerL 1match
(1 @ (1 @ dpoint_eq1)^)^ as p0 in (_ = a)
return ((p0 @ 1) @ 1 = p0 @ 1)
with
| 1 => 1end @
(whiskerL 1
(whiskerL (1 @ (1 @ dpoint_eq1)^)^
(moveR_pM (1 @ dpoint_eq1) 1
(1 @ (1 @ dpoint_eq1)^) 1)^) @
(whiskerL 1
(concat_V_pp (1 @ (1 @ dpoint_eq1)^)
(1 @ dpoint_eq1)) @
concat_V_pp 1 dpoint_eq1))))) @
1)
11
(1 @@
(concat_p1
(ap pr1
(path_sigma' (funx : C => g x = k (f point2)) 1
(match
((1 @ (1 @ dpoint_eq1)^)^ @ 1) @ 1as p0 in
(_ = b) return (p0 = 1 @ p0)
with
| 1 => 1end @
(whiskerL 1match
(1 @ (1 @ dpoint_eq1)^)^ as p0 in (_ = a)
return ((p0 @ 1) @ 1 = p0 @ 1)
with
| 1 => 1end @
(whiskerL 1
(whiskerL (1 @ (1 @ dpoint_eq1)^)^
(moveR_pM (1 @ dpoint_eq1) 1
(1 @ (1 @ dpoint_eq1)^) 1)^) @
(whiskerL 1
(concat_V_pp (1 @ (1 @ dpoint_eq1)^)
(1 @ dpoint_eq1)) @
concat_V_pp 1 dpoint_eq1)))))) @
matchmatch
((1 @ (1 @ dpoint_eq1)^)^ @ 1) @ 1as p0 in (_ = b)
return (p0 = 1 @ p0)
with
| 1 => 1end @
(whiskerL 1match
(1 @ (1 @ dpoint_eq1)^)^ as p0 in (_ = a)
return ((p0 @ 1) @ 1 = p0 @ 1)
with
| 1 => 1end @
(whiskerL 1
(whiskerL (1 @ (1 @ dpoint_eq1)^)^
(moveR_pM (1 @ dpoint_eq1) 1
(1 @ (1 @ dpoint_eq1)^) 1)^) @
(whiskerL 1
(concat_V_pp (1 @ (1 @ dpoint_eq1)^)
(1 @ dpoint_eq1)) @
concat_V_pp 1 dpoint_eq1)))
as p1 in (_ = p0)
return
((path_sigma_uncurried
(funx : C => g x = k (f point2))
(h point2; ((1 @ (1 @ dpoint_eq1)^)^ @ 1) @ 1)
(h point2; p0) (1; p1))
..1 = 1)
with
| 1 => 1end))))^) @
(whiskerL
(ap pr1
(path_sigma' (funx : C => g x = k (f point2)) 1
(match
((1 @ (1 @ dpoint_eq1)^)^ @ 1) @ 1as p0 in (_ = b)
return (p0 = 1 @ p0)
with
| 1 => 1end @
(whiskerL 1match
(1 @ (1 @ dpoint_eq1)^)^ as p0 in (_ = a)
return ((p0 @ 1) @ 1 = p0 @ 1)
with
| 1 => 1end @
(whiskerL 1
(whiskerL (1 @ (1 @ dpoint_eq1)^)^
(moveR_pM (1 @ dpoint_eq1) 1
(1 @ (1 @ dpoint_eq1)^) 1)^) @
(whiskerL 1
(concat_V_pp (1 @ (1 @ dpoint_eq1)^) (1 @ dpoint_eq1)) @
concat_V_pp 1 dpoint_eq1))))))^
(concat_V_pp 1
(ap pr1
(path_sigma' (funx : C => g x = k (f point2)) 1
(match
((1 @ (1 @ dpoint_eq1)^)^ @ 1) @ 1as p0 in (_ = b)
return (p0 = 1 @ p0)
with
| 1 => 1end @
(whiskerL 1match
(1 @ (1 @ dpoint_eq1)^)^ as p0 in (_ = a)
return ((p0 @ 1) @ 1 = p0 @ 1)
with
| 1 => 1end @
(whiskerL 1
(whiskerL (1 @ (1 @ dpoint_eq1)^)^
(moveR_pM (1 @ dpoint_eq1) 1
(1 @ (1 @ dpoint_eq1)^) 1)^) @
(whiskerL 1
(concat_V_pp (1 @ (1 @ dpoint_eq1)^)
(1 @ dpoint_eq1)) @
concat_V_pp 1 dpoint_eq1))))) @
1)) @
match
ap pr1
(path_sigma' (funx : C => g x = k (f point2)) 1
(match
((1 @ (1 @ dpoint_eq1)^)^ @ 1) @ 1as p0 in (_ = b)
return (p0 = 1 @ p0)
with
| 1 => 1end @
(whiskerL 1match
(1 @ (1 @ dpoint_eq1)^)^ as p0 in (_ = a)
return ((p0 @ 1) @ 1 = p0 @ 1)
with
| 1 => 1end @
(whiskerL 1
(whiskerL (1 @ (1 @ dpoint_eq1)^)^
(moveR_pM (1 @ dpoint_eq1) 1
(1 @ (1 @ dpoint_eq1)^) 1)^) @
(whiskerL 1
(concat_V_pp (1 @ (1 @ dpoint_eq1)^) (1 @ dpoint_eq1)) @
concat_V_pp 1 dpoint_eq1)))))
as p0 in (_ = a) return (p0^ @ (p0 @ 1) = 1)
with
| 1 => 1end))))) @
point_eq (pfiber2_loops {| pointed_fun := g; dpoint_eq := dpoint_eq1 |})) @
1
A: Type point2: IsPointed A B, C, D: Type f: A -> B g: C -> D k: B -> D h: A -> C p: forallx : A, k (f x) = g (h x)
pfiber2_loops_beta {| pointed_fun := g; dpoint_eq := 1 |}
(h point2) (((1 @ (1 @ 1)^)^ @ 1) @ 1) 1 @
match1^ in (_ = p0) return (p0 = 1 @ (1 @ 1)^ -> (1^ @ 1) @ ((p0^ @ 1) @ 1) = 1)
with
| 1 =>
fun_ : 1 @ (1 @ 1)^ = 1 @ (1 @ 1)^ =>
pfiber2_loops_natural_functor_helper 11end1 =
(ap (pfiber2_loops {| pointed_fun := g; dpoint_eq := 1 |})
(path_sigma' (funx : hfiber g (g (h point2)) => x.1 = h point2)
(path_sigma' (funx : C => g x = g (h point2)) 1
(match
((1 @ (1 @ 1)^)^ @ 1) @ 1as p0 in (_ = b) return (p0 = 1 @ p0)
with
| 1 => 1end @
(whiskerL 1match
(1 @ (1 @ 1)^)^ as p0 in (_ = a)
return ((p0 @ 1) @ 1 = p0 @ 1)
with
| 1 => 1end @
(whiskerL 1
(whiskerL (1 @ (1 @ 1)^)^
(moveR_pM (1 @ 1) 1 (1 @ (1 @ 1)^) 1)^) @
(whiskerL 1 (concat_V_pp (1 @ (1 @ 1)^) (1 @ 1)) @
concat_V_pp 11)))))
(transport_paths_Fl
(path_sigma' (funx : C => g x = g (h point2)) 1
(match
((1 @ (1 @ 1)^)^ @ 1) @ 1as p0 in (_ = b)
return (p0 = 1 @ p0)
with
| 1 => 1end @
(whiskerL 1match
(1 @ (1 @ 1)^)^ as p0 in (_ = a)
return ((p0 @ 1) @ 1 = p0 @ 1)
with
| 1 => 1end @
(whiskerL 1
(whiskerL (1 @ (1 @ 1)^)^
(moveR_pM (1 @ 1) 1 (1 @ (1 @ 1)^) 1)^) @
(whiskerL 1 (concat_V_pp (1 @ (1 @ 1)^) (1 @ 1)) @
concat_V_pp 11)))))
1 @
(1 @
(whiskerL
(ap pr1
(path_sigma' (funx : C => g x = g (h point2)) 1
(match
((1 @ (1 @ 1)^)^ @ 1) @ 1as p0 in (_ = b)
return (p0 = 1 @ p0)
with
| 1 => 1end @
(whiskerL 1match
(1 @ (1 @ 1)^)^ as p0 in (_ = a)
return ((p0 @ 1) @ 1 = p0 @ 1)
with
| 1 => 1end @
(whiskerL 1
(whiskerL (1 @ (1 @ 1)^)^
(moveR_pM (1 @ 1) 1 (1 @ (1 @ 1)^) 1)^) @
(whiskerL 1 (concat_V_pp (1 @ (1 @ 1)^) (1 @ 1)) @
concat_V_pp 11))))))^
(whiskerL 1
(moveR_pM
(ap pr1
(path_sigma' (funx : C => g x = g (h point2)) 1
(match
((1 @ (1 @ 1)^)^ @ 1) @ 1as p0 in (_ = b)
return (p0 = 1 @ p0)
with
| 1 => 1end @
(whiskerL 1match
(1 @ (1 @ 1)^)^ as p0 in (_ = a)
return ((p0 @ 1) @ 1 = p0 @ 1)
with
| 1 => 1end @
(whiskerL 1
(whiskerL (1 @ (1 @ 1)^)^
(moveR_pM (1 @ 1) 1 (1 @ (1 @ 1)^) 1)^) @
(whiskerL 1 (concat_V_pp (1 @ (1 @ 1)^) (1 @ 1)) @
concat_V_pp 11))))) @
1)
11
(moveL_pV
(ap pr1
(path_sigma' (funx : C => g x = g (h point2)) 1
(match
((1 @ (1 @ 1)^)^ @ 1) @ 1as p0 in (_ = b)
return (p0 = 1 @ p0)
with
| 1 => 1end @
(whiskerL 1match
(1 @ (1 @ 1)^)^ as p0 in (_ = a)
return ((p0 @ 1) @ 1 = p0 @ 1)
with
| 1 => 1end @
(whiskerL 1
(whiskerL (1 @ (1 @ 1)^)^
(moveR_pM (1 @ 1) 1 (1 @ (1 @ 1)^) 1)^) @
(whiskerL 1 (concat_V_pp (1 @ (1 @ 1)^) (1 @ 1)) @
concat_V_pp 11))))) @
1)
11
(1 @@
(concat_p1
(ap pr1
(path_sigma' (funx : C => g x = g (h point2)) 1
(match
((1 @ (1 @ 1)^)^ @ 1) @ 1as p0 in (_ = b)
return (p0 = 1 @ p0)
with
| 1 => 1end @
(whiskerL 1match
(1 @ (1 @ 1)^)^ as p0 in (_ = a)
return ((p0 @ 1) @ 1 = p0 @ 1)
with
| 1 => 1end @
(whiskerL 1
(whiskerL (1 @ (1 @ 1)^)^
(moveR_pM (1 @ 1) 1 (1 @ (1 @ 1)^) 1)^) @
(whiskerL 1
(concat_V_pp (1 @ (1 @ 1)^) (1 @ 1)) @
concat_V_pp 11)))))) @
matchmatch
((1 @ (1 @ 1)^)^ @ 1) @ 1as p0 in (_ = b)
return (p0 = 1 @ p0)
with
| 1 => 1end @
(whiskerL 1match
(1 @ (1 @ 1)^)^ as p0 in (_ = a)
return ((p0 @ 1) @ 1 = p0 @ 1)
with
| 1 => 1end @
(whiskerL 1
(whiskerL (1 @ (1 @ 1)^)^
(moveR_pM (1 @ 1) 1 (1 @ (1 @ 1)^) 1)^) @
(whiskerL 1 (concat_V_pp (1 @ (1 @ 1)^) (1 @ 1)) @
concat_V_pp 11)))
as p1 in (_ = p0)
return
((path_sigma_uncurried
(funx : C => g x = g (h point2))
(h point2; ((1 @ (1 @ 1)^)^ @ 1) @ 1)
(h point2; p0) (1; p1))
..1 = 1)
with
| 1 => 1end))))^) @
(whiskerL
(ap pr1
(path_sigma' (funx : C => g x = g (h point2)) 1
(match
((1 @ (1 @ 1)^)^ @ 1) @ 1as p0 in (_ = b)
return (p0 = 1 @ p0)
with
| 1 => 1end @
(whiskerL 1match
(1 @ (1 @ 1)^)^ as p0 in (_ = a)
return ((p0 @ 1) @ 1 = p0 @ 1)
with
| 1 => 1end @
(whiskerL 1
(whiskerL (1 @ (1 @ 1)^)^
(moveR_pM (1 @ 1) 1 (1 @ (1 @ 1)^) 1)^) @
(whiskerL 1 (concat_V_pp (1 @ (1 @ 1)^) (1 @ 1)) @
concat_V_pp 11))))))^
(concat_V_pp 1
(ap pr1
(path_sigma' (funx : C => g x = g (h point2)) 1
(match
((1 @ (1 @ 1)^)^ @ 1) @ 1as p0 in (_ = b)
return (p0 = 1 @ p0)
with
| 1 => 1end @
(whiskerL 1match
(1 @ (1 @ 1)^)^ as p0 in (_ = a)
return ((p0 @ 1) @ 1 = p0 @ 1)
with
| 1 => 1end @
(whiskerL 1
(whiskerL (1 @ (1 @ 1)^)^
(moveR_pM (1 @ 1) 1 (1 @ (1 @ 1)^) 1)^) @
(whiskerL 1 (concat_V_pp (1 @ (1 @ 1)^) (1 @ 1)) @
concat_V_pp 11))))) @
1)) @
match
ap pr1
(path_sigma' (funx : C => g x = g (h point2)) 1
(match
((1 @ (1 @ 1)^)^ @ 1) @ 1as p0 in (_ = b)
return (p0 = 1 @ p0)
with
| 1 => 1end @
(whiskerL 1match
(1 @ (1 @ 1)^)^ as p0 in (_ = a)
return ((p0 @ 1) @ 1 = p0 @ 1)
with
| 1 => 1end @
(whiskerL 1
(whiskerL (1 @ (1 @ 1)^)^
(moveR_pM (1 @ 1) 1 (1 @ (1 @ 1)^) 1)^) @
(whiskerL 1 (concat_V_pp (1 @ (1 @ 1)^) (1 @ 1)) @
concat_V_pp 11)))))
as p0 in (_ = a) return (p0^ @ (p0 @ 1) = 1)
with
| 1 => 1end))))) @
point_eq (pfiber2_loops {| pointed_fun := g; dpoint_eq := 1 |})) @
1
reflexivity.Defined.(** The same for an equivalence square; the underlying double-fiber map is [functor_pfiber] of the same square. *)Definitionpfiber2_loops_natural {ABCD : pType}
{f : A ->* B} {g : C ->* D} (h : A <~>* C) (k : B <~>* D)
(p : k o* f ==* g o* h)
: pfiber2_loops g
o* pequiv_pfiber (pequiv_pfiber h k p) h (square_pequiv_pfiber h k p)
==* fmap loops k o* pfiber2_loops f
:= pfiber2_loops_natural_functor p.