/-
Copyright (c) 2024 Joseph Tooby-Smith. All rights reserved.
Released under Apache 2.0 license.
Authors: Joseph Tooby-Smith
-/
import HepLean.AnomalyCancellation.PureU1.Sort
import Mathlib.Logic.Equiv.Fin
/-!
# Vector like charges

For the `n`-even case we define the property of a charge assignment being vector like.

-/
/-! TODO: Define vector like ACC in the `n`-odd case. -/
universe v u

open Nat
open  Finset
open BigOperators

namespace PureU1

variable {n : ℕ}

/--
  Given a natural number `n`, this lemma proves that `n + n` is equal to `2 * n`.
-/
lemma split_equal (n : ℕ) : n + n = 2 * n := (Nat.two_mul n).symm

lemma split_odd (n : ℕ) : n + 1 + n = 2 * n + 1 := by omega

/-- A charge configuration for n even is vector like if when sorted the `i`th element
is equal to the negative of the `n + i`th element.  -/
@[simp]
def VectorLikeEven  (S : (PureU1 (2 * n)).Charges) : Prop :=
  ∀ (i : Fin n), (sort S) (Fin.cast (split_equal n)  (Fin.castAdd n i))
  = - (sort S) (Fin.cast (split_equal n)  (Fin.natAdd n i))

end PureU1
