Complexification of real Hilbert spaces #
This file supplies the concrete complexification foundation needed to reuse the complex operator-angle and spectral calculus for real Hilbert spaces.
For a real Hilbert space E, its complexification is the L2 product E × E.
The pair (x, y) represents x + i y, with complex scalar multiplication
(a + i b) • (x + i y) = (a x - b y) + i (b x + a y).
The complex inner product is
⟪(x,y),(u,v)⟫ = (⟪x,u⟫ + ⟪y,v⟫) + i (⟪x,v⟫ - ⟪y,u⟫).
The construction includes:
- the canonical isometric real-linear embedding
ofReal; - complex conjugation as a real-linear isometric involution;
- complexification of bounded real-linear operators;
- preservation of zero, identity, addition, subtraction, scalar multiplication, and composition;
- exact preservation of operator norm;
- reflection of equality and transport of symmetry.
No unbounded-operator, spectral-cutoff, or Ky Fan file depends on this module.
The complexification of a real normed space, represented by its real and imaginary coordinates with the L2 product norm.
Equations
- TauCeti.RealComplexification E = WithLp 2 (E × E)
Instances For
Additive structure, inherited from the underlying WithLp 2 (E × E).
Equations
- One or more equations did not get rendered due to their size.
The L² product norm, inherited from WithLp 2 (E × E). This is the choice that makes the
complexification an inner-product space rather than merely a normed one.
Equations
- One or more equations did not get rendered due to their size.
Completeness is inherited from E.
Real scalar action, coordinatewise.
Real module structure, inherited from the product.
Equations
- TauCeti.RealComplexification.instModuleReal = { toSMul := TauCeti.RealComplexification.instSMulReal, mul_smul := ⋯, one_smul := ⋯, smul_zero := ⋯, smul_add := ⋯, add_smul := ⋯, zero_smul := ⋯ }
The L² norm is compatible with real scaling.
Equations
- TauCeti.RealComplexification.instNormedSpaceReal = { toModule := TauCeti.RealComplexification.instModuleReal, norm_smul_le := ⋯ }
Construct a complexified vector from its real and imaginary coordinates.
Equations
- TauCeti.RealComplexification.mk x y = WithLp.toLp 2 (x, y)
Instances For
The real coordinate of a complexified vector.
Instances For
The imaginary coordinate of a complexified vector.
Instances For
Rebuilding a vector from its own coordinates is the identity.
Zero has zero real part.
Zero has zero imaginary part.
Addition is coordinatewise on real parts.
Addition is coordinatewise on imaginary parts.
Negation on real parts.
Negation on imaginary parts.
Subtraction on real parts.
Subtraction on imaginary parts.
Real scaling acts on the real part.
Real scaling acts on the imaginary part.
Complex scalar multiplication on the real L2 product.
Equations
- One or more equations did not get rendered due to their size.
Real part of a complex scaling: re (c • z) = c.re • re z - c.im • im z, the real half of
complex multiplication.
The complex module structure, where the complexification earns its name: i acts by
(x, y) ↦ (-y, x). Built from minimal axioms because the four laws are exactly the four real
identities that have to be checked coordinatewise.
Equations
Real and complex scalar actions are compatible, so ℝ-linear statements can be read inside
ℂ-linear ones without transport.
Complex scalar multiplication scales the L2 norm exactly.
The L² norm is compatible with complex scaling. This is the non-formal instance of the
group: it needs ‖c • z‖ = ‖c‖ ‖z‖ for complex c, which is the Pythagorean computation above and
not a consequence of the real case.
Equations
- TauCeti.RealComplexification.instNormedSpaceComplex = { toModule := TauCeti.RealComplexification.instModuleComplex, norm_smul_le := ⋯ }
The canonical complex inner product on a real Hilbert-space complexification.
Equations
- One or more equations did not get rendered due to their size.
The complex inner product in coordinates: real part ⟪re z, re w⟫ + ⟪im z, im w⟫, imaginary
part ⟪re z, im w⟫ - ⟪im z, re w⟫. True by rfl, and the form every computation unfolds to.
The canonical embedding of a real Hilbert space into its complexification.
Equations
- TauCeti.RealComplexification.ofReal = { toFun := fun (x : E) => TauCeti.RealComplexification.mk x 0, map_add' := ⋯, map_smul' := ⋯, norm_map' := ⋯ }
Instances For
The real part of a real vector is itself.
A real vector has zero imaginary part.
The complex inner product of two real vectors is the real one, coerced -- so the embedding
E → RealComplexification E is isometric.
Multiplication by i sends the real copy to the imaginary copy.
Complex conjugation on the complexification.
Equations
- TauCeti.RealComplexification.conjugation = { toFun := fun (z : TauCeti.RealComplexification E) => TauCeti.RealComplexification.mk z.re (-z.im), map_add' := ⋯, map_smul' := ⋯, norm_map' := ⋯ }
Instances For
Conjugation fixes the real part.
Conjugation negates the imaginary part.
Conjugation is an involution.
Conjugation fixes real vectors, which characterises the real subspace.
Conjugation is conjugate-linear, not linear: the scalar comes out starred.
Coordinatewise extension of a bounded real-linear operator.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The complexified operator acts on real parts by the original operator.
The complexified operator acts on imaginary parts by the original operator.
Complexification agrees with the original operator on real vectors.
The complexification of the zero operator is zero.
The complexification of the identity is the identity.
Complexification is additive.
Complexification commutes with negation.
Complexification commutes with subtraction.
Complexification is real-homogeneous. It is not complex-homogeneous -- the complexified
operator is ℂ-linear, but complexify itself only transports real scalars.
Complexification is functorial: it commutes with composition.
Complexification preserves operator norm exactly.
Complexification is an isometry of operator spaces, not merely norm-preserving on
each operator: it is additive, so norm_complexify upgrades to a statement about distances.
This is the form needed to transport a topological property back from the complexification,
where norm_complexify alone only transports one forward.
Complexification reflects equality of bounded real operators.
A real scalar acts through its complex coercion.
A coordinate of a vector is no longer than the vector. The single
statement of ‖re z‖ ≤ ‖z‖ in this repository, and the earliest in import
order, so every consumer can reach it.
It was private until 2026-07-30, guarded by a note saying a public copy would make
unqualified uses ambiguous in Sources/DavisKahan1970/Ideals/HilbertSchmidtRealDescent.lean,
which opens two of the namespaces that had a copy. That was true, and it was the wrong
conclusion: the ambiguity came from the other three copies, not from this one being visible.
Getting there took a broken tree first, and the sequence is worth keeping. edward (aiq-gpu)
deleted the PartialMapComplexification sibling in 4dacc008 and pointed that module here;
separately this one was still private. Each fix is right alone and they are fatal together —
with the sibling gone and this one private, no public copy was reachable from
PartialMap/Complexification.lean and the build stopped. Lane {lane:CPLX-DEDUP-1} then
deleted the remaining copies and made this one public, which is the state described above.
Restrict a complex operator to the real copy and take its real
coordinate. No invariance assumption is needed to define this: the map is
x ↦ re (T (ofReal x)) for any bounded T, and it is bounded by ‖T‖ because
neither coordinate projection nor the real embedding changes a norm.
Stated rectangularly, between two different spaces. Three copies of this
definition existed until 2026-07-30 and they were not three copies of one thing:
Sources/DavisKahan1970/Ideals/HilbertSchmidtRealDescent.lean had the
rectangular one while Complexification/FunctionalCalculus.lean and
OperatorIdeal/ApproximationNumbers/Real/Threshold.lean had the square case,
which is this at F = E. This module is the only one all three consumers
import, so it is where the general form belongs.
Equations
- TauCeti.RealComplexification.realPartOperator T = { toFun := fun (x : E) => (T (TauCeti.RealComplexification.ofReal x)).re, map_add' := ⋯, map_smul' := ⋯ }.mkContinuous ‖T‖ ⋯
Instances For
Pointwise formula for the real restriction: embed, apply, take the real coordinate.
Every vector is its real part plus i times its imaginary part.
An operator commuting with conjugation maps the real copy into the real copy: the
imaginary part of T (ofReal x) vanishes.
This is the whole content of the conjugation condition, and it is what makes realify below
a two-sided inverse of complexify.
The real operator underlying a ℂ-linear operator: read off the action on the real copy.
Paired with complexify_realify this says complexify is a bijection onto the operators
commuting with conjugation — the surjectivity half that complexify_injective leaves open.
Equations
- TauCeti.RealComplexification.realify T = { toFun := fun (x : E) => (T (TauCeti.RealComplexification.ofReal x)).re, map_add' := ⋯, map_smul' := ⋯ }.mkContinuous ‖T‖ ⋯
Instances For
realify T acts by reading the real part of T on the real copy.
complexify is onto the conjugation-commuting operators. Together with
complexify_injective, complexification identifies E →L[ℝ] F with exactly those
ℂ-linear operators that commute with conjugation.
The complexification of a real operator commutes with conjugation.
Symmetry of a real operator is equivalent to symmetry of its complexification.
Self-adjointness is preserved and reflected by complexification.