internlm/Lean-Github huggingface dataset:
Theorem: gcd1or3
Proof state before:
case H
p q : ℤ
hp : p ≠ 0
hcoprime : IsCoprime p q
hparity : Even p ↔ ¬Even q
g : ℕ := Int.gcd (2 * p) (p ^ 2 + 3 * q ^ 2)
hg' : g = Int.gcd (2 * p) (p ^ 2 + 3 * q ^ 2)
basic : ∀ (f : ℕ), Nat.Prime f → ↑f ∣ 2 * p → ↑f ∣ p ^ 2 + 3 * q ^ 2 → f = 3
k : ℕ := List.length (Nat.factors g)
hg : g = 3 ^ 2 * 3 ^ (List.length (Nat.factors g) - 2)
H : 2 ≤ List.length (Nat.factors g)
this : ¬IsUnit 3
hdvdp : 3 ^ 2 ∣ p ^ 2
⊢ 3 ^ 2 ∣ ↑(Int.gcd (2 * p) (p ^ 2 + 3 * q ^ 2))
Tactic:
rw [← hg', hg, Int.ofNat_mul]
Proof state after:
case H
p q : ℤ
hp : p ≠ 0
hcoprime : IsCoprime p q
hparity : Even p ↔ ¬Even q
g : ℕ := Int.gcd (2 * p) (p ^ 2 + 3 * q ^ 2)
hg' : g = Int.gcd (2 * p) (p ^ 2 + 3 * q ^ 2)
basic : ∀ (f : ℕ), Nat.Prime f → ↑f ∣ 2 * p → ↑f ∣ p ^ 2 + 3 * q ^ 2 → f = 3
k : ℕ := List.length (Nat.factors g)
hg : g = 3 ^ 2 * 3 ^ (List.length (Nat.factors g) - 2)
H : 2 ≤ List.length (Nat.factors g)
this : ¬IsUnit 3
hdvdp : 3 ^ 2 ∣ p ^ 2
⊢ 3 ^ 2 ∣ ↑(3 ^ 2) * ↑(3 ^ (List.length (Nat.factors g) - 2))
Theorem: gcd1or3
Proof state before:
case H
p q : ℤ
hp : p ≠ 0
hcoprime : IsCoprime p q
hparity : Even p ↔ ¬Even q
g : ℕ := Int.gcd (2 * p) (p ^ 2 + 3 * q ^ 2)
hg' : g = Int.gcd (2 * p) (p ^ 2 + 3 * q ^ 2)
basic : ∀ (f : ℕ), Nat.Prime f → ↑f ∣ 2 * p → ↑f ∣ p ^ 2 + 3 * q ^ 2 → f = 3
k : ℕ := List.length (Nat.factors g)
hg : g = 3 ^ 2 * 3 ^ (List.length (Nat.factors g) - 2)
H : 2 ≤ List.length (Nat.factors g)
this : ¬IsUnit 3
hdvdp : 3 ^ 2 ∣ p ^ 2
⊢ 3 ^ 2 ∣ ↑(3 ^ 2) * ↑(3 ^ (List.length (Nat.factors g) - 2))
Tactic:
apply dvd_mul_right
Proof state after:
no goals
Theorem: obscure'
Proof state before:
case intro.intro.intro.intro.refine'_3
p q : ℤ
hp : p ≠ 0
hcoprime : IsCoprime p q
hparity : Even p ↔ ¬Even q
u : ℤ
hu : p ^ 2 + 3 * q ^ 2 = u ^ 3
a b : ℤ
hp' : p = a ^ 3 - 9 * a * b ^ 2
hq' : q = 3 * a ^ 2 * b - 3 * b ^ 3
⊢ IsCoprime a b
Tactic:
apply isCoprime_of_dvd
Proof state after:
case intro.intro.intro.intro.refine'_3.nonzero
p q : ℤ
hp : p ≠ 0
hcoprime : IsCoprime p q
hparity : Even p ↔ ¬Even q
u : ℤ
hu : p ^ 2 + 3 * q ^ 2 = u ^ 3
a b : ℤ
hp' : p = a ^ 3 - 9 * a * b ^ 2
hq' : q = 3 * a ^ 2 * b - 3 * b ^ 3
⊢ ¬(a = 0 ∧ b = 0)

case intro.intro.intro.intro.refine'_3.H
p q : ℤ
hp : p ≠ 0
hcoprime : IsCoprime p q
hparity : Even p ↔ ¬Even q
u : ℤ
hu : p ^ 2 + 3 * q ^ 2 = u ^ 3
a b : ℤ
hp' : p = a ^ 3 - 9 * a * b ^ 2
hq' : q = 3 * a ^ 2 * b - 3 * b ^ 3
⊢ ∀ (z : ℤ), z ∈ nonunits ℤ → z ≠ 0 → z ∣ a → ¬z ∣ b
Theorem: obscure'
Proof state before:
case intro.intro.intro.intro.refine'_3.H
p q : ℤ
hp : p ≠ 0
hcoprime : IsCoprime p q
hparity : Even p ↔ ¬Even q
u : ℤ
hu : p ^ 2 + 3 * q ^ 2 = u ^ 3
a b : ℤ
hp' : p = a ^ 3 - 9 * a * b ^ 2
hq' : q = 3 * a ^ 2 * b - 3 * b ^ 3
⊢ ∀ (z : ℤ), z ∈ nonunits ℤ → z ≠ 0 → z ∣ a → ¬z ∣ b
Tactic:
rintro k hknu - hkdvdleft hkdvdright
Proof state after:
case intro.intro.intro.intro.refine'_3.H
p q : ℤ
hp : p ≠ 0
hcoprime : IsCoprime p q
hparity : Even p ↔ ¬Even q
u : ℤ
hu : p ^ 2 + 3 * q ^ 2 = u ^ 3
a b : ℤ
hp' : p = a ^ 3 - 9 * a * b ^ 2
hq' : q = 3 * a ^ 2 * b - 3 * b ^ 3
k : ℤ
hknu : k ∈ nonunits ℤ
hkdvdleft : k ∣ a
hkdvdright : k ∣ b
⊢ False
Theorem: obscure'
Proof state before:
case neg
p q : ℤ
hp : p ≠ 0
hcoprime : IsCoprime p q
hparity : Even p ↔ ¬Even q
u : ℤ
hu : p ^ 2 + 3 * q ^ 2 = u ^ 3
a b : ℤ
hp' : p = a ^ 3 - 9 * a * b ^ 2
hq' : q = 3 * a ^ 2 * b - 3 * b ^ 3
haparity : ¬Even a
hbparity : ¬Even b
⊢ Even a ↔ ¬Even b
Tactic:
exfalso
Proof state after:
case neg.h
p q : ℤ
hp : p ≠ 0
hcoprime : IsCoprime p q
hparity : Even p ↔ ¬Even q
u : ℤ
hu : p ^ 2 + 3 * q ^ 2 = u ^ 3
a b : ℤ
hp' : p = a ^ 3 - 9 * a * b ^ 2
hq' : q = 3 * a ^ 2 * b - 3 * b ^ 3
haparity : ¬Even a
hbparity : ¬Even b
⊢ False
Theorem: obscure'
Proof state before:
case neg.h
p q : ℤ
hp : p ≠ 0
hcoprime : IsCoprime p q
hparity : Even p ↔ ¬Even q
u : ℤ
hu : p ^ 2 + 3 * q ^ 2 = u ^ 3
a b : ℤ
hp' : p = a ^ 3 - 9 * a * b ^ 2
hq' : q = 3 * a ^ 2 * b - 3 * b ^ 3
haparity : ¬Even a
hbparity : ¬Even b
⊢ False
Tactic:
have : Even p := by
  rw [hp']
  simp [haparity, hbparity, three_ne_zero, parity_simps]
Proof state after:
case neg.h
p q : ℤ
hp : p ≠ 0
hcoprime : IsCoprime p q
hparity : Even p ↔ ¬Even q
u : ℤ
hu : p ^ 2 + 3 * q ^ 2 = u ^ 3
a b : ℤ
hp' : p = a ^ 3 - 9 * a * b ^ 2
hq' : q = 3 * a ^ 2 * b - 3 * b ^ 3
haparity : ¬Even a
hbparity : ¬Even b
this : Even p
⊢ False
Theorem: obscure'
Proof state before:
case neg.h
p q : ℤ
hp : p ≠ 0
hcoprime : IsCoprime p q
hparity : Even p ↔ ¬Even q
u : ℤ
hu : p ^ 2 + 3 * q ^ 2 = u ^ 3
a b : ℤ
hp' : p = a ^ 3 - 9 * a * b ^ 2
hq' : q = 3 * a ^ 2 * b - 3 * b ^ 3
haparity : ¬Even a
hbparity : ¬Even b
this : Even p
⊢ False
Tactic:
have : Even q := by
  rw [hq']
  simp [haparity, hbparity, three_ne_zero, parity_simps]
Proof state after:
case neg.h
p q : ℤ
hp : p ≠ 0
hcoprime : IsCoprime p q
hparity : Even p ↔ ¬Even q
u : ℤ
hu : p ^ 2 + 3 * q ^ 2 = u ^ 3
a b : ℤ
hp' : p = a ^ 3 - 9 * a * b ^ 2
hq' : q = 3 * a ^ 2 * b - 3 * b ^ 3
haparity : ¬Even a
hbparity : ¬Even b
this✝ : Even p
this : Even q
⊢ False
Theorem: obscure'
Proof state before:
case neg.h
p q : ℤ
hp : p ≠ 0
hcoprime : IsCoprime p q
hparity : Even p ↔ ¬Even q
u : ℤ
hu : p ^ 2 + 3 * q ^ 2 = u ^ 3
a b : ℤ
hp' : p = a ^ 3 - 9 * a * b ^ 2
hq' : q = 3 * a ^ 2 * b - 3 * b ^ 3
haparity : ¬Even a
hbparity : ¬Even b
this✝ : Even p
this : Even q
⊢ False
Tactic:
tauto
Proof state after:
no goals
Theorem: obscure'
Proof state before:
p q : ℤ
hp : p ≠ 0
hcoprime : IsCoprime p q
hparity : Even p ↔ ¬Even q
u : ℤ
hu : p ^ 2 + 3 * q ^ 2 = u ^ 3
a b : ℤ
hp' : p = a ^ 3 - 9 * a * b ^ 2
hq' : q = 3 * a ^ 2 * b - 3 * b ^ 3
haparity : ¬Even a
hbparity : ¬Even b
⊢ Even (a ^ 3 - 9 * a * b ^ 2)
Tactic:
simp [haparity, hbparity, three_ne_zero, parity_simps]
Proof state after:
no goals
Theorem: Int.cube_of_coprime
Proof state before:
a b c s : ℤ
ha : a ≠ 0
hb : b ≠ 0
hc : c ≠ 0
hcoprimeab : IsCoprime a b
hcoprimeac : IsCoprime a c
hcoprimebc : IsCoprime b c
hs : a * b * c = s ^ 3
⊢ ∃ A B C, A ≠ 0 ∧ B ≠ 0 ∧ C ≠ 0 ∧ a = A ^ 3 ∧ b = B ^ 3 ∧ c = C ^ 3
Tactic:
have : Odd 3 := by norm_num
Proof state after:
a b c s : ℤ
ha : a ≠ 0
hb : b ≠ 0
hc : c ≠ 0
hcoprimeab : IsCoprime a b
hcoprimeac : IsCoprime a c
hcoprimebc : IsCoprime b c
hs : a * b * c = s ^ 3
this : Odd 3
⊢ ∃ A B C, A ≠ 0 ∧ B ≠ 0 ∧ C ≠ 0 ∧ a = A ^ 3 ∧ b = B ^ 3 ∧ c = C ^ 3
Theorem: Int.cube_of_coprime
Proof state before:
a b c s : ℤ
ha : a ≠ 0
hb : b ≠ 0
hc : c ≠ 0
hcoprimeab : IsCoprime a b
hcoprimeac : IsCoprime a c
hcoprimebc : IsCoprime b c
hs : a * b * c = s ^ 3
⊢ Odd 3
Tactic:
norm_num
Proof state after:
no goals
Theorem: descent_gcd1
Proof state before:
a b c p q : ℤ
hp : p ≠ 0
hcoprime : IsCoprime p q
hodd : Even p ↔ ¬Even q
hcube : 2 * p * (p ^ 2 + 3 * q ^ 2) = a ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = b ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = c ^ 3
hgcd : IsCoprime (2 * p) (p ^ 2 + 3 * q ^ 2)
⊢ ∃ a' b' c',
    a' ≠ 0 ∧ b' ≠ 0 ∧ c' ≠ 0 ∧ Int.natAbs (a' ^ 3 * b' ^ 3 * c' ^ 3) ≤ Int.natAbs (2 * p) ∧ a' ^ 3 + b' ^ 3 = c' ^ 3
Tactic:
obtain ⟨r, hr⟩ : ∃ r, 2 * p * (p ^ 2 + 3 * q ^ 2) = r ^ 3 := by
  rcases hcube with (hcube | hcube | hcube) <;> [(use a), (use b), (use c)] <;> exact hcube
Proof state after:
case intro
a b c p q : ℤ
hp : p ≠ 0
hcoprime : IsCoprime p q
hodd : Even p ↔ ¬Even q
hcube : 2 * p * (p ^ 2 + 3 * q ^ 2) = a ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = b ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = c ^ 3
hgcd : IsCoprime (2 * p) (p ^ 2 + 3 * q ^ 2)
r : ?m.106886
hr : 2 * p * (p ^ 2 + 3 * q ^ 2) = r ^ 3
⊢ ∃ a' b' c',
    a' ≠ 0 ∧ b' ≠ 0 ∧ c' ≠ 0 ∧ Int.natAbs (a' ^ 3 * b' ^ 3 * c' ^ 3) ≤ Int.natAbs (2 * p) ∧ a' ^ 3 + b' ^ 3 = c' ^ 3
Theorem: descent_gcd1
Proof state before:
case intro
a b c p q : ℤ
hp : p ≠ 0
hcoprime : IsCoprime p q
hodd : Even p ↔ ¬Even q
hcube : 2 * p * (p ^ 2 + 3 * q ^ 2) = a ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = b ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = c ^ 3
hgcd : IsCoprime (2 * p) (p ^ 2 + 3 * q ^ 2)
r : ?m.106886
hr : 2 * p * (p ^ 2 + 3 * q ^ 2) = r ^ 3
⊢ ∃ a' b' c',
    a' ≠ 0 ∧ b' ≠ 0 ∧ c' ≠ 0 ∧ Int.natAbs (a' ^ 3 * b' ^ 3 * c' ^ 3) ≤ Int.natAbs (2 * p) ∧ a' ^ 3 + b' ^ 3 = c' ^ 3
