Documentation

Mathlib.Data.Nat.Prime.Defs

Prime numbers #

This file deals with prime numbers: natural numbers p ≥ 2 whose only divisors are p and 1.

Important declarations #

def Nat.Prime (p : ℕ) :

Nat.Prime p means that p is a prime number, that is, a natural number at least 2 whose only divisors are p and 1. The theorem Nat.prime_def witnesses this description of a prime number.

Equations
Instances For

    A copy of not_prime_zero stated in a way that works for aesop.

    See https://github.com/leanprover-community/aesop/issues/197 for an explanation.

    A copy of not_prime_one stated in a way that works for aesop.

    See https://github.com/leanprover-community/aesop/issues/197 for an explanation.

    theorem Nat.Prime.ne_zero {n : ℕ} (h : Prime n) :
    n ≠ 0
    theorem Nat.Prime.pos {p : ℕ} (pp : Prime p) :
    0 < p
    theorem Nat.Prime.two_le {p : ℕ} :
    Prime p → 2 ≤ p
    theorem Nat.Prime.one_lt {p : ℕ} :
    Prime p → 1 < p
    theorem Nat.Prime.one_le {p : ℕ} (hp : Prime p) :
    1 ≤ p
    instance Nat.Prime.one_lt' (p : ℕ) [hp : Fact (Prime p)] :
    Fact (1 < p)
    theorem Nat.Prime.ne_one {p : ℕ} (hp : Prime p) :
    p ≠ 1
    theorem Nat.Prime.eq_one_or_self_of_dvd {p : ℕ} (pp : Prime p) (m : ℕ) (hm : m ∣ p) :
    m = 1 ∨ m = p
    theorem Nat.prime_def {p : ℕ} :
    Prime p ↔ 2 ≤ p ∧ ∀ (m : ℕ), m ∣ p → m = 1 ∨ m = p

    Nat.Prime p means that p is a prime number, that is, a natural number at least 2 whose only divisors are p and 1. The theorem Nat.prime_def witnesses this description of a prime number.

    theorem Nat.prime_def_lt {p : ℕ} :
    Prime p ↔ 2 ≤ p ∧ ∀ (m : ℕ), m < p → m ∣ p → m = 1
    theorem Nat.prime_def_lt' {p : ℕ} :
    Prime p ↔ 2 ≤ p ∧ ∀ (m : ℕ), 2 ≤ m → m < p → ¬m ∣ p
    theorem Nat.prime_def_le_sqrt {p : ℕ} :
    Prime p ↔ 2 ≤ p ∧ ∀ (m : ℕ), 2 ≤ m → m ≤ p.sqrt → ¬m ∣ p
    theorem Nat.prime_of_coprime (n : ℕ) (h1 : 1 < n) (h : ∀ (m : ℕ), m < n → m ≠ 0 → n.Coprime m) :
    @[instance_reducible]

    This instance is set up to work in the kernel (by decide) for small values.

    Below (decidablePrime') we will define a faster variant to be used by the compiler (e.g. in #eval or by native_decide).

    If you need to prove that a particular number is prime, in any case you should not use by decide, but rather by norm_num, which is much faster.

    Equations

    Specific small primes #

    It is recommended not to add further lemmas to this list; instead, import Mathlib.Tactic.NormNum.Prime in downstream files and use norm_num for primality proofs.

    theorem Nat.dvd_prime {p m : ℕ} (pp : Prime p) :
    m ∣ p ↔ m = 1 ∨ m = p
    theorem Nat.dvd_prime_two_le {p m : ℕ} (pp : Prime p) (H : 2 ≤ m) :
    m ∣ p ↔ m = p
    theorem Nat.prime_dvd_prime_iff_eq {p q : ℕ} (pp : Prime p) (qp : Prime q) :
    p ∣ q ↔ p = q
    theorem Nat.Prime.not_dvd_one {p : ℕ} (pp : Prime p) :
    ¬p ∣ 1
    theorem Nat.minFac_lemma (n k : ℕ) (h : ¬n < k * k) :
    n.sqrt - k < n.sqrt + 2 - k
    @[irreducible]
    def Nat.minFacAux (n : ℕ) :
    ℕ → ℕ

    If n < k * k, then minFacAux n k = n, if k | n, then minFacAux n k = k. Otherwise, minFacAux n k = minFacAux n (k+2) using well-founded recursion. If n is odd and 1 < n, then minFacAux n 3 is the smallest prime factor of n.

    This definition is by well-founded recursion, so rfl or decide cannot be used. One can use norm_num to prove Nat.prime n for small n.

    Equations
    Instances For
      def Nat.minFac (n : ℕ) :

      Returns the smallest prime factor of n ≠ 1.

      Equations
      Instances For
        @[simp]
        theorem Nat.minFac_zero :
        minFac 0 = 2
        @[simp]
        theorem Nat.minFac_one :
        minFac 1 = 1
        @[simp]
        theorem Nat.minFac_two :
        minFac 2 = 2
        theorem Nat.minFac_eq (n : ℕ) :
        theorem Nat.minFacAux_has_prop {n : ℕ} (n2 : 2 ≤ n) (k i : ℕ) :
        k = 2 * i + 3 → (∀ (m : ℕ), 2 ≤ m → m ∣ n → k ≤ m) → Nat.minFacProp✝ n (n.minFacAux k)
        theorem Nat.minFac_dvd (n : ℕ) :
        theorem Nat.minFac_prime {n : ℕ} (n1 : n ≠ 1) :
        @[simp]
        theorem Nat.minFac_le_of_dvd {n m : ℕ} :
        2 ≤ m → m ∣ n → n.minFac ≤ m
        theorem Nat.minFac_pos (n : ℕ) :
        0 < n.minFac
        theorem Nat.minFac_le {n : ℕ} (H : 0 < n) :
        theorem Nat.le_minFac {m n : ℕ} :
        n = 1 ∨ m ≤ n.minFac ↔ ∀ (p : ℕ), Prime p → p ∣ n → m ≤ p
        theorem Nat.le_minFac' {m n : ℕ} :
        n = 1 ∨ m ≤ n.minFac ↔ ∀ (p : ℕ), 2 ≤ p → p ∣ n → m ≤ p
        @[simp]
        theorem Nat.Prime.minFac_eq {p : ℕ} (hp : Prime p) :
        p.minFac = p

        This definition is faster in the virtual machine than decidablePrime, but slower in the kernel.

        Equations
        Instances For
          theorem Nat.not_prime_iff_minFac_lt {n : ℕ} (n2 : 2 ≤ n) :
          theorem Nat.minFac_le_div {n : ℕ} (pos : 0 < n) (np : ¬Prime n) :
          theorem Nat.minFac_sq_le_self {n : ℕ} (w : 0 < n) (h : ¬Prime n) :
          n.minFac ^ 2 ≤ n

          The square of the smallest prime factor of a composite number n is at most n.

          @[simp]
          theorem Nat.minFac_eq_one_iff {n : ℕ} :
          n.minFac = 1 ↔ n = 1
          @[simp]
          theorem Nat.minFac_eq_two_iff (n : ℕ) :
          n.minFac = 2 ↔ 2 ∣ n
          theorem Nat.factors_lemma {k : ℕ} :
          (k + 2) / (k + 2).minFac < k + 2
          theorem Nat.exists_prime_and_dvd {n : ℕ} (hn : n ≠ 1) :
          theorem Nat.coprime_of_dvd {m n : ℕ} (H : ∀ (k : ℕ), Prime k → k ∣ m → ¬k ∣ n) :
          theorem Nat.Prime.coprime_iff_not_dvd {p n : ℕ} (pp : Prime p) :
          p.Coprime n ↔ ¬p ∣ n
          theorem Nat.Prime.dvd_mul {p m n : ℕ} (pp : Prime p) :
          p ∣ m * n ↔ p ∣ m ∨ p ∣ n
          theorem Nat.Prime.dvd_or_dvd {p m n : ℕ} (pp : Prime p) :
          p ∣ m * n → p ∣ m ∨ p ∣ n

          Alias of the forward direction of Nat.Prime.dvd_mul.

          theorem Nat.Prime.prime {p : ℕ} :

          Alias of the forward direction of Nat.prime_iff.

          theorem Prime.nat_prime {p : ℕ} :

          Alias of the reverse direction of Nat.prime_iff.

          The type of prime numbers

          Equations
          Instances For
            @[instance_reducible]
            Equations
            @[instance_reducible]
            Equations
            theorem Nat.Primes.coe_nat_inj (p q : Primes) :
            ↑p = ↑q ↔ p = q
            @[instance_reducible]
            instance Nat.monoid.primePow {α : Type u_1} [Monoid α] :
            Equations