From 9c14e7c439fdb478923fefbd7ef0aa30442e687c Mon Sep 17 00:00:00 2001 From: Patrick Stevens Date: Thu, 22 Aug 2019 08:37:41 +0100 Subject: [PATCH] Split out Integers and remove use of K (#39) --- Everything/Safe.agda | 2 + Everything/WithK.agda | 1 - Groups/Examples/ExampleSheet1.agda | 2 +- Groups/Groups2.agda | 2 +- Groups/LectureNotes/Lecture1.agda | 11 +- Numbers/Integers.agda | 1574 -------------------------- Numbers/Integers/Addition.agda | 95 ++ Numbers/Integers/Definition.agda | 35 + Numbers/Integers/Integers.agda | 17 + Numbers/Integers/Multiplication.agda | 199 ++++ Numbers/Integers/Order.agda | 99 ++ Numbers/Rationals.agda | 2 +- Numbers/RationalsLemmas.agda | 2 +- Rings/Examples/Examples.agda | 2 +- Rings/Examples/Proofs.agda | 2 +- 15 files changed, 462 insertions(+), 1583 deletions(-) delete mode 100644 Numbers/Integers.agda create mode 100644 Numbers/Integers/Addition.agda create mode 100644 Numbers/Integers/Definition.agda create mode 100644 Numbers/Integers/Integers.agda create mode 100644 Numbers/Integers/Multiplication.agda create mode 100644 Numbers/Integers/Order.agda diff --git a/Everything/Safe.agda b/Everything/Safe.agda index cb002a0..2c9d3b7 100644 --- a/Everything/Safe.agda +++ b/Everything/Safe.agda @@ -5,6 +5,8 @@ open import Numbers.Naturals.Naturals open import Numbers.BinaryNaturals.Definition +open import Numbers.Integers.Integers + open import Lists.Lists open import Groups.Groups diff --git a/Everything/WithK.agda b/Everything/WithK.agda index fef8285..d391630 100644 --- a/Everything/WithK.agda +++ b/Everything/WithK.agda @@ -3,7 +3,6 @@ -- This file contains everything that is --safe, but uses K. open import PrimeNumbers -open import Numbers.Integers open import Numbers.Rationals open import Numbers.RationalsLemmas open import Numbers.BinaryNaturals.Multiplication -- TODO there's no reason for this to need K diff --git a/Groups/Examples/ExampleSheet1.agda b/Groups/Examples/ExampleSheet1.agda index f9a83ed..b123b44 100644 --- a/Groups/Examples/ExampleSheet1.agda +++ b/Groups/Examples/ExampleSheet1.agda @@ -5,7 +5,7 @@ open import Setoids.Setoids open import Functions open import Agda.Primitive using (Level; lzero; lsuc; _⊔_) open import Numbers.Naturals.Naturals -open import Numbers.Integers +open import Numbers.Integers.Integers open import Sets.FinSet open import Groups.Definition open import Groups.Groups diff --git a/Groups/Groups2.agda b/Groups/Groups2.agda index 9045559..8bc33be 100644 --- a/Groups/Groups2.agda +++ b/Groups/Groups2.agda @@ -3,7 +3,7 @@ open import Groups.Groups open import Groups.Definition open import Orders -open import Numbers.Integers +open import Numbers.Integers.Integers open import Setoids.Setoids open import LogicalFormulae open import Sets.FinSet diff --git a/Groups/LectureNotes/Lecture1.agda b/Groups/LectureNotes/Lecture1.agda index 8f4d7eb..69d386b 100644 --- a/Groups/LectureNotes/Lecture1.agda +++ b/Groups/LectureNotes/Lecture1.agda @@ -5,13 +5,14 @@ open import Setoids.Setoids open import Functions open import Agda.Primitive using (Level; lzero; lsuc; _⊔_) open import Numbers.Naturals.Naturals -open import Numbers.Integers +open import Numbers.Integers.Integers open import Numbers.Rationals open import Sets.FinSet open import Groups.Definition open import Groups.Groups open import Rings.Definition open import IntegersModN +open import Semirings.Definition module Groups.LectureNotes.Lecture1 where @@ -27,13 +28,19 @@ module Groups.LectureNotes.Lecture1 where integersMinusNotGroup record { wellDefined = wellDefined ; identity = identity ; inverse = inverse ; multAssoc = multAssoc ; multIdentRight = multIdentRight ; multIdentLeft = multIdentLeft ; invLeft = invLeft ; invRight = invRight } with multAssoc {nonneg 3} {nonneg 2} {nonneg 1} integersMinusNotGroup record { wellDefined = wellDefined ; identity = identity ; inverse = inverse ; multAssoc = multAssoc ; multIdentRight = multIdentRight ; multIdentLeft = multIdentLeft ; invLeft = invLeft ; invRight = invRight } | () + negSuccInjective : {a b : ℕ} → (negSucc a ≡ negSucc b) → a ≡ b + negSuccInjective {a} {.a} refl = refl + + nonnegInjective : {a b : ℕ} → (nonneg a ≡ nonneg b) → a ≡ b + nonnegInjective {a} {.a} refl = refl + integersTimesNotGroup : Group (reflSetoid ℤ) (_*Z_) → False integersTimesNotGroup record { wellDefined = wellDefined ; identity = (nonneg zero) ; inverse = inverse ; multAssoc = multAssoc ; multIdentRight = multIdentRight ; multIdentLeft = multIdentLeft ; invLeft = invLeft ; invRight = invRight } with multIdentLeft {negSucc 1} ... | () integersTimesNotGroup record { wellDefined = wellDefined ; identity = (nonneg (succ zero)) ; inverse = inverse ; multAssoc = multAssoc ; multIdentRight = multIdentRight ; multIdentLeft = multIdentLeft ; invLeft = invLeft ; invRight = invRight } with invLeft {nonneg zero} ... | bl with inverse (nonneg zero) integersTimesNotGroup record { wellDefined = wellDefined ; identity = (nonneg (succ zero)) ; inverse = inverse ; multAssoc = multAssoc ; multIdentRight = multIdentRight ; multIdentLeft = multIdentLeft ; invLeft = invLeft ; invRight = invRight } | () | nonneg zero - integersTimesNotGroup record { wellDefined = wellDefined ; identity = (nonneg (succ zero)) ; inverse = inverse ; multAssoc = multAssoc ; multIdentRight = multIdentRight ; multIdentLeft = multIdentLeft ; invLeft = invLeft ; invRight = invRight } | () | nonneg (succ x) + integersTimesNotGroup record { wellDefined = wellDefined ; identity = (nonneg (succ zero)) ; inverse = inverse ; multAssoc = multAssoc ; multIdentRight = multIdentRight ; multIdentLeft = multIdentLeft ; invLeft = invLeft ; invRight = invRight } | p | nonneg (succ x) = naughtE (nonnegInjective (transitivity (applyEquality nonneg (equalityCommutative (Semiring.productZeroRight ℕSemiring x))) p)) integersTimesNotGroup record { wellDefined = wellDefined ; identity = (nonneg (succ zero)) ; inverse = inverse ; multAssoc = multAssoc ; multIdentRight = multIdentRight ; multIdentLeft = multIdentLeft ; invLeft = invLeft ; invRight = invRight } | () | negSucc x integersTimesNotGroup record { wellDefined = wellDefined ; identity = (nonneg (succ (succ x))) ; inverse = inverse ; multAssoc = multAssoc ; multIdentRight = multIdentRight ; multIdentLeft = multIdentLeft ; invLeft = invLeft ; invRight = invRight } with succInjective (negSuccInjective (multIdentLeft {negSucc 1})) ... | () diff --git a/Numbers/Integers.agda b/Numbers/Integers.agda deleted file mode 100644 index e274d23..0000000 --- a/Numbers/Integers.agda +++ /dev/null @@ -1,1574 +0,0 @@ -{-# OPTIONS --safe --warning=error #-} - -open import LogicalFormulae -open import Numbers.Naturals.Naturals -open import Numbers.Naturals.Order -- TODO: remove dependencies on everything other than Naturals.Naturals -open import Numbers.Naturals.Definition -open import Numbers.Naturals.Addition -open import Numbers.Naturals.WithK -- TODO: remove this dependency, it's baked into ZSimple -open import Groups.Groups -open import Groups.Definition -open import Rings.Definition -open import Functions -open import Orders -open import Setoids.Setoids -open import Setoids.Orders -open import Rings.IntegralDomains -open import Semirings.Definition - -module Numbers.Integers where - -data ℤ : Set where - nonneg : ℕ → ℤ - negSucc : ℕ → ℤ - -data ℤSimple : Set where - negative : (a : ℕ) → (0