-- Mathlib/NumberTheory/FLT/Three.lean
private lemma u₄_eq_one_or_neg_one : S.u₄ = 1 ∨ S.u₄ = -1

Proof state:
case hcong.intro.inl.inl.intro.intro
K : Type u_1
inst✝² : Field K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
S : Solution hζ
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
this : λ ^ 2 ∣ λ ^ 4
X : 𝓞 K
hX :
  ↑(FermatLastTheoremForThreeGen.Solution.u₅ S) *
      (λ ^ (S.multiplicity - 1) * FermatLastTheoremForThreeGen.Solution.X S) ^ 3 =
    λ ^ 2 * X
Y : 𝓞 K
hY : FermatLastTheoremForThreeGen.Solution.Y S ^ 3 - 1 = λ ^ 2 * Y
Z : 𝓞 K
hZ : FermatLastTheoremForThreeGen.Solution.Z S ^ 3 - 1 = λ ^ 2 * Z
⊢ ∃ n, λ ^ 2 ∣ ↑(FermatLastTheoremForThreeGen.Solution.u₄ S) - ↑n

Tactic:
refine ⟨-1, X-Y-S.u₄*Z, ?_⟩

Result:
case hcong.intro.inl.inl.intro.intro
K : Type u_1
inst✝² : Field K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
S : Solution hζ
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
this : λ ^ 2 ∣ λ ^ 4
X : 𝓞 K
hX :
  ↑(FermatLastTheoremForThreeGen.Solution.u₅ S) *
      (λ ^ (S.multiplicity - 1) * FermatLastTheoremForThreeGen.Solution.X S) ^ 3 =
    λ ^ 2 * X
Y : 𝓞 K
hY : FermatLastTheoremForThreeGen.Solution.Y S ^ 3 - 1 = λ ^ 2 * Y
Z : 𝓞 K
hZ : FermatLastTheoremForThreeGen.Solution.Z S ^ 3 - 1 = λ ^ 2 * Z
⊢ ↑(FermatLastTheoremForThreeGen.Solution.u₄ S) - ↑(-1) =
    λ ^ 2 * (X - Y - ↑(FermatLastTheoremForThreeGen.Solution.u₄ S) * Z)

Proof state:
case hcong.intro.inl.inr.intro.intro
K : Type u_1
inst✝² : Field K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
S : Solution hζ
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
this : λ ^ 2 ∣ λ ^ 4
X : 𝓞 K
hX :
  ↑(FermatLastTheoremForThreeGen.Solution.u₅ S) *
      (λ ^ (S.multiplicity - 1) * FermatLastTheoremForThreeGen.Solution.X S) ^ 3 =
    λ ^ 2 * X
Y : 𝓞 K
hY : FermatLastTheoremForThreeGen.Solution.Y S ^ 3 - 1 = λ ^ 2 * Y
Z : 𝓞 K
hZ : FermatLastTheoremForThreeGen.Solution.Z S ^ 3 + 1 = λ ^ 2 * Z
⊢ ↑(FermatLastTheoremForThreeGen.Solution.u₄ S) - ↑1 =
    λ ^ 2 * (-X + Y + ↑(FermatLastTheoremForThreeGen.Solution.u₄ S) * Z)

Tactic:
rw [show λ^2*(-X+Y+S.u₄*Z)=-(λ^2*X-λ^2*Y-S.u₄*(λ^2*Z)) by ring, ← hX, ← hY, ← hZ, ← formula2]

Result:
case hcong.intro.inl.inr.intro.intro
K : Type u_1
inst✝² : Field K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
S : Solution hζ
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
this : λ ^ 2 ∣ λ ^ 4
X : 𝓞 K
hX :
  ↑(FermatLastTheoremForThreeGen.Solution.u₅ S) *
      (λ ^ (S.multiplicity - 1) * FermatLastTheoremForThreeGen.Solution.X S) ^ 3 =
    λ ^ 2 * X
