{-# OPTIONS --safe --lossy-unification #-}
module Cubical.Algebra.GradedRing.Instances.CohomologyRing where

open import Cubical.Foundations.Prelude

open import Cubical.Data.Nat
open import Cubical.Data.Sigma

open import Cubical.Algebra.Monoid
open import Cubical.Algebra.Monoid.Instances.NatPlusBis
open import Cubical.Algebra.AbGroup
open import Cubical.Algebra.AbGroup.Instances.Unit
open import Cubical.Algebra.DirectSum.DirectSumHIT.Base
open import Cubical.Algebra.GradedRing.Base
open import Cubical.Algebra.GradedRing.DirectSumHIT

open import Cubical.ZCohomology.Base
open import Cubical.ZCohomology.GroupStructure
open import Cubical.ZCohomology.RingStructure.CupProduct
open import Cubical.ZCohomology.RingStructure.RingLaws
open import Cubical.ZCohomology.RingStructure.GradedCommutativity

private variable
   : Level

open PlusBis
open GradedRing-⊕HIT-index
open GradedRing-⊕HIT-⋆

module _
  (A : Type )
  where

  CohomologyRing-GradedRing : GradedRing ℓ-zero 
  CohomologyRing-GradedRing = makeGradedRingSelf
                              NatPlusBis-Monoid
                               k  coHom k A)
                               k  snd (coHomGroup k A) )
                              1⌣
                              _⌣_
                               {k} {l}  0ₕ-⌣ k l)
                               {k} {l}  ⌣-0ₕ k l)
                               _ _ _  sym (ΣPathTransport→PathΣ _ _ ((sym (+'-assoc _ _ _)) , (sym (assoc-⌣ _ _ _ _ _ _)))) )
                               _  sym (ΣPathTransport→PathΣ _ _ (sym (+'-rid _) , sym (lUnit⌣ _ _))))
                               _  ΣPathTransport→PathΣ _ _ (refl , transportRefl _  rUnit⌣ _ _))
                               _ _ _  leftDistr-⌣ _ _ _ _ _)
                              ( λ _ _ _  rightDistr-⌣ _ _ _ _ _)