ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
-- PythagoreanTriple.coprime_classification
theorem coprime_classification :
    PythagoreanTriple x y z ∧ Int.gcd x y = 1 ↔
      ∃ m n,
        (x = m ^ 2 - n ^ 2 ∧ y = 2 * m * n ∨ x = 2 * m * n ∧ y = m ^ 2 - n ^ 2) ∧
          (z = m ^ 2 + n ^ 2 ∨ z = -(m ^ 2 + n ^ 2)) ∧
            Int.gcd m n = 1 ∧ (m % 2 = 0 ∧ n % 2 = 1 ∨ m % 2 = 1 ∧ n % 2 = 0) 
Arguments: {x y z : ℤ}
Goal: PythagoreanTriple x y z ∧ x.gcd y = 1 ↔
  ∃ m n,
    (x = m ^ 2 - n ^ 2 ∧ y = 2 * m * n ∨ x = 2 * m * n ∧ y = m ^ 2 - n ^ 2) ∧
      (z = m ^ 2 + n ^ 2 ∨ z = -(m ^ 2 + n ^ 2)) ∧ m.gcd n = 1 ∧ (m % 2 = 0 ∧ n % 2 = 1 ∨ m % 2 = 1 ∧ n % 2 = 0)
-- PythagoreanTriple.coprime_classification'
theorem coprime_classification' {x y z : ℤ} (h : PythagoreanTriple x y z)
    (h_coprime : Int.gcd x y = 1) (h_parity : x % 2 = 1) (h_pos : 0 < z) :
    ∃ m n,
      x = m ^ 2 - n ^ 2 ∧
        y = 2 * m * n ∧
          z = m ^ 2 + n ^ 2 ∧
            Int.gcd m n = 1 ∧ (m % 2 = 0 ∧ n % 2 = 1 ∨ m % 2 = 1 ∧ n % 2 = 0) ∧ 0 ≤ m 
Arguments: {x y z : ℤ} (h : PythagoreanTriple x y z) (h_coprime : x.gcd y = 1) (h_parity : x % 2 = 1) (h_pos : 0 < z)
Goal: ∃ m n,
  x = m ^ 2 - n ^ 2 ∧
    y = 2 * m * n ∧ z = m ^ 2 + n ^ 2 ∧ m.gcd n = 1 ∧ (m % 2 = 0 ∧ n % 2 = 1 ∨ m % 2 = 1 ∧ n % 2 = 0) ∧ 0 ≤ m
-- PythagoreanTriple.classification
theorem classification :
    PythagoreanTriple x y z ↔
      ∃ k m n,
        (x = k * (m ^ 2 - n ^ 2) ∧ y = k * (2 * m * n) ∨
            x = k * (2 * m * n) ∧ y = k * (m ^ 2 - n ^ 2)) ∧
          (z = k * (m ^ 2 + n ^ 2) ∨ z = -k * (m ^ 2 + n ^ 2)) 
Arguments: {x y z : ℤ}
Goal: PythagoreanTriple x y z ↔
  ∃ k m n,
    (x = k * (m ^ 2 - n ^ 2) ∧ y = k * (2 * m * n) ∨ x = k * (2 * m * n) ∧ y = k * (m ^ 2 - n ^ 2)) ∧
      (z = k * (m ^ 2 + n ^ 2) ∨ z = -k * (m ^ 2 + n ^ 2))
-- harmonic_zero
@[simp]
lemma harmonic_zero : harmonic 0 = 0 
Goal: harmonic 0 = 0
-- harmonic_succ
@[simp]
lemma harmonic_succ (n : ℕ) : harmonic (n + 1) = harmonic n + (↑(n + 1))⁻¹ 
Arguments: (n : ℕ)
Goal: harmonic (n + 1) = harmonic n + (↑(n + 1))⁻¹
-- harmonic_pos
lemma harmonic_pos {n : ℕ} (Hn : n ≠ 0) : 0 < harmonic n 
Arguments: {n : ℕ} (Hn : n ≠ 0)
Goal: 0 < harmonic n
-- harmonic_eq_sum_Icc
lemma harmonic_eq_sum_Icc {n : ℕ} :  harmonic n = ∑ i ∈ Finset.Icc 1 n, (↑i)⁻¹ 
Arguments: {n : ℕ}
Goal: harmonic n = ∑ i ∈ Finset.Icc 1 n, (↑i)⁻¹
-- functionField_iff
theorem functionField_iff (Fqt : Type*) [Field Fqt] [Algebra Fq[X] Fqt]
    [IsFractionRing Fq[X] Fqt] [Algebra (RatFunc Fq) F] [Algebra Fqt F] [Algebra Fq[X] F]
    [IsScalarTower Fq[X] Fqt F] [IsScalarTower Fq[X] (RatFunc Fq) F] :
    FunctionField Fq F ↔ FiniteDimensional Fqt F 
Arguments: (Fq F : Type) [Field Fq] [Field F] (Fqt : Type u_1) [Field Fqt] [Algebra Fq[X] Fqt] [IsFractionRing Fq[X] Fqt] [Algebra (RatFunc Fq) F] [Algebra Fqt F] [Algebra Fq[X] F] [IsScalarTower Fq[X] Fqt F] [IsScalarTower Fq[X] (RatFunc Fq) F]
Goal: FunctionField Fq F ↔ FiniteDimensional Fqt F
-- algebraMap_injective
theorem algebraMap_injective [Algebra Fq[X] F] [Algebra (RatFunc Fq) F]
    [IsScalarTower Fq[X] (RatFunc Fq) F] : Function.Injective (⇑(algebraMap Fq[X] F)) 
