From 5202560ea008a76048587f6ab63797f7517fbdc0 Mon Sep 17 00:00:00 2001 From: Greg Brown Date: Mon, 21 Mar 2022 16:37:12 +0000 Subject: Add some properties of algebraic pseudocode types. --- .../Ordered/StrictTotal/Properties/Ring.agda | 81 ++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 src/Helium/Algebra/Ordered/StrictTotal/Properties/Ring.agda (limited to 'src/Helium/Algebra/Ordered/StrictTotal/Properties/Ring.agda') diff --git a/src/Helium/Algebra/Ordered/StrictTotal/Properties/Ring.agda b/src/Helium/Algebra/Ordered/StrictTotal/Properties/Ring.agda new file mode 100644 index 0000000..484143c --- /dev/null +++ b/src/Helium/Algebra/Ordered/StrictTotal/Properties/Ring.agda @@ -0,0 +1,81 @@ +------------------------------------------------------------------------ +-- 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 ∎ -- cgit v1.2.3