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.VectorLike

Splitting 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 section

A. 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)
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, = iS i = T i All goals completed! 🐙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 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 := n:1 + (n + n + 1) = 2 * n.succ 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)))
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)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))))) All goals completed! 🐙

A.3. Lemmas relating the two splittings

lemma evenShiftZero_eq_evenFst_zero : @evenShiftZero n = evenFst 0 := rfln:evenShiftLast = (evenSnd (Fin.last n)) n:1 + (n + n) = n + 1 + n All goals completed! 🐙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 n1 + j = j + 1 All goals completed! 🐙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 n1 + (n + j) = n.succ + j 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 0

B.2. Components of the basis vectors

lemma basis_on_evenFst_self (j : Fin n.succ) : basisAsCharges j (evenFst j) = 1 := n:j:Fin n.succbasisAsCharges j (evenFst j) = 1 All goals completed! 🐙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 n:k:Fin n.succj:Fin n.succh:¬k = jh1:¬k.addNat (n + 1) = Fin.castAdd (n + 1) kh2:j = k + (n + 1)False All goals completed! 🐙 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 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 := n:k:Fin n.succj:Fin (2 * n.succ)h1:j evenFst kh2:j evenSnd kbasisAsCharges k j = 0 All goals completed! 🐙n:j:Fin n.succi:Fin n.succh✝:¬i.addNat (n + 1) = Fin.castAdd (n + 1) jh3:¬i = jh2:i = j + (n + 1)False n:j:Fin n.succi:Fin n.succh✝:¬i.addNat (n + 1) = Fin.castAdd (n + 1) jh2:i = j + (n + 1)False all_goals All goals completed! 🐙All goals completed! 🐙n:k:Fin n.succj:Fin n.succh:k j-0 = 0 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 := n:j:Fin n.succ(accGrav (2 * n.succ)) (basisAsCharges j) = 0 All goals completed! 🐙

B.4. The basis vectors satisfy the cubic ACC

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.succi:Fin n.succx✝:i univ((fun i => basisAsCharges j i ^ 3) evenFst) i + ((fun i => basisAsCharges j i ^ 3) evenSnd) i = 0 n:j:Fin n.succi:Fin n.succx✝:i univbasisAsCharges j (evenFst i) ^ 3 + (-basisAsCharges j (evenFst i)) ^ 3 = 0 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, n:j:Fin n.succ (i : Fin (PureU1 (2 * n.succ)).numberLinear), ((PureU1 (2 * n.succ)).linearACCs i) (basisAsCharges j) = 0 n:j:Fin n.succi:Fin (PureU1 (2 * n.succ)).numberLinear((PureU1 (2 * n.succ)).linearACCs i) (basisAsCharges j) = 0 match i with 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 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 i

B.7. Components of the inclusion into charges

n:f:Fin n.succ j:Fin n.succf 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.succf j * basisAsCharges j (evenFst j) = f j 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 All goals completed! 🐙n:f:Fin n.succ j:Fin n.succf 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.succf j * basisAsCharges j (evenSnd j) = -f j 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 All goals completed! 🐙lemma planeCharges_evenSnd_evenFst (f : Fin n.succ ) : planeCharges f evenSnd = - planeCharges f evenFst := n:f:Fin n.succ planeCharges f evenSnd = -planeCharges f evenFst n:f:Fin n.succ j:Fin n.succ(planeCharges f evenSnd) j = (-planeCharges f evenFst) j 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 := n:f:Fin n.succ (accGrav (2 * n.succ)) (planeCharges f) = 0 All goals completed! 🐙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:Fin n.succx✝:i univ((fun i => planeCharges f i ^ 3) evenFst) i + ((fun i => planeCharges f i ^ 3) evenSnd) i = 0 n:f:Fin n.succ i:Fin n.succx✝:i univf i ^ 3 + (-f i) ^ 3 = 0 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 := n:f:Fin n.succ h:planeCharges f = 0 (i : Fin n.succ), f i = 0 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.

