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

Charges assignments with constant abs

We look at charge assignments in which all charges have the same absolute value.

@[expose] public section

The condition for two rationals to have the same square (equivalent to same abs).

def ConstAbsProp : ℚ × ℚ → Prop := fun s => s.1^2 = s.2^2

The condition on a charge assignment S to have constant absolute value among charges.

@[simp] def ConstAbs (S : (PureU1 n).Charges) : Prop := ∀ i j, (S i) ^ 2 = (S j) ^ 2
set_option backward.isDefEq.respectTransparency false in lemma constAbs_perm (S : (PureU1 n).Charges) (M :(FamilyPermutations n).group) : ConstAbs ((FamilyPermutations n).rep M S) ↔ ConstAbs S := n:ℕS:(PureU1 n).ChargesM:(FamilyPermutations n).group⊢ ConstAbs (((FamilyPermutations n).rep M) S) ↔ ConstAbs S n:ℕS:(PureU1 n).ChargesM:(FamilyPermutations n).group⊢ (∀ (i j : Fin (PureU1 n).numberCharges), S (M⁻¹ i) ^ 2 = S (M⁻¹ j) ^ 2) ↔ ∀ (i j : Fin (PureU1 n).numberCharges), S i ^ 2 = S j ^ 2 n:ℕS:(PureU1 n).ChargesM:(FamilyPermutations n).grouph:∀ (i j : Fin (PureU1 n).numberCharges), S (M⁻¹ i) ^ 2 = S (M⁻¹ j) ^ 2i:Fin (PureU1 n).numberChargesj:Fin (PureU1 n).numberCharges⊢ S i ^ 2 = S j ^ 2 n:ℕS:(PureU1 n).ChargesM:(FamilyPermutations n).grouph:∀ (i j : Fin (PureU1 n).numberCharges), S (M⁻¹ i) ^ 2 = S (M⁻¹ j) ^ 2i:Fin (PureU1 n).numberChargesj:Fin (PureU1 n).numberChargesh2:S (M⁻¹ (M.toFun i)) ^ 2 = S (M⁻¹ (M.toFun j)) ^ 2⊢ S i ^ 2 = S j ^ 2 n:ℕS:(PureU1 n).ChargesM:(FamilyPermutations n).grouph:∀ (i j : Fin (PureU1 n).numberCharges), S (M⁻¹ i) ^ 2 = S (M⁻¹ j) ^ 2i:Fin (PureU1 n).numberChargesj:Fin (PureU1 n).numberChargesh2:S i ^ 2 = S j ^ 2⊢ S i ^ 2 = S j ^ 2 All goals completed! 🐙n:ℕS:(PureU1 n).ChargesCA:ConstAbs S⊢ ConstAbs (((FamilyPermutations n).rep (Equiv.symm (Tuple.sort S))) S) All goals completed! 🐙

The condition for a set of charges to be sorted, and have constAbs