Arguments: (Fq F : Type) [Field Fq] [Field F] [Algebra Fq[X] F] [Algebra (RatFunc Fq) F] [IsScalarTower Fq[X] (RatFunc Fq) F]
Goal: Function.Injective ⇑(algebraMap Fq[X] F)
-- FunctionField.ringOfIntegers.algebraMap_injective
theorem algebraMap_injective : Function.Injective (⇑(algebraMap Fq[X] (ringOfIntegers Fq F))) 
Arguments: (Fq F : Type) [Field Fq] [Field F] [Algebra Fq[X] F] [Algebra (RatFunc Fq) F] [IsScalarTower Fq[X] (RatFunc Fq) F]
Goal: Function.Injective ⇑(algebraMap Fq[X] ↥(FunctionField.ringOfIntegers Fq F))
-- FunctionField.ringOfIntegers.not_isField
theorem not_isField : ¬IsField (ringOfIntegers Fq F) 
Arguments: (Fq F : Type) [Field Fq] [Field F] [Algebra Fq[X] F] [Algebra (RatFunc Fq) F] [IsScalarTower Fq[X] (RatFunc Fq) F]
Goal: ¬IsField ↥(FunctionField.ringOfIntegers Fq F)
-- FunctionField.InftyValuation.map_zero'
theorem InftyValuation.map_zero' : inftyValuationDef Fq 0 = 0 
Arguments: (Fq : Type) [Field Fq] [DecidableEq (RatFunc Fq)]
Goal: FunctionField.inftyValuationDef Fq 0 = 0
-- FunctionField.InftyValuation.map_one'
theorem InftyValuation.map_one' : inftyValuationDef Fq 1 = 1 
Arguments: (Fq : Type) [Field Fq] [DecidableEq (RatFunc Fq)]
Goal: FunctionField.inftyValuationDef Fq 1 = 1
-- FunctionField.InftyValuation.map_mul'
theorem InftyValuation.map_mul' (x y : RatFunc Fq) :
    inftyValuationDef Fq (x * y) = inftyValuationDef Fq x * inftyValuationDef Fq y 
Arguments: (Fq : Type) [Field Fq] [DecidableEq (RatFunc Fq)] (x y : RatFunc Fq)
Goal: FunctionField.inftyValuationDef Fq (x * y) = FunctionField.inftyValuationDef Fq x * FunctionField.inftyValuationDef Fq y
-- FunctionField.InftyValuation.map_add_le_max'
theorem InftyValuation.map_add_le_max' (x y : RatFunc Fq) :
    inftyValuationDef Fq (x + y) ≤ max (inftyValuationDef Fq x) (inftyValuationDef Fq y) 
Arguments: (Fq : Type) [Field Fq] [DecidableEq (RatFunc Fq)] (x y : RatFunc Fq)
Goal: FunctionField.inftyValuationDef Fq (x + y) ≤
  max (FunctionField.inftyValuationDef Fq x) (FunctionField.inftyValuationDef Fq y)
-- FunctionField.inftyValuation_of_nonzero
@[simp]
theorem inftyValuation_of_nonzero {x : RatFunc Fq} (hx : x ≠ 0) :
    inftyValuationDef Fq x = Multiplicative.ofAdd x.intDegree 
Arguments: (Fq : Type) [Field Fq] [DecidableEq (RatFunc Fq)] {x : RatFunc Fq} (hx : x ≠ 0)
Goal: FunctionField.inftyValuationDef Fq x = ↑(Multiplicative.ofAdd x.intDegree)
-- FunctionField.inftyValuation_apply
@[simp]
theorem inftyValuation_apply {x : RatFunc Fq} : inftyValuation Fq x = inftyValuationDef Fq x 
Arguments: (Fq : Type) [Field Fq] [DecidableEq (RatFunc Fq)] {x : RatFunc Fq}
Goal: (FunctionField.inftyValuation Fq) x = FunctionField.inftyValuationDef Fq x
-- FunctionField.inftyValuation.C
@[simp]
theorem inftyValuation.C {k : Fq} (hk : k ≠ 0) :
    inftyValuationDef Fq (RatFunc.C k) = Multiplicative.ofAdd (0 : ℤ) 
Arguments: (Fq : Type) [Field Fq] [DecidableEq (RatFunc Fq)] {k : Fq} (hk : k ≠ 0)
Goal: FunctionField.inftyValuationDef Fq (RatFunc.C k) = ↑(Multiplicative.ofAdd 0)
-- FunctionField.inftyValuation.X
@[simp]
theorem inftyValuation.X : inftyValuationDef Fq RatFunc.X = Multiplicative.ofAdd (1 : ℤ) 
Arguments: (Fq : Type) [Field Fq] [DecidableEq (RatFunc Fq)]
Goal: FunctionField.inftyValuationDef Fq RatFunc.X = ↑(Multiplicative.ofAdd 1)
-- FunctionField.inftyValuation.polynomial
@[simp]
theorem inftyValuation.polynomial {p : Fq[X]} (hp : p ≠ 0) :
    inftyValuationDef Fq (algebraMap Fq[X] (RatFunc Fq) p) =
      Multiplicative.ofAdd (p.natDegree : ℤ) 
