Built with Alectryon, running Coq+SerAPI v8.18.0+0.18.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. Local Open 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. *) Definition pmap_from_point {A B : Type} (f : A -> B) (a : A) : [A, a] ->* [B, f a] := Build_pMap [A, a] [B, f a] f 1%path. (** A variant of [pmap_from_point] where the domain is pointed, but the codomain is not. *) Definition pmap_from_pointed {A : pType} {B : Type} (f : A -> B) : A ->* [B, f (point A)] := Build_pMap A [B, f (point A)] f 1%path. (** The same, for a dependent pointed map. *) Definition pforall_from_pointed {A : pType} {B : A -> Type} (f : forall x, 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 *)
A, B, C: pType
f: B ->* C

f o* pconst ==* pconst
A, B, C: pType
f: B ->* C

f o* pconst ==* pconst
A, B, C: pType
f: B ->* C

f o* pconst == pconst
A, B, C: pType
f: B ->* C
?p pt = dpoint_eq (f o* pconst) @ (dpoint_eq pconst)^
A, B, C: pType
f: B ->* C

((fun _ : A => point_eq f) : f o* pconst == pconst) pt = dpoint_eq (f o* pconst) @ (dpoint_eq pconst)^
exact (concat_p1 _ @ concat_1p _)^. Defined. (* postcomposing the zero map is the zero map *)
A, B, C: pType
f: A ->* B

pconst o* f ==* pconst
A, B, C: pType
f: A ->* B

pconst o* f ==* pconst
A, B, C: pType
f: A ->* B

pconst o* f == pconst
A, B, C: pType
f: A ->* B
?p pt = dpoint_eq (pconst o* f) @ (dpoint_eq pconst)^
A, B, C: pType
f: A ->* B

(fun x0 : A => 1) pt = dpoint_eq (pconst o* f) @ (dpoint_eq pconst)^
exact (concat_p1 _ @ concat_p1 _ @ ap_const _ _)^. Defined.
A, B: pType
f: pUnit ->* B
g: A ->* pUnit

f o* g ==* pconst
A, B: pType
f: pUnit ->* B
g: A ->* pUnit

f o* g ==* pconst
A, B: pType
f: pUnit ->* B
g: A ->* pUnit

f o* g ==* f o* pconst
A, B: pType
f: pUnit ->* B
g: A ->* pUnit

g ==* pconst
A, B: pType
f: pUnit ->* B
g: A ->* pUnit

pconst ==* g
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. *) Definition equiv_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: forall C : A -> pType, (forall a : A, B a ->* C a) -> Type
H: forall (C : A -> Type) (g : forall a : A, B a -> C a), P (fun a : A => [C a, g a pt]) (fun a : A => pmap_from_pointed (g a))

forall (C : A -> pType) (g : forall a : A, B a ->* C a), P C g
H0: Funext
A: Type
B: A -> pType
P: forall C : A -> pType, (forall a : A, B a ->* C a) -> Type
H: forall (C : A -> Type) (g : forall a : A, B a -> C a), P (fun a : A => [C a, g a pt]) (fun a : A => pmap_from_pointed (g a))

forall (C : A -> pType) (g : forall a : A, B a ->* C a), P C g
H0: Funext
A: Type
B: A -> pType
P: forall C : A -> pType, (forall a : A, B a ->* C a) -> Type
H: forall (C : A -> Type) (g : forall a : A, B a -> C a), P (fun a : A => [C a, g a pt]) (fun a : A => pmap_from_pointed (g a))
C: {f : A -> Type & forall x : A, f x}

forall g : forall a : 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: forall C : A -> pType, (forall a : A, B a ->* C a) -> Type
H: forall (C : A -> Type) (g : forall a : A, B a -> C a), P (fun a : A => [C a, g a pt]) (fun a : A => pmap_from_pointed (g a))
C: A -> Type
c0: forall x : A, C x

