Theorem: Fermat42.coprime_of_minimal
File: Mathlib/NumberTheory/FLT/Four.lean

Proof steps:
state_before: a b c : ℤ
h : Minimal a b c
⊢ IsCoprime a b
state_after: a b c : ℤ
h : Minimal a b c
⊢ a.gcd b = 1
tactic: apply Int.gcd_eq_one_iff_coprime.mp
state_before: a b c : ℤ
h : Minimal a b c
⊢ a.gcd b = 1
state_after: a b c : ℤ
h : Minimal a b c
hab : ¬a.gcd b = 1
⊢ False
tactic: by_contra hab
state_before: a b c : ℤ
h : Minimal a b c
hab : ¬a.gcd b = 1
⊢ False
state_after: case intro.intro.intro
a b c : ℤ
h : Minimal a b c
hab : ¬a.gcd b = 1
p : ℕ
hp : Nat.Prime p
hpa : p ∣ a.natAbs
hpb : p ∣ b.natAbs
⊢ False
tactic: obtain ⟨p, hp, hpa, hpb⟩ := Nat.Prime.not_coprime_iff_dvd.mp hab
state_before: case intro.intro.intro
a b c : ℤ
h : Minimal a b c
hab : ¬a.gcd b = 1
p : ℕ
hp : Nat.Prime p
hpa : p ∣ a.natAbs
hpb : p ∣ b.natAbs
⊢ False
state_after: case intro.intro.intro.intro
b c : ℤ
p : ℕ
hp : Nat.Prime p
hpb : p ∣ b.natAbs
a1 : ℤ
h : Minimal (↑p * a1) b c
hab : ¬(↑p * a1).gcd b = 1
hpa : p ∣ (↑p * a1).natAbs
⊢ False
tactic: obtain ⟨a1, rfl⟩ := Int.natCast_dvd.mpr hpa
state_before: case intro.intro.intro.intro
b c : ℤ
p : ℕ
hp : Nat.Prime p
hpb : p ∣ b.natAbs
a1 : ℤ
h : Minimal (↑p * a1) b c
hab : ¬(↑p * a1).gcd b = 1
hpa : p ∣ (↑p * a1).natAbs
⊢ False
state_after: case intro.intro.intro.intro.intro
c : ℤ
p : ℕ
hp : Nat.Prime p
a1 : ℤ
hpa : p ∣ (↑p * a1).natAbs
b1 : ℤ
hpb : p ∣ (↑p * b1).natAbs
h : Minimal (↑p * a1) (↑p * b1) c
hab : ¬(↑p * a1).gcd (↑p * b1) = 1
⊢ False
tactic: obtain ⟨b1, rfl⟩ := Int.natCast_dvd.mpr hpb
state_before: case intro.intro.intro.intro.intro
c : ℤ
p : ℕ
hp : Nat.Prime p
a1 : ℤ
hpa : p ∣ (↑p * a1).natAbs
b1 : ℤ
hpb : p ∣ (↑p * b1).natAbs
h : Minimal (↑p * a1) (↑p * b1) c
hab : ¬(↑p * a1).gcd (↑p * b1) = 1
⊢ False
state_after: case intro.intro.intro.intro.intro
c : ℤ
p : ℕ
hp : Nat.Prime p
a1 : ℤ
hpa : p ∣ (↑p * a1).natAbs
b1 : ℤ
hpb : p ∣ (↑p * b1).natAbs
h : Minimal (↑p * a1) (↑p * b1) c
hab : ¬(↑p * a1).gcd (↑p * b1) = 1
hpc : ↑p ^ 2 ∣ c
⊢ False
tactic: have hpc : (p : ℤ) ^ 2 ∣ c := by
    rw [← Int.pow_dvd_pow_iff two_ne_zero, ← h.1.2.2]
    apply Dvd.intro (a1 ^ 4 + b1 ^ 4)
    ring