Arguments: (Fq : Type) [Field Fq] [DecidableEq (RatFunc Fq)] {p : Fq[X]} (hp : p ≠ 0)
Goal: FunctionField.inftyValuationDef Fq ((algebraMap Fq[X] (RatFunc Fq)) p) = ↑(Multiplicative.ofAdd ↑p.natDegree)
-- FunctionField.inftyValuedFqt.def
theorem inftyValuedFqt.def {x : RatFunc Fq} :
    @Valued.v (RatFunc Fq) _ _ _ (inftyValuedFqt Fq) x = inftyValuationDef Fq x 
Arguments: (Fq : Type) [Field Fq] [DecidableEq (RatFunc Fq)] {x : RatFunc Fq}
Goal: Valued.v x = FunctionField.inftyValuationDef Fq x
-- FunctionField.valuedFqtInfty.def
theorem valuedFqtInfty.def {x : FqtInfty Fq} :
    Valued.v x = @Valued.extension (RatFunc Fq) _ _ _ (inftyValuedFqt Fq) x 
Arguments: (Fq : Type) [Field Fq] [DecidableEq (RatFunc Fq)] {x : FunctionField.FqtInfty Fq}
Goal: Valued.v x = Valued.extension x
-- HurwitzZeta.cosZeta_two_mul_nat
theorem cosZeta_two_mul_nat (hk : k ≠ 0) (hx : x ∈ Icc 0 1) :
    cosZeta x (2 * k) = (-1) ^ (k + 1) * (2 * π) ^ (2 * k) / 2 / (2 * k)! *
      ((Polynomial.bernoulli (2 * k)).map (algebraMap ℚ ℂ)).eval (x : ℂ) 
Arguments: {k : ℕ} {x : ℝ} (hk : k ≠ 0) (hx : x ∈ Set.Icc 0 1)
Goal: HurwitzZeta.cosZeta (↑x) (2 * ↑k) =
  (-1) ^ (k + 1) * (2 * ↑π) ^ (2 * k) / 2 / ↑(2 * k)! *
    Polynomial.eval (↑x) (Polynomial.map (algebraMap ℚ ℂ) (Polynomial.bernoulli (2 * k)))
-- HurwitzZeta.sinZeta_two_mul_nat_add_one
theorem sinZeta_two_mul_nat_add_one (hk : k ≠ 0) (hx : x ∈ Icc 0 1) :
    sinZeta x (2 * k + 1) = (-1) ^ (k + 1) * (2 * π) ^ (2 * k + 1) / 2 / (2 * k + 1)! *
      ((Polynomial.bernoulli (2 * k + 1)).map (algebraMap ℚ ℂ)).eval (x : ℂ) 
Arguments: {k : ℕ} {x : ℝ} (hk : k ≠ 0) (hx : x ∈ Set.Icc 0 1)
Goal: HurwitzZeta.sinZeta (↑x) (2 * ↑k + 1) =
  (-1) ^ (k + 1) * (2 * ↑π) ^ (2 * k + 1) / 2 / ↑(2 * k + 1)! *
    Polynomial.eval (↑x) (Polynomial.map (algebraMap ℚ ℂ) (Polynomial.bernoulli (2 * k + 1)))
-- HurwitzZeta.cosZeta_two_mul_nat'
theorem cosZeta_two_mul_nat' (hk : k ≠ 0) (hx : x ∈ Icc (0 : ℝ) 1) :
    cosZeta x (2 * k) = (-1) ^ (k + 1) / (2 * k) / Gammaℂ (2 * k) *
      ((Polynomial.bernoulli (2 * k)).map (algebraMap ℚ ℂ)).eval (x : ℂ) 
Arguments: {k : ℕ} {x : ℝ} (hk : k ≠ 0) (hx : x ∈ Set.Icc 0 1)
Goal: HurwitzZeta.cosZeta (↑x) (2 * ↑k) =
  (-1) ^ (k + 1) / (2 * ↑k) / (2 * ↑k).Gammaℂ *
    Polynomial.eval (↑x) (Polynomial.map (algebraMap ℚ ℂ) (Polynomial.bernoulli (2 * k)))
-- HurwitzZeta.sinZeta_two_mul_nat_add_one'
theorem sinZeta_two_mul_nat_add_one' (hk : k ≠ 0) (hx : x ∈ Icc (0 : ℝ) 1) :
    sinZeta x (2 * k + 1) = (-1) ^ (k + 1) / (2 * k + 1) / Gammaℂ (2 * k + 1) *
      ((Polynomial.bernoulli (2 * k + 1)).map (algebraMap ℚ ℂ)).eval (x : ℂ) 
Arguments: {k : ℕ} {x : ℝ} (hk : k ≠ 0) (hx : x ∈ Set.Icc 0 1)
Goal: HurwitzZeta.sinZeta (↑x) (2 * ↑k + 1) =
  (-1) ^ (k + 1) / (2 * ↑k + 1) / (2 * ↑k + 1).Gammaℂ *
    Polynomial.eval (↑x) (Polynomial.map (algebraMap ℚ ℂ) (Polynomial.bernoulli (2 * k + 1)))
