File: Mathlib/AlgebraicGeometry/EllipticCurve/DivisionPolynomial/Degree.lean

full_name: WeierstrassCurve.natDegree_Ψ₂Sq_le
code: lemma natDegree_Ψ₂Sq_le : W.Ψ₂Sq.natDegree ≤ 3 
goal: W.Ψ₂Sq.natDegree ≤ 3

full_name: WeierstrassCurve.coeff_Ψ₂Sq
code: @[simp]
lemma coeff_Ψ₂Sq : W.Ψ₂Sq.coeff 3 = 4 
goal: W.Ψ₂Sq.coeff 3 = 4

full_name: WeierstrassCurve.coeff_Ψ₂Sq_ne_zero
code: lemma coeff_Ψ₂Sq_ne_zero (h : (4 : R) ≠ 0) : W.Ψ₂Sq.coeff 3 ≠ 0 
goal: W.Ψ₂Sq.coeff 3 ≠ 0

full_name: WeierstrassCurve.natDegree_Ψ₂Sq
code: @[simp]
lemma natDegree_Ψ₂Sq (h : (4 : R) ≠ 0) : W.Ψ₂Sq.natDegree = 3 
goal: W.Ψ₂Sq.natDegree = 3

full_name: WeierstrassCurve.natDegree_Ψ₂Sq_pos
code: lemma natDegree_Ψ₂Sq_pos (h : (4 : R) ≠ 0) : 0 < W.Ψ₂Sq.natDegree 
goal: 0 < W.Ψ₂Sq.natDegree

full_name: WeierstrassCurve.leadingCoeff_Ψ₂Sq
code: @[simp]
lemma leadingCoeff_Ψ₂Sq (h : (4 : R) ≠ 0) : W.Ψ₂Sq.leadingCoeff = 4 
goal: W.Ψ₂Sq.leadingCoeff = 4

full_name: WeierstrassCurve.Ψ₂Sq_ne_zero
code: lemma Ψ₂Sq_ne_zero (h : (4 : R) ≠ 0) : W.Ψ₂Sq ≠ 0 
goal: W.Ψ₂Sq ≠ 0

full_name: WeierstrassCurve.natDegree_Ψ₃_le
code: lemma natDegree_Ψ₃_le : W.Ψ₃.natDegree ≤ 4 
goal: W.Ψ₃.natDegree ≤ 4

full_name: WeierstrassCurve.coeff_Ψ₃
code: @[simp]
lemma coeff_Ψ₃ : W.Ψ₃.coeff 4 = 3 
goal: W.Ψ₃.coeff 4 = 3

full_name: WeierstrassCurve.coeff_Ψ₃_ne_zero
code: lemma coeff_Ψ₃_ne_zero (h : (3 : R) ≠ 0) : W.Ψ₃.coeff 4 ≠ 0 
goal: W.Ψ₃.coeff 4 ≠ 0

full_name: WeierstrassCurve.natDegree_Ψ₃
code: @[simp]
lemma natDegree_Ψ₃ (h : (3 : R) ≠ 0) : W.Ψ₃.natDegree = 4 
goal: W.Ψ₃.natDegree = 4

full_name: WeierstrassCurve.natDegree_Ψ₃_pos
code: lemma natDegree_Ψ₃_pos (h : (3 : R) ≠ 0) : 0 < W.Ψ₃.natDegree 
goal: 0 < W.Ψ₃.natDegree

full_name: WeierstrassCurve.leadingCoeff_Ψ₃
code: @[simp]
lemma leadingCoeff_Ψ₃ (h : (3 : R) ≠ 0) : W.Ψ₃.leadingCoeff = 3 
goal: W.Ψ₃.leadingCoeff = 3

full_name: WeierstrassCurve.Ψ₃_ne_zero
code: lemma Ψ₃_ne_zero (h : (3 : R) ≠ 0) : W.Ψ₃ ≠ 0 
goal: W.Ψ₃ ≠ 0

full_name: WeierstrassCurve.natDegree_preΨ₄_le
code: lemma natDegree_preΨ₄_le : W.preΨ₄.natDegree ≤ 6 
goal: W.preΨ₄.natDegree ≤ 6

full_name: WeierstrassCurve.coeff_preΨ₄
code: @[simp]
lemma coeff_preΨ₄ : W.preΨ₄.coeff 6 = 2 
goal: W.preΨ₄.coeff 6 = 2