Tactic:
have : Odd 3 := by norm_num
Proof state after:
case intro
a b c p q : ℤ
hp : p ≠ 0
hcoprime : IsCoprime p q
hodd : Even p ↔ ¬Even q
hcube : 2 * p * (p ^ 2 + 3 * q ^ 2) = a ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = b ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = c ^ 3
hgcd : IsCoprime (2 * p) (p ^ 2 + 3 * q ^ 2)
r : ℤ
hr : 2 * p * (p ^ 2 + 3 * q ^ 2) = r ^ 3
this : Odd 3
⊢ ∃ a' b' c',
    a' ≠ 0 ∧ b' ≠ 0 ∧ c' ≠ 0 ∧ Int.natAbs (a' ^ 3 * b' ^ 3 * c' ^ 3) ≤ Int.natAbs (2 * p) ∧ a' ^ 3 + b' ^ 3 = c' ^ 3
Theorem: descent_gcd1
Proof state before:
case intro
a b c p q : ℤ
hp : p ≠ 0
hcoprime : IsCoprime p q
hodd : Even p ↔ ¬Even q
hcube : 2 * p * (p ^ 2 + 3 * q ^ 2) = a ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = b ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = c ^ 3
hgcd : IsCoprime (2 * p) (p ^ 2 + 3 * q ^ 2)
r : ℤ
hr : 2 * p * (p ^ 2 + 3 * q ^ 2) = r ^ 3
this : Odd 3
⊢ ∃ a' b' c',
    a' ≠ 0 ∧ b' ≠ 0 ∧ c' ≠ 0 ∧ Int.natAbs (a' ^ 3 * b' ^ 3 * c' ^ 3) ≤ Int.natAbs (2 * p) ∧ a' ^ 3 + b' ^ 3 = c' ^ 3
