Imports
/-
Copyright (c) 2024 Joseph Tooby-Smith. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Joseph Tooby-Smith
-/
module
public import Physlib.Particles.StandardModel.AnomalyCancellation.NoGrav.Basic
public import Mathlib.NumberTheory.FLT.ThreeParameterizations for solutions to the linear ACCs for 1 family
In this file we give two parameterizations
linearParameters of solutions to the linear ACCs for 1 family
linearParametersQENeqZero of solutions to the linear ACCs for 1 family with Q and E non-zero
These parameterizations are based on: https://arxiv.org/abs/1907.00514
@[expose] public sectionThe parameters for a linear parameterization to the solution of the linear ACCs.
The parameter Q'.
The parameter Y.
The parameter E'.
structure linearParameters where Q' : ℚ Y : ℚ E' : ℚ@[ext]
lemma ext {S T : linearParameters} (hQ : S.Q' = T.Q') (hY : S.Y = T.Y) (hE : S.E' = T.E') :
S = T := S:linearParametersT:linearParametershQ:S.Q' = T.Q'hY:S.Y = T.YhE:S.E' = T.E'⊢ S = T
T:linearParametersQ'✝:ℚY✝:ℚE'✝:ℚhQ:{ Q' := Q'✝, Y := Y✝, E' := E'✝ }.Q' = T.Q'hY:{ Q' := Q'✝, Y := Y✝, E' := E'✝ }.Y = T.YhE:{ Q' := Q'✝, Y := Y✝, E' := E'✝ }.E' = T.E'⊢ { Q' := Q'✝, Y := Y✝, E' := E'✝ } = T
All goals completed! 🐙
The map from the linear parameters to elements of (SMNoGrav 1).charges.
def asCharges (S : linearParameters) : (SMNoGrav 1).Charges := fun i =>
match i with
| (0 : Fin 5) => S.Q'
| (1 : Fin 5) => S.Y - S.Q'
| (2 : Fin 5) => - (S.Y + S.Q')
| (3: Fin 5) => - 3 * S.Q'
| (4 : Fin 5) => S.E'lemma speciesVal (S : linearParameters) :
toSpeciesEquiv S.asCharges= fun i _ => S.asCharges i := S:linearParameters⊢ toSpeciesEquiv S.asCharges = fun i x => S.asCharges i
S:linearParametersi:Fin 5j:Fin (SMSpecies 1).numberCharges⊢ toSpeciesEquiv S.asCharges i j = S.asCharges i
match j with
S:linearParametersi:Fin 5j:Fin (SMSpecies 1).numberCharges⊢ toSpeciesEquiv S.asCharges i 0 = S.asCharges i
match i with
S:linearParametersi:Fin 5j:Fin (SMSpecies 1).numberCharges⊢ toSpeciesEquiv S.asCharges 0 0 = S.asCharges 0 All goals completed! 🐙
S:linearParametersi:Fin 5j:Fin (SMSpecies 1).numberCharges⊢ toSpeciesEquiv S.asCharges 1 0 = S.asCharges 1 All goals completed! 🐙
S:linearParametersi:Fin 5j:Fin (SMSpecies 1).numberCharges⊢ toSpeciesEquiv S.asCharges 2 0 = S.asCharges 2 All goals completed! 🐙
S:linearParametersi:Fin 5j:Fin (SMSpecies 1).numberCharges⊢ toSpeciesEquiv S.asCharges 3 0 = S.asCharges 3 All goals completed! 🐙
S:linearParametersi:Fin 5j:Fin (SMSpecies 1).numberCharges⊢ toSpeciesEquiv S.asCharges 4 0 = S.asCharges 4 All goals completed! 🐙lemma toSpecies_apply_asCharges (S : linearParameters) (i : Fin 5) :
toSpecies i S.asCharges = fun _ => S.asCharges i := S:linearParametersi:Fin 5⊢ (toSpecies i) S.asCharges = fun x => S.asCharges i
S:linearParametersi:Fin 5j:Fin (SMSpecies 1).numberCharges⊢ (toSpecies i) S.asCharges j = S.asCharges i
All goals completed! 🐙
The map from the linear parameters to elements of (SMNoGrav 1).LinSols.
def asLinear (S : linearParameters) : (SMNoGrav 1).LinSols :=
chargeToLinear S.asCharges (S:linearParameters⊢ accSU2 S.asCharges = 0
S:linearParameters⊢ 3 * S.asCharges 0 + S.asCharges 3 = 0
All goals completed! 🐙)
(S:linearParameters⊢ accSU3 S.asCharges = 0
S:linearParameters⊢ 2 * S.Q' + (S.Y - S.Q') + (-S.Q' + -S.Y) = 0
All goals completed! 🐙)lemma asLinear_val (S : linearParameters) : S.asLinear.val = S.asCharges := S:linearParameters⊢ S.asLinear.val = S.asCharges
All goals completed! 🐙set_option backward.isDefEq.respectTransparency false in
lemma cubic (S : linearParameters) :
accCube (S.asCharges) = - 54 * S.Q'^3 - 18 * S.Q' * S.Y ^ 2 + S.E'^3 := S:linearParameters⊢ accCube S.asCharges = -54 * S.Q' ^ 3 - 18 * S.Q' * S.Y ^ 2 + S.E' ^ 3
S:linearParameters⊢ ∑ x,
(6 * (Q S.asCharges x * Q S.asCharges x * Q S.asCharges x) +
3 * (U S.asCharges x * U S.asCharges x * U S.asCharges x) +
3 * (D S.asCharges x * D S.asCharges x * D S.asCharges x) +
2 * (L S.asCharges x * L S.asCharges x * L S.asCharges x) +
E S.asCharges x * E S.asCharges x * E S.asCharges x) =
-54 * S.Q' ^ 3 - 18 * S.Q' * S.Y ^ 2 + S.E' ^ 3
S:linearParameters⊢ 6 * (toSpeciesEquiv S.asCharges 0 0 * toSpeciesEquiv S.asCharges 0 0 * toSpeciesEquiv S.asCharges 0 0) +
3 * (toSpeciesEquiv S.asCharges 1 0 * toSpeciesEquiv S.asCharges 1 0 * toSpeciesEquiv S.asCharges 1 0) +
3 * (toSpeciesEquiv S.asCharges 2 0 * toSpeciesEquiv S.asCharges 2 0 * toSpeciesEquiv S.asCharges 2 0) +
2 * (toSpeciesEquiv S.asCharges 3 0 * toSpeciesEquiv S.asCharges 3 0 * toSpeciesEquiv S.asCharges 3 0) +
toSpeciesEquiv S.asCharges 4 0 * toSpeciesEquiv S.asCharges 4 0 * toSpeciesEquiv S.asCharges 4 0 =
-(54 * S.Q' ^ 3) - 18 * S.Q' * S.Y ^ 2 + S.E' ^ 3
repeat erw [S:linearParameters⊢ 6 * ((fun i x => S.asCharges i) 0 0 * (fun i x => S.asCharges i) 0 0 * (fun i x => S.asCharges i) 0 0) +
3 * ((fun i x => S.asCharges i) 1 0 * (fun i x => S.asCharges i) 1 0 * (fun i x => S.asCharges i) 1 0) +
3 * ((fun i x => S.asCharges i) 2 0 * (fun i x => S.asCharges i) 2 0 * (fun i x => S.asCharges i) 2 0) +
2 * ((fun i x => S.asCharges i) 3 0 * (fun i x => S.asCharges i) 3 0 * (fun i x => S.asCharges i) 3 0) +
(fun i x => S.asCharges i) 4 0 * (fun i x => S.asCharges i) 4 0 * (fun i x => S.asCharges i) 4 0 =
-(54 * S.Q' ^ 3) - 18 * S.Q' * S.Y ^ 2 + S.E' ^ 3S:linearParameters⊢ 6 * ((fun i x => S.asCharges i) 0 0 * (fun i x => S.asCharges i) 0 0 * (fun i x => S.asCharges i) 0 0) +
3 * ((fun i x => S.asCharges i) 1 0 * (fun i x => S.asCharges i) 1 0 * (fun i x => S.asCharges i) 1 0) +
3 * ((fun i x => S.asCharges i) 2 0 * (fun i x => S.asCharges i) 2 0 * (fun i x => S.asCharges i) 2 0) +
2 * ((fun i x => S.asCharges i) 3 0 * (fun i x => S.asCharges i) 3 0 * (fun i x => S.asCharges i) 3 0) +
(fun i x => S.asCharges i) 4 0 * (fun i x => S.asCharges i) 4 0 * (fun i x => S.asCharges i) 4 0 =
-(54 * S.Q' ^ 3) - 18 * S.Q' * S.Y ^ 2 + S.E' ^ 3
S:linearParameters⊢ 6 * (S.Q' * S.Q' * S.Q') + 3 * ((S.Y - S.Q') * (S.Y - S.Q') * (S.Y - S.Q')) +
3 * ((-S.Q' + -S.Y) * (-S.Q' + -S.Y) * (-S.Q' + -S.Y)) +
-(2 * (3 * S.Q' * (3 * S.Q') * (3 * S.Q'))) +
S.E' * S.E' * S.E' =
-(54 * S.Q' ^ 3) - 18 * S.Q' * S.Y ^ 2 + S.E' ^ 3
All goals completed! 🐙S:linearParametershc:-54 * 0 ^ 3 - 18 * 0 * S.Y ^ 2 + S.E' ^ 3 = 0h:S.Q' = 0⊢ S.E' = 0
simpa using hc All goals completed! 🐙
lemma cubic_zero_E'_zero (S : linearParameters) (hc : accCube (S.asCharges) = 0)
(h : S.E' = 0) : S.Q' = 0 := by S:linearParametershc:accCube S.asCharges = 0h:S.E' = 0⊢ S.Q' = 0
rw [cubic, S:linearParametershc:-54 * S.Q' ^ 3 - 18 * S.Q' * S.Y ^ 2 + S.E' ^ 3 = 0h:S.E' = 0⊢ S.Q' = 0 S:linearParametershc:-54 * S.Q' ^ 3 - 18 * S.Q' * S.Y ^ 2 + 0 ^ 3 = 0h:S.E' = 0⊢ S.Q' = 0 h S:linearParametershc:-54 * S.Q' ^ 3 - 18 * S.Q' * S.Y ^ 2 + 0 ^ 3 = 0h:S.E' = 0⊢ S.Q' = 0 S:linearParametershc:-54 * S.Q' ^ 3 - 18 * S.Q' * S.Y ^ 2 + 0 ^ 3 = 0h:S.E' = 0⊢ S.Q' = 0] at hc S:linearParametershc:-54 * S.Q' ^ 3 - 18 * S.Q' * S.Y ^ 2 + 0 ^ 3 = 0h:S.E' = 0⊢ S.Q' = 0
simp only [neg_mul, ne_eq, OfNat.ofNat_ne_zero, not_false_eq_true, zero_pow, add_zero] at hc S:linearParametersh:S.E' = 0hc:-(54 * S.Q' ^ 3) - 18 * S.Q' * S.Y ^ 2 = 0⊢ S.Q' = 0
have h1 : -(54 * S.Q' ^ 3) - 18 * S.Q' * S.Y ^ 2 = - 18 * (3 * S.Q' ^ 2 + S.Y ^ 2) * S.Q' := by
ring S:linearParametersh:S.E' = 0hc:-(54 * S.Q' ^ 3) - 18 * S.Q' * S.Y ^ 2 = 0h1:-(54 * S.Q' ^ 3) - 18 * S.Q' * S.Y ^ 2 = -18 * (3 * S.Q' ^ 2 + S.Y ^ 2) * S.Q'⊢ S.Q' = 0 S:linearParametersh:S.E' = 0hc:-(54 * S.Q' ^ 3) - 18 * S.Q' * S.Y ^ 2 = 0h1:-(54 * S.Q' ^ 3) - 18 * S.Q' * S.Y ^ 2 = -18 * (3 * S.Q' ^ 2 + S.Y ^ 2) * S.Q'⊢ S.Q' = 0
rw [h1 S:linearParametersh:S.E' = 0hc:-18 * (3 * S.Q' ^ 2 + S.Y ^ 2) * S.Q' = 0h1:-(54 * S.Q' ^ 3) - 18 * S.Q' * S.Y ^ 2 = -18 * (3 * S.Q' ^ 2 + S.Y ^ 2) * S.Q'⊢ S.Q' = 0 S:linearParametersh:S.E' = 0hc:-18 * (3 * S.Q' ^ 2 + S.Y ^ 2) * S.Q' = 0h1:-(54 * S.Q' ^ 3) - 18 * S.Q' * S.Y ^ 2 = -18 * (3 * S.Q' ^ 2 + S.Y ^ 2) * S.Q'⊢ S.Q' = 0] at hc S:linearParametersh:S.E' = 0hc:-18 * (3 * S.Q' ^ 2 + S.Y ^ 2) * S.Q' = 0h1:-(54 * S.Q' ^ 3) - 18 * S.Q' * S.Y ^ 2 = -18 * (3 * S.Q' ^ 2 + S.Y ^ 2) * S.Q'⊢ S.Q' = 0
simp only [neg_mul, neg_eq_zero, mul_eq_zero, OfNat.ofNat_ne_zero, false_or] at hc S:linearParametersh:S.E' = 0h1:-(54 * S.Q' ^ 3) - 18 * S.Q' * S.Y ^ 2 = -18 * (3 * S.Q' ^ 2 + S.Y ^ 2) * S.Q'hc:3 * S.Q' ^ 2 + S.Y ^ 2 = 0 ∨ S.Q' = 0⊢ S.Q' = 0
cases' hc with hc hc inl S:linearParametersh:S.E' = 0h1:-(54 * S.Q' ^ 3) - 18 * S.Q' * S.Y ^ 2 = -18 * (3 * S.Q' ^ 2 + S.Y ^ 2) * S.Q'hc:3 * S.Q' ^ 2 + S.Y ^ 2 = 0⊢ S.Q' = 0inr S:linearParametersh:S.E' = 0h1:-(54 * S.Q' ^ 3) - 18 * S.Q' * S.Y ^ 2 = -18 * (3 * S.Q' ^ 2 + S.Y ^ 2) * S.Q'hc:S.Q' = 0⊢ S.Q' = 0
· inl S:linearParametersh:S.E' = 0h1:-(54 * S.Q' ^ 3) - 18 * S.Q' * S.Y ^ 2 = -18 * (3 * S.Q' ^ 2 + S.Y ^ 2) * S.Q'hc:3 * S.Q' ^ 2 + S.Y ^ 2 = 0⊢ S.Q' = 0 have h2 := (add_eq_zero_iff_of_nonneg (by S:linearParametersh:S.E' = 0h1:-(54 * S.Q' ^ 3) - 18 * S.Q' * S.Y ^ 2 = -18 * (3 * S.Q' ^ 2 + S.Y ^ 2) * S.Q'hc:3 * S.Q' ^ 2 + S.Y ^ 2 = 0⊢ 0 ≤ 3 * S.Q' ^ 2 inl S:linearParametersh:S.E' = 0h1:-(54 * S.Q' ^ 3) - 18 * S.Q' * S.Y ^ 2 = -18 * (3 * S.Q' ^ 2 + S.Y ^ 2) * S.Q'hc:3 * S.Q' ^ 2 + S.Y ^ 2 = 0h2:3 * S.Q' ^ 2 = 0 ∧ S.Y ^ 2 = 0⊢ S.Q' = 0 nlinarith All goals completed! 🐙inl S:linearParametersh:S.E' = 0h1:-(54 * S.Q' ^ 3) - 18 * S.Q' * S.Y ^ 2 = -18 * (3 * S.Q' ^ 2 + S.Y ^ 2) * S.Q'hc:3 * S.Q' ^ 2 + S.Y ^ 2 = 0h2:3 * S.Q' ^ 2 = 0 ∧ S.Y ^ 2 = 0⊢ S.Q' = 0) (sq_nonneg S.Y)).mp hcinl S:linearParametersh:S.E' = 0h1:-(54 * S.Q' ^ 3) - 18 * S.Q' * S.Y ^ 2 = -18 * (3 * S.Q' ^ 2 + S.Y ^ 2) * S.Q'hc:3 * S.Q' ^ 2 + S.Y ^ 2 = 0h2:3 * S.Q' ^ 2 = 0 ∧ S.Y ^ 2 = 0⊢ S.Q' = 0
simp only [mul_eq_zero, OfNat.ofNat_ne_zero, ne_eq, not_false_eq_true, pow_eq_zero_iff,
false_or] at h2 inl S:linearParametersh:S.E' = 0h1:-(54 * S.Q' ^ 3) - 18 * S.Q' * S.Y ^ 2 = -18 * (3 * S.Q' ^ 2 + S.Y ^ 2) * S.Q'hc:3 * S.Q' ^ 2 + S.Y ^ 2 = 0h2:S.Q' = 0 ∧ S.Y = 0⊢ S.Q' = 0
exact h2.1 All goals completed! 🐙
· inr S:linearParametersh:S.E' = 0h1:-(54 * S.Q' ^ 3) - 18 * S.Q' * S.Y ^ 2 = -18 * (3 * S.Q' ^ 2 + S.Y ^ 2) * S.Q'hc:S.Q' = 0⊢ S.Q' = 0 exact hc All goals completed! 🐙
The bijection between the type of linear parameters and (SMNoGrav 1).LinSols.
set_option backward.isDefEq.respectTransparency false in
def bijection : linearParameters ≃ (SMNoGrav 1).LinSols where
toFun S := S.asLinear
invFun S := ⟨SMCharges.Q S.val (0 : Fin 1), (SMCharges.U S.val (0 : Fin 1) -
SMCharges.D S.val (0 : Fin 1))/2,
SMCharges.E S.val (0 : Fin 1)⟩
left_inv S := by S:linearParameters⊢ (fun S => { Q' := Q S.val 0, Y := (U S.val 0 - D S.val 0) / 2, E' := E S.val 0 }) ((fun S => S.asLinear) S) = S
apply linearParameters.ext hQ S:linearParameters⊢ ((fun S => { Q' := Q S.val 0, Y := (U S.val 0 - D S.val 0) / 2, E' := E S.val 0 }) ((fun S => S.asLinear) S)).Q' = S.Q'hY S:linearParameters⊢ ((fun S => { Q' := Q S.val 0, Y := (U S.val 0 - D S.val 0) / 2, E' := E S.val 0 }) ((fun S => S.asLinear) S)).Y = S.YhE S:linearParameters⊢ ((fun S => { Q' := Q S.val 0, Y := (U S.val 0 - D S.val 0) / 2, E' := E S.val 0 }) ((fun S => S.asLinear) S)).E' = S.E'
· hQ S:linearParameters⊢ ((fun S => { Q' := Q S.val 0, Y := (U S.val 0 - D S.val 0) / 2, E' := E S.val 0 }) ((fun S => S.asLinear) S)).Q' = S.Q' rfl All goals completed! 🐙
· hY S:linearParameters⊢ ((fun S => { Q' := Q S.val 0, Y := (U S.val 0 - D S.val 0) / 2, E' := E S.val 0 }) ((fun S => S.asLinear) S)).Y = S.Y simp only [Fin.isValue] hY S:linearParameters⊢ (U S.asLinear.val 0 - D S.asLinear.val 0) / 2 = S.Y
repeat erw [asLinear_val hY S:linearParameters⊢ (U S.asCharges 0 - D S.asCharges 0) / 2 = S.Y] hY S:linearParameters⊢ (U S.asCharges 0 - D S.asCharges 0) / 2 = S.Y
simp only [Fin.isValue, toSpecies_apply] hY S:linearParameters⊢ (toSpeciesEquiv S.asCharges 1 0 - toSpeciesEquiv S.asCharges 2 0) / 2 = S.Y
repeat erw [speciesVal hY S:linearParameters⊢ ((fun i x => S.asCharges i) 1 0 - (fun i x => S.asCharges i) 2 0) / 2 = S.Y] hY S:linearParameters⊢ ((fun i x => S.asCharges i) 1 0 - (fun i x => S.asCharges i) 2 0) / 2 = S.Y
simp only [asCharges, neg_add_rev] hY S:linearParameters⊢ (S.Y - S.Q' - (-S.Q' + -S.Y)) / 2 = S.Y
ring All goals completed! 🐙
· hE S:linearParameters⊢ ((fun S => { Q' := Q S.val 0, Y := (U S.val 0 - D S.val 0) / 2, E' := E S.val 0 }) ((fun S => S.asLinear) S)).E' = S.E' rfl All goals completed! 🐙
right_inv S := by S:(SMNoGrav 1).LinSols⊢ (fun S => S.asLinear) ((fun S => { Q' := Q S.val 0, Y := (U S.val 0 - D S.val 0) / 2, E' := E S.val 0 }) S) = S
simp only [Fin.isValue, toSpecies_apply_eq] S:(SMNoGrav 1).LinSols⊢ { Q' := toSpeciesEquiv S.val 0 0, Y := (toSpeciesEquiv S.val 1 0 - toSpeciesEquiv S.val 2 0) / 2,
E' := toSpeciesEquiv S.val 4 0 }.asLinear =
S
apply ACCSystemLinear.LinSols.ext S:(SMNoGrav 1).LinSols⊢ { Q' := toSpeciesEquiv S.val 0 0, Y := (toSpeciesEquiv S.val 1 0 - toSpeciesEquiv S.val 2 0) / 2,
E' := toSpeciesEquiv S.val 4 0 }.asLinear.val =
S.val
rw [charges_eq_toSpecies_eq S:(SMNoGrav 1).LinSols⊢ ∀ (i : Fin 5),
(toSpecies i)
{ Q' := toSpeciesEquiv S.val 0 0, Y := (toSpeciesEquiv S.val 1 0 - toSpeciesEquiv S.val 2 0) / 2,
E' := toSpeciesEquiv S.val 4 0 }.asLinear.val =
(toSpecies i) S.val S:(SMNoGrav 1).LinSols⊢ ∀ (i : Fin 5),
(toSpecies i)
{ Q' := toSpeciesEquiv S.val 0 0, Y := (toSpeciesEquiv S.val 1 0 - toSpeciesEquiv S.val 2 0) / 2,
E' := toSpeciesEquiv S.val 4 0 }.asLinear.val =
(toSpecies i) S.val] S:(SMNoGrav 1).LinSols⊢ ∀ (i : Fin 5),
(toSpecies i)
{ Q' := toSpeciesEquiv S.val 0 0, Y := (toSpeciesEquiv S.val 1 0 - toSpeciesEquiv S.val 2 0) / 2,
E' := toSpeciesEquiv S.val 4 0 }.asLinear.val =
(toSpecies i) S.val
intro i S:(SMNoGrav 1).LinSolsi:Fin 5⊢ (toSpecies i)
{ Q' := toSpeciesEquiv S.val 0 0, Y := (toSpeciesEquiv S.val 1 0 - toSpeciesEquiv S.val 2 0) / 2,
E' := toSpeciesEquiv S.val 4 0 }.asLinear.val =
(toSpecies i) S.val
rw [asLinear_val S:(SMNoGrav 1).LinSolsi:Fin 5⊢ (toSpecies i)
{ Q' := toSpeciesEquiv S.val 0 0, Y := (toSpeciesEquiv S.val 1 0 - toSpeciesEquiv S.val 2 0) / 2,
E' := toSpeciesEquiv S.val 4 0 }.asCharges =
(toSpecies i) S.val S:(SMNoGrav 1).LinSolsi:Fin 5⊢ (toSpecies i)
{ Q' := toSpeciesEquiv S.val 0 0, Y := (toSpeciesEquiv S.val 1 0 - toSpeciesEquiv S.val 2 0) / 2,
E' := toSpeciesEquiv S.val 4 0 }.asCharges =
(toSpecies i) S.val] S:(SMNoGrav 1).LinSolsi:Fin 5⊢ (toSpecies i)
{ Q' := toSpeciesEquiv S.val 0 0, Y := (toSpeciesEquiv S.val 1 0 - toSpeciesEquiv S.val 2 0) / 2,
E' := toSpeciesEquiv S.val 4 0 }.asCharges =
(toSpecies i) S.val
funext j S:(SMNoGrav 1).LinSolsi:Fin 5j:Fin (SMSpecies 1).numberCharges⊢ (toSpecies i)
{ Q' := toSpeciesEquiv S.val 0 0, Y := (toSpeciesEquiv S.val 1 0 - toSpeciesEquiv S.val 2 0) / 2,
E' := toSpeciesEquiv S.val 4 0 }.asCharges
j =
(toSpecies i) S.val j
have hj : j = (0 : Fin 1) := by S:(SMNoGrav 1).LinSols⊢ (fun S => S.asLinear) ((fun S => { Q' := Q S.val 0, Y := (U S.val 0 - D S.val 0) / 2, E' := E S.val 0 }) S) = S S:(SMNoGrav 1).LinSolsi:Fin 5j:Fin (SMSpecies 1).numberChargeshj:j = 0⊢ (toSpecies i)
{ Q' := toSpeciesEquiv S.val 0 0, Y := (toSpeciesEquiv S.val 1 0 - toSpeciesEquiv S.val 2 0) / 2,
E' := toSpeciesEquiv S.val 4 0 }.asCharges
j =
(toSpecies i) S.val j
match j with
| ⟨0, _⟩ => S:(SMNoGrav 1).LinSolsi:Fin 5j:Fin (SMSpecies 1).numberChargesisLt✝:0 < (SMSpecies 1).numberCharges⊢ ⟨0, isLt✝⟩ = 0 S:(SMNoGrav 1).LinSolsi:Fin 5j:Fin (SMSpecies 1).numberChargeshj:j = 0⊢ (toSpecies i)
{ Q' := toSpeciesEquiv S.val 0 0, Y := (toSpeciesEquiv S.val 1 0 - toSpeciesEquiv S.val 2 0) / 2,
E' := toSpeciesEquiv S.val 4 0 }.asCharges
j =
(toSpecies i) S.val j rfl S:(SMNoGrav 1).LinSolsi:Fin 5j:Fin (SMSpecies 1).numberChargeshj:j = 0⊢ (toSpecies i)
{ Q' := toSpeciesEquiv S.val 0 0, Y := (toSpeciesEquiv S.val 1 0 - toSpeciesEquiv S.val 2 0) / 2,
E' := toSpeciesEquiv S.val 4 0 }.asCharges
j =
(toSpecies i) S.val j S:(SMNoGrav 1).LinSolsi:Fin 5j:Fin (SMSpecies 1).numberChargeshj:j = 0⊢ (toSpecies i)
{ Q' := toSpeciesEquiv S.val 0 0, Y := (toSpeciesEquiv S.val 1 0 - toSpeciesEquiv S.val 2 0) / 2,
E' := toSpeciesEquiv S.val 4 0 }.asCharges
j =
(toSpecies i) S.val j
subst hj S:(SMNoGrav 1).LinSolsi:Fin 5⊢ (toSpecies i)
{ Q' := toSpeciesEquiv S.val 0 0, Y := (toSpeciesEquiv S.val 1 0 - toSpeciesEquiv S.val 2 0) / 2,
E' := toSpeciesEquiv S.val 4 0 }.asCharges
0 =
(toSpecies i) S.val 0
rw [toSpecies_apply_asCharges S:(SMNoGrav 1).LinSolsi:Fin 5⊢ (fun x =>
{ Q' := toSpeciesEquiv S.val 0 0, Y := (toSpeciesEquiv S.val 1 0 - toSpeciesEquiv S.val 2 0) / 2,
E' := toSpeciesEquiv S.val 4 0 }.asCharges
i)
0 =
(toSpecies i) S.val 0 S:(SMNoGrav 1).LinSolsi:Fin 5⊢ (fun x =>
{ Q' := toSpeciesEquiv S.val 0 0, Y := (toSpeciesEquiv S.val 1 0 - toSpeciesEquiv S.val 2 0) / 2,
E' := toSpeciesEquiv S.val 4 0 }.asCharges
i)
0 =
(toSpecies i) S.val 0] S:(SMNoGrav 1).LinSolsi:Fin 5⊢ (fun x =>
{ Q' := toSpeciesEquiv S.val 0 0, Y := (toSpeciesEquiv S.val 1 0 - toSpeciesEquiv S.val 2 0) / 2,
E' := toSpeciesEquiv S.val 4 0 }.asCharges
i)
0 =
(toSpecies i) S.val 0
have h1 := SU3Sol S S:(SMNoGrav 1).LinSolsi:Fin 5h1:accSU3 S.val = 0⊢ (fun x =>
{ Q' := toSpeciesEquiv S.val 0 0, Y := (toSpeciesEquiv S.val 1 0 - toSpeciesEquiv S.val 2 0) / 2,
E' := toSpeciesEquiv S.val 4 0 }.asCharges
i)
0 =
(toSpecies i) S.val 0
simp only [accSU3, toSpecies_apply_eq, Fin.isValue, sum_SMSpecies_numberCharges_one,
LinearMap.coe_mk, AddHom.coe_mk] at h1 S:(SMNoGrav 1).LinSolsi:Fin 5h1:2 * toSpeciesEquiv S.val 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 1 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 2 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0⊢ (fun x =>
{ Q' := toSpeciesEquiv S.val 0 0, Y := (toSpeciesEquiv S.val 1 0 - toSpeciesEquiv S.val 2 0) / 2,
E' := toSpeciesEquiv S.val 4 0 }.asCharges
i)
0 =
(toSpecies i) S.val 0
have h2 := SU2Sol S S:(SMNoGrav 1).LinSolsi:Fin 5h1:2 * toSpeciesEquiv S.val 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 1 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 2 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0h2:accSU2 S.val = 0⊢ (fun x =>
{ Q' := toSpeciesEquiv S.val 0 0, Y := (toSpeciesEquiv S.val 1 0 - toSpeciesEquiv S.val 2 0) / 2,
E' := toSpeciesEquiv S.val 4 0 }.asCharges
i)
0 =
(toSpecies i) S.val 0
simp only [accSU2,
Fin.isValue, toSpecies_apply_eq, sum_SMSpecies_numberCharges_one,
LinearMap.coe_mk, AddHom.coe_mk] at h2 S:(SMNoGrav 1).LinSolsi:Fin 5h1:2 * toSpeciesEquiv S.val 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 1 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 2 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0h2:3 * toSpeciesEquiv S.val 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 3 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0⊢ (fun x =>
{ Q' := toSpeciesEquiv S.val 0 0, Y := (toSpeciesEquiv S.val 1 0 - toSpeciesEquiv S.val 2 0) / 2,
E' := toSpeciesEquiv S.val 4 0 }.asCharges
i)
0 =
(toSpecies i) S.val 0
match i with
| 0 => S:(SMNoGrav 1).LinSolsi:Fin 5h1:2 * toSpeciesEquiv S.val 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 1 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 2 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0h2:3 * toSpeciesEquiv S.val 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 3 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0⊢ (fun x =>
{ Q' := toSpeciesEquiv S.val 0 0, Y := (toSpeciesEquiv S.val 1 0 - toSpeciesEquiv S.val 2 0) / 2,
E' := toSpeciesEquiv S.val 4 0 }.asCharges
0)
0 =
(toSpecies 0) S.val 0 rfl All goals completed! 🐙
| 1 => S:(SMNoGrav 1).LinSolsi:Fin 5h1:2 * toSpeciesEquiv S.val 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 1 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 2 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0h2:3 * toSpeciesEquiv S.val 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 3 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0⊢ (fun x =>
{ Q' := toSpeciesEquiv S.val 0 0, Y := (toSpeciesEquiv S.val 1 0 - toSpeciesEquiv S.val 2 0) / 2,
E' := toSpeciesEquiv S.val 4 0 }.asCharges
1)
0 =
(toSpecies 1) S.val 0
simp only [asCharges, Fin.isValue, toSpecies_apply_eq] S:(SMNoGrav 1).LinSolsi:Fin 5h1:2 * toSpeciesEquiv S.val 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 1 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 2 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0h2:3 * toSpeciesEquiv S.val 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 3 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0⊢ (toSpeciesEquiv S.val 1 0 - toSpeciesEquiv S.val 2 0) / 2 - toSpeciesEquiv S.val 0 0 = toSpeciesEquiv S.val 1 0
field_simp S:(SMNoGrav 1).LinSolsi:Fin 5h1:2 * toSpeciesEquiv S.val 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 1 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 2 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0h2:3 * toSpeciesEquiv S.val 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 3 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0⊢ toSpeciesEquiv S.val 1 0 - toSpeciesEquiv S.val 2 0 - 2 * toSpeciesEquiv S.val 0 0 = toSpeciesEquiv S.val 1 0 * 2
linear_combination (norm := ring_nf a S:(SMNoGrav 1).LinSolsi:Fin 5h1:2 * toSpeciesEquiv S.val 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 1 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 2 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0h2:3 * toSpeciesEquiv S.val 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 3 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0⊢ -toSpeciesEquiv S.val 1 0 - toSpeciesEquiv S.val 2 0 - toSpeciesEquiv S.val 0 0 * 2 +
toSpeciesEquiv S.val 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ * 2 +
toSpeciesEquiv S.val 1 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 2 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0) -(1 * h1)
simp only [Fin.isValue, Fin.zero_eta, toSpeciesEquiv_apply, Nat.reduceMul] a S:(SMNoGrav 1).LinSolsi:Fin 5h1:2 * toSpeciesEquiv S.val 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 1 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 2 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0h2:3 * toSpeciesEquiv S.val 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 3 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0⊢ -S.val (finProdFinEquiv (1, 0)) - S.val (finProdFinEquiv (2, 0)) - S.val (finProdFinEquiv (0, 0)) * 2 +
S.val (finProdFinEquiv (0, 0)) * 2 +
S.val (finProdFinEquiv (1, 0)) +
S.val (finProdFinEquiv (2, 0)) =
0
ring All goals completed! 🐙
| 2 => S:(SMNoGrav 1).LinSolsi:Fin 5h1:2 * toSpeciesEquiv S.val 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 1 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 2 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0h2:3 * toSpeciesEquiv S.val 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 3 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0⊢ (fun x =>
{ Q' := toSpeciesEquiv S.val 0 0, Y := (toSpeciesEquiv S.val 1 0 - toSpeciesEquiv S.val 2 0) / 2,
E' := toSpeciesEquiv S.val 4 0 }.asCharges
2)
0 =
(toSpecies 2) S.val 0
simp only [asCharges, Fin.isValue, neg_add_rev, toSpecies_apply_eq] S:(SMNoGrav 1).LinSolsi:Fin 5h1:2 * toSpeciesEquiv S.val 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 1 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 2 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0h2:3 * toSpeciesEquiv S.val 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 3 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0⊢ -toSpeciesEquiv S.val 0 0 + -((toSpeciesEquiv S.val 1 0 - toSpeciesEquiv S.val 2 0) / 2) = toSpeciesEquiv S.val 2 0
field_simp S:(SMNoGrav 1).LinSolsi:Fin 5h1:2 * toSpeciesEquiv S.val 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 1 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 2 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0h2:3 * toSpeciesEquiv S.val 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 3 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0⊢ -(toSpeciesEquiv S.val 0 0 * 2) + -(toSpeciesEquiv S.val 1 0 - toSpeciesEquiv S.val 2 0) = toSpeciesEquiv S.val 2 0 * 2
linear_combination (norm := ring_nf a S:(SMNoGrav 1).LinSolsi:Fin 5h1:2 * toSpeciesEquiv S.val 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 1 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 2 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0h2:3 * toSpeciesEquiv S.val 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 3 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0⊢ -(toSpeciesEquiv S.val 0 0 * 2) - toSpeciesEquiv S.val 1 0 - toSpeciesEquiv S.val 2 0 +
toSpeciesEquiv S.val 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ * 2 +
toSpeciesEquiv S.val 1 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 2 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0) -(1 * h1)
simp only [Fin.isValue, Fin.zero_eta, toSpeciesEquiv_apply, Nat.reduceMul] a S:(SMNoGrav 1).LinSolsi:Fin 5h1:2 * toSpeciesEquiv S.val 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 1 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 2 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0h2:3 * toSpeciesEquiv S.val 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 3 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0⊢ -(S.val (finProdFinEquiv (0, 0)) * 2) - S.val (finProdFinEquiv (1, 0)) - S.val (finProdFinEquiv (2, 0)) +
S.val (finProdFinEquiv (0, 0)) * 2 +
S.val (finProdFinEquiv (1, 0)) +
S.val (finProdFinEquiv (2, 0)) =
0
ring All goals completed! 🐙
| 3 => S:(SMNoGrav 1).LinSolsi:Fin 5h1:2 * toSpeciesEquiv S.val 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 1 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 2 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0h2:3 * toSpeciesEquiv S.val 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 3 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0⊢ (fun x =>
{ Q' := toSpeciesEquiv S.val 0 0, Y := (toSpeciesEquiv S.val 1 0 - toSpeciesEquiv S.val 2 0) / 2,
E' := toSpeciesEquiv S.val 4 0 }.asCharges
3)
0 =
(toSpecies 3) S.val 0
simp only [asCharges, Fin.isValue, neg_mul, toSpecies_apply_eq] S:(SMNoGrav 1).LinSolsi:Fin 5h1:2 * toSpeciesEquiv S.val 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 1 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 2 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0h2:3 * toSpeciesEquiv S.val 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 3 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0⊢ -(3 * toSpeciesEquiv S.val 0 0) = toSpeciesEquiv S.val 3 0
field_simp S:(SMNoGrav 1).LinSolsi:Fin 5h1:2 * toSpeciesEquiv S.val 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 1 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 2 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0h2:3 * toSpeciesEquiv S.val 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 3 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0⊢ -(3 * toSpeciesEquiv S.val 0 0) = toSpeciesEquiv S.val 3 0
linear_combination (norm := ring_nf a S:(SMNoGrav 1).LinSolsi:Fin 5h1:2 * toSpeciesEquiv S.val 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 1 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 2 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0h2:3 * toSpeciesEquiv S.val 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 3 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0⊢ -(toSpeciesEquiv S.val 0 0 * 3) + toSpeciesEquiv S.val 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ * 3 +
toSpeciesEquiv S.val 3 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ -
toSpeciesEquiv S.val 3 0 =
0) -(1 * h2)
simp only [Fin.isValue, Fin.zero_eta, toSpeciesEquiv_apply, Nat.reduceMul] a S:(SMNoGrav 1).LinSolsi:Fin 5h1:2 * toSpeciesEquiv S.val 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 1 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 2 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0h2:3 * toSpeciesEquiv S.val 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 3 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0⊢ -(S.val (finProdFinEquiv (0, 0)) * 3) + S.val (finProdFinEquiv (0, 0)) * 3 + S.val (finProdFinEquiv (3, 0)) -
S.val (finProdFinEquiv (3, 0)) =
0
ring All goals completed! 🐙
| 4 => S:(SMNoGrav 1).LinSolsi:Fin 5h1:2 * toSpeciesEquiv S.val 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 1 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 2 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0h2:3 * toSpeciesEquiv S.val 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.val 3 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0⊢ (fun x =>
{ Q' := toSpeciesEquiv S.val 0 0, Y := (toSpeciesEquiv S.val 1 0 - toSpeciesEquiv S.val 2 0) / 2,
E' := toSpeciesEquiv S.val 4 0 }.asCharges
4)
0 =
(toSpecies 4) S.val 0 rfl All goals completed! 🐙
The bijection between the linear parameters and (SMNoGrav 1).LinSols in the special
case when Q and E are both not zero.
def bijectionQEZero : {S : linearParameters // S.Q' ≠ 0 ∧ S.E' ≠ 0} ≃
{S : (SMNoGrav 1).LinSols // Q S.val (0 : Fin 1) ≠ 0 ∧ E S.val (0 : Fin 1) ≠ 0} where
toFun S := ⟨bijection S, S.2⟩
invFun S := ⟨bijection.symm S, S.2⟩
left_inv S := Subtype.ext (bijection.left_inv S.1)
right_inv S := Subtype.ext (bijection.right_inv S.1)
lemma grav (S : linearParameters) :
accGrav S.asCharges = 0 ↔ S.E' = 6 * S.Q' := by S:linearParameters⊢ accGrav S.asCharges = 0 ↔ S.E' = 6 * S.Q'
rw [accGrav S:linearParameters⊢ { toFun := fun S => ∑ i, (6 * Q S i + 3 * U S i + 3 * D S i + 2 * L S i + E S i), map_add' := ⋯, map_smul' := ⋯ }
S.asCharges =
0 ↔
S.E' = 6 * S.Q' S:linearParameters⊢ { toFun := fun S => ∑ i, (6 * Q S i + 3 * U S i + 3 * D S i + 2 * L S i + E S i), map_add' := ⋯, map_smul' := ⋯ }
S.asCharges =
0 ↔
S.E' = 6 * S.Q'] S:linearParameters⊢ { toFun := fun S => ∑ i, (6 * Q S i + 3 * U S i + 3 * D S i + 2 * L S i + E S i), map_add' := ⋯, map_smul' := ⋯ }
S.asCharges =
0 ↔
S.E' = 6 * S.Q'
simp only [toSpecies_apply_eq, Fin.isValue, sum_SMSpecies_numberCharges_one, LinearMap.coe_mk,
AddHom.coe_mk] S:linearParameters⊢ 6 * toSpeciesEquiv S.asCharges 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
3 * toSpeciesEquiv S.asCharges 1 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
3 * toSpeciesEquiv S.asCharges 2 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
2 * toSpeciesEquiv S.asCharges 3 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
toSpeciesEquiv S.asCharges 4 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0 ↔
S.E' = 6 * S.Q'
repeat rw [speciesVal S:linearParameters⊢ 6 * (fun i x => S.asCharges i) 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
3 * (fun i x => S.asCharges i) 1 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
3 * (fun i x => S.asCharges i) 2 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
2 * (fun i x => S.asCharges i) 3 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
(fun i x => S.asCharges i) 4 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0 ↔
S.E' = 6 * S.Q' S:linearParameters⊢ 6 * (fun i x => S.asCharges i) 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
3 * (fun i x => S.asCharges i) 1 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
3 * (fun i x => S.asCharges i) 2 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
2 * (fun i x => S.asCharges i) 3 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
(fun i x => S.asCharges i) 4 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0 ↔
S.E' = 6 * S.Q'] S:linearParameters⊢ 6 * (fun i x => S.asCharges i) 0 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
3 * (fun i x => S.asCharges i) 1 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
3 * (fun i x => S.asCharges i) 2 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
2 * (fun i x => S.asCharges i) 3 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ +
(fun i x => S.asCharges i) 4 ⟨0, sum_SMSpecies_numberCharges_one._proof_1⟩ =
0 ↔
S.E' = 6 * S.Q'
simp only [asCharges, neg_add_rev, neg_mul, mul_neg] S:linearParameters⊢ 6 * S.Q' + 3 * (S.Y - S.Q') + 3 * (-S.Q' + -S.Y) + -(2 * (3 * S.Q')) + S.E' = 0 ↔ S.E' = 6 * S.Q'
ring_nf S:linearParameters⊢ -(S.Q' * 6) + S.E' = 0 ↔ S.E' = S.Q' * 6
rw [add_comm, S:linearParameters⊢ S.E' + -(S.Q' * 6) = 0 ↔ S.E' = S.Q' * 6 S:linearParameters⊢ S.E' = - -(S.Q' * 6) ↔ S.E' = S.Q' * 6 add_eq_zero_iff_eq_neg S:linearParameters⊢ S.E' = - -(S.Q' * 6) ↔ S.E' = S.Q' * 6 S:linearParameters⊢ S.E' = - -(S.Q' * 6) ↔ S.E' = S.Q' * 6] S:linearParameters⊢ S.E' = - -(S.Q' * 6) ↔ S.E' = S.Q' * 6
simp All goals completed! 🐙The parameters for solutions to the linear ACCs with the condition that Q and E are non-zero.
The parameter x.
The parameter v.
The parameter w.
structure linearParametersQENeqZero where x : ℚ v : ℚ w : ℚ
hx : x ≠ 0
hvw : v + w ≠ 0@[ext]
lemma ext {S T : linearParametersQENeqZero} (hx : S.x = T.x) (hv : S.v = T.v)
(hw : S.w = T.w) : S = T := by S:linearParametersQENeqZeroT:linearParametersQENeqZerohx:S.x = T.xhv:S.v = T.vhw:S.w = T.w⊢ S = T
cases' S mk T:linearParametersQENeqZerox✝:ℚv✝:ℚw✝:ℚhx✝:x✝ ≠ 0hvw✝:v✝ + w✝ ≠ 0hx:{ x := x✝, v := v✝, w := w✝, hx := hx✝, hvw := hvw✝ }.x = T.xhv:{ x := x✝, v := v✝, w := w✝, hx := hx✝, hvw := hvw✝ }.v = T.vhw:{ x := x✝, v := v✝, w := w✝, hx := hx✝, hvw := hvw✝ }.w = T.w⊢ { x := x✝, v := v✝, w := w✝, hx := hx✝, hvw := hvw✝ } = T
simp_all only All goals completed! 🐙
A map from linearParametersQENeqZero to linearParameters.
@[simps!]
def toLinearParameters (S : linearParametersQENeqZero) :
{S : linearParameters // S.Q' ≠ 0 ∧ S.E' ≠ 0} :=
⟨⟨S.x, 3 * S.x * (S.v - S.w) / (S.v + S.w), - 6 * S.x / (S.v + S.w)⟩,
by S:linearParametersQENeqZero⊢ { Q' := S.x, Y := 3 * S.x * (S.v - S.w) / (S.v + S.w), E' := -6 * S.x / (S.v + S.w) }.Q' ≠ 0 ∧
{ Q' := S.x, Y := 3 * S.x * (S.v - S.w) / (S.v + S.w), E' := -6 * S.x / (S.v + S.w) }.E' ≠ 0
apply And.intro S.hx S:linearParametersQENeqZero⊢ { Q' := S.x, Y := 3 * S.x * (S.v - S.w) / (S.v + S.w), E' := -6 * S.x / (S.v + S.w) }.E' ≠ 0
simp only [neg_mul, ne_eq, div_eq_zero_iff, neg_eq_zero, mul_eq_zero, OfNat.ofNat_ne_zero,
false_or] S:linearParametersQENeqZero⊢ ¬(S.x = 0 ∨ S.v + S.w = 0)
rw [not_or S:linearParametersQENeqZero⊢ ¬S.x = 0 ∧ ¬S.v + S.w = 0 S:linearParametersQENeqZero⊢ ¬S.x = 0 ∧ ¬S.v + S.w = 0] S:linearParametersQENeqZero⊢ ¬S.x = 0 ∧ ¬S.v + S.w = 0
exact And.intro S.hx S.hvw All goals completed! 🐙⟩
A map from linearParameters to linearParametersQENeqZero in the special case when
Q' and E' of the linear parameters are non-zero.
@[simps!]
def tolinearParametersQNeqZero (S : {S : linearParameters // S.Q' ≠ 0 ∧ S.E' ≠ 0}) :
linearParametersQENeqZero :=
⟨S.1.Q', - (3 * S.1.Q' + S.1.Y) / S.1.E', - (3 * S.1.Q' - S.1.Y)/ S.1.E', S.2.1,
by S:{ S // S.Q' ≠ 0 ∧ S.E' ≠ 0 }⊢ -(3 * (↑S).Q' + (↑S).Y) / (↑S).E' + -(3 * (↑S).Q' - (↑S).Y) / (↑S).E' ≠ 0
simp only [ne_eq, neg_add_rev, neg_sub] S:{ S // S.Q' ≠ 0 ∧ S.E' ≠ 0 }⊢ ¬(-(↑S).Y + -(3 * (↑S).Q')) / (↑S).E' + ((↑S).Y - 3 * (↑S).Q') / (↑S).E' = 0
field_simp S:{ S // S.Q' ≠ 0 ∧ S.E' ≠ 0 }⊢ ¬(-(↑S).Y + -(3 * (↑S).Q') + ((↑S).Y - 3 * (↑S).Q')) / (↑S).E' = 0
ring_nf S:{ S // S.Q' ≠ 0 ∧ S.E' ≠ 0 }⊢ ¬-((↑S).Q' * (↑S).E'⁻¹ * 6) = 0
simp only [neg_eq_zero, mul_eq_zero, OfNat.ofNat_ne_zero, or_false] S:{ S // S.Q' ≠ 0 ∧ S.E' ≠ 0 }⊢ ¬((↑S).Q' = 0 ∨ (↑S).E'⁻¹ = 0)
simpa using S.2 All goals completed! 🐙⟩
A bijection between the type linearParametersQENeqZero and linear parameters
with Q' and E' non-zero.
@[simps!]
def bijectionLinearParameters :
linearParametersQENeqZero ≃ {S : linearParameters // S.Q' ≠ 0 ∧ S.E' ≠ 0} where
toFun := toLinearParameters
invFun := tolinearParametersQNeqZero
left_inv S := by S:linearParametersQENeqZero⊢ tolinearParametersQNeqZero S.toLinearParameters = S
have hvw := S.hvw S:linearParametersQENeqZerohvw:S.v + S.w ≠ 0⊢ tolinearParametersQNeqZero S.toLinearParameters = S
have hQ := S.hx S:linearParametersQENeqZerohvw:S.v + S.w ≠ 0hQ:S.x ≠ 0⊢ tolinearParametersQNeqZero S.toLinearParameters = S
apply linearParametersQENeqZero.ext hx S:linearParametersQENeqZerohvw:S.v + S.w ≠ 0hQ:S.x ≠ 0⊢ (tolinearParametersQNeqZero S.toLinearParameters).x = S.xhv S:linearParametersQENeqZerohvw:S.v + S.w ≠ 0hQ:S.x ≠ 0⊢ (tolinearParametersQNeqZero S.toLinearParameters).v = S.vhw S:linearParametersQENeqZerohvw:S.v + S.w ≠ 0hQ:S.x ≠ 0⊢ (tolinearParametersQNeqZero S.toLinearParameters).w = S.w
· hx S:linearParametersQENeqZerohvw:S.v + S.w ≠ 0hQ:S.x ≠ 0⊢ (tolinearParametersQNeqZero S.toLinearParameters).x = S.x rfl All goals completed! 🐙
· hv S:linearParametersQENeqZerohvw:S.v + S.w ≠ 0hQ:S.x ≠ 0⊢ (tolinearParametersQNeqZero S.toLinearParameters).v = S.v simp only [tolinearParametersQNeqZero_v, toLinearParameters_coe_Y, toLinearParameters_coe_Q',
toLinearParameters_coe_E'] hv S:linearParametersQENeqZerohvw:S.v + S.w ≠ 0hQ:S.x ≠ 0⊢ (-(3 * S.x * (S.v - S.w) / (S.v + S.w)) + -(3 * S.x)) / (-(6 * S.x) / (S.v + S.w)) = S.v
field_simp hv S:linearParametersQENeqZerohvw:S.v + S.w ≠ 0hQ:S.x ≠ 0⊢ -(3 * (-(S.v - S.w) + -(S.v + S.w))) = S.v * 6
ring All goals completed! 🐙
· hw S:linearParametersQENeqZerohvw:S.v + S.w ≠ 0hQ:S.x ≠ 0⊢ (tolinearParametersQNeqZero S.toLinearParameters).w = S.w simp only [tolinearParametersQNeqZero_w, toLinearParameters_coe_Y, toLinearParameters_coe_Q',
toLinearParameters_coe_E'] hw S:linearParametersQENeqZerohvw:S.v + S.w ≠ 0hQ:S.x ≠ 0⊢ (3 * S.x * (S.v - S.w) / (S.v + S.w) - 3 * S.x) / (-(6 * S.x) / (S.v + S.w)) = S.w
field_simp hw S:linearParametersQENeqZerohvw:S.v + S.w ≠ 0hQ:S.x ≠ 0⊢ -(3 * (S.v - S.w - (S.v + S.w))) = S.w * 6
ring All goals completed! 🐙
right_inv S := by S:{ S // S.Q' ≠ 0 ∧ S.E' ≠ 0 }⊢ (tolinearParametersQNeqZero S).toLinearParameters = S
apply Subtype.ext S:{ S // S.Q' ≠ 0 ∧ S.E' ≠ 0 }⊢ ↑(tolinearParametersQNeqZero S).toLinearParameters = ↑S
have hQ := S.2.1 S:{ S // S.Q' ≠ 0 ∧ S.E' ≠ 0 }hQ:(↑S).Q' ≠ 0⊢ ↑(tolinearParametersQNeqZero S).toLinearParameters = ↑S
have hE := S.2.2 S:{ S // S.Q' ≠ 0 ∧ S.E' ≠ 0 }hQ:(↑S).Q' ≠ 0hE:(↑S).E' ≠ 0⊢ ↑(tolinearParametersQNeqZero S).toLinearParameters = ↑S
apply linearParameters.ext hQ S:{ S // S.Q' ≠ 0 ∧ S.E' ≠ 0 }hQ:(↑S).Q' ≠ 0hE:(↑S).E' ≠ 0⊢ (↑(tolinearParametersQNeqZero S).toLinearParameters).Q' = (↑S).Q'hY S:{ S // S.Q' ≠ 0 ∧ S.E' ≠ 0 }hQ:(↑S).Q' ≠ 0hE:(↑S).E' ≠ 0⊢ (↑(tolinearParametersQNeqZero S).toLinearParameters).Y = (↑S).YhE S:{ S // S.Q' ≠ 0 ∧ S.E' ≠ 0 }hQ:(↑S).Q' ≠ 0hE:(↑S).E' ≠ 0⊢ (↑(tolinearParametersQNeqZero S).toLinearParameters).E' = (↑S).E'
· hQ S:{ S // S.Q' ≠ 0 ∧ S.E' ≠ 0 }hQ:(↑S).Q' ≠ 0hE:(↑S).E' ≠ 0⊢ (↑(tolinearParametersQNeqZero S).toLinearParameters).Q' = (↑S).Q' rfl All goals completed! 🐙
· hY S:{ S // S.Q' ≠ 0 ∧ S.E' ≠ 0 }hQ:(↑S).Q' ≠ 0hE:(↑S).E' ≠ 0⊢ (↑(tolinearParametersQNeqZero S).toLinearParameters).Y = (↑S).Y simp only [ne_eq, toLinearParameters_coe_Y, tolinearParametersQNeqZero_x,
tolinearParametersQNeqZero_v, tolinearParametersQNeqZero_w] hY S:{ S // S.Q' ≠ 0 ∧ S.E' ≠ 0 }hQ:(↑S).Q' ≠ 0hE:(↑S).E' ≠ 0⊢ 3 * (↑S).Q' * ((-(↑S).Y + -(3 * (↑S).Q')) / (↑S).E' - ((↑S).Y - 3 * (↑S).Q') / (↑S).E') /
((-(↑S).Y + -(3 * (↑S).Q')) / (↑S).E' + ((↑S).Y - 3 * (↑S).Q') / (↑S).E') =
(↑S).Y
field_simp hY S:{ S // S.Q' ≠ 0 ∧ S.E' ≠ 0 }hQ:(↑S).Q' ≠ 0hE:(↑S).E' ≠ 0⊢ 3 * (↑S).Q' * (-(↑S).Y + -(3 * (↑S).Q') - ((↑S).Y - 3 * (↑S).Q')) /
(-(↑S).Y + -(3 * (↑S).Q') + ((↑S).Y - 3 * (↑S).Q')) =
(↑S).Y
ring_nf hY S:{ S // S.Q' ≠ 0 ∧ S.E' ≠ 0 }hQ:(↑S).Q' ≠ 0hE:(↑S).E' ≠ 0⊢ (↑S).Q' * (↑S).Y * (↑S).Q'⁻¹ = (↑S).Y
field_simp [hQ, hE] All goals completed! 🐙
· hE S:{ S // S.Q' ≠ 0 ∧ S.E' ≠ 0 }hQ:(↑S).Q' ≠ 0hE:(↑S).E' ≠ 0⊢ (↑(tolinearParametersQNeqZero S).toLinearParameters).E' = (↑S).E' simp only [ne_eq, toLinearParameters_coe_E', tolinearParametersQNeqZero_x,
tolinearParametersQNeqZero_v, tolinearParametersQNeqZero_w] hE S:{ S // S.Q' ≠ 0 ∧ S.E' ≠ 0 }hQ:(↑S).Q' ≠ 0hE:(↑S).E' ≠ 0⊢ -(6 * (↑S).Q') / ((-(↑S).Y + -(3 * (↑S).Q')) / (↑S).E' + ((↑S).Y - 3 * (↑S).Q') / (↑S).E') = (↑S).E'
field_simp hE S:{ S // S.Q' ≠ 0 ∧ S.E' ≠ 0 }hQ:(↑S).Q' ≠ 0hE:(↑S).E' ≠ 0⊢ -(6 * (↑S).Q' / (-(↑S).Y + -((↑S).Q' * 3) + ((↑S).Y - (↑S).Q' * 3))) = 1
ring_nf hE S:{ S // S.Q' ≠ 0 ∧ S.E' ≠ 0 }hQ:(↑S).Q' ≠ 0hE:(↑S).E' ≠ 0⊢ (↑S).Q' * (↑S).Q'⁻¹ = 1
field_simp [hQ, hE] All goals completed! 🐙
The bijection between linearParametersQENeqZero and LinSols with Q and E non-zero.
def bijection : linearParametersQENeqZero ≃
{S : (SMNoGrav 1).LinSols // Q S.val (0 : Fin 1) ≠ 0 ∧ E S.val (0 : Fin 1) ≠ 0} :=
bijectionLinearParameters.trans (linearParameters.bijectionQEZero)lemma bijection_coe_val (S : linearParametersQENeqZero) :
(bijection S).1.val = (bijectionLinearParameters S : linearParameters).asCharges := rfl
lemma cubic (S : linearParametersQENeqZero) :
accCube (bijection S).1.val = 0 ↔ S.v ^ 3 + S.w ^ 3 = -1 := by S:linearParametersQENeqZero⊢ accCube (↑(bijection S)).val = 0 ↔ S.v ^ 3 + S.w ^ 3 = -1
rw [bijection_coe_val, S:linearParametersQENeqZero⊢ accCube (↑(bijectionLinearParameters S)).asCharges = 0 ↔ S.v ^ 3 + S.w ^ 3 = -1 S:linearParametersQENeqZero⊢ -54 * (↑(bijectionLinearParameters S)).Q' ^ 3 -
18 * (↑(bijectionLinearParameters S)).Q' * (↑(bijectionLinearParameters S)).Y ^ 2 +
(↑(bijectionLinearParameters S)).E' ^ 3 =
0 ↔
S.v ^ 3 + S.w ^ 3 = -1 linearParameters.cubic S:linearParametersQENeqZero⊢ -54 * (↑(bijectionLinearParameters S)).Q' ^ 3 -
18 * (↑(bijectionLinearParameters S)).Q' * (↑(bijectionLinearParameters S)).Y ^ 2 +
(↑(bijectionLinearParameters S)).E' ^ 3 =
0 ↔
S.v ^ 3 + S.w ^ 3 = -1 S:linearParametersQENeqZero⊢ -54 * (↑(bijectionLinearParameters S)).Q' ^ 3 -
18 * (↑(bijectionLinearParameters S)).Q' * (↑(bijectionLinearParameters S)).Y ^ 2 +
(↑(bijectionLinearParameters S)).E' ^ 3 =
0 ↔
S.v ^ 3 + S.w ^ 3 = -1] S:linearParametersQENeqZero⊢ -54 * (↑(bijectionLinearParameters S)).Q' ^ 3 -
18 * (↑(bijectionLinearParameters S)).Q' * (↑(bijectionLinearParameters S)).Y ^ 2 +
(↑(bijectionLinearParameters S)).E' ^ 3 =
0 ↔
S.v ^ 3 + S.w ^ 3 = -1
simp only [ne_eq, bijectionLinearParameters_apply_coe_Q', neg_mul,
bijectionLinearParameters_apply_coe_Y, div_pow, bijectionLinearParameters_apply_coe_E'] S:linearParametersQENeqZero⊢ -(54 * S.x ^ 3) - 18 * S.x * ((3 * S.x * (S.v - S.w)) ^ 2 / (S.v + S.w) ^ 2) + (-(6 * S.x)) ^ 3 / (S.v + S.w) ^ 3 = 0 ↔
S.v ^ 3 + S.w ^ 3 = -1
have hvw := S.hvw S:linearParametersQENeqZerohvw:S.v + S.w ≠ 0⊢ -(54 * S.x ^ 3) - 18 * S.x * ((3 * S.x * (S.v - S.w)) ^ 2 / (S.v + S.w) ^ 2) + (-(6 * S.x)) ^ 3 / (S.v + S.w) ^ 3 = 0 ↔
S.v ^ 3 + S.w ^ 3 = -1
have hQ := S.hx S:linearParametersQENeqZerohvw:S.v + S.w ≠ 0hQ:S.x ≠ 0⊢ -(54 * S.x ^ 3) - 18 * S.x * ((3 * S.x * (S.v - S.w)) ^ 2 / (S.v + S.w) ^ 2) + (-(6 * S.x)) ^ 3 / (S.v + S.w) ^ 3 = 0 ↔
S.v ^ 3 + S.w ^ 3 = -1
field_simp S:linearParametersQENeqZerohvw:S.v + S.w ≠ 0hQ:S.x ≠ 0⊢ S.x ^ 3 * ((S.v + S.w) * (-(54 * (S.v + S.w) ^ 2) - 18 * 3 ^ 2 * (S.v - S.w) ^ 2) + -6 ^ 3) = (S.v + S.w) ^ 3 * 0 ↔
S.v ^ 3 + S.w ^ 3 = -1
simp [hQ] S:linearParametersQENeqZerohvw:S.v + S.w ≠ 0hQ:S.x ≠ 0⊢ (S.v + S.w) * (-(54 * (S.v + S.w) ^ 2) - 18 * 3 ^ 2 * (S.v - S.w) ^ 2) + -6 ^ 3 = 0 ↔ S.v ^ 3 + S.w ^ 3 = -1
ring_nf S:linearParametersQENeqZerohvw:S.v + S.w ≠ 0hQ:S.x ≠ 0⊢ -216 - S.v ^ 3 * 216 - S.w ^ 3 * 216 = 0 ↔ S.v ^ 3 + S.w ^ 3 = -1
have h1 : -216 - S.v ^ 3 * 216 - S.w ^ 3 * 216 = - 216 *(S.v ^3 + S.w ^3 +1) := by S:linearParametersQENeqZero⊢ accCube (↑(bijection S)).val = 0 ↔ S.v ^ 3 + S.w ^ 3 = -1 S:linearParametersQENeqZerohvw:S.v + S.w ≠ 0hQ:S.x ≠ 0h1:-216 - S.v ^ 3 * 216 - S.w ^ 3 * 216 = -216 * (S.v ^ 3 + S.w ^ 3 + 1)⊢ -216 - S.v ^ 3 * 216 - S.w ^ 3 * 216 = 0 ↔ S.v ^ 3 + S.w ^ 3 = -1
ring S:linearParametersQENeqZerohvw:S.v + S.w ≠ 0hQ:S.x ≠ 0h1:-216 - S.v ^ 3 * 216 - S.w ^ 3 * 216 = -216 * (S.v ^ 3 + S.w ^ 3 + 1)⊢ -216 - S.v ^ 3 * 216 - S.w ^ 3 * 216 = 0 ↔ S.v ^ 3 + S.w ^ 3 = -1 S:linearParametersQENeqZerohvw:S.v + S.w ≠ 0hQ:S.x ≠ 0h1:-216 - S.v ^ 3 * 216 - S.w ^ 3 * 216 = -216 * (S.v ^ 3 + S.w ^ 3 + 1)⊢ -216 - S.v ^ 3 * 216 - S.w ^ 3 * 216 = 0 ↔ S.v ^ 3 + S.w ^ 3 = -1
rw [h1 S:linearParametersQENeqZerohvw:S.v + S.w ≠ 0hQ:S.x ≠ 0h1:-216 - S.v ^ 3 * 216 - S.w ^ 3 * 216 = -216 * (S.v ^ 3 + S.w ^ 3 + 1)⊢ -216 * (S.v ^ 3 + S.w ^ 3 + 1) = 0 ↔ S.v ^ 3 + S.w ^ 3 = -1 S:linearParametersQENeqZerohvw:S.v + S.w ≠ 0hQ:S.x ≠ 0h1:-216 - S.v ^ 3 * 216 - S.w ^ 3 * 216 = -216 * (S.v ^ 3 + S.w ^ 3 + 1)⊢ -216 * (S.v ^ 3 + S.w ^ 3 + 1) = 0 ↔ S.v ^ 3 + S.w ^ 3 = -1] S:linearParametersQENeqZerohvw:S.v + S.w ≠ 0hQ:S.x ≠ 0h1:-216 - S.v ^ 3 * 216 - S.w ^ 3 * 216 = -216 * (S.v ^ 3 + S.w ^ 3 + 1)⊢ -216 * (S.v ^ 3 + S.w ^ 3 + 1) = 0 ↔ S.v ^ 3 + S.w ^ 3 = -1
simp_all S:linearParametersQENeqZerohvw:¬S.v + S.w = 0hQ:¬S.x = 0h1:-216 - S.v ^ 3 * 216 - S.w ^ 3 * 216 = -(216 * (S.v ^ 3 + S.w ^ 3 + 1))⊢ S.v ^ 3 + S.w ^ 3 + 1 = 0 ↔ S.v ^ 3 + S.w ^ 3 = -1
exact add_eq_zero_iff_eq_neg All goals completed! 🐙
lemma cubic_v_or_w_zero (S : linearParametersQENeqZero) (h : accCube (bijection S).1.val = 0) :
S.v = 0 ∨ S.w = 0 := by S:linearParametersQENeqZeroh:accCube (↑(bijection S)).val = 0⊢ S.v = 0 ∨ S.w = 0
rw [S.cubic S:linearParametersQENeqZeroh:S.v ^ 3 + S.w ^ 3 = -1⊢ S.v = 0 ∨ S.w = 0 S:linearParametersQENeqZeroh:S.v ^ 3 + S.w ^ 3 = -1⊢ S.v = 0 ∨ S.w = 0] at h S:linearParametersQENeqZeroh:S.v ^ 3 + S.w ^ 3 = -1⊢ S.v = 0 ∨ S.w = 0
have h1 : (-1)^3 = (-1 : ℚ) := by rfl S:linearParametersQENeqZeroh:S.v ^ 3 + S.w ^ 3 = -1h1:(-1) ^ 3 = -1⊢ S.v = 0 ∨ S.w = 0 S:linearParametersQENeqZeroh:S.v ^ 3 + S.w ^ 3 = -1h1:(-1) ^ 3 = -1⊢ S.v = 0 ∨ S.w = 0
rw [← h1 S:linearParametersQENeqZeroh:S.v ^ 3 + S.w ^ 3 = (-1) ^ 3h1:(-1) ^ 3 = -1⊢ S.v = 0 ∨ S.w = 0 S:linearParametersQENeqZeroh:S.v ^ 3 + S.w ^ 3 = (-1) ^ 3h1:(-1) ^ 3 = -1⊢ S.v = 0 ∨ S.w = 0] at h S:linearParametersQENeqZeroh:S.v ^ 3 + S.w ^ 3 = (-1) ^ 3h1:(-1) ^ 3 = -1⊢ S.v = 0 ∨ S.w = 0
by_contra hn S:linearParametersQENeqZeroh:S.v ^ 3 + S.w ^ 3 = (-1) ^ 3h1:(-1) ^ 3 = -1hn:¬(S.v = 0 ∨ S.w = 0)⊢ False
rw [not_or S:linearParametersQENeqZeroh:S.v ^ 3 + S.w ^ 3 = (-1) ^ 3h1:(-1) ^ 3 = -1hn:¬S.v = 0 ∧ ¬S.w = 0⊢ False S:linearParametersQENeqZeroh:S.v ^ 3 + S.w ^ 3 = (-1) ^ 3h1:(-1) ^ 3 = -1hn:¬S.v = 0 ∧ ¬S.w = 0⊢ False] at hn S:linearParametersQENeqZeroh:S.v ^ 3 + S.w ^ 3 = (-1) ^ 3h1:(-1) ^ 3 = -1hn:¬S.v = 0 ∧ ¬S.w = 0⊢ False
have FLTThree := fermatLastTheoremFor_iff_rat.mp fermatLastTheoremThree S:linearParametersQENeqZeroh:S.v ^ 3 + S.w ^ 3 = (-1) ^ 3h1:(-1) ^ 3 = -1hn:¬S.v = 0 ∧ ¬S.w = 0FLTThree:FermatLastTheoremWith ℚ 3⊢ False
have h2 := FLTThree S.v S.w (-1) hn.1 hn.2 (Ne.symm (ne_of_beq_false (by S:linearParametersQENeqZeroh:S.v ^ 3 + S.w ^ 3 = (-1) ^ 3h1:(-1) ^ 3 = -1hn:¬S.v = 0 ∧ ¬S.w = 0FLTThree:FermatLastTheoremWith ℚ 3⊢ (0 == -1) = false S:linearParametersQENeqZeroh:S.v ^ 3 + S.w ^ 3 = (-1) ^ 3h1:(-1) ^ 3 = -1hn:¬S.v = 0 ∧ ¬S.w = 0FLTThree:FermatLastTheoremWith ℚ 3h2:S.v ^ 3 + S.w ^ 3 ≠ (-1) ^ 3⊢ False rfl All goals completed! 🐙 S:linearParametersQENeqZeroh:S.v ^ 3 + S.w ^ 3 = (-1) ^ 3h1:(-1) ^ 3 = -1hn:¬S.v = 0 ∧ ¬S.w = 0FLTThree:FermatLastTheoremWith ℚ 3h2:S.v ^ 3 + S.w ^ 3 ≠ (-1) ^ 3⊢ False))) S:linearParametersQENeqZeroh:S.v ^ 3 + S.w ^ 3 = (-1) ^ 3h1:(-1) ^ 3 = -1hn:¬S.v = 0 ∧ ¬S.w = 0FLTThree:FermatLastTheoremWith ℚ 3h2:S.v ^ 3 + S.w ^ 3 ≠ (-1) ^ 3⊢ False
exact h2 h All goals completed! 🐙
lemma cubic_v_zero (S : linearParametersQENeqZero) (h : accCube (bijection S).1.val = 0)
(hv : S.v = 0) : S.w = -1 := by S:linearParametersQENeqZeroh:accCube (↑(bijection S)).val = 0hv:S.v = 0⊢ S.w = -1
rw [S.cubic, S:linearParametersQENeqZeroh:S.v ^ 3 + S.w ^ 3 = -1hv:S.v = 0⊢ S.w = -1 S:linearParametersQENeqZeroh:0 ^ 3 + S.w ^ 3 = -1hv:S.v = 0⊢ S.w = -1 hv S:linearParametersQENeqZeroh:0 ^ 3 + S.w ^ 3 = -1hv:S.v = 0⊢ S.w = -1 S:linearParametersQENeqZeroh:0 ^ 3 + S.w ^ 3 = -1hv:S.v = 0⊢ S.w = -1] at h S:linearParametersQENeqZeroh:0 ^ 3 + S.w ^ 3 = -1hv:S.v = 0⊢ S.w = -1
simp only [ne_eq, OfNat.ofNat_ne_zero, not_false_eq_true, zero_pow, zero_add] at h S:linearParametersQENeqZerohv:S.v = 0h:S.w ^ 3 = -1⊢ S.w = -1
have h' : (S.w + 1) * (1 * S.w * S.w + (-1) * S.w + 1) = 0 := by
ring_nf S:linearParametersQENeqZerohv:S.v = 0h:S.w ^ 3 = -1⊢ 1 + S.w ^ 3 = 0 S:linearParametersQENeqZerohv:S.v = 0h:S.w ^ 3 = -1h':(S.w + 1) * (1 * S.w * S.w + -1 * S.w + 1) = 0⊢ S.w = -1
exact add_eq_zero_iff_neg_eq.mpr (id (Eq.symm h)) S:linearParametersQENeqZerohv:S.v = 0h:S.w ^ 3 = -1h':(S.w + 1) * (1 * S.w * S.w + -1 * S.w + 1) = 0⊢ S.w = -1 S:linearParametersQENeqZerohv:S.v = 0h:S.w ^ 3 = -1h':(S.w + 1) * (1 * S.w * S.w + -1 * S.w + 1) = 0⊢ S.w = -1
have h'' : (1 * (S.w * S.w) + (-1) * S.w + 1) ≠ 0 := by
refine quadratic_ne_zero_of_discrim_ne_sq ?_ S.w S:linearParametersQENeqZerohv:S.v = 0h:S.w ^ 3 = -1h':(S.w + 1) * (1 * S.w * S.w + -1 * S.w + 1) = 0⊢ ∀ (s : ℚ), discrim 1 (-1) 1 ≠ s ^ 2 S:linearParametersQENeqZerohv:S.v = 0h:S.w ^ 3 = -1h':(S.w + 1) * (1 * S.w * S.w + -1 * S.w + 1) = 0h'':1 * (S.w * S.w) + -1 * S.w + 1 ≠ 0⊢ S.w = -1
intro s S:linearParametersQENeqZerohv:S.v = 0h:S.w ^ 3 = -1h':(S.w + 1) * (1 * S.w * S.w + -1 * S.w + 1) = 0s:ℚ⊢ discrim 1 (-1) 1 ≠ s ^ 2 S:linearParametersQENeqZerohv:S.v = 0h:S.w ^ 3 = -1h':(S.w + 1) * (1 * S.w * S.w + -1 * S.w + 1) = 0h'':1 * (S.w * S.w) + -1 * S.w + 1 ≠ 0⊢ S.w = -1
by_contra hn S:linearParametersQENeqZerohv:S.v = 0h:S.w ^ 3 = -1h':(S.w + 1) * (1 * S.w * S.w + -1 * S.w + 1) = 0s:ℚhn:discrim 1 (-1) 1 = s ^ 2⊢ False S:linearParametersQENeqZerohv:S.v = 0h:S.w ^ 3 = -1h':(S.w + 1) * (1 * S.w * S.w + -1 * S.w + 1) = 0h'':1 * (S.w * S.w) + -1 * S.w + 1 ≠ 0⊢ S.w = -1
have h : s ^ 2 < 0 := by S:linearParametersQENeqZeroh:accCube (↑(bijection S)).val = 0hv:S.v = 0⊢ S.w = -1 S:linearParametersQENeqZerohv:S.v = 0h✝:S.w ^ 3 = -1h':(S.w + 1) * (1 * S.w * S.w + -1 * S.w + 1) = 0s:ℚhn:discrim 1 (-1) 1 = s ^ 2h:s ^ 2 < 0⊢ False S:linearParametersQENeqZerohv:S.v = 0h:S.w ^ 3 = -1h':(S.w + 1) * (1 * S.w * S.w + -1 * S.w + 1) = 0h'':1 * (S.w * S.w) + -1 * S.w + 1 ≠ 0⊢ S.w = -1
rw [← hn S:linearParametersQENeqZerohv:S.v = 0h:S.w ^ 3 = -1h':(S.w + 1) * (1 * S.w * S.w + -1 * S.w + 1) = 0s:ℚhn:discrim 1 (-1) 1 = s ^ 2⊢ discrim 1 (-1) 1 < 0 S:linearParametersQENeqZerohv:S.v = 0h:S.w ^ 3 = -1h':(S.w + 1) * (1 * S.w * S.w + -1 * S.w + 1) = 0s:ℚhn:discrim 1 (-1) 1 = s ^ 2⊢ discrim 1 (-1) 1 < 0 S:linearParametersQENeqZerohv:S.v = 0h✝:S.w ^ 3 = -1h':(S.w + 1) * (1 * S.w * S.w + -1 * S.w + 1) = 0s:ℚhn:discrim 1 (-1) 1 = s ^ 2h:s ^ 2 < 0⊢ False S:linearParametersQENeqZerohv:S.v = 0h:S.w ^ 3 = -1h':(S.w + 1) * (1 * S.w * S.w + -1 * S.w + 1) = 0h'':1 * (S.w * S.w) + -1 * S.w + 1 ≠ 0⊢ S.w = -1] S:linearParametersQENeqZerohv:S.v = 0h:S.w ^ 3 = -1h':(S.w + 1) * (1 * S.w * S.w + -1 * S.w + 1) = 0s:ℚhn:discrim 1 (-1) 1 = s ^ 2⊢ discrim 1 (-1) 1 < 0 S:linearParametersQENeqZerohv:S.v = 0h✝:S.w ^ 3 = -1h':(S.w + 1) * (1 * S.w * S.w + -1 * S.w + 1) = 0s:ℚhn:discrim 1 (-1) 1 = s ^ 2h:s ^ 2 < 0⊢ False S:linearParametersQENeqZerohv:S.v = 0h:S.w ^ 3 = -1h':(S.w + 1) * (1 * S.w * S.w + -1 * S.w + 1) = 0h'':1 * (S.w * S.w) + -1 * S.w + 1 ≠ 0⊢ S.w = -1
with_unfolding_all rfl S:linearParametersQENeqZerohv:S.v = 0h✝:S.w ^ 3 = -1h':(S.w + 1) * (1 * S.w * S.w + -1 * S.w + 1) = 0s:ℚhn:discrim 1 (-1) 1 = s ^ 2h:s ^ 2 < 0⊢ False S:linearParametersQENeqZerohv:S.v = 0h:S.w ^ 3 = -1h':(S.w + 1) * (1 * S.w * S.w + -1 * S.w + 1) = 0h'':1 * (S.w * S.w) + -1 * S.w + 1 ≠ 0⊢ S.w = -1 S:linearParametersQENeqZerohv:S.v = 0h✝:S.w ^ 3 = -1h':(S.w + 1) * (1 * S.w * S.w + -1 * S.w + 1) = 0s:ℚhn:discrim 1 (-1) 1 = s ^ 2h:s ^ 2 < 0⊢ False S:linearParametersQENeqZerohv:S.v = 0h:S.w ^ 3 = -1h':(S.w + 1) * (1 * S.w * S.w + -1 * S.w + 1) = 0h'':1 * (S.w * S.w) + -1 * S.w + 1 ≠ 0⊢ S.w = -1
nlinarith S:linearParametersQENeqZerohv:S.v = 0h:S.w ^ 3 = -1h':(S.w + 1) * (1 * S.w * S.w + -1 * S.w + 1) = 0h'':1 * (S.w * S.w) + -1 * S.w + 1 ≠ 0⊢ S.w = -1 S:linearParametersQENeqZerohv:S.v = 0h:S.w ^ 3 = -1h':(S.w + 1) * (1 * S.w * S.w + -1 * S.w + 1) = 0h'':1 * (S.w * S.w) + -1 * S.w + 1 ≠ 0⊢ S.w = -1
simp_all S:linearParametersQENeqZerohv:S.v = 0h:S.w ^ 3 = -1h':S.w + 1 = 0h'':¬S.w * S.w + -S.w + 1 = 0⊢ S.w = -1
exact eq_neg_of_add_eq_zero_left h' All goals completed! 🐙
lemma cube_w_zero (S : linearParametersQENeqZero) (h : accCube (bijection S).1.val = 0)
(hw : S.w = 0) : S.v = -1 := by S:linearParametersQENeqZeroh:accCube (↑(bijection S)).val = 0hw:S.w = 0⊢ S.v = -1
rw [S.cubic, S:linearParametersQENeqZeroh:S.v ^ 3 + S.w ^ 3 = -1hw:S.w = 0⊢ S.v = -1 S:linearParametersQENeqZeroh:S.v ^ 3 + 0 ^ 3 = -1hw:S.w = 0⊢ S.v = -1 hw S:linearParametersQENeqZeroh:S.v ^ 3 + 0 ^ 3 = -1hw:S.w = 0⊢ S.v = -1 S:linearParametersQENeqZeroh:S.v ^ 3 + 0 ^ 3 = -1hw:S.w = 0⊢ S.v = -1] at h S:linearParametersQENeqZeroh:S.v ^ 3 + 0 ^ 3 = -1hw:S.w = 0⊢ S.v = -1
simp only [ne_eq, OfNat.ofNat_ne_zero, not_false_eq_true, zero_pow, add_zero] at h S:linearParametersQENeqZerohw:S.w = 0h:S.v ^ 3 = -1⊢ S.v = -1
have h' : (S.v + 1) * (1 * S.v * S.v + (-1) * S.v + 1) = 0 := by
ring_nf S:linearParametersQENeqZerohw:S.w = 0h:S.v ^ 3 = -1⊢ 1 + S.v ^ 3 = 0 S:linearParametersQENeqZerohw:S.w = 0h:S.v ^ 3 = -1h':(S.v + 1) * (1 * S.v * S.v + -1 * S.v + 1) = 0⊢ S.v = -1
exact add_eq_zero_iff_neg_eq.mpr (id (Eq.symm h)) S:linearParametersQENeqZerohw:S.w = 0h:S.v ^ 3 = -1h':(S.v + 1) * (1 * S.v * S.v + -1 * S.v + 1) = 0⊢ S.v = -1 S:linearParametersQENeqZerohw:S.w = 0h:S.v ^ 3 = -1h':(S.v + 1) * (1 * S.v * S.v + -1 * S.v + 1) = 0⊢ S.v = -1
have h'' : (1 * (S.v * S.v) + (-1) * S.v + 1) ≠ 0 := by
refine quadratic_ne_zero_of_discrim_ne_sq ?_ S.v S:linearParametersQENeqZerohw:S.w = 0h:S.v ^ 3 = -1h':(S.v + 1) * (1 * S.v * S.v + -1 * S.v + 1) = 0⊢ ∀ (s : ℚ), discrim 1 (-1) 1 ≠ s ^ 2 S:linearParametersQENeqZerohw:S.w = 0h:S.v ^ 3 = -1h':(S.v + 1) * (1 * S.v * S.v + -1 * S.v + 1) = 0h'':1 * (S.v * S.v) + -1 * S.v + 1 ≠ 0⊢ S.v = -1
intro s S:linearParametersQENeqZerohw:S.w = 0h:S.v ^ 3 = -1h':(S.v + 1) * (1 * S.v * S.v + -1 * S.v + 1) = 0s:ℚ⊢ discrim 1 (-1) 1 ≠ s ^ 2 S:linearParametersQENeqZerohw:S.w = 0h:S.v ^ 3 = -1h':(S.v + 1) * (1 * S.v * S.v + -1 * S.v + 1) = 0h'':1 * (S.v * S.v) + -1 * S.v + 1 ≠ 0⊢ S.v = -1
by_contra hn S:linearParametersQENeqZerohw:S.w = 0h:S.v ^ 3 = -1h':(S.v + 1) * (1 * S.v * S.v + -1 * S.v + 1) = 0s:ℚhn:discrim 1 (-1) 1 = s ^ 2⊢ False S:linearParametersQENeqZerohw:S.w = 0h:S.v ^ 3 = -1h':(S.v + 1) * (1 * S.v * S.v + -1 * S.v + 1) = 0h'':1 * (S.v * S.v) + -1 * S.v + 1 ≠ 0⊢ S.v = -1
have h : s ^ 2 < 0 := by S:linearParametersQENeqZeroh:accCube (↑(bijection S)).val = 0hw:S.w = 0⊢ S.v = -1 S:linearParametersQENeqZerohw:S.w = 0h✝:S.v ^ 3 = -1h':(S.v + 1) * (1 * S.v * S.v + -1 * S.v + 1) = 0s:ℚhn:discrim 1 (-1) 1 = s ^ 2h:s ^ 2 < 0⊢ False S:linearParametersQENeqZerohw:S.w = 0h:S.v ^ 3 = -1h':(S.v + 1) * (1 * S.v * S.v + -1 * S.v + 1) = 0h'':1 * (S.v * S.v) + -1 * S.v + 1 ≠ 0⊢ S.v = -1
rw [← hn S:linearParametersQENeqZerohw:S.w = 0h:S.v ^ 3 = -1h':(S.v + 1) * (1 * S.v * S.v + -1 * S.v + 1) = 0s:ℚhn:discrim 1 (-1) 1 = s ^ 2⊢ discrim 1 (-1) 1 < 0 S:linearParametersQENeqZerohw:S.w = 0h:S.v ^ 3 = -1h':(S.v + 1) * (1 * S.v * S.v + -1 * S.v + 1) = 0s:ℚhn:discrim 1 (-1) 1 = s ^ 2⊢ discrim 1 (-1) 1 < 0 S:linearParametersQENeqZerohw:S.w = 0h✝:S.v ^ 3 = -1h':(S.v + 1) * (1 * S.v * S.v + -1 * S.v + 1) = 0s:ℚhn:discrim 1 (-1) 1 = s ^ 2h:s ^ 2 < 0⊢ False S:linearParametersQENeqZerohw:S.w = 0h:S.v ^ 3 = -1h':(S.v + 1) * (1 * S.v * S.v + -1 * S.v + 1) = 0h'':1 * (S.v * S.v) + -1 * S.v + 1 ≠ 0⊢ S.v = -1] S:linearParametersQENeqZerohw:S.w = 0h:S.v ^ 3 = -1h':(S.v + 1) * (1 * S.v * S.v + -1 * S.v + 1) = 0s:ℚhn:discrim 1 (-1) 1 = s ^ 2⊢ discrim 1 (-1) 1 < 0 S:linearParametersQENeqZerohw:S.w = 0h✝:S.v ^ 3 = -1h':(S.v + 1) * (1 * S.v * S.v + -1 * S.v + 1) = 0s:ℚhn:discrim 1 (-1) 1 = s ^ 2h:s ^ 2 < 0⊢ False S:linearParametersQENeqZerohw:S.w = 0h:S.v ^ 3 = -1h':(S.v + 1) * (1 * S.v * S.v + -1 * S.v + 1) = 0h'':1 * (S.v * S.v) + -1 * S.v + 1 ≠ 0⊢ S.v = -1
with_unfolding_all rfl S:linearParametersQENeqZerohw:S.w = 0h✝:S.v ^ 3 = -1h':(S.v + 1) * (1 * S.v * S.v + -1 * S.v + 1) = 0s:ℚhn:discrim 1 (-1) 1 = s ^ 2h:s ^ 2 < 0⊢ False S:linearParametersQENeqZerohw:S.w = 0h:S.v ^ 3 = -1h':(S.v + 1) * (1 * S.v * S.v + -1 * S.v + 1) = 0h'':1 * (S.v * S.v) + -1 * S.v + 1 ≠ 0⊢ S.v = -1 S:linearParametersQENeqZerohw:S.w = 0h✝:S.v ^ 3 = -1h':(S.v + 1) * (1 * S.v * S.v + -1 * S.v + 1) = 0s:ℚhn:discrim 1 (-1) 1 = s ^ 2h:s ^ 2 < 0⊢ False S:linearParametersQENeqZerohw:S.w = 0h:S.v ^ 3 = -1h':(S.v + 1) * (1 * S.v * S.v + -1 * S.v + 1) = 0h'':1 * (S.v * S.v) + -1 * S.v + 1 ≠ 0⊢ S.v = -1
nlinarith S:linearParametersQENeqZerohw:S.w = 0h:S.v ^ 3 = -1h':(S.v + 1) * (1 * S.v * S.v + -1 * S.v + 1) = 0h'':1 * (S.v * S.v) + -1 * S.v + 1 ≠ 0⊢ S.v = -1 S:linearParametersQENeqZerohw:S.w = 0h:S.v ^ 3 = -1h':(S.v + 1) * (1 * S.v * S.v + -1 * S.v + 1) = 0h'':1 * (S.v * S.v) + -1 * S.v + 1 ≠ 0⊢ S.v = -1
simp_all only [one_mul, neg_mul, mul_eq_zero, ne_eq, or_false] S:linearParametersQENeqZerohw:S.w = 0h:S.v ^ 3 = -1h':S.v + 1 = 0h'':¬S.v * S.v + -S.v + 1 = 0⊢ S.v = -1
exact eq_neg_of_add_eq_zero_left h' All goals completed! 🐙lemma cube_w_v (S : linearParametersQENeqZero) (h : accCube (bijection S).1.val = 0) :
(S.v = -1 ∧ S.w = 0) ∨ (S.v = 0 ∧ S.w = -1) := by S:linearParametersQENeqZeroh:accCube (↑(bijection S)).val = 0⊢ S.v = -1 ∧ S.w = 0 ∨ S.v = 0 ∧ S.w = -1
have h' := cubic_v_or_w_zero S h S:linearParametersQENeqZeroh:accCube (↑(bijection S)).val = 0h':S.v = 0 ∨ S.w = 0⊢ S.v = -1 ∧ S.w = 0 ∨ S.v = 0 ∧ S.w = -1
cases' h' with hx hx inl S:linearParametersQENeqZeroh:accCube (↑(bijection S)).val = 0hx:S.v = 0⊢ S.v = -1 ∧ S.w = 0 ∨ S.v = 0 ∧ S.w = -1inr S:linearParametersQENeqZeroh:accCube (↑(bijection S)).val = 0hx:S.w = 0⊢ S.v = -1 ∧ S.w = 0 ∨ S.v = 0 ∧ S.w = -1
· inl S:linearParametersQENeqZeroh:accCube (↑(bijection S)).val = 0hx:S.v = 0⊢ S.v = -1 ∧ S.w = 0 ∨ S.v = 0 ∧ S.w = -1 simpa [hx] using cubic_v_zero S h hx All goals completed! 🐙
· inr S:linearParametersQENeqZeroh:accCube (↑(bijection S)).val = 0hx:S.w = 0⊢ S.v = -1 ∧ S.w = 0 ∨ S.v = 0 ∧ S.w = -1 simpa [hx] using cube_w_zero S h hx All goals completed! 🐙
lemma grav (S : linearParametersQENeqZero) : accGrav (bijection S).1.val = 0 ↔ S.v + S.w = -1 := by S:linearParametersQENeqZero⊢ accGrav (↑(bijection S)).val = 0 ↔ S.v + S.w = -1
rw [bijection_coe_val, S:linearParametersQENeqZero⊢ accGrav (↑(bijectionLinearParameters S)).asCharges = 0 ↔ S.v + S.w = -1 S:linearParametersQENeqZero⊢ (↑(bijectionLinearParameters S)).E' = 6 * (↑(bijectionLinearParameters S)).Q' ↔ S.v + S.w = -1 linearParameters.grav S:linearParametersQENeqZero⊢ (↑(bijectionLinearParameters S)).E' = 6 * (↑(bijectionLinearParameters S)).Q' ↔ S.v + S.w = -1 S:linearParametersQENeqZero⊢ (↑(bijectionLinearParameters S)).E' = 6 * (↑(bijectionLinearParameters S)).Q' ↔ S.v + S.w = -1] S:linearParametersQENeqZero⊢ (↑(bijectionLinearParameters S)).E' = 6 * (↑(bijectionLinearParameters S)).Q' ↔ S.v + S.w = -1
have hvw := S.hvw S:linearParametersQENeqZerohvw:S.v + S.w ≠ 0⊢ (↑(bijectionLinearParameters S)).E' = 6 * (↑(bijectionLinearParameters S)).Q' ↔ S.v + S.w = -1
have hQ := S.hx S:linearParametersQENeqZerohvw:S.v + S.w ≠ 0hQ:S.x ≠ 0⊢ (↑(bijectionLinearParameters S)).E' = 6 * (↑(bijectionLinearParameters S)).Q' ↔ S.v + S.w = -1
field_simp S:linearParametersQENeqZerohvw:S.v + S.w ≠ 0hQ:S.x ≠ 0⊢ (↑(bijectionLinearParameters S)).E' = 6 * (↑(bijectionLinearParameters S)).Q' ↔ S.v + S.w = -1
refine Iff.intro (fun h => ?_) (fun h => ?_) refine_1 S:linearParametersQENeqZerohvw:S.v + S.w ≠ 0hQ:S.x ≠ 0h:(↑(bijectionLinearParameters S)).E' = 6 * (↑(bijectionLinearParameters S)).Q'⊢ S.v + S.w = -1refine_2 S:linearParametersQENeqZerohvw:S.v + S.w ≠ 0hQ:S.x ≠ 0h:S.v + S.w = -1⊢ (↑(bijectionLinearParameters S)).E' = 6 * (↑(bijectionLinearParameters S)).Q'
· refine_1 S:linearParametersQENeqZerohvw:S.v + S.w ≠ 0hQ:S.x ≠ 0h:(↑(bijectionLinearParameters S)).E' = 6 * (↑(bijectionLinearParameters S)).Q'⊢ S.v + S.w = -1 apply (mul_right_inj' hQ).mp refine_1 S:linearParametersQENeqZerohvw:S.v + S.w ≠ 0hQ:S.x ≠ 0h:(↑(bijectionLinearParameters S)).E' = 6 * (↑(bijectionLinearParameters S)).Q'⊢ S.x * (S.v + S.w) = S.x * -1
simp at h refine_1 S:linearParametersQENeqZerohvw:S.v + S.w ≠ 0hQ:S.x ≠ 0h:-(6 * S.x) / (S.v + S.w) = 6 * S.x⊢ S.x * (S.v + S.w) = S.x * -1
field_simp at h refine_1 S:linearParametersQENeqZerohvw:S.v + S.w ≠ 0hQ:S.x ≠ 0h:-1 = S.v + S.w⊢ S.x * (S.v + S.w) = S.x * -1
rw [← h refine_1 S:linearParametersQENeqZerohvw:S.v + S.w ≠ 0hQ:S.x ≠ 0h:-1 = S.v + S.w⊢ S.x * -1 = S.x * -1 All goals completed! 🐙] All goals completed! 🐙
· refine_2 S:linearParametersQENeqZerohvw:S.v + S.w ≠ 0hQ:S.x ≠ 0h:S.v + S.w = -1⊢ (↑(bijectionLinearParameters S)).E' = 6 * (↑(bijectionLinearParameters S)).Q' simp [h] All goals completed! 🐙
lemma grav_of_cubic (S : linearParametersQENeqZero) (h : accCube (bijection S).1.val = 0) :
accGrav (bijection S).1.val = 0 := by S:linearParametersQENeqZeroh:accCube (↑(bijection S)).val = 0⊢ accGrav (↑(bijection S)).val = 0
rw [grav S:linearParametersQENeqZeroh:accCube (↑(bijection S)).val = 0⊢ S.v + S.w = -1 S:linearParametersQENeqZeroh:accCube (↑(bijection S)).val = 0⊢ S.v + S.w = -1] S:linearParametersQENeqZeroh:accCube (↑(bijection S)).val = 0⊢ S.v + S.w = -1
have h' := cube_w_v S h S:linearParametersQENeqZeroh:accCube (↑(bijection S)).val = 0h':S.v = -1 ∧ S.w = 0 ∨ S.v = 0 ∧ S.w = -1⊢ S.v + S.w = -1
cases' h' with h h inl S:linearParametersQENeqZeroh✝:accCube (↑(bijection S)).val = 0h:S.v = -1 ∧ S.w = 0⊢ S.v + S.w = -1inr S:linearParametersQENeqZeroh✝:accCube (↑(bijection S)).val = 0h:S.v = 0 ∧ S.w = -1⊢ S.v + S.w = -1
· inl S:linearParametersQENeqZeroh✝:accCube (↑(bijection S)).val = 0h:S.v = -1 ∧ S.w = 0⊢ S.v + S.w = -1 rw [h.1, inl S:linearParametersQENeqZeroh✝:accCube (↑(bijection S)).val = 0h:S.v = -1 ∧ S.w = 0⊢ -1 + S.w = -1 inl S:linearParametersQENeqZeroh✝:accCube (↑(bijection S)).val = 0h:S.v = -1 ∧ S.w = 0⊢ -1 + 0 = -1 h.2 inl S:linearParametersQENeqZeroh✝:accCube (↑(bijection S)).val = 0h:S.v = -1 ∧ S.w = 0⊢ -1 + 0 = -1inl S:linearParametersQENeqZeroh✝:accCube (↑(bijection S)).val = 0h:S.v = -1 ∧ S.w = 0⊢ -1 + 0 = -1]inl S:linearParametersQENeqZeroh✝:accCube (↑(bijection S)).val = 0h:S.v = -1 ∧ S.w = 0⊢ -1 + 0 = -1
exact Rat.add_zero (-1) All goals completed! 🐙
· inr S:linearParametersQENeqZeroh✝:accCube (↑(bijection S)).val = 0h:S.v = 0 ∧ S.w = -1⊢ S.v + S.w = -1 rw [h.1, inr S:linearParametersQENeqZeroh✝:accCube (↑(bijection S)).val = 0h:S.v = 0 ∧ S.w = -1⊢ 0 + S.w = -1 inr S:linearParametersQENeqZeroh✝:accCube (↑(bijection S)).val = 0h:S.v = 0 ∧ S.w = -1⊢ 0 + -1 = -1 h.2 inr S:linearParametersQENeqZeroh✝:accCube (↑(bijection S)).val = 0h:S.v = 0 ∧ S.w = -1⊢ 0 + -1 = -1inr S:linearParametersQENeqZeroh✝:accCube (↑(bijection S)).val = 0h:S.v = 0 ∧ S.w = -1⊢ 0 + -1 = -1]inr S:linearParametersQENeqZeroh✝:accCube (↑(bijection S)).val = 0h:S.v = 0 ∧ S.w = -1⊢ 0 + -1 = -1
exact Rat.zero_add (-1) All goals completed! 🐙