-- HurwitzZeta.hurwitzZetaEven_one_sub_two_mul_nat
theorem hurwitzZetaEven_one_sub_two_mul_nat (hk : k ≠ 0) (hx : x ∈ Icc (0 : ℝ) 1) :
    hurwitzZetaEven x (1 - 2 * k) =
      -1 / (2 * k) * ((Polynomial.bernoulli (2 * k)).map (algebraMap ℚ ℂ)).eval (x : ℂ) 
Arguments: {k : ℕ} {x : ℝ} (hk : k ≠ 0) (hx : x ∈ Set.Icc 0 1)
Goal: HurwitzZeta.hurwitzZetaEven (↑x) (1 - 2 * ↑k) =
  -1 / (2 * ↑k) * Polynomial.eval (↑x) (Polynomial.map (algebraMap ℚ ℂ) (Polynomial.bernoulli (2 * k)))
-- HurwitzZeta.hurwitzZetaOdd_neg_two_mul_nat
theorem hurwitzZetaOdd_neg_two_mul_nat (hk : k ≠ 0) (hx : x ∈ Icc (0 : ℝ) 1) :
    hurwitzZetaOdd x (-(2 * k)) =
    -1 / (2 * k + 1) * ((Polynomial.bernoulli (2 * k + 1)).map (algebraMap ℚ ℂ)).eval (x : ℂ) 
Arguments: {k : ℕ} {x : ℝ} (hk : k ≠ 0) (hx : x ∈ Set.Icc 0 1)
Goal: HurwitzZeta.hurwitzZetaOdd (↑x) (-(2 * ↑k)) =
  -1 / (2 * ↑k + 1) * Polynomial.eval (↑x) (Polynomial.map (algebraMap ℚ ℂ) (Polynomial.bernoulli (2 * k + 1)))
-- _private.Mathlib.NumberTheory.LSeries.HurwitzZetaValues.0.HurwitzZeta.hurwitzZeta_one_sub_two_mul_nat
private lemma hurwitzZeta_one_sub_two_mul_nat (hk : k ≠ 0) (hx : x ∈ Icc (0 : ℝ) 1) :
    hurwitzZeta x (1 - 2 * k) =
      -1 / (2 * k) * ((Polynomial.bernoulli (2 * k)).map (algebraMap ℚ ℂ)).eval (x : ℂ) 
Arguments: {k : ℕ} {x : ℝ} (hk : k ≠ 0) (hx : x ∈ Set.Icc 0 1)
Goal: HurwitzZeta.hurwitzZeta (↑x) (1 - 2 * ↑k) =
  -1 / (2 * ↑k) * Polynomial.eval (↑x) (Polynomial.map (algebraMap ℚ ℂ) (Polynomial.bernoulli (2 * k)))
-- _private.Mathlib.NumberTheory.LSeries.HurwitzZetaValues.0.HurwitzZeta.hurwitzZeta_neg_two_mul_nat
private lemma hurwitzZeta_neg_two_mul_nat (hk : k ≠ 0) (hx : x ∈ Icc (0 : ℝ) 1) :
    hurwitzZeta x (-(2 * k)) = -1 / (2 * k + 1) *
      ((Polynomial.bernoulli (2 * k + 1)).map (algebraMap ℚ ℂ)).eval (x : ℂ) 
Arguments: {k : ℕ} {x : ℝ} (hk : k ≠ 0) (hx : x ∈ Set.Icc 0 1)
Goal: HurwitzZeta.hurwitzZeta (↑x) (-(2 * ↑k)) =
  -1 / (2 * ↑k + 1) * Polynomial.eval (↑x) (Polynomial.map (algebraMap ℚ ℂ) (Polynomial.bernoulli (2 * k + 1)))
-- HurwitzZeta.hurwitzZeta_neg_nat
theorem hurwitzZeta_neg_nat (hk : k ≠ 0) (hx : x ∈ Icc (0 : ℝ) 1) :
    hurwitzZeta x (-k) =
    -1 / (k + 1) * ((Polynomial.bernoulli (k + 1)).map (algebraMap ℚ ℂ)).eval (x : ℂ) 
Arguments: {k : ℕ} {x : ℝ} (hk : k ≠ 0) (hx : x ∈ Set.Icc 0 1)
Goal: HurwitzZeta.hurwitzZeta (↑x) (-↑k) =
  -1 / (↑k + 1) * Polynomial.eval (↑x) (Polynomial.map (algebraMap ℚ ℂ) (Polynomial.bernoulli (k + 1)))
-- riemannZeta_two_mul_nat
theorem riemannZeta_two_mul_nat {k : ℕ} (hk : k ≠ 0) :
    riemannZeta (2 * k) = (-1) ^ (k + 1) * (2 : ℂ) ^ (2 * k - 1)
      * (π : ℂ) ^ (2 * k) * bernoulli (2 * k) / (2 * k)! 
Arguments: {k : ℕ} (hk : k ≠ 0)
Goal: riemannZeta (2 * ↑k) = (-1) ^ (k + 1) * 2 ^ (2 * k - 1) * ↑π ^ (2 * k) * ↑(bernoulli (2 * k)) / ↑(2 * k)!
-- riemannZeta_two
theorem riemannZeta_two : riemannZeta 2 = (π : ℂ) ^ 2 / 6 
Goal: riemannZeta 2 = ↑π ^ 2 / 6
-- riemannZeta_four
theorem riemannZeta_four : riemannZeta 4 = π ^ 4 / 90 
Goal: riemannZeta 4 = ↑π ^ 4 / 90
-- riemannZeta_neg_nat_eq_bernoulli'
theorem riemannZeta_neg_nat_eq_bernoulli' (k : ℕ) :
    riemannZeta (-k) = -bernoulli' (k + 1) / (k + 1) 
