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.QFT.QED.AnomalyCancellation.ConstAbsLine in plane condition
We say a LinSol satisfies the line in plane condition if for all distinct i1, i2, i3 in
Fin n, we have
S i1 = S i2 or S i1 = - S i2 or 2 S i3 + S i1 + S i2 = 0.
We look at various consequences of this. The main reference for this material is
https://arxiv.org/pdf/1912.04804.pdf
We will show that n ≥ 4 the line in plane condition on solutions implies the
constAbs condition.
@[expose] public section
The proposition on three rationals to satisfy the linInPlane condition.
def LineInPlaneProp : ℚ × ℚ × ℚ → Prop := fun s =>
s.1 = s.2.1 ∨ s.1 = - s.2.1 ∨ 2 * s.2.2 + s.1 + s.2.1 = 0
The proposition on a LinSol to satisfy the linInPlane condition.
def LineInPlaneCond (S : (PureU1 n).LinSols) : Prop :=
∀ (i1 i2 i3 : Fin n) (_ : i1 ≠ i2) (_ : i2 ≠ i3) (_ : i1 ≠ i3),
LineInPlaneProp (S.val i1, (S.val i2, S.val i3))lemma lineInPlaneCond_perm {S : (PureU1 n).LinSols} (hS : LineInPlaneCond S)
(M : (FamilyPermutations n).group) :
LineInPlaneCond ((FamilyPermutations n).linSolRep M S) := n:ℕS:(PureU1 n).LinSolshS:LineInPlaneCond SM:(FamilyPermutations n).group⊢ LineInPlaneCond (((FamilyPermutations n).linSolRep M) S)
n:ℕS:(PureU1 n).LinSolshS:LineInPlaneCond SM:(FamilyPermutations n).groupi1:Fin ni2:Fin ni3:Fin nh1:i1 ≠ i2h2:i2 ≠ i3h3:i1 ≠ i3⊢ LineInPlaneProp
((((FamilyPermutations n).linSolRep M) S).val i1, (((FamilyPermutations n).linSolRep M) S).val i2,
(((FamilyPermutations n).linSolRep M) S).val i3)
n:ℕS:(PureU1 n).LinSolshS:LineInPlaneCond SM:(FamilyPermutations n).groupi1:Fin ni2:Fin ni3:Fin nh1:i1 ≠ i2h2:i2 ≠ i3h3:i1 ≠ i3⊢ LineInPlaneProp (S.val (M.invFun i1), S.val (M.invFun i2), S.val (M.invFun i3))
n:ℕS:(PureU1 n).LinSolshS:LineInPlaneCond SM:(FamilyPermutations n).groupi1:Fin ni2:Fin ni3:Fin nh1:i1 ≠ i2h2:i2 ≠ i3h3:i1 ≠ i3⊢ M.invFun i1 ≠ M.invFun i2n:ℕS:(PureU1 n).LinSolshS:LineInPlaneCond SM:(FamilyPermutations n).groupi1:Fin ni2:Fin ni3:Fin nh1:i1 ≠ i2h2:i2 ≠ i3h3:i1 ≠ i3⊢ M.invFun i2 ≠ M.invFun i3n:ℕS:(PureU1 n).LinSolshS:LineInPlaneCond SM:(FamilyPermutations n).groupi1:Fin ni2:Fin ni3:Fin nh1:i1 ≠ i2h2:i2 ≠ i3h3:i1 ≠ i3⊢ M.invFun i1 ≠ M.invFun i3
all_goals All goals completed! 🐙n:ℕS:(PureU1 n.succ.succ).LinSolshS:∀ (i1 i2 i3 : Fin n.succ.succ),
i1 ≠ i2 → i2 ≠ i3 → i1 ≠ i3 → S.val i1 = S.val i2 ∨ S.val i1 = -S.val i2 ∨ 2 * S.val i3 + S.val i1 + S.val i2 = 0h:¬S.val (Fin.last n).castSucc = S.val (Fin.last (n + 1)) ∧ ¬S.val (Fin.last n).castSucc = -S.val (Fin.last (n + 1))h1:∀ (i : Fin n), S.val i.castSucc.castSucc = -(S.val (Fin.last n).castSucc + S.val (Fin.last n).succ) / 2h2:S.val (Fin.last (n + 1)) = -(∑ i, S.val i.castSucc.castSucc + S.val (Fin.last n).castSucc)⊢ (2 - ↑n) * S.val (Fin.last (n + 1)) = -(2 - ↑n) * S.val (Fin.last n).castSucc
simp only [Nat.succ_eq_add_one, h1, Fin.succ_last, neg_add_rev, Finset.sum_const,
Finset.card_univ, Fintype.card_fin, nsmul_eq_mul] at h2 n:ℕS:(PureU1 n.succ.succ).LinSolshS:∀ (i1 i2 i3 : Fin n.succ.succ),
i1 ≠ i2 → i2 ≠ i3 → i1 ≠ i3 → S.val i1 = S.val i2 ∨ S.val i1 = -S.val i2 ∨ 2 * S.val i3 + S.val i1 + S.val i2 = 0h:¬S.val (Fin.last n).castSucc = S.val (Fin.last (n + 1)) ∧ ¬S.val (Fin.last n).castSucc = -S.val (Fin.last (n + 1))h1:∀ (i : Fin n), S.val i.castSucc.castSucc = -(S.val (Fin.last n).castSucc + S.val (Fin.last n).succ) / 2h2:S.val (Fin.last (n + 1)) =
-S.val (Fin.last n).castSucc + -(↑n * ((-S.val (Fin.last (n + 1)) + -S.val (Fin.last n).castSucc) / 2))⊢ (2 - ↑n) * S.val (Fin.last (n + 1)) = -(2 - ↑n) * S.val (Fin.last n).castSucc
field_simp at h2 n:ℕS:(PureU1 n.succ.succ).LinSolshS:∀ (i1 i2 i3 : Fin n.succ.succ),
i1 ≠ i2 → i2 ≠ i3 → i1 ≠ i3 → S.val i1 = S.val i2 ∨ S.val i1 = -S.val i2 ∨ 2 * S.val i3 + S.val i1 + S.val i2 = 0h:¬S.val (Fin.last n).castSucc = S.val (Fin.last (n + 1)) ∧ ¬S.val (Fin.last n).castSucc = -S.val (Fin.last (n + 1))h1:∀ (i : Fin n), S.val i.castSucc.castSucc = -(S.val (Fin.last n).castSucc + S.val (Fin.last n).succ) / 2h2:S.val (Fin.last (n + 1)) * 2 =
-(S.val (Fin.last n).castSucc * 2) + -(↑n * (-S.val (Fin.last (n + 1)) + -S.val (Fin.last n).castSucc))⊢ (2 - ↑n) * S.val (Fin.last (n + 1)) = -(2 - ↑n) * S.val (Fin.last n).castSucc
linear_combination h2 All goals completed! 🐙
lemma lineInPlaneCond_eq_last {S : (PureU1 (n.succ.succ.succ.succ.succ)).LinSols}
(hS : LineInPlaneCond S) : ConstAbsProp ((S.val ((Fin.last n.succ.succ.succ).castSucc)),
(S.val ((Fin.last n.succ.succ.succ).succ))) := by n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond S⊢ ConstAbsProp (S.val (Fin.last n.succ.succ.succ).castSucc, S.val (Fin.last n.succ.succ.succ).succ)
rw [ConstAbsProp n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond S⊢ (S.val (Fin.last n.succ.succ.succ).castSucc, S.val (Fin.last n.succ.succ.succ).succ).1 ^ 2 =
(S.val (Fin.last n.succ.succ.succ).castSucc, S.val (Fin.last n.succ.succ.succ).succ).2 ^ 2 n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond S⊢ (S.val (Fin.last n.succ.succ.succ).castSucc, S.val (Fin.last n.succ.succ.succ).succ).1 ^ 2 =
(S.val (Fin.last n.succ.succ.succ).castSucc, S.val (Fin.last n.succ.succ.succ).succ).2 ^ 2] n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond S⊢ (S.val (Fin.last n.succ.succ.succ).castSucc, S.val (Fin.last n.succ.succ.succ).succ).1 ^ 2 =
(S.val (Fin.last n.succ.succ.succ).castSucc, S.val (Fin.last n.succ.succ.succ).succ).2 ^ 2
by_contra hn n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Shn:¬(S.val (Fin.last n.succ.succ.succ).castSucc, S.val (Fin.last n.succ.succ.succ).succ).1 ^ 2 =
(S.val (Fin.last n.succ.succ.succ).castSucc, S.val (Fin.last n.succ.succ.succ).succ).2 ^ 2⊢ False
have h := lineInPlaneCond_eq_last' hS hn n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Shn:¬(S.val (Fin.last n.succ.succ.succ).castSucc, S.val (Fin.last n.succ.succ.succ).succ).1 ^ 2 =
(S.val (Fin.last n.succ.succ.succ).castSucc, S.val (Fin.last n.succ.succ.succ).succ).2 ^ 2h:(2 - ↑(n + 3)) * S.val (Fin.last (n + 3 + 1)) = -(2 - ↑(n + 3)) * S.val (Fin.last (n + 3)).castSucc⊢ False
rw [sq_eq_sq_iff_eq_or_eq_neg n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Shn:¬((S.val (Fin.last n.succ.succ.succ).castSucc, S.val (Fin.last n.succ.succ.succ).succ).1 =
(S.val (Fin.last n.succ.succ.succ).castSucc, S.val (Fin.last n.succ.succ.succ).succ).2 ∨
(S.val (Fin.last n.succ.succ.succ).castSucc, S.val (Fin.last n.succ.succ.succ).succ).1 =
-(S.val (Fin.last n.succ.succ.succ).castSucc, S.val (Fin.last n.succ.succ.succ).succ).2)h:(2 - ↑(n + 3)) * S.val (Fin.last (n + 3 + 1)) = -(2 - ↑(n + 3)) * S.val (Fin.last (n + 3)).castSucc⊢ False n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Shn:¬((S.val (Fin.last n.succ.succ.succ).castSucc, S.val (Fin.last n.succ.succ.succ).succ).1 =
(S.val (Fin.last n.succ.succ.succ).castSucc, S.val (Fin.last n.succ.succ.succ).succ).2 ∨
(S.val (Fin.last n.succ.succ.succ).castSucc, S.val (Fin.last n.succ.succ.succ).succ).1 =
-(S.val (Fin.last n.succ.succ.succ).castSucc, S.val (Fin.last n.succ.succ.succ).succ).2)h:(2 - ↑(n + 3)) * S.val (Fin.last (n + 3 + 1)) = -(2 - ↑(n + 3)) * S.val (Fin.last (n + 3)).castSucc⊢ False] at hn n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Shn:¬((S.val (Fin.last n.succ.succ.succ).castSucc, S.val (Fin.last n.succ.succ.succ).succ).1 =
(S.val (Fin.last n.succ.succ.succ).castSucc, S.val (Fin.last n.succ.succ.succ).succ).2 ∨
(S.val (Fin.last n.succ.succ.succ).castSucc, S.val (Fin.last n.succ.succ.succ).succ).1 =
-(S.val (Fin.last n.succ.succ.succ).castSucc, S.val (Fin.last n.succ.succ.succ).succ).2)h:(2 - ↑(n + 3)) * S.val (Fin.last (n + 3 + 1)) = -(2 - ↑(n + 3)) * S.val (Fin.last (n + 3)).castSucc⊢ False
simp only [Nat.succ_eq_add_one, Fin.succ_last, not_or] at hn n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Sh:(2 - ↑(n + 3)) * S.val (Fin.last (n + 3 + 1)) = -(2 - ↑(n + 3)) * S.val (Fin.last (n + 3)).castSucchn:¬S.val (Fin.last (n + 2 + 1)).castSucc = S.val (Fin.last (n + 3 + 1)) ∧
¬S.val (Fin.last (n + 2 + 1)).castSucc = -S.val (Fin.last (n + 3 + 1))⊢ False
have hx : ((2 : ℚ) - ↑(n + 3)) ≠ 0 := by n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond S⊢ ConstAbsProp (S.val (Fin.last n.succ.succ.succ).castSucc, S.val (Fin.last n.succ.succ.succ).succ) n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Sh:(2 - ↑(n + 3)) * S.val (Fin.last (n + 3 + 1)) = -(2 - ↑(n + 3)) * S.val (Fin.last (n + 3)).castSucchn:¬S.val (Fin.last (n + 2 + 1)).castSucc = S.val (Fin.last (n + 3 + 1)) ∧
¬S.val (Fin.last (n + 2 + 1)).castSucc = -S.val (Fin.last (n + 3 + 1))hx:2 - ↑(n + 3) ≠ 0⊢ False
rw [Nat.cast_add n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Sh:(2 - ↑(n + 3)) * S.val (Fin.last (n + 3 + 1)) = -(2 - ↑(n + 3)) * S.val (Fin.last (n + 3)).castSucchn:¬S.val (Fin.last (n + 2 + 1)).castSucc = S.val (Fin.last (n + 3 + 1)) ∧
¬S.val (Fin.last (n + 2 + 1)).castSucc = -S.val (Fin.last (n + 3 + 1))⊢ 2 - (↑n + ↑3) ≠ 0 n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Sh:(2 - ↑(n + 3)) * S.val (Fin.last (n + 3 + 1)) = -(2 - ↑(n + 3)) * S.val (Fin.last (n + 3)).castSucchn:¬S.val (Fin.last (n + 2 + 1)).castSucc = S.val (Fin.last (n + 3 + 1)) ∧
¬S.val (Fin.last (n + 2 + 1)).castSucc = -S.val (Fin.last (n + 3 + 1))⊢ 2 - (↑n + ↑3) ≠ 0 n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Sh:(2 - ↑(n + 3)) * S.val (Fin.last (n + 3 + 1)) = -(2 - ↑(n + 3)) * S.val (Fin.last (n + 3)).castSucchn:¬S.val (Fin.last (n + 2 + 1)).castSucc = S.val (Fin.last (n + 3 + 1)) ∧
¬S.val (Fin.last (n + 2 + 1)).castSucc = -S.val (Fin.last (n + 3 + 1))hx:2 - ↑(n + 3) ≠ 0⊢ False] n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Sh:(2 - ↑(n + 3)) * S.val (Fin.last (n + 3 + 1)) = -(2 - ↑(n + 3)) * S.val (Fin.last (n + 3)).castSucchn:¬S.val (Fin.last (n + 2 + 1)).castSucc = S.val (Fin.last (n + 3 + 1)) ∧
¬S.val (Fin.last (n + 2 + 1)).castSucc = -S.val (Fin.last (n + 3 + 1))⊢ 2 - (↑n + ↑3) ≠ 0 n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Sh:(2 - ↑(n + 3)) * S.val (Fin.last (n + 3 + 1)) = -(2 - ↑(n + 3)) * S.val (Fin.last (n + 3)).castSucchn:¬S.val (Fin.last (n + 2 + 1)).castSucc = S.val (Fin.last (n + 3 + 1)) ∧
¬S.val (Fin.last (n + 2 + 1)).castSucc = -S.val (Fin.last (n + 3 + 1))hx:2 - ↑(n + 3) ≠ 0⊢ False
simp only [Nat.cast_ofNat, ne_eq] n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Sh:(2 - ↑(n + 3)) * S.val (Fin.last (n + 3 + 1)) = -(2 - ↑(n + 3)) * S.val (Fin.last (n + 3)).castSucchn:¬S.val (Fin.last (n + 2 + 1)).castSucc = S.val (Fin.last (n + 3 + 1)) ∧
¬S.val (Fin.last (n + 2 + 1)).castSucc = -S.val (Fin.last (n + 3 + 1))⊢ ¬2 - (↑n + 3) = 0 n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Sh:(2 - ↑(n + 3)) * S.val (Fin.last (n + 3 + 1)) = -(2 - ↑(n + 3)) * S.val (Fin.last (n + 3)).castSucchn:¬S.val (Fin.last (n + 2 + 1)).castSucc = S.val (Fin.last (n + 3 + 1)) ∧
¬S.val (Fin.last (n + 2 + 1)).castSucc = -S.val (Fin.last (n + 3 + 1))hx:2 - ↑(n + 3) ≠ 0⊢ False
intro a n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Sh:(2 - ↑(n + 3)) * S.val (Fin.last (n + 3 + 1)) = -(2 - ↑(n + 3)) * S.val (Fin.last (n + 3)).castSucchn:¬S.val (Fin.last (n + 2 + 1)).castSucc = S.val (Fin.last (n + 3 + 1)) ∧
¬S.val (Fin.last (n + 2 + 1)).castSucc = -S.val (Fin.last (n + 3 + 1))a:2 - (↑n + 3) = 0⊢ False n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Sh:(2 - ↑(n + 3)) * S.val (Fin.last (n + 3 + 1)) = -(2 - ↑(n + 3)) * S.val (Fin.last (n + 3)).castSucchn:¬S.val (Fin.last (n + 2 + 1)).castSucc = S.val (Fin.last (n + 3 + 1)) ∧
¬S.val (Fin.last (n + 2 + 1)).castSucc = -S.val (Fin.last (n + 3 + 1))hx:2 - ↑(n + 3) ≠ 0⊢ False
linarith n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Sh:(2 - ↑(n + 3)) * S.val (Fin.last (n + 3 + 1)) = -(2 - ↑(n + 3)) * S.val (Fin.last (n + 3)).castSucchn:¬S.val (Fin.last (n + 2 + 1)).castSucc = S.val (Fin.last (n + 3 + 1)) ∧
¬S.val (Fin.last (n + 2 + 1)).castSucc = -S.val (Fin.last (n + 3 + 1))hx:2 - ↑(n + 3) ≠ 0⊢ False n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Sh:(2 - ↑(n + 3)) * S.val (Fin.last (n + 3 + 1)) = -(2 - ↑(n + 3)) * S.val (Fin.last (n + 3)).castSucchn:¬S.val (Fin.last (n + 2 + 1)).castSucc = S.val (Fin.last (n + 3 + 1)) ∧
¬S.val (Fin.last (n + 2 + 1)).castSucc = -S.val (Fin.last (n + 3 + 1))hx:2 - ↑(n + 3) ≠ 0⊢ False
have ht : S.val ((Fin.last n.succ.succ.succ).succ) =
- S.val ((Fin.last n.succ.succ.succ).castSucc) := by n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond S⊢ ConstAbsProp (S.val (Fin.last n.succ.succ.succ).castSucc, S.val (Fin.last n.succ.succ.succ).succ) n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Sh:(2 - ↑(n + 3)) * S.val (Fin.last (n + 3 + 1)) = -(2 - ↑(n + 3)) * S.val (Fin.last (n + 3)).castSucchn:¬S.val (Fin.last (n + 2 + 1)).castSucc = S.val (Fin.last (n + 3 + 1)) ∧
¬S.val (Fin.last (n + 2 + 1)).castSucc = -S.val (Fin.last (n + 3 + 1))hx:2 - ↑(n + 3) ≠ 0ht:S.val (Fin.last n.succ.succ.succ).succ = -S.val (Fin.last n.succ.succ.succ).castSucc⊢ False
rw [← mul_right_inj' hx n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Sh:(2 - ↑(n + 3)) * S.val (Fin.last (n + 3 + 1)) = -(2 - ↑(n + 3)) * S.val (Fin.last (n + 3)).castSucchn:¬S.val (Fin.last (n + 2 + 1)).castSucc = S.val (Fin.last (n + 3 + 1)) ∧
¬S.val (Fin.last (n + 2 + 1)).castSucc = -S.val (Fin.last (n + 3 + 1))hx:2 - ↑(n + 3) ≠ 0⊢ (2 - ↑(n + 3)) * S.val (Fin.last n.succ.succ.succ).succ = (2 - ↑(n + 3)) * -S.val (Fin.last n.succ.succ.succ).castSucc n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Sh:(2 - ↑(n + 3)) * S.val (Fin.last (n + 3 + 1)) = -(2 - ↑(n + 3)) * S.val (Fin.last (n + 3)).castSucchn:¬S.val (Fin.last (n + 2 + 1)).castSucc = S.val (Fin.last (n + 3 + 1)) ∧
¬S.val (Fin.last (n + 2 + 1)).castSucc = -S.val (Fin.last (n + 3 + 1))hx:2 - ↑(n + 3) ≠ 0⊢ (2 - ↑(n + 3)) * S.val (Fin.last n.succ.succ.succ).succ = (2 - ↑(n + 3)) * -S.val (Fin.last n.succ.succ.succ).castSucc n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Sh:(2 - ↑(n + 3)) * S.val (Fin.last (n + 3 + 1)) = -(2 - ↑(n + 3)) * S.val (Fin.last (n + 3)).castSucchn:¬S.val (Fin.last (n + 2 + 1)).castSucc = S.val (Fin.last (n + 3 + 1)) ∧
¬S.val (Fin.last (n + 2 + 1)).castSucc = -S.val (Fin.last (n + 3 + 1))hx:2 - ↑(n + 3) ≠ 0ht:S.val (Fin.last n.succ.succ.succ).succ = -S.val (Fin.last n.succ.succ.succ).castSucc⊢ False] n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Sh:(2 - ↑(n + 3)) * S.val (Fin.last (n + 3 + 1)) = -(2 - ↑(n + 3)) * S.val (Fin.last (n + 3)).castSucchn:¬S.val (Fin.last (n + 2 + 1)).castSucc = S.val (Fin.last (n + 3 + 1)) ∧
¬S.val (Fin.last (n + 2 + 1)).castSucc = -S.val (Fin.last (n + 3 + 1))hx:2 - ↑(n + 3) ≠ 0⊢ (2 - ↑(n + 3)) * S.val (Fin.last n.succ.succ.succ).succ = (2 - ↑(n + 3)) * -S.val (Fin.last n.succ.succ.succ).castSucc n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Sh:(2 - ↑(n + 3)) * S.val (Fin.last (n + 3 + 1)) = -(2 - ↑(n + 3)) * S.val (Fin.last (n + 3)).castSucchn:¬S.val (Fin.last (n + 2 + 1)).castSucc = S.val (Fin.last (n + 3 + 1)) ∧
¬S.val (Fin.last (n + 2 + 1)).castSucc = -S.val (Fin.last (n + 3 + 1))hx:2 - ↑(n + 3) ≠ 0ht:S.val (Fin.last n.succ.succ.succ).succ = -S.val (Fin.last n.succ.succ.succ).castSucc⊢ False
simp only [Nat.cast_add, Nat.cast_ofNat, Nat.succ_eq_add_one, Fin.succ_last, mul_neg] n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Sh:(2 - ↑(n + 3)) * S.val (Fin.last (n + 3 + 1)) = -(2 - ↑(n + 3)) * S.val (Fin.last (n + 3)).castSucchn:¬S.val (Fin.last (n + 2 + 1)).castSucc = S.val (Fin.last (n + 3 + 1)) ∧
¬S.val (Fin.last (n + 2 + 1)).castSucc = -S.val (Fin.last (n + 3 + 1))hx:2 - ↑(n + 3) ≠ 0⊢ (2 - (↑n + 3)) * S.val (Fin.last (n + 3 + 1)) = -((2 - (↑n + 3)) * S.val (Fin.last (n + 2 + 1)).castSucc) n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Sh:(2 - ↑(n + 3)) * S.val (Fin.last (n + 3 + 1)) = -(2 - ↑(n + 3)) * S.val (Fin.last (n + 3)).castSucchn:¬S.val (Fin.last (n + 2 + 1)).castSucc = S.val (Fin.last (n + 3 + 1)) ∧
¬S.val (Fin.last (n + 2 + 1)).castSucc = -S.val (Fin.last (n + 3 + 1))hx:2 - ↑(n + 3) ≠ 0ht:S.val (Fin.last n.succ.succ.succ).succ = -S.val (Fin.last n.succ.succ.succ).castSucc⊢ False
simp only [Nat.cast_add, Nat.cast_ofNat, Nat.succ_eq_add_one, neg_sub] at h n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Shn:¬S.val (Fin.last (n + 2 + 1)).castSucc = S.val (Fin.last (n + 3 + 1)) ∧
¬S.val (Fin.last (n + 2 + 1)).castSucc = -S.val (Fin.last (n + 3 + 1))hx:2 - ↑(n + 3) ≠ 0h:(2 - (↑n + 3)) * S.val (Fin.last (n + 3 + 1)) = (↑n + 3 - 2) * S.val (Fin.last (n + 3)).castSucc⊢ (2 - (↑n + 3)) * S.val (Fin.last (n + 3 + 1)) = -((2 - (↑n + 3)) * S.val (Fin.last (n + 2 + 1)).castSucc) n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Sh:(2 - ↑(n + 3)) * S.val (Fin.last (n + 3 + 1)) = -(2 - ↑(n + 3)) * S.val (Fin.last (n + 3)).castSucchn:¬S.val (Fin.last (n + 2 + 1)).castSucc = S.val (Fin.last (n + 3 + 1)) ∧
¬S.val (Fin.last (n + 2 + 1)).castSucc = -S.val (Fin.last (n + 3 + 1))hx:2 - ↑(n + 3) ≠ 0ht:S.val (Fin.last n.succ.succ.succ).succ = -S.val (Fin.last n.succ.succ.succ).castSucc⊢ False
rw [h n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Shn:¬S.val (Fin.last (n + 2 + 1)).castSucc = S.val (Fin.last (n + 3 + 1)) ∧
¬S.val (Fin.last (n + 2 + 1)).castSucc = -S.val (Fin.last (n + 3 + 1))hx:2 - ↑(n + 3) ≠ 0h:(2 - (↑n + 3)) * S.val (Fin.last (n + 3 + 1)) = (↑n + 3 - 2) * S.val (Fin.last (n + 3)).castSucc⊢ (↑n + 3 - 2) * S.val (Fin.last (n + 3)).castSucc = -((2 - (↑n + 3)) * S.val (Fin.last (n + 2 + 1)).castSucc) n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Shn:¬S.val (Fin.last (n + 2 + 1)).castSucc = S.val (Fin.last (n + 3 + 1)) ∧
¬S.val (Fin.last (n + 2 + 1)).castSucc = -S.val (Fin.last (n + 3 + 1))hx:2 - ↑(n + 3) ≠ 0h:(2 - (↑n + 3)) * S.val (Fin.last (n + 3 + 1)) = (↑n + 3 - 2) * S.val (Fin.last (n + 3)).castSucc⊢ (↑n + 3 - 2) * S.val (Fin.last (n + 3)).castSucc = -((2 - (↑n + 3)) * S.val (Fin.last (n + 2 + 1)).castSucc) n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Sh:(2 - ↑(n + 3)) * S.val (Fin.last (n + 3 + 1)) = -(2 - ↑(n + 3)) * S.val (Fin.last (n + 3)).castSucchn:¬S.val (Fin.last (n + 2 + 1)).castSucc = S.val (Fin.last (n + 3 + 1)) ∧
¬S.val (Fin.last (n + 2 + 1)).castSucc = -S.val (Fin.last (n + 3 + 1))hx:2 - ↑(n + 3) ≠ 0ht:S.val (Fin.last n.succ.succ.succ).succ = -S.val (Fin.last n.succ.succ.succ).castSucc⊢ False] n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Shn:¬S.val (Fin.last (n + 2 + 1)).castSucc = S.val (Fin.last (n + 3 + 1)) ∧
¬S.val (Fin.last (n + 2 + 1)).castSucc = -S.val (Fin.last (n + 3 + 1))hx:2 - ↑(n + 3) ≠ 0h:(2 - (↑n + 3)) * S.val (Fin.last (n + 3 + 1)) = (↑n + 3 - 2) * S.val (Fin.last (n + 3)).castSucc⊢ (↑n + 3 - 2) * S.val (Fin.last (n + 3)).castSucc = -((2 - (↑n + 3)) * S.val (Fin.last (n + 2 + 1)).castSucc) n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Sh:(2 - ↑(n + 3)) * S.val (Fin.last (n + 3 + 1)) = -(2 - ↑(n + 3)) * S.val (Fin.last (n + 3)).castSucchn:¬S.val (Fin.last (n + 2 + 1)).castSucc = S.val (Fin.last (n + 3 + 1)) ∧
¬S.val (Fin.last (n + 2 + 1)).castSucc = -S.val (Fin.last (n + 3 + 1))hx:2 - ↑(n + 3) ≠ 0ht:S.val (Fin.last n.succ.succ.succ).succ = -S.val (Fin.last n.succ.succ.succ).castSucc⊢ False
ring n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Sh:(2 - ↑(n + 3)) * S.val (Fin.last (n + 3 + 1)) = -(2 - ↑(n + 3)) * S.val (Fin.last (n + 3)).castSucchn:¬S.val (Fin.last (n + 2 + 1)).castSucc = S.val (Fin.last (n + 3 + 1)) ∧
¬S.val (Fin.last (n + 2 + 1)).castSucc = -S.val (Fin.last (n + 3 + 1))hx:2 - ↑(n + 3) ≠ 0ht:S.val (Fin.last n.succ.succ.succ).succ = -S.val (Fin.last n.succ.succ.succ).castSucc⊢ False n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Sh:(2 - ↑(n + 3)) * S.val (Fin.last (n + 3 + 1)) = -(2 - ↑(n + 3)) * S.val (Fin.last (n + 3)).castSucchn:¬S.val (Fin.last (n + 2 + 1)).castSucc = S.val (Fin.last (n + 3 + 1)) ∧
¬S.val (Fin.last (n + 2 + 1)).castSucc = -S.val (Fin.last (n + 3 + 1))hx:2 - ↑(n + 3) ≠ 0ht:S.val (Fin.last n.succ.succ.succ).succ = -S.val (Fin.last n.succ.succ.succ).castSucc⊢ False
simp_all All goals completed! 🐙
lemma linesInPlane_eq_sq {S : (PureU1 (n.succ.succ.succ.succ.succ)).LinSols}
(hS : LineInPlaneCond S) : ∀ (i j : Fin n.succ.succ.succ.succ.succ) (_ : i ≠ j),
ConstAbsProp (S.val i, S.val j) := by n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond S⊢ ∀ (i j : Fin n.succ.succ.succ.succ.succ), i ≠ j → ConstAbsProp (S.val i, S.val j)
have hneq : ((Fin.last n.succ.succ.succ).castSucc) ≠ ((Fin.last n.succ.succ.succ).succ) := by
simp [Fin.ext_iff] n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Shneq:(Fin.last n.succ.succ.succ).castSucc ≠ (Fin.last n.succ.succ.succ).succ⊢ ∀ (i j : Fin n.succ.succ.succ.succ.succ), i ≠ j → ConstAbsProp (S.val i, S.val j) n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Shneq:(Fin.last n.succ.succ.succ).castSucc ≠ (Fin.last n.succ.succ.succ).succ⊢ ∀ (i j : Fin n.succ.succ.succ.succ.succ), i ≠ j → ConstAbsProp (S.val i, S.val j)
refine Prop_two ConstAbsProp hneq ?_ n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Shneq:(Fin.last n.succ.succ.succ).castSucc ≠ (Fin.last n.succ.succ.succ).succ⊢ ∀ (f : (FamilyPermutations n.succ.succ.succ.succ.succ).group),
ConstAbsProp
((((FamilyPermutations n.succ.succ.succ.succ.succ).linSolRep f) S).val (Fin.last n.succ.succ.succ).castSucc,
(((FamilyPermutations n.succ.succ.succ.succ.succ).linSolRep f) S).val (Fin.last n.succ.succ.succ).succ)
intro M n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Shneq:(Fin.last n.succ.succ.succ).castSucc ≠ (Fin.last n.succ.succ.succ).succM:(FamilyPermutations n.succ.succ.succ.succ.succ).group⊢ ConstAbsProp
((((FamilyPermutations n.succ.succ.succ.succ.succ).linSolRep M) S).val (Fin.last n.succ.succ.succ).castSucc,
(((FamilyPermutations n.succ.succ.succ.succ.succ).linSolRep M) S).val (Fin.last n.succ.succ.succ).succ)
exact lineInPlaneCond_eq_last (lineInPlaneCond_perm hS M) All goals completed! 🐙
theorem linesInPlane_constAbs {S : (PureU1 (n.succ.succ.succ.succ.succ)).LinSols}
(hS : LineInPlaneCond S) : ConstAbs S.val := by n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond S⊢ ConstAbs S.val
intro i j n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Si:Fin (PureU1 n.succ.succ.succ.succ.succ).numberChargesj:Fin (PureU1 n.succ.succ.succ.succ.succ).numberCharges⊢ S.val i ^ 2 = S.val j ^ 2
rcases eq_or_ne i j with hij | hij inl n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Si:Fin (PureU1 n.succ.succ.succ.succ.succ).numberChargesj:Fin (PureU1 n.succ.succ.succ.succ.succ).numberChargeshij:i = j⊢ S.val i ^ 2 = S.val j ^ 2inr n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Si:Fin (PureU1 n.succ.succ.succ.succ.succ).numberChargesj:Fin (PureU1 n.succ.succ.succ.succ.succ).numberChargeshij:i ≠ j⊢ S.val i ^ 2 = S.val j ^ 2
· inl n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Si:Fin (PureU1 n.succ.succ.succ.succ.succ).numberChargesj:Fin (PureU1 n.succ.succ.succ.succ.succ).numberChargeshij:i = j⊢ S.val i ^ 2 = S.val j ^ 2 rw [hij inl n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Si:Fin (PureU1 n.succ.succ.succ.succ.succ).numberChargesj:Fin (PureU1 n.succ.succ.succ.succ.succ).numberChargeshij:i = j⊢ S.val j ^ 2 = S.val j ^ 2 All goals completed! 🐙] All goals completed! 🐙
· inr n:ℕS:(PureU1 n.succ.succ.succ.succ.succ).LinSolshS:LineInPlaneCond Si:Fin (PureU1 n.succ.succ.succ.succ.succ).numberChargesj:Fin (PureU1 n.succ.succ.succ.succ.succ).numberChargeshij:i ≠ j⊢ S.val i ^ 2 = S.val j ^ 2 exact linesInPlane_eq_sq hS i j hij All goals completed! 🐙
lemma linesInPlane_four (S : (PureU1 4).Sols) (hS : LineInPlaneCond S.1.1) :
ConstAbsProp (S.val (0 : Fin 4), S.val (1 : Fin 4)) := by S:(PureU1 4).SolshS:LineInPlaneCond S.toLinSols⊢ ConstAbsProp (S.val 0, S.val 1)
simp only [ConstAbsProp, Fin.isValue] S:(PureU1 4).SolshS:LineInPlaneCond S.toLinSols⊢ S.val 0 ^ 2 = S.val 1 ^ 2
by_contra hn S:(PureU1 4).SolshS:LineInPlaneCond S.toLinSolshn:¬S.val 0 ^ 2 = S.val 1 ^ 2⊢ False
have hcube := pureU1_cube S S:(PureU1 4).SolshS:LineInPlaneCond S.toLinSolshn:¬S.val 0 ^ 2 = S.val 1 ^ 2hcube:∑ i, S.val i ^ 3 = 0⊢ False
erw [Fin.sum_univ_four S:(PureU1 4).SolshS:LineInPlaneCond S.toLinSolshn:¬S.val 0 ^ 2 = S.val 1 ^ 2hcube:S.val 0 ^ 3 + S.val 1 ^ 3 + S.val 2 ^ 3 + S.val 3 ^ 3 = 0⊢ False] S:(PureU1 4).SolshS:LineInPlaneCond S.toLinSolshn:¬S.val 0 ^ 2 = S.val 1 ^ 2hcube:S.val 0 ^ 3 + S.val 1 ^ 3 + S.val 2 ^ 3 + S.val 3 ^ 3 = 0⊢ False at hcube
rw [sq_eq_sq_iff_eq_or_eq_neg, S:(PureU1 4).SolshS:LineInPlaneCond S.toLinSolshn:¬(S.val 0 = S.val 1 ∨ S.val 0 = -S.val 1)hcube:S.val 0 ^ 3 + S.val 1 ^ 3 + S.val 2 ^ 3 + S.val 3 ^ 3 = 0⊢ False S:(PureU1 4).SolshS:LineInPlaneCond S.toLinSolshn:¬S.val 0 = S.val 1 ∧ ¬S.val 0 = -S.val 1hcube:S.val 0 ^ 3 + S.val 1 ^ 3 + S.val 2 ^ 3 + S.val 3 ^ 3 = 0⊢ False not_or S:(PureU1 4).SolshS:LineInPlaneCond S.toLinSolshn:¬S.val 0 = S.val 1 ∧ ¬S.val 0 = -S.val 1hcube:S.val 0 ^ 3 + S.val 1 ^ 3 + S.val 2 ^ 3 + S.val 3 ^ 3 = 0⊢ False S:(PureU1 4).SolshS:LineInPlaneCond S.toLinSolshn:¬S.val 0 = S.val 1 ∧ ¬S.val 0 = -S.val 1hcube:S.val 0 ^ 3 + S.val 1 ^ 3 + S.val 2 ^ 3 + S.val 3 ^ 3 = 0⊢ False] at hn S:(PureU1 4).SolshS:LineInPlaneCond S.toLinSolshn:¬S.val 0 = S.val 1 ∧ ¬S.val 0 = -S.val 1hcube:S.val 0 ^ 3 + S.val 1 ^ 3 + S.val 2 ^ 3 + S.val 3 ^ 3 = 0⊢ False
have l012 := hS 0 1 2 (ne_of_beq_false rfl) (ne_of_beq_false rfl) (ne_of_beq_false rfl) S:(PureU1 4).SolshS:LineInPlaneCond S.toLinSolshn:¬S.val 0 = S.val 1 ∧ ¬S.val 0 = -S.val 1hcube:S.val 0 ^ 3 + S.val 1 ^ 3 + S.val 2 ^ 3 + S.val 3 ^ 3 = 0l012:LineInPlaneProp (S.val 0, S.val 1, S.val 2)⊢ False
have l013 := hS 0 1 3 (ne_of_beq_false rfl) (ne_of_beq_false rfl) (ne_of_beq_false rfl) S:(PureU1 4).SolshS:LineInPlaneCond S.toLinSolshn:¬S.val 0 = S.val 1 ∧ ¬S.val 0 = -S.val 1hcube:S.val 0 ^ 3 + S.val 1 ^ 3 + S.val 2 ^ 3 + S.val 3 ^ 3 = 0l012:LineInPlaneProp (S.val 0, S.val 1, S.val 2)l013:LineInPlaneProp (S.val 0, S.val 1, S.val 3)⊢ False
simp only [LineInPlaneProp, hn.1, hn.2, false_or] at l012 l013 S:(PureU1 4).SolshS:LineInPlaneCond S.toLinSolshn:¬S.val 0 = S.val 1 ∧ ¬S.val 0 = -S.val 1hcube:S.val 0 ^ 3 + S.val 1 ^ 3 + S.val 2 ^ 3 + S.val 3 ^ 3 = 0l012:2 * S.val 2 + S.val 0 + S.val 1 = 0l013:2 * S.val 3 + S.val 0 + S.val 1 = 0⊢ False
-- `l012`, `l013` force `S.val 2 = S.val 3 = -(S.val 0 + S.val 1) / 2`; substituting into the
-- cube constraint yields `3 (S.val 0 - S.val 1)² (S.val 0 + S.val 1) = 0`, contradicting `hn`.
have diff_sq_mul_sum_eq_zero : (S.val (0 : Fin 4) - S.val (1 : Fin 4)) ^ 2 *
(S.val (0 : Fin 4) + S.val (1 : Fin 4)) = 0 := by S:(PureU1 4).SolshS:LineInPlaneCond S.toLinSols⊢ ConstAbsProp (S.val 0, S.val 1) S:(PureU1 4).SolshS:LineInPlaneCond S.toLinSolshn:¬S.val 0 = S.val 1 ∧ ¬S.val 0 = -S.val 1hcube:S.val 0 ^ 3 + S.val 1 ^ 3 + S.val 2 ^ 3 + S.val 3 ^ 3 = 0l012:2 * S.val 2 + S.val 0 + S.val 1 = 0l013:2 * S.val 3 + S.val 0 + S.val 1 = 0diff_sq_mul_sum_eq_zero:(S.val 0 - S.val 1) ^ 2 * (S.val 0 + S.val 1) = 0⊢ False
linear_combination 4 / 3 * hcube -
(2 * S.val (2 : Fin 4) ^ 2 - S.val (2 : Fin 4) * (S.val (0 : Fin 4) + S.val (1 : Fin 4)) +
(S.val (0 : Fin 4) + S.val (1 : Fin 4)) ^ 2 / 2) / 3 * l012 -
(2 * S.val (3 : Fin 4) ^ 2 - S.val (3 : Fin 4) * (S.val (0 : Fin 4) + S.val (1 : Fin 4)) +
(S.val (0 : Fin 4) + S.val (1 : Fin 4)) ^ 2 / 2) / 3 * l013 S:(PureU1 4).SolshS:LineInPlaneCond S.toLinSolshn:¬S.val 0 = S.val 1 ∧ ¬S.val 0 = -S.val 1hcube:S.val 0 ^ 3 + S.val 1 ^ 3 + S.val 2 ^ 3 + S.val 3 ^ 3 = 0l012:2 * S.val 2 + S.val 0 + S.val 1 = 0l013:2 * S.val 3 + S.val 0 + S.val 1 = 0diff_sq_mul_sum_eq_zero:(S.val 0 - S.val 1) ^ 2 * (S.val 0 + S.val 1) = 0⊢ False S:(PureU1 4).SolshS:LineInPlaneCond S.toLinSolshn:¬S.val 0 = S.val 1 ∧ ¬S.val 0 = -S.val 1hcube:S.val 0 ^ 3 + S.val 1 ^ 3 + S.val 2 ^ 3 + S.val 3 ^ 3 = 0l012:2 * S.val 2 + S.val 0 + S.val 1 = 0l013:2 * S.val 3 + S.val 0 + S.val 1 = 0diff_sq_mul_sum_eq_zero:(S.val 0 - S.val 1) ^ 2 * (S.val 0 + S.val 1) = 0⊢ False
rcases mul_eq_zero.mp diff_sq_mul_sum_eq_zero with h | h inl S:(PureU1 4).SolshS:LineInPlaneCond S.toLinSolshn:¬S.val 0 = S.val 1 ∧ ¬S.val 0 = -S.val 1hcube:S.val 0 ^ 3 + S.val 1 ^ 3 + S.val 2 ^ 3 + S.val 3 ^ 3 = 0l012:2 * S.val 2 + S.val 0 + S.val 1 = 0l013:2 * S.val 3 + S.val 0 + S.val 1 = 0diff_sq_mul_sum_eq_zero:(S.val 0 - S.val 1) ^ 2 * (S.val 0 + S.val 1) = 0h:(S.val 0 - S.val 1) ^ 2 = 0⊢ Falseinr S:(PureU1 4).SolshS:LineInPlaneCond S.toLinSolshn:¬S.val 0 = S.val 1 ∧ ¬S.val 0 = -S.val 1hcube:S.val 0 ^ 3 + S.val 1 ^ 3 + S.val 2 ^ 3 + S.val 3 ^ 3 = 0l012:2 * S.val 2 + S.val 0 + S.val 1 = 0l013:2 * S.val 3 + S.val 0 + S.val 1 = 0diff_sq_mul_sum_eq_zero:(S.val 0 - S.val 1) ^ 2 * (S.val 0 + S.val 1) = 0h:S.val 0 + S.val 1 = 0⊢ False
· inl S:(PureU1 4).SolshS:LineInPlaneCond S.toLinSolshn:¬S.val 0 = S.val 1 ∧ ¬S.val 0 = -S.val 1hcube:S.val 0 ^ 3 + S.val 1 ^ 3 + S.val 2 ^ 3 + S.val 3 ^ 3 = 0l012:2 * S.val 2 + S.val 0 + S.val 1 = 0l013:2 * S.val 3 + S.val 0 + S.val 1 = 0diff_sq_mul_sum_eq_zero:(S.val 0 - S.val 1) ^ 2 * (S.val 0 + S.val 1) = 0h:(S.val 0 - S.val 1) ^ 2 = 0⊢ False exact hn.1 (sub_eq_zero.mp (sq_eq_zero_iff.mp h)) All goals completed! 🐙
· inr S:(PureU1 4).SolshS:LineInPlaneCond S.toLinSolshn:¬S.val 0 = S.val 1 ∧ ¬S.val 0 = -S.val 1hcube:S.val 0 ^ 3 + S.val 1 ^ 3 + S.val 2 ^ 3 + S.val 3 ^ 3 = 0l012:2 * S.val 2 + S.val 0 + S.val 1 = 0l013:2 * S.val 3 + S.val 0 + S.val 1 = 0diff_sq_mul_sum_eq_zero:(S.val 0 - S.val 1) ^ 2 * (S.val 0 + S.val 1) = 0h:S.val 0 + S.val 1 = 0⊢ False exact hn.2 (by S:(PureU1 4).SolshS:LineInPlaneCond S.toLinSolshn:¬S.val 0 = S.val 1 ∧ ¬S.val 0 = -S.val 1hcube:S.val 0 ^ 3 + S.val 1 ^ 3 + S.val 2 ^ 3 + S.val 3 ^ 3 = 0l012:2 * S.val 2 + S.val 0 + S.val 1 = 0l013:2 * S.val 3 + S.val 0 + S.val 1 = 0diff_sq_mul_sum_eq_zero:(S.val 0 - S.val 1) ^ 2 * (S.val 0 + S.val 1) = 0h:S.val 0 + S.val 1 = 0⊢ S.val 0 = -S.val 1 linarith All goals completed! 🐙)lemma linesInPlane_eq_sq_four {S : (PureU1 4).Sols}
(hS : LineInPlaneCond S.1.1) : ∀ (i j : Fin 4) (_ : i ≠ j),
ConstAbsProp (S.val i, S.val j) := by S:(PureU1 4).SolshS:LineInPlaneCond S.toLinSols⊢ ∀ (i j : Fin 4), i ≠ j → ConstAbsProp (S.val i, S.val j)
refine Prop_two ConstAbsProp Fin.zero_ne_one ?_ S:(PureU1 4).SolshS:LineInPlaneCond S.toLinSols⊢ ∀ (f : (FamilyPermutations 4).group),
ConstAbsProp
((((FamilyPermutations 4).linSolRep f) S.toLinSols).val 0, (((FamilyPermutations 4).linSolRep f) S.toLinSols).val 1)
intro M S:(PureU1 4).SolshS:LineInPlaneCond S.toLinSolsM:(FamilyPermutations 4).group⊢ ConstAbsProp
((((FamilyPermutations 4).linSolRep M) S.toLinSols).val 0, (((FamilyPermutations 4).linSolRep M) S.toLinSols).val 1)
let S' := (FamilyPermutations 4).solAction.toFun _ _ S M S:(PureU1 4).SolshS:LineInPlaneCond S.toLinSolsM:(FamilyPermutations 4).groupS':(PureU1 4).Sols := (MulAction.toFun (FamilyPermutations 4).group (PureU1 4).Sols) S M⊢ ConstAbsProp
((((FamilyPermutations 4).linSolRep M) S.toLinSols).val 0, (((FamilyPermutations 4).linSolRep M) S.toLinSols).val 1)
exact linesInPlane_four S' (lineInPlaneCond_perm hS M) All goals completed! 🐙
lemma linesInPlane_constAbs_four (S : (PureU1 4).Sols)
(hS : LineInPlaneCond S.1.1) : ConstAbs S.val := by S:(PureU1 4).SolshS:LineInPlaneCond S.toLinSols⊢ ConstAbs S.val
intro i j S:(PureU1 4).SolshS:LineInPlaneCond S.toLinSolsi:Fin (PureU1 4).numberChargesj:Fin (PureU1 4).numberCharges⊢ S.val i ^ 2 = S.val j ^ 2
rcases eq_or_ne i j with hij | hij inl S:(PureU1 4).SolshS:LineInPlaneCond S.toLinSolsi:Fin (PureU1 4).numberChargesj:Fin (PureU1 4).numberChargeshij:i = j⊢ S.val i ^ 2 = S.val j ^ 2inr S:(PureU1 4).SolshS:LineInPlaneCond S.toLinSolsi:Fin (PureU1 4).numberChargesj:Fin (PureU1 4).numberChargeshij:i ≠ j⊢ S.val i ^ 2 = S.val j ^ 2
· inl S:(PureU1 4).SolshS:LineInPlaneCond S.toLinSolsi:Fin (PureU1 4).numberChargesj:Fin (PureU1 4).numberChargeshij:i = j⊢ S.val i ^ 2 = S.val j ^ 2 rw [hij inl S:(PureU1 4).SolshS:LineInPlaneCond S.toLinSolsi:Fin (PureU1 4).numberChargesj:Fin (PureU1 4).numberChargeshij:i = j⊢ S.val j ^ 2 = S.val j ^ 2 All goals completed! 🐙] All goals completed! 🐙
· inr S:(PureU1 4).SolshS:LineInPlaneCond S.toLinSolsi:Fin (PureU1 4).numberChargesj:Fin (PureU1 4).numberChargeshij:i ≠ j⊢ S.val i ^ 2 = S.val j ^ 2 exact linesInPlane_eq_sq_four hS i j hij All goals completed! 🐙theorem linesInPlane_constAbs_AF (S : (PureU1 (n.succ.succ.succ.succ)).Sols)
(hS : LineInPlaneCond S.1.1) : ConstAbs S.val := by n:ℕS:(PureU1 n.succ.succ.succ.succ).SolshS:LineInPlaneCond S.toLinSols⊢ ConstAbs S.val
induction n zero n:ℕS:(PureU1 (Nat.succ 0).succ.succ.succ).SolshS:LineInPlaneCond S.toLinSols⊢ ConstAbs S.valsucc n:ℕn✝:ℕa✝:∀ (S : (PureU1 n✝.succ.succ.succ.succ).Sols), LineInPlaneCond S.toLinSols → ConstAbs S.valS:(PureU1 (n✝ + 1).succ.succ.succ.succ).SolshS:LineInPlaneCond S.toLinSols⊢ ConstAbs S.val
· zero n:ℕS:(PureU1 (Nat.succ 0).succ.succ.succ).SolshS:LineInPlaneCond S.toLinSols⊢ ConstAbs S.val exact linesInPlane_constAbs_four S hS All goals completed! 🐙
· succ n:ℕn✝:ℕa✝:∀ (S : (PureU1 n✝.succ.succ.succ.succ).Sols), LineInPlaneCond S.toLinSols → ConstAbs S.valS:(PureU1 (n✝ + 1).succ.succ.succ.succ).SolshS:LineInPlaneCond S.toLinSols⊢ ConstAbs S.val exact linesInPlane_constAbs hS All goals completed! 🐙