Tactic:
obtain ⟨hcubeleft, hcuberight⟩ := Int.eq_pow_of_mul_eq_pow_odd hgcd this hr
Proof state after:
case intro.intro
a b c p q : ℤ
hp : p ≠ 0
hcoprime : IsCoprime p q
hodd : Even p ↔ ¬Even q
hcube : 2 * p * (p ^ 2 + 3 * q ^ 2) = a ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = b ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = c ^ 3
hgcd : IsCoprime (2 * p) (p ^ 2 + 3 * q ^ 2)
r : ℤ
hr : 2 * p * (p ^ 2 + 3 * q ^ 2) = r ^ 3
this : Odd 3
hcubeleft : ∃ d, 2 * p = d ^ 3
hcuberight : ∃ e, p ^ 2 + 3 * q ^ 2 = e ^ 3
⊢ ∃ a' b' c',
    a' ≠ 0 ∧ b' ≠ 0 ∧ c' ≠ 0 ∧ Int.natAbs (a' ^ 3 * b' ^ 3 * c' ^ 3) ≤ Int.natAbs (2 * p) ∧ a' ^ 3 + b' ^ 3 = c' ^ 3
Theorem: descent_gcd1
Proof state before:
case intro.intro
a b c p q : ℤ
hp : p ≠ 0
hcoprime : IsCoprime p q
hodd : Even p ↔ ¬Even q
hcube : 2 * p * (p ^ 2 + 3 * q ^ 2) = a ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = b ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = c ^ 3
hgcd : IsCoprime (2 * p) (p ^ 2 + 3 * q ^ 2)
r : ℤ
hr : 2 * p * (p ^ 2 + 3 * q ^ 2) = r ^ 3
this : Odd 3
hcubeleft : ∃ d, 2 * p = d ^ 3
hcuberight : ∃ e, p ^ 2 + 3 * q ^ 2 = e ^ 3
⊢ ∃ a' b' c',
    a' ≠ 0 ∧ b' ≠ 0 ∧ c' ≠ 0 ∧ Int.natAbs (a' ^ 3 * b' ^ 3 * c' ^ 3) ≤ Int.natAbs (2 * p) ∧ a' ^ 3 + b' ^ 3 = c' ^ 3
