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
R
is astar_module R₂ R
, thenself_adjoint R
has 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_adjoint
to matchis_self_adjoint
. - Define
λ z x, z * x * star z
(i.e. conjugation byz
) as a monoid action ofR
onR
(similar to the existingconj_act
for groups), and then state the fact thatself_adjoint R
is 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.