Arguments: (k : ℕ)
Goal: riemannZeta (-↑k) = -↑(bernoulli' (k + 1)) / (↑k + 1)
-- riemannZeta_neg_nat_eq_bernoulli
theorem riemannZeta_neg_nat_eq_bernoulli (k : ℕ) :
    riemannZeta (-k) = (-1 : ℂ) ^ k * bernoulli (k + 1) / (k + 1) 
Arguments: (k : ℕ)
Goal: riemannZeta (-↑k) = (-1) ^ k * ↑(bernoulli (k + 1)) / (↑k + 1)
-- log_add_one_le_harmonic
theorem log_add_one_le_harmonic (n : ℕ) :
    Real.log ↑(n+1) ≤ harmonic n 
Arguments: (n : ℕ)
Goal: Real.log ↑(n + 1) ≤ ↑(harmonic n)
-- harmonic_le_one_add_log
theorem harmonic_le_one_add_log (n : ℕ) :
    harmonic n ≤ 1 + Real.log n 
Arguments: (n : ℕ)
Goal: ↑(harmonic n) ≤ 1 + Real.log ↑n
-- log_le_harmonic_floor
theorem log_le_harmonic_floor (y : ℝ) (hy : 0 ≤ y) :
    Real.log y ≤ harmonic ⌊y⌋₊ 
Arguments: (y : ℝ) (hy : 0 ≤ y)
Goal: Real.log y ≤ ↑(harmonic ⌊y⌋₊)
-- harmonic_floor_le_one_add_log
theorem harmonic_floor_le_one_add_log (y : ℝ) (hy : 1 ≤ y) :
    harmonic ⌊y⌋₊ ≤ 1 + Real.log y 
Arguments: (y : ℝ) (hy : 1 ≤ y)
Goal: ↑(harmonic ⌊y⌋₊) ≤ 1 + Real.log y
-- lucas_primality
theorem lucas_primality (p : ℕ) (a : ZMod p) (ha : a ^ (p - 1) = 1)
    (hd : ∀ q : ℕ, q.Prime → q ∣ p - 1 → a ^ ((p - 1) / q) ≠ 1) : p.Prime 
Arguments: (p : ℕ) (a : ZMod p) (ha : a ^ (p - 1) = 1) (hd : ∀ (q : ℕ), Nat.Prime q → q ∣ p - 1 → a ^ ((p - 1) / q) ≠ 1)
Goal: Nat.Prime p
-- Nat.exists_prime_gt_modEq_one
theorem exists_prime_gt_modEq_one {k : ℕ} (n : ℕ) (hk0 : k ≠ 0) :
    ∃ p : ℕ, Nat.Prime p ∧ n < p ∧ p ≡ 1 [MOD k] 
Arguments: {k : ℕ} (n : ℕ) (hk0 : k ≠ 0)
Goal: ∃ p, Nat.Prime p ∧ n < p ∧ p ≡ 1 [MOD k]
-- Nat.frequently_atTop_modEq_one
theorem frequently_atTop_modEq_one {k : ℕ} (hk0 : k ≠ 0) :
    ∃ᶠ p in atTop, Nat.Prime p ∧ p ≡ 1 [MOD k] 
Arguments: {k : ℕ} (hk0 : k ≠ 0)
Goal: ∃ᶠ (p : ℕ) in Filter.atTop, Nat.Prime p ∧ p ≡ 1 [MOD k]
-- Nat.infinite_setOf_prime_modEq_one
theorem infinite_setOf_prime_modEq_one {k : ℕ} (hk0 : k ≠ 0) :
    Set.Infinite {p : ℕ | Nat.Prime p ∧ p ≡ 1 [MOD k]} 
Arguments: {k : ℕ} (hk0 : k ≠ 0)
Goal: {p | Nat.Prime p ∧ p ≡ 1 [MOD k]}.Infinite
-- strictMono_mersenne
theorem strictMono_mersenne : StrictMono mersenne 
Goal: StrictMono mersenne
-- mersenne_lt_mersenne
@[simp]
theorem mersenne_lt_mersenne {p q : ℕ} : mersenne p < mersenne q ↔ p < q 
Arguments: {p q : ℕ}
Goal: mersenne p < mersenne q ↔ p < q
-- mersenne_le_mersenne
@[simp]
theorem mersenne_le_mersenne {p q : ℕ} : mersenne p ≤ mersenne q ↔ p ≤ q 
Arguments: {p q : ℕ}
Goal: mersenne p ≤ mersenne q ↔ p ≤ q
-- mersenne_zero
@[simp] theorem mersenne_zero : mersenne 0 = 0 
Goal: mersenne 0 = 0
-- mersenne_pos
@[simp] theorem mersenne_pos {p : ℕ} : 0 < mersenne p ↔ 0 < p 
Arguments: {p : ℕ}
Goal: 0 < mersenne p ↔ 0 < p
-- one_lt_mersenne
@[simp]
theorem one_lt_mersenne {p : ℕ} : 1 < mersenne p ↔ 1 < p 
Arguments: {p : ℕ}
Goal: 1 < mersenne p ↔ 1 < p
-- succ_mersenne
@[simp]
theorem succ_mersenne (k : ℕ) : mersenne k + 1 = 2 ^ k 
Arguments: (k : ℕ)
Goal: mersenne k + 1 = 2 ^ k
-- LucasLehmer.mersenne_int_pos
theorem mersenne_int_pos {p : ℕ} (hp : p ≠ 0) : (0 : ℤ) < 2 ^ p - 1 
Arguments: {p : ℕ} (hp : p ≠ 0)
Goal: 0 < 2 ^ p - 1
-- LucasLehmer.mersenne_int_ne_zero
theorem mersenne_int_ne_zero (p : ℕ) (hp : p ≠ 0) : (2 ^ p - 1 : ℤ) ≠ 0 
Arguments: (p : ℕ) (hp : p ≠ 0)
Goal: 2 ^ p - 1 ≠ 0
-- LucasLehmer.sMod_nonneg
theorem sMod_nonneg (p : ℕ) (hp : p ≠ 0) (i : ℕ) : 0 ≤ sMod p i 
Arguments: (p : ℕ) (hp : p ≠ 0) (i : ℕ)
Goal: 0 ≤ LucasLehmer.sMod p i
-- LucasLehmer.sMod_mod
theorem sMod_mod (p i : ℕ) : sMod p i % (2 ^ p - 1) = sMod p i 
Arguments: (p i : ℕ)
Goal: LucasLehmer.sMod p i % (2 ^ p - 1) = LucasLehmer.sMod p i
-- LucasLehmer.sMod_lt
theorem sMod_lt (p : ℕ) (hp : p ≠ 0) (i : ℕ) : sMod p i < 2 ^ p - 1 
Arguments: (p : ℕ) (hp : p ≠ 0) (i : ℕ)
Goal: LucasLehmer.sMod p i < 2 ^ p - 1
-- LucasLehmer.sZMod_eq_s
theorem sZMod_eq_s (p' : ℕ) (i : ℕ) : sZMod (p' + 2) i = (s i : ZMod (2 ^ (p' + 2) - 1)) 
Arguments: (p' i : ℕ)
Goal: LucasLehmer.sZMod (p' + 2) i = ↑(LucasLehmer.s i)
-- LucasLehmer.Int.natCast_pow_pred
theorem Int.natCast_pow_pred (b p : ℕ) (w : 0 < b) : ((b ^ p - 1 : ℕ) : ℤ) = (b : ℤ) ^ p - 1 
Arguments: (b p : ℕ) (w : 0 < b)
Goal: ↑(b ^ p - 1) = ↑b ^ p - 1
-- LucasLehmer.Int.coe_nat_two_pow_pred
theorem Int.coe_nat_two_pow_pred (p : ℕ) : ((2 ^ p - 1 : ℕ) : ℤ) = (2 ^ p - 1 : ℤ) 
Arguments: (p : ℕ)
Goal: ↑(2 ^ p - 1) = 2 ^ p - 1
-- LucasLehmer.sZMod_eq_sMod
theorem sZMod_eq_sMod (p : ℕ) (i : ℕ) : sZMod p i = (sMod p i : ZMod (2 ^ p - 1)) 
Arguments: (p i : ℕ)
Goal: LucasLehmer.sZMod p i = ↑(LucasLehmer.sMod p i)
-- LucasLehmer.residue_eq_zero_iff_sMod_eq_zero
theorem residue_eq_zero_iff_sMod_eq_zero (p : ℕ) (w : 1 < p) :
    lucasLehmerResidue p = 0 ↔ sMod p (p - 2) = 0 
Arguments: (p : ℕ) (w : 1 < p)
Goal: lucasLehmerResidue p = 0 ↔ LucasLehmer.sMod p (p - 2) = 0
-- LucasLehmer.X.ext
@[ext]
theorem ext {x y : X q} (h₁ : x.1 = y.1) (h₂ : x.2 = y.2) : x = y 
Arguments: {q : ℕ+} {x y : LucasLehmer.X q} (h₁ : x.1 = y.1) (h₂ : x.2 = y.2)
Goal: x = y
-- LucasLehmer.X.zero_fst
@[simp] theorem zero_fst : (0 : X q).1 = 0 
Arguments: {q : ℕ+}
Goal: 0.1 = 0
-- LucasLehmer.X.zero_snd
@[simp] theorem zero_snd : (0 : X q).2 = 0 
Arguments: {q : ℕ+}
Goal: 0.2 = 0
-- LucasLehmer.X.add_fst
@[simp]
theorem add_fst (x y : X q) : (x + y).1 = x.1 + y.1 
Arguments: {q : ℕ+} (x y : LucasLehmer.X q)
Goal: (x + y).1 = x.1 + y.1
-- LucasLehmer.X.add_snd
@[simp]
theorem add_snd (x y : X q) : (x + y).2 = x.2 + y.2 
Arguments: {q : ℕ+} (x y : LucasLehmer.X q)
Goal: (x + y).2 = x.2 + y.2
-- LucasLehmer.X.neg_fst
@[simp]
theorem neg_fst (x : X q) : (-x).1 = -x.1 
Arguments: {q : ℕ+} (x : LucasLehmer.X q)
Goal: (-x).1 = -x.1
-- LucasLehmer.X.neg_snd
@[simp]
theorem neg_snd (x : X q) : (-x).2 = -x.2 
Arguments: {q : ℕ+} (x : LucasLehmer.X q)
Goal: (-x).2 = -x.2
-- LucasLehmer.X.mul_fst
@[simp]
theorem mul_fst (x y : X q) : (x * y).1 = x.1 * y.1 + 3 * x.2 * y.2 
Arguments: {q : ℕ+} (x y : LucasLehmer.X q)
Goal: (x * y).1 = x.1 * y.1 + 3 * x.2 * y.2
-- LucasLehmer.X.mul_snd
@[simp]
theorem mul_snd (x y : X q) : (x * y).2 = x.1 * y.2 + x.2 * y.1 
Arguments: {q : ℕ+} (x y : LucasLehmer.X q)
Goal: (x * y).2 = x.1 * y.2 + x.2 * y.1
-- LucasLehmer.X.one_fst
@[simp]
theorem one_fst : (1 : X q).1 = 1 
Arguments: {q : ℕ+}
Goal: 1.1 = 1
-- LucasLehmer.X.one_snd
@[simp]
theorem one_snd : (1 : X q).2 = 0 
Arguments: {q : ℕ+}
Goal: 1.2 = 0
-- LucasLehmer.X.fst_natCast
@[simp] theorem fst_natCast (n : ℕ) : (n : X q).fst = (n : ZMod q) 
Arguments: {q : ℕ+} (n : ℕ)
Goal: (↑n).1 = ↑n
-- LucasLehmer.X.snd_natCast
@[simp] theorem snd_natCast (n : ℕ) : (n : X q).snd = (0 : ZMod q) 
Arguments: {q : ℕ+} (n : ℕ)
Goal: (↑n).2 = 0
-- LucasLehmer.X.ofNat_fst
@[simp] theorem ofNat_fst (n : ℕ) [n.AtLeastTwo] :
    (no_index (OfNat.ofNat n) : X q).fst = OfNat.ofNat n 
Arguments: {q : ℕ+} (n : ℕ) [n.AtLeastTwo]
Goal: (OfNat.ofNat n).1 = OfNat.ofNat n
-- LucasLehmer.X.ofNat_snd
@[simp] theorem ofNat_snd (n : ℕ) [n.AtLeastTwo] :
    (no_index (OfNat.ofNat n) : X q).snd = 0 
Arguments: {q : ℕ+} (n : ℕ) [n.AtLeastTwo]
Goal: (OfNat.ofNat n).2 = 0
-- LucasLehmer.X.left_distrib
theorem left_distrib (x y z : X q) : x * (y + z) = x * y + x * z 
Arguments: {q : ℕ+} (x y z : LucasLehmer.X q)
Goal: x * (y + z) = x * y + x * z
-- LucasLehmer.X.right_distrib
theorem right_distrib (x y z : X q) : (x + y) * z = x * z + y * z 
Arguments: {q : ℕ+} (x y z : LucasLehmer.X q)
Goal: (x + y) * z = x * z + y * z
-- LucasLehmer.X.fst_intCast
@[simp]
theorem fst_intCast (n : ℤ) : (n : X q).fst = (n : ZMod q) 
Arguments: {q : ℕ+} (n : ℤ)
Goal: (↑n).1 = ↑n
-- LucasLehmer.X.snd_intCast
@[simp]
theorem snd_intCast (n : ℤ) : (n : X q).snd = (0 : ZMod q) 
Arguments: {q : ℕ+} (n : ℤ)
Goal: (↑n).2 = 0
-- LucasLehmer.X.coe_mul
@[norm_cast]
theorem coe_mul (n m : ℤ) : ((n * m : ℤ) : X q) = (n : X q) * (m : X q) 
Arguments: {q : ℕ+} (n m : ℤ)
Goal: ↑(n * m) = ↑n * ↑m
-- LucasLehmer.X.coe_natCast
@[norm_cast]
theorem coe_natCast (n : ℕ) : ((n : ℤ) : X q) = (n : X q) 
Arguments: {q : ℕ+} (n : ℕ)
Goal: ↑↑n = ↑n
-- LucasLehmer.X.card_eq
theorem card_eq : Fintype.card (X q) = q ^ 2 
Arguments: {q : ℕ+}
Goal: Fintype.card (LucasLehmer.X q) = ↑q ^ 2
-- LucasLehmer.X.card_units_lt
nonrec theorem card_units_lt (w : 1 < q) : Fintype.card (X q)ˣ < q ^ 2 
Arguments: {q : ℕ+} (w : 1 < q)
Goal: Fintype.card (LucasLehmer.X q)ˣ < ↑q ^ 2
-- LucasLehmer.X.ω_mul_ωb
theorem ω_mul_ωb (q : ℕ+) : (ω : X q) * ωb = 1 
Arguments: (q : ℕ+)
Goal: LucasLehmer.X.ω * LucasLehmer.X.ωb = 1
-- LucasLehmer.X.ωb_mul_ω
theorem ωb_mul_ω (q : ℕ+) : (ωb : X q) * ω = 1 
Arguments: (q : ℕ+)
Goal: LucasLehmer.X.ωb * LucasLehmer.X.ω = 1
-- LucasLehmer.X.closed_form
theorem closed_form (i : ℕ) : (s i : X q) = (ω : X q) ^ 2 ^ i + (ωb : X q) ^ 2 ^ i 
Arguments: {q : ℕ+} (i : ℕ)
Goal: ↑(LucasLehmer.s i) = LucasLehmer.X.ω ^ 2 ^ i + LucasLehmer.X.ωb ^ 2 ^ i
-- LucasLehmer.two_lt_q
theorem two_lt_q (p' : ℕ) : 2 < q (p' + 2) 
Arguments: (p' : ℕ)
Goal: 2 < LucasLehmer.q (p' + 2)
-- LucasLehmer.ω_pow_formula
theorem ω_pow_formula (p' : ℕ) (h : lucasLehmerResidue (p' + 2) = 0) :
    ∃ k : ℤ,
      (ω : X (q (p' + 2))) ^ 2 ^ (p' + 1) =
        k * mersenne (p' + 2) * (ω : X (q (p' + 2))) ^ 2 ^ p' - 1 
Arguments: (p' : ℕ) (h : lucasLehmerResidue (p' + 2) = 0)
Goal: ∃ k, LucasLehmer.X.ω ^ 2 ^ (p' + 1) = ↑k * ↑(mersenne (p' + 2)) * LucasLehmer.X.ω ^ 2 ^ p' - 1
-- LucasLehmer.mersenne_coe_X
theorem mersenne_coe_X (p : ℕ) : (mersenne p : X (q p)) = 0 
Arguments: (p : ℕ)
Goal: ↑(mersenne p) = 0
-- LucasLehmer.ω_pow_eq_neg_one
theorem ω_pow_eq_neg_one (p' : ℕ) (h : lucasLehmerResidue (p' + 2) = 0) :
    (ω : X (q (p' + 2))) ^ 2 ^ (p' + 1) = -1 
Arguments: (p' : ℕ) (h : lucasLehmerResidue (p' + 2) = 0)
Goal: LucasLehmer.X.ω ^ 2 ^ (p' + 1) = -1
-- LucasLehmer.ω_pow_eq_one
theorem ω_pow_eq_one (p' : ℕ) (h : lucasLehmerResidue (p' + 2) = 0) :
    (ω : X (q (p' + 2))) ^ 2 ^ (p' + 2) = 1 
Arguments: (p' : ℕ) (h : lucasLehmerResidue (p' + 2) = 0)
Goal: LucasLehmer.X.ω ^ 2 ^ (p' + 2) = 1
-- LucasLehmer.ωUnit_coe
@[simp]
theorem ωUnit_coe (p : ℕ) : (ωUnit p : X (q p)) = ω 
Arguments: (p : ℕ)
Goal: ↑(LucasLehmer.ωUnit p) = LucasLehmer.X.ω
-- LucasLehmer.order_ω
theorem order_ω (p' : ℕ) (h : lucasLehmerResidue (p' + 2) = 0) :
    orderOf (ωUnit (p' + 2)) = 2 ^ (p' + 2) 
Arguments: (p' : ℕ) (h : lucasLehmerResidue (p' + 2) = 0)
Goal: orderOf (LucasLehmer.ωUnit (p' + 2)) = 2 ^ (p' + 2)
-- LucasLehmer.order_ineq
theorem order_ineq (p' : ℕ) (h : lucasLehmerResidue (p' + 2) = 0) :
    2 ^ (p' + 2) < (q (p' + 2) : ℕ) ^ 2 
Arguments: (p' : ℕ) (h : lucasLehmerResidue (p' + 2) = 0)
Goal: 2 ^ (p' + 2) < ↑(LucasLehmer.q (p' + 2)) ^ 2
-- lucas_lehmer_sufficiency
theorem lucas_lehmer_sufficiency (p : ℕ) (w : 1 < p) : LucasLehmerTest p → (mersenne p).Prime 
Arguments: (p : ℕ) (w : 1 < p)
Goal: LucasLehmerTest p → Nat.Prime (mersenne p)
-- LucasLehmer.norm_num_ext.sMod'_eq_sMod
theorem sMod'_eq_sMod (p k : ℕ) (hp : 2 ≤ p) : (sMod' (2 ^ p - 1) k : ℤ) = sMod p k 
Arguments: (p k : ℕ) (hp : 2 ≤ p)
Goal: ↑(LucasLehmer.norm_num_ext.sMod' (2 ^ p - 1) k) = LucasLehmer.sMod p k
-- LucasLehmer.norm_num_ext.testTrueHelper
lemma testTrueHelper (p : ℕ) (hp : Nat.blt 1 p = true) (h : sMod' (2 ^ p - 1) (p - 2) = 0) :
    LucasLehmerTest p 
Arguments: (p : ℕ) (hp : Nat.blt 1 p = true) (h : LucasLehmer.norm_num_ext.sMod' (2 ^ p - 1) (p - 2) = 0)
Goal: LucasLehmerTest p
-- LucasLehmer.norm_num_ext.testFalseHelper
lemma testFalseHelper (p : ℕ) (hp : Nat.blt 1 p = true)
    (h : Nat.ble 1 (sMod' (2 ^ p - 1) (p - 2))) : ¬ LucasLehmerTest p 
Arguments: (p : ℕ) (hp : Nat.blt 1 p = true) (h : Nat.ble 1 (LucasLehmer.norm_num_ext.sMod' (2 ^ p - 1) (p - 2)) = true)
Goal: ¬LucasLehmerTest p