Documentation

CsdLean4.Mathlib.Geometry.Manifold.Instances.ProjectiveSpace

Complex projective space is an analytic manifold #

TERM-SCOPE(Kahler) — "top-power identity" appears below in the restricted sense the terms register records, and in the negative: the identity is what this module does NOT prove. (Repository bookkeeping; it goes with the References block if this is sent upstream.)

Category: 1-Mathlib (CSD-free; upstream target Mathlib.Geometry.Manifold.Instances, beside Sphere.lean).

At the pin, Projectivization carries a topology (staged in this repository), a measurable space, a metric — and no charted-space instance anywhere, so ℂℙⁿ was not a manifold in Lean and nothing on it could be differentiated. MATHLIB-ABSENT(ChartedSpace.projectivization)

This module builds the standard affine atlas and both instances:

Design notes #

Why rep rather than a quotient lift. The chart map is defined on the chosen representative (Projectivization.rep), which makes well-definedness free but says nothing about continuity — rep is a choice function. Continuity is recovered separately, from mk' being an open quotient map (isQuotientMap_mk', staged here) restricted to the open chart source: Topology.IsQuotientMap.restrictPreimage_isOpen turns continuity of the chart into continuity of the ratio map on nonzero vectors, which is elementary.

Why the model space is Fin n → ℂ and not EuclideanSpace ℂ (Fin n). At the pin WithLp is a genuine structure rather than a type synonym, so every element of EuclideanSpace must be built through WithLp.toLp and every chart formula would carry that wrapper. The sup-norm Pi type is norm-equivalent, carries the same smooth and analytic structure, and keeps the charts readable. The ambient space stays EuclideanSpace ℂ (Fin (n+1)), which is what the projective space of interest is built on.

Honest scope #

