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
Unshifted.planeLinSols : The inclusion of the unshifted plane into linear solutions
Unshifted.planeCharges_accCube : The statement that charges from the unshifted plane
satisfy the cubic ACC
Shifted.planeLinSols : The inclusion of the shifted plane.
Shifted.planeCharges_accCube : The statement that charges from the shifted 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 unshifted plane
B.1. The basis vectors of the unshifted 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 unshifted 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 unshifted plane
C. The shifted plane
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 shifted 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 shifted 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 unshifted plane
B.1. The basis vectors of the unshifted plane as charges
The unshifted 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 unshifted 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 unshifted plane into charges
A point in the span of the unshifted part of the basis as a charge.
def planeCharges (f : Fin n.succ → ℚ) : (PureU1 (2 * n.succ)).Charges := ∑ i, f i • basisAsCharges iB.7. Components of the inclusion into charges
lemma planeCharges_evenFst (f : Fin n.succ → ℚ) (j : Fin n.succ) :
planeCharges f (evenFst j) = f j := by n:ℕf:Fin n.succ → ℚj:Fin n.succ⊢ planeCharges f (evenFst j) = f j
rw [planeCharges, 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 planeCharges_evenSnd (f : Fin n.succ → ℚ) (j : Fin n.succ) :
planeCharges f (evenSnd j) = - f j := by n:ℕf:Fin n.succ → ℚj:Fin n.succ⊢ planeCharges f (evenSnd j) = -f j
rw [planeCharges, 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 planeCharges_evenSnd_evenFst (f : Fin n.succ → ℚ) :
planeCharges f ∘ evenSnd = - planeCharges f ∘ evenFst := by n:ℕf:Fin n.succ → ℚ⊢ planeCharges f ∘ evenSnd = -planeCharges f ∘ evenFst
funext j n:ℕf:Fin n.succ → ℚj:Fin n.succ⊢ (planeCharges f ∘ evenSnd) j = (-planeCharges f ∘ evenFst) j
simp [planeCharges_evenFst, planeCharges_evenSnd] All goals completed! 🐙B.8. The inclusion into charges satisfies the linear and cubic ACCs
lemma planeCharges_linearACC (f : Fin n.succ → ℚ) :
(accGrav (2 * n.succ)) (planeCharges f) = 0 := by n:ℕf:Fin n.succ → ℚ⊢ (accGrav (2 * n.succ)) (planeCharges f) = 0
simp [accGrav, sum_even, planeCharges_evenSnd, planeCharges_evenFst] All goals completed! 🐙
lemma planeCharges_accCube (f : Fin n.succ → ℚ) : accCube (2 * n.succ) (planeCharges f) = 0 := by n:ℕf:Fin n.succ → ℚ⊢ (accCube (2 * n.succ)) (planeCharges f) = 0
rw [accCube_explicit, n:ℕf:Fin n.succ → ℚ⊢ ∑ i, planeCharges f i ^ 3 = 0 n:ℕf:Fin n.succ → ℚ⊢ ∑ i, (((fun i => planeCharges f i ^ 3) ∘ evenFst) i + ((fun i => planeCharges f i ^ 3) ∘ evenSnd) i) = 0 sum_even n:ℕf:Fin n.succ → ℚ⊢ ∑ i, (((fun i => planeCharges f i ^ 3) ∘ evenFst) i + ((fun i => planeCharges f i ^ 3) ∘ evenSnd) i) = 0 n:ℕf:Fin n.succ → ℚ⊢ ∑ i, (((fun i => planeCharges f i ^ 3) ∘ evenFst) i + ((fun i => planeCharges f i ^ 3) ∘ evenSnd) i) = 0] n:ℕf:Fin n.succ → ℚ⊢ ∑ i, (((fun i => planeCharges f i ^ 3) ∘ evenFst) i + ((fun i => planeCharges 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 => planeCharges f i ^ 3) ∘ evenFst) i + ((fun i => planeCharges f i ^ 3) ∘ evenSnd) i = 0
simp only [succ_eq_add_one, Function.comp_apply, planeCharges_evenFst, planeCharges_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 planeCharges_zero (f : Fin n.succ → ℚ) (h : planeCharges f = 0) : ∀ i, f i = 0 := by n:ℕf:Fin n.succ → ℚh:planeCharges f = 0⊢ ∀ (i : Fin n.succ), f i = 0
exact fun i => (planeCharges_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 unshifted part of the basis.
lemma planeLinSols_val (f : Fin n.succ → ℚ) : (planeLinSols f).val = planeCharges f := by n:ℕf:Fin n.succ → ℚ⊢ (planeLinSols f).val = planeCharges f
simp only [succ_eq_add_one, planeLinSols, planeCharges] 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 planeLinSols f = 0 at h n:ℕf:Fin n.succ → ℚh:planeLinSols f = 0⊢ ∀ (i : Fin n.succ), f i = 0
exact planeCharges_zero f ((planeLinSols_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 unshifted 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 [planeLinSols_val h n:ℕS:(PureU1 (2 * n.succ)).LinSolshS:VectorLikeEven S.valf:Fin n.succ → ℚ := fun i => (sortAFL S).val (evenFst i)⊢ planeCharges 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)⊢ planeCharges 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), planeCharges 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), planeCharges 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), planeCharges 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⊢ planeCharges f (evenFst i) = sort S.val (evenFst i)
rw [planeCharges_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), planeCharges 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⊢ planeCharges f (evenSnd i) = sort S.val (evenSnd i)
rw [planeCharges_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 shifted plane
The shifted part of the basis as charges.
def basisAsCharges (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) : basisAsCharges j (evenShiftFst j) = 1 := by n:ℕj:Fin n⊢ basisAsCharges j (evenShiftFst j) = 1
simp [basisAsCharges] 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) : basisAsCharges k j = 0 := by n:ℕk:Fin nj:Fin (2 * n.succ)h1:j ≠ evenShiftFst kh2:j ≠ evenShiftSnd 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_on_evenShiftFst_other {k j : Fin n} (h : k ≠ j) :
basisAsCharges k (evenShiftFst j) = 0 := by n:ℕk:Fin nj:Fin nh:k ≠ j⊢ basisAsCharges k (evenShiftFst j) = 0
rw [ne_eq, n:ℕk:Fin nj:Fin nh:¬k = j⊢ basisAsCharges k (evenShiftFst j) = 0 n:ℕk:Fin nj:Fin nh:¬↑k = ↑j⊢ basisAsCharges k (evenShiftFst j) = 0 Fin.ext_iff n:ℕk:Fin nj:Fin nh:¬↑k = ↑j⊢ basisAsCharges k (evenShiftFst j) = 0 n:ℕk:Fin nj:Fin nh:¬↑k = ↑j⊢ basisAsCharges k (evenShiftFst j) = 0] at h n:ℕk:Fin nj:Fin nh:¬↑k = ↑j⊢ basisAsCharges 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_evenShiftSnd_eq_neg_evenShiftFst (j i : Fin n) :
basisAsCharges j (evenShiftSnd i) = - basisAsCharges j (evenShiftFst i) := by n:ℕj:Fin ni:Fin n⊢ basisAsCharges j (evenShiftSnd i) = -basisAsCharges j (evenShiftFst i)
simp only [basisAsCharges, 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) : basisAsCharges j (evenShiftSnd j) = - 1 := by n:ℕj:Fin n⊢ basisAsCharges j (evenShiftSnd j) = -1
rw [basis_evenShiftSnd_eq_neg_evenShiftFst, n:ℕj:Fin n⊢ -basisAsCharges 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) :
basisAsCharges k (evenShiftSnd j) = 0 := by n:ℕk:Fin nj:Fin nh:k ≠ j⊢ basisAsCharges k (evenShiftSnd j) = 0
rw [basis_evenShiftSnd_eq_neg_evenShiftFst, n:ℕk:Fin nj:Fin nh:k ≠ j⊢ -basisAsCharges 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) : basisAsCharges j evenShiftZero = 0 := by n:ℕj:Fin n⊢ basisAsCharges 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) : basisAsCharges j evenShiftLast = 0 := by n:ℕj:Fin n⊢ basisAsCharges 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)) (basisAsCharges j) = 0 := by n:ℕj:Fin n⊢ (accGrav (2 * n.succ)) (basisAsCharges j) = 0
simp [accGrav, sum_evenShift, basis_on_evenShiftZero, basis_on_evenShiftLast,
basis_evenShiftSnd_eq_neg_evenShiftFst] All goals completed! 🐙C.4. The vectors satisfy the cubic ACC
lemma basis_accCube (j : Fin n) :
accCube (2 * n.succ) (basisAsCharges j) = 0 := by n:ℕj:Fin n⊢ (accCube (2 * n.succ)) (basisAsCharges j) = 0
rw [accCube_explicit, n:ℕj:Fin n⊢ ∑ i, basisAsCharges j i ^ 3 = 0 n:ℕj:Fin n⊢ basisAsCharges j evenShiftZero ^ 3 + basisAsCharges j evenShiftLast ^ 3 +
∑ i, (((fun i => basisAsCharges j i ^ 3) ∘ evenShiftFst) i + ((fun i => basisAsCharges j i ^ 3) ∘ evenShiftSnd) i) =
0 sum_evenShift n:ℕj:Fin n⊢ basisAsCharges j evenShiftZero ^ 3 + basisAsCharges j evenShiftLast ^ 3 +
∑ i, (((fun i => basisAsCharges j i ^ 3) ∘ evenShiftFst) i + ((fun i => basisAsCharges j i ^ 3) ∘ evenShiftSnd) i) =
0 n:ℕj:Fin n⊢ basisAsCharges j evenShiftZero ^ 3 + basisAsCharges j evenShiftLast ^ 3 +
∑ i, (((fun i => basisAsCharges j i ^ 3) ∘ evenShiftFst) i + ((fun i => basisAsCharges j i ^ 3) ∘ evenShiftSnd) i) =
0] n:ℕj:Fin n⊢ basisAsCharges j evenShiftZero ^ 3 + basisAsCharges j evenShiftLast ^ 3 +
∑ i, (((fun i => basisAsCharges j i ^ 3) ∘ evenShiftFst) i + ((fun i => basisAsCharges j i ^ 3) ∘ evenShiftSnd) i) =
0
rw [basis_on_evenShiftLast, n:ℕj:Fin n⊢ basisAsCharges j evenShiftZero ^ 3 + 0 ^ 3 +
∑ i, (((fun i => basisAsCharges j i ^ 3) ∘ evenShiftFst) i + ((fun i => basisAsCharges j i ^ 3) ∘ evenShiftSnd) i) =
0 n:ℕj:Fin n⊢ 0 ^ 3 + 0 ^ 3 +
∑ i, (((fun i => basisAsCharges j i ^ 3) ∘ evenShiftFst) i + ((fun i => basisAsCharges j i ^ 3) ∘ evenShiftSnd) i) =
0 basis_on_evenShiftZero n:ℕj:Fin n⊢ 0 ^ 3 + 0 ^ 3 +
∑ i, (((fun i => basisAsCharges j i ^ 3) ∘ evenShiftFst) i + ((fun i => basisAsCharges j i ^ 3) ∘ evenShiftSnd) i) =
0 n:ℕj:Fin n⊢ 0 ^ 3 + 0 ^ 3 +
∑ i, (((fun i => basisAsCharges j i ^ 3) ∘ evenShiftFst) i + ((fun i => basisAsCharges j i ^ 3) ∘ evenShiftSnd) i) =
0] n:ℕj:Fin n⊢ 0 ^ 3 + 0 ^ 3 +
∑ i, (((fun i => basisAsCharges j i ^ 3) ∘ evenShiftFst) i + ((fun i => basisAsCharges 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, (basisAsCharges j (evenShiftFst x) ^ 3 + basisAsCharges j (evenShiftSnd x) ^ 3) = 0
refine Finset.sum_eq_zero fun i _ => ?_ n:ℕj:Fin ni:Fin nx✝:i ∈ univ⊢ basisAsCharges j (evenShiftFst i) ^ 3 + basisAsCharges j (evenShiftSnd i) ^ 3 = 0
simp only [basis_evenShiftSnd_eq_neg_evenShiftFst] n:ℕj:Fin ni:Fin nx✝:i ∈ univ⊢ basisAsCharges j (evenShiftFst i) ^ 3 + (-basisAsCharges j (evenShiftFst i)) ^ 3 = 0
ring All goals completed! 🐙C.6. The vectors as linear solutions
The shifted part of the basis as LinSols.
@[simps!]
def basis (j : Fin n) : (PureU1 (2 * n.succ)).LinSols :=
⟨basisAsCharges j, by n:ℕj:Fin n⊢ ∀ (i : Fin (PureU1 (2 * n.succ)).numberLinear), ((PureU1 (2 * n.succ)).linearACCs i) (basisAsCharges j) = 0
intro i n:ℕj:Fin ni:Fin (PureU1 (2 * n.succ)).numberLinear⊢ ((PureU1 (2 * n.succ)).linearACCs i) (basisAsCharges 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✝⟩) (basisAsCharges j) = 0 exact basis_linearACC j All goals completed! 🐙⟩C.7. The inclusion of the shifted plane into charges
A point in the span of the shifted part of the basis as a charge.
def planeCharges (f : Fin n → ℚ) : (PureU1 (2 * n.succ)).Charges := ∑ i, f i • basisAsCharges iC.8. Components of the inclusion into charges
lemma planeCharges_evenShiftFst (f : Fin n → ℚ) (j : Fin n) :
planeCharges f (evenShiftFst j) = f j := by n:ℕf:Fin n → ℚj:Fin n⊢ planeCharges f (evenShiftFst j) = f j
rw [planeCharges, n:ℕf:Fin n → ℚj:Fin n⊢ (∑ i, f i • basisAsCharges i) (evenShiftFst j) = f j n:ℕf:Fin n → ℚj:Fin n⊢ ∑ i, (f i • basisAsCharges i) (evenShiftFst j) = f j sum_of_charges n:ℕf:Fin n → ℚj:Fin n⊢ ∑ i, (f i • basisAsCharges i) (evenShiftFst j) = f j n:ℕf:Fin n → ℚj:Fin n⊢ ∑ i, (f i • basisAsCharges i) (evenShiftFst j) = f j] n:ℕf:Fin n → ℚj:Fin n⊢ ∑ i, (f i • basisAsCharges i) (evenShiftFst j) = f j
simp only [HSMul.hSMul, SMul.smul] n:ℕf:Fin n → ℚj:Fin n⊢ ∑ x, f x * basisAsCharges x (evenShiftFst j) = f j
rw [Fintype.sum_eq_single j n:ℕf:Fin n → ℚj:Fin n⊢ f j * basisAsCharges j (evenShiftFst j) = f jn:ℕf:Fin n → ℚj:Fin n⊢ ∀ (x : Fin n), x ≠ j → f x * basisAsCharges x (evenShiftFst j) = 0 n:ℕf:Fin n → ℚj:Fin n⊢ f j * basisAsCharges j (evenShiftFst j) = f jn:ℕf:Fin n → ℚj:Fin n⊢ ∀ (x : Fin n), x ≠ j → f x * basisAsCharges x (evenShiftFst j) = 0] n:ℕf:Fin n → ℚj:Fin n⊢ f j * basisAsCharges j (evenShiftFst j) = f jn:ℕf:Fin n → ℚj:Fin n⊢ ∀ (x : Fin n), x ≠ j → f x * basisAsCharges x (evenShiftFst j) = 0
· n:ℕf:Fin n → ℚj:Fin n⊢ f j * basisAsCharges 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 * basisAsCharges x (evenShiftFst j) = 0 exact fun k hkj => mul_eq_zero_of_right (f k) (basis_on_evenShiftFst_other hkj) All goals completed! 🐙
lemma planeCharges_evenShiftSnd (f : Fin n → ℚ) (j : Fin n) :
planeCharges f (evenShiftSnd j) = - f j := by n:ℕf:Fin n → ℚj:Fin n⊢ planeCharges f (evenShiftSnd j) = -f j
rw [planeCharges, n:ℕf:Fin n → ℚj:Fin n⊢ (∑ i, f i • basisAsCharges i) (evenShiftSnd j) = -f j n:ℕf:Fin n → ℚj:Fin n⊢ ∑ i, (f i • basisAsCharges i) (evenShiftSnd j) = -f j sum_of_charges n:ℕf:Fin n → ℚj:Fin n⊢ ∑ i, (f i • basisAsCharges i) (evenShiftSnd j) = -f j n:ℕf:Fin n → ℚj:Fin n⊢ ∑ i, (f i • basisAsCharges i) (evenShiftSnd j) = -f j] n:ℕf:Fin n → ℚj:Fin n⊢ ∑ i, (f i • basisAsCharges i) (evenShiftSnd j) = -f j
simp only [HSMul.hSMul, SMul.smul] n:ℕf:Fin n → ℚj:Fin n⊢ ∑ x, f x * basisAsCharges x (evenShiftSnd j) = -f j
rw [Fintype.sum_eq_single j n:ℕf:Fin n → ℚj:Fin n⊢ f j * basisAsCharges j (evenShiftSnd j) = -f jn:ℕf:Fin n → ℚj:Fin n⊢ ∀ (x : Fin n), x ≠ j → f x * basisAsCharges x (evenShiftSnd j) = 0 n:ℕf:Fin n → ℚj:Fin n⊢ f j * basisAsCharges j (evenShiftSnd j) = -f jn:ℕf:Fin n → ℚj:Fin n⊢ ∀ (x : Fin n), x ≠ j → f x * basisAsCharges x (evenShiftSnd j) = 0] n:ℕf:Fin n → ℚj:Fin n⊢ f j * basisAsCharges j (evenShiftSnd j) = -f jn:ℕf:Fin n → ℚj:Fin n⊢ ∀ (x : Fin n), x ≠ j → f x * basisAsCharges x (evenShiftSnd j) = 0
· n:ℕf:Fin n → ℚj:Fin n⊢ f j * basisAsCharges 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 * basisAsCharges x (evenShiftSnd j) = 0 exact fun k hkj => mul_eq_zero_of_right (f k) (basis_on_evenShiftSnd_other hkj) All goals completed! 🐙lemma planeCharges_evenShiftZero (f : Fin n → ℚ) : planeCharges f (evenShiftZero) = 0 := by n:ℕf:Fin n → ℚ⊢ planeCharges f evenShiftZero = 0
simp [planeCharges, sum_of_charges, HSMul.hSMul, SMul.smul, basis_on_evenShiftZero] All goals completed! 🐙lemma planeCharges_evenShiftLast (f : Fin n → ℚ) : planeCharges f evenShiftLast = 0 := by n:ℕf:Fin n → ℚ⊢ planeCharges f evenShiftLast = 0
simp [planeCharges, sum_of_charges, HSMul.hSMul, SMul.smul, basis_on_evenShiftLast] All goals completed! 🐙C.9. The inclusion into charges satisfies the cubic ACC
lemma planeCharges_accCube (f : Fin n → ℚ) : accCube (2 * n.succ) (planeCharges f) = 0 := by n:ℕf:Fin n → ℚ⊢ (accCube (2 * n.succ)) (planeCharges f) = 0
rw [accCube_explicit, n:ℕf:Fin n → ℚ⊢ ∑ i, planeCharges f i ^ 3 = 0 n:ℕf:Fin n → ℚ⊢ 0 ^ 3 + 0 ^ 3 +
∑ i, (((fun i => planeCharges f i ^ 3) ∘ evenShiftFst) i + ((fun i => planeCharges f i ^ 3) ∘ evenShiftSnd) i) =
0 sum_evenShift, n:ℕf:Fin n → ℚ⊢ planeCharges f evenShiftZero ^ 3 + planeCharges f evenShiftLast ^ 3 +
∑ i, (((fun i => planeCharges f i ^ 3) ∘ evenShiftFst) i + ((fun i => planeCharges f i ^ 3) ∘ evenShiftSnd) i) =
0 n:ℕf:Fin n → ℚ⊢ 0 ^ 3 + 0 ^ 3 +
∑ i, (((fun i => planeCharges f i ^ 3) ∘ evenShiftFst) i + ((fun i => planeCharges f i ^ 3) ∘ evenShiftSnd) i) =
0 planeCharges_evenShiftZero, n:ℕf:Fin n → ℚ⊢ 0 ^ 3 + planeCharges f evenShiftLast ^ 3 +
∑ i, (((fun i => planeCharges f i ^ 3) ∘ evenShiftFst) i + ((fun i => planeCharges f i ^ 3) ∘ evenShiftSnd) i) =
0 n:ℕf:Fin n → ℚ⊢ 0 ^ 3 + 0 ^ 3 +
∑ i, (((fun i => planeCharges f i ^ 3) ∘ evenShiftFst) i + ((fun i => planeCharges f i ^ 3) ∘ evenShiftSnd) i) =
0 planeCharges_evenShiftLast n:ℕf:Fin n → ℚ⊢ 0 ^ 3 + 0 ^ 3 +
∑ i, (((fun i => planeCharges f i ^ 3) ∘ evenShiftFst) i + ((fun i => planeCharges f i ^ 3) ∘ evenShiftSnd) i) =
0 n:ℕf:Fin n → ℚ⊢ 0 ^ 3 + 0 ^ 3 +
∑ i, (((fun i => planeCharges f i ^ 3) ∘ evenShiftFst) i + ((fun i => planeCharges f i ^ 3) ∘ evenShiftSnd) i) =
0] n:ℕf:Fin n → ℚ⊢ 0 ^ 3 + 0 ^ 3 +
∑ i, (((fun i => planeCharges f i ^ 3) ∘ evenShiftFst) i + ((fun i => planeCharges 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, (planeCharges f (evenShiftFst x) ^ 3 + planeCharges f (evenShiftSnd x) ^ 3) = 0
refine Finset.sum_eq_zero fun i _ => ?_ n:ℕf:Fin n → ℚi:Fin nx✝:i ∈ univ⊢ planeCharges f (evenShiftFst i) ^ 3 + planeCharges f (evenShiftSnd i) ^ 3 = 0
simp only [planeCharges_evenShiftFst, planeCharges_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 planeCharges_zero (f : Fin n → ℚ) (h : planeCharges f = 0) : ∀ i, f i = 0 := by n:ℕf:Fin n → ℚh:planeCharges f = 0⊢ ∀ (i : Fin n), f i = 0
exact fun i => (planeCharges_evenShiftFst f i).symm.trans (congr_fun h (evenShiftFst i)) All goals completed! 🐙C.11. The inclusion of the shifted plane into the span of the basis
lemma planeCharges_in_span (f : Fin n → ℚ) :
planeCharges f ∈ Submodule.span ℚ (Set.range basisAsCharges) := by n:ℕf:Fin n → ℚ⊢ planeCharges f ∈ Submodule.span ℚ (Set.range basisAsCharges)
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 shifted part of the basis.
lemma planeLinSols_val (f : Fin n → ℚ) : (planeLinSols f).val = planeCharges f := by n:ℕf:Fin n → ℚ⊢ (planeLinSols f).val = planeCharges f
simp only [succ_eq_add_one, planeLinSols, planeCharges] n:ℕf:Fin n → ℚ⊢ (∑ x, f x • basis x).val = ∑ x, f x • basisAsCharges x
funext i n:ℕf:Fin n → ℚ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 → ℚ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 → ℚ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 → ℚ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 → ℚ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 → ℚ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! 🐙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 planeLinSols f = 0 at h n:ℕf:Fin n → ℚh:planeLinSols f = 0⊢ ∀ (i : Fin n), f i = 0
exact planeCharges_zero f ((planeLinSols_val f).symm.trans (congrArg _ h)) All goals completed! 🐙C.14. Properties of the basis vectors relating to the span
lemma smul_basisAsCharges_in_span (S : (PureU1 (2 * n.succ)).LinSols) (j : Fin n) :
(S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basisAsCharges j ∈
Submodule.span ℚ (Set.range basisAsCharges) := by n:ℕS:(PureU1 (2 * n.succ)).LinSolsj:Fin n⊢ (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • basisAsCharges j ∈ Submodule.span ℚ (Set.range basisAsCharges)
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 basisAsCharges 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)) • basisAsCharges 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)) • basisAsCharges 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)) • basisAsCharges 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)) • basisAsCharges 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)) • basisAsCharges 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)) • basisAsCharges 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)) • basisAsCharges 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)) • basisAsCharges 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)) • basisAsCharges 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)) • basisAsCharges 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)) • basisAsCharges 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)) • basisAsCharges 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)) • basisAsCharges 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)) • basisAsCharges 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)) • basisAsCharges 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)) • basisAsCharges 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)) • basisAsCharges 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)) * basisAsCharges 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 unshifted_unshifted_shifted_accCube (g : Fin n.succ → ℚ) (j : Fin n) :
accCubeTriLinSymm (Unshifted.planeCharges g) (Unshifted.planeCharges g)
(Shifted.basisAsCharges j)
= g (j.succ) ^ 2 - g (j.castSucc) ^ 2 := by n:ℕg:Fin n.succ → ℚj:Fin n⊢ ((accCubeTriLinSymm (Unshifted.planeCharges g)) (Unshifted.planeCharges g)) (Shifted.basisAsCharges 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, Unshifted.planeCharges g x * Unshifted.planeCharges g x * Shifted.basisAsCharges j x =
g j.succ ^ 2 - g j.castSucc ^ 2
erw [sum_evenShift, n:ℕg:Fin n.succ → ℚj:Fin n⊢ Unshifted.planeCharges g evenShiftZero * Unshifted.planeCharges g evenShiftZero *
Shifted.basisAsCharges j evenShiftZero +
Unshifted.planeCharges g evenShiftLast * Unshifted.planeCharges g evenShiftLast *
Shifted.basisAsCharges j evenShiftLast +
∑ i,
(((fun x => Unshifted.planeCharges g x * Unshifted.planeCharges g x * Shifted.basisAsCharges j x) ∘ evenShiftFst)
i +
((fun x => Unshifted.planeCharges g x * Unshifted.planeCharges g x * Shifted.basisAsCharges j x) ∘ evenShiftSnd)
i) =
g j.succ ^ 2 - g j.castSucc ^ 2 Shifted.basis_on_evenShiftZero, n:ℕg:Fin n.succ → ℚj:Fin n⊢ Unshifted.planeCharges g evenShiftZero * Unshifted.planeCharges g evenShiftZero * 0 +
Unshifted.planeCharges g evenShiftLast * Unshifted.planeCharges g evenShiftLast *
Shifted.basisAsCharges j evenShiftLast +
∑ i,
(((fun x => Unshifted.planeCharges g x * Unshifted.planeCharges g x * Shifted.basisAsCharges j x) ∘ evenShiftFst)
i +
((fun x => Unshifted.planeCharges g x * Unshifted.planeCharges g x * Shifted.basisAsCharges j x) ∘ evenShiftSnd)
i) =
g j.succ ^ 2 - g j.castSucc ^ 2 Shifted.basis_on_evenShiftLast n:ℕg:Fin n.succ → ℚj:Fin n⊢ Unshifted.planeCharges g evenShiftZero * Unshifted.planeCharges g evenShiftZero * 0 +
Unshifted.planeCharges g evenShiftLast * Unshifted.planeCharges g evenShiftLast * 0 +
∑ i,
(((fun x => Unshifted.planeCharges g x * Unshifted.planeCharges g x * Shifted.basisAsCharges j x) ∘ evenShiftFst)
i +
((fun x => Unshifted.planeCharges g x * Unshifted.planeCharges g x * Shifted.basisAsCharges j x) ∘ evenShiftSnd)
i) =
g j.succ ^ 2 - g j.castSucc ^ 2] n:ℕg:Fin n.succ → ℚj:Fin n⊢ Unshifted.planeCharges g evenShiftZero * Unshifted.planeCharges g evenShiftZero * 0 +
Unshifted.planeCharges g evenShiftLast * Unshifted.planeCharges g evenShiftLast * 0 +
∑ i,
(((fun x => Unshifted.planeCharges g x * Unshifted.planeCharges g x * Shifted.basisAsCharges j x) ∘ evenShiftFst)
i +
((fun x => Unshifted.planeCharges g x * Unshifted.planeCharges g x * Shifted.basisAsCharges 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,
(Unshifted.planeCharges g (evenShiftFst x) * Unshifted.planeCharges g (evenShiftFst x) *
Shifted.basisAsCharges j (evenShiftFst x) +
Unshifted.planeCharges g (evenShiftSnd x) * Unshifted.planeCharges g (evenShiftSnd x) *
Shifted.basisAsCharges 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⊢ Unshifted.planeCharges g (evenShiftFst j) * Unshifted.planeCharges g (evenShiftFst j) *
Shifted.basisAsCharges j (evenShiftFst j) +
Unshifted.planeCharges g (evenShiftSnd j) * Unshifted.planeCharges g (evenShiftSnd j) *
Shifted.basisAsCharges j (evenShiftSnd j) =
g j.succ ^ 2 - g j.castSucc ^ 2n:ℕg:Fin n.succ → ℚj:Fin n⊢ ∀ (x : Fin n),
x ≠ j →
Unshifted.planeCharges g (evenShiftFst x) * Unshifted.planeCharges g (evenShiftFst x) *
Shifted.basisAsCharges j (evenShiftFst x) +
Unshifted.planeCharges g (evenShiftSnd x) * Unshifted.planeCharges g (evenShiftSnd x) *
Shifted.basisAsCharges j (evenShiftSnd x) =
0 n:ℕg:Fin n.succ → ℚj:Fin n⊢ Unshifted.planeCharges g (evenShiftFst j) * Unshifted.planeCharges g (evenShiftFst j) * 1 +
Unshifted.planeCharges g (evenShiftSnd j) * Unshifted.planeCharges g (evenShiftSnd j) * -1 =
g j.succ ^ 2 - g j.castSucc ^ 2n:ℕg:Fin n.succ → ℚj:Fin n⊢ ∀ (x : Fin n),
x ≠ j →
Unshifted.planeCharges g (evenShiftFst x) * Unshifted.planeCharges g (evenShiftFst x) *
Shifted.basisAsCharges j (evenShiftFst x) +
Unshifted.planeCharges g (evenShiftSnd x) * Unshifted.planeCharges g (evenShiftSnd x) *
Shifted.basisAsCharges j (evenShiftSnd x) =
0 Shifted.basis_on_evenShiftFst_self, n:ℕg:Fin n.succ → ℚj:Fin n⊢ Unshifted.planeCharges g (evenShiftFst j) * Unshifted.planeCharges g (evenShiftFst j) * 1 +
Unshifted.planeCharges g (evenShiftSnd j) * Unshifted.planeCharges g (evenShiftSnd j) *
Shifted.basisAsCharges j (evenShiftSnd j) =
g j.succ ^ 2 - g j.castSucc ^ 2n:ℕg:Fin n.succ → ℚj:Fin n⊢ ∀ (x : Fin n),
x ≠ j →
Unshifted.planeCharges g (evenShiftFst x) * Unshifted.planeCharges g (evenShiftFst x) *
Shifted.basisAsCharges j (evenShiftFst x) +
Unshifted.planeCharges g (evenShiftSnd x) * Unshifted.planeCharges g (evenShiftSnd x) *
Shifted.basisAsCharges j (evenShiftSnd x) =
0 n:ℕg:Fin n.succ → ℚj:Fin n⊢ Unshifted.planeCharges g (evenShiftFst j) * Unshifted.planeCharges g (evenShiftFst j) * 1 +
Unshifted.planeCharges g (evenShiftSnd j) * Unshifted.planeCharges g (evenShiftSnd j) * -1 =
g j.succ ^ 2 - g j.castSucc ^ 2n:ℕg:Fin n.succ → ℚj:Fin n⊢ ∀ (x : Fin n),
x ≠ j →
Unshifted.planeCharges g (evenShiftFst x) * Unshifted.planeCharges g (evenShiftFst x) *
Shifted.basisAsCharges j (evenShiftFst x) +
Unshifted.planeCharges g (evenShiftSnd x) * Unshifted.planeCharges g (evenShiftSnd x) *
Shifted.basisAsCharges j (evenShiftSnd x) =
0
Shifted.basis_on_evenShiftSnd_self n:ℕg:Fin n.succ → ℚj:Fin n⊢ Unshifted.planeCharges g (evenShiftFst j) * Unshifted.planeCharges g (evenShiftFst j) * 1 +
Unshifted.planeCharges g (evenShiftSnd j) * Unshifted.planeCharges g (evenShiftSnd j) * -1 =
g j.succ ^ 2 - g j.castSucc ^ 2n:ℕg:Fin n.succ → ℚj:Fin n⊢ ∀ (x : Fin n),
x ≠ j →
Unshifted.planeCharges g (evenShiftFst x) * Unshifted.planeCharges g (evenShiftFst x) *
Shifted.basisAsCharges j (evenShiftFst x) +
Unshifted.planeCharges g (evenShiftSnd x) * Unshifted.planeCharges g (evenShiftSnd x) *
Shifted.basisAsCharges j (evenShiftSnd x) =
0 n:ℕg:Fin n.succ → ℚj:Fin n⊢ Unshifted.planeCharges g (evenShiftFst j) * Unshifted.planeCharges g (evenShiftFst j) * 1 +
Unshifted.planeCharges g (evenShiftSnd j) * Unshifted.planeCharges g (evenShiftSnd j) * -1 =
g j.succ ^ 2 - g j.castSucc ^ 2n:ℕg:Fin n.succ → ℚj:Fin n⊢ ∀ (x : Fin n),
x ≠ j →
Unshifted.planeCharges g (evenShiftFst x) * Unshifted.planeCharges g (evenShiftFst x) *
Shifted.basisAsCharges j (evenShiftFst x) +
Unshifted.planeCharges g (evenShiftSnd x) * Unshifted.planeCharges g (evenShiftSnd x) *
Shifted.basisAsCharges j (evenShiftSnd x) =
0] n:ℕg:Fin n.succ → ℚj:Fin n⊢ Unshifted.planeCharges g (evenShiftFst j) * Unshifted.planeCharges g (evenShiftFst j) * 1 +
Unshifted.planeCharges g (evenShiftSnd j) * Unshifted.planeCharges g (evenShiftSnd j) * -1 =
g j.succ ^ 2 - g j.castSucc ^ 2n:ℕg:Fin n.succ → ℚj:Fin n⊢ ∀ (x : Fin n),
x ≠ j →
Unshifted.planeCharges g (evenShiftFst x) * Unshifted.planeCharges g (evenShiftFst x) *
Shifted.basisAsCharges j (evenShiftFst x) +
Unshifted.planeCharges g (evenShiftSnd x) * Unshifted.planeCharges g (evenShiftSnd x) *
Shifted.basisAsCharges j (evenShiftSnd x) =
0
· n:ℕg:Fin n.succ → ℚj:Fin n⊢ Unshifted.planeCharges g (evenShiftFst j) * Unshifted.planeCharges g (evenShiftFst j) * 1 +
Unshifted.planeCharges g (evenShiftSnd j) * Unshifted.planeCharges 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⊢ Unshifted.planeCharges g (evenFst j.succ) * Unshifted.planeCharges g (evenFst j.succ) +
-(Unshifted.planeCharges g (evenSnd j.castSucc) * Unshifted.planeCharges g (evenSnd j.castSucc)) =
g j.succ ^ 2 - g j.castSucc ^ 2
rw [Unshifted.planeCharges_evenFst, n:ℕg:Fin n.succ → ℚj:Fin n⊢ g j.succ * g j.succ + -(Unshifted.planeCharges g (evenSnd j.castSucc) * Unshifted.planeCharges 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 Unshifted.planeCharges_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 →
Unshifted.planeCharges g (evenShiftFst x) * Unshifted.planeCharges g (evenShiftFst x) *
Shifted.basisAsCharges j (evenShiftFst x) +
Unshifted.planeCharges g (evenShiftSnd x) * Unshifted.planeCharges g (evenShiftSnd x) *
Shifted.basisAsCharges j (evenShiftSnd x) =
0 intro k hkj n:ℕg:Fin n.succ → ℚj:Fin nk:Fin nhkj:k ≠ j⊢ Unshifted.planeCharges g (evenShiftFst k) * Unshifted.planeCharges g (evenShiftFst k) *
Shifted.basisAsCharges j (evenShiftFst k) +
Unshifted.planeCharges g (evenShiftSnd k) * Unshifted.planeCharges g (evenShiftSnd k) *
Shifted.basisAsCharges j (evenShiftSnd k) =
0
erw [Shifted.basis_on_evenShiftFst_other hkj.symm, n:ℕg:Fin n.succ → ℚj:Fin nk:Fin nhkj:k ≠ j⊢ Unshifted.planeCharges g (evenShiftFst k) * Unshifted.planeCharges g (evenShiftFst k) * 0 +
Unshifted.planeCharges g (evenShiftSnd k) * Unshifted.planeCharges g (evenShiftSnd k) *
Shifted.basisAsCharges j (evenShiftSnd k) =
0 Shifted.basis_on_evenShiftSnd_other hkj.symm n:ℕg:Fin n.succ → ℚj:Fin nk:Fin nhkj:k ≠ j⊢ Unshifted.planeCharges g (evenShiftFst k) * Unshifted.planeCharges g (evenShiftFst k) * 0 +
Unshifted.planeCharges g (evenShiftSnd k) * Unshifted.planeCharges g (evenShiftSnd k) * 0 =
0] n:ℕg:Fin n.succ → ℚj:Fin nk:Fin nhkj:k ≠ j⊢ Unshifted.planeCharges g (evenShiftFst k) * Unshifted.planeCharges g (evenShiftFst k) * 0 +
Unshifted.planeCharges g (evenShiftSnd k) * Unshifted.planeCharges g (evenShiftSnd k) * 0 =
0
simp only [mul_zero, add_zero] All goals completed! 🐙
lemma shifted_shifted_unshifted_accCube (g : Fin n → ℚ) (j : Fin n.succ) :
accCubeTriLinSymm (Shifted.planeCharges g) (Shifted.planeCharges g) (Unshifted.basisAsCharges j)
= (Shifted.planeCharges g (evenFst j))^2 - (Shifted.planeCharges g (evenSnd j))^2 := by n:ℕg:Fin n → ℚj:Fin n.succ⊢ ((accCubeTriLinSymm (Shifted.planeCharges g)) (Shifted.planeCharges g)) (Unshifted.basisAsCharges j) =
Shifted.planeCharges g (evenFst j) ^ 2 - Shifted.planeCharges 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, Shifted.planeCharges g x * Shifted.planeCharges g x * Unshifted.basisAsCharges j x =
Shifted.planeCharges g (evenFst j) ^ 2 - Shifted.planeCharges g (evenSnd j) ^ 2
erw [sum_even n:ℕg:Fin n → ℚj:Fin n.succ⊢ ∑ i,
(((fun x => Shifted.planeCharges g x * Shifted.planeCharges g x * Unshifted.basisAsCharges j x) ∘ evenFst) i +
((fun x => Shifted.planeCharges g x * Shifted.planeCharges g x * Unshifted.basisAsCharges j x) ∘ evenSnd) i) =
Shifted.planeCharges g (evenFst j) ^ 2 - Shifted.planeCharges g (evenSnd j) ^ 2] n:ℕg:Fin n → ℚj:Fin n.succ⊢ ∑ i,
(((fun x => Shifted.planeCharges g x * Shifted.planeCharges g x * Unshifted.basisAsCharges j x) ∘ evenFst) i +
((fun x => Shifted.planeCharges g x * Shifted.planeCharges g x * Unshifted.basisAsCharges j x) ∘ evenSnd) i) =
Shifted.planeCharges g (evenFst j) ^ 2 - Shifted.planeCharges g (evenSnd j) ^ 2
simp only [Function.comp_apply] n:ℕg:Fin n → ℚj:Fin n.succ⊢ ∑ x,
(Shifted.planeCharges g (evenFst x) * Shifted.planeCharges g (evenFst x) * Unshifted.basisAsCharges j (evenFst x) +
Shifted.planeCharges g (evenSnd x) * Shifted.planeCharges g (evenSnd x) *
Unshifted.basisAsCharges j (evenSnd x)) =
Shifted.planeCharges g (evenFst j) ^ 2 - Shifted.planeCharges g (evenSnd j) ^ 2
rw [Fintype.sum_eq_single j, n:ℕg:Fin n → ℚj:Fin n.succ⊢ Shifted.planeCharges g (evenFst j) * Shifted.planeCharges g (evenFst j) * Unshifted.basisAsCharges j (evenFst j) +
Shifted.planeCharges g (evenSnd j) * Shifted.planeCharges g (evenSnd j) * Unshifted.basisAsCharges j (evenSnd j) =
Shifted.planeCharges g (evenFst j) ^ 2 - Shifted.planeCharges g (evenSnd j) ^ 2n:ℕg:Fin n → ℚj:Fin n.succ⊢ ∀ (x : Fin n.succ),
x ≠ j →
Shifted.planeCharges g (evenFst x) * Shifted.planeCharges g (evenFst x) * Unshifted.basisAsCharges j (evenFst x) +
Shifted.planeCharges g (evenSnd x) * Shifted.planeCharges g (evenSnd x) *
Unshifted.basisAsCharges j (evenSnd x) =
0 n:ℕg:Fin n → ℚj:Fin n.succ⊢ Shifted.planeCharges g (evenFst j) * Shifted.planeCharges g (evenFst j) * 1 +
Shifted.planeCharges g (evenSnd j) * Shifted.planeCharges g (evenSnd j) * -1 =
Shifted.planeCharges g (evenFst j) ^ 2 - Shifted.planeCharges g (evenSnd j) ^ 2n:ℕg:Fin n → ℚj:Fin n.succ⊢ ∀ (x : Fin n.succ),
x ≠ j →
Shifted.planeCharges g (evenFst x) * Shifted.planeCharges g (evenFst x) * Unshifted.basisAsCharges j (evenFst x) +
Shifted.planeCharges g (evenSnd x) * Shifted.planeCharges g (evenSnd x) *
Unshifted.basisAsCharges j (evenSnd x) =
0 Unshifted.basis_on_evenFst_self, n:ℕg:Fin n → ℚj:Fin n.succ⊢ Shifted.planeCharges g (evenFst j) * Shifted.planeCharges g (evenFst j) * 1 +
Shifted.planeCharges g (evenSnd j) * Shifted.planeCharges g (evenSnd j) * Unshifted.basisAsCharges j (evenSnd j) =
Shifted.planeCharges g (evenFst j) ^ 2 - Shifted.planeCharges g (evenSnd j) ^ 2n:ℕg:Fin n → ℚj:Fin n.succ⊢ ∀ (x : Fin n.succ),
x ≠ j →
Shifted.planeCharges g (evenFst x) * Shifted.planeCharges g (evenFst x) * Unshifted.basisAsCharges j (evenFst x) +
Shifted.planeCharges g (evenSnd x) * Shifted.planeCharges g (evenSnd x) *
Unshifted.basisAsCharges j (evenSnd x) =
0 n:ℕg:Fin n → ℚj:Fin n.succ⊢ Shifted.planeCharges g (evenFst j) * Shifted.planeCharges g (evenFst j) * 1 +
Shifted.planeCharges g (evenSnd j) * Shifted.planeCharges g (evenSnd j) * -1 =
Shifted.planeCharges g (evenFst j) ^ 2 - Shifted.planeCharges g (evenSnd j) ^ 2n:ℕg:Fin n → ℚj:Fin n.succ⊢ ∀ (x : Fin n.succ),
x ≠ j →
Shifted.planeCharges g (evenFst x) * Shifted.planeCharges g (evenFst x) * Unshifted.basisAsCharges j (evenFst x) +
Shifted.planeCharges g (evenSnd x) * Shifted.planeCharges g (evenSnd x) *
Unshifted.basisAsCharges j (evenSnd x) =
0 Unshifted.basis_on_evenSnd_self n:ℕg:Fin n → ℚj:Fin n.succ⊢ Shifted.planeCharges g (evenFst j) * Shifted.planeCharges g (evenFst j) * 1 +
Shifted.planeCharges g (evenSnd j) * Shifted.planeCharges g (evenSnd j) * -1 =
Shifted.planeCharges g (evenFst j) ^ 2 - Shifted.planeCharges g (evenSnd j) ^ 2n:ℕg:Fin n → ℚj:Fin n.succ⊢ ∀ (x : Fin n.succ),
x ≠ j →
Shifted.planeCharges g (evenFst x) * Shifted.planeCharges g (evenFst x) * Unshifted.basisAsCharges j (evenFst x) +
Shifted.planeCharges g (evenSnd x) * Shifted.planeCharges g (evenSnd x) *
Unshifted.basisAsCharges j (evenSnd x) =
0 n:ℕg:Fin n → ℚj:Fin n.succ⊢ Shifted.planeCharges g (evenFst j) * Shifted.planeCharges g (evenFst j) * 1 +
Shifted.planeCharges g (evenSnd j) * Shifted.planeCharges g (evenSnd j) * -1 =
Shifted.planeCharges g (evenFst j) ^ 2 - Shifted.planeCharges g (evenSnd j) ^ 2n:ℕg:Fin n → ℚj:Fin n.succ⊢ ∀ (x : Fin n.succ),
x ≠ j →
Shifted.planeCharges g (evenFst x) * Shifted.planeCharges g (evenFst x) * Unshifted.basisAsCharges j (evenFst x) +
Shifted.planeCharges g (evenSnd x) * Shifted.planeCharges g (evenSnd x) *
Unshifted.basisAsCharges j (evenSnd x) =
0] n:ℕg:Fin n → ℚj:Fin n.succ⊢ Shifted.planeCharges g (evenFst j) * Shifted.planeCharges g (evenFst j) * 1 +
Shifted.planeCharges g (evenSnd j) * Shifted.planeCharges g (evenSnd j) * -1 =
Shifted.planeCharges g (evenFst j) ^ 2 - Shifted.planeCharges g (evenSnd j) ^ 2n:ℕg:Fin n → ℚj:Fin n.succ⊢ ∀ (x : Fin n.succ),
x ≠ j →
Shifted.planeCharges g (evenFst x) * Shifted.planeCharges g (evenFst x) * Unshifted.basisAsCharges j (evenFst x) +
Shifted.planeCharges g (evenSnd x) * Shifted.planeCharges g (evenSnd x) *
Unshifted.basisAsCharges j (evenSnd x) =
0
· n:ℕg:Fin n → ℚj:Fin n.succ⊢ Shifted.planeCharges g (evenFst j) * Shifted.planeCharges g (evenFst j) * 1 +
Shifted.planeCharges g (evenSnd j) * Shifted.planeCharges g (evenSnd j) * -1 =
Shifted.planeCharges g (evenFst j) ^ 2 - Shifted.planeCharges g (evenSnd j) ^ 2 simp only [mul_one, mul_neg] n:ℕg:Fin n → ℚj:Fin n.succ⊢ Shifted.planeCharges g (evenFst j) * Shifted.planeCharges g (evenFst j) +
-(Shifted.planeCharges g (evenSnd j) * Shifted.planeCharges g (evenSnd j)) =
Shifted.planeCharges g (evenFst j) ^ 2 - Shifted.planeCharges g (evenSnd j) ^ 2
ring All goals completed! 🐙
· n:ℕg:Fin n → ℚj:Fin n.succ⊢ ∀ (x : Fin n.succ),
x ≠ j →
Shifted.planeCharges g (evenFst x) * Shifted.planeCharges g (evenFst x) * Unshifted.basisAsCharges j (evenFst x) +
Shifted.planeCharges g (evenSnd x) * Shifted.planeCharges g (evenSnd x) *
Unshifted.basisAsCharges j (evenSnd x) =
0 intro k hkj n:ℕg:Fin n → ℚj:Fin n.succk:Fin n.succhkj:k ≠ j⊢ Shifted.planeCharges g (evenFst k) * Shifted.planeCharges g (evenFst k) * Unshifted.basisAsCharges j (evenFst k) +
Shifted.planeCharges g (evenSnd k) * Shifted.planeCharges g (evenSnd k) * Unshifted.basisAsCharges j (evenSnd k) =
0
erw [Unshifted.basis_on_evenFst_other hkj.symm, n:ℕg:Fin n → ℚj:Fin n.succk:Fin n.succhkj:k ≠ j⊢ Shifted.planeCharges g (evenFst k) * Shifted.planeCharges g (evenFst k) * 0 +
Shifted.planeCharges g (evenSnd k) * Shifted.planeCharges g (evenSnd k) * Unshifted.basisAsCharges j (evenSnd k) =
0 Unshifted.basis_on_evenSnd_other hkj.symm n:ℕg:Fin n → ℚj:Fin n.succk:Fin n.succhkj:k ≠ j⊢ Shifted.planeCharges g (evenFst k) * Shifted.planeCharges g (evenFst k) * 0 +
Shifted.planeCharges g (evenSnd k) * Shifted.planeCharges g (evenSnd k) * 0 =
0] n:ℕg:Fin n → ℚj:Fin n.succk:Fin n.succhkj:k ≠ j⊢ Shifted.planeCharges g (evenFst k) * Shifted.planeCharges g (evenFst k) * 0 +
Shifted.planeCharges g (evenSnd k) * Shifted.planeCharges 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 => Unshifted.basis i
| .inr i => Shifted.basis iE.2. Inclusion of the span of the basis into charges
A point in the span of the basis as a charge.
def Pa (f : Fin n.succ → ℚ) (g : Fin n → ℚ) : (PureU1 (2 * n.succ)).Charges :=
Unshifted.planeCharges f + Shifted.planeCharges gE.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⊢ (Unshifted.planeCharges f + Shifted.planeCharges g) (evenShiftFst j) = f j.succ + g j n:ℕf:Fin n.succ → ℚg:Fin n → ℚj:Fin n⊢ (Unshifted.planeCharges f + Shifted.planeCharges g) (evenShiftFst j) = f j.succ + g j] n:ℕf:Fin n.succ → ℚg:Fin n → ℚj:Fin n⊢ (Unshifted.planeCharges f + Shifted.planeCharges g) (evenShiftFst j) = f j.succ + g j
simp only [ACCSystemCharges.chargesAddCommMonoid_add] n:ℕf:Fin n.succ → ℚg:Fin n → ℚj:Fin n⊢ Unshifted.planeCharges f (evenShiftFst j) + Shifted.planeCharges g (evenShiftFst j) = f j.succ + g j
rw [Shifted.planeCharges_evenShiftFst, n:ℕf:Fin n.succ → ℚg:Fin n → ℚj:Fin n⊢ Unshifted.planeCharges 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⊢ Unshifted.planeCharges f (evenFst j.succ) + g j = f j.succ + g j All goals completed! 🐙
Unshifted.planeCharges_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⊢ (Unshifted.planeCharges f + Shifted.planeCharges g) (evenShiftSnd j) = -f j.castSucc - g j n:ℕf:Fin n.succ → ℚg:Fin n → ℚj:Fin n⊢ (Unshifted.planeCharges f + Shifted.planeCharges g) (evenShiftSnd j) = -f j.castSucc - g j] n:ℕf:Fin n.succ → ℚg:Fin n → ℚj:Fin n⊢ (Unshifted.planeCharges f + Shifted.planeCharges g) (evenShiftSnd j) = -f j.castSucc - g j
simp only [ACCSystemCharges.chargesAddCommMonoid_add] n:ℕf:Fin n.succ → ℚg:Fin n → ℚj:Fin n⊢ Unshifted.planeCharges f (evenShiftSnd j) + Shifted.planeCharges g (evenShiftSnd j) = -f j.castSucc - g j
rw [Shifted.planeCharges_evenShiftSnd, n:ℕf:Fin n.succ → ℚg:Fin n → ℚj:Fin n⊢ Unshifted.planeCharges 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⊢ Unshifted.planeCharges 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
Unshifted.planeCharges_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 → ℚ⊢ (Unshifted.planeCharges f + Shifted.planeCharges g) evenShiftZero = f 0 n:ℕf:Fin n.succ → ℚg:Fin n → ℚ⊢ (Unshifted.planeCharges f + Shifted.planeCharges g) evenShiftZero = f 0] n:ℕf:Fin n.succ → ℚg:Fin n → ℚ⊢ (Unshifted.planeCharges f + Shifted.planeCharges g) evenShiftZero = f 0
simp only [ACCSystemCharges.chargesAddCommMonoid_add] n:ℕf:Fin n.succ → ℚg:Fin n → ℚ⊢ Unshifted.planeCharges f evenShiftZero + Shifted.planeCharges g evenShiftZero = f 0
rw [Shifted.planeCharges_evenShiftZero, n:ℕf:Fin n.succ → ℚg:Fin n → ℚ⊢ Unshifted.planeCharges f evenShiftZero + 0 = f 0 All goals completed! 🐙 evenShiftZero_eq_evenFst_zero, n:ℕf:Fin n.succ → ℚg:Fin n → ℚ⊢ Unshifted.planeCharges f (evenFst 0) + 0 = f 0 All goals completed! 🐙
Unshifted.planeCharges_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 → ℚ⊢ (Unshifted.planeCharges f + Shifted.planeCharges g) evenShiftLast = -f (Fin.last n) n:ℕf:Fin n.succ → ℚg:Fin n → ℚ⊢ (Unshifted.planeCharges f + Shifted.planeCharges g) evenShiftLast = -f (Fin.last n)] n:ℕf:Fin n.succ → ℚg:Fin n → ℚ⊢ (Unshifted.planeCharges f + Shifted.planeCharges g) evenShiftLast = -f (Fin.last n)
simp only [ACCSystemCharges.chargesAddCommMonoid_add] n:ℕf:Fin n.succ → ℚg:Fin n → ℚ⊢ Unshifted.planeCharges f evenShiftLast + Shifted.planeCharges g evenShiftLast = -f (Fin.last n)
rw [Shifted.planeCharges_evenShiftLast, n:ℕf:Fin n.succ → ℚg:Fin n → ℚ⊢ Unshifted.planeCharges f evenShiftLast + 0 = -f (Fin.last n) All goals completed! 🐙 evenShiftLast_eq_evenSnd_last, n:ℕf:Fin n.succ → ℚg:Fin n → ℚ⊢ Unshifted.planeCharges f (evenSnd (Fin.last n)) + 0 = -f (Fin.last n) All goals completed! 🐙
Unshifted.planeCharges_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:Unshifted.planeCharges f + Shifted.planeCharges 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 • Unshifted.basisAsCharges i + Shifted.planeCharges g = 0hf:∀ (i : Fin n.succ), f i = 0⊢ ∀ (i : Fin n), g i = 0 Unshifted.planeCharges n:ℕf:Fin n.succ → ℚg:Fin n → ℚh:∑ i, f i • Unshifted.basisAsCharges i + Shifted.planeCharges 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 • Unshifted.basisAsCharges i + Shifted.planeCharges 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 • Unshifted.basisAsCharges i + Shifted.planeCharges 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:Shifted.planeCharges g = 0⊢ ∀ (i : Fin n), g i = 0
exact Shifted.planeCharges_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 = Unshifted.planeLinSols (f ∘ Sum.inl) + Shifted.planeLinSols (f ∘ Sum.inr) := by n:ℕf:Fin n.succ ⊕ Fin n → ℚ⊢ Pa' f = Unshifted.planeLinSols (f ∘ Sum.inl) + Shifted.planeLinSols (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:(Unshifted.planeLinSols (f ∘ Sum.inl) + Shifted.planeLinSols (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:(Unshifted.planeLinSols (f ∘ Sum.inl) + Shifted.planeLinSols (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:(Unshifted.planeLinSols (f ∘ Sum.inl) + Shifted.planeLinSols (f ∘ Sum.inr)).val = 0⊢ ∀ (i : Fin n.succ ⊕ Fin n), f i = 0
simp only [ACCSystemLinear.linSolsAddCommMonoid_add_val, Unshifted.planeLinSols_val,
Shifted.planeLinSols_val] at h1 n:ℕf:Fin n.succ ⊕ Fin n → ℚh:Pa' f = 0h1:Unshifted.planeCharges (f ∘ Sum.inl) + Shifted.planeCharges (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:Unshifted.planeCharges (f ∘ Sum.inl) + Shifted.planeCharges (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:Unshifted.planeCharges (f ∘ Sum.inl) + Shifted.planeCharges (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:Unshifted.planeCharges (f ∘ Sum.inl) + Shifted.planeCharges (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:Unshifted.planeCharges (f ∘ Sum.inl) + Shifted.planeCharges (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:Unshifted.planeCharges (f ∘ Sum.inl) + Shifted.planeCharges (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:Unshifted.planeCharges (f ∘ Sum.inl) + Shifted.planeCharges (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'⊢ (Unshifted.planeLinSols (Sum.elim g f ∘ Sum.inl) + Shifted.planeLinSols (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'⊢ (Unshifted.planeLinSols (Sum.elim g f ∘ Sum.inl) + Shifted.planeLinSols (Sum.elim g f ∘ Sum.inr)).val =
(Unshifted.planeLinSols (Sum.elim g' f' ∘ Sum.inl) + Shifted.planeLinSols (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'⊢ (Unshifted.planeLinSols (Sum.elim g f ∘ Sum.inl) + Shifted.planeLinSols (Sum.elim g f ∘ Sum.inr)).val =
(Unshifted.planeLinSols (Sum.elim g' f' ∘ Sum.inl) + Shifted.planeLinSols (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'⊢ (Unshifted.planeLinSols (Sum.elim g f ∘ Sum.inl) + Shifted.planeLinSols (Sum.elim g f ∘ Sum.inr)).val =
(Unshifted.planeLinSols (Sum.elim g' f' ∘ Sum.inl) + Shifted.planeLinSols (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'⊢ (Unshifted.planeLinSols (Sum.elim g f ∘ Sum.inl) + Shifted.planeLinSols (Sum.elim g f ∘ Sum.inr)).val =
(Unshifted.planeLinSols (Sum.elim g' f' ∘ Sum.inl) + Shifted.planeLinSols (Sum.elim g' f' ∘ Sum.inr)).val
simp only [succ_eq_add_one, ACCSystemLinear.linSolsAddCommMonoid_add_val,
Unshifted.planeLinSols_val, Shifted.planeLinSols_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'⊢ Unshifted.planeCharges (Sum.elim g f ∘ Sum.inl) + Shifted.planeCharges (Sum.elim g f ∘ Sum.inr) =
Unshifted.planeCharges (Sum.elim g' f' ∘ Sum.inl) + Shifted.planeCharges (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 = Unshifted.planeCharges g + Shifted.planeCharges f := by n:ℕS:(PureU1 (2 * n.succ)).LinSols⊢ ∃ g f, S.val = Unshifted.planeCharges g + Shifted.planeCharges 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 = Unshifted.planeCharges g + Shifted.planeCharges 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 = Unshifted.planeCharges g + Shifted.planeCharges 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 = Unshifted.planeCharges g + Shifted.planeCharges f
change Unshifted.planeLinSols _ + Shifted.planeLinSols _ = S at hf n:ℕS:(PureU1 (2 * n.succ)).LinSolsf:Fin n.succ ⊕ Fin n → ℚhf:((Unshifted.planeLinSols fun i => f (Sum.inl i)) + Shifted.planeLinSols fun i => f (Sum.inr i)) = S⊢ ∃ g f, S.val = Unshifted.planeCharges g + Shifted.planeCharges f
use f ∘ Sum.inl h n:ℕS:(PureU1 (2 * n.succ)).LinSolsf:Fin n.succ ⊕ Fin n → ℚhf:((Unshifted.planeLinSols fun i => f (Sum.inl i)) + Shifted.planeLinSols fun i => f (Sum.inr i)) = S⊢ ∃ f_1, S.val = Unshifted.planeCharges (f ∘ Sum.inl) + Shifted.planeCharges f_1
use f ∘ Sum.inr h n:ℕS:(PureU1 (2 * n.succ)).LinSolsf:Fin n.succ ⊕ Fin n → ℚhf:((Unshifted.planeLinSols fun i => f (Sum.inl i)) + Shifted.planeLinSols fun i => f (Sum.inr i)) = S⊢ S.val = Unshifted.planeCharges (f ∘ Sum.inl) + Shifted.planeCharges (f ∘ Sum.inr)
rw [← hf h n:ℕS:(PureU1 (2 * n.succ)).LinSolsf:Fin n.succ ⊕ Fin n → ℚhf:((Unshifted.planeLinSols fun i => f (Sum.inl i)) + Shifted.planeLinSols fun i => f (Sum.inr i)) = S⊢ ((Unshifted.planeLinSols fun i => f (Sum.inl i)) + Shifted.planeLinSols fun i => f (Sum.inr i)).val =
Unshifted.planeCharges (f ∘ Sum.inl) + Shifted.planeCharges (f ∘ Sum.inr) h n:ℕS:(PureU1 (2 * n.succ)).LinSolsf:Fin n.succ ⊕ Fin n → ℚhf:((Unshifted.planeLinSols fun i => f (Sum.inl i)) + Shifted.planeLinSols fun i => f (Sum.inr i)) = S⊢ ((Unshifted.planeLinSols fun i => f (Sum.inl i)) + Shifted.planeLinSols fun i => f (Sum.inr i)).val =
Unshifted.planeCharges (f ∘ Sum.inl) + Shifted.planeCharges (f ∘ Sum.inr)] h n:ℕS:(PureU1 (2 * n.succ)).LinSolsf:Fin n.succ ⊕ Fin n → ℚhf:((Unshifted.planeLinSols fun i => f (Sum.inl i)) + Shifted.planeLinSols fun i => f (Sum.inr i)) = S⊢ ((Unshifted.planeLinSols fun i => f (Sum.inl i)) + Shifted.planeLinSols fun i => f (Sum.inr i)).val =
Unshifted.planeCharges (f ∘ Sum.inl) + Shifted.planeCharges (f ∘ Sum.inr)
simp only [succ_eq_add_one, ACCSystemLinear.linSolsAddCommMonoid_add_val,
Unshifted.planeLinSols_val, Shifted.planeLinSols_val] h n:ℕS:(PureU1 (2 * n.succ)).LinSolsf:Fin n.succ ⊕ Fin n → ℚhf:((Unshifted.planeLinSols fun i => f (Sum.inl i)) + Shifted.planeLinSols fun i => f (Sum.inr i)) = S⊢ ((Unshifted.planeCharges fun i => f (Sum.inl i)) + Shifted.planeCharges fun i => f (Sum.inr i)) =
Unshifted.planeCharges (f ∘ Sum.inl) + Shifted.planeCharges (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 = Unshifted.planeCharges g + Shifted.planeCharges f) :
∃ (g' : Fin n.succ → ℚ) (f' : Fin n → ℚ),
S'.val = Unshifted.planeCharges g' + Shifted.planeCharges f' ∧
Shifted.planeCharges f' = Shifted.planeCharges f +
(S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges 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 = Unshifted.planeCharges g + Shifted.planeCharges f⊢ ∃ g' f',
S'.val = Unshifted.planeCharges g' + Shifted.planeCharges f' ∧
Shifted.planeCharges f' =
Shifted.planeCharges f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges j ∧
g' = g
let X := Shifted.planeCharges f +
(S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges 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 = Unshifted.planeCharges g + Shifted.planeCharges fX:(PureU1 (2 * n.succ)).Charges := Shifted.planeCharges f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges j⊢ ∃ g' f',
S'.val = Unshifted.planeCharges g' + Shifted.planeCharges f' ∧
Shifted.planeCharges f' =
Shifted.planeCharges f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges j ∧
g' = g
have hX : X ∈ Submodule.span ℚ (Set.range (Shifted.basisAsCharges)) := 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 = Unshifted.planeCharges g + Shifted.planeCharges fX:(PureU1 (2 * n.succ)).Charges := Shifted.planeCharges f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges j⊢ Shifted.planeCharges f ∈ Submodule.span ℚ (Set.range Shifted.basisAsCharges)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 = Unshifted.planeCharges g + Shifted.planeCharges fX:(PureU1 (2 * n.succ)).Charges := Shifted.planeCharges f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges j⊢ (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges j ∈
Submodule.span ℚ (Set.range Shifted.basisAsCharges) 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 = Unshifted.planeCharges g + Shifted.planeCharges fX:(PureU1 (2 * n.succ)).Charges := Shifted.planeCharges f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges jhX:X ∈ Submodule.span ℚ (Set.range Shifted.basisAsCharges)⊢ ∃ g' f',
S'.val = Unshifted.planeCharges g' + Shifted.planeCharges f' ∧
Shifted.planeCharges f' =
Shifted.planeCharges f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges j ∧
g' = g
exact (Shifted.planeCharges_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 = Unshifted.planeCharges g + Shifted.planeCharges fX:(PureU1 (2 * n.succ)).Charges := Shifted.planeCharges f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges j⊢ (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges j ∈
Submodule.span ℚ (Set.range Shifted.basisAsCharges) 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 = Unshifted.planeCharges g + Shifted.planeCharges fX:(PureU1 (2 * n.succ)).Charges := Shifted.planeCharges f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges jhX:X ∈ Submodule.span ℚ (Set.range Shifted.basisAsCharges)⊢ ∃ g' f',
S'.val = Unshifted.planeCharges g' + Shifted.planeCharges f' ∧
Shifted.planeCharges f' =
Shifted.planeCharges f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges j ∧
g' = g
exact (Shifted.smul_basisAsCharges_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 = Unshifted.planeCharges g + Shifted.planeCharges fX:(PureU1 (2 * n.succ)).Charges := Shifted.planeCharges f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges jhX:X ∈ Submodule.span ℚ (Set.range Shifted.basisAsCharges)⊢ ∃ g' f',
S'.val = Unshifted.planeCharges g' + Shifted.planeCharges f' ∧
Shifted.planeCharges f' =
Shifted.planeCharges f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges 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 = Unshifted.planeCharges g + Shifted.planeCharges fX:(PureU1 (2 * n.succ)).Charges := Shifted.planeCharges f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges jhX:X ∈ Submodule.span ℚ (Set.range Shifted.basisAsCharges)⊢ ∃ g' f',
S'.val = Unshifted.planeCharges g' + Shifted.planeCharges f' ∧
Shifted.planeCharges f' =
Shifted.planeCharges f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges 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 = Unshifted.planeCharges g + Shifted.planeCharges fX:(PureU1 (2 * n.succ)).Charges := Shifted.planeCharges f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges jhX:X ∈ Submodule.span ℚ (Set.range Shifted.basisAsCharges)hXsum:∃ c, ∑ i, c i • Shifted.basisAsCharges i = X⊢ ∃ g' f',
S'.val = Unshifted.planeCharges g' + Shifted.planeCharges f' ∧
Shifted.planeCharges f' =
Shifted.planeCharges f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges 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 = Unshifted.planeCharges g + Shifted.planeCharges fX:(PureU1 (2 * n.succ)).Charges := Shifted.planeCharges f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges jhX:X ∈ Submodule.span ℚ (Set.range Shifted.basisAsCharges)f':Fin n → ℚhf':∑ i, f' i • Shifted.basisAsCharges i = X⊢ ∃ g' f',
S'.val = Unshifted.planeCharges g' + Shifted.planeCharges f' ∧
Shifted.planeCharges f' =
Shifted.planeCharges f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges 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 = Unshifted.planeCharges g + Shifted.planeCharges fX:(PureU1 (2 * n.succ)).Charges := Shifted.planeCharges f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges jhX:X ∈ Submodule.span ℚ (Set.range Shifted.basisAsCharges)f':Fin n → ℚhf':∑ i, f' i • Shifted.basisAsCharges i = X⊢ ∃ f',
S'.val = Unshifted.planeCharges g + Shifted.planeCharges f' ∧
Shifted.planeCharges f' =
Shifted.planeCharges f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges 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 = Unshifted.planeCharges g + Shifted.planeCharges fX:(PureU1 (2 * n.succ)).Charges := Shifted.planeCharges f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges jhX:X ∈ Submodule.span ℚ (Set.range Shifted.basisAsCharges)f':Fin n → ℚhf':∑ i, f' i • Shifted.basisAsCharges i = X⊢ S'.val = Unshifted.planeCharges g + Shifted.planeCharges f' ∧
Shifted.planeCharges f' =
Shifted.planeCharges f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges j ∧
g = g
change Shifted.planeCharges 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 = Unshifted.planeCharges g + Shifted.planeCharges fX:(PureU1 (2 * n.succ)).Charges := Shifted.planeCharges f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges jhX:X ∈ Submodule.span ℚ (Set.range Shifted.basisAsCharges)f':Fin n → ℚhf':Shifted.planeCharges f' = X⊢ S'.val = Unshifted.planeCharges g + Shifted.planeCharges f' ∧
Shifted.planeCharges f' =
Shifted.planeCharges f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges 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 = Unshifted.planeCharges g + Shifted.planeCharges fX:(PureU1 (2 * n.succ)).Charges := Shifted.planeCharges f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges jhX:X ∈ Submodule.span ℚ (Set.range Shifted.basisAsCharges)f':Fin n → ℚhf':Shifted.planeCharges f' = X⊢ S'.val = Unshifted.planeCharges g + X ∧
X = Shifted.planeCharges f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges 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 = Unshifted.planeCharges g + Shifted.planeCharges fX:(PureU1 (2 * n.succ)).Charges := Shifted.planeCharges f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges jhX:X ∈ Submodule.span ℚ (Set.range Shifted.basisAsCharges)f':Fin n → ℚhf':Shifted.planeCharges f' = X⊢ S'.val = Unshifted.planeCharges g + X ∧
X = Shifted.planeCharges f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges 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 = Unshifted.planeCharges g + Shifted.planeCharges fX:(PureU1 (2 * n.succ)).Charges := Shifted.planeCharges f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges jhX:X ∈ Submodule.span ℚ (Set.range Shifted.basisAsCharges)f':Fin n → ℚhf':Shifted.planeCharges f' = X⊢ S'.val =
Unshifted.planeCharges g +
(Shifted.planeCharges f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges 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 = Unshifted.planeCharges g + Shifted.planeCharges fX:(PureU1 (2 * n.succ)).Charges := Shifted.planeCharges f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges jhX:X ∈ Submodule.span ℚ (Set.range Shifted.basisAsCharges)f':Fin n → ℚhf':Shifted.planeCharges f' = X⊢ S'.val =
Unshifted.planeCharges g + Shifted.planeCharges f +
(S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges 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 = Unshifted.planeCharges g + Shifted.planeCharges fX:(PureU1 (2 * n.succ)).Charges := Shifted.planeCharges f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges jhX:X ∈ Submodule.span ℚ (Set.range Shifted.basisAsCharges)f':Fin n → ℚhf':Shifted.planeCharges f' = X⊢ S'.val = S.val + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges 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 = Unshifted.planeCharges g + Shifted.planeCharges fX:(PureU1 (2 * n.succ)).Charges := Shifted.planeCharges f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges jhX:X ∈ Submodule.span ℚ (Set.range Shifted.basisAsCharges)f':Fin n → ℚhf':Shifted.planeCharges f' = X⊢ S'.val = S.val + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges 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 = Unshifted.planeCharges g + Shifted.planeCharges fX:(PureU1 (2 * n.succ)).Charges := Shifted.planeCharges f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges jhX:X ∈ Submodule.span ℚ (Set.range Shifted.basisAsCharges)f':Fin n → ℚhf':Shifted.planeCharges f' = X⊢ S'.val = S.val + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges 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 = Unshifted.planeCharges g + Shifted.planeCharges fX:(PureU1 (2 * n.succ)).Charges := Shifted.planeCharges f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges jhX:X ∈ Submodule.span ℚ (Set.range Shifted.basisAsCharges)f':Fin n → ℚhf':Shifted.planeCharges f' = X⊢ S'.val = S.val + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges j
apply Shifted.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 = Unshifted.planeCharges g + Shifted.planeCharges fX:(PureU1 (2 * n.succ)).Charges := Shifted.planeCharges f + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges jhX:X ∈ Submodule.span ℚ (Set.range Shifted.basisAsCharges)f':Fin n → ℚhf':Shifted.planeCharges f' = XhS:S'.val = S.val + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges j⊢ S'.val = S.val + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) • Shifted.basisAsCharges j
exact hS All goals completed! 🐙