Skip to content

feat(SUSY/N1): add chiral scalar configuration space and coordinate CLMs#1113

Merged
jstoobysmith merged 2 commits into
leanprover-community:masterfrom
pariandrea:susy-n1-basic
Jun 4, 2026
Merged

feat(SUSY/N1): add chiral scalar configuration space and coordinate CLMs#1113
jstoobysmith merged 2 commits into
leanprover-community:masterfrom
pariandrea:susy-n1-basic

Conversation

@pariandrea

Copy link
Copy Markdown
Contributor

Motivation

This is the foundational layer of a formalization of the N=1 chiral scalar sector
in Physlib. The broader goal is to build the Wirtinger differential calculus on
complex field space — the ∂/∂φ^I and ∂/∂φ̄^I operators that underpin
supersymmetric and Kähler geometry — and ultimately a worked Kähler-geometry
application (the log Kähler potential on H^n and its metric).

Following review feedback on the larger branch, that work is being split into
reviewable pieces. This PR contributes only the basic data layer: the labels, the
configuration space, and the coordinate maps that everything downstream is built on.
It is fully self-contained over Mathlib, so it can be reviewed and merged
independently of the calculus that will follow.

What this adds

Physlib/SUSY/N1/Basic.lean:

  • ChiralIndex — the label data of the chiral sector reduces to a single n : ℕ, the number of complex scalars. Chiral and anti-chiral indices share the one label
    set Fin n; in the scalar sector the bar is the identity, so no separate pairing is
    carried as data.
  • ChiralScalarValue n = Fin n → ℂ — the physical scalar configuration space,
    carrying exactly 2n real degrees of freedom. Declared as an abbrev so Mathlib's
    α → ℂ calculus lemmas apply by unification.
  • ChiralScalarValue.antiChiral — the anti-chiral view as the derived
    pointwise complex conjugate, not an independent input. Every φ̄ formula factors
    through this, keeping the configuration space physical and the 2n count honest.
  • chiralCoordCLM I / antiChiralCoordCLM I — the per-coordinate projections
    z^I = u I and z̄^I = star (u I) as continuous ℝ-linear maps. Both are continuous
    and real-linear, but only chiralCoordCLM is ℂ-linear — antiChiralCoordCLM factors
    through conjugation and must live at the →L[ℝ] level.

Comment thread Physlib/SUSY/N1/Basic.lean Outdated

/-- The label data of an N=1 chiral sector: simply the number of complex
scalars. The chiral and anti-chiral indices both range over `Fin n`. -/
abbrev ChiralIndex : Type := ℕ

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have two questions about this definition:

  1. I think ChiralIndex might be the wrong name here, as an element of ChiralIndex is the number of chiral fields, whilst I think a chiral index is really an element of Fin n.
  2. what stops you generalizing this to an arbitary Fintype, rather than Fin n?

I wonder if something like the following is better (I think discussed before):

structure Model (ChiralIndexingType : Type) [Fintype ChiralIndexingType] 
    (AntiChiralIndexingType : Type) [Fintype AntiChiralIndexingType] where
   equiv : ChiralIndexingType ≃ AntiChiralIndexingType

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Adopted your suggestion: Model is now exactly that two-type structure.
The index types are arbitrary Type* with [Fintype …] now (not Fin n), and the
ChiralIndex name is gone. In the client files I write the two types as the shorter C /
A to keep signatures within the 100-col limit, with
a one-line note in the overview bridging the descriptive names to C / A.

Comment thread Physlib/SUSY/N1/Basic.lean Outdated
/-- The chiral scalar configuration: an assignment of complex values to each
chiral label. Declared as `abbrev` so unification can apply Mathlib's
calculus lemmas about `α → ℂ` directly. -/
abbrev ChiralScalarValue (n : ChiralIndex) := Fin n → ℂ

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think ChiralScalarConfiguration would be a better name. Maybe add to the doc-string something like:
The term of this type gives a value to each of the chiral scalar fields.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you likely also need a type AntiChiralScalarConfiguration

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changed the name to ChiralScalarConfiguration as suggested.

I did not add an independent A → ℂ configuration as I think it's the wrong choice. The physical identities would then hold only where the anti-chiral field is the conjugate of the chiral one, so every theorem would carry that subspace as a hypothesis (e.g. the Kähler potential is real only there, making hermiticity of
g_{IJ̄} conditional). Building the conjugate in keeps them unconditional: K is real
by construction, and A is left as an index type only. We still keep distinct index
types to enforce the correct contraction rules, but there is a single field
configuration, avoiding a fictitious doubling of the physical DOF.

Comment thread Physlib/SUSY/N1/Basic.lean Outdated
/-- The anti-chiral view of a chiral scalar configuration: pointwise complex
conjugation. Realises the physical statement that in the scalar sector,
barring is complex conjugation. -/
def antiChiral (u : ChiralScalarValue n) : ChiralScalarValue n :=

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should be able to lift this to a CLM.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CLM.lean is gone. Those CLMs aren't SUSY-specific, they're general operations on a
finite-index complex coordinate space C → ℂ — so rather than fold them into the SUSY
Basic.lean I moved them down into the Wirtinger calculus, where anything on C → ℂ
can reuse them:

  • Basic.lean — the ℝ/ℂ scalar-restriction bridge plus the coordinate-basis CLMs and
    conjugation.
  • Multivariable.lean — the directional Wirtinger derivatives and their full calculus
    (Leibniz, chain rule, conjugation, holomorphic collapse), capped by Schwarz's
    theorem.
  • Coordinate.lean — the coordinate operators dWirtingerCoord /
    dWirtingerCoordBar, the projection/conjugation CLMs (coordProjCLM, conjCoordCLM,
    conjCLM), and coordinate Schwarz.
  • UpperHalfPlane.lean — reusable upper-half-plane lemmas.