def planeLinSols (f : Fin n.succ ) : (PureU1 (2 * n.succ)).LinSols := i, f i basis 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 All goals completed! 🐙

B.11. The basis vectors are linearly independent

theorem basis_linear_independent : LinearIndependent (@basis n) := n:LinearIndependent basis n: (g : Fin n.succ ), i, g i basis i = 0 (i : Fin n.succ), g i = 0 n:f:Fin n.succ h: i, f i basis i = 0 (i : Fin n.succ), f i = 0 n:f:Fin n.succ h:planeLinSols f = 0 (i : Fin n.succ), f i = 0 All goals completed! 🐙

B.12. Every vector-like even solution is in the span of the basis of the unshifted plane

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) 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 0

C.2. Components of the vectors

lemma basis_on_evenShiftFst_self (j : Fin n) : basisAsCharges j (evenShiftFst j) = 1 := n:j:Fin nbasisAsCharges j (evenShiftFst j) = 1 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 := n:k:Fin nj:Fin (2 * n.succ)h1:j evenShiftFst kh2:j evenShiftSnd kbasisAsCharges k j = 0 All goals completed! 🐙n:k:Fin nj:Fin nh:¬k = jbasisAsCharges k (evenShiftFst j) = 0 n:k:Fin nj:Fin nh:¬k = jevenShiftFst j evenShiftFst kn:k:Fin nj:Fin nh:¬k = jevenShiftFst j evenShiftSnd k n:k:Fin nj:Fin nh:¬k = jevenShiftFst j evenShiftFst kn:k:Fin nj:Fin nh:¬k = jevenShiftFst j evenShiftSnd k n:k:Fin nj:Fin nh:¬k = j¬1 + j = 1 + (n + k) n:k:Fin nj:Fin nh:¬k = j¬1 + j = 1 + kn:k:Fin nj:Fin nh:¬k = j¬1 + j = 1 + (n + k) All goals completed! 🐙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 + n0 = - -1 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 + n0 = - -1 all_goals All goals completed! 🐙All goals completed! 🐙n:k:Fin nj:Fin nh:k j-0 = 0 All goals completed! 🐙set_option backward.isDefEq.respectTransparency false in lemma basis_on_evenShiftZero (j : Fin n) : basisAsCharges j evenShiftZero = 0 := n:j:Fin nbasisAsCharges j evenShiftZero = 0 n:j:Fin nevenShiftZero evenShiftFst jn:j:Fin nevenShiftZero evenShiftSnd j n:j:Fin nevenShiftZero evenShiftFst jn:j:Fin nevenShiftZero evenShiftSnd j n:j:Fin n¬0 = 1 + (n + j) n:j:Fin n¬0 = 1 + jn:j:Fin n¬0 = 1 + (n + j) All goals completed! 🐙set_option backward.isDefEq.respectTransparency false in lemma basis_on_evenShiftLast (j : Fin n) : basisAsCharges j evenShiftLast = 0 := n:j:Fin nbasisAsCharges j evenShiftLast = 0 n:j:Fin nevenShiftLast evenShiftFst jn:j:Fin nevenShiftLast evenShiftSnd j n:j:Fin nevenShiftLast evenShiftFst jn:j:Fin nevenShiftLast evenShiftSnd j n:j:Fin n¬1 + (n + n) = 1 + (n + j) n:j:Fin n¬1 + (n + n) = 1 + jn:j:Fin n¬1 + (n + n) = 1 + (n + j) All goals completed! 🐙

C.3. The vectors satisfy the linear ACCs

lemma basis_linearACC (j : Fin n) : (accGrav (2 * n.succ)) (basisAsCharges j) = 0 := n:j:Fin n(accGrav (2 * n.succ)) (basisAsCharges j) = 0 All goals completed! 🐙

C.4. The vectors satisfy the cubic ACC