def ConstAbsSorted (S : (PureU1 n).Charges) : Prop := ConstAbs S ∧ Sorted S
n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Sk:Fin n.succi:Fin n.succhk:S k ≤ 0hik:i ≤ khSS:S i ≤ S kht:S i = S k ∨ S i = -S k⊢ S i = S k n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Sk:Fin n.succi:Fin n.succhk:S k ≤ 0hik:i ≤ khSS:S i ≤ S kh✝:S i = S k⊢ S i = S kn:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Sk:Fin n.succi:Fin n.succhk:S k ≤ 0hik:i ≤ khSS:S i ≤ S kh✝:S i = -S k⊢ S i = S k n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Sk:Fin n.succi:Fin n.succhk:S k ≤ 0hik:i ≤ khSS:S i ≤ S kh✝:S i = S k⊢ S i = S kn:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Sk:Fin n.succi:Fin n.succhk:S k ≤ 0hik:i ≤ khSS:S i ≤ S kh✝:S i = -S k⊢ S i = S k n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Sk:Fin n.succi:Fin n.succhk:S k ≤ 0hik:i ≤ khSS:S i ≤ S kh:S i = -S k⊢ S i = S k n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Sk:Fin n.succi:Fin n.succhk:S k ≤ 0hik:i ≤ khSS:S i ≤ S kh:S i = S k⊢ S i = S k All goals completed! 🐙 n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Sk:Fin n.succi:Fin n.succhk:S k ≤ 0hik:i ≤ khSS:S i ≤ S kh:S i = -S k⊢ S i = S k All goals completed! 🐙include hS in lemma val_le_zero {i : Fin n.succ} (hi : S i ≤ 0) : S i = S (0 : Fin n.succ) := n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Si:Fin n.succhi:S i ≤ 0⊢ S i = S 0 n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Si:Fin n.succhi:S i ≤ 0⊢ S 0 = S i n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Si:Fin n.succhi:S i ≤ 0⊢ 0 ≤ i All goals completed! 🐙n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Sk:Fin n.succi:Fin n.succhk:0 ≤ S khik:k ≤ ihSS:S k ≤ S iht:S i = S k ∨ S i = -S k⊢ S i = S k n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Sk:Fin n.succi:Fin n.succhk:0 ≤ S khik:k ≤ ihSS:S k ≤ S ih✝:S i = S k⊢ S i = S kn:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Sk:Fin n.succi:Fin n.succhk:0 ≤ S khik:k ≤ ihSS:S k ≤ S ih✝:S i = -S k⊢ S i = S k n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Sk:Fin n.succi:Fin n.succhk:0 ≤ S khik:k ≤ ihSS:S k ≤ S ih✝:S i = S k⊢ S i = S kn:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Sk:Fin n.succi:Fin n.succhk:0 ≤ S khik:k ≤ ihSS:S k ≤ S ih✝:S i = -S k⊢ S i = S k n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Sk:Fin n.succi:Fin n.succhk:0 ≤ S khik:k ≤ ihSS:S k ≤ S ih:S i = -S k⊢ S i = S k n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Sk:Fin n.succi:Fin n.succhk:0 ≤ S khik:k ≤ ihSS:S k ≤ S ih:S i = S k⊢ S i = S k All goals completed! 🐙 n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Sk:Fin n.succi:Fin n.succhk:0 ≤ S khik:k ≤ ihSS:S k ≤ S ih:S i = -S k⊢ S i = S k All goals completed! 🐙include hS in lemma zero_gt (h0 : 0 ≤ S (0 : Fin n.succ)) (i : Fin n.succ) : S (0 : Fin n.succ) = S i := n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Sh0:0 ≤ S 0i:Fin n.succ⊢ S 0 = S i n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Sh0:0 ≤ S 0i:Fin n.succ⊢ S i = S 0 All goals completed! 🐙n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Si:Fin n.succj:Fin n.succhi:S i ≤ 0hj:0 ≤ S jhSS:S i = S j ∨ S i = -S j⊢ S i = -S j n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Si:Fin n.succj:Fin n.succhi:S i ≤ 0hj:0 ≤ S jh:S i = S j⊢ S i = -S jn:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Si:Fin n.succj:Fin n.succhi:S i ≤ 0hj:0 ≤ S jh:S i = -S j⊢ S i = -S j n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Si:Fin n.succj:Fin n.succhi:S i ≤ 0hj:0 ≤ S jh:S i = S j⊢ S i = -S j n:ℕS:(PureU1 n.succ).Chargesi:Fin n.succj:Fin n.succhS:ConstAbsSorted Shi:S j ≤ 0hj:0 ≤ S jh:S i = S j⊢ S j = -S j All goals completed! 🐙 n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Si:Fin n.succj:Fin n.succhi:S i ≤ 0hj:0 ≤ S jh:S i = -S j⊢ S i = -S j All goals completed! 🐙n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Sh0:S 0 = 0i:Fin (PureU1 n.succ).numberChargesht:S i ^ 2 = 0 ^ 2⊢ S i = 0 i n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Sh0:S 0 = 0i:Fin (PureU1 n.succ).numberChargesht:S i = 0⊢ S i = 0 i All goals completed! 🐙

