Theorem: flt_three (FltRegular/FltThree/FltThree.lean)

State before:
⊢ FermatLastTheoremWith ℤ 3
Tactic:
intros a b c ha hb hc
State after:
a b c : ℤ
ha : a ≠ 0
hb : b ≠ 0
hc : c ≠ 0
⊢ a ^ 3 + b ^ 3 ≠ c ^ 3

State before:
a b c : ℤ
ha : a ≠ 0
hb : b ≠ 0
hc : c ≠ 0
⊢ a ^ 3 + b ^ 3 ≠ c ^ 3
Tactic:
induction' h : (a * b * c).natAbs using Nat.strong_induction_on with k' IH generalizing a b c
State after:
case h
k' : ℕ
IH : ∀ m < k', ∀ (a b c : ℤ), a ≠ 0 → b ≠ 0 → c ≠ 0 → (a * b * c).natAbs = m → a ^ 3 + b ^ 3 ≠ c ^ 3
a b c : ℤ
ha : a ≠ 0
hb : b ≠ 0
hc : c ≠ 0
h : (a * b * c).natAbs = k'
⊢ a ^ 3 + b ^ 3 ≠ c ^ 3

State before:
case h
k' : ℕ
IH : ∀ m < k', ∀ (a b c : ℤ), a ≠ 0 → b ≠ 0 → c ≠ 0 → (a * b * c).natAbs = m → a ^ 3 + b ^ 3 ≠ c ^ 3
a b c : ℤ
ha : a ≠ 0
hb : b ≠ 0
hc : c ≠ 0
h : (a * b * c).natAbs = k'
⊢ a ^ 3 + b ^ 3 ≠ c ^ 3
Tactic:
intro H
State after:
case h
k' : ℕ
IH : ∀ m < k', ∀ (a b c : ℤ), a ≠ 0 → b ≠ 0 → c ≠ 0 → (a * b * c).natAbs = m → a ^ 3 + b ^ 3 ≠ c ^ 3
a b c : ℤ
ha : a ≠ 0
hb : b ≠ 0
hc : c ≠ 0
h : (a * b * c).natAbs = k'
H : a ^ 3 + b ^ 3 = c ^ 3
⊢ False

State before:
case h
k' : ℕ
IH : ∀ m < k', ∀ (a b c : ℤ), a ≠ 0 → b ≠ 0 → c ≠ 0 → (a * b * c).natAbs = m → a ^ 3 + b ^ 3 ≠ c ^ 3
a b c : ℤ
ha : a ≠ 0
hb : b ≠ 0
hc : c ≠ 0
h : (a * b * c).natAbs = k'
H : a ^ 3 + b ^ 3 = c ^ 3
⊢ False
Tactic:
obtain ⟨x'', y'', z'', hxle, hyle, hzle, hcoprime⟩ := exists_coprime zero_lt_three ha hb hc H
State after:
case h.intro.intro.intro.intro.intro.intro
k' : ℕ
IH : ∀ m < k', ∀ (a b c : ℤ), a ≠ 0 → b ≠ 0 → c ≠ 0 → (a * b * c).natAbs = m → a ^ 3 + b ^ 3 ≠ c ^ 3
a b c : ℤ
ha : a ≠ 0
hb : b ≠ 0
hc : c ≠ 0
h : (a * b * c).natAbs = k'
H : a ^ 3 + b ^ 3 = c ^ 3
x'' y'' z'' : ℤ
hxle : x''.natAbs ≤ a.natAbs
hyle : y''.natAbs ≤ b.natAbs
hzle : z''.natAbs ≤ c.natAbs
hcoprime : FltCoprime 3 x'' y'' z''
⊢ False

