shorten proof of spi_compose_left

This commit is contained in:
Floris van Doorn 2017-07-13 17:26:39 +01:00
parent df54ac858e
commit a4c4da36df
3 changed files with 90 additions and 97 deletions

View file

@ -657,52 +657,13 @@ set_option pp.coercions true
spectrum.MK (λn, Π*a, E a n)
(λn, !loop_pppi_pequiv⁻¹ᵉ* ∘*ᵉ ppi_pequiv_right (λa, equiv_glue (E a) n))
definition spi_compose_left_topsq
{N : succ_str} {A : Type*} {E F : A → gen_spectrum N} (f : Π a, (E a) →ₛ (F a)) (n : N)
: psquare
(ppi_compose_left (λ a, f a n))
(ppi_compose_left (λ a, Ω→ (f a (S n))))
(ppi_pequiv_right (λ a, equiv_glue (E a) n))
(ppi_pequiv_right (λ a, equiv_glue (F a) n))
:=
begin
fapply psquare_of_ppi_compose_left,
intro a, exact glue_square (f a) n,
end
definition spi_compose_left_botsq
{N : succ_str} {A : Type*} {E F : A → gen_spectrum N} (f : Π a, (E a) →ₛ (F a)) (n : N)
: psquare
(ppi_compose_left (λ a, Ω→ (to_fun (f a) (S n))))
(Ω→ (ppi_compose_left (λ a, to_fun (f a) (S n))))
(!loop_pppi_pequiv⁻¹ᵉ*)
(!loop_pppi_pequiv⁻¹ᵉ*)
:=
begin
refine (_)⁻¹ᵛ*,
fapply psquare_loop_ppi_compose_left,
end
definition spi_compose_left [constructor] {N : succ_str} {A : Type*} {E F : A -> gen_spectrum N}
(f : Πa, E a →ₛ F a) : spi A E →ₛ spi A F :=
smap.mk (λn, ppi_compose_left (λa, f a n))
begin
intro n,
fapply psquare_of_phomotopy,
refine
(passoc _ _ (ppi_compose_left (λ a, to_fun (f a) n)))
⬝* _ ⬝*
(passoc (!loop_pppi_pequiv⁻¹ᵉ*)
(ppi_compose_left (λ a, Ω→ (f a (S n))))
(ppi_pequiv_right (λa, equiv_glue (E a) n)))⁻¹*
⬝* _ ⬝*
(passoc (Ω→ (ppi_compose_left (λ a, to_fun (f a) (S n)))) _ _),
{ refine (pwhisker_left (!loop_pppi_pequiv⁻¹ᵉ*) _),
fapply spi_compose_left_topsq},
{ refine (pwhisker_right (ppi_pequiv_right (λ a, equiv_glue (E a) n)) _),
fapply spi_compose_left_botsq},
end
begin
intro n,
exact psquare_ppi_compose_left (λa, (glue_square (f a) n)) ⬝v* !loop_pppi_pequiv_natural⁻¹ᵛ*
end
-- unpointed spi
definition supi [constructor] {N : succ_str} (A : Type) (E : A → gen_spectrum N) :

View file

@ -251,4 +251,23 @@ namespace pointed
A →* pointed.MK B (f pt) :=
pmap.mk f idp
/- TODO: computation rule -/
open pi
definition fiberwise_pointed_map_rec {A : Type} {B : A → Type*}
(P : Π(C : A → Type*) (g : Πa, B a →* C a), Type)
(H : Π(C : A → Type) (g : Πa, B a → C a), P _ (λa, pmap_of_map_pt (g a))) :
Π⦃C : A → Type*⦄ (g : Πa, B a →* C a), P C g :=
begin
refine equiv_rect (!sigma_pi_equiv_pi_sigma ⬝e
arrow_equiv_arrow_right A !pType.sigma_char⁻¹ᵉ) _ _,
intro R, cases R with R r₀,
refine equiv_rect (!sigma_pi_equiv_pi_sigma ⬝e
pi_equiv_pi_right (λa, !pmap.sigma_char⁻¹ᵉ)) _ _,
intro g, cases g with g g₀, esimp at (g, g₀),
revert g₀, change (Π(g : (λa, g a (Point (B a))) ~ r₀), _),
refine homotopy.rec_idp _ _, esimp,
apply H
end
end pointed