Y : 𝓞 K
hY : FermatLastTheoremForThreeGen.Solution.Y S ^ 3 - 1 = λ ^ 2 * Y
Z : 𝓞 K
hZ : FermatLastTheoremForThreeGen.Solution.Z S ^ 3 + 1 = λ ^ 2 * Z
⊢ ↑(FermatLastTheoremForThreeGen.Solution.u₄ S) - ↑1 =
    -(FermatLastTheoremForThreeGen.Solution.Y S ^ 3 +
            ↑(FermatLastTheoremForThreeGen.Solution.u₄ S) * FermatLastTheoremForThreeGen.Solution.Z S ^ 3 -
          (FermatLastTheoremForThreeGen.Solution.Y S ^ 3 - 1) -
        ↑(FermatLastTheoremForThreeGen.Solution.u₄ S) * (FermatLastTheoremForThreeGen.Solution.Z S ^ 3 + 1))

Proof state:
case hcong.intro.inl.inl.intro.intro
K : Type u_1
inst✝² : Field K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
S : Solution hζ
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
this : λ ^ 2 ∣ λ ^ 4
X : 𝓞 K
hX :
  ↑(FermatLastTheoremForThreeGen.Solution.u₅ S) *
      (λ ^ (S.multiplicity - 1) * FermatLastTheoremForThreeGen.Solution.X S) ^ 3 =
    λ ^ 2 * X
Y : 𝓞 K
hY : FermatLastTheoremForThreeGen.Solution.Y S ^ 3 - 1 = λ ^ 2 * Y
Z : 𝓞 K
hZ : FermatLastTheoremForThreeGen.Solution.Z S ^ 3 - 1 = λ ^ 2 * Z
⊢ ↑(FermatLastTheoremForThreeGen.Solution.u₄ S) - ↑(-1) =
    λ ^ 2 * (X - Y - ↑(FermatLastTheoremForThreeGen.Solution.u₄ S) * Z)

Tactic:
rw [show λ^2*(X-Y-S.u₄*Z)=λ^2*X-λ^2*Y-S.u₄*(λ^2*Z) by ring, ← hX, ← hY, ← hZ, ← formula2]

Result:
case hcong.intro.inl.inl.intro.intro
K : Type u_1
inst✝² : Field K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
S : Solution hζ
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
this : λ ^ 2 ∣ λ ^ 4
X : 𝓞 K
hX :
  ↑(FermatLastTheoremForThreeGen.Solution.u₅ S) *
      (λ ^ (S.multiplicity - 1) * FermatLastTheoremForThreeGen.Solution.X S) ^ 3 =
    λ ^ 2 * X
Y : 𝓞 K
hY : FermatLastTheoremForThreeGen.Solution.Y S ^ 3 - 1 = λ ^ 2 * Y
Z : 𝓞 K
hZ : FermatLastTheoremForThreeGen.Solution.Z S ^ 3 - 1 = λ ^ 2 * Z
⊢ ↑(FermatLastTheoremForThreeGen.Solution.u₄ S) - ↑(-1) =
    FermatLastTheoremForThreeGen.Solution.Y S ^ 3 +
          ↑(FermatLastTheoremForThreeGen.Solution.u₄ S) * FermatLastTheoremForThreeGen.Solution.Z S ^ 3 -
        (FermatLastTheoremForThreeGen.Solution.Y S ^ 3 - 1) -
      ↑(FermatLastTheoremForThreeGen.Solution.u₄ S) * (FermatLastTheoremForThreeGen.Solution.Z S ^ 3 - 1)

Proof state:
case hcong.intro.inl.inr.intro.intro
K : Type u_1
inst✝² : Field K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
S : Solution hζ
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
this : λ ^ 2 ∣ λ ^ 4
X : 𝓞 K
hX :
  ↑(FermatLastTheoremForThreeGen.Solution.u₅ S) *
      (λ ^ (S.multiplicity - 1) * FermatLastTheoremForThreeGen.Solution.X S) ^ 3 =
    λ ^ 2 * X