A boundary of S : (PureU1 n.succ).charges (assumed sorted, constAbs and non-zero) is defined as a element of k ∈ Fin n such that S k.castSucc and S k.succ are different signs.

@[simp] def Boundary (S : (PureU1 n.succ).Charges) (k : Fin n) : Prop := S k.castSucc < 0 ∧ 0 < S k.succ
include hS in lemma boundary_castSucc {k : Fin n} (hk : Boundary S k) : S k.castSucc = S (0 : Fin n.succ) := (lt_eq hS (le_of_lt hk.left) (Fin.zero_le k.castSucc : 0 ≤ k.castSucc)).symmn:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Sk:Fin nhk:Boundary S khn:-S k.succ = S 0⊢ S k.succ = -S 0 All goals completed! 🐙lemma boundary_split (k : Fin n) : k.succ.val + (n.succ - k.succ.val) = n.succ := n:ℕk:Fin n⊢ ↑k.succ + (n.succ - ↑k.succ) = n.succ All goals completed! 🐙set_option backward.isDefEq.respectTransparency false in lemma boundary_accGrav' (k : Fin n) : accGrav n.succ S = ∑ i : Fin (k.succ.val + (n.succ - k.succ.val)), S (Fin.cast (boundary_split k) i) := n:ℕS:(PureU1 n.succ).Chargesk:Fin n⊢ (accGrav n.succ) S = ∑ i, S (Fin.cast ⋯ i) n:ℕS:(PureU1 n.succ).Chargesk:Fin n⊢ ∑ i, S i = ∑ x, S (Fin.cast ⋯ x) erw [n:ℕS:(PureU1 n.succ).Chargesk:Fin n⊢ ∑ i, S i = ∑ i ∈ ?m.34, ?m.36 in:ℕS:(PureU1 n.succ).Chargesk:Fin n⊢ ∀ (i : Fin (↑k.succ + (n.succ - ↑k.succ))), i ∈ univ ↔ (Fin.castOrderIso ⋯).toEquiv i ∈ ?m.34n:ℕS:(PureU1 n.succ).Chargesk:Fin n⊢ ∀ i ∈ univ, S (Fin.cast ⋯ i) = ?m.36 ((Fin.castOrderIso ⋯).toEquiv i)n:ℕS:(PureU1 n.succ).Chargesk:Fin n⊢ Finset (Fin n.succ)n:ℕS:(PureU1 n.succ).Chargesk:Fin n⊢ Fin n.succ → ℚn:ℕS:(PureU1 n.succ).Chargesk:Fin n⊢ ∀ (i : Fin (↑k.succ + (n.succ - ↑k.succ))), i ∈ univ ↔ (Fin.castOrderIso ⋯).toEquiv i ∈ univn:ℕS:(PureU1 n.succ).Chargesk:Fin n⊢ ∀ i ∈ univ, S (Fin.cast ⋯ i) = S ((Fin.castOrderIso ⋯).toEquiv i) n:ℕS:(PureU1 n.succ).Chargesk:Fin n⊢ ∀ (i : Fin (↑k.succ + (n.succ - ↑k.succ))), i ∈ univ ↔ (Fin.castOrderIso ⋯).toEquiv i ∈ univ n:ℕS:(PureU1 n.succ).Chargesk:Fin ni:Fin (↑k.succ + (n.succ - ↑k.succ))⊢ i ∈ univ ↔ (Fin.castOrderIso ⋯).toEquiv i ∈ univ All goals completed! 🐙 n:ℕS:(PureU1 n.succ).Chargesk:Fin n⊢ ∀ i ∈ univ, S (Fin.cast ⋯ i) = S ((Fin.castOrderIso ⋯).toEquiv i) All goals completed! 🐙n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Sk:Fin nhk:Boundary S khfst:∀ (i : Fin ↑k.succ), S (Fin.cast ⋯ (Fin.castAdd (n.succ - ↑k.succ) i)) = S k.castSucchsnd:∀ (i : Fin (n.succ - ↑k.succ)), S (Fin.cast ⋯ (Fin.natAdd (↑k.succ) i)) = S k.succ⊢ (↑↑k + 1) * S 0 + (↑n - ↑↑k) * -S 0 = (2 * ↑↑k + 1 - ↑n) * S 0 All goals completed! 🐙