forall g : forall a : 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: forall C : A -> pType, (forall a : A, B a ->* C a) -> Type
H: forall (C : A -> Type) (g : forall a : A, B a -> C a), P (fun a : A => [C a, g a pt]) (fun a : A => pmap_from_pointed (g a))
C: A -> Type
c0: forall x : A, C x
g: {f : forall x : A, B x -> [C x, c0 x] & forall x : 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 (fun a : A => issig_pmap (B a) [C a, c0 a]) oE equiv_sig_coind (fun x : 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: forall C : A -> pType, (forall a : A, B a ->* C a) -> Type
H: forall (C : A -> Type) (g : forall a : A, B a -> C a), P (fun a : A => [C a, g a pt]) (fun a : A => pmap_from_pointed (g a))
C: A -> Type
c0: forall x : A, C x
g: {f : forall x : A, B x -> C x & forall x : 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: forall C : A -> pType, (forall a : A, B a ->* C a) -> Type
H: forall (C : A -> Type) (g : forall a : A, B a -> C a), P (fun a : A => [C a, g a pt]) (fun a : A => pmap_from_pointed (g a))
C: A -> Type
c0: forall x : A, C x
g: forall x : A, B x -> C x
g0: forall x : 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: forall C : A -> pType, (forall a : A, B a ->* C a) -> Type
H: forall (C : A -> Type) (g : forall a : A, B a -> C a), P (fun a : A => [C a, g a pt]) (fun a : A => pmap_from_pointed (g a))
C: A -> Type
c0: forall x : A, C x
g: forall x : A, B x -> C x
g0: forall x : 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: forall C : A -> pType, (forall a : A, B a ->* C a) -> Type
H: forall (C : A -> Type) (g : forall a : A, B a -> C a), P (fun a : A => [C a, g a pt]) (fun a : A => pmap_from_pointed (g a))
C: A -> Type
c0: forall x : A, C x
g: forall x : A, B x -> C x
g0: forall x : A, g x (ispointed_type (B x)) = c0 x

P (fun b : A => [((C; c0).1 b; (C; c0).2 b).1, ((C; c0).1 b; (C; c0).2 b).2]) (fun b : A => {| pointed_fun := ((g; g0).1 b; (g; g0).2 b).1; dpoint_eq := ((g; g0).1 b; (g; g0).2 b).2 |})
H0: Funext
A: Type
B: A -> pType
P: forall C : A -> pType, (forall a : A, B a ->* C a) -> Type
H: forall (C : A -> Type) (g : forall a : A, B a -> C a), P (fun a : A => [C a, g a pt]) (fun a : A => pmap_from_pointed (g a))
C: A -> Type
c0: forall x : A, C x
g: forall x : A, B x -> C x
g0: forall x : A, g x (ispointed_type (B x)) = c0 x

P (fun b : A => [C b, c0 b]) (fun b : 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: forall C : A -> pType, (forall a : A, B a ->* C a) -> Type
H: forall (C : A -> Type) (g : forall a : A, B a -> C a), P (fun a : A => [C a, g a pt]) (fun a : A => pmap_from_pointed (g a))
C: A -> Type
c0: forall x : A, C x
g: forall x : A, B x -> C x
g0: forall x : A, g x (ispointed_type (B x)) = c0 x
p:= path_forall (fun x : A => g x (ispointed_type (B x))) c0 g0: (fun x : A => g x (ispointed_type (B x))) = c0

P (fun b : A => [C b, c0 b]) (fun b : A => {| pointed_fun := g b; dpoint_eq := g0 b |})
H0: Funext
A: Type
B: A -> pType
P: forall C : A -> pType, (forall a : A, B a ->* C a) -> Type
H: forall (C : A -> Type) (g : forall a : A, B a -> C a), P (fun a : A => [C a, g a pt]) (fun a : A => pmap_from_pointed (g a))
C: A -> Type
c0: forall x : A, C x
g: forall x : A, B x -> C x
g0: forall x : A, g x (ispointed_type (B x)) = c0 x
p:= path_forall (fun x : A => g x (ispointed_type (B x))) c0 g0: (fun x : A => g x (ispointed_type (B x))) = c0

p = path_forall (fun x : A => g x (ispointed_type (B x))) c0 g0
H0: Funext
A: Type
B: A -> pType
P: forall C : A -> pType, (forall a : A, B a ->* C a) -> Type
H: forall (C : A -> Type) (g : forall a : A, B a -> C a), P (fun a : A => [C a, g a pt]) (fun a : A => pmap_from_pointed (g a))
C: A -> Type
c0: forall x : A, C x
g: forall x : A, B x -> C x
g0: forall x : A, g x (ispointed_type (B x)) = c0 x
p:= path_forall (fun x : A => g x (ispointed_type (B x))) c0 g0: (fun x : A => g x (ispointed_type (B x))) = c0
X: p = path_forall (fun x : A => g x (ispointed_type (B x))) c0 g0
P (fun b : A => [C b, c0 b]) (fun b : A => {| pointed_fun := g b; dpoint_eq := g0 b |})
H0: Funext
A: Type
B: A -> pType
P: forall C : A -> pType, (forall a : A, B a ->* C a) -> Type
H: forall (C : A -> Type) (g : forall a : A, B a -> C a), P (fun a : A => [C a, g a pt]) (fun a : A => pmap_from_pointed (g a))
C: A -> Type
c0: forall x : A, C x
g: forall x : A, B x -> C x
g0: forall x : A, g x (ispointed_type (B x)) = c0 x
p:= path_forall (fun x : A => g x (ispointed_type (B x))) c0 g0: (fun x : A => g x (ispointed_type (B x))) = c0
X: p = path_forall (fun x : A => g x (ispointed_type (B x))) c0 g0

P (fun b : A => [C b, c0 b]) (fun b : A => {| pointed_fun := g b; dpoint_eq := g0 b |})
H0: Funext
A: Type
B: A -> pType
P: forall C : A -> pType, (forall a : A, B a ->* C a) -> Type
H: forall (C : A -> Type) (g : forall a : A, B a -> C a), P (fun a : A => [C a, g a pt]) (fun a : A => pmap_from_pointed (g a))
C: A -> Type
g: forall x : A, B x -> C x
g0: forall x : A, g x (ispointed_type (B x)) = g x (ispointed_type (B x))
X: 1 = path_forall (fun x : A => g x (ispointed_type (B x))) (fun x : A => g x (ispointed_type (B x))) g0

P (fun b : A => [C b, g b (ispointed_type (B b))]) (fun b : A => {| pointed_fun := g b; dpoint_eq := g0 b |})
H0: Funext
A: Type
B: A -> pType
P: forall C : A -> pType, (forall a : A, B a ->* C a) -> Type
H: forall (C : A -> Type) (g : forall a : A, B a -> C a), P (fun a : A => [C a, g a pt]) (fun a : A => pmap_from_pointed (g a))
C: A -> Type
g: forall x : A, B x -> C x
g0: forall x : A, g x (ispointed_type (B x)) = g x (ispointed_type (B x))
X: (path_forall (fun x : A => g x (ispointed_type (B x))) (fun x : A => g x (ispointed_type (B x))))^-1 1 = g0

P (fun b : A => [C b, g b (ispointed_type (B b))]) (fun b : A => {| pointed_fun := g b; dpoint_eq := g0 b |})
H0: Funext
A: Type
B: A -> pType
P: forall C : A -> pType, (forall a : A, B a ->* C a) -> Type
H: forall (C : A -> Type) (g : forall a : A, B a -> C a), P (fun a : A => [C a, g a pt]) (fun a : A => pmap_from_pointed (g a))
C: A -> Type
g: forall x : A, B x -> C x

P (fun b : A => [C b, g b (ispointed_type (B b))]) (fun b : A => {| pointed_fun := g b; dpoint_eq := (path_forall (fun x : A => g x (ispointed_type (B x))) (fun x : A => g x (ispointed_type (B x))))^-1 1 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: forall a : 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: forall a : 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: forall a : 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: forall a : 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: forall a : A, f a ==* g a
q: p pt ==* phomotopy_path (point_eq f) @* (phomotopy_path (point_eq g))^*

((fun a : 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: forall a : 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: forall a : 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: forall a : 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: forall a : 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: forall a : 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: forall a : A, f a ==* g a
q: p pt ==* phomotopy_path (point_eq f) @* (phomotopy_path (point_eq g))^*

phomotopy_path (dpoint_eq f) @* phomotopy_path (dpoint_eq g)^ ==* 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: forall a : A, f a ==* g a
q: p pt ==* phomotopy_path (point_eq f) @* (phomotopy_path (point_eq g))^*

phomotopy_path (dpoint_eq g)^ ==* (phomotopy_path (point_eq g))^*
apply phomotopy_path_V. Defined. (** Operations on dependent pointed maps *) (* functorial action of [pForall A B] in [B] *) Definition functor_pforall_right {A : pType} {B B' : pFam A} (f : forall a, B a -> B' a) (p : f (point A) (dpoint B) = dpoint B') (g : pForall A B) : pForall A B' := Build_pForall A B' (fun a => f a (g a)) (ap (f (point A)) (dpoint_eq g) @ p).
H: Funext
A: pType
B, B': pFam A
f: forall a : 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: forall a : 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: forall a : A, B a <~> B' a
p: f pt (dpoint B) = dpoint B'

{f : forall x : A, B x & f pt = dpoint B} <~> {f : forall x : A, B' x & f pt = dpoint B'}
H: Funext
A: pType
B, B': pFam A
f: forall a : A, B a <~> B' a
p: f pt (dpoint B) = dpoint B'

(forall x : A, B x) <~> (forall x : A, B' x)
H: Funext
A: pType
B, B': pFam A
f: forall a : A, B a <~> B' a
p: f pt (dpoint B) = dpoint B'
forall a : forall x : A, B x, (fun f : forall x : A, B x => f pt = dpoint B) a <~> (fun f : forall x : A, B' x => f pt = dpoint B') (?f a)
H: Funext
A: pType
B, B': pFam A
f: forall a : A, B a <~> B' a
p: f pt (dpoint B) = dpoint B'

forall a : forall x : A, B x, (fun f : forall x : A, B x => f pt = dpoint B) a <~> (fun f : forall x : A, B' x => f pt = dpoint B') (equiv_functor_forall_id f a)
H: Funext
A: pType
B, B': pFam A
f: forall a : A, B a <~> B' a
p: f pt (dpoint B) = dpoint B'
s: forall x : A, B x

s pt = dpoint B <~> functor_forall idmap (fun a : A => f a) s pt = dpoint B'
H: Funext
A: pType
B, B': pFam A
f: forall a : A, B a <~> B' a
p: f pt (dpoint B) = dpoint B'
s: forall x : A, B x

s pt = dpoint B <~> functor_forall idmap (fun a : A => f a) s pt = f pt (dpoint B)
apply (equiv_ap' (f (point A))). Defined.
A: pType
B, C: pFam A
g, g': forall a : 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: forall a : 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': forall a : 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: forall a : 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': forall a : 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: forall a : 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': forall a : 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: forall a : A, g a == g' a
q: f ==* f'
r: p pt (dpoint B) @ gā‚€' = gā‚€
?p pt = dpoint_eq (functor_pforall_right g gā‚€ f) @ (dpoint_eq (functor_pforall_right g' gā‚€' f'))^
A: pType
B, C: pFam A
g, g': forall a : 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: forall a : 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': forall a : 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: forall a : 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
refine (p a (f a) @ ap (g' a) (q a)).
A: pType
B, C: pFam A
g, g': forall a : 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: forall a : A, g a == g' a
q: f ==* f'
r: p pt (dpoint B) @ gā‚€' = gā‚€

((fun a : 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': forall a : A, B a -> C a
f', f: forall x : A, B x
p: forall a : A, g a == g' a
q: forall x : 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': forall a : A, B a -> C a
f', f: forall x : A, B x
p: forall a : A, g a == g' a
q: forall x : 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: forall a : A, B a -> C a
gā‚€: g pt (dpoint B) = dpoint C
f: pForall A B

functor2_pforall_right (fun a : 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: forall a : A, B a -> C a
gā‚€: g pt (dpoint B) = dpoint C
f: pForall A B

functor2_pforall_right (fun a : 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: forall a : A, B a -> C a
f: forall x : 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: forall a : A, B a ->* B' a
f: ppforall a : A, B a

ppforall a : A, B' a
A: pType
B, B': A -> pType
g: forall a : A, B a ->* B' a
f: ppforall a : A, B a

ppforall a : A, B' a
A: pType
B, B': A -> pType
g: forall a : A, B a ->* B' a
f: ppforall a : A, B a

forall a : A, pointed_fam (fun a0 : A => B a0) a -> pointed_fam (fun a0 : A => B' a0) a
A: pType
B, B': A -> pType
g: forall a : A, B a ->* B' a
f: ppforall a : A, B a
?f pt (dpoint (pointed_fam (fun a : A => B a))) = dpoint (pointed_fam (fun a : A => B' a))
A: pType
B, B': A -> pType
g: forall a : A, B a ->* B' a
f: ppforall a : A, B a

forall a : A, pointed_fam (fun a0 : A => B a0) a -> pointed_fam (fun a0 : A => B' a0) a
exact g.
A: pType
B, B': A -> pType
g: forall a : A, B a ->* B' a
f: ppforall a : A, B a

(fun a : A => pointed_fun (g a)) pt (dpoint (pointed_fam (fun a : A => B a))) = dpoint (pointed_fam (fun a : A => B' a))
exact (point_eq (g (point A))). Defined.
A: pType
B, B': A -> pType
g: forall a : A, B a ->* B' a

pmap_compose_ppforall g (point_pforall B) ==* point_pforall B'
A: pType
B, B': A -> pType
g: forall a : A, B a ->* B' a

pmap_compose_ppforall g (point_pforall B) ==* point_pforall B'
A: pType
B, B': A -> pType
g: forall a : A, B a ->* B' a

pmap_compose_ppforall g (point_pforall B) == point_pforall B'
A: pType
B, B': A -> pType
g: forall a : A, B a ->* B' a
?p pt = dpoint_eq (pmap_compose_ppforall g (point_pforall B)) @ (dpoint_eq (point_pforall B'))^
A: pType
B, B': A -> pType
g: forall a : A, B a ->* B' a

pmap_compose_ppforall g (point_pforall B) == point_pforall B'
A: pType
B, B': A -> pType
g: forall a : 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: forall a : A, B a ->* B' a

((fun x : 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: forall a : A, Q a ->* R a
g: forall a : A, P a ->* Q a
f: ppforall a : A, P a

pmap_compose_ppforall (fun a : A => h a o* g a) f ==* pmap_compose_ppforall h (pmap_compose_ppforall g f)
A: pType
P, Q, R: A -> pType
h: forall a : A, Q a ->* R a
g: forall a : A, P a ->* Q a
f: ppforall a : A, P a

pmap_compose_ppforall (fun a : A => h a o* g a) f ==* pmap_compose_ppforall h (pmap_compose_ppforall g f)
A: pType
P, Q, R: A -> pType
h: forall a : A, Q a ->* R a
g: forall a : A, P a ->* Q a
f: ppforall a : A, P a

pmap_compose_ppforall (fun a : A => h a o* g a) f == pmap_compose_ppforall h (pmap_compose_ppforall g f)
A: pType
P, Q, R: A -> pType
h: forall a : A, Q a ->* R a
g: forall a : A, P a ->* Q a
f: ppforall a : A, P a
?p pt = dpoint_eq (pmap_compose_ppforall (fun a : 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: forall a : A, Q a ->* R a
g: forall a : A, P a ->* Q a
f: ppforall a : A, P a

pmap_compose_ppforall (fun a : 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: forall a : A, Q a ->* R a
g: forall a : A, P a ->* Q a
f: ppforall a : A, P a

(fun x0 : A => 1) pt = dpoint_eq (pmap_compose_ppforall (fun a : 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: forall a : A, Q a ->* R a
g: forall a : A, P a ->* Q a
f: ppforall a : A, P a

1 = (ap (fun x : 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: forall a : A, Q a ->* R a
g: forall a : 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 (fun x : 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: forall a : A, Q a ->* R a
g: forall a : 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 (fun x : P pt => h pt (g pt x)) (dpoint_eq f) @ ap (h pt) (point_eq (g pt))
refine (ap_pp _ _ _ @ whiskerR (ap_compose _ _ _)^ _). Defined.
A: pType
P, Q: A -> pType
g, g': forall a : A, P a ->* Q a
f, f': ppforall a : A, P a
p: forall a : 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': forall a : A, P a ->* Q a
f, f': ppforall a : A, P a
p: forall a : 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': forall a : A, P a ->* Q a
f, f': ppforall a : A, P a
p: forall a : A, g a ==* g' a
q: f ==* f'

forall a : A, (fun a0 : A => pointed_fun (g a0)) a == (fun a0 : A => pointed_fun (g' a0)) a
A: pType
P, Q: A -> pType
g, g': forall a : A, P a ->* Q a
f, f': ppforall a : A, P a
p: forall a : A, g a ==* g' a
q: f ==* f'
f ==* f'
A: pType
P, Q: A -> pType
g, g': forall a : A, P a ->* Q a
f, f': ppforall a : A, P a
p: forall a : A, g a ==* g' a
q: f ==* f'
?p pt (dpoint (pointed_fam (fun a : A => P a))) @ point_eq (g' pt) = point_eq (g pt)
A: pType
P, Q: A -> pType
g, g': forall a : A, P a ->* Q a
f, f': ppforall a : A, P a
p: forall a : A, g a ==* g' a
q: f ==* f'

forall a : A, (fun a0 : A => pointed_fun (g a0)) a == (fun a0 : A => pointed_fun (g' a0)) a
exact p.
A: pType
P, Q: A -> pType
g, g': forall a : A, P a ->* Q a
f, f': ppforall a : A, P a
p: forall a : A, g a ==* g' a
q: f ==* f'

f ==* f'
exact q.
A: pType
P, Q: A -> pType
g, g': forall a : A, P a ->* Q a
f, f': ppforall a : A, P a
p: forall a : A, g a ==* g' a
q: f ==* f'

(fun a : A => pointed_htpy (p a)) pt (dpoint (pointed_fam (fun a : A => P a))) @ point_eq (g' pt) = point_eq (g pt)
exact (point_htpy (p (point A))). Defined. Definition pmap_compose_ppforall2_left {A : pType} {P Q : A -> pType} {g g' : forall (a : A), P a ->* Q a} (f : ppforall (a : A), P a) (p : forall a, g a ==* g' a) : pmap_compose_ppforall g f ==* pmap_compose_ppforall g' f := pmap_compose_ppforall2 p (phomotopy_reflexive f). Definition pmap_compose_ppforall2_right {A : pType} {P Q : A -> pType} (g : forall (a : A), P a ->* Q a) {f f' : ppforall (a : A), P a} (q : f ==* f') : pmap_compose_ppforall g f ==* pmap_compose_ppforall g f' := pmap_compose_ppforall2 (fun a => phomotopy_reflexive (g a)) q.
H: Funext
A: pType
P, Q: A -> pType
g: forall a : A, P a ->* Q a
f: ppforall a : A, P a

pmap_compose_ppforall2 (fun a : A => phomotopy_reflexive (g a)) (phomotopy_reflexive f) ==* phomotopy_reflexive (pmap_compose_ppforall g f)
H: Funext
A: pType
P, Q: A -> pType
g: forall a : A, P a ->* Q a
f: ppforall a : A, P a

pmap_compose_ppforall2 (fun a : A => phomotopy_reflexive (g a)) (phomotopy_reflexive f) ==* phomotopy_reflexive (pmap_compose_ppforall g f)
H: Funext
A: pType
P, Q: A -> pType
g: forall a : A, P a ->* Q a
f: ppforall a : A, P a

functor2_pforall_right (fun a : 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 : forall a : A, P a ->* Q a), functor2_pforall_right (fun a : 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 : forall a : A, P a -> C a), functor2_pforall_right (fun a : 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 (fun a : A => pmap_from_pointed (g a)) f)
H: Funext
A: pType
P: A -> pType
f: ppforall a : A, P a
Q: A -> Type
g: forall a : A, P a -> Q a

functor2_pforall_right (fun a : 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 (fun a : A => pmap_from_pointed (g a)) f)
srapply functor2_pforall_right_refl. Defined.
A: pType
P: A -> pType
f: ppforall a : A, P a

pmap_compose_ppforall (fun a : A => pmap_idmap) f ==* f
A: pType
P: A -> pType
f: ppforall a : A, P a

pmap_compose_ppforall (fun a : A => pmap_idmap) f ==* f
A: pType
P: A -> pType
f: ppforall a : A, P a

pmap_compose_ppforall (fun a : A => pmap_idmap) f == f
A: pType
P: A -> pType
f: ppforall a : A, P a
?p pt = dpoint_eq (pmap_compose_ppforall (fun a : A => pmap_idmap) f) @ (dpoint_eq f)^
A: pType
P: A -> pType
f: ppforall a : A, P a

pmap_compose_ppforall (fun a : A => pmap_idmap) f == f
reflexivity.
A: pType
P: A -> pType
f: ppforall a : A, P a

(fun x0 : A => 1) pt = dpoint_eq (pmap_compose_ppforall (fun a : A => pmap_idmap) f) @ (dpoint_eq f)^
A: pType
P: A -> pType
f: ppforall a : A, P a

dpoint_eq (pmap_compose_ppforall (fun a : A => pmap_idmap) f) @ (dpoint_eq f)^ = (fun x0 : A => 1) pt
refine (whiskerR (concat_p1 _ @ ap_idmap _) _ @ concat_pV _). Defined.
H: Funext
A: pType
P, Q: A -> pType
g: forall a : A, P a ->* Q a
f, f': ppforall a : A, P a
p: f ==* f'

ap (pmap_compose_ppforall g) (path_pforall p) = path_pforall (pmap_compose_ppforall2_right g p)
H: Funext
A: pType
P, Q: A -> pType
g: forall a : A, P a ->* Q a
f, f': ppforall a : A, P a
p: f ==* f'

ap (pmap_compose_ppforall g) (path_pforall p) = path_pforall (pmap_compose_ppforall2_right g p)
H: Funext
A: pType
P, Q: A -> pType
g: forall a : A, P a ->* Q a
f: ppforall a : A, P a

forall (f' : ppforall a : A, P a) (p : f ==* f'), ap (pmap_compose_ppforall g) (path_pforall p) = path_pforall (pmap_compose_ppforall2_right g p)
H: Funext
A: pType
P, Q: A -> pType
g: forall a : A, P a ->* Q a
f: ppforall a : A, P a

ap (pmap_compose_ppforall g) (path_pforall (reflexivity f)) = path_pforall (pmap_compose_ppforall2_right g (reflexivity f))
H: Funext
A: pType
P, Q: A -> pType
g: forall a : A, P a ->* Q a
f: ppforall a : A, P a

pmap_compose_ppforall2_right g (reflexivity f) = reflexivity (pmap_compose_ppforall g f)
exact (path_pforall (pmap_compose_ppforall2_refl _ _)). Defined.