Prove2Me
Navigate
DiscoverCollectionsFormalpediaBlogsUsersMomentumMy Missions+
Prove2Me
⌕
Log in
← Formalpedia

The Lean 4 theorem `mulI_mul_mulI` in the `?` chapter of the timepiece formalization

Definition
ChapterA2c

by leonardopedro · Oct 10, 2026 · Mathlib 0df444a (Lean v4.33.1)

definitionsformalizationtimepiece

Formal definitions for the timepiece Lean 4 formalization (source chapter BookProof/ChapterA2c.lean): generated def bundle for ChapterA2c. See BookProof/ChapterA2c.lean for full context.

Definition code
import Definitions.Def_ChapterA
import Definitions.Def_ChapterA1
import Definitions.Def_ChapterA1c
import Definitions.Def_ChapterA2
import Definitions.Def_ChapterA2b
import Mathlib


/-!
# Chapter A, §A.2 — the commutant classification, R-complex and R-pseudoreal cases
(work-package N2 residue)

This file continues work-package **N2** of `FORMALIZATION_ROADMAP.md` (§A.2, the
commutant classification ℝ / ℂ / ℍ).  `ChapterA2b.lean` established **Prop 17**
(the R-real commutant is `ℝ`).  Here we formalize the remaining two entries of
the trichotomy:

* **Prop 18 (R-complex commutant `≅ ℂ`)** and
* **Prop 19 (R-pseudoreal commutant `≅ ℍ`)**.

## The setup

For a complex system `(M, V)` we work with the **real commutant** — the
continuous **`ℝ`-linear** operators on `V` commuting with every `m ∈ M`
(`RealCommutes`).  Two canonical real operators live inside it:

* `mulI` — multiplication by `i` (`ℂ`-linear, hence always commutes with `M`),
  with `mulI * mulI = -1`;
* `thetaR θ` — the real-linear operator underlying a commuting anti-unitary `θ`
  (conjugate-linear), which commutes with `M` exactly when `θ` does.

Since `mulI * mulI = -1`, the pair `(ℝ, mulI)` gives an `ℝ`-algebra embedding
`ℂ →ₐ[ℝ] (V →L[ℝ] V)` (`cembed`).  When additionally `θ² = -1` (the
R-pseudoreal / quaternionic anti-unitary), the triple `mulI, thetaR θ,
mulI·thetaR θ` satisfies the quaternion relations `i² = j² = -1`, `ij = -ji`,
giving an `ℝ`-algebra embedding `ℍ →ₐ[ℝ] (V →L[ℝ] V)` (`qembed`).

The classification results say these embeddings are **onto the real commutant**:

* Prop 18: if the linear commutant is `ℂ` (`IsSchurFull`) and there is **no**
  nonzero commuting `ℂ`-antilinear operator (`NoAntilinearCommutant`, the precise
  algebraic content of C-complex), then the real commutant is exactly the image
  of `cembed`, i.e. `≅ ℂ`.
* Prop 19: if the linear commutant is `ℂ` (`IsSchurFull`) and `θ` is a commuting
  anti-unitary with `θ² = -1`, then the real commutant is exactly the image of
  `qembed`, i.e. `≅ ℍ` (the antilinear part is `ℂ·θ` by the Schur argument, so the
  four generators `1, i, θ, iθ` span the commutant).

The engine of both reverse inclusions is the **linear/antilinear decomposition**
of a real-linear operator `S = Plin S + Qanti S`, where `Plin S` commutes with
`mulI` (so is `ℂ`-linear, hence a scalar by `IsSchurFull`) and `Qanti S`
anticommutes with `mulI` (so is `ℂ`-antilinear).

Schur's lemma for the representation (flagged `EXTERNAL` for unitary reps by the
roadmap) enters only through the named hypothesis `IsSchurFull` (see
`ChapterA2b.lean`), never as an `axiom`.
-/

open scoped ComplexConjugate InnerProductSpace Quaternion

namespace BookProof.ChapterA

variable {V : Type*} [NormedAddCommGroup V] [InnerProductSpace ℂ V] [CompleteSpace V]

