2015-11-16 20:30:28 +00:00
|
|
|
|
/-
|
|
|
|
|
Copyright (c) 2015 Floris van Doorn. All rights reserved.
|
|
|
|
|
Released under Apache 2.0 license as described in the file LICENSE.
|
|
|
|
|
Authors: Floris van Doorn
|
|
|
|
|
|
|
|
|
|
homotopy groups of a pointed space
|
|
|
|
|
-/
|
|
|
|
|
|
2016-03-01 04:37:03 +00:00
|
|
|
|
import .trunc_group .hott types.trunc
|
2015-11-16 20:30:28 +00:00
|
|
|
|
|
|
|
|
|
open nat eq pointed trunc is_trunc algebra
|
|
|
|
|
|
|
|
|
|
namespace eq
|
|
|
|
|
|
2016-02-16 01:59:38 +00:00
|
|
|
|
definition phomotopy_group [constructor] (n : ℕ) (A : Type*) : Set* :=
|
|
|
|
|
ptrunc 0 (Ω[n] A)
|
|
|
|
|
|
2015-11-18 23:08:38 +00:00
|
|
|
|
definition homotopy_group [reducible] (n : ℕ) (A : Type*) : Type :=
|
2016-02-16 01:59:38 +00:00
|
|
|
|
phomotopy_group n A
|
2015-11-16 20:30:28 +00:00
|
|
|
|
|
2016-02-16 01:59:38 +00:00
|
|
|
|
notation `π*[`:95 n:0 `] `:0 A:95 := phomotopy_group n A
|
2015-11-16 20:30:28 +00:00
|
|
|
|
notation `π[`:95 n:0 `] `:0 A:95 := homotopy_group n A
|
|
|
|
|
|
2015-11-18 23:08:38 +00:00
|
|
|
|
definition group_homotopy_group [instance] [constructor] (n : ℕ) (A : Type*)
|
2015-11-16 20:30:28 +00:00
|
|
|
|
: group (π[succ n] A) :=
|
|
|
|
|
trunc_group concat inverse idp con.assoc idp_con con_idp con.left_inv
|
|
|
|
|
|
2015-11-18 23:08:38 +00:00
|
|
|
|
definition comm_group_homotopy_group [constructor] (n : ℕ) (A : Type*)
|
2015-11-16 20:30:28 +00:00
|
|
|
|
: comm_group (π[succ (succ n)] A) :=
|
|
|
|
|
trunc_comm_group concat inverse idp con.assoc idp_con con_idp con.left_inv eckmann_hilton
|
|
|
|
|
|
|
|
|
|
local attribute comm_group_homotopy_group [instance]
|
|
|
|
|
|
2016-02-16 01:59:38 +00:00
|
|
|
|
definition ghomotopy_group [constructor] (n : ℕ) (A : Type*) : Group :=
|
2015-11-16 20:30:28 +00:00
|
|
|
|
Group.mk (π[succ n] A) _
|
|
|
|
|
|
2016-02-16 01:59:38 +00:00
|
|
|
|
definition cghomotopy_group [constructor] (n : ℕ) (A : Type*) : CommGroup :=
|
2015-11-16 20:30:28 +00:00
|
|
|
|
CommGroup.mk (π[succ (succ n)] A) _
|
|
|
|
|
|
2015-11-18 23:08:38 +00:00
|
|
|
|
definition fundamental_group [constructor] (A : Type*) : Group :=
|
2016-02-16 01:59:38 +00:00
|
|
|
|
ghomotopy_group zero A
|
2015-11-16 20:30:28 +00:00
|
|
|
|
|
2016-02-25 00:43:50 +00:00
|
|
|
|
notation `πg[`:95 n:0 ` +1] `:0 A:95 := ghomotopy_group n A
|
|
|
|
|
notation `πag[`:95 n:0 ` +2] `:0 A:95 := cghomotopy_group n A
|
2015-11-16 20:30:28 +00:00
|
|
|
|
|
|
|
|
|
prefix `π₁`:95 := fundamental_group
|
|
|
|
|
|
2016-03-01 04:37:03 +00:00
|
|
|
|
definition phomotopy_group_pequiv [constructor] (n : ℕ) {A B : Type*} (H : A ≃* B)
|
|
|
|
|
: π*[n] A ≃* π*[n] B :=
|
2016-03-08 05:16:45 +00:00
|
|
|
|
ptrunc_pequiv_ptrunc 0 (loopn_pequiv_loopn n H)
|
2016-03-01 04:37:03 +00:00
|
|
|
|
|
2016-03-02 21:23:24 +00:00
|
|
|
|
definition phomotopy_group_pequiv_loop_ptrunc [constructor] (k : ℕ) (A : Type*) :
|
|
|
|
|
π*[k] A ≃* Ω[k] (ptrunc k A) :=
|
|
|
|
|
begin
|
|
|
|
|
refine !iterated_loop_ptrunc_pequiv⁻¹ᵉ* ⬝e* _,
|
2016-03-06 00:35:12 +00:00
|
|
|
|
exact loopn_pequiv_loopn k (pequiv_of_eq begin rewrite [trunc_index.zero_add] end)
|
2016-03-02 21:23:24 +00:00
|
|
|
|
end
|
|
|
|
|
|
2015-11-18 23:08:38 +00:00
|
|
|
|
open equiv unit
|
2016-02-25 00:43:50 +00:00
|
|
|
|
theorem trivial_homotopy_of_is_set (A : Type*) [H : is_set A] (n : ℕ) : πg[n+1] A = G0 :=
|
2015-11-18 23:08:38 +00:00
|
|
|
|
begin
|
|
|
|
|
apply trivial_group_of_is_contr,
|
|
|
|
|
apply is_trunc_trunc_of_is_trunc,
|
|
|
|
|
apply is_contr_loop_of_is_trunc,
|
2016-02-15 20:18:07 +00:00
|
|
|
|
apply is_trunc_succ_succ_of_is_set
|
2015-11-18 23:08:38 +00:00
|
|
|
|
end
|
|
|
|
|
|
2016-03-01 04:37:03 +00:00
|
|
|
|
definition phomotopy_group_succ_out (A : Type*) (n : ℕ) : π*[n + 1] A = π₁ Ω[n] A := idp
|
|
|
|
|
|
|
|
|
|
definition phomotopy_group_succ_in (A : Type*) (n : ℕ) : π*[n + 1] A = π*[n] Ω A :=
|
|
|
|
|
ap (ptrunc 0) (loop_space_succ_eq_in A n)
|
2015-11-18 23:08:38 +00:00
|
|
|
|
|
2016-03-01 04:37:03 +00:00
|
|
|
|
definition ghomotopy_group_succ_out (A : Type*) (n : ℕ) : πg[n +1] A = π₁ Ω[n] A := idp
|
|
|
|
|
|
|
|
|
|
definition ghomotopy_group_succ_in (A : Type*) (n : ℕ) : πg[succ n +1] A = πg[n +1] Ω A :=
|
2015-11-18 23:08:38 +00:00
|
|
|
|
begin
|
|
|
|
|
fapply Group_eq,
|
2016-03-01 04:37:03 +00:00
|
|
|
|
{ apply equiv_of_eq, exact ap (ptrunc 0) (loop_space_succ_eq_in A (succ n))},
|
2015-11-18 23:08:38 +00:00
|
|
|
|
{ exact abstract [irreducible] begin refine trunc.rec _, intro p, refine trunc.rec _, intro q,
|
2015-12-09 05:02:05 +00:00
|
|
|
|
rewrite [▸*,-+tr_eq_cast_ap, +trunc_transport], refine !trunc_transport ⬝ _, apply ap tr,
|
2015-11-18 23:08:38 +00:00
|
|
|
|
apply loop_space_succ_eq_in_concat end end},
|
|
|
|
|
end
|
|
|
|
|
|
2016-02-25 00:43:50 +00:00
|
|
|
|
definition homotopy_group_add (A : Type*) (n m : ℕ) : πg[n+m +1] A = πg[n +1] Ω[m] A :=
|
2015-11-18 23:08:38 +00:00
|
|
|
|
begin
|
|
|
|
|
revert A, induction m with m IH: intro A,
|
|
|
|
|
{ reflexivity},
|
2016-03-01 04:37:03 +00:00
|
|
|
|
{ esimp [iterated_ploop_space, nat.add], refine !ghomotopy_group_succ_in ⬝ _, refine !IH ⬝ _,
|
2016-02-16 01:59:38 +00:00
|
|
|
|
exact ap (ghomotopy_group n) !loop_space_succ_eq_in⁻¹}
|
2015-11-18 23:08:38 +00:00
|
|
|
|
end
|
|
|
|
|
|
2016-03-01 04:37:03 +00:00
|
|
|
|
theorem trivial_homotopy_add_of_is_set_loop_space {A : Type*} {n : ℕ} (m : ℕ)
|
|
|
|
|
(H : is_set (Ω[n] A)) : πg[m+n+1] A = G0 :=
|
2016-02-15 20:18:07 +00:00
|
|
|
|
!homotopy_group_add ⬝ !trivial_homotopy_of_is_set
|
2015-11-16 20:30:28 +00:00
|
|
|
|
|
2016-03-01 04:37:03 +00:00
|
|
|
|
theorem trivial_homotopy_le_of_is_set_loop_space {A : Type*} {n : ℕ} (m : ℕ) (H1 : n ≤ m)
|
|
|
|
|
(H2 : is_set (Ω[n] A)) : πg[m+1] A = G0 :=
|
|
|
|
|
obtain (k : ℕ) (p : n + k = m), from le.elim H1,
|
|
|
|
|
ap (λx, πg[x+1] A) (p⁻¹ ⬝ add.comm n k) ⬝ trivial_homotopy_add_of_is_set_loop_space k H2
|
|
|
|
|
|
2016-02-16 01:59:38 +00:00
|
|
|
|
definition phomotopy_group_functor [constructor] (n : ℕ) {A B : Type*} (f : A →* B)
|
|
|
|
|
: π*[n] A →* π*[n] B :=
|
|
|
|
|
ptrunc_functor 0 (apn n f)
|
|
|
|
|
|
2016-03-01 04:37:03 +00:00
|
|
|
|
definition homotopy_group_functor (n : ℕ) {A B : Type*} (f : A →* B) : π[n] A → π[n] B :=
|
|
|
|
|
phomotopy_group_functor n f
|
|
|
|
|
|
|
|
|
|
notation `π→*[`:95 n:0 `] `:0 f:95 := phomotopy_group_functor n f
|
|
|
|
|
notation `π→[`:95 n:0 `] `:0 f:95 := homotopy_group_functor n f
|
|
|
|
|
|
|
|
|
|
definition tinverse [constructor] {X : Type*} : π*[1] X →* π*[1] X :=
|
|
|
|
|
ptrunc_functor 0 pinverse
|
|
|
|
|
|
2016-03-06 00:35:12 +00:00
|
|
|
|
definition is_equiv_tinverse [constructor] (A : Type*) : is_equiv (@tinverse A) :=
|
|
|
|
|
by apply @is_equiv_trunc_functor; apply is_equiv_eq_inverse
|
|
|
|
|
|
2016-03-01 04:37:03 +00:00
|
|
|
|
definition ptrunc_functor_pinverse [constructor] {X : Type*}
|
|
|
|
|
: ptrunc_functor 0 (@pinverse X) ~* @tinverse X :=
|
|
|
|
|
begin
|
|
|
|
|
fapply phomotopy.mk,
|
|
|
|
|
{ reflexivity},
|
|
|
|
|
{ reflexivity}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
definition phomotopy_group_functor_mul [constructor] (n : ℕ) {A B : Type*} (g : A →* B)
|
|
|
|
|
(p q : πg[n+1] A) :
|
|
|
|
|
(π→[n + 1] g) (p *[πg[n+1] A] q) = (π→[n + 1] g) p *[πg[n+1] B] (π→[n + 1] g) q :=
|
|
|
|
|
begin
|
|
|
|
|
unfold [ghomotopy_group, homotopy_group] at *,
|
|
|
|
|
refine @trunc.rec _ _ _ (λq, !is_trunc_eq) _ p, clear p, intro p,
|
|
|
|
|
refine @trunc.rec _ _ _ (λq, !is_trunc_eq) _ q, clear q, intro q,
|
|
|
|
|
apply ap tr, apply apn_con
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-02-16 01:59:38 +00:00
|
|
|
|
|
2015-11-16 20:30:28 +00:00
|
|
|
|
end eq
|