Parity of the natural numbers

module elementary-number-theory.parity-natural-numbers where
Imports
open import elementary-number-theory.divisibility-natural-numbers
open import elementary-number-theory.modular-arithmetic-standard-finite-types
open import elementary-number-theory.multiplication-natural-numbers
open import elementary-number-theory.natural-numbers

open import foundation.decidable-types
open import foundation.dependent-pair-types
open import foundation.empty-types
open import foundation.functions
open import foundation.identity-types
open import foundation.negation
open import foundation.universe-levels

Idea

Parity partitions the natural numbers into two classes: the even and the odd natural numbers. Even natural numbers are those that are divisible by two, and odd natural numbers are those that aren't.

Definition

is-even-ℕ :   UU lzero
is-even-ℕ n = div-ℕ 2 n

is-odd-ℕ :   UU lzero
is-odd-ℕ n = ¬ (is-even-ℕ n)

Properties

Being even or odd is decidable

is-decidable-is-even-ℕ : (x : )  is-decidable (is-even-ℕ x)
is-decidable-is-even-ℕ x = is-decidable-div-ℕ 2 x

is-decidable-is-odd-ℕ : (x : )  is-decidable (is-odd-ℕ x)
is-decidable-is-odd-ℕ x = is-decidable-neg (is-decidable-is-even-ℕ x)

0 is an even natural number

is-even-zero-ℕ : is-even-ℕ 0
is-even-zero-ℕ = div-zero-ℕ 2

is-odd-one-ℕ : is-odd-ℕ 1
is-odd-one-ℕ H = Eq-eq-ℕ (is-one-div-one-ℕ 2 H)

A natural number x is even if and only if x + 2 is even

is-even-is-even-succ-succ-ℕ :
  (n : )  is-even-ℕ (succ-ℕ (succ-ℕ n))  is-even-ℕ n
pr1 (is-even-is-even-succ-succ-ℕ n (succ-ℕ d , p)) = d
pr2 (is-even-is-even-succ-succ-ℕ n (succ-ℕ d , p)) =
  is-injective-succ-ℕ (is-injective-succ-ℕ p)

is-even-succ-succ-is-even-ℕ :
  (n : )  is-even-ℕ n  is-even-ℕ (succ-ℕ (succ-ℕ n))
pr1 (is-even-succ-succ-is-even-ℕ n (d , p)) = succ-ℕ d
pr2 (is-even-succ-succ-is-even-ℕ n (d , p)) = ap (succ-ℕ  succ-ℕ) p

A natural number x is odd if and only if x + 2 is odd

is-odd-is-odd-succ-succ-ℕ :
  (n : )  is-odd-ℕ (succ-ℕ (succ-ℕ n))  is-odd-ℕ n
is-odd-is-odd-succ-succ-ℕ n = map-neg (is-even-succ-succ-is-even-ℕ n)

is-odd-succ-succ-is-odd-ℕ :
  (n : )  is-odd-ℕ n  is-odd-ℕ (succ-ℕ (succ-ℕ n))
is-odd-succ-succ-is-odd-ℕ n = map-neg (is-even-is-even-succ-succ-ℕ n)

If a natural number x is odd, then x + 1 is even

is-even-succ-is-odd-ℕ :
  (n : )  is-odd-ℕ n  is-even-ℕ (succ-ℕ n)
is-even-succ-is-odd-ℕ zero-ℕ p = ex-falso (p is-even-zero-ℕ)
is-even-succ-is-odd-ℕ (succ-ℕ zero-ℕ) p = (1 , refl)
is-even-succ-is-odd-ℕ (succ-ℕ (succ-ℕ n)) p =
  is-even-succ-succ-is-even-ℕ
    ( succ-ℕ n)
    ( is-even-succ-is-odd-ℕ n (is-odd-is-odd-succ-succ-ℕ n p))

If a natural number x is even, then x + 1 is odd

is-odd-succ-is-even-ℕ :
  (n : )  is-even-ℕ n  is-odd-ℕ (succ-ℕ n)
is-odd-succ-is-even-ℕ zero-ℕ p = is-odd-one-ℕ
is-odd-succ-is-even-ℕ (succ-ℕ zero-ℕ) p = ex-falso (is-odd-one-ℕ p)
is-odd-succ-is-even-ℕ (succ-ℕ (succ-ℕ n)) p =
  is-odd-succ-succ-is-odd-ℕ
    ( succ-ℕ n)
    ( is-odd-succ-is-even-ℕ n (is-even-is-even-succ-succ-ℕ n p))

If a natural number x + 1 is odd, then x is even

is-even-is-odd-succ-ℕ :
  (n : )  is-odd-ℕ (succ-ℕ n)  is-even-ℕ n
is-even-is-odd-succ-ℕ n p =
  is-even-is-even-succ-succ-ℕ
    ( n)
    ( is-even-succ-is-odd-ℕ (succ-ℕ n) p)

If a natural number x + 1 is even, then x is odd

is-odd-is-even-succ-ℕ :
  (n : )  is-even-ℕ (succ-ℕ n)  is-odd-ℕ n
is-odd-is-even-succ-ℕ n p =
  is-odd-is-odd-succ-succ-ℕ
    ( n)
    ( is-odd-succ-is-even-ℕ (succ-ℕ n) p)

A natural number x is odd if and only if there is a natural number y such that succ-ℕ (y *ℕ 2) = x

has-odd-expansion :   UU lzero
has-odd-expansion x = Σ   y  (succ-ℕ (y *ℕ 2))  x)

is-odd-has-odd-expansion : (n : )  has-odd-expansion n  is-odd-ℕ n
is-odd-has-odd-expansion .(succ-ℕ (m *ℕ 2)) (m , refl) =
  is-odd-succ-is-even-ℕ (m *ℕ 2) (m , refl)

has-odd-expansion-is-odd : (n : )  is-odd-ℕ n  has-odd-expansion n
has-odd-expansion-is-odd zero-ℕ p = ex-falso (p is-even-zero-ℕ)
has-odd-expansion-is-odd (succ-ℕ zero-ℕ) p = 0 , refl
has-odd-expansion-is-odd (succ-ℕ (succ-ℕ n)) p =
  ( succ-ℕ (pr1 s)) , ap (succ-ℕ  succ-ℕ) (pr2 s)
  where
    s : has-odd-expansion n
    s = has-odd-expansion-is-odd n (is-odd-is-odd-succ-succ-ℕ n p)