{-# OPTIONS --safe --warning=error #-} open import WellFoundedInduction open import LogicalFormulae open import Numbers.Naturals.Naturals open import Numbers.Integers.Integers open import Numbers.Integers.Order open import Groups.Groups open import Groups.Definition open import Rings.Definition open import Rings.Orders.Partial.Definition open import Rings.Orders.Total.Definition open import Fields.Fields open import Numbers.Primes.PrimeNumbers open import Setoids.Setoids open import Setoids.Orders open import Functions open import Fields.FieldOfFractions open import Fields.FieldOfFractionsOrder open import Sets.EquivalenceRelations open import Numbers.Rationals open import Semirings.Definition open import Orders module Numbers.RationalsLemmas where open PartiallyOrderedRing ℤPOrderedRing open import Rings.Orders.Total.Lemmas ℤOrderedRing open SetoidTotalOrder (totalOrderToSetoidTotalOrder ℤOrder) evenOrOdd : (a : ℕ) → (Sg ℕ (λ i → i *N 2 ≡ a)) || (Sg ℕ (λ i → succ (i *N 2) ≡ a)) evenOrOdd zero = inl (zero , refl) evenOrOdd (succ zero) = inr (zero , refl) evenOrOdd (succ (succ a)) with evenOrOdd a evenOrOdd (succ (succ a)) | inl (a/2 , even) = inl (succ a/2 , applyEquality (λ i → succ (succ i)) even) evenOrOdd (succ (succ a)) | inr (a/2-1 , odd) = inr (succ a/2-1 , applyEquality (λ i → succ (succ i)) odd) parity : (a b : ℕ) → succ (2 *N a) ≡ 2 *N b → False parity zero (succ b) pr rewrite Semiring.commutative ℕSemiring b (succ (b +N 0)) = bad pr where bad : (1 ≡ succ (succ ((b +N 0) +N b))) → False bad () parity (succ a) (succ b) pr rewrite Semiring.commutative ℕSemiring b (succ (b +N 0)) | Semiring.commutative ℕSemiring a (succ (a +N 0)) | Semiring.commutative ℕSemiring (a +N 0) a | Semiring.commutative ℕSemiring (b +N 0) b = parity a b (succInjective (succInjective pr)) sqrt0 : (p : ℕ) → p *N p ≡ 0 → p ≡ 0 sqrt0 zero pr = refl sqrt0 (succ p) () -- So as to give us something easy to induct down, introduce a silly extra variable evil' : (k : ℕ) → ((a b : ℕ) → (0