The Riemannian volume of a metric on a manifold, from chart Gram densities #
The namespace is MetricFamily, not RiemannianMetric: Mathlib has a structure of that name
(Mathlib/Topology/VectorBundle/Riemannian.lean, with ContMDiffRiemannianMetric beside it), and
this file works with a bare family g : ∀ x, T_x → T_x → ℝ plus IsBilinear; the volume of
Mathlib's bundled metrics is the section "Mathlib's Riemannian metrics" at the end.
Category: 1-Mathlib (measure theory on manifolds: the Riemannian volume measure of a
metric family, absent from Mathlib at the pin —
Mathlib/Geometry/Manifold/VectorBundle/Riemannian.lean
has Riemannian bundles, no volume; G17 of the generator-layer plan §9).
A Riemannian metric g on a manifold M modelled on E has, in the chart at x₀, the Gram matrix
G_{x₀}(w)ᵢⱼ = g (symmL (eᵢ)) (symmL (eⱼ)) against a basis e of E (the metric at the point
under
w, read through the tangent trivialisation), and its Riemannian volume has the chart density
√det G_{x₀}(w). This module builds the measure exactly as TopFormMeasure.lean builds the measure
of a top form — chart densities glued along the measurable partition of a ChartCover — with the
Gram density in place of the top-form coefficient.
MetricFamily.localRep g x₀ w u v— the local representative of the metric family in the chart atx₀;MetricFamily.gram e g x₀ w— its Gram matrix againste;MetricFamily.chartDensity e g x₀ w = ENNReal.ofReal √det— the Riemannian chart density;MetricFamily.chartMeasure μ e g x₀— the density measure on the chart's target, pushed toMby the chart (chartMeasure_apply);- ★★
MetricFamily.riemannianVolume μ e g c— the Riemannian volume ofg, glued along the coverc; - ★★
MetricFamily.riemannianVolume_eq_smul_topFormMeasure— if in every chart of the cover the Gram density isktimes the coefficient density of a top form, the Riemannian volume isktimes the top-form measure. This is the bridge the Kähler identityvol_g = ω^{∧n}/n!uses onℂℙⁿ(Instances/ProjectiveSpaceFubiniStudyRiemannian.lean); - Q30 / G17b (2026-09-11). For a bilinear family (
IsBilinear g, the four pointwise equations):localRep_transition(the local representative pulls back along the transition's derivative), ★chartDensity_transition(the Jacobian rule for Gram densities,√det G_{x₀} = |det Dφ| · √det G_y ∘ φ, from the congruenceAᵀ G Aanddet_transpose), ★★chartMeasure_congr(chart-independence, by change of variables), and ★★riemannianVolume_congr_cover— the Riemannian volume is canonical: it does not depend on the chart cover. The proofs are those ofTopFormMeasure.leanwith the Gram rule in place of the top-form coefficient rule.
Honest scope #
⚠️ Chart-independence needs bilinearity, and asks for it. The definitions take a bare family
g so that they ask nothing; chartMeasure_congr and riemannianVolume_congr_cover take
IsBilinear g (pointwise bilinearity, the four equations), which is what the Gram congruence
Aᵀ G A uses and all a metric has. No symmetry or positivity is asked; a family with a
non-positive Gram determinant has chart density 0 there and the theorems still hold.
⚠️ g is a family, not a section. No smoothness or symmetry of g is assumed by the
definitions; a non-positive Gram determinant gives density 0 (Real.sqrt of a negative is 0).
The ℂℙⁿ instance supplies a genuine metric (isBilinear_fsMetric). Not stated: that an isometry
preserves riemannianVolume (the twin of topFormMeasure_map_eq; same route, no consumer).
Provenance and references. The generator-layer plan (G17);
Geometry/Manifold/TopFormMeasure.lean (the
construction mirrored); Instances/ProjectiveSpaceFubiniStudyRiemannian.lean (the instance).
The local representative of a metric family in the chart at x₀: the metric at the point
under w, on tangent vectors read through the tangent trivialisation. Outside the chart's target it
is junk; every use is at a point of the target.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The Gram matrix of the local representative against the basis e.
Equations
- MetricFamily.gram e g x₀ w = Matrix.of fun (i j : ι) => MetricFamily.localRep g x₀ w (e i) (e j)
Instances For
The Riemannian chart density √det G.
Equations
- MetricFamily.chartDensity e g x₀ w = ENNReal.ofReal √(MetricFamily.gram e g x₀ w).det
Instances For
The Riemannian chart measure: the density measure on the chart's target, pushed to M by the
chart.
Equations
- MetricFamily.chartMeasure μ e g x₀ = MeasureTheory.Measure.map (↑(chartAt E x₀).symm) ((μ.restrict (chartAt E x₀).target).withDensity (MetricFamily.chartDensity e g x₀))
Instances For
★★ The Riemannian volume of a metric family, against a chart cover: the chart densities
√det G glued along the cover's measurable partition.
Equations
- MetricFamily.riemannianVolume μ e g c = MeasureTheory.Measure.sum fun (i : Fin c.m) => (MetricFamily.chartMeasure μ e g (c.pt i)).restrict (c.piece i)
Instances For
★★ The Riemannian volume against a top-form measure. If in every chart of the cover the
Gram density is k times the coefficient density of a top form s (on the chart's target), then
the Riemannian volume is k times the measure of s.
Chart-independence (Q30 / G17b) #
Bilinearity of a metric family, pointwise: the four equations the Gram congruence needs.
MetricFamily.localRep takes a bare family so that the definitions ask nothing; the
chart-independence theorems ask for this.
- add_left (x : M) (a b v : TangentSpace (modelWithCornersSelf ℝ E) x) : g x (a + b) v = g x a v + g x b v
- smul_left (x : M) (c : ℝ) (a v : TangentSpace (modelWithCornersSelf ℝ E) x) : g x (c • a) v = c * g x a v
- add_right (x : M) (v a b : TangentSpace (modelWithCornersSelf ℝ E) x) : g x v (a + b) = g x v a + g x v b
- smul_right (x : M) (c : ℝ) (v a : TangentSpace (modelWithCornersSelf ℝ E) x) : g x v (c • a) = c * g x v a
Instances For
The local representative of a bilinear family is bilinear in its two slots (symmL is linear).
The local representative, as a real bilinear form on E (for a bilinear family).
Equations
- MetricFamily.localRepBilin g hg x₀ w = LinearMap.mk₂ ℝ (MetricFamily.localRep g x₀ w) ⋯ ⋯ ⋯ ⋯
Instances For
The local representative of a metric family transforms under a chart transition by pulling
back both slots along the transition's derivative: the metric analogue of
DifferentialForm.localRep_transition, from tangent_symmL_eq_fderiv at both charts and the chain
rule for the transition (fderiv_chart_transition_comp).
★ The Jacobian rule for Gram densities: under a chart transition φ the Gram matrix of a
bilinear family transforms by congruence, G_{x₀}(w) = Aᵀ G_y(φ w) A with A the matrix of
Dφ_w, so √det G_{x₀}(w) = |det Dφ_w| · √det G_y(φ w) — the exact analogue of
compContinuousLinearMap_apply_basis for top forms.
★★ Chart-independence. On a measurable set inside two chart domains the two Riemannian
chart measures of a bilinear family agree: change of variables along the transition, whose
Jacobian is exactly the factor by which √det G transforms (chartDensity_transition). The proof
of DifferentialForm.chartMeasure_congr with the Gram rule in place of the top-form rule.
★★ On a measurable set inside any chart domain the glued Riemannian volume is that chart's measure (for a bilinear family).
★★ The Riemannian volume does not depend on the cover (for a bilinear family):
MetricFamily.riemannianVolume is canonical.
The basis' own Haar measure: the Riemannian volume is canonical #
riemannianVolume μ e g c takes a Haar measure μ on the model and a basis e. Against the
basis' own Haar measure e.addHaar the result does not depend on e: a change of basis
multiplies the Gram determinant by (det P)² (det_gram_basis), hence the density by |det P|,
and divides the Haar measure by |det P| (DifferentialForm.addHaar_basis_eq_smul); the two
cancel (riemannianVolume_addHaar_basis). This is the intrinsic Riemannian volume, exposed for
Mathlib's bundled metrics as Bundle.RiemannianMetric.canonicalVolume below.
The Gram matrix against b' is the congruence of the Gram matrix against b by the
change-of-basis matrix (LinearMap.BilinForm.toMatrix_mul_basis_toMatrix).
The Gram determinant against b' is (b.det b')² times the Gram determinant against b.
The Riemannian chart density against b' is |b.det b'| times the density against b.
The Riemannian chart measure against the basis' own Haar measure does not depend on the basis.
★ The Riemannian volume is canonical: against the basis' own Haar measure the glued measure does not depend on the basis.
Mathlib's Riemannian metrics #
Mathlib's Bundle.RiemannianMetric (TangentSpace 𝓘(ℝ, E) : M → Type _)
(Mathlib/Topology/VectorBundle/Riemannian.lean) is a family of inner products
g.inner x : T_x M →L[ℝ] T_x M →L[ℝ] ℝ, and its C^n version ContMDiffRiemannianMetric
(Mathlib/Geometry/Manifold/VectorBundle/Riemannian.lean) adds the smoothness of the family. The
family fun x u v => g.inner x u v is bilinear, so everything above applies to it: the Riemannian
volume of a Mathlib metric, its independence of the cover, its comparison with a top form, and the
canonical (basis-free up to canonicalVolume_congr_basis) volume canonicalVolume.
The metric family of a Mathlib RiemannianMetric on the tangent bundle.
Equations
- g.toMetricFamily x u v = ((g.inner x) u) v
Instances For
A Mathlib metric is a bilinear family: inner x is a continuous linear map in each slot.
★ The Riemannian volume of a Mathlib RiemannianMetric on the tangent bundle, against
the Haar measure μ and the basis e of the model, glued along the cover c.
Equations
Instances For
★ The Riemannian volume of a Mathlib metric does not depend on the cover.
★ If in every chart of the cover the Gram density of a Mathlib metric is k times the
coefficient density of a top form, its Riemannian volume is k times the top-form measure.
★ The canonical Riemannian volume of a Mathlib metric: against the basis' own Haar measure
b.addHaar, which makes it independent of the basis (canonicalVolume_congr_basis) and of the
cover (canonicalVolume_congr_cover).
Equations
- g.canonicalVolume b c = Bundle.RiemannianMetric.riemannianVolume b.addHaar b g c
Instances For
★ The Riemannian volume of a C^n Riemannian metric (ContMDiffRiemannianMetric): that of
its underlying RiemannianMetric.