Tactic:
obtain ⟨u, v, hpfactor, hq, huvcoprime, huvodd⟩ := obscure' p q hp hcoprime hodd hcuberight
Proof state after:
case intro.intro.intro.intro.intro.intro.intro
a b c p q : ℤ
hp : p ≠ 0
hcoprime : IsCoprime p q
hodd : Even p ↔ ¬Even q
hcube : 2 * p * (p ^ 2 + 3 * q ^ 2) = a ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = b ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = c ^ 3
hgcd : IsCoprime (2 * p) (p ^ 2 + 3 * q ^ 2)
r : ℤ
hr : 2 * p * (p ^ 2 + 3 * q ^ 2) = r ^ 3
this : Odd 3
hcubeleft : ∃ d, 2 * p = d ^ 3
hcuberight : ∃ e, p ^ 2 + 3 * q ^ 2 = e ^ 3
u v : ℤ
hpfactor : p = u * (u - 3 * v) * (u + 3 * v)
hq : q = 3 * v * (u - v) * (u + v)
huvcoprime : IsCoprime u v
huvodd : Even u ↔ ¬Even v
⊢ ∃ a' b' c',
    a' ≠ 0 ∧ b' ≠ 0 ∧ c' ≠ 0 ∧ Int.natAbs (a' ^ 3 * b' ^ 3 * c' ^ 3) ≤ Int.natAbs (2 * p) ∧ a' ^ 3 + b' ^ 3 = c' ^ 3
Theorem: descent_gcd1
Proof state before:
case intro.intro.intro.intro.intro.intro.intro
a b c p q : ℤ
hp : p ≠ 0
hcoprime : IsCoprime p q
hodd : Even p ↔ ¬Even q
hcube : 2 * p * (p ^ 2 + 3 * q ^ 2) = a ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = b ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = c ^ 3
hgcd : IsCoprime (2 * p) (p ^ 2 + 3 * q ^ 2)
r : ℤ
hr : 2 * p * (p ^ 2 + 3 * q ^ 2) = r ^ 3
this : Odd 3
hcubeleft : ∃ d, 2 * p = d ^ 3
hcuberight : ∃ e, p ^ 2 + 3 * q ^ 2 = e ^ 3
u v : ℤ
hpfactor : p = u * (u - 3 * v) * (u + 3 * v)
hq : q = 3 * v * (u - v) * (u + v)
huvcoprime : IsCoprime u v
huvodd : Even u ↔ ¬Even v
⊢ ∃ a' b' c',
    a' ≠ 0 ∧ b' ≠ 0 ∧ c' ≠ 0 ∧ Int.natAbs (a' ^ 3 * b' ^ 3 * c' ^ 3) ≤ Int.natAbs (2 * p) ∧ a' ^ 3 + b' ^ 3 = c' ^ 3