full_name: WeierstrassCurve.coeff_preΨ₄_ne_zero
code: lemma coeff_preΨ₄_ne_zero (h : (2 : R) ≠ 0) : W.preΨ₄.coeff 6 ≠ 0 
goal: W.preΨ₄.coeff 6 ≠ 0

full_name: WeierstrassCurve.natDegree_preΨ₄
code: @[simp]
lemma natDegree_preΨ₄ (h : (2 : R) ≠ 0) : W.preΨ₄.natDegree = 6 
goal: W.preΨ₄.natDegree = 6

full_name: WeierstrassCurve.natDegree_preΨ₄_pos
code: lemma natDegree_preΨ₄_pos (h : (2 : R) ≠ 0) : 0 < W.preΨ₄.natDegree 
goal: 0 < W.preΨ₄.natDegree

full_name: WeierstrassCurve.leadingCoeff_preΨ₄
code: @[simp]
lemma leadingCoeff_preΨ₄ (h : (2 : R) ≠ 0) : W.preΨ₄.leadingCoeff = 2 
goal: W.preΨ₄.leadingCoeff = 2

full_name: WeierstrassCurve.preΨ₄_ne_zero
code: lemma preΨ₄_ne_zero (h : (2 : R) ≠ 0) : W.preΨ₄ ≠ 0 
goal: W.preΨ₄ ≠ 0

full_name: _private.Mathlib.AlgebraicGeometry.EllipticCurve.DivisionPolynomial.Degree.0.WeierstrassCurve.expDegree
code: private def expDegree (n : ℕ) : ℕ 
goal: ℕ

full_name: _private.Mathlib.AlgebraicGeometry.EllipticCurve.DivisionPolynomial.Degree.0.WeierstrassCurve.expDegree_cast
code: private lemma expDegree_cast {n : ℕ} (hn : n ≠ 0) :
    2 * (expDegree n : ℤ) = n ^ 2 - if Even n then 4 else 1 
goal: 2 * ↑(WeierstrassCurve.expDegree n) = ↑n ^ 2 - if Even n then 4 else 1

full_name: _private.Mathlib.AlgebraicGeometry.EllipticCurve.DivisionPolynomial.Degree.0.WeierstrassCurve.expDegree_rec
code: private lemma expDegree_rec (m : ℕ) :
    (expDegree (2 * (m + 3)) = 2 * expDegree (m + 2) + expDegree (m + 3) + expDegree (m + 5) ∧
    expDegree (2 * (m + 3)) = expDegree (m + 1) + expDegree (m + 3) + 2 * expDegree (m + 4)) ∧
    (expDegree (2 * (m + 2) + 1) =
      expDegree (m + 4) + 3 * expDegree (m + 2) + (if Even m then 2 * 3 else 0) ∧
    expDegree (2 * (m + 2) + 1) =
      expDegree (m + 1) + 3 * expDegree (m + 3) + (if Even m then 0 else 2 * 3)) 
goal: (WeierstrassCurve.expDegree (2 * (m + 3)) =
      2 * WeierstrassCurve.expDegree (m + 2) + WeierstrassCurve.expDegree (m + 3) + WeierstrassCurve.expDegree (m + 5) ∧
    WeierstrassCurve.expDegree (2 * (m + 3)) =
      WeierstrassCurve.expDegree (m + 1) + WeierstrassCurve.expDegree (m + 3) +
        2 * WeierstrassCurve.expDegree (m + 4)) ∧
  (WeierstrassCurve.expDegree (2 * (m + 2) + 1) =
      WeierstrassCurve.expDegree (m + 4) + 3 * WeierstrassCurve.expDegree (m + 2) + if Even m then 2 * 3 else 0) ∧
    WeierstrassCurve.expDegree (2 * (m + 2) + 1) =
      WeierstrassCurve.expDegree (m + 1) + 3 * WeierstrassCurve.expDegree (m + 3) + if Even m then 0 else 2 * 3

full_name: _private.Mathlib.AlgebraicGeometry.EllipticCurve.DivisionPolynomial.Degree.0.WeierstrassCurve.expCoeff
code: private def expCoeff (n : ℕ) : ℤ 
goal: ℤ

full_name: _private.Mathlib.AlgebraicGeometry.EllipticCurve.DivisionPolynomial.Degree.0.WeierstrassCurve.expCoeff_cast
code: private lemma expCoeff_cast (n : ℕ) : (expCoeff n : ℚ) = if Even n then (n / 2 : ℚ) else n 
goal: ↑(WeierstrassCurve.expCoeff n) = if Even n then ↑n / 2 else ↑n