state_before: case intro.intro.intro.intro.intro
c : ℤ
p : ℕ
hp : Nat.Prime p
a1 : ℤ
hpa : p ∣ (↑p * a1).natAbs
b1 : ℤ
hpb : p ∣ (↑p * b1).natAbs
h : Minimal (↑p * a1) (↑p * b1) c
hab : ¬(↑p * a1).gcd (↑p * b1) = 1
hpc : ↑p ^ 2 ∣ c
⊢ False
state_after: case intro.intro.intro.intro.intro.intro
p : ℕ
hp : Nat.Prime p
a1 : ℤ
hpa : p ∣ (↑p * a1).natAbs
b1 : ℤ
hpb : p ∣ (↑p * b1).natAbs
hab : ¬(↑p * a1).gcd (↑p * b1) = 1
c1 : ℤ
h : Minimal (↑p * a1) (↑p * b1) (↑p ^ 2 * c1)
⊢ False
tactic: obtain ⟨c1, rfl⟩ := hpc
state_before: case intro.intro.intro.intro.intro.intro
p : ℕ
hp : Nat.Prime p
a1 : ℤ
hpa : p ∣ (↑p * a1).natAbs
b1 : ℤ
hpb : p ∣ (↑p * b1).natAbs
hab : ¬(↑p * a1).gcd (↑p * b1) = 1
c1 : ℤ
h : Minimal (↑p * a1) (↑p * b1) (↑p ^ 2 * c1)
⊢ False
state_after: case intro.intro.intro.intro.intro.intro
p : ℕ
hp : Nat.Prime p
a1 : ℤ
hpa : p ∣ (↑p * a1).natAbs
b1 : ℤ
hpb : p ∣ (↑p * b1).natAbs
hab : ¬(↑p * a1).gcd (↑p * b1) = 1
c1 : ℤ
h : Minimal (↑p * a1) (↑p * b1) (↑p ^ 2 * c1)
hf : Fermat42 a1 b1 c1
⊢ False
tactic: have hf : Fermat42 a1 b1 c1 :=
    (Fermat42.mul (Int.natCast_ne_zero.mpr (Nat.Prime.ne_zero hp))).mpr h.1
state_before: case intro.intro.intro.intro.intro.intro
p : ℕ
hp : Nat.Prime p
a1 : ℤ
hpa : p ∣ (↑p * a1).natAbs
b1 : ℤ
hpb : p ∣ (↑p * b1).natAbs
hab : ¬(↑p * a1).gcd (↑p * b1) = 1
c1 : ℤ
h : Minimal (↑p * a1) (↑p * b1) (↑p ^ 2 * c1)
hf : Fermat42 a1 b1 c1
⊢ False
state_after: case intro.intro.intro.intro.intro.intro
p : ℕ
hp : Nat.Prime p
a1 : ℤ
hpa : p ∣ (↑p * a1).natAbs
b1 : ℤ
hpb : p ∣ (↑p * b1).natAbs
hab : ¬(↑p * a1).gcd (↑p * b1) = 1
c1 : ℤ
h : Minimal (↑p * a1) (↑p * b1) (↑p ^ 2 * c1)
hf : Fermat42 a1 b1 c1
⊢ c1.natAbs < (↑p ^ 2 * c1).natAbs
tactic: apply Nat.le_lt_asymm (h.2 _ _ _ hf)
state_before: case intro.intro.intro.intro.intro.intro
p : ℕ
hp : Nat.Prime p
a1 : ℤ
hpa : p ∣ (↑p * a1).natAbs
b1 : ℤ
hpb : p ∣ (↑p * b1).natAbs
hab : ¬(↑p * a1).gcd (↑p * b1) = 1
c1 : ℤ
h : Minimal (↑p * a1) (↑p * b1) (↑p ^ 2 * c1)
hf : Fermat42 a1 b1 c1
⊢ c1.natAbs < (↑p ^ 2 * c1).natAbs
state_after: case intro.intro.intro.intro.intro.intro
p : ℕ
hp : Nat.Prime p
a1 : ℤ
hpa : p ∣ (↑p * a1).natAbs
b1 : ℤ
hpb : p ∣ (↑p * b1).natAbs
hab : ¬(↑p * a1).gcd (↑p * b1) = 1
c1 : ℤ
h : Minimal (↑p * a1) (↑p * b1) (↑p ^ 2 * c1)
hf : Fermat42 a1 b1 c1
⊢ 1 < p ^ 2

case intro.intro.intro.intro.intro.intro
p : ℕ
hp : Nat.Prime p
a1 : ℤ
hpa : p ∣ (↑p * a1).natAbs
b1 : ℤ
hpb : p ∣ (↑p * b1).natAbs
hab : ¬(↑p * a1).gcd (↑p * b1) = 1
c1 : ℤ
h : Minimal (↑p * a1) (↑p * b1) (↑p ^ 2 * c1)
hf : Fermat42 a1 b1 c1
⊢ 0 < c1.natAbs
tactic: rw [Int.natAbs_mul, lt_mul_iff_one_lt_left, Int.natAbs_pow, Int.natAbs_ofNat]