Documentation

Mathlib.Data.PNat.Prime

Primality and GCD on pnat #

This file extends the theory of ℕ+ with gcd, lcm and Prime functions, analogous to those on Nat.

The canonical map from Nat.Primes to ℕ+

Equations
    Instances For
      theorem Nat.Primes.coe_pnat_nat (p : Primes) :
      p = p
      theorem Nat.Primes.coe_pnat_inj (p q : Primes) :
      p = q p = q
      def PNat.gcd (n m : ℕ+) :

      The greatest common divisor (gcd) of two positive natural numbers, viewed as positive natural number.

      Equations
        Instances For
          def PNat.lcm (n m : ℕ+) :

          The least common multiple (lcm) of two positive natural numbers, viewed as positive natural number.

          Equations
            Instances For
              @[simp]
              theorem PNat.gcd_coe (n m : ℕ+) :
              (n.gcd m) = (↑n).gcd m
              @[simp]
              theorem PNat.lcm_coe (n m : ℕ+) :
              (n.lcm m) = (↑n).lcm m
              theorem PNat.gcd_dvd_left (n m : ℕ+) :
              n.gcd m n
              theorem PNat.gcd_dvd_right (n m : ℕ+) :
              n.gcd m m
              theorem PNat.dvd_gcd {m n k : ℕ+} (hm : k m) (hn : k n) :
              k m.gcd n
              theorem PNat.dvd_lcm_left (n m : ℕ+) :
              n n.lcm m
              theorem PNat.dvd_lcm_right (n m : ℕ+) :
              m n.lcm m
              theorem PNat.lcm_dvd {m n k : ℕ+} (hm : m k) (hn : n k) :
              m.lcm n k
              theorem PNat.gcd_mul_lcm (n m : ℕ+) :
              n.gcd m * n.lcm m = n * m
              theorem PNat.eq_one_of_lt_two {n : ℕ+} :
              n < 2n = 1

              Prime numbers #

              def PNat.Prime (p : ℕ+) :

              Primality predicate for ℕ+, defined in terms of Nat.Prime.

              Equations
                Instances For
                  theorem PNat.Prime.one_lt {p : ℕ+} :
                  p.Prime1 < p
                  theorem PNat.dvd_prime {p m : ℕ+} (pp : p.Prime) :
                  m p m = 1 m = p
                  theorem PNat.Prime.ne_one {p : ℕ+} :
                  p.Primep 1
                  theorem PNat.Prime.not_dvd_one {p : ℕ+} :
                  p.Prime¬p 1
                  theorem PNat.exists_prime_and_dvd {n : ℕ+} (hn : n 1) :
                  ∃ (p : ℕ+), p.Prime p n

                  Coprime numbers and gcd #

                  def PNat.Coprime (m n : ℕ+) :

                  Two pnats are coprime if their gcd is 1.

                  Equations
                    Instances For
                      @[simp]
                      theorem PNat.coprime_coe {m n : ℕ+} :
                      (↑m).Coprime n m.Coprime n
                      theorem PNat.Coprime.mul {k m n : ℕ+} :
                      m.Coprime kn.Coprime k(m * n).Coprime k
                      theorem PNat.Coprime.mul_right {k m n : ℕ+} :
                      k.Coprime mk.Coprime nk.Coprime (m * n)
                      theorem PNat.gcd_comm {m n : ℕ+} :
                      m.gcd n = n.gcd m
                      theorem PNat.gcd_eq_left_iff_dvd {m n : ℕ+} :
                      m.gcd n = m m n
                      theorem PNat.gcd_eq_right_iff_dvd {m n : ℕ+} :
                      n.gcd m = m m n
                      theorem PNat.Coprime.gcd_mul_left_cancel (m : ℕ+) {n k : ℕ+} :
                      k.Coprime n(k * m).gcd n = m.gcd n
                      theorem PNat.Coprime.gcd_mul_right_cancel (m : ℕ+) {n k : ℕ+} :
                      k.Coprime n(m * k).gcd n = m.gcd n
                      theorem PNat.Coprime.gcd_mul_left_cancel_right (m : ℕ+) {n k : ℕ+} :
                      k.Coprime mm.gcd (k * n) = m.gcd n
                      theorem PNat.Coprime.gcd_mul_right_cancel_right (m : ℕ+) {n k : ℕ+} :
                      k.Coprime mm.gcd (n * k) = m.gcd n
                      @[simp]
                      theorem PNat.one_gcd {n : ℕ+} :
                      gcd 1 n = 1
                      @[simp]
                      theorem PNat.gcd_one {n : ℕ+} :
                      n.gcd 1 = 1
                      theorem PNat.Coprime.symm {m n : ℕ+} :
                      m.Coprime nn.Coprime m
                      @[simp]
                      theorem PNat.one_coprime {n : ℕ+} :
                      @[simp]
                      theorem PNat.coprime_one {n : ℕ+} :
                      theorem PNat.Coprime.coprime_dvd_left {m k n : ℕ+} :
                      m kk.Coprime nm.Coprime n
                      theorem PNat.Coprime.factor_eq_gcd_left {a b m n : ℕ+} (cop : m.Coprime n) (am : a m) (bn : b n) :
                      a = (a * b).gcd m
                      theorem PNat.Coprime.factor_eq_gcd_right {a b m n : ℕ+} (cop : m.Coprime n) (am : a m) (bn : b n) :
                      a = (b * a).gcd m
                      theorem PNat.Coprime.factor_eq_gcd_left_right {a b m n : ℕ+} (cop : m.Coprime n) (am : a m) (bn : b n) :
                      a = m.gcd (a * b)
                      theorem PNat.Coprime.factor_eq_gcd_right_right {a b m n : ℕ+} (cop : m.Coprime n) (am : a m) (bn : b n) :
                      a = m.gcd (b * a)
                      theorem PNat.Coprime.gcd_mul (k : ℕ+) {m n : ℕ+} (h : m.Coprime n) :
                      k.gcd (m * n) = k.gcd m * k.gcd n
                      theorem PNat.gcd_eq_left {m n : ℕ+} :
                      m nm.gcd n = m
                      theorem PNat.Coprime.pow {m n : ℕ+} (k l : ) (h : m.Coprime n) :
                      (m ^ k).Coprime (n ^ l)