Tactic:
have u_ne_zero : u ≠ 0 := by
  rintro rfl
  rw [MulZeroClass.zero_mul, MulZeroClass.zero_mul] at hpfactor
  contradiction
Proof state after:
case intro.intro.intro.intro.intro.intro.intro
a b c p q : ℤ
hp : p ≠ 0
hcoprime : IsCoprime p q
hodd : Even p ↔ ¬Even q
hcube : 2 * p * (p ^ 2 + 3 * q ^ 2) = a ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = b ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = c ^ 3
hgcd : IsCoprime (2 * p) (p ^ 2 + 3 * q ^ 2)
r : ℤ
hr : 2 * p * (p ^ 2 + 3 * q ^ 2) = r ^ 3
this : Odd 3
hcubeleft : ∃ d, 2 * p = d ^ 3
hcuberight : ∃ e, p ^ 2 + 3 * q ^ 2 = e ^ 3
u v : ℤ
hpfactor : p = u * (u - 3 * v) * (u + 3 * v)
hq : q = 3 * v * (u - v) * (u + v)
huvcoprime : IsCoprime u v
huvodd : Even u ↔ ¬Even v
u_ne_zero : u ≠ 0
⊢ ∃ a' b' c',
    a' ≠ 0 ∧ b' ≠ 0 ∧ c' ≠ 0 ∧ Int.natAbs (a' ^ 3 * b' ^ 3 * c' ^ 3) ≤ Int.natAbs (2 * p) ∧ a' ^ 3 + b' ^ 3 = c' ^ 3
Theorem: descent_gcd1
Proof state before:
case intro.intro.intro.intro.intro.intro.intro
a b c p q : ℤ
hp : p ≠ 0
hcoprime : IsCoprime p q
hodd : Even p ↔ ¬Even q
hcube : 2 * p * (p ^ 2 + 3 * q ^ 2) = a ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = b ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = c ^ 3
hgcd : IsCoprime (2 * p) (p ^ 2 + 3 * q ^ 2)
r : ℤ
hr : 2 * p * (p ^ 2 + 3 * q ^ 2) = r ^ 3
this : Odd 3
hcubeleft : ∃ d, 2 * p = d ^ 3
hcuberight : ∃ e, p ^ 2 + 3 * q ^ 2 = e ^ 3
u v : ℤ
hpfactor : p = u * (u - 3 * v) * (u + 3 * v)
hq : q = 3 * v * (u - v) * (u + v)
huvcoprime : IsCoprime u v
huvodd : Even u ↔ ¬Even v
u_ne_zero : u ≠ 0
⊢ ∃ a' b' c',
    a' ≠ 0 ∧ b' ≠ 0 ∧ c' ≠ 0 ∧ Int.natAbs (a' ^ 3 * b' ^ 3 * c' ^ 3) ≤ Int.natAbs (2 * p) ∧ a' ^ 3 + b' ^ 3 = c' ^ 3
Tactic:
have haaa : 2 * p = 2 * u * (u - 3 * v) * (u + 3 * v) :=
  by
  rw [hpfactor]
  ring
Proof state after:
case intro.intro.intro.intro.intro.intro.intro
a b c p q : ℤ
hp : p ≠ 0
hcoprime : IsCoprime p q
hodd : Even p ↔ ¬Even q
hcube : 2 * p * (p ^ 2 + 3 * q ^ 2) = a ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = b ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = c ^ 3
hgcd : IsCoprime (2 * p) (p ^ 2 + 3 * q ^ 2)
r : ℤ
hr : 2 * p * (p ^ 2 + 3 * q ^ 2) = r ^ 3
this : Odd 3
hcubeleft : ∃ d, 2 * p = d ^ 3
hcuberight : ∃ e, p ^ 2 + 3 * q ^ 2 = e ^ 3
u v : ℤ
hpfactor : p = u * (u - 3 * v) * (u + 3 * v)
hq : q = 3 * v * (u - v) * (u + v)
huvcoprime : IsCoprime u v
huvodd : Even u ↔ ¬Even v
u_ne_zero : u ≠ 0
haaa : 2 * p = 2 * u * (u - 3 * v) * (u + 3 * v)
⊢ ∃ a' b' c',
    a' ≠ 0 ∧ b' ≠ 0 ∧ c' ≠ 0 ∧ Int.natAbs (a' ^ 3 * b' ^ 3 * c' ^ 3) ≤ Int.natAbs (2 * p) ∧ a' ^ 3 + b' ^ 3 = c' ^ 3
