Self-adjoint, skew-adjoint and normal elements of a star additive group #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
This file defines self_adjoint R (resp. skew_adjoint R), where R is a star additive group,
as the additive subgroup containing the elements that satisfy star x = x (resp. star x = -x).
This includes, for instance, (skew-)Hermitian operators on Hilbert spaces.
We also define is_star_normal R, a Prop that states that an element x satisfies
star x * x = x * star x.
Implementation notes #
- When
Ris astar_module R₂ R, thenself_adjoint Rhas a naturalmodule (self_adjoint R₂) (self_adjoint R)structure. However, doing this literally would be undesirable since in the main case of interest (R₂ = ℂ) we wantmodule ℝ (self_adjoint R)and notmodule (self_adjoint ℂ) (self_adjoint R). We solve this issue by adding the typeclass[has_trivial_star R₃], of whichℝis an instance (registered indata/real/basic), and then add a[module R₃ (self_adjoint R)]instance whenever we have[module R₃ R] [has_trivial_star R₃]. (Another approach would have been to define[star_invariant_scalars R₃ R]to express the fact thatstar (x • v) = x • star v, but this typeclass would have the disadvantage of taking two type arguments.)
TODO #
- Define
is_skew_adjointto matchis_self_adjoint. - Define
λ z x, z * x * star z(i.e. conjugation byz) as a monoid action ofRonR(similar to the existingconj_actfor groups), and then state the fact thatself_adjoint Ris invariant under it.
An element is self-adjoint if it is equal to its star.
Equations
- is_self_adjoint x = (has_star.star x = x)
- star_comm_self : commute (has_star.star x) x
An element of a star monoid is normal if it commutes with its adjoint.
All elements are self-adjoint when star is trivial.
Functions in a star_hom_class preserve self-adjoint elements.
The self-adjoint elements of a star additive group, as an additive subgroup.
Equations
- self_adjoint R = {carrier := {x : R | is_self_adjoint x}, add_mem' := _, zero_mem' := _, neg_mem' := _}
Instances for ↥self_adjoint
- self_adjoint.inhabited
- self_adjoint.has_one
- self_adjoint.nontrivial
- self_adjoint.has_nat_cast
- self_adjoint.has_int_cast
- self_adjoint.nat.has_pow
- self_adjoint.has_mul
- self_adjoint.comm_ring
- self_adjoint.has_inv
- self_adjoint.has_div
- self_adjoint.int.has_pow
- self_adjoint.has_rat_cast
- self_adjoint.has_qsmul
- self_adjoint.field
- self_adjoint.has_smul
- self_adjoint.mul_action
- self_adjoint.distrib_mul_action
- self_adjoint.module
The skew-adjoint elements of a star additive group, as an additive subgroup.
Equations
- skew_adjoint R = {carrier := {x : R | has_star.star x = -x}, add_mem' := _, zero_mem' := _, neg_mem' := _}
Instances for ↥skew_adjoint
Equations
- self_adjoint.inhabited = {default := 0}
Equations
- self_adjoint.has_one = {one := ⟨1, _⟩}
Equations
- self_adjoint.nat.has_pow = {pow := λ (x : ↥(self_adjoint R)) (n : ℕ), ⟨↑x ^ n, _⟩}
Equations
- self_adjoint.has_mul = {mul := λ (x y : ↥(self_adjoint R)), ⟨↑x * ↑y, _⟩}
Equations
- self_adjoint.comm_ring = function.injective.comm_ring coe self_adjoint.comm_ring._proof_1 self_adjoint.comm_ring._proof_2 self_adjoint.comm_ring._proof_3 self_adjoint.comm_ring._proof_4 self_adjoint.comm_ring._proof_5 self_adjoint.comm_ring._proof_6 self_adjoint.comm_ring._proof_7 self_adjoint.comm_ring._proof_8 self_adjoint.comm_ring._proof_9 self_adjoint.comm_ring._proof_10 self_adjoint.comm_ring._proof_11 self_adjoint.comm_ring._proof_12
Equations
- self_adjoint.has_inv = {inv := λ (x : ↥(self_adjoint R)), ⟨(x.val)⁻¹, _⟩}
Equations
- self_adjoint.has_div = {div := λ (x y : ↥(self_adjoint R)), ⟨↑x / ↑y, _⟩}
Equations
- self_adjoint.int.has_pow = {pow := λ (x : ↥(self_adjoint R)) (z : ℤ), ⟨↑x ^ z, _⟩}
Equations
- self_adjoint.has_qsmul = {smul := λ (a : ℚ) (x : ↥(self_adjoint R)), ⟨a • ↑x, _⟩}
Equations
- self_adjoint.field = function.injective.field coe self_adjoint.field._proof_1 self_adjoint.field._proof_2 self_adjoint.field._proof_3 self_adjoint.field._proof_4 self_adjoint.field._proof_5 self_adjoint.field._proof_6 self_adjoint.field._proof_7 self_adjoint.coe_inv self_adjoint.coe_div self_adjoint.field._proof_8 self_adjoint.field._proof_9 self_adjoint.coe_rat_smul self_adjoint.field._proof_10 self_adjoint.coe_zpow self_adjoint.field._proof_11 self_adjoint.field._proof_12 self_adjoint.coe_rat_cast
Equations
- self_adjoint.has_smul = {smul := λ (r : R) (x : ↥(self_adjoint A)), ⟨r • ↑x, _⟩}
Equations
- self_adjoint.mul_action = function.injective.mul_action coe self_adjoint.mul_action._proof_1 self_adjoint.mul_action._proof_2
Equations
- self_adjoint.distrib_mul_action = function.injective.distrib_mul_action (self_adjoint A).subtype self_adjoint.distrib_mul_action._proof_1 self_adjoint.distrib_mul_action._proof_2
Equations
- self_adjoint.module = function.injective.module R (self_adjoint A).subtype self_adjoint.module._proof_1 self_adjoint.module._proof_2
Equations
- skew_adjoint.inhabited = {default := 0}
Equations
- skew_adjoint.has_smul = {smul := λ (r : R) (x : ↥(skew_adjoint A)), ⟨r • ↑x, _⟩}
Equations
- skew_adjoint.distrib_mul_action = function.injective.distrib_mul_action (skew_adjoint A).subtype skew_adjoint.distrib_mul_action._proof_1 skew_adjoint.coe_smul
Equations
- skew_adjoint.module = function.injective.module R (skew_adjoint A).subtype skew_adjoint.module._proof_1 skew_adjoint.module._proof_2
Scalar multiplication of a self-adjoint element by a skew-adjoint element produces a skew-adjoint element.
Scalar multiplication of a skew-adjoint element by a skew-adjoint element produces a self-adjoint element.