n:j:Fin n0 ^ 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 x, (basisAsCharges j (evenShiftFst x) ^ 3 + basisAsCharges j (evenShiftSnd x) ^ 3) = 0 n:j:Fin ni:Fin nx✝:i univbasisAsCharges j (evenShiftFst i) ^ 3 + basisAsCharges j (evenShiftSnd i) ^ 3 = 0 n:j:Fin ni:Fin nx✝:i univbasisAsCharges j (evenShiftFst i) ^ 3 + (-basisAsCharges j (evenShiftFst i)) ^ 3 = 0 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, n:j:Fin n (i : Fin (PureU1 (2 * n.succ)).numberLinear), ((PureU1 (2 * n.succ)).linearACCs i) (basisAsCharges j) = 0 n:j:Fin ni:Fin (PureU1 (2 * n.succ)).numberLinear((PureU1 (2 * n.succ)).linearACCs i) (basisAsCharges j) = 0 match i with 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 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 i

C.8. Components of the inclusion into charges

n:f:Fin n j:Fin nf 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 nf j * basisAsCharges j (evenShiftFst j) = f j All goals completed! 🐙 n:f:Fin n j:Fin n (x : Fin n), x j f x * basisAsCharges x (evenShiftFst j) = 0 All goals completed! 🐙n:f:Fin n j:Fin nf 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 nf j * basisAsCharges j (evenShiftSnd j) = -f j All goals completed! 🐙 n:f:Fin n j:Fin n (x : Fin n), x j f x * basisAsCharges x (evenShiftSnd j) = 0 All goals completed! 🐙lemma planeCharges_evenShiftZero (f : Fin n ) : planeCharges f (evenShiftZero) = 0 := n:f:Fin n planeCharges f evenShiftZero = 0 All goals completed! 🐙lemma planeCharges_evenShiftLast (f : Fin n ) : planeCharges f evenShiftLast = 0 := n:f:Fin n planeCharges f evenShiftLast = 0 All goals completed! 🐙

C.9. The inclusion into charges satisfies the cubic ACC

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 x, (planeCharges f (evenShiftFst x) ^ 3 + planeCharges f (evenShiftSnd x) ^ 3) = 0 n:f:Fin n i:Fin nx✝:i univplaneCharges f (evenShiftFst i) ^ 3 + planeCharges f (evenShiftSnd i) ^ 3 = 0 n:f:Fin n i:Fin nx✝:i univf i ^ 3 + (-f i) ^ 3 = 0 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 := n:f:Fin n h:planeCharges f = 0 (i : Fin n), f i = 0 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) := n:f:Fin n planeCharges f Submodule.span (Set.range basisAsCharges) 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.

def planeLinSols (f : Fin n ) : (PureU1 (2 * n.succ)).LinSols := i, f i basis 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 All goals completed! 🐙

C.13. The basis vectors are linearly independent

theorem basis_linear_independent : LinearIndependent (@basis n) := n:LinearIndependent basis n: (g : Fin n ), i, g i basis i = 0 (i : Fin n), g i = 0 n:f:Fin n h: i, f i basis i = 0 (i : Fin n), f i = 0 n:f:Fin n h:planeLinSols f = 0 (i : Fin n), f i = 0 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) := n:S:(PureU1 (2 * n.succ)).LinSolsj:Fin n(S.val (evenShiftSnd j) - S.val (evenShiftFst j)) basisAsCharges j Submodule.span (Set.range basisAsCharges) 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.

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 jS.val ((Equiv.symm (Equiv.swap (evenShiftFst j) (evenShiftSnd j))) i) = S.val i + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) * 0 All goals completed! 🐙

D. Mixed cubic ACCs involving points from both planes