full_name: _private.Mathlib.AlgebraicGeometry.EllipticCurve.DivisionPolynomial.Degree.0.WeierstrassCurve.expCoeff_rec
code: private lemma expCoeff_rec (m : ℕ) :
    (expCoeff (2 * (m + 3)) =
      expCoeff (m + 2) ^ 2 * expCoeff (m + 3) * expCoeff (m + 5) -
        expCoeff (m + 1) * expCoeff (m + 3) * expCoeff (m + 4) ^ 2) ∧
    (expCoeff (2 * (m + 2) + 1) =
      expCoeff (m + 4) * expCoeff (m + 2) ^ 3 * (if Even m then 4 ^ 2 else 1) -
        expCoeff (m + 1) * expCoeff (m + 3) ^ 3 * (if Even m then 1 else 4 ^ 2)) 
goal: WeierstrassCurve.expCoeff (2 * (m + 3)) =
    WeierstrassCurve.expCoeff (m + 2) ^ 2 * WeierstrassCurve.expCoeff (m + 3) * WeierstrassCurve.expCoeff (m + 5) -
      WeierstrassCurve.expCoeff (m + 1) * WeierstrassCurve.expCoeff (m + 3) * WeierstrassCurve.expCoeff (m + 4) ^ 2 ∧
  WeierstrassCurve.expCoeff (2 * (m + 2) + 1) =
    (WeierstrassCurve.expCoeff (m + 4) * WeierstrassCurve.expCoeff (m + 2) ^ 3 * if Even m then 4 ^ 2 else 1) -
      WeierstrassCurve.expCoeff (m + 1) * WeierstrassCurve.expCoeff (m + 3) ^ 3 * if Even m then 1 else 4 ^ 2

full_name: _private.Mathlib.AlgebraicGeometry.EllipticCurve.DivisionPolynomial.Degree.0.WeierstrassCurve.natDegree_coeff_preΨ'
code: private lemma natDegree_coeff_preΨ' (n : ℕ) :
    (W.preΨ' n).natDegree ≤ expDegree n ∧ (W.preΨ' n).coeff (expDegree n) = expCoeff n 
