@@ -9,6 +9,7 @@ open import Cubical.Data.Sigma
99
1010open import Cubical.Algebra.CommRing
1111open import Cubical.Algebra.CommRing.Ideal
12+ open import Cubical.HITs.PropositionalTruncation as PT
1213open import Cubical.Algebra.Ring.Properties
1314open RingTheory
1415
@@ -34,6 +35,26 @@ module _ {ℓ : Level} (R : CommRing ℓ) {X : Type ℓ} (f : X → ⟨ R ⟩) w
3435 genIdeal = makeIdeal (λ r → generatedIdeal r , squash)
3536 add zero λ r → mul
3637
38+ data isInGeneratedIdeal : (r : ⟨ R ⟩) → Type ℓ where
39+ isImage : (r : ⟨ R ⟩) → (x : X) → (f x ≡ r) → isInGeneratedIdeal r
40+ iszero : (r : ⟨ R ⟩) → (0r ≡ r) → isInGeneratedIdeal r
41+ isSum : (r : ⟨ R ⟩) → (s t : ⟨ R ⟩) → (s + t ≡ r) →
42+ isInGeneratedIdeal s → isInGeneratedIdeal t → isInGeneratedIdeal r
43+ isMul : (r : ⟨ R ⟩) → (s t : ⟨ R ⟩) → (s · t ≡ r) →
44+ isInGeneratedIdeal t → isInGeneratedIdeal r
45+
46+ generatedIdealDecomp : ( r : ⟨ R ⟩ ) → generatedIdeal r → ∥ isInGeneratedIdeal r ∥₁
47+ generatedIdealDecomp .(f x) (single x) = ∣ isImage (f x) x refl ∣₁
48+ generatedIdealDecomp .(0r) zero = ∣ iszero 0r refl ∣₁
49+ generatedIdealDecomp .(s + t) (add {x = s} {y = t} s∈I t∈I) =
50+ PT.map2 (isSum (s + t) s t refl)
51+ (generatedIdealDecomp s s∈I) (generatedIdealDecomp t t∈I)
52+ generatedIdealDecomp .(s · t) (mul {r = s} {x = t} t∈I ) =
53+ PT.map (isMul (s · t) s t refl) (generatedIdealDecomp t t∈I)
54+ generatedIdealDecomp r (squash r∈I r∈I' i) =
55+ ∥∥-isPropDep isInGeneratedIdeal
56+ (generatedIdealDecomp r r∈I) (generatedIdealDecomp r r∈I') refl i
57+
3758 _/Im_ : CommRing ℓ
3859 _/Im_ = R / genIdeal
3960
0 commit comments