n:g:Fin n.succ j:Fin ng j.succ * g j.succ + -(-g j.castSucc * -g j.castSucc) = g j.succ ^ 2 - g j.castSucc ^ 2 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 n:g:Fin n.succ j:Fin nk:Fin nhkj:k jUnshifted.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 [n:g:Fin n.succ j:Fin nk:Fin nhkj:k jUnshifted.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 n:g:Fin n.succ j:Fin nk:Fin nhkj:k jUnshifted.planeCharges g (evenShiftFst k) * Unshifted.planeCharges g (evenShiftFst k) * 0 + Unshifted.planeCharges g (evenShiftSnd k) * Unshifted.planeCharges g (evenShiftSnd k) * 0 = 0n:g:Fin n.succ j:Fin nk:Fin nhkj:k jUnshifted.planeCharges g (evenShiftFst k) * Unshifted.planeCharges g (evenShiftFst k) * 0 + Unshifted.planeCharges g (evenShiftSnd k) * Unshifted.planeCharges g (evenShiftSnd k) * 0 = 0 All goals completed! 🐙n:g:Fin n j:Fin n.succShifted.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.succShifted.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 n:g:Fin n j:Fin n.succShifted.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 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 n:g:Fin n j:Fin n.succk:Fin n.succhkj:k jShifted.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 [n:g:Fin n j:Fin n.succk:Fin n.succhkj:k jShifted.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 n:g:Fin n j:Fin n.succk:Fin n.succhkj:k jShifted.planeCharges g (evenFst k) * Shifted.planeCharges g (evenFst k) * 0 + Shifted.planeCharges g (evenSnd k) * Shifted.planeCharges g (evenSnd k) * 0 = 0n:g:Fin n j:Fin n.succk:Fin n.succhkj:k jShifted.planeCharges g (evenFst k) * Shifted.planeCharges g (evenFst k) * 0 + Shifted.planeCharges g (evenSnd k) * Shifted.planeCharges g (evenSnd k) * 0 = 0 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 i

E.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 g

E.3. Components of the inclusion into charges

All goals completed! 🐙n:f:Fin n.succ g:Fin n j:Fin n-f j.castSucc + -g j = -f j.castSucc - g j All goals completed! 🐙All goals completed! 🐙All goals completed! 🐙

E.4. Kernel of the inclusion into charges

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 = 0f i = 0 All goals completed! 🐙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 hf: (i : Fin n.succ), f i = 0h:Shifted.planeCharges g = 0 (i : Fin n), g i = 0 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.

def Pa' (f : (Fin n.succ) (Fin n) ) : (PureU1 (2 * n.succ)).LinSols := i, f i basisa i
lemma Pa'_P'_P!' (f : (Fin n.succ) (Fin n) ) : Pa' f = Unshifted.planeLinSols (f Sum.inl) + Shifted.planeLinSols (f Sum.inr) := n:f:Fin n.succ Fin n Pa' f = Unshifted.planeLinSols (f Sum.inl) + Shifted.planeLinSols (f Sum.inr) All goals completed! 🐙

E.6. The combined basis vectors are linearly independent

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.planeCharges (f Sum.inl) + Shifted.planeCharges (f Sum.inr) = 0 (i : Fin n.succ Fin n), f i = 0 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 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 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.succf (Sum.inl i) = 0n: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 nf (Sum.inr i) = 0 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.succf (Sum.inl i) = 0 All goals completed! 🐙 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 nf (Sum.inr i) = 0 All goals completed! 🐙

E.7. Injectivity of the inclusion into linear solutions

All goals completed! 🐙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 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) All goals completed! 🐙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' 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 := n:Fintype.card (Fin n.succ Fin n) = finrank (PureU1 (2 * n.succ)).LinSols erw [n:Fintype.card (Fin n.succ Fin n) = Nat.mul 2 n + 1n:Fintype.card (Fin n.succ Fin n) = Nat.mul 2 n + 1 n:n.succ + n = 2 * n + 1 All goals completed! 🐙

E.9. The basis vectors as a basis

F. Every Lienar solution is the sum of a point from each plane

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) 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) All goals completed! 🐙

F.1. Relation under permutations

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' = XS'.val = S.val + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) Shifted.basisAsCharges j 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 jS'.val = S.val + (S.val (evenShiftSnd j) - S.val (evenShiftFst j)) Shifted.basisAsCharges j All goals completed! 🐙