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.BasisLinear
public import Physlib.QFT.QED.AnomalyCancellation.VectorLikeSplitting the linear solutions in the even case into two ACC-satisfying planes
i. Overview
We split the linear solutions of PureU1 (2 * n.succ) into two planes,
where every point in either plane satisfies both the linear and cubic anomaly cancellation
conditions.
ii. Key results
P' : The inclusion of the first plane into linear solutions
P_accCube : The statement that chares from the first plane satisfy the cubic ACC
P!' : The inclusion of the second plane.
P!_accCube : The statement that charges from the second plane satisfy the cubic ACC
span_basis : Every linear solution is the sum of a point from each plane.
iii. Table of contents
A. Splitting the charges up into groups
A.1. The even split: Spltting the charges up via n.succ + n.succ
A.2. The shifted even split: Spltting the charges up via 1 + (n + n + 1)
A.3. Lemmas relating the two splittings
B. The first plane
B.1. The basis vectors of the first plane as charges
B.2. Components of the basis vectors
B.3. The basis vectors satisfy the linear ACCs
B.4. The basis vectors satisfy the cubic ACC
B.5. The basis vectors as linear solutions
B.6. The inclusion of the first plane into charges
B.7. Components of the inclusion into charges
B.8. The inclusion into charges satisfies the linear and cubic ACCs
B.9. Kernel of the inclusion into charges
B.10. The inclusion of the plane into linear solutions
B.11. The basis vectors are linearly independent
B.12. Every vector-like even solution is in the span of the basis of the first plane
C. The vectors of the basis spanning the second plane, via the shifted even split
C.2. Components of the vectors
C.3. The vectors satisfy the linear ACCs
C.4. The vectors satisfy the cubic ACC
C.6. The vectors as linear solutions
C.7. The inclusion of the second plane into charges
C.8. Components of the inclusion into charges
C.9. The inclusion into charges satisfies the cubic ACC
C.10. Kernel of the inclusion into charges
C.11. The inclusion of the second plane into the span of the basis
C.12. The inclusion of the plane into linear solutions
C.13. The basis vectors are linearly independent
C.14. Properties of the basis vectors relating to the span
C.15. Permutations as additions of basis vectors
D. Mixed cubic ACCs involving points from both planes
E. The combined basis
E.1. As a map into linear solutions
E.2. Inclusion of the span of the basis into charges
E.3. Components of the inclusion into charges
E.4. Kernel of the inclusion into charges
E.5. The inclusion of the span of the basis into linear solutions
E.6. The combined basis vectors are linearly independent
E.7. Injectivity of the inclusion into linear solutions
E.8. Cardinality of the basis
E.9. The basis vectors as a basis
F. Every Lienar solution is the sum of a point from each plane
F.1. Relation under permutations
iv. References
https://arxiv.org/pdf/1912.04804.pdf
@[expose] public sectionA. Splitting the charges up into groups
We have 2 * n.succ charges, which we split up in the following ways:
| evenFst j (0 to n) | evenSnd j (n.succ to n + n.succ)|
| evenShiftZero (0) | evenShiftFst j (1 to n) |
evenShiftSnd j (n.succ to 2 * n) | evenShiftLast (2 * n.succ - 1) |
A.1. The even split: Spltting the charges up via n.succ + n.succ
The inclusion of Fin n.succ into Fin (n.succ + n.succ) via the first n.succ,
casted into Fin (2 * n.succ).
def evenFst (j : Fin n.succ) : Fin (2 * n.succ) :=
Fin.cast (split_equal n.succ) (Fin.castAdd n.succ j)
The inclusion of Fin n.succ into Fin (n.succ + n.succ) via the second n.succ,
casted into Fin (2 * n.succ).
def evenSnd (j : Fin n.succ) : Fin (2 * n.succ) :=
Fin.cast (split_equal n.succ) (Fin.natAdd n.succ j)neg n:ℕS:Fin (2 * n.succ) → ℚT:Fin (2 * n.succ) → ℚh1:∀ (i : Fin n.succ), S (evenFst i) = T (evenFst i)h2:∀ (i : Fin n.succ), S (evenSnd i) = T (evenSnd i)i:Fin (2 * n.succ)hi:¬↑i < n.succh3:evenSnd ⟨↑i - n.succ, ⋯⟩ = i⊢ S i = T i
exact h3 ▸ h2 _ All goals completed! 🐙
lemma sum_even (S : Fin (2 * n.succ) → ℚ) :
∑ i, S i = ∑ i : Fin n.succ, ((S ∘ evenFst) i + (S ∘ evenSnd) i) := by n:ℕS:Fin (2 * n.succ) → ℚ⊢ ∑ i, S i = ∑ i, ((S ∘ evenFst) i + (S ∘ evenSnd) i)
rw [← Equiv.sum_comp (Fin.castOrderIso (split_equal n.succ)).toEquiv S, n:ℕS:Fin (2 * n.succ) → ℚ⊢ ∑ i, S ((Fin.castOrderIso ⋯).toEquiv i) = ∑ i, ((S ∘ evenFst) i + (S ∘ evenSnd) i) n:ℕS:Fin (2 * n.succ) → ℚ⊢ ∑ i, S ((Fin.castOrderIso ⋯).toEquiv (Fin.castAdd n.succ i)) +
∑ i, S ((Fin.castOrderIso ⋯).toEquiv (Fin.natAdd n.succ i)) =
∑ x, (S ∘ evenFst) x + ∑ x, (S ∘ evenSnd) x Fin.sum_univ_add, n:ℕS:Fin (2 * n.succ) → ℚ⊢ ∑ i, S ((Fin.castOrderIso ⋯).toEquiv (Fin.castAdd n.succ i)) +
∑ i, S ((Fin.castOrderIso ⋯).toEquiv (Fin.natAdd n.succ i)) =
∑ i, ((S ∘ evenFst) i + (S ∘ evenSnd) i) n:ℕS:Fin (2 * n.succ) → ℚ⊢ ∑ i, S ((Fin.castOrderIso ⋯).toEquiv (Fin.castAdd n.succ i)) +
∑ i, S ((Fin.castOrderIso ⋯).toEquiv (Fin.natAdd n.succ i)) =
∑ x, (S ∘ evenFst) x + ∑ x, (S ∘ evenSnd) x
Finset.sum_add_distrib n:ℕS:Fin (2 * n.succ) → ℚ⊢ ∑ i, S ((Fin.castOrderIso ⋯).toEquiv (Fin.castAdd n.succ i)) +
∑ i, S ((Fin.castOrderIso ⋯).toEquiv (Fin.natAdd n.succ i)) =
∑ x, (S ∘ evenFst) x + ∑ x, (S ∘ evenSnd) x n:ℕS:Fin (2 * n.succ) → ℚ⊢ ∑ i, S ((Fin.castOrderIso ⋯).toEquiv (Fin.castAdd n.succ i)) +
∑ i, S ((Fin.castOrderIso ⋯).toEquiv (Fin.natAdd n.succ i)) =
∑ x, (S ∘ evenFst) x + ∑ x, (S ∘ evenSnd) x] n:ℕS:Fin (2 * n.succ) → ℚ⊢ ∑ i, S ((Fin.castOrderIso ⋯).toEquiv (Fin.castAdd n.succ i)) +
∑ i, S ((Fin.castOrderIso ⋯).toEquiv (Fin.natAdd n.succ i)) =
∑ x, (S ∘ evenFst) x + ∑ x, (S ∘ evenSnd) x
rfl All goals completed! 🐙
A.2. The shifted even split: Spltting the charges up via 1 + (n + n + 1)
lemma n_cond₂ (n : ℕ) : 1 + ((n + n) + 1) = 2 * n.succ := by n:ℕ⊢ 1 + (n + n + 1) = 2 * n.succ
linarith All goals completed! 🐙
The inclusion of Fin n into Fin (1 + (n + n + 1)) via the first n,
casted into Fin (2 * n.succ).
def evenShiftFst (j : Fin n) : Fin (2 * n.succ) := Fin.cast (n_cond₂ n)
(Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j)))
The inclusion of Fin n into Fin (1 + (n + n + 1)) via the second n,
casted into Fin (2 * n.succ).
def evenShiftSnd (j : Fin n) : Fin (2 * n.succ) := Fin.cast (n_cond₂ n)
(Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n j)))
The element of Fin (1 + (n + n + 1)) corresponding to the first 1,
casted into Fin (2 * n.succ).
def evenShiftZero : Fin (2 * n.succ) := (Fin.cast (n_cond₂ n) (Fin.castAdd ((n + n) + 1) 0))
The element of Fin (1 + (n + n + 1)) corresponding to the second 1,
casted into Fin (2 * n.succ).
def evenShiftLast : Fin (2 * n.succ) := (Fin.cast (n_cond₂ n) (Fin.natAdd 1 (Fin.natAdd (n + n) 0)))
lemma sum_evenShift (S : Fin (2 * n.succ) → ℚ) :
∑ i, S i = S evenShiftZero + S evenShiftLast +
∑ i : Fin n, ((S ∘ evenShiftFst) i + (S ∘ evenShiftSnd) i) := by n:ℕS:Fin (2 * n.succ) → ℚ⊢ ∑ i, S i = S evenShiftZero + S evenShiftLast + ∑ i, ((S ∘ evenShiftFst) i + (S ∘ evenShiftSnd) i)
have h1 : ∑ i, S i = ∑ i : Fin (1 + ((n + n) + 1)), S (Fin.cast (n_cond₂ n) i) := by
rw [Finset.sum_equiv (Fin.castOrderIso (n_cond₂ n)).symm.toEquiv n:ℕS:Fin (2 * n.succ) → ℚ⊢ ∑ i ∈ ?m.82, ?m.84 i = ∑ i, S (Fin.cast ⋯ i)hst n:ℕS:Fin (2 * n.succ) → ℚ⊢ ∀ (i : Fin (2 * n.succ)), i ∈ univ ↔ (Fin.castOrderIso ⋯).symm.toEquiv i ∈ ?m.82hfg n:ℕS:Fin (2 * n.succ) → ℚ⊢ ∀ i ∈ univ, S i = ?m.84 ((Fin.castOrderIso ⋯).symm.toEquiv i)n:ℕS:Fin (2 * n.succ) → ℚ⊢ Finset (Fin (1 + (n + n + 1)))n:ℕS:Fin (2 * n.succ) → ℚ⊢ Fin (1 + (n + n + 1)) → ℚ hst n:ℕS:Fin (2 * n.succ) → ℚ⊢ ∀ (i : Fin (2 * n.succ)), i ∈ univ ↔ (Fin.castOrderIso ⋯).symm.toEquiv i ∈ univhfg n:ℕS:Fin (2 * n.succ) → ℚ⊢ ∀ i ∈ univ, S i = S (Fin.cast ⋯ ((Fin.castOrderIso ⋯).symm.toEquiv i)) n:ℕS:Fin (2 * n.succ) → ℚh1:∑ i, S i = ∑ i, S (Fin.cast ⋯ i)⊢ ∑ i, S i = S evenShiftZero + S evenShiftLast + ∑ i, ((S ∘ evenShiftFst) i + (S ∘ evenShiftSnd) i)] hst n:ℕS:Fin (2 * n.succ) → ℚ⊢ ∀ (i : Fin (2 * n.succ)), i ∈ univ ↔ (Fin.castOrderIso ⋯).symm.toEquiv i ∈ univhfg n:ℕS:Fin (2 * n.succ) → ℚ⊢ ∀ i ∈ univ, S i = S (Fin.cast ⋯ ((Fin.castOrderIso ⋯).symm.toEquiv i)) n:ℕS:Fin (2 * n.succ) → ℚh1:∑ i, S i = ∑ i, S (Fin.cast ⋯ i)⊢ ∑ i, S i = S evenShiftZero + S evenShiftLast + ∑ i, ((S ∘ evenShiftFst) i + (S ∘ evenShiftSnd) i)
· hst n:ℕS:Fin (2 * n.succ) → ℚ⊢ ∀ (i : Fin (2 * n.succ)), i ∈ univ ↔ (Fin.castOrderIso ⋯).symm.toEquiv i ∈ univ n:ℕS:Fin (2 * n.succ) → ℚh1:∑ i, S i = ∑ i, S (Fin.cast ⋯ i)⊢ ∑ i, S i = S evenShiftZero + S evenShiftLast + ∑ i, ((S ∘ evenShiftFst) i + (S ∘ evenShiftSnd) i) intro i hst n:ℕS:Fin (2 * n.succ) → ℚi:Fin (2 * n.succ)⊢ i ∈ univ ↔ (Fin.castOrderIso ⋯).symm.toEquiv i ∈ univ n:ℕS:Fin (2 * n.succ) → ℚh1:∑ i, S i = ∑ i, S (Fin.cast ⋯ i)⊢ ∑ i, S i = S evenShiftZero + S evenShiftLast + ∑ i, ((S ∘ evenShiftFst) i + (S ∘ evenShiftSnd) i)
simp only [mem_univ, Fin.symm_castOrderIso, RelIso.coe_fn_toEquiv] All goals completed! 🐙 n:ℕS:Fin (2 * n.succ) → ℚh1:∑ i, S i = ∑ i, S (Fin.cast ⋯ i)⊢ ∑ i, S i = S evenShiftZero + S evenShiftLast + ∑ i, ((S ∘ evenShiftFst) i + (S ∘ evenShiftSnd) i)
· hfg n:ℕS:Fin (2 * n.succ) → ℚ⊢ ∀ i ∈ univ, S i = S (Fin.cast ⋯ ((Fin.castOrderIso ⋯).symm.toEquiv i)) n:ℕS:Fin (2 * n.succ) → ℚh1:∑ i, S i = ∑ i, S (Fin.cast ⋯ i)⊢ ∑ i, S i = S evenShiftZero + S evenShiftLast + ∑ i, ((S ∘ evenShiftFst) i + (S ∘ evenShiftSnd) i) exact fun _ _ => rfl n:ℕS:Fin (2 * n.succ) → ℚh1:∑ i, S i = ∑ i, S (Fin.cast ⋯ i)⊢ ∑ i, S i = S evenShiftZero + S evenShiftLast + ∑ i, ((S ∘ evenShiftFst) i + (S ∘ evenShiftSnd) i) n:ℕS:Fin (2 * n.succ) → ℚh1:∑ i, S i = ∑ i, S (Fin.cast ⋯ i)⊢ ∑ i, S i = S evenShiftZero + S evenShiftLast + ∑ i, ((S ∘ evenShiftFst) i + (S ∘ evenShiftSnd) i)
rw [h1, n:ℕS:Fin (2 * n.succ) → ℚh1:∑ i, S i = ∑ i, S (Fin.cast ⋯ i)⊢ ∑ i, S (Fin.cast ⋯ i) = S evenShiftZero + S evenShiftLast + ∑ i, ((S ∘ evenShiftFst) i + (S ∘ evenShiftSnd) i) n:ℕS:Fin (2 * n.succ) → ℚh1:∑ i, S i = ∑ i, S (Fin.cast ⋯ i)⊢ ∑ i, S (Fin.cast ⋯ (Fin.castAdd (n + n + 1) i)) +
(∑ i, S (Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n i)))) +
∑ i, S (Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n i)))) +
∑ i, S (Fin.cast ⋯ (Fin.natAdd 1 (Fin.natAdd (n + n) i)))) =
S evenShiftZero + S evenShiftLast + (∑ x, (S ∘ evenShiftFst) x + ∑ x, (S ∘ evenShiftSnd) x) Fin.sum_univ_add, n:ℕS:Fin (2 * n.succ) → ℚh1:∑ i, S i = ∑ i, S (Fin.cast ⋯ i)⊢ ∑ i, S (Fin.cast ⋯ (Fin.castAdd (n + n + 1) i)) + ∑ i, S (Fin.cast ⋯ (Fin.natAdd 1 i)) =
S evenShiftZero + S evenShiftLast + ∑ i, ((S ∘ evenShiftFst) i + (S ∘ evenShiftSnd) i) n:ℕS:Fin (2 * n.succ) → ℚh1:∑ i, S i = ∑ i, S (Fin.cast ⋯ i)⊢ ∑ i, S (Fin.cast ⋯ (Fin.castAdd (n + n + 1) i)) +
(∑ i, S (Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n i)))) +
∑ i, S (Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n i)))) +
∑ i, S (Fin.cast ⋯ (Fin.natAdd 1 (Fin.natAdd (n + n) i)))) =
S evenShiftZero + S evenShiftLast + (∑ x, (S ∘ evenShiftFst) x + ∑ x, (S ∘ evenShiftSnd) x) Fin.sum_univ_add, n:ℕS:Fin (2 * n.succ) → ℚh1:∑ i, S i = ∑ i, S (Fin.cast ⋯ i)⊢ ∑ i, S (Fin.cast ⋯ (Fin.castAdd (n + n + 1) i)) +
(∑ i, S (Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 i))) + ∑ i, S (Fin.cast ⋯ (Fin.natAdd 1 (Fin.natAdd (n + n) i)))) =
S evenShiftZero + S evenShiftLast + ∑ i, ((S ∘ evenShiftFst) i + (S ∘ evenShiftSnd) i) n:ℕS:Fin (2 * n.succ) → ℚh1:∑ i, S i = ∑ i, S (Fin.cast ⋯ i)⊢ ∑ i, S (Fin.cast ⋯ (Fin.castAdd (n + n + 1) i)) +
(∑ i, S (Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n i)))) +
∑ i, S (Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n i)))) +
∑ i, S (Fin.cast ⋯ (Fin.natAdd 1 (Fin.natAdd (n + n) i)))) =
S evenShiftZero + S evenShiftLast + (∑ x, (S ∘ evenShiftFst) x + ∑ x, (S ∘ evenShiftSnd) x) Fin.sum_univ_add, n:ℕS:Fin (2 * n.succ) → ℚh1:∑ i, S i = ∑ i, S (Fin.cast ⋯ i)⊢ ∑ i, S (Fin.cast ⋯ (Fin.castAdd (n + n + 1) i)) +
(∑ i, S (Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n i)))) +
∑ i, S (Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n i)))) +
∑ i, S (Fin.cast ⋯ (Fin.natAdd 1 (Fin.natAdd (n + n) i)))) =
S evenShiftZero + S evenShiftLast + ∑ i, ((S ∘ evenShiftFst) i + (S ∘ evenShiftSnd) i) n:ℕS:Fin (2 * n.succ) → ℚh1:∑ i, S i = ∑ i, S (Fin.cast ⋯ i)⊢ ∑ i, S (Fin.cast ⋯ (Fin.castAdd (n + n + 1) i)) +
(∑ i, S (Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n i)))) +
∑ i, S (Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n i)))) +
∑ i, S (Fin.cast ⋯ (Fin.natAdd 1 (Fin.natAdd (n + n) i)))) =
S evenShiftZero + S evenShiftLast + (∑ x, (S ∘ evenShiftFst) x + ∑ x, (S ∘ evenShiftSnd) x) Finset.sum_add_distrib n:ℕS:Fin (2 * n.succ) → ℚh1:∑ i, S i = ∑ i, S (Fin.cast ⋯ i)⊢ ∑ i, S (Fin.cast ⋯ (Fin.castAdd (n + n + 1) i)) +
(∑ i, S (Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n i)))) +
∑ i, S (Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n i)))) +
∑ i, S (Fin.cast ⋯ (Fin.natAdd 1 (Fin.natAdd (n + n) i)))) =
S evenShiftZero + S evenShiftLast + (∑ x, (S ∘ evenShiftFst) x + ∑ x, (S ∘ evenShiftSnd) x) n:ℕS:Fin (2 * n.succ) → ℚh1:∑ i, S i = ∑ i, S (Fin.cast ⋯ i)⊢ ∑ i, S (Fin.cast ⋯ (Fin.castAdd (n + n + 1) i)) +
(∑ i, S (Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n i)))) +
∑ i, S (Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n i)))) +
∑ i, S (Fin.cast ⋯ (Fin.natAdd 1 (Fin.natAdd (n + n) i)))) =
S evenShiftZero + S evenShiftLast + (∑ x, (S ∘ evenShiftFst) x + ∑ x, (S ∘ evenShiftSnd) x)] n:ℕS:Fin (2 * n.succ) → ℚh1:∑ i, S i = ∑ i, S (Fin.cast ⋯ i)⊢ ∑ i, S (Fin.cast ⋯ (Fin.castAdd (n + n + 1) i)) +
(∑ i, S (Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n i)))) +
∑ i, S (Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n i)))) +
∑ i, S (Fin.cast ⋯ (Fin.natAdd 1 (Fin.natAdd (n + n) i)))) =
S evenShiftZero + S evenShiftLast + (∑ x, (S ∘ evenShiftFst) x + ∑ x, (S ∘ evenShiftSnd) x)
simp only [univ_unique, Fin.default_eq_zero, Fin.isValue, sum_singleton, Function.comp_apply,
evenShiftZero, evenShiftLast, evenShiftFst, evenShiftSnd] n:ℕS:Fin (2 * n.succ) → ℚh1:∑ i, S i = ∑ i, S (Fin.cast ⋯ i)⊢ S (Fin.cast ⋯ (Fin.castAdd (n + n + 1) 0)) +
(∑ i, S (Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n i)))) +
∑ i, S (Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n i)))) +
S (Fin.cast ⋯ (Fin.natAdd 1 (Fin.natAdd (n + n) 0)))) =
S (Fin.cast ⋯ (Fin.castAdd (n + n + 1) 0)) + S (Fin.cast ⋯ (Fin.natAdd 1 (Fin.natAdd (n + n) 0))) +
(∑ i, S (Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n i)))) +
∑ i, S (Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n i)))))
abel All goals completed! 🐙A.3. Lemmas relating the two splittings
lemma evenShiftZero_eq_evenFst_zero : @evenShiftZero n = evenFst 0 := rfl
lemma evenShiftLast_eq_evenSnd_last: @evenShiftLast n = evenSnd (Fin.last n) := by n:ℕ⊢ evenShiftLast = evenSnd (Fin.last n)
rw [Fin.ext_iff n:ℕ⊢ ↑evenShiftLast = ↑(evenSnd (Fin.last n)) n:ℕ⊢ ↑evenShiftLast = ↑(evenSnd (Fin.last n))] n:ℕ⊢ ↑evenShiftLast = ↑(evenSnd (Fin.last n))
simp only [succ_eq_add_one, evenShiftLast, Fin.isValue, Fin.val_cast, Fin.val_natAdd,
Fin.val_eq_zero, add_zero, evenSnd, Fin.natAdd_last, Fin.val_last] n:ℕ⊢ 1 + (n + n) = n + 1 + n
omega All goals completed! 🐙
lemma evenShiftFst_eq_evenFst_succ (j : Fin n) : evenShiftFst j = evenFst j.succ := by n:ℕj:Fin n⊢ evenShiftFst j = evenFst j.succ
rw [Fin.ext_iff, n:ℕj:Fin n⊢ ↑(evenShiftFst j) = ↑(evenFst j.succ) n:ℕj:Fin n⊢ ↑(Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j)))) = ↑(Fin.cast ⋯ (Fin.castAdd n.succ j.succ)) evenFst, n:ℕj:Fin n⊢ ↑(evenShiftFst j) = ↑(Fin.cast ⋯ (Fin.castAdd n.succ j.succ)) n:ℕj:Fin n⊢ ↑(Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j)))) = ↑(Fin.cast ⋯ (Fin.castAdd n.succ j.succ)) evenShiftFst n:ℕj:Fin n⊢ ↑(Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j)))) = ↑(Fin.cast ⋯ (Fin.castAdd n.succ j.succ)) n:ℕj:Fin n⊢ ↑(Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j)))) = ↑(Fin.cast ⋯ (Fin.castAdd n.succ j.succ))] n:ℕj:Fin n⊢ ↑(Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j)))) = ↑(Fin.cast ⋯ (Fin.castAdd n.succ j.succ))
simp only [Fin.val_cast, Fin.val_natAdd, Fin.val_castAdd, Fin.val_succ] n:ℕj:Fin n⊢ 1 + ↑j = ↑j + 1
ring All goals completed! 🐙
lemma evenShiftSnd_eq_evenSnd_castSucc (j : Fin n) : evenShiftSnd j = evenSnd j.castSucc := by n:ℕj:Fin n⊢ evenShiftSnd j = evenSnd j.castSucc
rw [Fin.ext_iff, n:ℕj:Fin n⊢ ↑(evenShiftSnd j) = ↑(evenSnd j.castSucc) n:ℕj:Fin n⊢ ↑(Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n j)))) = ↑(Fin.cast ⋯ (Fin.natAdd n.succ j.castSucc)) evenSnd, n:ℕj:Fin n⊢ ↑(evenShiftSnd j) = ↑(Fin.cast ⋯ (Fin.natAdd n.succ j.castSucc)) n:ℕj:Fin n⊢ ↑(Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n j)))) = ↑(Fin.cast ⋯ (Fin.natAdd n.succ j.castSucc)) evenShiftSnd n:ℕj:Fin n⊢ ↑(Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n j)))) = ↑(Fin.cast ⋯ (Fin.natAdd n.succ j.castSucc)) n:ℕj:Fin n⊢ ↑(Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n j)))) = ↑(Fin.cast ⋯ (Fin.natAdd n.succ j.castSucc))] n:ℕj:Fin n⊢ ↑(Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n j)))) = ↑(Fin.cast ⋯ (Fin.natAdd n.succ j.castSucc))
simp only [Fin.val_cast, Fin.val_natAdd, Fin.val_castAdd, Fin.val_castSucc] n:ℕj:Fin n⊢ 1 + (n + ↑j) = n.succ + ↑j
omega All goals completed! 🐙B. The first plane
B.1. The basis vectors of the first plane as charges
The first part of the basis as charges.
def basisAsCharges (j : Fin n.succ) : (PureU1 (2 * n.succ)).Charges :=
fun i =>
if i = evenFst j then
1
else
if i = evenSnd j then
- 1
else
0B.2. Components of the basis vectors
lemma basis_on_evenFst_self (j : Fin n.succ) : basisAsCharges j (evenFst j) = 1 := by n:ℕj:Fin n.succ⊢ basisAsCharges j (evenFst j) = 1
simp [basisAsCharges] All goals completed! 🐙
set_option backward.isDefEq.respectTransparency false in
lemma basis_on_evenFst_other {k j : Fin n.succ} (h : k ≠ j) :
basisAsCharges k (evenFst j) = 0 := by n:ℕk:Fin n.succj:Fin n.succh:k ≠ j⊢ basisAsCharges k (evenFst j) = 0
simp only [basisAsCharges, succ_eq_add_one, evenFst, evenSnd] n:ℕk:Fin n.succj:Fin n.succh:k ≠ j⊢ (if Fin.cast ⋯ (Fin.castAdd (n + 1) j) = Fin.cast ⋯ (Fin.castAdd (n + 1) k) then 1
else if Fin.cast ⋯ (Fin.castAdd (n + 1) j) = Fin.cast ⋯ (Fin.natAdd (n + 1) k) then -1 else 0) =
0
split isTrue n:ℕk:Fin n.succj:Fin n.succh:k ≠ jh✝:Fin.cast ⋯ (Fin.castAdd (n + 1) j) = Fin.cast ⋯ (Fin.castAdd (n + 1) k)⊢ 1 = 0isFalse n:ℕk:Fin n.succj:Fin n.succh:k ≠ jh✝:¬Fin.cast ⋯ (Fin.castAdd (n + 1) j) = Fin.cast ⋯ (Fin.castAdd (n + 1) k)⊢ (if Fin.cast ⋯ (Fin.castAdd (n + 1) j) = Fin.cast ⋯ (Fin.natAdd (n + 1) k) then -1 else 0) = 0
· isTrue n:ℕk:Fin n.succj:Fin n.succh:k ≠ jh✝:Fin.cast ⋯ (Fin.castAdd (n + 1) j) = Fin.cast ⋯ (Fin.castAdd (n + 1) k)⊢ 1 = 0 rename_i h1 isTrue n:ℕk:Fin n.succj:Fin n.succh:k ≠ jh1:Fin.cast ⋯ (Fin.castAdd (n + 1) j) = Fin.cast ⋯ (Fin.castAdd (n + 1) k)⊢ 1 = 0
rw [Fin.ext_iff isTrue n:ℕk:Fin n.succj:Fin n.succh:k ≠ jh1:↑(Fin.cast ⋯ (Fin.castAdd (n + 1) j)) = ↑(Fin.cast ⋯ (Fin.castAdd (n + 1) k))⊢ 1 = 0 isTrue n:ℕk:Fin n.succj:Fin n.succh:k ≠ jh1:↑(Fin.cast ⋯ (Fin.castAdd (n + 1) j)) = ↑(Fin.cast ⋯ (Fin.castAdd (n + 1) k))⊢ 1 = 0] at h1 isTrue n:ℕk:Fin n.succj:Fin n.succh:k ≠ jh1:↑(Fin.cast ⋯ (Fin.castAdd (n + 1) j)) = ↑(Fin.cast ⋯ (Fin.castAdd (n + 1) k))⊢ 1 = 0
simp_all isTrue n:ℕk:Fin n.succj:Fin n.succh:¬k = jh1:↑j = ↑k⊢ False
rw [Fin.ext_iff isTrue n:ℕk:Fin n.succj:Fin n.succh:¬↑k = ↑jh1:↑j = ↑k⊢ False isTrue n:ℕk:Fin n.succj:Fin n.succh:¬↑k = ↑jh1:↑j = ↑k⊢ False] at hisTrue n:ℕk:Fin n.succj:Fin n.succh:¬↑k = ↑jh1:↑j = ↑k⊢ False
simp_all All goals completed! 🐙
· isFalse n:ℕk:Fin n.succj:Fin n.succh:k ≠ jh✝:¬Fin.cast ⋯ (Fin.castAdd (n + 1) j) = Fin.cast ⋯ (Fin.castAdd (n + 1) k)⊢ (if Fin.cast ⋯ (Fin.castAdd (n + 1) j) = Fin.cast ⋯ (Fin.natAdd (n + 1) k) then -1 else 0) = 0 split isFalse.isTrue n:ℕk:Fin n.succj:Fin n.succh:k ≠ jh✝¹:¬Fin.cast ⋯ (Fin.castAdd (n + 1) j) = Fin.cast ⋯ (Fin.castAdd (n + 1) k)h✝:Fin.cast ⋯ (Fin.castAdd (n + 1) j) = Fin.cast ⋯ (Fin.natAdd (n + 1) k)⊢ -1 = 0isFalse.isFalse n:ℕk:Fin n.succj:Fin n.succh:k ≠ jh✝¹:¬Fin.cast ⋯ (Fin.castAdd (n + 1) j) = Fin.cast ⋯ (Fin.castAdd (n + 1) k)h✝:¬Fin.cast ⋯ (Fin.castAdd (n + 1) j) = Fin.cast ⋯ (Fin.natAdd (n + 1) k)⊢ 0 = 0
· isFalse.isTrue n:ℕk:Fin n.succj:Fin n.succh:k ≠ jh✝¹:¬Fin.cast ⋯ (Fin.castAdd (n + 1) j) = Fin.cast ⋯ (Fin.castAdd (n + 1) k)h✝:Fin.cast ⋯ (Fin.castAdd (n + 1) j) = Fin.cast ⋯ (Fin.natAdd (n + 1) k)⊢ -1 = 0 rename_i h1 h2 isFalse.isTrue n:ℕk:Fin n.succj:Fin n.succh:k ≠ jh1:¬Fin.cast ⋯ (Fin.castAdd (n + 1) j) = Fin.cast ⋯ (Fin.castAdd (n + 1) k)h2:Fin.cast ⋯ (Fin.castAdd (n + 1) j) = Fin.cast ⋯ (Fin.natAdd (n + 1) k)⊢ -1 = 0
simp_all only [succ_eq_add_one, ne_eq, Fin.natAdd_eq_addNat, Fin.cast_inj, neg_eq_zero,
one_ne_zero] isFalse.isTrue n:ℕk:Fin n.succj:Fin n.succh:¬k = jh1:¬k.addNat (n + 1) = Fin.castAdd (n + 1) kh2:Fin.castAdd (n + 1) j = k.addNat (n + 1)⊢ False
rw [Fin.ext_iff isFalse.isTrue n:ℕk:Fin n.succj:Fin n.succh:¬k = jh1:¬k.addNat (n + 1) = Fin.castAdd (n + 1) kh2:↑(Fin.castAdd (n + 1) j) = ↑(k.addNat (n + 1))⊢ False isFalse.isTrue n:ℕk:Fin n.succj:Fin n.succh:¬k = jh1:¬k.addNat (n + 1) = Fin.castAdd (n + 1) kh2:↑(Fin.castAdd (n + 1) j) = ↑(k.addNat (n + 1))⊢ False] at h2isFalse.isTrue n:ℕk:Fin n.succj:Fin n.succh:¬k = jh1:¬k.addNat (n + 1) = Fin.castAdd (n + 1) kh2:↑(Fin.castAdd (n + 1) j) = ↑(k.addNat (n + 1))⊢ False
simp only [Fin.val_castAdd, Fin.val_addNat] at h2 isFalse.isTrue n:ℕk:Fin n.succj:Fin n.succh:¬k = jh1:¬k.addNat (n + 1) = Fin.castAdd (n + 1) kh2:↑j = ↑k + (n + 1)⊢ False
omega All goals completed! 🐙
· isFalse.isFalse n:ℕk:Fin n.succj:Fin n.succh:k ≠ jh✝¹:¬Fin.cast ⋯ (Fin.castAdd (n + 1) j) = Fin.cast ⋯ (Fin.castAdd (n + 1) k)h✝:¬Fin.cast ⋯ (Fin.castAdd (n + 1) j) = Fin.cast ⋯ (Fin.natAdd (n + 1) k)⊢ 0 = 0 rfl All goals completed! 🐙set_option backward.isDefEq.respectTransparency false in
lemma basis_on_other {k : Fin n.succ} {j : Fin (2 * n.succ)} (h1 : j ≠ evenFst k)
(h2 : j ≠ evenSnd k) : basisAsCharges k j = 0 := by n:ℕk:Fin n.succj:Fin (2 * n.succ)h1:j ≠ evenFst kh2:j ≠ evenSnd k⊢ basisAsCharges k j = 0
simp only [basisAsCharges, if_neg h1, if_neg h2] All goals completed! 🐙
set_option backward.isDefEq.respectTransparency false in
lemma basis_evenSnd_eq_neg_evenFst (j i : Fin n.succ) :
basisAsCharges j (evenSnd i) = - basisAsCharges j (evenFst i) := by n:ℕj:Fin n.succi:Fin n.succ⊢ basisAsCharges j (evenSnd i) = -basisAsCharges j (evenFst i)
simp only [basisAsCharges, succ_eq_add_one, evenSnd, evenFst] n:ℕj:Fin n.succi:Fin n.succ⊢ (if Fin.cast ⋯ (Fin.natAdd (n + 1) i) = Fin.cast ⋯ (Fin.castAdd (n + 1) j) then 1
else if Fin.cast ⋯ (Fin.natAdd (n + 1) i) = Fin.cast ⋯ (Fin.natAdd (n + 1) j) then -1 else 0) =
-if Fin.cast ⋯ (Fin.castAdd (n + 1) i) = Fin.cast ⋯ (Fin.castAdd (n + 1) j) then 1
else if Fin.cast ⋯ (Fin.castAdd (n + 1) i) = Fin.cast ⋯ (Fin.natAdd (n + 1) j) then -1 else 0
split isTrue n:ℕj:Fin n.succi:Fin n.succh✝:Fin.cast ⋯ (Fin.natAdd (n + 1) i) = Fin.cast ⋯ (Fin.castAdd (n + 1) j)⊢ 1 =
-if Fin.cast ⋯ (Fin.castAdd (n + 1) i) = Fin.cast ⋯ (Fin.castAdd (n + 1) j) then 1
else if Fin.cast ⋯ (Fin.castAdd (n + 1) i) = Fin.cast ⋯ (Fin.natAdd (n + 1) j) then -1 else 0isFalse n:ℕj:Fin n.succi:Fin n.succh✝:¬Fin.cast ⋯ (Fin.natAdd (n + 1) i) = Fin.cast ⋯ (Fin.castAdd (n + 1) j)⊢ (if Fin.cast ⋯ (Fin.natAdd (n + 1) i) = Fin.cast ⋯ (Fin.natAdd (n + 1) j) then -1 else 0) =
-if Fin.cast ⋯ (Fin.castAdd (n + 1) i) = Fin.cast ⋯ (Fin.castAdd (n + 1) j) then 1
else if Fin.cast ⋯ (Fin.castAdd (n + 1) i) = Fin.cast ⋯ (Fin.natAdd (n + 1) j) then -1 else 0 <;> isTrue n:ℕj:Fin n.succi:Fin n.succh✝:Fin.cast ⋯ (Fin.natAdd (n + 1) i) = Fin.cast ⋯ (Fin.castAdd (n + 1) j)⊢ 1 =
-if Fin.cast ⋯ (Fin.castAdd (n + 1) i) = Fin.cast ⋯ (Fin.castAdd (n + 1) j) then 1
else if Fin.cast ⋯ (Fin.castAdd (n + 1) i) = Fin.cast ⋯ (Fin.natAdd (n + 1) j) then -1 else 0isFalse n:ℕj:Fin n.succi:Fin n.succh✝:¬Fin.cast ⋯ (Fin.natAdd (n + 1) i) = Fin.cast ⋯ (Fin.castAdd (n + 1) j)⊢ (if Fin.cast ⋯ (Fin.natAdd (n + 1) i) = Fin.cast ⋯ (Fin.natAdd (n + 1) j) then -1 else 0) =
-if Fin.cast ⋯ (Fin.castAdd (n + 1) i) = Fin.cast ⋯ (Fin.castAdd (n + 1) j) then 1
else if Fin.cast ⋯ (Fin.castAdd (n + 1) i) = Fin.cast ⋯ (Fin.natAdd (n + 1) j) then -1 else 0 split isFalse.isTrue n:ℕj:Fin n.succi:Fin n.succh✝¹:¬Fin.cast ⋯ (Fin.natAdd (n + 1) i) = Fin.cast ⋯ (Fin.castAdd (n + 1) j)h✝:Fin.cast ⋯ (Fin.natAdd (n + 1) i) = Fin.cast ⋯ (Fin.natAdd (n + 1) j)⊢ -1 =
-if Fin.cast ⋯ (Fin.castAdd (n + 1) i) = Fin.cast ⋯ (Fin.castAdd (n + 1) j) then 1
else if Fin.cast ⋯ (Fin.castAdd (n + 1) i) = Fin.cast ⋯ (Fin.natAdd (n + 1) j) then -1 else 0isFalse.isFalse n:ℕj:Fin n.succi:Fin n.succh✝¹:¬Fin.cast ⋯ (Fin.natAdd (n + 1) i) = Fin.cast ⋯ (Fin.castAdd (n + 1) j)h✝:¬Fin.cast ⋯ (Fin.natAdd (n + 1) i) = Fin.cast ⋯ (Fin.natAdd (n + 1) j)⊢ 0 =
-if Fin.cast ⋯ (Fin.castAdd (n + 1) i) = Fin.cast ⋯ (Fin.castAdd (n + 1) j) then 1
else if Fin.cast ⋯ (Fin.castAdd (n + 1) i) = Fin.cast ⋯ (Fin.natAdd (n + 1) j) then -1 else 0
any_goals split isFalse.isFalse.isTrue n:ℕj:Fin n.succi:Fin n.succh✝²:¬Fin.cast ⋯ (Fin.natAdd (n + 1) i) = Fin.cast ⋯ (Fin.castAdd (n + 1) j)h✝¹:¬Fin.cast ⋯ (Fin.natAdd (n + 1) i) = Fin.cast ⋯ (Fin.natAdd (n + 1) j)h✝:Fin.cast ⋯ (Fin.castAdd (n + 1) i) = Fin.cast ⋯ (Fin.castAdd (n + 1) j)⊢ 0 = -1isFalse.isFalse.isFalse n:ℕj:Fin n.succi:Fin n.succh✝²:¬Fin.cast ⋯ (Fin.natAdd (n + 1) i) = Fin.cast ⋯ (Fin.castAdd (n + 1) j)h✝¹:¬Fin.cast ⋯ (Fin.natAdd (n + 1) i) = Fin.cast ⋯ (Fin.natAdd (n + 1) j)h✝:¬Fin.cast ⋯ (Fin.castAdd (n + 1) i) = Fin.cast ⋯ (Fin.castAdd (n + 1) j)⊢ 0 = -if Fin.cast ⋯ (Fin.castAdd (n + 1) i) = Fin.cast ⋯ (Fin.natAdd (n + 1) j) then -1 else 0
any_goals rfl isFalse.isFalse.isFalse n:ℕj:Fin n.succi:Fin n.succh✝²:¬Fin.cast ⋯ (Fin.natAdd (n + 1) i) = Fin.cast ⋯ (Fin.castAdd (n + 1) j)h✝¹:¬Fin.cast ⋯ (Fin.natAdd (n + 1) i) = Fin.cast ⋯ (Fin.natAdd (n + 1) j)h✝:¬Fin.cast ⋯ (Fin.castAdd (n + 1) i) = Fin.cast ⋯ (Fin.castAdd (n + 1) j)⊢ 0 = -if Fin.cast ⋯ (Fin.castAdd (n + 1) i) = Fin.cast ⋯ (Fin.natAdd (n + 1) j) then -1 else 0
any_goals split isFalse.isFalse.isFalse.isTrue n:ℕj:Fin n.succi:Fin n.succh✝³:¬Fin.cast ⋯ (Fin.natAdd (n + 1) i) = Fin.cast ⋯ (Fin.castAdd (n + 1) j)h✝²:¬Fin.cast ⋯ (Fin.natAdd (n + 1) i) = Fin.cast ⋯ (Fin.natAdd (n + 1) j)h✝¹:¬Fin.cast ⋯ (Fin.castAdd (n + 1) i) = Fin.cast ⋯ (Fin.castAdd (n + 1) j)h✝:Fin.cast ⋯ (Fin.castAdd (n + 1) i) = Fin.cast ⋯ (Fin.natAdd (n + 1) j)⊢ 0 = - -1isFalse.isFalse.isFalse.isFalse n:ℕj:Fin n.succi:Fin n.succh✝³:¬Fin.cast ⋯ (Fin.natAdd (n + 1) i) = Fin.cast ⋯ (Fin.castAdd (n + 1) j)h✝²:¬Fin.cast ⋯ (Fin.natAdd (n + 1) i) = Fin.cast ⋯ (Fin.natAdd (n + 1) j)h✝¹:¬Fin.cast ⋯ (Fin.castAdd (n + 1) i) = Fin.cast ⋯ (Fin.castAdd (n + 1) j)h✝:¬Fin.cast ⋯ (Fin.castAdd (n + 1) i) = Fin.cast ⋯ (Fin.natAdd (n + 1) j)⊢ 0 = -0
any_goals rfl All goals completed! 🐙
all_goals
rename_i h1 h2 isFalse.isFalse.isFalse.isTrue n:ℕj:Fin n.succi:Fin n.succh✝¹:¬Fin.cast ⋯ (Fin.natAdd (n + 1) i) = Fin.cast ⋯ (Fin.castAdd (n + 1) j)h✝:¬Fin.cast ⋯ (Fin.natAdd (n + 1) i) = Fin.cast ⋯ (Fin.natAdd (n + 1) j)h1:¬Fin.cast ⋯ (Fin.castAdd (n + 1) i) = Fin.cast ⋯ (Fin.castAdd (n + 1) j)h2:Fin.cast ⋯ (Fin.castAdd (n + 1) i) = Fin.cast ⋯ (Fin.natAdd (n + 1) j)⊢ 0 = - -1
rw [Fin.ext_iff isTrue.isTrue n:ℕj:Fin n.succi:Fin n.succh1:↑(Fin.cast ⋯ (Fin.natAdd (n + 1) i)) = ↑(Fin.cast ⋯ (Fin.castAdd (n + 1) j))h2:↑(Fin.cast ⋯ (Fin.castAdd (n + 1) i)) = ↑(Fin.cast ⋯ (Fin.castAdd (n + 1) j))⊢ 1 = -1 isFalse.isFalse.isFalse.isTrue n:ℕj:Fin n.succi:Fin n.succh✝¹:¬Fin.cast ⋯ (Fin.natAdd (n + 1) i) = Fin.cast ⋯ (Fin.castAdd (n + 1) j)h✝:¬Fin.cast ⋯ (Fin.natAdd (n + 1) i) = Fin.cast ⋯ (Fin.natAdd (n + 1) j)h1:¬↑(Fin.cast ⋯ (Fin.castAdd (n + 1) i)) = ↑(Fin.cast ⋯ (Fin.castAdd (n + 1) j))h2:↑(Fin.cast ⋯ (Fin.castAdd (n + 1) i)) = ↑(Fin.cast ⋯ (Fin.natAdd (n + 1) j))⊢ 0 = - -1] isFalse.isFalse.isTrue n:ℕj:Fin n.succi:Fin n.succh✝:¬Fin.cast ⋯ (Fin.natAdd (n + 1) i) = Fin.cast ⋯ (Fin.castAdd (n + 1) j)h1:¬↑(Fin.cast ⋯ (Fin.natAdd (n + 1) i)) = ↑(Fin.cast ⋯ (Fin.natAdd (n + 1) j))h2:↑(Fin.cast ⋯ (Fin.castAdd (n + 1) i)) = ↑(Fin.cast ⋯ (Fin.castAdd (n + 1) j))⊢ 0 = -1 isFalse.isFalse.isFalse.isTrue n:ℕj:Fin n.succi:Fin n.succh✝¹:¬Fin.cast ⋯ (Fin.natAdd (n + 1) i) = Fin.cast ⋯ (Fin.castAdd (n + 1) j)h✝:¬Fin.cast ⋯ (Fin.natAdd (n + 1) i) = Fin.cast ⋯ (Fin.natAdd (n + 1) j)h1:¬↑(Fin.cast ⋯ (Fin.castAdd (n + 1) i)) = ↑(Fin.cast ⋯ (Fin.castAdd (n + 1) j))h2:↑(Fin.cast ⋯ (Fin.castAdd (n + 1) i)) = ↑(Fin.cast ⋯ (Fin.natAdd (n + 1) j))⊢ 0 = - -1 at h1 h2isFalse.isFalse.isFalse.isTrue n:ℕj:Fin n.succi:Fin n.succh✝¹:¬Fin.cast ⋯ (Fin.natAdd (n + 1) i) = Fin.cast ⋯ (Fin.castAdd (n + 1) j)h✝:¬Fin.cast ⋯ (Fin.natAdd (n + 1) i) = Fin.cast ⋯ (Fin.natAdd (n + 1) j)h1:¬↑(Fin.cast ⋯ (Fin.castAdd (n + 1) i)) = ↑(Fin.cast ⋯ (Fin.castAdd (n + 1) j))h2:↑(Fin.cast ⋯ (Fin.castAdd (n + 1) i)) = ↑(Fin.cast ⋯ (Fin.natAdd (n + 1) j))⊢ 0 = - -1
simp_all isFalse.isFalse.isFalse.isTrue n:ℕj:Fin n.succi:Fin n.succh✝¹:¬i.addNat (n + 1) = Fin.castAdd (n + 1) jh✝:¬i = jh2:↑i = ↑j + (n + 1)⊢ False
all_goals
rename_i h3 isFalse.isFalse.isFalse.isTrue n:ℕj:Fin n.succi:Fin n.succh✝:¬i.addNat (n + 1) = Fin.castAdd (n + 1) jh3:¬i = jh2:↑i = ↑j + (n + 1)⊢ False
rw [Fin.ext_iff isTrue.isFalse.isFalse n:ℕj:Fin n.succi:Fin n.succh3:↑(i.addNat (n + 1)) = ↑(Fin.castAdd (n + 1) j)h1:¬↑i = ↑jh2:¬↑i = ↑j + (n + 1)⊢ False isFalse.isFalse.isFalse.isTrue n:ℕj:Fin n.succi:Fin n.succh✝:¬i.addNat (n + 1) = Fin.castAdd (n + 1) jh3:¬↑i = ↑jh2:↑i = ↑j + (n + 1)⊢ False] isTrue.isFalse.isFalse n:ℕj:Fin n.succi:Fin n.succh3:↑(i.addNat (n + 1)) = ↑(Fin.castAdd (n + 1) j)h1:¬↑i = ↑jh2:¬↑i = ↑j + (n + 1)⊢ FalseisFalse.isFalse.isFalse.isTrue n:ℕj:Fin n.succi:Fin n.succh✝:¬i.addNat (n + 1) = Fin.castAdd (n + 1) jh3:¬↑i = ↑jh2:↑i = ↑j + (n + 1)⊢ False at h3isFalse.isFalse.isFalse.isTrue n:ℕj:Fin n.succi:Fin n.succh✝:¬i.addNat (n + 1) = Fin.castAdd (n + 1) jh3:¬↑i = ↑jh2:↑i = ↑j + (n + 1)⊢ False
simp_all isFalse.isFalse.isFalse.isTrue n:ℕj:Fin n.succi:Fin n.succh✝:¬i.addNat (n + 1) = Fin.castAdd (n + 1) jh2:↑i = ↑j + (n + 1)⊢ False
all_goals omega All goals completed! 🐙
lemma basis_on_evenSnd_self (j : Fin n.succ) : basisAsCharges j (evenSnd j) = - 1 := by n:ℕj:Fin n.succ⊢ basisAsCharges j (evenSnd j) = -1
rw [basis_evenSnd_eq_neg_evenFst, n:ℕj:Fin n.succ⊢ -basisAsCharges j (evenFst j) = -1 All goals completed! 🐙 basis_on_evenFst_self n:ℕj:Fin n.succ⊢ -1 = -1 All goals completed! 🐙] All goals completed! 🐙
lemma basis_on_evenSnd_other {k j : Fin n.succ} (h : k ≠ j) : basisAsCharges k (evenSnd j) = 0 := by n:ℕk:Fin n.succj:Fin n.succh:k ≠ j⊢ basisAsCharges k (evenSnd j) = 0
rw [basis_evenSnd_eq_neg_evenFst, n:ℕk:Fin n.succj:Fin n.succh:k ≠ j⊢ -basisAsCharges k (evenFst j) = 0 n:ℕk:Fin n.succj:Fin n.succh:k ≠ j⊢ -0 = 0 basis_on_evenFst_other h n:ℕk:Fin n.succj:Fin n.succh:k ≠ j⊢ -0 = 0 n:ℕk:Fin n.succj:Fin n.succh:k ≠ j⊢ -0 = 0] n:ℕk:Fin n.succj:Fin n.succh:k ≠ j⊢ -0 = 0
rfl All goals completed! 🐙B.3. The basis vectors satisfy the linear ACCs
lemma basis_linearACC (j : Fin n.succ) : (accGrav (2 * n.succ)) (basisAsCharges j) = 0 := by n:ℕj:Fin n.succ⊢ (accGrav (2 * n.succ)) (basisAsCharges j) = 0
simp [accGrav, sum_even, basis_evenSnd_eq_neg_evenFst] All goals completed! 🐙B.4. The basis vectors satisfy the cubic ACC
lemma basis_accCube (j : Fin n.succ) :
accCube (2 * n.succ) (basisAsCharges j) = 0 := by n:ℕj:Fin n.succ⊢ (accCube (2 * n.succ)) (basisAsCharges j) = 0
rw [accCube_explicit, n:ℕj:Fin n.succ⊢ ∑ i, basisAsCharges j i ^ 3 = 0 n:ℕj:Fin n.succ⊢ ∑ i, (((fun i => basisAsCharges j i ^ 3) ∘ evenFst) i + ((fun i => basisAsCharges j i ^ 3) ∘ evenSnd) i) = 0 sum_even n:ℕj:Fin n.succ⊢ ∑ i, (((fun i => basisAsCharges j i ^ 3) ∘ evenFst) i + ((fun i => basisAsCharges j i ^ 3) ∘ evenSnd) i) = 0 n:ℕj:Fin n.succ⊢ ∑ i, (((fun i => basisAsCharges j i ^ 3) ∘ evenFst) i + ((fun i => basisAsCharges j i ^ 3) ∘ evenSnd) i) = 0] n:ℕj:Fin n.succ⊢ ∑ i, (((fun i => basisAsCharges j i ^ 3) ∘ evenFst) i + ((fun i => basisAsCharges j i ^ 3) ∘ evenSnd) i) = 0
refine Finset.sum_eq_zero fun i _ => ?_ n:ℕj:Fin n.succi:Fin n.succx✝:i ∈ univ⊢ ((fun i => basisAsCharges j i ^ 3) ∘ evenFst) i + ((fun i => basisAsCharges j i ^ 3) ∘ evenSnd) i = 0
simp only [succ_eq_add_one, Function.comp_apply, basis_evenSnd_eq_neg_evenFst] n:ℕj:Fin n.succi:Fin n.succx✝:i ∈ univ⊢ basisAsCharges j (evenFst i) ^ 3 + (-basisAsCharges j (evenFst i)) ^ 3 = 0
ring All goals completed! 🐙B.5. The basis vectors as linear solutions
The first part of the basis as LinSols.
@[simps!]
def basis (j : Fin n.succ) : (PureU1 (2 * n.succ)).LinSols :=
⟨basisAsCharges j, by n:ℕj:Fin n.succ⊢ ∀ (i : Fin (PureU1 (2 * n.succ)).numberLinear), ((PureU1 (2 * n.succ)).linearACCs i) (basisAsCharges j) = 0
intro i n:ℕj:Fin n.succi:Fin (PureU1 (2 * n.succ)).numberLinear⊢ ((PureU1 (2 * n.succ)).linearACCs i) (basisAsCharges j) = 0
match i with
| ⟨0, _⟩ => n:ℕj:Fin n.succi:Fin (PureU1 (2 * n.succ)).numberLinearisLt✝:0 < (PureU1 (2 * n.succ)).numberLinear⊢ ((PureU1 (2 * n.succ)).linearACCs ⟨0, isLt✝⟩) (basisAsCharges j) = 0 exact basis_linearACC j All goals completed! 🐙⟩B.6. The inclusion of the first plane into charges
A point in the span of the first part of the basis as a charge.
def P (f : Fin n.succ → ℚ) : (PureU1 (2 * n.succ)).Charges := ∑ i, f i • basisAsCharges iB.7. Components of the inclusion into charges
lemma P_evenFst (f : Fin n.succ → ℚ) (j : Fin n.succ) : P f (evenFst j) = f j := by n:ℕf:Fin n.succ → ℚj:Fin n.succ⊢ P f (evenFst j) = f j
rw [P, n:ℕf:Fin n.succ → ℚj:Fin n.succ⊢ (∑ i, f i • basisAsCharges i) (evenFst j) = f j n:ℕf:Fin n.succ → ℚj:Fin n.succ⊢ ∑ i, (f i • basisAsCharges i) (evenFst j) = f j sum_of_charges n:ℕf:Fin n.succ → ℚj:Fin n.succ⊢ ∑ i, (f i • basisAsCharges i) (evenFst j) = f j n:ℕf:Fin n.succ → ℚj:Fin n.succ⊢ ∑ i, (f i • basisAsCharges i) (evenFst j) = f j] n:ℕf:Fin n.succ → ℚj:Fin n.succ⊢ ∑ i, (f i • basisAsCharges i) (evenFst j) = f j
simp only [succ_eq_add_one, HSMul.hSMul, SMul.smul] n:ℕf:Fin n.succ → ℚj:Fin n.succ⊢ ∑ x, f x * basisAsCharges x (evenFst j) = f j
rw [Fintype.sum_eq_single j n:ℕf:Fin n.succ → ℚj:Fin n.succ⊢ f j * basisAsCharges j (evenFst j) = f jn:ℕf:Fin n.succ → ℚj:Fin n.succ⊢ ∀ (x : Fin n.succ), x ≠ j → f x * basisAsCharges x (evenFst j) = 0 n:ℕf:Fin n.succ → ℚj:Fin n.succ⊢ f j * basisAsCharges j (evenFst j) = f jn:ℕf:Fin n.succ → ℚj:Fin n.succ⊢ ∀ (x : Fin n.succ), x ≠ j → f x * basisAsCharges x (evenFst j) = 0] n:ℕf:Fin n.succ → ℚj:Fin n.succ⊢ f j * basisAsCharges j (evenFst j) = f jn:ℕf:Fin n.succ → ℚj:Fin n.succ⊢ ∀ (x : Fin n.succ), x ≠ j → f x * basisAsCharges x (evenFst j) = 0
· n:ℕf:Fin n.succ → ℚj:Fin n.succ⊢ f j * basisAsCharges j (evenFst j) = f j simp [basis_on_evenFst_self] All goals completed! 🐙
· n:ℕf:Fin n.succ → ℚj:Fin n.succ⊢ ∀ (x : Fin n.succ), x ≠ j → f x * basisAsCharges x (evenFst j) = 0 exact fun k hkj => mul_eq_zero_of_right (f k) (basis_on_evenFst_other hkj) All goals completed! 🐙
lemma P_evenSnd (f : Fin n.succ → ℚ) (j : Fin n.succ) : P f (evenSnd j) = - f j := by n:ℕf:Fin n.succ → ℚj:Fin n.succ⊢ P f (evenSnd j) = -f j
rw [P, n:ℕf:Fin n.succ → ℚj:Fin n.succ⊢ (∑ i, f i • basisAsCharges i) (evenSnd j) = -f j n:ℕf:Fin n.succ → ℚj:Fin n.succ⊢ ∑ i, (f i • basisAsCharges i) (evenSnd j) = -f j sum_of_charges n:ℕf:Fin n.succ → ℚj:Fin n.succ⊢ ∑ i, (f i • basisAsCharges i) (evenSnd j) = -f j n:ℕf:Fin n.succ → ℚj:Fin n.succ⊢ ∑ i, (f i • basisAsCharges i) (evenSnd j) = -f j] n:ℕf:Fin n.succ → ℚj:Fin n.succ⊢ ∑ i, (f i • basisAsCharges i) (evenSnd j) = -f j
simp only [succ_eq_add_one, HSMul.hSMul, SMul.smul] n:ℕf:Fin n.succ → ℚj:Fin n.succ⊢ ∑ x, f x * basisAsCharges x (evenSnd j) = -f j
rw [Fintype.sum_eq_single j n:ℕf:Fin n.succ → ℚj:Fin n.succ⊢ f j * basisAsCharges j (evenSnd j) = -f jn:ℕf:Fin n.succ → ℚj:Fin n.succ⊢ ∀ (x : Fin n.succ), x ≠ j → f x * basisAsCharges x (evenSnd j) = 0 n:ℕf:Fin n.succ → ℚj:Fin n.succ⊢ f j * basisAsCharges j (evenSnd j) = -f jn:ℕf:Fin n.succ → ℚj:Fin n.succ⊢ ∀ (x : Fin n.succ), x ≠ j → f x * basisAsCharges x (evenSnd j) = 0] n:ℕf:Fin n.succ → ℚj:Fin n.succ⊢ f j * basisAsCharges j (evenSnd j) = -f jn:ℕf:Fin n.succ → ℚj:Fin n.succ⊢ ∀ (x : Fin n.succ), x ≠ j → f x * basisAsCharges x (evenSnd j) = 0
· n:ℕf:Fin n.succ → ℚj:Fin n.succ⊢ f j * basisAsCharges j (evenSnd j) = -f j simp [basis_on_evenSnd_self] All goals completed! 🐙
· n:ℕf:Fin n.succ → ℚj:Fin n.succ⊢ ∀ (x : Fin n.succ), x ≠ j → f x * basisAsCharges x (evenSnd j) = 0 exact fun k hkj => mul_eq_zero_of_right (f k) (basis_on_evenSnd_other hkj) All goals completed! 🐙lemma P_evenSnd_evenFst (f : Fin n.succ → ℚ) : P f ∘ evenSnd = - P f ∘ evenFst := by n:ℕf:Fin n.succ → ℚ⊢ P f ∘ evenSnd = -P f ∘ evenFst
funext j n:ℕf:Fin n.succ → ℚj:Fin n.succ⊢ (P f ∘ evenSnd) j = (-P f ∘ evenFst) j
simp [P_evenFst, P_evenSnd] All goals completed! 🐙B.8. The inclusion into charges satisfies the linear and cubic ACCs
lemma P_linearACC (f : Fin n.succ → ℚ) : (accGrav (2 * n.succ)) (P f) = 0 := by n:ℕf:Fin n.succ → ℚ⊢ (accGrav (2 * n.succ)) (P f) = 0
simp [accGrav, sum_even, P_evenSnd, P_evenFst] All goals completed! 🐙
lemma P_accCube (f : Fin n.succ → ℚ) : accCube (2 * n.succ) (P f) = 0 := by n:ℕf:Fin n.succ → ℚ⊢ (accCube (2 * n.succ)) (P f) = 0
rw [accCube_explicit, n:ℕf:Fin n.succ → ℚ⊢ ∑ i, P f i ^ 3 = 0 n:ℕf:Fin n.succ → ℚ⊢ ∑ i, (((fun i => P f i ^ 3) ∘ evenFst) i + ((fun i => P f i ^ 3) ∘ evenSnd) i) = 0 sum_even n:ℕf:Fin n.succ → ℚ⊢ ∑ i, (((fun i => P f i ^ 3) ∘ evenFst) i + ((fun i => P f i ^ 3) ∘ evenSnd) i) = 0 n:ℕf:Fin n.succ → ℚ⊢ ∑ i, (((fun i => P f i ^ 3) ∘ evenFst) i + ((fun i => P f i ^ 3) ∘ evenSnd) i) = 0] n:ℕf:Fin n.succ → ℚ⊢ ∑ i, (((fun i => P f i ^ 3) ∘ evenFst) i + ((fun i => P f i ^ 3) ∘ evenSnd) i) = 0
refine Finset.sum_eq_zero fun i _ => ?_ n:ℕf:Fin n.succ → ℚi:Fin n.succx✝:i ∈ univ⊢ ((fun i => P f i ^ 3) ∘ evenFst) i + ((fun i => P f i ^ 3) ∘ evenSnd) i = 0
simp only [succ_eq_add_one, Function.comp_apply, P_evenFst, P_evenSnd] n:ℕf:Fin n.succ → ℚi:Fin n.succx✝:i ∈ univ⊢ f i ^ 3 + (-f i) ^ 3 = 0
ring All goals completed! 🐙B.9. Kernel of the inclusion into charges
lemma P_zero (f : Fin n.succ → ℚ) (h : P f = 0) : ∀ i, f i = 0 := by n:ℕf:Fin n.succ → ℚh:P f = 0⊢ ∀ (i : Fin n.succ), f i = 0
exact fun i => (P_evenFst f i).symm.trans (congr_fun h (evenFst i)) All goals completed! 🐙B.10. The inclusion of the plane into linear solutions
A point in the span of the first part of the basis.
lemma P'_val (f : Fin n.succ → ℚ) : (P' f).val = P f := by n:ℕf:Fin n.succ → ℚ⊢ (P' f).val = P f
simp only [succ_eq_add_one, P', P] n:ℕf:Fin n.succ → ℚ⊢ (∑ x, f x • basis x).val = ∑ x, f x • basisAsCharges x
funext i n:ℕf:Fin n.succ → ℚi:Fin (PureU1 (2 * (n + 1))).numberCharges⊢ (∑ x, f x • basis x).val i = (∑ x, f x • basisAsCharges x) i
rw [sum_of_anomaly_free_linear, n:ℕf:Fin n.succ → ℚi:Fin (PureU1 (2 * (n + 1))).numberCharges⊢ ∑ i_1, (f i_1 • basis i_1).val i = (∑ x, f x • basisAsCharges x) i n:ℕf:Fin n.succ → ℚi:Fin (PureU1 (2 * (n + 1))).numberCharges⊢ ∑ i_1, (f i_1 • basis i_1).val i = ∑ i_1, (f i_1 • basisAsCharges i_1) i sum_of_charges n:ℕf:Fin n.succ → ℚi:Fin (PureU1 (2 * (n + 1))).numberCharges⊢ ∑ i_1, (f i_1 • basis i_1).val i = ∑ i_1, (f i_1 • basisAsCharges i_1) i n:ℕf:Fin n.succ → ℚi:Fin (PureU1 (2 * (n + 1))).numberCharges⊢ ∑ i_1, (f i_1 • basis i_1).val i = ∑ i_1, (f i_1 • basisAsCharges i_1) i] n:ℕf:Fin n.succ → ℚi:Fin (PureU1 (2 * (n + 1))).numberCharges⊢ ∑ i_1, (f i_1 • basis i_1).val i = ∑ i_1, (f i_1 • basisAsCharges i_1) i
rfl All goals completed! 🐙B.11. The basis vectors are linearly independent
theorem basis_linear_independent : LinearIndependent ℚ (@basis n) := by n:ℕ⊢ LinearIndependent ℚ basis
apply Fintype.linearIndependent_iff.mpr n:ℕ⊢ ∀ (g : Fin n.succ → ℚ), ∑ i, g i • basis i = 0 → ∀ (i : Fin n.succ), g i = 0
intro f h n:ℕf:Fin n.succ → ℚh:∑ i, f i • basis i = 0⊢ ∀ (i : Fin n.succ), f i = 0
change P' f = 0 at h n:ℕf:Fin n.succ → ℚh:P' f = 0⊢ ∀ (i : Fin n.succ), f i = 0
exact P_zero f ((P'_val f).symm.trans (congrArg _ h)) All goals completed! 🐙B.12. Every vector-like even solution is in the span of the basis of the first plane
lemma vectorLikeEven_in_span (S : (PureU1 (2 * n.succ)).LinSols)
(hS : VectorLikeEven S.val) : ∃ (M : (FamilyPermutations (2 * n.succ)).group),
(FamilyPermutations (2 * n.succ)).linSolRep M S ∈ Submodule.span ℚ (Set.range basis) := by n:ℕS:(PureU1 (2 * n.succ)).LinSolshS:VectorLikeEven S.val⊢ ∃ M, ((FamilyPermutations (2 * n.succ)).linSolRep M) S ∈ Submodule.span ℚ (Set.range basis)
use (Tuple.sort S.val).symm h n:ℕS:(PureU1 (2 * n.succ)).LinSolshS:VectorLikeEven S.val⊢ ((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.symm (Tuple.sort S.val))) S ∈ Submodule.span ℚ (Set.range basis)
change sortAFL S ∈ Submodule.span ℚ (Set.range basis) h n:ℕS:(PureU1 (2 * n.succ)).LinSolshS:VectorLikeEven S.val⊢ sortAFL S ∈ Submodule.span ℚ (Set.range basis)
rw [Submodule.mem_span_range_iff_exists_fun ℚ h n:ℕS:(PureU1 (2 * n.succ)).LinSolshS:VectorLikeEven S.val⊢ ∃ c, ∑ i, c i • basis i = sortAFL S h n:ℕS:(PureU1 (2 * n.succ)).LinSolshS:VectorLikeEven S.val⊢ ∃ c, ∑ i, c i • basis i = sortAFL S] h n:ℕS:(PureU1 (2 * n.succ)).LinSolshS:VectorLikeEven S.val⊢ ∃ c, ∑ i, c i • basis i = sortAFL S
let f : Fin n.succ → ℚ := fun i => (sortAFL S).val (evenFst i) h n:ℕS:(PureU1 (2 * n.succ)).LinSolshS:VectorLikeEven S.valf:Fin n.succ → ℚ := fun i => (sortAFL S).val (evenFst i)⊢ ∃ c, ∑ i, c i • basis i = sortAFL S
use f h n:ℕS:(PureU1 (2 * n.succ)).LinSolshS:VectorLikeEven S.valf:Fin n.succ → ℚ := fun i => (sortAFL S).val (evenFst i)⊢ ∑ i, f i • basis i = sortAFL S
apply ACCSystemLinear.LinSols.ext h n:ℕS:(PureU1 (2 * n.succ)).LinSolshS:VectorLikeEven S.valf:Fin n.succ → ℚ := fun i => (sortAFL S).val (evenFst i)⊢ (∑ i, f i • basis i).val = (sortAFL S).val
rw [sortAFL_val h n:ℕS:(PureU1 (2 * n.succ)).LinSolshS:VectorLikeEven S.valf:Fin n.succ → ℚ := fun i => (sortAFL S).val (evenFst i)⊢ (∑ i, f i • basis i).val = sort S.val h n:ℕS:(PureU1 (2 * n.succ)).LinSolshS:VectorLikeEven S.valf:Fin n.succ → ℚ := fun i => (sortAFL S).val (evenFst i)⊢ (∑ i, f i • basis i).val = sort S.val]h n:ℕS:(PureU1 (2 * n.succ)).LinSolshS:VectorLikeEven S.valf:Fin n.succ → ℚ := fun i => (sortAFL S).val (evenFst i)⊢ (∑ i, f i • basis i).val = sort S.val
erw [P'_val h n:ℕS:(PureU1 (2 * n.succ)).LinSolshS:VectorLikeEven S.valf:Fin n.succ → ℚ := fun i => (sortAFL S).val (evenFst i)⊢ P f = sort S.val] h n:ℕS:(PureU1 (2 * n.succ)).LinSolshS:VectorLikeEven S.valf:Fin n.succ → ℚ := fun i => (sortAFL S).val (evenFst i)⊢ P f = sort S.val
apply ext_even h.h1 n:ℕS:(PureU1 (2 * n.succ)).LinSolshS:VectorLikeEven S.valf:Fin n.succ → ℚ := fun i => (sortAFL S).val (evenFst i)⊢ ∀ (i : Fin n.succ), P f (evenFst i) = sort S.val (evenFst i)h.h2 n:ℕS:(PureU1 (2 * n.succ)).LinSolshS:VectorLikeEven S.valf:Fin n.succ → ℚ := fun i => (sortAFL S).val (evenFst i)⊢ ∀ (i : Fin n.succ), P f (evenSnd i) = sort S.val (evenSnd i)
· h.h1 n:ℕS:(PureU1 (2 * n.succ)).LinSolshS:VectorLikeEven S.valf:Fin n.succ → ℚ := fun i => (sortAFL S).val (evenFst i)⊢ ∀ (i : Fin n.succ), P f (evenFst i) = sort S.val (evenFst i) intro i h.h1 n:ℕS:(PureU1 (2 * n.succ)).LinSolshS:VectorLikeEven S.valf:Fin n.succ → ℚ := fun i => (sortAFL S).val (evenFst i)i:Fin n.succ⊢ P f (evenFst i) = sort S.val (evenFst i)
rw [P_evenFst h.h1 n:ℕS:(PureU1 (2 * n.succ)).LinSolshS:VectorLikeEven S.valf:Fin n.succ → ℚ := fun i => (sortAFL S).val (evenFst i)i:Fin n.succ⊢ f i = sort S.val (evenFst i) h.h1 n:ℕS:(PureU1 (2 * n.succ)).LinSolshS:VectorLikeEven S.valf:Fin n.succ → ℚ := fun i => (sortAFL S).val (evenFst i)i:Fin n.succ⊢ f i = sort S.val (evenFst i)]h.h1 n:ℕS:(PureU1 (2 * n.succ)).LinSolshS:VectorLikeEven S.valf:Fin n.succ → ℚ := fun i => (sortAFL S).val (evenFst i)i:Fin n.succ⊢ f i = sort S.val (evenFst i)
rfl All goals completed! 🐙
· h.h2 n:ℕS:(PureU1 (2 * n.succ)).LinSolshS:VectorLikeEven S.valf:Fin n.succ → ℚ := fun i => (sortAFL S).val (evenFst i)⊢ ∀ (i : Fin n.succ), P f (evenSnd i) = sort S.val (evenSnd i) intro i h.h2 n:ℕS:(PureU1 (2 * n.succ)).LinSolshS:VectorLikeEven S.valf:Fin n.succ → ℚ := fun i => (sortAFL S).val (evenFst i)i:Fin n.succ⊢ P f (evenSnd i) = sort S.val (evenSnd i)
rw [P_evenSnd h.h2 n:ℕS:(PureU1 (2 * n.succ)).LinSolshS:VectorLikeEven S.valf:Fin n.succ → ℚ := fun i => (sortAFL S).val (evenFst i)i:Fin n.succ⊢ -f i = sort S.val (evenSnd i) h.h2 n:ℕS:(PureU1 (2 * n.succ)).LinSolshS:VectorLikeEven S.valf:Fin n.succ → ℚ := fun i => (sortAFL S).val (evenFst i)i:Fin n.succ⊢ -f i = sort S.val (evenSnd i)]h.h2 n:ℕS:(PureU1 (2 * n.succ)).LinSolshS:VectorLikeEven S.valf:Fin n.succ → ℚ := fun i => (sortAFL S).val (evenFst i)i:Fin n.succ⊢ -f i = sort S.val (evenSnd i)
have ht := hS i h.h2 n:ℕS:(PureU1 (2 * n.succ)).LinSolshS:VectorLikeEven S.valf:Fin n.succ → ℚ := fun i => (sortAFL S).val (evenFst i)i:Fin n.succht:sort S.val (Fin.cast ⋯ (Fin.castAdd n.succ i)) = -sort S.val (Fin.cast ⋯ (Fin.natAdd n.succ i))⊢ -f i = sort S.val (evenSnd i)
change sort S.val (evenFst i) = - sort S.val (evenSnd i) at ht h.h2 n:ℕS:(PureU1 (2 * n.succ)).LinSolshS:VectorLikeEven S.valf:Fin n.succ → ℚ := fun i => (sortAFL S).val (evenFst i)i:Fin n.succht:sort S.val (evenFst i) = -sort S.val (evenSnd i)⊢ -f i = sort S.val (evenSnd i)
have h : sort S.val (evenSnd i) = - sort S.val (evenFst i) := by n:ℕS:(PureU1 (2 * n.succ)).LinSolshS:VectorLikeEven S.val⊢ ∃ M, ((FamilyPermutations (2 * n.succ)).linSolRep M) S ∈ Submodule.span ℚ (Set.range basis) h.h2 n:ℕS:(PureU1 (2 * n.succ)).LinSolshS:VectorLikeEven S.valf:Fin n.succ → ℚ := fun i => (sortAFL S).val (evenFst i)i:Fin n.succht:sort S.val (evenFst i) = -sort S.val (evenSnd i)h:sort S.val (evenSnd i) = -sort S.val (evenFst i)⊢ -f i = sort S.val (evenSnd i)
rw [ht n:ℕS:(PureU1 (2 * n.succ)).LinSolshS:VectorLikeEven S.valf:Fin n.succ → ℚ := fun i => (sortAFL S).val (evenFst i)i:Fin n.succht:sort S.val (evenFst i) = -sort S.val (evenSnd i)⊢ sort S.val (evenSnd i) = - -sort S.val (evenSnd i) n:ℕS:(PureU1 (2 * n.succ)).LinSolshS:VectorLikeEven S.valf:Fin n.succ → ℚ := fun i => (sortAFL S).val (evenFst i)i:Fin n.succht:sort S.val (evenFst i) = -sort S.val (evenSnd i)⊢ sort S.val (evenSnd i) = - -sort S.val (evenSnd i)h.h2 n:ℕS:(PureU1 (2 * n.succ)).LinSolshS:VectorLikeEven S.valf:Fin n.succ → ℚ := fun i => (sortAFL S).val (evenFst i)i:Fin n.succht:sort S.val (evenFst i) = -sort S.val (evenSnd i)h:sort S.val (evenSnd i) = -sort S.val (evenFst i)⊢ -f i = sort S.val (evenSnd i)] n:ℕS:(PureU1 (2 * n.succ)).LinSolshS:VectorLikeEven S.valf:Fin n.succ → ℚ := fun i => (sortAFL S).val (evenFst i)i:Fin n.succht:sort S.val (evenFst i) = -sort S.val (evenSnd i)⊢ sort S.val (evenSnd i) = - -sort S.val (evenSnd i)h.h2 n:ℕS:(PureU1 (2 * n.succ)).LinSolshS:VectorLikeEven S.valf:Fin n.succ → ℚ := fun i => (sortAFL S).val (evenFst i)i:Fin n.succht:sort S.val (evenFst i) = -sort S.val (evenSnd i)h:sort S.val (evenSnd i) = -sort S.val (evenFst i)⊢ -f i = sort S.val (evenSnd i)
ringh.h2 n:ℕS:(PureU1 (2 * n.succ)).LinSolshS:VectorLikeEven S.valf:Fin n.succ → ℚ := fun i => (sortAFL S).val (evenFst i)i:Fin n.succht:sort S.val (evenFst i) = -sort S.val (evenSnd i)h:sort S.val (evenSnd i) = -sort S.val (evenFst i)⊢ -f i = sort S.val (evenSnd i)h.h2 n:ℕS:(PureU1 (2 * n.succ)).LinSolshS:VectorLikeEven S.valf:Fin n.succ → ℚ := fun i => (sortAFL S).val (evenFst i)i:Fin n.succht:sort S.val (evenFst i) = -sort S.val (evenSnd i)h:sort S.val (evenSnd i) = -sort S.val (evenFst i)⊢ -f i = sort S.val (evenSnd i)
rw [h h.h2 n:ℕS:(PureU1 (2 * n.succ)).LinSolshS:VectorLikeEven S.valf:Fin n.succ → ℚ := fun i => (sortAFL S).val (evenFst i)i:Fin n.succht:sort S.val (evenFst i) = -sort S.val (evenSnd i)h:sort S.val (evenSnd i) = -sort S.val (evenFst i)⊢ -f i = -sort S.val (evenFst i) h.h2 n:ℕS:(PureU1 (2 * n.succ)).LinSolshS:VectorLikeEven S.valf:Fin n.succ → ℚ := fun i => (sortAFL S).val (evenFst i)i:Fin n.succht:sort S.val (evenFst i) = -sort S.val (evenSnd i)h:sort S.val (evenSnd i) = -sort S.val (evenFst i)⊢ -f i = -sort S.val (evenFst i)]h.h2 n:ℕS:(PureU1 (2 * n.succ)).LinSolshS:VectorLikeEven S.valf:Fin n.succ → ℚ := fun i => (sortAFL S).val (evenFst i)i:Fin n.succht:sort S.val (evenFst i) = -sort S.val (evenSnd i)h:sort S.val (evenSnd i) = -sort S.val (evenFst i)⊢ -f i = -sort S.val (evenFst i)
rfl All goals completed! 🐙C. The vectors of the basis spanning the second plane, via the shifted even split
The second part of the basis as charges.
def basis!AsCharges (j : Fin n) : (PureU1 (2 * n.succ)).Charges :=
fun i =>
if i = evenShiftFst j then
1
else
if i = evenShiftSnd j then
- 1
else
0C.2. Components of the vectors
lemma basis!_on_evenShiftFst_self (j : Fin n) : basis!AsCharges j (evenShiftFst j) = 1 := by n:ℕj:Fin n⊢ basis!AsCharges j (evenShiftFst j) = 1
simp [basis!AsCharges] All goals completed! 🐙set_option backward.isDefEq.respectTransparency false in
lemma basis!_on_other {k : Fin n} {j : Fin (2 * n.succ)} (h1 : j ≠ evenShiftFst k)
(h2 : j ≠ evenShiftSnd k) : basis!AsCharges k j = 0 := by n:ℕk:Fin nj:Fin (2 * n.succ)h1:j ≠ evenShiftFst kh2:j ≠ evenShiftSnd k⊢ basis!AsCharges k j = 0
simp only [basis!AsCharges, if_neg h1, if_neg h2] All goals completed! 🐙
set_option backward.isDefEq.respectTransparency false in
lemma basis!_on_evenShiftFst_other {k j : Fin n} (h : k ≠ j) :
basis!AsCharges k (evenShiftFst j) = 0 := by n:ℕk:Fin nj:Fin nh:k ≠ j⊢ basis!AsCharges k (evenShiftFst j) = 0
rw [ne_eq, n:ℕk:Fin nj:Fin nh:¬k = j⊢ basis!AsCharges k (evenShiftFst j) = 0 n:ℕk:Fin nj:Fin nh:¬↑k = ↑j⊢ basis!AsCharges k (evenShiftFst j) = 0 Fin.ext_iff n:ℕk:Fin nj:Fin nh:¬↑k = ↑j⊢ basis!AsCharges k (evenShiftFst j) = 0 n:ℕk:Fin nj:Fin nh:¬↑k = ↑j⊢ basis!AsCharges k (evenShiftFst j) = 0] at h n:ℕk:Fin nj:Fin nh:¬↑k = ↑j⊢ basis!AsCharges k (evenShiftFst j) = 0
refine basis!_on_other ?_ ?_ refine_1 n:ℕk:Fin nj:Fin nh:¬↑k = ↑j⊢ evenShiftFst j ≠ evenShiftFst krefine_2 n:ℕk:Fin nj:Fin nh:¬↑k = ↑j⊢ evenShiftFst j ≠ evenShiftSnd k <;> refine_1 n:ℕk:Fin nj:Fin nh:¬↑k = ↑j⊢ evenShiftFst j ≠ evenShiftFst krefine_2 n:ℕk:Fin nj:Fin nh:¬↑k = ↑j⊢ evenShiftFst j ≠ evenShiftSnd k
simp only [ne_eq, Fin.ext_iff, evenShiftFst, evenShiftSnd, Fin.val_cast, Fin.val_castAdd,
Fin.val_natAdd] refine_2 n:ℕk:Fin nj:Fin nh:¬↑k = ↑j⊢ ¬1 + ↑j = 1 + (n + ↑k) <;> refine_1 n:ℕk:Fin nj:Fin nh:¬↑k = ↑j⊢ ¬1 + ↑j = 1 + ↑krefine_2 n:ℕk:Fin nj:Fin nh:¬↑k = ↑j⊢ ¬1 + ↑j = 1 + (n + ↑k)
omega All goals completed! 🐙
set_option backward.isDefEq.respectTransparency false in
lemma basis!_evenShftSnd_eq_neg_evenShiftFst (j i : Fin n) :
basis!AsCharges j (evenShiftSnd i) = - basis!AsCharges j (evenShiftFst i) := by n:ℕj:Fin ni:Fin n⊢ basis!AsCharges j (evenShiftSnd i) = -basis!AsCharges j (evenShiftFst i)
simp only [basis!AsCharges, succ_eq_add_one, evenShiftSnd, evenShiftFst] n:ℕj:Fin ni:Fin n⊢ (if
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n i))) =
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j))) then
1
else
if
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n i))) =
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n j))) then
-1
else 0) =
-if
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n i))) =
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j))) then
1
else
if
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n i))) =
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n j))) then
-1
else 0
split isTrue n:ℕj:Fin ni:Fin nh✝:Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n i))) = Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j)))⊢ 1 =
-if
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n i))) =
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j))) then
1
else
if
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n i))) =
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n j))) then
-1
else 0isFalse n:ℕj:Fin ni:Fin nh✝:¬Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n i))) =
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j)))⊢ (if
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n i))) =
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n j))) then
-1
else 0) =
-if
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n i))) =
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j))) then
1
else
if
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n i))) =
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n j))) then
-1
else 0 <;> isTrue n:ℕj:Fin ni:Fin nh✝:Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n i))) = Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j)))⊢ 1 =
-if
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n i))) =
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j))) then
1
else
if
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n i))) =
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n j))) then
-1
else 0isFalse n:ℕj:Fin ni:Fin nh✝:¬Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n i))) =
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j)))⊢ (if
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n i))) =
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n j))) then
-1
else 0) =
-if
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n i))) =
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j))) then
1
else
if
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n i))) =
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n j))) then
-1
else 0 split isFalse.isTrue n:ℕj:Fin ni:Fin nh✝¹:¬Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n i))) =
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j)))h✝:Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n i))) = Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n j)))⊢ -1 =
-if
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n i))) =
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j))) then
1
else
if
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n i))) =
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n j))) then
-1
else 0isFalse.isFalse n:ℕj:Fin ni:Fin nh✝¹:¬Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n i))) =
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j)))h✝:¬Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n i))) = Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n j)))⊢ 0 =
-if
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n i))) =
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j))) then
1
else
if
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n i))) =
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n j))) then
-1
else 0
any_goals split isFalse.isFalse.isTrue n:ℕj:Fin ni:Fin nh✝²:¬Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n i))) =
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j)))h✝¹:¬Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n i))) = Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n j)))h✝:Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n i))) =
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j)))⊢ 0 = -1isFalse.isFalse.isFalse n:ℕj:Fin ni:Fin nh✝²:¬Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n i))) =
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j)))h✝¹:¬Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n i))) = Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n j)))h✝:¬Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n i))) =
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j)))⊢ 0 =
-if
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n i))) =
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n j))) then
-1
else 0
any_goals split isFalse.isFalse.isFalse.isTrue n:ℕj:Fin ni:Fin nh✝³:¬Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n i))) =
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j)))h✝²:¬Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n i))) = Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n j)))h✝¹:¬Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n i))) =
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j)))h✝:Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n i))) = Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n j)))⊢ 0 = - -1isFalse.isFalse.isFalse.isFalse n:ℕj:Fin ni:Fin nh✝³:¬Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n i))) =
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j)))h✝²:¬Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n i))) = Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n j)))h✝¹:¬Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n i))) =
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j)))h✝:¬Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n i))) =
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n j)))⊢ 0 = -0
any_goals rfl All goals completed! 🐙
all_goals
rename_i h1 h2 isFalse.isFalse.isFalse.isTrue n:ℕj:Fin ni:Fin nh✝¹:¬Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n i))) =
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j)))h✝:¬Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n i))) = Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n j)))h1:¬Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n i))) =
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j)))h2:Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n i))) = Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n j)))⊢ 0 = - -1
rw [Fin.ext_iff isTrue.isTrue n:ℕj:Fin ni:Fin nh1:↑(Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n i)))) =
↑(Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j))))h2:↑(Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n i)))) =
↑(Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j))))⊢ 1 = -1 isFalse.isFalse.isFalse.isTrue n:ℕj:Fin ni:Fin nh✝¹:¬Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n i))) =
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j)))h✝:¬Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n i))) = Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n j)))h1:¬↑(Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n i)))) =
↑(Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j))))h2:↑(Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n i)))) =
↑(Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n j))))⊢ 0 = - -1] isFalse.isFalse.isTrue n:ℕj:Fin ni:Fin nh✝:¬Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n i))) =
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j)))h1:¬↑(Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n i)))) =
↑(Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n j))))h2:↑(Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n i)))) =
↑(Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j))))⊢ 0 = -1 isFalse.isFalse.isFalse.isTrue n:ℕj:Fin ni:Fin nh✝¹:¬Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n i))) =
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j)))h✝:¬Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n i))) = Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n j)))h1:¬↑(Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n i)))) =
↑(Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j))))h2:↑(Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n i)))) =
↑(Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n j))))⊢ 0 = - -1 at h1 h2isFalse.isFalse.isFalse.isTrue n:ℕj:Fin ni:Fin nh✝¹:¬Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n i))) =
Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j)))h✝:¬Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n i))) = Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n j)))h1:¬↑(Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n i)))) =
↑(Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j))))h2:↑(Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n i)))) =
↑(Fin.cast ⋯ (Fin.natAdd 1 (Fin.castAdd 1 (Fin.natAdd n j))))⊢ 0 = - -1
simp_all only [Fin.natAdd_eq_addNat, Fin.cast_inj, Fin.val_cast, Fin.val_natAdd,
Fin.val_castAdd, add_right_inj, Fin.val_addNat, add_eq_left] isFalse.isFalse.isFalse.isTrue n:ℕj:Fin ni:Fin nh✝¹:¬Fin.natAdd 1 (Fin.castAdd 1 (i.addNat n)) = Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j))h✝:¬Fin.natAdd 1 (Fin.castAdd 1 (i.addNat n)) = Fin.natAdd 1 (Fin.castAdd 1 (j.addNat n))h1:¬n = 0h2:↑i = ↑j + n⊢ 0 = - -1
· isTrue.isTrue n:ℕj:Fin ni:Fin nh1:n = 0h2:↑i = ↑j⊢ 1 = -1 subst h1 isTrue.isTrue j:Fin 0i:Fin 0h2:↑i = ↑j⊢ 1 = -1
exact Fin.elim0 i All goals completed! 🐙
all_goals
rename_i h3 isFalse.isFalse.isFalse.isTrue n:ℕj:Fin ni:Fin nh✝:¬Fin.natAdd 1 (Fin.castAdd 1 (i.addNat n)) = Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j))h3:¬Fin.natAdd 1 (Fin.castAdd 1 (i.addNat n)) = Fin.natAdd 1 (Fin.castAdd 1 (j.addNat n))h1:¬n = 0h2:↑i = ↑j + n⊢ 0 = - -1
rw [Fin.ext_iff isTrue.isFalse.isFalse n:ℕj:Fin ni:Fin nh3:↑(Fin.natAdd 1 (Fin.castAdd 1 (i.addNat n))) = ↑(Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j)))h1:¬↑i = ↑jh2:¬↑i = ↑j + n⊢ 1 = -0 isFalse.isFalse.isFalse.isTrue n:ℕj:Fin ni:Fin nh✝:¬Fin.natAdd 1 (Fin.castAdd 1 (i.addNat n)) = Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j))h3:¬↑(Fin.natAdd 1 (Fin.castAdd 1 (i.addNat n))) = ↑(Fin.natAdd 1 (Fin.castAdd 1 (j.addNat n)))h1:¬n = 0h2:↑i = ↑j + n⊢ 0 = - -1] isFalse.isFalse.isTrue n:ℕj:Fin ni:Fin nh3:¬↑(Fin.natAdd 1 (Fin.castAdd 1 (i.addNat n))) = ↑(Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j)))h1:¬Trueh2:↑i = ↑j⊢ 0 = -1isFalse.isFalse.isFalse.isTrue n:ℕj:Fin ni:Fin nh✝:¬Fin.natAdd 1 (Fin.castAdd 1 (i.addNat n)) = Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j))h3:¬↑(Fin.natAdd 1 (Fin.castAdd 1 (i.addNat n))) = ↑(Fin.natAdd 1 (Fin.castAdd 1 (j.addNat n)))h1:¬n = 0h2:↑i = ↑j + n⊢ 0 = - -1 at h3isFalse.isFalse.isFalse.isTrue n:ℕj:Fin ni:Fin nh✝:¬Fin.natAdd 1 (Fin.castAdd 1 (i.addNat n)) = Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j))h3:¬↑(Fin.natAdd 1 (Fin.castAdd 1 (i.addNat n))) = ↑(Fin.natAdd 1 (Fin.castAdd 1 (j.addNat n)))h1:¬n = 0h2:↑i = ↑j + n⊢ 0 = - -1
simp_all only [Fin.val_natAdd, Fin.val_castAdd, Fin.val_addNat, not_true_eq_false] isFalse.isFalse.isFalse.isTrue n:ℕj:Fin ni:Fin nh✝:¬Fin.natAdd 1 (Fin.castAdd 1 (i.addNat n)) = Fin.natAdd 1 (Fin.castAdd 1 (Fin.castAdd n j))h3:¬1 + (↑j + n + n) = 1 + (↑j + n)h1:¬n = 0h2:↑i = ↑j + n⊢ 0 = - -1
all_goals
omega All goals completed! 🐙
lemma basis!_on_evenShiftSnd_self (j : Fin n) : basis!AsCharges j (evenShiftSnd j) = - 1 := by n:ℕj:Fin n⊢ basis!AsCharges j (evenShiftSnd j) = -1
rw [basis!_evenShftSnd_eq_neg_evenShiftFst, n:ℕj:Fin n⊢ -basis!AsCharges j (evenShiftFst j) = -1 All goals completed! 🐙 basis!_on_evenShiftFst_self n:ℕj:Fin n⊢ -1 = -1 All goals completed! 🐙] All goals completed! 🐙
lemma basis!_on_evenShiftSnd_other {k j : Fin n} (h : k ≠ j) :
basis!AsCharges k (evenShiftSnd j) = 0 := by n:ℕk:Fin nj:Fin nh:k ≠ j⊢ basis!AsCharges k (evenShiftSnd j) = 0
rw [basis!_evenShftSnd_eq_neg_evenShiftFst, n:ℕk:Fin nj:Fin nh:k ≠ j⊢ -basis!AsCharges k (evenShiftFst j) = 0 n:ℕk:Fin nj:Fin nh:k ≠ j⊢ -0 = 0 basis!_on_evenShiftFst_other h n:ℕk:Fin nj:Fin nh:k ≠ j⊢ -0 = 0 n:ℕk:Fin nj:Fin nh:k ≠ j⊢ -0 = 0] n:ℕk:Fin nj:Fin nh:k ≠ j⊢ -0 = 0
rfl All goals completed! 🐙set_option backward.isDefEq.respectTransparency false in
lemma basis!_on_evenShiftZero (j : Fin n) : basis!AsCharges j evenShiftZero = 0 := by n:ℕj:Fin n⊢ basis!AsCharges j evenShiftZero = 0
refine basis!_on_other ?_ ?_ refine_1 n:ℕj:Fin n⊢ evenShiftZero ≠ evenShiftFst jrefine_2 n:ℕj:Fin n⊢ evenShiftZero ≠ evenShiftSnd j <;> refine_1 n:ℕj:Fin n⊢ evenShiftZero ≠ evenShiftFst jrefine_2 n:ℕj:Fin n⊢ evenShiftZero ≠ evenShiftSnd j
simp only [ne_eq, Fin.ext_iff, evenShiftZero, evenShiftFst, evenShiftSnd, Fin.val_cast,
Fin.val_castAdd, Fin.val_natAdd, Fin.val_eq_zero] refine_2 n:ℕj:Fin n⊢ ¬0 = 1 + (n + ↑j) <;> refine_1 n:ℕj:Fin n⊢ ¬0 = 1 + ↑jrefine_2 n:ℕj:Fin n⊢ ¬0 = 1 + (n + ↑j)
omega All goals completed! 🐙set_option backward.isDefEq.respectTransparency false in
lemma basis!_on_evenShiftLast (j : Fin n) : basis!AsCharges j evenShiftLast = 0 := by n:ℕj:Fin n⊢ basis!AsCharges j evenShiftLast = 0
refine basis!_on_other ?_ ?_ refine_1 n:ℕj:Fin n⊢ evenShiftLast ≠ evenShiftFst jrefine_2 n:ℕj:Fin n⊢ evenShiftLast ≠ evenShiftSnd j <;> refine_1 n:ℕj:Fin n⊢ evenShiftLast ≠ evenShiftFst jrefine_2 n:ℕj:Fin n⊢ evenShiftLast ≠ evenShiftSnd j
simp only [ne_eq, Fin.ext_iff, evenShiftLast, evenShiftFst, evenShiftSnd, Fin.val_cast,
Fin.val_castAdd, Fin.val_natAdd, Fin.val_eq_zero, add_zero] refine_2 n:ℕj:Fin n⊢ ¬1 + (n + n) = 1 + (n + ↑j) <;> refine_1 n:ℕj:Fin n⊢ ¬1 + (n + n) = 1 + ↑jrefine_2 n:ℕj:Fin n⊢ ¬1 + (n + n) = 1 + (n + ↑j)
omega All goals completed! 🐙C.3. The vectors satisfy the linear ACCs
lemma basis!_linearACC (j : Fin n) : (accGrav (2 * n.succ)) (basis!AsCharges j) = 0 := by n:ℕj:Fin n⊢ (accGrav (2 * n.succ)) (basis!AsCharges j) = 0
simp [accGrav, sum_evenShift, basis!_on_evenShiftZero, basis!_on_evenShiftLast,
basis!_evenShftSnd_eq_neg_evenShiftFst] All goals completed! 🐙C.4. The vectors satisfy the cubic ACC
lemma basis!_accCube (j : Fin n) :
accCube (2 * n.succ) (basis!AsCharges j) = 0 := by n:ℕj:Fin n⊢ (accCube (2 * n.succ)) (basis!AsCharges j) = 0
rw [accCube_explicit, n:ℕj:Fin n⊢ ∑ i, basis!AsCharges j i ^ 3 = 0 n:ℕj:Fin n⊢ basis!AsCharges j evenShiftZero ^ 3 + basis!AsCharges j evenShiftLast ^ 3 +
∑ i,
(((fun i => basis!AsCharges j i ^ 3) ∘ evenShiftFst) i + ((fun i => basis!AsCharges j i ^ 3) ∘ evenShiftSnd) i) =
0 sum_evenShift n:ℕj:Fin n⊢ basis!AsCharges j evenShiftZero ^ 3 + basis!AsCharges j evenShiftLast ^ 3 +
∑ i,
(((fun i => basis!AsCharges j i ^ 3) ∘ evenShiftFst) i + ((fun i => basis!AsCharges j i ^ 3) ∘ evenShiftSnd) i) =
0 n:ℕj:Fin n⊢ basis!AsCharges j evenShiftZero ^ 3 + basis!AsCharges j evenShiftLast ^ 3 +
∑ i,
(((fun i => basis!AsCharges j i ^ 3) ∘ evenShiftFst) i + ((fun i => basis!AsCharges j i ^ 3) ∘ evenShiftSnd) i) =
0] n:ℕj:Fin n⊢ basis!AsCharges j evenShiftZero ^ 3 + basis!AsCharges j evenShiftLast ^ 3 +
∑ i,
(((fun i => basis!AsCharges j i ^ 3) ∘ evenShiftFst) i + ((fun i => basis!AsCharges j i ^ 3) ∘ evenShiftSnd) i) =
0
rw [basis!_on_evenShiftLast, n:ℕj:Fin n⊢ basis!AsCharges j evenShiftZero ^ 3 + 0 ^ 3 +
∑ i,
(((fun i => basis!AsCharges j i ^ 3) ∘ evenShiftFst) i + ((fun i => basis!AsCharges j i ^ 3) ∘ evenShiftSnd) i) =
0 n:ℕj:Fin n⊢ 0 ^ 3 + 0 ^ 3 +
∑ i,
(((fun i => basis!AsCharges j i ^ 3) ∘ evenShiftFst) i + ((fun i => basis!AsCharges j i ^ 3) ∘ evenShiftSnd) i) =
0 basis!_on_evenShiftZero n:ℕj:Fin n⊢ 0 ^ 3 + 0 ^ 3 +
∑ i,
(((fun i => basis!AsCharges j i ^ 3) ∘ evenShiftFst) i + ((fun i => basis!AsCharges j i ^ 3) ∘ evenShiftSnd) i) =
0 n:ℕj:Fin n⊢ 0 ^ 3 + 0 ^ 3 +
∑ i,
(((fun i => basis!AsCharges j i ^ 3) ∘ evenShiftFst) i + ((fun i => basis!AsCharges j i ^ 3) ∘ evenShiftSnd) i) =
0] n:ℕj:Fin n⊢ 0 ^ 3 + 0 ^ 3 +
∑ i,
(((fun i => basis!AsCharges j i ^ 3) ∘ evenShiftFst) i + ((fun i => basis!AsCharges j i ^ 3) ∘ evenShiftSnd) i) =
0
simp only [ne_eq, OfNat.ofNat_ne_zero, not_false_eq_true, zero_pow, add_zero, Function.comp_apply,
zero_add] n:ℕj:Fin n⊢ ∑ x, (basis!AsCharges j (evenShiftFst x) ^ 3 + basis!AsCharges j (evenShiftSnd x) ^ 3) = 0
refine Finset.sum_eq_zero fun i _ => ?_ n:ℕj:Fin ni:Fin nx✝:i ∈ univ⊢ basis!AsCharges j (evenShiftFst i) ^ 3 + basis!AsCharges j (evenShiftSnd i) ^ 3 = 0
simp only [basis!_evenShftSnd_eq_neg_evenShiftFst] n:ℕj:Fin ni:Fin nx✝:i ∈ univ⊢ basis!AsCharges j (evenShiftFst i) ^ 3 + (-basis!AsCharges j (evenShiftFst i)) ^ 3 = 0
ring All goals completed! 🐙C.6. The vectors as linear solutions
The second part of the basis as LinSols.
@[simps!]
def basis! (j : Fin n) : (PureU1 (2 * n.succ)).LinSols :=
⟨basis!AsCharges j, by n:ℕj:Fin n⊢ ∀ (i : Fin (PureU1 (2 * n.succ)).numberLinear), ((PureU1 (2 * n.succ)).linearACCs i) (basis!AsCharges j) = 0
intro i n:ℕj:Fin ni:Fin (PureU1 (2 * n.succ)).numberLinear⊢ ((PureU1 (2 * n.succ)).linearACCs i) (basis!AsCharges j) = 0
match i with
| ⟨0, _⟩ => n:ℕj:Fin ni:Fin (PureU1 (2 * n.succ)).numberLinearisLt✝:0 < (PureU1 (2 * n.succ)).numberLinear⊢ ((PureU1 (2 * n.succ)).linearACCs ⟨0, isLt✝⟩) (basis!AsCharges j) = 0 exact basis!_linearACC j All goals completed! 🐙⟩C.7. The inclusion of the second plane into charges
A point in the span of the second part of the basis as a charge.
def P! (f : Fin n → ℚ) : (PureU1 (2 * n.succ)).Charges := ∑ i, f i • basis!AsCharges iC.8. Components of the inclusion into charges
lemma P!_evenShiftFst (f : Fin n → ℚ) (j : Fin n) : P! f (evenShiftFst j) = f j := by n:ℕf:Fin n → ℚj:Fin n⊢ P! f (evenShiftFst j) = f j
rw [P!, n:ℕf:Fin n → ℚj:Fin n⊢ (∑ i, f i • basis!AsCharges i) (evenShiftFst j) = f j n:ℕf:Fin n → ℚj:Fin n⊢ ∑ i, (f i • basis!AsCharges i) (evenShiftFst j) = f j sum_of_charges n:ℕf:Fin n → ℚj:Fin n⊢ ∑ i, (f i • basis!AsCharges i) (evenShiftFst j) = f j n:ℕf:Fin n → ℚj:Fin n⊢ ∑ i, (f i • basis!AsCharges i) (evenShiftFst j) = f j] n:ℕf:Fin n → ℚj:Fin n⊢ ∑ i, (f i • basis!AsCharges i) (evenShiftFst j) = f j
simp only [HSMul.hSMul, SMul.smul] n:ℕf:Fin n → ℚj:Fin n⊢ ∑ x, f x * basis!AsCharges x (evenShiftFst j) = f j
rw [Fintype.sum_eq_single j n:ℕf:Fin n → ℚj:Fin n⊢ f j * basis!AsCharges j (evenShiftFst j) = f jn:ℕf:Fin n → ℚj:Fin n⊢ ∀ (x : Fin n), x ≠ j → f x * basis!AsCharges x (evenShiftFst j) = 0 n:ℕf:Fin n → ℚj:Fin n⊢ f j * basis!AsCharges j (evenShiftFst j) = f jn:ℕf:Fin n → ℚj:Fin n⊢ ∀ (x : Fin n), x ≠ j → f x * basis!AsCharges x (evenShiftFst j) = 0] n:ℕf:Fin n → ℚj:Fin n⊢ f j * basis!AsCharges j (evenShiftFst j) = f jn:ℕf:Fin n → ℚj:Fin n⊢ ∀ (x : Fin n), x ≠ j → f x * basis!AsCharges x (evenShiftFst j) = 0
· n:ℕf:Fin n → ℚj:Fin n⊢ f j * basis!AsCharges j (evenShiftFst j) = f j simp [basis!_on_evenShiftFst_self] All goals completed! 🐙
· n:ℕf:Fin n → ℚj:Fin n⊢ ∀ (x : Fin n), x ≠ j → f x * basis!AsCharges x (evenShiftFst j) = 0 exact fun k hkj => mul_eq_zero_of_right (f k) (basis!_on_evenShiftFst_other hkj) All goals completed! 🐙
lemma P!_evenShiftSnd (f : Fin n → ℚ) (j : Fin n) : P! f (evenShiftSnd j) = - f j := by n:ℕf:Fin n → ℚj:Fin n⊢ P! f (evenShiftSnd j) = -f j
rw [P!, n:ℕf:Fin n → ℚj:Fin n⊢ (∑ i, f i • basis!AsCharges i) (evenShiftSnd j) = -f j n:ℕf:Fin n → ℚj:Fin n⊢ ∑ i, (f i • basis!AsCharges i) (evenShiftSnd j) = -f j sum_of_charges n:ℕf:Fin n → ℚj:Fin n⊢ ∑ i, (f i • basis!AsCharges i) (evenShiftSnd j) = -f j n:ℕf:Fin n → ℚj:Fin n⊢ ∑ i, (f i • basis!AsCharges i) (evenShiftSnd j) = -f j] n:ℕf:Fin n → ℚj:Fin n⊢ ∑ i, (f i • basis!AsCharges i) (evenShiftSnd j) = -f j
simp only [HSMul.hSMul, SMul.smul] n:ℕf:Fin n → ℚj:Fin n⊢ ∑ x, f x * basis!AsCharges x (evenShiftSnd j) = -f j
rw [Fintype.sum_eq_single j n:ℕf:Fin n → ℚj:Fin n⊢ f j * basis!AsCharges j (evenShiftSnd j) = -f jn:ℕf:Fin n → ℚj:Fin n⊢ ∀ (x : Fin n), x ≠ j → f x * basis!AsCharges x (evenShiftSnd j) = 0 n:ℕf:Fin n → ℚj:Fin n⊢ f j * basis!AsCharges j (evenShiftSnd j) = -f jn:ℕf:Fin n → ℚj:Fin n⊢ ∀ (x : Fin n), x ≠ j → f x * basis!AsCharges x (evenShiftSnd j) = 0] n:ℕf:Fin n → ℚj:Fin n⊢ f j * basis!AsCharges j (evenShiftSnd j) = -f jn:ℕf:Fin n → ℚj:Fin n⊢ ∀ (x : Fin n), x ≠ j → f x * basis!AsCharges x (evenShiftSnd j) = 0
· n:ℕf:Fin n → ℚj:Fin n⊢ f j * basis!AsCharges j (evenShiftSnd j) = -f j simp [basis!_on_evenShiftSnd_self] All goals completed! 🐙
· n:ℕf:Fin n → ℚj:Fin n⊢ ∀ (x : Fin n), x ≠ j → f x * basis!AsCharges x (evenShiftSnd j) = 0 exact fun k hkj => mul_eq_zero_of_right (f k) (basis!_on_evenShiftSnd_other hkj) All goals completed! 🐙lemma P!_evenShiftZero (f : Fin n → ℚ) : P! f (evenShiftZero) = 0 := by n:ℕf:Fin n → ℚ⊢ P! f evenShiftZero = 0
simp [P!, sum_of_charges, HSMul.hSMul, SMul.smul, basis!_on_evenShiftZero] All goals completed! 🐙lemma P!_evenShiftLast (f : Fin n → ℚ) : P! f evenShiftLast = 0 := by n:ℕf:Fin n → ℚ⊢ P! f evenShiftLast = 0
simp [P!, sum_of_charges, HSMul.hSMul, SMul.smul, basis!_on_evenShiftLast] All goals completed! 🐙C.9. The inclusion into charges satisfies the cubic ACC
lemma P!_accCube (f : Fin n → ℚ) : accCube (2 * n.succ) (P! f) = 0 := by n:ℕf:Fin n → ℚ⊢ (accCube (2 * n.succ)) (P! f) = 0
rw [accCube_explicit, n:ℕf:Fin n → ℚ⊢ ∑ i, P! f i ^ 3 = 0 n:ℕf:Fin n → ℚ⊢ 0 ^ 3 + 0 ^ 3 + ∑ i, (((fun i => P! f i ^ 3) ∘ evenShiftFst) i + ((fun i => P! f i ^ 3) ∘ evenShiftSnd) i) = 0 sum_evenShift, n:ℕf:Fin n → ℚ⊢ P! f evenShiftZero ^ 3 + P! f evenShiftLast ^ 3 +
∑ i, (((fun i => P! f i ^ 3) ∘ evenShiftFst) i + ((fun i => P! f i ^ 3) ∘ evenShiftSnd) i) =
0 n:ℕf:Fin n → ℚ⊢ 0 ^ 3 + 0 ^ 3 + ∑ i, (((fun i => P! f i ^ 3) ∘ evenShiftFst) i + ((fun i => P! f i ^ 3) ∘ evenShiftSnd) i) = 0 P!_evenShiftZero, n:ℕf:Fin n → ℚ⊢ 0 ^ 3 + P! f evenShiftLast ^ 3 +
∑ i, (((fun i => P! f i ^ 3) ∘ evenShiftFst) i + ((fun i => P! f i ^ 3) ∘ evenShiftSnd) i) =
0 n:ℕf:Fin n → ℚ⊢ 0 ^ 3 + 0 ^ 3 + ∑ i, (((fun i => P! f i ^ 3) ∘ evenShiftFst) i + ((fun i => P! f i ^ 3) ∘ evenShiftSnd) i) = 0 P!_evenShiftLast n:ℕf:Fin n → ℚ⊢ 0 ^ 3 + 0 ^ 3 + ∑ i, (((fun i => P! f i ^ 3) ∘ evenShiftFst) i + ((fun i => P! f i ^ 3) ∘ evenShiftSnd) i) = 0 n:ℕf:Fin n → ℚ⊢ 0 ^ 3 + 0 ^ 3 + ∑ i, (((fun i => P! f i ^ 3) ∘ evenShiftFst) i + ((fun i => P! f i ^ 3) ∘ evenShiftSnd) i) = 0] n:ℕf:Fin n → ℚ⊢ 0 ^ 3 + 0 ^ 3 + ∑ i, (((fun i => P! f i ^ 3) ∘ evenShiftFst) i + ((fun i => P! f i ^ 3) ∘ evenShiftSnd) i) = 0
simp only [ne_eq, OfNat.ofNat_ne_zero, not_false_eq_true, zero_pow, add_zero, Function.comp_apply,
zero_add] n:ℕf:Fin n → ℚ⊢ ∑ x, (P! f (evenShiftFst x) ^ 3 + P! f (evenShiftSnd x) ^ 3) = 0
refine Finset.sum_eq_zero fun i _ => ?_ n:ℕf:Fin n → ℚi:Fin nx✝:i ∈ univ⊢ P! f (evenShiftFst i) ^ 3 + P! f (evenShiftSnd i) ^ 3 = 0
simp only [P!_evenShiftFst, P!_evenShiftSnd] n:ℕf:Fin n → ℚi:Fin nx✝:i ∈ univ⊢ f i ^ 3 + (-f i) ^ 3 = 0
ring All goals completed! 🐙C.10. Kernel of the inclusion into charges
lemma P!_zero (f : Fin n → ℚ) (h : P! f = 0) : ∀ i, f i = 0 := by n:ℕf:Fin n → ℚh:P! f = 0⊢ ∀ (i : Fin n), f i = 0
exact fun i => (P!_evenShiftFst f i).symm.trans (congr_fun h (evenShiftFst i)) All goals completed! 🐙C.11. The inclusion of the second plane into the span of the basis
lemma P!_in_span (f : Fin n → ℚ) : P! f ∈ Submodule.span ℚ (Set.range basis!AsCharges) := by n:ℕf:Fin n → ℚ⊢ P! f ∈ Submodule.span ℚ (Set.range basis!AsCharges)
exact (Submodule.mem_span_range_iff_exists_fun ℚ).mpr ⟨f, rfl⟩ All goals completed! 🐙C.12. The inclusion of the plane into linear solutions
A point in the span of the second part of the basis.
lemma P!'_val (f : Fin n → ℚ) : (P!' f).val = P! f := by n:ℕf:Fin n → ℚ⊢ (P!' f).val = P! f
simp only [succ_eq_add_one, P!', P!] n:ℕf:Fin n → ℚ⊢ (∑ x, f x • basis! x).val = ∑ x, f x • basis!AsCharges x
funext i n:ℕf:Fin n → ℚi:Fin (PureU1 (2 * (n + 1))).numberCharges⊢ (∑ x, f x • basis! x).val i = (∑ x, f x • basis!AsCharges x) i
rw [sum_of_anomaly_free_linear, n:ℕf:Fin n → ℚi:Fin (PureU1 (2 * (n + 1))).numberCharges⊢ ∑ i_1, (f i_1 • basis! i_1).val i = (∑ x, f x • basis!AsCharges x) i n:ℕf:Fin n → ℚi:Fin (PureU1 (2 * (n + 1))).numberCharges⊢ ∑ i_1, (f i_1 • basis! i_1).val i = ∑ i_1, (f i_1 • basis!AsCharges i_1) i sum_of_charges n:ℕf:Fin n → ℚi:Fin (PureU1 (2 * (n + 1))).numberCharges⊢ ∑ i_1, (f i_1 • basis! i_1).val i = ∑ i_1, (f i_1 • basis!AsCharges i_1) i n:ℕf:Fin n → ℚi:Fin (PureU1 (2 * (n + 1))).numberCharges⊢ ∑ i_1, (f i_1 • basis! i_1).val i = ∑ i_1, (f i_1 • basis!AsCharges i_1) i] n:ℕf:Fin n → ℚi:Fin (PureU1 (2 * (n + 1))).numberCharges⊢ ∑ i_1, (f i_1 • basis! i_1).val i = ∑ i_1, (f i_1 • basis!AsCharges i_1) i
rfl All goals completed! 🐙C.13. The basis vectors are linearly independent
theorem basis!_linear_independent : LinearIndependent ℚ (@basis! n) := by n:ℕ⊢ LinearIndependent ℚ basis!
apply Fintype.linearIndependent_iff.mpr n:ℕ⊢ ∀ (g : Fin n → ℚ), ∑ i, g i • basis! i = 0 → ∀ (i : Fin n), g i = 0
intro f h n:ℕf:Fin n → ℚh:∑ i, f i • basis! i = 0⊢ ∀ (i : Fin n), f i = 0
change P!' f = 0 at h n:ℕf:Fin n → ℚh:P!' f = 0⊢ ∀ (i : Fin n), f i = 0
exact P!_zero f ((P!'_val f).symm.trans (congrArg _ h)) All goals completed! 🐙C.14. Properties of the basis vectors relating to the span
lemma smul_basis!AsCharges_in_span (S : (PureU1 (2 * n.succ)).LinSols) (j : Fin n) :
(S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j ∈
Submodule.span ℚ (Set.range basis!AsCharges) := by n:ℕS:(PureU1 (2 * n.succ)).LinSolsj:Fin n⊢ (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j ∈ Submodule.span ℚ (Set.range basis!AsCharges)
exact Submodule.smul_mem _ _ (Submodule.subset_span ⟨j, rfl⟩) All goals completed! 🐙C.15. Permutations as additions of basis vectors
Swapping the elements evenShiftFst j and evenShiftSnd j is equivalent to adding a vector basis!AsCharges j.
lemma swap!_as_add {S S' : (PureU1 (2 * n.succ)).LinSols} (j : Fin n)
(hS : ((FamilyPermutations (2 * n.succ)).linSolRep
(Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S') :
S'.val = S.val + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j := by n:ℕS:(PureU1 (2 * n.succ)).LinSolsS':(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'⊢ S'.val = S.val + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j
funext i n:ℕS:(PureU1 (2 * n.succ)).LinSolsS':(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'i:Fin (PureU1 (2 * n.succ)).numberCharges⊢ S'.val i = (S.val + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j) i
rw [← hS, n:ℕS:(PureU1 (2 * n.succ)).LinSolsS':(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'i:Fin (PureU1 (2 * n.succ)).numberCharges⊢ (((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S).val i =
(S.val + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j) i n:ℕS:(PureU1 (2 * n.succ)).LinSolsS':(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'i:Fin (PureU1 (2 * n.succ)).numberCharges⊢ S.val ((Equiv.swap (evenShiftFst j) (evenShiftSnd j)).invFun i) =
(S.val + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j) i FamilyPermutations_anomalyFreeLinear_apply n:ℕS:(PureU1 (2 * n.succ)).LinSolsS':(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'i:Fin (PureU1 (2 * n.succ)).numberCharges⊢ S.val ((Equiv.swap (evenShiftFst j) (evenShiftSnd j)).invFun i) =
(S.val + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j) i n:ℕS:(PureU1 (2 * n.succ)).LinSolsS':(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'i:Fin (PureU1 (2 * n.succ)).numberCharges⊢ S.val ((Equiv.swap (evenShiftFst j) (evenShiftSnd j)).invFun i) =
(S.val + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j) i] n:ℕS:(PureU1 (2 * n.succ)).LinSolsS':(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'i:Fin (PureU1 (2 * n.succ)).numberCharges⊢ S.val ((Equiv.swap (evenShiftFst j) (evenShiftSnd j)).invFun i) =
(S.val + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j) i
by_cases hi : i = evenShiftFst j pos n:ℕS:(PureU1 (2 * n.succ)).LinSolsS':(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'i:Fin (PureU1 (2 * n.succ)).numberChargeshi:i = evenShiftFst j⊢ S.val ((Equiv.swap (evenShiftFst j) (evenShiftSnd j)).invFun i) =
(S.val + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j) ineg n:ℕS:(PureU1 (2 * n.succ)).LinSolsS':(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'i:Fin (PureU1 (2 * n.succ)).numberChargeshi:¬i = evenShiftFst j⊢ S.val ((Equiv.swap (evenShiftFst j) (evenShiftSnd j)).invFun i) =
(S.val + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j) i
· pos n:ℕS:(PureU1 (2 * n.succ)).LinSolsS':(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'i:Fin (PureU1 (2 * n.succ)).numberChargeshi:i = evenShiftFst j⊢ S.val ((Equiv.swap (evenShiftFst j) (evenShiftSnd j)).invFun i) =
(S.val + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j) i subst hi pos n:ℕS:(PureU1 (2 * n.succ)).LinSolsS':(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'⊢ S.val ((Equiv.swap (evenShiftFst j) (evenShiftSnd j)).invFun (evenShiftFst j)) =
(S.val + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j) (evenShiftFst j)
simp [HSMul.hSMul, basis!_on_evenShiftFst_self, Equiv.swap_apply_left] All goals completed! 🐙
· neg n:ℕS:(PureU1 (2 * n.succ)).LinSolsS':(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'i:Fin (PureU1 (2 * n.succ)).numberChargeshi:¬i = evenShiftFst j⊢ S.val ((Equiv.swap (evenShiftFst j) (evenShiftSnd j)).invFun i) =
(S.val + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j) i by_cases hi2 : i = evenShiftSnd j pos n:ℕS:(PureU1 (2 * n.succ)).LinSolsS':(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'i:Fin (PureU1 (2 * n.succ)).numberChargeshi:¬i = evenShiftFst jhi2:i = evenShiftSnd j⊢ S.val ((Equiv.swap (evenShiftFst j) (evenShiftSnd j)).invFun i) =
(S.val + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j) ineg n:ℕS:(PureU1 (2 * n.succ)).LinSolsS':(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'i:Fin (PureU1 (2 * n.succ)).numberChargeshi:¬i = evenShiftFst jhi2:¬i = evenShiftSnd j⊢ S.val ((Equiv.swap (evenShiftFst j) (evenShiftSnd j)).invFun i) =
(S.val + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j) i
· pos n:ℕS:(PureU1 (2 * n.succ)).LinSolsS':(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'i:Fin (PureU1 (2 * n.succ)).numberChargeshi:¬i = evenShiftFst jhi2:i = evenShiftSnd j⊢ S.val ((Equiv.swap (evenShiftFst j) (evenShiftSnd j)).invFun i) =
(S.val + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j) i simp [HSMul.hSMul, hi2, basis!_on_evenShiftSnd_self, Equiv.swap_apply_right] All goals completed! 🐙
· neg n:ℕS:(PureU1 (2 * n.succ)).LinSolsS':(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'i:Fin (PureU1 (2 * n.succ)).numberChargeshi:¬i = evenShiftFst jhi2:¬i = evenShiftSnd j⊢ S.val ((Equiv.swap (evenShiftFst j) (evenShiftSnd j)).invFun i) =
(S.val + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j) i simp only [succ_eq_add_one, Equiv.invFun_as_coe, HSMul.hSMul,
ACCSystemCharges.chargesAddCommMonoid_add, ACCSystemCharges.chargesModule_smul] neg n:ℕS:(PureU1 (2 * n.succ)).LinSolsS':(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'i:Fin (PureU1 (2 * n.succ)).numberChargeshi:¬i = evenShiftFst jhi2:¬i = evenShiftSnd j⊢ S.val ((Equiv.symm (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) i) =
S.val i + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) * basis!AsCharges j i
rw [basis!_on_other hi hi2 neg n:ℕS:(PureU1 (2 * n.succ)).LinSolsS':(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'i:Fin (PureU1 (2 * n.succ)).numberChargeshi:¬i = evenShiftFst jhi2:¬i = evenShiftSnd j⊢ S.val ((Equiv.symm (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) i) =
S.val i + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) * 0 neg n:ℕS:(PureU1 (2 * n.succ)).LinSolsS':(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'i:Fin (PureU1 (2 * n.succ)).numberChargeshi:¬i = evenShiftFst jhi2:¬i = evenShiftSnd j⊢ S.val ((Equiv.symm (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) i) =
S.val i + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) * 0]neg n:ℕS:(PureU1 (2 * n.succ)).LinSolsS':(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'i:Fin (PureU1 (2 * n.succ)).numberChargeshi:¬i = evenShiftFst jhi2:¬i = evenShiftSnd j⊢ S.val ((Equiv.symm (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) i) =
S.val i + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) * 0
aesop All goals completed! 🐙D. Mixed cubic ACCs involving points from both planes
lemma P_P_P!_accCube (g : Fin n.succ → ℚ) (j : Fin n) :
accCubeTriLinSymm (P g) (P g) (basis!AsCharges j)
= g (j.succ) ^ 2 - g (j.castSucc) ^ 2 := by n:ℕg:Fin n.succ → ℚj:Fin n⊢ ((accCubeTriLinSymm (P g)) (P g)) (basis!AsCharges j) = g j.succ ^ 2 - g j.castSucc ^ 2
simp only [succ_eq_add_one, accCubeTriLinSymm,
TriLinearSymm.mk₃_toFun_apply_apply] n:ℕg:Fin n.succ → ℚj:Fin n⊢ ∑ x, P g x * P g x * basis!AsCharges j x = g j.succ ^ 2 - g j.castSucc ^ 2
erw [sum_evenShift, n:ℕg:Fin n.succ → ℚj:Fin n⊢ P g evenShiftZero * P g evenShiftZero * basis!AsCharges j evenShiftZero +
P g evenShiftLast * P g evenShiftLast * basis!AsCharges j evenShiftLast +
∑ i,
(((fun x => P g x * P g x * basis!AsCharges j x) ∘ evenShiftFst) i +
((fun x => P g x * P g x * basis!AsCharges j x) ∘ evenShiftSnd) i) =
g j.succ ^ 2 - g j.castSucc ^ 2 basis!_on_evenShiftZero, n:ℕg:Fin n.succ → ℚj:Fin n⊢ P g evenShiftZero * P g evenShiftZero * 0 + P g evenShiftLast * P g evenShiftLast * basis!AsCharges j evenShiftLast +
∑ i,
(((fun x => P g x * P g x * basis!AsCharges j x) ∘ evenShiftFst) i +
((fun x => P g x * P g x * basis!AsCharges j x) ∘ evenShiftSnd) i) =
g j.succ ^ 2 - g j.castSucc ^ 2 basis!_on_evenShiftLast n:ℕg:Fin n.succ → ℚj:Fin n⊢ P g evenShiftZero * P g evenShiftZero * 0 + P g evenShiftLast * P g evenShiftLast * 0 +
∑ i,
(((fun x => P g x * P g x * basis!AsCharges j x) ∘ evenShiftFst) i +
((fun x => P g x * P g x * basis!AsCharges j x) ∘ evenShiftSnd) i) =
g j.succ ^ 2 - g j.castSucc ^ 2] n:ℕg:Fin n.succ → ℚj:Fin n⊢ P g evenShiftZero * P g evenShiftZero * 0 + P g evenShiftLast * P g evenShiftLast * 0 +
∑ i,
(((fun x => P g x * P g x * basis!AsCharges j x) ∘ evenShiftFst) i +
((fun x => P g x * P g x * basis!AsCharges j x) ∘ evenShiftSnd) i) =
g j.succ ^ 2 - g j.castSucc ^ 2
simp only [mul_zero, add_zero, Function.comp_apply, zero_add] n:ℕg:Fin n.succ → ℚj:Fin n⊢ ∑ x,
(P g (evenShiftFst x) * P g (evenShiftFst x) * basis!AsCharges j (evenShiftFst x) +
P g (evenShiftSnd x) * P g (evenShiftSnd x) * basis!AsCharges j (evenShiftSnd x)) =
g j.succ ^ 2 - g j.castSucc ^ 2
rw [Fintype.sum_eq_single j, n:ℕg:Fin n.succ → ℚj:Fin n⊢ P g (evenShiftFst j) * P g (evenShiftFst j) * basis!AsCharges j (evenShiftFst j) +
P g (evenShiftSnd j) * P g (evenShiftSnd j) * basis!AsCharges j (evenShiftSnd j) =
g j.succ ^ 2 - g j.castSucc ^ 2n:ℕg:Fin n.succ → ℚj:Fin n⊢ ∀ (x : Fin n),
x ≠ j →
P g (evenShiftFst x) * P g (evenShiftFst x) * basis!AsCharges j (evenShiftFst x) +
P g (evenShiftSnd x) * P g (evenShiftSnd x) * basis!AsCharges j (evenShiftSnd x) =
0 n:ℕg:Fin n.succ → ℚj:Fin n⊢ P g (evenShiftFst j) * P g (evenShiftFst j) * 1 + P g (evenShiftSnd j) * P g (evenShiftSnd j) * -1 =
g j.succ ^ 2 - g j.castSucc ^ 2n:ℕg:Fin n.succ → ℚj:Fin n⊢ ∀ (x : Fin n),
x ≠ j →
P g (evenShiftFst x) * P g (evenShiftFst x) * basis!AsCharges j (evenShiftFst x) +
P g (evenShiftSnd x) * P g (evenShiftSnd x) * basis!AsCharges j (evenShiftSnd x) =
0 basis!_on_evenShiftFst_self, n:ℕg:Fin n.succ → ℚj:Fin n⊢ P g (evenShiftFst j) * P g (evenShiftFst j) * 1 +
P g (evenShiftSnd j) * P g (evenShiftSnd j) * basis!AsCharges j (evenShiftSnd j) =
g j.succ ^ 2 - g j.castSucc ^ 2n:ℕg:Fin n.succ → ℚj:Fin n⊢ ∀ (x : Fin n),
x ≠ j →
P g (evenShiftFst x) * P g (evenShiftFst x) * basis!AsCharges j (evenShiftFst x) +
P g (evenShiftSnd x) * P g (evenShiftSnd x) * basis!AsCharges j (evenShiftSnd x) =
0 n:ℕg:Fin n.succ → ℚj:Fin n⊢ P g (evenShiftFst j) * P g (evenShiftFst j) * 1 + P g (evenShiftSnd j) * P g (evenShiftSnd j) * -1 =
g j.succ ^ 2 - g j.castSucc ^ 2n:ℕg:Fin n.succ → ℚj:Fin n⊢ ∀ (x : Fin n),
x ≠ j →
P g (evenShiftFst x) * P g (evenShiftFst x) * basis!AsCharges j (evenShiftFst x) +
P g (evenShiftSnd x) * P g (evenShiftSnd x) * basis!AsCharges j (evenShiftSnd x) =
0 basis!_on_evenShiftSnd_self n:ℕg:Fin n.succ → ℚj:Fin n⊢ P g (evenShiftFst j) * P g (evenShiftFst j) * 1 + P g (evenShiftSnd j) * P g (evenShiftSnd j) * -1 =
g j.succ ^ 2 - g j.castSucc ^ 2n:ℕg:Fin n.succ → ℚj:Fin n⊢ ∀ (x : Fin n),
x ≠ j →
P g (evenShiftFst x) * P g (evenShiftFst x) * basis!AsCharges j (evenShiftFst x) +
P g (evenShiftSnd x) * P g (evenShiftSnd x) * basis!AsCharges j (evenShiftSnd x) =
0 n:ℕg:Fin n.succ → ℚj:Fin n⊢ P g (evenShiftFst j) * P g (evenShiftFst j) * 1 + P g (evenShiftSnd j) * P g (evenShiftSnd j) * -1 =
g j.succ ^ 2 - g j.castSucc ^ 2n:ℕg:Fin n.succ → ℚj:Fin n⊢ ∀ (x : Fin n),
x ≠ j →
P g (evenShiftFst x) * P g (evenShiftFst x) * basis!AsCharges j (evenShiftFst x) +
P g (evenShiftSnd x) * P g (evenShiftSnd x) * basis!AsCharges j (evenShiftSnd x) =
0] n:ℕg:Fin n.succ → ℚj:Fin n⊢ P g (evenShiftFst j) * P g (evenShiftFst j) * 1 + P g (evenShiftSnd j) * P g (evenShiftSnd j) * -1 =
g j.succ ^ 2 - g j.castSucc ^ 2n:ℕg:Fin n.succ → ℚj:Fin n⊢ ∀ (x : Fin n),
x ≠ j →
P g (evenShiftFst x) * P g (evenShiftFst x) * basis!AsCharges j (evenShiftFst x) +
P g (evenShiftSnd x) * P g (evenShiftSnd x) * basis!AsCharges j (evenShiftSnd x) =
0
· n:ℕg:Fin n.succ → ℚj:Fin n⊢ P g (evenShiftFst j) * P g (evenShiftFst j) * 1 + P g (evenShiftSnd j) * P g (evenShiftSnd j) * -1 =
g j.succ ^ 2 - g j.castSucc ^ 2 simp only [evenShiftFst_eq_evenFst_succ, mul_one, evenShiftSnd_eq_evenSnd_castSucc, mul_neg] n:ℕg:Fin n.succ → ℚj:Fin n⊢ P g (evenFst j.succ) * P g (evenFst j.succ) + -(P g (evenSnd j.castSucc) * P g (evenSnd j.castSucc)) =
g j.succ ^ 2 - g j.castSucc ^ 2
rw [P_evenFst, n:ℕg:Fin n.succ → ℚj:Fin n⊢ g j.succ * g j.succ + -(P g (evenSnd j.castSucc) * P g (evenSnd j.castSucc)) = g j.succ ^ 2 - g j.castSucc ^ 2 n:ℕg:Fin n.succ → ℚj:Fin n⊢ g j.succ * g j.succ + -(-g j.castSucc * -g j.castSucc) = g j.succ ^ 2 - g j.castSucc ^ 2 P_evenSnd n:ℕg:Fin n.succ → ℚj:Fin n⊢ g j.succ * g j.succ + -(-g j.castSucc * -g j.castSucc) = g j.succ ^ 2 - g j.castSucc ^ 2 n:ℕg:Fin n.succ → ℚj:Fin n⊢ g j.succ * g j.succ + -(-g j.castSucc * -g j.castSucc) = g j.succ ^ 2 - g j.castSucc ^ 2] n:ℕg:Fin n.succ → ℚj:Fin n⊢ g j.succ * g j.succ + -(-g j.castSucc * -g j.castSucc) = g j.succ ^ 2 - g j.castSucc ^ 2
ring All goals completed! 🐙
· n:ℕg:Fin n.succ → ℚj:Fin n⊢ ∀ (x : Fin n),
x ≠ j →
P g (evenShiftFst x) * P g (evenShiftFst x) * basis!AsCharges j (evenShiftFst x) +
P g (evenShiftSnd x) * P g (evenShiftSnd x) * basis!AsCharges j (evenShiftSnd x) =
0 intro k hkj n:ℕg:Fin n.succ → ℚj:Fin nk:Fin nhkj:k ≠ j⊢ P g (evenShiftFst k) * P g (evenShiftFst k) * basis!AsCharges j (evenShiftFst k) +
P g (evenShiftSnd k) * P g (evenShiftSnd k) * basis!AsCharges j (evenShiftSnd k) =
0
erw [basis!_on_evenShiftFst_other hkj.symm, n:ℕg:Fin n.succ → ℚj:Fin nk:Fin nhkj:k ≠ j⊢ P g (evenShiftFst k) * P g (evenShiftFst k) * 0 +
P g (evenShiftSnd k) * P g (evenShiftSnd k) * basis!AsCharges j (evenShiftSnd k) =
0 basis!_on_evenShiftSnd_other hkj.symm n:ℕg:Fin n.succ → ℚj:Fin nk:Fin nhkj:k ≠ j⊢ P g (evenShiftFst k) * P g (evenShiftFst k) * 0 + P g (evenShiftSnd k) * P g (evenShiftSnd k) * 0 = 0] n:ℕg:Fin n.succ → ℚj:Fin nk:Fin nhkj:k ≠ j⊢ P g (evenShiftFst k) * P g (evenShiftFst k) * 0 + P g (evenShiftSnd k) * P g (evenShiftSnd k) * 0 = 0
simp only [mul_zero, add_zero] All goals completed! 🐙
lemma P_P!_P!_accCube (g : Fin n → ℚ) (j : Fin n.succ) :
accCubeTriLinSymm (P! g) (P! g) (basisAsCharges j)
= (P! g (evenFst j))^2 - (P! g (evenSnd j))^2 := by n:ℕg:Fin n → ℚj:Fin n.succ⊢ ((accCubeTriLinSymm (P! g)) (P! g)) (basisAsCharges j) = P! g (evenFst j) ^ 2 - P! g (evenSnd j) ^ 2
simp only [succ_eq_add_one, accCubeTriLinSymm,
TriLinearSymm.mk₃_toFun_apply_apply] n:ℕg:Fin n → ℚj:Fin n.succ⊢ ∑ x, P! g x * P! g x * basisAsCharges j x = P! g (evenFst j) ^ 2 - P! g (evenSnd j) ^ 2
erw [sum_even n:ℕg:Fin n → ℚj:Fin n.succ⊢ ∑ i,
(((fun x => P! g x * P! g x * basisAsCharges j x) ∘ evenFst) i +
((fun x => P! g x * P! g x * basisAsCharges j x) ∘ evenSnd) i) =
P! g (evenFst j) ^ 2 - P! g (evenSnd j) ^ 2] n:ℕg:Fin n → ℚj:Fin n.succ⊢ ∑ i,
(((fun x => P! g x * P! g x * basisAsCharges j x) ∘ evenFst) i +
((fun x => P! g x * P! g x * basisAsCharges j x) ∘ evenSnd) i) =
P! g (evenFst j) ^ 2 - P! g (evenSnd j) ^ 2
simp only [Function.comp_apply] n:ℕg:Fin n → ℚj:Fin n.succ⊢ ∑ x,
(P! g (evenFst x) * P! g (evenFst x) * basisAsCharges j (evenFst x) +
P! g (evenSnd x) * P! g (evenSnd x) * basisAsCharges j (evenSnd x)) =
P! g (evenFst j) ^ 2 - P! g (evenSnd j) ^ 2
rw [Fintype.sum_eq_single j, n:ℕg:Fin n → ℚj:Fin n.succ⊢ P! g (evenFst j) * P! g (evenFst j) * basisAsCharges j (evenFst j) +
P! g (evenSnd j) * P! g (evenSnd j) * basisAsCharges j (evenSnd j) =
P! g (evenFst j) ^ 2 - P! g (evenSnd j) ^ 2n:ℕg:Fin n → ℚj:Fin n.succ⊢ ∀ (x : Fin n.succ),
x ≠ j →
P! g (evenFst x) * P! g (evenFst x) * basisAsCharges j (evenFst x) +
P! g (evenSnd x) * P! g (evenSnd x) * basisAsCharges j (evenSnd x) =
0 n:ℕg:Fin n → ℚj:Fin n.succ⊢ P! g (evenFst j) * P! g (evenFst j) * 1 + P! g (evenSnd j) * P! g (evenSnd j) * -1 =
P! g (evenFst j) ^ 2 - P! g (evenSnd j) ^ 2n:ℕg:Fin n → ℚj:Fin n.succ⊢ ∀ (x : Fin n.succ),
x ≠ j →
P! g (evenFst x) * P! g (evenFst x) * basisAsCharges j (evenFst x) +
P! g (evenSnd x) * P! g (evenSnd x) * basisAsCharges j (evenSnd x) =
0 basis_on_evenFst_self, n:ℕg:Fin n → ℚj:Fin n.succ⊢ P! g (evenFst j) * P! g (evenFst j) * 1 + P! g (evenSnd j) * P! g (evenSnd j) * basisAsCharges j (evenSnd j) =
P! g (evenFst j) ^ 2 - P! g (evenSnd j) ^ 2n:ℕg:Fin n → ℚj:Fin n.succ⊢ ∀ (x : Fin n.succ),
x ≠ j →
P! g (evenFst x) * P! g (evenFst x) * basisAsCharges j (evenFst x) +
P! g (evenSnd x) * P! g (evenSnd x) * basisAsCharges j (evenSnd x) =
0 n:ℕg:Fin n → ℚj:Fin n.succ⊢ P! g (evenFst j) * P! g (evenFst j) * 1 + P! g (evenSnd j) * P! g (evenSnd j) * -1 =
P! g (evenFst j) ^ 2 - P! g (evenSnd j) ^ 2n:ℕg:Fin n → ℚj:Fin n.succ⊢ ∀ (x : Fin n.succ),
x ≠ j →
P! g (evenFst x) * P! g (evenFst x) * basisAsCharges j (evenFst x) +
P! g (evenSnd x) * P! g (evenSnd x) * basisAsCharges j (evenSnd x) =
0 basis_on_evenSnd_self n:ℕg:Fin n → ℚj:Fin n.succ⊢ P! g (evenFst j) * P! g (evenFst j) * 1 + P! g (evenSnd j) * P! g (evenSnd j) * -1 =
P! g (evenFst j) ^ 2 - P! g (evenSnd j) ^ 2n:ℕg:Fin n → ℚj:Fin n.succ⊢ ∀ (x : Fin n.succ),
x ≠ j →
P! g (evenFst x) * P! g (evenFst x) * basisAsCharges j (evenFst x) +
P! g (evenSnd x) * P! g (evenSnd x) * basisAsCharges j (evenSnd x) =
0 n:ℕg:Fin n → ℚj:Fin n.succ⊢ P! g (evenFst j) * P! g (evenFst j) * 1 + P! g (evenSnd j) * P! g (evenSnd j) * -1 =
P! g (evenFst j) ^ 2 - P! g (evenSnd j) ^ 2n:ℕg:Fin n → ℚj:Fin n.succ⊢ ∀ (x : Fin n.succ),
x ≠ j →
P! g (evenFst x) * P! g (evenFst x) * basisAsCharges j (evenFst x) +
P! g (evenSnd x) * P! g (evenSnd x) * basisAsCharges j (evenSnd x) =
0] n:ℕg:Fin n → ℚj:Fin n.succ⊢ P! g (evenFst j) * P! g (evenFst j) * 1 + P! g (evenSnd j) * P! g (evenSnd j) * -1 =
P! g (evenFst j) ^ 2 - P! g (evenSnd j) ^ 2n:ℕg:Fin n → ℚj:Fin n.succ⊢ ∀ (x : Fin n.succ),
x ≠ j →
P! g (evenFst x) * P! g (evenFst x) * basisAsCharges j (evenFst x) +
P! g (evenSnd x) * P! g (evenSnd x) * basisAsCharges j (evenSnd x) =
0
· n:ℕg:Fin n → ℚj:Fin n.succ⊢ P! g (evenFst j) * P! g (evenFst j) * 1 + P! g (evenSnd j) * P! g (evenSnd j) * -1 =
P! g (evenFst j) ^ 2 - P! g (evenSnd j) ^ 2 simp only [mul_one, mul_neg] n:ℕg:Fin n → ℚj:Fin n.succ⊢ P! g (evenFst j) * P! g (evenFst j) + -(P! g (evenSnd j) * P! g (evenSnd j)) =
P! g (evenFst j) ^ 2 - P! g (evenSnd j) ^ 2
ring All goals completed! 🐙
· n:ℕg:Fin n → ℚj:Fin n.succ⊢ ∀ (x : Fin n.succ),
x ≠ j →
P! g (evenFst x) * P! g (evenFst x) * basisAsCharges j (evenFst x) +
P! g (evenSnd x) * P! g (evenSnd x) * basisAsCharges j (evenSnd x) =
0 intro k hkj n:ℕg:Fin n → ℚj:Fin n.succk:Fin n.succhkj:k ≠ j⊢ P! g (evenFst k) * P! g (evenFst k) * basisAsCharges j (evenFst k) +
P! g (evenSnd k) * P! g (evenSnd k) * basisAsCharges j (evenSnd k) =
0
erw [basis_on_evenFst_other hkj.symm, n:ℕg:Fin n → ℚj:Fin n.succk:Fin n.succhkj:k ≠ j⊢ P! g (evenFst k) * P! g (evenFst k) * 0 + P! g (evenSnd k) * P! g (evenSnd k) * basisAsCharges j (evenSnd k) = 0 basis_on_evenSnd_other hkj.symm n:ℕg:Fin n → ℚj:Fin n.succk:Fin n.succhkj:k ≠ j⊢ P! g (evenFst k) * P! g (evenFst k) * 0 + P! g (evenSnd k) * P! g (evenSnd k) * 0 = 0] n:ℕg:Fin n → ℚj:Fin n.succk:Fin n.succhkj:k ≠ j⊢ P! g (evenFst k) * P! g (evenFst k) * 0 + P! g (evenSnd k) * P! g (evenSnd k) * 0 = 0
simp only [mul_zero, add_zero] All goals completed! 🐙E. The combined basis
E.1. As a map into linear solutions
The whole basis as LinSols.
def basisa : (Fin n.succ) ⊕ (Fin n) → (PureU1 (2 * n.succ)).LinSols := fun i =>
match i with
| .inl i => basis i
| .inr i => basis! iE.2. Inclusion of the span of the basis into charges
A point in the span of the basis as a charge.
E.3. Components of the inclusion into charges
lemma Pa_evenShiftFst (f : Fin n.succ → ℚ) (g : Fin n → ℚ) (j : Fin n) :
Pa f g (evenShiftFst j) = f j.succ + g j := by n:ℕf:Fin n.succ → ℚg:Fin n → ℚj:Fin n⊢ Pa f g (evenShiftFst j) = f j.succ + g j
rw [Pa n:ℕf:Fin n.succ → ℚg:Fin n → ℚj:Fin n⊢ (P f + P! g) (evenShiftFst j) = f j.succ + g j n:ℕf:Fin n.succ → ℚg:Fin n → ℚj:Fin n⊢ (P f + P! g) (evenShiftFst j) = f j.succ + g j] n:ℕf:Fin n.succ → ℚg:Fin n → ℚj:Fin n⊢ (P f + P! g) (evenShiftFst j) = f j.succ + g j
simp only [ACCSystemCharges.chargesAddCommMonoid_add] n:ℕf:Fin n.succ → ℚg:Fin n → ℚj:Fin n⊢ P f (evenShiftFst j) + P! g (evenShiftFst j) = f j.succ + g j
rw [P!_evenShiftFst, n:ℕf:Fin n.succ → ℚg:Fin n → ℚj:Fin n⊢ P f (evenShiftFst j) + g j = f j.succ + g j All goals completed! 🐙 evenShiftFst_eq_evenFst_succ, n:ℕf:Fin n.succ → ℚg:Fin n → ℚj:Fin n⊢ P f (evenFst j.succ) + g j = f j.succ + g j All goals completed! 🐙 P_evenFst n:ℕf:Fin n.succ → ℚg:Fin n → ℚj:Fin n⊢ f j.succ + g j = f j.succ + g j All goals completed! 🐙] All goals completed! 🐙
lemma Pa_evenShiftSnd (f : Fin n.succ → ℚ) (g : Fin n → ℚ) (j : Fin n) :
Pa f g (evenShiftSnd j) = - f j.castSucc - g j := by n:ℕf:Fin n.succ → ℚg:Fin n → ℚj:Fin n⊢ Pa f g (evenShiftSnd j) = -f j.castSucc - g j
rw [Pa n:ℕf:Fin n.succ → ℚg:Fin n → ℚj:Fin n⊢ (P f + P! g) (evenShiftSnd j) = -f j.castSucc - g j n:ℕf:Fin n.succ → ℚg:Fin n → ℚj:Fin n⊢ (P f + P! g) (evenShiftSnd j) = -f j.castSucc - g j] n:ℕf:Fin n.succ → ℚg:Fin n → ℚj:Fin n⊢ (P f + P! g) (evenShiftSnd j) = -f j.castSucc - g j
simp only [ACCSystemCharges.chargesAddCommMonoid_add] n:ℕf:Fin n.succ → ℚg:Fin n → ℚj:Fin n⊢ P f (evenShiftSnd j) + P! g (evenShiftSnd j) = -f j.castSucc - g j
rw [P!_evenShiftSnd, n:ℕf:Fin n.succ → ℚg:Fin n → ℚj:Fin n⊢ P f (evenShiftSnd j) + -g j = -f j.castSucc - g j n:ℕf:Fin n.succ → ℚg:Fin n → ℚj:Fin n⊢ -f j.castSucc + -g j = -f j.castSucc - g j evenShiftSnd_eq_evenSnd_castSucc, n:ℕf:Fin n.succ → ℚg:Fin n → ℚj:Fin n⊢ P f (evenSnd j.castSucc) + -g j = -f j.castSucc - g j n:ℕf:Fin n.succ → ℚg:Fin n → ℚj:Fin n⊢ -f j.castSucc + -g j = -f j.castSucc - g j P_evenSnd n:ℕf:Fin n.succ → ℚg:Fin n → ℚj:Fin n⊢ -f j.castSucc + -g j = -f j.castSucc - g j n:ℕf:Fin n.succ → ℚg:Fin n → ℚj:Fin n⊢ -f j.castSucc + -g j = -f j.castSucc - g j] n:ℕf:Fin n.succ → ℚg:Fin n → ℚj:Fin n⊢ -f j.castSucc + -g j = -f j.castSucc - g j
ring All goals completed! 🐙
lemma Pa_evenShitZero (f : Fin n.succ → ℚ) (g : Fin n → ℚ) : Pa f g (evenShiftZero) = f 0 := by n:ℕf:Fin n.succ → ℚg:Fin n → ℚ⊢ Pa f g evenShiftZero = f 0
rw [Pa n:ℕf:Fin n.succ → ℚg:Fin n → ℚ⊢ (P f + P! g) evenShiftZero = f 0 n:ℕf:Fin n.succ → ℚg:Fin n → ℚ⊢ (P f + P! g) evenShiftZero = f 0] n:ℕf:Fin n.succ → ℚg:Fin n → ℚ⊢ (P f + P! g) evenShiftZero = f 0
simp only [ACCSystemCharges.chargesAddCommMonoid_add] n:ℕf:Fin n.succ → ℚg:Fin n → ℚ⊢ P f evenShiftZero + P! g evenShiftZero = f 0
rw [P!_evenShiftZero, n:ℕf:Fin n.succ → ℚg:Fin n → ℚ⊢ P f evenShiftZero + 0 = f 0 All goals completed! 🐙 evenShiftZero_eq_evenFst_zero, n:ℕf:Fin n.succ → ℚg:Fin n → ℚ⊢ P f (evenFst 0) + 0 = f 0 All goals completed! 🐙 P_evenFst, n:ℕf:Fin n.succ → ℚg:Fin n → ℚ⊢ f 0 + 0 = f 0 All goals completed! 🐙 add_zero n:ℕf:Fin n.succ → ℚg:Fin n → ℚ⊢ f 0 = f 0 All goals completed! 🐙] All goals completed! 🐙
lemma Pa_evenShiftLast (f : Fin n.succ → ℚ) (g : Fin n → ℚ) :
Pa f g (evenShiftLast) = - f (Fin.last n) := by n:ℕf:Fin n.succ → ℚg:Fin n → ℚ⊢ Pa f g evenShiftLast = -f (Fin.last n)
rw [Pa n:ℕf:Fin n.succ → ℚg:Fin n → ℚ⊢ (P f + P! g) evenShiftLast = -f (Fin.last n) n:ℕf:Fin n.succ → ℚg:Fin n → ℚ⊢ (P f + P! g) evenShiftLast = -f (Fin.last n)] n:ℕf:Fin n.succ → ℚg:Fin n → ℚ⊢ (P f + P! g) evenShiftLast = -f (Fin.last n)
simp only [ACCSystemCharges.chargesAddCommMonoid_add] n:ℕf:Fin n.succ → ℚg:Fin n → ℚ⊢ P f evenShiftLast + P! g evenShiftLast = -f (Fin.last n)
rw [P!_evenShiftLast, n:ℕf:Fin n.succ → ℚg:Fin n → ℚ⊢ P f evenShiftLast + 0 = -f (Fin.last n) All goals completed! 🐙 evenShiftLast_eq_evenSnd_last, n:ℕf:Fin n.succ → ℚg:Fin n → ℚ⊢ P f (evenSnd (Fin.last n)) + 0 = -f (Fin.last n) All goals completed! 🐙 P_evenSnd, n:ℕf:Fin n.succ → ℚg:Fin n → ℚ⊢ -f (Fin.last n) + 0 = -f (Fin.last n) All goals completed! 🐙 add_zero n:ℕf:Fin n.succ → ℚg:Fin n → ℚ⊢ -f (Fin.last n) = -f (Fin.last n) All goals completed! 🐙] All goals completed! 🐙E.4. Kernel of the inclusion into charges
lemma Pa_zero (f : Fin n.succ → ℚ) (g : Fin n → ℚ) (h : Pa f g = 0) :
∀ i, f i = 0 := by n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0⊢ ∀ (i : Fin n.succ), f i = 0
have h₃ := Pa_evenShitZero f g n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:Pa f g evenShiftZero = f 0⊢ ∀ (i : Fin n.succ), f i = 0
rw [h n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 evenShiftZero = f 0⊢ ∀ (i : Fin n.succ), f i = 0 n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 evenShiftZero = f 0⊢ ∀ (i : Fin n.succ), f i = 0] at h₃ n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 evenShiftZero = f 0⊢ ∀ (i : Fin n.succ), f i = 0
change 0 = f 0 at h₃ n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 = f 0⊢ ∀ (i : Fin n.succ), f i = 0
intro i n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 = f 0i:Fin n.succ⊢ f i = 0
have hinduc (iv : ℕ) (hiv : iv < n.succ) : f ⟨iv, hiv⟩ = 0 := by n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0⊢ ∀ (i : Fin n.succ), f i = 0 n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 = f 0i:Fin n.succhinduc:∀ (iv : ℕ) (hiv : iv < n.succ), f ⟨iv, hiv⟩ = 0⊢ f i = 0
induction iv zero n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 = f 0i:Fin n.succhiv:0 < n.succ⊢ f ⟨0, hiv⟩ = 0succ n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 = f 0i:Fin n.succn✝:ℕa✝:∀ (hiv : n✝ < n.succ), f ⟨n✝, hiv⟩ = 0hiv:n✝ + 1 < n.succ⊢ f ⟨n✝ + 1, hiv⟩ = 0 n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 = f 0i:Fin n.succhinduc:∀ (iv : ℕ) (hiv : iv < n.succ), f ⟨iv, hiv⟩ = 0⊢ f i = 0
exact h₃.symm succ n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 = f 0i:Fin n.succn✝:ℕa✝:∀ (hiv : n✝ < n.succ), f ⟨n✝, hiv⟩ = 0hiv:n✝ + 1 < n.succ⊢ f ⟨n✝ + 1, hiv⟩ = 0 n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 = f 0i:Fin n.succhinduc:∀ (iv : ℕ) (hiv : iv < n.succ), f ⟨iv, hiv⟩ = 0⊢ f i = 0
rename_i iv hi succ n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 = f 0i:Fin n.succiv:ℕhi:∀ (hiv : n✝ < n.succ), f ⟨n✝, hiv⟩ = 0hiv:n✝ + 1 < n.succ⊢ f ⟨n✝ + 1, hiv⟩ = 0 n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 = f 0i:Fin n.succhinduc:∀ (iv : ℕ) (hiv : iv < n.succ), f ⟨iv, hiv⟩ = 0⊢ f i = 0
have hivi : iv < n.succ := lt_of_succ_lt hiv succ n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 = f 0i:Fin n.succiv:ℕhi:∀ (hiv : n✝ < n.succ), f ⟨n✝, hiv⟩ = 0hiv:n✝ + 1 < n.succhivi:iv < n.succ⊢ f ⟨iv + 1, hiv⟩ = 0 n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 = f 0i:Fin n.succhinduc:∀ (iv : ℕ) (hiv : iv < n.succ), f ⟨iv, hiv⟩ = 0⊢ f i = 0
have hi2 := hi hivi succ n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 = f 0i:Fin n.succiv:ℕhi:∀ (hiv : n✝ < n.succ), f ⟨n✝, hiv⟩ = 0hiv:n✝ + 1 < n.succhivi:iv < n.succhi2:f ⟨iv, hivi⟩ = 0⊢ f ⟨iv + 1, hiv⟩ = 0 n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 = f 0i:Fin n.succhinduc:∀ (iv : ℕ) (hiv : iv < n.succ), f ⟨iv, hiv⟩ = 0⊢ f i = 0
have h1 := Pa_evenShiftFst f g ⟨iv, succ_lt_succ_iff.mp hiv⟩ succ n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 = f 0i:Fin n.succiv:ℕhi:∀ (hiv : n✝ < n.succ), f ⟨n✝, hiv⟩ = 0hiv:n✝ + 1 < n.succhivi:iv < n.succhi2:f ⟨iv, hivi⟩ = 0h1:Pa f g (evenShiftFst ⟨iv, ⋯⟩) = f ⟨iv, ⋯⟩.succ + g ⟨iv, ⋯⟩⊢ f ⟨iv + 1, hiv⟩ = 0 n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 = f 0i:Fin n.succhinduc:∀ (iv : ℕ) (hiv : iv < n.succ), f ⟨iv, hiv⟩ = 0⊢ f i = 0
have h2 := Pa_evenShiftSnd f g ⟨iv, succ_lt_succ_iff.mp hiv⟩ succ n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 = f 0i:Fin n.succiv:ℕhi:∀ (hiv : n✝ < n.succ), f ⟨n✝, hiv⟩ = 0hiv:n✝ + 1 < n.succhivi:iv < n.succhi2:f ⟨iv, hivi⟩ = 0h1:Pa f g (evenShiftFst ⟨iv, ⋯⟩) = f ⟨iv, ⋯⟩.succ + g ⟨iv, ⋯⟩h2:Pa f g (evenShiftSnd ⟨iv, ⋯⟩) = -f ⟨iv, ⋯⟩.castSucc - g ⟨iv, ⋯⟩⊢ f ⟨iv + 1, hiv⟩ = 0 n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 = f 0i:Fin n.succhinduc:∀ (iv : ℕ) (hiv : iv < n.succ), f ⟨iv, hiv⟩ = 0⊢ f i = 0
rw [h succ n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 = f 0i:Fin n.succiv:ℕhi:∀ (hiv : n✝ < n.succ), f ⟨n✝, hiv⟩ = 0hiv:n✝ + 1 < n.succhivi:iv < n.succhi2:f ⟨iv, hivi⟩ = 0h1:0 (evenShiftFst ⟨iv, ⋯⟩) = f ⟨iv, ⋯⟩.succ + g ⟨iv, ⋯⟩h2:0 (evenShiftSnd ⟨iv, ⋯⟩) = -f ⟨iv, ⋯⟩.castSucc - g ⟨iv, ⋯⟩⊢ f ⟨iv + 1, hiv⟩ = 0 succ n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 = f 0i:Fin n.succiv:ℕhi:∀ (hiv : n✝ < n.succ), f ⟨n✝, hiv⟩ = 0hiv:n✝ + 1 < n.succhivi:iv < n.succhi2:f ⟨iv, hivi⟩ = 0h1:0 (evenShiftFst ⟨iv, ⋯⟩) = f ⟨iv, ⋯⟩.succ + g ⟨iv, ⋯⟩h2:0 (evenShiftSnd ⟨iv, ⋯⟩) = -f ⟨iv, ⋯⟩.castSucc - g ⟨iv, ⋯⟩⊢ f ⟨iv + 1, hiv⟩ = 0 n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 = f 0i:Fin n.succhinduc:∀ (iv : ℕ) (hiv : iv < n.succ), f ⟨iv, hiv⟩ = 0⊢ f i = 0] at h1 h2succ n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 = f 0i:Fin n.succiv:ℕhi:∀ (hiv : n✝ < n.succ), f ⟨n✝, hiv⟩ = 0hiv:n✝ + 1 < n.succhivi:iv < n.succhi2:f ⟨iv, hivi⟩ = 0h1:0 (evenShiftFst ⟨iv, ⋯⟩) = f ⟨iv, ⋯⟩.succ + g ⟨iv, ⋯⟩h2:0 (evenShiftSnd ⟨iv, ⋯⟩) = -f ⟨iv, ⋯⟩.castSucc - g ⟨iv, ⋯⟩⊢ f ⟨iv + 1, hiv⟩ = 0 n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 = f 0i:Fin n.succhinduc:∀ (iv : ℕ) (hiv : iv < n.succ), f ⟨iv, hiv⟩ = 0⊢ f i = 0
simp only [Fin.succ_mk, Fin.castSucc_mk] at h1 h2 succ n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 = f 0i:Fin n.succiv:ℕhi:∀ (hiv : n✝ < n.succ), f ⟨n✝, hiv⟩ = 0hiv:n✝ + 1 < n.succhivi:iv < n.succhi2:f ⟨iv, hivi⟩ = 0h1:0 (evenShiftFst ⟨iv, ⋯⟩) = f ⟨iv + 1, ⋯⟩ + g ⟨iv, ⋯⟩h2:0 (evenShiftSnd ⟨iv, ⋯⟩) = -f ⟨iv, ⋯⟩ - g ⟨iv, ⋯⟩⊢ f ⟨iv + 1, hiv⟩ = 0 n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 = f 0i:Fin n.succhinduc:∀ (iv : ℕ) (hiv : iv < n.succ), f ⟨iv, hiv⟩ = 0⊢ f i = 0
erw [hi2 succ n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 = f 0i:Fin n.succiv:ℕhi:∀ (hiv : n✝ < n.succ), f ⟨n✝, hiv⟩ = 0hiv:n✝ + 1 < n.succhivi:iv < n.succhi2:f ⟨iv, hivi⟩ = 0h1:0 (evenShiftFst ⟨iv, ⋯⟩) = f ⟨iv + 1, ⋯⟩ + g ⟨iv, ⋯⟩h2:0 (evenShiftSnd ⟨iv, ⋯⟩) = -0 - g ⟨iv, ⋯⟩⊢ f ⟨iv + 1, hiv⟩ = 0 n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 = f 0i:Fin n.succhinduc:∀ (iv : ℕ) (hiv : iv < n.succ), f ⟨iv, hiv⟩ = 0⊢ f i = 0] succ n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 = f 0i:Fin n.succiv:ℕhi:∀ (hiv : n✝ < n.succ), f ⟨n✝, hiv⟩ = 0hiv:n✝ + 1 < n.succhivi:iv < n.succhi2:f ⟨iv, hivi⟩ = 0h1:0 (evenShiftFst ⟨iv, ⋯⟩) = f ⟨iv + 1, ⋯⟩ + g ⟨iv, ⋯⟩h2:0 (evenShiftSnd ⟨iv, ⋯⟩) = -0 - g ⟨iv, ⋯⟩⊢ f ⟨iv + 1, hiv⟩ = 0 n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 = f 0i:Fin n.succhinduc:∀ (iv : ℕ) (hiv : iv < n.succ), f ⟨iv, hiv⟩ = 0⊢ f i = 0 at h2
change 0 = _ at h2 succ n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 = f 0i:Fin n.succiv:ℕhi:∀ (hiv : n✝ < n.succ), f ⟨n✝, hiv⟩ = 0hiv:n✝ + 1 < n.succhivi:iv < n.succhi2:f ⟨iv, hivi⟩ = 0h1:0 (evenShiftFst ⟨iv, ⋯⟩) = f ⟨iv + 1, ⋯⟩ + g ⟨iv, ⋯⟩h2:0 = -0 - g ⟨iv, ⋯⟩⊢ f ⟨iv + 1, hiv⟩ = 0 n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 = f 0i:Fin n.succhinduc:∀ (iv : ℕ) (hiv : iv < n.succ), f ⟨iv, hiv⟩ = 0⊢ f i = 0
simp only [neg_zero, zero_sub, zero_eq_neg] at h2 succ n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 = f 0i:Fin n.succiv:ℕhi:∀ (hiv : n✝ < n.succ), f ⟨n✝, hiv⟩ = 0hiv:n✝ + 1 < n.succhivi:iv < n.succhi2:f ⟨iv, hivi⟩ = 0h1:0 (evenShiftFst ⟨iv, ⋯⟩) = f ⟨iv + 1, ⋯⟩ + g ⟨iv, ⋯⟩h2:g ⟨iv, ⋯⟩ = 0⊢ f ⟨iv + 1, hiv⟩ = 0 n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 = f 0i:Fin n.succhinduc:∀ (iv : ℕ) (hiv : iv < n.succ), f ⟨iv, hiv⟩ = 0⊢ f i = 0
rw [h2 succ n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 = f 0i:Fin n.succiv:ℕhi:∀ (hiv : n✝ < n.succ), f ⟨n✝, hiv⟩ = 0hiv:n✝ + 1 < n.succhivi:iv < n.succhi2:f ⟨iv, hivi⟩ = 0h1:0 (evenShiftFst ⟨iv, ⋯⟩) = f ⟨iv + 1, ⋯⟩ + 0h2:g ⟨iv, ⋯⟩ = 0⊢ f ⟨iv + 1, hiv⟩ = 0 succ n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 = f 0i:Fin n.succiv:ℕhi:∀ (hiv : n✝ < n.succ), f ⟨n✝, hiv⟩ = 0hiv:n✝ + 1 < n.succhivi:iv < n.succhi2:f ⟨iv, hivi⟩ = 0h1:0 (evenShiftFst ⟨iv, ⋯⟩) = f ⟨iv + 1, ⋯⟩ + 0h2:g ⟨iv, ⋯⟩ = 0⊢ f ⟨iv + 1, hiv⟩ = 0 n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 = f 0i:Fin n.succhinduc:∀ (iv : ℕ) (hiv : iv < n.succ), f ⟨iv, hiv⟩ = 0⊢ f i = 0] at h1succ n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 = f 0i:Fin n.succiv:ℕhi:∀ (hiv : n✝ < n.succ), f ⟨n✝, hiv⟩ = 0hiv:n✝ + 1 < n.succhivi:iv < n.succhi2:f ⟨iv, hivi⟩ = 0h1:0 (evenShiftFst ⟨iv, ⋯⟩) = f ⟨iv + 1, ⋯⟩ + 0h2:g ⟨iv, ⋯⟩ = 0⊢ f ⟨iv + 1, hiv⟩ = 0 n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 = f 0i:Fin n.succhinduc:∀ (iv : ℕ) (hiv : iv < n.succ), f ⟨iv, hiv⟩ = 0⊢ f i = 0
exact right_eq_add.mp h1 n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 = f 0i:Fin n.succhinduc:∀ (iv : ℕ) (hiv : iv < n.succ), f ⟨iv, hiv⟩ = 0⊢ f i = 0 n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0h₃:0 = f 0i:Fin n.succhinduc:∀ (iv : ℕ) (hiv : iv < n.succ), f ⟨iv, hiv⟩ = 0⊢ f i = 0
exact hinduc i.val i.prop All goals completed! 🐙
lemma Pa_zero! (f : Fin n.succ → ℚ) (g : Fin n → ℚ) (h : Pa f g = 0) :
∀ i, g i = 0 := by n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0⊢ ∀ (i : Fin n), g i = 0
have hf := Pa_zero f g h n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:Pa f g = 0hf:∀ (i : Fin n.succ), f i = 0⊢ ∀ (i : Fin n), g i = 0
rw [Pa, n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:P f + P! g = 0hf:∀ (i : Fin n.succ), f i = 0⊢ ∀ (i : Fin n), g i = 0 n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:∑ i, f i • basisAsCharges i + P! g = 0hf:∀ (i : Fin n.succ), f i = 0⊢ ∀ (i : Fin n), g i = 0 P n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:∑ i, f i • basisAsCharges i + P! g = 0hf:∀ (i : Fin n.succ), f i = 0⊢ ∀ (i : Fin n), g i = 0 n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:∑ i, f i • basisAsCharges i + P! g = 0hf:∀ (i : Fin n.succ), f i = 0⊢ ∀ (i : Fin n), g i = 0] at h n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:∑ i, f i • basisAsCharges i + P! g = 0hf:∀ (i : Fin n.succ), f i = 0⊢ ∀ (i : Fin n), g i = 0
simp only [succ_eq_add_one, hf, zero_smul, sum_const_zero, zero_add] at h n:ℕf:Fin n.succ → ℚg:Fin n → ℚhf:∀ (i : Fin n.succ), f i = 0h:P! g = 0⊢ ∀ (i : Fin n), g i = 0
exact P!_zero g h All goals completed! 🐙E.5. The inclusion of the span of the basis into linear solutions
A point in the span of the whole basis.
lemma Pa'_P'_P!' (f : (Fin n.succ) ⊕ (Fin n) → ℚ) :
Pa' f = P' (f ∘ Sum.inl) + P!' (f ∘ Sum.inr) := by n:ℕf:Fin n.succ ⊕ Fin n → ℚ⊢ Pa' f = P' (f ∘ Sum.inl) + P!' (f ∘ Sum.inr)
exact Fintype.sum_sum_type _ All goals completed! 🐙E.6. The combined basis vectors are linearly independent
theorem basisa_linear_independent : LinearIndependent ℚ (@basisa n) := by n:ℕ⊢ LinearIndependent ℚ basisa
apply Fintype.linearIndependent_iff.mpr n:ℕ⊢ ∀ (g : Fin n.succ ⊕ Fin n → ℚ), ∑ i, g i • basisa i = 0 → ∀ (i : Fin n.succ ⊕ Fin n), g i = 0
intro f h n:ℕf:Fin n.succ ⊕ Fin n → ℚh:∑ i, f i • basisa i = 0⊢ ∀ (i : Fin n.succ ⊕ Fin n), f i = 0
change Pa' f = 0 at h n:ℕf:Fin n.succ ⊕ Fin n → ℚh:Pa' f = 0⊢ ∀ (i : Fin n.succ ⊕ Fin n), f i = 0
have h1 : (Pa' f).val = 0 := congrArg _ h n:ℕf:Fin n.succ ⊕ Fin n → ℚh:Pa' f = 0h1:(Pa' f).val = 0⊢ ∀ (i : Fin n.succ ⊕ Fin n), f i = 0
rw [Pa'_P'_P!' n:ℕf:Fin n.succ ⊕ Fin n → ℚh:Pa' f = 0h1:(P' (f ∘ Sum.inl) + P!' (f ∘ Sum.inr)).val = 0⊢ ∀ (i : Fin n.succ ⊕ Fin n), f i = 0 n:ℕf:Fin n.succ ⊕ Fin n → ℚh:Pa' f = 0h1:(P' (f ∘ Sum.inl) + P!' (f ∘ Sum.inr)).val = 0⊢ ∀ (i : Fin n.succ ⊕ Fin n), f i = 0] at h1 n:ℕf:Fin n.succ ⊕ Fin n → ℚh:Pa' f = 0h1:(P' (f ∘ Sum.inl) + P!' (f ∘ Sum.inr)).val = 0⊢ ∀ (i : Fin n.succ ⊕ Fin n), f i = 0
simp only [ACCSystemLinear.linSolsAddCommMonoid_add_val, P'_val, P!'_val] at h1 n:ℕf:Fin n.succ ⊕ Fin n → ℚh:Pa' f = 0h1:P (f ∘ Sum.inl) + P! (f ∘ Sum.inr) = 0⊢ ∀ (i : Fin n.succ ⊕ Fin n), f i = 0
have hf := Pa_zero (f ∘ Sum.inl) (f ∘ Sum.inr) h1 n:ℕf:Fin n.succ ⊕ Fin n → ℚh:Pa' f = 0h1:P (f ∘ Sum.inl) + P! (f ∘ Sum.inr) = 0hf:∀ (i : Fin n.succ), (f ∘ Sum.inl) i = 0⊢ ∀ (i : Fin n.succ ⊕ Fin n), f i = 0
have hg := Pa_zero! (f ∘ Sum.inl) (f ∘ Sum.inr) h1 n:ℕf:Fin n.succ ⊕ Fin n → ℚh:Pa' f = 0h1:P (f ∘ Sum.inl) + P! (f ∘ Sum.inr) = 0hf:∀ (i : Fin n.succ), (f ∘ Sum.inl) i = 0hg:∀ (i : Fin n), (f ∘ Sum.inr) i = 0⊢ ∀ (i : Fin n.succ ⊕ Fin n), f i = 0
rintro (i | i) inl n:ℕf:Fin n.succ ⊕ Fin n → ℚh:Pa' f = 0h1:P (f ∘ Sum.inl) + P! (f ∘ Sum.inr) = 0hf:∀ (i : Fin n.succ), (f ∘ Sum.inl) i = 0hg:∀ (i : Fin n), (f ∘ Sum.inr) i = 0i:Fin n.succ⊢ f (Sum.inl i) = 0inr n:ℕf:Fin n.succ ⊕ Fin n → ℚh:Pa' f = 0h1:P (f ∘ Sum.inl) + P! (f ∘ Sum.inr) = 0hf:∀ (i : Fin n.succ), (f ∘ Sum.inl) i = 0hg:∀ (i : Fin n), (f ∘ Sum.inr) i = 0i:Fin n⊢ f (Sum.inr i) = 0
· inl n:ℕf:Fin n.succ ⊕ Fin n → ℚh:Pa' f = 0h1:P (f ∘ Sum.inl) + P! (f ∘ Sum.inr) = 0hf:∀ (i : Fin n.succ), (f ∘ Sum.inl) i = 0hg:∀ (i : Fin n), (f ∘ Sum.inr) i = 0i:Fin n.succ⊢ f (Sum.inl i) = 0 exact hf i All goals completed! 🐙
· inr n:ℕf:Fin n.succ ⊕ Fin n → ℚh:Pa' f = 0h1:P (f ∘ Sum.inl) + P! (f ∘ Sum.inr) = 0hf:∀ (i : Fin n.succ), (f ∘ Sum.inl) i = 0hg:∀ (i : Fin n), (f ∘ Sum.inr) i = 0i:Fin n⊢ f (Sum.inr i) = 0 exact hg i All goals completed! 🐙E.7. Injectivity of the inclusion into linear solutions
lemma Pa'_eq (f f' : (Fin n.succ) ⊕ (Fin n) → ℚ) : Pa' f = Pa' f' ↔ f = f' := by n:ℕf:Fin n.succ ⊕ Fin n → ℚf':Fin n.succ ⊕ Fin n → ℚ⊢ Pa' f = Pa' f' ↔ f = f'
refine Iff.intro (fun h => (funext (fun i => ?_))) (fun h => ?_) refine_1 n:ℕf:Fin n.succ ⊕ Fin n → ℚf':Fin n.succ ⊕ Fin n → ℚh:Pa' f = Pa' f'i:Fin n.succ ⊕ Fin n⊢ f i = f' irefine_2 n:ℕf:Fin n.succ ⊕ Fin n → ℚf':Fin n.succ ⊕ Fin n → ℚh:f = f'⊢ Pa' f = Pa' f'
· refine_1 n:ℕf:Fin n.succ ⊕ Fin n → ℚf':Fin n.succ ⊕ Fin n → ℚh:Pa' f = Pa' f'i:Fin n.succ ⊕ Fin n⊢ f i = f' i rw [Pa', refine_1 n:ℕf:Fin n.succ ⊕ Fin n → ℚf':Fin n.succ ⊕ Fin n → ℚh:∑ i, f i • basisa i = Pa' f'i:Fin n.succ ⊕ Fin n⊢ f i = f' i refine_1 n:ℕf:Fin n.succ ⊕ Fin n → ℚf':Fin n.succ ⊕ Fin n → ℚh:∑ i, f i • basisa i = ∑ i, f' i • basisa ii:Fin n.succ ⊕ Fin n⊢ f i = f' i Pa' refine_1 n:ℕf:Fin n.succ ⊕ Fin n → ℚf':Fin n.succ ⊕ Fin n → ℚh:∑ i, f i • basisa i = ∑ i, f' i • basisa ii:Fin n.succ ⊕ Fin n⊢ f i = f' i refine_1 n:ℕf:Fin n.succ ⊕ Fin n → ℚf':Fin n.succ ⊕ Fin n → ℚh:∑ i, f i • basisa i = ∑ i, f' i • basisa ii:Fin n.succ ⊕ Fin n⊢ f i = f' i] at hrefine_1 n:ℕf:Fin n.succ ⊕ Fin n → ℚf':Fin n.succ ⊕ Fin n → ℚh:∑ i, f i • basisa i = ∑ i, f' i • basisa ii:Fin n.succ ⊕ Fin n⊢ f i = f' i
have h1 : ∑ i : Fin (succ n) ⊕ Fin n, (f i + (- f' i)) • basisa i = 0 := by n:ℕf:Fin n.succ ⊕ Fin n → ℚf':Fin n.succ ⊕ Fin n → ℚ⊢ Pa' f = Pa' f' ↔ f = f' refine_1 n:ℕf:Fin n.succ ⊕ Fin n → ℚf':Fin n.succ ⊕ Fin n → ℚh:∑ i, f i • basisa i = ∑ i, f' i • basisa ii:Fin n.succ ⊕ Fin nh1:∑ i, (f i + -f' i) • basisa i = 0⊢ f i = f' i
simp only [add_smul, neg_smul] n:ℕf:Fin n.succ ⊕ Fin n → ℚf':Fin n.succ ⊕ Fin n → ℚh:∑ i, f i • basisa i = ∑ i, f' i • basisa ii:Fin n.succ ⊕ Fin n⊢ ∑ x, (f x • basisa x + -(f' x • basisa x)) = 0refine_1 n:ℕf:Fin n.succ ⊕ Fin n → ℚf':Fin n.succ ⊕ Fin n → ℚh:∑ i, f i • basisa i = ∑ i, f' i • basisa ii:Fin n.succ ⊕ Fin nh1:∑ i, (f i + -f' i) • basisa i = 0⊢ f i = f' i
rw [Finset.sum_add_distrib n:ℕf:Fin n.succ ⊕ Fin n → ℚf':Fin n.succ ⊕ Fin n → ℚh:∑ i, f i • basisa i = ∑ i, f' i • basisa ii:Fin n.succ ⊕ Fin n⊢ ∑ x, f x • basisa x + ∑ x, -(f' x • basisa x) = 0 n:ℕf:Fin n.succ ⊕ Fin n → ℚf':Fin n.succ ⊕ Fin n → ℚh:∑ i, f i • basisa i = ∑ i, f' i • basisa ii:Fin n.succ ⊕ Fin n⊢ ∑ x, f x • basisa x + ∑ x, -(f' x • basisa x) = 0refine_1 n:ℕf:Fin n.succ ⊕ Fin n → ℚf':Fin n.succ ⊕ Fin n → ℚh:∑ i, f i • basisa i = ∑ i, f' i • basisa ii:Fin n.succ ⊕ Fin nh1:∑ i, (f i + -f' i) • basisa i = 0⊢ f i = f' i] n:ℕf:Fin n.succ ⊕ Fin n → ℚf':Fin n.succ ⊕ Fin n → ℚh:∑ i, f i • basisa i = ∑ i, f' i • basisa ii:Fin n.succ ⊕ Fin n⊢ ∑ x, f x • basisa x + ∑ x, -(f' x • basisa x) = 0refine_1 n:ℕf:Fin n.succ ⊕ Fin n → ℚf':Fin n.succ ⊕ Fin n → ℚh:∑ i, f i • basisa i = ∑ i, f' i • basisa ii:Fin n.succ ⊕ Fin nh1:∑ i, (f i + -f' i) • basisa i = 0⊢ f i = f' i
rw [h n:ℕf:Fin n.succ ⊕ Fin n → ℚf':Fin n.succ ⊕ Fin n → ℚh:∑ i, f i • basisa i = ∑ i, f' i • basisa ii:Fin n.succ ⊕ Fin n⊢ ∑ i, f' i • basisa i + ∑ x, -(f' x • basisa x) = 0 n:ℕf:Fin n.succ ⊕ Fin n → ℚf':Fin n.succ ⊕ Fin n → ℚh:∑ i, f i • basisa i = ∑ i, f' i • basisa ii:Fin n.succ ⊕ Fin n⊢ ∑ i, f' i • basisa i + ∑ x, -(f' x • basisa x) = 0refine_1 n:ℕf:Fin n.succ ⊕ Fin n → ℚf':Fin n.succ ⊕ Fin n → ℚh:∑ i, f i • basisa i = ∑ i, f' i • basisa ii:Fin n.succ ⊕ Fin nh1:∑ i, (f i + -f' i) • basisa i = 0⊢ f i = f' i] n:ℕf:Fin n.succ ⊕ Fin n → ℚf':Fin n.succ ⊕ Fin n → ℚh:∑ i, f i • basisa i = ∑ i, f' i • basisa ii:Fin n.succ ⊕ Fin n⊢ ∑ i, f' i • basisa i + ∑ x, -(f' x • basisa x) = 0refine_1 n:ℕf:Fin n.succ ⊕ Fin n → ℚf':Fin n.succ ⊕ Fin n → ℚh:∑ i, f i • basisa i = ∑ i, f' i • basisa ii:Fin n.succ ⊕ Fin nh1:∑ i, (f i + -f' i) • basisa i = 0⊢ f i = f' i
rw [← Finset.sum_add_distrib n:ℕf:Fin n.succ ⊕ Fin n → ℚf':Fin n.succ ⊕ Fin n → ℚh:∑ i, f i • basisa i = ∑ i, f' i • basisa ii:Fin n.succ ⊕ Fin n⊢ ∑ x, (f' x • basisa x + -(f' x • basisa x)) = 0 n:ℕf:Fin n.succ ⊕ Fin n → ℚf':Fin n.succ ⊕ Fin n → ℚh:∑ i, f i • basisa i = ∑ i, f' i • basisa ii:Fin n.succ ⊕ Fin n⊢ ∑ x, (f' x • basisa x + -(f' x • basisa x)) = 0refine_1 n:ℕf:Fin n.succ ⊕ Fin n → ℚf':Fin n.succ ⊕ Fin n → ℚh:∑ i, f i • basisa i = ∑ i, f' i • basisa ii:Fin n.succ ⊕ Fin nh1:∑ i, (f i + -f' i) • basisa i = 0⊢ f i = f' i] n:ℕf:Fin n.succ ⊕ Fin n → ℚf':Fin n.succ ⊕ Fin n → ℚh:∑ i, f i • basisa i = ∑ i, f' i • basisa ii:Fin n.succ ⊕ Fin n⊢ ∑ x, (f' x • basisa x + -(f' x • basisa x)) = 0refine_1 n:ℕf:Fin n.succ ⊕ Fin n → ℚf':Fin n.succ ⊕ Fin n → ℚh:∑ i, f i • basisa i = ∑ i, f' i • basisa ii:Fin n.succ ⊕ Fin nh1:∑ i, (f i + -f' i) • basisa i = 0⊢ f i = f' i
simprefine_1 n:ℕf:Fin n.succ ⊕ Fin n → ℚf':Fin n.succ ⊕ Fin n → ℚh:∑ i, f i • basisa i = ∑ i, f' i • basisa ii:Fin n.succ ⊕ Fin nh1:∑ i, (f i + -f' i) • basisa i = 0⊢ f i = f' irefine_1 n:ℕf:Fin n.succ ⊕ Fin n → ℚf':Fin n.succ ⊕ Fin n → ℚh:∑ i, f i • basisa i = ∑ i, f' i • basisa ii:Fin n.succ ⊕ Fin nh1:∑ i, (f i + -f' i) • basisa i = 0⊢ f i = f' i
have h2 := Fintype.linearIndependent_iff.mp basisa_linear_independent _ h1 refine_1 n:ℕf:Fin n.succ ⊕ Fin n → ℚf':Fin n.succ ⊕ Fin n → ℚh:∑ i, f i • basisa i = ∑ i, f' i • basisa ii:Fin n.succ ⊕ Fin nh1:∑ i, (f i + -f' i) • basisa i = 0h2:∀ (i : Fin n.succ ⊕ Fin n), f i + -f' i = 0⊢ f i = f' i
linarith [h2 i] All goals completed! 🐙
· refine_2 n:ℕf:Fin n.succ ⊕ Fin n → ℚf':Fin n.succ ⊕ Fin n → ℚh:f = f'⊢ Pa' f = Pa' f' rw [h refine_2 n:ℕf:Fin n.succ ⊕ Fin n → ℚf':Fin n.succ ⊕ Fin n → ℚh:f = f'⊢ Pa' f' = Pa' f' All goals completed! 🐙] All goals completed! 🐙
lemma Pa'_elim_eq_iff (g g' : Fin n.succ → ℚ) (f f' : Fin n → ℚ) :
Pa' (Sum.elim g f) = Pa' (Sum.elim g' f') ↔ Pa g f = Pa g' f' := by n:ℕg:Fin n.succ → ℚg':Fin n.succ → ℚf:Fin n → ℚf':Fin n → ℚ⊢ Pa' (Sum.elim g f) = Pa' (Sum.elim g' f') ↔ Pa g f = Pa g' f'
refine Iff.intro (fun h => ?_) (fun h => ?_) refine_1 n:ℕg:Fin n.succ → ℚg':Fin n.succ → ℚf:Fin n → ℚf':Fin n → ℚh:Pa' (Sum.elim g f) = Pa' (Sum.elim g' f')⊢ Pa g f = Pa g' f'refine_2 n:ℕg:Fin n.succ → ℚg':Fin n.succ → ℚf:Fin n → ℚf':Fin n → ℚh:Pa g f = Pa g' f'⊢ Pa' (Sum.elim g f) = Pa' (Sum.elim g' f')
· refine_1 n:ℕg:Fin n.succ → ℚg':Fin n.succ → ℚf:Fin n → ℚf':Fin n → ℚh:Pa' (Sum.elim g f) = Pa' (Sum.elim g' f')⊢ Pa g f = Pa g' f' rw [Pa'_eq, refine_1 n:ℕg:Fin n.succ → ℚg':Fin n.succ → ℚf:Fin n → ℚf':Fin n → ℚh:Sum.elim g f = Sum.elim g' f'⊢ Pa g f = Pa g' f' refine_1 n:ℕg:Fin n.succ → ℚg':Fin n.succ → ℚf:Fin n → ℚf':Fin n → ℚh:g = g' ∧ f = f'⊢ Pa g f = Pa g' f' Sum.elim_eq_iff refine_1 n:ℕg:Fin n.succ → ℚg':Fin n.succ → ℚf:Fin n → ℚf':Fin n → ℚh:g = g' ∧ f = f'⊢ Pa g f = Pa g' f' refine_1 n:ℕg:Fin n.succ → ℚg':Fin n.succ → ℚf:Fin n → ℚf':Fin n → ℚh:g = g' ∧ f = f'⊢ Pa g f = Pa g' f'] at hrefine_1 n:ℕg:Fin n.succ → ℚg':Fin n.succ → ℚf:Fin n → ℚf':Fin n → ℚh:g = g' ∧ f = f'⊢ Pa g f = Pa g' f'
rw [h.left, refine_1 n:ℕg:Fin n.succ → ℚg':Fin n.succ → ℚf:Fin n → ℚf':Fin n → ℚh:g = g' ∧ f = f'⊢ Pa g' f = Pa g' f' All goals completed! 🐙 h.right refine_1 n:ℕg:Fin n.succ → ℚg':Fin n.succ → ℚf:Fin n → ℚf':Fin n → ℚh:g = g' ∧ f = f'⊢ Pa g' f' = Pa g' f' All goals completed! 🐙] All goals completed! 🐙
· refine_2 n:ℕg:Fin n.succ → ℚg':Fin n.succ → ℚf:Fin n → ℚf':Fin n → ℚh:Pa g f = Pa g' f'⊢ Pa' (Sum.elim g f) = Pa' (Sum.elim g' f') apply ACCSystemLinear.LinSols.ext refine_2 n:ℕg:Fin n.succ → ℚg':Fin n.succ → ℚf:Fin n → ℚf':Fin n → ℚh:Pa g f = Pa g' f'⊢ (Pa' (Sum.elim g f)).val = (Pa' (Sum.elim g' f')).val
rw [Pa'_P'_P!', refine_2 n:ℕg:Fin n.succ → ℚg':Fin n.succ → ℚf:Fin n → ℚf':Fin n → ℚh:Pa g f = Pa g' f'⊢ (P' (Sum.elim g f ∘ Sum.inl) + P!' (Sum.elim g f ∘ Sum.inr)).val = (Pa' (Sum.elim g' f')).val refine_2 n:ℕg:Fin n.succ → ℚg':Fin n.succ → ℚf:Fin n → ℚf':Fin n → ℚh:Pa g f = Pa g' f'⊢ (P' (Sum.elim g f ∘ Sum.inl) + P!' (Sum.elim g f ∘ Sum.inr)).val =
(P' (Sum.elim g' f' ∘ Sum.inl) + P!' (Sum.elim g' f' ∘ Sum.inr)).val Pa'_P'_P!' refine_2 n:ℕg:Fin n.succ → ℚg':Fin n.succ → ℚf:Fin n → ℚf':Fin n → ℚh:Pa g f = Pa g' f'⊢ (P' (Sum.elim g f ∘ Sum.inl) + P!' (Sum.elim g f ∘ Sum.inr)).val =
(P' (Sum.elim g' f' ∘ Sum.inl) + P!' (Sum.elim g' f' ∘ Sum.inr)).valrefine_2 n:ℕg:Fin n.succ → ℚg':Fin n.succ → ℚf:Fin n → ℚf':Fin n → ℚh:Pa g f = Pa g' f'⊢ (P' (Sum.elim g f ∘ Sum.inl) + P!' (Sum.elim g f ∘ Sum.inr)).val =
(P' (Sum.elim g' f' ∘ Sum.inl) + P!' (Sum.elim g' f' ∘ Sum.inr)).val]refine_2 n:ℕg:Fin n.succ → ℚg':Fin n.succ → ℚf:Fin n → ℚf':Fin n → ℚh:Pa g f = Pa g' f'⊢ (P' (Sum.elim g f ∘ Sum.inl) + P!' (Sum.elim g f ∘ Sum.inr)).val =
(P' (Sum.elim g' f' ∘ Sum.inl) + P!' (Sum.elim g' f' ∘ Sum.inr)).val
simp only [succ_eq_add_one, ACCSystemLinear.linSolsAddCommMonoid_add_val, P'_val, P!'_val] refine_2 n:ℕg:Fin n.succ → ℚg':Fin n.succ → ℚf:Fin n → ℚf':Fin n → ℚh:Pa g f = Pa g' f'⊢ P (Sum.elim g f ∘ Sum.inl) + P! (Sum.elim g f ∘ Sum.inr) = P (Sum.elim g' f' ∘ Sum.inl) + P! (Sum.elim g' f' ∘ Sum.inr)
exact h All goals completed! 🐙
lemma Pa_eq (g g' : Fin n.succ → ℚ) (f f' : Fin n → ℚ) :
Pa g f = Pa g' f' ↔ g = g' ∧ f = f' := by n:ℕg:Fin n.succ → ℚg':Fin n.succ → ℚf:Fin n → ℚf':Fin n → ℚ⊢ Pa g f = Pa g' f' ↔ g = g' ∧ f = f'
rw [← Pa'_elim_eq_iff, n:ℕg:Fin n.succ → ℚg':Fin n.succ → ℚf:Fin n → ℚf':Fin n → ℚ⊢ Pa' (Sum.elim g f) = Pa' (Sum.elim g' f') ↔ g = g' ∧ f = f' n:ℕg:Fin n.succ → ℚg':Fin n.succ → ℚf:Fin n → ℚf':Fin n → ℚ⊢ Pa' (Sum.elim g f) = Pa' (Sum.elim g' f') ↔ Sum.elim g f = Sum.elim g' f' ← Sum.elim_eq_iff n:ℕg:Fin n.succ → ℚg':Fin n.succ → ℚf:Fin n → ℚf':Fin n → ℚ⊢ Pa' (Sum.elim g f) = Pa' (Sum.elim g' f') ↔ Sum.elim g f = Sum.elim g' f' n:ℕg:Fin n.succ → ℚg':Fin n.succ → ℚf:Fin n → ℚf':Fin n → ℚ⊢ Pa' (Sum.elim g f) = Pa' (Sum.elim g' f') ↔ Sum.elim g f = Sum.elim g' f'] n:ℕg:Fin n.succ → ℚg':Fin n.succ → ℚf:Fin n → ℚf':Fin n → ℚ⊢ Pa' (Sum.elim g f) = Pa' (Sum.elim g' f') ↔ Sum.elim g f = Sum.elim g' f'
exact Pa'_eq _ _ All goals completed! 🐙E.8. Cardinality of the basis
lemma basisa_card : Fintype.card ((Fin n.succ) ⊕ (Fin n)) =
Module.finrank ℚ (PureU1 (2 * n.succ)).LinSols := by n:ℕ⊢ Fintype.card (Fin n.succ ⊕ Fin n) = finrank ℚ (PureU1 (2 * n.succ)).LinSols
erw [BasisLinear.finrank_AnomalyFreeLinear n:ℕ⊢ Fintype.card (Fin n.succ ⊕ Fin n) = Nat.mul 2 n + 1] n:ℕ⊢ Fintype.card (Fin n.succ ⊕ Fin n) = Nat.mul 2 n + 1
simp only [Fintype.card_sum, Fintype.card_fin, mul_eq] n:ℕ⊢ n.succ + n = 2 * n + 1
exact split_odd n All goals completed! 🐙E.9. The basis vectors as a basis
F. Every Lienar solution is the sum of a point from each plane
lemma span_basis (S : (PureU1 (2 * n.succ)).LinSols) :
∃ (g : Fin n.succ → ℚ) (f : Fin n → ℚ), S.val = P g + P! f := by n:ℕS:(PureU1 (2 * n.succ)).LinSols⊢ ∃ g f, S.val = P g + P! f
have h := (Submodule.mem_span_range_iff_exists_fun ℚ).mp (Basis.mem_span basisaAsBasis S) n:ℕS:(PureU1 (2 * n.succ)).LinSolsh:∃ c, ∑ i, c i • basisaAsBasis i = S⊢ ∃ g f, S.val = P g + P! f
obtain ⟨f, hf⟩ := h n:ℕS:(PureU1 (2 * n.succ)).LinSolsf:Fin n.succ ⊕ Fin n → ℚhf:∑ i, f i • basisaAsBasis i = S⊢ ∃ g f, S.val = P g + P! f
simp only [succ_eq_add_one, basisaAsBasis, coe_basisOfLinearIndependentOfCardEqFinrank,
Fintype.sum_sum_type] at hf n:ℕS:(PureU1 (2 * n.succ)).LinSolsf:Fin n.succ ⊕ Fin n → ℚhf:∑ a₁, f (Sum.inl a₁) • basisa (Sum.inl a₁) + ∑ a₂, f (Sum.inr a₂) • basisa (Sum.inr a₂) = S⊢ ∃ g f, S.val = P g + P! f
change P' _ + P!' _ = S at hf n:ℕS:(PureU1 (2 * n.succ)).LinSolsf:Fin n.succ ⊕ Fin n → ℚhf:((P' fun i => f (Sum.inl i)) + P!' fun i => f (Sum.inr i)) = S⊢ ∃ g f, S.val = P g + P! f
use f ∘ Sum.inl h n:ℕS:(PureU1 (2 * n.succ)).LinSolsf:Fin n.succ ⊕ Fin n → ℚhf:((P' fun i => f (Sum.inl i)) + P!' fun i => f (Sum.inr i)) = S⊢ ∃ f_1, S.val = P (f ∘ Sum.inl) + P! f_1
use f ∘ Sum.inr h n:ℕS:(PureU1 (2 * n.succ)).LinSolsf:Fin n.succ ⊕ Fin n → ℚhf:((P' fun i => f (Sum.inl i)) + P!' fun i => f (Sum.inr i)) = S⊢ S.val = P (f ∘ Sum.inl) + P! (f ∘ Sum.inr)
rw [← hf h n:ℕS:(PureU1 (2 * n.succ)).LinSolsf:Fin n.succ ⊕ Fin n → ℚhf:((P' fun i => f (Sum.inl i)) + P!' fun i => f (Sum.inr i)) = S⊢ ((P' fun i => f (Sum.inl i)) + P!' fun i => f (Sum.inr i)).val = P (f ∘ Sum.inl) + P! (f ∘ Sum.inr) h n:ℕS:(PureU1 (2 * n.succ)).LinSolsf:Fin n.succ ⊕ Fin n → ℚhf:((P' fun i => f (Sum.inl i)) + P!' fun i => f (Sum.inr i)) = S⊢ ((P' fun i => f (Sum.inl i)) + P!' fun i => f (Sum.inr i)).val = P (f ∘ Sum.inl) + P! (f ∘ Sum.inr)] h n:ℕS:(PureU1 (2 * n.succ)).LinSolsf:Fin n.succ ⊕ Fin n → ℚhf:((P' fun i => f (Sum.inl i)) + P!' fun i => f (Sum.inr i)) = S⊢ ((P' fun i => f (Sum.inl i)) + P!' fun i => f (Sum.inr i)).val = P (f ∘ Sum.inl) + P! (f ∘ Sum.inr)
simp only [succ_eq_add_one, ACCSystemLinear.linSolsAddCommMonoid_add_val, P'_val, P!'_val] h n:ℕS:(PureU1 (2 * n.succ)).LinSolsf:Fin n.succ ⊕ Fin n → ℚhf:((P' fun i => f (Sum.inl i)) + P!' fun i => f (Sum.inr i)) = S⊢ ((P fun i => f (Sum.inl i)) + P! fun i => f (Sum.inr i)) = P (f ∘ Sum.inl) + P! (f ∘ Sum.inr)
rfl All goals completed! 🐙F.1. Relation under permutations
lemma span_basis_swap! {S : (PureU1 (2 * n.succ)).LinSols} (j : Fin n)
(hS : ((FamilyPermutations (2 * n.succ)).linSolRep
(Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S') (g : Fin n.succ → ℚ) (f : Fin n → ℚ)
(h : S.val = P g + P! f) : ∃ (g' : Fin n.succ → ℚ) (f' : Fin n → ℚ),
S'.val = P g' + P! f' ∧ P! f' = P! f +
(S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j ∧ g' = g := by n:ℕS':(PureU1 (2 * n.succ)).LinSolsS:(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'g:Fin n.succ → ℚf:Fin n → ℚh:S.val = P g + P! f⊢ ∃ g' f',
S'.val = P g' + P! f' ∧ P! f' = P! f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j ∧ g' = g
let X := P! f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j n:ℕS':(PureU1 (2 * n.succ)).LinSolsS:(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'g:Fin n.succ → ℚf:Fin n → ℚh:S.val = P g + P! fX:(PureU1 (2 * n.succ)).Charges := P! f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j⊢ ∃ g' f',
S'.val = P g' + P! f' ∧ P! f' = P! f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j ∧ g' = g
have hX : X ∈ Submodule.span ℚ (Set.range (basis!AsCharges)) := by
apply Submodule.add_mem h₁ n:ℕS':(PureU1 (2 * n.succ)).LinSolsS:(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'g:Fin n.succ → ℚf:Fin n → ℚh:S.val = P g + P! fX:(PureU1 (2 * n.succ)).Charges := P! f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j⊢ P! f ∈ Submodule.span ℚ (Set.range basis!AsCharges)h₂ n:ℕS':(PureU1 (2 * n.succ)).LinSolsS:(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'g:Fin n.succ → ℚf:Fin n → ℚh:S.val = P g + P! fX:(PureU1 (2 * n.succ)).Charges := P! f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j⊢ (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j ∈ Submodule.span ℚ (Set.range basis!AsCharges) n:ℕS':(PureU1 (2 * n.succ)).LinSolsS:(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'g:Fin n.succ → ℚf:Fin n → ℚh:S.val = P g + P! fX:(PureU1 (2 * n.succ)).Charges := P! f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges jhX:X ∈ Submodule.span ℚ (Set.range basis!AsCharges)⊢ ∃ g' f',
S'.val = P g' + P! f' ∧ P! f' = P! f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j ∧ g' = g
exact (P!_in_span f) h₂ n:ℕS':(PureU1 (2 * n.succ)).LinSolsS:(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'g:Fin n.succ → ℚf:Fin n → ℚh:S.val = P g + P! fX:(PureU1 (2 * n.succ)).Charges := P! f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j⊢ (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j ∈ Submodule.span ℚ (Set.range basis!AsCharges) n:ℕS':(PureU1 (2 * n.succ)).LinSolsS:(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'g:Fin n.succ → ℚf:Fin n → ℚh:S.val = P g + P! fX:(PureU1 (2 * n.succ)).Charges := P! f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges jhX:X ∈ Submodule.span ℚ (Set.range basis!AsCharges)⊢ ∃ g' f',
S'.val = P g' + P! f' ∧ P! f' = P! f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j ∧ g' = g
exact (smul_basis!AsCharges_in_span S j) n:ℕS':(PureU1 (2 * n.succ)).LinSolsS:(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'g:Fin n.succ → ℚf:Fin n → ℚh:S.val = P g + P! fX:(PureU1 (2 * n.succ)).Charges := P! f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges jhX:X ∈ Submodule.span ℚ (Set.range basis!AsCharges)⊢ ∃ g' f',
S'.val = P g' + P! f' ∧ P! f' = P! f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j ∧ g' = g n:ℕS':(PureU1 (2 * n.succ)).LinSolsS:(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'g:Fin n.succ → ℚf:Fin n → ℚh:S.val = P g + P! fX:(PureU1 (2 * n.succ)).Charges := P! f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges jhX:X ∈ Submodule.span ℚ (Set.range basis!AsCharges)⊢ ∃ g' f',
S'.val = P g' + P! f' ∧ P! f' = P! f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j ∧ g' = g
have hXsum := (Submodule.mem_span_range_iff_exists_fun ℚ).mp hX n:ℕS':(PureU1 (2 * n.succ)).LinSolsS:(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'g:Fin n.succ → ℚf:Fin n → ℚh:S.val = P g + P! fX:(PureU1 (2 * n.succ)).Charges := P! f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges jhX:X ∈ Submodule.span ℚ (Set.range basis!AsCharges)hXsum:∃ c, ∑ i, c i • basis!AsCharges i = X⊢ ∃ g' f',
S'.val = P g' + P! f' ∧ P! f' = P! f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j ∧ g' = g
obtain ⟨f', hf'⟩ := hXsum n:ℕS':(PureU1 (2 * n.succ)).LinSolsS:(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'g:Fin n.succ → ℚf:Fin n → ℚh:S.val = P g + P! fX:(PureU1 (2 * n.succ)).Charges := P! f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges jhX:X ∈ Submodule.span ℚ (Set.range basis!AsCharges)f':Fin n → ℚhf':∑ i, f' i • basis!AsCharges i = X⊢ ∃ g' f',
S'.val = P g' + P! f' ∧ P! f' = P! f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j ∧ g' = g
use g h n:ℕS':(PureU1 (2 * n.succ)).LinSolsS:(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'g:Fin n.succ → ℚf:Fin n → ℚh:S.val = P g + P! fX:(PureU1 (2 * n.succ)).Charges := P! f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges jhX:X ∈ Submodule.span ℚ (Set.range basis!AsCharges)f':Fin n → ℚhf':∑ i, f' i • basis!AsCharges i = X⊢ ∃ f',
S'.val = P g + P! f' ∧ P! f' = P! f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j ∧ g = g
use f' h n:ℕS':(PureU1 (2 * n.succ)).LinSolsS:(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'g:Fin n.succ → ℚf:Fin n → ℚh:S.val = P g + P! fX:(PureU1 (2 * n.succ)).Charges := P! f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges jhX:X ∈ Submodule.span ℚ (Set.range basis!AsCharges)f':Fin n → ℚhf':∑ i, f' i • basis!AsCharges i = X⊢ S'.val = P g + P! f' ∧ P! f' = P! f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j ∧ g = g
change P! f' = _ at hf' h n:ℕS':(PureU1 (2 * n.succ)).LinSolsS:(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'g:Fin n.succ → ℚf:Fin n → ℚh:S.val = P g + P! fX:(PureU1 (2 * n.succ)).Charges := P! f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges jhX:X ∈ Submodule.span ℚ (Set.range basis!AsCharges)f':Fin n → ℚhf':P! f' = X⊢ S'.val = P g + P! f' ∧ P! f' = P! f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j ∧ g = g
erw [hf' h n:ℕS':(PureU1 (2 * n.succ)).LinSolsS:(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'g:Fin n.succ → ℚf:Fin n → ℚh:S.val = P g + P! fX:(PureU1 (2 * n.succ)).Charges := P! f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges jhX:X ∈ Submodule.span ℚ (Set.range basis!AsCharges)f':Fin n → ℚhf':P! f' = X⊢ S'.val = P g + X ∧ X = P! f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j ∧ g = g] h n:ℕS':(PureU1 (2 * n.succ)).LinSolsS:(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'g:Fin n.succ → ℚf:Fin n → ℚh:S.val = P g + P! fX:(PureU1 (2 * n.succ)).Charges := P! f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges jhX:X ∈ Submodule.span ℚ (Set.range basis!AsCharges)f':Fin n → ℚhf':P! f' = X⊢ S'.val = P g + X ∧ X = P! f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j ∧ g = g
simp only [and_self, and_true, X] h n:ℕS':(PureU1 (2 * n.succ)).LinSolsS:(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'g:Fin n.succ → ℚf:Fin n → ℚh:S.val = P g + P! fX:(PureU1 (2 * n.succ)).Charges := P! f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges jhX:X ∈ Submodule.span ℚ (Set.range basis!AsCharges)f':Fin n → ℚhf':P! f' = X⊢ S'.val = P g + (P! f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j)
rw [← add_assoc, h n:ℕS':(PureU1 (2 * n.succ)).LinSolsS:(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'g:Fin n.succ → ℚf:Fin n → ℚh:S.val = P g + P! fX:(PureU1 (2 * n.succ)).Charges := P! f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges jhX:X ∈ Submodule.span ℚ (Set.range basis!AsCharges)f':Fin n → ℚhf':P! f' = X⊢ S'.val = P g + P! f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j h n:ℕS':(PureU1 (2 * n.succ)).LinSolsS:(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'g:Fin n.succ → ℚf:Fin n → ℚh:S.val = P g + P! fX:(PureU1 (2 * n.succ)).Charges := P! f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges jhX:X ∈ Submodule.span ℚ (Set.range basis!AsCharges)f':Fin n → ℚhf':P! f' = X⊢ S'.val = S.val + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j ← h h n:ℕS':(PureU1 (2 * n.succ)).LinSolsS:(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'g:Fin n.succ → ℚf:Fin n → ℚh:S.val = P g + P! fX:(PureU1 (2 * n.succ)).Charges := P! f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges jhX:X ∈ Submodule.span ℚ (Set.range basis!AsCharges)f':Fin n → ℚhf':P! f' = X⊢ S'.val = S.val + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges jh n:ℕS':(PureU1 (2 * n.succ)).LinSolsS:(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'g:Fin n.succ → ℚf:Fin n → ℚh:S.val = P g + P! fX:(PureU1 (2 * n.succ)).Charges := P! f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges jhX:X ∈ Submodule.span ℚ (Set.range basis!AsCharges)f':Fin n → ℚhf':P! f' = X⊢ S'.val = S.val + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j]h n:ℕS':(PureU1 (2 * n.succ)).LinSolsS:(PureU1 (2 * n.succ)).LinSolsj:Fin nhS:((FamilyPermutations (2 * n.succ)).linSolRep (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) S = S'g:Fin n.succ → ℚf:Fin n → ℚh:S.val = P g + P! fX:(PureU1 (2 * n.succ)).Charges := P! f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges jhX:X ∈ Submodule.span ℚ (Set.range basis!AsCharges)f':Fin n → ℚhf':P! f' = X⊢ S'.val = S.val + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j
apply swap!_as_add at hS h n:ℕS':(PureU1 (2 * n.succ)).LinSolsS:(PureU1 (2 * n.succ)).LinSolsj:Fin ng:Fin n.succ → ℚf:Fin n → ℚh:S.val = P g + P! fX:(PureU1 (2 * n.succ)).Charges := P! f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges jhX:X ∈ Submodule.span ℚ (Set.range basis!AsCharges)f':Fin n → ℚhf':P! f' = XhS:S'.val = S.val + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j⊢ S'.val = S.val + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basis!AsCharges j
exact hS All goals completed! 🐙