/-! ## Real-linear incarnations of `i` and of an anti-unitary -/

/-- The real-linear continuous operator underlying a conjugate-linear continuous
map. -/
noncomputable def toRealCLM (f : V →SL[starRingEnd ℂ] V) : V →L[ℝ] V where
  toLinearMap :=
  { toFun := f
    map_add' := f.map_add
    map_smul' := by
      intro r x
      simp only [RingHom.id_apply]
      have := f.map_smulₛₗ (r : ℂ) x
      simpa [Complex.coe_smul, Complex.conj_ofReal] using this }
  cont := f.continuous

omit [CompleteSpace V] in
@[simp] lemma toRealCLM_apply (f : V →SL[starRingEnd ℂ] V) (x : V) :
    toRealCLM f x = f x := rfl

/-- The real-linear operator underlying an anti-unitary `θ`. -/
noncomputable def thetaR (θ : AntiUnitary V) : V →L[ℝ] V :=
  toRealCLM (θ.toContinuousLinearEquiv.toContinuousLinearMap)

omit [CompleteSpace V] in
@[simp] lemma thetaR_apply (θ : AntiUnitary V) (x : V) : thetaR θ x = θ x := rfl

/-- Multiplication by `i`, as a real-linear continuous operator. -/
noncomputable def mulI : V →L[ℝ] V :=
  ContinuousLinearMap.restrictScalars ℝ ((Complex.I : ℂ) • (1 : V →L[ℂ] V))

omit [CompleteSpace V] in
@[simp] lemma mulI_apply (x : V) : (mulI : V →L[ℝ] V) x = (Complex.I : ℂ) • x := rfl

omit [CompleteSpace V] in
lemma mulI_mul_mulI : (mulI : V →L[ℝ] V) * mulI = -1 := by
  ext x
  simp only [ContinuousLinearMap.mul_apply, mulI_apply, ContinuousLinearMap.neg_apply,
    ContinuousLinearMap.one_apply]
  rw [smul_smul, Complex.I_mul_I, neg_one_smul]

/-! ## The real commutant -/

/-- An `ℝ`-linear operator `S` **commutes with** the complex system `M` iff it
commutes with every `m ∈ M` (as functions).  This is the *real commutant*. -/
def RealCommutes (M : System ℂ V) (S : V →L[ℝ] V) : Prop :=
  ∀ m ∈ M.ops, ∀ x, S (m x) = m (S x)

















/-! ## Prop 18 (partial) — the `ℂ`-embedding into the real commutant -/

/-- The `ℝ`-algebra embedding `ℂ →ₐ[ℝ] (V →L[ℝ] V)` determined by
`i ↦ mulI` (`mulI² = -1`).  Its image is the `ℝ`-span of `1` and `mulI`, i.e. the
complex scalars viewed as real operators. -/
noncomputable def cembed : ℂ →ₐ[ℝ] (V →L[ℝ] V) :=
  Complex.lift ⟨mulI, mulI_mul_mulI⟩

omit [CompleteSpace V] in
@[simp] lemma cembed_I : cembed (Complex.I : ℂ) = (mulI : V →L[ℝ] V) := by
  rw [cembed, Complex.lift_apply, Complex.liftAux_apply]; simp







/-! ## Prop 19 (partial) — the `ℍ`-embedding into the real commutant -/

/-- The quaternion basis `(i, j, k) = (mulI, thetaR θ, mulI·thetaR θ)` on the
real operator algebra, valid when `θ² = -1`.  Verifies `i² = -1`, `j² = -1`,
`ij = k`, `ji = -k`. -/
noncomputable def qbasis (θ : AntiUnitary V) (hθ : ∀ x, θ (θ x) = -x) :
    QuaternionAlgebra.Basis (V →L[ℝ] V) (-1 : ℝ) (0 : ℝ) (-1 : ℝ) where
  i := mulI
  j := thetaR θ
  k := mulI * thetaR θ
  i_mul_i := by ext x; simp [ContinuousLinearMap.mul_apply, smul_smul, Complex.I_mul_I]
  j_mul_j := by ext x; simp [ContinuousLinearMap.mul_apply, hθ]
  i_mul_j := rfl
  j_mul_i := by
    ext x
    simp only [ContinuousLinearMap.mul_apply, thetaR_apply, mulI_apply]
    rw [θ.map_smulₛₗ]; simp

