1111
1212open import Algebra
1313open import Algebra.Solver.Ring.AlmostCommutativeRing
14-
15- open import Relation.Binary
14+ open import Relation.Binary.Core using (WeaklyDecidable)
1615
1716module Algebra.Solver.Ring
1817 {r₁ r₂ r₃}
1918 (Coeff : RawRing r₁) -- Coefficient "ring".
2019 (R : AlmostCommutativeRing r₂ r₃) -- Main "ring".
2120 (morphism : Coeff -Raw-AlmostCommutative⟶ R)
22- (_coeff≟_ : Decidable (Induced-equivalence morphism))
21+ (_coeff≟_ : WeaklyDecidable (Induced-equivalence morphism))
2322 where
2423
2524open import Algebra.Solver.Ring.Lemmas Coeff R morphism
@@ -40,11 +39,12 @@ import Relation.Binary.Reflection as Reflection
4039open import Data.Nat.Base using (ℕ; suc; zero)
4140open import Data.Fin using (Fin; zero; suc)
4241open import Data.Vec using (Vec; []; _∷_; lookup)
42+ open import Data.Maybe.Base using (just; nothing)
4343open import Function
4444open import Level using (_⊔_)
4545
4646infix 9 :-_ -H_ -N_
47- infixr 9 _:^_ _^N_
47+ infixr 9 _:×_ _: ^_ _^N_
4848infix 8 _*x+_ _*x+HN_ _*x+H_
4949infixl 8 _:*_ _*N_ _*H_ _*NH_ _*HN_
5050infixl 7 _:+_ _:-_ _+H_ _+N_
@@ -77,6 +77,10 @@ _:*_ = op [*]
7777_:-_ : ∀ {n} → Polynomial n → Polynomial n → Polynomial n
7878x :- y = x :+ :- y
7979
80+ _:×_ : ∀ {n} → ℕ → Polynomial n → Polynomial n
81+ zero :× p = con C.0#
82+ suc m :× p = p :+ m :× p
83+
8084-- Semantics.
8185
8286sem : Op → Op₂ Carrier
@@ -161,24 +165,24 @@ mutual
161165
162166mutual
163167
164- -- Equality is decidable.
168+ -- Equality is weakly decidable.
165169
166- _≟H_ : ∀ {n} → Decidable (_≈H_ {n = n})
167- ∅ ≟H ∅ = yes ∅
168- ∅ ≟H (_ *x+ _) = no λ ()
169- (_ *x+ _) ≟H ∅ = no λ ()
170+ _≟H_ : ∀ {n} → WeaklyDecidable (_≈H_ {n = n})
171+ ∅ ≟H ∅ = just ∅
172+ ∅ ≟H (_ *x+ _) = nothing
173+ (_ *x+ _) ≟H ∅ = nothing
170174 (p₁ *x+ c₁) ≟H (p₂ *x+ c₂) with p₁ ≟H p₂ | c₁ ≟N c₂
171- ... | yes p₁≈p₂ | yes c₁≈c₂ = yes (p₁≈p₂ *x+ c₁≈c₂)
172- ... | _ | no c₁≉c₂ = no λ { (_ *x+ c₁≈c₂) → c₁≉c₂ c₁≈c₂ }
173- ... | no p₁≉p₂ | _ = no λ { (p₁≈p₂ *x+ _) → p₁≉p₂ p₁≈p₂ }
175+ ... | just p₁≈p₂ | just c₁≈c₂ = just (p₁≈p₂ *x+ c₁≈c₂)
176+ ... | _ | nothing = nothing
177+ ... | nothing | _ = nothing
174178
175- _≟N_ : ∀ {n} → Decidable (_≈N_ {n = n})
179+ _≟N_ : ∀ {n} → WeaklyDecidable (_≈N_ {n = n})
176180 con c₁ ≟N con c₂ with c₁ coeff≟ c₂
177- ... | yes c₁≈c₂ = yes (con c₁≈c₂)
178- ... | no c₁≉c₂ = no λ { (con c₁≈c₂) → c₁≉c₂ c₁≈c₂}
181+ ... | just c₁≈c₂ = just (con c₁≈c₂)
182+ ... | nothing = nothing
179183 poly p₁ ≟N poly p₂ with p₁ ≟H p₂
180- ... | yes p₁≈p₂ = yes (poly p₁≈p₂)
181- ... | no p₁≉p₂ = no λ { (poly p₁≈p₂) → p₁≉p₂ p₁≈p₂ }
184+ ... | just p₁≈p₂ = just (poly p₁≈p₂)
185+ ... | nothing = nothing
182186
183187mutual
184188
@@ -226,8 +230,8 @@ mutual
226230_*x+HN_ : ∀ {n} → HNF (suc n) → Normal n → HNF (suc n)
227231(p *x+ c′) *x+HN c = (p *x+ c′) *x+ c
228232∅ *x+HN c with c ≟N 0N
229- ... | yes c≈0 = ∅
230- ... | no c≉0 = ∅ *x+ c
233+ ... | just c≈0 = ∅
234+ ... | nothing = ∅ *x+ c
231235
232236mutual
233237
@@ -254,14 +258,14 @@ mutual
254258 _*NH_ : ∀ {n} → Normal n → HNF (suc n) → HNF (suc n)
255259 c *NH ∅ = ∅
256260 c *NH (p *x+ c′) with c ≟N 0N
257- ... | yes c≈0 = ∅
258- ... | no c≉0 = (c *NH p) *x+ (c *N c′)
261+ ... | just c≈0 = ∅
262+ ... | nothing = (c *NH p) *x+ (c *N c′)
259263
260264 _*HN_ : ∀ {n} → HNF (suc n) → Normal n → HNF (suc n)
261265 ∅ *HN c = ∅
262266 (p *x+ c′) *HN c with c ≟N 0N
263- ... | yes c≈0 = ∅
264- ... | no c≉0 = (p *HN c) *x+ (c′ *N c)
267+ ... | just c≈0 = ∅
268+ ... | nothing = (p *HN c) *x+ (c′ *N c)
265269
266270 _*H_ : ∀ {n} → HNF (suc n) → HNF (suc n) → HNF (suc n)
267271 ∅ *H _ = ∅
@@ -342,17 +346,17 @@ normalise (:- t) = -N normalise t
342346 ∀ ρ → ⟦ p *x+HN c ⟧H ρ ≈ ⟦ p *x+ c ⟧H ρ
343347*x+HN≈*x+ (p *x+ c′) c ρ = refl
344348*x+HN≈*x+ ∅ c (x ∷ ρ) with c ≟N 0N
345- ... | yes c≈0 = begin
349+ ... | just c≈0 = begin
346350 0# ≈⟨ 0≈⟦0⟧ c≈0 ρ ⟩
347351 ⟦ c ⟧N ρ ≈⟨ sym $ lemma₆ _ _ ⟩
348352 0# * x + ⟦ c ⟧N ρ ∎
349- ... | no c≉0 = refl
353+ ... | nothing = refl
350354
351355∅*x+HN-homo : ∀ {n} (c : Normal n) x ρ →
352356 ⟦ ∅ *x+HN c ⟧H (x ∷ ρ) ≈ ⟦ c ⟧N ρ
353357∅*x+HN-homo c x ρ with c ≟N 0N
354- ... | yes c≈0 = 0≈⟦0⟧ c≈0 ρ
355- ... | no c≉0 = lemma₆ _ _
358+ ... | just c≈0 = 0≈⟦0⟧ c≈0 ρ
359+ ... | nothing = lemma₆ _ _
356360
357361mutual
358362
@@ -396,11 +400,11 @@ mutual
396400 ⟦ c *NH p ⟧H (x ∷ ρ) ≈ ⟦ c ⟧N ρ * ⟦ p ⟧H (x ∷ ρ)
397401 *NH-homo c ∅ x ρ = sym (*-zeroʳ _)
398402 *NH-homo c (p *x+ c′) x ρ with c ≟N 0N
399- ... | yes c≈0 = begin
403+ ... | just c≈0 = begin
400404 0# ≈⟨ sym (*-zeroˡ _) ⟩
401405 0# * (⟦ p ⟧H (x ∷ ρ) * x + ⟦ c′ ⟧N ρ) ≈⟨ 0≈⟦0⟧ c≈0 ρ ⟨ *-cong ⟩ refl ⟩
402406 ⟦ c ⟧N ρ * (⟦ p ⟧H (x ∷ ρ) * x + ⟦ c′ ⟧N ρ) ∎
403- ... | no c≉0 = begin
407+ ... | nothing = begin
404408 ⟦ c *NH p ⟧H (x ∷ ρ) * x + ⟦ c *N c′ ⟧N ρ ≈⟨ (*NH-homo c p x ρ ⟨ *-cong ⟩ refl) ⟨ +-cong ⟩ *N-homo c c′ ρ ⟩
405409 (⟦ c ⟧N ρ * ⟦ p ⟧H (x ∷ ρ)) * x + (⟦ c ⟧N ρ * ⟦ c′ ⟧N ρ) ≈⟨ lemma₃ _ _ _ _ ⟩
406410 ⟦ c ⟧N ρ * (⟦ p ⟧H (x ∷ ρ) * x + ⟦ c′ ⟧N ρ) ∎
@@ -410,11 +414,11 @@ mutual
410414 ⟦ p *HN c ⟧H (x ∷ ρ) ≈ ⟦ p ⟧H (x ∷ ρ) * ⟦ c ⟧N ρ
411415 *HN-homo ∅ c x ρ = sym (*-zeroˡ _)
412416 *HN-homo (p *x+ c′) c x ρ with c ≟N 0N
413- ... | yes c≈0 = begin
417+ ... | just c≈0 = begin
414418 0# ≈⟨ sym (*-zeroʳ _) ⟩
415419 (⟦ p ⟧H (x ∷ ρ) * x + ⟦ c′ ⟧N ρ) * 0# ≈⟨ refl ⟨ *-cong ⟩ 0≈⟦0⟧ c≈0 ρ ⟩
416420 (⟦ p ⟧H (x ∷ ρ) * x + ⟦ c′ ⟧N ρ) * ⟦ c ⟧N ρ ∎
417- ... | no c≉0 = begin
421+ ... | nothing = begin
418422 ⟦ p *HN c ⟧H (x ∷ ρ) * x + ⟦ c′ *N c ⟧N ρ ≈⟨ (*HN-homo p c x ρ ⟨ *-cong ⟩ refl) ⟨ +-cong ⟩ *N-homo c′ c ρ ⟩
419423 (⟦ p ⟧H (x ∷ ρ) * ⟦ c ⟧N ρ) * x + (⟦ c′ ⟧N ρ * ⟦ c ⟧N ρ) ≈⟨ lemma₂ _ _ _ _ ⟩
420424 (⟦ p ⟧H (x ∷ ρ) * x + ⟦ c′ ⟧N ρ) * ⟦ c ⟧N ρ ∎
0 commit comments