The full Wirtinger calculus can be seen in the larger PR #1107.

@jstoobysmith jstoobysmith self-assigned this May 21, 2026
Comment thread Physlib.lean Outdated
public import Physlib.Relativity.Tensors.TensorSpecies.Basic
public import Physlib.Relativity.Tensors.Tensorial
public import Physlib.Relativity.Tensors.UnitTensor
public import Physlib.SUSY.N1.Basic

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We already have Physlib.Particles.SuperSymmetry, maybe we should put it there? Also if it is about Wirtinger calculus, maybe we should put this PR in Physlib.Mathematics

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wirtinger calculus agreed, it's general complex analysis with no SUSY content, so in
the larger PR #1107 it already lives under Physlib/Mathematics/Calculus/Wirtinger/. (This PR is just the bite-sized Basic.lean split out of #1107.)

SUSY placement is a good point. The existing Physlib/Particles/SuperSymmetry/ is MSSM
anomaly cancellation (MSSMNu/) and SU(5)+U(1) charge spectra (SU5/). The work in #1107 is the other side of SUSY: the continuous scalar-sector geometry (Kähler potential and metric, holomorphic superpotential). It could probably be moved in N1/ subfolder.

…type

Introduces the standalone indexing data of the N=1 chiral scalar sector:

* `Model` — two finite index types (chiral / anti-chiral) related by an
  equivalence `equiv`, kept distinct so the two slots of a contraction
  `g_{IJ̄}` cannot be confused.
* `ChiralScalarConfiguration` — the physical scalar configuration space
  `C → ℂ`, the only field data (no-doubling: anti-chiral scalars are its
  conjugates).

This is the foundational file of the larger N=1 SUSY / Wirtinger development;
it depends only on Mathlib.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
/-- The chiral scalar configuration: an assignment of complex values to each
chiral label. An `abbrev` so unification applies Mathlib's `α → ℂ` calculus
lemmas directly. -/
abbrev ChiralScalarConfiguration (ChiralIndexingType : Type*) := ChiralIndexingType → ℂ

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would change this to the following. It means you end up carrying around 'unused' variables, but I think it will help with the overall consistency.


namespace Model 

set_option linter.unusedVariables false in
/-- The chiral scalar configuration: an assignment of complex values to each
chiral label. An `abbrev` so unification applies Mathlib's `α → ℂ` calculus
lemmas directly. -/
@[nolint unusedArguments]
abbrev ChiralScalarConfiguration {ChiralIndexingType} (M : Model ChiralIndexingType) := ChiralIndexingType → ℂ

end Model

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the suggestion. I tried but it did not turn out easy to do.

ChiralScalarConfiguration is really just C → ℂ, so it only depends on the index type, not on a whole Model. Making it a Model method means the KahlerPotential/SuperPotential structures have to carry a model term they never use, and for concrete examples Lean then can't infer the index type on its own.

The concrete example is in the larger PR:

def K : KahlerPotential C -- current
def K : KahlerPotential model -- C hidden in model → Lean can't find it

I think this would be resolved by manual type annotations all over the place to compensate.
It is entirely possible that I am implementing the change naively and there is a cleaner way.

So I'd keep it as it is currently, and use the M. dot-notation for the operations that genuinely use the model (dChiralScalar, dAntiChiralScalar, metric). I am open to suggestions and happy to revisit this.

@jstoobysmith

Copy link
Copy Markdown
Member

This looks good to me now. I think placing it in ./Particles/Supersymmetry might be better though (or at least making sure we have only one folder for SUSY - whether that is moving the stuff there or here).

@pariandrea

Copy link
Copy Markdown
Contributor Author

I'll move the new code under Particles/SuperSymmetry/ rather than reorganize the existing SU5/MSSMNu files. Is Particles/SuperSymmetry/N1/ the correct path?

@jstoobysmith

Copy link
Copy Markdown
Member

Yes please! After this - I think we're all good to go.

@doxtor6

doxtor6 commented Jun 4, 2026

Copy link
Copy Markdown
Contributor

It looks good to me too.

Consolidate the N=1 chiral sector under the existing
Particles/SuperSymmetry/ tree instead of a parallel top-level SUSY/
folder, per review feedback on leanprover-community#1113. The internal SUSY.N1 namespace is
unchanged; only the file path and root import move.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

@jstoobysmith jstoobysmith left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved - will merge when linters pass. Many thanks.

@jstoobysmith jstoobysmith added ready-to-merge This PR is approved and will be merged shortly t-particles Particles labels Jun 4, 2026
@jstoobysmith jstoobysmith merged commit 7ea4fda into leanprover-community:master Jun 4, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready-to-merge This PR is approved and will be merged shortly t-particles Particles

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants