Spectral/homotopy/susp_pset.hlean
2018-10-24 17:07:35 +02:00

114 lines
3.9 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/-
Copyright (c) 2018 Ulrik Buchholtz. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Ulrik Buchholtz
-/
import algebra.group_theory hit.set_quotient types.list homotopy.vankampen
homotopy.susp .pushout ..algebra.free_group
open eq pointed equiv is_equiv is_trunc set_quotient sum list susp trunc algebra
group pi pushout is_conn fiber unit function category paths
-- special purpose lemmas
definition tr_trunc_eq (A : Type) (a : A) {x y : A} (p : x = y) (q : x = a)
: transport (λ(z : A), trunc 0 (z = a)) p (tr q) = tr (p⁻¹ ⬝ q) :=
by induction p; induction q; reflexivity
namespace susp
section
universe variable u
parameters (A : pType.{u}) [H : is_set A]
include H
local notation `F` := Π₁⇒ (λ(a : A), star)
local abbreviation C : Groupoid := Groupoid_bpushout (@id A) F F
local abbreviation N : C := inl star
local abbreviation S : C := inr star
-- local notation `N` := a
-- hom group of fundamental groupoid is fundamental group
-- the fundamental group of the suspension is the free group on A
-- could go via van Kampen, but would have to compose with opposite, which is not so well developed
-- definition fundamental_group_of_susp : π₁(⅀ A) ≃g free_group A :=
-- sorry
/-
van Kampen instead?
game plan:
1. lift to 1-connected cover
2. apply flattening lemma
3. provide equivalences F A ≃ ∥N = N∥ ≃ ∥S = N∥
4. move to is_contr
5. induction induction induction!
-/
definition pglueNS (a : A) : hom N S :=
class_of [ bpushout_prehom_index.DE (@id A) F F a ]
definition pglueSN (a : A) : hom S N :=
class_of [ bpushout_prehom_index.ED (@id A) F F a ]
definition f : A × hom N N → hom S N :=
prod.rec (λ a p, p ∘ pglueSN a)
definition g : A × trunc 0 (@susp.north A = @susp.north A) → trunc 0 (@susp.south A = @susp.north A) :=
prod.rec (λ a p, tconcat (tr (merid a)⁻¹) p)
--set_option pp.notation false
--set_option pp.implicit true
definition foo : (Σ(z : susp A), trunc 0 (z = susp.north)) ≃ pushout prod.pr2 g :=
begin
apply equiv.trans !pushout.flattening',
fapply pushout.equiv,
{ apply sigma.equiv_prod },
{ apply sigma.sigma_unit_left },
{ apply sigma.sigma_unit_left },
{ intro z, induction z with a p, induction p with p, reflexivity },
{ intro z, induction z with a p, induction p with p, apply tr_trunc_eq }
end
definition bar : pushout prod.pr2 g ≃ pushout prod.pr2 f :=
begin
fapply pushout.equiv,
{ apply prod.prod_equiv_prod_right, apply vankampen },
{ apply vankampen },
{ apply vankampen },
{ intro z, induction z with a p, reflexivity },
{ intro z, induction z with a p,
change (encode (@id A) (λ(z : A), star) (λ(z : A), star) (tconcat (tr (merid a)⁻¹) p))
= (encode (@id A) (λ(z : A), star) (λ(z : A), star) p ∘ pglueSN a),
revert p, fapply @trunc.rec 0 (@susp.north A = @susp.north A),
{ intro p, apply is_trunc_succ, apply is_trunc_eq, apply is_set_code }, intro p,
apply trans (encode_tcon (@id A) (λ(z : A), star) (λ(z : A), star) (tr (merid a)⁻¹) (tr p)),
apply ap (λ h, encode (@id A) (λ(z : A), star) (λ(z : A), star) (tr p) ∘ h),
apply encode_decode_singleton }
end
definition is_contr_susp_fiber_tr : is_contr (Σ(z : susp A), trunc 0 (z = susp.north)) := sorry
definition pfiber_susp_equiv_sigma : pfiber (ptr 1 (⅀ A)) ≃ (Σ(z : susp A), trunc 0 (z = susp.north)) :=
begin
apply equiv.trans !fiber.sigma_char,
apply sigma.sigma_equiv_sigma_right,
intro z, apply tr_eq_tr_equiv
end
definition is_trunc_susp_of_is_set : is_trunc 1 (susp A) :=
begin
apply is_trunc_of_is_equiv_tr,
apply is_equiv_of_is_contr_fun,
fapply @is_conn.elim -1 (ptrunc 1 (⅀ A)),
change is_contr (pfiber (ptr 1 (⅀ A))),
apply is_contr_equiv_closed_rev pfiber_susp_equiv_sigma,
apply is_contr_susp_fiber_tr
end
end
end susp