------------------------------------------------------------------------ -- Agda Helium -- -- Algebraic properties of ordered rings ------------------------------------------------------------------------ {-# OPTIONS --safe --without-K #-} open import Helium.Algebra.Ordered.StrictTotal.Bundles module Helium.Algebra.Ordered.StrictTotal.Properties.Ring {ℓ₁ ℓ₂ ℓ₃} (ring : Ring ℓ₁ ℓ₂ ℓ₃) where open Ring ring open import Agda.Builtin.FromNat open import Agda.Builtin.FromNeg open import Data.Nat using (suc; NonZero) open import Data.Sum using (inj₁; inj₂) open import Data.Unit.Polymorphic using (⊤) open import Relation.Binary using (tri<; tri≈; tri>) open import Relation.Binary.Reasoning.StrictPartialOrder strictPartialOrder open import Algebra.Properties.Ring Unordered.ring public renaming (-0#≈0# to -0≈0) open import Algebra.Properties.Semiring.Mult.TCOptimised Unordered.semiring public open import Algebra.Properties.Semiring.Exp.TCOptimised Unordered.semiring public open import Helium.Algebra.Ordered.StrictTotal.Properties.AbelianGroup +-abelianGroup public using (<⇒≱; ≤⇒≯; >⇒≉; ≈⇒≯; <⇒≉; ≈⇒≮; ≤∧≉⇒<; ≥∧≉⇒>) renaming ( x _ _ 0>1 = inj₁ (begin-strict 0 <⟨ 01 ⟩ -1 ∎ 1≉0+n≉0⇒0<+n : 1 ≉ 0 → ∀ n → {{NonZero n}} → 0 < fromNat n 1≉0+n≉0⇒0<+n 1≉0 (suc 0) = ≥∧≉⇒> 0≤1 1≉0 1≉0+n≉0⇒0<+n 1≉0 (suc (suc n)) = begin-strict 0 ≈˘⟨ +-identity² ⟩ 0 + 0 <⟨ +-invariantˡ 0 (≥∧≉⇒> 0≤1 1≉0) ⟩ 0 + 1 <⟨ +-invariantʳ 1 (1≉0+n≉0⇒0<+n 1≉0 (suc n)) ⟩ fromNat (suc n) + 1 ∎ 1≉0+n≉0⇒-n<0 : 1 ≉ 0 → ∀ n → {{NonZero n}} → fromNeg n < 0 1≉0+n≉0⇒-n<0 1≉0 n = begin-strict - fromNat n <⟨ -‿anti-mono (1≉0+n≉0⇒0<+n 1≉0 n) ⟩ - 0 ≈⟨ -0≈0 ⟩ 0 ∎