Provenance and references. The Mathlib-gaps register (Kahler / symplectic manifold API, step (0)); the backlog (XL, "Manifold exterior calculus"); CsdLean4/Mathlib/LinearAlgebra/Projectivization/Topology.lean (the quotient topology and isQuotientMap_mk'); Mathlib.Geometry.Manifold.Instances.Sphere (the analogous construction upstream, from stereographic projection).

@[reducible, inline]

The ambient coordinate space of ℂℙⁿ.

Equations
Instances For

    The affine chart, on representatives #

    noncomputable def Projectivization.coordRatio {n : ℕ} (i : Fin (n + 1)) (v : Ambient n) :
    Fin n → ℂ

    The affine chart formula on a representative: divide the other coordinates by the i-th one.

    Equations
    Instances For
      theorem Projectivization.coordRatio_def {n : ℕ} (i : Fin (n + 1)) (v : Ambient n) :
      coordRatio i v = fun (j : Fin n) => v.ofLp (i.succAbove j) / v.ofLp i

      coordRatio, unfolded: the definitional equation.

      noncomputable def Projectivization.insertOne {n : ℕ} (i : Fin (n + 1)) (w : Fin n → ℂ) :

      Insert 1 in slot i: the affine section of the i-th chart.

      Equations
      Instances For
        theorem Projectivization.insertOne_def {n : ℕ} (i : Fin (n + 1)) (w : Fin n → ℂ) :

        insertOne, unfolded: the definitional equation.

        @[simp]
        theorem Projectivization.insertOne_apply_same {n : ℕ} (i : Fin (n + 1)) (w : Fin n → ℂ) :
        (insertOne i w).ofLp i = 1
        @[simp]
        theorem Projectivization.insertOne_apply_succAbove {n : ℕ} (i : Fin (n + 1)) (w : Fin n → ℂ) (j : Fin n) :
        (insertOne i w).ofLp (i.succAbove j) = w j
        theorem Projectivization.insertOne_ne_zero {n : ℕ} (i : Fin (n + 1)) (w : Fin n → ℂ) :
        theorem Projectivization.smul_ofLp {n : ℕ} (c : ℂ) (v : Ambient n) (k : Fin (n + 1)) :
        (c • v).ofLp k = c * v.ofLp k
        theorem Projectivization.coordRatio_smul {n : ℕ} (a : ℂˣ) (i : Fin (n + 1)) (v : Ambient n) :

        Coordinate ratios do not see the choice of representative.

        The chart maps on ℂℙⁿ #

        noncomputable def Projectivization.chartFun {n : ℕ} (i : Fin (n + 1)) (p : Projectivization ℂ (Ambient n)) :
        Fin n → ℂ

        The i-th affine chart of ℂℙⁿ. Well defined because coordRatio is representative-independent.

        Equations
        Instances For
          noncomputable def Projectivization.chartInv {n : ℕ} (i : Fin (n + 1)) (w : Fin n → ℂ) :

          The inverse of the i-th affine chart.

          Equations
          Instances For
            theorem Projectivization.chartInv_def {n : ℕ} (i : Fin (n + 1)) (w : Fin n → ℂ) :
            chartInv i w = mk ℂ (insertOne i w) ⋯

            chartInv, unfolded: the definitional equation.

            The domain of the i-th chart: the points whose i-th coordinate does not vanish.

            Equations
            Instances For
              theorem Projectivization.chartFun_mk {n : ℕ} (i : Fin (n + 1)) (v : Ambient n) (hv : v ≠ 0) :
              chartFun i (mk ℂ v hv) = coordRatio i v
              theorem Projectivization.rep_ne_zero_iff {n : ℕ} (i : Fin (n + 1)) (v : Ambient n) (hv : v ≠ 0) :
              (mk ℂ v hv).rep.ofLp i ≠ 0 ↔ v.ofLp i ≠ 0
              theorem Projectivization.mem_chartSource_mk {n : ℕ} (i : Fin (n + 1)) (v : Ambient n) (hv : v ≠ 0) :
              theorem Projectivization.preimage_chartSource {n : ℕ} (i : Fin (n + 1)) :
              mk' ℂ ⁻¹' chartSource i = {v : { v : Ambient n // v ≠ 0 } | (↑v).ofLp i ≠ 0}
              theorem Projectivization.continuous_coord {n : ℕ} (k : Fin (n + 1)) :
              Continuous fun (v : { v : Ambient n // v ≠ 0 }) => (↑v).ofLp k

              The chart domain is open: its mk'-preimage is a nonvanishing-coordinate condition, and mk' is a quotient map.

              The chart is a homeomorphism onto its image #

              theorem Projectivization.chartFun_chartInv {n : ℕ} (i : Fin (n + 1)) (w : Fin n → ℂ) :
              chartFun i (chartInv i w) = w
              theorem Projectivization.insertOne_chartFun {n : ℕ} (i : Fin (n + 1)) (p : Projectivization ℂ (Ambient n)) (hp : p.rep.ofLp i ≠ 0) :

              On the chart domain the affine section recovers the representative up to scale.

              theorem Projectivization.chartInv_chartFun {n : ℕ} (i : Fin (n + 1)) (p : Projectivization ℂ (Ambient n)) (hp : p.rep.ofLp i ≠ 0) :
              chartInv i (chartFun i p) = p

              Continuity of the chart map. The chart is defined through rep, which is a choice function and carries no continuity of its own; what supplies it is that mk' restricted to the (open) chart domain is still a quotient map.

              noncomputable def Projectivization.chartAtIdx {n : ℕ} (i : Fin (n + 1)) :

              ★ The i-th affine chart of ℂℙⁿ, as an open partial homeomorphism onto Fin n → ℂ.

              Equations
              • One or more equations did not get rendered due to their size.
              Instances For

                The charted space and manifold instances #

                noncomputable def Projectivization.idx {n : ℕ} (p : Projectivization ℂ (Ambient n)) :
                Fin (n + 1)

                Some coordinate index at which the point does not vanish; the chart chosen at p.

                Equations
                Instances For
                  @[instance_reducible]

                  ★ Complex projective space is a charted space, on the standard affine atlas.

                  Equations
                  • One or more equations did not get rendered due to their size.
                  theorem Projectivization.contDiff_insertOne_coord {n : ℕ} (i m : Fin (n + 1)) :
                  ContDiff ℂ ⊤ fun (w : Fin n → ℂ) => (insertOne i w).ofLp m

                  Each coordinate of the affine section is analytic in the chart variable: it is either the constant 1 or a coordinate projection.

                  theorem Projectivization.contDiffOn_transition {n : ℕ} (i j : Fin (n + 1)) :
                  ContDiffOn ℂ ⊤ (fun (w : Fin n → ℂ) => coordRatio j (insertOne i w)) {w : Fin n → ℂ | (insertOne i w).ofLp j ≠ 0}

                  The transition maps are analytic: each component is a ratio of two coordinates of insertNth i 1 w, and the denominator does not vanish on the overlap.

                  ★ Complex projective space is an analytic manifold.

                  Not merely C^∞: the transition maps are quotients of coordinates of Fin.insertNth i 1 w with nonvanishing denominators, so ω comes out of the same argument.

                  ★ The same atlas, read over ℝ. A ℂ-analytic manifold is ℝ-analytic (ContDiffOn.restrict_scalars), and the real structure is the one a real differential form — the Fubini–Study form is ℝ-bilinear, not ℂ-bilinear — has to live on.