Theorem: descent_gcd1
Proof state before:
case intro.intro.intro.intro.intro.intro.intro
a b c p q : ℤ
hp : p ≠ 0
hcoprime : IsCoprime p q
hodd : Even p ↔ ¬Even q
hcube : 2 * p * (p ^ 2 + 3 * q ^ 2) = a ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = b ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = c ^ 3
hgcd : IsCoprime (2 * p) (p ^ 2 + 3 * q ^ 2)
r : ℤ
hr : 2 * p * (p ^ 2 + 3 * q ^ 2) = r ^ 3
this : Odd 3
hcubeleft : ∃ d, 2 * p = d ^ 3
hcuberight : ∃ e, p ^ 2 + 3 * q ^ 2 = e ^ 3
u v : ℤ
hpfactor : p = u * (u - 3 * v) * (u + 3 * v)
hq : q = 3 * v * (u - v) * (u + v)
huvcoprime : IsCoprime u v
huvodd : Even u ↔ ¬Even v
u_ne_zero : u ≠ 0
haaa : 2 * p = 2 * u * (u - 3 * v) * (u + 3 * v)
⊢ ∃ a' b' c',
    a' ≠ 0 ∧ b' ≠ 0 ∧ c' ≠ 0 ∧ Int.natAbs (a' ^ 3 * b' ^ 3 * c' ^ 3) ≤ Int.natAbs (2 * p) ∧ a' ^ 3 + b' ^ 3 = c' ^ 3
Tactic:
have : ¬Even (u - 3 * v) := by simp [huvodd, parity_simps]
Proof state after:
case intro.intro.intro.intro.intro.intro.intro
a b c p q : ℤ
hp : p ≠ 0
hcoprime : IsCoprime p q
hodd : Even p ↔ ¬Even q
hcube : 2 * p * (p ^ 2 + 3 * q ^ 2) = a ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = b ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = c ^ 3
hgcd : IsCoprime (2 * p) (p ^ 2 + 3 * q ^ 2)
r : ℤ
hr : 2 * p * (p ^ 2 + 3 * q ^ 2) = r ^ 3
this✝ : Odd 3
hcubeleft : ∃ d, 2 * p = d ^ 3
hcuberight : ∃ e, p ^ 2 + 3 * q ^ 2 = e ^ 3
u v : ℤ
hpfactor : p = u * (u - 3 * v) * (u + 3 * v)
hq : q = 3 * v * (u - v) * (u + v)
huvcoprime : IsCoprime u v
huvodd : Even u ↔ ¬Even v
u_ne_zero : u ≠ 0
haaa : 2 * p = 2 * u * (u - 3 * v) * (u + 3 * v)
this : ¬Even (u - 3 * v)
⊢ ∃ a' b' c',
    a' ≠ 0 ∧ b' ≠ 0 ∧ c' ≠ 0 ∧ Int.natAbs (a' ^ 3 * b' ^ 3 * c' ^ 3) ≤ Int.natAbs (2 * p) ∧ a' ^ 3 + b' ^ 3 = c' ^ 3
Theorem: descent_gcd1
Proof state before:
case intro.intro.intro.intro.intro.intro.intro
a b c p q : ℤ
hp : p ≠ 0
hcoprime : IsCoprime p q
hodd : Even p ↔ ¬Even q
hcube : 2 * p * (p ^ 2 + 3 * q ^ 2) = a ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = b ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = c ^ 3
hgcd : IsCoprime (2 * p) (p ^ 2 + 3 * q ^ 2)
r : ℤ
hr : 2 * p * (p ^ 2 + 3 * q ^ 2) = r ^ 3
this✝ : Odd 3
hcubeleft : ∃ d, 2 * p = d ^ 3
hcuberight : ∃ e, p ^ 2 + 3 * q ^ 2 = e ^ 3
u v : ℤ
hpfactor : p = u * (u - 3 * v) * (u + 3 * v)
hq : q = 3 * v * (u - v) * (u + v)
huvcoprime : IsCoprime u v
huvodd : Even u ↔ ¬Even v
u_ne_zero : u ≠ 0
haaa : 2 * p = 2 * u * (u - 3 * v) * (u + 3 * v)
this : ¬Even (u - 3 * v)
⊢ ∃ a' b' c',
    a' ≠ 0 ∧ b' ≠ 0 ∧ c' ≠ 0 ∧ Int.natAbs (a' ^ 3 * b' ^ 3 * c' ^ 3) ≤ Int.natAbs (2 * p) ∧ a' ^ 3 + b' ^ 3 = c' ^ 3
Tactic:
have : ¬Even (u + 3 * v) := by simp [huvodd, parity_simps]
Proof state after:
case intro.intro.intro.intro.intro.intro.intro
a b c p q : ℤ
hp : p ≠ 0
hcoprime : IsCoprime p q
hodd : Even p ↔ ¬Even q
hcube : 2 * p * (p ^ 2 + 3 * q ^ 2) = a ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = b ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = c ^ 3
hgcd : IsCoprime (2 * p) (p ^ 2 + 3 * q ^ 2)
r : ℤ
hr : 2 * p * (p ^ 2 + 3 * q ^ 2) = r ^ 3
this✝¹ : Odd 3
hcubeleft : ∃ d, 2 * p = d ^ 3
hcuberight : ∃ e, p ^ 2 + 3 * q ^ 2 = e ^ 3
u v : ℤ
hpfactor : p = u * (u - 3 * v) * (u + 3 * v)
hq : q = 3 * v * (u - v) * (u + v)
huvcoprime : IsCoprime u v
huvodd : Even u ↔ ¬Even v
u_ne_zero : u ≠ 0
haaa : 2 * p = 2 * u * (u - 3 * v) * (u + 3 * v)
this✝ : ¬Even (u - 3 * v)
this : ¬Even (u + 3 * v)
⊢ ∃ a' b' c',
    a' ≠ 0 ∧ b' ≠ 0 ∧ c' ≠ 0 ∧ Int.natAbs (a' ^ 3 * b' ^ 3 * c' ^ 3) ≤ Int.natAbs (2 * p) ∧ a' ^ 3 + b' ^ 3 = c' ^ 3