View file

@ -39,9 +39,6 @@ namespace pointed
((Σa, B a) →ᵘ* C) ≃* Πᵘ*a, B a →ᵘ* C :=
pequiv_of_equiv (equiv_sigma_rec _)⁻¹ᵉ idp
definition loop_pupi [constructor] {A : Type} (B : A → Type*) : Ω (Πᵘ*a, B a) ≃* Πᵘ*a, Ω (B a) :=
pequiv_of_equiv eq_equiv_homotopy idp
definition phomotopy_mk_pupi [constructor] {A : Type*} {B : Type} {C : B → Type*}
{f g : A →* (Πᵘ*b, C b)} (p : f ~2 g)
(q : p pt ⬝hty apd10 (respect_pt g) ~ apd10 (respect_pt f)) : f ~* g :=
@ -115,8 +112,40 @@ namespace pointed
(Πᵘ*a, B a) ≃* (Πᵘ*a, B' a) :=
pupi_pequiv erfl f
definition loop_pumap [constructor] (A : Type) (B : Type*) : Ω (A →ᵘ* B) ≃* A →ᵘ* Ω B :=
loop_pupi (λa, B)
definition loop_pupi [constructor] {A : Type} (B : A → Type*) : Ω (Πᵘ*a, B a) ≃* Πᵘ*a, Ω (B a) :=
pequiv_of_equiv eq_equiv_homotopy idp
-- definition loop_pupi_natural [constructor] {A : Type} {B B' : A → Type*} (f : Πa, B a →* B' a) :
-- psquare (Ω→ (pupi_functor_right f)) (pupi_functor_right (λa, Ω→ (f a)))
-- (loop_pupi B) (loop_pupi B') :=
definition ap1_gen_pi {A A' : Type} {B : A → Type} {B' : A' → Type}
{h₀ h₁ : Πa, B a} {h₀' h₁' : Πa', B' a'} (f : A' → A) (g : Πa, B (f a) → B' a)
(p₀ : pi_functor f g h₀ ~ h₀') (p₁ : pi_functor f g h₁ ~ h₁') (r : h₀ = h₁) (a' : A') :
apd10 (ap1_gen (pi_functor f g) (eq_of_homotopy p₀) (eq_of_homotopy p₁) r) a' =
ap1_gen (g a') (p₀ a') (p₁ a') (apd10 r (f a')) :=
begin
induction r, induction p₀ using homotopy.rec_idp, induction p₁ using homotopy.rec_idp, esimp,
exact ap (λx, apd10 (ap1_gen _ x x _) _) !eq_of_homotopy_idp
end
-- definition ap1_gen_pi_idp {A A' : Type} {B : A → Type} {B' : A' → Type}
-- {h₀ : Πa, B a} (f : A' → A) (g : Πa, B (f a) → B' a) (a' : A') :
-- ap1_gen_pi f g (homotopy.refl (pi_functor f g h₀)) (homotopy.refl (pi_functor f g h₀)) idp a' =
-- begin esimp [ap1_gen] end :=
-- begin
-- end
definition loop_pupi_natural [constructor] {A : Type} {B B' : A → Type*} (f : Πa, B a →* B' a) :
psquare (Ω→ (pupi_functor_right f)) (pupi_functor_right (λa, Ω→ (f a)))
(loop_pupi B) (loop_pupi B') :=
begin
fapply phomotopy_mk_pupi,
{ intro p a, exact ap1_gen_pi id f (λa, respect_pt (f a)) (λa, respect_pt (f a)) p a },
{ intro a, revert B' f, refine fiberwise_pointed_map_rec _ _, intro B' f,
exact sorry }
end
definition phomotopy_mk_pumap [constructor] {A C : Type*} {B : Type} {f g : A →* (B →ᵘ* C)}
(p : f ~2 g) (q : p pt ⬝hty apd10 (respect_pt g) ~ apd10 (respect_pt f))
@ -152,6 +181,9 @@ namespace pointed
(A →ᵘ* B) ≃* (A' →ᵘ* B) :=
pumap_pequiv f pequiv.rfl
definition loop_pumap [constructor] (A : Type) (B : Type*) : Ω (A →ᵘ* B) ≃* A →ᵘ* Ω B :=
loop_pupi (λa, B)
/- the pointed sigma type -/
definition psigma_gen [constructor] {A : Type*} (P : A → Type) (x : P pt) : Type* :=
pointed.MK (Σa, P a) ⟨pt, x⟩
@ -652,23 +684,6 @@ namespace pointed
exact !pmap_compose_ppi2_refl⁻¹
end
/- TODO: computation rule -/
definition fiberwise_pointed_map_rec {A : Type} {B : A → Type*}
(P : Π(C : A → Type*) (g : Πa, B a →* C a), Type)
(H : Π(C : A → Type) (g : Πa, B a → C a), P _ (λa, pmap_of_map_pt (g a))) :
Π⦃C : A → Type*⦄ (g : Πa, B a →* C a), P C g :=
begin
refine equiv_rect (!sigma_pi_equiv_pi_sigma ⬝e
arrow_equiv_arrow_right A !pType.sigma_char⁻¹ᵉ) _ _,
intro R, cases R with R r₀,
refine equiv_rect (!sigma_pi_equiv_pi_sigma ⬝e
pi_equiv_pi_right (λa, !pmap.sigma_char⁻¹ᵉ)) _ _,
intro g, cases g with g g₀, esimp at (g, g₀),
revert g₀, change (Π(g : (λa, g a (Point (B a))) ~ r₀), _),
refine homotopy.rec_idp _ _, esimp,
apply H
end
definition ppi_assoc_ppi_const_right (g : Πa, Q a →* R a) (f : Πa, P a →* Q a) :
ppi_assoc g f (ppi_const P) ⬝*'
(pmap_compose_ppi_phomotopy_right _ (pmap_compose_ppi_ppi_const f) ⬝*'
@ -700,7 +715,7 @@ namespace pointed
apply eq_of_phomotopy, exact p a
end
definition psquare_of_ppi_compose_left {A : Type*} {B C D E : A → Type*}
definition psquare_ppi_compose_left {A : Type*} {B C D E : A → Type*}
{ftop : Π (a : A), B a →* C a} {fbot : Π (a : A), D a →* E a}
{fleft : Π (a : A), B a →* D a} {fright : Π (a : A), C a →* E a}
(psq : Π (a :A), psquare (ftop a) (fbot a) (fleft a) (fright a))
@ -714,7 +729,6 @@ namespace pointed
refine (ppi_compose_left_pcompose fright ftop)⁻¹* ⬝* _ ⬝*
(ppi_compose_left_pcompose fbot fleft),
exact ppi_compose_left_phomotopy psq
-- the last step is probably an unnecessary application of function extensionality.
end
definition ppi_pequiv_right [constructor] (g : Π(a : A), P a ≃* Q a) :
@ -886,33 +900,6 @@ namespace pointed
sorry
-- psigma_gen_pequiv_psigma_gen (pppi_pequiv_ppmap A B) (λf, begin esimp, exact ppi_gen_equiv_ppi_gen_right (λa, _) _ end) _
definition pfiber_ppcompose_left (f : B →* C) :
pfiber (@ppcompose_left A B C f) ≃* ppmap A (pfiber f) :=
calc
pfiber (@ppcompose_left A B C f) ≃*
psigma_gen (λ(g : ppmap A B), f ∘* g = pconst A C)
proof (eq_of_phomotopy (pcompose_pconst f)) qed :
by exact !pfiber.sigma_char'
... ≃* psigma_gen (λ(g : ppmap A B), f ∘* g ~* pconst A C) proof (pcompose_pconst f) qed :
by exact psigma_gen_pequiv_psigma_gen_right (λa, !pmap_eq_equiv)
!phomotopy_of_eq_of_phomotopy
... ≃* psigma_gen (λ(g : ppmap A B), ppi_gen (λa, f (g a) = pt)
(transport (λb, f b = pt) (respect_pt g)⁻¹ (respect_pt f)))
(ppi_const _) :
begin
refine psigma_gen_pequiv_psigma_gen_right
(λg, ppi_gen_equiv_ppi_gen_basepoint (_ ⬝ !eq_transport_Fl⁻¹)) _,
intro g, refine !con_idp ⬝ _, apply whisker_right,
exact ap02 f !inv_inv⁻¹ ⬝ !ap_inv,
apply ppi_eq, fapply ppi_homotopy.mk,
intro x, reflexivity,
refine !idp_con ⬝ _, symmetry, refine !ap_id ◾ !idp_con ⬝ _, apply con.right_inv
end
... ≃* ppmap A (psigma_gen (λb, f b = pt) (respect_pt f)) :
by exact (ppmap_psigma _ _)⁻¹ᵉ*
... ≃* ppmap A (pfiber f) : by exact pequiv_ppcompose_left !pfiber.sigma_char'⁻¹ᵉ*
definition pfiber_ppi_compose_left {B C : A → Type*} (f : Πa, B a →* C a) :
pfiber (ppi_compose_left f) ≃* Π*(a : A), pfiber (f a) :=
calc
@ -939,6 +926,33 @@ namespace pointed
by exact (ppi_psigma _ _)⁻¹ᵉ*
... ≃* Π*(a : A), pfiber (f a) : by exact ppi_pequiv_right (λa, !pfiber.sigma_char'⁻¹ᵉ*)
/- TODO: proof the following as a special case of pfiber_ppi_compose_left -/
definition pfiber_ppcompose_left (f : B →* C) :
pfiber (@ppcompose_left A B C f) ≃* ppmap A (pfiber f) :=
calc
pfiber (@ppcompose_left A B C f) ≃*
psigma_gen (λ(g : ppmap A B), f ∘* g = pconst A C)
proof (eq_of_phomotopy (pcompose_pconst f)) qed :
by exact !pfiber.sigma_char'
... ≃* psigma_gen (λ(g : ppmap A B), f ∘* g ~* pconst A C) proof (pcompose_pconst f) qed :
by exact psigma_gen_pequiv_psigma_gen_right (λa, !pmap_eq_equiv)
!phomotopy_of_eq_of_phomotopy
... ≃* psigma_gen (λ(g : ppmap A B), ppi_gen (λa, f (g a) = pt)
(transport (λb, f b = pt) (respect_pt g)⁻¹ (respect_pt f)))
(ppi_const _) :
begin
refine psigma_gen_pequiv_psigma_gen_right
(λg, ppi_gen_equiv_ppi_gen_basepoint (_ ⬝ !eq_transport_Fl⁻¹)) _,
intro g, refine !con_idp ⬝ _, apply whisker_right,
exact ap02 f !inv_inv⁻¹ ⬝ !ap_inv,
apply ppi_eq, fapply ppi_homotopy.mk,
intro x, reflexivity,
refine !idp_con ⬝ _, symmetry, refine !ap_id ◾ !idp_con ⬝ _, apply con.right_inv
end
... ≃* ppmap A (psigma_gen (λb, f b = pt) (respect_pt f)) :
by exact (ppmap_psigma _ _)⁻¹ᵉ*
... ≃* ppmap A (pfiber f) : by exact pequiv_ppcompose_left !pfiber.sigma_char'⁻¹ᵉ*
-- definition pppi_ppmap {A C : Type*} {B : A → Type*} :
-- ppmap (/- dependent smash of B -/) C ≃* Π*(a : A), ppmap (B a) C :=
@ -978,13 +992,12 @@ namespace pointed
exact (pppi.sigma_char (Ω ∘ B))⁻¹ᵉ*
end
definition psquare_loop_ppi_compose_left {A : Type*} {X Y : A → Type*} (f : Π (a : A), X a →* Y a) :
definition loop_pppi_pequiv_natural {A : Type*} {X Y : A → Type*} (f : Π (a : A), X a →* Y a) :
psquare
(Ω→ (ppi_compose_left f))
(ppi_compose_left (λ a, Ω→ (f a)))
(loop_pppi_pequiv X)
(loop_pppi_pequiv Y)
:=
(loop_pppi_pequiv Y) :=
begin
refine ap1_psquare (pppi_sigma_char_natural f) ⬝v* _,
refine !loop_psigma_gen_natural ⬝v* _,