{-# OPTIONS --safe #-}
module Cubical.Papers.ComputationalSyntheticCohomology where
open import Cubical.Data.Nat
open import Cubical.Algebra.AbGroup
open import Cubical.Foundations.GroupoidLaws
open import Cubical.Foundations.Prelude as Prelude
import Cubical.Homotopy.HSpace as hSpace
import Cubical.Foundations.Pointed.Homogeneous as Homogeneous
import Cubical.HITs.Susp as Suspensions
import Cubical.HITs.Pushout as Pushouts
import Cubical.Foundations.Path as Paths
import Cubical.Homotopy.EilenbergMacLane.Base as EMSpace
import Cubical.Homotopy.EilenbergMacLane.Properties as EMProps
import Cubical.Homotopy.EilenbergMacLane.WedgeConnectivity as WC
import Cubical.Homotopy.EilenbergMacLane.GroupStructure as EMGr
import Cubical.Algebra.AbGroup.TensorProduct as Tensor
import Cubical.Homotopy.EilenbergMacLane.CupProductTensor as Cup⊗
import Cubical.Homotopy.EilenbergMacLane.CupProduct as Cupₖ
import Cubical.Homotopy.EilenbergMacLane.GradedCommTensor as CupComm
import Cubical.Cohomology.EilenbergMacLane.Base as Cohom
import Cubical.Cohomology.EilenbergMacLane.CupProduct as CohomCup
import Cubical.Axiom.Choice as Choice
import Cubical.HITs.Wedge as ⋁
import Cubical.Homotopy.EilenbergSteenrod as Axioms
import Cubical.Cohomology.EilenbergMacLane.EilenbergSteenrod as SatAxioms
import Cubical.Cohomology.EilenbergMacLane.MayerVietoris as MV
import Cubical.Cohomology.EilenbergMacLane.Gysin as Gysin
import Cubical.Cohomology.EilenbergMacLane.Groups.Unit as HⁿUnit
import Cubical.Cohomology.EilenbergMacLane.Groups.Connected as CohomConnected
import Cubical.Cohomology.EilenbergMacLane.Groups.Sn as CohomSn
import Cubical.Cohomology.EilenbergMacLane.Rings.Sn as CohomRingSn
import Cubical.Cohomology.EilenbergMacLane.Groups.Torus as CohomT²
import Cubical.HITs.Torus as T²
import Cubical.HITs.RPn.Base as RP²
import Cubical.HITs.KleinBottle as K²
import Cubical.Cohomology.EilenbergMacLane.Groups.RP2 as CohomRP²
import Cubical.ZCohomology.CohomologyRings.RP2 as ZCohomRingRP²
import Cubical.Cohomology.EilenbergMacLane.Groups.KleinBottle as CohomK²
import Cubical.ZCohomology.CohomologyRings.KleinBottle as ZCohomRingK²
import Cubical.Cohomology.EilenbergMacLane.Rings.RP2 as RP²Ring
import Cubical.Cohomology.EilenbergMacLane.Rings.KleinBottle as K²Ring
import Cubical.Cohomology.EilenbergMacLane.Rings.RPinf as RP∞Ring
open Prelude renaming (cong₂ to ap²)
open hSpace using (HSpace)
open Homogeneous using (isHomogeneous)
open Suspensions using (Susp)
open Pushouts using (Pushout)
open Paths using (sym≡flipSquare)
open EMSpace using (EM-raw)
open EMSpace using (EM)
open EMProps using (isConnectedEM)
open EMProps using (EMFun-EM→ΩEM+1)
open WC.wedgeConEM using (fun ; left ; right)
open EMGr using (rUnitₖ ; lUnitₖ)
lUnit≡rUnit : ∀ {ℓ} {G : AbGroup ℓ} (n : ℕ)
→ rUnitₖ {G = G} n (EMSpace.0ₖ n) ≡ lUnitₖ {G = G} n (EMSpace.0ₖ n)
lUnit≡rUnit {G = G} zero = AbGroupStr.is-set (snd G) _ _ _ _
lUnit≡rUnit (suc zero) = refl
lUnit≡rUnit (suc (suc n)) = refl
open EMGr using (commₖ)
open EMGr using (assocₖ)
open EMGr using (cong₂+₁ ; cong₂+₂)
open EMGr using (rCancelₖ ; lCancelₖ)
open EMProps using (isCommΩEM-base)
open EMGr using (cong-₁ ; cong-₂)
open EMProps using (EM→ΩEM+1-hom)
open EMProps using (EM→ΩEM+1-sym)
open EMProps using (EM≃ΩEM+1)
open Tensor using (_⨂_)
open EMProps using (isOfHLevel↑∙)
open Cup⊗ renaming (_⌣ₖ_ to _⌣ₖ⊗_)
open Cup⊗ using (⌣ₖ-0ₖ ; 0ₖ-⌣ₖ)
open Homogeneous using (→∙Homogeneous≡)
open Cup⊗.LeftDistributivity using (main)
open Cup⊗.RightDistributivity using (main)
open Cup⊗ using (EM→ΩEM+1-distr₀ₙ ; EM→ΩEM+1-distrₙsuc ; EM→ΩEM+1-distrₙ₀)
open Cup⊗.Assoc using (main)
open CupComm using (⌣ₖ-comm)
open Cupₖ using (assoc⌣ₖ ; distrL⌣ₖ ; distrR⌣ₖ ; ⌣ₖ-0ₖ ; 0ₖ-⌣ₖ)
open Cupₖ using (⌣ₖ-comm)
open Cupₖ using (⌣ₖ-1ₖ ; 1ₖ-⌣ₖ)
open Cohom using (coHomGr)
open CohomCup using (_⌣_)
open Cohom using (coHomRedGr)
open Cohom using (coHom≅coHomRed)
open Cohom using (coHom⁰≅coHomRed⁰)
open Pushouts using (cofib)
open ⋁ using (⋁gen)
open Choice using (satAC)
open Axioms using (coHomTheoryGen)
open SatAxioms using (satisfies-ES-gen)
open MV.MV using ( Ker-i⊂Im-d ; Im-d⊂Ker-i
; Ker-Δ⊂Im-i ; Im-i⊂Ker-Δ
; Ker-d⊂Im-Δ ; Im-Δ⊂Ker-d)
open Gysin.Gysin using ( Im-mapᵣ⊂Ker-mapₗ ; Ker-mapₗ⊂Im-mapᵣ
; Ker-⌣⊂Im-mapₗ ; Im-mapₗ⊂Ker-⌣
; Im--⌣⊂Ker-mapᵣ ; Ker-mapᵣ⊂Im--⌣)
open HⁿUnit using (H⁰[Unit,G]≅G ; Hⁿ⁺¹[Unit,G]≅0)
open Cohom using (coHomTruncEquiv)
open CohomConnected using (H⁰conn)
open CohomSn using (H¹[S¹,G]≅G)
open CohomSn using (Hⁿ[Sⁿ,G]≅G)
open CohomSn using (Hⁿ[Sᵐ⁺ⁿ,G]≅0 ; Hᵐ⁺ⁿ[Sⁿ,G]≅0)
open CohomRingSn using (H*[Sⁿ,G]≅G[X]/<X²>)
open T² using (Torus)
open CohomT² using (H⁰[T²,G]≅G ; H¹[T²,G]≅G×G ; H²[T²,G]≅G ; H³⁺ⁿ[T²,G]≅0)
open RP² using (RP²)
open K² using (KleinBottle)
open CohomRP² using (H¹[RP²,G]≅G[2])
open CohomRP² using (H²[RP²,G]≅G/2)
open CohomRP² using (H³⁺ⁿ[RP²,G]≅0)
open CohomK² using (H⁰[K²,G]≅G ; H¹[K²,G]≅G×H¹[RP²,G]; H²⁺ⁿ[K²,G]≅H²⁺ⁿ[RP²,G])
open ZCohomRingRP² using (RP²-CohomologyRing)
open ZCohomRingK² using (CohomologyRing-𝕂²)
open K²Ring using (Res⌣)
open K²Ring using (sym-cong₂-⌣≡)
open K²Ring using (α²↦1)
open RP²Ring using (H*[RP²,ℤ₂]≅ℤ₂[X]/<X³>)
open K²Ring using (α²↦1 ; βα↦1 ; β²↦0)
open K²Ring using (H*KleinBottle≅ℤ/2[X,Y]/<X³,Y²,XY+X²>)
open RP∞Ring using (H*[RP∞,ℤ₂]≅ℤ₂[X])