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.SuperSymmetry.MSSMNu.AnomalyCancellation.OrthogY3B3.PlaneWithY3B3
From charges perpendicular to Y₃ and B₃ to solutions
The main aim of this file is to take charge assignments perpendicular to Y₃ and B₃ and
produce solutions to the anomaly cancellation conditions. In this regard we will define
a surjective map toSol from MSSMACC.AnomalyFreePerp × ℚ × ℚ × ℚ to MSSMACC.Sols.
To define toSols we define a series of other maps from various subtypes of
MSSMACC.AnomalyFreePerp × ℚ × ℚ × ℚ to MSSMACC.Sols. And show that these maps form a
surjection on certain subtypes of MSSMACC.Sols.
References
The main reference for the material in this file is:
https://arxiv.org/pdf/2107.07926.pdf
@[expose] public sectionA condition for the quad line in the plane spanned by R, Y₃ and B₃ to sit in the cubic, and for the cube line to sit in the quad.
def LineEqProp (R : MSSMACC.AnomalyFreePerp) : Prop := α₁ R = 0 ∧ α₂ R = 0 ∧ α₃ R = 0
The proposition LineEqProp is decidable.
instance (R : MSSMACC.AnomalyFreePerp) : Decidable (LineEqProp R) := instDecidableAnd
A condition on Sols which we will show in linEqPropSol_iff_proj_linEqProp that is equivalent
to the condition that the proj of the solution satisfies lineEqProp.
def LineEqPropSol (R : MSSMACC.Sols) : Prop :=
cubeTriLin R.val R.val Y₃.val * quadBiLin B₃.val R.val -
cubeTriLin R.val R.val B₃.val * quadBiLin Y₃.val R.val = 0
A rational which appears in toSolNS acting on sols, and which being zero is
equivalent to satisfying lineEqPropSol.
T:MSSMACC.Sols⊢ ((cubeTriLin T.val) T.val) Y₃.val * (quadBiLin B₃.val) T.val -
((cubeTriLin T.val) T.val) B₃.val * (quadBiLin Y₃.val) T.val =
0 ↔
1259712 *
(((cubeTriLin T.val) T.val) Y₃.val * (quadBiLin B₃.val) T.val -
((cubeTriLin T.val) T.val) B₃.val * (quadBiLin Y₃.val) T.val) =
0
simp All goals completed! 🐙
lemma linEqPropSol_iff_proj_linEqProp (R : MSSMACC.Sols) :
LineEqPropSol R ↔ LineEqProp (proj R.1.1) := by R:MSSMACC.Sols⊢ LineEqPropSol R ↔ (proj R.toLinSols).LineEqProp
rw [lineEqPropSol_iff_lineEqCoeff_zero, R:MSSMACC.Sols⊢ lineEqCoeff R = 0 ↔ (proj R.toLinSols).LineEqProp R:MSSMACC.Sols⊢ (dot Y₃.val) B₃.val * α₃ (proj R.toLinSols) = 0 ↔
α₁ (proj R.toLinSols) = 0 ∧ α₂ (proj R.toLinSols) = 0 ∧ α₃ (proj R.toLinSols) = 0 lineEqCoeff, R:MSSMACC.Sols⊢ (dot Y₃.val) B₃.val * α₃ (proj R.toLinSols) = 0 ↔ (proj R.toLinSols).LineEqProp R:MSSMACC.Sols⊢ (dot Y₃.val) B₃.val * α₃ (proj R.toLinSols) = 0 ↔
α₁ (proj R.toLinSols) = 0 ∧ α₂ (proj R.toLinSols) = 0 ∧ α₃ (proj R.toLinSols) = 0 LineEqProp R:MSSMACC.Sols⊢ (dot Y₃.val) B₃.val * α₃ (proj R.toLinSols) = 0 ↔
α₁ (proj R.toLinSols) = 0 ∧ α₂ (proj R.toLinSols) = 0 ∧ α₃ (proj R.toLinSols) = 0 R:MSSMACC.Sols⊢ (dot Y₃.val) B₃.val * α₃ (proj R.toLinSols) = 0 ↔
α₁ (proj R.toLinSols) = 0 ∧ α₂ (proj R.toLinSols) = 0 ∧ α₃ (proj R.toLinSols) = 0] R:MSSMACC.Sols⊢ (dot Y₃.val) B₃.val * α₃ (proj R.toLinSols) = 0 ↔
α₁ (proj R.toLinSols) = 0 ∧ α₂ (proj R.toLinSols) = 0 ∧ α₃ (proj R.toLinSols) = 0
refine Iff.intro (fun h => ?_) (fun h => ?_) refine_1 R:MSSMACC.Solsh:(dot Y₃.val) B₃.val * α₃ (proj R.toLinSols) = 0⊢ α₁ (proj R.toLinSols) = 0 ∧ α₂ (proj R.toLinSols) = 0 ∧ α₃ (proj R.toLinSols) = 0refine_2 R:MSSMACC.Solsh:α₁ (proj R.toLinSols) = 0 ∧ α₂ (proj R.toLinSols) = 0 ∧ α₃ (proj R.toLinSols) = 0⊢ (dot Y₃.val) B₃.val * α₃ (proj R.toLinSols) = 0
· refine_1 R:MSSMACC.Solsh:(dot Y₃.val) B₃.val * α₃ (proj R.toLinSols) = 0⊢ α₁ (proj R.toLinSols) = 0 ∧ α₂ (proj R.toLinSols) = 0 ∧ α₃ (proj R.toLinSols) = 0 rw [show dot Y₃.val B₃.val = 108 by R:MSSMACC.Sols⊢ LineEqPropSol R ↔ (proj R.toLinSols).LineEqProp refine_1 R:MSSMACC.Solsh:108 * α₃ (proj R.toLinSols) = 0⊢ α₁ (proj R.toLinSols) = 0 ∧ α₂ (proj R.toLinSols) = 0 ∧ α₃ (proj R.toLinSols) = 0 with_unfolding_all rfl All goals completed! 🐙refine_1 R:MSSMACC.Solsh:108 * α₃ (proj R.toLinSols) = 0⊢ α₁ (proj R.toLinSols) = 0 ∧ α₂ (proj R.toLinSols) = 0 ∧ α₃ (proj R.toLinSols) = 0] at hrefine_1 R:MSSMACC.Solsh:108 * α₃ (proj R.toLinSols) = 0⊢ α₁ (proj R.toLinSols) = 0 ∧ α₂ (proj R.toLinSols) = 0 ∧ α₃ (proj R.toLinSols) = 0
simp only [mul_eq_zero, OfNat.ofNat_ne_zero, false_or] at h refine_1 R:MSSMACC.Solsh:α₃ (proj R.toLinSols) = 0⊢ α₁ (proj R.toLinSols) = 0 ∧ α₂ (proj R.toLinSols) = 0 ∧ α₃ (proj R.toLinSols) = 0
rw [α₁_proj, refine_1 R:MSSMACC.Solsh:α₃ (proj R.toLinSols) = 0⊢ -α₃ (proj R.toLinSols) * ((dot B₃.val) R.val - (dot Y₃.val) R.val) = 0 ∧
α₂ (proj R.toLinSols) = 0 ∧ α₃ (proj R.toLinSols) = 0 refine_1 R:MSSMACC.Solsh:α₃ (proj R.toLinSols) = 0⊢ -0 * ((dot B₃.val) R.val - (dot Y₃.val) R.val) = 0 ∧ -0 * ((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) = 0 ∧ 0 = 0 α₂_proj, refine_1 R:MSSMACC.Solsh:α₃ (proj R.toLinSols) = 0⊢ -α₃ (proj R.toLinSols) * ((dot B₃.val) R.val - (dot Y₃.val) R.val) = 0 ∧
-α₃ (proj R.toLinSols) * ((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) = 0 ∧ α₃ (proj R.toLinSols) = 0refine_1 R:MSSMACC.Solsh:α₃ (proj R.toLinSols) = 0⊢ -0 * ((dot B₃.val) R.val - (dot Y₃.val) R.val) = 0 ∧ -0 * ((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) = 0 ∧ 0 = 0 h refine_1 R:MSSMACC.Solsh:α₃ (proj R.toLinSols) = 0⊢ -0 * ((dot B₃.val) R.val - (dot Y₃.val) R.val) = 0 ∧ -0 * ((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) = 0 ∧ 0 = 0refine_1 R:MSSMACC.Solsh:α₃ (proj R.toLinSols) = 0⊢ -0 * ((dot B₃.val) R.val - (dot Y₃.val) R.val) = 0 ∧ -0 * ((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) = 0 ∧ 0 = 0]refine_1 R:MSSMACC.Solsh:α₃ (proj R.toLinSols) = 0⊢ -0 * ((dot B₃.val) R.val - (dot Y₃.val) R.val) = 0 ∧ -0 * ((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) = 0 ∧ 0 = 0
simp only [neg_zero, zero_mul, and_self] All goals completed! 🐙
· refine_2 R:MSSMACC.Solsh:α₁ (proj R.toLinSols) = 0 ∧ α₂ (proj R.toLinSols) = 0 ∧ α₃ (proj R.toLinSols) = 0⊢ (dot Y₃.val) B₃.val * α₃ (proj R.toLinSols) = 0 rw [h.2.2 refine_2 R:MSSMACC.Solsh:α₁ (proj R.toLinSols) = 0 ∧ α₂ (proj R.toLinSols) = 0 ∧ α₃ (proj R.toLinSols) = 0⊢ (dot Y₃.val) B₃.val * 0 = 0 refine_2 R:MSSMACC.Solsh:α₁ (proj R.toLinSols) = 0 ∧ α₂ (proj R.toLinSols) = 0 ∧ α₃ (proj R.toLinSols) = 0⊢ (dot Y₃.val) B₃.val * 0 = 0]refine_2 R:MSSMACC.Solsh:α₁ (proj R.toLinSols) = 0 ∧ α₂ (proj R.toLinSols) = 0 ∧ α₃ (proj R.toLinSols) = 0⊢ (dot Y₃.val) B₃.val * 0 = 0
exact Rat.mul_zero ((dot Y₃.val) B₃.val) All goals completed! 🐙
A condition which is satisfied if the plane spanned by R, Y₃ and B₃ lies
entirely in the quadratic surface.
def InQuadProp (R : MSSMACC.AnomalyFreePerp) : Prop :=
quadBiLin R.val R.val = 0 ∧ quadBiLin Y₃.val R.val = 0 ∧ quadBiLin B₃.val R.val = 0
The proposition InQuadProp is decidable.
instance (R : MSSMACC.AnomalyFreePerp) : Decidable (InQuadProp R) := instDecidableAnd
A condition which is satisfied if the plane spanned by the solutions R, Y₃ and B₃
lies entirely in the quadratic surface.
def InQuadSolProp (R : MSSMACC.Sols) : Prop :=
quadBiLin Y₃.val R.val = 0 ∧ quadBiLin B₃.val R.val = 0
A rational which has two properties. It is zero for a solution T if and only if
that solution satisfies inQuadSolProp. It appears in the definition of inQuadProj.
def quadCoeff (T : MSSMACC.Sols) : ℚ :=
2 * dot Y₃.val B₃.val ^ 2 *
(quadBiLin Y₃.val T.val ^ 2 + quadBiLin B₃.val T.val ^ 2)
lemma inQuadSolProp_iff_quadCoeff_zero (T : MSSMACC.Sols) : InQuadSolProp T ↔ quadCoeff T = 0 := by T:MSSMACC.Sols⊢ InQuadSolProp T ↔ quadCoeff T = 0
refine Iff.intro (fun h => ?_) (fun h => ?_) refine_1 T:MSSMACC.Solsh:InQuadSolProp T⊢ quadCoeff T = 0refine_2 T:MSSMACC.Solsh:quadCoeff T = 0⊢ InQuadSolProp T
· refine_1 T:MSSMACC.Solsh:InQuadSolProp T⊢ quadCoeff T = 0 rw [quadCoeff, refine_1 T:MSSMACC.Solsh:InQuadSolProp T⊢ 2 * (dot Y₃.val) B₃.val ^ 2 * ((quadBiLin Y₃.val) T.val ^ 2 + (quadBiLin B₃.val) T.val ^ 2) = 0 refine_1 T:MSSMACC.Solsh:InQuadSolProp T⊢ 2 * (dot Y₃.val) B₃.val ^ 2 * (0 ^ 2 + 0 ^ 2) = 0 h.1, refine_1 T:MSSMACC.Solsh:InQuadSolProp T⊢ 2 * (dot Y₃.val) B₃.val ^ 2 * (0 ^ 2 + (quadBiLin B₃.val) T.val ^ 2) = 0 refine_1 T:MSSMACC.Solsh:InQuadSolProp T⊢ 2 * (dot Y₃.val) B₃.val ^ 2 * (0 ^ 2 + 0 ^ 2) = 0 h.2 refine_1 T:MSSMACC.Solsh:InQuadSolProp T⊢ 2 * (dot Y₃.val) B₃.val ^ 2 * (0 ^ 2 + 0 ^ 2) = 0refine_1 T:MSSMACC.Solsh:InQuadSolProp T⊢ 2 * (dot Y₃.val) B₃.val ^ 2 * (0 ^ 2 + 0 ^ 2) = 0]refine_1 T:MSSMACC.Solsh:InQuadSolProp T⊢ 2 * (dot Y₃.val) B₃.val ^ 2 * (0 ^ 2 + 0 ^ 2) = 0
with_unfolding_all rfl All goals completed! 🐙
· refine_2 T:MSSMACC.Solsh:quadCoeff T = 0⊢ InQuadSolProp T rw [quadCoeff, refine_2 T:MSSMACC.Solsh:2 * (dot Y₃.val) B₃.val ^ 2 * ((quadBiLin Y₃.val) T.val ^ 2 + (quadBiLin B₃.val) T.val ^ 2) = 0⊢ InQuadSolProp T refine_2 T:MSSMACC.Solsh:2 * 108 ^ 2 * ((quadBiLin Y₃.val) T.val ^ 2 + (quadBiLin B₃.val) T.val ^ 2) = 0⊢ InQuadSolProp T show dot Y₃.val B₃.val = 108 by T:MSSMACC.Sols⊢ InQuadSolProp T ↔ quadCoeff T = 0refine_2 T:MSSMACC.Solsh:2 * 108 ^ 2 * ((quadBiLin Y₃.val) T.val ^ 2 + (quadBiLin B₃.val) T.val ^ 2) = 0⊢ InQuadSolProp T with_unfolding_all rfl All goals completed! 🐙refine_2 T:MSSMACC.Solsh:2 * 108 ^ 2 * ((quadBiLin Y₃.val) T.val ^ 2 + (quadBiLin B₃.val) T.val ^ 2) = 0⊢ InQuadSolProp T] at hrefine_2 T:MSSMACC.Solsh:2 * 108 ^ 2 * ((quadBiLin Y₃.val) T.val ^ 2 + (quadBiLin B₃.val) T.val ^ 2) = 0⊢ InQuadSolProp T
simp only [mul_eq_zero, OfNat.ofNat_ne_zero, ne_eq,
not_false_eq_true, pow_eq_zero_iff, or_self, false_or] at h refine_2 T:MSSMACC.Solsh:(quadBiLin Y₃.val) T.val ^ 2 + (quadBiLin B₃.val) T.val ^ 2 = 0⊢ InQuadSolProp T
apply (add_eq_zero_iff_of_nonneg (sq_nonneg _) (sq_nonneg _)).mp at h refine_2 T:MSSMACC.Solsh:(quadBiLin Y₃.val) T.val ^ 2 = 0 ∧ (quadBiLin B₃.val) T.val ^ 2 = 0⊢ InQuadSolProp T
simp only [ne_eq, OfNat.ofNat_ne_zero,
not_false_eq_true, pow_eq_zero_iff] at h refine_2 T:MSSMACC.Solsh:(quadBiLin Y₃.val) T.val = 0 ∧ (quadBiLin B₃.val) T.val = 0⊢ InQuadSolProp T
exact h All goals completed! 🐙
The conditions inQuadSolProp R and inQuadProp (proj R.1.1) are equivalent. This is to be
expected since both R and proj R.1.1 define the same plane with Y₃ and B₃.
lemma inQuadSolProp_iff_proj_inQuadProp (R : MSSMACC.Sols) :
InQuadSolProp R ↔ InQuadProp (proj R.1.1) := by R:MSSMACC.Sols⊢ InQuadSolProp R ↔ (proj R.toLinSols).InQuadProp
rw [InQuadSolProp, R:MSSMACC.Sols⊢ (quadBiLin Y₃.val) R.val = 0 ∧ (quadBiLin B₃.val) R.val = 0 ↔ (proj R.toLinSols).InQuadProp R:MSSMACC.Sols⊢ (quadBiLin Y₃.val) R.val = 0 ∧ (quadBiLin B₃.val) R.val = 0 ↔
2 * (dot Y₃.val) B₃.val *
(((dot B₃.val) R.val - (dot Y₃.val) R.val) * (quadBiLin Y₃.val) R.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * (quadBiLin B₃.val) R.val) =
0 ∧
(dot Y₃.val) B₃.val * (quadBiLin Y₃.val) R.val = 0 ∧ (dot Y₃.val) B₃.val * (quadBiLin B₃.val) R.val = 0 InQuadProp, R:MSSMACC.Sols⊢ (quadBiLin Y₃.val) R.val = 0 ∧ (quadBiLin B₃.val) R.val = 0 ↔
(quadBiLin (proj R.toLinSols).val) (proj R.toLinSols).val = 0 ∧
(quadBiLin Y₃.val) (proj R.toLinSols).val = 0 ∧ (quadBiLin B₃.val) (proj R.toLinSols).val = 0 R:MSSMACC.Sols⊢ (quadBiLin Y₃.val) R.val = 0 ∧ (quadBiLin B₃.val) R.val = 0 ↔
2 * (dot Y₃.val) B₃.val *
(((dot B₃.val) R.val - (dot Y₃.val) R.val) * (quadBiLin Y₃.val) R.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * (quadBiLin B₃.val) R.val) =
0 ∧
(dot Y₃.val) B₃.val * (quadBiLin Y₃.val) R.val = 0 ∧ (dot Y₃.val) B₃.val * (quadBiLin B₃.val) R.val = 0 quad_proj, R:MSSMACC.Sols⊢ (quadBiLin Y₃.val) R.val = 0 ∧ (quadBiLin B₃.val) R.val = 0 ↔
2 * (dot Y₃.val) B₃.val *
(((dot B₃.val) R.val - (dot Y₃.val) R.val) * (quadBiLin Y₃.val) R.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * (quadBiLin B₃.val) R.val) =
0 ∧
(quadBiLin Y₃.val) (proj R.toLinSols).val = 0 ∧ (quadBiLin B₃.val) (proj R.toLinSols).val = 0 R:MSSMACC.Sols⊢ (quadBiLin Y₃.val) R.val = 0 ∧ (quadBiLin B₃.val) R.val = 0 ↔
2 * (dot Y₃.val) B₃.val *
(((dot B₃.val) R.val - (dot Y₃.val) R.val) * (quadBiLin Y₃.val) R.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * (quadBiLin B₃.val) R.val) =
0 ∧
(dot Y₃.val) B₃.val * (quadBiLin Y₃.val) R.val = 0 ∧ (dot Y₃.val) B₃.val * (quadBiLin B₃.val) R.val = 0 quad_Y₃_proj, R:MSSMACC.Sols⊢ (quadBiLin Y₃.val) R.val = 0 ∧ (quadBiLin B₃.val) R.val = 0 ↔
2 * (dot Y₃.val) B₃.val *
(((dot B₃.val) R.val - (dot Y₃.val) R.val) * (quadBiLin Y₃.val) R.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * (quadBiLin B₃.val) R.val) =
0 ∧
(dot Y₃.val) B₃.val * (quadBiLin Y₃.val) R.val = 0 ∧ (quadBiLin B₃.val) (proj R.toLinSols).val = 0 R:MSSMACC.Sols⊢ (quadBiLin Y₃.val) R.val = 0 ∧ (quadBiLin B₃.val) R.val = 0 ↔
2 * (dot Y₃.val) B₃.val *
(((dot B₃.val) R.val - (dot Y₃.val) R.val) * (quadBiLin Y₃.val) R.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * (quadBiLin B₃.val) R.val) =
0 ∧
(dot Y₃.val) B₃.val * (quadBiLin Y₃.val) R.val = 0 ∧ (dot Y₃.val) B₃.val * (quadBiLin B₃.val) R.val = 0 quad_B₃_proj R:MSSMACC.Sols⊢ (quadBiLin Y₃.val) R.val = 0 ∧ (quadBiLin B₃.val) R.val = 0 ↔
2 * (dot Y₃.val) B₃.val *
(((dot B₃.val) R.val - (dot Y₃.val) R.val) * (quadBiLin Y₃.val) R.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * (quadBiLin B₃.val) R.val) =
0 ∧
(dot Y₃.val) B₃.val * (quadBiLin Y₃.val) R.val = 0 ∧ (dot Y₃.val) B₃.val * (quadBiLin B₃.val) R.val = 0 R:MSSMACC.Sols⊢ (quadBiLin Y₃.val) R.val = 0 ∧ (quadBiLin B₃.val) R.val = 0 ↔
2 * (dot Y₃.val) B₃.val *
(((dot B₃.val) R.val - (dot Y₃.val) R.val) * (quadBiLin Y₃.val) R.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * (quadBiLin B₃.val) R.val) =
0 ∧
(dot Y₃.val) B₃.val * (quadBiLin Y₃.val) R.val = 0 ∧ (dot Y₃.val) B₃.val * (quadBiLin B₃.val) R.val = 0] R:MSSMACC.Sols⊢ (quadBiLin Y₃.val) R.val = 0 ∧ (quadBiLin B₃.val) R.val = 0 ↔
2 * (dot Y₃.val) B₃.val *
(((dot B₃.val) R.val - (dot Y₃.val) R.val) * (quadBiLin Y₃.val) R.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * (quadBiLin B₃.val) R.val) =
0 ∧
(dot Y₃.val) B₃.val * (quadBiLin Y₃.val) R.val = 0 ∧ (dot Y₃.val) B₃.val * (quadBiLin B₃.val) R.val = 0
refine Iff.intro (fun h => ?_) (fun h => ?_) refine_1 R:MSSMACC.Solsh:(quadBiLin Y₃.val) R.val = 0 ∧ (quadBiLin B₃.val) R.val = 0⊢ 2 * (dot Y₃.val) B₃.val *
(((dot B₃.val) R.val - (dot Y₃.val) R.val) * (quadBiLin Y₃.val) R.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * (quadBiLin B₃.val) R.val) =
0 ∧
(dot Y₃.val) B₃.val * (quadBiLin Y₃.val) R.val = 0 ∧ (dot Y₃.val) B₃.val * (quadBiLin B₃.val) R.val = 0refine_2 R:MSSMACC.Solsh:2 * (dot Y₃.val) B₃.val *
(((dot B₃.val) R.val - (dot Y₃.val) R.val) * (quadBiLin Y₃.val) R.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * (quadBiLin B₃.val) R.val) =
0 ∧
(dot Y₃.val) B₃.val * (quadBiLin Y₃.val) R.val = 0 ∧ (dot Y₃.val) B₃.val * (quadBiLin B₃.val) R.val = 0⊢ (quadBiLin Y₃.val) R.val = 0 ∧ (quadBiLin B₃.val) R.val = 0
· refine_1 R:MSSMACC.Solsh:(quadBiLin Y₃.val) R.val = 0 ∧ (quadBiLin B₃.val) R.val = 0⊢ 2 * (dot Y₃.val) B₃.val *
(((dot B₃.val) R.val - (dot Y₃.val) R.val) * (quadBiLin Y₃.val) R.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * (quadBiLin B₃.val) R.val) =
0 ∧
(dot Y₃.val) B₃.val * (quadBiLin Y₃.val) R.val = 0 ∧ (dot Y₃.val) B₃.val * (quadBiLin B₃.val) R.val = 0 rw [h.1, refine_1 R:MSSMACC.Solsh:(quadBiLin Y₃.val) R.val = 0 ∧ (quadBiLin B₃.val) R.val = 0⊢ 2 * (dot Y₃.val) B₃.val *
(((dot B₃.val) R.val - (dot Y₃.val) R.val) * 0 +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * (quadBiLin B₃.val) R.val) =
0 ∧
(dot Y₃.val) B₃.val * 0 = 0 ∧ (dot Y₃.val) B₃.val * (quadBiLin B₃.val) R.val = 0 refine_1 R:MSSMACC.Solsh:(quadBiLin Y₃.val) R.val = 0 ∧ (quadBiLin B₃.val) R.val = 0⊢ 2 * (dot Y₃.val) B₃.val *
(((dot B₃.val) R.val - (dot Y₃.val) R.val) * 0 + ((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * 0) =
0 ∧
(dot Y₃.val) B₃.val * 0 = 0 ∧ (dot Y₃.val) B₃.val * 0 = 0 h.2 refine_1 R:MSSMACC.Solsh:(quadBiLin Y₃.val) R.val = 0 ∧ (quadBiLin B₃.val) R.val = 0⊢ 2 * (dot Y₃.val) B₃.val *
(((dot B₃.val) R.val - (dot Y₃.val) R.val) * 0 + ((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * 0) =
0 ∧
(dot Y₃.val) B₃.val * 0 = 0 ∧ (dot Y₃.val) B₃.val * 0 = 0refine_1 R:MSSMACC.Solsh:(quadBiLin Y₃.val) R.val = 0 ∧ (quadBiLin B₃.val) R.val = 0⊢ 2 * (dot Y₃.val) B₃.val *
(((dot B₃.val) R.val - (dot Y₃.val) R.val) * 0 + ((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * 0) =
0 ∧
(dot Y₃.val) B₃.val * 0 = 0 ∧ (dot Y₃.val) B₃.val * 0 = 0]refine_1 R:MSSMACC.Solsh:(quadBiLin Y₃.val) R.val = 0 ∧ (quadBiLin B₃.val) R.val = 0⊢ 2 * (dot Y₃.val) B₃.val *
(((dot B₃.val) R.val - (dot Y₃.val) R.val) * 0 + ((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * 0) =
0 ∧
(dot Y₃.val) B₃.val * 0 = 0 ∧ (dot Y₃.val) B₃.val * 0 = 0
simp only [mul_zero, add_zero, and_self] All goals completed! 🐙
· refine_2 R:MSSMACC.Solsh:2 * (dot Y₃.val) B₃.val *
(((dot B₃.val) R.val - (dot Y₃.val) R.val) * (quadBiLin Y₃.val) R.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * (quadBiLin B₃.val) R.val) =
0 ∧
(dot Y₃.val) B₃.val * (quadBiLin Y₃.val) R.val = 0 ∧ (dot Y₃.val) B₃.val * (quadBiLin B₃.val) R.val = 0⊢ (quadBiLin Y₃.val) R.val = 0 ∧ (quadBiLin B₃.val) R.val = 0 rw [show dot Y₃.val B₃.val = 108 by R:MSSMACC.Sols⊢ InQuadSolProp R ↔ (proj R.toLinSols).InQuadProp refine_2 R:MSSMACC.Solsh:2 * 108 *
(((dot B₃.val) R.val - (dot Y₃.val) R.val) * (quadBiLin Y₃.val) R.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * (quadBiLin B₃.val) R.val) =
0 ∧
108 * (quadBiLin Y₃.val) R.val = 0 ∧ 108 * (quadBiLin B₃.val) R.val = 0⊢ (quadBiLin Y₃.val) R.val = 0 ∧ (quadBiLin B₃.val) R.val = 0 with_unfolding_all rfl All goals completed! 🐙refine_2 R:MSSMACC.Solsh:2 * 108 *
(((dot B₃.val) R.val - (dot Y₃.val) R.val) * (quadBiLin Y₃.val) R.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * (quadBiLin B₃.val) R.val) =
0 ∧
108 * (quadBiLin Y₃.val) R.val = 0 ∧ 108 * (quadBiLin B₃.val) R.val = 0⊢ (quadBiLin Y₃.val) R.val = 0 ∧ (quadBiLin B₃.val) R.val = 0] at hrefine_2 R:MSSMACC.Solsh:2 * 108 *
(((dot B₃.val) R.val - (dot Y₃.val) R.val) * (quadBiLin Y₃.val) R.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * (quadBiLin B₃.val) R.val) =
0 ∧
108 * (quadBiLin Y₃.val) R.val = 0 ∧ 108 * (quadBiLin B₃.val) R.val = 0⊢ (quadBiLin Y₃.val) R.val = 0 ∧ (quadBiLin B₃.val) R.val = 0
simp only [mul_eq_zero, OfNat.ofNat_ne_zero, or_self, false_or] at h refine_2 R:MSSMACC.Solsh:((dot B₃.val) R.val - (dot Y₃.val) R.val) * (quadBiLin Y₃.val) R.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * (quadBiLin B₃.val) R.val =
0 ∧
(quadBiLin Y₃.val) R.val = 0 ∧ (quadBiLin B₃.val) R.val = 0⊢ (quadBiLin Y₃.val) R.val = 0 ∧ (quadBiLin B₃.val) R.val = 0
rw [h.2.1, refine_2 R:MSSMACC.Solsh:((dot B₃.val) R.val - (dot Y₃.val) R.val) * (quadBiLin Y₃.val) R.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * (quadBiLin B₃.val) R.val =
0 ∧
(quadBiLin Y₃.val) R.val = 0 ∧ (quadBiLin B₃.val) R.val = 0⊢ 0 = 0 ∧ (quadBiLin B₃.val) R.val = 0 refine_2 R:MSSMACC.Solsh:((dot B₃.val) R.val - (dot Y₃.val) R.val) * (quadBiLin Y₃.val) R.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * (quadBiLin B₃.val) R.val =
0 ∧
(quadBiLin Y₃.val) R.val = 0 ∧ (quadBiLin B₃.val) R.val = 0⊢ 0 = 0 ∧ 0 = 0 h.2.2 refine_2 R:MSSMACC.Solsh:((dot B₃.val) R.val - (dot Y₃.val) R.val) * (quadBiLin Y₃.val) R.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * (quadBiLin B₃.val) R.val =
0 ∧
(quadBiLin Y₃.val) R.val = 0 ∧ (quadBiLin B₃.val) R.val = 0⊢ 0 = 0 ∧ 0 = 0refine_2 R:MSSMACC.Solsh:((dot B₃.val) R.val - (dot Y₃.val) R.val) * (quadBiLin Y₃.val) R.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * (quadBiLin B₃.val) R.val =
0 ∧
(quadBiLin Y₃.val) R.val = 0 ∧ (quadBiLin B₃.val) R.val = 0⊢ 0 = 0 ∧ 0 = 0]refine_2 R:MSSMACC.Solsh:((dot B₃.val) R.val - (dot Y₃.val) R.val) * (quadBiLin Y₃.val) R.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * (quadBiLin B₃.val) R.val =
0 ∧
(quadBiLin Y₃.val) R.val = 0 ∧ (quadBiLin B₃.val) R.val = 0⊢ 0 = 0 ∧ 0 = 0
exact Prod.mk_eq_zero.mp rfl All goals completed! 🐙
A condition which is satisfied if the plane spanned by R, Y₃ and B₃ lies
entirely in the cubic surface.
def InCubeProp (R : MSSMACC.AnomalyFreePerp) : Prop :=
cubeTriLin R.val R.val R.val = 0 ∧ cubeTriLin R.val R.val B₃.val = 0 ∧
cubeTriLin R.val R.val Y₃.val = 0
The proposition InCubeProp is decidable.
instance (R : MSSMACC.AnomalyFreePerp) : Decidable (InCubeProp R) := instDecidableAnd
A condition which is satisfied if the plane spanned by the solutions R, Y₃ and B₃
lies entirely in the cubic surface.
def InCubeSolProp (R : MSSMACC.Sols) : Prop :=
cubeTriLin R.val R.val B₃.val = 0 ∧ cubeTriLin R.val R.val Y₃.val = 0
A rational which has two properties. It is zero for a solution T if and only if
that solution satisfies inCubeSolProp. It appears in the definition of inLineEqProj.
def cubicCoeff (T : MSSMACC.Sols) : ℚ :=
3 * (dot Y₃.val B₃.val) ^ 3 * (cubeTriLin T.val T.val Y₃.val ^ 2 +
cubeTriLin T.val T.val B₃.val ^ 2)
lemma inCubeSolProp_iff_cubicCoeff_zero (T : MSSMACC.Sols) :
InCubeSolProp T ↔ cubicCoeff T = 0 := by T:MSSMACC.Sols⊢ InCubeSolProp T ↔ cubicCoeff T = 0
refine Iff.intro (fun h => ?_) (fun h => ?_) refine_1 T:MSSMACC.Solsh:InCubeSolProp T⊢ cubicCoeff T = 0refine_2 T:MSSMACC.Solsh:cubicCoeff T = 0⊢ InCubeSolProp T
· refine_1 T:MSSMACC.Solsh:InCubeSolProp T⊢ cubicCoeff T = 0 rw [cubicCoeff, refine_1 T:MSSMACC.Solsh:InCubeSolProp T⊢ 3 * (dot Y₃.val) B₃.val ^ 3 * (((cubeTriLin T.val) T.val) Y₃.val ^ 2 + ((cubeTriLin T.val) T.val) B₃.val ^ 2) = 0 refine_1 T:MSSMACC.Solsh:InCubeSolProp T⊢ 3 * (dot Y₃.val) B₃.val ^ 3 * (0 ^ 2 + 0 ^ 2) = 0 h.1, refine_1 T:MSSMACC.Solsh:InCubeSolProp T⊢ 3 * (dot Y₃.val) B₃.val ^ 3 * (((cubeTriLin T.val) T.val) Y₃.val ^ 2 + 0 ^ 2) = 0 refine_1 T:MSSMACC.Solsh:InCubeSolProp T⊢ 3 * (dot Y₃.val) B₃.val ^ 3 * (0 ^ 2 + 0 ^ 2) = 0 h.2 refine_1 T:MSSMACC.Solsh:InCubeSolProp T⊢ 3 * (dot Y₃.val) B₃.val ^ 3 * (0 ^ 2 + 0 ^ 2) = 0refine_1 T:MSSMACC.Solsh:InCubeSolProp T⊢ 3 * (dot Y₃.val) B₃.val ^ 3 * (0 ^ 2 + 0 ^ 2) = 0]refine_1 T:MSSMACC.Solsh:InCubeSolProp T⊢ 3 * (dot Y₃.val) B₃.val ^ 3 * (0 ^ 2 + 0 ^ 2) = 0
with_unfolding_all rfl All goals completed! 🐙
· refine_2 T:MSSMACC.Solsh:cubicCoeff T = 0⊢ InCubeSolProp T rw [cubicCoeff, refine_2 T:MSSMACC.Solsh:3 * (dot Y₃.val) B₃.val ^ 3 * (((cubeTriLin T.val) T.val) Y₃.val ^ 2 + ((cubeTriLin T.val) T.val) B₃.val ^ 2) = 0⊢ InCubeSolProp T refine_2 T:MSSMACC.Solsh:3 * 108 ^ 3 * (((cubeTriLin T.val) T.val) Y₃.val ^ 2 + ((cubeTriLin T.val) T.val) B₃.val ^ 2) = 0⊢ InCubeSolProp T show dot Y₃.val B₃.val = 108 by T:MSSMACC.Sols⊢ InCubeSolProp T ↔ cubicCoeff T = 0refine_2 T:MSSMACC.Solsh:3 * 108 ^ 3 * (((cubeTriLin T.val) T.val) Y₃.val ^ 2 + ((cubeTriLin T.val) T.val) B₃.val ^ 2) = 0⊢ InCubeSolProp T with_unfolding_all rfl All goals completed! 🐙refine_2 T:MSSMACC.Solsh:3 * 108 ^ 3 * (((cubeTriLin T.val) T.val) Y₃.val ^ 2 + ((cubeTriLin T.val) T.val) B₃.val ^ 2) = 0⊢ InCubeSolProp T] at hrefine_2 T:MSSMACC.Solsh:3 * 108 ^ 3 * (((cubeTriLin T.val) T.val) Y₃.val ^ 2 + ((cubeTriLin T.val) T.val) B₃.val ^ 2) = 0⊢ InCubeSolProp T
simp only [mul_eq_zero, OfNat.ofNat_ne_zero, ne_eq,
not_false_eq_true, pow_eq_zero_iff, or_self, false_or] at h refine_2 T:MSSMACC.Solsh:((cubeTriLin T.val) T.val) Y₃.val ^ 2 + ((cubeTriLin T.val) T.val) B₃.val ^ 2 = 0⊢ InCubeSolProp T
apply (add_eq_zero_iff_of_nonneg (sq_nonneg _) (sq_nonneg _)).mp at h refine_2 T:MSSMACC.Solsh:((cubeTriLin T.val) T.val) Y₃.val ^ 2 = 0 ∧ ((cubeTriLin T.val) T.val) B₃.val ^ 2 = 0⊢ InCubeSolProp T
simp only [ne_eq, OfNat.ofNat_ne_zero,
not_false_eq_true, pow_eq_zero_iff] at h refine_2 T:MSSMACC.Solsh:((cubeTriLin T.val) T.val) Y₃.val = 0 ∧ ((cubeTriLin T.val) T.val) B₃.val = 0⊢ InCubeSolProp T
exact h.symm All goals completed! 🐙
lemma inCubeSolProp_iff_proj_inCubeProp (R : MSSMACC.Sols) :
InCubeSolProp R ↔ InCubeProp (proj R.1.1) := by R:MSSMACC.Sols⊢ InCubeSolProp R ↔ (proj R.toLinSols).InCubeProp
rw [InCubeSolProp, R:MSSMACC.Sols⊢ ((cubeTriLin R.val) R.val) B₃.val = 0 ∧ ((cubeTriLin R.val) R.val) Y₃.val = 0 ↔ (proj R.toLinSols).InCubeProp R:MSSMACC.Sols⊢ ((cubeTriLin R.val) R.val) B₃.val = 0 ∧ ((cubeTriLin R.val) R.val) Y₃.val = 0 ↔
((cubeTriLin (proj R.toLinSols).val) (proj R.toLinSols).val) (proj R.toLinSols).val = 0 ∧
((cubeTriLin (proj R.toLinSols).val) (proj R.toLinSols).val) B₃.val = 0 ∧
((cubeTriLin (proj R.toLinSols).val) (proj R.toLinSols).val) Y₃.val = 0 InCubeProp R:MSSMACC.Sols⊢ ((cubeTriLin R.val) R.val) B₃.val = 0 ∧ ((cubeTriLin R.val) R.val) Y₃.val = 0 ↔
((cubeTriLin (proj R.toLinSols).val) (proj R.toLinSols).val) (proj R.toLinSols).val = 0 ∧
((cubeTriLin (proj R.toLinSols).val) (proj R.toLinSols).val) B₃.val = 0 ∧
((cubeTriLin (proj R.toLinSols).val) (proj R.toLinSols).val) Y₃.val = 0 R:MSSMACC.Sols⊢ ((cubeTriLin R.val) R.val) B₃.val = 0 ∧ ((cubeTriLin R.val) R.val) Y₃.val = 0 ↔
((cubeTriLin (proj R.toLinSols).val) (proj R.toLinSols).val) (proj R.toLinSols).val = 0 ∧
((cubeTriLin (proj R.toLinSols).val) (proj R.toLinSols).val) B₃.val = 0 ∧
((cubeTriLin (proj R.toLinSols).val) (proj R.toLinSols).val) Y₃.val = 0] R:MSSMACC.Sols⊢ ((cubeTriLin R.val) R.val) B₃.val = 0 ∧ ((cubeTriLin R.val) R.val) Y₃.val = 0 ↔
((cubeTriLin (proj R.toLinSols).val) (proj R.toLinSols).val) (proj R.toLinSols).val = 0 ∧
((cubeTriLin (proj R.toLinSols).val) (proj R.toLinSols).val) B₃.val = 0 ∧
((cubeTriLin (proj R.toLinSols).val) (proj R.toLinSols).val) Y₃.val = 0
rw [cube_proj, R:MSSMACC.Sols⊢ ((cubeTriLin R.val) R.val) B₃.val = 0 ∧ ((cubeTriLin R.val) R.val) Y₃.val = 0 ↔
3 * (dot Y₃.val) B₃.val ^ 2 *
(((dot B₃.val) R.val - (dot Y₃.val) R.val) * ((cubeTriLin R.val) R.val) Y₃.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * ((cubeTriLin R.val) R.val) B₃.val) =
0 ∧
((cubeTriLin (proj R.toLinSols).val) (proj R.toLinSols).val) B₃.val = 0 ∧
((cubeTriLin (proj R.toLinSols).val) (proj R.toLinSols).val) Y₃.val = 0 R:MSSMACC.Sols⊢ ((cubeTriLin R.val) R.val) B₃.val = 0 ∧ ((cubeTriLin R.val) R.val) Y₃.val = 0 ↔
3 * (dot Y₃.val) B₃.val ^ 2 *
(((dot B₃.val) R.val - (dot Y₃.val) R.val) * ((cubeTriLin R.val) R.val) Y₃.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * ((cubeTriLin R.val) R.val) B₃.val) =
0 ∧
(dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin R.val) R.val) B₃.val = 0 ∧
(dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin R.val) R.val) Y₃.val = 0 cube_proj_proj_Y₃, R:MSSMACC.Sols⊢ ((cubeTriLin R.val) R.val) B₃.val = 0 ∧ ((cubeTriLin R.val) R.val) Y₃.val = 0 ↔
3 * (dot Y₃.val) B₃.val ^ 2 *
(((dot B₃.val) R.val - (dot Y₃.val) R.val) * ((cubeTriLin R.val) R.val) Y₃.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * ((cubeTriLin R.val) R.val) B₃.val) =
0 ∧
((cubeTriLin (proj R.toLinSols).val) (proj R.toLinSols).val) B₃.val = 0 ∧
(dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin R.val) R.val) Y₃.val = 0 R:MSSMACC.Sols⊢ ((cubeTriLin R.val) R.val) B₃.val = 0 ∧ ((cubeTriLin R.val) R.val) Y₃.val = 0 ↔
3 * (dot Y₃.val) B₃.val ^ 2 *
(((dot B₃.val) R.val - (dot Y₃.val) R.val) * ((cubeTriLin R.val) R.val) Y₃.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * ((cubeTriLin R.val) R.val) B₃.val) =
0 ∧
(dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin R.val) R.val) B₃.val = 0 ∧
(dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin R.val) R.val) Y₃.val = 0 cube_proj_proj_B₃ R:MSSMACC.Sols⊢ ((cubeTriLin R.val) R.val) B₃.val = 0 ∧ ((cubeTriLin R.val) R.val) Y₃.val = 0 ↔
3 * (dot Y₃.val) B₃.val ^ 2 *
(((dot B₃.val) R.val - (dot Y₃.val) R.val) * ((cubeTriLin R.val) R.val) Y₃.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * ((cubeTriLin R.val) R.val) B₃.val) =
0 ∧
(dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin R.val) R.val) B₃.val = 0 ∧
(dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin R.val) R.val) Y₃.val = 0 R:MSSMACC.Sols⊢ ((cubeTriLin R.val) R.val) B₃.val = 0 ∧ ((cubeTriLin R.val) R.val) Y₃.val = 0 ↔
3 * (dot Y₃.val) B₃.val ^ 2 *
(((dot B₃.val) R.val - (dot Y₃.val) R.val) * ((cubeTriLin R.val) R.val) Y₃.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * ((cubeTriLin R.val) R.val) B₃.val) =
0 ∧
(dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin R.val) R.val) B₃.val = 0 ∧
(dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin R.val) R.val) Y₃.val = 0] R:MSSMACC.Sols⊢ ((cubeTriLin R.val) R.val) B₃.val = 0 ∧ ((cubeTriLin R.val) R.val) Y₃.val = 0 ↔
3 * (dot Y₃.val) B₃.val ^ 2 *
(((dot B₃.val) R.val - (dot Y₃.val) R.val) * ((cubeTriLin R.val) R.val) Y₃.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * ((cubeTriLin R.val) R.val) B₃.val) =
0 ∧
(dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin R.val) R.val) B₃.val = 0 ∧
(dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin R.val) R.val) Y₃.val = 0
refine Iff.intro (fun h => ?_) (fun h => ?_) refine_1 R:MSSMACC.Solsh:((cubeTriLin R.val) R.val) B₃.val = 0 ∧ ((cubeTriLin R.val) R.val) Y₃.val = 0⊢ 3 * (dot Y₃.val) B₃.val ^ 2 *
(((dot B₃.val) R.val - (dot Y₃.val) R.val) * ((cubeTriLin R.val) R.val) Y₃.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * ((cubeTriLin R.val) R.val) B₃.val) =
0 ∧
(dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin R.val) R.val) B₃.val = 0 ∧
(dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin R.val) R.val) Y₃.val = 0refine_2 R:MSSMACC.Solsh:3 * (dot Y₃.val) B₃.val ^ 2 *
(((dot B₃.val) R.val - (dot Y₃.val) R.val) * ((cubeTriLin R.val) R.val) Y₃.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * ((cubeTriLin R.val) R.val) B₃.val) =
0 ∧
(dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin R.val) R.val) B₃.val = 0 ∧
(dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin R.val) R.val) Y₃.val = 0⊢ ((cubeTriLin R.val) R.val) B₃.val = 0 ∧ ((cubeTriLin R.val) R.val) Y₃.val = 0
· refine_1 R:MSSMACC.Solsh:((cubeTriLin R.val) R.val) B₃.val = 0 ∧ ((cubeTriLin R.val) R.val) Y₃.val = 0⊢ 3 * (dot Y₃.val) B₃.val ^ 2 *
(((dot B₃.val) R.val - (dot Y₃.val) R.val) * ((cubeTriLin R.val) R.val) Y₃.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * ((cubeTriLin R.val) R.val) B₃.val) =
0 ∧
(dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin R.val) R.val) B₃.val = 0 ∧
(dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin R.val) R.val) Y₃.val = 0 rw [h.1, refine_1 R:MSSMACC.Solsh:((cubeTriLin R.val) R.val) B₃.val = 0 ∧ ((cubeTriLin R.val) R.val) Y₃.val = 0⊢ 3 * (dot Y₃.val) B₃.val ^ 2 *
(((dot B₃.val) R.val - (dot Y₃.val) R.val) * ((cubeTriLin R.val) R.val) Y₃.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * 0) =
0 ∧
(dot Y₃.val) B₃.val ^ 2 * 0 = 0 ∧ (dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin R.val) R.val) Y₃.val = 0 refine_1 R:MSSMACC.Solsh:((cubeTriLin R.val) R.val) B₃.val = 0 ∧ ((cubeTriLin R.val) R.val) Y₃.val = 0⊢ 3 * (dot Y₃.val) B₃.val ^ 2 *
(((dot B₃.val) R.val - (dot Y₃.val) R.val) * 0 + ((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * 0) =
0 ∧
(dot Y₃.val) B₃.val ^ 2 * 0 = 0 ∧ (dot Y₃.val) B₃.val ^ 2 * 0 = 0 h.2 refine_1 R:MSSMACC.Solsh:((cubeTriLin R.val) R.val) B₃.val = 0 ∧ ((cubeTriLin R.val) R.val) Y₃.val = 0⊢ 3 * (dot Y₃.val) B₃.val ^ 2 *
(((dot B₃.val) R.val - (dot Y₃.val) R.val) * 0 + ((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * 0) =
0 ∧
(dot Y₃.val) B₃.val ^ 2 * 0 = 0 ∧ (dot Y₃.val) B₃.val ^ 2 * 0 = 0refine_1 R:MSSMACC.Solsh:((cubeTriLin R.val) R.val) B₃.val = 0 ∧ ((cubeTriLin R.val) R.val) Y₃.val = 0⊢ 3 * (dot Y₃.val) B₃.val ^ 2 *
(((dot B₃.val) R.val - (dot Y₃.val) R.val) * 0 + ((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * 0) =
0 ∧
(dot Y₃.val) B₃.val ^ 2 * 0 = 0 ∧ (dot Y₃.val) B₃.val ^ 2 * 0 = 0]refine_1 R:MSSMACC.Solsh:((cubeTriLin R.val) R.val) B₃.val = 0 ∧ ((cubeTriLin R.val) R.val) Y₃.val = 0⊢ 3 * (dot Y₃.val) B₃.val ^ 2 *
(((dot B₃.val) R.val - (dot Y₃.val) R.val) * 0 + ((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * 0) =
0 ∧
(dot Y₃.val) B₃.val ^ 2 * 0 = 0 ∧ (dot Y₃.val) B₃.val ^ 2 * 0 = 0
simp only [mul_zero, add_zero, and_self] All goals completed! 🐙
· refine_2 R:MSSMACC.Solsh:3 * (dot Y₃.val) B₃.val ^ 2 *
(((dot B₃.val) R.val - (dot Y₃.val) R.val) * ((cubeTriLin R.val) R.val) Y₃.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * ((cubeTriLin R.val) R.val) B₃.val) =
0 ∧
(dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin R.val) R.val) B₃.val = 0 ∧
(dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin R.val) R.val) Y₃.val = 0⊢ ((cubeTriLin R.val) R.val) B₃.val = 0 ∧ ((cubeTriLin R.val) R.val) Y₃.val = 0 rw [show dot Y₃.val B₃.val = 108 by R:MSSMACC.Sols⊢ InCubeSolProp R ↔ (proj R.toLinSols).InCubeProp refine_2 R:MSSMACC.Solsh:3 * 108 ^ 2 *
(((dot B₃.val) R.val - (dot Y₃.val) R.val) * ((cubeTriLin R.val) R.val) Y₃.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * ((cubeTriLin R.val) R.val) B₃.val) =
0 ∧
108 ^ 2 * ((cubeTriLin R.val) R.val) B₃.val = 0 ∧ 108 ^ 2 * ((cubeTriLin R.val) R.val) Y₃.val = 0⊢ ((cubeTriLin R.val) R.val) B₃.val = 0 ∧ ((cubeTriLin R.val) R.val) Y₃.val = 0 with_unfolding_all rfl All goals completed! 🐙refine_2 R:MSSMACC.Solsh:3 * 108 ^ 2 *
(((dot B₃.val) R.val - (dot Y₃.val) R.val) * ((cubeTriLin R.val) R.val) Y₃.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * ((cubeTriLin R.val) R.val) B₃.val) =
0 ∧
108 ^ 2 * ((cubeTriLin R.val) R.val) B₃.val = 0 ∧ 108 ^ 2 * ((cubeTriLin R.val) R.val) Y₃.val = 0⊢ ((cubeTriLin R.val) R.val) B₃.val = 0 ∧ ((cubeTriLin R.val) R.val) Y₃.val = 0] at hrefine_2 R:MSSMACC.Solsh:3 * 108 ^ 2 *
(((dot B₃.val) R.val - (dot Y₃.val) R.val) * ((cubeTriLin R.val) R.val) Y₃.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * ((cubeTriLin R.val) R.val) B₃.val) =
0 ∧
108 ^ 2 * ((cubeTriLin R.val) R.val) B₃.val = 0 ∧ 108 ^ 2 * ((cubeTriLin R.val) R.val) Y₃.val = 0⊢ ((cubeTriLin R.val) R.val) B₃.val = 0 ∧ ((cubeTriLin R.val) R.val) Y₃.val = 0
simp only [mul_eq_zero, OfNat.ofNat_ne_zero, ne_eq,
not_false_eq_true, pow_eq_zero_iff, or_self, false_or] at h refine_2 R:MSSMACC.Solsh:((dot B₃.val) R.val - (dot Y₃.val) R.val) * ((cubeTriLin R.val) R.val) Y₃.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * ((cubeTriLin R.val) R.val) B₃.val =
0 ∧
((cubeTriLin R.val) R.val) B₃.val = 0 ∧ ((cubeTriLin R.val) R.val) Y₃.val = 0⊢ ((cubeTriLin R.val) R.val) B₃.val = 0 ∧ ((cubeTriLin R.val) R.val) Y₃.val = 0
rw [h.2.1, refine_2 R:MSSMACC.Solsh:((dot B₃.val) R.val - (dot Y₃.val) R.val) * ((cubeTriLin R.val) R.val) Y₃.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * ((cubeTriLin R.val) R.val) B₃.val =
0 ∧
((cubeTriLin R.val) R.val) B₃.val = 0 ∧ ((cubeTriLin R.val) R.val) Y₃.val = 0⊢ 0 = 0 ∧ ((cubeTriLin R.val) R.val) Y₃.val = 0 refine_2 R:MSSMACC.Solsh:((dot B₃.val) R.val - (dot Y₃.val) R.val) * ((cubeTriLin R.val) R.val) Y₃.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * ((cubeTriLin R.val) R.val) B₃.val =
0 ∧
((cubeTriLin R.val) R.val) B₃.val = 0 ∧ ((cubeTriLin R.val) R.val) Y₃.val = 0⊢ 0 = 0 ∧ 0 = 0 h.2.2 refine_2 R:MSSMACC.Solsh:((dot B₃.val) R.val - (dot Y₃.val) R.val) * ((cubeTriLin R.val) R.val) Y₃.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * ((cubeTriLin R.val) R.val) B₃.val =
0 ∧
((cubeTriLin R.val) R.val) B₃.val = 0 ∧ ((cubeTriLin R.val) R.val) Y₃.val = 0⊢ 0 = 0 ∧ 0 = 0refine_2 R:MSSMACC.Solsh:((dot B₃.val) R.val - (dot Y₃.val) R.val) * ((cubeTriLin R.val) R.val) Y₃.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * ((cubeTriLin R.val) R.val) B₃.val =
0 ∧
((cubeTriLin R.val) R.val) B₃.val = 0 ∧ ((cubeTriLin R.val) R.val) Y₃.val = 0⊢ 0 = 0 ∧ 0 = 0]refine_2 R:MSSMACC.Solsh:((dot B₃.val) R.val - (dot Y₃.val) R.val) * ((cubeTriLin R.val) R.val) Y₃.val +
((dot Y₃.val) R.val - 2 * (dot B₃.val) R.val) * ((cubeTriLin R.val) R.val) B₃.val =
0 ∧
((cubeTriLin R.val) R.val) B₃.val = 0 ∧ ((cubeTriLin R.val) R.val) Y₃.val = 0⊢ 0 = 0 ∧ 0 = 0
exact Prod.mk_eq_zero.mp rfl All goals completed! 🐙
Those charge assignments perpendicular to Y₃ and B₃ which satisfy the condition
lineEqProp.
def InLineEq : Type := {R : MSSMACC.AnomalyFreePerp // LineEqProp R}
Those charge assignments perpendicular to Y₃ and B₃ which satisfy the conditions
lineEqProp and inQuadProp.
def InQuad : Type := {R : InLineEq // InQuadProp R.val}
Those charge assignments perpendicular to Y₃ and B₃ which satisfy the conditions
lineEqProp, inQuadProp and inCubeProp.
def InQuadCube : Type := {R : InQuad // InCubeProp R.val.val}
Those solutions which do not satisfy the condition lineEqPropSol.
def NotInLineEqSol : Type := {R : MSSMACC.Sols // ¬ LineEqPropSol R}
Those solutions which satisfy the condition lineEqPropSol but not inQuadSolProp.
def InLineEqSol : Type := {R : MSSMACC.Sols // LineEqPropSol R ∧ ¬ InQuadSolProp R}
Those solutions which satisfy the condition lineEqPropSol and inQuadSolProp but
not inCubeSolProp.
def InQuadSol : Type := {R : MSSMACC.Sols // LineEqPropSol R ∧ InQuadSolProp R ∧ ¬ InCubeSolProp R}
Those solutions which satisfy the conditions lineEqPropSol, inQuadSolProp
and inCubeSolProp.
def InQuadCubeSol : Type :=
{R : MSSMACC.Sols // LineEqPropSol R ∧ InQuadSolProp R ∧ InCubeSolProp R}
Given an R perpendicular to Y₃ and B₃ a quadratic solution.
def toSolNSQuad (R : MSSMACC.AnomalyFreePerp) : MSSMACC.QuadSols :=
lineQuad R
(3 * cubeTriLin R.val R.val Y₃.val)
(3 * cubeTriLin R.val R.val B₃.val)
(cubeTriLin R.val R.val R.val)
lemma toSolNSQuad_cube (R : MSSMACC.AnomalyFreePerp) :
accCube (toSolNSQuad R).val = 0 := by R:AnomalyFreePerp⊢ accCube R.toSolNSQuad.val = 0
rw [toSolNSQuad R:AnomalyFreePerp⊢ accCube
(lineQuad R (3 * ((cubeTriLin R.val) R.val) Y₃.val) (3 * ((cubeTriLin R.val) R.val) B₃.val)
(((cubeTriLin R.val) R.val) R.val)).val =
0 R:AnomalyFreePerp⊢ accCube
(lineQuad R (3 * ((cubeTriLin R.val) R.val) Y₃.val) (3 * ((cubeTriLin R.val) R.val) B₃.val)
(((cubeTriLin R.val) R.val) R.val)).val =
0] R:AnomalyFreePerp⊢ accCube
(lineQuad R (3 * ((cubeTriLin R.val) R.val) Y₃.val) (3 * ((cubeTriLin R.val) R.val) B₃.val)
(((cubeTriLin R.val) R.val) R.val)).val =
0
rw [lineQuad_val R:AnomalyFreePerp⊢ accCube
(planeY₃B₃ R
(3 * ((cubeTriLin R.val) R.val) B₃.val * (quadBiLin R.val) R.val -
2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin B₃.val) R.val)
(2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin Y₃.val) R.val -
3 * ((cubeTriLin R.val) R.val) Y₃.val * (quadBiLin R.val) R.val)
(2 * (3 * ((cubeTriLin R.val) R.val) Y₃.val) * (quadBiLin B₃.val) R.val -
2 * (3 * ((cubeTriLin R.val) R.val) B₃.val) * (quadBiLin Y₃.val) R.val)).val =
0 R:AnomalyFreePerp⊢ accCube
(planeY₃B₃ R
(3 * ((cubeTriLin R.val) R.val) B₃.val * (quadBiLin R.val) R.val -
2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin B₃.val) R.val)
(2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin Y₃.val) R.val -
3 * ((cubeTriLin R.val) R.val) Y₃.val * (quadBiLin R.val) R.val)
(2 * (3 * ((cubeTriLin R.val) R.val) Y₃.val) * (quadBiLin B₃.val) R.val -
2 * (3 * ((cubeTriLin R.val) R.val) B₃.val) * (quadBiLin Y₃.val) R.val)).val =
0] R:AnomalyFreePerp⊢ accCube
(planeY₃B₃ R
(3 * ((cubeTriLin R.val) R.val) B₃.val * (quadBiLin R.val) R.val -
2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin B₃.val) R.val)
(2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin Y₃.val) R.val -
3 * ((cubeTriLin R.val) R.val) Y₃.val * (quadBiLin R.val) R.val)
(2 * (3 * ((cubeTriLin R.val) R.val) Y₃.val) * (quadBiLin B₃.val) R.val -
2 * (3 * ((cubeTriLin R.val) R.val) B₃.val) * (quadBiLin Y₃.val) R.val)).val =
0
rw [planeY₃B₃_cubic R:AnomalyFreePerp⊢ (2 * (3 * ((cubeTriLin R.val) R.val) Y₃.val) * (quadBiLin B₃.val) R.val -
2 * (3 * ((cubeTriLin R.val) R.val) B₃.val) * (quadBiLin Y₃.val) R.val) ^
2 *
(3 *
(3 * ((cubeTriLin R.val) R.val) B₃.val * (quadBiLin R.val) R.val -
2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin B₃.val) R.val) *
((cubeTriLin R.val) R.val) Y₃.val +
3 *
(2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin Y₃.val) R.val -
3 * ((cubeTriLin R.val) R.val) Y₃.val * (quadBiLin R.val) R.val) *
((cubeTriLin R.val) R.val) B₃.val +
(2 * (3 * ((cubeTriLin R.val) R.val) Y₃.val) * (quadBiLin B₃.val) R.val -
2 * (3 * ((cubeTriLin R.val) R.val) B₃.val) * (quadBiLin Y₃.val) R.val) *
((cubeTriLin R.val) R.val) R.val) =
0 R:AnomalyFreePerp⊢ (2 * (3 * ((cubeTriLin R.val) R.val) Y₃.val) * (quadBiLin B₃.val) R.val -
2 * (3 * ((cubeTriLin R.val) R.val) B₃.val) * (quadBiLin Y₃.val) R.val) ^
2 *
(3 *
(3 * ((cubeTriLin R.val) R.val) B₃.val * (quadBiLin R.val) R.val -
2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin B₃.val) R.val) *
((cubeTriLin R.val) R.val) Y₃.val +
3 *
(2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin Y₃.val) R.val -
3 * ((cubeTriLin R.val) R.val) Y₃.val * (quadBiLin R.val) R.val) *
((cubeTriLin R.val) R.val) B₃.val +
(2 * (3 * ((cubeTriLin R.val) R.val) Y₃.val) * (quadBiLin B₃.val) R.val -
2 * (3 * ((cubeTriLin R.val) R.val) B₃.val) * (quadBiLin Y₃.val) R.val) *
((cubeTriLin R.val) R.val) R.val) =
0] R:AnomalyFreePerp⊢ (2 * (3 * ((cubeTriLin R.val) R.val) Y₃.val) * (quadBiLin B₃.val) R.val -
2 * (3 * ((cubeTriLin R.val) R.val) B₃.val) * (quadBiLin Y₃.val) R.val) ^
2 *
(3 *
(3 * ((cubeTriLin R.val) R.val) B₃.val * (quadBiLin R.val) R.val -
2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin B₃.val) R.val) *
((cubeTriLin R.val) R.val) Y₃.val +
3 *
(2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin Y₃.val) R.val -
3 * ((cubeTriLin R.val) R.val) Y₃.val * (quadBiLin R.val) R.val) *
((cubeTriLin R.val) R.val) B₃.val +
(2 * (3 * ((cubeTriLin R.val) R.val) Y₃.val) * (quadBiLin B₃.val) R.val -
2 * (3 * ((cubeTriLin R.val) R.val) B₃.val) * (quadBiLin Y₃.val) R.val) *
((cubeTriLin R.val) R.val) R.val) =
0
ring All goals completed! 🐙
lemma toSolNSQuad_eq_planeY₃B₃_on_α (R : MSSMACC.AnomalyFreePerp) :
(toSolNSQuad R).1 = planeY₃B₃ R (α₁ R) (α₂ R) (α₃ R) := by R:AnomalyFreePerp⊢ R.toSolNSQuad.toLinSols = planeY₃B₃ R (α₁ R) (α₂ R) (α₃ R)
change (planeY₃B₃ _ _ _ _) = _ R:AnomalyFreePerp⊢ planeY₃B₃ R
(3 * ((cubeTriLin R.val) R.val) B₃.val * (quadBiLin R.val) R.val -
2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin B₃.val) R.val)
(2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin Y₃.val) R.val -
3 * ((cubeTriLin R.val) R.val) Y₃.val * (quadBiLin R.val) R.val)
(2 * (3 * ((cubeTriLin R.val) R.val) Y₃.val) * (quadBiLin B₃.val) R.val -
2 * (3 * ((cubeTriLin R.val) R.val) B₃.val) * (quadBiLin Y₃.val) R.val) =
planeY₃B₃ R (α₁ R) (α₂ R) (α₃ R)
apply planeY₃B₃_eq R:AnomalyFreePerp⊢ 3 * ((cubeTriLin R.val) R.val) B₃.val * (quadBiLin R.val) R.val -
2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin B₃.val) R.val =
α₁ R ∧
2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin Y₃.val) R.val -
3 * ((cubeTriLin R.val) R.val) Y₃.val * (quadBiLin R.val) R.val =
α₂ R ∧
2 * (3 * ((cubeTriLin R.val) R.val) Y₃.val) * (quadBiLin B₃.val) R.val -
2 * (3 * ((cubeTriLin R.val) R.val) B₃.val) * (quadBiLin Y₃.val) R.val =
α₃ R
rw [α₁, R:AnomalyFreePerp⊢ 3 * ((cubeTriLin R.val) R.val) B₃.val * (quadBiLin R.val) R.val -
2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin B₃.val) R.val =
3 * ((cubeTriLin R.val) R.val) B₃.val * (quadBiLin R.val) R.val -
2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin B₃.val) R.val ∧
2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin Y₃.val) R.val -
3 * ((cubeTriLin R.val) R.val) Y₃.val * (quadBiLin R.val) R.val =
α₂ R ∧
2 * (3 * ((cubeTriLin R.val) R.val) Y₃.val) * (quadBiLin B₃.val) R.val -
2 * (3 * ((cubeTriLin R.val) R.val) B₃.val) * (quadBiLin Y₃.val) R.val =
α₃ R R:AnomalyFreePerp⊢ 3 * ((cubeTriLin R.val) R.val) B₃.val * (quadBiLin R.val) R.val -
2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin B₃.val) R.val =
3 * ((cubeTriLin R.val) R.val) B₃.val * (quadBiLin R.val) R.val -
2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin B₃.val) R.val ∧
2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin Y₃.val) R.val -
3 * ((cubeTriLin R.val) R.val) Y₃.val * (quadBiLin R.val) R.val =
2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin Y₃.val) R.val -
3 * ((cubeTriLin R.val) R.val) Y₃.val * (quadBiLin R.val) R.val ∧
2 * (3 * ((cubeTriLin R.val) R.val) Y₃.val) * (quadBiLin B₃.val) R.val -
2 * (3 * ((cubeTriLin R.val) R.val) B₃.val) * (quadBiLin Y₃.val) R.val =
6 *
(((cubeTriLin R.val) R.val) Y₃.val * (quadBiLin B₃.val) R.val -
((cubeTriLin R.val) R.val) B₃.val * (quadBiLin Y₃.val) R.val) α₂, R:AnomalyFreePerp⊢ 3 * ((cubeTriLin R.val) R.val) B₃.val * (quadBiLin R.val) R.val -
2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin B₃.val) R.val =
3 * ((cubeTriLin R.val) R.val) B₃.val * (quadBiLin R.val) R.val -
2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin B₃.val) R.val ∧
2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin Y₃.val) R.val -
3 * ((cubeTriLin R.val) R.val) Y₃.val * (quadBiLin R.val) R.val =
2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin Y₃.val) R.val -
3 * ((cubeTriLin R.val) R.val) Y₃.val * (quadBiLin R.val) R.val ∧
2 * (3 * ((cubeTriLin R.val) R.val) Y₃.val) * (quadBiLin B₃.val) R.val -
2 * (3 * ((cubeTriLin R.val) R.val) B₃.val) * (quadBiLin Y₃.val) R.val =
α₃ R R:AnomalyFreePerp⊢ 3 * ((cubeTriLin R.val) R.val) B₃.val * (quadBiLin R.val) R.val -
2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin B₃.val) R.val =
3 * ((cubeTriLin R.val) R.val) B₃.val * (quadBiLin R.val) R.val -
2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin B₃.val) R.val ∧
2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin Y₃.val) R.val -
3 * ((cubeTriLin R.val) R.val) Y₃.val * (quadBiLin R.val) R.val =
2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin Y₃.val) R.val -
3 * ((cubeTriLin R.val) R.val) Y₃.val * (quadBiLin R.val) R.val ∧
2 * (3 * ((cubeTriLin R.val) R.val) Y₃.val) * (quadBiLin B₃.val) R.val -
2 * (3 * ((cubeTriLin R.val) R.val) B₃.val) * (quadBiLin Y₃.val) R.val =
6 *
(((cubeTriLin R.val) R.val) Y₃.val * (quadBiLin B₃.val) R.val -
((cubeTriLin R.val) R.val) B₃.val * (quadBiLin Y₃.val) R.val) α₃ R:AnomalyFreePerp⊢ 3 * ((cubeTriLin R.val) R.val) B₃.val * (quadBiLin R.val) R.val -
2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin B₃.val) R.val =
3 * ((cubeTriLin R.val) R.val) B₃.val * (quadBiLin R.val) R.val -
2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin B₃.val) R.val ∧
2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin Y₃.val) R.val -
3 * ((cubeTriLin R.val) R.val) Y₃.val * (quadBiLin R.val) R.val =
2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin Y₃.val) R.val -
3 * ((cubeTriLin R.val) R.val) Y₃.val * (quadBiLin R.val) R.val ∧
2 * (3 * ((cubeTriLin R.val) R.val) Y₃.val) * (quadBiLin B₃.val) R.val -
2 * (3 * ((cubeTriLin R.val) R.val) B₃.val) * (quadBiLin Y₃.val) R.val =
6 *
(((cubeTriLin R.val) R.val) Y₃.val * (quadBiLin B₃.val) R.val -
((cubeTriLin R.val) R.val) B₃.val * (quadBiLin Y₃.val) R.val) R:AnomalyFreePerp⊢ 3 * ((cubeTriLin R.val) R.val) B₃.val * (quadBiLin R.val) R.val -
2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin B₃.val) R.val =
3 * ((cubeTriLin R.val) R.val) B₃.val * (quadBiLin R.val) R.val -
2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin B₃.val) R.val ∧
2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin Y₃.val) R.val -
3 * ((cubeTriLin R.val) R.val) Y₃.val * (quadBiLin R.val) R.val =
2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin Y₃.val) R.val -
3 * ((cubeTriLin R.val) R.val) Y₃.val * (quadBiLin R.val) R.val ∧
2 * (3 * ((cubeTriLin R.val) R.val) Y₃.val) * (quadBiLin B₃.val) R.val -
2 * (3 * ((cubeTriLin R.val) R.val) B₃.val) * (quadBiLin Y₃.val) R.val =
6 *
(((cubeTriLin R.val) R.val) Y₃.val * (quadBiLin B₃.val) R.val -
((cubeTriLin R.val) R.val) B₃.val * (quadBiLin Y₃.val) R.val)] R:AnomalyFreePerp⊢ 3 * ((cubeTriLin R.val) R.val) B₃.val * (quadBiLin R.val) R.val -
2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin B₃.val) R.val =
3 * ((cubeTriLin R.val) R.val) B₃.val * (quadBiLin R.val) R.val -
2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin B₃.val) R.val ∧
2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin Y₃.val) R.val -
3 * ((cubeTriLin R.val) R.val) Y₃.val * (quadBiLin R.val) R.val =
2 * ((cubeTriLin R.val) R.val) R.val * (quadBiLin Y₃.val) R.val -
3 * ((cubeTriLin R.val) R.val) Y₃.val * (quadBiLin R.val) R.val ∧
2 * (3 * ((cubeTriLin R.val) R.val) Y₃.val) * (quadBiLin B₃.val) R.val -
2 * (3 * ((cubeTriLin R.val) R.val) B₃.val) * (quadBiLin Y₃.val) R.val =
6 *
(((cubeTriLin R.val) R.val) Y₃.val * (quadBiLin B₃.val) R.val -
((cubeTriLin R.val) R.val) B₃.val * (quadBiLin Y₃.val) R.val)
ring_nf R:AnomalyFreePerp⊢ True ∧ True ∧ True
exact ⟨trivial, trivial, trivial⟩ All goals completed! 🐙
Given an R perpendicular to Y₃ and B₃, an element of Sols. This map is
not surjective.
def toSolNS : MSSMACC.AnomalyFreePerp × ℚ × ℚ × ℚ → MSSMACC.Sols := fun (R, a, _, _) =>
a • AnomalyFreeMk'' (toSolNSQuad R) (toSolNSQuad_cube R)
A map from Sols to MSSMACC.AnomalyFreePerp × ℚ × ℚ × ℚ which on elements of
notInLineEqSol will produce a right inverse to toSolNS.
def toSolNSProj (T : MSSMACC.Sols) : MSSMACC.AnomalyFreePerp × ℚ × ℚ × ℚ :=
(proj T.1.1, (lineEqCoeff T)⁻¹, 0, 0)
lemma toSolNS_proj (T : NotInLineEqSol) : toSolNS (toSolNSProj T.val) = T.val := by T:NotInLineEqSol⊢ toSolNS (toSolNSProj ↑T) = ↑T
apply ACCSystem.Sols.ext T:NotInLineEqSol⊢ (toSolNS (toSolNSProj ↑T)).val = (↑T).val
rw [toSolNS, T:NotInLineEqSol⊢ ((toSolNSProj ↑T).2.1 • AnomalyFreeMk'' (toSolNSProj ↑T).1.toSolNSQuad ⋯).val = (↑T).val T:NotInLineEqSol⊢ ((proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).2.1 •
AnomalyFreeMk'' (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1.toSolNSQuad ⋯).val =
(↑T).val toSolNSProj T:NotInLineEqSol⊢ ((proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).2.1 •
AnomalyFreeMk'' (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1.toSolNSQuad ⋯).val =
(↑T).val T:NotInLineEqSol⊢ ((proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).2.1 •
AnomalyFreeMk'' (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1.toSolNSQuad ⋯).val =
(↑T).val] T:NotInLineEqSol⊢ ((proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).2.1 •
AnomalyFreeMk'' (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1.toSolNSQuad ⋯).val =
(↑T).val
change (lineEqCoeff T.val)⁻¹ • (toSolNSQuad _).1.1 = _ T:NotInLineEqSol⊢ (lineEqCoeff ↑T)⁻¹ • (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1.toSolNSQuad.val = (↑T).val
rw [toSolNSQuad_eq_planeY₃B₃_on_α T:NotInLineEqSol⊢ (lineEqCoeff ↑T)⁻¹ •
(planeY₃B₃ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1 (α₁ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1)
(α₂ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1)
(α₃ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1)).val =
(↑T).val T:NotInLineEqSol⊢ (lineEqCoeff ↑T)⁻¹ •
(planeY₃B₃ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1 (α₁ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1)
(α₂ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1)
(α₃ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1)).val =
(↑T).val] T:NotInLineEqSol⊢ (lineEqCoeff ↑T)⁻¹ •
(planeY₃B₃ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1 (α₁ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1)
(α₂ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1)
(α₃ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1)).val =
(↑T).val
rw [planeY₃B₃_val T:NotInLineEqSol⊢ (lineEqCoeff ↑T)⁻¹ •
(α₁ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1 • Y₃.val +
α₂ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1 • B₃.val +
α₃ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1 • (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1.val) =
(↑T).val T:NotInLineEqSol⊢ (lineEqCoeff ↑T)⁻¹ •
(α₁ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1 • Y₃.val +
α₂ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1 • B₃.val +
α₃ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1 • (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1.val) =
(↑T).val] T:NotInLineEqSol⊢ (lineEqCoeff ↑T)⁻¹ •
(α₁ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1 • Y₃.val +
α₂ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1 • B₃.val +
α₃ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1 • (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1.val) =
(↑T).val
rw [Y₃_plus_B₃_plus_proj T:NotInLineEqSol⊢ (lineEqCoeff ↑T)⁻¹ •
((α₁ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1 +
α₃ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1 * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val)) •
Y₃.val +
(α₂ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1 +
α₃ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1 *
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) •
B₃.val +
((dot Y₃.val) B₃.val * α₃ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1) • (↑T).val) =
(↑T).val T:NotInLineEqSol⊢ (lineEqCoeff ↑T)⁻¹ •
((α₁ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1 +
α₃ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1 * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val)) •
Y₃.val +
(α₂ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1 +
α₃ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1 *
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) •
B₃.val +
((dot Y₃.val) B₃.val * α₃ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1) • (↑T).val) =
(↑T).val] T:NotInLineEqSol⊢ (lineEqCoeff ↑T)⁻¹ •
((α₁ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1 +
α₃ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1 * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val)) •
Y₃.val +
(α₂ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1 +
α₃ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1 *
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) •
B₃.val +
((dot Y₃.val) B₃.val * α₃ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1) • (↑T).val) =
(↑T).val
rw [α₁_proj, T:NotInLineEqSol⊢ (lineEqCoeff ↑T)⁻¹ •
((-α₃ (proj (↑T).toLinSols) * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) +
α₃ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1 * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val)) •
Y₃.val +
(α₂ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1 +
α₃ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1 *
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) •
B₃.val +
((dot Y₃.val) B₃.val * α₃ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1) • (↑T).val) =
(↑T).val T:NotInLineEqSol⊢ (lineEqCoeff ↑T)⁻¹ •
((-α₃ (proj (↑T).toLinSols) * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) +
α₃ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1 * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val)) •
Y₃.val +
(-α₃ (proj (↑T).toLinSols) * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val) +
α₃ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1 *
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) •
B₃.val +
((dot Y₃.val) B₃.val * α₃ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1) • (↑T).val) =
(↑T).val α₂_proj T:NotInLineEqSol⊢ (lineEqCoeff ↑T)⁻¹ •
((-α₃ (proj (↑T).toLinSols) * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) +
α₃ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1 * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val)) •
Y₃.val +
(-α₃ (proj (↑T).toLinSols) * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val) +
α₃ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1 *
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) •
B₃.val +
((dot Y₃.val) B₃.val * α₃ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1) • (↑T).val) =
(↑T).val T:NotInLineEqSol⊢ (lineEqCoeff ↑T)⁻¹ •
((-α₃ (proj (↑T).toLinSols) * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) +
α₃ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1 * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val)) •
Y₃.val +
(-α₃ (proj (↑T).toLinSols) * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val) +
α₃ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1 *
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) •
B₃.val +
((dot Y₃.val) B₃.val * α₃ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1) • (↑T).val) =
(↑T).val] T:NotInLineEqSol⊢ (lineEqCoeff ↑T)⁻¹ •
((-α₃ (proj (↑T).toLinSols) * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) +
α₃ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1 * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val)) •
Y₃.val +
(-α₃ (proj (↑T).toLinSols) * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val) +
α₃ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1 *
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) •
B₃.val +
((dot Y₃.val) B₃.val * α₃ (proj (↑T).toLinSols, (lineEqCoeff ↑T)⁻¹, 0, 0).1) • (↑T).val) =
(↑T).val
ring_nf T:NotInLineEqSol⊢ (lineEqCoeff ↑T)⁻¹ • (0 • Y₃.val + 0 • B₃.val + (α₃ (proj (↑T).toLinSols) * (dot Y₃.val) B₃.val) • (↑T).val) = (↑T).val
simp only [zero_smul, add_zero, zero_add] T:NotInLineEqSol⊢ (lineEqCoeff ↑T)⁻¹ • (α₃ (proj (↑T).toLinSols) * (dot Y₃.val) B₃.val) • (↑T).val = (↑T).val
have h1 : α₃ (proj T.val.toLinSols) * dot Y₃.val B₃.val = lineEqCoeff T.val := by T:NotInLineEqSol⊢ toSolNS (toSolNSProj ↑T) = ↑T T:NotInLineEqSolh1:α₃ (proj (↑T).toLinSols) * (dot Y₃.val) B₃.val = lineEqCoeff ↑T⊢ (lineEqCoeff ↑T)⁻¹ • (α₃ (proj (↑T).toLinSols) * (dot Y₃.val) B₃.val) • (↑T).val = (↑T).val
rw [lineEqCoeff T:NotInLineEqSol⊢ α₃ (proj (↑T).toLinSols) * (dot Y₃.val) B₃.val = (dot Y₃.val) B₃.val * α₃ (proj (↑T).toLinSols) T:NotInLineEqSol⊢ α₃ (proj (↑T).toLinSols) * (dot Y₃.val) B₃.val = (dot Y₃.val) B₃.val * α₃ (proj (↑T).toLinSols) T:NotInLineEqSolh1:α₃ (proj (↑T).toLinSols) * (dot Y₃.val) B₃.val = lineEqCoeff ↑T⊢ (lineEqCoeff ↑T)⁻¹ • (α₃ (proj (↑T).toLinSols) * (dot Y₃.val) B₃.val) • (↑T).val = (↑T).val] T:NotInLineEqSol⊢ α₃ (proj (↑T).toLinSols) * (dot Y₃.val) B₃.val = (dot Y₃.val) B₃.val * α₃ (proj (↑T).toLinSols) T:NotInLineEqSolh1:α₃ (proj (↑T).toLinSols) * (dot Y₃.val) B₃.val = lineEqCoeff ↑T⊢ (lineEqCoeff ↑T)⁻¹ • (α₃ (proj (↑T).toLinSols) * (dot Y₃.val) B₃.val) • (↑T).val = (↑T).val
ring T:NotInLineEqSolh1:α₃ (proj (↑T).toLinSols) * (dot Y₃.val) B₃.val = lineEqCoeff ↑T⊢ (lineEqCoeff ↑T)⁻¹ • (α₃ (proj (↑T).toLinSols) * (dot Y₃.val) B₃.val) • (↑T).val = (↑T).val T:NotInLineEqSolh1:α₃ (proj (↑T).toLinSols) * (dot Y₃.val) B₃.val = lineEqCoeff ↑T⊢ (lineEqCoeff ↑T)⁻¹ • (α₃ (proj (↑T).toLinSols) * (dot Y₃.val) B₃.val) • (↑T).val = (↑T).val
rw [h1 T:NotInLineEqSolh1:α₃ (proj (↑T).toLinSols) * (dot Y₃.val) B₃.val = lineEqCoeff ↑T⊢ (lineEqCoeff ↑T)⁻¹ • lineEqCoeff ↑T • (↑T).val = (↑T).val T:NotInLineEqSolh1:α₃ (proj (↑T).toLinSols) * (dot Y₃.val) B₃.val = lineEqCoeff ↑T⊢ (lineEqCoeff ↑T)⁻¹ • lineEqCoeff ↑T • (↑T).val = (↑T).val] T:NotInLineEqSolh1:α₃ (proj (↑T).toLinSols) * (dot Y₃.val) B₃.val = lineEqCoeff ↑T⊢ (lineEqCoeff ↑T)⁻¹ • lineEqCoeff ↑T • (↑T).val = (↑T).val
have h1 := (lineEqPropSol_iff_lineEqCoeff_zero T.val).mpr.mt T.prop T:NotInLineEqSolh1✝:α₃ (proj (↑T).toLinSols) * (dot Y₃.val) B₃.val = lineEqCoeff ↑Th1:¬lineEqCoeff ↑T = 0⊢ (lineEqCoeff ↑T)⁻¹ • lineEqCoeff ↑T • (↑T).val = (↑T).val
rw [← SemigroupAction.mul_smul, T:NotInLineEqSolh1✝:α₃ (proj (↑T).toLinSols) * (dot Y₃.val) B₃.val = lineEqCoeff ↑Th1:¬lineEqCoeff ↑T = 0⊢ ((lineEqCoeff ↑T)⁻¹ * lineEqCoeff ↑T) • (↑T).val = (↑T).val T:NotInLineEqSolh1✝:α₃ (proj (↑T).toLinSols) * (dot Y₃.val) B₃.val = lineEqCoeff ↑Th1:¬lineEqCoeff ↑T = 0⊢ 1 • (↑T).val = (↑T).val mul_comm, T:NotInLineEqSolh1✝:α₃ (proj (↑T).toLinSols) * (dot Y₃.val) B₃.val = lineEqCoeff ↑Th1:¬lineEqCoeff ↑T = 0⊢ (lineEqCoeff ↑T * (lineEqCoeff ↑T)⁻¹) • (↑T).val = (↑T).val T:NotInLineEqSolh1✝:α₃ (proj (↑T).toLinSols) * (dot Y₃.val) B₃.val = lineEqCoeff ↑Th1:¬lineEqCoeff ↑T = 0⊢ 1 • (↑T).val = (↑T).val mul_inv_cancel₀ h1 T:NotInLineEqSolh1✝:α₃ (proj (↑T).toLinSols) * (dot Y₃.val) B₃.val = lineEqCoeff ↑Th1:¬lineEqCoeff ↑T = 0⊢ 1 • (↑T).val = (↑T).val T:NotInLineEqSolh1✝:α₃ (proj (↑T).toLinSols) * (dot Y₃.val) B₃.val = lineEqCoeff ↑Th1:¬lineEqCoeff ↑T = 0⊢ 1 • (↑T).val = (↑T).val] T:NotInLineEqSolh1✝:α₃ (proj (↑T).toLinSols) * (dot Y₃.val) B₃.val = lineEqCoeff ↑Th1:¬lineEqCoeff ↑T = 0⊢ 1 • (↑T).val = (↑T).val
exact MulAction.one_smul T.1.val All goals completed! 🐙
A solution to the ACCs, given an element of inLineEq × ℚ × ℚ × ℚ.
def inLineEqToSol : InLineEq × ℚ × ℚ × ℚ → MSSMACC.Sols := fun (R, c₁, c₂, c₃) =>
AnomalyFreeMk'' (lineQuad R.val c₁ c₂ c₃)
(by x✝:InLineEq × ℚ × ℚ × ℚR:InLineEqc₁:ℚc₂:ℚc₃:ℚ⊢ accCube (lineQuad (↑R) c₁ c₂ c₃).val = 0
rw [lineQuad_cube x✝:InLineEq × ℚ × ℚ × ℚR:InLineEqc₁:ℚc₂:ℚc₃:ℚ⊢ -4 * (c₁ * (quadBiLin B₃.val) (↑R).val - c₂ * (quadBiLin Y₃.val) (↑R).val) ^ 2 *
(α₁ ↑R * c₁ + α₂ ↑R * c₂ + α₃ ↑R * c₃) =
0 x✝:InLineEq × ℚ × ℚ × ℚR:InLineEqc₁:ℚc₂:ℚc₃:ℚ⊢ -4 * (c₁ * (quadBiLin B₃.val) (↑R).val - c₂ * (quadBiLin Y₃.val) (↑R).val) ^ 2 *
(α₁ ↑R * c₁ + α₂ ↑R * c₂ + α₃ ↑R * c₃) =
0] x✝:InLineEq × ℚ × ℚ × ℚR:InLineEqc₁:ℚc₂:ℚc₃:ℚ⊢ -4 * (c₁ * (quadBiLin B₃.val) (↑R).val - c₂ * (quadBiLin Y₃.val) (↑R).val) ^ 2 *
(α₁ ↑R * c₁ + α₂ ↑R * c₂ + α₃ ↑R * c₃) =
0
rw [R.prop.1, x✝:InLineEq × ℚ × ℚ × ℚR:InLineEqc₁:ℚc₂:ℚc₃:ℚ⊢ -4 * (c₁ * (quadBiLin B₃.val) (↑R).val - c₂ * (quadBiLin Y₃.val) (↑R).val) ^ 2 * (0 * c₁ + α₂ ↑R * c₂ + α₃ ↑R * c₃) = 0 x✝:InLineEq × ℚ × ℚ × ℚR:InLineEqc₁:ℚc₂:ℚc₃:ℚ⊢ -4 * (c₁ * (quadBiLin B₃.val) (↑R).val - c₂ * (quadBiLin Y₃.val) (↑R).val) ^ 2 * (0 * c₁ + 0 * c₂ + 0 * c₃) = 0 R.prop.2.1, x✝:InLineEq × ℚ × ℚ × ℚR:InLineEqc₁:ℚc₂:ℚc₃:ℚ⊢ -4 * (c₁ * (quadBiLin B₃.val) (↑R).val - c₂ * (quadBiLin Y₃.val) (↑R).val) ^ 2 * (0 * c₁ + 0 * c₂ + α₃ ↑R * c₃) = 0 x✝:InLineEq × ℚ × ℚ × ℚR:InLineEqc₁:ℚc₂:ℚc₃:ℚ⊢ -4 * (c₁ * (quadBiLin B₃.val) (↑R).val - c₂ * (quadBiLin Y₃.val) (↑R).val) ^ 2 * (0 * c₁ + 0 * c₂ + 0 * c₃) = 0 R.prop.2.2 x✝:InLineEq × ℚ × ℚ × ℚR:InLineEqc₁:ℚc₂:ℚc₃:ℚ⊢ -4 * (c₁ * (quadBiLin B₃.val) (↑R).val - c₂ * (quadBiLin Y₃.val) (↑R).val) ^ 2 * (0 * c₁ + 0 * c₂ + 0 * c₃) = 0 x✝:InLineEq × ℚ × ℚ × ℚR:InLineEqc₁:ℚc₂:ℚc₃:ℚ⊢ -4 * (c₁ * (quadBiLin B₃.val) (↑R).val - c₂ * (quadBiLin Y₃.val) (↑R).val) ^ 2 * (0 * c₁ + 0 * c₂ + 0 * c₃) = 0] x✝:InLineEq × ℚ × ℚ × ℚR:InLineEqc₁:ℚc₂:ℚc₃:ℚ⊢ -4 * (c₁ * (quadBiLin B₃.val) (↑R).val - c₂ * (quadBiLin Y₃.val) (↑R).val) ^ 2 * (0 * c₁ + 0 * c₂ + 0 * c₃) = 0
simp All goals completed! 🐙)
On elements of inLineEqSol a right-inverse to inLineEqSol.
def inLineEqProj (T : InLineEqSol) : InLineEq × ℚ × ℚ × ℚ :=
(⟨proj T.val.1.1, (linEqPropSol_iff_proj_linEqProp T.val).mp T.prop.1⟩,
(quadCoeff T.val)⁻¹ * quadBiLin B₃.val T.val.val,
(quadCoeff T.val)⁻¹ * (- quadBiLin Y₃.val T.val.val),
(quadCoeff T.val)⁻¹ *
(quadBiLin B₃.val T.val.val * (dot B₃.val T.val.val - dot Y₃.val T.val.val)
- quadBiLin Y₃.val T.val.val * (dot Y₃.val T.val.val - 2 * dot B₃.val T.val.val)))
lemma inLineEqTo_smul (R : InLineEq) (c₁ c₂ c₃ d : ℚ) :
inLineEqToSol (R, (d * c₁), (d * c₂), (d * c₃)) = d • inLineEqToSol (R, c₁, c₂, c₃) := by R:InLineEqc₁:ℚc₂:ℚc₃:ℚd:ℚ⊢ inLineEqToSol (R, d * c₁, d * c₂, d * c₃) = d • inLineEqToSol (R, c₁, c₂, c₃)
apply ACCSystem.Sols.ext R:InLineEqc₁:ℚc₂:ℚc₃:ℚd:ℚ⊢ (inLineEqToSol (R, d * c₁, d * c₂, d * c₃)).val = (d • inLineEqToSol (R, c₁, c₂, c₃)).val
change (lineQuad _ _ _ _).val = _ R:InLineEqc₁:ℚc₂:ℚc₃:ℚd:ℚ⊢ (lineQuad (↑R) (d * c₁) (d * c₂) (d * c₃)).val = (d • inLineEqToSol (R, c₁, c₂, c₃)).val
rw [lineQuad_smul R:InLineEqc₁:ℚc₂:ℚc₃:ℚd:ℚ⊢ (d • lineQuad (↑R) c₁ c₂ c₃).val = (d • inLineEqToSol (R, c₁, c₂, c₃)).val R:InLineEqc₁:ℚc₂:ℚc₃:ℚd:ℚ⊢ (d • lineQuad (↑R) c₁ c₂ c₃).val = (d • inLineEqToSol (R, c₁, c₂, c₃)).val] R:InLineEqc₁:ℚc₂:ℚc₃:ℚd:ℚ⊢ (d • lineQuad (↑R) c₁ c₂ c₃).val = (d • inLineEqToSol (R, c₁, c₂, c₃)).val
rfl All goals completed! 🐙
lemma inLineEqToSol_proj (T : InLineEqSol) : inLineEqToSol (inLineEqProj T) = T.val := by T:InLineEqSol⊢ inLineEqToSol (inLineEqProj T) = ↑T
rw [inLineEqProj, T:InLineEqSol⊢ inLineEqToSol
(⟨proj (↑T).toLinSols, ⋯⟩, (quadCoeff ↑T)⁻¹ * (quadBiLin B₃.val) (↑T).val,
(quadCoeff ↑T)⁻¹ * -(quadBiLin Y₃.val) (↑T).val,
(quadCoeff ↑T)⁻¹ *
((quadBiLin B₃.val) (↑T).val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val))) =
↑T T:InLineEqSol⊢ (quadCoeff ↑T)⁻¹ •
inLineEqToSol
(⟨proj (↑T).toLinSols, ⋯⟩, (quadBiLin B₃.val) (↑T).val, -(quadBiLin Y₃.val) (↑T).val,
(quadBiLin B₃.val) (↑T).val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) =
↑T inLineEqTo_smul T:InLineEqSol⊢ (quadCoeff ↑T)⁻¹ •
inLineEqToSol
(⟨proj (↑T).toLinSols, ⋯⟩, (quadBiLin B₃.val) (↑T).val, -(quadBiLin Y₃.val) (↑T).val,
(quadBiLin B₃.val) (↑T).val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) =
↑T T:InLineEqSol⊢ (quadCoeff ↑T)⁻¹ •
inLineEqToSol
(⟨proj (↑T).toLinSols, ⋯⟩, (quadBiLin B₃.val) (↑T).val, -(quadBiLin Y₃.val) (↑T).val,
(quadBiLin B₃.val) (↑T).val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) =
↑T] T:InLineEqSol⊢ (quadCoeff ↑T)⁻¹ •
inLineEqToSol
(⟨proj (↑T).toLinSols, ⋯⟩, (quadBiLin B₃.val) (↑T).val, -(quadBiLin Y₃.val) (↑T).val,
(quadBiLin B₃.val) (↑T).val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) =
↑T
apply ACCSystem.Sols.ext T:InLineEqSol⊢ ((quadCoeff ↑T)⁻¹ •
inLineEqToSol
(⟨proj (↑T).toLinSols, ⋯⟩, (quadBiLin B₃.val) (↑T).val, -(quadBiLin Y₃.val) (↑T).val,
(quadBiLin B₃.val) (↑T).val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val))).val =
(↑T).val
change _ • (lineQuad _ _ _ _).val = _ T:InLineEqSol⊢ (quadCoeff ↑T)⁻¹ •
(lineQuad (↑⟨proj (↑T).toLinSols, ⋯⟩) ((quadBiLin B₃.val) (↑T).val) (-(quadBiLin Y₃.val) (↑T).val)
((quadBiLin B₃.val) (↑T).val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val))).val =
(↑T).val
rw [lineQuad_val T:InLineEqSol⊢ (quadCoeff ↑T)⁻¹ •
(planeY₃B₃ (↑⟨proj (↑T).toLinSols, ⋯⟩)
(-(quadBiLin Y₃.val) (↑T).val * (quadBiLin (↑⟨proj (↑T).toLinSols, ⋯⟩).val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val -
2 *
((quadBiLin B₃.val) (↑T).val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
(quadBiLin B₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val)
(2 *
((quadBiLin B₃.val) (↑T).val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
(quadBiLin Y₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val -
(quadBiLin B₃.val) (↑T).val * (quadBiLin (↑⟨proj (↑T).toLinSols, ⋯⟩).val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val)
(2 * (quadBiLin B₃.val) (↑T).val * (quadBiLin B₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val -
2 * -(quadBiLin Y₃.val) (↑T).val * (quadBiLin Y₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val)).val =
(↑T).val T:InLineEqSol⊢ (quadCoeff ↑T)⁻¹ •
(planeY₃B₃ (↑⟨proj (↑T).toLinSols, ⋯⟩)
(-(quadBiLin Y₃.val) (↑T).val * (quadBiLin (↑⟨proj (↑T).toLinSols, ⋯⟩).val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val -
2 *
((quadBiLin B₃.val) (↑T).val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
(quadBiLin B₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val)
(2 *
((quadBiLin B₃.val) (↑T).val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
(quadBiLin Y₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val -
(quadBiLin B₃.val) (↑T).val * (quadBiLin (↑⟨proj (↑T).toLinSols, ⋯⟩).val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val)
(2 * (quadBiLin B₃.val) (↑T).val * (quadBiLin B₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val -
2 * -(quadBiLin Y₃.val) (↑T).val * (quadBiLin Y₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val)).val =
(↑T).val] T:InLineEqSol⊢ (quadCoeff ↑T)⁻¹ •
(planeY₃B₃ (↑⟨proj (↑T).toLinSols, ⋯⟩)
(-(quadBiLin Y₃.val) (↑T).val * (quadBiLin (↑⟨proj (↑T).toLinSols, ⋯⟩).val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val -
2 *
((quadBiLin B₃.val) (↑T).val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
(quadBiLin B₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val)
(2 *
((quadBiLin B₃.val) (↑T).val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
(quadBiLin Y₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val -
(quadBiLin B₃.val) (↑T).val * (quadBiLin (↑⟨proj (↑T).toLinSols, ⋯⟩).val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val)
(2 * (quadBiLin B₃.val) (↑T).val * (quadBiLin B₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val -
2 * -(quadBiLin Y₃.val) (↑T).val * (quadBiLin Y₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val)).val =
(↑T).val
rw [planeY₃B₃_val T:InLineEqSol⊢ (quadCoeff ↑T)⁻¹ •
((-(quadBiLin Y₃.val) (↑T).val * (quadBiLin (↑⟨proj (↑T).toLinSols, ⋯⟩).val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val -
2 *
((quadBiLin B₃.val) (↑T).val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
(quadBiLin B₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val) •
Y₃.val +
(2 *
((quadBiLin B₃.val) (↑T).val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
(quadBiLin Y₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val -
(quadBiLin B₃.val) (↑T).val * (quadBiLin (↑⟨proj (↑T).toLinSols, ⋯⟩).val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val) •
B₃.val +
(2 * (quadBiLin B₃.val) (↑T).val * (quadBiLin B₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val -
2 * -(quadBiLin Y₃.val) (↑T).val * (quadBiLin Y₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val) •
(↑⟨proj (↑T).toLinSols, ⋯⟩).val) =
(↑T).val T:InLineEqSol⊢ (quadCoeff ↑T)⁻¹ •
((-(quadBiLin Y₃.val) (↑T).val * (quadBiLin (↑⟨proj (↑T).toLinSols, ⋯⟩).val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val -
2 *
((quadBiLin B₃.val) (↑T).val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
(quadBiLin B₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val) •
Y₃.val +
(2 *
((quadBiLin B₃.val) (↑T).val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
(quadBiLin Y₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val -
(quadBiLin B₃.val) (↑T).val * (quadBiLin (↑⟨proj (↑T).toLinSols, ⋯⟩).val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val) •
B₃.val +
(2 * (quadBiLin B₃.val) (↑T).val * (quadBiLin B₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val -
2 * -(quadBiLin Y₃.val) (↑T).val * (quadBiLin Y₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val) •
(↑⟨proj (↑T).toLinSols, ⋯⟩).val) =
(↑T).val] T:InLineEqSol⊢ (quadCoeff ↑T)⁻¹ •
((-(quadBiLin Y₃.val) (↑T).val * (quadBiLin (↑⟨proj (↑T).toLinSols, ⋯⟩).val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val -
2 *
((quadBiLin B₃.val) (↑T).val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
(quadBiLin B₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val) •
Y₃.val +
(2 *
((quadBiLin B₃.val) (↑T).val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
(quadBiLin Y₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val -
(quadBiLin B₃.val) (↑T).val * (quadBiLin (↑⟨proj (↑T).toLinSols, ⋯⟩).val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val) •
B₃.val +
(2 * (quadBiLin B₃.val) (↑T).val * (quadBiLin B₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val -
2 * -(quadBiLin Y₃.val) (↑T).val * (quadBiLin Y₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val) •
(↑⟨proj (↑T).toLinSols, ⋯⟩).val) =
(↑T).val
rw [Y₃_plus_B₃_plus_proj T:InLineEqSol⊢ (quadCoeff ↑T)⁻¹ •
((-(quadBiLin Y₃.val) (↑T).val * (quadBiLin (↑⟨proj (↑T).toLinSols, ⋯⟩).val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val -
2 *
((quadBiLin B₃.val) (↑T).val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
(quadBiLin B₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val +
(2 * (quadBiLin B₃.val) (↑T).val * (quadBiLin B₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val -
2 * -(quadBiLin Y₃.val) (↑T).val * (quadBiLin Y₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val) *
((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val)) •
Y₃.val +
(2 *
((quadBiLin B₃.val) (↑T).val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
(quadBiLin Y₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val -
(quadBiLin B₃.val) (↑T).val *
(quadBiLin (↑⟨proj (↑T).toLinSols, ⋯⟩).val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val +
(2 * (quadBiLin B₃.val) (↑T).val * (quadBiLin B₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val -
2 * -(quadBiLin Y₃.val) (↑T).val * (quadBiLin Y₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val) *
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) •
B₃.val +
((dot Y₃.val) B₃.val *
(2 * (quadBiLin B₃.val) (↑T).val * (quadBiLin B₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val -
2 * -(quadBiLin Y₃.val) (↑T).val * (quadBiLin Y₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val)) •
(↑T).val) =
(↑T).val T:InLineEqSol⊢ (quadCoeff ↑T)⁻¹ •
((-(quadBiLin Y₃.val) (↑T).val * (quadBiLin (↑⟨proj (↑T).toLinSols, ⋯⟩).val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val -
2 *
((quadBiLin B₃.val) (↑T).val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
(quadBiLin B₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val +
(2 * (quadBiLin B₃.val) (↑T).val * (quadBiLin B₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val -
2 * -(quadBiLin Y₃.val) (↑T).val * (quadBiLin Y₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val) *
((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val)) •
Y₃.val +
(2 *
((quadBiLin B₃.val) (↑T).val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
(quadBiLin Y₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val -
(quadBiLin B₃.val) (↑T).val *
(quadBiLin (↑⟨proj (↑T).toLinSols, ⋯⟩).val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val +
(2 * (quadBiLin B₃.val) (↑T).val * (quadBiLin B₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val -
2 * -(quadBiLin Y₃.val) (↑T).val * (quadBiLin Y₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val) *
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) •
B₃.val +
((dot Y₃.val) B₃.val *
(2 * (quadBiLin B₃.val) (↑T).val * (quadBiLin B₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val -
2 * -(quadBiLin Y₃.val) (↑T).val * (quadBiLin Y₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val)) •
(↑T).val) =
(↑T).val] T:InLineEqSol⊢ (quadCoeff ↑T)⁻¹ •
((-(quadBiLin Y₃.val) (↑T).val * (quadBiLin (↑⟨proj (↑T).toLinSols, ⋯⟩).val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val -
2 *
((quadBiLin B₃.val) (↑T).val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
(quadBiLin B₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val +
(2 * (quadBiLin B₃.val) (↑T).val * (quadBiLin B₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val -
2 * -(quadBiLin Y₃.val) (↑T).val * (quadBiLin Y₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val) *
((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val)) •
Y₃.val +
(2 *
((quadBiLin B₃.val) (↑T).val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
(quadBiLin Y₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val -
(quadBiLin B₃.val) (↑T).val *
(quadBiLin (↑⟨proj (↑T).toLinSols, ⋯⟩).val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val +
(2 * (quadBiLin B₃.val) (↑T).val * (quadBiLin B₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val -
2 * -(quadBiLin Y₃.val) (↑T).val * (quadBiLin Y₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val) *
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) •
B₃.val +
((dot Y₃.val) B₃.val *
(2 * (quadBiLin B₃.val) (↑T).val * (quadBiLin B₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val -
2 * -(quadBiLin Y₃.val) (↑T).val * (quadBiLin Y₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val)) •
(↑T).val) =
(↑T).val
rw [quad_proj, T:InLineEqSol⊢ (quadCoeff ↑T)⁻¹ •
((-(quadBiLin Y₃.val) (↑T).val *
(2 * (dot Y₃.val) B₃.val *
(((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) * (quadBiLin Y₃.val) (↑T).val +
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val) * (quadBiLin B₃.val) (↑T).val)) -
2 *
((quadBiLin B₃.val) (↑T).val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
(quadBiLin B₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val +
(2 * (quadBiLin B₃.val) (↑T).val * (quadBiLin B₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val -
2 * -(quadBiLin Y₃.val) (↑T).val * (quadBiLin Y₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val) *
((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val)) •
Y₃.val +
(2 *
((quadBiLin B₃.val) (↑T).val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
(quadBiLin Y₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val -
(quadBiLin B₃.val) (↑T).val *
(2 * (dot Y₃.val) B₃.val *
(((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) * (quadBiLin Y₃.val) (↑T).val +
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val) * (quadBiLin B₃.val) (↑T).val)) +
(2 * (quadBiLin B₃.val) (↑T).val * (quadBiLin B₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val -
2 * -(quadBiLin Y₃.val) (↑T).val * (quadBiLin Y₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val) *
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) •
B₃.val +
((dot Y₃.val) B₃.val *
(2 * (quadBiLin B₃.val) (↑T).val * (quadBiLin B₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val -
2 * -(quadBiLin Y₃.val) (↑T).val * (quadBiLin Y₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val)) •
(↑T).val) =
(↑T).val T:InLineEqSol⊢ (quadCoeff ↑T)⁻¹ •
((-(quadBiLin Y₃.val) (↑T).val *
(2 * (dot Y₃.val) B₃.val *
(((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) * (quadBiLin Y₃.val) (↑T).val +
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val) * (quadBiLin B₃.val) (↑T).val)) -
2 *
((quadBiLin B₃.val) (↑T).val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
((dot Y₃.val) B₃.val * (quadBiLin B₃.val) (↑T).val) +
(2 * (quadBiLin B₃.val) (↑T).val * ((dot Y₃.val) B₃.val * (quadBiLin B₃.val) (↑T).val) -
2 * -(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) B₃.val * (quadBiLin Y₃.val) (↑T).val)) *
((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val)) •
Y₃.val +
(2 *
((quadBiLin B₃.val) (↑T).val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
((dot Y₃.val) B₃.val * (quadBiLin Y₃.val) (↑T).val) -
(quadBiLin B₃.val) (↑T).val *
(2 * (dot Y₃.val) B₃.val *
(((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) * (quadBiLin Y₃.val) (↑T).val +
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val) * (quadBiLin B₃.val) (↑T).val)) +
(2 * (quadBiLin B₃.val) (↑T).val * ((dot Y₃.val) B₃.val * (quadBiLin B₃.val) (↑T).val) -
2 * -(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) B₃.val * (quadBiLin Y₃.val) (↑T).val)) *
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) •
B₃.val +
((dot Y₃.val) B₃.val *
(2 * (quadBiLin B₃.val) (↑T).val * ((dot Y₃.val) B₃.val * (quadBiLin B₃.val) (↑T).val) -
2 * -(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) B₃.val * (quadBiLin Y₃.val) (↑T).val))) •
(↑T).val) =
(↑T).val quad_Y₃_proj, T:InLineEqSol⊢ (quadCoeff ↑T)⁻¹ •
((-(quadBiLin Y₃.val) (↑T).val *
(2 * (dot Y₃.val) B₃.val *
(((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) * (quadBiLin Y₃.val) (↑T).val +
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val) * (quadBiLin B₃.val) (↑T).val)) -
2 *
((quadBiLin B₃.val) (↑T).val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
(quadBiLin B₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val +
(2 * (quadBiLin B₃.val) (↑T).val * (quadBiLin B₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val -
2 * -(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) B₃.val * (quadBiLin Y₃.val) (↑T).val)) *
((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val)) •
Y₃.val +
(2 *
((quadBiLin B₃.val) (↑T).val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
((dot Y₃.val) B₃.val * (quadBiLin Y₃.val) (↑T).val) -
(quadBiLin B₃.val) (↑T).val *
(2 * (dot Y₃.val) B₃.val *
(((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) * (quadBiLin Y₃.val) (↑T).val +
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val) * (quadBiLin B₃.val) (↑T).val)) +
(2 * (quadBiLin B₃.val) (↑T).val * (quadBiLin B₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val -
2 * -(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) B₃.val * (quadBiLin Y₃.val) (↑T).val)) *
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) •
B₃.val +
((dot Y₃.val) B₃.val *
(2 * (quadBiLin B₃.val) (↑T).val * (quadBiLin B₃.val) (↑⟨proj (↑T).toLinSols, ⋯⟩).val -
2 * -(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) B₃.val * (quadBiLin Y₃.val) (↑T).val))) •
(↑T).val) =
(↑T).val T:InLineEqSol⊢ (quadCoeff ↑T)⁻¹ •
((-(quadBiLin Y₃.val) (↑T).val *
(2 * (dot Y₃.val) B₃.val *
(((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) * (quadBiLin Y₃.val) (↑T).val +
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val) * (quadBiLin B₃.val) (↑T).val)) -
2 *
((quadBiLin B₃.val) (↑T).val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
((dot Y₃.val) B₃.val * (quadBiLin B₃.val) (↑T).val) +
(2 * (quadBiLin B₃.val) (↑T).val * ((dot Y₃.val) B₃.val * (quadBiLin B₃.val) (↑T).val) -
2 * -(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) B₃.val * (quadBiLin Y₃.val) (↑T).val)) *
((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val)) •
Y₃.val +
(2 *
((quadBiLin B₃.val) (↑T).val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
((dot Y₃.val) B₃.val * (quadBiLin Y₃.val) (↑T).val) -
(quadBiLin B₃.val) (↑T).val *
(2 * (dot Y₃.val) B₃.val *
(((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) * (quadBiLin Y₃.val) (↑T).val +
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val) * (quadBiLin B₃.val) (↑T).val)) +
(2 * (quadBiLin B₃.val) (↑T).val * ((dot Y₃.val) B₃.val * (quadBiLin B₃.val) (↑T).val) -
2 * -(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) B₃.val * (quadBiLin Y₃.val) (↑T).val)) *
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) •
B₃.val +
((dot Y₃.val) B₃.val *
(2 * (quadBiLin B₃.val) (↑T).val * ((dot Y₃.val) B₃.val * (quadBiLin B₃.val) (↑T).val) -
2 * -(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) B₃.val * (quadBiLin Y₃.val) (↑T).val))) •
(↑T).val) =
(↑T).val quad_B₃_proj T:InLineEqSol⊢ (quadCoeff ↑T)⁻¹ •
((-(quadBiLin Y₃.val) (↑T).val *
(2 * (dot Y₃.val) B₃.val *
(((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) * (quadBiLin Y₃.val) (↑T).val +
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val) * (quadBiLin B₃.val) (↑T).val)) -
2 *
((quadBiLin B₃.val) (↑T).val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
((dot Y₃.val) B₃.val * (quadBiLin B₃.val) (↑T).val) +
(2 * (quadBiLin B₃.val) (↑T).val * ((dot Y₃.val) B₃.val * (quadBiLin B₃.val) (↑T).val) -
2 * -(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) B₃.val * (quadBiLin Y₃.val) (↑T).val)) *
((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val)) •
Y₃.val +
(2 *
((quadBiLin B₃.val) (↑T).val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
((dot Y₃.val) B₃.val * (quadBiLin Y₃.val) (↑T).val) -
(quadBiLin B₃.val) (↑T).val *
(2 * (dot Y₃.val) B₃.val *
(((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) * (quadBiLin Y₃.val) (↑T).val +
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val) * (quadBiLin B₃.val) (↑T).val)) +
(2 * (quadBiLin B₃.val) (↑T).val * ((dot Y₃.val) B₃.val * (quadBiLin B₃.val) (↑T).val) -
2 * -(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) B₃.val * (quadBiLin Y₃.val) (↑T).val)) *
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) •
B₃.val +
((dot Y₃.val) B₃.val *
(2 * (quadBiLin B₃.val) (↑T).val * ((dot Y₃.val) B₃.val * (quadBiLin B₃.val) (↑T).val) -
2 * -(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) B₃.val * (quadBiLin Y₃.val) (↑T).val))) •
(↑T).val) =
(↑T).val T:InLineEqSol⊢ (quadCoeff ↑T)⁻¹ •
((-(quadBiLin Y₃.val) (↑T).val *
(2 * (dot Y₃.val) B₃.val *
(((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) * (quadBiLin Y₃.val) (↑T).val +
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val) * (quadBiLin B₃.val) (↑T).val)) -
2 *
((quadBiLin B₃.val) (↑T).val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
((dot Y₃.val) B₃.val * (quadBiLin B₃.val) (↑T).val) +
(2 * (quadBiLin B₃.val) (↑T).val * ((dot Y₃.val) B₃.val * (quadBiLin B₃.val) (↑T).val) -
2 * -(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) B₃.val * (quadBiLin Y₃.val) (↑T).val)) *
((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val)) •
Y₃.val +
(2 *
((quadBiLin B₃.val) (↑T).val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
((dot Y₃.val) B₃.val * (quadBiLin Y₃.val) (↑T).val) -
(quadBiLin B₃.val) (↑T).val *
(2 * (dot Y₃.val) B₃.val *
(((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) * (quadBiLin Y₃.val) (↑T).val +
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val) * (quadBiLin B₃.val) (↑T).val)) +
(2 * (quadBiLin B₃.val) (↑T).val * ((dot Y₃.val) B₃.val * (quadBiLin B₃.val) (↑T).val) -
2 * -(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) B₃.val * (quadBiLin Y₃.val) (↑T).val)) *
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) •
B₃.val +
((dot Y₃.val) B₃.val *
(2 * (quadBiLin B₃.val) (↑T).val * ((dot Y₃.val) B₃.val * (quadBiLin B₃.val) (↑T).val) -
2 * -(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) B₃.val * (quadBiLin Y₃.val) (↑T).val))) •
(↑T).val) =
(↑T).val] T:InLineEqSol⊢ (quadCoeff ↑T)⁻¹ •
((-(quadBiLin Y₃.val) (↑T).val *
(2 * (dot Y₃.val) B₃.val *
(((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) * (quadBiLin Y₃.val) (↑T).val +
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val) * (quadBiLin B₃.val) (↑T).val)) -
2 *
((quadBiLin B₃.val) (↑T).val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
((dot Y₃.val) B₃.val * (quadBiLin B₃.val) (↑T).val) +
(2 * (quadBiLin B₃.val) (↑T).val * ((dot Y₃.val) B₃.val * (quadBiLin B₃.val) (↑T).val) -
2 * -(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) B₃.val * (quadBiLin Y₃.val) (↑T).val)) *
((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val)) •
Y₃.val +
(2 *
((quadBiLin B₃.val) (↑T).val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
((dot Y₃.val) B₃.val * (quadBiLin Y₃.val) (↑T).val) -
(quadBiLin B₃.val) (↑T).val *
(2 * (dot Y₃.val) B₃.val *
(((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) * (quadBiLin Y₃.val) (↑T).val +
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val) * (quadBiLin B₃.val) (↑T).val)) +
(2 * (quadBiLin B₃.val) (↑T).val * ((dot Y₃.val) B₃.val * (quadBiLin B₃.val) (↑T).val) -
2 * -(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) B₃.val * (quadBiLin Y₃.val) (↑T).val)) *
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) •
B₃.val +
((dot Y₃.val) B₃.val *
(2 * (quadBiLin B₃.val) (↑T).val * ((dot Y₃.val) B₃.val * (quadBiLin B₃.val) (↑T).val) -
2 * -(quadBiLin Y₃.val) (↑T).val * ((dot Y₃.val) B₃.val * (quadBiLin Y₃.val) (↑T).val))) •
(↑T).val) =
(↑T).val
ring_nf T:InLineEqSol⊢ (quadCoeff ↑T)⁻¹ •
(0 • Y₃.val + 0 • B₃.val +
((quadBiLin Y₃.val) (↑T).val ^ 2 * (dot Y₃.val) B₃.val ^ 2 * 2 +
(dot Y₃.val) B₃.val ^ 2 * (quadBiLin B₃.val) (↑T).val ^ 2 * 2) •
(↑T).val) =
(↑T).val
simp only [zero_smul, add_zero, zero_add] T:InLineEqSol⊢ (quadCoeff ↑T)⁻¹ •
((quadBiLin Y₃.val) (↑T).val ^ 2 * (dot Y₃.val) B₃.val ^ 2 * 2 +
(dot Y₃.val) B₃.val ^ 2 * (quadBiLin B₃.val) (↑T).val ^ 2 * 2) •
(↑T).val =
(↑T).val
have h1 : (quadBiLin Y₃.val T.val.val ^ 2 * dot Y₃.val B₃.val ^ 2 * 2 +
dot Y₃.val B₃.val ^ 2 * quadBiLin B₃.val T.val.val ^ 2 * 2) = quadCoeff T.val := by T:InLineEqSol⊢ inLineEqToSol (inLineEqProj T) = ↑T T:InLineEqSolh1:(quadBiLin Y₃.val) (↑T).val ^ 2 * (dot Y₃.val) B₃.val ^ 2 * 2 +
(dot Y₃.val) B₃.val ^ 2 * (quadBiLin B₃.val) (↑T).val ^ 2 * 2 =
quadCoeff ↑T⊢ (quadCoeff ↑T)⁻¹ •
((quadBiLin Y₃.val) (↑T).val ^ 2 * (dot Y₃.val) B₃.val ^ 2 * 2 +
(dot Y₃.val) B₃.val ^ 2 * (quadBiLin B₃.val) (↑T).val ^ 2 * 2) •
(↑T).val =
(↑T).val
rw [quadCoeff T:InLineEqSol⊢ (quadBiLin Y₃.val) (↑T).val ^ 2 * (dot Y₃.val) B₃.val ^ 2 * 2 +
(dot Y₃.val) B₃.val ^ 2 * (quadBiLin B₃.val) (↑T).val ^ 2 * 2 =
2 * (dot Y₃.val) B₃.val ^ 2 * ((quadBiLin Y₃.val) (↑T).val ^ 2 + (quadBiLin B₃.val) (↑T).val ^ 2) T:InLineEqSol⊢ (quadBiLin Y₃.val) (↑T).val ^ 2 * (dot Y₃.val) B₃.val ^ 2 * 2 +
(dot Y₃.val) B₃.val ^ 2 * (quadBiLin B₃.val) (↑T).val ^ 2 * 2 =
2 * (dot Y₃.val) B₃.val ^ 2 * ((quadBiLin Y₃.val) (↑T).val ^ 2 + (quadBiLin B₃.val) (↑T).val ^ 2) T:InLineEqSolh1:(quadBiLin Y₃.val) (↑T).val ^ 2 * (dot Y₃.val) B₃.val ^ 2 * 2 +
(dot Y₃.val) B₃.val ^ 2 * (quadBiLin B₃.val) (↑T).val ^ 2 * 2 =
quadCoeff ↑T⊢ (quadCoeff ↑T)⁻¹ •
((quadBiLin Y₃.val) (↑T).val ^ 2 * (dot Y₃.val) B₃.val ^ 2 * 2 +
(dot Y₃.val) B₃.val ^ 2 * (quadBiLin B₃.val) (↑T).val ^ 2 * 2) •
(↑T).val =
(↑T).val] T:InLineEqSol⊢ (quadBiLin Y₃.val) (↑T).val ^ 2 * (dot Y₃.val) B₃.val ^ 2 * 2 +
(dot Y₃.val) B₃.val ^ 2 * (quadBiLin B₃.val) (↑T).val ^ 2 * 2 =
2 * (dot Y₃.val) B₃.val ^ 2 * ((quadBiLin Y₃.val) (↑T).val ^ 2 + (quadBiLin B₃.val) (↑T).val ^ 2) T:InLineEqSolh1:(quadBiLin Y₃.val) (↑T).val ^ 2 * (dot Y₃.val) B₃.val ^ 2 * 2 +
(dot Y₃.val) B₃.val ^ 2 * (quadBiLin B₃.val) (↑T).val ^ 2 * 2 =
quadCoeff ↑T⊢ (quadCoeff ↑T)⁻¹ •
((quadBiLin Y₃.val) (↑T).val ^ 2 * (dot Y₃.val) B₃.val ^ 2 * 2 +
(dot Y₃.val) B₃.val ^ 2 * (quadBiLin B₃.val) (↑T).val ^ 2 * 2) •
(↑T).val =
(↑T).val
ring T:InLineEqSolh1:(quadBiLin Y₃.val) (↑T).val ^ 2 * (dot Y₃.val) B₃.val ^ 2 * 2 +
(dot Y₃.val) B₃.val ^ 2 * (quadBiLin B₃.val) (↑T).val ^ 2 * 2 =
quadCoeff ↑T⊢ (quadCoeff ↑T)⁻¹ •
((quadBiLin Y₃.val) (↑T).val ^ 2 * (dot Y₃.val) B₃.val ^ 2 * 2 +
(dot Y₃.val) B₃.val ^ 2 * (quadBiLin B₃.val) (↑T).val ^ 2 * 2) •
(↑T).val =
(↑T).val T:InLineEqSolh1:(quadBiLin Y₃.val) (↑T).val ^ 2 * (dot Y₃.val) B₃.val ^ 2 * 2 +
(dot Y₃.val) B₃.val ^ 2 * (quadBiLin B₃.val) (↑T).val ^ 2 * 2 =
quadCoeff ↑T⊢ (quadCoeff ↑T)⁻¹ •
((quadBiLin Y₃.val) (↑T).val ^ 2 * (dot Y₃.val) B₃.val ^ 2 * 2 +
(dot Y₃.val) B₃.val ^ 2 * (quadBiLin B₃.val) (↑T).val ^ 2 * 2) •
(↑T).val =
(↑T).val
rw [h1 T:InLineEqSolh1:(quadBiLin Y₃.val) (↑T).val ^ 2 * (dot Y₃.val) B₃.val ^ 2 * 2 +
(dot Y₃.val) B₃.val ^ 2 * (quadBiLin B₃.val) (↑T).val ^ 2 * 2 =
quadCoeff ↑T⊢ (quadCoeff ↑T)⁻¹ • quadCoeff ↑T • (↑T).val = (↑T).val T:InLineEqSolh1:(quadBiLin Y₃.val) (↑T).val ^ 2 * (dot Y₃.val) B₃.val ^ 2 * 2 +
(dot Y₃.val) B₃.val ^ 2 * (quadBiLin B₃.val) (↑T).val ^ 2 * 2 =
quadCoeff ↑T⊢ (quadCoeff ↑T)⁻¹ • quadCoeff ↑T • (↑T).val = (↑T).val] T:InLineEqSolh1:(quadBiLin Y₃.val) (↑T).val ^ 2 * (dot Y₃.val) B₃.val ^ 2 * 2 +
(dot Y₃.val) B₃.val ^ 2 * (quadBiLin B₃.val) (↑T).val ^ 2 * 2 =
quadCoeff ↑T⊢ (quadCoeff ↑T)⁻¹ • quadCoeff ↑T • (↑T).val = (↑T).val
have h2 := (inQuadSolProp_iff_quadCoeff_zero T.val).mpr.mt T.prop.2 T:InLineEqSolh1:(quadBiLin Y₃.val) (↑T).val ^ 2 * (dot Y₃.val) B₃.val ^ 2 * 2 +
(dot Y₃.val) B₃.val ^ 2 * (quadBiLin B₃.val) (↑T).val ^ 2 * 2 =
quadCoeff ↑Th2:¬quadCoeff ↑T = 0⊢ (quadCoeff ↑T)⁻¹ • quadCoeff ↑T • (↑T).val = (↑T).val
rw [← SemigroupAction.mul_smul, T:InLineEqSolh1:(quadBiLin Y₃.val) (↑T).val ^ 2 * (dot Y₃.val) B₃.val ^ 2 * 2 +
(dot Y₃.val) B₃.val ^ 2 * (quadBiLin B₃.val) (↑T).val ^ 2 * 2 =
quadCoeff ↑Th2:¬quadCoeff ↑T = 0⊢ ((quadCoeff ↑T)⁻¹ * quadCoeff ↑T) • (↑T).val = (↑T).val T:InLineEqSolh1:(quadBiLin Y₃.val) (↑T).val ^ 2 * (dot Y₃.val) B₃.val ^ 2 * 2 +
(dot Y₃.val) B₃.val ^ 2 * (quadBiLin B₃.val) (↑T).val ^ 2 * 2 =
quadCoeff ↑Th2:¬quadCoeff ↑T = 0⊢ 1 • (↑T).val = (↑T).val mul_comm, T:InLineEqSolh1:(quadBiLin Y₃.val) (↑T).val ^ 2 * (dot Y₃.val) B₃.val ^ 2 * 2 +
(dot Y₃.val) B₃.val ^ 2 * (quadBiLin B₃.val) (↑T).val ^ 2 * 2 =
quadCoeff ↑Th2:¬quadCoeff ↑T = 0⊢ (quadCoeff ↑T * (quadCoeff ↑T)⁻¹) • (↑T).val = (↑T).val T:InLineEqSolh1:(quadBiLin Y₃.val) (↑T).val ^ 2 * (dot Y₃.val) B₃.val ^ 2 * 2 +
(dot Y₃.val) B₃.val ^ 2 * (quadBiLin B₃.val) (↑T).val ^ 2 * 2 =
quadCoeff ↑Th2:¬quadCoeff ↑T = 0⊢ 1 • (↑T).val = (↑T).val mul_inv_cancel₀ h2 T:InLineEqSolh1:(quadBiLin Y₃.val) (↑T).val ^ 2 * (dot Y₃.val) B₃.val ^ 2 * 2 +
(dot Y₃.val) B₃.val ^ 2 * (quadBiLin B₃.val) (↑T).val ^ 2 * 2 =
quadCoeff ↑Th2:¬quadCoeff ↑T = 0⊢ 1 • (↑T).val = (↑T).val T:InLineEqSolh1:(quadBiLin Y₃.val) (↑T).val ^ 2 * (dot Y₃.val) B₃.val ^ 2 * 2 +
(dot Y₃.val) B₃.val ^ 2 * (quadBiLin B₃.val) (↑T).val ^ 2 * 2 =
quadCoeff ↑Th2:¬quadCoeff ↑T = 0⊢ 1 • (↑T).val = (↑T).val] T:InLineEqSolh1:(quadBiLin Y₃.val) (↑T).val ^ 2 * (dot Y₃.val) B₃.val ^ 2 * 2 +
(dot Y₃.val) B₃.val ^ 2 * (quadBiLin B₃.val) (↑T).val ^ 2 * 2 =
quadCoeff ↑Th2:¬quadCoeff ↑T = 0⊢ 1 • (↑T).val = (↑T).val
exact MulAction.one_smul T.1.val All goals completed! 🐙
Given an element of inQuad × ℚ × ℚ × ℚ, a solution to the ACCs.
def inQuadToSol : InQuad × ℚ × ℚ × ℚ → MSSMACC.Sols := fun (R, a₁, a₂, a₃) =>
AnomalyFreeMk' (lineCube R.val.val a₁ a₂ a₃)
(by x✝:InQuad × ℚ × ℚ × ℚR:InQuada₁:ℚa₂:ℚa₃:ℚ⊢ accQuad (lineCube (↑↑R) a₁ a₂ a₃).val = 0 rw [lineCube, x✝:InQuad × ℚ × ℚ × ℚR:InQuada₁:ℚa₂:ℚa₃:ℚ⊢ accQuad
(planeY₃B₃ (↑↑R)
(a₂ * ((cubeTriLin (↑↑R).val) (↑↑R).val) (↑↑R).val - 3 * a₃ * ((cubeTriLin (↑↑R).val) (↑↑R).val) B₃.val)
(3 * a₃ * ((cubeTriLin (↑↑R).val) (↑↑R).val) Y₃.val - a₁ * ((cubeTriLin (↑↑R).val) (↑↑R).val) (↑↑R).val)
(3 * (a₁ * ((cubeTriLin (↑↑R).val) (↑↑R).val) B₃.val - a₂ * ((cubeTriLin (↑↑R).val) (↑↑R).val) Y₃.val))).val =
0 x✝:InQuad × ℚ × ℚ × ℚR:InQuada₁:ℚa₂:ℚa₃:ℚ⊢ 3 * (a₁ * ((cubeTriLin (↑↑R).val) (↑↑R).val) B₃.val - a₂ * ((cubeTriLin (↑↑R).val) (↑↑R).val) Y₃.val) *
(2 * (a₂ * ((cubeTriLin (↑↑R).val) (↑↑R).val) (↑↑R).val - 3 * a₃ * ((cubeTriLin (↑↑R).val) (↑↑R).val) B₃.val) * 0 +
2 * (3 * a₃ * ((cubeTriLin (↑↑R).val) (↑↑R).val) Y₃.val - a₁ * ((cubeTriLin (↑↑R).val) (↑↑R).val) (↑↑R).val) *
0 +
3 * (a₁ * ((cubeTriLin (↑↑R).val) (↑↑R).val) B₃.val - a₂ * ((cubeTriLin (↑↑R).val) (↑↑R).val) Y₃.val) * 0) =
0 planeY₃B₃_quad, x✝:InQuad × ℚ × ℚ × ℚR:InQuada₁:ℚa₂:ℚa₃:ℚ⊢ 3 * (a₁ * ((cubeTriLin (↑↑R).val) (↑↑R).val) B₃.val - a₂ * ((cubeTriLin (↑↑R).val) (↑↑R).val) Y₃.val) *
(2 * (a₂ * ((cubeTriLin (↑↑R).val) (↑↑R).val) (↑↑R).val - 3 * a₃ * ((cubeTriLin (↑↑R).val) (↑↑R).val) B₃.val) *
(quadBiLin Y₃.val) (↑↑R).val +
2 * (3 * a₃ * ((cubeTriLin (↑↑R).val) (↑↑R).val) Y₃.val - a₁ * ((cubeTriLin (↑↑R).val) (↑↑R).val) (↑↑R).val) *
(quadBiLin B₃.val) (↑↑R).val +
3 * (a₁ * ((cubeTriLin (↑↑R).val) (↑↑R).val) B₃.val - a₂ * ((cubeTriLin (↑↑R).val) (↑↑R).val) Y₃.val) *
(quadBiLin (↑↑R).val) (↑↑R).val) =
0 x✝:InQuad × ℚ × ℚ × ℚR:InQuada₁:ℚa₂:ℚa₃:ℚ⊢ 3 * (a₁ * ((cubeTriLin (↑↑R).val) (↑↑R).val) B₃.val - a₂ * ((cubeTriLin (↑↑R).val) (↑↑R).val) Y₃.val) *
(2 * (a₂ * ((cubeTriLin (↑↑R).val) (↑↑R).val) (↑↑R).val - 3 * a₃ * ((cubeTriLin (↑↑R).val) (↑↑R).val) B₃.val) * 0 +
2 * (3 * a₃ * ((cubeTriLin (↑↑R).val) (↑↑R).val) Y₃.val - a₁ * ((cubeTriLin (↑↑R).val) (↑↑R).val) (↑↑R).val) *
0 +
3 * (a₁ * ((cubeTriLin (↑↑R).val) (↑↑R).val) B₃.val - a₂ * ((cubeTriLin (↑↑R).val) (↑↑R).val) Y₃.val) * 0) =
0 R.prop.1, x✝:InQuad × ℚ × ℚ × ℚR:InQuada₁:ℚa₂:ℚa₃:ℚ⊢ 3 * (a₁ * ((cubeTriLin (↑↑R).val) (↑↑R).val) B₃.val - a₂ * ((cubeTriLin (↑↑R).val) (↑↑R).val) Y₃.val) *
(2 * (a₂ * ((cubeTriLin (↑↑R).val) (↑↑R).val) (↑↑R).val - 3 * a₃ * ((cubeTriLin (↑↑R).val) (↑↑R).val) B₃.val) *
(quadBiLin Y₃.val) (↑↑R).val +
2 * (3 * a₃ * ((cubeTriLin (↑↑R).val) (↑↑R).val) Y₃.val - a₁ * ((cubeTriLin (↑↑R).val) (↑↑R).val) (↑↑R).val) *
(quadBiLin B₃.val) (↑↑R).val +
3 * (a₁ * ((cubeTriLin (↑↑R).val) (↑↑R).val) B₃.val - a₂ * ((cubeTriLin (↑↑R).val) (↑↑R).val) Y₃.val) * 0) =
0 x✝:InQuad × ℚ × ℚ × ℚR:InQuada₁:ℚa₂:ℚa₃:ℚ⊢ 3 * (a₁ * ((cubeTriLin (↑↑R).val) (↑↑R).val) B₃.val - a₂ * ((cubeTriLin (↑↑R).val) (↑↑R).val) Y₃.val) *
(2 * (a₂ * ((cubeTriLin (↑↑R).val) (↑↑R).val) (↑↑R).val - 3 * a₃ * ((cubeTriLin (↑↑R).val) (↑↑R).val) B₃.val) * 0 +
2 * (3 * a₃ * ((cubeTriLin (↑↑R).val) (↑↑R).val) Y₃.val - a₁ * ((cubeTriLin (↑↑R).val) (↑↑R).val) (↑↑R).val) *
0 +
3 * (a₁ * ((cubeTriLin (↑↑R).val) (↑↑R).val) B₃.val - a₂ * ((cubeTriLin (↑↑R).val) (↑↑R).val) Y₃.val) * 0) =
0 R.prop.2.1, x✝:InQuad × ℚ × ℚ × ℚR:InQuada₁:ℚa₂:ℚa₃:ℚ⊢ 3 * (a₁ * ((cubeTriLin (↑↑R).val) (↑↑R).val) B₃.val - a₂ * ((cubeTriLin (↑↑R).val) (↑↑R).val) Y₃.val) *
(2 * (a₂ * ((cubeTriLin (↑↑R).val) (↑↑R).val) (↑↑R).val - 3 * a₃ * ((cubeTriLin (↑↑R).val) (↑↑R).val) B₃.val) * 0 +
2 * (3 * a₃ * ((cubeTriLin (↑↑R).val) (↑↑R).val) Y₃.val - a₁ * ((cubeTriLin (↑↑R).val) (↑↑R).val) (↑↑R).val) *
(quadBiLin B₃.val) (↑↑R).val +
3 * (a₁ * ((cubeTriLin (↑↑R).val) (↑↑R).val) B₃.val - a₂ * ((cubeTriLin (↑↑R).val) (↑↑R).val) Y₃.val) * 0) =
0 x✝:InQuad × ℚ × ℚ × ℚR:InQuada₁:ℚa₂:ℚa₃:ℚ⊢ 3 * (a₁ * ((cubeTriLin (↑↑R).val) (↑↑R).val) B₃.val - a₂ * ((cubeTriLin (↑↑R).val) (↑↑R).val) Y₃.val) *
(2 * (a₂ * ((cubeTriLin (↑↑R).val) (↑↑R).val) (↑↑R).val - 3 * a₃ * ((cubeTriLin (↑↑R).val) (↑↑R).val) B₃.val) * 0 +
2 * (3 * a₃ * ((cubeTriLin (↑↑R).val) (↑↑R).val) Y₃.val - a₁ * ((cubeTriLin (↑↑R).val) (↑↑R).val) (↑↑R).val) *
0 +
3 * (a₁ * ((cubeTriLin (↑↑R).val) (↑↑R).val) B₃.val - a₂ * ((cubeTriLin (↑↑R).val) (↑↑R).val) Y₃.val) * 0) =
0 R.prop.2.2 x✝:InQuad × ℚ × ℚ × ℚR:InQuada₁:ℚa₂:ℚa₃:ℚ⊢ 3 * (a₁ * ((cubeTriLin (↑↑R).val) (↑↑R).val) B₃.val - a₂ * ((cubeTriLin (↑↑R).val) (↑↑R).val) Y₃.val) *
(2 * (a₂ * ((cubeTriLin (↑↑R).val) (↑↑R).val) (↑↑R).val - 3 * a₃ * ((cubeTriLin (↑↑R).val) (↑↑R).val) B₃.val) * 0 +
2 * (3 * a₃ * ((cubeTriLin (↑↑R).val) (↑↑R).val) Y₃.val - a₁ * ((cubeTriLin (↑↑R).val) (↑↑R).val) (↑↑R).val) *
0 +
3 * (a₁ * ((cubeTriLin (↑↑R).val) (↑↑R).val) B₃.val - a₂ * ((cubeTriLin (↑↑R).val) (↑↑R).val) Y₃.val) * 0) =
0 x✝:InQuad × ℚ × ℚ × ℚR:InQuada₁:ℚa₂:ℚa₃:ℚ⊢ 3 * (a₁ * ((cubeTriLin (↑↑R).val) (↑↑R).val) B₃.val - a₂ * ((cubeTriLin (↑↑R).val) (↑↑R).val) Y₃.val) *
(2 * (a₂ * ((cubeTriLin (↑↑R).val) (↑↑R).val) (↑↑R).val - 3 * a₃ * ((cubeTriLin (↑↑R).val) (↑↑R).val) B₃.val) * 0 +
2 * (3 * a₃ * ((cubeTriLin (↑↑R).val) (↑↑R).val) Y₃.val - a₁ * ((cubeTriLin (↑↑R).val) (↑↑R).val) (↑↑R).val) *
0 +
3 * (a₁ * ((cubeTriLin (↑↑R).val) (↑↑R).val) B₃.val - a₂ * ((cubeTriLin (↑↑R).val) (↑↑R).val) Y₃.val) * 0) =
0] x✝:InQuad × ℚ × ℚ × ℚR:InQuada₁:ℚa₂:ℚa₃:ℚ⊢ 3 * (a₁ * ((cubeTriLin (↑↑R).val) (↑↑R).val) B₃.val - a₂ * ((cubeTriLin (↑↑R).val) (↑↑R).val) Y₃.val) *
(2 * (a₂ * ((cubeTriLin (↑↑R).val) (↑↑R).val) (↑↑R).val - 3 * a₃ * ((cubeTriLin (↑↑R).val) (↑↑R).val) B₃.val) * 0 +
2 * (3 * a₃ * ((cubeTriLin (↑↑R).val) (↑↑R).val) Y₃.val - a₁ * ((cubeTriLin (↑↑R).val) (↑↑R).val) (↑↑R).val) *
0 +
3 * (a₁ * ((cubeTriLin (↑↑R).val) (↑↑R).val) B₃.val - a₂ * ((cubeTriLin (↑↑R).val) (↑↑R).val) Y₃.val) * 0) =
0; simp All goals completed! 🐙)
(lineCube_cube R.val.val a₁ a₂ a₃)
lemma inQuadToSol_smul (R : InQuad) (c₁ c₂ c₃ d : ℚ) :
inQuadToSol (R, (d * c₁), (d * c₂), (d * c₃)) = d • inQuadToSol (R, c₁, c₂, c₃) := by R:InQuadc₁:ℚc₂:ℚc₃:ℚd:ℚ⊢ inQuadToSol (R, d * c₁, d * c₂, d * c₃) = d • inQuadToSol (R, c₁, c₂, c₃)
apply ACCSystem.Sols.ext R:InQuadc₁:ℚc₂:ℚc₃:ℚd:ℚ⊢ (inQuadToSol (R, d * c₁, d * c₂, d * c₃)).val = (d • inQuadToSol (R, c₁, c₂, c₃)).val
change (lineCube _ _ _ _).val = _ R:InQuadc₁:ℚc₂:ℚc₃:ℚd:ℚ⊢ (lineCube (↑↑R) (d * c₁) (d * c₂) (d * c₃)).val = (d • inQuadToSol (R, c₁, c₂, c₃)).val
rw [lineCube_smul R:InQuadc₁:ℚc₂:ℚc₃:ℚd:ℚ⊢ (d • lineCube (↑↑R) c₁ c₂ c₃).val = (d • inQuadToSol (R, c₁, c₂, c₃)).val R:InQuadc₁:ℚc₂:ℚc₃:ℚd:ℚ⊢ (d • lineCube (↑↑R) c₁ c₂ c₃).val = (d • inQuadToSol (R, c₁, c₂, c₃)).val] R:InQuadc₁:ℚc₂:ℚc₃:ℚd:ℚ⊢ (d • lineCube (↑↑R) c₁ c₂ c₃).val = (d • inQuadToSol (R, c₁, c₂, c₃)).val
rfl All goals completed! 🐙
On elements of inQuadSol a right-inverse to inQuadToSol.
def inQuadProj (T : InQuadSol) : InQuad × ℚ × ℚ × ℚ :=
(⟨⟨proj T.val.1.1, (linEqPropSol_iff_proj_linEqProp T.val).mp T.prop.1⟩,
(inQuadSolProp_iff_proj_inQuadProp T.val).mp T.prop.2.1⟩,
(cubicCoeff T.val)⁻¹ * (cubeTriLin T.val.val T.val.val B₃.val),
(cubicCoeff T.val)⁻¹ * (- cubeTriLin T.val.val T.val.val Y₃.val),
(cubicCoeff T.val)⁻¹ *
(cubeTriLin T.val.val T.val.val B₃.val * (dot B₃.val T.val.val - dot Y₃.val T.val.val)
- cubeTriLin T.val.val T.val.val Y₃.val
* (dot Y₃.val T.val.val - 2 * dot B₃.val T.val.val)))
lemma inQuadToSol_proj (T : InQuadSol) : inQuadToSol (inQuadProj T) = T.val := by T:InQuadSol⊢ inQuadToSol (inQuadProj T) = ↑T
rw [inQuadProj, T:InQuadSol⊢ inQuadToSol
(⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩, (cubicCoeff ↑T)⁻¹ * ((cubeTriLin (↑T).val) (↑T).val) B₃.val,
(cubicCoeff ↑T)⁻¹ * -((cubeTriLin (↑T).val) (↑T).val) Y₃.val,
(cubicCoeff ↑T)⁻¹ *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
((cubeTriLin (↑T).val) (↑T).val) Y₃.val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val))) =
↑T T:InQuadSol⊢ (cubicCoeff ↑T)⁻¹ •
inQuadToSol
(⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩, ((cubeTriLin (↑T).val) (↑T).val) B₃.val, -((cubeTriLin (↑T).val) (↑T).val) Y₃.val,
((cubeTriLin (↑T).val) (↑T).val) B₃.val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
((cubeTriLin (↑T).val) (↑T).val) Y₃.val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) =
↑T inQuadToSol_smul T:InQuadSol⊢ (cubicCoeff ↑T)⁻¹ •
inQuadToSol
(⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩, ((cubeTriLin (↑T).val) (↑T).val) B₃.val, -((cubeTriLin (↑T).val) (↑T).val) Y₃.val,
((cubeTriLin (↑T).val) (↑T).val) B₃.val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
((cubeTriLin (↑T).val) (↑T).val) Y₃.val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) =
↑T T:InQuadSol⊢ (cubicCoeff ↑T)⁻¹ •
inQuadToSol
(⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩, ((cubeTriLin (↑T).val) (↑T).val) B₃.val, -((cubeTriLin (↑T).val) (↑T).val) Y₃.val,
((cubeTriLin (↑T).val) (↑T).val) B₃.val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
((cubeTriLin (↑T).val) (↑T).val) Y₃.val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) =
↑T] T:InQuadSol⊢ (cubicCoeff ↑T)⁻¹ •
inQuadToSol
(⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩, ((cubeTriLin (↑T).val) (↑T).val) B₃.val, -((cubeTriLin (↑T).val) (↑T).val) Y₃.val,
((cubeTriLin (↑T).val) (↑T).val) B₃.val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
((cubeTriLin (↑T).val) (↑T).val) Y₃.val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) =
↑T
apply ACCSystem.Sols.ext T:InQuadSol⊢ ((cubicCoeff ↑T)⁻¹ •
inQuadToSol
(⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩, ((cubeTriLin (↑T).val) (↑T).val) B₃.val,
-((cubeTriLin (↑T).val) (↑T).val) Y₃.val,
((cubeTriLin (↑T).val) (↑T).val) B₃.val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
((cubeTriLin (↑T).val) (↑T).val) Y₃.val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val))).val =
(↑T).val
change _ • (planeY₃B₃ _ _ _ _).val = _ T:InQuadSol⊢ (cubicCoeff ↑T)⁻¹ •
(planeY₃B₃ (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩)
(-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
((cubeTriLin (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val)
(↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val -
3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
((cubeTriLin (↑T).val) (↑T).val) Y₃.val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
((cubeTriLin (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) B₃.val)
(3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
((cubeTriLin (↑T).val) (↑T).val) Y₃.val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
((cubeTriLin (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) Y₃.val -
((cubeTriLin (↑T).val) (↑T).val) B₃.val *
((cubeTriLin (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val)
(↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val)
(3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val *
((cubeTriLin (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) B₃.val -
-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
((cubeTriLin (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) Y₃.val))).val =
(↑T).val
rw [planeY₃B₃_val, T:InQuadSol⊢ (cubicCoeff ↑T)⁻¹ •
((-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
((cubeTriLin (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val)
(↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val -
3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
((cubeTriLin (↑T).val) (↑T).val) Y₃.val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
((cubeTriLin (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) B₃.val) •
Y₃.val +
(3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
((cubeTriLin (↑T).val) (↑T).val) Y₃.val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
((cubeTriLin (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) Y₃.val -
((cubeTriLin (↑T).val) (↑T).val) B₃.val *
((cubeTriLin (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val)
(↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) •
B₃.val +
(3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val *
((cubeTriLin (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) B₃.val -
-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
((cubeTriLin (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) Y₃.val)) •
(↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) =
(↑T).val T:InQuadSol⊢ (cubicCoeff ↑T)⁻¹ •
((-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
(3 * (dot Y₃.val) B₃.val ^ 2 *
(((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val +
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val) * ((cubeTriLin (↑T).val) (↑T).val) B₃.val)) -
3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
((cubeTriLin (↑T).val) (↑T).val) Y₃.val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val) +
3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val) -
-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val)) *
((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val)) •
Y₃.val +
(3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
((cubeTriLin (↑T).val) (↑T).val) Y₃.val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val) -
((cubeTriLin (↑T).val) (↑T).val) B₃.val *
(3 * (dot Y₃.val) B₃.val ^ 2 *
(((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val +
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val) * ((cubeTriLin (↑T).val) (↑T).val) B₃.val)) +
3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val) -
-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val)) *
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) •
B₃.val +
((dot Y₃.val) B₃.val *
(3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val) -
-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val)))) •
(↑T).val) =
(↑T).val Y₃_plus_B₃_plus_proj, T:InQuadSol⊢ (cubicCoeff ↑T)⁻¹ •
((-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
((cubeTriLin (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val)
(↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val -
3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
((cubeTriLin (↑T).val) (↑T).val) Y₃.val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
((cubeTriLin (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) B₃.val +
3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val *
((cubeTriLin (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) B₃.val -
-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
((cubeTriLin (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) Y₃.val) *
((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val)) •
Y₃.val +
(3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
((cubeTriLin (↑T).val) (↑T).val) Y₃.val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
((cubeTriLin (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) Y₃.val -
((cubeTriLin (↑T).val) (↑T).val) B₃.val *
((cubeTriLin (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val)
(↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val +
3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val *
((cubeTriLin (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) B₃.val -
-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
((cubeTriLin (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) Y₃.val) *
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) •
B₃.val +
((dot Y₃.val) B₃.val *
(3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val *
((cubeTriLin (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) B₃.val -
-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
((cubeTriLin (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) Y₃.val))) •
(↑T).val) =
(↑T).val T:InQuadSol⊢ (cubicCoeff ↑T)⁻¹ •
((-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
(3 * (dot Y₃.val) B₃.val ^ 2 *
(((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val +
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val) * ((cubeTriLin (↑T).val) (↑T).val) B₃.val)) -
3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
((cubeTriLin (↑T).val) (↑T).val) Y₃.val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val) +
3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val) -
-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val)) *
((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val)) •
Y₃.val +
(3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
((cubeTriLin (↑T).val) (↑T).val) Y₃.val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val) -
((cubeTriLin (↑T).val) (↑T).val) B₃.val *
(3 * (dot Y₃.val) B₃.val ^ 2 *
(((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val +
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val) * ((cubeTriLin (↑T).val) (↑T).val) B₃.val)) +
3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val) -
-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val)) *
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) •
B₃.val +
((dot Y₃.val) B₃.val *
(3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val) -
-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val)))) •
(↑T).val) =
(↑T).val cube_proj, T:InQuadSol⊢ (cubicCoeff ↑T)⁻¹ •
((-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
(3 * (dot Y₃.val) B₃.val ^ 2 *
(((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val +
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val) * ((cubeTriLin (↑T).val) (↑T).val) B₃.val)) -
3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
((cubeTriLin (↑T).val) (↑T).val) Y₃.val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
((cubeTriLin (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) B₃.val +
3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val *
((cubeTriLin (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) B₃.val -
-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
((cubeTriLin (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) Y₃.val) *
((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val)) •
Y₃.val +
(3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
((cubeTriLin (↑T).val) (↑T).val) Y₃.val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
((cubeTriLin (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) Y₃.val -
((cubeTriLin (↑T).val) (↑T).val) B₃.val *
(3 * (dot Y₃.val) B₃.val ^ 2 *
(((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val +
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val) * ((cubeTriLin (↑T).val) (↑T).val) B₃.val)) +
3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val *
((cubeTriLin (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) B₃.val -
-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
((cubeTriLin (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) Y₃.val) *
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) •
B₃.val +
((dot Y₃.val) B₃.val *
(3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val *
((cubeTriLin (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) B₃.val -
-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
((cubeTriLin (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) Y₃.val))) •
(↑T).val) =
(↑T).val T:InQuadSol⊢ (cubicCoeff ↑T)⁻¹ •
((-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
(3 * (dot Y₃.val) B₃.val ^ 2 *
(((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val +
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val) * ((cubeTriLin (↑T).val) (↑T).val) B₃.val)) -
3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
((cubeTriLin (↑T).val) (↑T).val) Y₃.val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val) +
3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val) -
-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val)) *
((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val)) •
Y₃.val +
(3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
((cubeTriLin (↑T).val) (↑T).val) Y₃.val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val) -
((cubeTriLin (↑T).val) (↑T).val) B₃.val *
(3 * (dot Y₃.val) B₃.val ^ 2 *
(((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val +
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val) * ((cubeTriLin (↑T).val) (↑T).val) B₃.val)) +
3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val) -
-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val)) *
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) •
B₃.val +
((dot Y₃.val) B₃.val *
(3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val) -
-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val)))) •
(↑T).val) =
(↑T).val cube_proj_proj_B₃, T:InQuadSol⊢ (cubicCoeff ↑T)⁻¹ •
((-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
(3 * (dot Y₃.val) B₃.val ^ 2 *
(((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val +
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val) * ((cubeTriLin (↑T).val) (↑T).val) B₃.val)) -
3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
((cubeTriLin (↑T).val) (↑T).val) Y₃.val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val) +
3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val) -
-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
((cubeTriLin (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) Y₃.val) *
((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val)) •
Y₃.val +
(3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
((cubeTriLin (↑T).val) (↑T).val) Y₃.val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
((cubeTriLin (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) Y₃.val -
((cubeTriLin (↑T).val) (↑T).val) B₃.val *
(3 * (dot Y₃.val) B₃.val ^ 2 *
(((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val +
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val) * ((cubeTriLin (↑T).val) (↑T).val) B₃.val)) +
3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val) -
-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
((cubeTriLin (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) Y₃.val) *
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) •
B₃.val +
((dot Y₃.val) B₃.val *
(3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val) -
-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
((cubeTriLin (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) (↑↑⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩).val) Y₃.val))) •
(↑T).val) =
(↑T).val T:InQuadSol⊢ (cubicCoeff ↑T)⁻¹ •
((-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
(3 * (dot Y₃.val) B₃.val ^ 2 *
(((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val +
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val) * ((cubeTriLin (↑T).val) (↑T).val) B₃.val)) -
3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
((cubeTriLin (↑T).val) (↑T).val) Y₃.val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val) +
3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val) -
-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val)) *
((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val)) •
Y₃.val +
(3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
((cubeTriLin (↑T).val) (↑T).val) Y₃.val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val) -
((cubeTriLin (↑T).val) (↑T).val) B₃.val *
(3 * (dot Y₃.val) B₃.val ^ 2 *
(((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val +
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val) * ((cubeTriLin (↑T).val) (↑T).val) B₃.val)) +
3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val) -
-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val)) *
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) •
B₃.val +
((dot Y₃.val) B₃.val *
(3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val) -
-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val)))) •
(↑T).val) =
(↑T).val cube_proj_proj_Y₃ T:InQuadSol⊢ (cubicCoeff ↑T)⁻¹ •
((-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
(3 * (dot Y₃.val) B₃.val ^ 2 *
(((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val +
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val) * ((cubeTriLin (↑T).val) (↑T).val) B₃.val)) -
3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
((cubeTriLin (↑T).val) (↑T).val) Y₃.val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val) +
3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val) -
-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val)) *
((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val)) •
Y₃.val +
(3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
((cubeTriLin (↑T).val) (↑T).val) Y₃.val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val) -
((cubeTriLin (↑T).val) (↑T).val) B₃.val *
(3 * (dot Y₃.val) B₃.val ^ 2 *
(((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val +
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val) * ((cubeTriLin (↑T).val) (↑T).val) B₃.val)) +
3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val) -
-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val)) *
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) •
B₃.val +
((dot Y₃.val) B₃.val *
(3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val) -
-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val)))) •
(↑T).val) =
(↑T).val T:InQuadSol⊢ (cubicCoeff ↑T)⁻¹ •
((-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
(3 * (dot Y₃.val) B₃.val ^ 2 *
(((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val +
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val) * ((cubeTriLin (↑T).val) (↑T).val) B₃.val)) -
3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
((cubeTriLin (↑T).val) (↑T).val) Y₃.val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val) +
3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val) -
-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val)) *
((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val)) •
Y₃.val +
(3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
((cubeTriLin (↑T).val) (↑T).val) Y₃.val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val) -
((cubeTriLin (↑T).val) (↑T).val) B₃.val *
(3 * (dot Y₃.val) B₃.val ^ 2 *
(((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val +
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val) * ((cubeTriLin (↑T).val) (↑T).val) B₃.val)) +
3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val) -
-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val)) *
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) •
B₃.val +
((dot Y₃.val) B₃.val *
(3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val) -
-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val)))) •
(↑T).val) =
(↑T).val] T:InQuadSol⊢ (cubicCoeff ↑T)⁻¹ •
((-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
(3 * (dot Y₃.val) B₃.val ^ 2 *
(((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val +
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val) * ((cubeTriLin (↑T).val) (↑T).val) B₃.val)) -
3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
((cubeTriLin (↑T).val) (↑T).val) Y₃.val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val) +
3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val) -
-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val)) *
((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val)) •
Y₃.val +
(3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) -
((cubeTriLin (↑T).val) (↑T).val) Y₃.val * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val) -
((cubeTriLin (↑T).val) (↑T).val) B₃.val *
(3 * (dot Y₃.val) B₃.val ^ 2 *
(((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val +
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val) * ((cubeTriLin (↑T).val) (↑T).val) B₃.val)) +
3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val) -
-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val)) *
((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) •
B₃.val +
((dot Y₃.val) B₃.val *
(3 *
(((cubeTriLin (↑T).val) (↑T).val) B₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val) -
-((cubeTriLin (↑T).val) (↑T).val) Y₃.val *
((dot Y₃.val) B₃.val ^ 2 * ((cubeTriLin (↑T).val) (↑T).val) Y₃.val)))) •
(↑T).val) =
(↑T).val
ring_nf T:InQuadSol⊢ (cubicCoeff ↑T)⁻¹ •
(0 • Y₃.val + 0 • B₃.val +
(((cubeTriLin (↑T).val) (↑T).val) Y₃.val ^ 2 * (dot Y₃.val) B₃.val ^ 3 * 3 +
(dot Y₃.val) B₃.val ^ 3 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val ^ 2 * 3) •
(↑T).val) =
(↑T).val
simp only [zero_smul, add_zero, zero_add] T:InQuadSol⊢ (cubicCoeff ↑T)⁻¹ •
(((cubeTriLin (↑T).val) (↑T).val) Y₃.val ^ 2 * (dot Y₃.val) B₃.val ^ 3 * 3 +
(dot Y₃.val) B₃.val ^ 3 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val ^ 2 * 3) •
(↑T).val =
(↑T).val
have h1 : (cubeTriLin T.val.val T.val.val Y₃.val ^ 2 * dot Y₃.val B₃.val ^ 3 * 3 +
dot Y₃.val B₃.val ^ 3 * cubeTriLin T.val.val T.val.val B₃.val ^ 2* 3) = cubicCoeff T.val := by T:InQuadSol⊢ inQuadToSol (inQuadProj T) = ↑T T:InQuadSolh1:((cubeTriLin (↑T).val) (↑T).val) Y₃.val ^ 2 * (dot Y₃.val) B₃.val ^ 3 * 3 +
(dot Y₃.val) B₃.val ^ 3 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val ^ 2 * 3 =
cubicCoeff ↑T⊢ (cubicCoeff ↑T)⁻¹ •
(((cubeTriLin (↑T).val) (↑T).val) Y₃.val ^ 2 * (dot Y₃.val) B₃.val ^ 3 * 3 +
(dot Y₃.val) B₃.val ^ 3 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val ^ 2 * 3) •
(↑T).val =
(↑T).val
rw [cubicCoeff T:InQuadSol⊢ ((cubeTriLin (↑T).val) (↑T).val) Y₃.val ^ 2 * (dot Y₃.val) B₃.val ^ 3 * 3 +
(dot Y₃.val) B₃.val ^ 3 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val ^ 2 * 3 =
3 * (dot Y₃.val) B₃.val ^ 3 *
(((cubeTriLin (↑T).val) (↑T).val) Y₃.val ^ 2 + ((cubeTriLin (↑T).val) (↑T).val) B₃.val ^ 2) T:InQuadSol⊢ ((cubeTriLin (↑T).val) (↑T).val) Y₃.val ^ 2 * (dot Y₃.val) B₃.val ^ 3 * 3 +
(dot Y₃.val) B₃.val ^ 3 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val ^ 2 * 3 =
3 * (dot Y₃.val) B₃.val ^ 3 *
(((cubeTriLin (↑T).val) (↑T).val) Y₃.val ^ 2 + ((cubeTriLin (↑T).val) (↑T).val) B₃.val ^ 2) T:InQuadSolh1:((cubeTriLin (↑T).val) (↑T).val) Y₃.val ^ 2 * (dot Y₃.val) B₃.val ^ 3 * 3 +
(dot Y₃.val) B₃.val ^ 3 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val ^ 2 * 3 =
cubicCoeff ↑T⊢ (cubicCoeff ↑T)⁻¹ •
(((cubeTriLin (↑T).val) (↑T).val) Y₃.val ^ 2 * (dot Y₃.val) B₃.val ^ 3 * 3 +
(dot Y₃.val) B₃.val ^ 3 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val ^ 2 * 3) •
(↑T).val =
(↑T).val] T:InQuadSol⊢ ((cubeTriLin (↑T).val) (↑T).val) Y₃.val ^ 2 * (dot Y₃.val) B₃.val ^ 3 * 3 +
(dot Y₃.val) B₃.val ^ 3 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val ^ 2 * 3 =
3 * (dot Y₃.val) B₃.val ^ 3 *
(((cubeTriLin (↑T).val) (↑T).val) Y₃.val ^ 2 + ((cubeTriLin (↑T).val) (↑T).val) B₃.val ^ 2) T:InQuadSolh1:((cubeTriLin (↑T).val) (↑T).val) Y₃.val ^ 2 * (dot Y₃.val) B₃.val ^ 3 * 3 +
(dot Y₃.val) B₃.val ^ 3 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val ^ 2 * 3 =
cubicCoeff ↑T⊢ (cubicCoeff ↑T)⁻¹ •
(((cubeTriLin (↑T).val) (↑T).val) Y₃.val ^ 2 * (dot Y₃.val) B₃.val ^ 3 * 3 +
(dot Y₃.val) B₃.val ^ 3 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val ^ 2 * 3) •
(↑T).val =
(↑T).val
ring T:InQuadSolh1:((cubeTriLin (↑T).val) (↑T).val) Y₃.val ^ 2 * (dot Y₃.val) B₃.val ^ 3 * 3 +
(dot Y₃.val) B₃.val ^ 3 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val ^ 2 * 3 =
cubicCoeff ↑T⊢ (cubicCoeff ↑T)⁻¹ •
(((cubeTriLin (↑T).val) (↑T).val) Y₃.val ^ 2 * (dot Y₃.val) B₃.val ^ 3 * 3 +
(dot Y₃.val) B₃.val ^ 3 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val ^ 2 * 3) •
(↑T).val =
(↑T).val T:InQuadSolh1:((cubeTriLin (↑T).val) (↑T).val) Y₃.val ^ 2 * (dot Y₃.val) B₃.val ^ 3 * 3 +
(dot Y₃.val) B₃.val ^ 3 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val ^ 2 * 3 =
cubicCoeff ↑T⊢ (cubicCoeff ↑T)⁻¹ •
(((cubeTriLin (↑T).val) (↑T).val) Y₃.val ^ 2 * (dot Y₃.val) B₃.val ^ 3 * 3 +
(dot Y₃.val) B₃.val ^ 3 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val ^ 2 * 3) •
(↑T).val =
(↑T).val
rw [h1 T:InQuadSolh1:((cubeTriLin (↑T).val) (↑T).val) Y₃.val ^ 2 * (dot Y₃.val) B₃.val ^ 3 * 3 +
(dot Y₃.val) B₃.val ^ 3 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val ^ 2 * 3 =
cubicCoeff ↑T⊢ (cubicCoeff ↑T)⁻¹ • cubicCoeff ↑T • (↑T).val = (↑T).val T:InQuadSolh1:((cubeTriLin (↑T).val) (↑T).val) Y₃.val ^ 2 * (dot Y₃.val) B₃.val ^ 3 * 3 +
(dot Y₃.val) B₃.val ^ 3 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val ^ 2 * 3 =
cubicCoeff ↑T⊢ (cubicCoeff ↑T)⁻¹ • cubicCoeff ↑T • (↑T).val = (↑T).val] T:InQuadSolh1:((cubeTriLin (↑T).val) (↑T).val) Y₃.val ^ 2 * (dot Y₃.val) B₃.val ^ 3 * 3 +
(dot Y₃.val) B₃.val ^ 3 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val ^ 2 * 3 =
cubicCoeff ↑T⊢ (cubicCoeff ↑T)⁻¹ • cubicCoeff ↑T • (↑T).val = (↑T).val
have h2 := (inCubeSolProp_iff_cubicCoeff_zero T.val).mpr.mt T.prop.2.2 T:InQuadSolh1:((cubeTriLin (↑T).val) (↑T).val) Y₃.val ^ 2 * (dot Y₃.val) B₃.val ^ 3 * 3 +
(dot Y₃.val) B₃.val ^ 3 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val ^ 2 * 3 =
cubicCoeff ↑Th2:¬cubicCoeff ↑T = 0⊢ (cubicCoeff ↑T)⁻¹ • cubicCoeff ↑T • (↑T).val = (↑T).val
rw [← SemigroupAction.mul_smul, T:InQuadSolh1:((cubeTriLin (↑T).val) (↑T).val) Y₃.val ^ 2 * (dot Y₃.val) B₃.val ^ 3 * 3 +
(dot Y₃.val) B₃.val ^ 3 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val ^ 2 * 3 =
cubicCoeff ↑Th2:¬cubicCoeff ↑T = 0⊢ ((cubicCoeff ↑T)⁻¹ * cubicCoeff ↑T) • (↑T).val = (↑T).val T:InQuadSolh1:((cubeTriLin (↑T).val) (↑T).val) Y₃.val ^ 2 * (dot Y₃.val) B₃.val ^ 3 * 3 +
(dot Y₃.val) B₃.val ^ 3 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val ^ 2 * 3 =
cubicCoeff ↑Th2:¬cubicCoeff ↑T = 0⊢ 1 • (↑T).val = (↑T).val mul_comm, T:InQuadSolh1:((cubeTriLin (↑T).val) (↑T).val) Y₃.val ^ 2 * (dot Y₃.val) B₃.val ^ 3 * 3 +
(dot Y₃.val) B₃.val ^ 3 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val ^ 2 * 3 =
cubicCoeff ↑Th2:¬cubicCoeff ↑T = 0⊢ (cubicCoeff ↑T * (cubicCoeff ↑T)⁻¹) • (↑T).val = (↑T).val T:InQuadSolh1:((cubeTriLin (↑T).val) (↑T).val) Y₃.val ^ 2 * (dot Y₃.val) B₃.val ^ 3 * 3 +
(dot Y₃.val) B₃.val ^ 3 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val ^ 2 * 3 =
cubicCoeff ↑Th2:¬cubicCoeff ↑T = 0⊢ 1 • (↑T).val = (↑T).val mul_inv_cancel₀ h2 T:InQuadSolh1:((cubeTriLin (↑T).val) (↑T).val) Y₃.val ^ 2 * (dot Y₃.val) B₃.val ^ 3 * 3 +
(dot Y₃.val) B₃.val ^ 3 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val ^ 2 * 3 =
cubicCoeff ↑Th2:¬cubicCoeff ↑T = 0⊢ 1 • (↑T).val = (↑T).val T:InQuadSolh1:((cubeTriLin (↑T).val) (↑T).val) Y₃.val ^ 2 * (dot Y₃.val) B₃.val ^ 3 * 3 +
(dot Y₃.val) B₃.val ^ 3 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val ^ 2 * 3 =
cubicCoeff ↑Th2:¬cubicCoeff ↑T = 0⊢ 1 • (↑T).val = (↑T).val] T:InQuadSolh1:((cubeTriLin (↑T).val) (↑T).val) Y₃.val ^ 2 * (dot Y₃.val) B₃.val ^ 3 * 3 +
(dot Y₃.val) B₃.val ^ 3 * ((cubeTriLin (↑T).val) (↑T).val) B₃.val ^ 2 * 3 =
cubicCoeff ↑Th2:¬cubicCoeff ↑T = 0⊢ 1 • (↑T).val = (↑T).val
exact MulAction.one_smul T.1.val All goals completed! 🐙
Given a element of inQuadCube × ℚ × ℚ × ℚ, a solution to the ACCs.
def inQuadCubeToSol : InQuadCube × ℚ × ℚ × ℚ → MSSMACC.Sols := fun (R, b₁, b₂, b₃) =>
AnomalyFreeMk' (planeY₃B₃ R.val.val.val b₁ b₂ b₃)
(by x✝:InQuadCube × ℚ × ℚ × ℚR:InQuadCubeb₁:ℚb₂:ℚb₃:ℚ⊢ accQuad (planeY₃B₃ (↑↑↑R) b₁ b₂ b₃).val = 0 rw [planeY₃B₃_quad, x✝:InQuadCube × ℚ × ℚ × ℚR:InQuadCubeb₁:ℚb₂:ℚb₃:ℚ⊢ b₃ *
(2 * b₁ * (quadBiLin Y₃.val) (↑↑↑R).val + 2 * b₂ * (quadBiLin B₃.val) (↑↑↑R).val +
b₃ * (quadBiLin (↑↑↑R).val) (↑↑↑R).val) =
0 x✝:InQuadCube × ℚ × ℚ × ℚR:InQuadCubeb₁:ℚb₂:ℚb₃:ℚ⊢ b₃ * (2 * b₁ * 0 + 2 * b₂ * 0 + b₃ * 0) = 0 R.val.prop.1, x✝:InQuadCube × ℚ × ℚ × ℚR:InQuadCubeb₁:ℚb₂:ℚb₃:ℚ⊢ b₃ * (2 * b₁ * (quadBiLin Y₃.val) (↑↑↑R).val + 2 * b₂ * (quadBiLin B₃.val) (↑↑↑R).val + b₃ * 0) = 0 x✝:InQuadCube × ℚ × ℚ × ℚR:InQuadCubeb₁:ℚb₂:ℚb₃:ℚ⊢ b₃ * (2 * b₁ * 0 + 2 * b₂ * 0 + b₃ * 0) = 0 R.val.prop.2.1, x✝:InQuadCube × ℚ × ℚ × ℚR:InQuadCubeb₁:ℚb₂:ℚb₃:ℚ⊢ b₃ * (2 * b₁ * 0 + 2 * b₂ * (quadBiLin B₃.val) (↑↑↑R).val + b₃ * 0) = 0 x✝:InQuadCube × ℚ × ℚ × ℚR:InQuadCubeb₁:ℚb₂:ℚb₃:ℚ⊢ b₃ * (2 * b₁ * 0 + 2 * b₂ * 0 + b₃ * 0) = 0 R.val.prop.2.2 x✝:InQuadCube × ℚ × ℚ × ℚR:InQuadCubeb₁:ℚb₂:ℚb₃:ℚ⊢ b₃ * (2 * b₁ * 0 + 2 * b₂ * 0 + b₃ * 0) = 0 x✝:InQuadCube × ℚ × ℚ × ℚR:InQuadCubeb₁:ℚb₂:ℚb₃:ℚ⊢ b₃ * (2 * b₁ * 0 + 2 * b₂ * 0 + b₃ * 0) = 0] x✝:InQuadCube × ℚ × ℚ × ℚR:InQuadCubeb₁:ℚb₂:ℚb₃:ℚ⊢ b₃ * (2 * b₁ * 0 + 2 * b₂ * 0 + b₃ * 0) = 0; simp All goals completed! 🐙)
(by x✝:InQuadCube × ℚ × ℚ × ℚR:InQuadCubeb₁:ℚb₂:ℚb₃:ℚ⊢ accCube (planeY₃B₃ (↑↑↑R) b₁ b₂ b₃).val = 0 rw [planeY₃B₃_cubic, x✝:InQuadCube × ℚ × ℚ × ℚR:InQuadCubeb₁:ℚb₂:ℚb₃:ℚ⊢ b₃ ^ 2 *
(3 * b₁ * ((cubeTriLin (↑↑↑R).val) (↑↑↑R).val) Y₃.val + 3 * b₂ * ((cubeTriLin (↑↑↑R).val) (↑↑↑R).val) B₃.val +
b₃ * ((cubeTriLin (↑↑↑R).val) (↑↑↑R).val) (↑↑↑R).val) =
0 x✝:InQuadCube × ℚ × ℚ × ℚR:InQuadCubeb₁:ℚb₂:ℚb₃:ℚ⊢ b₃ ^ 2 * (3 * b₁ * 0 + 3 * b₂ * 0 + b₃ * 0) = 0 R.prop.1, x✝:InQuadCube × ℚ × ℚ × ℚR:InQuadCubeb₁:ℚb₂:ℚb₃:ℚ⊢ b₃ ^ 2 *
(3 * b₁ * ((cubeTriLin (↑↑↑R).val) (↑↑↑R).val) Y₃.val + 3 * b₂ * ((cubeTriLin (↑↑↑R).val) (↑↑↑R).val) B₃.val +
b₃ * 0) =
0 x✝:InQuadCube × ℚ × ℚ × ℚR:InQuadCubeb₁:ℚb₂:ℚb₃:ℚ⊢ b₃ ^ 2 * (3 * b₁ * 0 + 3 * b₂ * 0 + b₃ * 0) = 0 R.prop.2.1, x✝:InQuadCube × ℚ × ℚ × ℚR:InQuadCubeb₁:ℚb₂:ℚb₃:ℚ⊢ b₃ ^ 2 * (3 * b₁ * ((cubeTriLin (↑↑↑R).val) (↑↑↑R).val) Y₃.val + 3 * b₂ * 0 + b₃ * 0) = 0 x✝:InQuadCube × ℚ × ℚ × ℚR:InQuadCubeb₁:ℚb₂:ℚb₃:ℚ⊢ b₃ ^ 2 * (3 * b₁ * 0 + 3 * b₂ * 0 + b₃ * 0) = 0 R.prop.2.2 x✝:InQuadCube × ℚ × ℚ × ℚR:InQuadCubeb₁:ℚb₂:ℚb₃:ℚ⊢ b₃ ^ 2 * (3 * b₁ * 0 + 3 * b₂ * 0 + b₃ * 0) = 0 x✝:InQuadCube × ℚ × ℚ × ℚR:InQuadCubeb₁:ℚb₂:ℚb₃:ℚ⊢ b₃ ^ 2 * (3 * b₁ * 0 + 3 * b₂ * 0 + b₃ * 0) = 0] x✝:InQuadCube × ℚ × ℚ × ℚR:InQuadCubeb₁:ℚb₂:ℚb₃:ℚ⊢ b₃ ^ 2 * (3 * b₁ * 0 + 3 * b₂ * 0 + b₃ * 0) = 0; simp All goals completed! 🐙)
lemma inQuadCubeToSol_smul (R : InQuadCube) (c₁ c₂ c₃ d : ℚ) :
inQuadCubeToSol (R, (d * c₁), (d * c₂), (d * c₃)) = d • inQuadCubeToSol (R, c₁, c₂, c₃) := by R:InQuadCubec₁:ℚc₂:ℚc₃:ℚd:ℚ⊢ inQuadCubeToSol (R, d * c₁, d * c₂, d * c₃) = d • inQuadCubeToSol (R, c₁, c₂, c₃)
apply ACCSystem.Sols.ext R:InQuadCubec₁:ℚc₂:ℚc₃:ℚd:ℚ⊢ (inQuadCubeToSol (R, d * c₁, d * c₂, d * c₃)).val = (d • inQuadCubeToSol (R, c₁, c₂, c₃)).val
change (planeY₃B₃ _ _ _ _).val = _ R:InQuadCubec₁:ℚc₂:ℚc₃:ℚd:ℚ⊢ (planeY₃B₃ (↑↑↑R) (d * c₁) (d * c₂) (d * c₃)).val = (d • inQuadCubeToSol (R, c₁, c₂, c₃)).val
rw [planeY₃B₃_smul R:InQuadCubec₁:ℚc₂:ℚc₃:ℚd:ℚ⊢ (d • planeY₃B₃ (↑↑↑R) c₁ c₂ c₃).val = (d • inQuadCubeToSol (R, c₁, c₂, c₃)).val R:InQuadCubec₁:ℚc₂:ℚc₃:ℚd:ℚ⊢ (d • planeY₃B₃ (↑↑↑R) c₁ c₂ c₃).val = (d • inQuadCubeToSol (R, c₁, c₂, c₃)).val] R:InQuadCubec₁:ℚc₂:ℚc₃:ℚd:ℚ⊢ (d • planeY₃B₃ (↑↑↑R) c₁ c₂ c₃).val = (d • inQuadCubeToSol (R, c₁, c₂, c₃)).val
rfl All goals completed! 🐙
On elements of inQuadCubeSol a right-inverse to inQuadCubeToSol.
def inQuadCubeProj (T : InQuadCubeSol) : InQuadCube × ℚ × ℚ × ℚ :=
(⟨⟨⟨proj T.val.1.1, (linEqPropSol_iff_proj_linEqProp T.val).mp T.prop.1⟩,
(inQuadSolProp_iff_proj_inQuadProp T.val).mp T.prop.2.1⟩,
(inCubeSolProp_iff_proj_inCubeProp T.val).mp T.prop.2.2⟩,
(dot Y₃.val B₃.val)⁻¹ * (dot Y₃.val T.val.val - dot B₃.val T.val.val),
(dot Y₃.val B₃.val)⁻¹ * (2 * dot B₃.val T.val.val - dot Y₃.val T.val.val),
(dot Y₃.val B₃.val)⁻¹ * 1)
lemma inQuadCubeToSol_proj (T : InQuadCubeSol) :
inQuadCubeToSol (inQuadCubeProj T) = T.val := by T:InQuadCubeSol⊢ inQuadCubeToSol (inQuadCubeProj T) = ↑T
rw [inQuadCubeProj, T:InQuadCubeSol⊢ inQuadCubeToSol
(⟨⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩, ⋯⟩, ((dot Y₃.val) B₃.val)⁻¹ * ((dot Y₃.val) (↑T).val - (dot B₃.val) (↑T).val),
((dot Y₃.val) B₃.val)⁻¹ * (2 * (dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val), ((dot Y₃.val) B₃.val)⁻¹ * 1) =
↑T T:InQuadCubeSol⊢ ((dot Y₃.val) B₃.val)⁻¹ •
inQuadCubeToSol
(⟨⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩, ⋯⟩, (dot Y₃.val) (↑T).val - (dot B₃.val) (↑T).val,
2 * (dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val, 1) =
↑T inQuadCubeToSol_smul T:InQuadCubeSol⊢ ((dot Y₃.val) B₃.val)⁻¹ •
inQuadCubeToSol
(⟨⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩, ⋯⟩, (dot Y₃.val) (↑T).val - (dot B₃.val) (↑T).val,
2 * (dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val, 1) =
↑T T:InQuadCubeSol⊢ ((dot Y₃.val) B₃.val)⁻¹ •
inQuadCubeToSol
(⟨⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩, ⋯⟩, (dot Y₃.val) (↑T).val - (dot B₃.val) (↑T).val,
2 * (dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val, 1) =
↑T] T:InQuadCubeSol⊢ ((dot Y₃.val) B₃.val)⁻¹ •
inQuadCubeToSol
(⟨⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩, ⋯⟩, (dot Y₃.val) (↑T).val - (dot B₃.val) (↑T).val,
2 * (dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val, 1) =
↑T
apply ACCSystem.Sols.ext T:InQuadCubeSol⊢ (((dot Y₃.val) B₃.val)⁻¹ •
inQuadCubeToSol
(⟨⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩, ⋯⟩, (dot Y₃.val) (↑T).val - (dot B₃.val) (↑T).val,
2 * (dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val, 1)).val =
(↑T).val
change _ • (planeY₃B₃ _ _ _ _).val = _ T:InQuadCubeSol⊢ ((dot Y₃.val) B₃.val)⁻¹ •
(planeY₃B₃ (↑↑↑⟨⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩, ⋯⟩) ((dot Y₃.val) (↑T).val - (dot B₃.val) (↑T).val)
(2 * (dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) 1).val =
(↑T).val
rw [planeY₃B₃_val, T:InQuadCubeSol⊢ ((dot Y₃.val) B₃.val)⁻¹ •
(((dot Y₃.val) (↑T).val - (dot B₃.val) (↑T).val) • Y₃.val +
(2 * (dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val) • B₃.val +
1 • (↑↑↑⟨⟨⟨proj (↑T).toLinSols, ⋯⟩, ⋯⟩, ⋯⟩).val) =
(↑T).val T:InQuadCubeSol⊢ ((dot Y₃.val) B₃.val)⁻¹ •
(((dot Y₃.val) (↑T).val - (dot B₃.val) (↑T).val + 1 * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val)) • Y₃.val +
(2 * (dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val + 1 * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) •
B₃.val +
((dot Y₃.val) B₃.val * 1) • (↑T).val) =
(↑T).val Y₃_plus_B₃_plus_proj T:InQuadCubeSol⊢ ((dot Y₃.val) B₃.val)⁻¹ •
(((dot Y₃.val) (↑T).val - (dot B₃.val) (↑T).val + 1 * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val)) • Y₃.val +
(2 * (dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val + 1 * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) •
B₃.val +
((dot Y₃.val) B₃.val * 1) • (↑T).val) =
(↑T).val T:InQuadCubeSol⊢ ((dot Y₃.val) B₃.val)⁻¹ •
(((dot Y₃.val) (↑T).val - (dot B₃.val) (↑T).val + 1 * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val)) • Y₃.val +
(2 * (dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val + 1 * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) •
B₃.val +
((dot Y₃.val) B₃.val * 1) • (↑T).val) =
(↑T).val] T:InQuadCubeSol⊢ ((dot Y₃.val) B₃.val)⁻¹ •
(((dot Y₃.val) (↑T).val - (dot B₃.val) (↑T).val + 1 * ((dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val)) • Y₃.val +
(2 * (dot B₃.val) (↑T).val - (dot Y₃.val) (↑T).val + 1 * ((dot Y₃.val) (↑T).val - 2 * (dot B₃.val) (↑T).val)) •
B₃.val +
((dot Y₃.val) B₃.val * 1) • (↑T).val) =
(↑T).val
ring_nf T:InQuadCubeSol⊢ ((dot Y₃.val) B₃.val)⁻¹ • (0 • Y₃.val + 0 • B₃.val + (dot Y₃.val) B₃.val • (↑T).val) = (↑T).val
simp only [zero_smul, add_zero, zero_add] T:InQuadCubeSol⊢ ((dot Y₃.val) B₃.val)⁻¹ • (dot Y₃.val) B₃.val • (↑T).val = (↑T).val
rw [← SemigroupAction.mul_smul, T:InQuadCubeSol⊢ (((dot Y₃.val) B₃.val)⁻¹ * (dot Y₃.val) B₃.val) • (↑T).val = (↑T).val T:InQuadCubeSol⊢ 1 • (↑T).val = (↑T).valT:InQuadCubeSol⊢ (dot Y₃.val) B₃.val ≠ 0 mul_comm, T:InQuadCubeSol⊢ ((dot Y₃.val) B₃.val * ((dot Y₃.val) B₃.val)⁻¹) • (↑T).val = (↑T).val T:InQuadCubeSol⊢ 1 • (↑T).val = (↑T).valT:InQuadCubeSol⊢ (dot Y₃.val) B₃.val ≠ 0 mul_inv_cancel₀ T:InQuadCubeSol⊢ 1 • (↑T).val = (↑T).valT:InQuadCubeSol⊢ (dot Y₃.val) B₃.val ≠ 0 T:InQuadCubeSol⊢ 1 • (↑T).val = (↑T).valT:InQuadCubeSol⊢ (dot Y₃.val) B₃.val ≠ 0] T:InQuadCubeSol⊢ 1 • (↑T).val = (↑T).valT:InQuadCubeSol⊢ (dot Y₃.val) B₃.val ≠ 0
· T:InQuadCubeSol⊢ 1 • (↑T).val = (↑T).val exact MulAction.one_smul (T.1).val All goals completed! 🐙
· T:InQuadCubeSol⊢ (dot Y₃.val) B₃.val ≠ 0 rw [show dot Y₃.val B₃.val = 108 by T:InQuadCubeSol⊢ inQuadCubeToSol (inQuadCubeProj T) = ↑T T:InQuadCubeSol⊢ 108 ≠ 0 with_unfolding_all rfl All goals completed! 🐙 T:InQuadCubeSol⊢ 108 ≠ 0] T:InQuadCubeSol⊢ 108 ≠ 0
exact Ne.symm (OfNat.zero_ne_ofNat 108) All goals completed! 🐙
A solution from an element of MSSMACC.AnomalyFreePerp × ℚ × ℚ × ℚ. We will
show that this map is a surjection.
def toSol : MSSMACC.AnomalyFreePerp × ℚ × ℚ × ℚ → MSSMACC.Sols := fun (R, a, b, c) =>
if h₃ : LineEqProp R ∧ InQuadProp R ∧ InCubeProp R then
inQuadCubeToSol (⟨⟨⟨R, h₃.1⟩, h₃.2.1⟩, h₃.2.2⟩, a, b, c)
else
if h₂ : LineEqProp R ∧ InQuadProp R then
inQuadToSol (⟨⟨R, h₂.1⟩, h₂.2⟩, a, b, c)
else
if h₁ : LineEqProp R then
inLineEqToSol (⟨R, h₁⟩, a, b, c)
else
toSolNS ⟨R, a, b, c⟩lemma toSol_toSolNSProj (T : NotInLineEqSol) :
∃ X, toSol X = T.val := by T:NotInLineEqSol⊢ ∃ X, toSol X = ↑T
use toSolNSProj T.val h T:NotInLineEqSol⊢ toSol (toSolNSProj ↑T) = ↑T
have h1 : ¬ LineEqProp (toSolNSProj T.val).1 :=
(linEqPropSol_iff_proj_linEqProp T.val).mpr.mt T.prop h T:NotInLineEqSolh1:¬(toSolNSProj ↑T).1.LineEqProp⊢ toSol (toSolNSProj ↑T) = ↑T
simp_rw [ h T:NotInLineEqSolh1:¬(toSolNSProj ↑T).1.LineEqProp⊢ toSol (toSolNSProj ↑T) = ↑TtoSol, h T:NotInLineEqSolh1:¬(toSolNSProj ↑T).1.LineEqProp⊢ (if h₃ : (toSolNSProj ↑T).1.LineEqProp ∧ (toSolNSProj ↑T).1.InQuadProp ∧ (toSolNSProj ↑T).1.InCubeProp then
inQuadCubeToSol
(⟨⟨⟨(toSolNSProj ↑T).1, ⋯⟩, ⋯⟩, ⋯⟩, (toSolNSProj ↑T).2.1, (toSolNSProj ↑T).2.2.1, (toSolNSProj ↑T).2.2.2)
else
if h₂ : (toSolNSProj ↑T).1.LineEqProp ∧ (toSolNSProj ↑T).1.InQuadProp then
inQuadToSol (⟨⟨(toSolNSProj ↑T).1, ⋯⟩, ⋯⟩, (toSolNSProj ↑T).2.1, (toSolNSProj ↑T).2.2.1, (toSolNSProj ↑T).2.2.2)
else
if h₁ : (toSolNSProj ↑T).1.LineEqProp then
inLineEqToSol (⟨(toSolNSProj ↑T).1, h₁⟩, (toSolNSProj ↑T).2.1, (toSolNSProj ↑T).2.2.1, (toSolNSProj ↑T).2.2.2)
else toSolNS ((toSolNSProj ↑T).1, (toSolNSProj ↑T).2.1, (toSolNSProj ↑T).2.2.1, (toSolNSProj ↑T).2.2.2)) =
↑T h1 h T:NotInLineEqSolh1:¬(toSolNSProj ↑T).1.LineEqProp⊢ (if h : False ∧ (toSolNSProj ↑T).1.InQuadProp ∧ (toSolNSProj ↑T).1.InCubeProp then
inQuadCubeToSol
(⟨⟨⟨(toSolNSProj ↑T).1, ⋯⟩, ⋯⟩, ⋯⟩, (toSolNSProj ↑T).2.1, (toSolNSProj ↑T).2.2.1, (toSolNSProj ↑T).2.2.2)
else
if h : False ∧ (toSolNSProj ↑T).1.InQuadProp then
inQuadToSol (⟨⟨(toSolNSProj ↑T).1, ⋯⟩, ⋯⟩, (toSolNSProj ↑T).2.1, (toSolNSProj ↑T).2.2.1, (toSolNSProj ↑T).2.2.2)
else
if h : False then
inLineEqToSol (⟨(toSolNSProj ↑T).1, ⋯⟩, (toSolNSProj ↑T).2.1, (toSolNSProj ↑T).2.2.1, (toSolNSProj ↑T).2.2.2)
else toSolNS ((toSolNSProj ↑T).1, (toSolNSProj ↑T).2.1, (toSolNSProj ↑T).2.2.1, (toSolNSProj ↑T).2.2.2)) =
↑T]
exact toSolNS_proj T All goals completed! 🐙lemma toSol_inLineEq (T : InLineEqSol) : ∃ X, toSol X = T.val := by T:InLineEqSol⊢ ∃ X, toSol X = ↑T
let X := inLineEqProj T T:InLineEqSolX:InLineEq × ℚ × ℚ × ℚ := inLineEqProj T⊢ ∃ X, toSol X = ↑T
use ⟨X.1.val, X.2.1, X.2.2⟩ h T:InLineEqSolX:InLineEq × ℚ × ℚ × ℚ := inLineEqProj T⊢ toSol (↑X.1, X.2.1, X.2.2) = ↑T
have : ¬ InQuadProp X.1.val := (inQuadSolProp_iff_proj_inQuadProp T.val).mpr.mt T.prop.2 h T:InLineEqSolX:InLineEq × ℚ × ℚ × ℚ := inLineEqProj Tthis:¬(↑X.1).InQuadProp⊢ toSol (↑X.1, X.2.1, X.2.2) = ↑T
have : LineEqProp X.1.val := (linEqPropSol_iff_proj_linEqProp T.val).mp T.prop.1 h T:InLineEqSolX:InLineEq × ℚ × ℚ × ℚ := inLineEqProj Tthis✝:¬(↑X.1).InQuadPropthis:(↑X.1).LineEqProp⊢ toSol (↑X.1, X.2.1, X.2.2) = ↑T
simp_all only [toSol] h T:InLineEqSolX:InLineEq × ℚ × ℚ × ℚ := inLineEqProj Tthis✝:¬(↑X.1).InQuadPropthis:(↑X.1).LineEqProp⊢ (if h : True ∧ False ∧ (↑X.1).InCubeProp then inQuadCubeToSol (⟨⟨⟨↑X.1, ⋯⟩, ⋯⟩, ⋯⟩, X.2.1, X.2.2.1, X.2.2.2)
else
if h : True ∧ False then inQuadToSol (⟨⟨↑X.1, ⋯⟩, ⋯⟩, X.2.1, X.2.2.1, X.2.2.2)
else
if h : True then inLineEqToSol (⟨↑X.1, ⋯⟩, X.2.1, X.2.2.1, X.2.2.2)
else toSolNS (↑X.1, X.2.1, X.2.2.1, X.2.2.2)) =
↑T
exact inLineEqToSol_proj T All goals completed! 🐙lemma toSol_inQuad (T : InQuadSol) : ∃ X, toSol X = T.val := by T:InQuadSol⊢ ∃ X, toSol X = ↑T
let X := inQuadProj T T:InQuadSolX:InQuad × ℚ × ℚ × ℚ := inQuadProj T⊢ ∃ X, toSol X = ↑T
use ⟨X.1.val.val, X.2.1, X.2.2⟩ h T:InQuadSolX:InQuad × ℚ × ℚ × ℚ := inQuadProj T⊢ toSol (↑↑X.1, X.2.1, X.2.2) = ↑T
have : ¬ InCubeProp X.1.val.val := (inCubeSolProp_iff_proj_inCubeProp T.val).mpr.mt T.prop.2.2 h T:InQuadSolX:InQuad × ℚ × ℚ × ℚ := inQuadProj Tthis:¬(↑↑X.1).InCubeProp⊢ toSol (↑↑X.1, X.2.1, X.2.2) = ↑T
have : InQuadProp X.1.val.val := (inQuadSolProp_iff_proj_inQuadProp T.val).mp T.prop.2.1 h T:InQuadSolX:InQuad × ℚ × ℚ × ℚ := inQuadProj Tthis✝:¬(↑↑X.1).InCubePropthis:(↑↑X.1).InQuadProp⊢ toSol (↑↑X.1, X.2.1, X.2.2) = ↑T
have : LineEqProp X.1.val.val := (linEqPropSol_iff_proj_linEqProp T.val).mp T.prop.1 h T:InQuadSolX:InQuad × ℚ × ℚ × ℚ := inQuadProj Tthis✝¹:¬(↑↑X.1).InCubePropthis✝:(↑↑X.1).InQuadPropthis:(↑↑X.1).LineEqProp⊢ toSol (↑↑X.1, X.2.1, X.2.2) = ↑T
simp_all only [toSol] h T:InQuadSolX:InQuad × ℚ × ℚ × ℚ := inQuadProj Tthis✝¹:¬(↑↑X.1).InCubePropthis✝:(↑↑X.1).InQuadPropthis:(↑↑X.1).LineEqProp⊢ (if h : True ∧ True ∧ False then inQuadCubeToSol (⟨⟨⟨↑↑X.1, ⋯⟩, ⋯⟩, ⋯⟩, X.2.1, X.2.2.1, X.2.2.2)
else
if h : True ∧ True then inQuadToSol (⟨⟨↑↑X.1, ⋯⟩, ⋯⟩, X.2.1, X.2.2.1, X.2.2.2)
else
if h : True then inLineEqToSol (⟨↑↑X.1, ⋯⟩, X.2.1, X.2.2.1, X.2.2.2)
else toSolNS (↑↑X.1, X.2.1, X.2.2.1, X.2.2.2)) =
↑T
exact inQuadToSol_proj T All goals completed! 🐙lemma toSol_inQuadCube (T : InQuadCubeSol) : ∃ X, toSol X = T.val := by T:InQuadCubeSol⊢ ∃ X, toSol X = ↑T
let X := inQuadCubeProj T T:InQuadCubeSolX:InQuadCube × ℚ × ℚ × ℚ := inQuadCubeProj T⊢ ∃ X, toSol X = ↑T
use ⟨X.1.val.val.val, X.2.1, X.2.2⟩ h T:InQuadCubeSolX:InQuadCube × ℚ × ℚ × ℚ := inQuadCubeProj T⊢ toSol (↑↑↑X.1, X.2.1, X.2.2) = ↑T
have : InCubeProp X.1.val.val.val := (inCubeSolProp_iff_proj_inCubeProp T.val).mp T.prop.2.2 h T:InQuadCubeSolX:InQuadCube × ℚ × ℚ × ℚ := inQuadCubeProj Tthis:(↑↑↑X.1).InCubeProp⊢ toSol (↑↑↑X.1, X.2.1, X.2.2) = ↑T
have : InQuadProp X.1.val.val.val := (inQuadSolProp_iff_proj_inQuadProp T.val).mp T.prop.2.1 h T:InQuadCubeSolX:InQuadCube × ℚ × ℚ × ℚ := inQuadCubeProj Tthis✝:(↑↑↑X.1).InCubePropthis:(↑↑↑X.1).InQuadProp⊢ toSol (↑↑↑X.1, X.2.1, X.2.2) = ↑T
have : LineEqProp X.1.val.val.val := (linEqPropSol_iff_proj_linEqProp T.val).mp T.prop.1 h T:InQuadCubeSolX:InQuadCube × ℚ × ℚ × ℚ := inQuadCubeProj Tthis✝¹:(↑↑↑X.1).InCubePropthis✝:(↑↑↑X.1).InQuadPropthis:(↑↑↑X.1).LineEqProp⊢ toSol (↑↑↑X.1, X.2.1, X.2.2) = ↑T
simp_all only [toSol] h T:InQuadCubeSolX:InQuadCube × ℚ × ℚ × ℚ := inQuadCubeProj Tthis✝¹:(↑↑↑X.1).InCubePropthis✝:(↑↑↑X.1).InQuadPropthis:(↑↑↑X.1).LineEqProp⊢ (if h : True ∧ True ∧ True then inQuadCubeToSol (⟨⟨⟨↑↑↑X.1, ⋯⟩, ⋯⟩, ⋯⟩, X.2.1, X.2.2.1, X.2.2.2)
else
if h : True ∧ True then inQuadToSol (⟨⟨↑↑↑X.1, ⋯⟩, ⋯⟩, X.2.1, X.2.2.1, X.2.2.2)
else
if h : True then inLineEqToSol (⟨↑↑↑X.1, ⋯⟩, X.2.1, X.2.2.1, X.2.2.2)
else toSolNS (↑↑↑X.1, X.2.1, X.2.2.1, X.2.2.2)) =
↑T
exact inQuadCubeToSol_proj T All goals completed! 🐙theorem toSol_surjective : Function.Surjective toSol := by ⊢ Function.Surjective toSol
intro T T:MSSMACC.Sols⊢ ∃ a, toSol a = T
by_cases h₁ : ¬ LineEqPropSol T pos T:MSSMACC.Solsh₁:¬LineEqPropSol T⊢ ∃ a, toSol a = Tneg T:MSSMACC.Solsh₁:¬¬LineEqPropSol T⊢ ∃ a, toSol a = T
· pos T:MSSMACC.Solsh₁:¬LineEqPropSol T⊢ ∃ a, toSol a = T exact toSol_toSolNSProj ⟨T, h₁⟩ All goals completed! 🐙
· neg T:MSSMACC.Solsh₁:¬¬LineEqPropSol T⊢ ∃ a, toSol a = T simp only [not_not] at h₁ neg T:MSSMACC.Solsh₁:LineEqPropSol T⊢ ∃ a, toSol a = T
by_cases h₂ : ¬ InQuadSolProp T pos T:MSSMACC.Solsh₁:LineEqPropSol Th₂:¬InQuadSolProp T⊢ ∃ a, toSol a = Tneg T:MSSMACC.Solsh₁:LineEqPropSol Th₂:¬¬InQuadSolProp T⊢ ∃ a, toSol a = T
· pos T:MSSMACC.Solsh₁:LineEqPropSol Th₂:¬InQuadSolProp T⊢ ∃ a, toSol a = T exact toSol_inLineEq ⟨T, And.intro h₁ h₂⟩ All goals completed! 🐙
· neg T:MSSMACC.Solsh₁:LineEqPropSol Th₂:¬¬InQuadSolProp T⊢ ∃ a, toSol a = T simp only [not_not] at h₂ neg T:MSSMACC.Solsh₁:LineEqPropSol Th₂:InQuadSolProp T⊢ ∃ a, toSol a = T
by_cases h₃ : ¬ InCubeSolProp T pos T:MSSMACC.Solsh₁:LineEqPropSol Th₂:InQuadSolProp Th₃:¬InCubeSolProp T⊢ ∃ a, toSol a = Tneg T:MSSMACC.Solsh₁:LineEqPropSol Th₂:InQuadSolProp Th₃:¬¬InCubeSolProp T⊢ ∃ a, toSol a = T
· pos T:MSSMACC.Solsh₁:LineEqPropSol Th₂:InQuadSolProp Th₃:¬InCubeSolProp T⊢ ∃ a, toSol a = T exact toSol_inQuad ⟨T, And.intro h₁ (And.intro h₂ h₃)⟩ All goals completed! 🐙
· neg T:MSSMACC.Solsh₁:LineEqPropSol Th₂:InQuadSolProp Th₃:¬¬InCubeSolProp T⊢ ∃ a, toSol a = T simp only [not_not] at h₃ neg T:MSSMACC.Solsh₁:LineEqPropSol Th₂:InQuadSolProp Th₃:InCubeSolProp T⊢ ∃ a, toSol a = T
exact toSol_inQuadCube ⟨T, And.intro h₁ (And.intro h₂ h₃)⟩ All goals completed! 🐙