{-# OPTIONS --safe #-}
module Cubical.Papers.CohomologyRings where
import Cubical.ZCohomology.Groups.S2wedgeS1wedgeS1 as HⁿS²∨S¹∨S¹
open import Cubical.Foundations.Prelude as Prelude
open import Cubical.Data.Sigma as Sigma
import Cubical.HITs.PropositionalTruncation as PT
import Cubical.HITs.SetTruncation as ST
import Cubical.HITs.Truncation as Trunc
import Cubical.Foundations.Pointed as Pointed
import Cubical.Algebra.Group as Group
import Cubical.Algebra.AbGroup as AbGroup
import Cubical.Cohomology.EilenbergMacLane.Base as G-Kⁱ
import Cubical.Homotopy.EilenbergMacLane.GroupStructure as G-Kⁱ-Group
import Cubical.Homotopy.EilenbergMacLane.CupProduct as G-Kⁱ-Cup
import Cubical.Cohomology.EilenbergMacLane.CupProduct as G-H*
import Cubical.Algebra.DirectSum.DirectSumFun.Base as ⊕Fun
open import Cubical.Algebra.DirectSum.DirectSumFun.Properties as ⊕FunProp
import Cubical.Algebra.DirectSum.DirectSumHIT.Base as ⊕HIT
open import Cubical.Algebra.DirectSum.DirectSumHIT.Properties as ⊕HITProp
import Cubical.Algebra.GradedRing.DirectSumFun as GradedRingFun
open import Cubical.Algebra.GradedRing.DirectSumHIT as GradedRingHIT
open GradedRing-⊕HIT-index
import Cubical.Algebra.Ring as Ring
import Cubical.Algebra.Polynomials.UnivariateList.Base as ListPoly
import Cubical.Algebra.CommRing.Instances.Polynomials.UnivariatePolyFun as UniPolyFun
import Cubical.Algebra.CommRing.Instances.Polynomials.UnivariatePolyHIT as UniPolyHIT
import Cubical.Algebra.CommRing.Instances.Polynomials.MultivariatePoly as MultiPolyHIT
import Cubical.ZCohomology.RingStructure.CohomologyRing as ℤCohomologyRing
import Cubical.HITs.S1 as S1
import Cubical.ZCohomology.CohomologyRings.S1 as H*S¹
import Cubical.HITs.Susp as Suspension
import Cubical.HITs.Sn as Sn
import Cubical.ZCohomology.Groups.Sn as HⁿSᵐ
import Cubical.ZCohomology.CohomologyRings.Sn as H*Sᵐ
open import Cubical.Homotopy.Hopf as HopfFibration
import Cubical.ZCohomology.Groups.CP2 as HⁿℂP²
import Cubical.ZCohomology.CohomologyRings.CP2 as H*ℂP²
import Cubical.HITs.Wedge as ⋁
import Cubical.ZCohomology.Groups.S2wedgeS4 as HⁿS²∨S⁴
import Cubical.ZCohomology.CohomologyRings.S2wedgeS4 as H*S²∨S⁴
import Cubical.Cohomology.EilenbergMacLane.RingStructure as GCohomologyRing
import Cubical.HITs.KleinBottle as 𝕂²
import Cubical.HITs.RPn.Base as ℝP²
import Cubical.ZCohomology.Groups.KleinBottle as Hⁿ𝕂²
import Cubical.ZCohomology.CohomologyRings.KleinBottle as H*𝕂²
import Cubical.ZCohomology.Groups.RP2wedgeS1 as HⁿℝP²∨S¹
import Cubical.ZCohomology.CohomologyRings.RP2wedgeS1 as H*ℝP²∨S¹
import Cubical.Cohomology.EilenbergMacLane.Groups.KleinBottle as ℤ/2-Hⁿ𝕂²
open import Cubical.Cohomology.EilenbergMacLane.Rings.KleinBottle as ℤ/2-H*𝕂²
import Cubical.Cohomology.EilenbergMacLane.Groups.RP2wedgeS1 as ℤ/2-HⁿℝP²∨S¹
import Cubical.Cohomology.EilenbergMacLane.Rings.RP2wedgeS1 as ℤ/2-H*ℝP²∨S¹
renaming (RP²∨S¹-CohomologyRing to H*RP²∨S¹≅ℤ/2[X,Y]/<Y³,XY,X²>)
open S1 using (S¹)
𝕋² : Type ℓ-zero
𝕋² = S¹ × S¹
open HⁿS²∨S¹∨S¹ using (S²⋁S¹⋁S¹)
open Prelude using (PathP ; _≡_ ; funExt)
open Prelude using (_∧_ ; _∨_ ; ~_ )
open Prelude using (funExt)
open Sigma using (ΣPathP)
open S1 using (S¹ ; base ; loop)
invS¹ : S¹ → S¹
invS¹ base = base
invS¹ (loop i) = loop (~ i)
open PT using (∥_∥₁)
open Sigma using (∃-syntax)
open ST using (∥_∥₂)
open Trunc using (∥_∥_)
open Pointed using (Pointed)
open Group using (IsGroup ; GroupStr )
import Cubical.Foundations.SIP
open AbGroup using (InducedAbGroup ; InducedAbGroupPath)
open G-Kⁱ using (coHom ; coHomGr)
open G-Kⁱ-Group using (_+ₖ_ ; -ₖ_)
open G-Kⁱ-Cup using (_⌣ₖ_)
open G-Kⁱ using (0ₕ)
open G-H* using (1ₕ ; ⌣-0ₕ ; 0ₕ-⌣ ; ⌣-1ₕ ; 1ₕ-⌣)
open ⊕Fun using (⊕Fun)
open DSF-properties using (_+⊕Fun_ ; +⊕FunComm)
open ⊕HIT using (⊕HIT)
open AbGroupProperties using (inv)
open GradedRingFun using (_prodFun_ ; _prodF_)
open GradedRing-⊕HIT-⋆ using (_prod_ ; prodAssoc ; ⊕HITgradedRing-Ring )
open GradedRing-⊕HIT-⋆
open ExtensionCommRing using (⊕HITgradedRing-CommRing)
open Ring using (InducedRing ; InducedRingPath)
open GradedRingFun using (⊕HIT→⊕Fun-pres-prodF ; ⊕FunGradedRing-CommRing)
open UniPolyFun using (UnivariatePolyFun-CommRing)
open UniPolyHIT using (UnivariatePolyHIT-CommRing)
open ListPoly using (Poly)
open MultiPolyHIT using (PolyCommRing)
import Cubical.Algebra.Polynomials.Multivariate.EquivCarac.An[X]X-A
using (Equiv-QuotientX-A)
open ℤCohomologyRing using (H*R ; H*)
open S1 using (S¹)
open HⁿSᵐ using (Hⁿ-Sⁿ≅ℤ ; Hⁿ-Sᵐ≅0)
open H*S¹ using (CohomologyRing-S¹)
open Suspension using (Susp)
open Sn using (S₊)
open HⁿSᵐ using (Hⁿ-Sⁿ≅ℤ ; Hⁿ-Sᵐ≅0)
open H*Sᵐ using (CohomologyRing-Sⁿ)
open S¹Hopf using (TotalHopf)
open HⁿℂP² using (CP²)
open HⁿℂP² using (H⁰CP²≅ℤ ; H²CP²≅ℤ ; H⁴CP²≅ℤ ; Hⁿ-CP²≅0)
open HⁿℂP² using (H⁴CP²≅ℤ-pos-resp⌣)
open H*ℂP² using (CohomologyRing-CP²)
open ⋁ using (_⋁_)
open HⁿS²∨S⁴ using (S²⋁S⁴)
open HⁿS²∨S⁴ using (H⁰-S²⋁S⁴≅ℤ ; H²-S²⋁S⁴≅ℤ ; H⁴-S²⋁S⁴≅ℤ ; Hⁿ-S²⋁S⁴≅0-bis)
open H*S²∨S⁴ using (CohomologyRing-S²⋁S⁴)
open 𝕂² using (KleinBottle)
open ℝP² using (RP²)
open HⁿℝP²∨S¹ using (RP²⋁S¹)
open Hⁿ𝕂² using (H⁰-𝕂²≅ℤ ; H¹-𝕂²≅ℤ ; H²-𝕂²≅Bool ; Hⁿ⁺³-𝕂²≅0)
open HⁿℝP²∨S¹ using (H⁰-RP²⋁S¹≅ℤ ; H¹-RP²⋁S¹≅ℤ ; H²-RP²⋁S¹≅Bool ; Hⁿ-RP²⋁S¹≅0)
open H*𝕂² using (CohomologyRing-𝕂²)
open H*ℝP²∨S¹ using (CohomologyRing-RP²⋁S¹)
open ℤ/2-Hⁿ𝕂² using (H⁰[K²,ℤ/2]≅ℤ/2 ; H¹[K²,ℤ/2]≅ℤ/2×ℤ/2 ; H²[K²,ℤ/2]≅ℤ/2 ; H³⁺ⁿ[K²,G]≅0)
open ℤ/2-HⁿℝP²∨S¹ using (H⁰[RP²∨S¹,ℤ/2]≅ℤ/2 ; H¹[RP²∨S¹,ℤ/2]≅ℤ/2×ℤ/2 ; H²[RP²∨S¹,ℤ/2]≅ℤ/2 ; H³⁺ⁿ[RP²∨S¹,ℤ/2]≅Unit)
open ℤ/2-H*𝕂² using (H*KleinBottle≅ℤ/2[X,Y]/<X³,Y²,XY+X²>)
open ℤ/2-H*ℝP²∨S¹ using (H*RP²∨S¹≅ℤ/2[X,Y]/<Y³,XY,X²>)