goal: (W.preΨ' n).natDegree ≤ WeierstrassCurve.expDegree n ∧
  (W.preΨ' n).coeff (WeierstrassCurve.expDegree n) = ↑(WeierstrassCurve.expCoeff n)

full_name: WeierstrassCurve.natDegree_preΨ'_le
code: lemma natDegree_preΨ'_le (n : ℕ) : (W.preΨ' n).natDegree ≤ (n ^ 2 - if Even n then 4 else 1) / 2 
goal: (W.preΨ' n).natDegree ≤ (n ^ 2 - if Even n then 4 else 1) / 2

full_name: WeierstrassCurve.coeff_preΨ'
code: @[simp]
lemma coeff_preΨ' (n : ℕ) : (W.preΨ' n).coeff ((n ^ 2 - if Even n then 4 else 1) / 2) =
    if Even n then n / 2 else n 
goal: (W.preΨ' n).coeff ((n ^ 2 - if Even n then 4 else 1) / 2) = ↑(if Even n then n / 2 else n)

full_name: WeierstrassCurve.coeff_preΨ'_ne_zero
code: lemma coeff_preΨ'_ne_zero {n : ℕ} (h : (n : R) ≠ 0) :
    (W.preΨ' n).coeff ((n ^ 2 - if Even n then 4 else 1) / 2) ≠ 0 
goal: (W.preΨ' n).coeff ((n ^ 2 - if Even n then 4 else 1) / 2) ≠ 0

full_name: WeierstrassCurve.natDegree_preΨ'
code: @[simp]
lemma natDegree_preΨ' {n : ℕ} (h : (n : R) ≠ 0) :
    (W.preΨ' n).natDegree = (n ^ 2 - if Even n then 4 else 1) / 2 
goal: (W.preΨ' n).natDegree = (n ^ 2 - if Even n then 4 else 1) / 2

full_name: WeierstrassCurve.natDegree_preΨ'_pos
code: lemma natDegree_preΨ'_pos {n : ℕ} (hn : 2 < n) (h : (n : R) ≠ 0) : 0 < (W.preΨ' n).natDegree 
goal: 0 < (W.preΨ' n).natDegree

full_name: WeierstrassCurve.leadingCoeff_preΨ'
code: @[simp]
lemma leadingCoeff_preΨ' {n : ℕ} (h : (n : R) ≠ 0) :
    (W.preΨ' n).leadingCoeff = if Even n then n / 2 else n 
goal: (W.preΨ' n).leadingCoeff = ↑(if Even n then n / 2 else n)

full_name: WeierstrassCurve.preΨ'_ne_zero
code: lemma preΨ'_ne_zero [Nontrivial R] {n : ℕ} (h : (n : R) ≠ 0) : W.preΨ' n ≠ 0 
goal: W.preΨ' n ≠ 0

full_name: WeierstrassCurve.natDegree_preΨ_le
code: lemma natDegree_preΨ_le (n : ℤ) : (W.preΨ n).natDegree ≤
    (n.natAbs ^ 2 - if Even n then 4 else 1) / 2 
goal: (W.preΨ n).natDegree ≤ (n.natAbs ^ 2 - if Even n then 4 else 1) / 2

full_name: WeierstrassCurve.coeff_preΨ
code: @[simp]
lemma coeff_preΨ (n : ℤ) : (W.preΨ n).coeff ((n.natAbs ^ 2 - if Even n then 4 else 1) / 2) =
    if Even n then n / 2 else n 
goal: (W.preΨ n).coeff ((n.natAbs ^ 2 - if Even n then 4 else 1) / 2) = ↑(if Even n then n / 2 else n)

full_name: WeierstrassCurve.coeff_preΨ_ne_zero
code: lemma coeff_preΨ_ne_zero {n : ℤ} (h : (n : R) ≠ 0) :
    (W.preΨ n).coeff ((n.natAbs ^ 2 - if Even n then 4 else 1) / 2) ≠ 0 
goal: (W.preΨ n).coeff ((n.natAbs ^ 2 - if Even n then 4 else 1) / 2) ≠ 0

full_name: WeierstrassCurve.natDegree_preΨ
code: @[simp]
lemma natDegree_preΨ {n : ℤ} (h : (n : R) ≠ 0) :
    (W.preΨ n).natDegree = (n.natAbs ^ 2 - if Even n then 4 else 1) / 2 
goal: (W.preΨ n).natDegree = (n.natAbs ^ 2 - if Even n then 4 else 1) / 2

full_name: WeierstrassCurve.natDegree_preΨ_pos
code: lemma natDegree_preΨ_pos {n : ℤ} (hn : 2 < n.natAbs) (h : (n : R) ≠ 0) :
    0 < (W.preΨ n).natDegree 
goal: 0 < (W.preΨ n).natDegree

full_name: WeierstrassCurve.leadingCoeff_preΨ
code: @[simp]
lemma leadingCoeff_preΨ {n : ℤ} (h : (n : R) ≠ 0) :
    (W.preΨ n).leadingCoeff = if Even n then n / 2 else n 
goal: (W.preΨ n).leadingCoeff = ↑(if Even n then n / 2 else n)

full_name: WeierstrassCurve.preΨ_ne_zero
code: lemma preΨ_ne_zero [Nontrivial R] {n : ℤ} (h : (n : R) ≠ 0) : W.preΨ n ≠ 0 
goal: W.preΨ n ≠ 0

full_name: _private.Mathlib.AlgebraicGeometry.EllipticCurve.DivisionPolynomial.Degree.0.WeierstrassCurve.natDegree_coeff_ΨSq_ofNat
code: private lemma natDegree_coeff_ΨSq_ofNat (n : ℕ) :
    (W.ΨSq n).natDegree ≤ n ^ 2 - 1 ∧ (W.ΨSq n).coeff (n ^ 2 - 1) = (n ^ 2 : ℤ) 
goal: (W.ΨSq ↑n).natDegree ≤ n ^ 2 - 1 ∧ (W.ΨSq ↑n).coeff (n ^ 2 - 1) = ↑(↑n ^ 2)

full_name: WeierstrassCurve.natDegree_ΨSq_le
code: lemma natDegree_ΨSq_le (n : ℤ) : (W.ΨSq n).natDegree ≤ n.natAbs ^ 2 - 1 
goal: (W.ΨSq n).natDegree ≤ n.natAbs ^ 2 - 1

full_name: WeierstrassCurve.coeff_ΨSq
code: @[simp]
lemma coeff_ΨSq (n : ℤ) : (W.ΨSq n).coeff (n.natAbs ^ 2 - 1) = n ^ 2 
goal: (W.ΨSq n).coeff (n.natAbs ^ 2 - 1) = ↑n ^ 2

full_name: WeierstrassCurve.coeff_ΨSq_ne_zero
code: lemma coeff_ΨSq_ne_zero [NoZeroDivisors R] {n : ℤ} (h : (n : R) ≠ 0) :
    (W.ΨSq n).coeff (n.natAbs ^ 2 - 1) ≠ 0 
goal: (W.ΨSq n).coeff (n.natAbs ^ 2 - 1) ≠ 0

full_name: WeierstrassCurve.natDegree_ΨSq
code: @[simp]
lemma natDegree_ΨSq [NoZeroDivisors R] {n : ℤ} (h : (n : R) ≠ 0) :
    (W.ΨSq n).natDegree = n.natAbs ^ 2 - 1 
goal: (W.ΨSq n).natDegree = n.natAbs ^ 2 - 1

full_name: WeierstrassCurve.natDegree_ΨSq_pos
code: lemma natDegree_ΨSq_pos [NoZeroDivisors R] {n : ℤ} (hn : 1 < n.natAbs) (h : (n : R) ≠ 0) :
    0 < (W.ΨSq n).natDegree 
goal: 0 < (W.ΨSq n).natDegree

full_name: WeierstrassCurve.leadingCoeff_ΨSq
code: @[simp]
lemma leadingCoeff_ΨSq [NoZeroDivisors R] {n : ℤ} (h : (n : R) ≠ 0) :
    (W.ΨSq n).leadingCoeff = n ^ 2 
goal: (W.ΨSq n).leadingCoeff = ↑n ^ 2

full_name: WeierstrassCurve.ΨSq_ne_zero
code: lemma ΨSq_ne_zero [NoZeroDivisors R] {n : ℤ} (h : (n : R) ≠ 0) : W.ΨSq n ≠ 0 
goal: W.ΨSq n ≠ 0

full_name: _private.Mathlib.AlgebraicGeometry.EllipticCurve.DivisionPolynomial.Degree.0.WeierstrassCurve.natDegree_coeff_Φ_ofNat
code: private lemma natDegree_coeff_Φ_ofNat (n : ℕ) :
    (W.Φ n).natDegree ≤ n ^ 2 ∧ (W.Φ n).coeff (n ^ 2) = 1 
goal: (W.Φ ↑n).natDegree ≤ n ^ 2 ∧ (W.Φ ↑n).coeff (n ^ 2) = 1

full_name: WeierstrassCurve.natDegree_Φ_le
code: lemma natDegree_Φ_le (n : ℤ) : (W.Φ n).natDegree ≤ n.natAbs ^ 2 
goal: (W.Φ n).natDegree ≤ n.natAbs ^ 2

full_name: WeierstrassCurve.coeff_Φ
code: @[simp]
lemma coeff_Φ (n : ℤ) : (W.Φ n).coeff (n.natAbs ^ 2) = 1 
goal: (W.Φ n).coeff (n.natAbs ^ 2) = 1

full_name: WeierstrassCurve.coeff_Φ_ne_zero
code: lemma coeff_Φ_ne_zero [Nontrivial R] (n : ℤ) : (W.Φ n).coeff (n.natAbs ^ 2) ≠ 0 
goal: (W.Φ n).coeff (n.natAbs ^ 2) ≠ 0

full_name: WeierstrassCurve.natDegree_Φ
code: @[simp]
lemma natDegree_Φ [Nontrivial R] (n : ℤ) : (W.Φ n).natDegree = n.natAbs ^ 2 
goal: (W.Φ n).natDegree = n.natAbs ^ 2

full_name: WeierstrassCurve.natDegree_Φ_pos
code: lemma natDegree_Φ_pos [Nontrivial R] {n : ℤ} (hn : n ≠ 0) : 0 < (W.Φ n).natDegree 
goal: 0 < (W.Φ n).natDegree

full_name: WeierstrassCurve.leadingCoeff_Φ
code: @[simp]
lemma leadingCoeff_Φ [Nontrivial R] (n : ℤ) : (W.Φ n).leadingCoeff = 1 
goal: (W.Φ n).leadingCoeff = 1

full_name: WeierstrassCurve.Φ_ne_zero
code: lemma Φ_ne_zero [Nontrivial R] (n : ℤ) : W.Φ n ≠ 0 
goal: W.Φ n ≠ 0