Theorem: descent_gcd1
Proof state before:
case intro.intro.intro.intro.intro.intro.intro
a b c p q : ℤ
hp : p ≠ 0
hcoprime : IsCoprime p q
hodd : Even p ↔ ¬Even q
hcube : 2 * p * (p ^ 2 + 3 * q ^ 2) = a ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = b ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = c ^ 3
hgcd : IsCoprime (2 * p) (p ^ 2 + 3 * q ^ 2)
r : ℤ
hr : 2 * p * (p ^ 2 + 3 * q ^ 2) = r ^ 3
this✝¹ : Odd 3
hcubeleft : ∃ d, 2 * p = d ^ 3
hcuberight : ∃ e, p ^ 2 + 3 * q ^ 2 = e ^ 3
u v : ℤ
hpfactor : p = u * (u - 3 * v) * (u + 3 * v)
hq : q = 3 * v * (u - v) * (u + v)
huvcoprime : IsCoprime u v
huvodd : Even u ↔ ¬Even v
u_ne_zero : u ≠ 0
haaa : 2 * p = 2 * u * (u - 3 * v) * (u + 3 * v)
this✝ : ¬Even (u - 3 * v)
this : ¬Even (u + 3 * v)
⊢ ∃ a' b' c',
    a' ≠ 0 ∧ b' ≠ 0 ∧ c' ≠ 0 ∧ Int.natAbs (a' ^ 3 * b' ^ 3 * c' ^ 3) ≤ Int.natAbs (2 * p) ∧ a' ^ 3 + b' ^ 3 = c' ^ 3
Tactic:
have notdvd_2_2 : ¬2 ∣ u - 3 * v := by
  rw [← even_iff_two_dvd]
  exact ‹¬Even (u - 3 * v)›
Proof state after:
case intro.intro.intro.intro.intro.intro.intro
a b c p q : ℤ
hp : p ≠ 0
hcoprime : IsCoprime p q
hodd : Even p ↔ ¬Even q
hcube : 2 * p * (p ^ 2 + 3 * q ^ 2) = a ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = b ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = c ^ 3
hgcd : IsCoprime (2 * p) (p ^ 2 + 3 * q ^ 2)
r : ℤ
hr : 2 * p * (p ^ 2 + 3 * q ^ 2) = r ^ 3
this✝¹ : Odd 3
hcubeleft : ∃ d, 2 * p = d ^ 3
hcuberight : ∃ e, p ^ 2 + 3 * q ^ 2 = e ^ 3
u v : ℤ
hpfactor : p = u * (u - 3 * v) * (u + 3 * v)
hq : q = 3 * v * (u - v) * (u + v)
huvcoprime : IsCoprime u v
huvodd : Even u ↔ ¬Even v
u_ne_zero : u ≠ 0
haaa : 2 * p = 2 * u * (u - 3 * v) * (u + 3 * v)
this✝ : ¬Even (u - 3 * v)
this : ¬Even (u + 3 * v)
notdvd_2_2 : ¬2 ∣ u - 3 * v
⊢ ∃ a' b' c',
    a' ≠ 0 ∧ b' ≠ 0 ∧ c' ≠ 0 ∧ Int.natAbs (a' ^ 3 * b' ^ 3 * c' ^ 3) ≤ Int.natAbs (2 * p) ∧ a' ^ 3 + b' ^ 3 = c' ^ 3
Theorem: descent_gcd1
Proof state before:
case intro.intro.intro.intro.intro.intro.intro
a b c p q : ℤ
hp : p ≠ 0
hcoprime : IsCoprime p q
hodd : Even p ↔ ¬Even q
hcube : 2 * p * (p ^ 2 + 3 * q ^ 2) = a ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = b ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = c ^ 3
hgcd : IsCoprime (2 * p) (p ^ 2 + 3 * q ^ 2)
r : ℤ
hr : 2 * p * (p ^ 2 + 3 * q ^ 2) = r ^ 3
this✝¹ : Odd 3
hcubeleft : ∃ d, 2 * p = d ^ 3
hcuberight : ∃ e, p ^ 2 + 3 * q ^ 2 = e ^ 3
u v : ℤ
hpfactor : p = u * (u - 3 * v) * (u + 3 * v)
hq : q = 3 * v * (u - v) * (u + v)
huvcoprime : IsCoprime u v
huvodd : Even u ↔ ¬Even v
u_ne_zero : u ≠ 0
haaa : 2 * p = 2 * u * (u - 3 * v) * (u + 3 * v)
this✝ : ¬Even (u - 3 * v)
this : ¬Even (u + 3 * v)
notdvd_2_2 : ¬2 ∣ u - 3 * v
hddd : ¬3 ∣ p
⊢ ∃ a' b' c',
    a' ≠ 0 ∧ b' ≠ 0 ∧ c' ≠ 0 ∧ Int.natAbs (a' ^ 3 * b' ^ 3 * c' ^ 3) ≤ Int.natAbs (2 * p) ∧ a' ^ 3 + b' ^ 3 = c' ^ 3
Tactic:
have not_3_dvd_2 : ¬3 ∣ u - 3 * v := by
  intro hd2
  apply hddd
  rw [hpfactor]
  exact (hd2.mul_left _).mul_right _
