2024-04-16 16:01:44 -04:00
|
|
|
|
/-
|
|
|
|
|
Copyright (c) 2024 Joseph Tooby-Smith. All rights reserved.
|
|
|
|
|
Released under Apache 2.0 license.
|
|
|
|
|
Authors: Joseph Tooby-Smith
|
|
|
|
|
-/
|
2024-06-26 14:04:18 -04:00
|
|
|
|
import HepLean.Mathematics.LinearMaps
|
2024-04-19 09:57:30 -04:00
|
|
|
|
import Mathlib.Algebra.Module.Basic
|
|
|
|
|
import Mathlib.LinearAlgebra.FiniteDimensional
|
2024-04-16 16:01:44 -04:00
|
|
|
|
/-!
|
|
|
|
|
# Basic set up for anomaly cancellation conditions
|
|
|
|
|
|
|
|
|
|
This file defines the basic structures for the anomaly cancellation conditions.
|
|
|
|
|
|
|
|
|
|
It defines a module structure on the charges, and the solutions to the linear ACCs.
|
|
|
|
|
|
|
|
|
|
-/
|
2024-07-09 16:31:26 -04:00
|
|
|
|
/-! TODO: Derive an ACC system from a guage algebra and fermionic representations. -/
|
|
|
|
|
/-! TODO: Relate ACC Systems to algebraic varieties. -/
|
|
|
|
|
/-! TODO: Refactor whole file, and dependent files. -/
|
2024-04-16 16:01:44 -04:00
|
|
|
|
|
|
|
|
|
/-- A system of charges, specified by the number of charges. -/
|
|
|
|
|
structure ACCSystemCharges where
|
|
|
|
|
/-- The number of charges. -/
|
|
|
|
|
numberCharges : ℕ
|
|
|
|
|
|
|
|
|
|
/--
|
|
|
|
|
Creates an `ACCSystemCharges` object with the specified number of charges.
|
|
|
|
|
-/
|
|
|
|
|
def ACCSystemChargesMk (n : ℕ) : ACCSystemCharges where
|
|
|
|
|
numberCharges := n
|
|
|
|
|
|
|
|
|
|
namespace ACCSystemCharges
|
|
|
|
|
|
|
|
|
|
/-- The charges as functions from `Fin χ.numberCharges → ℚ`. -/
|
2024-06-26 11:54:02 -04:00
|
|
|
|
def Charges (χ : ACCSystemCharges) : Type := Fin χ.numberCharges → ℚ
|
2024-04-16 16:01:44 -04:00
|
|
|
|
|
|
|
|
|
/--
|
|
|
|
|
An instance to provide the necessary operations and properties for `charges` to form an additive
|
|
|
|
|
commutative monoid.
|
|
|
|
|
-/
|
|
|
|
|
@[simps!]
|
2024-06-26 11:54:02 -04:00
|
|
|
|
instance chargesAddCommMonoid (χ : ACCSystemCharges) : AddCommMonoid χ.Charges :=
|
2024-04-16 16:01:44 -04:00
|
|
|
|
Pi.addCommMonoid
|
|
|
|
|
|
|
|
|
|
/--
|
|
|
|
|
An instance to provide the necessary operations and properties for `charges` to form a module over
|
|
|
|
|
the field `ℚ`.
|
|
|
|
|
-/
|
|
|
|
|
@[simps!]
|
2024-06-26 11:54:02 -04:00
|
|
|
|
instance chargesModule (χ : ACCSystemCharges) : Module ℚ χ.Charges :=
|
2024-04-16 16:01:44 -04:00
|
|
|
|
Pi.module _ _ _
|
|
|
|
|
|
|
|
|
|
/--
|
|
|
|
|
An instance provides the necessary operations and properties for `charges` to form an additive
|
|
|
|
|
commutative group.
|
|
|
|
|
-/
|
2024-06-26 11:54:02 -04:00
|
|
|
|
instance ChargesAddCommGroup (χ : ACCSystemCharges) : AddCommGroup χ.Charges :=
|
2024-04-16 16:01:44 -04:00
|
|
|
|
Module.addCommMonoidToAddCommGroup ℚ
|
|
|
|
|
|
2024-06-26 11:54:02 -04:00
|
|
|
|
instance (χ : ACCSystemCharges) : Module.Finite ℚ χ.Charges :=
|
2024-04-19 09:57:30 -04:00
|
|
|
|
FiniteDimensional.finiteDimensional_pi ℚ
|
|
|
|
|
|
2024-04-16 16:01:44 -04:00
|
|
|
|
end ACCSystemCharges
|
|
|
|
|
|
|
|
|
|
/-- The type of charges plus the linear ACCs. -/
|
|
|
|
|
structure ACCSystemLinear extends ACCSystemCharges where
|
|
|
|
|
/-- The number of linear ACCs. -/
|
|
|
|
|
numberLinear : ℕ
|
|
|
|
|
/-- The linear ACCs. -/
|
2024-06-26 11:54:02 -04:00
|
|
|
|
linearACCs : Fin numberLinear → (toACCSystemCharges.Charges →ₗ[ℚ] ℚ)
|
2024-04-16 16:01:44 -04:00
|
|
|
|
|
|
|
|
|
namespace ACCSystemLinear
|
|
|
|
|
|
|
|
|
|
/-- The type of solutions to the linear ACCs. -/
|
|
|
|
|
structure LinSols (χ : ACCSystemLinear) where
|
|
|
|
|
/-- The underlying charge. -/
|
2024-06-26 11:54:02 -04:00
|
|
|
|
val : χ.1.Charges
|
2024-05-20 00:19:15 +02:00
|
|
|
|
/-- The condition that the charge satisfies the linear ACCs. -/
|
2024-04-16 16:01:44 -04:00
|
|
|
|
linearSol : ∀ i : Fin χ.numberLinear, χ.linearACCs i val = 0
|
|
|
|
|
|
|
|
|
|
/-- Two solutions are equal if the underlying charges are equal. -/
|
|
|
|
|
@[ext]
|
|
|
|
|
lemma LinSols.ext {χ : ACCSystemLinear} {S T : χ.LinSols} (h : S.val = T.val) : S = T := by
|
|
|
|
|
cases' S
|
|
|
|
|
simp_all only
|
|
|
|
|
|
2024-05-20 23:36:31 +02:00
|
|
|
|
/-- An instance providing the operations and properties for `LinSols` to form an
|
2024-06-08 01:50:31 +02:00
|
|
|
|
additive commutative monoid. -/
|
2024-04-16 16:01:44 -04:00
|
|
|
|
@[simps!]
|
|
|
|
|
instance linSolsAddCommMonoid (χ : ACCSystemLinear) :
|
|
|
|
|
AddCommMonoid χ.LinSols where
|
|
|
|
|
add S T := ⟨S.val + T.val, by
|
|
|
|
|
intro i
|
|
|
|
|
rw [(χ.linearACCs i).map_add, S.linearSol i, T.linearSol i]
|
|
|
|
|
rfl⟩
|
|
|
|
|
add_comm S T := by
|
|
|
|
|
apply LinSols.ext
|
|
|
|
|
exact χ.chargesAddCommMonoid.add_comm _ _
|
|
|
|
|
add_assoc S T L := by
|
|
|
|
|
apply LinSols.ext
|
|
|
|
|
exact χ.chargesAddCommMonoid.add_assoc _ _ _
|
|
|
|
|
zero := ⟨χ.chargesAddCommMonoid.zero, by
|
|
|
|
|
intro i
|
|
|
|
|
erw [(χ.linearACCs i).map_zero]⟩
|
|
|
|
|
zero_add S := by
|
|
|
|
|
apply LinSols.ext
|
|
|
|
|
exact χ.chargesAddCommMonoid.zero_add _
|
|
|
|
|
add_zero S := by
|
|
|
|
|
apply LinSols.ext
|
|
|
|
|
exact χ.chargesAddCommMonoid.add_zero _
|
|
|
|
|
nsmul n S := ⟨n • S.val, by
|
|
|
|
|
intro i
|
|
|
|
|
rw [nsmul_eq_smul_cast ℚ]
|
|
|
|
|
erw [(χ.linearACCs i).map_smul, S.linearSol i]
|
|
|
|
|
simp⟩
|
|
|
|
|
nsmul_zero n := by
|
|
|
|
|
rfl
|
|
|
|
|
nsmul_succ n S := by
|
|
|
|
|
apply LinSols.ext
|
|
|
|
|
exact χ.chargesAddCommMonoid.nsmul_succ _ _
|
|
|
|
|
|
2024-05-20 23:36:31 +02:00
|
|
|
|
/-- An instance providing the operations and properties for `LinSols` to form an
|
2024-04-16 16:01:44 -04:00
|
|
|
|
module over `ℚ`. -/
|
|
|
|
|
@[simps!]
|
|
|
|
|
instance linSolsModule (χ : ACCSystemLinear) : Module ℚ χ.LinSols where
|
|
|
|
|
smul a S := ⟨a • S.val, by
|
|
|
|
|
intro i
|
|
|
|
|
rw [(χ.linearACCs i).map_smul, S.linearSol i]
|
|
|
|
|
simp⟩
|
|
|
|
|
one_smul one_smul := by
|
|
|
|
|
apply LinSols.ext
|
|
|
|
|
exact χ.chargesModule.one_smul _
|
|
|
|
|
mul_smul a b S := by
|
|
|
|
|
apply LinSols.ext
|
|
|
|
|
exact χ.chargesModule.mul_smul _ _ _
|
|
|
|
|
smul_zero a := by
|
|
|
|
|
apply LinSols.ext
|
|
|
|
|
exact χ.chargesModule.smul_zero _
|
|
|
|
|
zero_smul S := by
|
|
|
|
|
apply LinSols.ext
|
|
|
|
|
exact χ.chargesModule.zero_smul _
|
|
|
|
|
smul_add a S T := by
|
|
|
|
|
apply LinSols.ext
|
|
|
|
|
exact χ.chargesModule.smul_add _ _ _
|
|
|
|
|
add_smul a b T:= by
|
|
|
|
|
apply LinSols.ext
|
|
|
|
|
exact χ.chargesModule.add_smul _ _ _
|
|
|
|
|
|
|
|
|
|
/-- An instance providing the operations and properties for `LinSols` to form an
|
2024-05-20 23:36:31 +02:00
|
|
|
|
an additive community. -/
|
2024-04-16 16:01:44 -04:00
|
|
|
|
instance linSolsAddCommGroup (χ : ACCSystemLinear) : AddCommGroup χ.LinSols :=
|
|
|
|
|
Module.addCommMonoidToAddCommGroup ℚ
|
|
|
|
|
|
|
|
|
|
/-- The inclusion of `LinSols` into `charges`. -/
|
2024-06-26 11:54:02 -04:00
|
|
|
|
def linSolsIncl (χ : ACCSystemLinear) : χ.LinSols →ₗ[ℚ] χ.Charges where
|
2024-04-16 16:01:44 -04:00
|
|
|
|
toFun S := S.val
|
|
|
|
|
map_add' _ _ := rfl
|
|
|
|
|
map_smul' _ _ := rfl
|
|
|
|
|
|
|
|
|
|
end ACCSystemLinear
|
|
|
|
|
|
|
|
|
|
/-- The type of charges plus the linear ACCs plus the quadratic ACCs. -/
|
|
|
|
|
structure ACCSystemQuad extends ACCSystemLinear where
|
|
|
|
|
/-- The number of quadratic ACCs. -/
|
|
|
|
|
numberQuadratic : ℕ
|
|
|
|
|
/-- The quadratic ACCs. -/
|
2024-06-26 11:54:02 -04:00
|
|
|
|
quadraticACCs : Fin numberQuadratic → HomogeneousQuadratic toACCSystemCharges.Charges
|
2024-04-16 16:01:44 -04:00
|
|
|
|
|
|
|
|
|
namespace ACCSystemQuad
|
|
|
|
|
|
|
|
|
|
/-- The type of solutions to the linear and quadratic ACCs. -/
|
|
|
|
|
structure QuadSols (χ : ACCSystemQuad) extends χ.LinSols where
|
2024-05-20 00:19:15 +02:00
|
|
|
|
/-- The condition that the charge satisfies the quadratic ACCs. -/
|
2024-04-16 16:01:44 -04:00
|
|
|
|
quadSol : ∀ i : Fin χ.numberQuadratic, (χ.quadraticACCs i) val = 0
|
|
|
|
|
|
|
|
|
|
/-- Two `QuadSols` are equal if the underlying charges are equal. -/
|
|
|
|
|
@[ext]
|
|
|
|
|
lemma QuadSols.ext {χ : ACCSystemQuad} {S T : χ.QuadSols} (h : S.val = T.val) :
|
|
|
|
|
S = T := by
|
|
|
|
|
have h := ACCSystemLinear.LinSols.ext h
|
|
|
|
|
cases' S
|
|
|
|
|
simp_all only
|
|
|
|
|
|
|
|
|
|
/-- An instance giving the properties and structures to define an action of `ℚ` on `QuadSols`. -/
|
|
|
|
|
instance quadSolsMulAction (χ : ACCSystemQuad) : MulAction ℚ χ.QuadSols where
|
|
|
|
|
smul a S := ⟨a • S.toLinSols , by
|
|
|
|
|
intro i
|
|
|
|
|
erw [(χ.quadraticACCs i).map_smul]
|
|
|
|
|
rw [S.quadSol i]
|
2024-04-16 16:04:53 -04:00
|
|
|
|
simp only [mul_zero]
|
2024-04-16 16:01:44 -04:00
|
|
|
|
⟩
|
|
|
|
|
mul_smul a b S := by
|
|
|
|
|
apply QuadSols.ext
|
|
|
|
|
exact mul_smul _ _ _
|
|
|
|
|
one_smul S := by
|
|
|
|
|
apply QuadSols.ext
|
|
|
|
|
exact one_smul _ _
|
|
|
|
|
|
|
|
|
|
/-- The inclusion of quadratic solutions into linear solutions. -/
|
|
|
|
|
def quadSolsInclLinSols (χ : ACCSystemQuad) : χ.QuadSols →[ℚ] χ.LinSols where
|
|
|
|
|
toFun := QuadSols.toLinSols
|
|
|
|
|
map_smul' _ _ := rfl
|
|
|
|
|
|
|
|
|
|
/-- If there are no quadratic equations (i.e. no U(1)'s in the underlying gauge group. The inclusion
|
|
|
|
|
of linear solutions into quadratic solutions. -/
|
|
|
|
|
def linSolsInclQuadSolsZero (χ : ACCSystemQuad) (h : χ.numberQuadratic = 0) :
|
|
|
|
|
χ.LinSols →[ℚ] χ.QuadSols where
|
|
|
|
|
toFun S := ⟨S, by intro i; rw [h] at i; exact Fin.elim0 i⟩
|
|
|
|
|
map_smul' _ _ := rfl
|
|
|
|
|
|
|
|
|
|
/-- The inclusion of quadratic solutions into all charges. -/
|
2024-06-26 11:54:02 -04:00
|
|
|
|
def quadSolsIncl (χ : ACCSystemQuad) : χ.QuadSols →[ℚ] χ.Charges :=
|
2024-04-16 16:01:44 -04:00
|
|
|
|
MulActionHom.comp χ.linSolsIncl.toMulActionHom χ.quadSolsInclLinSols
|
|
|
|
|
|
|
|
|
|
end ACCSystemQuad
|
|
|
|
|
|
|
|
|
|
/-- The type of charges plus the anomaly cancellation conditions. -/
|
|
|
|
|
structure ACCSystem extends ACCSystemQuad where
|
|
|
|
|
/-- The cubic ACC. -/
|
2024-06-26 11:54:02 -04:00
|
|
|
|
cubicACC : HomogeneousCubic toACCSystemCharges.Charges
|
2024-04-16 16:01:44 -04:00
|
|
|
|
|
|
|
|
|
namespace ACCSystem
|
|
|
|
|
|
|
|
|
|
/-- The type of solutions to the anomaly cancellation conditions. -/
|
|
|
|
|
structure Sols (χ : ACCSystem) extends χ.QuadSols where
|
2024-05-20 00:19:15 +02:00
|
|
|
|
/-- The condition that the charge satisfies the cubic ACC. -/
|
2024-04-16 16:01:44 -04:00
|
|
|
|
cubicSol : χ.cubicACC val = 0
|
|
|
|
|
|
|
|
|
|
/-- Two solutions are equal if the underlying charges are equal. -/
|
|
|
|
|
lemma Sols.ext {χ : ACCSystem} {S T : χ.Sols} (h : S.val = T.val) :
|
|
|
|
|
S = T := by
|
|
|
|
|
have h := ACCSystemQuad.QuadSols.ext h
|
|
|
|
|
cases' S
|
|
|
|
|
simp_all only
|
|
|
|
|
|
2024-04-19 09:57:30 -04:00
|
|
|
|
/-- We say a charge S is a solution if it extends to a solution. -/
|
2024-06-26 11:54:02 -04:00
|
|
|
|
def IsSolution (χ : ACCSystem) (S : χ.Charges) : Prop :=
|
2024-04-19 09:57:30 -04:00
|
|
|
|
∃ (sol : χ.Sols), sol.val = S
|
|
|
|
|
|
2024-04-16 16:01:44 -04:00
|
|
|
|
/-- An instance giving the properties and structures to define an action of `ℚ` on `Sols`. -/
|
|
|
|
|
instance solsMulAction (χ : ACCSystem) : MulAction ℚ χ.Sols where
|
|
|
|
|
smul a S := ⟨a • S.toQuadSols , by
|
|
|
|
|
erw [(χ.cubicACC).map_smul]
|
|
|
|
|
rw [S.cubicSol]
|
|
|
|
|
simp⟩
|
|
|
|
|
mul_smul a b S := by
|
|
|
|
|
apply Sols.ext
|
|
|
|
|
exact mul_smul _ _ _
|
|
|
|
|
one_smul S := by
|
|
|
|
|
apply Sols.ext
|
|
|
|
|
exact one_smul _ _
|
|
|
|
|
|
|
|
|
|
/-- The inclusion of `Sols` into `QuadSols`. -/
|
|
|
|
|
def solsInclQuadSols (χ : ACCSystem) : χ.Sols →[ℚ] χ.QuadSols where
|
|
|
|
|
toFun := Sols.toQuadSols
|
|
|
|
|
map_smul' _ _ := rfl
|
|
|
|
|
|
|
|
|
|
/-- The inclusion of `Sols` into `LinSols`. -/
|
|
|
|
|
def solsInclLinSols (χ : ACCSystem) : χ.Sols →[ℚ] χ.LinSols :=
|
|
|
|
|
MulActionHom.comp χ.quadSolsInclLinSols χ.solsInclQuadSols
|
|
|
|
|
|
|
|
|
|
/-- The inclusion of `Sols` into `LinSols`. -/
|
2024-06-26 11:54:02 -04:00
|
|
|
|
def solsIncl (χ : ACCSystem) : χ.Sols →[ℚ] χ.Charges :=
|
2024-04-16 16:01:44 -04:00
|
|
|
|
MulActionHom.comp χ.quadSolsIncl χ.solsInclQuadSols
|
|
|
|
|
|
|
|
|
|
/-- The structure of a map between two ACCSystems. -/
|
|
|
|
|
structure Hom (χ η : ACCSystem) where
|
|
|
|
|
/-- The linear map between vector spaces of charges. -/
|
2024-06-26 11:54:02 -04:00
|
|
|
|
charges : χ.Charges →ₗ[ℚ] η.Charges
|
2024-04-16 16:01:44 -04:00
|
|
|
|
/-- The map between solutions. -/
|
|
|
|
|
anomalyFree : χ.Sols → η.Sols
|
2024-05-20 23:36:31 +02:00
|
|
|
|
/-- The condition that the map commutes with the relevant inclusions. -/
|
2024-04-16 16:01:44 -04:00
|
|
|
|
commute : charges ∘ χ.solsIncl = η.solsIncl ∘ anomalyFree
|
|
|
|
|
|
|
|
|
|
/-- The definition of composition between two ACCSystems. -/
|
|
|
|
|
def Hom.comp {χ η ε : ACCSystem} (g : Hom η ε) (f : Hom χ η) : Hom χ ε where
|
|
|
|
|
charges := LinearMap.comp g.charges f.charges
|
|
|
|
|
anomalyFree := g.anomalyFree ∘ f.anomalyFree
|
|
|
|
|
commute := by
|
2024-04-16 16:04:53 -04:00
|
|
|
|
simp only [LinearMap.coe_comp]
|
2024-04-16 16:01:44 -04:00
|
|
|
|
rw [Function.comp.assoc]
|
|
|
|
|
rw [f.commute, ← Function.comp.assoc, g.commute, Function.comp.assoc]
|
|
|
|
|
|
|
|
|
|
end ACCSystem
|