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

Proof steps:
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: 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
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: 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 ≤ (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 := 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
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: 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
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: 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 ≤ 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: omega