Proof state after:
case intro.intro.intro.intro.intro.intro.intro
a b c p q : ℤ
hp : p ≠ 0
hcoprime : IsCoprime p q
hodd : Even p ↔ ¬Even q
hcube : 2 * p * (p ^ 2 + 3 * q ^ 2) = a ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = b ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = c ^ 3
hgcd : IsCoprime (2 * p) (p ^ 2 + 3 * q ^ 2)
r : ℤ
hr : 2 * p * (p ^ 2 + 3 * q ^ 2) = r ^ 3
this✝¹ : Odd 3
hcubeleft : ∃ d, 2 * p = d ^ 3
hcuberight : ∃ e, p ^ 2 + 3 * q ^ 2 = e ^ 3
u v : ℤ
hpfactor : p = u * (u - 3 * v) * (u + 3 * v)
hq : q = 3 * v * (u - v) * (u + v)
huvcoprime : IsCoprime u v
huvodd : Even u ↔ ¬Even v
u_ne_zero : u ≠ 0
haaa : 2 * p = 2 * u * (u - 3 * v) * (u + 3 * v)
this✝ : ¬Even (u - 3 * v)
this : ¬Even (u + 3 * v)
notdvd_2_2 : ¬2 ∣ u - 3 * v
hddd : ¬3 ∣ p
not_3_dvd_2 : ¬3 ∣ u - 3 * v
⊢ ∃ a' b' c',
    a' ≠ 0 ∧ b' ≠ 0 ∧ c' ≠ 0 ∧ Int.natAbs (a' ^ 3 * b' ^ 3 * c' ^ 3) ≤ Int.natAbs (2 * p) ∧ a' ^ 3 + b' ^ 3 = c' ^ 3
Theorem: descent_gcd1
Proof state before:
case intro.intro.intro.intro.intro.intro.intro
a b c p q : ℤ
hp : p ≠ 0
hcoprime : IsCoprime p q
hodd : Even p ↔ ¬Even q
hcube : 2 * p * (p ^ 2 + 3 * q ^ 2) = a ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = b ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = c ^ 3
hgcd : IsCoprime (2 * p) (p ^ 2 + 3 * q ^ 2)
r : ℤ
hr : 2 * p * (p ^ 2 + 3 * q ^ 2) = r ^ 3
this✝¹ : Odd 3
hcubeleft : ∃ d, 2 * p = d ^ 3
hcuberight : ∃ e, p ^ 2 + 3 * q ^ 2 = e ^ 3
u v : ℤ
hpfactor : p = u * (u - 3 * v) * (u + 3 * v)
hq : q = 3 * v * (u - v) * (u + v)
huvcoprime : IsCoprime u v
huvodd : Even u ↔ ¬Even v
u_ne_zero : u ≠ 0
haaa : 2 * p = 2 * u * (u - 3 * v) * (u + 3 * v)
this✝ : ¬Even (u - 3 * v)
this : ¬Even (u + 3 * v)
notdvd_2_2 : ¬2 ∣ u - 3 * v
hddd : ¬3 ∣ p
not_3_dvd_2 : ¬3 ∣ u - 3 * v
⊢ ∃ a' b' c',
    a' ≠ 0 ∧ b' ≠ 0 ∧ c' ≠ 0 ∧ Int.natAbs (a' ^ 3 * b' ^ 3 * c' ^ 3) ≤ Int.natAbs (2 * p) ∧ a' ^ 3 + b' ^ 3 = c' ^ 3
Tactic:
have notdvd_3_3 : ¬3 ∣ u + 3 * v := by
  intro hd3
  apply hddd
  rw [hpfactor]
  exact hd3.mul_left _
Proof state after:
case intro.intro.intro.intro.intro.intro.intro
a b c p q : ℤ
hp : p ≠ 0
hcoprime : IsCoprime p q
hodd : Even p ↔ ¬Even q
hcube : 2 * p * (p ^ 2 + 3 * q ^ 2) = a ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = b ^ 3 ∨ 2 * p * (p ^ 2 + 3 * q ^ 2) = c ^ 3
hgcd : IsCoprime (2 * p) (p ^ 2 + 3 * q ^ 2)
r : ℤ
hr : 2 * p * (p ^ 2 + 3 * q ^ 2) = r ^ 3
this✝¹ : Odd 3
hcubeleft : ∃ d, 2 * p = d ^ 3
hcuberight : ∃ e, p ^ 2 + 3 * q ^ 2 = e ^ 3
u v : ℤ
hpfactor : p = u * (u - 3 * v) * (u + 3 * v)
hq : q = 3 * v * (u - v) * (u + v)
huvcoprime : IsCoprime u v
huvodd : Even u ↔ ¬Even v
u_ne_zero : u ≠ 0
haaa : 2 * p = 2 * u * (u - 3 * v) * (u + 3 * v)
this✝ : ¬Even (u - 3 * v)
this : ¬Even (u + 3 * v)
notdvd_2_2 : ¬2 ∣ u - 3 * v
hddd : ¬3 ∣ p
not_3_dvd_2 : ¬3 ∣ u - 3 * v
notdvd_3_3 : ¬3 ∣ u + 3 * v
⊢ ∃ a' b' c',
    a' ≠ 0 ∧ b' ≠ 0 ∧ c' ≠ 0 ∧ Int.natAbs (a' ^ 3 * b' ^ 3 * c' ^ 3) ≤ Int.natAbs (2 * p) ∧ a' ^ 3 + b' ^ 3 = c' ^ 3