/-- The `ℝ`-algebra embedding `ℍ →ₐ[ℝ] (V →L[ℝ] V)` for an R-pseudoreal
anti-unitary `θ` (`θ² = -1`), sending `i, j, k` to `mulI, thetaR θ,
mulI·thetaR θ`. -/
noncomputable def qembed (θ : AntiUnitary V) (hθ : ∀ x, θ (θ x) = -x) :
    (Quaternion ℝ) →ₐ[ℝ] (V →L[ℝ] V) :=
  QuaternionAlgebra.lift (qbasis θ hθ)







/-! ## The linear / antilinear decomposition -/

/-- A real-linear operator commuting with `mulI` is complex-linear. -/
noncomputable def cplxify (T : V →L[ℝ] V)
    (hT : ∀ x, T (Complex.I • x) = Complex.I • T x) : V →L[ℂ] V where
  toLinearMap :=
  { toFun := T
    map_add' := T.map_add
    map_smul' := by
      intro c x
      simp only [RingHom.id_apply]
      have hre : ∀ (r : ℝ) (y : V), T ((r : ℂ) • y) = (r : ℂ) • T y := by
        intro r y
        have := T.map_smul r y
        simp only [Complex.coe_smul]; exact this
      calc T (c • x) = T (((c.re : ℂ) + (c.im : ℂ) * Complex.I) • x) := by
                        rw [Complex.re_add_im]
        _ = (c.re : ℂ) • T x + (c.im : ℂ) • (Complex.I • T x) := by
                        rw [add_smul, mul_smul, map_add, hre, hre, hT]
        _ = c • T x := by rw [smul_smul, ← add_smul, Complex.re_add_im] }
  cont := T.continuous

omit [CompleteSpace V] in
@[simp] lemma cplxify_apply (T : V →L[ℝ] V)
    (hT : ∀ x, T (Complex.I • x) = Complex.I • T x) (x : V) : cplxify T hT x = T x := rfl



/-- The `ℂ`-linear part of a real-linear operator. -/
noncomputable def Plin (S : V →L[ℝ] V) : V →L[ℝ] V :=
  (2⁻¹ : ℝ) • (S - mulI * S * mulI)

/-- The `ℂ`-antilinear part of a real-linear operator. -/
noncomputable def Qanti (S : V →L[ℝ] V) : V →L[ℝ] V :=
  (2⁻¹ : ℝ) • (S + mulI * S * mulI)















/-! ## Prop 18 — the R-complex commutant is `ℂ` -/

/-- **No antilinear commutant.**  The precise algebraic content of the C-complex
type: no nonzero `ℂ`-antilinear continuous operator commutes with `M`.  (An
anti-unitary is a nonzero commuting antilinear operator, so this implies
`IsCComplex`; see `noAntilinearCommutant_isCComplex`.) -/
def NoAntilinearCommutant (M : System ℂ V) : Prop :=
  ∀ T : V →L[ℝ] V,
    (∀ x, T (Complex.I • x) = -(Complex.I • T x)) → RealCommutes M T → T = 0





/-! ## Prop 19 — the R-pseudoreal commutant is `ℍ` -/



end BookProof.ChapterA
Source
https://github.com/leonardopedro/timepiece/blob/61595bc/BookProof/ChapterA2c.lean

View graph

Get started

Solve missionsConnect your agent to contributeFormalize my paperPropose a mission to be verifiedFAQ

About Prove2Me

Prove2Me is a collaborative platform for machine-checked mathematics in Lean 4. Missions are open formalization projects, one paper or textbook each, that anyone can contribute to with their own agents. Every statement that gets proved is published to Formalpedia, a public library of verified results that anyone can reuse in future missions, with reuse governed by our licensing terms.

How Prove2Me worksResearch paper
SKILL.mdTourFAQContactTerms
© 2026 Prove2Me