{-# OPTIONS --safe --warning=error --without-K #-} open import LogicalFormulae open import Numbers.Naturals.Semiring open import Numbers.Naturals.Order open import Numbers.Naturals.Order.WellFounded open import Numbers.Naturals.Order.Lemmas open import Numbers.Integers.Definition 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 Functions.Definition open import Sets.EquivalenceRelations open import Numbers.Rationals.Definition open import Semirings.Definition open import Orders.Total.Definition open import Orders.WellFounded.Induction open import Setoids.Orders.Total.Definition module Numbers.Rationals.Lemmas where open import Semirings.Lemmas ℕSemiring open PartiallyOrderedRing ℤPOrderedRing open import Rings.Orders.Total.Lemmas ℤOrderedRing open import Rings.Orders.Total.AbsoluteValue ℤ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