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.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.(** The double fiber object is equivalent to loops on the base. *)
equiv_adjointify
(funH : pfiber
(pfib
{| pointed_fun := f; dpoint_eq := 1 |})
=>
(funH0 : hfiber f (f pt) =>
(fun (H1 : A) (H2 : f H1 = f pt) (H3 : H1 = pt) =>
paths_ind_r pt
(fun (y : A) (_ : y = pt) =>
f y = f pt -> loops [B, f pt])
(funH4 : f pt = f pt => H4 : loops [B, f pt])
H1 H3 H2) H0.1 H0.2) H.1 H.2)
(funH : loops [B, f pt] =>
((letH0 := pt in H0;
H : f (letH0 := pt in H0) = f pt)
:
hfiber f (f pt);
1
:
((letH0 := pt in H0;
H : f (letH0 := pt in H0) = f pt)
:
hfiber f (f pt)).1 = pt)
:
pfiber
(pfib {| pointed_fun := f; dpoint_eq := 1 |}))
((funH : loops [B, f pt] => 1)
:
(funH : pfiber
(pfib
{| pointed_fun := f; dpoint_eq := 1 |})
=>
(funH0 : hfiber f (f pt) =>
(fun (H1 : A) (H2 : f H1 = f pt) (H3 : H1 = pt)
=>
paths_ind_r pt
(fun (y : A) (_ : y = pt) =>
f y = f pt -> loops [B, f pt])
(funH4 : f pt = f pt => H4 : loops [B, f pt])
H1 H3 H2) H0.1 H0.2) H.1 H.2)
o (funH : loops [B, f pt] =>
((letH0 := pt in H0;
H : f (letH0 := pt in H0) = f pt)
:
hfiber f (f pt);
1
:
((letH0 := pt in H0;
H : f (letH0 := pt in H0) = f pt)
:
hfiber f (f pt)).1 = pt)
:
pfiber
(pfib {| pointed_fun := f; dpoint_eq := 1 |})) ==
idmap)
((funH : pfiber
(pfib
{| pointed_fun := f; dpoint_eq := 1 |})
=>
(funH0 : hfiber f (f pt) =>
(fun (H1 : A) (H2 : f H1 = f pt) (H3 : H1 = pt)
=>
paths_ind_r pt
(fun (y : A) (p : y = pt) =>
forallH4 : f y = f pt,
((letH5 := pt in H5;
paths_ind_r pt
(fun (y0 : A) (_ : y0 = pt) =>
f y0 = f pt -> loops [B, f pt]) idmap y p
H4); 1) = ((y; H4); p))
(funH4 : f pt = f pt => 1) H1 H3 H2) H0.1
H0.2) H.1 H.2)
:
(funH : loops [B, f pt] =>
((letH0 := pt in H0;
H : f (letH0 := pt in H0) = f pt)
:
hfiber f (f pt);
1
:
((letH0 := pt in H0;
H : f (letH0 := pt in H0) = f pt)
:
hfiber f (f pt)).1 = pt)
:
pfiber
(pfib {| pointed_fun := f; dpoint_eq := 1 |}))
o (funH : pfiber
(pfib
{|
pointed_fun := f; dpoint_eq := 1
|}) =>
(funH0 : hfiber f (f pt) =>
(fun (H1 : A) (H2 : f H1 = f pt) (H3 : H1 = pt)
=>
paths_ind_r pt
(fun (y : A) (_ : y = pt) =>
f y = f pt -> loops [B, f pt])
(funH4 : f pt = f pt =>
H4 : loops [B, f pt]) H1 H3 H2) H0.1 H0.2)
H.1 H.2) == idmap) pt = pt
reflexivity.Defined.
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) (f : x <~> y) (g : y <~> z) =>
equiv_compose g f) (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, 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
(functor_hfiber2 p (point_eq k) pt).1 = pt.1
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) pt).2 = ap g ?q @ pt.2
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) pt).1 = pt.1
apply point_eq.
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) pt).2 =
ap g (point_eq h) @ pt.2
A, B, C, D: pType f: A ->* B g: C ->* D h: A ->* C k: B ->* D p: k o* f ==* g o* h
(p pt.1)^ @ (ap k pt.2 @ point_eq k) =
ap g (point_eq h) @ pt.2
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 k pt.2 @ point_eq k =
p pt.1 @ (ap g (point_eq h) @ pt.2)
exact (point_htpy p)^.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_uncurried (funx : C => g x = pt)
(functor_hfiber2 p (point_eq k)
(ispointed_fiber f)) (ispointed_fiber g)
(point_eq h;
transport_paths_Fl (point_eq h)
(((p pt)^ @ ap k (point_eq f)) @ point_eq k) @
moveR_Vp
(((p pt)^ @ ap k (point_eq f)) @ point_eq k)
(point_eq g) (ap g (point_eq h))
(concat_pp_p (p pt)^ (ap k (point_eq f))
(point_eq k) @
moveR_Vp (ap k (point_eq f) @ point_eq k)
(ap g (point_eq h) @ point_eq g) (p pt)
(point_htpy p)^))) @ 1) = 1 @ point_eq h
abstract (rewrite ap_pr1_path_sigma, concat_p1; reflexivity).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 triple-fiber functor is equal to the negative of the loop space functor. *)
A, B: pType f: A ->* B
pfiber2_loops f o* pfib (pfib (pfib f)) ==*
fmap loops f
o* (loops_inv A o* pfiber2_loops (pfib f))
A, B: pType f: A ->* B
pfiber2_loops f o* pfib (pfib (pfib f)) ==*
fmap loops f
o* (loops_inv A o* pfiber2_loops (pfib f))