2018-10-24 15:07:35 +00:00
|
|
|
|
/-
|
|
|
|
|
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
|
2018-10-26 14:51:42 +00:00
|
|
|
|
group pi pushout is_conn fiber unit function paths
|
|
|
|
|
|
|
|
|
|
-- TODO: move to lib
|
|
|
|
|
namespace category
|
|
|
|
|
open iso
|
|
|
|
|
|
|
|
|
|
definition Groupoid_opposite [constructor] (C : Groupoid) : Groupoid :=
|
|
|
|
|
groupoid.MK (Opposite C) (λ x y f, @is_iso.mk _ (Opposite C) x y f
|
|
|
|
|
(@is_iso.inverse _ C y x f ((@groupoid.all_iso _ C y x f)))
|
|
|
|
|
(@is_iso.right_inverse _ C y x f ((@groupoid.all_iso _ C y x f)))
|
|
|
|
|
(@is_iso.left_inverse _ C y x f ((@groupoid.all_iso _ C y x f))))
|
|
|
|
|
|
|
|
|
|
definition hom_Group (C : Groupoid) (x : C) : Group :=
|
|
|
|
|
Group.mk (hom x x) (hom_group x)
|
|
|
|
|
|
|
|
|
|
definition fundamental_hom_group (A : Type*) : hom_Group (Groupoid_opposite (Π₁ A)) (Point A) ≃g π₁ A :=
|
|
|
|
|
begin
|
|
|
|
|
fapply isomorphism_of_equiv,
|
|
|
|
|
{ reflexivity },
|
|
|
|
|
{ intros p q, reflexivity }
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- [H : is_conn 0 A] : Groupoid_opposite (Π₁ A) ≃c Groupoid_of_Group (π₁ A)
|
|
|
|
|
end category open category
|
2018-10-24 15:07:35 +00:00
|
|
|
|
|
|
|
|
|
-- 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
|
|
|
|
|
|
2018-10-26 14:51:42 +00:00
|
|
|
|
-- this goes via Groupoid_opposite (Π₁ (⅀ A)) ≃c Groupoid_of_Group (free_group A)
|
2018-10-24 15:07:35 +00:00
|
|
|
|
-- definition fundamental_group_of_susp : π₁(⅀ A) ≃g free_group A :=
|
|
|
|
|
-- sorry
|
|
|
|
|
|
|
|
|
|
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)
|
|
|
|
|
|
|
|
|
|
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 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
|
|
|
|
|
|
2018-10-26 14:51:42 +00:00
|
|
|
|
definition is_trunc_susp_of_is_set : is_contr (Σ(z : susp A), trunc 0 (z = susp.north)) → is_trunc 1 (susp A) :=
|
2018-10-24 15:07:35 +00:00
|
|
|
|
begin
|
2018-10-26 14:51:42 +00:00
|
|
|
|
intro K,
|
2018-10-24 15:07:35 +00:00
|
|
|
|
apply is_trunc_of_is_equiv_tr,
|
|
|
|
|
apply is_equiv_of_is_contr_fun,
|
|
|
|
|
fapply @is_conn.elim -1 (ptrunc 1 (⅀ A)),
|
2018-10-26 14:51:42 +00:00
|
|
|
|
exact is_contr_equiv_closed_rev pfiber_susp_equiv_sigma K
|
2018-10-24 15:07:35 +00:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end susp
|