State before:
case h.intro.intro.intro.intro.intro.intro
k' : ℕ
IH : ∀ m < k', ∀ (a b c : ℤ), a ≠ 0 → b ≠ 0 → c ≠ 0 → (a * b * c).natAbs = m → a ^ 3 + b ^ 3 ≠ c ^ 3
a b c : ℤ
ha : a ≠ 0
hb : b ≠ 0
hc : c ≠ 0
h : (a * b * c).natAbs = k'
H : a ^ 3 + b ^ 3 = c ^ 3
x'' y'' z'' : ℤ
hxle : x''.natAbs ≤ a.natAbs
hyle : y''.natAbs ≤ b.natAbs
hzle : z''.natAbs ≤ c.natAbs
hcoprime : FltCoprime 3 x'' y'' z''
⊢ False
Tactic:
obtain ⟨x', y', z', hx'pos, hy'pos, hz'pos, hsmaller, hsolution⟩ := descent x'' y'' z'' hcoprime
State after:
case h.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
k' : ℕ
IH : ∀ m < k', ∀ (a b c : ℤ), a ≠ 0 → b ≠ 0 → c ≠ 0 → (a * b * c).natAbs = m → a ^ 3 + b ^ 3 ≠ c ^ 3
a b c : ℤ
ha : a ≠ 0
hb : b ≠ 0
hc : c ≠ 0
h : (a * b * c).natAbs = k'
H : a ^ 3 + b ^ 3 = c ^ 3
x'' y'' z'' : ℤ
hxle : x''.natAbs ≤ a.natAbs
hyle : y''.natAbs ≤ b.natAbs
hzle : z''.natAbs ≤ c.natAbs
hcoprime : FltCoprime 3 x'' y'' z''
x' y' z' : ℤ
hx'pos : x' ≠ 0
hy'pos : y' ≠ 0
hz'pos : z' ≠ 0
hsmaller : (x' * y' * z').natAbs < (x'' * y'' * z'').natAbs
hsolution : x' ^ 3 + y' ^ 3 = z' ^ 3
⊢ False

State before:
case h.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
k' : ℕ
IH : ∀ m < k', ∀ (a b c : ℤ), a ≠ 0 → b ≠ 0 → c ≠ 0 → (a * b * c).natAbs = m → a ^ 3 + b ^ 3 ≠ c ^ 3
a b c : ℤ
ha : a ≠ 0
hb : b ≠ 0
hc : c ≠ 0
h : (a * b * c).natAbs = k'
H : a ^ 3 + b ^ 3 = c ^ 3
x'' y'' z'' : ℤ
hxle : x''.natAbs ≤ a.natAbs
hyle : y''.natAbs ≤ b.natAbs
hzle : z''.natAbs ≤ c.natAbs
hcoprime : FltCoprime 3 x'' y'' z''
x' y' z' : ℤ
hx'pos : x' ≠ 0
hy'pos : y' ≠ 0
hz'pos : z' ≠ 0
hsmaller : (x' * y' * z').natAbs < (x'' * y'' * z'').natAbs
hsolution : x' ^ 3 + y' ^ 3 = z' ^ 3
⊢ False
Tactic:
refine' IH (x' * y' * z').natAbs _ _ _ _ hx'pos hy'pos hz'pos rfl hsolution
State after:
case h.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
k' : ℕ
IH : ∀ m < k', ∀ (a b c : ℤ), a ≠ 0 → b ≠ 0 → c ≠ 0 → (a * b * c).natAbs = m → a ^ 3 + b ^ 3 ≠ c ^ 3
a b c : ℤ
ha : a ≠ 0
hb : b ≠ 0
hc : c ≠ 0
h : (a * b * c).natAbs = k'
H : a ^ 3 + b ^ 3 = c ^ 3
x'' y'' z'' : ℤ
hxle : x''.natAbs ≤ a.natAbs
hyle : y''.natAbs ≤ b.natAbs
hzle : z''.natAbs ≤ c.natAbs
hcoprime : FltCoprime 3 x'' y'' z''
x' y' z' : ℤ
hx'pos : x' ≠ 0
hy'pos : y' ≠ 0
hz'pos : z' ≠ 0
hsmaller : (x' * y' * z').natAbs < (x'' * y'' * z'').natAbs
hsolution : x' ^ 3 + y' ^ 3 = z' ^ 3
⊢ (x' * y' * z').natAbs < k'

State before:
case h.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
k' : ℕ
IH : ∀ m < k', ∀ (a b c : ℤ), a ≠ 0 → b ≠ 0 → c ≠ 0 → (a * b * c).natAbs = m → a ^ 3 + b ^ 3 ≠ c ^ 3
a b c : ℤ
ha : a ≠ 0
hb : b ≠ 0
hc : c ≠ 0
h : (a * b * c).natAbs = k'
H : a ^ 3 + b ^ 3 = c ^ 3
x'' y'' z'' : ℤ
hxle : x''.natAbs ≤ a.natAbs
hyle : y''.natAbs ≤ b.natAbs
hzle : z''.natAbs ≤ c.natAbs
hcoprime : FltCoprime 3 x'' y'' z''
x' y' z' : ℤ
hx'pos : x' ≠ 0
hy'pos : y' ≠ 0
hz'pos : z' ≠ 0
hsmaller : (x' * y' * z').natAbs < (x'' * y'' * z'').natAbs
hsolution : x' ^ 3 + y' ^ 3 = z' ^ 3
⊢ (x' * y' * z').natAbs < k'
Tactic:
apply lt_of_lt_of_le hsmaller
State after:
case h.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
k' : ℕ
IH : ∀ m < k', ∀ (a b c : ℤ), a ≠ 0 → b ≠ 0 → c ≠ 0 → (a * b * c).natAbs = m → a ^ 3 + b ^ 3 ≠ c ^ 3
a b c : ℤ
ha : a ≠ 0
hb : b ≠ 0
hc : c ≠ 0
h : (a * b * c).natAbs = k'
H : a ^ 3 + b ^ 3 = c ^ 3
x'' y'' z'' : ℤ
hxle : x''.natAbs ≤ a.natAbs
hyle : y''.natAbs ≤ b.natAbs
hzle : z''.natAbs ≤ c.natAbs
hcoprime : FltCoprime 3 x'' y'' z''
x' y' z' : ℤ
hx'pos : x' ≠ 0
hy'pos : y' ≠ 0
hz'pos : z' ≠ 0
hsmaller : (x' * y' * z').natAbs < (x'' * y'' * z'').natAbs
hsolution : x' ^ 3 + y' ^ 3 = z' ^ 3
⊢ (x'' * y'' * z'').natAbs ≤ k'

State before:
case h.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
k' : ℕ
IH : ∀ m < k', ∀ (a b c : ℤ), a ≠ 0 → b ≠ 0 → c ≠ 0 → (a * b * c).natAbs = m → a ^ 3 + b ^ 3 ≠ c ^ 3
a b c : ℤ
ha : a ≠ 0
hb : b ≠ 0
hc : c ≠ 0
h : (a * b * c).natAbs = k'
H : a ^ 3 + b ^ 3 = c ^ 3
x'' y'' z'' : ℤ
hxle : x''.natAbs ≤ a.natAbs
hyle : y''.natAbs ≤ b.natAbs
hzle : z''.natAbs ≤ c.natAbs
hcoprime : FltCoprime 3 x'' y'' z''
x' y' z' : ℤ
hx'pos : x' ≠ 0
hy'pos : y' ≠ 0
hz'pos : z' ≠ 0
hsmaller : (x' * y' * z').natAbs < (x'' * y'' * z'').natAbs
hsolution : x' ^ 3 + y' ^ 3 = z' ^ 3
⊢ (x'' * y'' * z'').natAbs ≤ k'
Tactic:
rw [← h]
State after:
case h.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
k' : ℕ
IH : ∀ m < k', ∀ (a b c : ℤ), a ≠ 0 → b ≠ 0 → c ≠ 0 → (a * b * c).natAbs = m → a ^ 3 + b ^ 3 ≠ c ^ 3
a b c : ℤ
ha : a ≠ 0
hb : b ≠ 0
hc : c ≠ 0
h : (a * b * c).natAbs = k'
H : a ^ 3 + b ^ 3 = c ^ 3
x'' y'' z'' : ℤ
hxle : x''.natAbs ≤ a.natAbs
hyle : y''.natAbs ≤ b.natAbs
hzle : z''.natAbs ≤ c.natAbs
hcoprime : FltCoprime 3 x'' y'' z''
x' y' z' : ℤ
hx'pos : x' ≠ 0
hy'pos : y' ≠ 0
hz'pos : z' ≠ 0
hsmaller : (x' * y' * z').natAbs < (x'' * y'' * z'').natAbs
hsolution : x' ^ 3 + y' ^ 3 = z' ^ 3
⊢ (x'' * y'' * z'').natAbs ≤ (a * b * c).natAbs

State before:
case h.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
k' : ℕ
IH : ∀ m < k', ∀ (a b c : ℤ), a ≠ 0 → b ≠ 0 → c ≠ 0 → (a * b * c).natAbs = m → a ^ 3 + b ^ 3 ≠ c ^ 3
a b c : ℤ
ha : a ≠ 0
hb : b ≠ 0
hc : c ≠ 0
h : (a * b * c).natAbs = k'
H : a ^ 3 + b ^ 3 = c ^ 3
x'' y'' z'' : ℤ
hxle : x''.natAbs ≤ a.natAbs
hyle : y''.natAbs ≤ b.natAbs
hzle : z''.natAbs ≤ c.natAbs
hcoprime : FltCoprime 3 x'' y'' z''
x' y' z' : ℤ
hx'pos : x' ≠ 0
hy'pos : y' ≠ 0
hz'pos : z' ≠ 0
hsmaller : (x' * y' * z').natAbs < (x'' * y'' * z'').natAbs
hsolution : x' ^ 3 + y' ^ 3 = z' ^ 3
⊢ (x'' * y'' * z'').natAbs ≤ (a * b * c).natAbs
Tactic:
simp only [Int.natAbs_mul]
State after:
case h.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
k' : ℕ
IH : ∀ m < k', ∀ (a b c : ℤ), a ≠ 0 → b ≠ 0 → c ≠ 0 → (a * b * c).natAbs = m → a ^ 3 + b ^ 3 ≠ c ^ 3
a b c : ℤ
ha : a ≠ 0
hb : b ≠ 0
hc : c ≠ 0
h : (a * b * c).natAbs = k'
H : a ^ 3 + b ^ 3 = c ^ 3
x'' y'' z'' : ℤ
hxle : x''.natAbs ≤ a.natAbs
hyle : y''.natAbs ≤ b.natAbs
hzle : z''.natAbs ≤ c.natAbs
hcoprime : FltCoprime 3 x'' y'' z''
x' y' z' : ℤ
hx'pos : x' ≠ 0
hy'pos : y' ≠ 0
hz'pos : z' ≠ 0
hsmaller : (x' * y' * z').natAbs < (x'' * y'' * z'').natAbs
hsolution : x' ^ 3 + y' ^ 3 = z' ^ 3
⊢ x''.natAbs * y''.natAbs * z''.natAbs ≤ a.natAbs * b.natAbs * c.natAbs

State before:
case h.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
k' : ℕ
IH : ∀ m < k', ∀ (a b c : ℤ), a ≠ 0 → b ≠ 0 → c ≠ 0 → (a * b * c).natAbs = m → a ^ 3 + b ^ 3 ≠ c ^ 3
a b c : ℤ
ha : a ≠ 0
hb : b ≠ 0
hc : c ≠ 0
h : (a * b * c).natAbs = k'
H : a ^ 3 + b ^ 3 = c ^ 3
x'' y'' z'' : ℤ
hxle : x''.natAbs ≤ a.natAbs
hyle : y''.natAbs ≤ b.natAbs
hzle : z''.natAbs ≤ c.natAbs
hcoprime : FltCoprime 3 x'' y'' z''
x' y' z' : ℤ
hx'pos : x' ≠ 0
hy'pos : y' ≠ 0
hz'pos : z' ≠ 0
hsmaller : (x' * y' * z').natAbs < (x'' * y'' * z'').natAbs
hsolution : x' ^ 3 + y' ^ 3 = z' ^ 3
⊢ x''.natAbs * y''.natAbs * z''.natAbs ≤ a.natAbs * b.natAbs * c.natAbs
Tactic:
exact Nat.mul_le_mul (Nat.mul_le_mul hxle hyle) hzle
State after:
no goals