eilenberg maclane spaces forms a spectrum

This commit is contained in:
Michael Zhang 2025-01-08 16:32:17 -05:00
parent 59bea28f1d
commit e21f6f701e
9 changed files with 276 additions and 176 deletions

View file

@ -4,7 +4,55 @@ module ThesisWork.Cohomology where
open import Cubical.Foundations.Prelude
open import Cubical.Foundations.Pointed
open import Cubical.Foundations.Isomorphism
open import Cubical.Homotopy.Loopspace
open import Cubical.Algebra.AbGroup
open import Cubical.Algebra.Group
open import Cubical.HITs.SetTruncation as ST
open import Cubical.HITs.Sn
open import Cubical.HITs.Susp
open import Cubical.Homotopy.EilenbergMacLane.Base
open import Cubical.Data.Nat
open import Cubical.Foundations.Equiv
Cohomology : {l} (X : Pointed l) AbGroup l
Cohomology = {! !}
private
variable
' '' : Level
-- nth Unreduced cohomology
UnreducedCohomology : (n : ) (X : Type ) (G : AbGroup ') Type (-max ')
UnreducedCohomology n X G = (X EM G n) ∥₂
-- nth Reduced cohomology
ReducedCohomology : (n : ) (X : Pointed ) (G : AbGroup ') Type (-max ')
ReducedCohomology n X G = X EM∙ G n ∥₂
-- Examples
module Examples where
-- Theorem 4.1.7 in JHY thesis
module UnitCohomology (k : ) where
open import Cubical.Data.Unit
open import Cubical.Data.Int
open import Cubical.Algebra.AbGroup.Instances.Int
Unit∙ : Pointed₀
Unit∙ = Unit , tt
Lift∙ : {} Pointed₀ Pointed
Lift∙ (T , t) = (Lift T) , lift t
module _ {B : Pointed₀} {n : } where
lemma1 : {n : }
(S₊∙ (suc n) (Ω^ n) B )
≃∙ (S₊∙ n (Ω^ (suc n)) B )
lemma1 {n} =
(S₊∙ (suc n) (Ω^ n) B ) ≃∙⟨ {! !}
(Susp∙ (S₊ n) (Ω^ n) B ) ≃∙⟨ invEquiv (isoToEquiv ΩSuspAdjointIso) , {! !}
(S₊∙ n Ω ((Ω^ n) B) ) ≃∙⟨ {! idEquiv∙ !}
(S₊∙ n (Ω^ (suc n)) B ) ∎≃∙
lemma : (Lift∙ {} (S₊∙ n) B ) ≃∙ (Ω^ n) B
lemma = {! !}
UnitCohomology : ReducedCohomology k Unit∙ AbGroup Unit
UnitCohomology = isContr→≡Unit ({! !} , {! !})

View file

