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 Pointed.Core.LocalOpen Scope pointed_scope.(** ** Trivially pointed maps *)(** Not infrequently we have a map between two unpointed types and want to consider it as a pointed map that trivially respects some given point in the domain. *)Definitionpmap_from_point {AB : Type} (f : A -> B) (a : A)
: [A, a] ->* [B, f a]
:= Build_pMap f 1%path.(** A variant of [pmap_from_point] where the domain is pointed, but the codomain is not. *)Definitionpmap_from_pointed {A : pType} {B : Type} (f : A -> B)
: A ->* [B, f (point A)]
:= Build_pMap f 1%path.(** The same, for a dependent pointed map. *)Definitionpforall_from_pointed {A : pType} {B : A -> Type} (f : forallx, B x)
: pForall A (Build_pFam B (f (point A)))
:= Build_pForall A (Build_pFam B (f (point A))) f 1%path.(* precomposing the zero map is the zero map *)
apply pmap_punit_pconst.Defined.(* We note that the inverse of [path_pmap] computes definitionally on reflexivity, and hence [path_pmap] itself computes typally so. *)Definitionequiv_inverse_path_pmap_1 `{Funext} {A B} {f : A ->* B}
: (equiv_path_pforall f f)^-1%equiv 1%path = reflexivity f
:= 1.(** If we have a fiberwise pointed map, with a variable as codomain, this is an induction principle that allows us to assume it respects all basepoints by reflexivity*)
H0: Funext A: Type B: A -> pType P: forallC : A -> pType,
(foralla : A, B a ->* C a) -> Type H: forall (C : A -> Type)
(g : foralla : A, B a -> C a),
P (funa : A => [C a, g a pt])
(funa : A => pmap_from_pointed (g a))
forall (C : A -> pType)
(g : foralla : A, B a ->* C a), P C g
H0: Funext A: Type B: A -> pType P: forallC : A -> pType,
(foralla : A, B a ->* C a) -> Type H: forall (C : A -> Type)
(g : foralla : A, B a -> C a),
P (funa : A => [C a, g a pt])
(funa : A => pmap_from_pointed (g a))
forall (C : A -> pType)
(g : foralla : A, B a ->* C a), P C g
H0: Funext A: Type B: A -> pType P: forallC : A -> pType,
(foralla : A, B a ->* C a) -> Type H: forall (C : A -> Type)
(g : foralla : A, B a -> C a),
P (funa : A => [C a, g a pt])
(funa : A => pmap_from_pointed (g a)) C: {f : A -> Type & forallx : A, f x}
forallg : foralla : A,
B a ->*
(equiv_functor_arrow' 1 issig_ptype
oE equiv_sig_coind (fun_ : A => Type)
(fun_ : A => idmap)) C a,
P
((equiv_functor_arrow' 1 issig_ptype
oE equiv_sig_coind (fun_ : A => Type)
(fun_ : A => idmap)) C) g
H0: Funext A: Type B: A -> pType P: forallC : A -> pType,
(foralla : A, B a ->* C a) -> Type H: forall (C : A -> Type)
(g : foralla : A, B a -> C a),
P (funa : A => [C a, g a pt])
(funa : A => pmap_from_pointed (g a)) C: A -> Type c0: forallx : A, C x
forallg : foralla : A,
B a ->*
(equiv_functor_arrow' 1 issig_ptype
oE equiv_sig_coind (fun_ : A => Type)
(fun_ : A => idmap)) (C; c0) a,
P
((equiv_functor_arrow' 1 issig_ptype
oE equiv_sig_coind (fun_ : A => Type)
(fun_ : A => idmap)) (C; c0)) g
H0: Funext A: Type B: A -> pType P: forallC : A -> pType,
(foralla : A, B a ->* C a) -> Type H: forall (C : A -> Type)
(g : foralla : A, B a -> C a),
P (funa : A => [C a, g a pt])
(funa : A => pmap_from_pointed (g a)) C: A -> Type c0: forallx : A, C x g: {f : forallx : A, B x -> [C x, c0 x] &
forallx : A, f x pt = pt}
P
((equiv_functor_arrow' 1 issig_ptype
oE equiv_sig_coind (fun_ : A => Type)
(fun_ : A => idmap)) (C; c0))
((equiv_functor_forall_id
(funa : A => issig_pmap (B a) [C a, c0 a])
oE equiv_sig_coind
(funx : A => B x -> [C x, c0 x])
(fun (x : A) (f : B x -> [C x, c0 x]) =>
f pt = pt)) g)
H0: Funext A: Type B: A -> pType P: forallC : A -> pType,
(foralla : A, B a ->* C a) -> Type H: forall (C : A -> Type)
(g : foralla : A, B a -> C a),
P (funa : A => [C a, g a pt])
(funa : A => pmap_from_pointed (g a)) C: A -> Type c0: forallx : A, C x g: {f : forallx : A, B x -> C x &
forallx : A, f x pt = pt}
P
(functor_forall idmap
(fun (_ : A) (u : {X : Type & X}) => [u.1, u.2])
(sig_coind_uncurried (fun_ : A => idmap) (C; c0)))
(functor_forall idmap
(fun (a : A) (u : {f : B a -> C a & f pt = pt})
=> {| pointed_fun := u.1; dpoint_eq := u.2 |})
(sig_coind_uncurried
(fun (x : A) (f : B x -> C x) => f pt = pt) g))
H0: Funext A: Type B: A -> pType P: forallC : A -> pType,
(foralla : A, B a ->* C a) -> Type H: forall (C : A -> Type)
(g : foralla : A, B a -> C a),
P (funa : A => [C a, g a pt])
(funa : A => pmap_from_pointed (g a)) C: A -> Type c0: forallx : A, C x g: forallx : A, B x -> C x g0: forallx : A, g x pt = pt
P
(functor_forall idmap
(fun (_ : A) (u : {X : Type & X}) => [u.1, u.2])
(sig_coind_uncurried (fun_ : A => idmap) (C; c0)))
(functor_forall idmap
(fun (a : A) (u : {f : B a -> C a & f pt = pt})
=> {| pointed_fun := u.1; dpoint_eq := u.2 |})
(sig_coind_uncurried
(fun (x : A) (f : B x -> C x) => f pt = pt)
(g; g0)))
H0: Funext A: Type B: A -> pType P: forallC : A -> pType,
(foralla : A, B a ->* C a) -> Type H: forall (C : A -> Type)
(g : foralla : A, B a -> C a),
P (funa : A => [C a, g a pt])
(funa : A => pmap_from_pointed (g a)) C: A -> Type c0: forallx : A, C x g: forallx : A, B x -> C x g0: forallx : A, g x (ispointed_type (B x)) = c0 x
P
(functor_forall idmap
(fun (_ : A) (u : {X : Type & X}) => [u.1, u.2])
(sig_coind_uncurried (fun_ : A => idmap) (C; c0)))
(functor_forall idmap
(fun (a : A) (u : {f : B a -> C a & f pt = pt})
=> {| pointed_fun := u.1; dpoint_eq := u.2 |})
(sig_coind_uncurried
(fun (x : A) (f : B x -> C x) => f pt = pt)
(g; g0)))
H0: Funext A: Type B: A -> pType P: forallC : A -> pType,
(foralla : A, B a ->* C a) -> Type H: forall (C : A -> Type)
(g : foralla : A, B a -> C a),
P (funa : A => [C a, g a pt])
(funa : A => pmap_from_pointed (g a)) C: A -> Type c0: forallx : A, C x g: forallx : A, B x -> C x g0: forallx : A, g x (ispointed_type (B x)) = c0 x
H0: Funext A: Type B: A -> pType P: forallC : A -> pType,
(foralla : A, B a ->* C a) -> Type H: forall (C : A -> Type)
(g : foralla : A, B a -> C a),
P (funa : A => [C a, g a pt])
(funa : A => pmap_from_pointed (g a)) C: A -> Type c0: forallx : A, C x g: forallx : A, B x -> C x g0: forallx : A, g x (ispointed_type (B x)) = c0 x
P (funb : A => [C b, c0 b])
(funb : A =>
{| pointed_fun := g b; dpoint_eq := g0 b |})
(* now we need to apply path induction on the homotopy g0 *)
H0: Funext A: Type B: A -> pType P: forallC : A -> pType,
(foralla : A, B a ->* C a) -> Type H: forall (C : A -> Type)
(g : foralla : A, B a -> C a),
P (funa : A => [C a, g a pt])
(funa : A => pmap_from_pointed (g a)) C: A -> Type c0: forallx : A, C x g: forallx : A, B x -> C x g0: forallx : A, g x (ispointed_type (B x)) = c0 x p:= path_forall
(funx : A => g x (ispointed_type (B x))) c0 g0: (funx : A => g x (ispointed_type (B x))) = c0
P (funb : A => [C b, c0 b])
(funb : A =>
{| pointed_fun := g b; dpoint_eq := g0 b |})
H0: Funext A: Type B: A -> pType P: forallC : A -> pType,
(foralla : A, B a ->* C a) -> Type H: forall (C : A -> Type)
(g : foralla : A, B a -> C a),
P (funa : A => [C a, g a pt])
(funa : A => pmap_from_pointed (g a)) C: A -> Type c0: forallx : A, C x g: forallx : A, B x -> C x g0: forallx : A, g x (ispointed_type (B x)) = c0 x p:= path_forall
(funx : A => g x (ispointed_type (B x))) c0 g0: (funx : A => g x (ispointed_type (B x))) = c0
p =
path_forall (funx : A => g x (ispointed_type (B x)))
c0 g0
H0: Funext A: Type B: A -> pType P: forallC : A -> pType,
(foralla : A, B a ->* C a) -> Type H: forall (C : A -> Type)
(g : foralla : A, B a -> C a),
P (funa : A => [C a, g a pt])
(funa : A => pmap_from_pointed (g a)) C: A -> Type c0: forallx : A, C x g: forallx : A, B x -> C x g0: forallx : A, g x (ispointed_type (B x)) = c0 x p:= path_forall
(funx : A => g x (ispointed_type (B x))) c0 g0: (funx : A => g x (ispointed_type (B x))) = c0 X: p =
path_forall
(funx : A => g x (ispointed_type (B x))) c0 g0
P (funb : A => [C b, c0 b])
(funb : A =>
{| pointed_fun := g b; dpoint_eq := g0 b |})
H0: Funext A: Type B: A -> pType P: forallC : A -> pType,
(foralla : A, B a ->* C a) -> Type H: forall (C : A -> Type)
(g : foralla : A, B a -> C a),
P (funa : A => [C a, g a pt])
(funa : A => pmap_from_pointed (g a)) C: A -> Type c0: forallx : A, C x g: forallx : A, B x -> C x g0: forallx : A, g x (ispointed_type (B x)) = c0 x p:= path_forall
(funx : A => g x (ispointed_type (B x))) c0 g0: (funx : A => g x (ispointed_type (B x))) = c0 X: p =
path_forall
(funx : A => g x (ispointed_type (B x))) c0 g0
P (funb : A => [C b, c0 b])
(funb : A =>
{| pointed_fun := g b; dpoint_eq := g0 b |})
H0: Funext A: Type B: A -> pType P: forallC : A -> pType,
(foralla : A, B a ->* C a) -> Type H: forall (C : A -> Type)
(g : foralla : A, B a -> C a),
P (funa : A => [C a, g a pt])
(funa : A => pmap_from_pointed (g a)) C: A -> Type g: forallx : A, B x -> C x g0: forallx : A,
g x (ispointed_type (B x)) =
g x (ispointed_type (B x)) X: 1 =
path_forall
(funx : A => g x (ispointed_type (B x)))
(funx : A => g x (ispointed_type (B x))) g0
P (funb : A => [C b, g b (ispointed_type (B b))])
(funb : A =>
{| pointed_fun := g b; dpoint_eq := g0 b |})
H0: Funext A: Type B: A -> pType P: forallC : A -> pType,
(foralla : A, B a ->* C a) -> Type H: forall (C : A -> Type)
(g : foralla : A, B a -> C a),
P (funa : A => [C a, g a pt])
(funa : A => pmap_from_pointed (g a)) C: A -> Type g: forallx : A, B x -> C x g0: forallx : A,
g x (ispointed_type (B x)) =
g x (ispointed_type (B x)) X: (path_forall
(funx : A => g x (ispointed_type (B x)))
(funx : A => g x (ispointed_type (B x))))^-11 =
g0
P (funb : A => [C b, g b (ispointed_type (B b))])
(funb : A =>
{| pointed_fun := g b; dpoint_eq := g0 b |})
H0: Funext A: Type B: A -> pType P: forallC : A -> pType,
(foralla : A, B a ->* C a) -> Type H: forall (C : A -> Type)
(g : foralla : A, B a -> C a),
P (funa : A => [C a, g a pt])
(funa : A => pmap_from_pointed (g a)) C: A -> Type g: forallx : A, B x -> C x
P (funb : A => [C b, g b (ispointed_type (B b))])
(funb : A =>
{|
pointed_fun := g b;
dpoint_eq :=
(path_forall
(funx : A => g x (ispointed_type (B x)))
(funx : A => g x (ispointed_type (B x))))^-11 b
|})
apply H.Defined.(** A alternative constructor to build a [pHomotopy] between maps into [pForall] *)
H: Funext A, B: pType C: B -> pType f, g: A ->* (ppforall b : B, C b) p: foralla : A, f a ==* g a q: p pt ==*
phomotopy_path (point_eq f) @*
(phomotopy_path (point_eq g))^*
f ==* g
H: Funext A, B: pType C: B -> pType f, g: A ->* (ppforall b : B, C b) p: foralla : A, f a ==* g a q: p pt ==*
phomotopy_path (point_eq f) @*
(phomotopy_path (point_eq g))^*
f ==* g
H: Funext A, B: pType C: B -> pType f, g: A ->* (ppforall b : B, C b) p: foralla : A, f a ==* g a q: p pt ==*
phomotopy_path (point_eq f) @*
(phomotopy_path (point_eq g))^*
f == g
H: Funext A, B: pType C: B -> pType f, g: A ->* (ppforall b : B, C b) p: foralla : A, f a ==* g a q: p pt ==*
phomotopy_path (point_eq f) @*
(phomotopy_path (point_eq g))^*
?p pt = dpoint_eq f @ (dpoint_eq g)^
H: Funext A, B: pType C: B -> pType f, g: A ->* (ppforall b : B, C b) p: foralla : A, f a ==* g a q: p pt ==*
phomotopy_path (point_eq f) @*
(phomotopy_path (point_eq g))^*
((funa : A => path_pforall (p a)) : f == g) pt =
dpoint_eq f @ (dpoint_eq g)^
H: Funext A, B: pType C: B -> pType f, g: A ->* (ppforall b : B, C b) p: foralla : A, f a ==* g a q: p pt ==*
phomotopy_path (point_eq f) @*
(phomotopy_path (point_eq g))^*
p pt =
(equiv_path_pforall (f pt) (g pt))^-1
(dpoint_eq f @ (dpoint_eq g)^)
H: Funext A, B: pType C: B -> pType f, g: A ->* (ppforall b : B, C b) p: foralla : A, f a ==* g a q: p pt ==*
phomotopy_path (point_eq f) @*
(phomotopy_path (point_eq g))^*
?Goal0 (dpoint_eq f @ (dpoint_eq g)^) = p pt
H: Funext A, B: pType C: B -> pType f, g: A ->* (ppforall b : B, C b) p: foralla : A, f a ==* g a q: p pt ==*
phomotopy_path (point_eq f) @*
(phomotopy_path (point_eq g))^*
?Goal0 = (equiv_path_pforall (f pt) (g pt))^-1
H: Funext A, B: pType C: B -> pType f, g: A ->* (ppforall b : B, C b) p: foralla : A, f a ==* g a q: p pt ==*
phomotopy_path (point_eq f) @*
(phomotopy_path (point_eq g))^*
phomotopy_path (dpoint_eq f @ (dpoint_eq g)^) = p pt
H: Funext A, B: pType C: B -> pType f, g: A ->* (ppforall b : B, C b) p: foralla : A, f a ==* g a q: p pt ==*
phomotopy_path (point_eq f) @*
(phomotopy_path (point_eq g))^*
phomotopy_path (dpoint_eq f @ (dpoint_eq g)^) ==* p pt
H: Funext A, B: pType C: B -> pType f, g: A ->* (ppforall b : B, C b) p: foralla : A, f a ==* g a q: p pt ==*
phomotopy_path (point_eq f) @*
(phomotopy_path (point_eq g))^*
H: Funext A, B: pType C: B -> pType f, g: A ->* (ppforall b : B, C b) p: foralla : A, f a ==* g a q: p pt ==*
phomotopy_path (point_eq f) @*
(phomotopy_path (point_eq g))^*
apply phomotopy_path_V.Defined.(** Operations on dependent pointed maps *)(* functorial action of [pForall A B] in [B] *)Definitionfunctor_pforall_right {A : pType} {BB' : pFam A}
(f : foralla, B a -> B' a)
(p : f (point A) (dpoint B) = dpoint B') (g : pForall A B)
: pForall A B' :=
Build_pForall A B' (funa => f a (g a)) (ap (f (point A)) (dpoint_eq g) @ p).
H: Funext A: pType B, B': pFam A f: foralla : A, B a <~> B' a p: f pt (dpoint B) = dpoint B'
pForall A B <~> pForall A B'
H: Funext A: pType B, B': pFam A f: foralla : A, B a <~> B' a p: f pt (dpoint B) = dpoint B'
pForall A B <~> pForall A B'
H: Funext A: pType B, B': pFam A f: foralla : A, B a <~> B' a p: f pt (dpoint B) = dpoint B'
{f : forallx : A, B x & f pt = dpoint B} <~>
{f : forallx : A, B' x & f pt = dpoint B'}
H: Funext A: pType B, B': pFam A f: foralla : A, B a <~> B' a p: f pt (dpoint B) = dpoint B'
(forallx : A, B x) <~> (forallx : A, B' x)
H: Funext A: pType B, B': pFam A f: foralla : A, B a <~> B' a p: f pt (dpoint B) = dpoint B'
foralla : forallx : A, B x,
(funf : forallx : A, B x => f pt = dpoint B) a <~>
(funf : forallx : A, B' x => f pt = dpoint B')
(?f a)
H: Funext A: pType B, B': pFam A f: foralla : A, B a <~> B' a p: f pt (dpoint B) = dpoint B'
foralla : forallx : A, B x,
(funf : forallx : A, B x => f pt = dpoint B) a <~>
(funf : forallx : A, B' x => f pt = dpoint B')
(equiv_functor_forall_id f a)
H: Funext A: pType B, B': pFam A f: foralla : A, B a <~> B' a p: f pt (dpoint B) = dpoint B' s: forallx : A, B x
s pt = dpoint B <~>
functor_forall idmap (funa : A => f a) s pt =
dpoint B'
H: Funext A: pType B, B': pFam A f: foralla : A, B a <~> B' a p: f pt (dpoint B) = dpoint B' s: forallx : A, B x
s pt = dpoint B <~>
functor_forall idmap (funa : A => f a) s pt =
f pt (dpoint B)
apply (equiv_ap' (f (point A))).Defined.
A: pType B, C: pFam A g, g': foralla : A, B a -> C a gā: g pt (dpoint B) = dpoint C gā': g' pt (dpoint B) = dpoint C f, f': pForall A B p: foralla : A, g a == g' a q: f ==* f' r: p pt (dpoint B) @ gā' = gā
functor_pforall_right g gā f ==*
functor_pforall_right g' gā' f'
A: pType B, C: pFam A g, g': foralla : A, B a -> C a gā: g pt (dpoint B) = dpoint C gā': g' pt (dpoint B) = dpoint C f, f': pForall A B p: foralla : A, g a == g' a q: f ==* f' r: p pt (dpoint B) @ gā' = gā
functor_pforall_right g gā f ==*
functor_pforall_right g' gā' f'
A: pType B, C: pFam A g, g': foralla : A, B a -> C a gā: g pt (dpoint B) = dpoint C gā': g' pt (dpoint B) = dpoint C f, f': pForall A B p: foralla : A, g a == g' a q: f ==* f' r: p pt (dpoint B) @ gā' = gā
functor_pforall_right g gā f ==
functor_pforall_right g' gā' f'
A: pType B, C: pFam A g, g': foralla : A, B a -> C a gā: g pt (dpoint B) = dpoint C gā': g' pt (dpoint B) = dpoint C f, f': pForall A B p: foralla : A, g a == g' a q: f ==* f' r: p pt (dpoint B) @ gā' = gā
A: pType B, C: pFam A g, g': foralla : A, B a -> C a gā: g pt (dpoint B) = dpoint C gā': g' pt (dpoint B) = dpoint C f, f': pForall A B p: foralla : A, g a == g' a q: f ==* f' r: p pt (dpoint B) @ gā' = gā
functor_pforall_right g gā f ==
functor_pforall_right g' gā' f'
A: pType B, C: pFam A g, g': foralla : A, B a -> C a gā: g pt (dpoint B) = dpoint C gā': g' pt (dpoint B) = dpoint C f, f': pForall A B p: foralla : A, g a == g' a q: f ==* f' r: p pt (dpoint B) @ gā' = gā a: A
functor_pforall_right g gā f a =
functor_pforall_right g' gā' f' a
exact (p a (f a) @ ap (g' a) (q a)).
A: pType B, C: pFam A g, g': foralla : A, B a -> C a gā: g pt (dpoint B) = dpoint C gā': g' pt (dpoint B) = dpoint C f, f': pForall A B p: foralla : A, g a == g' a q: f ==* f' r: p pt (dpoint B) @ gā' = gā
((funa : A => p a (f a) @ ap (g' a) (q a))
:
functor_pforall_right g gā f ==
functor_pforall_right g' gā' f') pt =
dpoint_eq (functor_pforall_right g gā f) @
(dpoint_eq (functor_pforall_right g' gā' f'))^
A: Type point: IsPointed A B, C: A -> Type g, g': foralla : A, B a -> C a f', f: forallx : A, B x p: foralla : A, g a == g' a q: forallx : A, f x = f' x
p point (f point) @ ap (g' point) (q point) =
ap (g point) (q point) @ p point (f' point)
A: Type point: IsPointed A B, C: A -> Type g, g': foralla : A, B a -> C a f', f: forallx : A, B x p: foralla : A, g a == g' a q: forallx : A, f x = f' x
ap (g point) (q point) @ p point (f' point) =
p point (f point) @ ap (g' point) (q point)
apply concat_Ap.Defined.
A: pType B, C: pFam A g: foralla : A, B a -> C a gā: g pt (dpoint B) = dpoint C f: pForall A B
functor2_pforall_right
(funa : A => reflexivity (g a))
(phomotopy_reflexive f) (concat_1p gā) ==*
phomotopy_reflexive (functor_pforall_right g gā f)
A: pType B, C: pFam A g: foralla : A, B a -> C a gā: g pt (dpoint B) = dpoint C f: pForall A B
functor2_pforall_right
(funa : A => reflexivity (g a))
(phomotopy_reflexive f) (concat_1p gā) ==*
phomotopy_reflexive (functor_pforall_right g gā f)
A: Type point: IsPointed A B, C: A -> Type g: foralla : A, B a -> C a f: forallx : A, B x
functor2_pforall_right (fun (a : A) (x0 : B a) => 1)
(phomotopy_reflexive
{| pointed_fun := f; dpoint_eq := 1 |}) 1 ==*
phomotopy_reflexive
(functor_pforall_right g 1
{| pointed_fun := f; dpoint_eq := 1 |})
reflexivity.Defined.(* functorial action of [pForall A (pointed_fam B)] in [B]. *)
A: pType B, B': A -> pType g: foralla : A, B a ->* B' a f: ppforall a : A, B a
ppforall a : A, B' a
A: pType B, B': A -> pType g: foralla : A, B a ->* B' a f: ppforall a : A, B a
ppforall a : A, B' a
A: pType B, B': A -> pType g: foralla : A, B a ->* B' a f: ppforall a : A, B a
foralla : A,
pointed_fam (funa0 : A => B a0) a ->
pointed_fam (funa0 : A => B' a0) a
A: pType B, B': A -> pType g: foralla : A, B a ->* B' a f: ppforall a : A, B a
?f pt (dpoint (pointed_fam (funa : A => B a))) =
dpoint (pointed_fam (funa : A => B' a))
A: pType B, B': A -> pType g: foralla : A, B a ->* B' a f: ppforall a : A, B a
foralla : A,
pointed_fam (funa0 : A => B a0) a ->
pointed_fam (funa0 : A => B' a0) a
exact g.
A: pType B, B': A -> pType g: foralla : A, B a ->* B' a f: ppforall a : A, B a
(funa : A => pointed_fun (g a)) pt
(dpoint (pointed_fam (funa : A => B a))) =
dpoint (pointed_fam (funa : A => B' a))
exact (point_eq (g (point A))).Defined.
A: pType B, B': A -> pType g: foralla : A, B a ->* B' a
pmap_compose_ppforall g (point_pforall B) ==*
point_pforall B'
A: pType B, B': A -> pType g: foralla : A, B a ->* B' a
pmap_compose_ppforall g (point_pforall B) ==*
point_pforall B'
A: pType B, B': A -> pType g: foralla : A, B a ->* B' a
pmap_compose_ppforall g (point_pforall B) ==
point_pforall B'
A: pType B, B': A -> pType g: foralla : A, B a ->* B' a
A: pType B, B': A -> pType g: foralla : A, B a ->* B' a
pmap_compose_ppforall g (point_pforall B) ==
point_pforall B'
A: pType B, B': A -> pType g: foralla : A, B a ->* B' a x: A
pmap_compose_ppforall g (point_pforall B) x =
point_pforall B' x
exact (point_eq (g x)).
A: pType B, B': A -> pType g: foralla : A, B a ->* B' a
((funx : A => point_eq (g x))
:
pmap_compose_ppforall g (point_pforall B) ==
point_pforall B') pt =
dpoint_eq (pmap_compose_ppforall g (point_pforall B)) @
(dpoint_eq (point_pforall B'))^
exact (concat_p1 _ @ concat_1p _)^.Defined.
A: pType P, Q, R: A -> pType h: foralla : A, Q a ->* R a g: foralla : A, P a ->* Q a f: ppforall a : A, P a
pmap_compose_ppforall (funa : A => h a o* g a) f ==*
pmap_compose_ppforall h (pmap_compose_ppforall g f)
A: pType P, Q, R: A -> pType h: foralla : A, Q a ->* R a g: foralla : A, P a ->* Q a f: ppforall a : A, P a
pmap_compose_ppforall (funa : A => h a o* g a) f ==*
pmap_compose_ppforall h (pmap_compose_ppforall g f)
A: pType P, Q, R: A -> pType h: foralla : A, Q a ->* R a g: foralla : A, P a ->* Q a f: ppforall a : A, P a
pmap_compose_ppforall (funa : A => h a o* g a) f ==
pmap_compose_ppforall h (pmap_compose_ppforall g f)
A: pType P, Q, R: A -> pType h: foralla : A, Q a ->* R a g: foralla : A, P a ->* Q a f: ppforall a : A, P a
?p pt =
dpoint_eq
(pmap_compose_ppforall (funa : A => h a o* g a) f) @
(dpoint_eq
(pmap_compose_ppforall h
(pmap_compose_ppforall g f)))^
A: pType P, Q, R: A -> pType h: foralla : A, Q a ->* R a g: foralla : A, P a ->* Q a f: ppforall a : A, P a
pmap_compose_ppforall (funa : A => h a o* g a) f ==
pmap_compose_ppforall h (pmap_compose_ppforall g f)
reflexivity.
A: pType P, Q, R: A -> pType h: foralla : A, Q a ->* R a g: foralla : A, P a ->* Q a f: ppforall a : A, P a
(funx0 : A => 1) pt =
dpoint_eq
(pmap_compose_ppforall (funa : A => h a o* g a) f) @
(dpoint_eq
(pmap_compose_ppforall h
(pmap_compose_ppforall g f)))^
A: pType P, Q, R: A -> pType h: foralla : A, Q a ->* R a g: foralla : A, P a ->* Q a f: ppforall a : A, P a
1 =
(ap (funx : P pt => h pt (g pt x)) (dpoint_eq f) @
(ap (h pt) (point_eq (g pt)) @ point_eq (h pt))) @
(ap (h pt) (ap (g pt) (dpoint_eq f) @ point_eq (g pt)) @
point_eq (h pt))^
A: pType P, Q, R: A -> pType h: foralla : A, Q a ->* R a g: foralla : A, P a ->* Q a f: ppforall a : A, P a
ap (h pt) (ap (g pt) (dpoint_eq f) @ point_eq (g pt)) @
point_eq (h pt) =
ap (funx : P pt => h pt (g pt x)) (dpoint_eq f) @
(ap (h pt) (point_eq (g pt)) @ point_eq (h pt))
A: pType P, Q, R: A -> pType h: foralla : A, Q a ->* R a g: foralla : A, P a ->* Q a f: ppforall a : A, P a
ap (h pt) (ap (g pt) (dpoint_eq f) @ point_eq (g pt)) =
ap (funx : P pt => h pt (g pt x)) (dpoint_eq f) @
ap (h pt) (point_eq (g pt))
A: pType P, Q: A -> pType g, g': foralla : A, P a ->* Q a f, f': ppforall a : A, P a p: foralla : A, g a ==* g' a q: f ==* f'
pmap_compose_ppforall g f ==*
pmap_compose_ppforall g' f'
A: pType P, Q: A -> pType g, g': foralla : A, P a ->* Q a f, f': ppforall a : A, P a p: foralla : A, g a ==* g' a q: f ==* f'
pmap_compose_ppforall g f ==*
pmap_compose_ppforall g' f'
A: pType P, Q: A -> pType g, g': foralla : A, P a ->* Q a f, f': ppforall a : A, P a p: foralla : A, g a ==* g' a q: f ==* f'
foralla : A,
(funa0 : A => pointed_fun (g a0)) a ==
(funa0 : A => pointed_fun (g' a0)) a
A: pType P, Q: A -> pType g, g': foralla : A, P a ->* Q a f, f': ppforall a : A, P a p: foralla : A, g a ==* g' a q: f ==* f'
f ==* f'
A: pType P, Q: A -> pType g, g': foralla : A, P a ->* Q a f, f': ppforall a : A, P a p: foralla : A, g a ==* g' a q: f ==* f'
?p pt (dpoint (pointed_fam (funa : A => P a))) @
point_eq (g' pt) = point_eq (g pt)
A: pType P, Q: A -> pType g, g': foralla : A, P a ->* Q a f, f': ppforall a : A, P a p: foralla : A, g a ==* g' a q: f ==* f'
foralla : A,
(funa0 : A => pointed_fun (g a0)) a ==
(funa0 : A => pointed_fun (g' a0)) a
exact p.
A: pType P, Q: A -> pType g, g': foralla : A, P a ->* Q a f, f': ppforall a : A, P a p: foralla : A, g a ==* g' a q: f ==* f'
f ==* f'
exact q.
A: pType P, Q: A -> pType g, g': foralla : A, P a ->* Q a f, f': ppforall a : A, P a p: foralla : A, g a ==* g' a q: f ==* f'
(funa : A => pointed_htpy (p a)) pt
(dpoint (pointed_fam (funa : A => P a))) @
point_eq (g' pt) = point_eq (g pt)
exact (point_htpy (p (point A))).Defined.Definitionpmap_compose_ppforall2_left {A : pType} {PQ : A -> pType} {gg' : forall (a : A), P a ->* Q a}
(f : ppforall (a : A), P a) (p : foralla, g a ==* g' a)
: pmap_compose_ppforall g f ==* pmap_compose_ppforall g' f :=
pmap_compose_ppforall2 p (phomotopy_reflexive f).Definitionpmap_compose_ppforall2_right {A : pType} {PQ : A -> pType} (g : forall (a : A), P a ->* Q a)
{ff' : ppforall (a : A), P a} (q : f ==* f')
: pmap_compose_ppforall g f ==* pmap_compose_ppforall g f' :=
pmap_compose_ppforall2 (funa => phomotopy_reflexive (g a)) q.
H: Funext A: pType P, Q: A -> pType g: foralla : A, P a ->* Q a f: ppforall a : A, P a
pmap_compose_ppforall2
(funa : A => phomotopy_reflexive (g a))
(phomotopy_reflexive f) ==*
phomotopy_reflexive (pmap_compose_ppforall g f)
H: Funext A: pType P, Q: A -> pType g: foralla : A, P a ->* Q a f: ppforall a : A, P a
pmap_compose_ppforall2
(funa : A => phomotopy_reflexive (g a))
(phomotopy_reflexive f) ==*
phomotopy_reflexive (pmap_compose_ppforall g f)
H: Funext A: pType P, Q: A -> pType g: foralla : A, P a ->* Q a f: ppforall a : A, P a
functor2_pforall_right
(funa : A => phomotopy_reflexive (g a))
(phomotopy_reflexive f)
(point_htpy (phomotopy_reflexive (g pt))) ==*
phomotopy_reflexive (pmap_compose_ppforall g f)
H: Funext A: pType P: A -> pType f: ppforall a : A, P a
forall (Q : A -> pType)
(g : foralla : A, P a ->* Q a),
functor2_pforall_right
(funa : A => phomotopy_reflexive (g a))
(phomotopy_reflexive f)
(point_htpy (phomotopy_reflexive (g pt))) ==*
phomotopy_reflexive (pmap_compose_ppforall g f)
H: Funext A: pType P: A -> pType f: ppforall a : A, P a
forall (C : A -> Type) (g : foralla : A, P a -> C a),
functor2_pforall_right
(funa : A =>
phomotopy_reflexive (pmap_from_pointed (g a)))
(phomotopy_reflexive f)
(point_htpy
(phomotopy_reflexive (pmap_from_pointed (g pt)))) ==*
phomotopy_reflexive
(pmap_compose_ppforall
(funa : A => pmap_from_pointed (g a)) f)
H: Funext A: pType P: A -> pType f: ppforall a : A, P a Q: A -> Type g: foralla : A, P a -> Q a