Documentation

Mathlib.Analysis.CStarAlgebra.Module.Synonym

Type synonym for types with a CStarModule structure #

It is often the case that we want to construct a CStarModule instance on a type that is already endowed with a norm, but this norm is not the one associated to its CStarModule structure. For this reason, we create a type synonym WithCStarModule which is endowed with the requisite CStarModule instance. We also introduce the scoped notation C⋆ᵐᵒᵈ for this type synonym.

The common use cases are, when A is a C⋆-algebra:

In this way, the set up is very similar to the WithLp type synonym, although there is no way to reuse WithLp because the norms do not coincide in general.

The WithCStarModule synonym is of vital importance, especially because the CStarModule class marks A as an outParam. Indeed, we want to infer A from the type of E, but, as with modules, a type E can be a CStarModule over different C⋆-algebras. For example, note that if A is a C⋆-algebra, then so is A × A, and therefore we may consider both A and A × A as CStarModules over themselves, respectively. However, we may also consider A × A as a CStarModule over A. However, by utilizing the type synonym, these actually correspond to different types, namely:

Main definitions #

Implementation notes #

The pattern here is the same one as is used by Lex for order structures; it avoids having a separate synonym for each type, and allows all the structure-copying code to be shared.

def WithCStarModule (E : Type u_1) :
Type u_1

A type synonym for endowing a given type with a CStarModule structure. This has the scoped notation C⋆ᵐᵒᵈ.

Note: because the C⋆-algebra A over which E is a CStarModule is listed as an outParam in that class, we don't pass it as an unused argument to WithCStarModule, unlike the p parameter in WithLp, which can vary.

