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.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: forallC0 : A -> pType, (foralla : A, B a ->* C0 a) -> Type H: forall (C0 : A -> Type) (g : foralla : A, B a -> C0 a),
P (funa : A => [C0 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: forallC0 : A -> pType, (foralla : A, B a ->* C0 a) -> Type H: forall (C0 : A -> Type) (g : foralla : A, B a -> C0 a),
P (funa : A => [C0 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: forallC0 : A -> pType, (foralla : A, B a ->* C0 a) -> Type H: forall (C0 : A -> Type) (g0 : foralla : A, B a -> C0 a),
P (funa : A => [C0 a, g0 a pt]) (funa : A => pmap_from_pointed (g0 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: forallC0 : A -> pType, (foralla : A, B a ->* C0 a) -> Type H: forall (C0 : A -> Type) (g0 : foralla : A, B a -> C0 a),
P (funa : A => [C0 a, g0 a pt]) (funa : A => pmap_from_pointed (g0 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: forallC0 : A -> pType, (foralla : A, B a ->* C0 a) -> Type H: forall (C0 : A -> Type) (g1 : foralla : A, B a -> C0 a),
P (funa : A => [C0 a, g1 a pt]) (funa : A => pmap_from_pointed (g1 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: forallC0 : A -> pType, (foralla : A, B a ->* C0 a) -> Type H: forall (C0 : A -> Type) (g1 : foralla : A, B a -> C0 a),
P (funa : A => [C0 a, g1 a pt]) (funa : A => pmap_from_pointed (g1 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: forallC0 : A -> pType, (foralla : A, B a ->* C0 a) -> Type H: forall (C0 : A -> Type) (g1 : foralla : A, B a -> C0 a),
P (funa : A => [C0 a, g1 a pt]) (funa : A => pmap_from_pointed (g1 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: forallC0 : A -> pType, (foralla : A, B a ->* C0 a) -> Type H: forall (C0 : A -> Type) (g1 : foralla : A, B a -> C0 a),
P (funa : A => [C0 a, g1 a pt]) (funa : A => pmap_from_pointed (g1 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: forallC0 : A -> pType, (foralla : A, B a ->* C0 a) -> Type H: forall (C0 : A -> Type) (g1 : foralla : A, B a -> C0 a),
P (funa : A => [C0 a, g1 a pt]) (funa : A => pmap_from_pointed (g1 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: forallC0 : A -> pType, (foralla : A, B a ->* C0 a) -> Type H: forall (C0 : A -> Type) (g1 : foralla : A, B a -> C0 a),
P (funa : A => [C0 a, g1 a pt]) (funa : A => pmap_from_pointed (g1 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: forallC0 : A -> pType, (foralla : A, B a ->* C0 a) -> Type H: forall (C0 : A -> Type) (g1 : foralla : A, B a -> C0 a),
P (funa : A => [C0 a, g1 a pt]) (funa : A => pmap_from_pointed (g1 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: forallC0 : A -> pType, (foralla : A, B a ->* C0 a) -> Type H: forall (C0 : A -> Type) (g1 : foralla : A, B a -> C0 a),
P (funa : A => [C0 a, g1 a pt]) (funa : A => pmap_from_pointed (g1 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: forallC0 : A -> pType, (foralla : A, B a ->* C0 a) -> Type H: forall (C0 : A -> Type) (g1 : foralla : A, B a -> C0 a),
P (funa : A => [C0 a, g1 a pt]) (funa : A => pmap_from_pointed (g1 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: forallC0 : A -> pType, (foralla : A, B a ->* C0 a) -> Type H: forall (C0 : A -> Type) (g1 : foralla : A, B a -> C0 a),
P (funa : A => [C0 a, g1 a pt]) (funa : A => pmap_from_pointed (g1 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: forallC0 : A -> pType, (foralla : A, B a ->* C0 a) -> Type H: forall (C0 : A -> Type) (g0 : foralla : A, B a -> C0 a),
P (funa : A => [C0 a, g0 a pt]) (funa : A => pmap_from_pointed (g0 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'
{f0 : forallx : A, B x & f0 pt = dpoint B} <~>
{f0 : forallx : A, B' x & f0 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,
(funf0 : forallx : A, B x => f0 pt = dpoint B) a <~>
(funf0 : forallx : A, B' x => f0 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,
(funf0 : forallx : A, B x => f0 pt = dpoint B) a <~>
(funf0 : forallx : A, B' x => f0 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': foralla0 : A, B a0 -> C a0 g₀: g pt (dpoint B) = dpoint C g₀': g' pt (dpoint B) = dpoint C f, f': pForall A B p: foralla0 : A, g a0 == g' a0 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