diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e9d067cc12..51c77d4043 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -77,6 +77,12 @@ jobs: run: | bash -o pipefail -c "env LEAN_ABORT_ON_PANIC=1 lake exe sorry_lint" + # Reads the source files directly, so it does not need the build above to have succeeded. + - name: module documentation linter + if: ${{ !cancelled() }} + run: | + bash -o pipefail -c "env LEAN_ABORT_ON_PANIC=1 lake exe module_doc_lint" + - name: runLinter on Physlib if: ${{ always() && steps.build.outcome == 'success' || steps.build.outcome == 'failure' }} id: lint diff --git a/AGENTS.md b/AGENTS.md index 6bf4d25d86..1745fae0d3 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -18,7 +18,7 @@ - Make sure that hypotheses are distributed compactly and neatly over new lines, only include new lines when genuinely needed. - Do not add lemmas that are trivial rewrites of existing Mathlib or Physlib results, unless they add genuine physics context. - Place results in the appropriate existing file; do not create new files without good reason. For example, if you need to prove a general result about derivatives on space in order to prove something in classical mechanics, that result should go in `Space.Derivatives.Basic`, not the classical mechanics file. -- Include sections which are numbered by `# A. ...`, `## A.1. ...`. See [Physlib/ClassicalMechanics/HarmonicOscillator/Basic.lean](Physlib/ClassicalMechanics/HarmonicOscillator/Basic.lean) for an example. +- Module documentation (`/-! … -/`) must have the headings: a title `# ...`, followed by a one-line summary of the file; `## i. Overview`; `## ii. Key results`; `## iii. Table of contents`; `## iv. References`; then sections numbered `## A. ...`, `### A.1. ...`, `#### A.1.2. ...`, listed in the table of contents. No heading may end in a full stop. See [Physlib/ClassicalMechanics/HarmonicOscillator/Basic.lean](Physlib/ClassicalMechanics/HarmonicOscillator/Basic.lean) for an example. - Every definition must have a docstring. - Important lemmas should have a docstring. @@ -58,6 +58,8 @@ When a long proof cannot be split, make sure it contains comments. - Check that `lake exe forMathlib_lint` passes: files in `Physlib/Mathematics/ForMathlib/` may only import from within that directory, and each must be used outside it. - Check `./scripts/lint-style.sh`, but **commit your changes first**; this linter reads committed state. +- Check that `lake exe module_doc_lint` passes (no build needed). Never add files to + `scripts/MetaPrograms/module_doc_no_lint.txt`; fix their module documentation instead. - Check that `lake exe auxillary_script_test` passes (needs `Physlib`, `QuantumInfo` and `PhyslibAlpha` built). - If edited a `PhyslibAlpha` file, check the following: diff --git a/Physlib/ProbabilisticTheory/Effect/Complement.lean b/Physlib/ProbabilisticTheory/Effect/Complement.lean index cb1faa91d2..5a93fe35c2 100644 --- a/Physlib/ProbabilisticTheory/Effect/Complement.lean +++ b/Physlib/ProbabilisticTheory/Effect/Complement.lean @@ -10,6 +10,8 @@ public import Physlib.ProbabilisticTheory.Effect.Convex /-! # Complementary effects +The complement `1 - e` of an effect, its antitonicity and compatibility with mixtures. + ## i. Overview The complement of an effect `e` is the yes/no test that fires exactly when `e` doesn't: `1 - e`. @@ -27,6 +29,10 @@ Physically, a state's probability of "no" is always `1` minus its probability of - B. Monotonicity of the complement - C. The complement and mixtures +## iv. References + +* None. + -/ @[expose] public section diff --git a/Physlib/ProbabilisticTheory/Effect/Convex.lean b/Physlib/ProbabilisticTheory/Effect/Convex.lean index f061616dd7..9a6c7f39bb 100644 --- a/Physlib/ProbabilisticTheory/Effect/Convex.lean +++ b/Physlib/ProbabilisticTheory/Effect/Convex.lean @@ -11,6 +11,8 @@ public import Physlib.ProbabilisticTheory.Effect.Basic /-! # Convexity and mixtures of effects +The effect interval is convex, so effects can be mixed with a given probability. + ## i. Overview The effect interval `[0, 1]` is convex: randomizing between two effects with some probability @@ -26,6 +28,10 @@ actually run is itself a legitimate measurement. - A. Convexity and mixtures of effects +## iv. References + +* None. + -/ @[expose] public section diff --git a/Physlib/ProbabilisticTheory/Effect/Metric.lean b/Physlib/ProbabilisticTheory/Effect/Metric.lean index 4632a2ac3c..859d1838bc 100644 --- a/Physlib/ProbabilisticTheory/Effect/Metric.lean +++ b/Physlib/ProbabilisticTheory/Effect/Metric.lean @@ -10,6 +10,8 @@ public import Physlib.ProbabilisticTheory.Effect.Basic /-! # The metric space of effects +The order-unit metric on effects and their identification with the order-unit-norm ball. + ## i. Overview Effects sit inside `E`, so pulling back the order-unit norm along the inclusion `Effect E ↪ E` @@ -28,6 +30,10 @@ Effects also correspond to points of the order-unit-norm ball, by the affine res - A. The effect metric - B. Effects as points of the order-unit-norm ball +## iv. References + +* None. + -/ @[expose] public section diff --git a/Physlib/ProbabilisticTheory/Effect/Sharp.lean b/Physlib/ProbabilisticTheory/Effect/Sharp.lean index 44d36ebb97..dc9a1608a1 100644 --- a/Physlib/ProbabilisticTheory/Effect/Sharp.lean +++ b/Physlib/ProbabilisticTheory/Effect/Sharp.lean @@ -11,6 +11,8 @@ public import Physlib.ProbabilisticTheory.Effect.Complement /-! # Sharp effects +Sharp effects: extreme points of the effect interval, preserved by taking complements. + ## i. Overview The effect interval `[0, 1]` is convex. A sharp effect is an extreme point of it: one that cannot @@ -26,6 +28,10 @@ be written as a nontrivial mixture of two distinct effects. Sharp effects genera - A. Sharp effects +## iv. References + +* None. + -/ @[expose] public section diff --git a/Physlib/Relativity/Fermions/Weyl/DualLeftHanded.lean b/Physlib/Relativity/Fermions/Weyl/DualLeftHanded.lean index 20b631ed94..4d53b77434 100644 --- a/Physlib/Relativity/Fermions/Weyl/DualLeftHanded.lean +++ b/Physlib/Relativity/Fermions/Weyl/DualLeftHanded.lean @@ -11,7 +11,7 @@ public import Mathlib.LinearAlgebra.Matrix.NonsingularInverse public import Mathlib.LinearAlgebra.Matrix.SpecialLinearGroup /-! -## Dual left handed Weyl fermions +# Dual left handed Weyl fermions In this file we define dual Left handed Weyl fermions. diff --git a/Physlib/Relativity/Fermions/Weyl/DualRightHanded.lean b/Physlib/Relativity/Fermions/Weyl/DualRightHanded.lean index f8df9acf60..a95f094dc2 100644 --- a/Physlib/Relativity/Fermions/Weyl/DualRightHanded.lean +++ b/Physlib/Relativity/Fermions/Weyl/DualRightHanded.lean @@ -11,7 +11,7 @@ public import Mathlib.LinearAlgebra.Matrix.NonsingularInverse public import Mathlib.LinearAlgebra.Matrix.SpecialLinearGroup /-! -## Dual right handed Weyl fermions +# Dual right handed Weyl fermions In this file we define dual right handed Weyl fermions. diff --git a/Physlib/Relativity/Fermions/Weyl/LeftHanded.lean b/Physlib/Relativity/Fermions/Weyl/LeftHanded.lean index dfcf269ebf..e7ca75a92a 100644 --- a/Physlib/Relativity/Fermions/Weyl/LeftHanded.lean +++ b/Physlib/Relativity/Fermions/Weyl/LeftHanded.lean @@ -10,7 +10,7 @@ public import Mathlib.RepresentationTheory.Basic public import Mathlib.LinearAlgebra.Matrix.SpecialLinearGroup /-! -## Left handed Weyl fermions +# Left handed Weyl fermions In this file we define Left handed Weyl fermions. diff --git a/Physlib/Relativity/Fermions/Weyl/RightHanded.lean b/Physlib/Relativity/Fermions/Weyl/RightHanded.lean index f145e750a3..d59e67384e 100644 --- a/Physlib/Relativity/Fermions/Weyl/RightHanded.lean +++ b/Physlib/Relativity/Fermions/Weyl/RightHanded.lean @@ -10,7 +10,7 @@ public import Mathlib.RepresentationTheory.Basic public import Mathlib.LinearAlgebra.Matrix.SpecialLinearGroup /-! -## Right handed Weyl fermions +# Right handed Weyl fermions In this file we define Right handed Weyl fermions. diff --git a/Physlib/StatisticalMechanics/MicroCanonicalEnsemble/Basic.lean b/Physlib/StatisticalMechanics/MicroCanonicalEnsemble/Basic.lean index 17c69007c4..84ab873b9c 100644 --- a/Physlib/StatisticalMechanics/MicroCanonicalEnsemble/Basic.lean +++ b/Physlib/StatisticalMechanics/MicroCanonicalEnsemble/Basic.lean @@ -8,7 +8,7 @@ module public import Mathlib.MeasureTheory.Constructions.BorelSpace.WithTop /-! -## The Microcanonical Ensemble +# The Microcanonical Ensemble -/ diff --git a/Physlib/StatisticalMechanics/MicroCanonicalEnsemble/IdealGas.lean b/Physlib/StatisticalMechanics/MicroCanonicalEnsemble/IdealGas.lean index 71743a9c3b..f52bedc944 100644 --- a/Physlib/StatisticalMechanics/MicroCanonicalEnsemble/IdealGas.lean +++ b/Physlib/StatisticalMechanics/MicroCanonicalEnsemble/IdealGas.lean @@ -9,7 +9,7 @@ public import Physlib.StatisticalMechanics.MicroCanonicalEnsemble.ThermoQuantiti public import Mathlib.Analysis.SpecialFunctions.Gaussian.FourierTransform /-! -## Ideal gas as a Micro Canonical Ensemble +# Ideal gas as a Micro Canonical Ensemble In this module we give the -/ diff --git a/Physlib/StatisticalMechanics/MicroCanonicalEnsemble/ThermoQuantities.lean b/Physlib/StatisticalMechanics/MicroCanonicalEnsemble/ThermoQuantities.lean index f69f702fb0..4f1ecd3fcb 100644 --- a/Physlib/StatisticalMechanics/MicroCanonicalEnsemble/ThermoQuantities.lean +++ b/Physlib/StatisticalMechanics/MicroCanonicalEnsemble/ThermoQuantities.lean @@ -9,7 +9,7 @@ public import Physlib.StatisticalMechanics.MicroCanonicalEnsemble.Basic public import QuantumInfo.ForMathlib.ComplexLaplaceTransform /-! -## The theormodynamical quantities of a microcanonical ensemble +# The theormodynamical quantities of a microcanonical ensemble -/ @[expose] public section diff --git a/PhyslibAlpha/Basic.lean b/PhyslibAlpha/Basic.lean index 9232875c94..f743b1387d 100644 --- a/PhyslibAlpha/Basic.lean +++ b/PhyslibAlpha/Basic.lean @@ -6,12 +6,35 @@ Authors: Joseph Tooby-Smith module public import Physlib.Meta.TODO.Basic /-! +# PhyslibAlpha -## Overview +The entry point of PhyslibAlpha, an extension of Physlib with a lighter review process. + +## i. Overview PhyslibAlpha is an extension of Physlib with a lighter review process. We expect the file structure to match where possible that of Physlib. +This file contains no declarations; it documents the purpose and review policy of the project. + +## ii. Key results + +* None: this file contains only documentation. + +## iii. Table of contents + +- A. Review policy + +## iv. References + +* None. + +-/ + +/-! + +## A. Review policy + The idea is that it sits between the high review standards of Physlib and just allowing anything in the project. diff --git a/PhyslibAlpha/ClassicalFieldTheory/Local/Action.lean b/PhyslibAlpha/ClassicalFieldTheory/Local/Action.lean index e54fb3cd09..d9579d83fe 100644 --- a/PhyslibAlpha/ClassicalFieldTheory/Local/Action.lean +++ b/PhyslibAlpha/ClassicalFieldTheory/Local/Action.lean @@ -10,6 +10,8 @@ public import PhyslibAlpha.ClassicalFieldTheory.Local.Variation /-! # Local action functionals +The local action of a field, its value under admissible variations, and critical fields. + ## i. Overview This module defines the local action functional associated with a local Lagrangian, together with diff --git a/PhyslibAlpha/ClassicalFieldTheory/Local/EulerLagrange.lean b/PhyslibAlpha/ClassicalFieldTheory/Local/EulerLagrange.lean index cd204a7b22..1724db6778 100644 --- a/PhyslibAlpha/ClassicalFieldTheory/Local/EulerLagrange.lean +++ b/PhyslibAlpha/ClassicalFieldTheory/Local/EulerLagrange.lean @@ -9,6 +9,8 @@ public import PhyslibAlpha.ClassicalFieldTheory.Local.Action /-! # Local Euler-Lagrange operators +The local Euler-Lagrange operator of a local Lagrangian, built componentwise. + ## i. Overview This module defines the local Euler-Lagrange operator associated with a local Lagrangian. diff --git a/PhyslibAlpha/ClassicalFieldTheory/Local/EulerLagrangeEquation.lean b/PhyslibAlpha/ClassicalFieldTheory/Local/EulerLagrangeEquation.lean index 36ee5712ee..2afba7e988 100644 --- a/PhyslibAlpha/ClassicalFieldTheory/Local/EulerLagrangeEquation.lean +++ b/PhyslibAlpha/ClassicalFieldTheory/Local/EulerLagrangeEquation.lean @@ -9,6 +9,8 @@ public import PhyslibAlpha.ClassicalFieldTheory.Local.FirstVariation /-! # Local Euler-Lagrange equations +A named predicate for the local Euler-Lagrange equations and the criticality criteria using it. + ## i. Overview This module gives a named predicate for fields satisfying the local Euler-Lagrange equations. diff --git a/PhyslibAlpha/ClassicalFieldTheory/Local/FirstOrder.lean b/PhyslibAlpha/ClassicalFieldTheory/Local/FirstOrder.lean index 468513212f..02116e859c 100644 --- a/PhyslibAlpha/ClassicalFieldTheory/Local/FirstOrder.lean +++ b/PhyslibAlpha/ClassicalFieldTheory/Local/FirstOrder.lean @@ -9,6 +9,8 @@ public import PhyslibAlpha.ClassicalFieldTheory.Local.FirstVariation /-! # First-order local field theory +Aliases and projections specializing the local field theory API to first-order jets. + ## i. Overview This module provides a thin usability layer for first-order local field theory, i.e. the diff --git a/PhyslibAlpha/ClassicalFieldTheory/Local/FirstVariation.lean b/PhyslibAlpha/ClassicalFieldTheory/Local/FirstVariation.lean index 04922bbeb0..6a76d97b36 100644 --- a/PhyslibAlpha/ClassicalFieldTheory/Local/FirstVariation.lean +++ b/PhyslibAlpha/ClassicalFieldTheory/Local/FirstVariation.lean @@ -9,6 +9,8 @@ public import PhyslibAlpha.ClassicalFieldTheory.Local.FirstVariation.Criterion /-! # First variation and the Euler-Lagrange criterion +Public entry point: a field is critical iff its local Euler-Lagrange operator vanishes. + ## i. Overview This module is the public entry point for the local first-variation theory. The core linearized diff --git a/PhyslibAlpha/ClassicalFieldTheory/Local/FirstVariation/Basic.lean b/PhyslibAlpha/ClassicalFieldTheory/Local/FirstVariation/Basic.lean index e189575da3..6ea9a12538 100644 --- a/PhyslibAlpha/ClassicalFieldTheory/Local/FirstVariation/Basic.lean +++ b/PhyslibAlpha/ClassicalFieldTheory/Local/FirstVariation/Basic.lean @@ -10,6 +10,8 @@ public import Physlib.Mathematics.VariationalCalculus.Basic /-! # First variation core objects +The linearized first-variation density and its Euler-Lagrange pairing. + ## i. Overview This module contains the basic objects used throughout the local first-variation theory: diff --git a/PhyslibAlpha/ClassicalFieldTheory/Local/FirstVariation/Criterion.lean b/PhyslibAlpha/ClassicalFieldTheory/Local/FirstVariation/Criterion.lean index e43531825a..fa626f0dbb 100644 --- a/PhyslibAlpha/ClassicalFieldTheory/Local/FirstVariation/Criterion.lean +++ b/PhyslibAlpha/ClassicalFieldTheory/Local/FirstVariation/Criterion.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.ClassicalFieldTheory.Local.FirstVariation.Regularity /-! # First variation criteria +Assembles the first-variation formula into Euler-Lagrange criteria for critical fields. + ## i. Overview This module assembles the analytic ingredients of the local first-variation proof into the @@ -25,7 +27,7 @@ facade. ## iii. Table of contents - A. First-variation assembly -- B. Final Euler-Lagrange criterion +- B. Intermediate Euler-Lagrange criteria ## iv. References diff --git a/PhyslibAlpha/ClassicalFieldTheory/Local/FirstVariation/Density.lean b/PhyslibAlpha/ClassicalFieldTheory/Local/FirstVariation/Density.lean index a489f55176..9d4d398956 100644 --- a/PhyslibAlpha/ClassicalFieldTheory/Local/FirstVariation/Density.lean +++ b/PhyslibAlpha/ClassicalFieldTheory/Local/FirstVariation/Density.lean @@ -10,6 +10,8 @@ public import Mathlib.Analysis.Calculus.ParametricIntegral /-! # First variation density formulas +Differentiation of the varied action density, pointwise and under the integral sign. + ## i. Overview This module contains the pointwise and integral first-variation formulas before integration by diff --git a/PhyslibAlpha/ClassicalFieldTheory/Local/FirstVariation/IntegrationByParts.lean b/PhyslibAlpha/ClassicalFieldTheory/Local/FirstVariation/IntegrationByParts.lean index 8114b194a2..d8a2b0c093 100644 --- a/PhyslibAlpha/ClassicalFieldTheory/Local/FirstVariation/IntegrationByParts.lean +++ b/PhyslibAlpha/ClassicalFieldTheory/Local/FirstVariation/IntegrationByParts.lean @@ -9,6 +9,8 @@ public import PhyslibAlpha.ClassicalFieldTheory.Local.FirstVariation.Support /-! # First variation integration by parts +Repeated integration by parts for the local first-variation formula. + ## i. Overview This module contains the repeated integration-by-parts step needed for the local first-variation diff --git a/PhyslibAlpha/ClassicalFieldTheory/Local/FirstVariation/Regularity.lean b/PhyslibAlpha/ClassicalFieldTheory/Local/FirstVariation/Regularity.lean index 719dca2783..b90f1513d0 100644 --- a/PhyslibAlpha/ClassicalFieldTheory/Local/FirstVariation/Regularity.lean +++ b/PhyslibAlpha/ClassicalFieldTheory/Local/FirstVariation/Regularity.lean @@ -9,6 +9,8 @@ public import PhyslibAlpha.ClassicalFieldTheory.Local.FirstVariation.Support /-! # First variation regularity +Continuity of the Euler-Lagrange operator and smooth regularity from coordinate regularity. + ## i. Overview This module contains regularity consequences used in the local Euler-Lagrange criterion: continuity diff --git a/PhyslibAlpha/ClassicalFieldTheory/Local/FirstVariation/Support.lean b/PhyslibAlpha/ClassicalFieldTheory/Local/FirstVariation/Support.lean index c46431aa76..4d8d95d001 100644 --- a/PhyslibAlpha/ClassicalFieldTheory/Local/FirstVariation/Support.lean +++ b/PhyslibAlpha/ClassicalFieldTheory/Local/FirstVariation/Support.lean @@ -9,6 +9,8 @@ public import PhyslibAlpha.ClassicalFieldTheory.Local.FirstVariation.Basic /-! # First variation support lemmas +Support lemmas for the first variation: varied fields, test functions, varied jet coordinates. + ## i. Overview This module collects the reusable support lemmas used by the analytic part of the local diff --git a/PhyslibAlpha/ClassicalFieldTheory/Local/JetPoint.lean b/PhyslibAlpha/ClassicalFieldTheory/Local/JetPoint.lean index 0b90b81188..a25e83f2de 100644 --- a/PhyslibAlpha/ClassicalFieldTheory/Local/JetPoint.lean +++ b/PhyslibAlpha/ClassicalFieldTheory/Local/JetPoint.lean @@ -10,6 +10,8 @@ public import Physlib.SpaceAndTime.Space.Derivatives.Iterated /-! # Coordinate-level jet points +Coordinate-level jet points of fields on `Space d` and the jets of a field at a point. + ## i. Overview This module introduces the coordinate-level point of the locally trivialized `k`-jet bundle for diff --git a/PhyslibAlpha/ClassicalFieldTheory/Local/JetPointFiber.lean b/PhyslibAlpha/ClassicalFieldTheory/Local/JetPointFiber.lean index 1fe5e3360f..973641f6b5 100644 --- a/PhyslibAlpha/ClassicalFieldTheory/Local/JetPointFiber.lean +++ b/PhyslibAlpha/ClassicalFieldTheory/Local/JetPointFiber.lean @@ -9,6 +9,8 @@ public import PhyslibAlpha.ClassicalFieldTheory.Local.JetPoint /-! # Fiber directions on jet points +Affine fiber-direction structure on coordinate-level jet points. + ## i. Overview This module adds the affine fiber-direction structure on coordinate-level jet points. diff --git a/PhyslibAlpha/ClassicalFieldTheory/Local/JetPointRegularity.lean b/PhyslibAlpha/ClassicalFieldTheory/Local/JetPointRegularity.lean index d924d7e105..09b6af2953 100644 --- a/PhyslibAlpha/ClassicalFieldTheory/Local/JetPointRegularity.lean +++ b/PhyslibAlpha/ClassicalFieldTheory/Local/JetPointRegularity.lean @@ -9,6 +9,8 @@ public import PhyslibAlpha.ClassicalFieldTheory.Local.JetPointFiber /-! # Regularity and support for jet-coordinate maps +Smoothness of jet-coordinate maps of smooth fields and their vanishing outside the support. + ## i. Overview This module collects the analytic facts about coordinate-level jet maps that are needed later in diff --git a/PhyslibAlpha/ClassicalFieldTheory/Local/Lagrangian.lean b/PhyslibAlpha/ClassicalFieldTheory/Local/Lagrangian.lean index 6770ace9e2..066d59250e 100644 --- a/PhyslibAlpha/ClassicalFieldTheory/Local/Lagrangian.lean +++ b/PhyslibAlpha/ClassicalFieldTheory/Local/Lagrangian.lean @@ -10,6 +10,8 @@ public import PhyslibAlpha.ClassicalFieldTheory.Local.TotalDerivative /-! # Local Lagrangians +Local finite-order Lagrangians on jet points, their regularity, and evaluation along fields. + ## i. Overview This module defines local Lagrangians of finite order for fields on `Space d` with values in diff --git a/PhyslibAlpha/ClassicalFieldTheory/Local/TotalDerivative.lean b/PhyslibAlpha/ClassicalFieldTheory/Local/TotalDerivative.lean index 2dcdaf3fbf..f64fa0a7da 100644 --- a/PhyslibAlpha/ClassicalFieldTheory/Local/TotalDerivative.lean +++ b/PhyslibAlpha/ClassicalFieldTheory/Local/TotalDerivative.lean @@ -9,6 +9,8 @@ public import PhyslibAlpha.ClassicalFieldTheory.Local.JetPoint /-! # Total derivatives on local jet-dependent functions +Total derivatives of jet-dependent functions, defined via evaluation along fields. + ## i. Overview This module defines total derivatives of local jet-dependent functions by differentiating their diff --git a/PhyslibAlpha/ClassicalFieldTheory/Local/TotalDivergence.lean b/PhyslibAlpha/ClassicalFieldTheory/Local/TotalDivergence.lean index 063cef37e6..0cf040c236 100644 --- a/PhyslibAlpha/ClassicalFieldTheory/Local/TotalDivergence.lean +++ b/PhyslibAlpha/ClassicalFieldTheory/Local/TotalDivergence.lean @@ -9,6 +9,8 @@ public import PhyslibAlpha.ClassicalFieldTheory.Local.FirstOrder /-! # Total divergences in local classical field theory +Packaged total-divergence Lagrangians and the Euler-Lagrange-triviality property. + ## i. Overview This module introduces the local coordinate API for total-divergence lagrangians. diff --git a/PhyslibAlpha/ClassicalFieldTheory/Local/TotalDivergenceEquivalence.lean b/PhyslibAlpha/ClassicalFieldTheory/Local/TotalDivergenceEquivalence.lean index 802bc55205..5af479ff6a 100644 --- a/PhyslibAlpha/ClassicalFieldTheory/Local/TotalDivergenceEquivalence.lean +++ b/PhyslibAlpha/ClassicalFieldTheory/Local/TotalDivergenceEquivalence.lean @@ -9,6 +9,8 @@ public import PhyslibAlpha.ClassicalFieldTheory.Local.TotalDivergence /-! # Lagrangian equivalence up to total divergences +Lagrangians differing by a total divergence have the same Euler-Lagrange equations. + ## i. Overview This module adds the local coordinate API for lagrangians that differ by a total divergence. diff --git a/PhyslibAlpha/ClassicalFieldTheory/Local/Variation.lean b/PhyslibAlpha/ClassicalFieldTheory/Local/Variation.lean index a5375df945..ef9ec4f8ff 100644 --- a/PhyslibAlpha/ClassicalFieldTheory/Local/Variation.lean +++ b/PhyslibAlpha/ClassicalFieldTheory/Local/Variation.lean @@ -9,6 +9,8 @@ public import Physlib.ClassicalFieldTheory.Local.Variation /-! # Alpha extensions for admissible local variations +Euclidean components of admissible variations are test functions. + ## i. Overview This module adds the Euclidean component API needed by the coordinate-readout CFT stack in @@ -19,7 +21,16 @@ only adds helper lemmas used by the Alpha development. ## ii. Key results -- `ClassicalFieldTheory.Local.AdmissibleVariation.coord_euclidean` +- `ClassicalFieldTheory.Local.AdmissibleVariation.coord_euclidean` : a Euclidean component of an + admissible variation is again a test function. + +## iii. Table of contents + +- A. Euclidean components of admissible variations + +## iv. References + +* None. -/ @@ -30,6 +41,12 @@ open Physlib namespace ClassicalFieldTheory namespace Local +/-! + +## A. Euclidean components of admissible variations + +-/ + namespace AdmissibleVariation variable {d m : ℕ} diff --git a/PhyslibAlpha/ClassicalMechanics/CoupledSpringPotential.lean b/PhyslibAlpha/ClassicalMechanics/CoupledSpringPotential.lean index 43ffe7705e..1f19a8948b 100644 --- a/PhyslibAlpha/ClassicalMechanics/CoupledSpringPotential.lean +++ b/PhyslibAlpha/ClassicalMechanics/CoupledSpringPotential.lean @@ -16,20 +16,58 @@ public import PhyslibAlpha.Mathematics.PartialDerivativeTest /-! # Coupled spring potential +The coupled spring potential x₀² + x₀x₁ + x₁² has a local minimum at the origin. + +## i. Overview + As a proof of concept, we use the second derivative test in `PhyslibAlpha.Mathematics.PartialDerivativeTest` to prove that the coupled spring potential `U := fun x : EuclideanSpace ℝ (Fin 2) => (x 0)^2 + x 0 * x 1 + (x 1)^2` has a local minimum at zero. + +To apply the test we show the potential is analytic, that its gradient vanishes at the origin, and +that its second derivative quadratic map is positive definite there. + +## ii. Key results + +- `couplingPotential` : the potential energy of a pair of coupled springs. +- `couplingPotential_gradient_zero` : the gradient of the potential vanishes at the origin. +- `couplingPotential_posDef` : the second derivative quadratic map is positive definite at the + origin. +- `coupled_spring_potential` : the coupled spring potential has a local minimum at zero. + +## iii. Table of contents + +- A. The coupled spring potential +- B. Analyticity and derivatives +- C. The local minimum at the origin + +## iv. References + +* None. + -/ @[expose] public section +/-! + +## A. The coupled spring potential + +-/ + /-- The potential energy of a pair of coupled springs. -/ noncomputable def couplingPotential (x : EuclideanSpace ℝ (Fin 2)) : ℝ := (x 0) ^ 2 + x 0 * x 1 + (x 1) ^ 2 +/-! + +## B. Analyticity and derivatives + +-/ + /- The coupling potential is analytic everywhere (it is a polynomial). -/ @@ -97,6 +135,12 @@ lemma couplingPotential_iteratedFDeriv_two (z : EuclideanSpace ℝ (Fin 2)) positivity; rw [iteratedFDeriv_succ_apply_right]; simp +decide [h_second_deriv]; ring!; +/-! + +## C. The local minimum at the origin + +-/ + /- The second derivative quadratic map of the coupling potential is positive definite at the origin. diff --git a/PhyslibAlpha/ClassicalMechanics/MomentMap/Basic.lean b/PhyslibAlpha/ClassicalMechanics/MomentMap/Basic.lean index 0b19d1af69..1e8a9b6ed5 100644 --- a/PhyslibAlpha/ClassicalMechanics/MomentMap/Basic.lean +++ b/PhyslibAlpha/ClassicalMechanics/MomentMap/Basic.lean @@ -20,6 +20,8 @@ public import Mathlib.Analysis.Calculus.MeanValue # Souriau's moment map on a symplectic vector space +Souriau's moment map, cocycle and Noether theorem for affine actions on a symplectic space. + ## i. Overview Souriau (Structure des systèmes dynamiques, Dunod 1970, chapter 11) attaches to a Lie group `G` @@ -74,8 +76,6 @@ field is `Z_{𝔤*}(ν) = ν ∘ Ad(Z)` (11.16). pp. 104-117; English translation: Structure of Dynamical Systems, Birkhäuser, 1997 (same equation numbers). -## References - * J.-M. Souriau, *Structure des systèmes dynamiques*, Maîtrises de mathématiques, Dunod, Paris, 1970, chapter 11, pp. 104-117. The equation numbers (11.7), (11.8), (11.12), (11.17), (11.22), (11.27), (11.33) refer to this edition. [ref: Souriau1970] diff --git a/PhyslibAlpha/ClassicalMechanics/MomentMap/Cohomology.lean b/PhyslibAlpha/ClassicalMechanics/MomentMap/Cohomology.lean index 34c0f3dbad..858edf8535 100644 --- a/PhyslibAlpha/ClassicalMechanics/MomentMap/Cohomology.lean +++ b/PhyslibAlpha/ClassicalMechanics/MomentMap/Cohomology.lean @@ -11,6 +11,8 @@ public import Mathlib.RepresentationTheory.Homological.GroupCohomology.LowDegree # The cohomology class of the affine symplectic group +The moment cocycle of the affine symplectic group has a non-zero cohomology class. + ## i. Overview Souriau (Structure des systemes dynamiques, Dunod 1970, chapter 11) attaches to a dynamical group @@ -68,8 +70,6 @@ given by a closed formula. pp. 104-117, for (11.7), (11.15)-(11.21) and (11.28); (6.24)-(6.25) and (10.12), (10.28)-(10.32) for the adjoint action and the affine symplectic group. -## References - * J.-M. Souriau, *Structure des systèmes dynamiques*, Maîtrises de mathématiques, Dunod, Paris, 1970, chapter 11, pp. 104-117, and (6.24)-(6.25), (10.12). The equation numbers refer to this edition. [ref: Souriau1970] diff --git a/PhyslibAlpha/ClassicalMechanics/MomentMap/GalileanMass.lean b/PhyslibAlpha/ClassicalMechanics/MomentMap/GalileanMass.lean index 50baaccfa9..237af8a006 100644 --- a/PhyslibAlpha/ClassicalMechanics/MomentMap/GalileanMass.lean +++ b/PhyslibAlpha/ClassicalMechanics/MomentMap/GalileanMass.lean @@ -13,6 +13,8 @@ public import Mathlib.Analysis.Calculus.Deriv.Pow # The mass as a cohomology class of the Galilean Lie algebra (Souriau) +The total mass as a non-trivial cohomology class of the Galilean Lie algebra (Souriau). + ## i. Overview In chapter 12 of Structure des systèmes dynamiques (Dunod 1970), Souriau computes the moment of @@ -91,8 +93,6 @@ What is not formalised here: p. 27 (2.45), p. 50 (6.12 b) and p. 113 (11.22 a) for the bracket; p. 50 (6.13 b), p. 109 (11.16), p. 114 (11.24) and p. 116, note (1), for the coboundaries of the algebra. -## References - * J.-M. Souriau, *Structure des systèmes dynamiques*, Maîtrises de mathématiques, Dunod, Paris, 1970: chapter 12, pp. 132-153, and pp. 27, 50, 109, 113-116 for the conventions (2.45), (6.12), (6.13), (11.16), (11.22), (11.24). The equation numbers refer to this edition. diff --git a/PhyslibAlpha/ClassicalMechanics/MomentMap/GalileanMassCocycle.lean b/PhyslibAlpha/ClassicalMechanics/MomentMap/GalileanMassCocycle.lean index ea7559d5cd..15db4b9987 100644 --- a/PhyslibAlpha/ClassicalMechanics/MomentMap/GalileanMassCocycle.lean +++ b/PhyslibAlpha/ClassicalMechanics/MomentMap/GalileanMassCocycle.lean @@ -16,6 +16,8 @@ public import Mathlib.Analysis.Calculus.Deriv.Prod # The mass cocycle of the Galilean group (Souriau) +Souriau's mass cocycle of the Galilean group is a cocycle but not a coboundary. + ## i. Overview This file is the group level of `PhyslibAlpha.ClassicalMechanics.MomentMap.GalileanMass`, which @@ -96,8 +98,6 @@ What is not formalised here: (6.25), (6.28); p. 108 (11.15), p. 109 (11.17), p. 111 (the order of the arguments of the derivative of a cocycle), p. 112 (11.19), p. 113 (11.22 b). -## References - * J.-M. Souriau, *Structure des systèmes dynamiques*, Maîtrises de mathématiques, Dunod, Paris, 1970, chapters 6, 11 and 12. The equation numbers refer to this edition. [ref: Souriau1970] diff --git a/PhyslibAlpha/ClassicalMechanics/NortonDome/Basic.lean b/PhyslibAlpha/ClassicalMechanics/NortonDome/Basic.lean index 248acc04df..9ae155255f 100644 --- a/PhyslibAlpha/ClassicalMechanics/NortonDome/Basic.lean +++ b/PhyslibAlpha/ClassicalMechanics/NortonDome/Basic.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.ClassicalMechanics.NortonDome.Sqrt # The Norton dome +The Norton dome: energies, force, equation of motion, and the non-Lipschitz force at the apex. + ## i. Overview The Norton dome is a point mass `m` sliding without friction, under gravity `g`, on a diff --git a/PhyslibAlpha/ClassicalMechanics/NortonDome/Determinism.lean b/PhyslibAlpha/ClassicalMechanics/NortonDome/Determinism.lean index d72095037e..286eb0a1e9 100644 --- a/PhyslibAlpha/ClassicalMechanics/NortonDome/Determinism.lean +++ b/PhyslibAlpha/ClassicalMechanics/NortonDome/Determinism.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.ClassicalMechanics.NortonDome.Solution # The Norton dome and the determinism of Newtonian mechanics +The Norton dome is a Newtonian system with continuous force that is not deterministic. + ## i. Overview A particle at rest on the apex of the Norton dome may stay there forever or slide off at any diff --git a/PhyslibAlpha/ClassicalMechanics/NortonDome/NewtonianSystem.lean b/PhyslibAlpha/ClassicalMechanics/NortonDome/NewtonianSystem.lean index 3717f8d651..aa3a444cc3 100644 --- a/PhyslibAlpha/ClassicalMechanics/NortonDome/NewtonianSystem.lean +++ b/PhyslibAlpha/ClassicalMechanics/NortonDome/NewtonianSystem.lean @@ -13,6 +13,8 @@ public import Physlib.SpaceAndTime.Time.Derivatives # Conservative Newtonian systems and determinism +Conservative Newtonian systems: a locally Lipschitz force gives determinism. + ## i. Overview A conservative Newtonian system is a point mass `m` in a configuration space `X` under a diff --git a/PhyslibAlpha/ClassicalMechanics/NortonDome/PeanoExistence.lean b/PhyslibAlpha/ClassicalMechanics/NortonDome/PeanoExistence.lean index f25c1d529d..c6290e5b6e 100644 --- a/PhyslibAlpha/ClassicalMechanics/NortonDome/PeanoExistence.lean +++ b/PhyslibAlpha/ClassicalMechanics/NortonDome/PeanoExistence.lean @@ -11,6 +11,8 @@ public import Physlib.Meta.Linters.Sorry # Peano's existence theorem (statements) +Statements of Peano's existence theorem for ODEs, pending its proof in Mathlib. + ## i. Overview Peano's existence theorem: the initial value problem `x' = f (t, x)`, `x t₀ = x₀` has a diff --git a/PhyslibAlpha/ClassicalMechanics/NortonDome/PhysicalSpace.lean b/PhyslibAlpha/ClassicalMechanics/NortonDome/PhysicalSpace.lean index e79bdf5d51..123c0663b1 100644 --- a/PhyslibAlpha/ClassicalMechanics/NortonDome/PhysicalSpace.lean +++ b/PhyslibAlpha/ClassicalMechanics/NortonDome/PhysicalSpace.lean @@ -11,6 +11,8 @@ public import Physlib.SpaceAndTime.Space.Module # The Norton dome in physical space +The Norton dome chart dynamics as a point mass constrained to the dome surface. + ## i. Overview `NortonDome.Basic` writes the dynamics on the arc length `r`, with kinetic energy `½ m ṙ²` and diff --git a/PhyslibAlpha/ClassicalMechanics/NortonDome/PosPartPow.lean b/PhyslibAlpha/ClassicalMechanics/NortonDome/PosPartPow.lean index 2c93b49fe1..869ae0673f 100644 --- a/PhyslibAlpha/ClassicalMechanics/NortonDome/PosPartPow.lean +++ b/PhyslibAlpha/ClassicalMechanics/NortonDome/PosPartPow.lean @@ -13,6 +13,8 @@ public import Mathlib.Analysis.Calculus.Deriv.Slope # Powers of the positive part +The derivative and `C^(n+1)` regularity of `y ↦ max (y - c) 0 ^ (n + 2)`. + ## i. Overview The function `y ↦ max (y - c) 0 ^ (n + 2)` vanishes to the left of `c` and is a polynomial to diff --git a/PhyslibAlpha/ClassicalMechanics/NortonDome/Solution.lean b/PhyslibAlpha/ClassicalMechanics/NortonDome/Solution.lean index c8218ee7c8..5afec857c5 100644 --- a/PhyslibAlpha/ClassicalMechanics/NortonDome/Solution.lean +++ b/PhyslibAlpha/ClassicalMechanics/NortonDome/Solution.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.ClassicalMechanics.NortonDome.PosPartPow # The motions of the Norton dome and the failure of uniqueness +The Norton dome has infinitely many motions from rest at its apex: uniqueness fails. + ## i. Overview A particle at rest on the apex of the Norton dome satisfies `r̈ = √r` by staying there forever, diff --git a/PhyslibAlpha/ClassicalMechanics/NortonDome/Sqrt.lean b/PhyslibAlpha/ClassicalMechanics/NortonDome/Sqrt.lean index 69dd817e0f..60e636b44d 100644 --- a/PhyslibAlpha/ClassicalMechanics/NortonDome/Sqrt.lean +++ b/PhyslibAlpha/ClassicalMechanics/NortonDome/Sqrt.lean @@ -11,6 +11,8 @@ public import Mathlib.Analysis.SpecialFunctions.Sqrt # Calculus of the real square root near zero +The derivative of `√y ^ 3` everywhere, and the failure of the Lipschitz property of `√` at 0. + ## i. Overview Two facts about the real square root at zero, where Mathlib's calculus does not reach: the diff --git a/PhyslibAlpha/CondensedMatter/TightBindingChain/Current.lean b/PhyslibAlpha/CondensedMatter/TightBindingChain/Current.lean index fd6bee8164..6b19cffcf6 100644 --- a/PhyslibAlpha/CondensedMatter/TightBindingChain/Current.lean +++ b/PhyslibAlpha/CondensedMatter/TightBindingChain/Current.lean @@ -10,6 +10,8 @@ public import PhyslibAlpha.CondensedMatter.TightBindingChain.OpenBoundary # The current operator of the open tight binding chain +The current operator `J = i (H X - X H)` of the open tight binding chain and its matrix elements. + ## i. Overview By the Heisenberg equation the velocity of the electron is `dX/dt = i [H, X]` (with `ħ = 1`). diff --git a/PhyslibAlpha/CondensedMatter/TightBindingChain/OpenBoundary.lean b/PhyslibAlpha/CondensedMatter/TightBindingChain/OpenBoundary.lean index 03b3beedb9..e463179c3e 100644 --- a/PhyslibAlpha/CondensedMatter/TightBindingChain/OpenBoundary.lean +++ b/PhyslibAlpha/CondensedMatter/TightBindingChain/OpenBoundary.lean @@ -10,6 +10,8 @@ public import Physlib.CondensedMatter.TightBindingChain.Basic # The tight binding chain with open boundary conditions +The position operator and the Hamiltonian of the tight binding chain with open boundaries. + ## i. Overview A finite piece of a 1d solid has two ends: the electron cannot hop from the last site back to diff --git a/PhyslibAlpha/CondensedMatter/TightBindingChain/Uncertainty.lean b/PhyslibAlpha/CondensedMatter/TightBindingChain/Uncertainty.lean index 72bd880137..ac26b42da7 100644 --- a/PhyslibAlpha/CondensedMatter/TightBindingChain/Uncertainty.lean +++ b/PhyslibAlpha/CondensedMatter/TightBindingChain/Uncertainty.lean @@ -13,13 +13,17 @@ public import PhyslibAlpha.QuantumMechanics.HilbertSpaces.FiniteTarget.Operators # Energy–position uncertainty in the open tight binding chain +The energy–position uncertainty relation for the tight binding chain with open boundaries. + +## i. Overview + The Hamiltonian and the position operator of the tight binding chain with open boundary conditions are observables of the C⋆-algebra of operators on the Hilbert space of the chain. The Robertson–Schrödinger relation then bounds their spreads in every state by the expected bracket `⁅H, X⁆ = -(i/2) (H X - X H)`, which only sees hopping: its matrix elements are `-(i/2) a (n - m) ⟨m|H|n⟩`. -## Main results +## ii. Key results - `toObservable` : a hermitian operator of the chain as an observable. - `openHamiltonianObservable`, `positionObservable` : `H` and `X` as observables. @@ -27,6 +31,16 @@ bracket `⁅H, X⁆ = -(i/2) (H X - X H)`, which only sees hopping: its matrix e - `inner_bracket_openHamiltonian_position_eq` : `⁅H, X⁆` moves exactly one site `a`. - `robertson_schrodinger_openHamiltonian_position` : the energy–position uncertainty relation. +## iii. Table of contents + +- A. The Hamiltonian and position as observables +- B. The bracket of the Hamiltonian and position +- C. The uncertainty relation + +## iv. References + +* None. + -/ @[expose] public section @@ -39,6 +53,12 @@ namespace CondensedMatter namespace TightBindingChain variable (T : TightBindingChain) +/-! + +## A. The Hamiltonian and position as observables + +-/ + /-- A hermitian operator of the chain as an observable. -/ noncomputable def toObservable (A : T.HilbertSpace →ₗ[ℂ] T.HilbertSpace) (hA : A.IsSymmetric) : Observable (T.HilbertSpace →L[ℂ] T.HilbertSpace) := @@ -51,6 +71,12 @@ noncomputable abbrev openHamiltonianObservable := /-- The position operator as an observable. -/ noncomputable abbrev positionObservable := T.toObservable T.position T.position_hermitian +/-! + +## B. The bracket of the Hamiltonian and position + +-/ + /-- The bracket `⁅H, X⁆` only connects sites joined by hopping, weighted by their distance. -/ lemma inner_bracket_openHamiltonian_position (m n : Fin T.N) : ⟪|m⟩, ((⁅T.openHamiltonianObservable, T.positionObservable⁆ : Observable _) : @@ -81,6 +107,12 @@ lemma inner_bracket_openHamiltonian_position_eq (m n : Fin T.N) : ring split_ifs with h <;> simp_all +/-! + +## C. The uncertainty relation + +-/ + /-- **Energy–position uncertainty of the open tight binding chain.** In every state `ω`, `Cov(H, X)² + ⟨⁅H, X⁆⟩² ≤ Var H · Var X`. -/ lemma robertson_schrodinger_openHamiltonian_position diff --git a/PhyslibAlpha/Mathematics/Analysis/Normed/HolderDual.lean b/PhyslibAlpha/Mathematics/Analysis/Normed/HolderDual.lean index afa0956ccf..1fcafafbae 100644 --- a/PhyslibAlpha/Mathematics/Analysis/Normed/HolderDual.lean +++ b/PhyslibAlpha/Mathematics/Analysis/Normed/HolderDual.lean @@ -16,6 +16,8 @@ public import Mathlib.Tactic.Positivity.Finset /-! # Hölder duality in finite dimensions +The dual norm of an `ℓp` coordinate norm is the `ℓq` norm of the values on the basis. + ## i. Overview A continuous linear functional on a finite-dimensional normed space is determined by its values on diff --git a/PhyslibAlpha/Mathematics/Analysis/RealBounds.lean b/PhyslibAlpha/Mathematics/Analysis/RealBounds.lean index 9dbf57ce7c..dfed12a945 100644 --- a/PhyslibAlpha/Mathematics/Analysis/RealBounds.lean +++ b/PhyslibAlpha/Mathematics/Analysis/RealBounds.lean @@ -15,6 +15,8 @@ public import Mathlib.Tactic.Ring /-! # Elementary real bounds +Elementary real estimates: suprema of sums, bounds up to `1 / (n + 1)`, and weighted averages. + ## i. Overview Three elementary estimates for real numbers: suprema of sums over a codirected family, inequalities @@ -32,6 +34,10 @@ up to `1 / (n + 1)` for every `n`, and averages that put almost all weight on on - A. Suprema - B. Averages +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/Mathematics/Convex/Choquet/BoundaryRepresentation.lean b/PhyslibAlpha/Mathematics/Convex/Choquet/BoundaryRepresentation.lean index 07f7700d53..4997ff90ce 100644 --- a/PhyslibAlpha/Mathematics/Convex/Choquet/BoundaryRepresentation.lean +++ b/PhyslibAlpha/Mathematics/Convex/Choquet/BoundaryRepresentation.lean @@ -11,6 +11,8 @@ public import Mathlib.MeasureTheory.Integral.Bochner.Basic /-! # Representations by measures on a boundary +Boundary representations of points by regular probability measures, and simplices. + ## i. Overview A family of real-valued tests observes points of a space `X`. A boundary representation of a @@ -34,6 +36,10 @@ boundary decomposition. - A. Boundary representations - B. Simplices +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/Mathematics/Convex/Choquet/ExtremePointDecomposition.lean b/PhyslibAlpha/Mathematics/Convex/Choquet/ExtremePointDecomposition.lean index de9ade7fba..b9c85d01ca 100644 --- a/PhyslibAlpha/Mathematics/Convex/Choquet/ExtremePointDecomposition.lean +++ b/PhyslibAlpha/Mathematics/Convex/Choquet/ExtremePointDecomposition.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.Mathematics.MeasureTheory.IntegrationFunctional /-! # Every point is a mixture of extreme points +Choquet's theorem: each point of a metrizable compact convex set is a mixture of extreme points. + ## i. Overview Let `S` be a compact convex set that is metrizable and whose points are separated by countably many @@ -38,6 +40,10 @@ closed set. - B. Splitting mass between endpoints - C. The boundary theorem +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/Mathematics/Convex/Choquet/Mixture.lean b/PhyslibAlpha/Mathematics/Convex/Choquet/Mixture.lean index c086f17260..c6afb8984f 100644 --- a/PhyslibAlpha/Mathematics/Convex/Choquet/Mixture.lean +++ b/PhyslibAlpha/Mathematics/Convex/Choquet/Mixture.lean @@ -13,6 +13,8 @@ public import Mathlib.Tactic.Module /-! # Mixtures in a convex set +Mixtures of points in a convex set, convex functions, and extreme points as non-midpoints. + ## i. Overview In a convex set `S` any two points can be mixed: `t x + (1 - t) y` lies in `S` for `0 ≤ t ≤ 1`. For @@ -35,6 +37,10 @@ are the pure states. A point that is not extreme is the midpoint of two differen - B. Convex functions - C. Extreme points as non-midpoints +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/Mathematics/Convex/Choquet/RepresentingMeasure.lean b/PhyslibAlpha/Mathematics/Convex/Choquet/RepresentingMeasure.lean index c07f54490c..9227c9e739 100644 --- a/PhyslibAlpha/Mathematics/Convex/Choquet/RepresentingMeasure.lean +++ b/PhyslibAlpha/Mathematics/Convex/Choquet/RepresentingMeasure.lean @@ -12,6 +12,8 @@ public import Mathlib.MeasureTheory.Measure.Prokhorov /-! # Representing measures and the Choquet order +Representing measures of points of a convex set, the Choquet order, and maximal measures. + ## i. Overview A probability measure on a convex set `S` represents a point `x` when `x` is its average: every @@ -36,6 +38,10 @@ compact set every point has a representing measure that is maximal in this order - B. The Choquet order - C. Maximal representing measures +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/Mathematics/Convex/DominatedCone.lean b/PhyslibAlpha/Mathematics/Convex/DominatedCone.lean index a44fdc1f3f..b02b291632 100644 --- a/PhyslibAlpha/Mathematics/Convex/DominatedCone.lean +++ b/PhyslibAlpha/Mathematics/Convex/DominatedCone.lean @@ -11,6 +11,8 @@ public import Mathlib.Basic.Real.Pointwise /-! # Separation from dominated cones +Hahn–Banach separation of vectors from a convex cone dominated by a vector. + ## i. Overview A convex cone `C` in a real vector space is dominated by `u ∈ C` when every vector plus some @@ -31,6 +33,10 @@ No topology is involved. - A. Dominated cones and their gauge - B. Separation +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/Mathematics/Convex/LpBall.lean b/PhyslibAlpha/Mathematics/Convex/LpBall.lean index 25b4872508..2eb75e63b3 100644 --- a/PhyslibAlpha/Mathematics/Convex/LpBall.lean +++ b/PhyslibAlpha/Mathematics/Convex/LpBall.lean @@ -14,6 +14,8 @@ public import Mathlib.Analysis.SpecialFunctions.Pow.Continuity /-! # Extreme points of `ℓq` balls +The extreme points of the `ℓq` ball are its unit sphere, those of the `ℓ1` ball its vertices. + ## i. Overview The closed `ℓq` ball `{a | ∑ |a i| ^ q ≤ 1}` in `ℝⁿ` is strictly convex for `1 < q < ∞`: its @@ -32,6 +34,10 @@ its `2n` vertices `± eᵢ`, and these vertices are its only extreme points. - A. Extreme points of the `ℓq` ball - B. Extreme points of the `ℓ1` ball +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/Mathematics/Geometry/Simplex.lean b/PhyslibAlpha/Mathematics/Geometry/Simplex.lean index 937ca945a4..d308ec709d 100644 --- a/PhyslibAlpha/Mathematics/Geometry/Simplex.lean +++ b/PhyslibAlpha/Mathematics/Geometry/Simplex.lean @@ -16,6 +16,8 @@ public import Mathlib.Topology.UnitInterval /-! # Simplices +Simplices as convex hulls of affinely independent points, and the standard simplex. + ## i. Overview A simplex is the convex hull of finitely many affinely independent points, its extreme points. Every @@ -40,6 +42,10 @@ points are the standard basis vectors. Being a simplex is invariant under affine - B. The standard simplex - C. Affine equivalences +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/Mathematics/LadderSystem/Basic.lean b/PhyslibAlpha/Mathematics/LadderSystem/Basic.lean index 41c74dd770..1289b44f53 100644 --- a/PhyslibAlpha/Mathematics/LadderSystem/Basic.lean +++ b/PhyslibAlpha/Mathematics/LadderSystem/Basic.lean @@ -14,6 +14,8 @@ public import Physlib.Mathematics.KroneckerDelta.Basic # Ladder systems +Ladder systems of creation and annihilation operators, their `gl(d)` action and number operators. + ## i. Overview A `LadderSystem K V d` packages `d` pairs of creation and annihilation endomorphisms of a diff --git a/PhyslibAlpha/Mathematics/LadderSystem/Irreducibility.lean b/PhyslibAlpha/Mathematics/LadderSystem/Irreducibility.lean index d2a9329c3b..2fb499856a 100644 --- a/PhyslibAlpha/Mathematics/LadderSystem/Irreducibility.lean +++ b/PhyslibAlpha/Mathematics/LadderSystem/Irreducibility.lean @@ -10,6 +10,8 @@ public import PhyslibAlpha.Mathematics.LadderSystem.OccupationBasis # Irreducibility of the excitation-number sector +The excitation-number sector `vacuumSpan L Ω n` of a ladder system is `gl(d)`-irreducible. + ## i. Overview `LadderSystem.vacuumSpan L Ω n` is `gl(d)`-irreducible: the only submodules of `vacuumSpan L Ω n` diff --git a/PhyslibAlpha/Mathematics/LadderSystem/OccupationBasis.lean b/PhyslibAlpha/Mathematics/LadderSystem/OccupationBasis.lean index abb9e10da2..b0b062dd52 100644 --- a/PhyslibAlpha/Mathematics/LadderSystem/OccupationBasis.lean +++ b/PhyslibAlpha/Mathematics/LadderSystem/OccupationBasis.lean @@ -16,6 +16,8 @@ public import Mathlib.Algebra.Order.BigOperators.GroupWithZero.List # The occupation-number basis +The occupation-number states form a basis of `vacuumSpan L Ω n`, of dimension `(d+n-1).choose n`. + ## i. Overview The occupation-number states `word (countWord d α) Ω`, indexed by degree-`n` count functions diff --git a/PhyslibAlpha/Mathematics/LadderSystem/SymmetricPower.lean b/PhyslibAlpha/Mathematics/LadderSystem/SymmetricPower.lean index 0407e4b4b1..d0d5b92d38 100644 --- a/PhyslibAlpha/Mathematics/LadderSystem/SymmetricPower.lean +++ b/PhyslibAlpha/Mathematics/LadderSystem/SymmetricPower.lean @@ -11,6 +11,8 @@ public import Mathlib.LinearAlgebra.Finsupp.LinearCombination # The excitation sector is the symmetric power +The excitation-number sector `vacuumSpan L Ω n` is linearly isomorphic to `Sym^n(K^d)`. + ## i. Overview `vacuumSpan L Ω n` is linearly isomorphic to the `n`-th symmetric power of `K^d` -- concretely, to @@ -22,9 +24,16 @@ isomorphism sends this basis to the occupation-number states, i.e. it is exactly ## ii. Key results -- `LadderSystem.vacuumSpanSymEquiv` : `vacuumSpan L Ω n ≃ₗ[K] (Sym (Fin d) n →₀ K)`. +- `LadderSystem.vacuumSpanSymEquiv` : `(Sym (Fin d) n →₀ K) ≃ₗ[K] vacuumSpan L Ω n`. +- `LadderSystem.vacuumSpanSymEquiv_single` : the basis vector of a multiset is sent to the + occupation-number state of its count function. + +## iii. Table of contents -## iii. References +- A. The isomorphism with the symmetric power +- B. The image of the basis vectors + +## iv. References * None. -/ @@ -38,6 +47,12 @@ namespace LadderSystem variable {K V : Type*} [Field K] [CharZero K] [AddCommGroup V] [Module K V] {d : ℕ} (L : LadderSystem K V d) +/-! + +## A. The isomorphism with the symmetric power + +-/ + /-- `vacuumSpan L Ω n` is linearly isomorphic to `Sym^n(K^d)` (realized as the free `K`-module on `Sym (Fin d) n`), matching the natural monomial-type basis on one side to the occupation-number basis on the other. -/ @@ -45,6 +60,12 @@ noncomputable def vacuumSpanSymEquiv {Ω : V} (P : L.HasVacuum Ω) (n : ℕ) : (Sym (Fin d) n →₀ K) ≃ₗ[K] L.vacuumSpan Ω n := Finsupp.basisSingleOne.equiv (vacuumBasis L P n) (countFunEquivSym d n).symm +/-! + +## B. The image of the basis vectors + +-/ + /-- The isomorphism sends the basis vector for multiset `s` to the occupation-number state with that multiset's count function. -/ lemma vacuumSpanSymEquiv_single {Ω : V} (P : L.HasVacuum Ω) (n : ℕ) (s : Sym (Fin d) n) : diff --git a/PhyslibAlpha/Mathematics/LadderSystem/Vacuum.lean b/PhyslibAlpha/Mathematics/LadderSystem/Vacuum.lean index 3725ffdbe2..f368fa416b 100644 --- a/PhyslibAlpha/Mathematics/LadderSystem/Vacuum.lean +++ b/PhyslibAlpha/Mathematics/LadderSystem/Vacuum.lean @@ -13,6 +13,8 @@ public import Mathlib.Algebra.Lie.Submodule # Vacuum states and creation-operator words +Vacuum states of a ladder system, creation-operator words, and the `n`-particle sector. + ## i. Overview A vacuum `Ω` of a `LadderSystem` is a nonzero vector killed by every annihilation operator. This diff --git a/PhyslibAlpha/Mathematics/MeasureTheory/BoundedMeasurable.lean b/PhyslibAlpha/Mathematics/MeasureTheory/BoundedMeasurable.lean index e71b87147d..2414f99093 100644 --- a/PhyslibAlpha/Mathematics/MeasureTheory/BoundedMeasurable.lean +++ b/PhyslibAlpha/Mathematics/MeasureTheory/BoundedMeasurable.lean @@ -13,6 +13,8 @@ public import Mathlib.Algebra.Order.Module.Defs /-! # Bounded measurable functions +The vector lattice of bounded measurable functions, staircase approximation and integrability. + ## i. Overview The bounded measurable functions on a space `Ω` are the observables of a classical system with @@ -35,6 +37,10 @@ integrable against every finite measure. - D. Indicators and staircases - E. Integrability +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/Mathematics/MeasureTheory/IntegrationFunctional.lean b/PhyslibAlpha/Mathematics/MeasureTheory/IntegrationFunctional.lean index 5bb4da2b38..e9d09249a2 100644 --- a/PhyslibAlpha/Mathematics/MeasureTheory/IntegrationFunctional.lean +++ b/PhyslibAlpha/Mathematics/MeasureTheory/IntegrationFunctional.lean @@ -12,6 +12,8 @@ public import Mathlib.Topology.ContinuousMap.Compact /-! # Integration as a continuous functional +Integration against a finite measure as a continuous linear functional on `C(X, ℝ)`. + ## i. Overview On a compact space, integrating continuous functions against a finite measure is linear and @@ -25,6 +27,10 @@ continuous in the supremum norm. - A. Integration as a continuous functional +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/Mathematics/MeasureTheory/LiftingAndConditioning.lean b/PhyslibAlpha/Mathematics/MeasureTheory/LiftingAndConditioning.lean index 55ef946cfe..9bf9ae5287 100644 --- a/PhyslibAlpha/Mathematics/MeasureTheory/LiftingAndConditioning.lean +++ b/PhyslibAlpha/Mathematics/MeasureTheory/LiftingAndConditioning.lean @@ -14,6 +14,8 @@ public import Mathlib.MeasureTheory.Measure.Prokhorov /-! # Lifting, averaging and conditioning probability measures +Lifting, averaging, conditioning and replacing parts of probability measures. + ## i. Overview This file collects operations on probability measures used in Choquet's theorem. A probability @@ -36,6 +38,10 @@ measure. - B. Averaging two pushforwards - C. Conditioning and replacing part of a measure +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/Mathematics/MeasureTheory/PositiveFunctionalIntegral.lean b/PhyslibAlpha/Mathematics/MeasureTheory/PositiveFunctionalIntegral.lean index 1ab6828895..397637be17 100644 --- a/PhyslibAlpha/Mathematics/MeasureTheory/PositiveFunctionalIntegral.lean +++ b/PhyslibAlpha/Mathematics/MeasureTheory/PositiveFunctionalIntegral.lean @@ -14,6 +14,8 @@ public import Mathlib.Topology.ContinuousMap.Ordered /-! # Positive functionals are integrals +A positive functional given on part of `C(X, ℝ)` is integration against a probability measure. + ## i. Overview On a compact space `X`, a positive linear functional on continuous functions is integration against @@ -37,6 +39,10 @@ first extends `φ` positively to all continuous functions. - A. Scaling continuous functions preserves their order - B. Positive functionals are integrals +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/Mathematics/MeasureTheory/RegularMeasure.lean b/PhyslibAlpha/Mathematics/MeasureTheory/RegularMeasure.lean index 446b7af0e7..d4525fcc78 100644 --- a/PhyslibAlpha/Mathematics/MeasureTheory/RegularMeasure.lean +++ b/PhyslibAlpha/Mathematics/MeasureTheory/RegularMeasure.lean @@ -10,6 +10,8 @@ public import Mathlib.MeasureTheory.Measure.Regular /-! # Regular measures +Inner regularity and regularity pass to smaller measures, continuous images and subsets. + ## i. Overview A measure is regular when the measure of a set is approximated by compact sets from inside and by @@ -33,6 +35,10 @@ regularity does too. - A. Measures below inner regular measures - B. Regularity from inner regularity +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/Mathematics/Order/Freudenthal.lean b/PhyslibAlpha/Mathematics/Order/Freudenthal.lean index 825598ef9d..bfe3353dfc 100644 --- a/PhyslibAlpha/Mathematics/Order/Freudenthal.lean +++ b/PhyslibAlpha/Mathematics/Order/Freudenthal.lean @@ -16,6 +16,8 @@ public import Mathlib.Tactic.Ring /-! # Step approximation in vector lattices +Freudenthal's spectral theorem: vector lattice elements are uniformly close to step functions. + ## i. Overview Fix a nonnegative element `u` of a real vector lattice, a strong unit: every element is below some diff --git a/PhyslibAlpha/Mathematics/Order/PositiveDual/Basic.lean b/PhyslibAlpha/Mathematics/Order/PositiveDual/Basic.lean index 16b92a5f55..5505949750 100644 --- a/PhyslibAlpha/Mathematics/Order/PositiveDual/Basic.lean +++ b/PhyslibAlpha/Mathematics/Order/PositiveDual/Basic.lean @@ -16,6 +16,8 @@ public import Mathlib.Tactic.Linarith /-! # Positive functionals +Positive functionals on an ordered vector space, their order, and extension from the cone. + ## i. Overview A positive functional on an ordered real vector space `E` is a linear functional that is @@ -41,6 +43,10 @@ extends uniquely to a positive functional. - B. The order on positive functionals - C. Extending from the cone +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/Mathematics/Order/PositiveDual/Bidual.lean b/PhyslibAlpha/Mathematics/Order/PositiveDual/Bidual.lean index 051f6fec42..18fd4d4e4a 100644 --- a/PhyslibAlpha/Mathematics/Order/PositiveDual/Bidual.lean +++ b/PhyslibAlpha/Mathematics/Order/PositiveDual/Bidual.lean @@ -14,6 +14,8 @@ public import Mathlib.Algebra.Module.Pi /-! # The bidual +The bidual of an ordered vector space via positive functionals, and its monotone completeness. + ## i. Overview An element of an ordered real vector space `E` assigns to every positive functional its value, @@ -40,6 +42,10 @@ bound, their pointwise supremum. - C. Elements and positive functionals - D. Monotone completeness +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/Mathematics/Order/PositiveDual/BidualLattice.lean b/PhyslibAlpha/Mathematics/Order/PositiveDual/BidualLattice.lean index f9c4877af6..ad02c80035 100644 --- a/PhyslibAlpha/Mathematics/Order/PositiveDual/BidualLattice.lean +++ b/PhyslibAlpha/Mathematics/Order/PositiveDual/BidualLattice.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.Mathematics.Order.PositiveDual.Interpolation /-! # The bidual as a lattice +Least upper bounds in the bidual by the Riesz–Kantorovich formula; the bidual is a lattice. + ## i. Overview When the positive functionals on `E` form a lattice, any two elements `x` and `y` of the bidual have @@ -30,6 +32,10 @@ with the roles of elements and functionals exchanged. The bidual then is a latti - B. The least upper bound - C. The lattice structure +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/Mathematics/Order/PositiveDual/Interpolation.lean b/PhyslibAlpha/Mathematics/Order/PositiveDual/Interpolation.lean index 84386f5603..863f0cd585 100644 --- a/PhyslibAlpha/Mathematics/Order/PositiveDual/Interpolation.lean +++ b/PhyslibAlpha/Mathematics/Order/PositiveDual/Interpolation.lean @@ -12,6 +12,8 @@ public import Mathlib.Basic.Real.Pointwise /-! # Approximate interpolation +Approximate interpolation between finite families when the positive functionals form a lattice. + ## i. Overview Given finitely many lower elements `a i` below finitely many upper elements `b j` of an ordered @@ -36,6 +38,10 @@ not positive. - B. The interpolation gauge - C. Approximate interpolants +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/Mathematics/Order/PositiveDual/Majorant.lean b/PhyslibAlpha/Mathematics/Order/PositiveDual/Majorant.lean index e6ce2db766..3e83ca4d24 100644 --- a/PhyslibAlpha/Mathematics/Order/PositiveDual/Majorant.lean +++ b/PhyslibAlpha/Mathematics/Order/PositiveDual/Majorant.lean @@ -12,6 +12,8 @@ public import Mathlib.Basic.Real.Pointwise /-! # Positive majorants +A positive functional of weight at most m at u that dominates P - N, via Hahn–Banach. + ## i. Overview Fix an order unit `u` and two positive functionals `P` and `N`. If `P - N` is at most @@ -30,6 +32,10 @@ Fix an order unit `u` and two positive functionals `P` and `N`. If `P - N` is at - A. The majorant gauge - B. Positive majorants +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/Mathematics/Order/PositiveDual/RieszKantorovich.lean b/PhyslibAlpha/Mathematics/Order/PositiveDual/RieszKantorovich.lean index e6ba2f3b2f..1ea463530d 100644 --- a/PhyslibAlpha/Mathematics/Order/PositiveDual/RieszKantorovich.lean +++ b/PhyslibAlpha/Mathematics/Order/PositiveDual/RieszKantorovich.lean @@ -13,6 +13,8 @@ public import Mathlib.Algebra.BigOperators.Fin /-! # The Riesz–Kantorovich formula +Riesz decomposition makes positive functionals a lattice via the Riesz–Kantorovich formula. + ## i. Overview An ordered real vector space has the Riesz decomposition when a nonnegative element below a sum of diff --git a/PhyslibAlpha/Mathematics/Order/PositiveDual/UpperEnvelope.lean b/PhyslibAlpha/Mathematics/Order/PositiveDual/UpperEnvelope.lean index 589b1f2255..10efa71d96 100644 --- a/PhyslibAlpha/Mathematics/Order/PositiveDual/UpperEnvelope.lean +++ b/PhyslibAlpha/Mathematics/Order/PositiveDual/UpperEnvelope.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.Mathematics.Sublinear /-! # Upper envelopes +Splittings of a positive functional attain the upper envelope of a finite family. + ## i. Overview Take finitely many elements `A₁, …, Aₙ` of a directed ordered real vector space and a positive diff --git a/PhyslibAlpha/Mathematics/Order/StrongUnit.lean b/PhyslibAlpha/Mathematics/Order/StrongUnit.lean index 431b6ca4f8..0cc12e2e17 100644 --- a/PhyslibAlpha/Mathematics/Order/StrongUnit.lean +++ b/PhyslibAlpha/Mathematics/Order/StrongUnit.lean @@ -15,6 +15,8 @@ public import Mathlib.Basic.Real.Basic /-! # Strong units +Strong units and order units of ordered abelian groups, and the directed order they induce. + ## i. Overview A strong unit of an ordered abelian group is an element `u` such that every element lies below some @@ -35,6 +37,10 @@ group a strong unit is nonzero. - A. Strong units - B. Order units +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/Mathematics/Order/VectorLattice.lean b/PhyslibAlpha/Mathematics/Order/VectorLattice.lean index 0f047b9d81..8a37e0d700 100644 --- a/PhyslibAlpha/Mathematics/Order/VectorLattice.lean +++ b/PhyslibAlpha/Mathematics/Order/VectorLattice.lean @@ -16,6 +16,8 @@ public import Mathlib.Tactic.GCongr /-! # Vector lattices +Elementary arithmetic of infima in real vector lattices: Riesz decomposition and disjointness. + ## i. Overview A real vector lattice is an ordered real vector space in which any two elements have a least upper @@ -37,6 +39,10 @@ scalars, and how disjointness interacts with sums and with least upper bounds of - A. Riesz decomposition and disjointness - B. Positive scalars +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/Mathematics/PartialDerivativeTest.lean b/PhyslibAlpha/Mathematics/PartialDerivativeTest.lean index f657ed151e..d6d57765a8 100644 --- a/PhyslibAlpha/Mathematics/PartialDerivativeTest.lean +++ b/PhyslibAlpha/Mathematics/PartialDerivativeTest.lean @@ -16,24 +16,51 @@ public import Mathlib.Analysis.InnerProductSpace.PiL2 /-! # The Second Partial Derivatives Test +A positive definite Hessian at a critical point of an analytic function gives a local minimum. + +## i. Overview + We prove a version of the second partial derivative test from calculus for analytic functions `f : V → ℝ`, where `V` is a finite-dimensional vector space. -## Main results +The second iterated Fréchet derivative is packaged as a quadratic map, a positive definite +quadratic map is shown to be coercive, and a little-o form of the test is combined with the +quadratic approximation coming from a power series. + +Tags: partial derivative test, calculus. + +## ii. Key results + +- `iteratedFDerivQuadraticMap` : the second iterated Fréchet derivative as a quadratic map. +- `coercive_of_posdef` : positive definiteness implies coercivity. +- `isLocalMin_of_posDef_of_littleo` : the second partial derivative test, "little oh" form. +- `second_derivative_test` : Suppose `f` is a real-valued function on a finite-dimensional inner + product space that has vanishing gradient at `x₀`, and has a power series on a ball of positive + radius around `x₀`. If the second Fréchet derivative is positive definite at `x₀` then `f` has a + local minimum at `x₀`. +- `second_derivative_test_analyticAt` : the same test, assuming only that `f` is analytic at `x₀`. + +## iii. Table of contents + +- A. Updating vectors of length two +- B. Quadratic maps from the second derivative +- C. Coercivity of positive definite forms +- D. The second derivative test -* `second_derivative_test`: - Suppose `f` is a real-valued function on a - finite-dimensional inner product space that - has vanishing gradient at `x₀`, and has a power series on a ball of positive radius - around `x₀`. If the second Frechét derivative is positive definite at `x₀` then - `f` has local minimum at `x₀`. +## iv. References + +* None. -## Tags -partial derivative test, calculus -/ @[expose] public section +/-! + +## A. Updating vectors of length two + +-/ + /-- Update a vector of length 2 in coordinate 0. -/ @[simp] lemma Function.update₀ {α : Type*} {a b c : α} : Function.update ![a,b] 0 c = ![c,b] := by @@ -47,6 +74,12 @@ lemma Function.update₁ {α : Type*} {a b c : α} : Function.update ![a,b] 1 c open Nat ContinuousMultilinearMap Finset Function +/-! + +## B. Quadratic maps from the second derivative + +-/ + /-- The Hessian companion as a bilinear map. -/ noncomputable def hessianBilinearCompanion {V : Type*} [NormedAddCommGroup V] [NormedSpace ℝ V] (f : V → ℝ) (x₀ : V) : V →ₗ[ℝ] V →ₗ[ℝ] ℝ := @@ -287,6 +320,12 @@ theorem QuadraticMap.toContinuousMultilinearMap_applyHalf {V : Type*} [NormedAdd rfl +/-! + +## C. Coercivity of positive definite forms + +-/ + /-- . -/ lemma coercive_of_posdefHalf {V : Type*} [NormedAddCommGroup V] [NormedSpace ℝ V] [FiniteDimensional ℝ V] {F : QuadraticMap ℝ V ℝ} @@ -469,6 +508,12 @@ lemma coercive_of_posdef {V : Type*} [NormedAddCommGroup V] [NormedSpace ℝ V] refine Real.norm_of_nonneg ?_ simp) +/-! + +## D. The second derivative test + +-/ + /-- . -/ theorem le_of_littleO {V : Type*} [NormedAddCommGroup V] [InnerProductSpace ℝ V] diff --git a/PhyslibAlpha/Mathematics/Probability/Kernel/Factorization.lean b/PhyslibAlpha/Mathematics/Probability/Kernel/Factorization.lean index a3380459f1..01eb02fbfd 100644 --- a/PhyslibAlpha/Mathematics/Probability/Kernel/Factorization.lean +++ b/PhyslibAlpha/Mathematics/Probability/Kernel/Factorization.lean @@ -11,6 +11,8 @@ public import Mathlib.MeasureTheory.MeasurableSpace.CountablyGenerated /-! # Factorization of Markov kernels +Factoring kernels through Markov kernels, almost everywhere variants, and common refinements. + ## i. Overview A kernel `K : α → β` factors through a kernel `L : α → γ` when `K = κ ∘ₖ L` for some Markov kernel @@ -38,6 +40,10 @@ factor through a third one. - E. Kernels equal almost everywhere - F. Common refinements +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/Mathematics/Sublinear.lean b/PhyslibAlpha/Mathematics/Sublinear.lean index a7661c5399..58c72fca91 100644 --- a/PhyslibAlpha/Mathematics/Sublinear.lean +++ b/PhyslibAlpha/Mathematics/Sublinear.lean @@ -10,6 +10,8 @@ public import Mathlib.Analysis.Convex.Cone.Extension /-! # Linear minorants of sublinear functionals +A sublinear functional has a linear minorant attaining it at any given point (Hahn–Banach). + ## i. Overview A sublinear functional is the largest of the linear functionals below it. At every point the @@ -24,6 +26,10 @@ Hahn–Banach theorem gives a linear functional below it that agrees with it the - A. Linear minorants +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/Particles/BeyondTheStandardModel/TwoHDM/ChargeBalance.lean b/PhyslibAlpha/Particles/BeyondTheStandardModel/TwoHDM/ChargeBalance.lean index 42aaf7125f..bfd309f8f5 100644 --- a/PhyslibAlpha/Particles/BeyondTheStandardModel/TwoHDM/ChargeBalance.lean +++ b/PhyslibAlpha/Particles/BeyondTheStandardModel/TwoHDM/ChargeBalance.lean @@ -11,17 +11,44 @@ public import Mathlib.Tactic.Ring /-! # Charge balancing for polynomials +A polynomial invariant under a phase rotation of charged variables has only charge-balanced terms. + +## i. Overview + If the variables of a polynomial carry charges under a phase (here a single element `c` of infinite order), then invariance under the simultaneous phase rotation `Xᵢ ↦ c^{wᵢ} Xᵢ` forces every monomial to be *charge balanced* (net charge zero). This is the algebraic content of the statement that a gauge invariant potential, restricted to a slice on which the gauge torus acts diagonally, can only contain charge-balanced monomials. + +## ii. Key results + +- `MvPolynomial.coeff_aeval_diag` : rescaling each variable `Xᵢ` by a constant `d i` multiplies the + coefficient of a monomial by the corresponding product of the `d i`. +- `MvPolynomial.coeff_eq_zero_of_charge_ne_zero` : charge balancing, a polynomial invariant under + the phase rotation has vanishing coefficients on monomials of nonzero net charge. + +## iii. Table of contents + +- A. Rescaling the variables +- B. Charge balancing + +## iv. References + +* None. + -/ @[expose] public section namespace MvPolynomial +/-! + +## A. Rescaling the variables + +-/ + open scoped Classical in /-- Rescaling each variable `Xᵢ` by a constant `d i` multiplies the coefficient of the monomial `m` by `∏ᵢ (d i) ^ (m i)`. -/ @@ -58,6 +85,12 @@ lemma coeff_aeval_diag {σ R : Type*} [CommRing R] (d : σ → R) (f : MvPolynom ring · rw [ite_eq_right hi, ite_eq_right hi, mul_zero, mul_zero] +/-! + +## B. Charge balancing + +-/ + /-- **Charge balancing.** If each variable `Xᵢ` carries an integer charge `w i`, `c` is a phase of infinite order, and the polynomial `f` is invariant under the charge rotation `Xᵢ ↦ c^{wᵢ} Xᵢ`, then every monomial with nonzero net charge has vanishing coefficient. -/ diff --git a/PhyslibAlpha/Particles/BeyondTheStandardModel/TwoHDM/EffectivePotential.lean b/PhyslibAlpha/Particles/BeyondTheStandardModel/TwoHDM/EffectivePotential.lean index cfac53f6a4..b7e07fc4c7 100644 --- a/PhyslibAlpha/Particles/BeyondTheStandardModel/TwoHDM/EffectivePotential.lean +++ b/PhyslibAlpha/Particles/BeyondTheStandardModel/TwoHDM/EffectivePotential.lean @@ -11,6 +11,8 @@ public import Mathlib.RingTheory.MvPolynomial.Tower /-! # The effective potential of the two Higgs doublet model +Effective potentials of the 2HDM, their gauge invariance, and their maximum mass dimension. + ## i. Overview An *effective potential* of the two Higgs doublet model is a real-valued function @@ -30,8 +32,12 @@ properties of such a potential used when expressing it through the gauge-invaria ## iii. Table of contents -* A. The effective potential and its gauge invariance -* B. Maximum mass dimension +- A. The effective potential and its gauge invariance +- B. Maximum mass dimension + +## iv. References + +* None. -/ diff --git a/PhyslibAlpha/Particles/BeyondTheStandardModel/TwoHDM/GaugeSlice.lean b/PhyslibAlpha/Particles/BeyondTheStandardModel/TwoHDM/GaugeSlice.lean index 5223f7efbb..22c082d050 100644 --- a/PhyslibAlpha/Particles/BeyondTheStandardModel/TwoHDM/GaugeSlice.lean +++ b/PhyslibAlpha/Particles/BeyondTheStandardModel/TwoHDM/GaugeSlice.lean @@ -11,6 +11,10 @@ public import PhyslibAlpha.Particles.BeyondTheStandardModel.TwoHDM.OrbitRepresen /-! # The gauge slice and the hypercharges of the doublet components +The upper-triangular slice of 2HDM configurations and the gauge-torus phases acting on it. + +## i. Overview + After using `SU(2)` to align the first doublet with the first axis, a configuration lies on the *upper-triangular slice* `sliceHiggs z w₀ w₁ = ⟨(z, 0), (w₀, w₁)⟩`. The gauge torus acts on the three surviving components `z = Φ1₀`, `w₀ = Φ2₀`, `w₁ = Φ2₁` by their hypercharges: @@ -21,6 +25,27 @@ three surviving components `z = Φ1₀`, `w₀ = Φ2₀`, `w₁ = Φ2₁` by the `(z, w₀, w₁) ↦ (z, w₀, c⁶ w₁)`. These two phase rotations are the source of the charge balancing of the effective potential. + +## ii. Key results + +- `TwoHiggsDoublet.sliceHiggs` : the upper-triangular slice configuration `⟨(z, 0), (w₀, w₁)⟩`. +- `TwoHiggsDoublet.sliceR` : the slice as a real-linear map from six real field parameters. +- `TwoHiggsDoublet.gaugeCartan_smul_sliceHiggs` : the hypercharge action of the Cartan phase. +- `TwoHiggsDoublet.ofU1Subgroup_smul_sliceHiggs` : the hypercharge action of the residual `U(1)`. +- `TwoHiggsDoublet.gaugeCartan_smul_sliceR` : the Cartan phase rotates the real parameters. +- `TwoHiggsDoublet.ofU1Subgroup_smul_sliceR` : the residual `U(1)` rotates only the perpendicular + parameter pair. + +## iii. Table of contents + +- A. The slice configuration +- B. Hypercharge action on the slice +- C. Gauge action on the real parameters + +## iv. References + +* None. + -/ @[expose] public section @@ -33,6 +58,12 @@ open InnerProductSpace open StandardModel open ComplexConjugate +/-! + +## A. The slice configuration + +-/ + /-- The upper-triangular slice configuration `⟨(z, 0), (w₀, w₁)⟩`. It specialises to `repHiggs` when the components take their real "canonical frame" values. -/ def sliceHiggs (z w0 w1 : ℂ) : TwoHiggsDoublet where @@ -69,6 +100,12 @@ def sliceR : (Fin 6 → ℝ) →ₗ[ℝ] TwoHiggsDoublet where lemma repHiggs_eq_sliceHiggs (X : Fin 4 → ℝ) : repHiggs X = sliceHiggs (X 0) ((X 1 : ℂ) + Complex.I * (X 2 : ℂ)) (X 3) := rfl +/-! + +## B. Hypercharge action on the slice + +-/ + /-- Hypercharge action of the Cartan phase on the slice: it multiplies the first components by `a` and the perpendicular second component by `ā`. -/ lemma gaugeCartan_smul_sliceHiggs (a : unitary ℂ) (z w0 w1 : ℂ) : @@ -95,6 +132,12 @@ lemma ofU1Subgroup_smul_sliceHiggs (c : unitary ℂ) (z w0 w1 : ℂ) : ext i fin_cases i <;> simp [Matrix.mulVec, dotProduct, Fin.sum_univ_two] +/-! + +## C. Gauge action on the real parameters + +-/ + open Complex in /-- The Cartan hypercharge phase `u`, transported to a rotation of the six real field parameters: it phases the first-component pairs by `u` and the perpendicular pair by `ū`. -/ diff --git a/PhyslibAlpha/Particles/BeyondTheStandardModel/TwoHDM/GaugeTorus.lean b/PhyslibAlpha/Particles/BeyondTheStandardModel/TwoHDM/GaugeTorus.lean index 696714e4df..13acd6b7cd 100644 --- a/PhyslibAlpha/Particles/BeyondTheStandardModel/TwoHDM/GaugeTorus.lean +++ b/PhyslibAlpha/Particles/BeyondTheStandardModel/TwoHDM/GaugeTorus.lean @@ -9,6 +9,10 @@ public import Physlib.Particles.BeyondTheStandardModel.TwoHDM.GramMatrix /-! # The gauge torus acting on Higgs vectors +The SU(2) Cartan element diag(a, ā), which with ofU1Subgroup realises the gauge torus. + +## i. Overview + The maximal torus of the gauge group acting on a Higgs doublet is the group of diagonal phase rotations `diag(a, b)` of the two components. We realise it using @@ -17,6 +21,20 @@ rotations `diag(a, b)` of the two components. We realise it using Together these realise an arbitrary diagonal phase `diag(a, b)`, which is the symmetry underlying the charge-balancing ("Condition A") of the effective potential on the orbit representatives. + +## ii. Key results + +- `StandardModel.GaugeGroupI.gaugeCartan` : the Cartan `SU(2)` gauge element `diag(a, ā)`. +- `StandardModel.GaugeGroupI.gaugeCartan_smul_eq` : it acts on a Higgs vector as `diag(a, ā)`. + +## iii. Table of contents + +- A. The Cartan gauge element + +## iv. References + +* None. + -/ @[expose] public section @@ -28,6 +46,12 @@ namespace GaugeGroupI open Matrix Complex +/-! + +## A. The Cartan gauge element + +-/ + /-- The Cartan `SU(2)` gauge element `diag(a, ā)`, for `a` a phase. -/ noncomputable def gaugeCartan (a : unitary ℂ) : GaugeGroupI := (1, diff --git a/PhyslibAlpha/Particles/BeyondTheStandardModel/TwoHDM/Invariants.lean b/PhyslibAlpha/Particles/BeyondTheStandardModel/TwoHDM/Invariants.lean index c604d6fc82..656056be4d 100644 --- a/PhyslibAlpha/Particles/BeyondTheStandardModel/TwoHDM/Invariants.lean +++ b/PhyslibAlpha/Particles/BeyondTheStandardModel/TwoHDM/Invariants.lean @@ -18,6 +18,8 @@ public import Mathlib.Analysis.Real.Pi.Irrational /-! # The two Higgs doublet potential as a polynomial in the gauge invariants +Every gauge-invariant polynomial 2HDM potential is a polynomial in the four Gram bilinears. + ## i. Overview In the *bilinear formalism* of the two Higgs doublet model (hep-ph/0605184 @@ -39,6 +41,9 @@ and runs the following physical pipeline: 4. **Coprimality.** `‖Φ1‖²` and `‖Φ2‖²` are coprime in the (algebraically independent) Gram ring, which removes these factors and yields the Gram polynomial. +Mathematically the result is the first fundamental theorem of invariant theory for `SU(2)` +acting on two doublets in `ℂ²`. + ## ii. Key results * `exists_polynomial_repHiggs_sliceBilinear` — on gauge representatives, the potential is a @@ -52,20 +57,18 @@ and runs the following physical pipeline: ## iii. Table of contents -* A. Gauge-torus invariance of the potential on the slice -* B. Hypercharge eigen-coordinates and charge balancing -* C. Generation by the neutral gauge-invariant bilinears -* D. The potential on representatives as a polynomial in the bilinears -* E. Clearing the `‖Φ1‖²` and `‖Φ2‖²` factors -* F. Independence and coprimality of the Gram invariants -* G. The gauge-invariant potential as a polynomial in the Gram vector +- A. Gauge-torus invariance of the potential on the slice +- B. Hypercharge eigen-coordinates and charge balancing +- C. Generation by the neutral gauge-invariant bilinears +- D. The potential on representatives as a polynomial in the bilinears +- E. Clearing the `‖Φ1‖²` and `‖Φ2‖²` factors +- F. Independence and coprimality of the Gram invariants +- G. The gauge-invariant potential as a polynomial in the Gram vector ## iv. References * The bilinear formalism: https://arxiv.org/abs/hep-ph/0605184. [ref: arxiv_hep_ph_0605184] -Mathematically the result is the first fundamental theorem of invariant theory for `SU(2)` -acting on two doublets in `ℂ²`. -/ @[expose] public section diff --git a/PhyslibAlpha/Particles/BeyondTheStandardModel/TwoHDM/Module.lean b/PhyslibAlpha/Particles/BeyondTheStandardModel/TwoHDM/Module.lean index 98003cc8f7..a1493e9363 100644 --- a/PhyslibAlpha/Particles/BeyondTheStandardModel/TwoHDM/Module.lean +++ b/PhyslibAlpha/Particles/BeyondTheStandardModel/TwoHDM/Module.lean @@ -10,11 +10,32 @@ public import Physlib.Particles.BeyondTheStandardModel.TwoHDM.Basic # The Module structure on the two Higgs doublet model +The complex vector space (module) structure on two Higgs doublet configurations. + +## i. Overview + +Configurations of the two Higgs doublet model are pairs of Higgs vectors `(Φ1, Φ2)`. This file +defines addition, zero, negation and complex scalar multiplication componentwise, and assembles +them into an additive commutative group and a `ℂ`-module structure on `TwoHiggsDoublet`. + +## ii. Key results + +- `AddCommGroup TwoHiggsDoublet` : the additive commutative group structure (an instance). +- `Module ℂ TwoHiggsDoublet` : the `ℂ`-module structure (an instance). + +## iii. Table of contents + +- A. The structure of a module + +## iv. References + +* None. + -/ @[expose] public section /-! -## The structure of a module +## A. The structure of a module -/ diff --git a/PhyslibAlpha/Particles/BeyondTheStandardModel/TwoHDM/OrbitRepresentative.lean b/PhyslibAlpha/Particles/BeyondTheStandardModel/TwoHDM/OrbitRepresentative.lean index cac84f5a0e..73c2196339 100644 --- a/PhyslibAlpha/Particles/BeyondTheStandardModel/TwoHDM/OrbitRepresentative.lean +++ b/PhyslibAlpha/Particles/BeyondTheStandardModel/TwoHDM/OrbitRepresentative.lean @@ -9,6 +9,10 @@ public import Physlib.Particles.BeyondTheStandardModel.TwoHDM.GramMatrix /-! # A polynomial family of orbit representatives for the two Higgs doublet model +Every 2HDM gauge orbit meets a four-parameter family whose Gram vector is polynomial. + +## i. Overview + Every gauge orbit of the two Higgs doublet model meets the four–real–parameter family `repHiggs X = ⟨(X₀, 0), (X₁ + i X₂, X₃)⟩`. @@ -21,6 +25,25 @@ question of whether `V` is a polynomial in the Gram vector reduces to the purely of whether `V ∘ repHiggs` lies in the subring generated by the (polynomial) Gram components of the representative family. +## ii. Key results + +- `TwoHiggsDoublet.repHiggs` : the four-parameter family of representatives. +- `TwoHiggsDoublet.gramVector_repHiggs_inl`, `TwoHiggsDoublet.gramVector_repHiggs_inr0`, + `TwoHiggsDoublet.gramVector_repHiggs_inr1`, `TwoHiggsDoublet.gramVector_repHiggs_inr2` : the + components of the Gram vector of `repHiggs X` as polynomials in `X`. +- `TwoHiggsDoublet.exists_smul_eq_repHiggs` : every configuration is gauge equivalent to a + representative. + +## iii. Table of contents + +- A. The representative family +- B. The Gram vector of a representative +- C. Every configuration is gauge equivalent to a representative + +## iv. References + +* None. + -/ @[expose] public section @@ -33,6 +56,12 @@ open InnerProductSpace open StandardModel open ComplexConjugate +/-! + +## A. The representative family + +-/ + /-- A four–real–parameter polynomial family of representatives for the gauge orbits: the first doublet is `(X₀, 0)` and the second is `(X₁ + i X₂, X₃)`. -/ def repHiggs (X : Fin 4 → ℝ) : TwoHiggsDoublet where @@ -68,7 +97,7 @@ lemma inner_repHiggs (X : Fin 4 → ℝ) : /-! -## The Gram vector of a representative +## B. The Gram vector of a representative The Gram vector of `repHiggs X` is an explicit polynomial in the four real parameters `X`. @@ -102,7 +131,7 @@ lemma gramVector_repHiggs_inr2 (X : Fin 4 → ℝ) : /-! -## Every configuration is gauge equivalent to a representative +## C. Every configuration is gauge equivalent to a representative -/ diff --git a/PhyslibAlpha/Particles/BeyondTheStandardModel/TwoHDM/SwapDoublet.lean b/PhyslibAlpha/Particles/BeyondTheStandardModel/TwoHDM/SwapDoublet.lean index 9ce2adcf0c..3842b45b1c 100644 --- a/PhyslibAlpha/Particles/BeyondTheStandardModel/TwoHDM/SwapDoublet.lean +++ b/PhyslibAlpha/Particles/BeyondTheStandardModel/TwoHDM/SwapDoublet.lean @@ -11,6 +11,8 @@ public import Mathlib.Algebra.MvPolynomial.Degrees /-! # Swapping the two Higgs doublets +The doublet swap Φ1 ↔ Φ2 commutes with gauge action, preserving invariance and mass dimension. + ## i. Overview Exchanging the two doublets `Φ1 ↔ Φ2` is an `ℝ`-linear map `swapDoublet` that commutes with the @@ -30,10 +32,14 @@ clearing. ## iii. Table of contents -* A. The doublet-swap map and its components -* B. Commutation with the gauge action -* C. The action on the Gram vector -* D. Effect on gauge invariance and mass dimension +- A. The doublet-swap map and its components +- B. Commutation with the gauge action +- C. The action on the Gram vector +- D. Effect on gauge invariance and mass dimension + +## iv. References + +* None. -/ diff --git a/PhyslibAlpha/ProbabilisticTheory/Algebra/Alternative.lean b/PhyslibAlpha/ProbabilisticTheory/Algebra/Alternative.lean index 650354b667..45b2213b74 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Algebra/Alternative.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Algebra/Alternative.lean @@ -13,6 +13,8 @@ public import Mathlib.Tactic.LinearCombination # Alternative algebras +Alternative algebras, the associator, the flexible law, and the left Moufang identity. + ## i. Overview An algebra is alternative when the associator `(a, b, c) = (a b) c - a (b c)` is alternating. The @@ -25,6 +27,17 @@ algebras satisfy the flexible law and the left Moufang identity. - `associator` : the associator. - `IsAlternative.mul_flexible` : the flexible law. - `IsAlternative.moufang_left` : the left Moufang identity. +- `IsAlternative.left_bumping` : McCrimmon's left bumping formula. + +## iii. Table of contents + +- A. Alternative multiplications +- B. The associator +- C. Identities in alternative algebras + +## iv. References + +* None. -/ @@ -32,6 +45,12 @@ algebras satisfy the flexible law and the left Moufang identity. namespace ProbabilisticTheory +/-! + +## A. Alternative multiplications + +-/ + /-- An alternative multiplication has associative repeated factors on either side. -/ class IsAlternative (A : Type*) [Mul A] : Prop where /-- Left alternativity. -/ @@ -44,6 +63,12 @@ instance (priority := 100) {A : Type*} [Semigroup A] : IsAlternative A where mul_alternative_left x y := (mul_assoc x x y).symm mul_alternative_right x y := mul_assoc y x x +/-! + +## B. The associator + +-/ + namespace IsAlternative variable {A : Type*} [NonUnitalNonAssocRing A] @@ -77,6 +102,12 @@ lemma teichmuller (x y z w : A) : simp only [sub_mul, mul_sub] abel +/-! + +## C. Identities in alternative algebras + +-/ + variable [IsAlternative A] lemma associator_self_left (x y : A) : associator x x y = 0 := by diff --git a/PhyslibAlpha/ProbabilisticTheory/Algebra/Derivation.lean b/PhyslibAlpha/ProbabilisticTheory/Algebra/Derivation.lean index 4654dfb5d2..40d3fb7743 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Algebra/Derivation.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Algebra/Derivation.lean @@ -13,6 +13,8 @@ public import Mathlib.Tactic.Abel # Derivations +Derivations of a bilinear multiplication and their closure under linear operations. + ## i. Overview A derivation of a multiplication is a linear map `D` with `D (a b) = D a b + a D b`. The notion only @@ -29,6 +31,10 @@ real vector space. - A. The Leibniz rule - B. Closure properties +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/Algebra/NuclearInvolution.lean b/PhyslibAlpha/ProbabilisticTheory/Algebra/NuclearInvolution.lean index 436820759a..55cc64e34b 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Algebra/NuclearInvolution.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Algebra/NuclearInvolution.lean @@ -12,6 +12,8 @@ public import Mathlib.Algebra.Star.Basic # Nuclear involutions +Nuclear elements and nuclear involutions of alternative algebras, and their associators. + ## i. Overview An element of an algebra is in the nucleus when it associates with all elements. A nuclear @@ -23,6 +25,15 @@ Nuclear elements pass through associators, and the associator changes sign under - `IsInNucleus`, `IsNuclearInvolution` : nuclear elements and nuclear involutions. - `nuclear_comm_associator` : nuclear elements commute with associators. +## iii. Table of contents + +- A. Nuclear elements +- B. Nuclear involutions + +## iv. References + +* None. + -/ @[expose] public section @@ -33,6 +44,12 @@ open IsAlternative variable {D : Type*} [NonUnitalNonAssocRing D] [IsAlternative D] +/-! + +## A. Nuclear elements + +-/ + /-- An element associating trivially in every slot. -/ def IsInNucleus (x : D) : Prop := ∀ y z : D, associator x y z = 0 ∧ associator y x z = 0 ∧ associator y z x = 0 @@ -61,6 +78,12 @@ lemma nuclear_slip_last_right {n : D} (hn : IsInNucleus n) (x y z : D) : rw [(hn (x * y) z).2.2, (hn x (y * z)).2.2, (hn y z).2.2, mul_zero] at h linear_combination (norm := abel) h +/-! + +## B. Nuclear involutions + +-/ + variable [StarAddMonoid D] /-- A star involution whose symmetric elements are nuclear. -/ diff --git a/PhyslibAlpha/ProbabilisticTheory/Algebra/Statistics.lean b/PhyslibAlpha/ProbabilisticTheory/Algebra/Statistics.lean index d6d5a6b5e1..cd0cdd908f 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Algebra/Statistics.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Algebra/Statistics.lean @@ -12,6 +12,8 @@ public import Mathlib.LinearAlgebra.BilinearForm.Properties # Statistics of a linear functional on a bilinear algebra +Second moments, covariance, variance and centering for a linear functional on a bilinear algebra. + ## i. Overview Second moments and covariance use only a bilinear multiplication and a linear functional. They do @@ -27,20 +29,25 @@ Commutativity of the product is used only to prove symmetry. A unit and the norm `omega 1 = 1` are used only for centering identities. Positivity enters only for ordered algebras. -## ii. Key definitions and results +## ii. Key results -- `LinearMap.secondMomentForm` -- `LinearMap.covarianceForm` -- `LinearMap.variance` -- `LinearMap.centered` -- `LinearMap.apply_centered` -- `LinearMap.apply_centered_mul_centered` +- `LinearMap.secondMomentForm` : the second-moment bilinear form `(a, b) ↦ omega (a * b)`. +- `LinearMap.covarianceForm` : the covariance bilinear form. +- `LinearMap.variance` : the diagonal of the covariance form. +- `LinearMap.centered` : the element `a - omega a • 1`. +- `LinearMap.apply_centered` : a normalized functional vanishes on centered elements. +- `LinearMap.apply_centered_mul_centered` : covariance is the value on a product of centered + elements. ## iii. Table of contents - A. Second moments and covariance - B. Centering a normalized functional +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/Automorphism.lean b/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/Automorphism.lean index 95ccec14c2..846c15578a 100644 --- a/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/Automorphism.lean +++ b/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/Automorphism.lean @@ -16,6 +16,8 @@ public import Mathlib.Algebra.Star.StarAlgHom # ⋆-automorphisms and reversible dynamics +⋆-automorphisms as channels on observables, and one-parameter groups of them as reversible dynamics. + ## i. Overview Reversible transformations of a quantum system act on its algebra by `⋆`-automorphisms. A @@ -42,6 +44,10 @@ dynamics; it can be transported along a `⋆`-isomorphism and induces dynamics o - E. Transporting and conjugating automorphism groups - F. Conjugating an automorphism group by a star automorphism +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/Commutative.lean b/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/Commutative.lean index 61e715dd23..ccf2ac27b3 100644 --- a/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/Commutative.lean +++ b/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/Commutative.lean @@ -12,6 +12,8 @@ public import Mathlib.Analysis.CStarAlgebra.GelfandDuality /-! # Commutative C⋆-algebras are classical +The observables of a commutative C⋆-algebra form a classical system, via its characters. + ## i. Overview A commutative C⋆-algebra is the algebra of continuous functions on its characters, the pure @@ -33,6 +35,10 @@ self-adjoint part of a commutative C⋆-algebra is a classical system. - B. Order through characters - C. Classicality +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/ConjugationSymmetry.lean b/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/ConjugationSymmetry.lean index 339abc1728..7bfd7a7ac3 100644 --- a/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/ConjugationSymmetry.lean +++ b/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/ConjugationSymmetry.lean @@ -13,6 +13,8 @@ public import Mathlib.Algebra.Star.Unitary # Unitary conjugation as a symmetry +Conjugation by a unitary as a channel and a symmetry, and symmetry actions of representations. + ## i. Overview A symmetry of a quantum system is usually implemented as `a ↦ u a u⋆` for a unitary `u`. Conjugation @@ -35,6 +37,10 @@ representation of a group `G` gives a symmetry action of `G`. - C. Conjugation as a symmetry - D. Unitary representations induce symmetry actions +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/GNS.lean b/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/GNS.lean index 888d246179..f02ab3aede 100644 --- a/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/GNS.lean +++ b/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/GNS.lean @@ -12,6 +12,8 @@ public import Mathlib.Analysis.CStarAlgebra.GelfandNaimarkSegal # The GNS construction +Every state on a C⋆-algebra is the vector state of a cyclic unit vector in its GNS representation. + ## i. Overview Every state `ω` on a C⋆-algebra is a vector state of a representation. Mathlib's GNS construction @@ -29,6 +31,16 @@ representation. - `UnitalPositiveLinearMap.injective_gnsRep_of_isFaithful` : faithful states give faithful representations. +## iii. Table of contents + +- A. The GNS representation +- B. The cyclic vector +- C. Faithful states + +## iv. References + +* None. + -/ @[expose] public section @@ -43,6 +55,12 @@ namespace UnitalPositiveLinearMap variable (ω : 𝓢[ℂ, A]) +/-! + +## A. The GNS representation + +-/ + /-- The GNS Hilbert space `H_ω` carried by a state `ω` on a unital C⋆-algebra: the Hilbert space completion of `A` with respect to the (semi-)inner product `⟨x, y⟩ := ω(x⋆y)`. -/ noncomputable abbrev GNS := ω.toPositiveLinearMap.GNS @@ -51,6 +69,12 @@ noncomputable abbrev GNS := ω.toPositiveLinearMap.GNS `⋆`-homomorphism into the bounded operators on `ω.GNS` induced by left multiplication. -/ noncomputable abbrev gnsRep : A →⋆ₐ[ℂ] (ω.GNS →L[ℂ] ω.GNS) := ω.toPositiveLinearMap.gnsStarAlgHom +/-! + +## B. The cyclic vector + +-/ + /-- The GNS cyclic vector `Ω_ω ∈ H_ω`: the image of `1 : A` under `A → ω.GNS`. -/ noncomputable def gnsCyclicVector : ω.GNS := ((ω.toPositiveLinearMap.toPreGNS 1 : ω.toPositiveLinearMap.PreGNS) : ω.GNS) @@ -108,6 +132,12 @@ lemma denseRange_gnsRep_gnsCyclicVector : exact hden.comp (Function.Surjective.denseRange hbij.surjective) (UniformSpace.Completion.continuous_coe _) +/-! + +## C. Faithful states + +-/ + /-- A state is **faithful** when only `0` gives `x⋆x` weight `0` — the standard notion of a faithful state on a C⋆-algebra, and the hypothesis under which the GNS representation `π_ω` becomes injective. -/ diff --git a/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/JordanDecomposition.lean b/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/JordanDecomposition.lean index 9ed7dcf197..f9b852e03c 100644 --- a/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/JordanDecomposition.lean +++ b/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/JordanDecomposition.lean @@ -14,6 +14,8 @@ public import Mathlib.Analysis.SpecialFunctions.ContinuousFunctionalCalculus.Rpo # Positive and negative parts of observables +Every observable of a C⋆-algebra splits uniquely into orthogonal positive and negative parts. + ## i. Overview Every observable `a` of a C⋆-algebra splits uniquely as `a = a⁺ - a⁻` with `a⁺`, `a⁻` positive and @@ -33,6 +35,10 @@ functional calculus; here they are positive observables. - A. Positive observables - B. Positive and negative parts +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/MatrixComposite.lean b/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/MatrixComposite.lean index 4134cc0c07..c63de113bc 100644 --- a/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/MatrixComposite.lean +++ b/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/MatrixComposite.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.ProbabilisticTheory.CStarAlgebra.QuantumChannel /-! # Matrices over a C⋆-algebra as a composite system +Matrices over a C⋆-algebra as composite observables with an n-level ancilla, and positivity. + ## i. Overview Coupling a quantum system with observables `A` to an `n`-level ancilla gives the `n × n` matrices @@ -45,6 +47,10 @@ systems, and for maps out of commutative C⋆-algebras it follows from classical - E. Applying a map entrywise - F. Channels out of commutative algebras +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/OrderUnit.lean b/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/OrderUnit.lean index 364288ed85..6c224419b6 100644 --- a/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/OrderUnit.lean +++ b/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/OrderUnit.lean @@ -13,6 +13,8 @@ public import Mathlib.Algebra.Star.SelfAdjoint # The observables of a C⋆-algebra +The self-adjoint part of a unital C⋆-algebra is an Archimedean order-unit space. + ## i. Overview The self-adjoint elements of a unital C⋆-algebra form an Archimedean order-unit space with unit `1`. @@ -23,6 +25,15 @@ Every self-adjoint `a` lies below `‖a‖ • 1`, and the positive cone is clos - `selfAdjoint.instIsOrderUnit` : the order-unit space of observables. - `selfAdjoint.instIsArchimedeanOrderUnit` : it is Archimedean. +## iii. Table of contents + +- A. Positive scalars +- B. The order-unit space of observables + +## iv. References + +* None. + -/ @[expose] public section @@ -32,6 +43,12 @@ variable {A : Type*} [CStarAlgebra A] [PartialOrder A] [StarOrderedRing A] namespace selfAdjoint open ProbabilisticTheory +/-! + +## A. Positive scalars + +-/ + /-- Nonnegative real scalars preserve the order on self-adjoint elements: scaling by a nonnegative real is the same as multiplying by a nonnegative (central) algebra element, and a nonnegative element times a nonnegative element that commutes with it stays nonnegative. -/ @@ -41,6 +58,12 @@ instance instPosSMulMono : PosSMulMono ℝ (selfAdjoint A) where have hab' : (a : A) ≤ (b : A) := hab gcongr +/-! + +## B. The order-unit space of observables + +-/ + noncomputable instance instIsOrderUnit : OrderUnitSpace (selfAdjoint A) where one_nonneg := by show (0 : A) ≤ (1 : A) diff --git a/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/Projection.lean b/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/Projection.lean index 4b83863bdc..df74aab44d 100644 --- a/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/Projection.lean +++ b/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/Projection.lean @@ -12,6 +12,8 @@ public import Mathlib.Analysis.CStarAlgebra.ContinuousFunctionalCalculus.Project # Projections +Projections of a C⋆-algebra: sharp idempotent effects with complements and spectrum in {0, 1}. + ## i. Overview A projection is an effect `p` with `p * p = p`. Projections are sharp effects, closed under @@ -24,6 +26,15 @@ complement, and their spectrum lies in `{0, 1}`. - `Projection.complement` : the complementary projection `1 - p`. - `Projection.spectrum_subset_zero_one` : the spectrum of a projection lies in `{0, 1}`. +## iii. Table of contents + +- A. Projections +- B. Sharpness, complements and spectrum + +## iv. References + +* None. + -/ @[expose] public section @@ -32,6 +43,12 @@ namespace ProbabilisticTheory variable {A : Type*} [CStarAlgebra A] [PartialOrder A] [StarOrderedRing A] +/-! + +## A. Projections + +-/ + /-- A projection: an idempotent effect in the self-adjoint part of a C⋆-algebra. -/ def Projection (A : Type*) [CStarAlgebra A] [PartialOrder A] := {p : Effect (selfAdjoint A) // IsIdempotentElem (((p : selfAdjoint A) : A))} @@ -47,6 +64,12 @@ lemma ext {p q : Projection A} (h : (p : Effect (selfAdjoint A)) = (q : Effect ( p = q := Subtype.ext h +/-! + +## B. Sharpness, complements and spectrum + +-/ + /-- Every projection is a sharp effect. -/ lemma isSharp (p : Projection A) : Effect.IsSharp (p : Effect (selfAdjoint A)) := p.2.isSharp diff --git a/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/QuantumChannel.lean b/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/QuantumChannel.lean index 47cbce90f4..07e3aac8d3 100644 --- a/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/QuantumChannel.lean +++ b/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/QuantumChannel.lean @@ -13,6 +13,8 @@ public import PhyslibAlpha.ProbabilisticTheory.CStarAlgebra.OrderUnit # Quantum channels +Quantum channels as unital completely positive maps, and the channels they induce on observables. + ## i. Overview A quantum channel between C⋆-algebras is a unital completely positive map: it stays positive when @@ -20,7 +22,7 @@ applied to one half of any larger, possibly entangled, system. Complete positivi `CompletelyPositiveMap`. On self-adjoint parts every quantum channel is a channel between the order-unit spaces of observables. -## ii. Key definitions +## ii. Key results - `QuantumChannel A₁ A₂` : unital completely positive maps from `A₁` to `A₂`. - `QuantumChannel.toChannel` : the channel it induces between the self-adjoint parts. @@ -30,6 +32,10 @@ order-unit spaces of observables. - A. Quantum channels - B. The induced channel on observables +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/SharpEffect.lean b/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/SharpEffect.lean index c836c4079e..8a9f08c74a 100644 --- a/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/SharpEffect.lean +++ b/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/SharpEffect.lean @@ -15,6 +15,8 @@ public import Mathlib.Algebra.Module.Torsion.Free # Projections are sharp +An idempotent effect of a C⋆-algebra is not a proper mixture of two different effects. + ## i. Overview A projection `p` is a sharp effect: it is not a proper mixture of two different effects. If `p = t @@ -24,6 +26,17 @@ y₁ + s y₂`, conjugating by `1 - p` kills both `y₁` and `y₂`, so by the C ## ii. Key results - `IsIdempotentElem.isSharp` : idempotent effects are sharp. +- `ProbabilisticTheory.eq_of_mem_openSegment_of_isIdempotentElem` : the algebraic heart of the + proof, stated on bare elements. + +## iii. Table of contents + +- A. Consequences of the C⋆-identity +- B. Projections are sharp + +## iv. References + +* None. -/ @@ -33,6 +46,12 @@ namespace ProbabilisticTheory variable {A : Type*} [CStarAlgebra A] [PartialOrder A] [StarOrderedRing A] +/-! + +## A. Consequences of the C⋆-identity + +-/ + /-- In a partially ordered additive group, two nonnegative terms summing to zero vanish. -/ lemma nonneg_add_eq_zero {x y : A} (hx : 0 ≤ x) (hy : 0 ≤ y) (hxy : x + y = 0) : x = 0 := by @@ -131,6 +150,12 @@ lemma eq_of_mem_openSegment_of_isIdempotentElem {a y₁ y₂ : A} (ha0 : 0 ≤ a have h3 : a - y₁ = 0 := (smul_eq_zero.mp hz3).resolve_left ht.ne' exact (sub_eq_zero.mp h3).symm +/-! + +## B. Projections are sharp + +-/ + /-- **Projections are sharp**: an idempotent effect is not a proper mixture of two different effects. -/ lemma _root_.IsIdempotentElem.isSharp {e : Effect (selfAdjoint A)} diff --git a/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/SpectralMeasure.lean b/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/SpectralMeasure.lean index 8d4d1127ab..fce1d3c95e 100644 --- a/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/SpectralMeasure.lean +++ b/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/SpectralMeasure.lean @@ -17,6 +17,8 @@ public import Mathlib.Topology.Algebra.Indicator # The distribution of an observable +The outcome distribution of an observable in a state, and the measurement of an isolated eigenvalue. + ## i. Overview A state `ω` and an observable `a` determine a probability measure `μ_{ω,a}` on `ℝ`, the distribution @@ -37,6 +39,10 @@ take the value `x`?", whose probability of `true` is `μ_{ω,a}({x})`. - A. Measuring an isolated eigenvalue +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/Stinespring/Dilation.lean b/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/Stinespring/Dilation.lean index c680ddb2d1..04a0a72479 100644 --- a/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/Stinespring/Dilation.lean +++ b/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/Stinespring/Dilation.lean @@ -16,6 +16,8 @@ public import Mathlib.Analysis.CStarAlgebra.ContinuousFunctionalCalculus.Order # Stinespring's dilation theorem +Stinespring's theorem: every completely positive map has the form J a = V⋆ π(a) V. + ## i. Overview Every completely positive map `J` from a C⋆-algebra `A` into the bounded operators on `H` has the @@ -37,6 +39,10 @@ commutative `A` this contains Naimark's dilation of a POVM. - A. The seminorm and pre-Hilbert structures induced by the kernel - B. The canonical CP-dependent Hilbert space +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/Stinespring/Kernel.lean b/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/Stinespring/Kernel.lean index 6bc8bb94bc..0cb8a6ebf6 100644 --- a/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/Stinespring/Kernel.lean +++ b/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/Stinespring/Kernel.lean @@ -16,6 +16,8 @@ public import Mathlib.Analysis.CStarAlgebra.SpecialFunctions.PosPart # Completely positive maps as positive kernels +Completely positive maps give positive operator-valued kernels; Stinespring witnesses. + ## i. Overview A completely positive map `J` into the bounded operators on `H` is a positive operator-valued @@ -36,6 +38,10 @@ operator `V : H → K` with `J a = V⋆ π(a) V`. - B. The CP-map positivity kernel - C. Stinespring witnesses +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/Uncertainty.lean b/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/Uncertainty.lean index 6a65dd92e9..ffb47fe943 100644 --- a/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/Uncertainty.lean +++ b/PhyslibAlpha/ProbabilisticTheory/CStarAlgebra/Uncertainty.lean @@ -13,6 +13,8 @@ public import PhyslibAlpha.ProbabilisticTheory.CStarAlgebra.GNS # Uncertainty relations +Cauchy–Schwarz for states and the Robertson and Robertson–Schrödinger uncertainty relations. + ## i. Overview A state gives the sesquilinear form `(x, y) ↦ ω(x⋆ y)`, which is the inner product of the GNS @@ -35,6 +37,10 @@ bound on the covariance. - C. Equality in the uncertainty relations - D. Normalized variance bounds +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/Channel/Basic.lean b/PhyslibAlpha/ProbabilisticTheory/Channel/Basic.lean index 0a24e141e0..6ff3333c97 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Channel/Basic.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Channel/Basic.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.ProbabilisticTheory.OrderUnit.PositiveDual /-! # Channels +Channels as unital positive linear maps between order-unit spaces, and their composition. + ## i. Overview A channel is a transformation of a system, described by what it does to observables: it sends @@ -33,6 +35,10 @@ and measurements. Quantum channels additionally stay positive on composite syste - C. Composing channels - D. Channels +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/Channel/MeasureAndPrepare.lean b/PhyslibAlpha/ProbabilisticTheory/Channel/MeasureAndPrepare.lean index b5d83af498..44da405a92 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Channel/MeasureAndPrepare.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Channel/MeasureAndPrepare.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.ProbabilisticTheory.Channel.Basic # Measure-and-prepare channels +Measure-and-prepare channels: channels that factor through a finite classical system. + ## i. Overview A channel `Channel E₂ E₁` (the Heisenberg picture of a Schrödinger channel `E₁ → E₂`) is @@ -25,14 +27,19 @@ family of effects. This is the abstract, order-unit-level version of an entanglement-breaking channel. Quantifying over the finite outcome type avoids hard-coding a particular classical system. -## ii. Key definitions +## ii. Key results -- `UnitalPositiveLinearMap.IsMeasureAndPrepare` +- `UnitalPositiveLinearMap.IsMeasureAndPrepare` : the channel factors through a finite classical + system. ## iii. Table of contents - A. Factorization through a finite classical system +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/Channel/Normal.lean b/PhyslibAlpha/ProbabilisticTheory/Channel/Normal.lean index 135de2506b..0528e04c96 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Channel/Normal.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Channel/Normal.lean @@ -12,6 +12,8 @@ public import Mathlib.Algebra.Order.BigOperators.Group.Finset /-! # Normal channels +Normal positive maps and channels: those preserving suprema of increasing sequences. + ## i. Overview A channel is normal when it preserves least upper bounds of increasing sequences. Every channel @@ -28,6 +30,10 @@ preserves finite sums; a normal channel also preserves countable sums of positiv - A. Normal positive maps - B. Normal channels +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/Channel/Operation.lean b/PhyslibAlpha/ProbabilisticTheory/Channel/Operation.lean index 7a0b001fdd..b6be536b4c 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Channel/Operation.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Channel/Operation.lean @@ -14,6 +14,8 @@ public import Mathlib.Algebra.Order.Module.PositiveLinearMap # Operations +Operations: positive maps with op 1 ≤ 1, their outcome effects and conditioned states. + ## i. Overview An operation is a positive linear map `op` with `op 1 ≤ 1`. It describes how a system changes when @@ -33,6 +35,10 @@ to `1` is an instrument. - A. Operations - B. Outcome effects +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/Channel/Symmetry.lean b/PhyslibAlpha/ProbabilisticTheory/Channel/Symmetry.lean index 39d82793a1..135845e65c 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Channel/Symmetry.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Channel/Symmetry.lean @@ -14,6 +14,8 @@ public import Mathlib.Basic.Real.Basic # Symmetries +Symmetries as channels with channel inverses, their group, action on states, and dynamics. + ## i. Overview A symmetry of a system is a reversible transformation: a channel whose inverse is also a channel. @@ -36,6 +38,10 @@ dynamics. - C. The induced action on states - D. One-parameter automorphism groups +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/Channel/Weight.lean b/PhyslibAlpha/ProbabilisticTheory/Channel/Weight.lean index 01ba354f74..0fe04b65ba 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Channel/Weight.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Channel/Weight.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.ProbabilisticTheory.Channel.Basic # Weight pushforward along a channel +Pushing weights and states forward along a channel, functorially in the channel. + ## i. Overview A channel from system `A` to system `B` is, in the Schrödinger picture, an affine map on states. @@ -26,9 +28,12 @@ on `A` with `φ` gives a weight on `B` — the Schrödinger-picture pushforward `Weight.comp_comp` show this assignment respects identities and composition, so pushforward is a functor from unital positive linear maps to weights, contravariant in `φ`. -## ii. Key definitions and results +## ii. Key results -- `Weight.comp`, `Weight.IsFinite.comp`, `Weight.IsState.comp` +- `Weight.comp` : the pushforward of a weight along a channel. +- `Weight.comp_id`, `Weight.comp_comp` : pushforward respects identities and composition. +- `Weight.IsFinite.comp`, `Weight.IsState.comp` : finite weights and states push forward to + finite weights and states. ## iii. Table of contents @@ -36,6 +41,10 @@ functor from unital positive linear maps to weights, contravariant in `φ`. - B. Functoriality - C. Preservation of finite weights and states +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/Classical/Basic.lean b/PhyslibAlpha/ProbabilisticTheory/Classical/Basic.lean index ea26e682eb..b921f1ff4d 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Classical/Basic.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Classical/Basic.lean @@ -10,6 +10,8 @@ public import PhyslibAlpha.ProbabilisticTheory.OrderUnit.Lattice /-! # Classical systems +Classical systems: those whose positive functionals have least upper bounds. + ## i. Overview A system is classical when every state decomposes in exactly one way into pure states: a state is @@ -21,7 +23,7 @@ Classicality is characterized operationally by the absence of incompatibility (K and by the uniqueness of composites (the Namioka–Phelps theorem). It is weaker than asking that the observables themselves form a lattice, as they do for the functions on a sample space. -## ii. Key definitions and results +## ii. Key results - `IsClassical E` : the system `E` is classical. - `OrderUnitLattice.isClassical` : a system whose observables form a lattice is classical. @@ -30,6 +32,10 @@ observables themselves form a lattice, as they do for the functions on a sample - A. Classical systems +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/Classical/BauerSimplex.lean b/PhyslibAlpha/ProbabilisticTheory/Classical/BauerSimplex.lean index 2d17f17985..86ac0a06d5 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Classical/BauerSimplex.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Classical/BauerSimplex.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.Mathematics.MeasureTheory.PositiveFunctionalIntegral /-! # Bauer simplices +The state space is a Bauer simplex exactly when ensembles refine and pure states are closed. + ## i. Overview A Bauer simplex is a classical state space whose pure states form a closed set. The pure states diff --git a/PhyslibAlpha/ProbabilisticTheory/Classical/BoundedMeasurable.lean b/PhyslibAlpha/ProbabilisticTheory/Classical/BoundedMeasurable.lean index c6d4c24b16..b06dbce8d7 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Classical/BoundedMeasurable.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Classical/BoundedMeasurable.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.ProbabilisticTheory.Measurement.EffectValuedMeasure /-! # Observables of a sample space +Bounded measurable functions on a sample space as a classical order-unit lattice. + ## i. Overview The observables of a sample space `Ω` are the bounded measurable functions on `Ω`, ordered @@ -31,6 +33,10 @@ observables are even a lattice. For a mechanical system, `Ω` is its phase space - A. The order-unit space - B. Indicator effects +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/Classical/Channel.lean b/PhyslibAlpha/ProbabilisticTheory/Classical/Channel.lean index 9c5c5f24a2..af57b46811 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Classical/Channel.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Classical/Channel.lean @@ -13,6 +13,8 @@ public import Mathlib.Probability.Kernel.Composition.MeasureComp /-! # Classical channels +Normal channels between classical systems of observables are exactly Markov kernels. + ## i. Overview A channel between two classical systems sends observables of the target system `Ω` to observables @@ -40,6 +42,10 @@ kernel. - C. The Markov kernel of a normal channel - D. The correspondence +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/Classical/Compatibility.lean b/PhyslibAlpha/ProbabilisticTheory/Classical/Compatibility.lean index 5037bbdae3..2a462c4196 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Classical/Compatibility.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Classical/Compatibility.lean @@ -16,6 +16,8 @@ public import Mathlib.Analysis.Normed.Module.FiniteDimension /-! # Classical theories are those without incompatibility +Kuramochi's theorem: a system is classical exactly when all yes/no measurements are compatible. + ## i. Overview In classical probability every two yes/no questions can be asked at once. In quantum theory they diff --git a/PhyslibAlpha/ProbabilisticTheory/Classical/EnsembleRefinement.lean b/PhyslibAlpha/ProbabilisticTheory/Classical/EnsembleRefinement.lean index eb89c47400..935dd90e9f 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Classical/EnsembleRefinement.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Classical/EnsembleRefinement.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.Mathematics.Order.PositiveDual.UpperEnvelope /-! # Refinement of ensembles +Refinement of ensembles, its consequences for pure states, and refinement on a simplex. + ## i. Overview An ensemble is a recipe for preparing a state: choose one of finitely many states with given @@ -47,6 +49,10 @@ and down and of spin left and right, and these two ensembles have no common refi - C. Upper envelopes on refining ensembles - D. Ensembles refine on a simplex +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/Classical/FiniteDimensional.lean b/PhyslibAlpha/ProbabilisticTheory/Classical/FiniteDimensional.lean index 0a64180d63..c37e2a4462 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Classical/FiniteDimensional.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Classical/FiniteDimensional.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.Mathematics.Geometry.Simplex /-! # Finite classical systems +A finite-dimensional system is classical exactly when its state space is a geometric simplex. + ## i. Overview A system with finitely many independent observables is classical exactly when its state space is a @@ -37,6 +39,10 @@ finitely many of them, and by the Krein–Milman theorem they span the state spa - A. Geometric simplices decompose uniquely - B. Simplices are geometric simplices +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/Classical/FiniteSystem.lean b/PhyslibAlpha/ProbabilisticTheory/Classical/FiniteSystem.lean index 400121bc33..e094d3d65b 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Classical/FiniteSystem.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Classical/FiniteSystem.lean @@ -14,6 +14,8 @@ public import Mathlib.Topology.UnitInterval /-! # Finite classical systems +The classical system with finitely many outcomes: states are probability vectors. + ## i. Overview A classical system with finitely many outcomes `ι` has as observables the real functions on `ι`, @@ -37,6 +39,10 @@ system classical. The classical bit is `ι = Fin 2`. - C. The simplex of states - D. Effects of `ℝ` +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/Classical/LatticeObservables.lean b/PhyslibAlpha/ProbabilisticTheory/Classical/LatticeObservables.lean index 0314512b75..be4c2425f3 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Classical/LatticeObservables.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Classical/LatticeObservables.lean @@ -13,6 +13,8 @@ public import PhyslibAlpha.ProbabilisticTheory.Classical.FiniteSystem /-! # Lattice-ordered observables +When observables form a lattice, the state space is a Bauer simplex. + ## i. Overview When observables form a lattice, a state is pure exactly when it gives the minimum diff --git a/PhyslibAlpha/ProbabilisticTheory/Classical/NamiokaPhelps.lean b/PhyslibAlpha/ProbabilisticTheory/Classical/NamiokaPhelps.lean index 023757cf41..ac5eee1ea3 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Classical/NamiokaPhelps.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Classical/NamiokaPhelps.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.ProbabilisticTheory.Classical.Compatibility /-! # Classical theories compose uniquely with the square +Namioka–Phelps square test: classical exactly when composition with the square is unique. + ## i. Overview When a system is combined with another, the parts do not decide which composite observables are diff --git a/PhyslibAlpha/ProbabilisticTheory/Classical/NormalStates.lean b/PhyslibAlpha/ProbabilisticTheory/Classical/NormalStates.lean index a9531b714b..e6b2c92309 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Classical/NormalStates.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Classical/NormalStates.lean @@ -13,6 +13,8 @@ public import PhyslibAlpha.ProbabilisticTheory.Measurement.BornRule /-! # States of a classical system +The normal states of a classical system are exactly the probability measures on its outcomes. + ## i. Overview Each outcome `x` gives the deterministic state `f ↦ f x`, which predicts every observable with @@ -39,6 +41,10 @@ probability measures on its outcomes. - D. From states to measures - E. The correspondence +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/Classical/Nuclear.lean b/PhyslibAlpha/ProbabilisticTheory/Classical/Nuclear.lean index 7c6fbe35e2..3d6792dbac 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Classical/Nuclear.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Classical/Nuclear.lean @@ -13,6 +13,8 @@ public import Mathlib.LinearAlgebra.TensorProduct.Finiteness /-! # Classical systems are nuclear +Namioka–Phelps: a system is classical exactly when it is nuclear. + ## i. Overview A classical system composes uniquely with every other system: every composite observable in the diff --git a/PhyslibAlpha/ProbabilisticTheory/Classical/PureState.lean b/PhyslibAlpha/ProbabilisticTheory/Classical/PureState.lean index 7570053d55..eab9436eab 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Classical/PureState.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Classical/PureState.lean @@ -15,6 +15,8 @@ public import Mathlib.Topology.ContinuousMap.Ordered /-! # Pure states +Pure states, the functionals below them, and the space of pure states. + ## i. Overview A pure state is a state of maximal knowledge. It cannot be prepared by mixing two different states. @@ -45,6 +47,10 @@ every pure state is nonnegative. - A. Functionals below a pure state - B. The space of pure states +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/Classical/SeparableObservables.lean b/PhyslibAlpha/ProbabilisticTheory/Classical/SeparableObservables.lean index 4a88734268..dafd8dd087 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Classical/SeparableObservables.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Classical/SeparableObservables.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.ProbabilisticTheory.State.Barycenter /-! # Classical systems with separable observables +Choquet–Meyer: with separable observables, classical exactly when ensembles refine. + ## i. Overview Most systems in physics can be described by countably many observables: the observables are diff --git a/PhyslibAlpha/ProbabilisticTheory/Classical/SimplexStateSpace.lean b/PhyslibAlpha/ProbabilisticTheory/Classical/SimplexStateSpace.lean index fe396ebeb3..dce07b4abb 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Classical/SimplexStateSpace.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Classical/SimplexStateSpace.lean @@ -13,6 +13,8 @@ public import Mathlib.MeasureTheory.Integral.Bochner.Set /-! # Classical systems: unique decomposition into pure states +Pure decompositions, simplex and Bauer simplex state spaces, and measures as functionals. + ## i. Overview A system is classical when every state is a mixture of pure states in exactly one way. A die is the @@ -45,6 +47,10 @@ and this identification respects the order. - B. Measures on the pure states as positive functionals - C. Simplices identify functionals with measures +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/Classical/UniqueDecomposition.lean b/PhyslibAlpha/ProbabilisticTheory/Classical/UniqueDecomposition.lean index 8ac0dfa1b7..7e96d9a13c 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Classical/UniqueDecomposition.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Classical/UniqueDecomposition.lean @@ -13,6 +13,8 @@ public import Mathlib.MeasureTheory.Integral.RieszMarkovKakutani.Real /-! # Uniqueness of pure decompositions +Choquet–Meyer uniqueness: when ensembles refine, pure decompositions are unique. + ## i. Overview When ensembles refine, every state has at most one pure decomposition. This is the uniqueness half diff --git a/PhyslibAlpha/ProbabilisticTheory/Composite/CompletePositivity.lean b/PhyslibAlpha/ProbabilisticTheory/Composite/CompletePositivity.lean index c0042a5b9b..2b51fde7b6 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Composite/CompletePositivity.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Composite/CompletePositivity.lean @@ -10,6 +10,8 @@ public import PhyslibAlpha.ProbabilisticTheory.Classical.Nuclear /-! # Complete positivity of classical channels +Channels into or out of a classical (nuclear) system are completely positive. + ## i. Overview A channel acting on one part of a composite system should keep every nonnegative composite @@ -41,6 +43,10 @@ for a classical output any positive map works. - B. Nuclear inputs and outputs - C. Classical inputs and outputs +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/Composite/TensorCone.lean b/PhyslibAlpha/ProbabilisticTheory/Composite/TensorCone.lean index 3947acf5f8..bce298fce9 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Composite/TensorCone.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Composite/TensorCone.lean @@ -14,6 +14,8 @@ public import Mathlib.LinearAlgebra.TensorProduct.Associator /-! # Composite systems +Composite systems: the minimal and maximal tensor cones, composites, and nuclear systems. + ## i. Overview Two systems with observables `E` and `F` are combined into a composite system whose observables @@ -54,6 +56,10 @@ minimal cone: its composites are unique. - D. Composites - E. The closure of the minimal cone and nuclear systems +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/Dynamics/Generator.lean b/PhyslibAlpha/ProbabilisticTheory/Dynamics/Generator.lean index f8962460a9..bc6d85e2d0 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Dynamics/Generator.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Dynamics/Generator.lean @@ -12,6 +12,8 @@ public import Mathlib.Analysis.Calculus.Deriv.Basic # Generators of one-parameter groups +The generator of a one-parameter family on a normed space, and its uniqueness. + ## i. Overview The generator of a one-parameter family `α` on a normed space is `D a = lim_{t → 0} (α t a - a) / @@ -27,6 +29,10 @@ it exists. - A. The generator +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/Dynamics/GeneratorIsDerivation.lean b/PhyslibAlpha/ProbabilisticTheory/Dynamics/GeneratorIsDerivation.lean index 24c171ba4d..e817a3e710 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Dynamics/GeneratorIsDerivation.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Dynamics/GeneratorIsDerivation.lean @@ -16,6 +16,8 @@ public import Mathlib.Analysis.Normed.Operator.BoundedLinearMaps # Generators of automorphism groups are derivations +The generator of a one-parameter family of automorphisms is a derivation. + ## i. Overview If a one-parameter family `α` with `α 0 = id` preserves a bounded bilinear multiplication at every @@ -32,6 +34,10 @@ the product are used. - A. The generator is a derivation +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/Dynamics/OneParameterGroup.lean b/PhyslibAlpha/ProbabilisticTheory/Dynamics/OneParameterGroup.lean index 0c5ca88c0a..d6752a6a8f 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Dynamics/OneParameterGroup.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Dynamics/OneParameterGroup.lean @@ -12,6 +12,8 @@ public import Mathlib.Logic.Function.Basic # One-parameter groups +Defines one-parameter groups `α : ℝ → E → E` satisfying `α 0 = id` and the group law. + ## i. Overview A one-parameter group is a family `α : ℝ → E → E` with `α 0 = id` and `α (s + t) = α s ∘ α t`. It is @@ -25,6 +27,10 @@ stated for an arbitrary type `E`; preservation of structure and continuity are s - A. The group law +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/Effect/Basic.lean b/PhyslibAlpha/ProbabilisticTheory/Effect/Basic.lean index 61aeb39a27..6805ea3c2e 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Effect/Basic.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Effect/Basic.lean @@ -10,6 +10,8 @@ public import Physlib.ProbabilisticTheory.Effect.Basic /-! # Orthogonal effects +Effects: the order interval `[0, 1]` of an ordered space, modelling yes/no measurement outcomes. + ## i. Overview Two effects are orthogonal when their sum is still an effect, that is, still bounded by the order diff --git a/PhyslibAlpha/ProbabilisticTheory/Examples/GBit.lean b/PhyslibAlpha/ProbabilisticTheory/Examples/GBit.lean index a721f9b5f0..108aa4f20d 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Examples/GBit.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Examples/GBit.lean @@ -15,6 +15,8 @@ public import Mathlib.LinearAlgebra.Dual.Lemmas /-! # The generalized bit +The generalized bit: the sup-norm cone over `ℝ³`, with an octahedral, non-simplex state space. + ## i. Overview The generalized bit is the norm cone over `ℝ³` with the sup norm in place of the Euclidean norm diff --git a/PhyslibAlpha/ProbabilisticTheory/Examples/NormCone.lean b/PhyslibAlpha/ProbabilisticTheory/Examples/NormCone.lean index cc68625a60..e33ebb2580 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Examples/NormCone.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Examples/NormCone.lean @@ -15,6 +15,8 @@ public import Mathlib.LinearAlgebra.Basis.Defs /-! # Order-unit spaces built from a normed vector space +The order-unit space `ℝ × V` ordered by the norm cone of `V`, and its states as the dual ball. + ## i. Overview Any real normed vector space `V` carries a natural order-unit structure on `ℝ × V`: order unit diff --git a/PhyslibAlpha/ProbabilisticTheory/Examples/Qubit.lean b/PhyslibAlpha/ProbabilisticTheory/Examples/Qubit.lean index 4ac6433cda..71283b31ea 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Examples/Qubit.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Examples/Qubit.lean @@ -16,6 +16,8 @@ public import Mathlib.Analysis.InnerProductSpace.PiL2 /-! # The qubit, in Bloch-vector coordinates +The qubit as the Euclidean norm cone over `ℝ³`: its states form the Bloch ball, not a simplex. + ## i. Overview A qubit state is a density matrix `ρ = ½(r • I + x · σ)`, given by a number `r` and a Bloch diff --git a/PhyslibAlpha/ProbabilisticTheory/Examples/Square.lean b/PhyslibAlpha/ProbabilisticTheory/Examples/Square.lean index 146bb55110..5c72e72de2 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Examples/Square.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Examples/Square.lean @@ -10,6 +10,8 @@ public import PhyslibAlpha.ProbabilisticTheory.Composite.TensorCone /-! # The square +The square state space: its observables, its four facets and vertex values of composites. + ## i. Overview The square is the simplest state space that is not a simplex: it has four pure states, the @@ -36,6 +38,10 @@ four vertex values in `E`, which again satisfy the diagonal relation. - B. Facets - C. Vertex values of composite observables +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Dynamics/Automorphism.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Dynamics/Automorphism.lean index 535d7ace8a..c8db31c574 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Dynamics/Automorphism.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Dynamics/Automorphism.lean @@ -16,6 +16,8 @@ public import Mathlib.Algebra.Lie.OfAssociative # Automorphisms of the bounded operators +⋆-automorphisms of bounded operators are unitary conjugations; conjugation flows are unique. + ## i. Overview Every `⋆`-automorphism of the bounded operators on a Hilbert space is conjugation `A ↦ U A U⋆` by a @@ -40,6 +42,10 @@ the generator of `U` and the bracket is the ring commutator. - B. The automorphism group generated by unitary conjugation - C. Differential characterization +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Dynamics/Hamiltonian.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Dynamics/Hamiltonian.lean index 743fdfa8da..6ebf20da44 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Dynamics/Hamiltonian.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Dynamics/Hamiltonian.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.ProbabilisticTheory.HilbertSpace.Dynamics.Automorphis # Hamiltonian dynamics +The unitary evolution and Heisenberg flow of a bounded Hamiltonian, and their uniqueness. + ## i. Overview A bounded Hamiltonian `H` generates the unitary evolution `U(t) = exp(-i t H / ℏ)` and the flow @@ -36,6 +38,10 @@ unchanged, and this is the only freedom. - E. Hamiltonians modulo scalar shifts - F. Classification up to star-automorphism conjugation +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/State/Density.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/State/Density.lean index 1afde3329d..abb61709e8 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/State/Density.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/State/Density.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.ProbabilisticTheory.State.Basic # Density operators +A positive trace-one operator on a Hilbert space defines the state `x ↦ Tr (x ρ)`. + ## i. Overview A positive operator `ρ` with trace `1` defines the state `x ↦ Tr (x ρ)`. The trace here is the @@ -21,6 +23,14 @@ linear-algebra trace, so this applies to finite-dimensional Hilbert spaces. - `UnitalPositiveLinearMap.ofDensity` : the state of a density operator. +## iii. Table of contents + +- A. The state of a density operator + +## iv. References + +* None. + -/ @[expose] public section @@ -34,6 +44,12 @@ namespace UnitalPositiveLinearMap variable {H : Type*} [NormedAddCommGroup H] [InnerProductSpace ℂ H] [CompleteSpace H] variable {ρ : H →L[ℂ] H} (hpos : 0 ≤ ρ) (hnorm : (ρ : H →ₗ[ℂ] H).trace ℂ H = 1) +/-! + +## A. The state of a density operator + +-/ + /-- A trace-one positive continuous linear map defines a state. -/ noncomputable def ofDensity : 𝓢[ℂ, H →L[ℂ] H] := { ρ.traceMulOpₚ with map_one' := by simp_all } diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/State/DensityUncertainty.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/State/DensityUncertainty.lean index f4e4714d71..d8e2a09083 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/State/DensityUncertainty.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/State/DensityUncertainty.lean @@ -14,6 +14,8 @@ public import Mathlib.Analysis.InnerProductSpace.Trace # Uncertainty in density-operator states +Expectation, covariance, variance and Robertson–Schrödinger for density-operator states. + ## i. Overview The state of a density operator `ρ` is a state on the C⋆-algebra of bounded operators, so the @@ -35,6 +37,10 @@ traces against `ρ`, and the state of a rank-one projection `|ψ⟩⟨ψ|` is th - B. Robertson–Schrödinger for density operators - C. Vector states as rank-one density states +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/State/Vector.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/State/Vector.lean index f62e72698a..8dd1755a51 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/State/Vector.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/State/Vector.lean @@ -13,6 +13,8 @@ public import Mathlib.Analysis.InnerProductSpace.StarOrder # Vector states +A unit vector `ψ` defines the vector state `x ↦ ⟪ψ, x ψ⟫` on the bounded operators. + ## i. Overview A unit vector `ψ` defines the vector state `x ↦ ⟪ψ, x ψ⟫` on the bounded operators. @@ -22,6 +24,15 @@ A unit vector `ψ` defines the vector state `x ↦ ⟪ψ, x ψ⟫` on the bounde - `PositiveLinearMap.ofVec` : the positive functional of a vector. - `UnitalPositiveLinearMap.ofVec` : the vector state of a unit vector. +## iii. Table of contents + +- A. Vector states +- B. Example + +## iv. References + +* None. + -/ @[expose] public section @@ -31,6 +42,12 @@ namespace ProbabilisticTheory open ComplexOrder ContinuousLinearMap open scoped InnerProductSpace +/-! + +## A. Vector states + +-/ + section ofVec variable {H 𝕜 : Type*} [RCLike 𝕜] [NormedAddCommGroup H] [InnerProductSpace 𝕜 H] @@ -55,6 +72,12 @@ lemma UnitalPositiveLinearMap.ofVec_apply {ψ : H} (h : ‖ψ‖ = 1) (x : H → end ofVec +/-! + +## B. Example + +-/ + section Example open UnitalPositiveLinearMap diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/State/VectorUncertainty.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/State/VectorUncertainty.lean index 04e1c5f48e..0943e9f50f 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/State/VectorUncertainty.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/State/VectorUncertainty.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.ProbabilisticTheory.HilbertSpace.State.Vector # Uncertainty in vector states +Variance and uncertainty defect in a vector state via fluctuation vectors `a ψ - ⟨a⟩ ψ`. + ## i. Overview In a vector state `ψ` the centered observable `a - ⟨a⟩` sends `ψ` to the fluctuation vector `a ψ - @@ -27,6 +29,14 @@ Cauchy–Schwarz defect of their fluctuation vectors. - `UnitalPositiveLinearMap.centeredGramDefect_ofVec` : the uncertainty defect is `‖x‖² ‖y‖² - ‖⟪x, y⟫‖²`. +## iii. Table of contents + +- A. Fluctuation vectors in vector states + +## iv. References + +* None. + -/ @[expose] public section @@ -41,6 +51,12 @@ namespace UnitalPositiveLinearMap variable {H : Type*} [NormedAddCommGroup H] [InnerProductSpace ℂ H] [CompleteSpace H] {ψ : H} +/-! + +## A. Fluctuation vectors in vector states + +-/ + /-- The fluctuation vector `a ψ - ⟨a⟩ ψ` is the centered observable applied to `ψ`. -/ lemma centered_ofVec_apply (h : ‖ψ‖ = 1) (a : Observable (H →L[ℂ] H)) : (centered (ofVec h) a : H →L[ℂ] H) ψ = (a : H →L[ℂ] H) ψ - (ofVec h)⟨a⟩ • ψ := by diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Trace.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Trace.lean index a97f014322..47fcdf151f 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Trace.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Trace.lean @@ -13,6 +13,8 @@ public import PhyslibAlpha.ProbabilisticTheory.StarAlgebra.Traciality # The trace as a positive map +The trace on bounded operators as a positive tracial functional, and the functional `Tr (x ρ)`. + ## i. Overview The linear-algebra trace is a positive tracial functional on the bounded operators; on a @@ -26,12 +28,27 @@ positive. - `ContinuousLinearMap.traceMulOpₚ` : `x ↦ Tr (x ρ)`. - `ContinuousLinearMap.traceₚ_isTracial` : the trace is tracial. +## iii. Table of contents + +- A. Conjugation as a positive map +- B. The trace as a positive functional + +## iv. References + +* None. + -/ @[expose] public section namespace ProbabilisticTheory +/-! + +## A. Conjugation as a positive map + +-/ + section Conjugate variable {A : Type*} [NonUnitalSemiring A] [PartialOrder A] [StarRing A] [StarOrderedRing A] @@ -50,6 +67,12 @@ open ComplexOrder end ProbabilisticTheory +/-! + +## B. The trace as a positive functional + +-/ + section Complex open ProbabilisticTheory ComplexOrder diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/TraceClass/Banach.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/TraceClass/Banach.lean index b3bc2cc534..750eeb8388 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/TraceClass/Banach.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/TraceClass/Banach.lean @@ -15,6 +15,8 @@ public import Mathlib.Analysis.Normed.Group.Completeness # The trace-class Banach space +Trace-class operators form a Banach space under the trace norm. + ## i. Overview The trace-class operators form a Banach space `𝒮₁(H)` under the trace norm. The trace norm dominates @@ -35,6 +37,10 @@ which gives completeness. - A. Arithmetic closure of `IsTraceClass` - B. The trace-class submodule and Banach space +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/TraceClass/Basic.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/TraceClass/Basic.lean index 1a2a6785fa..68b94896ca 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/TraceClass/Basic.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/TraceClass/Basic.lean @@ -19,6 +19,8 @@ public import Mathlib.Topology.Algebra.Module.ContinuousLinearMap.Idempotent # Trace-class operators +Defines trace-class operators, their trace norm and trace, and shows basis independence. + ## i. Overview For a bounded operator `T` on a complex Hilbert space, `|T| = √(T⋆T)` is its absolute value. `T` is @@ -50,6 +52,10 @@ dimensional. - A.1. Basis independence - B. Finite multiplicity +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/TraceClass/GeneralIdeal.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/TraceClass/GeneralIdeal.lean index b117e817fa..3e9ae7abb9 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/TraceClass/GeneralIdeal.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/TraceClass/GeneralIdeal.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.ProbabilisticTheory.HilbertSpace.TraceClass.HilbertSc # Basis independence of the trace +The trace of every trace-class operator is an absolutely summable, basis-independent sum. + ## i. Overview For a trace-class operator `T`, `√|T|` is Hilbert–Schmidt, so the diagonal of `T = (U √|T|) √|T|` is @@ -25,6 +27,15 @@ operator is an absolutely convergent sum whose value does not depend on the basi summable. - `trace_eq_of_hilbertBasis` : the trace does not depend on the basis. +## iii. Table of contents + +- A. The Hilbert–Schmidt square root of `|T|` +- B. Basis independence of the trace + +## iv. References + +* None. + -/ @[expose] public section @@ -38,6 +49,12 @@ open HilbertSchmidt variable {H : Type*} [NormedAddCommGroup H] [InnerProductSpace ℂ H] [CompleteSpace H] +/-! + +## A. The Hilbert–Schmidt square root of `|T|` + +-/ + lemma sqrt_abs_diagonal_eq_norm_sq {T : H →L[ℂ] H} {w : Set H} (b : HilbertBasis w ℂ H) (i : w) : (⟪b i, CFC.abs T (b i)⟫_ℂ).re = ‖(CFC.sqrt (CFC.abs T)) (b i)‖ ^ 2 := by @@ -63,6 +80,12 @@ lemma isHilbertSchmidt_sqrt_abs_of_isTraceClass {T : H →L[ℂ] H} (hT : IsTrac have hdiag : Summable (fun i : w => (⟪b i, CFC.abs T (b i)⟫_ℂ).re) := isTraceClass_iff.mp hT w b exact hdiag.congr (fun i => sqrt_abs_diagonal_eq_norm_sq b i) +/-! + +## B. Basis independence of the trace + +-/ + lemma summable_trace_diagonal_of_isTraceClass {T : H →L[ℂ] H} (hT : IsTraceClass T) {w : Set H} (b : HilbertBasis w ℂ H) : Summable (fun i : w => ⟪b i, T (b i)⟫_ℂ) := by diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/TraceClass/GeneralProduct.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/TraceClass/GeneralProduct.lean index 1b63cc2e62..45f2a78f0f 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/TraceClass/GeneralProduct.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/TraceClass/GeneralProduct.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.ProbabilisticTheory.HilbertSpace.TraceClass.GeneralId # Products of Hilbert–Schmidt operators +Products of Hilbert–Schmidt operators are trace class; trace class is a ⋆-closed ideal. + ## i. Overview A product of two Hilbert–Schmidt operators is trace class. Every trace-class operator `T` factors as @@ -25,6 +27,15 @@ closed under sums and adjoints. - `isTraceClass_mul_mul` : trace-class operators form a two-sided ideal. - `isTraceClass_star` : trace-class operators are closed under the adjoint. +## iii. Table of contents + +- A. Products of Hilbert–Schmidt operators +- B. Closure properties of trace class + +## iv. References + +* None. + -/ @[expose] public section @@ -38,6 +49,12 @@ open HilbertSchmidt variable {H : Type*} [NormedAddCommGroup H] [InnerProductSpace ℂ H] [CompleteSpace H] +/-! + +## A. Products of Hilbert–Schmidt operators + +-/ + /-- The diagonal of `star W * (R * S)` (for any contraction `W`) unwinds to a Hilbert–Schmidt Cauchy–Schwarz pairing. This is the pointwise identity feeding both the master product theorem and the general additive/ideal closure results below. -/ @@ -98,6 +115,12 @@ lemma isHilbertSchmidt_polarFactor_mul_sqrt_abs_and_sqrt_abs {T : H →L[ℂ] H} rw [mul_assoc, CFC.sqrt_mul_sqrt_self (CFC.abs T) (CFC.abs_nonneg T)] exact Polar.polarFactor_mul_absOperator T +/-! + +## B. Closure properties of trace class + +-/ + /-- Trace-class operators are closed under addition. -/ lemma isTraceClass_add {T T' : H →L[ℂ] H} (hT : IsTraceClass T) (hT' : IsTraceClass T') : IsTraceClass (T + T') := by diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/TraceClass/HilbertSchmidt.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/TraceClass/HilbertSchmidt.lean index f82d31d281..e33045b281 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/TraceClass/HilbertSchmidt.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/TraceClass/HilbertSchmidt.lean @@ -12,6 +12,8 @@ public import Mathlib.Analysis.MeanInequalities # Hilbert–Schmidt operators +Hilbert–Schmidt operators: a ⋆-closed two-sided ideal whose products have summable diagonals. + ## i. Overview A bounded operator `S` is Hilbert–Schmidt when `∑ᵢ ‖S eᵢ‖²` converges for a Hilbert basis `{eᵢ}`. @@ -35,6 +37,10 @@ diagonal in every basis, with the diagonal sum symmetric in the two factors. - B. Cauchy–Schwarz estimates on Hilbert–Schmidt diagonals - C. Quantitative right-multiplication estimate +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/TraceClass/IdealNorm.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/TraceClass/IdealNorm.lean index 1f59ca7191..64b2131775 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/TraceClass/IdealNorm.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/TraceClass/IdealNorm.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.ProbabilisticTheory.HilbertSpace.TraceClass.GeneralPr # Trace-norm estimates +The duality bound for the trace norm, its subadditivity and the two-sided ideal estimate. + ## i. Overview For a trace-class operator `A`, a contraction `W` and a Hilbert basis `{eᵢ}`, `∑ᵢ ‖⟪W eᵢ, A eᵢ⟫‖ ≤ @@ -24,6 +26,16 @@ two-sided ideal estimate `‖B T C‖₁ ≤ ‖B‖ ‖T‖₁ ‖C‖`. - `traceNorm_add_le` : the trace norm is subadditive. - `traceNorm_mul_mul_le` : the two-sided ideal estimate. +## iii. Table of contents + +- A. The duality bound against contractions +- B. Attainment at the polar factor and subadditivity +- C. The two-sided ideal estimate + +## iv. References + +* None. + -/ @[expose] public section @@ -37,6 +49,12 @@ open HilbertSchmidt variable {H : Type*} [NormedAddCommGroup H] [InnerProductSpace ℂ H] [CompleteSpace H] +/-! + +## A. The duality bound against contractions + +-/ + /-- The trace norm of an operator only depends on the operator, not on the trace-class witness. -/ lemma traceNorm_transport {X Y : H →L[ℂ] H} (hEq : X = Y) (hX : IsTraceClass X) : traceNorm X hX = traceNorm Y (hEq ▸ hX) := by @@ -156,6 +174,12 @@ lemma tsum_norm_inner_contraction_le_traceNorm {A W : H →L[ℂ] H} (hA : IsTra _ = ∑' i : w, ‖S (b i)‖ ^ 2 := Real.mul_self_sqrt (tsum_nonneg (fun i => sq_nonneg _)) _ = traceNorm A hA := tsum_sqrt_abs_norm_sq_eq_traceNorm hA b +/-! + +## B. Attainment at the polar factor and subadditivity + +-/ + /-- The trace-norm diagonal in the basis `b` equals the norm-diagonal pairing against `T`'s own polar factor: `⟪eᵢ, |T| eᵢ⟫ = ⟪(polarFactor T) eᵢ, T eᵢ⟫` exactly, and the latter is already a nonnegative real. -/ @@ -219,6 +243,12 @@ lemma traceNorm_add_le {T T' : H →L[ℂ] H} (hT : IsTraceClass T) (hT' : IsTra add_le_add (tsum_norm_inner_contraction_le_traceNorm hT hWnorm b) (tsum_norm_inner_contraction_le_traceNorm hT' hWnorm b) +/-! + +## C. The two-sided ideal estimate + +-/ + /-- **Quantitative master lemma**: the trace norm of a product of two Hilbert–Schmidt operators is bounded by the product of their Hilbert–Schmidt square-root sums, in any common basis. -/ lemma traceNorm_mul_le_of_isHilbertSchmidt {R S : H →L[ℂ] H} (hR : IsHilbertSchmidt R) diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/TraceClass/Pairing.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/TraceClass/Pairing.lean index 5c2e8de213..023b235988 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/TraceClass/Pairing.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/TraceClass/Pairing.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.ProbabilisticTheory.HilbertSpace.TraceClass.Banach # The trace pairing +The trace pairing `T ↦ Tr (A T)` as a bounded functional on trace-class operators. + ## i. Overview A bounded operator `A` defines a bounded functional `T ↦ Tr (A T)` on the trace-class operators, of @@ -26,6 +28,16 @@ operators to the dual of `𝒮₁(H)`. - `TraceClass.tracePairingContinuousLinearMap` : the trace pairing as a bounded linear map into the dual. +## iii. Table of contents + +- A. Trace bounds and transport +- B. The trace pairing at a fixed operator +- C. The trace pairing as a bounded linear map + +## iv. References + +* None. + -/ @[expose] public section @@ -40,6 +52,12 @@ namespace TraceClass variable {H : Type*} [NormedAddCommGroup H] [InnerProductSpace ℂ H] [CompleteSpace H] +/-! + +## A. Trace bounds and transport + +-/ + /-- **The trace is dominated by the trace norm**, for an arbitrary (not necessarily positive or self-adjoint) trace-class operator. Proved from the duality bound `tsum_norm_inner_contraction_le_traceNorm` at the identity contraction. -/ @@ -67,6 +85,12 @@ lemma isTraceClass_mul_coe (A : H →L[ℂ] H) (T : TraceClass H) : IsTraceClass have h := isTraceClass_mul_mul (A := A) (B := (1 : H →L[ℂ] H)) (isTraceClass_coe T) simpa using h +/-! + +## B. The trace pairing at a fixed operator + +-/ + /-- **The trace pairing at a fixed bounded operator `A`**, `T ↦ Tr(A T)`, as a `ℂ`-linear map on the trace-class Banach space. -/ def tracePairingLinearMap (A : H →L[ℂ] H) : TraceClass H →ₗ[ℂ] ℂ where @@ -126,6 +150,12 @@ lemma tracePairing_apply (A : H →L[ℂ] H) (T : TraceClass H) : lemma norm_tracePairing_le (A : H →L[ℂ] H) : ‖tracePairing A‖ ≤ ‖A‖ := LinearMap.mkContinuous_norm_le _ (norm_nonneg A) _ +/-! + +## C. The trace pairing as a bounded linear map + +-/ + /-- **`A ↦ φ_A` is itself a `ℂ`-linear map** from `H →L[ℂ] H` into the strong dual of the trace-class Banach space. -/ def tracePairingLinear : (H →L[ℂ] H) →ₗ[ℂ] (TraceClass H →L[ℂ] ℂ) where diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/TraceClass/Polar.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/TraceClass/Polar.lean index 8b6af4ee22..71c6313ce9 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/TraceClass/Polar.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/TraceClass/Polar.lean @@ -13,6 +13,8 @@ public import Mathlib.Analysis.InnerProductSpace.Projection.Basic # Polar decomposition of bounded operators +Polar decomposition `T = U |T|` of a bounded operator with a partial-isometry factor `U`. + ## i. Overview For a bounded operator `T` with absolute value `|T|`, `‖T x‖ = ‖|T| x‖`. The resulting isometry from @@ -28,8 +30,13 @@ isometry `U` with `T = U |T|` and `U⋆ T = |T|`. ## iii. Table of contents +- A. The polar factor - A.1. The partial-isometry adjoint identity +## iv. References + +* None. + -/ @[expose] public section @@ -44,6 +51,12 @@ variable {H : Type*} [NormedAddCommGroup H] [InnerProductSpace ℂ H] [CompleteS namespace Polar +/-! + +## A. The polar factor + +-/ + /-- The absolute value used in the polar construction. -/ noncomputable def absOperator (T : H →L[ℂ] H) : H →L[ℂ] H := CFC.abs T diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/TraceClass/RankOne.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/TraceClass/RankOne.lean index 64dd26f14a..fad6732cfe 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/TraceClass/RankOne.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/TraceClass/RankOne.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.ProbabilisticTheory.HilbertSpace.TraceClass.GeneralId # Rank-one positive operators +The rank-one operator `|x⟩⟨x|` is trace class with trace and trace norm `‖x‖²`. + ## i. Overview The positive rank-one operator `|x⟩⟨x|` is trace class, with trace and trace norm `‖x‖²`. This is @@ -21,6 +23,14 @@ the normalization of vector states. - `isTraceClass_rankOne_self` : `|x⟩⟨x|` is trace class. - `trace_rankOne_self`, `traceNorm_rankOne_self` : its trace and trace norm are `‖x‖²`. +## iii. Table of contents + +- A. Rank-one positive operators + +## iv. References + +* None. + -/ @[expose] public section @@ -33,6 +43,12 @@ open scoped ComplexOrder InnerProductSpace variable {H : Type*} [NormedAddCommGroup H] [InnerProductSpace ℂ H] [CompleteSpace H] +/-! + +## A. Rank-one positive operators + +-/ + omit [CompleteSpace H] in lemma rankOne_self_diagonal {x : H} {w : Set H} (b : HilbertBasis w ℂ H) (i : w) : diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/TraceClass/TraceAlgebra.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/TraceClass/TraceAlgebra.lean index 2a8f50178c..202fa9d529 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/TraceClass/TraceAlgebra.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/TraceClass/TraceAlgebra.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.ProbabilisticTheory.HilbertSpace.TraceClass.Banach # Linearity and cyclicity of the trace +The trace is linear on trace-class operators and cyclic against bounded operators. + ## i. Overview The trace is linear on trace-class operators and cyclic against bounded operators: `Tr (A T) = Tr (T @@ -24,8 +26,13 @@ A)` for trace-class `T` and bounded `A`. ## iii. Table of contents +- A. Linearity and cyclicity of the trace - A.1. Additivity and cyclicity +## iv. References + +* None. + -/ @[expose] public section @@ -39,6 +46,12 @@ open HilbertSchmidt variable {H : Type*} [NormedAddCommGroup H] [InnerProductSpace ℂ H] [CompleteSpace H] +/-! + +## A. Linearity and cyclicity of the trace + +-/ + /-- Scalar homogeneity of the trace, with the canonical trace-class proof for the scaled operator. -/ lemma trace_smul {T : H →L[ℂ] H} (c : ℂ) (hT : IsTraceClass T) : diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/AnalyticVector/Basic.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/AnalyticVector/Basic.lean index 1458a727d4..6bb7a071c7 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/AnalyticVector/Basic.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/AnalyticVector/Basic.lean @@ -21,6 +21,8 @@ public import Mathlib.Order.Filter.AtTopBot.Ring # Analytic vectors +Analytic and entire vectors, their exponential series and an essential self-adjointness test. + ## i. Overview A vector `ψ` in the domain of all powers of an operator `T` is analytic when `∑ₙ ‖Tⁿ ψ‖ tⁿ / n!` diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/AnalyticVector/Local.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/AnalyticVector/Local.lean index 4393fd3b6e..0a5f5b2159 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/AnalyticVector/Local.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/AnalyticVector/Local.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.ProbabilisticTheory.HilbertSpace.Unbounded.AnalyticVe # Local and global analytic orbits +Local analytic orbits agree on overlaps and glue into a global orbit orthogonal to deficiencies. + ## i. Overview A local analytic orbit is the exponential series of an analytic vector on a finite time interval. diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/AnalyticVector/Nelson.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/AnalyticVector/Nelson.lean index e3a8b3ae3a..bae0ba1000 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/AnalyticVector/Nelson.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/AnalyticVector/Nelson.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.ProbabilisticTheory.HilbertSpace.Unbounded.AnalyticVe # Nelson's analytic-vector theorem +Nelson's theorem: a symmetric operator with dense analytic vectors is essentially self-adjoint. + ## i. Overview The exponential series of an analytic vector can be restarted from any point of its orbit with a diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Basic.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Basic.lean index eda74c6096..b78102abf9 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Basic.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Basic.lean @@ -13,6 +13,8 @@ public import Mathlib.MeasureTheory.VectorMeasure.Operations # Weak-operator spectral measures +Projection-valued measures that are countably additive in the weak operator topology. + ## i. Overview A spectral measure of an unbounded self-adjoint operator is a projection-valued measure that is @@ -36,6 +38,10 @@ measures push forward along measurable maps. - B. Pushforward along a measurable map - C. Coming from a norm-continuous `SpectralMeasure` +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/BoundedIntegral.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/BoundedIntegral.lean index a42a0d477d..e07496d6a1 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/BoundedIntegral.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/BoundedIntegral.lean @@ -18,6 +18,8 @@ public import Mathlib.MeasureTheory.Integral.SetToL1.SimpleFunc # Integrating bounded functions against a spectral measure +The integral of a bounded measurable function against a weak spectral measure. + ## i. Overview For a weak spectral measure `μ` and a bounded measurable `f`, the operator `∫ f dμ` is defined in @@ -38,6 +40,10 @@ norm. Every bounded measurable function is such a limit, which gives the integra - B. Uniform approximation and the limiting integral - C. The canonical integral +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/BoundedIntegralAlgebra.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/BoundedIntegralAlgebra.lean index d4e8647270..a9bdf31fd7 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/BoundedIntegralAlgebra.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/BoundedIntegralAlgebra.lean @@ -12,6 +12,8 @@ public import Mathlib.MeasureTheory.Integral.Bochner.Basic # The bounded functional calculus of a spectral measure +The bounded integral against a spectral measure is a unital ⋆-homomorphism. + ## i. Overview The integral of a bounded measurable function against a weak spectral measure does not depend on the @@ -32,6 +34,10 @@ bounded integrals. - B. The algebra of the integral - C. Extensionality by the integral +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/BoundedSelfAdjointData.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/BoundedSelfAdjointData.lean index fe6ef78921..358ae22059 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/BoundedSelfAdjointData.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/BoundedSelfAdjointData.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.ProbabilisticTheory.HilbertSpace.Unbounded.CayleySpec # Spectral measures of bounded self-adjoint operators +The real spectral measure of a bounded self-adjoint operator. + ## i. Overview The spectral measure of a bounded normal operator lives on its complex spectrum. For a self-adjoint @@ -25,6 +27,15 @@ measure on `ℝ` that reconstructs the operator. - `boundedSelfAdjointSpectralMeasure_commute_of_commute` : operators commuting with `T` commute with its spectral projections. +## iii. Table of contents + +- A. The real spectral measure +- B. Commutation and bounded support + +## iv. References + +* None. + -/ @[expose] public section @@ -40,6 +51,12 @@ namespace QuantumMechanics variable {H : Type*} [NormedAddCommGroup H] [InnerProductSpace ℂ H] [CompleteSpace H] +/-! + +## A. The real spectral measure + +-/ + /-- The real spectral measure of a bounded self-adjoint operator: the spectral measure on its complex spectrum, pushed forward along `Complex.re`. -/ noncomputable def boundedSelfAdjointSpectralMeasure @@ -85,6 +102,12 @@ lemma boundedSelfAdjointSpectralMeasure_reconstruction rw [cfcSpectralMeasure_scalarMeasure] exact polarizedCfcScalarMeasure_integral_spectrum_coe A hA.isStarNormal x y +/-! + +## B. Commutation and bounded support + +-/ + /-- The spectral projections of a bounded self-adjoint operator commute with every unitary that commutes with it. -/ lemma boundedSelfAdjointSpectralMeasure_commute_of_commute diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Cayley/Basic.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Cayley/Basic.lean index 714cf0574f..e3f996c5a1 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Cayley/Basic.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Cayley/Basic.lean @@ -12,6 +12,8 @@ public import Mathlib.MeasureTheory.Constructions.BorelSpace.Complex # The Cayley transform +The Cayley transform of a self-adjoint operator is a unitary. + ## i. Overview The Cayley transform `c(x) = (x - i) / (x + i)` maps the real line onto the unit circle without `1`. @@ -30,6 +32,10 @@ unitary. This reduces the spectral theory of unbounded self-adjoint operators to - B. The Cayley transform of a partial operator - C. The bounded, unitary Cayley transform +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Cayley/Certificate.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Cayley/Certificate.lean index 2a73c66793..9b36fa5c80 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Cayley/Certificate.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Cayley/Certificate.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.ProbabilisticTheory.HilbertSpace.Unbounded.Cayley.Mea # Spectral data of bounded normal and unitary operators +Spectral measures reconstructing bounded normal and unitary operators. + ## i. Overview `BoundedNormalSpectralData` is a spectral measure on `ℂ` whose integral of the identity is a given @@ -33,6 +35,10 @@ transform gives a spectral measure on `ℝ`, which is determined by its Cayley p - A. Bounded normal spectral data - B. Bounded unitary spectral data +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Cayley/Inverse.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Cayley/Inverse.lean index d6a4cc2489..89bd31cc77 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Cayley/Inverse.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Cayley/Inverse.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.ProbabilisticTheory.HilbertSpace.Unbounded.Cayley.Bas # The inverse Cayley transform +The inverse Cayley transform of a unitary without eigenvalue 1 is self-adjoint. + ## i. Overview For a unitary `u`, the inverse Cayley transform is the operator `i (1 + u)(1 - u)⁻¹`, defined on the @@ -32,6 +34,10 @@ Cayley transform is self-adjoint. It inverts the Cayley transform of a self-adjo - C. Self-adjointness of the inverse Cayley transform - D. Round trip with the forward Cayley transform +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Cayley/Measure.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Cayley/Measure.lean index 0d747cf0c0..dc7e1741d5 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Cayley/Measure.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Cayley/Measure.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.ProbabilisticTheory.HilbertSpace.Unbounded.Cayley.Bas # Spectral measures and the Cayley transform +Spectral measures on ℝ correspond to Cayley-supported spectral measures on ℂ. + ## i. Overview Spectral measures on `ℝ` push forward along the Cayley transform to spectral measures on `ℂ` @@ -31,6 +33,10 @@ this, which gives an equivalence between spectral measures on `ℝ` and such mea - A. Pushforward and pullback along the Cayley transform - B. The Cayley equivalence of spectral-measure data +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/CayleySpectralData/Basic.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/CayleySpectralData/Basic.lean index 44fe2623bd..2ae273e136 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/CayleySpectralData/Basic.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/CayleySpectralData/Basic.lean @@ -15,6 +15,8 @@ public import Mathlib.MeasureTheory.VectorMeasure.WithDensityVec # The spectral measure of the Cayley transform +The spectral measure of the Cayley transform, pulled back to a spectral measure on ℝ. + ## i. Overview The Cayley transform `U` of a self-adjoint operator `T` is a unitary. The continuous functional @@ -34,6 +36,10 @@ measure on `ℝ`, the candidate spectral measure of `T`. - A. Spectral data from the functional calculus - A.1. A bounded extension of the Cayley difference multiplier +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/CayleySpectralData/SpecTheorem.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/CayleySpectralData/SpecTheorem.lean index f822b2ed8f..23daf399a6 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/CayleySpectralData/SpecTheorem.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/CayleySpectralData/SpecTheorem.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.ProbabilisticTheory.HilbertSpace.Unbounded.SelfAdjoin # The spectral theorem for unbounded self-adjoint operators +The spectral theorem for unbounded self-adjoint operators via the Cayley transform. + ## i. Overview The spectral measure on `ℝ` obtained from the Cayley transform of a self-adjoint operator `T` @@ -32,6 +34,10 @@ to the closure of an essentially self-adjoint operator. - B. Complex vector-measure density transport - C. The inverse-moment transport lemma +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Conjugation.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Conjugation.lean index 513e83b40b..8aa11bb4c5 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Conjugation.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Conjugation.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.ProbabilisticTheory.HilbertSpace.Unbounded.ScalarMeas # Transporting spectral measures along unitaries +Conjugating operators and spectral measures by a unitary. + ## i. Overview A unitary `u : H ≃ₗᵢ[ℂ] H'` conjugates operators on `H` to operators on `H'`, and conjugation is a @@ -31,6 +33,10 @@ along `u`. - B. Conjugation of a spectral measure - C. Interaction with the scalar and diagonal measures +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/EssentialSpectrum/Closed.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/EssentialSpectrum/Closed.lean index 5e6af0a288..efe47f880f 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/EssentialSpectrum/Closed.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/EssentialSpectrum/Closed.lean @@ -14,6 +14,8 @@ public import Mathlib.Analysis.SpecificLimits.Basic # The essential spectrum is closed +The essential spectrum of a self-adjoint operator is closed. + ## i. Overview The essential spectrum of a self-adjoint operator is closed. For `λₖ → λ` in the essential spectrum, @@ -24,7 +26,11 @@ orthogonal to more and more vectors of a countable dense subset, is a singular s - `isClosed_essSpectrum` : the essential spectrum is closed. -## iii. References +## iii. Table of contents + +- A. Closedness of the essential spectrum + +## iv. References - Adapted from `adambornemann-glitch/Spectra`, `SpectralTheory/Essential/Closed.lean` (Apache 2.0). @@ -43,6 +49,12 @@ namespace QuantumMechanics.Essential variable {H : Type*} [NormedAddCommGroup H] [InnerProductSpace ℂ H] [CompleteSpace H] +/-! + +## A. Closedness of the essential spectrum + +-/ + /-- The essential spectrum is closed. -/ lemma isClosed_essSpectrum {A : H →ₗ.[ℂ] H} (hA : IsSelfAdjoint A) : IsClosed (essSpectrum hA) := by diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/EssentialSpectrum/Defs.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/EssentialSpectrum/Defs.lean index 22b67728c6..6df8e9c46b 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/EssentialSpectrum/Defs.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/EssentialSpectrum/Defs.lean @@ -12,6 +12,8 @@ public import Mathlib.Analysis.InnerProductSpace.Basic # The essential spectrum +The essential spectrum of a self-adjoint operator, defined by singular sequences. + ## i. Overview A real number `λ` is in the essential spectrum of a self-adjoint operator `A` when there is a @@ -23,7 +25,11 @@ every `g`, and `‖A ψₙ - λ ψₙ‖ → 0`. Orthonormal approximate eigenve - `essSpectrum` : the essential spectrum of a self-adjoint operator. - `mem_essSpectrum_of_seq` : membership from a singular sequence. -## iii. References +## iii. Table of contents + +- A. Singular sequences and the essential spectrum + +## iv. References - Adapted from `adambornemann-glitch/Spectra`, `SpectralTheory/Essential/Defs.lean` (Apache 2.0). @@ -42,6 +48,12 @@ namespace QuantumMechanics.Essential variable {H : Type*} [NormedAddCommGroup H] [InnerProductSpace ℂ H] [CompleteSpace H] +/-! + +## A. Singular sequences and the essential spectrum + +-/ + /-- The **essential spectrum** of a self-adjoint operator `A`, defined by singular (Weyl) sequences: `λ ∈ essSpectrum hA` iff there is `ψ : ℕ → A.domain` with `‖ψ n‖ → 1`, `ψ` weakly null, and `‖A ψ n − λ ψ n‖ → 0`. (`hA` is carried for discoverability; the set depends only on `A`.) -/ diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/EssentialSpectrum/Smul.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/EssentialSpectrum/Smul.lean index e6c4f7b198..f9c9d537bd 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/EssentialSpectrum/Smul.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/EssentialSpectrum/Smul.lean @@ -12,6 +12,8 @@ public import Physlib.QuantumMechanics.Operators.SpectralTheory.Symmetric # Scaling self-adjoint operators +Real scaling preserves self-adjointness and scales the essential spectrum. + ## i. Overview For a self-adjoint operator `A` and a real `c ≠ 0`, `c • A` is self-adjoint and its essential diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/EssentialSpectrum/WeakCompact.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/EssentialSpectrum/WeakCompact.lean index 154b03eb4d..c651da937e 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/EssentialSpectrum/WeakCompact.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/EssentialSpectrum/WeakCompact.lean @@ -14,6 +14,8 @@ public import Mathlib.Topology.Sequences # Compact operators and weakly null sequences +Orthonormal sequences are weakly null, and compact operators make them norm-null. + ## i. Overview An orthonormal sequence is weakly null, by Bessel's inequality. A compact operator maps a bounded @@ -25,7 +27,12 @@ weakly null sequence to a sequence converging to `0` in norm. - `IsCompactOperator.tendsto_norm_apply_of_weaklyNull` : compact operators map bounded weakly null sequences to null sequences. -## iii. References +## iii. Table of contents + +- A. Orthonormal sequences are weakly null +- B. Compact operators on weakly null sequences + +## iv. References - Adapted from `adambornemann-glitch/Spectra`, `SpectralTheory/Essential/WeakCompact.lean` (Apache 2.0). @@ -43,6 +50,12 @@ open scoped InnerProductSpace variable {H : Type*} [NormedAddCommGroup H] [InnerProductSpace ℂ H] [CompleteSpace H] +/-! + +## A. Orthonormal sequences are weakly null + +-/ + omit [CompleteSpace H] in /-- An orthonormal sequence is **weakly null**: for every fixed `g`, the inner products `⟪g, ψ n⟫` tend to `0`. (Bessel's inequality makes `∑ ‖⟪ψ n, g⟫‖²` summable, so its terms — hence @@ -61,6 +74,12 @@ lemma _root_.Orthonormal.tendsto_inner_atTop_zero {ψ : ℕ → H} (hψ : Orthon funext fun n => norm_inner_symm g (ψ n) rw [heq]; exact hnorm +/-! + +## B. Compact operators on weakly null sequences + +-/ + /-- A **compact** operator maps a bounded weakly-null sequence to a norm-null sequence. `hbdd` bounds the sequence (`‖u n‖ ≤ C`); `hweak` is weak nullness stated concretely as diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/EssentialSpectrum/Weyl.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/EssentialSpectrum/Weyl.lean index bff1deb288..5275d382f0 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/EssentialSpectrum/Weyl.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/EssentialSpectrum/Weyl.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.ProbabilisticTheory.HilbertSpace.Unbounded.EssentialS # Weyl's theorem on the essential spectrum +Weyl's theorem: compact resolvent differences preserve the essential spectrum. + ## i. Overview If the resolvents at `i` of two self-adjoint operators differ by a compact operator, the operators diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Existence/CandidateGenerator.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Existence/CandidateGenerator.lean index d9322e418b..25279faf29 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Existence/CandidateGenerator.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Existence/CandidateGenerator.lean @@ -17,6 +17,8 @@ public import Physlib.QuantumMechanics.Operators.SpectralTheory.Symmetric # The candidate generator of a unitary group +The candidate generator of a strongly continuous unitary group, and its symmetry. + ## i. Overview For a strongly continuous one-parameter unitary group `U`, the candidate generator is defined on the @@ -29,6 +31,16 @@ derivative. It is a symmetric operator. - `stoneCandidateGenerator` : the candidate generator. - `stoneCandidateGenerator_isSymmetric` : the candidate generator is symmetric. +## iii. Table of contents + +- A. The candidate domain +- B. The candidate generator +- C. Symmetry of the candidate generator + +## iv. References + +* None. + -/ @[expose] public section @@ -47,6 +59,12 @@ variable {H : Type u} [NormedAddCommGroup H] [InnerProductSpace ℂ H] [Complete variable {U : ℝ → H →L[ℂ] H} (hU0 : U 0 = 1) (hUmul : ∀ s t, U (s + t) = U s * U t) (hUunit : ∀ t, U t ∈ unitary (H →L[ℂ] H)) (hUcont : ∀ ξ : H, Continuous (fun t : ℝ => U t ξ)) +/-! + +## A. The candidate domain + +-/ + /-- A vector is in the domain of the candidate generator when its orbit is differentiable at `0`. -/ def stoneCandidateDomainPred (ψ : H) : Prop := ∃ φ : H, HasDerivAt (fun t : ℝ => U t ψ) φ 0 @@ -84,6 +102,12 @@ def stoneCandidateDomain : Submodule ℂ H where add_mem' h₁ h₂ := stoneCandidateDomainPred_add hUmul h₁ h₂ smul_mem' c _ h := stoneCandidateDomainPred_smul c h +/-! + +## B. The candidate generator + +-/ + /-- The derivative witness for a vector in the candidate domain, chosen once and for all via choice; `-Complex.I` times this is the candidate generator's action. -/ def stoneCandidateDeriv (ψ : stoneCandidateDomain (U := U) hUmul) : H := @@ -132,6 +156,12 @@ omit [CompleteSpace H] in lemma stoneCandidateGenerator_apply (ψ : (stoneCandidateGenerator (U := U) hUmul).domain) : stoneCandidateGenerator (U := U) hUmul ψ = (-Complex.I) • stoneCandidateDeriv hUmul ψ := rfl +/-! + +## C. Symmetry of the candidate generator + +-/ + include hU0 hUunit in /-- **The candidate generator is symmetric.** The inner product `⟪U t ψ₁, U t ψ₂⟫` is constant in `t`; differentiating at `0` gives the symmetry. -/ diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Existence/GardingVectorWitness.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Existence/GardingVectorWitness.lean index 3057c45d16..67924141eb 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Existence/GardingVectorWitness.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Existence/GardingVectorWitness.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.ProbabilisticTheory.HilbertSpace.Unbounded.AnalyticVe # Gårding vectors are analytic +Gårding vectors are analytic vectors of the candidate generator. + ## i. Overview Applying the candidate generator `n` times to a Gårding vector gives, up to a power of `i`, the @@ -22,6 +24,15 @@ Gårding vector of the `n`-th derivative of the heat kernel. Its norm is at most - `analyticGardingVector_isAnalyticVector` : Gårding vectors are analytic vectors. +## iii. Table of contents + +- A. The generator on iterated-kernel Gårding vectors +- B. Analyticity of Gårding vectors + +## iv. References + +* None. + -/ @[expose] public section @@ -40,6 +51,12 @@ universe u variable {H : Type u} [NormedAddCommGroup H] [InnerProductSpace ℂ H] [CompleteSpace H] variable {U : ℝ → H →L[ℂ] H} (hUmul : ∀ s t, U (s + t) = U s * U t) +/-! + +## A. The generator on iterated-kernel Gårding vectors + +-/ + include hUmul in /-- Domain membership of the `n`-th iterated-kernel Gårding vector, derived (not assumed) from the differentiability of its orbit — the same pattern as @@ -84,6 +101,12 @@ lemma stoneCandidateGenerator_gardingVectorAt_iteratedKernel rw [neg_smul] rw [hneg, smul_neg, neg_smul, neg_neg] +/-! + +## B. Analyticity of Gårding vectors + +-/ + include hUmul in /-- **Gårding vectors are analytic vectors** of the candidate generator. -/ lemma analyticGardingVector_isAnalyticVector (hUunit : ∀ t, U t ∈ unitary (H →L[ℂ] H)) diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Existence/GardingVectors.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Existence/GardingVectors.lean index 8f4017de70..0759e68aef 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Existence/GardingVectors.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Existence/GardingVectors.lean @@ -15,6 +15,8 @@ public import Mathlib.Analysis.Calculus.ParametricIntegral # Gårding vectors +Gårding vectors: heat-kernel smoothings along a unitary group, dense in the domain. + ## i. Overview Smoothing a vector `ψ` along the orbit of a unitary group against the heat kernel `gₑ(t) = (π @@ -34,6 +36,10 @@ by smoothing against the derivative of the kernel. - A. The generator on Gårding vectors +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Existence/GaussianKernelGrowth.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Existence/GaussianKernelGrowth.lean index 1b6cc7ba8c..43e735609c 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Existence/GaussianKernelGrowth.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Existence/GaussianKernelGrowth.lean @@ -17,6 +17,8 @@ public import Mathlib.MeasureTheory.Function.L2Space # Growth of the derivatives of the heat kernel +Hermite polynomial bounds on the L¹ norms of the heat kernel's derivatives. + ## i. Overview The `n`-th derivative of the heat kernel is a Hermite polynomial times a Gaussian. The probabilists' @@ -32,6 +34,17 @@ derivative of the heat kernel by `C^(n + 1) √(n!)`. polynomials. - `gaussianKernel_iteratedDeriv_L1_bound` : the `L¹` bound on the derivatives of the heat kernel. +## iii. Table of contents + +- A. The Hermite derivative identity +- B. Integrability against Gaussian weights +- C. The norm of the Hermite polynomials +- D. Derivatives of the heat kernel + +## iv. References + +* None. + -/ @[expose] public section @@ -44,6 +57,12 @@ noncomputable section open MeasureTheory Polynomial +/-! + +## A. The Hermite derivative identity + +-/ + /-- The polynomial identity `Hₙ₊₁' = (n+1) · Hₙ`, absent from Mathlib, proved directly from the defining recursion `hermite_succ : Hₙ₊₁ = X·Hₙ - Hₙ'` by induction. -/ lemma hermite_derivative_succ : @@ -79,6 +98,12 @@ lemma hermite_aeval_succ (n : ℕ) (x : ℝ) : aeval x (hermite (n + 1)) = x * aeval x (hermite n) - aeval x (derivative (hermite n)) := by simp [hermite_succ] +/-! + +## B. Integrability against Gaussian weights + +-/ + /-- A monomial times a Gaussian weight is integrable (the `n`-th-power case of `integrable_aeval_mul_gaussian`, via the real-exponent Gaussian-tail estimate specialized to a natural-number exponent through `Real.rpow_natCast`). -/ @@ -117,6 +142,12 @@ lemma gaussian_hasDerivAt (x : ℝ) : have h := hdiff.hasDerivAt rwa [heq] at h +/-! + +## C. The norm of the Hermite polynomials + +-/ + /-- `Iₙ₊₁ = (n + 1) Iₙ` for `Iₙ = ∫ Hₙ(x)² exp(-x²/2) dx`, by integration by parts. -/ lemma hermite_gaussian_sq_integral_succ (n : ℕ) : (∫ x : ℝ, (aeval x (hermite (n + 1))) ^ 2 * Real.exp (-(x ^ 2 / 2))) = @@ -278,6 +309,12 @@ lemma hermite_gaussian_L1_bound (n : ℕ) : Real.sqrt_sq hApos] exact hCS.trans_eq hRHS_eq +/-! + +## D. Derivatives of the heat kernel + +-/ + /-- The `n`-th derivative of the heat kernel is a rescaled Hermite polynomial times the kernel. -/ lemma gaussianKernel_iteratedDeriv_eq {ε : ℝ} (hε : 0 < ε) (n : ℕ) (t : ℝ) : iteratedDeriv n (gaussianKernel ε) t = diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Existence/GeneratorInvariance.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Existence/GeneratorInvariance.lean index f8a29b8bc8..e438d47ac0 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Existence/GeneratorInvariance.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Existence/GeneratorInvariance.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.ProbabilisticTheory.HilbertSpace.Unbounded.Existence. # The unitary group preserves the domain of its generator +A unitary group preserves the domain of its candidate generator and commutes with it. + ## i. Overview A strongly continuous unitary group preserves the domain of its candidate generator `T` and commutes @@ -23,6 +25,15 @@ derivative `i T (U s ψ)`. - `stoneCandidateGenerator_translate` : the generator commutes with the group. - `stoneCandidateGenerator_hasDerivAt` : orbits of domain vectors are differentiable at every time. +## iii. Table of contents + +- A. Invariance of the candidate domain +- B. Commutation and differentiability of orbits + +## iv. References + +* None. + -/ @[expose] public section @@ -40,6 +51,12 @@ universe u variable {H : Type u} [NormedAddCommGroup H] [InnerProductSpace ℂ H] [CompleteSpace H] variable {U : ℝ → H →L[ℂ] H} (hUmul : ∀ s t, U (s + t) = U s * U t) +/-! + +## A. Invariance of the candidate domain + +-/ + omit [CompleteSpace H] in include hUmul in /-- `U t (U s ψ)` and `U s (U t ψ)` agree as functions of `s`, since `s + t = t + s`. -/ @@ -83,6 +100,12 @@ lemma stoneCandidateDomain_translate_mem (ψ : stoneCandidateDomain (U := U) hUm (U t (ψ : H)) ∈ stoneCandidateDomain (U := U) hUmul := stoneCandidateDomain_translate hUmul ψ.property t +/-! + +## B. Commutation and differentiability of orbits + +-/ + omit [CompleteSpace H] in include hUmul in /-- The candidate generator commutes with the group it was built from: for `ψ` in `T.domain`, diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Existence/GenericGardingKernel.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Existence/GenericGardingKernel.lean index 1bd3f948b2..a373a763d4 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Existence/GenericGardingKernel.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Existence/GenericGardingKernel.lean @@ -14,6 +14,8 @@ public import Mathlib.MeasureTheory.Group.Integral # Gårding vectors of smooth kernels +Gårding vectors of a general kernel and the differentiability of their orbits. + ## i. Overview For a kernel `k` on `ℝ`, the Gårding vector of `ψ` is `∫ k(t) U t ψ dt`. Translating it by `U s` @@ -26,6 +28,15 @@ the Gårding vector is differentiable at `0`, with derivative the Gårding vecto - `gardingVectorAt_translate` : translating a Gårding vector translates the kernel. - `gardingVectorAt_hasDerivAt` : the orbit of a Gårding vector is differentiable at `0`. +## iii. Table of contents + +- A. Gårding vectors and translation +- B. Differentiability of the orbit + +## iv. References + +* None. + -/ @[expose] public section @@ -44,6 +55,12 @@ universe u variable {H : Type u} [NormedAddCommGroup H] [InnerProductSpace ℂ H] [CompleteSpace H] variable {U : ℝ → H →L[ℂ] H} (hUmul : ∀ s t, U (s + t) = U s * U t) +/-! + +## A. Gårding vectors and translation + +-/ + variable (U) in /-- The Gårding vector of `ψ` against a generic (real-valued) kernel `k`, generalizing `analyticGardingVector U ε ψ = gardingVectorAt U (gaussianKernel ε) ψ`. -/ @@ -65,6 +82,12 @@ lemma gardingVectorAt_translate (k : ℝ → ℝ) (ψ : H) rw [← integral_add_right_eq_self (fun u : ℝ => (k (u - s) : ℂ) • U u ψ) s] simp only [add_sub_cancel_right] +/-! + +## B. Differentiability of the orbit + +-/ + include hUmul in /-- If `k` is differentiable with a locally dominated continuous derivative `k'`, the orbit of the Gårding vector of `k` is differentiable at `0`, with derivative the Gårding vector of `-k'`. -/ diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Existence/IteratedKernelGrowth.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Existence/IteratedKernelGrowth.lean index 0fe9c43f5f..2f04c917db 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Existence/IteratedKernelGrowth.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Existence/IteratedKernelGrowth.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.ProbabilisticTheory.HilbertSpace.Unbounded.Existence. # Pointwise bounds on the derivatives of the heat kernel +Pointwise domination of the shifted derivatives of the heat kernel. + ## i. Overview Every derivative of the heat kernel, shifted by at most `1`, is dominated by an integrable function @@ -25,6 +27,18 @@ differentiable orbits. - `gardingVectorAt_iteratedKernel_hasDerivAt` : the orbit of the Gårding vector of the `n`-th derivative of the heat kernel is differentiable at `0`. +## iii. Table of contents + +- A. Polynomial growth of the Hermite polynomials +- B. Local domination of the kernel derivatives +- C. Integrability of the dominating functions +- D. Smoothness of the heat kernel +- E. Differentiable orbits of iterated-kernel Gårding vectors + +## iv. References + +* None. + -/ @[expose] public section @@ -37,6 +51,12 @@ noncomputable section open MeasureTheory Polynomial +/-! + +## A. Polynomial growth of the Hermite polynomials + +-/ + /-- `|Hₙ(y)| ≤ Cₙ (1 + |y|)ⁿ`, with `Cₙ` the sum of the absolute values of the coefficients of `Hₙ`. -/ lemma hermite_aeval_le_poly_growth (n : ℕ) : @@ -65,6 +85,12 @@ lemma hermite_aeval_le_poly_growth (n : ℕ) : exact mul_le_mul_of_nonneg_left (h2.trans h3) (abs_nonneg _) _ = C * (1 + |y|) ^ n := by rw [← Finset.sum_mul] +/-! + +## B. Local domination of the kernel derivatives + +-/ + /-- For `x² ≤ 1`, the `(n + 1)`-th derivative of the heat kernel at `u - x` is dominated by `C (1 + |u|)ⁿ⁺¹ exp(-c u²)`, uniformly in `x`. -/ lemma gaussianKernel_iteratedDeriv_shift_bound (n : ℕ) {ε : ℝ} (hε : 0 < ε) : @@ -127,6 +153,12 @@ lemma gaussianKernel_iteratedDeriv_shift_bound (n : ℕ) {ε : ℝ} (hε : 0 < _ = D * ((1 + |u|) ^ (n + 1) * Real.exp (-(u ^ 2) / (2 * ε))) := by rw [hD_def, mul_pow]; ring +/-! + +## C. Integrability of the dominating functions + +-/ + /-- `|u|^n` times a Gaussian weight is integrable — the `abs`-of-argument variant of `integrable_pow_mul_exp_neg_mul_sq`, obtained via `Integrable.abs` since `|u^n * exp(-cu²)| = |u|^n * exp(-cu²)`. -/ @@ -162,6 +194,12 @@ lemma integrable_one_add_abs_pow_mul_exp_neg_mul_sq (n : ℕ) {c : ℝ} (hc : 0 intro m _ exact (integrable_abs_pow_mul_exp_neg_mul_sq m hc).const_mul _ +/-! + +## D. Smoothness of the heat kernel + +-/ + /-- `gaussianKernel ε` is smooth to every order (used to get `Continuous`/`Differentiable` facts about its iterated derivatives via the generic `ContDiff.continuous_iteratedDeriv`/ `ContDiff.differentiable_iteratedDeriv`). -/ @@ -189,6 +227,12 @@ lemma gaussianKernel_iteratedDeriv_hasDerivAt (n : ℕ) {ε : ℝ} (hε : 0 < ε rw [← heq] exact hdiff.hasDerivAt +/-! + +## E. Differentiable orbits of iterated-kernel Gårding vectors + +-/ + /-- The `n`-th derivative of the heat kernel is integrable against `t ↦ U t ψ`. -/ lemma gaussianKernel_iteratedDeriv_smul_integrable {H : Type*} [NormedAddCommGroup H] [InnerProductSpace ℂ H] [CompleteSpace H] {U : ℝ → H →L[ℂ] H} diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Existence/StoneGenerator.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Existence/StoneGenerator.lean index e5e562f430..31c24a3bba 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Existence/StoneGenerator.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Existence/StoneGenerator.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.ProbabilisticTheory.HilbertSpace.Unbounded.AnalyticVe # Stone's theorem: existence of the generator +Stone's theorem, existence: the candidate generator is essentially self-adjoint. + ## i. Overview The Gårding vectors of a strongly continuous unitary group are analytic vectors of its candidate @@ -24,6 +26,15 @@ generator and are dense. By Nelson's theorem the candidate generator is essentia - `stoneCandidateGenerator_isEssentiallySelfAdjoint` : **Stone's theorem, existence**: the candidate generator is essentially self-adjoint. +## iii. Table of contents + +- A. Density of analytic vectors +- B. Essential self-adjointness + +## iv. References + +* None. + -/ @[expose] public section @@ -42,6 +53,12 @@ universe u variable {H : Type u} [NormedAddCommGroup H] [InnerProductSpace ℂ H] [CompleteSpace H] variable {U : ℝ → H →L[ℂ] H} (hUmul : ∀ s t, U (s + t) = U s * U t) +/-! + +## A. Density of analytic vectors + +-/ + include hUmul in /-- **The analytic vectors of the candidate generator are dense**: every vector is a limit of Gårding vectors. -/ @@ -59,6 +76,12 @@ lemma stoneCandidateGenerator_denseAnalyticVectors (hU0 : U 0 = 1) filter_upwards [hev] with ε hε exact analyticGardingVector_isAnalyticVector hUmul hUunit hUcont hε ψ +/-! + +## B. Essential self-adjointness + +-/ + include hUmul in /-- **Stone's theorem, existence.** The candidate generator of a strongly continuous unitary group is essentially self-adjoint. -/ diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Existence/StoneReconstruction.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Existence/StoneReconstruction.lean index 8b7ac1ee3b..105a37fc63 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Existence/StoneReconstruction.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Existence/StoneReconstruction.lean @@ -14,6 +14,8 @@ public import PhyslibAlpha.ProbabilisticTheory.HilbertSpace.Unbounded.Flow.Stone # Stone's theorem: reconstruction of the group +Stone's theorem, reconstruction: a unitary group is exp(i t T) for its generator. + ## i. Overview Let `T` be the candidate generator of a strongly continuous unitary group `U`, and `V t = exp(i t @@ -29,6 +31,16 @@ so `U = V`. - `stoneCandidateGenerator_reconstruction` : **Stone's theorem, reconstruction**: `U t = exp(i t T)`. +## iii. Table of contents + +- A. The reconstructed unitary group +- B. Uniqueness for the evolution equation +- C. Reconstruction of the group + +## iv. References + +* None. + -/ @[expose] public section @@ -47,6 +59,12 @@ variable {H : Type u} [NormedAddCommGroup H] [InnerProductSpace ℂ H] [Complete variable {U : ℝ → H →L[ℂ] H} (hU0 : U 0 = 1) (hUmul : ∀ s t, U (s + t) = U s * U t) (hUunit : ∀ t, U t ∈ unitary (H →L[ℂ] H)) (hUcont : ∀ ξ : H, Continuous (fun t : ℝ => U t ξ)) +/-! + +## A. The reconstructed unitary group + +-/ + include hU0 hUmul hUunit hUcont in /-- The Cayley-transform spectral measure for `stoneCandidateGenerator hUmul`'s essential self-adjoint closure. -/ @@ -68,6 +86,12 @@ include hU0 hUmul hUunit hUcont in noncomputable def stoneReconstructionUnitaryGroup (t : ℝ) : H →L[ℂ] H := ContinuousLinearMapWOT.toCLM ((stoneReconstructionData hU0 hUmul hUunit hUcont).expUnitaryGroup t) +/-! + +## B. Uniqueness for the evolution equation + +-/ + section Uniqueness variable {T : H →ₗ.[ℂ] H} @@ -124,6 +148,12 @@ lemma hasDerivAt_generator_unique {y z : ℝ → H} (hTsym : T.IsSymmetric) end Uniqueness +/-! + +## C. Reconstruction of the group + +-/ + include hU0 hUmul hUunit hUcont in /-- **Stone's theorem, reconstruction direction.** `U` agrees with the concrete unitary group `stoneReconstructionUnitaryGroup` on every vector in `stoneCandidateGenerator hUmul`'s domain. -/ diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Flow/Stone.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Flow/Stone.lean index e6c96eb248..f2babb2ee3 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Flow/Stone.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Flow/Stone.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.ProbabilisticTheory.HilbertSpace.Unbounded.Stone # The unitary group of a self-adjoint operator +The unitary group exp(i t T) of a self-adjoint operator and its differentiable orbits. + ## i. Overview For a self-adjoint operator `T` with spectral measure `μ`, the unitary group `exp(i t T)` is the @@ -27,6 +29,16 @@ differentiable at `0`, and then the derivative at time `t` is `i T exp(i t T) x` differentiable orbit. - `expUnitaryGroup_star` : `exp(i t T)⋆ = exp(-i t T)`. +## iii. Table of contents + +- A. Differentiability of orbits +- B. The domain via differentiable orbits +- C. The adjoint of the unitary group + +## iv. References + +* None. + -/ @[expose] public section @@ -47,6 +59,12 @@ variable {μS : QuantumMechanics.WOTSpectralMeasure ℝ H} namespace DomainAwareSelfAdjointSpectralTheorem +/-! + +## A. Differentiability of orbits + +-/ + /-- For `x` in the domain of `T`, the difference quotients `(exp(i t T) x - x) / t` converge to `i T x`. -/ lemma expUnitaryGroup_strong_slope_tendsto @@ -126,6 +144,12 @@ lemma expUnitaryGroup_hasDerivAt _ = U' (D.expUnitaryGroup (t - s) (x : H)) := by rfl +/-! + +## B. The domain via differentiable orbits + +-/ + lemma mem_domain_iff_expUnitaryGroup_strong_slope (D : DomainAwareSelfAdjointSpectralTheorem T μS) (x : H) : x ∈ T.domain ↔ @@ -268,6 +292,12 @@ lemma mem_domain_iff_expUnitaryGroup_hasDerivAt_zero funext t simp [slope, D.expUnitaryGroup_zero] +/-! + +## C. The adjoint of the unitary group + +-/ + /-- `exp(i t T)⋆ = exp(-i t T)`. -/ lemma expUnitaryGroup_star (D : DomainAwareSelfAdjointSpectralTheorem T μS) (t : ℝ) : star (D.expUnitaryGroup t) = D.expUnitaryGroup (-t) := diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Flow/StoneAPI.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Flow/StoneAPI.lean index 06fc1063ff..8ea652e6ab 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Flow/StoneAPI.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Flow/StoneAPI.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.ProbabilisticTheory.HilbertSpace.Unbounded.Flow.Stone # The generator of the unitary group +The domain of T is the set of vectors with differentiable orbit under exp(i t T). + ## i. Overview A vector is in the domain of a self-adjoint operator `T` exactly when its orbit under `exp(i t T)` @@ -21,6 +23,15 @@ is differentiable at `0`, and the derivative is then `i T x`. - `mem_domain_iff_expUnitaryGroup_hasDerivAt` : the domain in terms of differentiable orbits. - `expUnitaryGroup_hasDerivAt_iff` : the derivative of an orbit is `i T x`. +## iii. Table of contents + +- A. The derivative at zero +- B. The derivative at an arbitrary time + +## iv. References + +* None. + -/ @[expose] public section @@ -44,6 +55,12 @@ variable (D : DomainAwareSelfAdjointSpectralTheorem T μS) include D +/-! + +## A. The derivative at zero + +-/ + /-- If the orbit is differentiable at zero, its derivative is forced by the operator. -/ lemma expUnitaryGroup_hasDerivAt_zero_iff (x : H) (y : H) : HasDerivAt (fun t : ℝ => D.expUnitaryGroup t x) y 0 ↔ @@ -65,6 +82,12 @@ lemma expUnitaryGroup_hasDerivAt_zero_iff (x : H) (y : H) : · rintro ⟨hx, rfl⟩ exact D.expUnitaryGroup_hasDerivAt_zero ⟨x, hx⟩ +/-! + +## B. The derivative at an arbitrary time + +-/ + /-- The generator domain is independent of the time at which differentiability is tested. This is the orbit-level form of Stone's theorem used by evolution arguments. -/ lemma mem_domain_iff_expUnitaryGroup_hasDerivAt (x : H) (s : ℝ) : diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Flow/StoneInvariance.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Flow/StoneInvariance.lean index 8586f71f29..0d2f2662ff 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Flow/StoneInvariance.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Flow/StoneInvariance.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.ProbabilisticTheory.HilbertSpace.Unbounded.Flow.Stone # The unitary group preserves the domain of its generator +The unitary group exp(i t T) preserves the domain of T and commutes with T. + ## i. Overview For a self-adjoint operator `T` with spectral measure `μ`, the unitary group `exp(i t T)` preserves @@ -21,6 +23,15 @@ the domain of `T` and commutes with `T` there. - `expUnitaryGroup_translate_mem` : `exp(i s T)` preserves the domain of `T`. - `expUnitaryGroup_translate` : `T` commutes with `exp(i s T)` on its domain. +## iii. Table of contents + +- A. Invariance of the domain +- B. Commutation with the generator + +## iv. References + +* None. + -/ @[expose] public section @@ -44,6 +55,12 @@ variable (D : DomainAwareSelfAdjointSpectralTheorem T μS) include D +/-! + +## A. Invariance of the domain + +-/ + /-- The group law: `D.expUnitaryGroup t (D.expUnitaryGroup s x) = D.expUnitaryGroup (t + s) x`, via `expUnitaryGroup_add` and the (definitional) fact that `WOT`-multiplication is composition. -/ lemma expUnitaryGroup_translate_comm (x : H) (s t : ℝ) : @@ -70,6 +87,12 @@ lemma expUnitaryGroup_translate_mem (x : T.domain) (s : ℝ) : rw [hfun_eq] at hshift exact (D.mem_domain_iff_expUnitaryGroup_hasDerivAt_zero _).2 ⟨_, hshift⟩ +/-! + +## B. Commutation with the generator + +-/ + /-- `T` commutes with `D.expUnitaryGroup s` on `T.domain`: for `x ∈ T.domain`, `D.expUnitaryGroup s x ∈ T.domain` and `T (D.expUnitaryGroup s x) = D.expUnitaryGroup s (T x)`. -/ lemma expUnitaryGroup_translate (x : T.domain) (s : ℝ) : diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/RealAnalytic.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/RealAnalytic.lean index 586a6376f5..31e7d19e45 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/RealAnalytic.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/RealAnalytic.lean @@ -14,6 +14,8 @@ public import Mathlib.Analysis.InnerProductSpace.l2Space # Criteria for essential self-adjointness +Criteria for essential self-adjointness: trivial deficiency spaces, eigenbases. + ## i. Overview A densely defined symmetric operator is essentially self-adjoint when both deficiency spaces are @@ -32,6 +34,11 @@ eigenvectors with real eigenvalues is essentially self-adjoint. - A. Von Neumann's defect criterion - B. Essential self-adjointness from a Hilbert basis of eigenvectors +## iv. References + +* Reed–Simon, *Methods of Modern Mathematical Physics I: Functional Analysis*, + Theorem VIII.3. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/ScalarMeasure.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/ScalarMeasure.lean index 1a7c641527..dac43a9df0 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/ScalarMeasure.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/ScalarMeasure.lean @@ -12,6 +12,8 @@ public import Mathlib.MeasureTheory.Measure.Complex # Scalar and diagonal measures of a spectral measure +The scalar and diagonal measures obtained by pairing a spectral measure with vectors. + ## i. Overview Pairing a spectral measure `μ` with two vectors gives the complex measure `S ↦ ⟪y, μ S x⟫`, and with @@ -31,6 +33,10 @@ vector state `x`. A spectral measure is determined by its complex measures. - B. Positivity on the diagonal - C. The diagonal (vector-state) measure +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/SelfAdjointSpectralTheorem.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/SelfAdjointSpectralTheorem.lean index 694e7f000d..f3718ec5e1 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/SelfAdjointSpectralTheorem.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/SelfAdjointSpectralTheorem.lean @@ -13,6 +13,8 @@ public import PhyslibAlpha.ProbabilisticTheory.HilbertSpace.Unbounded.WeakIntegr # The spectral theorem, stated +Essential self-adjointness and spectral resolutions of self-adjoint operators, with their domains. + ## i. Overview An operator is essentially self-adjoint when its closure is self-adjoint; a self-adjoint extension @@ -23,16 +25,24 @@ the domain of `T` is the set of vectors with `∫ λ² dμₓ < ∞`. ## ii. Key results - `SelfAdjointClosureData` : an operator with self-adjoint closure. +- `SelfAdjointClosureData.unique_selfAdjoint_extension` : the self-adjoint extension is unique. - `IsWeakSpectralResolution` : `⟪y, T x⟫ = ∫ λ d⟪y, μ x⟫` on the domain of `T`. +- `SelfAdjointSpectralTheorem` : a spectral measure weakly resolving a self-adjoint operator. - `spectralSquareMomentDomain` : the vectors with finite second moment. - `DomainAwareSelfAdjointSpectralTheorem` : a spectral measure resolving a self-adjoint operator together with its domain. +- `DomainAwareSelfAdjointSpectralTheorem.expUnitaryGroup` : the strongly continuous unitary + group attached to the spectral measure. ## iii. Table of contents - A. Essential self-adjointness and closure - A.1. Spectral resolutions with domain +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/SpectralIntegral/Construction.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/SpectralIntegral/Construction.lean index 08d20f0636..091aa407b7 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/SpectralIntegral/Construction.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/SpectralIntegral/Construction.lean @@ -14,22 +14,39 @@ public import Mathlib.MeasureTheory.VectorMeasure.SetIntegral # Integrating unbounded functions against a spectral measure +The maximal spectral integral `∫ f dμ` of an unbounded function, built from bounded truncations. + ## i. Overview For a real measurable function `f` and a spectral measure `μ`, the integral `∫ f dμ` is defined on the vectors `x` with `∫ f² dμₓ < ∞`, as the limit of the bounded integrals of the truncations of -`f`. It is densely defined, closable, symmetric and essentially self-adjoint. +`f`. It is densely defined, closable, symmetric and essentially self-adjoint. The construction is +carried out for the identity function `λ ↦ λ`, and a general `f` is handled by pushing `μ` forward +along `f`. ## ii. Key results -- `truncationFunction` : the truncation of `f` to the set where `|f| ≤ n`. -- `maximalSpectralIntegral` : the integral `∫ f dμ` on its maximal domain. +- `truncationFunction` : the spectral variable `λ` truncated to `[-n, n]`. +- `truncationIntegral` : the bounded integral of the `n`-th truncation. +- `spectralSquareMomentSubmodule` : the vectors of finite second moment, as a submodule. +- `maximalSpectralIntegral` : the integral `∫ λ dμ` on its maximal domain. +- `maximalSpectralIntegral_isSymmetric` : the maximal integral is symmetric. +- `maximalSpectralIntegral_hasDenseDomain` : its domain is dense. +- `maximalSpectralIntegral_isClosable` : it is closable. +- `measurableSpectralIntegral` : the integral of a measurable real function `f`, obtained by + pushing the spectral measure forward along `f`. +- `boundedIntegral_tendsto_of_pointwise_tendsto_of_bound` : bounded spectral integrals converge + when the integrands converge pointwise under a uniform bound. ## iii. Table of contents - A. Measurable real functional calculus - B. Convergence of bounded spectral multipliers +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/SpectralIntegral/SpecTheorem.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/SpectralIntegral/SpecTheorem.lean index 7f7cdc87eb..4acf17a87d 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/SpectralIntegral/SpecTheorem.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/SpectralIntegral/SpecTheorem.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.ProbabilisticTheory.HilbertSpace.Unbounded.SpectralIn # The integral of the identity is self-adjoint +The integral of the identity against a spectral measure on `ℝ` is self-adjoint. + ## i. Overview The integral of the identity against a spectral measure on `ℝ` has resolvents at `± i` given by the @@ -19,6 +21,13 @@ measure equals this integral, which identifies its domain with the vectors of fi ## ii. Key results +- `resolventMultiplier` : the bounded function `λ ↦ (λ - z)⁻¹` for non-real `z`. +- `maximalSpectralIntegral_resolvent_range` : the shifts by non-real `z` of the maximal integral + are onto. +- `maximalSpectralIntegral_isSelfAdjoint` : the integral of the identity is self-adjoint. +- `measurableSpectralIntegral_isSelfAdjoint` : so is the integral of any measurable real function. +- `maximalSpectralIntegral_eq_of_isSelfAdjoint_of_isWeakSpectralResolution` : a self-adjoint + operator resolved by a spectral measure equals the integral of the identity. - `domainAwareSelfAdjointSpectralTheorem_of_isWeakSpectralResolution` : a spectral measure resolving a self-adjoint operator resolves it together with its domain. @@ -31,6 +40,10 @@ measure equals this integral, which identifies its domain with the vectors of fi - E. Uniqueness of the domain-aware realization - F. The canonical operator equality +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/SpectralPointMass.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/SpectralPointMass.lean index b6e953a106..ceb277970b 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/SpectralPointMass.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/SpectralPointMass.lean @@ -12,16 +12,33 @@ public import Mathlib.MeasureTheory.VectorMeasure.SetIntegral # Spectral measures taking values `0` and `1` +A `{0, 1}`-valued spectral measure on `ℝ` with bounded support is a point mass. + ## i. Overview A measure on `ℝ` with bounded support that only takes the values `0` and `1` is a point mass. Bisecting the support and keeping the half of measure `1` gives nested intervals shrinking to the -point. +point. As a consequence, a bounded self-adjoint operator all of whose spectral projections are `0` +or `1` is a scalar multiple of the identity. ## ii. Key results +- `WOTSpectralMeasure.bisect` : the nested bisection intervals. +- `WOTSpectralMeasure.bisectPoint` : the point the bisection intervals shrink to. - `WOTSpectralMeasure.exists_forall_notMem_measure_eq_zero` : such a measure vanishes on every set avoiding some point `r`. +- `eq_smul_one_of_forall_spectralMeasure_eq_zero_or_one` : a bounded self-adjoint operator with + only trivial spectral projections is a scalar multiple of the identity. + +## iii. Table of contents + +- A. Bisection intervals +- B. The limit point of the bisection +- C. Operators with trivial spectral projections + +## iv. References + +* None. -/ @@ -39,6 +56,12 @@ namespace WOTSpectralMeasure variable {H : Type*} [NormedAddCommGroup H] [InnerProductSpace ℂ H] [CompleteSpace H] +/-! + +## A. Bisection intervals + +-/ + section Bisect variable (μ : WOTSpectralMeasure ℝ H) @@ -148,6 +171,12 @@ lemma bisect_diff_measure_zero end Bisect +/-! + +## B. The limit point of the bisection + +-/ + section Limit variable (μ : WOTSpectralMeasure ℝ H) {a b : ℝ} @@ -258,6 +287,12 @@ end Limit end WOTSpectralMeasure +/-! + +## C. Operators with trivial spectral projections + +-/ + section ScalarOperator variable {H : Type*} [NormedAddCommGroup H] [InnerProductSpace ℂ H] [CompleteSpace H] diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Stone.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Stone.lean index e0b2ce4ece..c0c4e3a884 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Stone.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/Stone.lean @@ -17,6 +17,8 @@ public import Mathlib.Analysis.SpecialFunctions.ExpDeriv # Differentiating the exponential multiplier +Difference quotients of `exp(i t T) x` converge to `i T x` for `x` of finite second moment. + ## i. Overview The functions `λ ↦ exp(i t λ)` are differentiable in `t` with derivative `i λ exp(i t λ)`, and their @@ -27,6 +29,20 @@ quotients of `exp(i t T) x` converge for `x` of finite second moment. - `expFunction_hasDerivAt` : the derivative of `t ↦ exp(i t λ)`. - `expFunction_slope_norm_le` : the difference quotients are bounded by `|λ|`. +- `expSlope` : the difference quotient `t⁻¹ (exp(i t λ) - 1)`. +- `expIntegral_inner_slope_tendsto_complexWeakIntegral` : the difference quotients converge weakly. +- `expIntegral_strong_slope_tendsto` : for `x` in the maximal domain, the difference quotients of + `exp(i t T) x` converge in norm to `i T x`. + +## iii. Table of contents + +- A. The exponential function and its difference quotients +- B. Weak convergence of the difference quotients +- C. Strong convergence of the difference quotients + +## iv. References + +* None. -/ @@ -43,6 +59,12 @@ namespace QuantumMechanics.WOTSpectralMeasure variable {H : Type*} [NormedAddCommGroup H] [InnerProductSpace ℂ H] [CompleteSpace H] +/-! + +## A. The exponential function and its difference quotients + +-/ + lemma expFunction_hasDerivAt (r : ℝ) : HasDerivAt (fun t : ℝ => expFunction t r) (Complex.I * (r : ℂ)) 0 := by have harg : HasDerivAt (fun t : ℝ => t • ((r : ℂ) * Complex.I)) @@ -192,6 +214,12 @@ lemma vectorMeasure_expSlope_sub_derivative_tendsto (μ := μ) (B := ContinuousLinearMap.lsmul ℝ ℂ (E := ℂ)) (fun r : ℝ => 3 * |r|) hmeas hdom hbound hlim) +/-! + +## B. Weak convergence of the difference quotients + +-/ + lemma maximalSpectralIntegral_inner_eq_complexWeakIntegral (μS : WOTSpectralMeasure ℝ H) (x : H) (hx : x ∈ (maximalSpectralIntegral μS).domain) (y : H) @@ -351,6 +379,12 @@ lemma expIntegral_inner_slope_tendsto_complexWeakIntegral ContinuousLinearMap.lsmul ℝ ℂ (E := ℂ); ν]))) simpa [sub_add_cancel] using hadd +/-! + +## C. Strong convergence of the difference quotients + +-/ + lemma boundedIntegral_sub_maximal_norm_sq (μS : WOTSpectralMeasure ℝ H) {g : ℝ → ℂ} (hg : Measurable g) (hgb : ∃ C : ℝ, ∀ r, ‖g r‖ ≤ C) diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/StoneUnitaryGroup.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/StoneUnitaryGroup.lean index 47aed6ff29..2980e508b9 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/StoneUnitaryGroup.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/StoneUnitaryGroup.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.ProbabilisticTheory.HilbertSpace.Unbounded.BoundedInt # The unitary group of a spectral measure +The strongly continuous unitary group `t ↦ exp(i t T)` obtained from a spectral measure on `ℝ`. + ## i. Overview For a spectral measure `μ` on `ℝ`, integrating `λ ↦ exp(i t λ)` gives unitaries `exp(i t T)` with @@ -18,7 +20,11 @@ For a spectral measure `μ` on `ℝ`, integrating `λ ↦ exp(i t λ)` gives uni ## ii. Key results +- `expFunction` : the bounded function `λ ↦ exp(i t λ)`. - `expIntegral` : the unitary `exp(i t T)`. +- `expIntegral_add` : `exp(i (t + s) T) = exp(i t T) exp(i s T)`. +- `expIntegral_mem_unitary` : each `exp(i t T)` is unitary. +- `expIntegral_continuous` : `t ↦ exp(i t T) x` is continuous. - `StrongUnitaryOneParameterGroup` : a strongly continuous one-parameter unitary group. - `expUnitaryGroup` : the unitary group of a spectral measure. @@ -27,6 +33,10 @@ For a spectral measure `μ` on `ℝ`, integrating `λ ↦ exp(i t λ)` gives uni - A. The exponential multiplier - B. The unitary group and its strong continuity +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/UnitaryInfra/SesquilinearForm.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/UnitaryInfra/SesquilinearForm.lean index 1428513731..61a1211395 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/UnitaryInfra/SesquilinearForm.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/UnitaryInfra/SesquilinearForm.lean @@ -20,18 +20,28 @@ public import Mathlib.MeasureTheory.Integral.Bochner.ContinuousLinearMap # The spectral forms of a bounded normal operator +Complex measures `⟪y, E(·) x⟫` of a bounded normal operator and their sesquilinear forms. + ## i. Overview For a bounded normal operator `U` and vectors `x`, `y`, the functional `f ↦ ⟪x, f(U) y⟫` on continuous functions on the spectrum is given, by the Riesz–Markov–Kakutani theorem and -polarization, by a complex measure. Integrating bounded measurable functions against these measures -gives a bounded sesquilinear form for each such function. +polarization, by a complex measure. Evaluating these measures on a measurable set `S` gives a +bounded sesquilinear form for each such set. ## ii. Key results +- `CompactPositiveFunctional` : a positive functional on compactly supported continuous functions, + with its Riesz measure. - `cfcScalarMeasure` : the measure representing `f ↦ ⟪x, f(U) x⟫`. -- `polarizedCfcScalarMeasure` : the complex measure representing `f ↦ ⟪x, f(U) y⟫`. -- `cfcSesquilinearForm` : the sesquilinear form of a bounded measurable function. +- `polarizedCfcScalarMeasure` : the complex measure representing `f ↦ ⟪y, f(U) x⟫`. +- `polarizedCfcScalarMeasure_complexIntegral_eq_inner` : integrating a real continuous `f` against + the polarized measure gives `⟪y, f(U) x⟫`. +- `polarizedCfcScalarMeasure_smul_left`, `polarizedCfcScalarMeasure_smul_right` : the polarized + measure is sesquilinear in the two vectors. +- `polarizedCfcScalarMeasure_norm_le_mul` : the polarized measure of a set is bounded by + `2 ‖x‖ ‖y‖`. +- `cfcSesquilinearForm` : the bounded sesquilinear form of a measurable set. ## iii. Table of contents @@ -45,6 +55,10 @@ gives a bounded sesquilinear form for each such function. - H. Full complex sesquilinearity of the polarized measure - I. Riesz representation of the polarized measure +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/UnitaryInfra/SpectralMeasure.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/UnitaryInfra/SpectralMeasure.lean index 66cc65fa70..f2eb898ab1 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/UnitaryInfra/SpectralMeasure.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/UnitaryInfra/SpectralMeasure.lean @@ -13,6 +13,8 @@ public import Mathlib.Algebra.Star.Unitary # The spectral measure of a bounded normal operator +The projection-valued spectral measure `E` of a bounded normal operator `U`, built from its CFC. + ## i. Overview The sesquilinear form of the indicator of a Borel set `S` is represented by an operator `E(S)`. @@ -23,7 +25,13 @@ the identity is `U`. ## ii. Key results - `cfcSpectralOperator` : the operator `E(S)`. +- `cfcSpectralOperator_isSelfAdjoint` : each `E(S)` is self-adjoint. +- `cfcSpectralOperator_isStarProjection` : each `E(S)` is an orthogonal projection. +- `cfcSpectralVectorMeasure` : `E` as a vector measure in the weak operator topology. - `cfcSpectralMeasure` : the spectral measure of a bounded normal operator. +- `cfcSpectralMeasure_reconstruction` : integrating a real continuous `f` against `E` gives `f(U)`. +- `cfcSpectralMeasure_commute_of_commute_unitary` : `E` commutes with unitaries commuting with + `U` and `U⋆`. ## iii. Table of contents @@ -33,6 +41,10 @@ the identity is `U`. - D. The spectral measure - E. Commutation with the commutant +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/WeakIntegral.lean b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/WeakIntegral.lean index adad1e42c7..1948d84cee 100644 --- a/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/WeakIntegral.lean +++ b/PhyslibAlpha/ProbabilisticTheory/HilbertSpace/Unbounded/WeakIntegral.lean @@ -13,19 +13,33 @@ public import Mathlib.MeasureTheory.VectorMeasure.SetIntegral # The vector-measure integral against a scalar matrix coefficient +Weak integrals `∫ f d⟪y, μS(·) x⟫` of possibly unbounded functions against a spectral measure. + +## i. Overview + For a bounded multiplier `f`, testing the spectral integral against two vectors and integrating the scalar spectral measure give the same result: `⟪y, (∫ f dμS) x⟫ = ∫ f d(μS.scalarMeasure x y)`. The right-hand side makes sense for unbounded `f` as well, which gives the weak integrals `∫ f d⟪y, μS(·) x⟫` used to state `T = ∫ λ dE(λ)` vector by vector. -## Main definitions +## ii. Key results - `weakIntegral`, `complexWeakIntegral` : `∫ f d⟪y, μS(·)x⟫`, for real- and complex-valued `f`. - `boundedIntegralOfUniformApprox_inner` : the weak integral of a bounded multiplier is the matrix coefficient of its spectral integral. +- `weakIntegral_map`, `complexWeakIntegral_map` : weak integrals against a pushforward measure. - `unitaryConjSpectralMeasure_weakIntegral` : compatibility with unitary transport. +## iii. Table of contents + +- A. Bounded integrals agree with the vector-measure integral +- B. The weak integral of a possibly-unbounded multiplier + +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Basic.lean b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Basic.lean index faf23970bd..f4223aed96 100644 --- a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Basic.lean +++ b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Basic.lean @@ -12,6 +12,8 @@ public import Physlib.ProbabilisticTheory.OrderUnit.Archimedean # Jordan order-unit spaces +Jordan order-unit spaces: order-unit spaces that are Jordan algebras with nonnegative squares. + ## i. Overview Quantum observables carry, besides their order and unit, the Jordan product `a ∘ b`, a commutative @@ -29,6 +31,10 @@ the operator picture `⟪ψ, a² ψ⟫ = ‖a ψ‖² ≥ 0`. - A. The compatibility class - B. Consequences +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/CStarAlgebra/Basic.lean b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/CStarAlgebra/Basic.lean index d51ad1b753..79191c1482 100644 --- a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/CStarAlgebra/Basic.lean +++ b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/CStarAlgebra/Basic.lean @@ -13,6 +13,8 @@ public import PhyslibAlpha.ProbabilisticTheory.CStarAlgebra.OrderUnit # The self-adjoint part of a C⋆-algebra is a JB-algebra +The self-adjoint elements of a unital C⋆-algebra form a JB-algebra under `½ (a b + b a)`. + ## i. Overview The self-adjoint elements of a unital C⋆-algebra, with the Jordan product `a ∘ b = ½ (a b + b a)`, @@ -26,6 +28,7 @@ The instances are scoped to `JB`. - `JB.mul_self_eq` : the Jordan square is the ordinary square. - `JB.quadRep_eq_conj` : `U_a b = a b a`. - `JB.isJordanProjection_iff_isIdempotentElem` : Jordan projections are the ordinary projections. +- `JB.jordanOrthogonal_iff` : Jordan orthogonality of `p`, `q` is `p q + q p = 0`. ## iii. Table of contents @@ -33,6 +36,10 @@ The instances are scoped to `JB`. - B. The JB-algebra instance - C. Squares, `U_a = aba` and projections +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/CStarAlgebra/CFC.lean b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/CStarAlgebra/CFC.lean index 2e24f9b3de..00a97dd76c 100644 --- a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/CStarAlgebra/CFC.lean +++ b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/CStarAlgebra/CFC.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.ProbabilisticTheory.JordanOrderUnit.CStarAlgebra.Basi # Continuous functional calculus of self-adjoint elements +The continuous functional calculus of a self-adjoint C⋆-algebra element, valued in observables. + ## i. Overview The continuous functional calculus of a self-adjoint element of a C⋆-algebra, with values in the @@ -23,6 +25,17 @@ isometric. - `JB.jordanCfc` : the functional calculus with values in the observables. - `JB.jordanCfc_mul` : it is multiplicative. - `JB.norm_jordanCfc` : it is isometric. +- `JB.jordanCfc_commute` : its values commute with the observable. +- `JB.jordanCfc_nonneg`, `JB.jordanCfc_monotone` : it is positive and monotone. + +## iii. Table of contents + +- A. The functional calculus +- B. Positivity and monotonicity + +## iv. References + +* None. -/ @@ -36,6 +49,12 @@ variable {A : Type*} [CStarAlgebra A] open scoped selfAdjoint +/-! + +## A. The functional calculus + +-/ + /-- The continuous functional calculus of a self-adjoint element, as a linear map into the observables. -/ noncomputable def jordanCfc (a : selfAdjoint A) : @@ -87,6 +106,12 @@ lemma jordanCfc_commute (a : selfAdjoint A) (f : C(spectrum ℝ (a : A), ℝ)) : apply Commute.cfcHom (p := IsSelfAdjoint) a.property (Commute.refl _) simpa only [a.property.star_eq] using (Commute.refl (a : A)) +/-! + +## B. Positivity and monotonicity + +-/ + section Order variable [PartialOrder A] [StarOrderedRing A] diff --git a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/CStarAlgebra/Compatibility.lean b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/CStarAlgebra/Compatibility.lean index 2949bd97fd..600e884793 100644 --- a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/CStarAlgebra/Compatibility.lean +++ b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/CStarAlgebra/Compatibility.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.ProbabilisticTheory.JordanOrderUnit.CStarAlgebra.Basi # Commuting observables are Jordan compatible +Commuting self-adjoint elements of a C⋆-algebra are Jordan compatible. + ## i. Overview If two self-adjoint elements of a C⋆-algebra commute, their Jordan multiplication operators commute. @@ -26,6 +28,10 @@ a`. - A. Commuting observables +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/CStarAlgebra/Positivity.lean b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/CStarAlgebra/Positivity.lean index 0499f218c9..c0abd08f55 100644 --- a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/CStarAlgebra/Positivity.lean +++ b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/CStarAlgebra/Positivity.lean @@ -13,6 +13,8 @@ public import PhyslibAlpha.ProbabilisticTheory.JordanOrderUnit.Conditioning # Jordan positivity in a C⋆-algebra +In a C⋆-algebra, nonnegative observables are Jordan squares and `a₊ ∘ a₋ = 0`. + ## i. Overview In a C⋆-algebra an observable is nonnegative iff it is a Jordan square, and its positive and @@ -22,12 +24,18 @@ negative parts are Jordan orthogonal. - `JB.nonneg_iff_exists_jpow_two` : the positive observables are the Jordan squares. - `JB.jordanOrthogonal_posPart_negPart` : positive and negative parts are Jordan orthogonal. +- `JB.quadRep_nonneg` : the quadratic representation `U_a` preserves positivity. +- `JB.JordanAlgebra.IsJordanProjection.conditionCStar` : conditioning a state on a projection. ## iii. Table of contents - A. Positivity via the Jordan square - B. Orthogonality of the Jordan decomposition +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/CStarAlgebra/Special.lean b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/CStarAlgebra/Special.lean index eace6e8c87..e018ddb217 100644 --- a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/CStarAlgebra/Special.lean +++ b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/CStarAlgebra/Special.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.ProbabilisticTheory.JordanOrderUnit.JB.Order # Special JB-algebras +Special JB-algebras: those embedding as closed Jordan subalgebras of a C⋆-algebra. + ## i. Overview A JB-algebra is special when it embeds as a closed Jordan subalgebra of the self-adjoint part of a @@ -23,6 +25,18 @@ of a C⋆-algebra is special. - `JBAlgebra.IsSpecialWitness` : an embedding into the self-adjoint part of a C⋆-algebra. - `JBAlgebra.IsSpecial` : a special JB-algebra. - `JB.isSpecial_selfAdjoint` : the self-adjoint part of a C⋆-algebra is special. +- `JBAlgebra.IsSpecialWitness.map_nonneg`, `JBAlgebra.IsSpecialWitness.monotone` : such an + embedding preserves positivity and order. + +## iii. Table of contents + +- A. Special JB-algebras +- B. Order properties of special embeddings +- C. The self-adjoint part of a C⋆-algebra + +## iv. References + +* None. -/ @@ -32,6 +46,12 @@ namespace ProbabilisticTheory open scoped JB selfAdjoint +/-! + +## A. Special JB-algebras + +-/ + /-- A witness that `E` is special: an isometric unital Jordan embedding into the self-adjoint part of a Cstar algebra whose range is norm closed. -/ structure JBAlgebra.IsSpecialWitness (E : Type*) [NormedJordanAlgebra E] @@ -52,6 +72,12 @@ def JBAlgebra.IsSpecial (E : Type u) [NormedJordanAlgebra E] ∃ (A : Type u) (_ : CStarAlgebra A) (_ : PartialOrder A) (_ : StarOrderedRing A), Nonempty (JBAlgebra.IsSpecialWitness E A) +/-! + +## B. Order properties of special embeddings + +-/ + namespace JBAlgebra.IsSpecialWitness variable {E A : Type*} [IsJBOrderUnit E] [Nontrivial E] [CStarAlgebra A] [PartialOrder A] @@ -76,6 +102,12 @@ lemma monotone (j : JBAlgebra.IsSpecialWitness E A) : Monotone j.toLinearIsometr end JBAlgebra.IsSpecialWitness +/-! + +## C. The self-adjoint part of a C⋆-algebra + +-/ + namespace JB variable {A : Type*} [CStarAlgebra A] [PartialOrder A] [StarOrderedRing A] diff --git a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/CStarAlgebra/Statistics.lean b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/CStarAlgebra/Statistics.lean index 086f4ac133..db2cb6ad63 100644 --- a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/CStarAlgebra/Statistics.lean +++ b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/CStarAlgebra/Statistics.lean @@ -13,6 +13,8 @@ public import PhyslibAlpha.ProbabilisticTheory.CStarAlgebra.SpectralMeasure # Spectral formulas for Jordan moments +Jordan moments and the variance of an observable as integrals against its spectral measure. + ## i. Overview The statistics of an observable `a` in a state `ω` of a C⋆-algebra are given by its spectral @@ -21,17 +23,22 @@ powers `a^{[n]}`. For a single observable these agree with the ordinary powers ` C⋆-algebra, so every moment, and in particular the variance, is an integral against the spectral measure. -## ii. Key definitions and results +## ii. Key results - `JB.jpow_eq_pow` : Jordan powers of a single observable are ordinary powers. - `JB.moment_eq_integral` : `moment n (ω.onObservables) a = ∫ y, y^n ∂(realSpectralMeasure ω a)` - `JB.variance_eq_integral_sq_sub` : the variance as `∫y² dμ - (∫y dμ)²` +- `JB.apply_eq_integral` : the expectation `ω a` as `∫ y dμ`. ## iii. Table of contents - A. Jordan powers of a single element are ordinary powers - B. Moments as integrals against the outcome distribution +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Compatibility.lean b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Compatibility.lean index 3a5cf1f391..bab5ca8bca 100644 --- a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Compatibility.lean +++ b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Compatibility.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.ProbabilisticTheory.JordanOrderUnit.Operator # Compatible observables +Jordan compatibility of observables: their Jordan multiplication operators commute. + ## i. Overview Two observables of a Jordan algebra are compatible when their multiplication operators commute, `L_a @@ -22,11 +24,17 @@ observables of a C⋆-algebra are compatible. - `JordanAlgebra.IsJordanCompatible` : compatible observables. - `JordanAlgebra.isJordanCompatible_comm` : compatibility is symmetric. - `JordanAlgebra.isJordanCompatible_one_left` : the unit is compatible with everything. +- `JordanAlgebra.isJordanCompatible_self` : every observable is compatible with itself. +- `JordanAlgebra.isJordanCompatible_one_right` : everything is compatible with the unit. ## iii. Table of contents - A. The compatibility predicate +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Conditioning.lean b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Conditioning.lean index 8faf74c5db..e395c5e2cc 100644 --- a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Conditioning.lean +++ b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Conditioning.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.ProbabilisticTheory.JordanOrderUnit.Quadratic.Order # Conditioning a state on a projection +Conditioning a state on a Jordan projection `p`: the state `x ↦ ω(U_p x) / ω(p)`. + ## i. Overview For a Jordan projection `p` with positive quadratic representation `U_p`, and a state `ω` with `ω(p) @@ -22,11 +24,19 @@ For a Jordan projection `p` with positive quadratic representation `U_p`, and a - `JordanAlgebra.IsJordanProjection.condition` : the conditioned state. - `JordanAlgebra.IsJordanProjection.condition_self` : the conditioned state assigns probability `1` to `p`. +- `JordanAlgebra.IsJordanProjection.condition_complement` : the conditioned state assigns + probability `0` to the complement `1 - p`. +- `JordanAlgebra.IsJordanProjection.conditionOfQuadraticPositive` : conditioning when all + quadratic representations are positive. ## iii. Table of contents - A. Quadratic conditioning +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Covariance.lean b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Covariance.lean index 4ddb6bf2c7..c90848ef34 100644 --- a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Covariance.lean +++ b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Covariance.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.ProbabilisticTheory.JordanOrderUnit.Observable # Covariance +Covariance of observables in a Jordan order-unit space, and positivity of covariance matrices. + ## i. Overview The Jordan product gives second moments `ω(a ∘ b)` of a state, and so the covariance `Cov_ω(a, b) = @@ -31,6 +33,10 @@ is positive semidefinite, which gives a Cauchy–Schwarz inequality for covarian - A. Covariance - B. Positivity of the covariance matrix +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Examples/SpinFactor.lean b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Examples/SpinFactor.lean index dce8de7562..e1a89a1bd3 100644 --- a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Examples/SpinFactor.lean +++ b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Examples/SpinFactor.lean @@ -12,6 +12,8 @@ public import Mathlib.LinearAlgebra.QuadraticForm.Basic # Spin factors +Spin factors `V × R` of a symmetric bilinear form, the basic non-associative Jordan algebras. + ## i. Overview A spin factor is `V × ℝ` with the Jordan product `(x, a) ∘ (y, b) = (a y + b x, B x y + a b)` for a @@ -24,8 +26,15 @@ form it carries the Lorentz cone. Only the algebraic structure is built here. - `JordanAlgebra.SpinFactor.isCommJordan` : it is a Jordan algebra. - `JordanAlgebra.SpinFactor.mul_self_sub_two_smul_snd_mul_add_determinant_smul_one` : every element satisfies a quadratic equation. +- `JordanAlgebra.SpinFactor.determinant` : the determinant quadratic form `a² - B x x`. + +## iii. Table of contents + +- A. The underlying module +- B. The Jordan product +- C. The determinant and the quadratic equation -## iii. References +## iv. References - Adapted from Cobord, `Jordan/SpinFactor.lean`. @@ -39,6 +48,12 @@ namespace JordanAlgebra variable (R V : Type*) [CommRing R] [AddCommGroup V] [Module R V] +/-! + +## A. The underlying module + +-/ + /-- The spin factor determined by a bilinear form. The synonym keeps products belonging to different forms from becoming definitionally interchangeable. -/ abbrev SpinFactor (_B : LinearMap.BilinForm R V) : Type _ := V × R @@ -69,6 +84,12 @@ def mk (x : V) (a : R) : SpinFactor R V B := (x, a) @[simp] lemma mk_fst (x : V) (a : R) : (mk B x a).1 = x := rfl @[simp] lemma mk_snd (x : V) (a : R) : (mk B x a).2 = a := rfl +/-! + +## B. The Jordan product + +-/ + instance : Mul (SpinFactor R V B) where mul z w := mk B (z.2 • w.1 + w.2 • z.1) (B z.1 w.1 + z.2 * w.2) @@ -127,6 +148,12 @@ lemma isCommJordan (hB : B.IsSymm) : have hxy : B x y = B y x := by simpa using hB.eq x y ext <;> simp [mul_fst, mul_snd, smul_eq_mul, hxy] <;> [module; ring] +/-! + +## C. The determinant and the quadratic equation + +-/ + /-- The rank-two determinant/norm form of a spin factor. -/ def determinant : QuadraticMap R (SpinFactor R V B) R := QuadraticMap.sq.comp diff --git a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/FiniteRank.lean b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/FiniteRank.lean index 09c388c05d..9e170dcbbf 100644 --- a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/FiniteRank.lean +++ b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/FiniteRank.lean @@ -12,6 +12,8 @@ public import Mathlib.Algebra.Ring.IsFormallyReal # Trace and determinant of finite-rank Jordan algebras +Traces on formally real Jordan algebras, their density observables and expectations. + ## i. Overview A trace on a formally real Jordan algebra gives density observables: sums of squares with trace one, @@ -22,6 +24,18 @@ each defining the expectation `a ↦ tr(ρ ∘ a)`. - `JordanAlgebra.TraceDeterminant` : a trace and determinant on a Jordan algebra. - `JordanAlgebra.TraceDeterminant.states` : the density observables. - `JordanAlgebra.TraceDeterminant.expectation` : the expectation of a density observable. +- `JordanAlgebra.TraceDeterminant.pureStates` : the idempotent density observables. +- `JordanAlgebra.TraceDeterminant.sq_smul_add_sq_smul_mem_states` : square-weighted mixtures of + density observables are density observables. + +## iii. Table of contents + +- A. Trace and determinant +- B. Density observables and expectations + +## iv. References + +* None. -/ @@ -34,6 +48,12 @@ namespace JordanAlgebra variable {E : Type*} [NonAssocCommRing E] [Module ℝ E] [SMulCommClass ℝ E E] [IsScalarTower ℝ E E] [IsCommJordan E] [IsFormallyReal E] +/-! + +## A. Trace and determinant + +-/ + /-- A trace and a determinant on a formally real Jordan algebra. -/ structure TraceDeterminant (E : Type*) [NonAssocCommRing E] [Module ℝ E] where /-- Jordan rank, i.e. determinant degree and trace of the unit. -/ @@ -46,6 +66,12 @@ structure TraceDeterminant (E : Type*) [NonAssocCommRing E] [Module ℝ E] where trace_one : trace 1 = rank determinant_one : determinant 1 = 1 +/-! + +## B. Density observables and expectations + +-/ + namespace TraceDeterminant /-- The finite-rank density-observable base: sums of Jordan squares with trace one. -/ diff --git a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Hom.lean b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Hom.lean index f612dccead..7328642566 100644 --- a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Hom.lean +++ b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Hom.lean @@ -13,6 +13,8 @@ public import Mathlib.Algebra.Module.LinearMap.Basic # Jordan homomorphisms +Jordan homomorphisms: unital real-linear maps between Jordan algebras preserving the product. + ## i. Overview A Jordan homomorphism between unital real Jordan algebras is a real-linear unital map preserving the @@ -22,6 +24,17 @@ Jordan product. - `JordanAlgebra.JordanHom` : Jordan homomorphisms. - `JordanAlgebra.JordanHom.comp` : composition. +- `JordanAlgebra.JordanHom.id` : the identity Jordan homomorphism. +- `JordanAlgebra.JordanHom.comp_assoc` : composition is associative. + +## iii. Table of contents + +- A. Jordan homomorphisms +- B. Identity and composition + +## iv. References + +* None. -/ @@ -34,6 +47,12 @@ namespace JordanAlgebra variable {E F G : Type*} [NonAssocCommRing E] [Module ℝ E] [NonAssocCommRing F] [Module ℝ F] [NonAssocCommRing G] [Module ℝ G] +/-! + +## A. Jordan homomorphisms + +-/ + /-- A unital real-linear map preserving the Jordan product. -/ structure JordanHom (E F : Type*) [NonAssocCommRing E] [Module ℝ E] [NonAssocCommRing F] [Module ℝ F] extends E →ₗ[ℝ] F where @@ -70,6 +89,12 @@ lemma map_one (f : JordanHom E F) : f 1 = 1 := f.map_one' lemma map_mul (f : JordanHom E F) (x y : E) : f (x * y) = f x * f y := f.map_mul' x y +/-! + +## B. Identity and composition + +-/ + /-- The identity Jordan homomorphism. -/ def id : JordanHom E E where toLinearMap := LinearMap.id diff --git a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/Basic.lean b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/Basic.lean index 6fce8c72ec..e84486a35a 100644 --- a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/Basic.lean +++ b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/Basic.lean @@ -14,6 +14,8 @@ public import Mathlib.Algebra.Ring.IsFormallyReal # Normed Jordan algebras and JB-algebras +Normed Jordan algebras, JB-algebras and ordered JB-algebras, with their basic properties. + ## i. Overview `JBAlgebra` is a Banach Jordan algebra satisfying the JB axioms @@ -29,18 +31,27 @@ norm is the given norm. `NormedJordanAlgebra` bundles the ring, module and metric structure of a normed Jordan algebra in one class, and `JBAlgebra` adds completeness and the JB axioms. -## ii. Key definitions and results +## ii. Key results - `NormedJordanAlgebra E` : a real normed unital Jordan algebra. - `JBAlgebra E` : a JB-algebra. - `JBAlgebra.norm_mul_self_le_norm_mul_self_add_mul_self` : monotonicity of the norm on sums of squares. +- `IsJBOrderUnit E` : a JB-algebra that is an order-unit space with the order-unit norm. +- `JBAlgebra.mul_self_eq_zero_iff` : `a ∘ a = 0` iff `a = 0`. +- `JBAlgebra.isClosed_nonneg` : the positive cone of an ordered JB-algebra is closed. +- `JBAlgebra.instIsFormallyReal` : an ordered JB-algebra is formally real. ## iii. Table of contents - A. Normed Jordan algebras - B. JB-algebras - C. Basic consequences + - C.1. Ordered JB-algebras + +## iv. References + +* Hanche-Olsen–Størmer, *Jordan Operator Algebras*, Def. 3.1.1. -/ @@ -130,6 +141,12 @@ lemma mul_self_eq_zero_iff {a : E} : a * a = 0 ↔ a = 0 := end Analytic +/-! + +### C.1. Ordered JB-algebras + +-/ + section Ordered variable {E : Type*} [IsJBOrderUnit E] diff --git a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/Dynamics.lean b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/Dynamics.lean index 1ad3ab778a..99b1735e45 100644 --- a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/Dynamics.lean +++ b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/Dynamics.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.ProbabilisticTheory.Dynamics.GeneratorIsDerivation # Generators of JB automorphism groups +The Jordan product is bounded, and generators of Jordan automorphism families are derivations. + ## i. Overview The Jordan product of a normed Jordan algebra is a bounded bilinear map, so multiplication operators @@ -25,6 +27,7 @@ one-parameter family of Jordan automorphisms is a Jordan derivation. linear maps. - `NormedJordanAlgebra.isDerivation_of_isAutomorphismFamily` : the generator of a family of automorphisms is a derivation. +- `NormedJordanAlgebra.norm_quadRep_le` : `‖U_a b‖ ≤ 3 ‖a‖² ‖b‖`. ## iii. Table of contents @@ -32,6 +35,10 @@ one-parameter family of Jordan automorphisms is a Jordan derivation. - B. Continuous multiplication and quadratic operators - C. The derivation corollary +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/GeneratedByOne/CFC.lean b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/GeneratedByOne/CFC.lean index fba802b16e..b3d120be59 100644 --- a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/GeneratedByOne/CFC.lean +++ b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/GeneratedByOne/CFC.lean @@ -14,6 +14,8 @@ public import Mathlib.Analysis.Normed.Operator.Extend # Continuous functional calculus in JB-algebras +The isometric continuous functional calculus of an observable in a JB-algebra. + ## i. Overview Evaluating polynomials at an observable `a` of a JB-algebra is isometric for the sup norm on its @@ -29,6 +31,9 @@ square roots, absolute values and positive and negative parts. - `NormedJordanAlgebra.jordanSqrt` : the square root of a nonnegative observable. - `NormedJordanAlgebra.jordanAbs`, `NormedJordanAlgebra.jordanPosPart`, `NormedJordanAlgebra.jordanNegPart` : absolute value and positive and negative parts. +- `NormedJordanAlgebra.jordanCfc_mul` : the functional calculus is multiplicative. +- `NormedJordanAlgebra.jordanPosPart_sub_jordanNegPart` : `a = a₊ - a₋`. +- `NormedJordanAlgebra.jordanPosPart_jordanOrthogonal_jordanNegPart` : `a₊ ∘ a₋ = 0`. ## iii. Table of contents @@ -37,6 +42,10 @@ square roots, absolute values and positive and negative parts. - C. Positive square roots - D. Absolute value and positive/negative parts +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/GeneratedByOne/Closed.lean b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/GeneratedByOne/Closed.lean index 591774c8ea..652b75853f 100644 --- a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/GeneratedByOne/Closed.lean +++ b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/GeneratedByOne/Closed.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.ProbabilisticTheory.JordanOrderUnit.JB.Dynamics # The closed subalgebra generated by one observable +The closed subalgebra `C(a)` generated by one observable is a commutative real Banach algebra. + ## i. Overview The closure `C(a)` of the subalgebra generated by `1` and `a` in a JB-algebra is closed under the @@ -24,6 +26,7 @@ subalgebra generated by one element is. So `C(a)` is a commutative real Banach a - `NormedJordanAlgebra.mul_mem_closedGeneratedByOne` : it is closed under the Jordan product. - `NormedJordanAlgebra.assoc_of_mem_closedGeneratedByOne` : the product is associative on it. - `NormedJordanAlgebra.ClosedGeneratedByOne` : it as a commutative normed algebra. +- `NormedJordanAlgebra.isComplete_closedGeneratedByOne` : it is complete. ## iii. Table of contents @@ -32,6 +35,10 @@ subalgebra generated by one element is. So `C(a)` is a commutative real Banach a - C. Completeness - D. The bundled commutative normed algebra +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/GeneratedByOne/Effect.lean b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/GeneratedByOne/Effect.lean index c71230afeb..f444d72fac 100644 --- a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/GeneratedByOne/Effect.lean +++ b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/GeneratedByOne/Effect.lean @@ -12,6 +12,8 @@ public import Physlib.ProbabilisticTheory.Effect.Sharp # Effects from the functional calculus +A continuous `[0, 1]`-valued function of an observable in a JB-algebra is an effect. + ## i. Overview A continuous function of an observable with values in `[0, 1]` is an effect. @@ -19,6 +21,15 @@ A continuous function of an observable with values in `[0, 1]` is an effect. ## ii. Key results - `NormedJordanAlgebra.jordanCfcEffect` : the effect of a `[0, 1]`-valued function. +- `NormedJordanAlgebra.coe_jordanCfcEffect` : the underlying observable is `f(a)`. + +## iii. Table of contents + +- A. Effects from the functional calculus + +## iv. References + +* None. -/ @@ -34,6 +45,12 @@ section variable [IsJBOrderUnit E] +/-! + +## A. Effects from the functional calculus + +-/ + /-- The effect `f(a)` of a continuous function `f` with values in `[0, 1]`. -/ noncomputable def jordanCfcEffect [Nontrivial E] (a : E) (f : C(jordanSpectrum a, ℝ)) (hf0 : ∀ x, 0 ≤ f x) (hf1 : ∀ x, f x ≤ 1) : Effect E := diff --git a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/GeneratedByOne/Inherited.lean b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/GeneratedByOne/Inherited.lean index d8d7bc99f7..215c264fc4 100644 --- a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/GeneratedByOne/Inherited.lean +++ b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/GeneratedByOne/Inherited.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.ProbabilisticTheory.JordanOrderUnit.JB.GeneratedByOne # The JB structure of `C(a)` +The closed subalgebra `C(a)` generated by one observable is itself an ordered JB-algebra. + ## i. Overview The closed subalgebra `C(a)` generated by one observable inherits the order, the unit, square @@ -21,6 +23,18 @@ Archimedean order-unit space. - `JBAlgebra.ClosedGeneratedByOne.instJBAlgebra` : `C(a)` is a JB-algebra. - `JBAlgebra.ClosedGeneratedByOne.instIsJBOrderUnit` : `C(a)` is an ordered JB-algebra. +- `JBAlgebra.ClosedGeneratedByOne.instNormedJordanAlgebra` : `C(a)` is a normed Jordan algebra. +- `JBAlgebra.ClosedGeneratedByOne.instArchimedeanOrderUnitSpace` : `C(a)` is an Archimedean + order-unit space. + +## iii. Table of contents + +- A. The normed JB structure +- B. The order-unit structure + +## iv. References + +* None. -/ @@ -38,6 +52,12 @@ namespace ClosedGeneratedByOne variable (a : E) +/-! + +## A. The normed JB structure + +-/ + /-- `C(a)` is a normed Jordan algebra. -/ noncomputable instance instNormedJordanAlgebra : NormedJordanAlgebra (ClosedGeneratedByOne a) where __ := NormedJordanAlgebra.ClosedGeneratedByOne.instCommRing a @@ -94,6 +114,12 @@ noncomputable instance instJBAlgebra : JBAlgebra (ClosedGeneratedByOne a) where end ClosedGeneratedByOne +/-! + +## B. The order-unit structure + +-/ + section Ordered variable {E : Type*} [IsJBOrderUnit E] diff --git a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/GeneratedByOne/PosInvertibility.lean b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/GeneratedByOne/PosInvertibility.lean index 4c885f754d..17e6f7a528 100644 --- a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/GeneratedByOne/PosInvertibility.lean +++ b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/GeneratedByOne/PosInvertibility.lean @@ -13,6 +13,8 @@ public import Mathlib.RingTheory.PowerSeries.Binomial # Positive elements of `C(a)` +Nonnegative elements of `C(a)` are squares, and positive units form the cone's interior. + ## i. Overview In `C(a)` every nonnegative element has a square root, given by the binomial series of `√(1 - x)`, @@ -26,6 +28,19 @@ invertible and nonnegative exactly when it lies in the interior of the positive squares. - `JBAlgebra.ClosedGeneratedByOne.isUnit_iff_mem_interior_positiveCone` : the positive invertible elements are the interior of the cone. +- `JBAlgebra.ClosedGeneratedByOne.halfBinomialSqrt_mul_self` : the series squares to `1 - z` + for `‖z‖ ≤ 1`. +- `JBAlgebra.ClosedGeneratedByOne.isUnit_aeval_completed_square` : `(x - c)² + d²` is a unit + for `d ≠ 0`. + +## iii. Table of contents + +- A. The binomial square-root series +- B. Square roots and invertibility of positive elements + +## iv. References + +* None. -/ @@ -44,6 +59,12 @@ namespace ClosedGeneratedByOne variable (a : E) +/-! + +## A. The binomial square-root series + +-/ + section variable [NormedJordanAlgebra E] [JBAlgebra E] @@ -262,6 +283,12 @@ lemma halfBinomialSqrt_mul_self [Nontrivial E] (z : ClosedGeneratedByOne a) (hz end +/-! + +## B. Square roots and invertibility of positive elements + +-/ + section variable [IsJBOrderUnit E] diff --git a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/GeneratedByOne/Spectrum.lean b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/GeneratedByOne/Spectrum.lean index 87834949ba..d54d1c51be 100644 --- a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/GeneratedByOne/Spectrum.lean +++ b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/GeneratedByOne/Spectrum.lean @@ -15,6 +15,8 @@ public import Mathlib.Analysis.Polynomial.Factorization # The spectrum of an observable in a JB-algebra +The spectrum of a JB-algebra observable: compact, nonempty, with polynomial spectral mapping. + ## i. Overview The spectrum of an observable `a` of a JB-algebra is its spectrum as an element of the commutative @@ -25,11 +27,22 @@ Banach algebra `C(a)`. It is a compact subset of `ℝ`, and polynomials map spec - `NormedJordanAlgebra.closedGenerator` : `a` as an element of `C(a)`. - `NormedJordanAlgebra.jordanSpectrum` : the spectrum of `a`. - `NormedJordanAlgebra.isCompact_jordanSpectrum` : the spectrum is compact. +- `JBAlgebra.ClosedGeneratedByOne.jordanSpectralRadius_eq_norm` : in `C(a)` the spectral radius + is the norm. +- `NormedJordanAlgebra.jordanSpectrum_nonempty` : the spectrum of an ordered JB observable is + nonempty. +- `NormedJordanAlgebra.jordanSpectrum_aeval` : polynomial spectral mapping. ## iii. Table of contents - A. The generator in its closed algebra - B. The canonical spectrum +- C. The spectral radius is the norm +- D. Nonemptiness and polynomial spectral mapping + +## iv. References + +* None. -/ @@ -246,6 +259,12 @@ end end NormedJordanAlgebra +/-! + +## C. The spectral radius is the norm + +-/ + namespace JBAlgebra variable {E : Type*} @@ -305,6 +324,12 @@ end ClosedGeneratedByOne end JBAlgebra +/-! + +## D. Nonemptiness and polynomial spectral mapping + +-/ + namespace NormedJordanAlgebra variable {E : Type*} diff --git a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/GeneratedByOne/SqrtUniqueness.lean b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/GeneratedByOne/SqrtUniqueness.lean index 2d678e1ec4..83b768aaa5 100644 --- a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/GeneratedByOne/SqrtUniqueness.lean +++ b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/GeneratedByOne/SqrtUniqueness.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.ProbabilisticTheory.JordanOrderUnit.JB.GeneratedByOne # Uniqueness of the positive square root +A nonnegative square root of an observable equals its functional-calculus square root. + ## i. Overview Every nonnegative `b` with `b ∘ b = a` is the square root of `a` from the functional calculus. @@ -31,6 +33,10 @@ polynomials on both sides gives `b = √a`. - C. Uniform polynomial approximation of the square root - D. Unrestricted uniqueness of the positive square root +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/GeneratedByOne/Uniform.lean b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/GeneratedByOne/Uniform.lean index 91c5a32601..a9cbfccbfb 100644 --- a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/GeneratedByOne/Uniform.lean +++ b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/GeneratedByOne/Uniform.lean @@ -12,6 +12,8 @@ public import Mathlib.Analysis.Normed.Algebra.Spectrum # The norm of `C(a)` is uniform +In `C(a)` the JB axiom `‖x²‖ = ‖x‖²` holds, so `‖x^(2ⁿ)‖ = ‖x‖^(2ⁿ)`. + ## i. Overview The JB axiom `‖x²‖ = ‖x‖²` holds in `C(a)`, so `‖x^(2ⁿ)‖ = ‖x‖^(2ⁿ)` and the spectral radius is at @@ -26,6 +28,10 @@ most the norm. - A. Uniform square norm +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/Order.lean b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/Order.lean index 12edb154cb..afe8be1b08 100644 --- a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/Order.lean +++ b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JB/Order.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.ProbabilisticTheory.JordanOrderUnit.JB.GeneratedByOne # The positive cone of a JB-algebra +In an ordered JB-algebra the nonnegative observables are exactly the squares. + ## i. Overview In an ordered JB-algebra the nonnegative observables are exactly the squares: every nonnegative @@ -20,6 +22,14 @@ observable is a square in its closed one-generator subalgebra. - `JBAlgebra.nonneg_iff_exists_mul_self` : the nonnegative observables are the squares. +## iii. Table of contents + +- A. Nonnegative observables are squares + +## iv. References + +* None. + -/ @[expose] public section @@ -30,6 +40,8 @@ namespace JBAlgebra variable {E : Type*} [IsJBOrderUnit E] [Nontrivial E] +/-! ## A. Nonnegative observables are squares -/ + /-- **The nonnegative observables of an ordered JB-algebra are the squares.** -/ lemma nonneg_iff_exists_mul_self (a : E) : 0 ≤ a ↔ ∃ b : E, b * b = a := by diff --git a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JBW/Basic.lean b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JBW/Basic.lean index a432bbe0b1..7f510a0749 100644 --- a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JBW/Basic.lean +++ b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JBW/Basic.lean @@ -14,6 +14,8 @@ public import PhyslibAlpha.ProbabilisticTheory.State.NormalEquivalence # JBW-algebras +JBW-algebras: monotone-complete JB-algebras whose normal states separate points. + ## i. Overview A JBW-algebra is a monotone-complete JB-algebra whose normal states separate points. @@ -23,12 +25,23 @@ A JBW-algebra is a monotone-complete JB-algebra whose normal states separate poi - `JBWAlgebra` : JBW-algebras. - `JBWAlgebra.eq_of_forall_normal_state_eq` : normal states separate points. +## iii. Table of contents + +- A. JBW-algebras +- B. Separation and monotone convergence + +## iv. References + +* None. + -/ @[expose] public section namespace ProbabilisticTheory +/-! ## A. JBW-algebras -/ + /-- A JBW-algebra, presented as a monotone-complete JB-algebra with enough normal states. The ordinary JB, order-unit, and scalar-order data stay in their existing canonical classes. -/ class JBWAlgebra (E : Type*) [IsJBOrderUnit E] : Prop @@ -41,6 +54,8 @@ namespace JBWAlgebra variable {E : Type*} [IsJBOrderUnit E] [JBWAlgebra E] +/-! ## B. Separation and monotone convergence -/ + /-- Equality of observables is detected by all normal states. -/ lemma eq_of_forall_normal_state_eq {x y : E} (h : ∀ ω : 𝓢[ℝ, E], ω.IsNormal → ω x = ω y) : x = y := by diff --git a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JBW/ProjectionResolution.lean b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JBW/ProjectionResolution.lean index 11f14210da..6155a40153 100644 --- a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JBW/ProjectionResolution.lean +++ b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/JBW/ProjectionResolution.lean @@ -13,6 +13,8 @@ public import PhyslibAlpha.ProbabilisticTheory.Measurement.BoundedScalarization /-! # Projection resolutions in JBW-algebras +Normal states turn projection resolutions into probability laws and separate them. + ## i. Overview A projection resolution is defined at the Jordan order-unit level. In a JBW-algebra two further @@ -33,6 +35,10 @@ separate projection resolutions, so a projection resolution is determined by its - A. Probability laws - B. Separation by normal states +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Lueders.lean b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Lueders.lean index 1c04105c22..e9678ac627 100644 --- a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Lueders.lean +++ b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Lueders.lean @@ -14,6 +14,8 @@ public import PhyslibAlpha.ProbabilisticTheory.Channel.Operation # Lüders operations +Lüders operations `x ↦ U_{√e} x` of effects and the states conditioned on effects. + ## i. Overview An effect `e` of an ordered JB-algebra has a positive square root. The Lüders operation of `e` is @@ -27,6 +29,16 @@ the quadratic representation `x ↦ U_{√e} x`, and conditioning a state on `e` - `NormedJordanAlgebra.luedersCondition` : the state conditioned on an effect. - `NormedJordanAlgebra.luedersCondition_isNormal` : conditioning preserves normality. +## iii. Table of contents + +- A. The Lüders operation +- B. Lüders operations of projections +- C. Lüders conditioning + +## iv. References + +* None. + -/ @[expose] public section @@ -41,6 +53,8 @@ open scoped JordanAlgebra variable {E : Type*} [IsJBOrderUnit E] [Nontrivial E] [IsQuadraticallyPositive E] +/-! ## A. The Lüders operation -/ + /-- The intrinsic positive square root selected by the JB continuous functional calculus for an effect. -/ noncomputable def effectSqrt (e : Effect E) : E := @@ -76,6 +90,8 @@ lemma luedersOperation_outcomeEffect (e : Effect E) : (Operation.outcomeEffect (luedersOperation e) : E) = e := by rw [Operation.coe_outcomeEffect, luedersOperation_apply, luedersMap_one] +/-! ## B. Lüders operations of projections -/ + omit [IsQuadraticallyPositive E] in /-- The CFC square root of a sharp Jordan event is the event itself. This is the point where the general effect operation recovers projection compression. -/ @@ -89,6 +105,8 @@ lemma luedersMap_toEffect_of_projection {p : E} (hp : IsJordanProjection p) : luedersMap hp.toEffect = quadRepPositiveLinearMap p := by rw [luedersMap, effectSqrt_toEffect_of_projection hp] +/-! ## C. Lüders conditioning -/ + /-- The normalized post-measurement state associated with an effect of nonzero probability. -/ noncomputable def luedersCondition (ω : 𝓢[ℝ, E]) (e : Effect E) (hmass : 0 < ω e) : 𝓢[ℝ, E] := diff --git a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Observable.lean b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Observable.lean index e28a07781c..d3f44e0e7e 100644 --- a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Observable.lean +++ b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Observable.lean @@ -15,6 +15,8 @@ public import PhyslibAlpha.ProbabilisticTheory.Algebra.Statistics # Moments, variance and Jordan projections +Moments and variance of observables, and Jordan projections as effects and compressions. + ## i. Overview The `n`-th moment of an observable `a` in a state `ω` is `ω(aⁿ)`, and the variance is `ω(a²) - @@ -36,6 +38,10 @@ orthogonal when `p ∘ q = 0`. A Jordan projection is an effect, and its quadrat - C. Projections as effects - D. Compression: `U_p` for an idempotent `p` +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Operator.lean b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Operator.lean index 75ff26dfa5..a749fe2cdc 100644 --- a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Operator.lean +++ b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Operator.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.ProbabilisticTheory.JordanOrderUnit.Basic # Powers, multiplication operators and the quadratic representation +Jordan powers, multiplication operators `L_a` and the quadratic representation `U_a`. + ## i. Overview Powers of an observable are `a⁰ = 1` and `aⁿ⁺¹ = a ∘ aⁿ`. The multiplication operator is `L_a b = a @@ -31,6 +33,10 @@ The Jordan identity says that `L_a` and `L_{a²}` commute. - D. The Jordan commutation law - E. The inner derivation `D_{a,b}` +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Power/Associative.lean b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Power/Associative.lean index d52f8e67d1..c1a210538a 100644 --- a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Power/Associative.lean +++ b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Power/Associative.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.ProbabilisticTheory.JordanOrderUnit.Operator # Power-associativity +Jordan algebras are power-associative: `aᵐ ∘ aⁿ = aᵐ⁺ⁿ`. + ## i. Overview The subalgebra generated by one element of a Jordan algebra is associative: `aᵐ ∘ aⁿ = aᵐ⁺ⁿ`. diff --git a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Power/Generated.lean b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Power/Generated.lean index 85a3582cc0..333b3c0ac1 100644 --- a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Power/Generated.lean +++ b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Power/Generated.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.ProbabilisticTheory.JordanOrderUnit.Power.GeneratedBy # Jordan subalgebras generated by a set +The smallest unital Jordan submodule containing a set, as a Jordan algebra in its own right. + ## i. Overview The Jordan subalgebra generated by a set of observables is the smallest unital submodule closed @@ -22,6 +24,16 @@ under the Jordan product containing it. For a single observable it is the span o - `JordanAlgebra.generatedBySet` : the generated subalgebra. - `JordanAlgebra.GeneratedBySet` : it as a Jordan algebra. +## iii. Table of contents + +- A. Jordan-closed submodules and generation +- B. The generated subalgebra as a type +- C. Generation by one observable + +## iv. References + +* None. + -/ @[expose] public section @@ -34,6 +46,8 @@ variable {E : Type*} [NonAssocCommRing E] [Module ℝ E] open scoped JordanAlgebra +/-! ## A. Jordan-closed submodules and generation -/ + /-- A real submodule is Jordan-closed when it contains the unit and is closed under the Jordan product. This is the closure notion used for arbitrary generated Jordan fragments. -/ def IsJordanSubmodule (J : Submodule ℝ E) : Prop := @@ -85,6 +99,8 @@ lemma generatedBySet_mono {s t : Set E} (hst : s ⊆ t) : generatedBySet_le (fun _ hx => subset_generatedBySet t (hst hx)) (isJordanSubmodule_generatedBySet t) +/-! ## B. The generated subalgebra as a type -/ + /-- The arbitrary generated Jordan fragment as its own carrier type. -/ abbrev GeneratedBySet (s : Set E) : Type _ := generatedBySet s @@ -167,6 +183,8 @@ lemma inclusion_mul (x y : GeneratedBySet s) : end GeneratedBySet +/-! ## C. Generation by one observable -/ + /-- The subalgebra generated by one observable is the span of its powers. -/ lemma generatedBySet_singleton_eq_generatedByOne (a : E) : generatedBySet ({a} : Set E) = generatedByOne a := by diff --git a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Power/GeneratedByOne.lean b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Power/GeneratedByOne.lean index 6fd21be00b..b9bdfd01ec 100644 --- a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Power/GeneratedByOne.lean +++ b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Power/GeneratedByOne.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.ProbabilisticTheory.JordanOrderUnit.Power.Associative # The subalgebra generated by one observable +The span `J[a]` of the powers of an observable contains `1` and is Jordan-closed. + ## i. Overview The span `J[a]` of the powers of an observable `a` contains `1` and `a` and is closed under the @@ -26,6 +28,10 @@ Jordan product. - A. The generated submodule - B. Closure under the Jordan product +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Power/Quadratic.lean b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Power/Quadratic.lean index 95267f1b5c..9b6f9b6c8a 100644 --- a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Power/Quadratic.lean +++ b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Power/Quadratic.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.ProbabilisticTheory.JordanOrderUnit.Power.Associative # Quadratic representations of powers +The quadratic representation on powers: `U_{aᵐ} aⁿ = a²ᵐ⁺ⁿ`. + ## i. Overview On powers the quadratic representation acts by `U_{aᵐ} aⁿ = a²ᵐ⁺ⁿ`. @@ -23,6 +25,10 @@ On powers the quadratic representation acts by `U_{aᵐ} aⁿ = a²ᵐ⁺ⁿ`. - A. Quadratic action on powers +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Power/Ring.lean b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Power/Ring.lean index c20eac87ff..002adbe9ff 100644 --- a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Power/Ring.lean +++ b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Power/Ring.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.ProbabilisticTheory.JordanOrderUnit.Power.GeneratedBy # `J[a]` is a commutative associative algebra +The span `J[a]` of the powers of `a` is a commutative associative unital real algebra. + ## i. Overview By power-associativity the Jordan product restricted to the span `J[a]` of the powers of `a` is @@ -29,6 +31,10 @@ of commutative algebras applies. - B. The commutative ring structure - C. The `ℝ`-algebra structure and inclusion +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/ProjectionResolution.lean b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/ProjectionResolution.lean index 560d643916..49c816ff2e 100644 --- a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/ProjectionResolution.lean +++ b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/ProjectionResolution.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.ProbabilisticTheory.JordanOrderUnit.JB.Basic # Projection resolutions +Projection resolutions: projection-valued effect measures and their bounded Borel calculus. + ## i. Overview A projection resolution is an effect-valued measure whose values are Jordan projections and whose @@ -29,6 +31,10 @@ functions against it gives a bounded Borel functional calculus. - A. Bounded Borel calculus +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Quadratic/Fundamental.lean b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Quadratic/Fundamental.lean index cb788c2719..f9a7e6a74c 100644 --- a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Quadratic/Fundamental.lean +++ b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Quadratic/Fundamental.lean @@ -13,6 +13,8 @@ public import Mathlib.Tactic.LinearCombination # The fundamental formula +The fundamental formula `U_{U_a b} = U_a U_b U_a`, proved from the Jordan identity alone. + ## i. Overview The quadratic representation satisfies the fundamental formula `U_{U_a b} = U_a U_b U_a`. The proof @@ -30,6 +32,10 @@ uses only the Jordan identity, through the inner derivations `[L_a, L_b]` and th - C. Normalizing the multiplication operator of a quadratic image - D. The inner derivation and the Jordan-triple-system fundamental identity +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Quadratic/Operational.lean b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Quadratic/Operational.lean index d30eed13d1..9ed46e4a60 100644 --- a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Quadratic/Operational.lean +++ b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Quadratic/Operational.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.ProbabilisticTheory.JordanOrderUnit.Quadratic.Fundame # Composing quadratic operations +The fundamental formula as an identity between the positive linear maps `U_a`. + ## i. Overview For quadratically positive Jordan algebras the positive maps `U_a` compose according to the @@ -22,6 +24,14 @@ fundamental formula. - `JordanAlgebra.quadRepPositiveLinearMap_fundamental` : the fundamental formula for the positive maps `U_a`. +## iii. Table of contents + +- A. Composition of positive quadratic operations + +## iv. References + +* None. + -/ @[expose] public section @@ -35,6 +45,8 @@ open scoped JordanAlgebra variable {E : Type*} [NonAssocCommRing E] [PartialOrder E] [IsOrderedAddMonoid E] [Module ℝ E] [SMulCommClass ℝ E E] [IsQuadraticallyPositive E] [IsCommJordan E] +/-! ## A. Composition of positive quadratic operations -/ + /-- Squaring the filtering observable composes its positive quadratic operation with itself. This is the bundled operational form of `U_(a²) = U_a ∘ U_a`. -/ lemma quadRepPositiveLinearMap_mul_self (a : E) : diff --git a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Quadratic/Order.lean b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Quadratic/Order.lean index 7826e1fddf..4dce0cb224 100644 --- a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Quadratic/Order.lean +++ b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Quadratic/Order.lean @@ -12,6 +12,8 @@ public import Mathlib.Algebra.Order.Module.PositiveLinearMap # Positive quadratic representations +Quadratically positive Jordan order-unit spaces, where each `U_a` is a positive linear map. + ## i. Overview The quadratic representation `U_a` is the Jordan version of the operation `b ↦ a b a`. A Jordan @@ -23,6 +25,15 @@ order-unit space is quadratically positive when every `U_a` preserves the positi - `JordanAlgebra.IsQuadraticallyPositive` : quadratically positive Jordan order-unit spaces. - `JordanAlgebra.quadRepPositiveLinearMap` : `U_a` as a positive linear map. +## iii. Table of contents + +- A. Quadratically positive Jordan algebras +- B. The positive linear map `U_a` + +## iv. References + +* None. + -/ @[expose] public section @@ -36,6 +47,8 @@ open scoped JordanAlgebra variable {E : Type*} [NonAssocCommRing E] [PartialOrder E] [IsOrderedAddMonoid E] [Module ℝ E] [SMulCommClass ℝ E E] +/-! ## A. Quadratically positive Jordan algebras -/ + /-- Every quadratic representation `U_a` preserves the positive cone. -/ class IsQuadraticallyPositive (E : Type*) [NonAssocCommRing E] [PartialOrder E] [IsOrderedAddMonoid E] [Module ℝ E] [SMulCommClass ℝ E E] : Prop where @@ -47,6 +60,8 @@ variable [IsQuadraticallyPositive E] lemma quadRep_nonneg (a : E) {b : E} (hb : 0 ≤ b) : 0 ≤ U a b := IsQuadraticallyPositive.quadRep_nonneg a hb +/-! ## B. The positive linear map `U_a` -/ + /-- The quadratic representation as a bundled positive linear operation. -/ def quadRepPositiveLinearMap (a : E) : E →ₚ[ℝ] E := PositiveLinearMap.mk₀ (U a) fun _ hb => quadRep_nonneg a hb diff --git a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Quadratic/Projection.lean b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Quadratic/Projection.lean index ac6b29af61..0028fe8116 100644 --- a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Quadratic/Projection.lean +++ b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Quadratic/Projection.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.ProbabilisticTheory.JordanOrderUnit.Quadratic.Fundame # Peirce decomposition +The Peirce decomposition for a Jordan projection `p`; `U_p` projects onto the `1`-component. + ## i. Overview For a Jordan projection `p` every observable splits into the Peirce components where `L_p` acts by @@ -31,6 +33,10 @@ For a Jordan projection `p` every observable splits into the Peirce components w - A. The Peirce polynomial - B. The Peirce-`1` compression +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Quadratic/Triple.lean b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Quadratic/Triple.lean index 84be6525fd..a60e02255e 100644 --- a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Quadratic/Triple.lean +++ b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/Quadratic/Triple.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.ProbabilisticTheory.JordanOrderUnit.Operator # The Jordan triple product +The Jordan triple product `{a, b, c}`: symmetry, linearity and the diagonal `{a, b, a} = U_a b`. + ## i. Overview The Jordan triple product `{a, b, c} = a ∘ (b ∘ c) + c ∘ (b ∘ a) - (a ∘ c) ∘ b` is the polarization @@ -21,6 +23,15 @@ of the quadratic representation: `{a, b, a} = U_a b`. - `JordanAlgebra.jordanTriple` : the triple product. - `JordanAlgebra.jordanTriple_diag` : `{a, b, a} = U_a b`. +## iii. Table of contents + +- A. The triple product +- B. Symmetry, diagonal and linearity + +## iv. References + +* None. + -/ @[expose] public section @@ -33,6 +44,8 @@ variable {E : Type*} [NonAssocCommRing E] [Module ℝ E] [SMulCommClass ℝ E E] open scoped JordanAlgebra +/-! ## A. The triple product -/ + /-- The Jordan triple product, written directly to retain a computable algebraic definition. -/ def jordanTriple (a b c : E) : E := a * (b * c) + c * (b * a) - (a * c) * b @@ -49,6 +62,8 @@ lemma quadRepPolar_eq_two_smul_jordanTriple (a b c : E) : quadRepPolar a c b = (2 : ℝ) • jordanTriple a b c := by rw [quadRepPolar_apply, jordanTriple, mul_comm c b, mul_comm a b] +/-! ## B. Symmetry, diagonal and linearity -/ + omit [Module ℝ E] [SMulCommClass ℝ E E] in /-- The Jordan triple product is symmetric in its outer variables. -/ lemma jordanTriple_outer_comm (a b c : E) : jordanTriple a b c = jordanTriple c b a := by diff --git a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/StructureAlgebra.lean b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/StructureAlgebra.lean index f0c4eb8aa6..f5e638006a 100644 --- a/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/StructureAlgebra.lean +++ b/PhyslibAlpha/ProbabilisticTheory/JordanOrderUnit/StructureAlgebra.lean @@ -13,6 +13,8 @@ public import Mathlib.Algebra.Lie.Basic # Jordan derivations +Jordan derivations, their commutator Lie algebra and the inner derivations `[L_a, L_b]`. + ## i. Overview A Jordan derivation is a linear map `D` with `D (a ∘ b) = D a ∘ b + a ∘ D b`, an infinitesimal @@ -24,7 +26,14 @@ derivations. - `JordanAlgebra.JordanDerivation` : Jordan derivations. - `JordanAlgebra.inner` : inner derivations. -## iii. References +## iii. Table of contents + +- A. Jordan derivations +- B. The vector space of derivations +- C. The commutator Lie algebra +- D. Inner derivations + +## iv. References - Adapted from Cobord, `Jordan/StructureAlgebra.lean`. @@ -39,6 +48,8 @@ namespace JordanAlgebra variable {E : Type*} [NonAssocCommRing E] [Module ℝ E] [SMulCommClass ℝ E E] [IsScalarTower ℝ E E] +/-! ## A. Jordan derivations -/ + /-- A bundled real Jordan derivation. -/ structure JordanDerivation (E : Type*) [NonAssocCommRing E] [Module ℝ E] where /-- The underlying real-linear infinitesimal generator. -/ @@ -72,6 +83,8 @@ def submodule : Submodule ℝ (E →ₗ[ℝ] E) where add_mem' hD hE := IsDerivation.add hD hE smul_mem' c _ hD := IsDerivation.smul c hD +/-! ## B. The vector space of derivations -/ + /-- The zero infinitesimal symmetry. -/ instance : Zero (JordanDerivation E) := ⟨⟨0, IsDerivation.zero⟩⟩ @@ -135,6 +148,8 @@ instance : Module ℝ (JordanDerivation E) where exact add_smul c d (D.toLinearMap x) zero_smul D := by ext x; simp only [smul_apply, zero_smul, zero_apply] +/-! ## C. The commutator Lie algebra -/ + /-- The commutator of two derivations is again a derivation. -/ def comm (D₁ D₂ : JordanDerivation E) : JordanDerivation E where toLinearMap := D₁.toLinearMap.comp D₂.toLinearMap - D₂.toLinearMap.comp D₁.toLinearMap @@ -185,6 +200,8 @@ instance : LieAlgebra ℝ (JordanDerivation E) where end JordanDerivation +/-! ## D. Inner derivations -/ + section Inner variable [IsCommJordan E] diff --git a/PhyslibAlpha/ProbabilisticTheory/Measurement/Basic.lean b/PhyslibAlpha/ProbabilisticTheory/Measurement/Basic.lean index bfc871f83b..f2b58c7ab2 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Measurement/Basic.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Measurement/Basic.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.ProbabilisticTheory.Measurement.Pushforward /-! # Measurements +Measurements as normal channels from the classical outcome system, and their Born laws. + ## i. Overview A measurement with outcomes in `Ω` turns the system into a classical record: its outcome. So a @@ -41,6 +43,10 @@ the Born law. Measuring the outcome of a classical system itself is the identity - B. The Born law - C. Measuring after a channel +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/Measurement/Binary.lean b/PhyslibAlpha/ProbabilisticTheory/Measurement/Binary.lean index b60d297e95..288891d8a3 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Measurement/Binary.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Measurement/Binary.lean @@ -11,6 +11,8 @@ public import Mathlib.MeasureTheory.MeasurableSpace.Instances /-! # Binary measurements +The yes/no measurement defined by an effect of an Archimedean system. + ## i. Overview Every effect of an Archimedean system defines a yes/no measurement: the outcome `true` has the @@ -24,6 +26,10 @@ effect itself, the outcome `false` its complement. - A. Binary measurements +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/Measurement/BornRule.lean b/PhyslibAlpha/ProbabilisticTheory/Measurement/BornRule.lean index 7419af3a4a..6f50da3f7d 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Measurement/BornRule.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Measurement/BornRule.lean @@ -14,6 +14,8 @@ public import Mathlib.Topology.Order.MonotoneConvergence /-! # The Born rule for effect-valued measures +An effect-valued measure sends each normal state to a probability law on its outcomes. + ## i. Overview A state is a normal channel `ω : 𝓢[ℝ, E]`, so it pushes an effect-valued measure `μ` on `E` @@ -33,6 +35,10 @@ So `μ` sends every normal state to a probability distribution over its outcomes - B. The Born rule - C. Relabeling outcomes +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/Measurement/BoundedIntegral.lean b/PhyslibAlpha/ProbabilisticTheory/Measurement/BoundedIntegral.lean index b21c1d1189..c05e776812 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Measurement/BoundedIntegral.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Measurement/BoundedIntegral.lean @@ -19,6 +19,8 @@ public import Mathlib.Analysis.Normed.Group.Uniform # Integrating bounded functions against an effect-valued measure +The integral of bounded measurable functions against an effect-valued measure. + ## i. Overview If the observables are complete for the order-unit norm, the integral of simple functions extends to @@ -46,6 +48,10 @@ on simple functions. - C. Comparing the simple integrals of two approximations - D. The integral, via completeness +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/Measurement/BoundedScalarization.lean b/PhyslibAlpha/ProbabilisticTheory/Measurement/BoundedScalarization.lean index 58232cda8c..3ce744d37f 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Measurement/BoundedScalarization.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Measurement/BoundedScalarization.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.ProbabilisticTheory.Measurement.BoundedIntegral # Channels and integrals +Normal channels commute with integration against effect-valued measures. + ## i. Overview A normal channel maps an effect-valued measure to an effect-valued measure, and it commutes with @@ -22,6 +24,15 @@ integration of bounded functions. - `EffectValuedMeasure.map_simpleIntegral` : for simple functions. - `EffectValuedMeasure.map_integral` : for bounded measurable functions. +## iii. Table of contents + +- A. Simple integrals +- B. Bounded integrals + +## iv. References + +* None. + -/ @[expose] public section @@ -30,6 +41,8 @@ namespace ProbabilisticTheory namespace EffectValuedMeasure +/-! ## A. Simple integrals -/ + section SimpleNaturality variable {Ω E F : Type*} [MeasurableSpace Ω] [OrderUnitSpace E] [OrderUnitSpace F] @@ -42,6 +55,8 @@ lemma map_simpleIntegral (μ : EffectValuedMeasure Ω E) (φ : Channel E F) (hφ end SimpleNaturality +/-! ## B. Bounded integrals -/ + section BoundedNaturality variable {Ω E F : Type*} [MeasurableSpace Ω] [ArchimedeanOrderUnitSpace E] diff --git a/PhyslibAlpha/ProbabilisticTheory/Measurement/Compatibility.lean b/PhyslibAlpha/ProbabilisticTheory/Measurement/Compatibility.lean index 036c613d42..3ea2f0cefe 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Measurement/Compatibility.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Measurement/Compatibility.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.ProbabilisticTheory.Measurement.Postprocessing /-! # Compatibility of measurements +Compatible and jointly measurable measurements, with an order criterion for binary ones. + ## i. Overview Two measurements are compatible when both can be obtained from one measurement by classical @@ -37,6 +39,10 @@ and below `e` and `f`: `g` is the effect of both outcomes being `true`. - B. Joint measurements - C. Binary compatibility +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/Measurement/EffectValuedMeasure.lean b/PhyslibAlpha/ProbabilisticTheory/Measurement/EffectValuedMeasure.lean index 959d5580ef..5b47badd47 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Measurement/EffectValuedMeasure.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Measurement/EffectValuedMeasure.lean @@ -12,6 +12,8 @@ public import Mathlib.Algebra.Order.BigOperators.Group.Finset /-! # Effect-valued measures +Effect-valued measures: countably additive assignments of effects to events. + ## i. Overview An effect-valued measure with outcomes in `Ω` assigns to each event, a measurable set of outcomes, @@ -39,6 +41,10 @@ adding up to `1`, one for each outcome. - D. Finite additivity and atomic reconstruction - E. Relabeling outcomes +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/Measurement/Finite.lean b/PhyslibAlpha/ProbabilisticTheory/Measurement/Finite.lean index 42b98ace8f..43fdbd9979 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Measurement/Finite.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Measurement/Finite.lean @@ -10,6 +10,8 @@ public import PhyslibAlpha.ProbabilisticTheory.Measurement.Basic /-! # Measurements with finitely many outcomes +Measurements with finitely many outcomes are the families of effects summing to `1`. + ## i. Overview On a finite discrete outcome space, every observable of the outcome is a combination of the @@ -35,6 +37,10 @@ system is Archimedean. - B. Normality is automatic - C. Measurements from their outcome effects +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/Measurement/Instrument.lean b/PhyslibAlpha/ProbabilisticTheory/Measurement/Instrument.lean index b277307d92..ddd45a6a93 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Measurement/Instrument.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Measurement/Instrument.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.ProbabilisticTheory.Channel.Operation # Instruments +Finite-outcome instruments, their induced measurements and post-measurement states. + ## i. Overview An instrument with finitely many outcomes describes both the outcome probabilities and the state @@ -25,6 +27,16 @@ outcome of nonzero probability gives the post-measurement state. - `Instrument.measurement` : the underlying measurement. - `Instrument.conditionalState` : the post-measurement state. +## iii. Table of contents + +- A. Instruments +- B. The induced measurement +- C. Conditional states + +## iv. References + +* None. + -/ @[expose] public section @@ -33,6 +45,8 @@ namespace ProbabilisticTheory variable {E ι : Type*} [ArchimedeanOrderUnitSpace E] [Fintype ι] +/-! ## A. Instruments -/ + /-- A finite-outcome instrument: an operation for each outcome, whose images of the certain event exhaust it. The instrument loses no probability overall, even though a single operation may. -/ structure Instrument (E : Type*) [OrderUnitSpace E] (ι : Type*) [Fintype ι] where @@ -43,6 +57,8 @@ structure Instrument (E : Type*) [OrderUnitSpace E] (ι : Type*) [Fintype ι] wh namespace Instrument +/-! ## B. The induced measurement -/ + section Measurement variable [MeasurableSpace ι] [MeasurableSingletonClass ι] @@ -60,6 +76,8 @@ lemma coe_measurement_effects (𝓘 : Instrument E ι) (i : ι) : end Measurement +/-! ## C. Conditional states -/ + /-- The post-measurement (conditional) state after outcome `i`, given a prior state `ω` for which that outcome has nonzero probability: apply the operation, then renormalize by the outcome's probability, so the certain event is again sent to `1`. -/ diff --git a/PhyslibAlpha/ProbabilisticTheory/Measurement/Integral.lean b/PhyslibAlpha/ProbabilisticTheory/Measurement/Integral.lean index 4df2bbd667..806284faec 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Measurement/Integral.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Measurement/Integral.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.ProbabilisticTheory.Measurement.EffectValuedMeasure # Integrating simple functions against an effect-valued measure +The integral of simple functions against an effect-valued measure, linear and positive. + ## i. Overview An effect-valued measure `μ` assigns an effect to every event. Integrating a simple function `∑ᵢ cᵢ @@ -33,6 +35,10 @@ same value, by passing to their common refinement. The integral is linear and po - B. Finite additivity - C. The integral of a simple function +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/Measurement/Postprocessing.lean b/PhyslibAlpha/ProbabilisticTheory/Measurement/Postprocessing.lean index 8f32d813d6..9f896082ff 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Measurement/Postprocessing.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Measurement/Postprocessing.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.Mathematics.Probability.Kernel.Factorization /-! # Post-processing of measurements +Post-processing of measurements through Markov kernels, the information preorder, and Born laws. + ## i. Overview A measurement `M` is a post-processing of a measurement `N` when `M` can be simulated by performing @@ -34,6 +36,10 @@ Born law of `M` is the Born law of `N` composed with the kernel. - B. Relabeling outcomes - C. Born laws +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/Measurement/Pushforward.lean b/PhyslibAlpha/ProbabilisticTheory/Measurement/Pushforward.lean index 719daad914..1f30139363 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Measurement/Pushforward.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Measurement/Pushforward.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.ProbabilisticTheory.Measurement.EffectValuedMeasure /-! # Pushing an effect-valued measure forward along a channel +Pushing an effect-valued measure forward along a normal channel. + ## i. Overview A channel sends effects to effects. Applying a normal channel `φ : Channel E F` to every effect of @@ -25,6 +27,10 @@ an effect-valued measure `μ` on `E` therefore gives one, `μ.map φ`, on `F`, w - A. Channels send effects to effects - B. Pushing an effect-valued measure forward +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/OrderUnit/Bidual.lean b/PhyslibAlpha/ProbabilisticTheory/OrderUnit/Bidual.lean index 19b12947b1..5dcc593061 100644 --- a/PhyslibAlpha/ProbabilisticTheory/OrderUnit/Bidual.lean +++ b/PhyslibAlpha/ProbabilisticTheory/OrderUnit/Bidual.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.ProbabilisticTheory.OrderUnit.Lattice /-! # The bidual of a system +The bidual of a system is an Archimedean order-unit space, and a lattice for classical systems. + ## i. Overview An element of the bidual of a system assigns to every positive functional a value, additively and @@ -30,6 +32,10 @@ the observables of the bidual form a lattice. - A. The unit of the bidual - B. The bidual of a classical system +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/OrderUnit/Interpolation.lean b/PhyslibAlpha/ProbabilisticTheory/OrderUnit/Interpolation.lean index c027cdd262..9dd4d3f3d7 100644 --- a/PhyslibAlpha/ProbabilisticTheory/OrderUnit/Interpolation.lean +++ b/PhyslibAlpha/ProbabilisticTheory/OrderUnit/Interpolation.lean @@ -13,6 +13,8 @@ public import Mathlib.Analysis.SpecificLimits.Basic /-! # Interpolation of complete observables +Exact interpolants and the Riesz decomposition for complete observables with a lattice dual cone. + ## i. Overview Given finitely many lower observables `a i` below finitely many upper observables `b j`, an @@ -33,6 +35,10 @@ exact interpolants exist. Then the observables have the Riesz decomposition. - A. Closed order intervals - B. Exact interpolants +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/OrderUnit/Lattice.lean b/PhyslibAlpha/ProbabilisticTheory/OrderUnit/Lattice.lean index 71176f1eae..f8d3b7f385 100644 --- a/PhyslibAlpha/ProbabilisticTheory/OrderUnit/Lattice.lean +++ b/PhyslibAlpha/ProbabilisticTheory/OrderUnit/Lattice.lean @@ -14,6 +14,8 @@ public import Mathlib.Algebra.Order.Module.PositiveLinearMap /-! # Lattice-ordered observables +Order-unit lattices: Archimedean order-unit spaces whose order is a lattice. + ## i. Overview An order-unit lattice is a space of observables in which any two observables have a least upper @@ -33,6 +35,10 @@ two pieces, one below each summand, and every observable is close to a step func - A. Order-unit lattices +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/OrderUnit/MonotoneComplete.lean b/PhyslibAlpha/ProbabilisticTheory/OrderUnit/MonotoneComplete.lean index 104a227eb0..a329bbe1ce 100644 --- a/PhyslibAlpha/ProbabilisticTheory/OrderUnit/MonotoneComplete.lean +++ b/PhyslibAlpha/ProbabilisticTheory/OrderUnit/MonotoneComplete.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.ProbabilisticTheory.OrderUnit.PositiveDual # Monotone-complete ordered spaces +Monotone-complete orders and chosen suprema of bounded directed sets and increasing sequences. + ## i. Overview An ordered space is monotone complete when every nonempty directed set that is bounded above has a @@ -22,12 +24,23 @@ least upper bound. - `MonotoneCompleteOrder.directedSup` : the supremum of a bounded directed set. - `MonotoneCompleteOrder.rangeSup` : the supremum of a bounded increasing sequence. +## iii. Table of contents + +- A. Monotone-complete orders +- B. Chosen suprema + +## iv. References + +* None. + -/ @[expose] public section namespace ProbabilisticTheory +/-! ## A. Monotone-complete orders -/ + /-- An order is monotone complete when every nonempty upward-directed bounded set has a supremum. No lattice operations are bundled: ordered vector spaces need not be lattices. -/ class MonotoneCompleteOrder (E : Type*) [Preorder E] : Prop where @@ -35,6 +48,8 @@ class MonotoneCompleteOrder (E : Type*) [Preorder E] : Prop where exists_isLUB (D : Set E) : D.Nonempty → DirectedOn (· ≤ ·) D → BddAbove D → ∃ x : E, IsLUB D x +/-! ## B. Chosen suprema -/ + namespace MonotoneCompleteOrder variable {E : Type*} [Preorder E] [MonotoneCompleteOrder E] diff --git a/PhyslibAlpha/ProbabilisticTheory/OrderUnit/Normed.lean b/PhyslibAlpha/ProbabilisticTheory/OrderUnit/Normed.lean index f8ff1da6a5..db9f83bd37 100644 --- a/PhyslibAlpha/ProbabilisticTheory/OrderUnit/Normed.lean +++ b/PhyslibAlpha/ProbabilisticTheory/OrderUnit/Normed.lean @@ -12,6 +12,8 @@ public import Mathlib.Analysis.Normed.Operator.LinearIsometry /-! # The canonical normed copy of an order-unit space +The type synonym `WithOrderUnitNorm E` with the canonical order-unit norm; channels contract. + ## i. Overview An Archimedean order-unit space already has a canonical order-unit norm, but the underlying type @@ -29,6 +31,11 @@ carries the canonical norm without changing the structures on `E` itself. - A. The normed copy - B. The real scalar case - C. Contractivity of channels + +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/OrderUnit/PositiveDual.lean b/PhyslibAlpha/ProbabilisticTheory/OrderUnit/PositiveDual.lean index 48ed21bb49..7e83926caa 100644 --- a/PhyslibAlpha/ProbabilisticTheory/OrderUnit/PositiveDual.lean +++ b/PhyslibAlpha/ProbabilisticTheory/OrderUnit/PositiveDual.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.Mathematics.Order.PositiveDual.Basic # The unit of an order-unit space as an order unit +The unit of an order-unit space is an order unit, so weight-zero positive functionals vanish. + ## i. Overview The unit of an order-unit space is an order unit of the underlying ordered vector space, so the @@ -29,6 +31,10 @@ functional that vanishes on the unit vanishes everywhere. - A. The unit as an order unit - B. Positive functionals +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/Representation/Covariance/Basic.lean b/PhyslibAlpha/ProbabilisticTheory/Representation/Covariance/Basic.lean index 887ef4b2a3..737787c0a3 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Representation/Covariance/Basic.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Representation/Covariance/Basic.lean @@ -15,6 +15,8 @@ public import Mathlib.MeasureTheory.MeasurableSpace.Basic # Covariant measurements and channels +Symmetries acting on effects, measurable actions on outcomes, covariant measures and channels. + ## i. Overview A measurement is covariant under a symmetry group when transforming the outcome transforms the @@ -32,6 +34,10 @@ bijections, and a channel is covariant when it intertwines two symmetry actions. - A. Covariant channels: the general intertwiner picture +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/Representation/Covariance/Outcome.lean b/PhyslibAlpha/ProbabilisticTheory/Representation/Covariance/Outcome.lean index c04093fab7..276d16dbdd 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Representation/Covariance/Outcome.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Representation/Covariance/Outcome.lean @@ -13,6 +13,8 @@ public import Mathlib.Algebra.Group.Action.Prod # Covariance of measurements under an action on the outcomes +Covariance of measurements under a group action on outcomes, and its preservation. + ## i. Overview A group `G` acting measurably on an outcome space `Ω` acts on the classical system of `Ω` by @@ -36,6 +38,10 @@ measurement, for the diagonal action on a product of outcome spaces, are covaria - A. The induced action on the classical system - B. Covariant measurements +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/Representation/PVM.lean b/PhyslibAlpha/ProbabilisticTheory/Representation/PVM.lean index 1f7290d6ee..87a0dfda76 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Representation/PVM.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Representation/PVM.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.ProbabilisticTheory.CStarAlgebra.SharpEffect # POVMs and PVMs +POVMs as effect-valued measures, and PVMs as POVMs whose values are sharp effects. + ## i. Overview For the self-adjoint part of an operator algebra, an effect-valued measure is a POVM. A PVM is a @@ -23,12 +25,24 @@ POVM whose values are sharp effects. A POVM whose values are projections is a PV - `POVM.IsPVM`, `PVM` : projection-valued measures. - `POVM.isPVM_of_forall_isIdempotentElem` : a POVM of projections is a PVM. +## iii. Table of contents + +- A. POVMs +- B. POVMs of projections +- C. PVMs + +## iv. References + +* None. + -/ @[expose] public section namespace ProbabilisticTheory +/-! ## A. POVMs -/ + /-- A positive-operator-valued measure: the physics name for `EffectValuedMeasure`. -/ abbrev POVM (Ω E : Type*) [MeasurableSpace Ω] [OrderUnitSpace E] := EffectValuedMeasure Ω E @@ -49,6 +63,8 @@ lemma isSharp_apply_univ (μ : POVM Ω E) : Effect.IsSharp (μ Set.univ Measurab end POVM +/-! ## B. POVMs of projections -/ + section CStarAlgebra variable {A : Type*} [CStarAlgebra A] [PartialOrder A] [StarOrderedRing A] @@ -62,6 +78,8 @@ lemma POVM.isPVM_of_forall_isIdempotentElem {Ω : Type*} [MeasurableSpace Ω] end CStarAlgebra +/-! ## C. PVMs -/ + /-- Projection-valued measures: POVMs whose values are sharp effects. -/ def PVM (Ω E : Type*) [MeasurableSpace Ω] [OrderUnitSpace E] := {μ : POVM Ω E // μ.IsPVM} diff --git a/PhyslibAlpha/ProbabilisticTheory/Representation/Schur.lean b/PhyslibAlpha/ProbabilisticTheory/Representation/Schur.lean index fcbee0afd8..042331759f 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Representation/Schur.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Representation/Schur.lean @@ -12,6 +12,8 @@ public import Mathlib.Algebra.DirectSum.Module # Schur's lemma for covariant channels +Schur's lemma as a hypothesis: equivariant maps and covariant channels are scalar on blocks. + ## i. Overview If the observables split into invariant blocks `E = ⨁ᵢ Wᵢ` on each of which every equivariant map @@ -35,6 +37,10 @@ The Schur property of a block is therefore a hypothesis, `IsSchurBlock`. - B. The multiplicity-free classification theorem - C. Covariant channels +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/StarAlgebra/Jordan.lean b/PhyslibAlpha/ProbabilisticTheory/StarAlgebra/Jordan.lean index d00bb77e5e..e6dec37a45 100644 --- a/PhyslibAlpha/ProbabilisticTheory/StarAlgebra/Jordan.lean +++ b/PhyslibAlpha/ProbabilisticTheory/StarAlgebra/Jordan.lean @@ -13,6 +13,8 @@ public import PhyslibAlpha.ProbabilisticTheory.StarAlgebra.Observable # The Jordan product of observables +The Jordan product ½ (a b + b a) makes the self-adjoint elements a commutative Jordan ring. + ## i. Overview The product of two self-adjoint elements is self-adjoint only when they commute, but the symmetrized @@ -26,6 +28,19 @@ A`, since for commutative `A` Mathlib already gives `selfAdjoint A` the ordinary - `selfAdjoint.jordanMul_comm` : the Jordan product is commutative. - `selfAdjoint.jordanMul_jordanMul_jordanMul_self` : the Jordan identity. +## iii. Table of contents + +- A. The anticommutator +- B. The normalized Jordan product +- C. Additivity, scalars and the Jordan identity +- D. The Jordan product as a multiplication +- E. The Jordan ring structure +- F. The Jordan product of observables + +## iv. References + +* None. + -/ @[expose] public section @@ -35,6 +50,8 @@ open ProbabilisticTheory variable {A : Type*} [Ring A] [StarRing A] [Module ℝ A] [StarModule ℝ A] +/-! ## A. The anticommutator -/ + /-- The unnormalized anticommutator, retained as a low-level formula while `jordanMul` is the canonical normalized Jordan product. -/ def anticommutator (a b : selfAdjoint A) : selfAdjoint A := @@ -47,6 +64,8 @@ lemma coe_anticommutator (a b : selfAdjoint A) : ((anticommutator a b : selfAdjoint A) : A) = (a : A) * (b : A) + (b : A) * (a : A) := rfl +/-! ## B. The normalized Jordan product -/ + /-- The normalized Jordan product of two self-adjoint elements, `a ∘ b := ½(ab + ba)`. It is self-adjoint regardless of whether `a` and `b` commute, since `star (a * b + b * a) = star b * star a + star a * star b = b * a + a * b`. -/ @@ -76,6 +95,8 @@ lemma one_jordanMul (a : selfAdjoint A) : jordanMul 1 a = a := by lemma jordanMul_one (a : selfAdjoint A) : jordanMul a 1 = a := by rw [jordanMul_comm, one_jordanMul] +/-! ## C. Additivity, scalars and the Jordan identity -/ + /-- The Jordan product distributes over addition in its right argument. -/ lemma jordanMul_add_right (a b c : selfAdjoint A) : jordanMul a (b + c) = jordanMul a b + jordanMul a c := by @@ -119,6 +140,8 @@ lemma jordanMul_jordanMul_jordanMul_self [SMulCommClass ℝ A A] [IsScalarTower congr 1 exact anticommutator_identity a b +/-! ## D. The Jordan product as a multiplication -/ + /-- The Jordan product as a scoped multiplication on `selfAdjoint A`. -/ noncomputable scoped instance instMul : Mul (selfAdjoint A) := ⟨jordanMul⟩ @@ -154,6 +177,8 @@ lemma jordanMul_jordanMul_right [SMulCommClass ℝ A A] [IsScalarTower ℝ A A] ((2 : ℝ)⁻¹ * (2 : ℝ)⁻¹) • anticommutator a (anticommutator b x) := by simp only [jordanMul, anticommutator_smul_right, smul_smul] +/-! ## E. The Jordan ring structure -/ + section AlgebraStructure variable [SMulCommClass ℝ A A] [IsScalarTower ℝ A A] @@ -216,6 +241,8 @@ end AlgebraStructure end selfAdjoint +/-! ## F. The Jordan product of observables -/ + namespace ProbabilisticTheory /-- The Jordan product of observables. -/ diff --git a/PhyslibAlpha/ProbabilisticTheory/StarAlgebra/Lie.lean b/PhyslibAlpha/ProbabilisticTheory/StarAlgebra/Lie.lean index 4f52b83199..9bd84a95e7 100644 --- a/PhyslibAlpha/ProbabilisticTheory/StarAlgebra/Lie.lean +++ b/PhyslibAlpha/ProbabilisticTheory/StarAlgebra/Lie.lean @@ -14,6 +14,8 @@ public import PhyslibAlpha.ProbabilisticTheory.StarAlgebra.Jordan # The Lie bracket of observables +The Lie bracket -(i / 2)(a b - b a) makes the observables a real Lie algebra. + ## i. Overview The commutator of two self-adjoint elements is skew-adjoint, so `⁅a, b⁆ = -(i / 2)(a b - b a)` is @@ -36,6 +38,10 @@ i ⁅a, b⁆`, and it makes the observables a real Lie algebra. The bracket is a - D. Real Lie algebra - E. Elementary identities +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/StarAlgebra/Observable.lean b/PhyslibAlpha/ProbabilisticTheory/StarAlgebra/Observable.lean index 9b2637533d..501b3757a2 100644 --- a/PhyslibAlpha/ProbabilisticTheory/StarAlgebra/Observable.lean +++ b/PhyslibAlpha/ProbabilisticTheory/StarAlgebra/Observable.lean @@ -14,6 +14,8 @@ public import PhyslibAlpha.ProbabilisticTheory.State.Basic # Observables +Observables as self-adjoint elements, and the real state on observables of a complex state. + ## i. Overview An observable is a self-adjoint element of a space with an involution. A complex state on the space @@ -24,12 +26,24 @@ restricts to a real state on its observables, the expectation-value functional. - `Observable`, `PositiveObservable` : observables and positive observables. - `UnitalPositiveLinearMap.onObservables` : the real state on observables of a complex state. +## iii. Table of contents + +- A. Observables +- B. The real state on observables +- C. Examples: states on observables + +## iv. References + +* None. + -/ @[expose] public section namespace ProbabilisticTheory +/-! ## A. Observables -/ + /-- An observable in a space with an additive involution. -/ abbrev Observable (A : Type*) [AddGroup A] [StarAddMonoid A] := selfAdjoint A @@ -37,6 +51,8 @@ abbrev Observable (A : Type*) [AddGroup A] [StarAddMonoid A] := selfAdjoint A abbrev PositiveObservable (A : Type*) [AddGroup A] [StarAddMonoid A] [PartialOrder A] := {a : Observable A // 0 ≤ (a : A)} +/-! ## B. The real state on observables -/ + open scoped ComplexOrder namespace UnitalPositiveLinearMap @@ -57,6 +73,8 @@ lemma coe_onObservables_apply (ω : 𝓢[ℂ, A]) (a : Observable A) : end UnitalPositiveLinearMap +/-! ## C. Examples: states on observables -/ + section OrderUnit variable {E : Type*} [OrderUnitSpace E] [StarAddMonoid E] [StarModule ℝ E] diff --git a/PhyslibAlpha/ProbabilisticTheory/StarAlgebra/Restrict.lean b/PhyslibAlpha/ProbabilisticTheory/StarAlgebra/Restrict.lean index f49fa24187..b4b2881363 100644 --- a/PhyslibAlpha/ProbabilisticTheory/StarAlgebra/Restrict.lean +++ b/PhyslibAlpha/ProbabilisticTheory/StarAlgebra/Restrict.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.ProbabilisticTheory.StarAlgebra.SelfAdjoint # Restricting positive maps +Restricting positive linear maps to submodules and to the self-adjoint elements. + ## i. Overview A positive linear map restricts to submodules, in particular to the self-adjoint elements, where a @@ -22,12 +24,24 @@ complex state becomes a real one. - `PositiveLinearMap.restrict`, `UnitalPositiveLinearMap.restrict` : restriction to a submodule. - `UnitalPositiveLinearMap.restrictSA` : restriction to self-adjoint elements. +## iii. Table of contents + +- A. Restriction to submodules +- B. Positive maps on self-adjoint elements +- C. Unital positive maps on self-adjoint elements + +## iv. References + +* None. + -/ @[expose] public section namespace ProbabilisticTheory +/-! ## A. Restriction to submodules -/ + section Restrict variable {R S E₁ E₂ : Type*} @@ -60,6 +74,8 @@ end Restrict end ProbabilisticTheory +/-! ## B. Positive maps on self-adjoint elements -/ + section SelfAdjoint open ProbabilisticTheory @@ -113,6 +129,8 @@ end PositiveLinearMap end SelfAdjoint +/-! ## C. Unital positive maps on self-adjoint elements -/ + namespace ProbabilisticTheory section SelfAdjoint diff --git a/PhyslibAlpha/ProbabilisticTheory/StarAlgebra/SelfAdjoint.lean b/PhyslibAlpha/ProbabilisticTheory/StarAlgebra/SelfAdjoint.lean index b72725c05a..e9b90b61da 100644 --- a/PhyslibAlpha/ProbabilisticTheory/StarAlgebra/SelfAdjoint.lean +++ b/PhyslibAlpha/ProbabilisticTheory/StarAlgebra/SelfAdjoint.lean @@ -14,6 +14,8 @@ public import PhyslibAlpha.ProbabilisticTheory.Channel.Basic # Self-adjoint elements +Relating the predicate, subgroup and submodule descriptions of self-adjoint elements. + ## i. Overview Mathlib describes self-adjointness by the predicate `IsSelfAdjoint`, the additive subgroup @@ -24,6 +26,17 @@ Mathlib describes self-adjointness by the predicate `IsSelfAdjoint`, the additiv - `selfAdjoint.submoduleEquiv` : the subgroup and the submodule of self-adjoint elements agree. - `selfAdjoint.submoduleUPLM` : the corresponding channel. +## iii. Table of contents + +- A. Membership in the self-adjoint part +- B. Forgetting the submodule structure +- C. The unit and unital maps +- D. Self-adjoint complex numbers + +## iv. References + +* None. + -/ @[expose] public section @@ -31,6 +44,8 @@ Mathlib describes self-adjointness by the predicate `IsSelfAdjoint`, the additiv namespace selfAdjoint open ProbabilisticTheory +/-! ## A. Membership in the self-adjoint part -/ + @[simp] lemma mem_selfAdjoint_iff_isSelfAdjoint {R : Type*} [AddGroup R] [StarAddMonoid R] (x : R) : x ∈ selfAdjoint R ↔ IsSelfAdjoint x := isSelfAdjoint_iff.trans selfAdjoint.mem_iff.symm @@ -42,6 +57,8 @@ variable {R A : Type*} [Semiring R] [StarMul R] [TrivialStar R] lemma submodule_mem_iff {x : A} : (x ∈ submodule R A) ↔ (x ∈ selfAdjoint A) := by rfl +/-! ## B. Forgetting the submodule structure -/ + /-- The linear equivalence that forgets the `Submodule` structure on self-adjoint elements. -/ @[simps!] def submoduleEquiv : selfAdjoint.submodule R A ≃ₗ[R] selfAdjoint A where @@ -63,6 +80,8 @@ variable (R) in def submodulePLMSymm : selfAdjoint A →ₚ[R] submodule R A := { selfAdjoint.submoduleEquiv.symm.toLinearMap with monotone' a b hab := by simpa } +/-! ## C. The unit and unital maps -/ + variable {R A : Type*} [Semiring R] [StarMul R] [TrivialStar R] [Ring A] [StarRing A] [Module R A] [StarModule R A] @@ -90,6 +109,8 @@ def submoduleUPLMSymm : selfAdjoint A →ₚ₁[R] submodule R A := end selfAdjoint +/-! ## D. Self-adjoint complex numbers -/ + namespace ProbabilisticTheory open ComplexOrder diff --git a/PhyslibAlpha/ProbabilisticTheory/StarAlgebra/Statistics.lean b/PhyslibAlpha/ProbabilisticTheory/StarAlgebra/Statistics.lean index 7b3473a796..e296ee8204 100644 --- a/PhyslibAlpha/ProbabilisticTheory/StarAlgebra/Statistics.lean +++ b/PhyslibAlpha/ProbabilisticTheory/StarAlgebra/Statistics.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.ProbabilisticTheory.StarAlgebra.Jordan # Expectation, variance and covariance +Expectation values, centered observables, covariance and variance of observables in a state. + ## i. Overview A state assigns expectation values `ω⟨a⟩` to observables. Subtracting the expectation gives the @@ -33,6 +35,10 @@ this needs a norm, and positivity of the variance uses only that `star x * x ≥ - C. Reversing a product - D. Covariance and variance +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/StarAlgebra/Traciality.lean b/PhyslibAlpha/ProbabilisticTheory/StarAlgebra/Traciality.lean index d36dda52db..b57da1dcb4 100644 --- a/PhyslibAlpha/ProbabilisticTheory/StarAlgebra/Traciality.lean +++ b/PhyslibAlpha/ProbabilisticTheory/StarAlgebra/Traciality.lean @@ -13,6 +13,8 @@ public import PhyslibAlpha.ProbabilisticTheory.State.WeightEquivalence # Tracial states and weights +Tracial weights, tracial states and tracial complex-linear functionals. + ## i. Overview A state `ω` is tracial when `ω (a⋆ a) = ω (a a⋆)`. For a complex-linear functional this is @@ -25,12 +27,24 @@ equivalent to `f (a b) = f (b a)`. A finite tracial weight gives a tracial state - `LinearMap.isTracial_iff_star_mul_self_eq_mul_star_self` : a complex functional is tracial iff `f (a⋆ a) = f (a a⋆)`. +## iii. Table of contents + +- A. Tracial weights +- B. Tracial states +- C. Tracial complex-linear functionals + +## iv. References + +* None. + -/ @[expose] public section namespace ProbabilisticTheory +/-! ## A. Tracial weights -/ + namespace Weight variable {A : Type*} [OrderUnitSpace A] [Mul A] [Star A] @@ -55,6 +69,8 @@ end IsTracial end Weight +/-! ## B. Tracial states -/ + namespace UnitalPositiveLinearMap variable {A : Type*} [OrderUnitSpace A] [Mul A] [Star A] @@ -77,6 +93,8 @@ end Weight.IsState end ProbabilisticTheory +/-! ## C. Tracial complex-linear functionals -/ + namespace LinearMap open ProbabilisticTheory diff --git a/PhyslibAlpha/ProbabilisticTheory/State/Barycenter.lean b/PhyslibAlpha/ProbabilisticTheory/State/Barycenter.lean index 85db6f43bc..ed0890de28 100644 --- a/PhyslibAlpha/ProbabilisticTheory/State/Barycenter.lean +++ b/PhyslibAlpha/ProbabilisticTheory/State/Barycenter.lean @@ -12,6 +12,8 @@ public import Mathlib.MeasureTheory.Integral.Bochner.SumMeasure /-! # Barycenters of random states +The barycenter of a probability measure on states: the state a random preparation produces. + ## i. Overview A probability measure `μ` on the states is a random state: pick a state `ω` according to `μ`, then @@ -27,6 +29,10 @@ form a state again, the barycenter of `μ`. It is the state that the random proc - A. Integrability of expectation values - B. Barycenters +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/State/Basic.lean b/PhyslibAlpha/ProbabilisticTheory/State/Basic.lean index 7b175d85bd..99ad35aa06 100644 --- a/PhyslibAlpha/ProbabilisticTheory/State/Basic.lean +++ b/PhyslibAlpha/ProbabilisticTheory/State/Basic.lean @@ -10,6 +10,8 @@ public import PhyslibAlpha.ProbabilisticTheory.Channel.Basic /-! # States +Notation `𝓢[𝕜, A]` for states, the normalized positive linear functionals. + ## i. Overview A state assigns each observable its expectation value: a positive linear functional @@ -24,6 +26,10 @@ A state assigns each observable its expectation value: a positive linear functio - A. Notation for positive functionals and states +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/State/Convex.lean b/PhyslibAlpha/ProbabilisticTheory/State/Convex.lean index 48fb1cc5dd..9d7109ed57 100644 --- a/PhyslibAlpha/ProbabilisticTheory/State/Convex.lean +++ b/PhyslibAlpha/ProbabilisticTheory/State/Convex.lean @@ -13,6 +13,8 @@ public import Mathlib.Topology.UnitInterval /-! # Convex state spaces +Mixing states, convexity of the state space, and pure and mixed states. + ## i. Overview States mix: a probabilistic combination of two states is again a state, and the state space @@ -33,6 +35,10 @@ two others, an extreme point of that convex set. A mixed state is one that is a - B. The state space - C. Pure and mixed states +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/State/Discrimination.lean b/PhyslibAlpha/ProbabilisticTheory/State/Discrimination.lean index 4a26ce7459..bae71c48b8 100644 --- a/PhyslibAlpha/ProbabilisticTheory/State/Discrimination.lean +++ b/PhyslibAlpha/ProbabilisticTheory/State/Discrimination.lean @@ -12,6 +12,8 @@ public import Mathlib.Algebra.Order.Group.CompleteLattice /-! # State discrimination +Two-state discrimination by a single effect and the Helstrom bound on the success probability. + ## i. Overview A system is prepared in state `ω₀` (with probability `p`) or `ω₁` (with probability `1 - p`). We diff --git a/PhyslibAlpha/ProbabilisticTheory/State/Metric.lean b/PhyslibAlpha/ProbabilisticTheory/State/Metric.lean index 4a5d602986..9c5b354c23 100644 --- a/PhyslibAlpha/ProbabilisticTheory/State/Metric.lean +++ b/PhyslibAlpha/ProbabilisticTheory/State/Metric.lean @@ -12,6 +12,8 @@ public import Mathlib.Topology.MetricSpace.HausdorffDistance /-! # The metric space of states +States are bounded by the order-unit norm, giving a metric on states and a distance to purity. + ## i. Overview A state is just a positive linear functional — no continuity is assumed. It turns out to be @@ -35,6 +37,10 @@ distance to the set of pure states. - B. The state metric - C. Distance to pure states +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/State/NormalEquivalence.lean b/PhyslibAlpha/ProbabilisticTheory/State/NormalEquivalence.lean index 46190da7eb..fd322a883c 100644 --- a/PhyslibAlpha/ProbabilisticTheory/State/NormalEquivalence.lean +++ b/PhyslibAlpha/ProbabilisticTheory/State/NormalEquivalence.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.ProbabilisticTheory.State.WeightEquivalence # Normal states give normal weights +The weight of a normal state is a normal weight. + ## i. Overview The weight of a normal state is normal: suprema of directed families of nonnegative observables are @@ -21,6 +23,14 @@ suprema in the whole space, where the state is normal. - `UnitalPositiveLinearMap.IsNormal.toWeight_isNormal` : normal states give normal weights. +## iii. Table of contents + +- A. Normal weights from normal states + +## iv. References + +* None. + -/ @[expose] public section @@ -31,6 +41,8 @@ open scoped ENNReal variable {E : Type*} [OrderUnitSpace E] +/-! ## A. Normal weights from normal states -/ + namespace UnitalPositiveLinearMap /-- A normal state induces a normal weight. No new normality predicate is introduced: the proof diff --git a/PhyslibAlpha/ProbabilisticTheory/State/Pairing.lean b/PhyslibAlpha/ProbabilisticTheory/State/Pairing.lean index 70603c6438..d897da074d 100644 --- a/PhyslibAlpha/ProbabilisticTheory/State/Pairing.lean +++ b/PhyslibAlpha/ProbabilisticTheory/State/Pairing.lean @@ -11,6 +11,8 @@ public import Physlib.ProbabilisticTheory.Effect.Convex /-! # The state–effect pairing +The state–effect pairing is affine, takes values in [0, 1], and separates states and effects. + ## i. Overview States and effects are paired by evaluation, `(ω, e) ↦ ω e ∈ [0, 1]`. This pairing is affine in @@ -38,6 +40,10 @@ another. - B. Effects separate states - C. States separate effects +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/State/Preparation.lean b/PhyslibAlpha/ProbabilisticTheory/State/Preparation.lean index 3bd2bd9e97..46be1b6a22 100644 --- a/PhyslibAlpha/ProbabilisticTheory/State/Preparation.lean +++ b/PhyslibAlpha/ProbabilisticTheory/State/Preparation.lean @@ -12,6 +12,8 @@ public import Mathlib.MeasureTheory.Integral.Bochner.Set /-! # Preparation procedures +Preparation procedures: random preparations of states, their prepared states and outcome laws. + ## i. Overview A preparation procedure rolls a die and, depending on the outcome `x`, prepares the state @@ -43,6 +45,10 @@ prepared state. - D. Conditional states - E. Measurement outcomes +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/State/PureMeasurement.lean b/PhyslibAlpha/ProbabilisticTheory/State/PureMeasurement.lean index ebeacbaa69..012b7c05fd 100644 --- a/PhyslibAlpha/ProbabilisticTheory/State/PureMeasurement.lean +++ b/PhyslibAlpha/ProbabilisticTheory/State/PureMeasurement.lean @@ -15,6 +15,8 @@ public import Mathlib.Probability.Kernel.CompProdEqIff /-! # Purity is the absence of side information +A normal state is pure exactly when no preparation of it carries side information. + ## i. Overview Roll a die and, depending on the roll, prepare a state; then perform a measurement. Someone who is @@ -54,6 +56,10 @@ trivial, with every expectation value almost surely independent of the roll. - D. Side information - E. Purity is the absence of side information +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/State/Separation.lean b/PhyslibAlpha/ProbabilisticTheory/State/Separation.lean index 2ffd4c5501..0f5a44ea19 100644 --- a/PhyslibAlpha/ProbabilisticTheory/State/Separation.lean +++ b/PhyslibAlpha/ProbabilisticTheory/State/Separation.lean @@ -14,6 +14,8 @@ public import Mathlib.Analysis.LocallyConvex.WithSeminorms /-! # Separation by states +Via Hahn–Banach, states separate points and determine the positive cone and order-unit norm. + ## i. Overview In an Archimedean order-unit space, states determine the entire ordered normed structure. An @@ -42,6 +44,10 @@ separation fact. - D. Separation of points - E. Continuous-dual realization +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/State/StateSpace.lean b/PhyslibAlpha/ProbabilisticTheory/State/StateSpace.lean index ffdccf982b..83da501780 100644 --- a/PhyslibAlpha/ProbabilisticTheory/State/StateSpace.lean +++ b/PhyslibAlpha/ProbabilisticTheory/State/StateSpace.lean @@ -12,6 +12,8 @@ public import Mathlib.MeasureTheory.Constructions.BorelSpace.Basic /-! # The state space +The weak-star state space: compact, convex, with the pure states as its extreme points. + ## i. Overview A state is a normalized positive functional: it gives the certain outcome `1` the value `1` and @@ -42,6 +44,10 @@ On `𝓢[ℝ, E]` itself the states carry the finer state metric. - D. Compactness - E. Convexity and pure states +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/State/WeightEquivalence.lean b/PhyslibAlpha/ProbabilisticTheory/State/WeightEquivalence.lean index fd7113107f..eb3490d153 100644 --- a/PhyslibAlpha/ProbabilisticTheory/State/WeightEquivalence.lean +++ b/PhyslibAlpha/ProbabilisticTheory/State/WeightEquivalence.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.ProbabilisticTheory.State.Basic # States and finite normalized weights +Finite normalized weights on an order unit space correspond bijectively to states. + ## i. Overview A state is a normalized positive linear functional, a weight is a function on the positive cone. @@ -28,6 +30,10 @@ normalized weight linearly gives a state. These are inverse to each other. - B. From a state to a weight - C. The equivalence +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/WStarAlgebra/Basic.lean b/PhyslibAlpha/ProbabilisticTheory/WStarAlgebra/Basic.lean index 19fc344d1f..bab3b73ebf 100644 --- a/PhyslibAlpha/ProbabilisticTheory/WStarAlgebra/Basic.lean +++ b/PhyslibAlpha/ProbabilisticTheory/WStarAlgebra/Basic.lean @@ -13,6 +13,8 @@ public import Mathlib.Analysis.Normed.Module.WeakDual # W⋆-algebras and normal states +W⋆-algebras with a chosen predual, their weak-⋆ topology, and normal states. + ## i. Overview A W⋆-algebra is a C⋆-algebra that is the dual of a Banach space, its predual. Mathlib's @@ -35,6 +37,10 @@ for the weak-⋆ topology. - B. The predual pairing - C. Normal states +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/WStarAlgebra/BoundedSesquilinearForm.lean b/PhyslibAlpha/ProbabilisticTheory/WStarAlgebra/BoundedSesquilinearForm.lean index dd18ea90f7..50cbc7606e 100644 --- a/PhyslibAlpha/ProbabilisticTheory/WStarAlgebra/BoundedSesquilinearForm.lean +++ b/PhyslibAlpha/ProbabilisticTheory/WStarAlgebra/BoundedSesquilinearForm.lean @@ -11,6 +11,8 @@ public import Mathlib.Analysis.InnerProductSpace.Adjoint # Bounded sesquilinear forms +A bounded sesquilinear form on a Hilbert space is represented by a bounded operator. + ## i. Overview A bounded sesquilinear form `B` on a Hilbert space, conjugate-linear in the first argument, is @@ -22,6 +24,15 @@ represented by a bounded operator `T` with `⟪y, T x⟫ = conj (B x y)`. - `BoundedSesquilinearForm.operator` : the representing operator. - `BoundedSesquilinearForm.operator_inner` : `⟪y, T x⟫ = conj (B x y)`. +## iii. Table of contents + +- A. Bounded sesquilinear forms +- B. The representing operator + +## iv. References + +* None. + -/ @[expose] public section @@ -34,6 +45,12 @@ open scoped InnerProductSpace variable {H : Type*} [NormedAddCommGroup H] [InnerProductSpace ℂ H] [CompleteSpace H] +/-! + +## A. Bounded sesquilinear forms + +-/ + /-- A bounded sesquilinear form in the orientation expected by Mathlib's Riesz representation theorem. -/ structure BoundedSesquilinearForm (H : Type*) [NormedAddCommGroup H] [InnerProductSpace ℂ H] @@ -61,6 +78,12 @@ noncomputable def continuous : H →L⋆[ℂ] H →L[ℂ] ℂ := lemma continuous_apply (x y : H) : B.continuous x y = B.form x y := LinearMap.mkContinuous₂_apply B.form B.boundConstant_spec x y +/-! + +## B. The representing operator + +-/ + /-- The unique bounded operator represented by `B`. -/ noncomputable def operator : H →L[ℂ] H := InnerProductSpace.continuousLinearMapOfBilin B.continuous diff --git a/PhyslibAlpha/ProbabilisticTheory/WStarAlgebra/Concrete.lean b/PhyslibAlpha/ProbabilisticTheory/WStarAlgebra/Concrete.lean index e8fbdb5711..47bf43d381 100644 --- a/PhyslibAlpha/ProbabilisticTheory/WStarAlgebra/Concrete.lean +++ b/PhyslibAlpha/ProbabilisticTheory/WStarAlgebra/Concrete.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.ProbabilisticTheory.WStarAlgebra.RankOnePairing # The bounded operators as a W⋆-algebra +The bounded operators on a Hilbert space form a W⋆-algebra with the trace class as predual. + ## i. Overview The trace pairing `A ↦ (ρ ↦ Tr (A ρ))` is an isometric isomorphism from the bounded operators on a @@ -28,6 +30,10 @@ with predual the trace-class operators. - A. The `WStarAlgebraStructure (H →L[ℂ] H)` instance +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/WStarAlgebra/ConjSpace.lean b/PhyslibAlpha/ProbabilisticTheory/WStarAlgebra/ConjSpace.lean index 3164f03ca6..7f28199efd 100644 --- a/PhyslibAlpha/ProbabilisticTheory/WStarAlgebra/ConjSpace.lean +++ b/PhyslibAlpha/ProbabilisticTheory/WStarAlgebra/ConjSpace.lean @@ -11,6 +11,8 @@ public import Mathlib.Analysis.Complex.Basic # The complex conjugate of a normed space +The complex conjugate `ConjSpace X` of a complex normed space, with twisted scalar action. + ## i. Overview `ConjSpace X` is `X` with scalar multiplication twisted by complex conjugation: `c • x` in @@ -23,6 +25,16 @@ public import Mathlib.Analysis.Complex.Basic - `ConjSpace.toConj`, `ConjSpace.ofConj` : the identity maps between `X` and `ConjSpace X`. - `ConjSpace.instNormedSpace` : the conjugate normed space structure. +## iii. Table of contents + +- A. The conjugate space and the identity maps +- B. The additive and normed group structure +- C. The conjugate scalar action + +## iv. References + +* None. + -/ @[expose] public section @@ -33,6 +45,12 @@ namespace ProbabilisticTheory open scoped ComplexConjugate +/-! + +## A. The conjugate space and the identity maps + +-/ + /-- The complex conjugate of `X`: the same type, with `c • x = conj c • x`. -/ def ConjSpace (X : Type*) : Type _ := X @@ -51,6 +69,12 @@ def ofConj (x : ConjSpace X) : X := x @[simp] lemma ofConj_toConj (x : X) : ofConj (toConj x) = x := rfl @[simp] lemma toConj_ofConj (x : ConjSpace X) : toConj (ofConj x) = x := rfl +/-! + +## B. The additive and normed group structure + +-/ + instance instAddCommGroup [AddCommGroup X] : AddCommGroup (ConjSpace X) := ‹AddCommGroup X› @[simp] lemma ofConj_add [AddCommGroup X] (x y : ConjSpace X) : @@ -70,6 +94,12 @@ instance instNormedAddCommGroup [NormedAddCommGroup X] : @[simp] lemma norm_toConj [NormedAddCommGroup X] (x : X) : ‖toConj x‖ = ‖x‖ := rfl +/-! + +## C. The conjugate scalar action + +-/ + variable [NormedAddCommGroup X] [NormedSpace ℂ X] /-- The twisted scalar action: `c • x := (starRingEnd ℂ c) • ofConj x`, moved back into diff --git a/PhyslibAlpha/ProbabilisticTheory/WStarAlgebra/Mathlib.lean b/PhyslibAlpha/ProbabilisticTheory/WStarAlgebra/Mathlib.lean index 7c2712ac5e..ca7015b89a 100644 --- a/PhyslibAlpha/ProbabilisticTheory/WStarAlgebra/Mathlib.lean +++ b/PhyslibAlpha/ProbabilisticTheory/WStarAlgebra/Mathlib.lean @@ -13,6 +13,8 @@ public import Mathlib.Analysis.VonNeumannAlgebra.Basic # W⋆-algebra structures are W⋆-algebras +A W⋆-algebra structure with a chosen predual gives a W⋆-algebra in Mathlib's sense. + ## i. Overview Mathlib's `WStarAlgebra` asks for a conjugate-linear isometric isomorphism from the dual of a Banach @@ -32,6 +34,10 @@ W⋆-algebra in Mathlib's sense, when the predual lives in the same universe as - A. The conjugate-linear self-duality `Phi` of the strong dual, via `ConjSpace` - B. Closing the connection to Mathlib's `WStarAlgebra` +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/WStarAlgebra/RankOnePairing.lean b/PhyslibAlpha/ProbabilisticTheory/WStarAlgebra/RankOnePairing.lean index d87d68b5da..978605f5c7 100644 --- a/PhyslibAlpha/ProbabilisticTheory/WStarAlgebra/RankOnePairing.lean +++ b/PhyslibAlpha/ProbabilisticTheory/WStarAlgebra/RankOnePairing.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.ProbabilisticTheory.WStarAlgebra.TracePairingSurjecti # Rank-one operators in the trace pairing +The trace pairing of a rank-one operator `|x⟩⟨y|` with a trace-class `T` is `⟪y, T x⟫`. + ## i. Overview For a bounded operator `A` and a trace-class operator `T`, the trace pairing of `A |x⟩⟨y|` with `T` @@ -21,6 +23,15 @@ is a matrix coefficient. This recovers a predual element from its values on rank - `trace_rankOne_formula` : the trace of a rank-one operator times a trace-class operator. - `TraceClass.tracePairing_rankOne_left` : the trace pairing with a rank-one operator. +## iii. Table of contents + +- A. The trace of a rank-one operator +- B. The trace pairing with a rank-one operator + +## iv. References + +* None. + -/ @[expose] public section @@ -35,6 +46,12 @@ namespace TraceClass variable {H : Type*} [NormedAddCommGroup H] [InnerProductSpace ℂ H] [CompleteSpace H] +/-! + +## A. The trace of a rank-one operator + +-/ + lemma trace_rankOne_formula (x y : H) : trace (InnerProductSpace.rankOne ℂ x y) (isTraceClass_rankOne x y) = ⟪y, x⟫_ℂ := by @@ -49,6 +66,12 @@ lemma trace_rankOne_formula (x y : H) : rw [hterm] exact hsum.tsum_eq +/-! + +## B. The trace pairing with a rank-one operator + +-/ + lemma tracePairing_rankOne_left (T : TraceClass H) (x y : H) : tracePairing (InnerProductSpace.rankOne ℂ x y) T = ⟪y, T.1 x⟫_ℂ := by diff --git a/PhyslibAlpha/ProbabilisticTheory/WStarAlgebra/TracePairingNorm.lean b/PhyslibAlpha/ProbabilisticTheory/WStarAlgebra/TracePairingNorm.lean index 1be68acd48..f128099bfe 100644 --- a/PhyslibAlpha/ProbabilisticTheory/WStarAlgebra/TracePairingNorm.lean +++ b/PhyslibAlpha/ProbabilisticTheory/WStarAlgebra/TracePairingNorm.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.ProbabilisticTheory.HilbertSpace.TraceClass.RankOne # The trace pairing is isometric +The trace pairing of bounded operators against trace-class operators is an isometry. + ## i. Overview The trace of `A |x⟩⟨y|` is `⟪y, A x⟫`, so testing the trace pairing of a bounded operator `A` on @@ -24,6 +26,17 @@ trace pairing is an isometry. - `TraceClass.norm_tracePairing` : `‖Tr (A ·)‖ = ‖A‖`. - `TraceClass.tracePairingLinearIsometry` : the trace pairing as a linear isometry. +## iii. Table of contents + +- A. Rank-one operators are trace class +- B. The trace pairing with rank-one operators +- C. The norm of the trace pairing +- D. The trace pairing as a linear isometry + +## iv. References + +* None. + -/ @[expose] public section @@ -38,6 +51,12 @@ namespace TraceClass variable {H : Type*} [NormedAddCommGroup H] [InnerProductSpace ℂ H] [CompleteSpace H] +/-! + +## A. Rank-one operators are trace class + +-/ + lemma isTraceClass_rankOne (x y : H) : IsTraceClass (InnerProductSpace.rankOne ℂ x y) := by by_cases hy : y = 0 @@ -82,6 +101,12 @@ lemma trace_rankOne (x y : H) : rw [hterm] exact hsum.tsum_eq +/-! + +## B. The trace pairing with rank-one operators + +-/ + lemma tracePairing_rankOne (A : H →L[ℂ] H) (x y : H) : tracePairing A (ofOperator (InnerProductSpace.rankOne ℂ x y) (isTraceClass_rankOne x y)) = ⟪y, A x⟫_ℂ := by @@ -105,6 +130,12 @@ lemma tracePairing_rankOne (A : H →L[ℂ] H) (x y : H) : congr 1 _ = ⟪y, A x⟫_ℂ := trace_rankOne (A x) y +/-! + +## C. The norm of the trace pairing + +-/ + /- The trace pairing has the sharp lower bound `‖A‖ ≤ ‖Tr (A ·)‖`. -/ lemma norm_le_tracePairing (A : H →L[ℂ] H) : ‖A‖ ≤ ‖tracePairing A‖ := by @@ -189,6 +220,12 @@ lemma norm_tracePairingContinuousLinearMap (A : H →L[ℂ] H) : ‖tracePairingContinuousLinearMap A‖ = ‖A‖ := by rw [tracePairingContinuousLinearMap_apply, norm_tracePairing] +/-! + +## D. The trace pairing as a linear isometry + +-/ + /-- The trace pairing, as a linear isometry from bounded operators into the dual of the trace-class operators. -/ def tracePairingLinearIsometry : diff --git a/PhyslibAlpha/ProbabilisticTheory/WStarAlgebra/TracePairingSurjectivity.lean b/PhyslibAlpha/ProbabilisticTheory/WStarAlgebra/TracePairingSurjectivity.lean index 3da6ae4ab4..00d3800d5a 100644 --- a/PhyslibAlpha/ProbabilisticTheory/WStarAlgebra/TracePairingSurjectivity.lean +++ b/PhyslibAlpha/ProbabilisticTheory/WStarAlgebra/TracePairingSurjectivity.lean @@ -12,6 +12,8 @@ public import PhyslibAlpha.ProbabilisticTheory.WStarAlgebra.BoundedSesquilinearF # The trace pairing is surjective +Every continuous functional on the trace-class operators is a trace pairing `Tr (A ·)`. + ## i. Overview A continuous functional on the trace-class operators defines a bounded sesquilinear form by @@ -31,6 +33,10 @@ continuous functional is a trace pairing. - A. Hilbert–Schmidt finite truncations +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/ProbabilisticTheory/Weight/Basic.lean b/PhyslibAlpha/ProbabilisticTheory/Weight/Basic.lean index 9a944a94c5..a8f27746c7 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Weight/Basic.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Weight/Basic.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.ProbabilisticTheory.OrderUnit.PositiveDual /-! # Weights +Weights: additive, possibly infinite maps on the positive cone; states are finite normalized ones. + ## i. Overview A state assigns each positive observable a nonnegative expectation value, normalized so the certain diff --git a/PhyslibAlpha/ProbabilisticTheory/Weight/Continuous.lean b/PhyslibAlpha/ProbabilisticTheory/Weight/Continuous.lean index 640383229c..34f9bca811 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Weight/Continuous.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Weight/Continuous.lean @@ -13,6 +13,8 @@ public import Mathlib.Analysis.Normed.Operator.ContinuousLinearMap # Finite weights are continuous +Positive functionals are order-unit-norm bounded, so finite weights are continuous functionals. + ## i. Overview A positive functional is bounded for the order-unit norm, `|ψ a| ≤ ψ 1 ‖a‖`. So every finite weight @@ -23,6 +25,15 @@ is a continuous linear functional on the observables with the order-unit norm. - `PositiveLinearMap.abs_apply_le_apply_one_mul_orderUnitNorm` : `|ψ a| ≤ ψ 1 ‖a‖`. - `Weight.IsFinite.toOrderUnitContinuousLinearMap` : a finite weight as a continuous functional. +## iii. Table of contents + +- A. Positive functionals are bounded +- B. Finite weights as continuous functionals + +## iv. References + +* None. + -/ @[expose] public section @@ -34,6 +45,12 @@ open ArchimedeanOrderUnitSpace variable {E : Type*} [ArchimedeanOrderUnitSpace E] +/-! + +## A. Positive functionals are bounded + +-/ + /-- A positive functional is order-unit-norm bounded, with bound given by its value at the order unit. For a normalized positive functional this specializes to the contractive state bound. -/ lemma abs_apply_le_apply_one_mul_orderUnitNorm (f : E →ₚ[ℝ] ℝ) (x : E) : @@ -66,6 +83,12 @@ lemma toOrderUnitContinuousLinearMap_apply (f : E →ₚ[ℝ] ℝ) (x : E) : end PositiveLinearMap +/-! + +## B. Finite weights as continuous functionals + +-/ + namespace ProbabilisticTheory open ArchimedeanOrderUnitSpace diff --git a/PhyslibAlpha/ProbabilisticTheory/Weight/Extension.lean b/PhyslibAlpha/ProbabilisticTheory/Weight/Extension.lean index 728b454537..97f5bec0f0 100644 --- a/PhyslibAlpha/ProbabilisticTheory/Weight/Extension.lean +++ b/PhyslibAlpha/ProbabilisticTheory/Weight/Extension.lean @@ -10,6 +10,8 @@ public import PhyslibAlpha.ProbabilisticTheory.Weight.Basic /-! # Extending finite weights +A finite weight extends uniquely to a positive linear functional on the order unit space. + ## i. Overview A finite weight on the positive cone of an order-unit space extends uniquely to a positive linear @@ -26,6 +28,10 @@ check the result does not depend on the `r` chosen. - A. The raw shifted value - B. The linear extension +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/QuantumMechanics/HarmonicOscillator/LadderSystem.lean b/PhyslibAlpha/QuantumMechanics/HarmonicOscillator/LadderSystem.lean index 6af025484f..b454489099 100644 --- a/PhyslibAlpha/QuantumMechanics/HarmonicOscillator/LadderSystem.lean +++ b/PhyslibAlpha/QuantumMechanics/HarmonicOscillator/LadderSystem.lean @@ -11,6 +11,8 @@ public import PhyslibAlpha.Mathematics.LadderSystem.SymmetricPower # The harmonic oscillator as a ladder system +The ladder operators of the d-dimensional harmonic oscillator form a `LadderSystem`. + ## i. Overview The lowering and raising operators `loweringCLM`/`raisingCLM` of the `d`-dimensional quantum diff --git a/PhyslibAlpha/QuantumMechanics/HarmonicOscillator/Vacuum.lean b/PhyslibAlpha/QuantumMechanics/HarmonicOscillator/Vacuum.lean index 942eb29511..7553053fc0 100644 --- a/PhyslibAlpha/QuantumMechanics/HarmonicOscillator/Vacuum.lean +++ b/PhyslibAlpha/QuantumMechanics/HarmonicOscillator/Vacuum.lean @@ -11,6 +11,8 @@ public import Physlib.Mathematics.InnerProductSpace.Gaussian # A vacuum state for the harmonic oscillator +An explicit Gaussian vacuum for the d-dimensional harmonic oscillator ladder system. + ## i. Overview For a `d`-dimensional oscillator `Q`, `vacuumGaussian` is the Gaussian @@ -35,7 +37,13 @@ mode, so it is proved separately. - `loweringCLM_stdGaussian_of_xi_eq_one`, `hasVacuum_stdGaussian_of_forall_xi_eq_one` : the isotropic-unit-length special case. -## iii. References +## iii. Table of contents + +- A. The standard Gaussian: derivative and momentum action +- B. The general, anisotropic vacuum +- C. The isotropic-unit-length special case + +## iv. References * None. -/ @@ -52,7 +60,7 @@ variable {d : ℕ} (Q : HarmonicOscillator d) /-! -## The standard Gaussian: derivative and momentum action +## A. The standard Gaussian: derivative and momentum action `Q`-free prerequisites about the plain, unscaled Gaussian, reused by both the general anisotropic case below and the isotropic-unit-length special case at the end of this file. @@ -110,7 +118,7 @@ lemma momentumCLM_stdGaussian (i : Fin d) (x : Space d) : /-! -## The general, anisotropic vacuum +## B. The general, anisotropic vacuum No isotropy assumption needed: every oscillator `Q` (any masses/frequencies, hence any characteristic lengths `ξᵢ`) has an explicit vacuum, the Gaussian rescaled coordinatewise by `ξ`. @@ -241,7 +249,7 @@ theorem hasVacuum_vacuumGaussian : Q.toLadderSystem.HasVacuum (Q.vacuumGaussian) /-! -## The isotropic-unit-length special case +## C. The isotropic-unit-length special case -/ diff --git a/PhyslibAlpha/QuantumMechanics/HilbertSpaces/FiniteTarget/Operators.lean b/PhyslibAlpha/QuantumMechanics/HilbertSpaces/FiniteTarget/Operators.lean index bc83ef16dc..a938a69f66 100644 --- a/PhyslibAlpha/QuantumMechanics/HilbertSpaces/FiniteTarget/Operators.lean +++ b/PhyslibAlpha/QuantumMechanics/HilbertSpaces/FiniteTarget/Operators.lean @@ -12,18 +12,35 @@ public import Mathlib.Analysis.SpecialFunctions.ContinuousFunctionalCalculus.Pos # Operators on the Hilbert space of a finite target system -The bounded operators `𝓗[d] →L[ℂ] 𝓗[d]` form a C⋆-algebra, ordered by the Loewner order. -This file registers, directly on these operators, +Real scalar tower and self-adjoint decomposition instances for operators on `𝓗[d]`. + +## i. Overview -- the real scalar action commuting with composition (`IsScalarTower ℝ`, `SMulCommClass ℝ`); -- the decomposition of a self-adjoint operator into positive and negative parts - (`SelfAdjointDecompose`), from the continuous functional calculus. +The bounded operators `𝓗[d] →L[ℂ] 𝓗[d]` form a C⋆-algebra, ordered by the Loewner order. +This file registers, directly on these operators, the real scalar action commuting with +composition and the decomposition of a self-adjoint operator into positive and negative parts. These instances hold for the operators on any complex Hilbert space, but on `𝓗[d]` inferring them unifies the two real actions on operators through the transferred complex module, which runs out of budget. Stated here once, they let hermitian operators on `𝓗[d]` be used where `SelfAdjointDecompose` is required, for instance as observables. +## ii. Key results + +- `IsScalarTower ℝ`, `SMulCommClass ℝ` instances : the real scalar action on `𝓗[d] →L[ℂ] 𝓗[d]` + commutes with composition. +- `SelfAdjointDecompose` instance : the decomposition of a self-adjoint operator into positive and + negative parts, from the continuous functional calculus. + +## iii. Table of contents + +- A. The real scalar action +- B. Positive and negative parts + +## iv. References + +* None. + -/ @[expose] public section @@ -34,12 +51,24 @@ namespace FiniteHilbertSpace variable {d : Type*} [Fintype d] [DecidableEq d] +/-! + +## A. The real scalar action + +-/ + instance : IsScalarTower ℝ (𝓗[d] →L[ℂ] 𝓗[d]) (𝓗[d] →L[ℂ] 𝓗[d]) := ⟨fun _ _ _ => by ext; simp⟩ instance : SMulCommClass ℝ (𝓗[d] →L[ℂ] 𝓗[d]) (𝓗[d] →L[ℂ] 𝓗[d]) := ⟨fun _ _ _ => by ext; simp⟩ +/-! + +## B. Positive and negative parts + +-/ + instance : SelfAdjointDecompose (𝓗[d] →L[ℂ] 𝓗[d]) := CFC.instSelfAdjointDecompose end FiniteHilbertSpace diff --git a/PhyslibAlpha/QuantumMechanics/HilbertSpaces/FiniteTarget/Product.lean b/PhyslibAlpha/QuantumMechanics/HilbertSpaces/FiniteTarget/Product.lean index bba5071186..d9c0127140 100644 --- a/PhyslibAlpha/QuantumMechanics/HilbertSpaces/FiniteTarget/Product.lean +++ b/PhyslibAlpha/QuantumMechanics/HilbertSpaces/FiniteTarget/Product.lean @@ -32,6 +32,10 @@ operators, and hermitian operators stay hermitian. - C. Composition - D. Hermiticity +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/QuantumMechanics/QuantumHarmonicOscillator.lean b/PhyslibAlpha/QuantumMechanics/QuantumHarmonicOscillator.lean index 723cd6ae45..d3b944dfcc 100644 --- a/PhyslibAlpha/QuantumMechanics/QuantumHarmonicOscillator.lean +++ b/PhyslibAlpha/QuantumMechanics/QuantumHarmonicOscillator.lean @@ -9,10 +9,51 @@ public import Mathlib.Probability.Distributions.Poisson.Basic public import Mathlib.Analysis.Normed.Lp.lpSpace /-! # Quantum harmonic oscillator + +Ladder operators, commutation relation and coherent states of the quantum harmonic oscillator. + +## i. Overview + +The one-dimensional quantum harmonic oscillator in the number basis, with states modelled as +sequences `ℕ → ℂ`. The annihilation operator `a` and creation operator `a_dag` act by +`a |n + 1⟩ = √(n + 1) |n⟩` and `a† |n⟩ = √(n + 1) |n + 1⟩`, and satisfy the canonical commutation +relation `a a† - a† a = 1`. The coherent states are the eigenvectors of `a`; their number +distribution is Poisson, and they lie in `ℓ²`. The creation operator has no eigenvectors. + +## ii. Key results + +- `a`, `a_dag` : the annihilation and creation operators. +- `aLin`, `a_dagLin` : the annihilation and creation operators as linear maps. +- `commutation_relation`, `commutationRelation` : the canonical commutation relation. +- `coherentState` : the coherent state with parameter `α`. +- `probabilityOf_eq_poisson_C` : a coherent state has a Poisson number distribution. +- `coherentState_only_eigenvector` : the only eigenvectors of `a` are the coherent states. +- `no_a_dag_eigenvector` : `a_dag` has no nonzero eigenvectors. +- `coherentState_ℓ2` : the coherent state as an element of `ℓ²(ℂ)`. + +## iii. Table of contents + +- A. The ladder operators +- B. Matrix elements and the commutation relation +- C. Coherent states +- D. Eigenvectors of the creation operator +- E. The commutation relation for linear maps +- F. Coherent states in ℓ² + +## iv. References + +* None. + -/ noncomputable section +/-! + +## A. The ladder operators + +-/ + /-- Annihilation operator. -/ def a (x : ℕ → ℂ) : ℕ → ℂ := fun n => √(n + 1) * x (n + 1) @@ -52,6 +93,12 @@ def a_dagLin : (ℕ → ℂ) →ₗ[ℂ] (ℕ → ℂ) := { ring_nf } +/-! + +## B. Matrix elements and the commutation relation + +-/ + def ε (n : ℕ) (c : ℂ) : ℕ → ℂ := fun i => ite (i = n) c 0 /-- Verify that a_dag really is the transpose of a. -/ @@ -135,6 +182,12 @@ lemma commutation_relation : refine Real.mul_self_sqrt ?_ simp +/-! + +## C. Coherent states + +-/ + def coherentState (α : ℂ) : ℕ → ℂ := fun n : ℕ => Real.exp (-‖α‖^2 / 2) * α ^ n / √(n.factorial) @@ -290,6 +343,12 @@ lemma distinct_eigenvectors_a (α β c : ℂ) field_simp at h₁ exact h₁ +/-! + +## D. Eigenvectors of the creation operator + +-/ + /-- Formal eigenvectors for `a_dag` (not in `ℓ²(ℂ)`) (fails at n=0) . -/ lemma a_dagalmost_eigenvector {α : ℂ} (hα : α ≠ 0) {n : ℕ} (hn : n ≠ 0) : @@ -355,6 +414,12 @@ lemma no_a_dag_eigenvector (α : ℂ) (v : ℕ → ℂ) : simp rfl +/-! + +## E. The commutation relation for linear maps + +-/ + lemma commutationRelation : ⁅aLin, a_dagLin⁆ = 1 := by simp only [Bracket.bracket] unfold aLin a_dagLin @@ -364,6 +429,12 @@ lemma commutationRelation : ⁅aLin, a_dagLin⁆ = 1 := by simp +/-! + +## F. Coherent states in ℓ² + +-/ + /-- The `coherentState` with parameter `0` is just the first basis vector. -/ example : coherentState 0 = fun n => ite (n = 0) 1 0 := by unfold coherentState diff --git a/PhyslibAlpha/QuantumMechanics/StinespringDilation.lean b/PhyslibAlpha/QuantumMechanics/StinespringDilation.lean index a4a73f891a..8fa8551841 100644 --- a/PhyslibAlpha/QuantumMechanics/StinespringDilation.lean +++ b/PhyslibAlpha/QuantumMechanics/StinespringDilation.lean @@ -11,6 +11,55 @@ public import Physlib.Meta.TODO.Basic public import Mathlib.Analysis.Matrix.Order /-! # Stinespring dilation + +Kraus maps, the Stinespring isometry and unitary dilation, and completion of Kraus families. + +## i. Overview + +Completely positive maps on matrices over an `RCLike` field, given by a Kraus family `K`, act as +`krausApply K ρ = ∑ i, K i * ρ * (K i)ᴴ`. The Stinespring operator `stinespringOp K` (often `V`) +stacks the Kraus operators into one matrix, and the Kraus map is recovered as the partial trace of +`V ρ Vᴴ`. For a trace-preserving family `V` is an isometry; its columns are extended to an +orthonormal basis to build a unitary dilation `Ud`, which acts on `ρ` tensored with an ancilla +state. A trace non-increasing family is completed to a trace-preserving one by adding one extra +Kraus operator. + +There is a different version of the Stinespring dilation in `QuantumInfo.Channels.CPTP`; see the +TODO in this file about unifying the two. + +## ii. Key results + +- `krausApply` : the completely positive map of a Kraus family. +- `IsKrausChannel`, `QuantumOperation` : trace-preserving and trace non-increasing Kraus families. +- `densityMatrix` : density matrices. +- `tr₂` : the partial trace over the second factor. +- `stinespringOp` : the Stinespring isometry `V`. +- `stinespringForm_CPTP_isometry` : `V` is an isometry for a trace-preserving family. +- `Ud`, `Ud_unitary` : the unitary dilation, and its unitarity. +- `stinespringGeneralForm_works`, `stinespringUnitaryForm_works` : the dilation forms reproduce + `krausApply K`. +- `krausCompletion`, `krausCompletion_isometry_of_TNI` : the completion of a trace non-increasing + family, and its isometry property. +- `CPTP_of_CPTNI` : every quantum operation extends to a quantum channel. +- `stinespringForm_eq` : a version of the Stinespring dilation theorem, + `tr₂ (stinespringDilation K ρ) = krausApply K ρ`. + +## iii. Table of contents + +- A. Kraus maps and density matrices +- B. The Stinespring isometry +- C. Extending the Stinespring columns to an orthonormal basis +- D. The unitary dilation +- E. Stinespring forms +- F. The Kraus completion +- G. Partial traces and unitary dilations +- H. Completing quantum operations to channels +- I. The Stinespring dilation theorem + +## iv. References + +* None. + -/ @[expose] public section @@ -23,6 +72,12 @@ TODO "There is a different version of the Stienspring dilation in open Matrix MatrixOrder ComplexOrder RCLike TensorProduct Kronecker +/-! + +## A. Kraus maps and density matrices + +-/ + /-- Completely positive map given by a (not necessarily minimal) Kraus family. -/ def krausApply {R : Type*} [Mul R] [Star R] [AddCommMonoid R] {q r : Type*} [Fintype q] [Fintype r] @@ -63,6 +118,12 @@ def densityMatrix.convexComb {R : Type*} [RCLike R] · rw [trace_add, trace_smul, smul_eq_mul, trace_smul, ρ₀.2.2, ρ₁.2.2] simp⟩ +/-! + +## B. The Stinespring isometry + +-/ + /-- Also known as `partialTraceRight`. -/ def tr₂ {R : Type*} [Ring R] {m n m' : Type*} [Fintype n] (ρ : Matrix (m × n) (m' × n) R) : Matrix m m' R := @@ -167,6 +228,12 @@ lemma stinespringOrtho {R : Type*} [RCLike R] ext x ring_nf +/-! + +## C. Extending the Stinespring columns to an orthonormal basis + +-/ + /-- `m` will of course be finite and bounded by `n` here, but no need to assume or prove that. -/ @@ -335,6 +402,12 @@ lemma onbPart_norm {R : Type*} [RCLike R] {m r : ℕ} {K : Fin r → Matrix (Fin +/-! + +## D. The unitary dilation + +-/ + /-- Also known as `unitaryDilation`. Respects x,y order. -/ def Ud {R : Type*} [RCLike R] {m r : ℕ} {K : Fin r → Matrix (Fin m) (Fin m) R} @@ -503,6 +576,12 @@ lemma Ud_unitary {R : Type*} [RCLike R] · exact this · exact (mul_eq_one_comm_of_card_eq _ _ _ rfl).mp this +/-! + +## E. Stinespring forms + +-/ + open Kronecker TensorProduct /-- Taking the partial trace of a tensor product with a matrix of trace 1 is the @@ -670,6 +749,12 @@ lemma stinespringUnitaryForm_works {R : Type*} [RCLike R] {m r : ℕ} rw [← stinespringGeneralForm_works K z (Ud hK z) ] rw [unitaryForm_of_general] +/-! + +## F. The Kraus completion + +-/ + /-- The "orthogonal" CPTP completion of a CPTNI map. `Vtilde` is an alternative name for `krausCompletion`. -/ @@ -747,6 +832,12 @@ lemma krausCompletion_isometry_of_TNI {R : Type*} [RCLike R] {m r : ℕ} abel +/-! + +## G. Partial traces and unitary dilations + +-/ + /-- A unital operator. -/ def unital {R : Type*} [RCLike R] {m r : ℕ} (K : Fin r → Matrix (Fin m) (Fin m) R) := ∑ i, K i * star (K i) = 1 @@ -790,6 +881,12 @@ lemma trace_tr₂ {R : Type*} [RCLike R] {m n : ℕ} trace ρ = trace (tr₂ ρ) := Fintype.sum_prod_type fun x ↦ ρ x x +/-! + +## H. Completing quantum operations to channels + +-/ + /-- The Kraus completion as a map from operations to channels. -/ def krausCompletionChannelMap {R : Type*} [RCLike R] {q r : ℕ} @@ -833,6 +930,12 @@ lemma CPTP_of_CPTNI {R : Type*} [RCLike R] simp · exact False.elim <| H <| Fin.eq_last_of_not_lt g₀ +/-! + +## I. The Stinespring dilation theorem + +-/ + /-- Partial trace on the left of a tensor product. -/ def partialTraceLeft {R : Type*} [RCLike R] {m n : Type*} [Fintype m] diff --git a/PhyslibAlpha/Relativity/General/Schwarzschild/IncompressibleSphere.lean b/PhyslibAlpha/Relativity/General/Schwarzschild/IncompressibleSphere.lean index 505ef62d7c..2620a31d4b 100644 --- a/PhyslibAlpha/Relativity/General/Schwarzschild/IncompressibleSphere.lean +++ b/PhyslibAlpha/Relativity/General/Schwarzschild/IncompressibleSphere.lean @@ -14,6 +14,8 @@ public import Mathlib.Analysis.Calculus.Deriv.Pow # Schwarzschild's incompressible fluid sphere and its junction with the exterior solution +Junction of Schwarzschild's incompressible fluid sphere with the exterior Schwarzschild metric. + ## i. Overview In his second 1916 paper, Schwarzschild solved Einstein's equations for a static sphere of diff --git a/PhyslibAlpha/SpaceAndTime/Space/Surfaces/HalfPlane.lean b/PhyslibAlpha/SpaceAndTime/Space/Surfaces/HalfPlane.lean index 6f6c91d9ef..efbb3de3cf 100644 --- a/PhyslibAlpha/SpaceAndTime/Space/Surfaces/HalfPlane.lean +++ b/PhyslibAlpha/SpaceAndTime/Space/Surfaces/HalfPlane.lean @@ -8,10 +8,36 @@ module public import PhyslibAlpha.SpaceAndTime.Space.Surfaces.Line /-! -## Half-plane surface in `Space 3` +# Half-plane surface in `Space 3` + +The half-plane in `Space 3` with its measure, distribution and vanishing ambient volume. + +## i. Overview The half-plane is the coordinate plane in `Space 3` with nonnegative second -coordinate. +coordinate. It is the image of the domain `halfPlaneDomain` in `Space 2` under the coordinate +plane embedding `halfPlane`. Pushing forward the restricted volume gives the measure +`halfPlaneMeasure`, and integrating against it gives the distribution `halfPlaneDist`. The +half-plane lies in a proper linear subspace, so it has ambient volume zero. + +## ii. Key results + +- `halfPlaneDomain` : the domain of the half-plane inside `Space 2`. +- `halfPlane` : the coordinate plane embedding of `Space 2` into `Space 3`. +- `halfPlaneMeasure` : the measure corresponding to integration over the half-plane. +- `halfPlaneDist` : the distribution corresponding to integration over the half-plane. +- `volume_halfPlane_image_domain` : the half-plane has ambient volume zero. + +## iii. Table of contents + +- A. The definition of the half-plane surface +- B. The measure associated with the half-plane +- C. The distribution associated with the half-plane +- D. The half-plane has ambient volume zero + +## iv. References + +* None. -/ diff --git a/PhyslibAlpha/SpaceAndTime/Space/Surfaces/Line.lean b/PhyslibAlpha/SpaceAndTime/Space/Surfaces/Line.lean index 24e0b87ba2..5b6a564063 100644 --- a/PhyslibAlpha/SpaceAndTime/Space/Surfaces/Line.lean +++ b/PhyslibAlpha/SpaceAndTime/Space/Surfaces/Line.lean @@ -9,7 +9,36 @@ public import Physlib.SpaceAndTime.Space.Integrals.Basic public import Mathlib.MeasureTheory.Measure.Lebesgue.EqHaar /-! -## Line surfaces in `Space d` +# Line surfaces in `Space d` + +The coordinate line in `Space d` with its measure, distribution and vanishing ambient volume. + +## i. Overview + +The line surface is the coordinate line in `Space d`, the image of `ℝ` under the embedding +`line d`. Pushing forward the volume on `ℝ` gives the measure `lineMeasure d`, and integrating +against it gives the distribution `lineDist d`, roughly the integral of a test function against a +density concentrated on a line. For `2 ≤ d` the line lies in a proper linear subspace, so it has +ambient volume zero. + +## ii. Key results + +- `line` : the coordinate line embedded in `Space d`. +- `lineMeasure` : the measure corresponding to integration along the line. +- `lineDist` : the distribution corresponding to integration along the line. +- `lineSubmodule` : the linear subspace spanned by the line. +- `volume_line_range` : for `2 ≤ d` the line has ambient volume zero. + +## iii. Table of contents + +- A. The definition of the line surface +- B. The measure associated with the line +- C. The distribution associated with the line +- D. The line has ambient volume zero + +## iv. References + +* None. -/ @[expose] public section diff --git a/PhyslibAlpha/SpaceAndTime/Space/Surfaces/Ring.lean b/PhyslibAlpha/SpaceAndTime/Space/Surfaces/Ring.lean index 146b21d0fd..7846ec5628 100644 --- a/PhyslibAlpha/SpaceAndTime/Space/Surfaces/Ring.lean +++ b/PhyslibAlpha/SpaceAndTime/Space/Surfaces/Ring.lean @@ -9,7 +9,35 @@ public import Physlib.SpaceAndTime.Space.Translations public import Mathlib.MeasureTheory.Integral.BoundedContinuousFunction /-! -## Ring surface in `Space 3` +# Ring surface in `Space 3` + +The unit ring in `Space 3` with its measure and the distribution of integration around it. + +## i. Overview + +The ring surface is the unit circle `S¹` of `Space 2`, embedded into `Space 3` by `ring`. Pushing +forward the measure on the sphere gives the finite measure `ringMeasure`, of total mass `2π`, and +integrating against it gives the distribution `ringDist`. The file also gives integrability +criteria for continuous functions and the invariance of `ringMeasure.prod volume` under a shear. + +## ii. Key results + +- `ring` : the embedding of the unit circle into `Space 3`. +- `ringMeasure` : the measure corresponding to integration around the ring. +- `ringMeasure_univ` : the total mass of the ring measure is `2π`. +- `integrable_ringMeasure_of_continuous` : continuous functions on the ring are integrable. +- `ringDist` : the distribution corresponding to integration around the ring. +- `ringDist_eq_integral_delta` : `ringDist` as an integral of Dirac deltas over the ring. + +## iii. Table of contents + +- A. The definition of the ring surface +- B. The measure associated with the ring +- C. The distribution associated with the ring + +## iv. References + +* None. -/ @[expose] public section diff --git a/PhyslibAlpha/SpaceAndTime/Space/Surfaces/SolidCylinder.lean b/PhyslibAlpha/SpaceAndTime/Space/Surfaces/SolidCylinder.lean index 747747436b..2764fd9295 100644 --- a/PhyslibAlpha/SpaceAndTime/Space/Surfaces/SolidCylinder.lean +++ b/PhyslibAlpha/SpaceAndTime/Space/Surfaces/SolidCylinder.lean @@ -10,7 +10,11 @@ public import Physlib.SpaceAndTime.Space.Integrals.Basic public import Mathlib.MeasureTheory.Integral.Prod /-! -## Solid cylinder surface in `Space 3` +# Solid cylinder surface in `Space 3` + +The solid unit cylinder in `Space 3` with its measure, distribution and positive volume. + +## i. Overview The solid cylinder is the closed unit disk in `Space 2` extruded along the third coordinate. It is the solid analogue of the spherical cylinder, in the same way that the solid sphere is the @@ -20,6 +24,24 @@ disk (the solid-sphere measure in `Space 2`) extruded along the axis, rather tha a lower-dimensional surface measure. The measure-zero requirement is therefore not applicable here and is replaced by a statement that the solid cylinder has positive ambient volume. +## ii. Key results + +- `solidCylinder` : the embedding of a cross-sectional disk extruded along the axis. +- `solidCylinderMeasure` : the measure corresponding to integration over the solid cylinder. +- `solidCylinderDist` : the distribution corresponding to integration over the solid cylinder. +- `solidCylinderMeasure_univ_pos` : the solid cylinder has positive measure. + +## iii. Table of contents + +- A. The definition of the solid cylinder surface +- B. The measure associated with the solid cylinder +- C. The distribution associated with the solid cylinder +- D. The solid cylinder has positive ambient volume + +## iv. References + +* None. + -/ @[expose] public section diff --git a/PhyslibAlpha/SpaceAndTime/Space/Surfaces/SolidSphere.lean b/PhyslibAlpha/SpaceAndTime/Space/Surfaces/SolidSphere.lean index 58cd67b39c..69683dec76 100644 --- a/PhyslibAlpha/SpaceAndTime/Space/Surfaces/SolidSphere.lean +++ b/PhyslibAlpha/SpaceAndTime/Space/Surfaces/SolidSphere.lean @@ -9,7 +9,11 @@ public import Physlib.SpaceAndTime.Space.Integrals.Basic public import Mathlib.MeasureTheory.Measure.Lebesgue.EqHaar /-! -## Solid sphere surfaces in `Space d` +# Solid sphere surfaces in `Space d` + +The closed unit ball in `Space d` with its measure, distribution and positive volume. + +## i. Overview The solid sphere is the closed unit ball in `Space d`. Unlike the line or the spherical shell, it is a region of positive ambient volume, so the measure associated with it is the @@ -17,6 +21,24 @@ ambient volume restricted to the ball rather than a pushforward of a lower-dimen The requirement that the surface has ambient measure zero is therefore not applicable here, and is replaced by a statement that the solid sphere has positive ambient volume. +## ii. Key results + +- `solidSphere` : the inclusion of the closed unit ball into `Space d`. +- `solidSphereMeasure` : the measure corresponding to integration over the solid sphere. +- `solidSphereDist` : the distribution corresponding to integration over the solid sphere. +- `solidSphere_volume_pos`, `solidSphereMeasure_univ_pos` : the solid sphere has positive volume. + +## iii. Table of contents + +- A. The definition of the solid sphere surface +- B. The measure associated with the solid sphere +- C. The distribution associated with the solid sphere +- D. The solid sphere has positive ambient volume + +## iv. References + +* None. + -/ @[expose] public section open SchwartzMap NNReal diff --git a/PhyslibAlpha/SpaceAndTime/Space/Surfaces/SphericalCylinder.lean b/PhyslibAlpha/SpaceAndTime/Space/Surfaces/SphericalCylinder.lean index 129d8ac2bc..bfbc411f11 100644 --- a/PhyslibAlpha/SpaceAndTime/Space/Surfaces/SphericalCylinder.lean +++ b/PhyslibAlpha/SpaceAndTime/Space/Surfaces/SphericalCylinder.lean @@ -10,10 +10,32 @@ public import Physlib.SpaceAndTime.Space.Integrals.Basic public import Mathlib.MeasureTheory.Integral.Prod /-! -## Spherical cylinder surface in `Space 3` +# Spherical cylinder surface in `Space 3` + +The unit spherical cylinder in `Space 3` with its measure and distribution. + +## i. Overview The spherical cylinder is the unit circular shell in `Space 2` extruded along the -third coordinate. +third coordinate. The embedding `sphericalCylinder` pushes forward the product of the sphere +measure and the volume on the axis to give `sphericalCylinderMeasure`, and integrating against it +gives the distribution `sphericalCylinderDist`. + +## ii. Key results + +- `sphericalCylinder` : the embedding of the unit circle extruded along the axis. +- `sphericalCylinderMeasure` : the measure corresponding to integration over the cylinder. +- `sphericalCylinderDist` : the distribution corresponding to integration over the cylinder. + +## iii. Table of contents + +- A. The definition of the spherical cylinder surface +- B. The measure associated with the spherical cylinder +- C. The distribution associated with the spherical cylinder + +## iv. References + +* None. -/ diff --git a/PhyslibAlpha/SpaceAndTime/Space/Surfaces/SphericalShell.lean b/PhyslibAlpha/SpaceAndTime/Space/Surfaces/SphericalShell.lean index a386081e4d..80f4bae1d7 100644 --- a/PhyslibAlpha/SpaceAndTime/Space/Surfaces/SphericalShell.lean +++ b/PhyslibAlpha/SpaceAndTime/Space/Surfaces/SphericalShell.lean @@ -9,8 +9,32 @@ public import Physlib.SpaceAndTime.Space.Norm.Basic public import Mathlib.MeasureTheory.Integral.IntervalIntegral.Basic /-! -## Spherical surfaces on Space. +# Spherical surfaces on Space +The unit sphere in `Space d` with its measure and the distribution of integration over it. + +## i. Overview + +The spherical shell is the unit sphere `S^{d-1}` of `Space d`, included by `sphericalShell d`. +Pushing forward the sphere measure gives `sphericalShellMeasure d`, and integrating against it +gives the distribution `sphericalShellDist d`, which one can roughly think of as taking a test +function to its integral against a mass, charge or current distribution on the shell. + +## ii. Key results + +- `sphericalShell` : the inclusion of the unit sphere into `Space d`. +- `sphericalShellMeasure` : the measure corresponding to integration over the spherical shell. +- `sphericalShellDist` : the distribution corresponding to integration over the spherical shell. + +## iii. Table of contents + +- A. The definition of the spherical shell surface +- B. The measure associated with the spherical shell +- C. The distribution associated with the spherical shell + +## iv. References + +* None. -/ @[expose] public section diff --git a/scripts/MetaPrograms/module_doc_lint.lean b/scripts/MetaPrograms/module_doc_lint.lean index be8cb45560..3434162246 100644 --- a/scripts/MetaPrograms/module_doc_lint.lean +++ b/scripts/MetaPrograms/module_doc_lint.lean @@ -15,197 +15,285 @@ This file lints the module documentation for consistency. It currently only checks module headings, and as such many improvements to this file could be made. +Headings are only read from module documentation (`/-! … -/` blocks), outside of code fences, +so `#check` commands and headings in declaration docstrings are ignored. +Errors are reported grouped by the kind of error, each with a file and line number. + +This linter is run in CI and must pass. Files listed in +`scripts/MetaPrograms/module_doc_no_lint.txt` are not checked. + -/ open Lean System Meta - /-! -## Checking headings +## Reading the module documentation -/ -structure DocLintError where - msg : String - file : FilePath +/-- `s` with leading and trailing whitespace removed. -/ +def strip (s : String) : String := s.trimAscii.copy -def getHeaddings (f : FilePath) : IO (Array String) := do - let lines ← IO.FS.lines f - return lines.filter (fun l ↦ l.trim.startsWith "#") +/-- `s` with trailing whitespace removed. -/ +def rstrip (s : String) : String := + String.ofList (s.toList.reverse.dropWhile Char.isWhitespace).reverse + +/-- The lines of module documentation in a file, paired with their (1-indexed) line numbers. + Lines inside code fences, and the fence markers themselves, are left out. -/ +def moduleDocLines (lines : Array String) : Array (Nat × String) := Id.run do + let mut out : Array (Nat × String) := #[] + let mut inDoc := false + let mut inFence := false + let mut n := 0 + for line in lines do + n := n + 1 + let content : Option String := + if inDoc then some line + else + let t := strip line + if t.startsWith "/-!" then some ("/-!".intercalate ((t.splitOn "/-!").drop 1)) else none + if let some c := content then + unless inDoc do + inDoc := true + inFence := false + let (c, closes) := match c.splitOn "-/" with + | x :: _ :: _ => (x, true) + | _ => (c, false) + if (strip c).startsWith "```" then + inFence := !inFence + else if !inFence then + out := out.push (n, c) + if closes then inDoc := false + return out + +/-- A heading in the module documentation. -/ +structure Heading where + /-- The line number of the heading. -/ + line : Nat + /-- The number of leading `#`s. -/ + level : Nat + /-- The heading after the leading `#`s, with surrounding whitespace removed. -/ + text : String + /-- The whole heading, with surrounding whitespace removed. -/ + raw : String + /-- Whether the leading `#`s are followed by a space (or nothing). -/ + spaced : Bool +deriving Inhabited -def getTableOfContents (f : FilePath) : IO (Array String) := do - let lines := (← IO.FS.lines f).toList - let tofC := ((lines.splitAt (lines.findIdx (fun l ↦ l.trim == "## iii. Table of contents")+1))).2 - let toc := (tofC.splitAt (tofC.findIdx (fun l ↦ l.trim == "## iv. References"))).1 - return toc.toArray +def parseHeading (n : Nat) (line : String) : Option Heading := + let raw := strip line + if !raw.startsWith "#" then none else + let cs := raw.toList + let hashes := cs.takeWhile (· == '#') + let rest := cs.drop hashes.length + some { line := n, level := hashes.length, text := strip (String.ofList rest), raw, + spaced := rest.head?.all (· == ' ') } -inductive Steps where +/-! + +## Kinds of errors + +-/ + +inductive ErrorKind where + | noModuleDoc | titleHead + | extraTitle | overviewHead | keyResultsHead | tableOfContentsHead | referencesHead - | otherHeadings - | headingsNoFullStops + | sectionOrder + | noSections + | sectionTag + | duplicateTag + | headingFullStop | tableOfContentsCorrect deriving DecidableEq -def Steps.toString : Steps → String - | .titleHead => "Add a title heading starting with '# ' for the whole module." +/-- All kinds of errors, in the order they are reported. -/ +def ErrorKind.all : List ErrorKind := + [.noModuleDoc, .titleHead, .extraTitle, .overviewHead, .keyResultsHead, .tableOfContentsHead, + .referencesHead, .sectionOrder, .noSections, .sectionTag, .duplicateTag, .headingFullStop, + .tableOfContentsCorrect] + +def ErrorKind.name : ErrorKind → String + | .noModuleDoc => "No module documentation headings" + | .titleHead => "Missing or malformed title" + | .extraTitle => "Extra title headings" + | .overviewHead => "Missing or malformed overview section" + | .keyResultsHead => "Missing or malformed key results section" + | .tableOfContentsHead => "Missing or malformed table of contents section" + | .referencesHead => "Missing or malformed references section" + | .sectionOrder => "Standard sections out of order" + | .noSections => "No section headings" + | .sectionTag => "Malformed section tags" + | .duplicateTag => "Duplicate section tags" + | .headingFullStop => "Headings ending in a full stop" + | .tableOfContentsCorrect => "Table of contents does not match headings" + +def ErrorKind.hint : ErrorKind → String + | .noModuleDoc => "Add module documentation `/-! … -/` with the standard headings." + | .titleHead => "Add a title heading starting with '# ' for the whole module, as the first heading." + | .extraTitle => "Only the module title should use '# '; use '## A.', '### A.1.' etc. for sections." | .overviewHead => "Add an overview section '## i. Overview' after the title heading." | .keyResultsHead => "Add a key results section '## ii. Key results' after the overview section." | .tableOfContentsHead => "Add a table of contents section '## iii. Table of contents' after the key results section. This can be filled in later." | .referencesHead => "Add a references section '## iv. References' after the table of contents section." - | .otherHeadings => "Add other headings for sections and subsections using e.g. '## A.', '### A.1.', '#### A.1.2' etc." - | .headingsNoFullStops => "Ensure all headings do not end in a full stop." + | .sectionOrder => "The headings should start: title, '## i. Overview', '## ii. Key results', '## iii. Table of contents', '## iv. References'." + | .noSections => "Add other headings for sections and subsections using e.g. '## A.', '### A.1.', '#### A.1.2' etc." + | .sectionTag => "Section tags end in a dot and have one dot fewer than the heading has '#'s, e.g. '## A.', '### A.1.', '#### A.1.2.'." + | .duplicateTag => "Each section tag should be used only once." + | .headingFullStop => "Ensure all headings do not end in a full stop." | .tableOfContentsCorrect => "Fix the table of contents to match the headings in the file." -def Steps.anyTrue (e : Steps → Bool × String) : Bool := - (e .titleHead).1 || (e .overviewHead).1 || (e .keyResultsHead).1 || - (e .tableOfContentsHead).1 || (e .referencesHead).1 || - (e .otherHeadings).1 || (e .headingsNoFullStops).1 || - (e .tableOfContentsCorrect).1 - -def checkHeadings (f : FilePath) : IO (List DocLintError) := do - let headings ← getHeaddings f - let mut errors : Steps → Bool × String := fun _ ↦ (false, "") - - /- Step: titleHead. -/ - - let title := headings[0]? - let mut titleError := "" - match title with - | none => - titleError := "No title heading found" - | some t => - if !(t.startsWith "# ") then - titleError := s!"Title heading '{t}' does not start with '# '" - if titleError ≠ "" then - errors := Function.update errors .titleHead (true, titleError) - - /- Step: overviewHead -/ - - let overview := headings[1]? - let mut overviewError := "" - match overview with - | none => - overviewError := " No overview heading found" - | some o => - if o ≠ "## i. Overview" then - overviewError := s!" Overview heading '{o}' is not '## i. Overview'" - if overviewError ≠ "" then - errors := Function.update errors .overviewHead (true, overviewError) - - /- Step: keyResultsHead -/ - - let keyResults := headings[2]? - let mut keyResultsError := "" - match keyResults with - | none => - keyResultsError := " No key results heading found" - | some k => - if k ≠ "## ii. Key results" then - keyResultsError := s!" Key results heading '{k}' is not '## ii. Key results'" - if keyResultsError ≠ "" then - errors := Function.update errors .keyResultsHead (true, keyResultsError) - - /- Step: tableOfContentsHead -/ - let toc := headings[3]? - let mut tocError := "" - match toc with - | none => - tocError := " No table of contents heading found" - | some t => - if t ≠ "## iii. Table of contents" then - tocError := s!"Table of contents heading '{t}' is not '## iii. Table of contents'" - if tocError ≠ "" then - errors := Function.update errors .tableOfContentsHead (true, tocError) - - /- Step: referencesHead -/ - let references := headings[4]? - let mut referencesError := "" - match references with - | none => - referencesError := " No references heading found" - | some r => - if r ≠ "## iv. References" then - referencesError := s!" References heading '{r}' is not '## iv. References'" - if referencesError ≠ "" then - errors := Function.update errors .referencesHead (true, referencesError) - /- Step: otherHeadings. -/ - let mut otherHeadingsError := "" - let otherHeadings := headings.drop 5 - if otherHeadings.any (fun h ↦ h.startsWith "# ") then - otherHeadingsError := otherHeadingsError ++ s!" Other headings found with `# `: {otherHeadings.filter (fun h ↦ h.startsWith "# ")}" - if otherHeadings = #[] then - otherHeadingsError := otherHeadingsError ++ " No other headings found" - let otherHeaddingsSplit := otherHeadings.map (fun h ↦ (h.splitOn " ").take 2) - /- Should be something like '[##, ###, ##]`. -/ - let levels := otherHeaddingsSplit.map (fun h ↦ h[0]!) - /- levels should be something like '[##, ###, ##]`. -/ - let notJustHashes := levels.filter (fun l ↦ !(l.all (· == '#'))) - if notJustHashes.size ≠ 0 then - otherHeadingsError := otherHeadingsError ++ s!"\n Malformed space: {notJustHashes}" - /- Every section reference should end in a dot. -/ - let levelsNoDot := otherHeaddingsSplit.filter (fun l ↦ !(l[1]!.endsWith ".")) - if levelsNoDot.size ≠ 0 then - otherHeadingsError := otherHeadingsError ++ s!"\n Section references not ending in a dot: {levelsNoDot}" - /- The number of dots should equal one less then the number of dashes e.g. - ## A., ### A.1. etc. -/ - let badLevels := otherHeaddingsSplit.filter (fun l ↦ l[0]!.count '#' ≠ l[1]!.count '.' + 1 ) - if badLevels.size ≠ 0 then - otherHeadingsError := otherHeadingsError ++ s!"\n Section references with the wrong number of hashes: {badLevels}" - /- Duplicate tags -/ - if ¬ List.Nodup otherHeaddingsSplit.toList then - let dups := otherHeaddingsSplit.toList.filter (fun x ↦ otherHeaddingsSplit.toList.count x > 1) - otherHeadingsError := otherHeadingsError ++ s!"\n Duplicate section tags found {dups}" - if otherHeadingsError ≠ "" then - errors := Function.update errors .otherHeadings (true, otherHeadingsError) - /- Step: headingsNoFullStops -/ - - let mut headingsNoFullStopsError := "" - let headingsWithFullStops := headings.filter (fun h ↦ h.trim.endsWith ".") - if headingsWithFullStops.size ≠ 0 then - headingsNoFullStopsError := s!" Headings ending in a full stop found: {headingsWithFullStops}" - if headingsNoFullStopsError ≠ "" then - errors := Function.update errors .headingsNoFullStops (true, headingsNoFullStopsError) - /- Table of contents check. -/ - let tocLines ← getTableOfContents f - let mut tocCorrectError := "" - let expectedLevel1 (n : ℕ) := (otherHeadings.filter (fun l ↦ l.count '#' ≤ n)).map fun l => - let l' := l - let l' := l'.replace "#### " " - " - let l' := l'.replace "### " " - " - let l' := l'.replace "## " "- " - l' - let tocLinesNoEmpty := tocLines.filter (fun l ↦ l.trim ≠ "") - if tocLinesNoEmpty ≠ expectedLevel1 4 then - tocCorrectError := s!" Table of contents does not match headings. \n Given: -{String.intercalate "\n" tocLinesNoEmpty.toList}\n Expected: -{String.intercalate "\n" (expectedLevel1 4).toList}\nEnd of Error." - if tocCorrectError ≠ "" then - errors := Function.update errors .tableOfContentsCorrect (true, tocCorrectError) - - /- - ## Formatting the error - -/ - if Steps.anyTrue errors then - let mut errormsg := "\n" - let mut n := (1 : ℕ) - for e in [Steps.titleHead, .overviewHead, .keyResultsHead, .tableOfContentsHead, - .referencesHead, .otherHeadings, .headingsNoFullStops, .tableOfContentsCorrect] do - let (b, s) := errors e - - if b then - errormsg := errormsg ++ "\x1b[33mStep " ++ toString n ++ ": " ++ Steps.toString e ++ "\x1b[0m\n" ++ s ++ "\n" - else - errormsg := errormsg ++ "\x1b[32mStep " ++ toString n ++ ": " ++ Steps.toString e ++ "\x1b[0m\n" - n := n + 1 - return [{msg := errormsg, file := f}] - else - return [] +structure DocLintError where + kind : ErrorKind + file : FilePath + line : Nat + msg : String +/-! + +## Checking headings + +-/ + +/-- One of the standard sections following the title. -/ +structure StandardSection where + kind : ErrorKind + /-- The heading exactly as it should appear. -/ + expected : String + /-- The heading with numbering, case and a trailing dot ignored, used to find near misses. -/ + key : String + +def standardSections : List StandardSection := + [⟨.overviewHead, "## i. Overview", "overview"⟩, + ⟨.keyResultsHead, "## ii. Key results", "key results"⟩, + ⟨.tableOfContentsHead, "## iii. Table of contents", "table of contents"⟩, + ⟨.referencesHead, "## iv. References", "references"⟩] + +/-- The text of a heading with a leading roman numeral, case and a trailing dot ignored. -/ +def Heading.key (h : Heading) : String := + let ws := (h.text.splitOn " ").filter (· ≠ "") + let ws := match ws with + | w :: rest => if ["i.", "ii.", "iii.", "iv."].contains w.toLower then rest else ws + | [] => [] + let s := (" ".intercalate ws).toLower + if s.endsWith "." then String.ofList s.toList.dropLast else s + +def hashes (n : Nat) : String := String.ofList (List.replicate n '#') + +/-- The first difference between the given table of contents entries (with line numbers) and the + expected ones, as an optional line number and a message. -/ +def tocMismatch : List (Nat × String) → List String → Option (Option Nat × String) + | [], [] => none + | (n, x) :: gs, y :: es => + if x == y then tocMismatch gs es else some (some n, s!"Entry '{x}' should be '{y}'") + | [], y :: es => + some (none, s!"Missing entry '{y}'" ++ if es.isEmpty then "" else s!" (and {es.length} more)") + | (n, x) :: gs, [] => + some (some n, s!"Unexpected entry '{x}'" ++ if gs.isEmpty then "" else s!" (and {gs.length} more)") + +def checkHeadings (f : FilePath) : IO (Array DocLintError) := do + let lines ← IO.FS.lines f + let docLines := moduleDocLines lines + let headings := docLines.filterMap fun (n, c) ↦ parseHeading n c + let err (kind : ErrorKind) (line : Nat) (msg : String) : DocLintError := + { kind, file := f, line, msg } + let some first := headings[0]? + | return #[err .noModuleDoc 1 <| if docLines.isEmpty + then "No module documentation `/-! … -/` found" + else "The module documentation has no headings"] + let mut errs : Array DocLintError := #[] + + /- Title. -/ + let hasTitle := first.level == 1 + let titleLine := first.line + if !hasTitle then + errs := errs.push <| err .titleHead first.line + s!"The first heading '{first.raw}' should be a title starting with '# '" + else if !first.spaced then + errs := errs.push <| err .titleHead first.line + s!"The title '{first.raw}' should start with '# '" + for h in headings.toList.drop 1 do + if h.level == 1 then + errs := errs.push <| err .extraTitle h.line s!"'{h.raw}' uses '# ', which is for the title" + + /- Standard sections, found by name rather than by position. -/ + let mut standardIdx : Array (Option Nat) := #[] + for s in standardSections do + match headings.findIdx? (·.raw == s.expected) with + | some i => standardIdx := standardIdx.push (some i) + | none => + match headings.findIdx? (·.key == s.key) with + | some i => + errs := errs.push <| err s.kind headings[i]!.line + s!"Heading '{headings[i]!.raw}' should be exactly '{s.expected}'" + standardIdx := standardIdx.push (some i) + | none => + errs := errs.push <| err s.kind titleLine s!"Missing '{s.expected}'" + standardIdx := standardIdx.push none + let mut prev : Option Nat := if hasTitle then some 0 else none + for oi in standardIdx do + if let some i := oi then + if let some p := prev then + if i ≠ p + 1 then + errs := errs.push <| err .sectionOrder headings[i]!.line + s!"'{headings[i]!.raw}' should come directly after '{headings[p]!.raw}'" + prev := some i + + let standardHeading (kind : ErrorKind) : Option Nat := + ((standardSections.zip standardIdx.toList).find? (·.1.kind == kind)).bind (·.2) + /- The text of the module documentation between the heading `k` and the next heading. -/ + let body (k : Nat) : Array (Nat × String) := + let start := headings[k]!.line + let stop := (headings[k + 1]?.map (·.line)).getD (lines.size + 1) + (docLines.filter fun (n, c) ↦ start < n && n < stop && !(strip c).isEmpty).map + fun (n, c) ↦ (n, rstrip c) + + /- Section headings: everything other than the title and the standard sections. -/ + let claimed := standardIdx.filterMap id + let sections := (List.range headings.size).filterMap fun i ↦ + if (i == 0 && hasTitle) || claimed.contains i || headings[i]!.level == 1 then none + else headings[i]? + if sections.isEmpty then + errs := errs.push <| err .noSections titleLine "No section headings found" + let mut seen : List (String × Nat) := [] + for h in sections do + if !h.spaced then + errs := errs.push <| err .sectionTag h.line s!"'{h.raw}' needs a space after the '#'s" + continue + let tag := ((h.text.splitOn " ").head?).getD "" + if tag.isEmpty then + errs := errs.push <| err .sectionTag h.line s!"'{h.raw}' has no section tag" + continue + if !tag.endsWith "." then + errs := errs.push <| err .sectionTag h.line s!"Section tag '{tag}' should end in a dot" + else + let depth := tag.toList.count '.' + if depth + 1 ≠ h.level then + errs := errs.push <| err .sectionTag h.line + s!"Section tag '{tag}' should have heading level '{hashes (depth + 1)}', not '{hashes h.level}'" + match seen.lookup tag with + | some l => + errs := errs.push <| err .duplicateTag h.line s!"Section tag '{tag}' is already used on line {l}" + | none => seen := (tag, h.line) :: seen + + /- Full stops. -/ + for h in headings do + if h.raw.endsWith "." then + errs := errs.push <| err .headingFullStop h.line s!"'{h.raw}' ends in a full stop" + + /- Table of contents: the module documentation lines between its heading and the next one. -/ + if let some k := standardHeading .tableOfContentsHead then + let given := body k + let expected := (sections.filter fun h ↦ 2 ≤ h.level && h.level ≤ 4).map fun h ↦ + String.ofList (List.replicate (2 * (h.level - 2)) ' ') ++ "- " ++ h.text + if let some (line, msg) := tocMismatch given.toList expected then + errs := errs.push <| err .tableOfContentsCorrect (line.getD headings[k]!.line) msg + return errs /-- The array of modules not to be linted. -/ def noLintArray : IO (Array FilePath) := do @@ -219,34 +307,46 @@ def linterExemptions : IO (Array FilePath) := do let path := (mkFilePath ["scripts", "LinterExemption"]).addExtension "txt" unless (← path.pathExists) do return #[] let lines ← IO.FS.lines path - return lines.filterMap (fun l ↦ if l.trim == "" then none else some (mkFilePath [l.trim])) - -/-- The file paths of the modules imported into the module `mods` (e.g. `Physlib`). -/ -def importedFilePaths (mods : Name) : IO (Array FilePath) := do - let imp : Import := {module := mods} - let mFile ← findOLean imp.module - unless (← mFile.pathExists) do - throw <| IO.userError s!"object file '{mFile}' of module {imp.module} does not exist" - let (modData, _) ← readModuleData mFile - return modData.imports.filterMap (fun imp ↦ - if imp.module == `Init then - none - else - some ((mkFilePath (imp.module.toString.splitToList (· == '.'))).addExtension "lean")) + return lines.filterMap (fun l ↦ if l.trimAscii.isEmpty then none else some (mkFilePath [l.trimAscii.copy])) + +/-- The file paths of the modules imported by the root file of the library `lib` + (e.g. `Physlib.lean`). This reads the source file, so no build is needed. -/ +def importedFilePaths (lib : String) : IO (Array FilePath) := do + let lines ← IO.FS.lines (System.FilePath.mk lib |>.addExtension "lean") + return lines.filterMap fun l ↦ + match (strip l).splitOn " " |>.filter (· ≠ "") with + | ["import", m] | ["public", "import", m] => + some ((mkFilePath (m.splitOn ".")).addExtension "lean") + | _ => none def main (_ : List String) : IO UInt32 := do - initSearchPath (← findSysroot) - let filePaths := (← importedFilePaths `Physlib) ++ (← importedFilePaths `QuantumInfo) + let filePaths := (← importedFilePaths "Physlib") ++ (← importedFilePaths "QuantumInfo") ++ + (← importedFilePaths "PhyslibAlpha") let noLint ← noLintArray let exemptions ← linterExemptions let modulesToCheck := filePaths.filter (fun p ↦ !noLint.contains p ∧ !exemptions.contains p) - let errors := (← modulesToCheck.mapM checkHeadings).toList.flatten - /- Printing the errors -/ - for eM in errors do - IO.println s!"\x1b[31mError: \x1b[0m {eM.file}: {eM.msg}" - if errors.length > 0 then - IO.println "\n" - throw <| IO.userError s!"Errors found." - else - IO.println "\x1b[32mNo documentation style issues found.\x1b[0m" + let errors := (← modulesToCheck.mapM checkHeadings).flatten + let annotate := (← IO.getEnv "GITHUB_ACTIONS") == some "true" + let fileCount (es : Array DocLintError) := (es.map (·.file)).toList.eraseDups.length + /- Printing the errors, grouped by kind. -/ + for kind in ErrorKind.all do + let es := errors.filter (·.kind == kind) + if es.isEmpty then continue + IO.println s!"\x1b[1;31m{kind.name}\x1b[0m ({es.size} in {fileCount es} files)" + IO.println s!"\x1b[33m {kind.hint}\x1b[0m" + for e in es do + IO.println s!" {e.file}:{e.line}: {e.msg}" + if annotate then + IO.println s!"::error file={e.file},line={e.line},title={kind.name}::{e.msg}" + IO.println "" + if errors.size > 0 then + IO.println "\x1b[1mSummary\x1b[0m" + for kind in ErrorKind.all do + let es := errors.filter (·.kind == kind) + unless es.isEmpty do + IO.println s!" {es.size}\t{kind.name}" + IO.println s!"\x1b[1;31merror:\x1b[0m {errors.size} module documentation problems in \ + {fileCount errors} files." + return 1 + IO.println "\x1b[32mNo documentation style issues found.\x1b[0m" return 0 diff --git a/scripts/MetaPrograms/module_doc_no_lint.txt b/scripts/MetaPrograms/module_doc_no_lint.txt index f5d64c0945..6ee5dcb10e 100644 --- a/scripts/MetaPrograms/module_doc_no_lint.txt +++ b/scripts/MetaPrograms/module_doc_no_lint.txt @@ -1,49 +1,84 @@ Physlib/ClassicalMechanics/Basic.lean Physlib/ClassicalMechanics/EulerLagrange.lean +Physlib/ClassicalMechanics/Force.lean +Physlib/ClassicalMechanics/FreeParticle/Basic.lean Physlib/ClassicalMechanics/HamiltonsEquations.lean +Physlib/ClassicalMechanics/HarmonicOscillator/WithDim.lean +Physlib/ClassicalMechanics/Lagrangian/TotalDerivativeEquivalence.lean Physlib/ClassicalMechanics/Mass/MassUnit.lean +Physlib/ClassicalMechanics/OrbitalMechanics/VisViva.lean +Physlib/ClassicalMechanics/Pendulum/CoplanarDoublePendulum.lean +Physlib/ClassicalMechanics/Pendulum/MiscellaneousPendulumPivotMotions.lean +Physlib/ClassicalMechanics/Pendulum/SlidingPendulum.lean +Physlib/ClassicalMechanics/PointParticle/Basic.lean +Physlib/ClassicalMechanics/PointParticle/NewtonianSystem/Basic.lean +Physlib/ClassicalMechanics/RigidBody/AngularMomentum.lean +Physlib/ClassicalMechanics/RigidBody/AngularVelocity.lean Physlib/ClassicalMechanics/RigidBody/Basic.lean +Physlib/ClassicalMechanics/RigidBody/KineticEnergy.lean +Physlib/ClassicalMechanics/RigidBody/Motion.lean Physlib/ClassicalMechanics/RigidBody/SolidSphere.lean Physlib/ClassicalMechanics/Scattering/RigidSphere.lean -Physlib/ClassicalMechanics/VectorFields.lean Physlib/ClassicalMechanics/Vibrations/LinearTriatomic.lean Physlib/ClassicalMechanics/WaveEquation/HarmonicWave.lean +Physlib/CondensedMatter/BandTheory/Basic.lean Physlib/CondensedMatter/Basic.lean +Physlib/CondensedMatter/Crystal/Basic.lean +Physlib/CondensedMatter/LatticeModels/Basic.lean +Physlib/CondensedMatter/ManyBody/Basic.lean +Physlib/CondensedMatter/Response/Basic.lean +Physlib/CondensedMatter/Topology/Basic.lean Physlib/Cosmology/Basic.lean Physlib/Cosmology/FLRW/Basic.lean +Physlib/Cosmology/FLRW/ConformalTime.lean +Physlib/Cosmology/FLRW/DensityParameters.lean +Physlib/Cosmology/FLRW/Distances.lean +Physlib/Cosmology/FLRW/Dynamics.lean +Physlib/Cosmology/FLRW/MatterContent.lean +Physlib/Cosmology/FLRW/Solutions.lean Physlib/Electromagnetism/Basic.lean Physlib/Electromagnetism/Charge/ChargeUnit.lean -Physlib/Electromagnetism/Electrostatics/Basic.lean -Physlib/Electromagnetism/Electrostatics/OneDimension/Vacuum.lean -Physlib/Electromagnetism/Electrostatics/ThreeDimension/InfinitePlane.lean -Physlib/Electromagnetism/Electrostatics/ThreeDimension/PointParticle.lean -Physlib/Electromagnetism/FieldStrength/Basic.lean -Physlib/Electromagnetism/FieldStrength/Derivative.lean -Physlib/Electromagnetism/Homogeneous.lean -Physlib/Electromagnetism/MaxwellEquations.lean -Physlib/Electromagnetism/Vacuum/Homogeneous.lean -Physlib/Electromagnetism/Vacuum/OneDimension.lean +Physlib/Electromagnetism/Distributional/Dynamics/Lagrangian.lean +Physlib/Electromagnetism/Dynamics/IsExtrema.lean +Physlib/Electromagnetism/Kinematics/EMPotential.lean +Physlib/Electromagnetism/Kinematics/ElectricField.lean +Physlib/Electromagnetism/Kinematics/FieldStrength.lean +Physlib/Electromagnetism/Kinematics/MagneticField.lean +Physlib/Electromagnetism/Kinematics/ScalarPotential.lean +Physlib/Electromagnetism/Kinematics/VectorPotential.lean +Physlib/Electromagnetism/PointParticle/OneDimension.lean +Physlib/Electromagnetism/ThreeDimension/Basic.lean +Physlib/Electromagnetism/ThreeDimension/MaxwellEquations.lean +Physlib/LatticeQFT/Basic.lean Physlib/Mathematics/Calculus/AdjFDeriv.lean Physlib/Mathematics/Calculus/Divergence.lean +Physlib/Mathematics/Calculus/ParametricIntegration.lean +Physlib/Mathematics/Calculus/Wirtinger/Basic.lean +Physlib/Mathematics/Calculus/Wirtinger/Coordinate.lean Physlib/Mathematics/Distribution/Basic.lean -Physlib/Mathematics/Distribution/Function/InvPowMeasure.lean -Physlib/Mathematics/Distribution/Function/IsDistBounded.lean -Physlib/Mathematics/Distribution/Function/OfFunction.lean Physlib/Mathematics/Distribution/PowMul.lean Physlib/Mathematics/ForMathlib/DataStructures/Matrix/LieTrace.lean Physlib/Mathematics/ForMathlib/FDerivCurry.lean Physlib/Mathematics/ForMathlib/Fin.lean Physlib/Mathematics/ForMathlib/Fin/Involutions.lean +Physlib/Mathematics/ForMathlib/HasTemperateGrowth.lean Physlib/Mathematics/ForMathlib/LinearMaps.lean Physlib/Mathematics/ForMathlib/List.lean Physlib/Mathematics/ForMathlib/List/InsertIdx.lean Physlib/Mathematics/ForMathlib/List/InsertionSort.lean +Physlib/Mathematics/ForMathlib/OneParameterSubgroups/Basic.lean +Physlib/Mathematics/ForMathlib/OneParameterSubgroups/Unitary.lean +Physlib/Mathematics/ForMathlib/OrthogonalMatrix.lean Physlib/Mathematics/ForMathlib/SchurTriangulation.lean Physlib/Mathematics/ForMathlib/Trigonometry/Tanh.lean Physlib/Mathematics/Groups/SO3/Basic.lean Physlib/Mathematics/InnerProductSpace/Adjoint.lean Physlib/Mathematics/InnerProductSpace/Basic.lean Physlib/Mathematics/InnerProductSpace/Calculus.lean +Physlib/Mathematics/InnerProductSpace/Submodule.lean +Physlib/Mathematics/Modules/ConjModule.lean +Physlib/Mathematics/Modules/CrossProduct.lean +Physlib/Mathematics/Modules/CrossProductMatrix.lean Physlib/Mathematics/SpecialFunctions/PhysHermite.lean Physlib/Mathematics/VariationalCalculus/Basic.lean Physlib/Mathematics/VariationalCalculus/HasVarAdjDeriv.lean @@ -56,6 +91,7 @@ Physlib/Meta/Basic.lean Physlib/Meta/Informal/Basic.lean Physlib/Meta/Informal/Post.lean Physlib/Meta/Informal/SemiFormal.lean +Physlib/Meta/Linters/DefsWithUnderscore.lean Physlib/Meta/Linters/Sorry.lean Physlib/Meta/Notes/Basic.lean Physlib/Meta/Notes/HTMLNote.lean @@ -64,6 +100,7 @@ Physlib/Meta/Notes/ToHTML.lean Physlib/Meta/Remark/Basic.lean Physlib/Meta/Remark/Properties.lean Physlib/Meta/TODO/Basic.lean +Physlib/Meta/TODO/Global.lean Physlib/Meta/TransverseTactics.lean Physlib/Optics/Basic.lean Physlib/Optics/Polarization/Basic.lean @@ -86,7 +123,7 @@ Physlib/Particles/BeyondTheStandardModel/RHN/AnomalyCancellation/PlusU1/QuadSol. Physlib/Particles/BeyondTheStandardModel/RHN/AnomalyCancellation/PlusU1/QuadSolToSol.lean Physlib/Particles/BeyondTheStandardModel/Spin10/Basic.lean Physlib/Particles/BeyondTheStandardModel/TwoHDM/Basic.lean -Physlib/Particles/BeyondTheStandardModel/TwoHDM/GaugeOrbits.lean +Physlib/Particles/BeyondTheStandardModel/TwoHDM/GramMatrix.lean Physlib/Particles/FlavorPhysics/CKMMatrix/Basic.lean Physlib/Particles/FlavorPhysics/CKMMatrix/Invariants.lean Physlib/Particles/FlavorPhysics/CKMMatrix/PhaseFreedom.lean @@ -102,6 +139,13 @@ Physlib/Particles/StandardModel/AnomalyCancellation/NoGrav/One/Lemmas.lean Physlib/Particles/StandardModel/AnomalyCancellation/NoGrav/One/LinearParameterization.lean Physlib/Particles/StandardModel/AnomalyCancellation/Permutations.lean Physlib/Particles/StandardModel/Basic.lean +Physlib/Particles/StandardModel/Fermions/DownSinglet.lean +Physlib/Particles/StandardModel/Fermions/LeptonDoublet.lean +Physlib/Particles/StandardModel/Fermions/LeptonSinglet.lean +Physlib/Particles/StandardModel/Fermions/QuarkDoublet.lean +Physlib/Particles/StandardModel/Fermions/UpSinglet.lean +Physlib/Particles/StandardModel/HiggsBoson/Basic.lean +Physlib/Particles/StandardModel/HiggsBoson/EffectivePotential.lean Physlib/Particles/StandardModel/HiggsBoson/Potential.lean Physlib/Particles/StandardModel/Representations.lean Physlib/Particles/SuperSymmetry/MSSMNu/AnomalyCancellation/B3.lean @@ -113,6 +157,9 @@ Physlib/Particles/SuperSymmetry/MSSMNu/AnomalyCancellation/OrthogY3B3/PlaneWithY Physlib/Particles/SuperSymmetry/MSSMNu/AnomalyCancellation/OrthogY3B3/ToSols.lean Physlib/Particles/SuperSymmetry/MSSMNu/AnomalyCancellation/Permutations.lean Physlib/Particles/SuperSymmetry/MSSMNu/AnomalyCancellation/Y3.lean +Physlib/Particles/SuperSymmetry/SU5/ChargeSpectrum/Map.lean +Physlib/ProbabilisticTheory/OrderUnit/Basic.lean +Physlib/ProbabilisticTheory/OrderUnit/Cone.lean Physlib/QFT/AnomalyCancellation/GroupActions.lean Physlib/QFT/PerturbationTheory/CreateAnnihilate.lean Physlib/QFT/PerturbationTheory/FeynmanDiagrams/Basic.lean @@ -177,38 +224,66 @@ Physlib/QFT/QED/AnomalyCancellation/LineInPlaneCond.lean Physlib/QFT/QED/AnomalyCancellation/LowDim/One.lean Physlib/QFT/QED/AnomalyCancellation/LowDim/Three.lean Physlib/QFT/QED/AnomalyCancellation/LowDim/Two.lean +Physlib/QFT/QED/AnomalyCancellation/Odd/BasisLinear.lean Physlib/QFT/QED/AnomalyCancellation/Odd/LineInCubic.lean Physlib/QFT/QED/AnomalyCancellation/Odd/Parameterization.lean Physlib/QFT/QED/AnomalyCancellation/Permutations.lean Physlib/QFT/QED/AnomalyCancellation/Sorts.lean Physlib/QFT/QED/AnomalyCancellation/VectorLike.lean -Physlib/QuantumMechanics/FiniteTarget/Basic.lean -Physlib/QuantumMechanics/FiniteTarget/HilbertSpace.lean -Physlib/QuantumMechanics/OneDimension/GeneralPotential/Basic.lean -Physlib/QuantumMechanics/OneDimension/HarmonicOscillator/Basic.lean -Physlib/QuantumMechanics/OneDimension/HarmonicOscillator/Completeness.lean -Physlib/QuantumMechanics/OneDimension/HarmonicOscillator/Eigenfunction.lean -Physlib/QuantumMechanics/OneDimension/HarmonicOscillator/Examples.lean -Physlib/QuantumMechanics/OneDimension/HarmonicOscillator/TISE.lean -Physlib/QuantumMechanics/OneDimension/HilbertSpace/Basic.lean -Physlib/QuantumMechanics/OneDimension/HilbertSpace/Gaussians.lean -Physlib/QuantumMechanics/OneDimension/HilbertSpace/PlaneWaves.lean -Physlib/QuantumMechanics/OneDimension/HilbertSpace/PositionStates.lean -Physlib/QuantumMechanics/OneDimension/HilbertSpace/SchwartzSubmodule.lean -Physlib/QuantumMechanics/OneDimension/Operators/Commutation.lean -Physlib/QuantumMechanics/OneDimension/Operators/Momentum.lean -Physlib/QuantumMechanics/OneDimension/Operators/Parity.lean -Physlib/QuantumMechanics/OneDimension/Operators/Position.lean -Physlib/QuantumMechanics/OneDimension/Operators/Unbounded.lean -Physlib/QuantumMechanics/OneDimension/ReflectionlessPotential/Basic.lean +Physlib/QuantumMechanics/FiniteTarget.lean +Physlib/QuantumMechanics/HarmonicOscillator/Basic.lean +Physlib/QuantumMechanics/HarmonicOscillator/Eigenstates.lean +Physlib/QuantumMechanics/HarmonicOscillator/OneDimension/Basic.lean +Physlib/QuantumMechanics/HarmonicOscillator/OneDimension/Completeness.lean +Physlib/QuantumMechanics/HarmonicOscillator/OneDimension/Eigenfunction.lean +Physlib/QuantumMechanics/HarmonicOscillator/OneDimension/Examples.lean +Physlib/QuantumMechanics/HarmonicOscillator/OneDimension/TISE.lean +Physlib/QuantumMechanics/HilbertSpaces/FiniteTarget/Basic.lean +Physlib/QuantumMechanics/HilbertSpaces/OneDimension/Basic.lean +Physlib/QuantumMechanics/HilbertSpaces/OneDimension/Gaussians.lean +Physlib/QuantumMechanics/HilbertSpaces/OneDimension/PlaneWaves.lean +Physlib/QuantumMechanics/HilbertSpaces/OneDimension/PositionStates.lean +Physlib/QuantumMechanics/HilbertSpaces/OneDimension/SchwartzSubmodule.lean +Physlib/QuantumMechanics/HilbertSpaces/SpaceD/Basic.lean +Physlib/QuantumMechanics/HilbertSpaces/SpaceD/MomentumStates.lean +Physlib/QuantumMechanics/HilbertSpaces/SpaceD/PolyBddSchwartzSubmodule.lean +Physlib/QuantumMechanics/HilbertSpaces/SpaceD/PositionStates.lean +Physlib/QuantumMechanics/HilbertSpaces/SpaceD/SchwartzSubmodule.lean +Physlib/QuantumMechanics/Hydrogen/Basic.lean +Physlib/QuantumMechanics/Hydrogen/LaplaceRungeLenzVector.lean +Physlib/QuantumMechanics/Operators/AngularMomentum.lean +Physlib/QuantumMechanics/Operators/Examples.lean +Physlib/QuantumMechanics/Operators/OneDimension/Commutation.lean +Physlib/QuantumMechanics/Operators/OneDimension/Momentum.lean +Physlib/QuantumMechanics/Operators/OneDimension/Parity.lean +Physlib/QuantumMechanics/Operators/OneDimension/Position.lean +Physlib/QuantumMechanics/Operators/OneDimension/Unbounded.lean +Physlib/QuantumMechanics/Operators/Position.lean +Physlib/QuantumMechanics/Operators/StateObservables/ExpectedValue.lean +Physlib/QuantumMechanics/Operators/StateObservables/IsEigenvector.lean +Physlib/QuantumMechanics/Operators/StateObservables/Variance.lean +Physlib/QuantumMechanics/Operators/Unbounded.lean Physlib/QuantumMechanics/PlanckConstant.lean Physlib/Relativity/Bispinors/Basic.lean Physlib/Relativity/CliffordAlgebra.lean +Physlib/Relativity/Fermions/Dirac/Basic.lean +Physlib/Relativity/Fermions/Dirac/GammaMatrices.lean +Physlib/Relativity/Fermions/Dirac/Slash.lean +Physlib/Relativity/Fermions/Weyl/Contraction.lean +Physlib/Relativity/Fermions/Weyl/DualLeftHanded.lean +Physlib/Relativity/Fermions/Weyl/DualRightHanded.lean +Physlib/Relativity/Fermions/Weyl/Duals.lean +Physlib/Relativity/Fermions/Weyl/LeftHanded.lean +Physlib/Relativity/Fermions/Weyl/Metric.lean +Physlib/Relativity/Fermions/Weyl/RightHanded.lean +Physlib/Relativity/Fermions/Weyl/Two.lean +Physlib/Relativity/Fermions/Weyl/Unit.lean Physlib/Relativity/LorentzAlgebra/Basic.lean Physlib/Relativity/LorentzAlgebra/Basis.lean Physlib/Relativity/LorentzAlgebra/ExponentialMap.lean Physlib/Relativity/LorentzGroup/Basic.lean Physlib/Relativity/LorentzGroup/Boosts/Apply.lean +Physlib/Relativity/LorentzGroup/Boosts/Axis.lean Physlib/Relativity/LorentzGroup/Boosts/Basic.lean Physlib/Relativity/LorentzGroup/Boosts/Generalized.lean Physlib/Relativity/LorentzGroup/Orthochronous/Basic.lean @@ -223,14 +298,12 @@ Physlib/Relativity/PauliMatrices/CliffordAlgebra.lean Physlib/Relativity/PauliMatrices/Relations.lean Physlib/Relativity/PauliMatrices/SelfAdjoint.lean Physlib/Relativity/PauliMatrices/ToTensor.lean +Physlib/Relativity/SL2C/AxisRotations.lean Physlib/Relativity/SL2C/Basic.lean Physlib/Relativity/SL2C/SelfAdjoint.lean Physlib/Relativity/Special/ProperTime.lean Physlib/Relativity/Special/TwinParadox/Basic.lean Physlib/Relativity/Tensors/Basic.lean -Physlib/Relativity/Tensors/Color/Basic.lean -Physlib/Relativity/Tensors/Color/Discrete.lean -Physlib/Relativity/Tensors/Color/Lift.lean Physlib/Relativity/Tensors/ComplexTensor/Basic.lean Physlib/Relativity/Tensors/ComplexTensor/Lemmas.lean Physlib/Relativity/Tensors/ComplexTensor/Matrix/Pre.lean @@ -244,46 +317,65 @@ Physlib/Relativity/Tensors/ComplexTensor/Units/Symm.lean Physlib/Relativity/Tensors/ComplexTensor/Vector/Pre/Basic.lean Physlib/Relativity/Tensors/ComplexTensor/Vector/Pre/Contraction.lean Physlib/Relativity/Tensors/ComplexTensor/Vector/Pre/Modules.lean -Physlib/Relativity/Tensors/ComplexTensor/Weyl/Basic.lean -Physlib/Relativity/Tensors/ComplexTensor/Weyl/Contraction.lean -Physlib/Relativity/Tensors/ComplexTensor/Weyl/Metric.lean -Physlib/Relativity/Tensors/ComplexTensor/Weyl/Modules.lean -Physlib/Relativity/Tensors/ComplexTensor/Weyl/Two.lean -Physlib/Relativity/Tensors/ComplexTensor/Weyl/Unit.lean +Physlib/Relativity/Tensors/Conjugation/Basic.lean Physlib/Relativity/Tensors/Constructors.lean Physlib/Relativity/Tensors/Contraction/Basic.lean Physlib/Relativity/Tensors/Contraction/Basis.lean Physlib/Relativity/Tensors/Contraction/Products.lean Physlib/Relativity/Tensors/Contraction/Pure.lean +Physlib/Relativity/Tensors/Contraction/SuccSuccAbove.lean Physlib/Relativity/Tensors/Dual.lean Physlib/Relativity/Tensors/Elab.lean Physlib/Relativity/Tensors/Evaluation.lean +Physlib/Relativity/Tensors/LeviCivita/Complex.lean Physlib/Relativity/Tensors/MetricTensor.lean Physlib/Relativity/Tensors/OfInt.lean +Physlib/Relativity/Tensors/Product.lean Physlib/Relativity/Tensors/RealTensor/Basic.lean Physlib/Relativity/Tensors/RealTensor/CoVector/Basic.lean -Physlib/Relativity/Tensors/RealTensor/Derivative.lean +Physlib/Relativity/Tensors/RealTensor/CoVector/Representation.lean +Physlib/Relativity/Tensors/RealTensor/CoVector/Tensorial.lean Physlib/Relativity/Tensors/RealTensor/Matrix/Pre.lean Physlib/Relativity/Tensors/RealTensor/Metrics/Basic.lean Physlib/Relativity/Tensors/RealTensor/Metrics/Pre.lean +Physlib/Relativity/Tensors/RealTensor/Representation/Contraction.lean Physlib/Relativity/Tensors/RealTensor/ToComplex.lean Physlib/Relativity/Tensors/RealTensor/Units/Pre.lean Physlib/Relativity/Tensors/RealTensor/Vector/Basic.lean Physlib/Relativity/Tensors/RealTensor/Vector/Causality/Basic.lean +Physlib/Relativity/Tensors/RealTensor/Vector/Causality/CausallyFollows.lean Physlib/Relativity/Tensors/RealTensor/Vector/Causality/LightLike.lean Physlib/Relativity/Tensors/RealTensor/Vector/Causality/TimeLike.lean Physlib/Relativity/Tensors/RealTensor/Vector/MinkowskiProduct.lean Physlib/Relativity/Tensors/RealTensor/Vector/Pre/Basic.lean Physlib/Relativity/Tensors/RealTensor/Vector/Pre/Contraction.lean Physlib/Relativity/Tensors/RealTensor/Vector/Pre/Modules.lean +Physlib/Relativity/Tensors/RealTensor/Vector/Representation.lean +Physlib/Relativity/Tensors/RealTensor/Vector/Tensorial.lean Physlib/Relativity/Tensors/RealTensor/Velocity/Basic.lean +Physlib/Relativity/Tensors/Reindexing.lean Physlib/Relativity/Tensors/TensorSpecies/Basic.lean Physlib/Relativity/Tensors/UnitTensor.lean +Physlib/SpaceAndTime/GalileanGroup/Basic.lean +Physlib/SpaceAndTime/ReferenceFrame.lean Physlib/SpaceAndTime/Space/Basic.lean -Physlib/SpaceAndTime/Space/Distributions/Basic.lean +Physlib/SpaceAndTime/Space/Derivatives/Basic.lean +Physlib/SpaceAndTime/Space/Derivatives/Curl.lean +Physlib/SpaceAndTime/Space/Derivatives/Iterated.lean +Physlib/SpaceAndTime/Space/EuclideanGroup/Action.lean +Physlib/SpaceAndTime/Space/EuclideanGroup/AffineGroup.lean +Physlib/SpaceAndTime/Space/EuclideanGroup/Basic.lean +Physlib/SpaceAndTime/Space/Integrals/Basic.lean +Physlib/SpaceAndTime/Space/Integrals/NormPow.lean +Physlib/SpaceAndTime/Space/Integrals/RadialAngularMeasure.lean Physlib/SpaceAndTime/Space/LengthUnit.lean +Physlib/SpaceAndTime/Space/Module.lean +Physlib/SpaceAndTime/Space/Origin.lean +Physlib/SpaceAndTime/Space/SmoothFunctions.lean Physlib/SpaceAndTime/Space/Translations.lean Physlib/SpaceAndTime/SpaceTime/TimeSlice.lean +Physlib/SpaceAndTime/Time/Basic.lean +Physlib/SpaceAndTime/Time/MatrixDerivatives.lean Physlib/SpaceAndTime/Time/TimeMan.lean Physlib/SpaceAndTime/Time/TimeUnit.lean Physlib/StatisticalMechanics/BoltzmannConstant.lean @@ -291,17 +383,32 @@ Physlib/StatisticalMechanics/CanonicalEnsemble/Basic.lean Physlib/StatisticalMechanics/CanonicalEnsemble/Finite.lean Physlib/StatisticalMechanics/CanonicalEnsemble/Lemmas.lean Physlib/StatisticalMechanics/CanonicalEnsemble/TwoState.lean +Physlib/StatisticalMechanics/MicroCanonicalEnsemble/Basic.lean +Physlib/StatisticalMechanics/MicroCanonicalEnsemble/IdealGas.lean +Physlib/StatisticalMechanics/MicroCanonicalEnsemble/ThermoQuantities.lean Physlib/StringTheory/Basic.lean Physlib/StringTheory/FTheory/SU5/Basic.lean +Physlib/StringTheory/FTheory/SU5/Fluxes/Basic.lean Physlib/Thermodynamics/Basic.lean +Physlib/Thermodynamics/IdealGas/Basic.lean Physlib/Thermodynamics/Temperature/Basic.lean Physlib/Thermodynamics/Temperature/TemperatureUnits.lean Physlib/Units/Basic.lean Physlib/Units/Dimension.lean Physlib/Units/Examples.lean +Physlib/Units/Exponent.lean Physlib/Units/FDeriv.lean +Physlib/Units/ISQBridge.lean +Physlib/Units/ISQDimensionBase.lean Physlib/Units/Integral.lean +Physlib/Units/LTMCTDimensionBase.lean +Physlib/Units/ParametricDimensionExamples.lean +Physlib/Units/ParametricUnits.lean +Physlib/Units/PositiveRealUnit.lean +Physlib/Units/SIUnitChoices.lean Physlib/Units/UnitDependent.lean +Physlib/Units/UnitSystem.lean +Physlib/Units/WithDim/Analysis.lean Physlib/Units/WithDim/Area.lean Physlib/Units/WithDim/Basic.lean Physlib/Units/WithDim/Energy.lean @@ -310,3 +417,13 @@ Physlib/Units/WithDim/Momentum.lean Physlib/Units/WithDim/Pressure.lean Physlib/Units/WithDim/Speed.lean Physlib/Units/WithDim/Velocity.lean +QuantumInfo/ForMathlib/ContinuousLinearMap.lean +QuantumInfo/ForMathlib/HayataGroup/TraceInequality/BlockDiagonal.lean +QuantumInfo/ForMathlib/HermitianMat.lean +QuantumInfo/ForMathlib/HermitianMat/CompoundMatrix.lean +QuantumInfo/ForMathlib/IsMaximalSelfAdjoint.lean +QuantumInfo/ForMathlib/Tactic/Commutes.lean +QuantumInfo/ForMathlib/Tactic/Commutes/Attribute.lean +QuantumInfo/ForMathlib/ULift.lean +QuantumInfo/Operators/Unitary.lean +QuantumInfo/States/Pure/BargmannInvariant.lean diff --git a/scripts/README.md b/scripts/README.md index 7d66553965..7b4ef49f3e 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -16,14 +16,15 @@ is how the linter can be run locally. The first three linters are the most important, but in an ideal world you would check that all of the following linters run correctly. -- `lake exe lint_all` (**A PR must in general pass this linter**): This linter is split into seven steps, strictly speaking not all of these steps must be past for a PR to be merged, but it is best to just fix them all. +- `lake exe lint_all` (**A PR must in general pass this linter**): This linter is split into eight steps, strictly speaking not all of these steps must be past for a PR to be merged, but it is best to just fix them all. - step 1: This checks for basic style mistakes such as double spaces and string combinations like `):` - step 2: This builds the project - step 3: Checks all files are imported to `Physlib.lean`. - step 4: Checks that no tags on TODO items are duplicates of one another. - step 5: Checks that all lemmas and definitions dependent on `sorry` or `Lean.ofReduceBool` are correctly attributed with `@[sorryful]` or `@[pseudo]` - - step 6: Checks all Lean linters run without error, this picks up things like lack of doc-strings on definitions, or incompatible `@[simp]` attributes - - step 7: Checks there are not transitive imports, e.g. A imports B and C, but B already + - step 6: Checks that module documentation is laid out according to the set standard (see `lake exe module_doc_lint` below). + - step 7: Checks all Lean linters run without error, this picks up things like lack of doc-strings on definitions, or incompatible `@[simp]` attributes + - step 8: Checks there are not transitive imports, e.g. A imports B and C, but B already imports C. This linter may need running a number of times. - `./scripts/lint-style.sh` (**A PR must pass this linter**): This linter checks for some @@ -36,8 +37,20 @@ This linter may need running a number of times. same name in two of these libraries. It needs all three libraries built (`lake build Physlib QuantumInfo PhyslibAlpha`), and it leaves no files behind. - `lake exe style_lint` : A linter which only does step 1 of `lake exe lint_all`. -- `lake exe runPhyslibLinters` : A linter which only does step 6 of `lake exe lint_all`. -- `lake exe module_doc_lint` : Checks that module documentation is laid out according to a set standard. This does not check any file in the list `./scripts/MetaPrograms/module_doc_no_lint.txt`. Slowly we will empty this list of files. +- `lake exe runPhyslibLinters` : A linter which only does step 7 of `lake exe lint_all`. +- `lake exe module_doc_lint` (**A PR must pass this linter**): Step 6 of `lake exe lint_all`. Checks that the module + documentation (the `/-! … -/` blocks) of every file in `Physlib`, `QuantumInfo` and + `PhyslibAlpha` is laid out according to a set standard. It reads the source files directly, + so it does not need the project to be built. The headings of a file must be: + - a title `# …`, usually followed by a one-line summary of the file; + - `## i. Overview`, `## ii. Key results`, `## iii. Table of contents` and `## iv. References`, + in that order; + - sections and subsections tagged as `## A.`, `### A.1.`, `#### A.1.2.` etc., listed in the + table of contents as `- A. …`, ` - A.1. …`, ` - A.1.2. …`. + + No heading may end in a full stop. Errors are grouped by kind, each with a file and line number. + Files in `./scripts/MetaPrograms/module_doc_no_lint.txt` are not checked; new files must not be + added to this list, and slowly we will empty it. - `lake exe spelling` : Checks the spelling of words in Physlib against a given list of correctly spelled words which can be found in `./scripts/MetaPrograms/spellingWords.txt`