@ -2,167 +2,24 @@
module ThesisWork.EMSpace where
open import Cubical.Algebra.Group
open import Cubical.Algebra.Group.Base
open import Cubical.Algebra.Monoid
open import Cubical.Algebra.Semigroup
open import Cubical.Algebra.Group.Morphisms
open import Cubical.Data.Nat using ()
open import Cubical.Foundations.Function
open import Cubical.Foundations.HLevels
open import Cubical.Foundations.GroupoidLaws
open import Cubical.Foundations.Equiv
open import Cubical.Foundations.Isomorphism
open import Cubical.Foundations.Univalence
open import Cubical.Foundations.Pointed
open import Cubical.Foundations.Prelude
open import Cubical.Foundations.Structure
open import Cubical.Homotopy.Loopspace
open import Cubical.Homotopy.Group.Base
open import Cubical.HITs.SetTruncation as ST hiding (rec)
open import Cubical.HITs.GroupoidTruncation as GT hiding (rec)
open import Cubical.Algebra.Group
variable
' : Level
data K[_,1] { : Level} (G : Group ) : Type where
base : K[ G ,1]
loop : G base base
loop-1g : loop (str G .GroupStr.1g) refl
loop-∙ : (x y : G ) loop (G .snd .GroupStr._·_ x y) loop y loop x
squash : (x y : K[ G ,1]) (p q : x y) (r s : p q) r s
private
variable
' '' : Level
module _ { : Level} (GG : Group ) where
G = GG .fst
open GroupStr (GG .snd)
data EM0 : Type where
base : EM0
loop : G base base
loop-1g : loop 1g refl
loop-∙ : (x y : G) loop (x · y) loop y loop x
squash : (x y : EM0) (p q : x y) (r s : p q) r s
module _ where
open import Cubical.HITs.S1 renaming (base to S¹-base; loop to S¹-loop)
open import Cubical.Data.Int
open import Cubical.Algebra.Group.Instances.Int
test : K[ Group ,1]
test = isoToEquiv (iso {! !} {! !} {! !} {! !}) where
loop^_ : S¹-base S¹-base
-- loop^ pos (suc n) = (loop^ (pos n)) ∙ S¹-loop
-- loop^ pos zero = refl
-- loop^ negsuc zero = sym S¹-loop
-- loop^ negsuc (suc n) = (loop^ (negsuc n)) ∙ sym S¹-loop
Code1 : Type
Code1 S¹-base =
Code1 (S¹-loop i) = sucPath i
-- f : S¹ → K[ Group ,1]
-- f S¹-base = base
-- f (S¹-loop i) = loop (subst Code1 {! !} {! !}) i
-- f : S¹ → K[ Group ,1]
-- f S¹-base = base
-- f (S¹-loop i) = loop (subst Code1 {! !} {! !}) i
-- g : K[ Group ,1] → S¹
-- g base = S¹-base
-- g (loop x i) = {! !}
-- g (loop-1g i i₁) = {! !}
-- g (loop-∙ x y i i₁) = {! !}
-- g (squash x y p q r s i j k) = {! !}
-------------------------------------------------------------------------------
-- Properties
-- ΩK(G,1) ≃ G
module _ (G : Group ) where
open GroupStr (G .snd)
_⊙_ = _·_
K[G,1] = K[ G ,1]
K[G,1]∙ : Pointed
K[G,1]∙ = K[G,1] , base
ΩK[G,1] = Ω K[G,1]∙
π1K[G,1] = π 1 K[G,1]∙
lemma1 : isOfHLevel 3 K[G,1]
lemma1 = squash
lemma2 : isOfHLevel 2 ΩK[G,1]
lemma2 = squash base base
ΩSetG : Pointed (-suc )
ΩSetG = (hSet ) , (fst G) , is-set
module Codes-aux where
f : (g : G ) G G
f x = isoToEquiv (iso (λ y y x) (λ y y inv x) fg gf) where
fg : section (λ y y x) (λ y y inv x)
fg b = sym (·Assoc b (inv x) x) cong (b ⊙_) (·InvL x) ·IdR b
gf : retract (λ y y x) (λ y y inv x)
gf a = sym (·Assoc a x (inv x)) cong (a ⊙_) (·InvR x) ·IdR a
feq : (g : G ) G G
feq g = ua (f g)
f1≡id : f 1g idEquiv G
f1≡id = equivEq (funExt (λ x ·IdR x))
feq1≡refl : feq 1g refl
feq1≡refl = cong ua f1≡id uaIdEquiv
flemma2 : (x y : G ) f (x · y) compEquiv (f x) (f y)
flemma2 x y = equivEq (funExt (λ z ·Assoc z x y))
S = Square
transpose : {A : Type } {a00 a01 a10 a11 : A}
{a0- : a00 a01} {a1- : a10 a11} {a-0 : a00 a10} {a-1 : a01 a11}
Square a0- a1- a-0 a-1 Square a-0 a-1 a0- a1-
transpose s i j = s j i
Codes : K[G,1] hSet
Codes base = G , is-set
Codes (loop x i) = (Codes-aux.feq x i) , z i where
z : PathP (λ i isSet (Codes-aux.feq x i)) is-set is-set
z = toPathP (isPropIsSet (transport (λ i₁ isSet (Codes-aux.feq x i₁)) is-set) is-set)
Codes (loop-1g i j) = {! !}
Codes (loop-∙ x y i j) = {! !} , {! !}
Codes (squash x y p q r s i j k) = CodesGpd (Codes x) (Codes y) (cong Codes p) (cong Codes q) (cong (cong Codes) r) (cong (cong Codes) s) i j k where
CodesGpd = isOfHLevelTypeOfHLevel 2
-- For point-free transports
Codes2 : K[G,1] Type
Codes2 x = Codes x .fst
fact : (x y : G ) subst Codes2 (loop x) y y x
fact x y = let z = sym (subst-filler {! !} {! !} {! !}) in {! !}
encode : (z : K[G,1]) base z Codes z
encode z p = subst Codes2 p 1g
decode : G base base
decode x = loop x
encode-decode : (x : G ) encode base (decode x) x
encode-decode x =
encode base (decode x) ≡⟨ refl
encode base (loop x) ≡⟨ refl
subst Codes2 (loop x) 1g ≡⟨ fact x 1g
1g x ≡⟨ ·IdL x
x
ΩKG1≃G' : GroupIso {! ΩK[G,1] !} G
ΩKG1≃G : ΩK[G,1] G
ΩKG1≃G = isoToEquiv (iso f {! !} {! !} {! !}) where
f : ΩK[G,1] G
f p = {! !}
ΩKG1-idem-trunc : π 1 (K[G,1]∙) ΩK[G,1]
ΩKG1-idem-trunc = isoToEquiv (setTruncIdempotentIso lemma2)
π₁KG1≃G : πGr 0 (K[G,1]∙) G
π₁KG1≃G = compEquiv ΩKG1-idem-trunc ΩKG1≃G
-- Uniqueness
module _ (n : ) (X Y : Pointed ) where
open import Cubical.HITs.EilenbergMacLane1
open import Cubical.Homotopy.EilenbergMacLane.Base

