Theorem: FermatLastTheoremForThreeGen.lambda_sq_dvd_c
File: Mathlib/NumberTheory/FLT/Three.lean

tactic: have hm := S'.multiplicity_lambda_c_finite
state_before: K : Type u_1
inst✝³ : Field K
inst✝² : NumberField K
inst✝¹ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
S : Solution hζ
S' : Solution' hζ
inst✝ : DecidableRel fun a b => a ∣ b
⊢ λ ^ 2 ∣ S'.c
state_after: K : Type u_1
inst✝³ : Field K
inst✝² : NumberField K
inst✝¹ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
S : Solution hζ
S' : Solution' hζ
inst✝ : DecidableRel fun a b => a ∣ b
hm : multiplicity.Finite λ S'.c
⊢ λ ^ 2 ∣ S'.c

tactic: suffices 2 ≤ (multiplicity ((hζ.toInteger - 1)) S'.c).get hm by
  obtain ⟨x, hx⟩ := multiplicity.pow_multiplicity_dvd hm
  refine ⟨λ ^ ((multiplicity ((hζ.toInteger - 1)) S'.c).get hm - 2) * x, ?_⟩
  rw [← mul_assoc, ← pow_add]
  convert hx using 3
  simp [this]
state_before: K : Type u_1
inst✝³ : Field K
inst✝² : NumberField K
inst✝¹ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
S : Solution hζ
S' : Solution' hζ
inst✝ : DecidableRel fun a b => a ∣ b
hm : multiplicity.Finite λ S'.c
⊢ λ ^ 2 ∣ S'.c
state_after: K : Type u_1
inst✝³ : Field K
inst✝² : NumberField K
inst✝¹ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
S : Solution hζ
S' : Solution' hζ
inst✝ : DecidableRel fun a b => a ∣ b
hm : multiplicity.Finite λ S'.c
⊢ 2 ≤ (multiplicity λ S'.c).get hm

tactic: have := lambda_pow_four_dvd_c_cube S'
state_before: K : Type u_1
inst✝³ : Field K
inst✝² : NumberField K
inst✝¹ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
S : Solution hζ
S' : Solution' hζ
inst✝ : DecidableRel fun a b => a ∣ b
hm : multiplicity.Finite λ S'.c
⊢ 2 ≤ (multiplicity λ S'.c).get hm
state_after: K : Type u_1
inst✝³ : Field K
inst✝² : NumberField K
inst✝¹ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
S : Solution hζ
S' : Solution' hζ
inst✝ : DecidableRel fun a b => a ∣ b
hm : multiplicity.Finite λ S'.c
this : λ ^ 4 ∣ S'.c ^ 3
⊢ 2 ≤ (multiplicity λ S'.c).get hm

tactic: have hm1 : (multiplicity (hζ.toInteger - 1) (S'.c ^ 3)).get
  (multiplicity.finite_pow hζ.zeta_sub_one_prime' hm) =
  multiplicity (hζ.toInteger - 1) (S'.c ^ 3) := by simp
state_before: K : Type u_1
inst✝³ : Field K
inst✝² : NumberField K
inst✝¹ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
S : Solution hζ
S' : Solution' hζ
inst✝ : DecidableRel fun a b => a ∣ b
hm : multiplicity.Finite λ S'.c
this : λ ^ 4 ∣ S'.c ^ 3
⊢ 2 ≤ (multiplicity λ S'.c).get hm
state_after: K : Type u_1
inst✝³ : Field K
inst✝² : NumberField K
inst✝¹ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
S : Solution hζ
S' : Solution' hζ
inst✝ : DecidableRel fun a b => a ∣ b
hm : multiplicity.Finite λ S'.c
this : λ ^ 4 ∣ S'.c ^ 3
hm1 : ↑((multiplicity λ (S'.c ^ 3)).get ⋯) = multiplicity λ (S'.c ^ 3)
⊢ 2 ≤ (multiplicity λ S'.c).get hm

tactic: rw [multiplicity.pow_dvd_iff_le_multiplicity, ← hm1, multiplicity.pow' hζ.zeta_sub_one_prime' hm,
  Nat.cast_ofNat, Nat.ofNat_le_cast] at this
state_before: K : Type u_1
inst✝³ : Field K
inst✝² : NumberField K
inst✝¹ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
S : Solution hζ
S' : Solution' hζ
inst✝ : DecidableRel fun a b => a ∣ b
hm : multiplicity.Finite λ S'.c
this : λ ^ 4 ∣ S'.c ^ 3
hm1 : ↑((multiplicity λ (S'.c ^ 3)).get ⋯) = multiplicity λ (S'.c ^ 3)
⊢ 2 ≤ (multiplicity λ S'.c).get hm
state_after: K : Type u_1
inst✝³ : Field K
inst✝² : NumberField K
inst✝¹ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
S : Solution hζ
S' : Solution' hζ
inst✝ : DecidableRel fun a b => a ∣ b
hm : multiplicity.Finite λ S'.c
this : 4 ≤ 3 * (multiplicity λ S'.c).get hm
hm1 : ↑((multiplicity λ (S'.c ^ 3)).get ⋯) = multiplicity λ (S'.c ^ 3)
⊢ 2 ≤ (multiplicity λ S'.c).get hm

tactic: omega
state_before: K : Type u_1
inst✝³ : Field K
inst✝² : NumberField K
inst✝¹ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
S : Solution hζ
S' : Solution' hζ
inst✝ : DecidableRel fun a b => a ∣ b
hm : multiplicity.Finite λ S'.c
this : 4 ≤ 3 * (multiplicity λ S'.c).get hm
hm1 : ↑((multiplicity λ (S'.c ^ 3)).get ⋯) = multiplicity λ (S'.c ^ 3)
⊢ 2 ≤ (multiplicity λ S'.c).get hm
state_after: no goals

tactic: obtain ⟨x, hx⟩ := multiplicity.pow_multiplicity_dvd hm
state_before: K : Type u_1
inst✝³ : Field K
inst✝² : NumberField K
inst✝¹ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
S : Solution hζ
S' : Solution' hζ
inst✝ : DecidableRel fun a b => a ∣ b
hm : multiplicity.Finite λ S'.c
this : 2 ≤ (multiplicity λ S'.c).get hm
⊢ λ ^ 2 ∣ S'.c
state_after: case intro
K : Type u_1
inst✝³ : Field K
inst✝² : NumberField K
inst✝¹ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
S : Solution hζ
S' : Solution' hζ
inst✝ : DecidableRel fun a b => a ∣ b
hm : multiplicity.Finite λ S'.c
this : 2 ≤ (multiplicity λ S'.c).get hm
x : 𝓞 K
hx : S'.c = λ ^ (multiplicity λ S'.c).get hm * x
⊢ λ ^ 2 ∣ S'.c

tactic: refine ⟨λ ^ ((multiplicity ((hζ.toInteger - 1)) S'.c).get hm - 2) * x, ?_⟩
state_before: case intro
K : Type u_1
inst✝³ : Field K
inst✝² : NumberField K
inst✝¹ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
S : Solution hζ
S' : Solution' hζ
inst✝ : DecidableRel fun a b => a ∣ b
hm : multiplicity.Finite λ S'.c
this : 2 ≤ (multiplicity λ S'.c).get hm
x : 𝓞 K
hx : S'.c = λ ^ (multiplicity λ S'.c).get hm * x
⊢ λ ^ 2 ∣ S'.c
state_after: case intro
K : Type u_1
inst✝³ : Field K
inst✝² : NumberField K
inst✝¹ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
S : Solution hζ
S' : Solution' hζ
inst✝ : DecidableRel fun a b => a ∣ b
hm : multiplicity.Finite λ S'.c
this : 2 ≤ (multiplicity λ S'.c).get hm
x : 𝓞 K
hx : S'.c = λ ^ (multiplicity λ S'.c).get hm * x
⊢ S'.c = λ ^ 2 * (λ ^ ((multiplicity λ S'.c).get hm - 2) * x)

tactic: rw [← mul_assoc, ← pow_add]
state_before: case intro
K : Type u_1
inst✝³ : Field K
inst✝² : NumberField K
inst✝¹ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
S : Solution hζ
S' : Solution' hζ
inst✝ : DecidableRel fun a b => a ∣ b
hm : multiplicity.Finite λ S'.c
this : 2 ≤ (multiplicity λ S'.c).get hm
x : 𝓞 K
hx : S'.c = λ ^ (multiplicity λ S'.c).get hm * x
⊢ S'.c = λ ^ 2 * (λ ^ ((multiplicity λ S'.c).get hm - 2) * x)
state_after: case intro
K : Type u_1
inst✝³ : Field K
inst✝² : NumberField K
inst✝¹ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
S : Solution hζ
S' : Solution' hζ
inst✝ : DecidableRel fun a b => a ∣ b
hm : multiplicity.Finite λ S'.c
this : 2 ≤ (multiplicity λ S'.c).get hm
x : 𝓞 K
hx : S'.c = λ ^ (multiplicity λ S'.c).get hm * x
⊢ S'.c = λ ^ (2 + ((multiplicity λ S'.c).get hm - 2)) * x

tactic: convert hx using 3
state_before: case intro
K : Type u_1
inst✝³ : Field K
inst✝² : NumberField K
inst✝¹ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
S : Solution hζ
S' : Solution' hζ
inst✝ : DecidableRel fun a b => a ∣ b
hm : multiplicity.Finite λ S'.c
this : 2 ≤ (multiplicity λ S'.c).get hm
x : 𝓞 K
hx : S'.c = λ ^ (multiplicity λ S'.c).get hm * x
⊢ S'.c = λ ^ (2 + ((multiplicity λ S'.c).get hm - 2)) * x
state_after: case h.e'_3.h.e'_5.h.e'_6
K : Type u_1
inst✝³ : Field K
inst✝² : NumberField K
inst✝¹ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
S : Solution hζ
S' : Solution' hζ
inst✝ : DecidableRel fun a b => a ∣ b
hm : multiplicity.Finite λ S'.c
this : 2 ≤ (multiplicity λ S'.c).get hm
x : 𝓞 K
hx : S'.c = λ ^ (multiplicity λ S'.c).get hm * x
⊢ 2 + ((multiplicity λ S'.c).get hm - 2) = (multiplicity λ S'.c).get hm

tactic: simp [this]
state_before: case h.e'_3.h.e'_5.h.e'_6
K : Type u_1
inst✝³ : Field K
inst✝² : NumberField K
inst✝¹ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
S : Solution hζ
S' : Solution' hζ
inst✝ : DecidableRel fun a b => a ∣ b
hm : multiplicity.Finite λ S'.c
this : 2 ≤ (multiplicity λ S'.c).get hm
x : 𝓞 K
hx : S'.c = λ ^ (multiplicity λ S'.c).get hm * x
⊢ 2 + ((multiplicity λ S'.c).get hm - 2) = (multiplicity λ S'.c).get hm
state_after: no goals

tactic: simp
state_before: K : Type u_1
inst✝³ : Field K
inst✝² : NumberField K
inst✝¹ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
S : Solution hζ
S' : Solution' hζ
inst✝ : DecidableRel fun a b => a ∣ b
hm : multiplicity.Finite λ S'.c
this : λ ^ 4 ∣ S'.c ^ 3
⊢ ↑((multiplicity λ (S'.c ^ 3)).get ⋯) = multiplicity λ (S'.c ^ 3)
state_after: no goals