Equations
Instances For

    A type synonym for endowing a given type with a CStarModule structure. This has the scoped notation C⋆ᵐᵒᵈ.

    Note: because the C⋆-algebra A over which E is a CStarModule is listed as an outParam in that class, we don't pass it as an unused argument to WithCStarModule, unlike the p parameter in WithLp, which can vary.

    Equations
    Instances For

      The canonical equivalence between WithCStarModule E and E. This should always be used to convert back and forth between the representations.

      Equations
      Instances For
        Equations
        • = inst

        WithCStarModule E inherits various module-adjacent structures from E. #

        instance WithCStarModule.instSMul (E : Type u_3) {R : Type u_4} [SMul R E] :
        Equations
        instance WithCStarModule.instIsScalarTower (R : Type u_1) (R' : Type u_2) (E : Type u_3) [SMul R R'] [SMul R E] [SMul R' E] [IsScalarTower R R' E] :
        Equations
        • = inst
        instance WithCStarModule.instSMulCommClass (R : Type u_1) (R' : Type u_2) (E : Type u_3) [SMul R E] [SMul R' E] [SMulCommClass R R' E] :
        Equations
        • = inst
        Equations
        • = inst

        WithCStarModule.equiv preserves the module structure.

        @[simp]
        theorem WithCStarModule.equiv_symm_add {E : Type u_3} (x' y' : E) [AddCommGroup E] :
        (WithCStarModule.equiv E).symm (x' + y') = (WithCStarModule.equiv E).symm x' + (WithCStarModule.equiv E).symm y'
        @[simp]
        theorem WithCStarModule.equiv_symm_sub {E : Type u_3} (x' y' : E) [AddCommGroup E] :
        (WithCStarModule.equiv E).symm (x' - y') = (WithCStarModule.equiv E).symm x' - (WithCStarModule.equiv E).symm y'
        @[simp]
        theorem WithCStarModule.equiv_symm_neg {E : Type u_3} (x' : E) [AddCommGroup E] :
        @[simp]
        theorem WithCStarModule.equiv_smul {R : Type u_1} {E : Type u_3} [SMul R E] (c : R) (x : WithCStarModule E) :
        @[simp]
        theorem WithCStarModule.equiv_symm_smul {R : Type u_1} {E : Type u_3} [SMul R E] (c : R) (x' : E) :
        (WithCStarModule.equiv E).symm (c x') = c (WithCStarModule.equiv E).symm x'

        WithCStarModule.equiv as a linear equivalence.

        Equations
        Instances For
          @[simp]

          WithCStarModule E inherits the uniformity and bornology from E. #

          Equations
          Equations

          WithCStarModule.equiv as a uniform equivalence between C⋆ᵐᵒᵈ E and E.

          Equations
          Instances For

            Prod #

            Register simplification lemmas for the applications of WithCStarModule (E × F) elements, as the usual lemmas for Prod will not trigger.

            @[simp]
            theorem WithCStarModule.zero_fst {E : Type u_2} {F : Type u_3} [AddCommGroup E] [AddCommGroup F] :
            0.1 = 0
            @[simp]
            theorem WithCStarModule.zero_snd {E : Type u_2} {F : Type u_3} [AddCommGroup E] [AddCommGroup F] :
            0.2 = 0
            @[simp]
            theorem WithCStarModule.add_fst {E : Type u_2} {F : Type u_3} (x y : WithCStarModule (E × F)) [AddCommGroup E] [AddCommGroup F] :
            (x + y).1 = x.1 + y.1
            @[simp]
            theorem WithCStarModule.add_snd {E : Type u_2} {F : Type u_3} (x y : WithCStarModule (E × F)) [AddCommGroup E] [AddCommGroup F] :
            (x + y).2 = x.2 + y.2
            @[simp]
            theorem WithCStarModule.sub_fst {E : Type u_2} {F : Type u_3} (x y : WithCStarModule (E × F)) [AddCommGroup E] [AddCommGroup F] :
            (x - y).1 = x.1 - y.1
            @[simp]
            theorem WithCStarModule.sub_snd {E : Type u_2} {F : Type u_3} (x y : WithCStarModule (E × F)) [AddCommGroup E] [AddCommGroup F] :
            (x - y).2 = x.2 - y.2
            @[simp]
            theorem WithCStarModule.neg_fst {E : Type u_2} {F : Type u_3} (x : WithCStarModule (E × F)) [AddCommGroup E] [AddCommGroup F] :
            (-x).1 = -x.1
            @[simp]
            theorem WithCStarModule.neg_snd {E : Type u_2} {F : Type u_3} (x : WithCStarModule (E × F)) [AddCommGroup E] [AddCommGroup F] :
            (-x).2 = -x.2
            @[simp]
            theorem WithCStarModule.smul_fst {R : Type u_1} {E : Type u_2} {F : Type u_3} [SMul R E] [SMul R F] (x : WithCStarModule (E × F)) (c : R) :
            (c x).1 = c x.1
            @[simp]
            theorem WithCStarModule.smul_snd {R : Type u_1} {E : Type u_2} {F : Type u_3} [SMul R E] [SMul R F] (x : WithCStarModule (E × F)) (c : R) :
            (c x).2 = c x.2

            Note that the unapplied versions of these lemmas are deliberately omitted, as they break the use of the type synonym.

            @[simp]
            theorem WithCStarModule.equiv_fst {E : Type u_2} {F : Type u_3} (x : WithCStarModule (E × F)) :
            ((WithCStarModule.equiv (E × F)) x).1 = x.1
            @[simp]
            theorem WithCStarModule.equiv_snd {E : Type u_2} {F : Type u_3} (x : WithCStarModule (E × F)) :
            ((WithCStarModule.equiv (E × F)) x).2 = x.2
            @[simp]
            theorem WithCStarModule.equiv_symm_fst {E : Type u_2} {F : Type u_3} (x : E × F) :
            ((WithCStarModule.equiv (E × F)).symm x).1 = x.1
            @[simp]
            theorem WithCStarModule.equiv_symm_snd {E : Type u_2} {F : Type u_3} (x : E × F) :
            ((WithCStarModule.equiv (E × F)).symm x).2 = x.2

            Pi #

            Register simplification lemmas for the applications of WithCStarModule (Π i, E i) elements, as the usual lemmas for Pi will not trigger.

            We also provide a CoeFun instance for WithCStarModule (Π i, E i).

            instance WithCStarModule.instCoeFunForall {ι : Type u_1} (E : ιType u_2) :
            CoeFun (WithCStarModule ((i : ι) → E i)) fun (x : WithCStarModule ((i : ι) → E i)) => (i : ι) → E i
            Equations
            theorem WithCStarModule.ext {ι : Type u_1} {E : ιType u_2} {x y : WithCStarModule ((i : ι) → E i)} (h : ∀ (i : ι), x i = y i) :
            x = y
            @[simp]
            theorem WithCStarModule.zero_apply {ι : Type u_2} {E : ιType u_3} (i : ι) [(i : ι) → AddCommGroup (E i)] :
            0 i = 0
            @[simp]
            theorem WithCStarModule.add_apply {ι : Type u_2} {E : ιType u_3} (x y : WithCStarModule ((i : ι) → E i)) (i : ι) [(i : ι) → AddCommGroup (E i)] :
            (x + y) i = x i + y i
            @[simp]
            theorem WithCStarModule.sub_apply {ι : Type u_2} {E : ιType u_3} (x y : WithCStarModule ((i : ι) → E i)) (i : ι) [(i : ι) → AddCommGroup (E i)] :
            (x - y) i = x i - y i
            @[simp]
            theorem WithCStarModule.neg_apply {ι : Type u_2} {E : ιType u_3} (x : WithCStarModule ((i : ι) → E i)) (i : ι) [(i : ι) → AddCommGroup (E i)] :
            (-x) i = -x i
            @[simp]
            theorem WithCStarModule.smul_apply {R : Type u_1} {ι : Type u_2} {E : ιType u_3} [(i : ι) → SMul R (E i)] (c : R) (x : WithCStarModule ((i : ι) → E i)) (i : ι) :
            (c x) i = c x i

            Note that the unapplied versions of these lemmas are deliberately omitted, as they break the use of the type synonym.

            @[simp]
            theorem WithCStarModule.equiv_pi_apply {ι : Type u_2} {E : ιType u_3} (x : WithCStarModule ((i : ι) → E i)) (i : ι) :
            (WithCStarModule.equiv ((i : ι) → E i)) x i = x i
            @[simp]
            theorem WithCStarModule.equiv_symm_pi_apply {ι : Type u_2} {E : ιType u_3} (x : (i : ι) → E i) (i : ι) :
            (WithCStarModule.equiv ((i : ι) → E i)).symm x i = x i