View file

@ -0,0 +1,168 @@
{-# OPTIONS --cubical #-}
module ThesisWork.EMSpaceOld0 where
open import Cubical.Algebra.Group
open import Cubical.Algebra.Group.Base
open import Cubical.Algebra.Monoid
open import Cubical.Algebra.Semigroup
open import Cubical.Algebra.Group.Morphisms
open import Cubical.Data.Nat using ()
open import Cubical.Foundations.Function
open import Cubical.Foundations.HLevels
open import Cubical.Foundations.GroupoidLaws
open import Cubical.Foundations.Equiv
open import Cubical.Foundations.Isomorphism
open import Cubical.Foundations.Univalence
open import Cubical.Foundations.Pointed
open import Cubical.Foundations.Prelude
open import Cubical.Foundations.Structure
open import Cubical.Homotopy.Loopspace
open import Cubical.Homotopy.Group.Base
open import Cubical.HITs.SetTruncation as ST hiding (rec)
open import Cubical.HITs.GroupoidTruncation as GT hiding (rec)
variable
' : Level
data K[_,1] { : Level} (G : Group ) : Type where
base : K[ G ,1]
loop : G base base
loop-1g : loop (str G .GroupStr.1g) refl
loop-∙ : (x y : G ) loop (G .snd .GroupStr._·_ x y) loop y loop x
squash : (x y : K[ G ,1]) (p q : x y) (r s : p q) r s
module _ where
open import Cubical.HITs.S1 renaming (base to S¹-base; loop to S¹-loop)
open import Cubical.Data.Int
open import Cubical.Algebra.Group.Instances.Int
test : K[ Group ,1]
test = isoToEquiv (iso {! !} {! !} {! !} {! !}) where
loop^_ : S¹-base S¹-base
-- loop^ pos (suc n) = (loop^ (pos n)) ∙ S¹-loop
-- loop^ pos zero = refl
-- loop^ negsuc zero = sym S¹-loop
-- loop^ negsuc (suc n) = (loop^ (negsuc n)) ∙ sym S¹-loop
Code1 : Type
Code1 S¹-base =
Code1 (S¹-loop i) = sucPath i
-- f : S¹ → K[ Group ,1]
-- f S¹-base = base
-- f (S¹-loop i) = loop (subst Code1 {! !} {! !}) i
-- f : S¹ → K[ Group ,1]
-- f S¹-base = base
-- f (S¹-loop i) = loop (subst Code1 {! !} {! !}) i
-- g : K[ Group ,1] → S¹
-- g base = S¹-base
-- g (loop x i) = {! !}
-- g (loop-1g i i₁) = {! !}
-- g (loop-∙ x y i i₁) = {! !}
-- g (squash x y p q r s i j k) = {! !}
-------------------------------------------------------------------------------
-- Properties
-- ΩK(G,1) ≃ G
module _ (G : Group ) where
open GroupStr (G .snd)
_⊙_ = _·_
K[G,1] = K[ G ,1]
K[G,1]∙ : Pointed
K[G,1]∙ = K[G,1] , base
ΩK[G,1] = Ω K[G,1]∙
π1K[G,1] = π 1 K[G,1]∙
lemma1 : isOfHLevel 3 K[G,1]
lemma1 = squash
lemma2 : isOfHLevel 2 ΩK[G,1]
lemma2 = squash base base
ΩSetG : Pointed (-suc )
ΩSetG = (hSet ) , (fst G) , is-set
module Codes-aux where
f : (g : G ) G G
f x = isoToEquiv (iso (λ y y x) (λ y y inv x) fg gf) where
fg : section (λ y y x) (λ y y inv x)
fg b = sym (·Assoc b (inv x) x) cong (b ⊙_) (·InvL x) ·IdR b
gf : retract (λ y y x) (λ y y inv x)
gf a = sym (·Assoc a x (inv x)) cong (a ⊙_) (·InvR x) ·IdR a
feq : (g : G ) G G
feq g = ua (f g)
f1≡id : f 1g idEquiv G
f1≡id = equivEq (funExt (λ x ·IdR x))
feq1≡refl : feq 1g refl
feq1≡refl = cong ua f1≡id uaIdEquiv
flemma2 : (x y : G ) f (x · y) compEquiv (f x) (f y)
flemma2 x y = equivEq (funExt (λ z ·Assoc z x y))
S = Square
transpose : {A : Type } {a00 a01 a10 a11 : A}
{a0- : a00 a01} {a1- : a10 a11} {a-0 : a00 a10} {a-1 : a01 a11}
Square a0- a1- a-0 a-1 Square a-0 a-1 a0- a1-
transpose s i j = s j i
Codes : K[G,1] hSet
Codes base = G , is-set
Codes (loop x i) = (Codes-aux.feq x i) , z i where
z : PathP (λ i isSet (Codes-aux.feq x i)) is-set is-set
z = toPathP (isPropIsSet (transport (λ i₁ isSet (Codes-aux.feq x i₁)) is-set) is-set)
Codes (loop-1g i j) = {! !}
Codes (loop-∙ x y i j) = {! !} , {! !}
Codes (squash x y p q r s i j k) = CodesGpd (Codes x) (Codes y) (cong Codes p) (cong Codes q) (cong (cong Codes) r) (cong (cong Codes) s) i j k where
CodesGpd = isOfHLevelTypeOfHLevel 2
-- For point-free transports
Codes2 : K[G,1] Type
Codes2 x = Codes x .fst
fact : (x y : G ) subst Codes2 (loop x) y y x
fact x y = let z = sym (subst-filler {! !} {! !} {! !}) in {! !}
encode : (z : K[G,1]) base z Codes z
encode z p = subst Codes2 p 1g
decode : G base base
decode x = loop x
encode-decode : (x : G ) encode base (decode x) x
encode-decode x =
encode base (decode x) ≡⟨ refl
encode base (loop x) ≡⟨ refl
subst Codes2 (loop x) 1g ≡⟨ fact x 1g
1g x ≡⟨ ·IdL x
x
ΩKG1≃G' : GroupIso {! ΩK[G,1] !} G
ΩKG1≃G : ΩK[G,1] G
ΩKG1≃G = isoToEquiv (iso f {! !} {! !} {! !}) where
f : ΩK[G,1] G
f p = {! !}
ΩKG1-idem-trunc : π 1 (K[G,1]∙) ΩK[G,1]
ΩKG1-idem-trunc = isoToEquiv (setTruncIdempotentIso lemma2)
π₁KG1≃G : πGr 0 (K[G,1]∙) G
π₁KG1≃G = compEquiv ΩKG1-idem-trunc ΩKG1≃G
-- Uniqueness
module _ (n : ) (X Y : Pointed ) where

View file

@ -5,6 +5,7 @@
module ThesisWork.Ext where
open import Cubical.Foundations.Prelude
open import Cubical.Foundations.Pointed
open import Cubical.Foundations.Structure
open import Cubical.Foundations.Function
open import Cubical.Algebra.Module

View file

@ -50,14 +50,15 @@ module _ where
Fiber : {A B : Pointed } (f : A B) Pointed
Fiber {A = A , a} {B = B , b} (f , feq) = (fiber f b) , a , feq
-- General definition of p₁ as the first projection
p₁ : {} {A∙ B∙ : Pointed } {f∙ : A∙ B∙} Fiber f∙ A∙
p₁ = fst , refl
-- Lemma 4.1.5 in FVD thesis
-- Suppose given a pointed map f : A →∗ B
module _ {A @ (A , a) B∙ @ (B , b) : Pointed } (f∙ @ (f , f-eq) : A∙ B∙) where
private
-- Let p1 : fib_f →∗ A be the first projection.
p₁ : Fiber f∙ A∙
p₁ = fst , refl
lol : (f∙ .fst a b) , f-eq ≃∙ (b b) , (λ i b)
lol .fst = pathToEquiv (cong (λ z z b) f-eq)
lol .snd i j = {! !}
@ -81,10 +82,6 @@ module πLES {X Y : Pointed } (f : X →∙ Y) where
πSeq (n , 2 , p) = πGr n F
πSeq (n , suc (suc (suc k)) , p) = ⊥-rec (¬m+n<m p)
-- First projection pointed function
p₁ : F X
p₁ = fst , refl
-- Step 1
module Step1 where
arrow* = Σ (Pointed ) λ X Σ (Pointed ) λ Y X Y

View file

@ -25,22 +25,24 @@ flowchart TB
Exactness --> ExactSequence
ChainComplex --> Homology
ChainComplex --> CochainComplex
ChainComplex --> Homology
CochainComplex --> Cohomology
ChainComplex --> ExactSequence
CochainComplex --> ExactSequence
Cohomology --> Theorem5410
ExactCouple --> DerivedCouple
ExactSequence --> ExactCouple
ExactSequence --> HomotopyGroupLES
HomotopyGroupLES --> SpectrumLES
Spectrum --> SpectrumMap
SpectrumMap --> SpectrumMapTruncation
SpectrumMapTruncation --> PostnikovTowerForSpectra
ExactCouple --> BoundedExactCouple
BoundedExactCouple --> ExactCoupleConvergence
ExactCoupleConvergence --> Theorem537
Lemma549 --> Theorem5410
Theorem537 --> Theorem5410
PostnikovTowerForSpectra --> Theorem5410

View file

@ -18,12 +18,18 @@ module _ {N : Level} (N : SuccStr N) where
Sequence : { : Level} (A : Index Type ) Type (-max N)
Sequence A = (n : Index) A n
record IsChainComplex {S N : Level}
record IsChainComplex {S : Level}
(S : Sequence (λ _ Pointed S))
(F : Sequence (λ n S (succ n) S n))
: Type (-max N S) where
field
property : (n : Index)
CC : (n : Index)
let Tₙ₊₂ = S (succ (succ n)) in let Tₙ₊₁ = S (succ n) in let Tₙ = S n in
let dₙ₊₁ = F (succ n) in let dₙ = F n in
(dₙ ∘∙ dₙ₊₁) const∙ Tₙ₊₂ Tₙ
(dₙ ∘∙ dₙ₊₁) const∙ Tₙ₊₂ Tₙ
record IsExactSequence {S : Level}
(S : Sequence (λ _ Pointed S))
(F : Sequence (λ n S (succ n) S n))
: Type (-max N S) where
field

View file

@ -41,4 +41,4 @@ module _ (R : Ring ) where
dᵣ∘dᵣ≡0 : (s : ) compGradedModuleHom (d s) (d s) idGradedModuleHom (E s)
-- Isomorphisms
-- the cohomology of the cochain complex determined by dᵣ.
-- the cohomology of the cochain complex determined by dᵣ.

View file

@ -3,6 +3,7 @@
module ThesisWork.Spectrum where
open import Cubical.Foundations.Prelude
open import Cubical.Foundations.Isomorphism
open import Cubical.Foundations.Pointed
open import Cubical.Foundations.Structure
open import Cubical.Foundations.Equiv
@ -35,6 +36,7 @@ isPtEquivTo≃∙ f (fEqv , fPt) = (f .fst , fEqv) , fPt
-- An Ω-spectrum or spectrum is a prespectrum (Y, e) where eₙ is a
-- pointed equivalence for all n.
record IsSpectrum { ' : Level} {N : SuccStr '} (P : Prespectrum { = } N) : Type (-max ') where
constructor mkIsSpectrum
open Prespectrum P
open SuccStr N
field
@ -70,4 +72,23 @@ SpectrumMap S₁ S₂ = PrespectrumMap (S₁ .fst) (S₂ .fst)
-- open SuccStr N
-- field
-- f : (n : Index) → Y₁ n →∙ Y₂ n
-- p : (n : Index) → (e₂ n ∘∙ f n) ∙∼ (Ω→ (f (succ n)) ∘∙ e₁ n)
-- p : (n : Index) → (e₂ n ∘∙ f n) ∙∼ (Ω→ (f (succ n)) ∘∙ e₁ n)
module _ where
open import Cubical.HITs.EilenbergMacLane1
open import Cubical.Homotopy.EilenbergMacLane.Base
open import Cubical.Homotopy.EilenbergMacLane.Properties
open import Cubical.Structures.Successor
open import Cubical.Data.Nat
open import Cubical.Algebra.AbGroup
-- EilenbergMacLane spaces form a spectrum
open Prespectrum
EMPrespectrum : (G : AbGroup ) Prespectrum { = } +
EMPrespectrum G .Y n = EM∙ G n
EMPrespectrum G .e n = EM→ΩEM+1∙ n
EMSpectrum : (G : AbGroup ) Spectrum { = } +
EMSpectrum G = EMPrespectrum G , mkIsSpectrum (λ n isoToIsEquiv (Iso-EM-ΩEM+1 n) , EM→ΩEM+1-0ₖ n)