A S ∈ charges has a boundary if there exists a k ∈ Fin n which is a boundary.

@[simp] def HasBoundary (S : (PureU1 n.succ).Charges) : Prop := ∃ (k : Fin n), Boundary S k
include hS in lemma not_hasBoundary_zero_le (hnot : ¬ (HasBoundary S)) (h0 : S (0 : Fin n.succ) < 0) : ∀ i, S (0 : Fin n.succ) = S i := n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Shnot:¬HasBoundary Sh0:S 0 < 0⊢ ∀ (i : Fin (PureU1 n.succ).numberCharges), S 0 = S i n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Shnot:¬HasBoundary Sh0:S 0 < 0i:ℕhi:i < (PureU1 n.succ).numberCharges⊢ S 0 = S ⟨i, hi⟩ n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Sh0:S 0 < 0i:ℕhi:i < (PureU1 n.succ).numberChargeshnot:∀ (x : Fin n), S x.castSucc < 0 → S x.succ ≤ 0⊢ S 0 = S ⟨i, hi⟩ n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Sh0:S 0 < 0hnot:∀ (x : Fin n), S x.castSucc < 0 → S x.succ ≤ 0hi:0 < (PureU1 n.succ).numberCharges⊢ S 0 = S ⟨0, hi⟩n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Sh0:S 0 < 0hnot:∀ (x : Fin n), S x.castSucc < 0 → S x.succ ≤ 0n✝:ℕa✝:∀ (hi : n✝ < (PureU1 n.succ).numberCharges), S 0 = S ⟨n✝, hi⟩hi:n✝ + 1 < (PureU1 n.succ).numberCharges⊢ S 0 = S ⟨n✝ + 1, hi⟩ n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Sh0:S 0 < 0hnot:∀ (x : Fin n), S x.castSucc < 0 → S x.succ ≤ 0hi:0 < (PureU1 n.succ).numberCharges⊢ S 0 = S ⟨0, hi⟩ All goals completed! 🐙 n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Sh0:S 0 < 0hnot:∀ (x : Fin n), S x.castSucc < 0 → S x.succ ≤ 0n✝:ℕa✝:∀ (hi : n✝ < (PureU1 n.succ).numberCharges), S 0 = S ⟨n✝, hi⟩hi:n✝ + 1 < (PureU1 n.succ).numberCharges⊢ S 0 = S ⟨n✝ + 1, hi⟩ n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Sh0:S 0 < 0hnot:∀ (x : Fin n), S x.castSucc < 0 → S x.succ ≤ 0i:ℕhii:∀ (hi : n✝ < (PureU1 n.succ).numberCharges), S 0 = S ⟨n✝, hi⟩hi:n✝ + 1 < (PureU1 n.succ).numberCharges⊢ S 0 = S ⟨n✝ + 1, hi⟩ n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Sh0:S 0 < 0hnot:∀ (x : Fin n), S x.castSucc < 0 → S x.succ ≤ 0i:ℕhii:∀ (hi : n✝ < (PureU1 n.succ).numberCharges), S 0 = S ⟨n✝, hi⟩hi:n✝ + 1 < (PureU1 n.succ).numberChargeshnott:S ⟨i, ⋯⟩.castSucc < 0 → S ⟨i, ⋯⟩.succ ≤ 0⊢ S 0 = S ⟨n✝ + 1, hi⟩ n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Sh0:S 0 < 0hnot:∀ (x : Fin n), S x.castSucc < 0 → S x.succ ≤ 0i:ℕhii✝:∀ (hi : n✝ < (PureU1 n.succ).numberCharges), S 0 = S ⟨n✝, hi⟩hi:n✝ + 1 < (PureU1 n.succ).numberChargeshnott:S ⟨i, ⋯⟩.castSucc < 0 → S ⟨i, ⋯⟩.succ ≤ 0hii:S 0 = S ⟨i, ⋯⟩⊢ S 0 = S ⟨n✝ + 1, hi⟩ erw [n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Sh0:S 0 < 0hnot:∀ (x : Fin n), S x.castSucc < 0 → S x.succ ≤ 0i:ℕhii✝:∀ (hi : n✝ < (PureU1 n.succ).numberCharges), S 0 = S ⟨n✝, hi⟩hi:n✝ + 1 < (PureU1 n.succ).numberChargeshnott:S 0 < 0 → S ⟨i, ⋯⟩.succ ≤ 0hii:S 0 = S ⟨i, ⋯⟩⊢ S 0 = S ⟨n✝ + 1, hi⟩n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Sh0:S 0 < 0hnot:∀ (x : Fin n), S x.castSucc < 0 → S x.succ ≤ 0i:ℕhii✝:∀ (hi : n✝ < (PureU1 n.succ).numberCharges), S 0 = S ⟨n✝, hi⟩hi:n✝ + 1 < (PureU1 n.succ).numberChargeshnott:S 0 < 0 → S ⟨i, ⋯⟩.succ ≤ 0hii:S 0 = S ⟨i, ⋯⟩⊢ S 0 = S ⟨n✝ + 1, hi⟩ at hnott All goals completed! 🐙include hS in lemma not_hasBoundry_zero (hnot : ¬ (HasBoundary S)) (i : Fin n.succ) : S (0 : Fin n.succ) = S i := n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Shnot:¬HasBoundary Si:Fin n.succ⊢ S 0 = S i n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Shnot:¬HasBoundary Si:Fin n.succhi:S 0 < 0⊢ S 0 = S in:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Shnot:¬HasBoundary Si:Fin n.succhi:¬S 0 < 0⊢ S 0 = S i n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Shnot:¬HasBoundary Si:Fin n.succhi:S 0 < 0⊢ S 0 = S i All goals completed! 🐙 n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Shnot:¬HasBoundary Si:Fin n.succhi:¬S 0 < 0⊢ S 0 = S i n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Shnot:¬HasBoundary Si:Fin n.succhi:0 ≤ S 0⊢ S 0 = S i All goals completed! 🐙include hS in lemma not_hasBoundary_grav (hnot : ¬ (HasBoundary S)) : accGrav n.succ S = n.succ * S (0 : Fin n.succ) := n:ℕS:(PureU1 n.succ).ChargeshS:ConstAbsSorted Shnot:¬HasBoundary S⊢ (accGrav n.succ) S = ↑n.succ * S 0 All goals completed! 🐙n:ℕA:(PureU1 n.succ).LinSolshA:ConstAbsSorted A.valh:A.val 0 ≠ 0hn:¬HasBoundary A.valh0:0 = (↑n + 1) * A.val 0⊢ False n:ℕA:(PureU1 n.succ).LinSolshA:ConstAbsSorted A.valh:A.val 0 ≠ 0hn:¬HasBoundary A.valh0:↑n + 1 = 0 ∨ A.val 0 = 0⊢ False n:ℕA:(PureU1 n.succ).LinSolshA:ConstAbsSorted A.valh:A.val 0 ≠ 0hn:¬HasBoundary A.valh✝:↑n + 1 = 0⊢ Falsen:ℕA:(PureU1 n.succ).LinSolshA:ConstAbsSorted A.valh:A.val 0 ≠ 0hn:¬HasBoundary A.valh✝:A.val 0 = 0⊢ False n:ℕA:(PureU1 n.succ).LinSolshA:ConstAbsSorted A.valh:A.val 0 ≠ 0hn:¬HasBoundary A.valh✝:↑n + 1 = 0⊢ False All goals completed! 🐙 n:ℕA:(PureU1 n.succ).LinSolshA:ConstAbsSorted A.valh:A.val 0 ≠ 0hn:¬HasBoundary A.valh✝:A.val 0 = 0⊢ False All goals completed! 🐙n:ℕA:(PureU1 (2 * n + 1)).LinSolsh:ConstAbsSorted A.valhA:A.val 0 ≠ 0k:Fin (2 * n)hk:Boundary A.val kh0:2 * ↑↑k + 1 - 2 * ↑n = 0h1:2 * n = 2 * ↑k + 1⊢ False All goals completed! 🐙lemma AFL_odd_zero {A : (PureU1 (2 * n + 1)).LinSols} (h : ConstAbsSorted A.val) : A.val (0 : Fin (2 * n + 1)) = 0 := n:ℕA:(PureU1 (2 * n + 1)).LinSolsh:ConstAbsSorted A.val⊢ A.val 0 = 0 n:ℕA:(PureU1 (2 * n + 1)).LinSolsh:ConstAbsSorted A.valhn:¬A.val 0 = 0⊢ False All goals completed! 🐙theorem AFL_odd (A : (PureU1 (2 * n + 1)).LinSols) (h : ConstAbsSorted A.val) : A = 0 := n:ℕA:(PureU1 (2 * n + 1)).LinSolsh:ConstAbsSorted A.val⊢ A = 0 n:ℕA:(PureU1 (2 * n + 1)).LinSolsh:ConstAbsSorted A.val⊢ A.val = ACCSystemLinear.LinSols.val 0 All goals completed! 🐙n:ℕA:(PureU1 (2 * n.succ)).LinSolsh:ConstAbsSorted A.valhA:A.val 0 ≠ 0k:Fin (2 * n + 1)hk:Boundary A.val kh0:2 * ↑↑k - 2 * ↑n = 0⊢ ↑↑k = ↑n All goals completed! 🐙n:ℕA:(PureU1 (2 * n.succ)).LinSolsh:ConstAbsSorted A.valhA:A.val 0 ≠ 0i:Fin n.succk:Fin (Nat.mul 2 n + 1)hk:Boundary A.val k⊢ ↑i ≤ n All goals completed! 🐙n:ℕA:(PureU1 (2 * n.succ)).LinSolsh:ConstAbsSorted A.vali:Fin n.succhA:A.val 0 = 0⊢ 0 (Fin.cast ⋯ (Fin.castAdd n.succ i)) = 0 0 All goals completed! 🐙 n:ℕA:(PureU1 (2 * n.succ)).LinSolsh:ConstAbsSorted A.vali:Fin n.succhA:¬A.val 0 = 0⊢ A.val (Fin.cast ⋯ (Fin.castAdd n.succ i)) = A.val 0 All goals completed! 🐙n:ℕA:(PureU1 (2 * n.succ)).LinSolsh:ConstAbsSorted A.valhA:A.val 0 ≠ 0i:Fin n.succk:Fin (Nat.mul 2 n + 1)hk:Boundary A.val k⊢ n + 1 ≤ n.succ + ↑i All goals completed! 🐙n:ℕA:(PureU1 (2 * n.succ)).LinSolsh:ConstAbsSorted A.vali:Fin n.succhA:A.val 0 = 0⊢ 0 (Fin.cast ⋯ (Fin.natAdd n.succ i)) = -0 0 All goals completed! 🐙 n:ℕA:(PureU1 (2 * n.succ)).LinSolsh:ConstAbsSorted A.vali:Fin n.succhA:¬A.val 0 = 0⊢ A.val (Fin.cast ⋯ (Fin.natAdd n.succ i)) = -A.val 0 All goals completed! 🐙theorem boundary_value_odd (S : (PureU1 (2 * n + 1)).LinSols) (hs : ConstAbs S.val) : S = 0 := have hS := And.intro (constAbs_sort hs) (sort_sorted S.val) sortAFL_zero S (ConstAbsSorted.AFL_odd (sortAFL S) hS)n:ℕS:(PureU1 (2 * n.succ)).LinSolshs:ConstAbs S.valhS:ConstAbs (sort S.val) ∧ Sorted (sort S.val)i:Fin n.succh1:∀ (i : Fin n.succ), sort S.val (Fin.cast ⋯ (Fin.castAdd n.succ i)) = sort S.val 0h2:∀ (i : Fin n.succ), sort S.val (Fin.cast ⋯ (Fin.natAdd n.succ i)) = -sort S.val 0⊢ sort S.val 0 = - -sort S.val 0 All goals completed! 🐙