From 21ee0f899df7fa91f3bfeb85a36a9f60464344cd Mon Sep 17 00:00:00 2001 From: Patrick Stevens Date: Wed, 2 Oct 2019 18:59:46 +0100 Subject: [PATCH] Primes and mod-n into the fold (#47) --- Everything/WithK.agda | 5 +- Groups/LectureNotes/Lecture1.agda | 2 +- IntegersModNRing.agda | 10 ++-- .../Modulo/IntegersModN.agda | 6 ++- .../Primes/IntegerFactorisation.agda | 50 ++++++++++--------- .../Primes/PrimeNumbers.agda | 2 +- Numbers/Rationals.agda | 2 +- Numbers/RationalsLemmas.agda | 2 +- Rings/Examples/Examples.agda | 4 +- Rings/Examples/Proofs.agda | 4 +- 10 files changed, 48 insertions(+), 39 deletions(-) rename IntegersModN.agda => Numbers/Modulo/IntegersModN.agda (99%) rename IntegerFactorisation.agda => Numbers/Primes/IntegerFactorisation.agda (86%) rename PrimeNumbers.agda => Numbers/Primes/PrimeNumbers.agda (99%) diff --git a/Everything/WithK.agda b/Everything/WithK.agda index cb9b011..0f526be 100644 --- a/Everything/WithK.agda +++ b/Everything/WithK.agda @@ -2,7 +2,8 @@ -- This file contains everything that is --safe, but uses K. -open import PrimeNumbers +open import Numbers.Primes.PrimeNumbers +open import Numbers.Primes.IntegerFactorisation open import Numbers.Rationals open import Numbers.RationalsLemmas @@ -10,7 +11,7 @@ open import Logic.PropositionalLogic open import Logic.PropositionalLogicExamples open import Logic.PropositionalAxiomsTautology -open import IntegersModN +open import Numbers.Modulo.IntegersModN open import Sets.FinSetWithK diff --git a/Groups/LectureNotes/Lecture1.agda b/Groups/LectureNotes/Lecture1.agda index 69d386b..51822d4 100644 --- a/Groups/LectureNotes/Lecture1.agda +++ b/Groups/LectureNotes/Lecture1.agda @@ -11,7 +11,7 @@ open import Sets.FinSet open import Groups.Definition open import Groups.Groups open import Rings.Definition -open import IntegersModN +open import Numbers.Modulo.IntegersModN open import Semirings.Definition module Groups.LectureNotes.Lecture1 where diff --git a/IntegersModNRing.agda b/IntegersModNRing.agda index 9a7ac1d..bc88234 100644 --- a/IntegersModNRing.agda +++ b/IntegersModNRing.agda @@ -3,11 +3,13 @@ open import LogicalFormulae open import Orders open import Groups.Groups -open import Numbers.Naturals -open import PrimeNumbers +open import Numbers.Naturals.Naturals +open import Numbers.Naturals.WithK +open import Numbers.Primes.PrimeNumbers open import Rings.Definition open import Setoids.Setoids -open import IntegersModN +open import Numbers.Modulo.IntegersModN +open import Semirings.Definition module IntegersModNRing where modNToℕ : {n : ℕ} {pr : 0 1 = p>1 ; pr = pr } = record {11 ; firstFactor = p ; firstFactorNontrivial = p>1 ; firstFactorBiggerMin = inl p>1 ; firstFactorDivision = record { quot = 1 ; rem = 0 ; pr = lemma p ; remIsSmall = zeroIsValidRem p } ; firstFactorDivides = refl ; firstFactorPrime = record { p>1 = p>1 ; pr = pr} ; otherFactors = inl record { fst = refl ; snd = refl } ; otherFactorsNumber = 0 } + primeFactorisation {p} record { p>1 = p>1 ; pr = pr } = record {11 ; firstFactor = p ; firstFactorNontrivial = p>1 ; firstFactorBiggerMin = inl p>1 ; firstFactorDivision = record { quot = 1 ; rem = 0 ; pr = lemma p ; remIsSmall = zeroIsValidRem p ; quotSmall = inl (TotalOrder.transitive ℕTotalOrder (le zero refl) p>1) } ; firstFactorDivides = refl ; firstFactorPrime = record { p>1 = p>1 ; pr = pr} ; otherFactors = inl record { fst = refl ; snd = refl } ; otherFactorsNumber = 0 } where proof : (s : ℕ) → s *N 1 +N 0 ≡ s - proof s rewrite addZeroRight (s *N 1) | multiplicationNIsCommutative s 1 | addZeroRight s = refl + proof s rewrite Semiring.sumZeroRight ℕSemiring (s *N 1) | multiplicationNIsCommutative s 1 | Semiring.sumZeroRight ℕSemiring s = refl twoAsFact : factorisationNonunit 2 2 factorisationNonunit.11 primeA ; firstFactorBiggerMin = inl (Prime.p>1 primeA) ; firstFactorDivision = record { quot = 1 ; rem = 0 ; pr = ssxDivA ; remIsSmall = r} ; firstFactorDivides = refl ; firstFactorPrime = record { p>1 = Prime.p>1 primeA ; pr = Prime.pr primeA } ; otherFactors = inl record { fst = refl ; snd = refl } ; otherFactorsNumber = 0 } + factorIntegerLemma (succ (succ x)) indHyp | a , record { fst = record { fst = divides record {quot = zero ; rem = .0 ; pr = ssxDivA ; remIsSmall = r } refl ; snd = 11 primeA ; firstFactorBiggerMin = inl (Prime.p>1 primeA) ; firstFactorDivision = record { quot = 1 ; rem = 0 ; pr = ssxDivA ; remIsSmall = r ; quotSmall = inl (TotalOrder.transitive ℕTotalOrder (le zero refl) 11 = Prime.p>1 primeA ; pr = Prime.pr primeA } ; otherFactors = inl record { fst = refl ; snd = refl } ; otherFactorsNumber = 0 } - factorIntegerLemma (succ (succ x)) indHyp | a , record { fst = record { fst = divides record {quot = succ (succ qu) ; rem = .0 ; pr = ssxDivA ; remIsSmall = remSmall } refl ; snd = 11 primeA ; firstFactorBiggerMin = inl (Prime.p>1 primeA) ; firstFactorDivision = record { quot = succ (succ qu) ; rem = 0 ; pr = ssxDivA ; remIsSmall = remSmall} ; firstFactorDivides = refl ; firstFactorPrime = record { p>1 = Prime.p>1 primeA ; pr = Prime.pr primeA } ; otherFactors = inr record {fst = succPreservesInequality (succIsPositive qu) ; snd = factNonunit} ; otherFactorsNumber = succ (factorisationNonunit.otherFactorsNumber indHypRes') } + factorIntegerLemma (succ (succ x)) indHyp | a , record { fst = record { fst = divides record {quot = succ (succ qu) ; rem = .0 ; pr = ssxDivA ; remIsSmall = remSmall } refl ; snd = 11 primeA ; firstFactorBiggerMin = inl (Prime.p>1 primeA) ; firstFactorDivision = record { quot = succ (succ qu) ; rem = 0 ; pr = ssxDivA ; remIsSmall = remSmall ; quotSmall = inl (TotalOrder.transitive ℕTotalOrder (le zero refl) 11 = Prime.p>1 primeA ; pr = Prime.pr primeA } ; otherFactors = inr record {fst = succPreservesInequality (succIsPositive qu) ; snd = factNonunit} ; otherFactorsNumber = succ (factorisationNonunit.otherFactorsNumber indHypRes') } where indHypRes : ((succ (succ qu))