Y : 𝓞 K
hY : FermatLastTheoremForThreeGen.Solution.Y S ^ 3 - 1 = λ ^ 2 * Y
Z : 𝓞 K
hZ : FermatLastTheoremForThreeGen.Solution.Z S ^ 3 + 1 = λ ^ 2 * Z
⊢ ∃ n, λ ^ 2 ∣ ↑(FermatLastTheoremForThreeGen.Solution.u₄ S) - ↑n

Tactic:
refine ⟨1, -X+Y+S.u₄*Z, ?_⟩

Result:
case hcong.intro.inl.inr.intro.intro
K : Type u_1
inst✝² : Field K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
S : Solution hζ
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
this : λ ^ 2 ∣ λ ^ 4
X : 𝓞 K
hX :
  ↑(FermatLastTheoremForThreeGen.Solution.u₅ S) *
      (λ ^ (S.multiplicity - 1) * FermatLastTheoremForThreeGen.Solution.X S) ^ 3 =
    λ ^ 2 * X
Y : 𝓞 K
hY : FermatLastTheoremForThreeGen.Solution.Y S ^ 3 - 1 = λ ^ 2 * Y
Z : 𝓞 K
hZ : FermatLastTheoremForThreeGen.Solution.Z S ^ 3 + 1 = λ ^ 2 * Z
⊢ ↑(FermatLastTheoremForThreeGen.Solution.u₄ S) - ↑1 =
    λ ^ 2 * (-X + Y + ↑(FermatLastTheoremForThreeGen.Solution.u₄ S) * Z)

Proof state:
K : Type u_1
inst✝² : Field K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
S : Solution hζ
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
this : λ ^ 2 ∣ λ ^ 4
h :
  λ ^ 2 ∣
    ↑(FermatLastTheoremForThreeGen.Solution.u₅ S) *
      (λ ^ (S.multiplicity - 1) * FermatLastTheoremForThreeGen.Solution.X S) ^ 3
⊢ FermatLastTheoremForThreeGen.Solution.u₄ S = 1 ∨ FermatLastTheoremForThreeGen.Solution.u₄ S = -1

Tactic:
apply IsCyclotomicExtension.Rat.Three.eq_one_or_neg_one_of_unit_of_congruent hζ

Result:
case hcong
K : Type u_1
inst✝² : Field K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
S : Solution hζ
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
this : λ ^ 2 ∣ λ ^ 4
h :
  λ ^ 2 ∣
    ↑(FermatLastTheoremForThreeGen.Solution.u₅ S) *
      (λ ^ (S.multiplicity - 1) * FermatLastTheoremForThreeGen.Solution.X S) ^ 3
⊢ ∃ n, λ ^ 2 ∣ ↑(FermatLastTheoremForThreeGen.Solution.u₄ S) - ↑n

Proof state:
K : Type u_1
inst✝² : Field K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
S : Solution hζ
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
this : λ ^ 2 ∣ λ ^ 4
⊢ FermatLastTheoremForThreeGen.Solution.u₄ S = 1 ∨ FermatLastTheoremForThreeGen.Solution.u₄ S = -1

Tactic:
have h := S.lambda_sq_div_u₅_mul

Result:
K : Type u_1
inst✝² : Field K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
S : Solution hζ
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
this : λ ^ 2 ∣ λ ^ 4
h :
  λ ^ 2 ∣
    ↑(FermatLastTheoremForThreeGen.Solution.u₅ S) *
      (λ ^ (S.multiplicity - 1) * FermatLastTheoremForThreeGen.Solution.X S) ^ 3
⊢ FermatLastTheoremForThreeGen.Solution.u₄ S = 1 ∨ FermatLastTheoremForThreeGen.Solution.u₄ S = -1