File: Mathlib/Algebra/Star/SelfAdjoint.lean

full_name: IsSelfAdjoint
code: /-- An element is self-adjoint if it is equal to its star. -/
def IsSelfAdjoint [Star R] (x : R) : Prop 
goal: Prop

full_name: IsStarNormal.star_comm_self
code: /-- An element of a star monoid is normal if it commutes with its adjoint. -/
@[mk_iff]
class IsStarNormal [Mul R] [Star R] (x : R) : Prop where
  /-- A normal element of a star monoid commutes with its adjoint. -/
  star_comm_self : Commute (star x) x
goal: Commute (star x) x

full_name: isStarNormal_iff
code: /-- An element of a star monoid is normal if it commutes with its adjoint. -/
@[mk_iff]
class IsStarNormal [Mul R] [Star R] (x : R) : Prop where
  /-- A normal element of a star monoid commutes with its adjoint. -/
  star_comm_self : Commute (star x) x
goal: IsStarNormal x ↔ Commute (star x) x

full_name: IsStarNormal
code: /-- An element of a star monoid is normal if it commutes with its adjoint. -/
@[mk_iff]
class IsStarNormal [Mul R] [Star R] (x : R) : Prop where
  /-- A normal element of a star monoid commutes with its adjoint. -/
  star_comm_self : Commute (star x) x
goal: Prop

full_name: star_comm_self'
code: theorem star_comm_self' [Mul R] [Star R] (x : R) [IsStarNormal x] : star x * x = x * star x 
goal: star x * x = x * star x

full_name: IsSelfAdjoint.all
code: /-- All elements are self-adjoint when `star` is trivial. -/
theorem all [Star R] [TrivialStar R] (r : R) : IsSelfAdjoint r 
goal: IsSelfAdjoint r

full_name: IsSelfAdjoint.star_eq
code: theorem star_eq [Star R] {x : R} (hx : IsSelfAdjoint x) : star x = x 
goal: star x = x

full_name: isSelfAdjoint_iff
code: theorem _root_.isSelfAdjoint_iff [Star R] {x : R} : IsSelfAdjoint x ↔ star x = x 
goal: IsSelfAdjoint x ↔ star x = x

full_name: IsSelfAdjoint.star_iff
code: @[simp]
theorem star_iff [InvolutiveStar R] {x : R} : IsSelfAdjoint (star x) ↔ IsSelfAdjoint x 
goal: IsSelfAdjoint (star x) ↔ IsSelfAdjoint x

full_name: IsSelfAdjoint.star_mul_self
code: @[simp]
theorem star_mul_self [Mul R] [StarMul R] (x : R) : IsSelfAdjoint (star x * x) 
goal: IsSelfAdjoint (star x * x)

full_name: IsSelfAdjoint.mul_star_self
code: @[simp]
theorem mul_star_self [Mul R] [StarMul R] (x : R) : IsSelfAdjoint (x * star x) 
goal: IsSelfAdjoint (x * star x)

full_name: IsSelfAdjoint.commute_iff
code: /-- Self-adjoint elements commute if and only if their product is self-adjoint. -/
lemma commute_iff {R : Type*} [Mul R] [StarMul R] {x y : R}
    (hx : IsSelfAdjoint x) (hy : IsSelfAdjoint y) : Commute x y ↔ IsSelfAdjoint (x * y) 
goal: Commute x y ↔ IsSelfAdjoint (x * y)

full_name: IsSelfAdjoint.starHom_apply
code: /-- Functions in a `StarHomClass` preserve self-adjoint elements. -/
theorem starHom_apply {F R S : Type*} [Star R] [Star S] [FunLike F R S] [StarHomClass F R S]
    {x : R} (hx : IsSelfAdjoint x) (f : F) : IsSelfAdjoint (f x) 
goal: IsSelfAdjoint (f x)

full_name: isSelfAdjoint_starHom_apply
code: theorem _root_.isSelfAdjoint_starHom_apply {F R S : Type*} [Star R] [Star S] [FunLike F R S]
    [StarHomClass F R S] [TrivialStar R] (f : F) (x : R) : IsSelfAdjoint (f x) 
goal: IsSelfAdjoint (f x)

full_name: IsSelfAdjoint.zero
code: @[simp] protected theorem zero : IsSelfAdjoint (0 : R) 
goal: IsSelfAdjoint 0

full_name: IsSelfAdjoint.add
code: @[aesop 90% apply]
theorem add {x y : R} (hx : IsSelfAdjoint x) (hy : IsSelfAdjoint y) : IsSelfAdjoint (x + y) 
goal: IsSelfAdjoint (x + y)

full_name: IsSelfAdjoint.neg
code: @[aesop safe apply]
theorem neg {x : R} (hx : IsSelfAdjoint x) : IsSelfAdjoint (-x) 
goal: IsSelfAdjoint (-x)

full_name: IsSelfAdjoint.sub
code: @[aesop 90% apply]
theorem sub {x y : R} (hx : IsSelfAdjoint x) (hy : IsSelfAdjoint y) : IsSelfAdjoint (x - y) 
goal: IsSelfAdjoint (x - y)

full_name: IsSelfAdjoint.add_star_self
code: @[simp]
theorem add_star_self (x : R) : IsSelfAdjoint (x + star x) 
goal: IsSelfAdjoint (x + star x)

full_name: IsSelfAdjoint.star_add_self
code: @[simp]
theorem star_add_self (x : R) : IsSelfAdjoint (star x + x) 
goal: IsSelfAdjoint (star x + x)

full_name: IsSelfAdjoint.conjugate
code: @[aesop safe apply]
theorem conjugate {x : R} (hx : IsSelfAdjoint x) (z : R) : IsSelfAdjoint (z * x * star z) 
goal: IsSelfAdjoint (z * x * star z)

full_name: IsSelfAdjoint.conjugate'
code: @[aesop safe apply]
theorem conjugate' {x : R} (hx : IsSelfAdjoint x) (z : R) : IsSelfAdjoint (star z * x * z) 
goal: IsSelfAdjoint (star z * x * z)

full_name: IsSelfAdjoint.isStarNormal
code: @[aesop 10% apply]
theorem isStarNormal {x : R} (hx : IsSelfAdjoint x) : IsStarNormal x 
goal: IsStarNormal x

full_name: IsSelfAdjoint.one
code: @[simp] protected theorem one : IsSelfAdjoint (1 : R) 
goal: IsSelfAdjoint 1

full_name: IsSelfAdjoint.pow
code: @[aesop safe apply]
theorem pow {x : R} (hx : IsSelfAdjoint x) (n : ℕ) : IsSelfAdjoint (x ^ n) 
goal: IsSelfAdjoint (x ^ n)

full_name: IsSelfAdjoint.natCast
code: @[simp]
protected theorem natCast (n : ℕ) : IsSelfAdjoint (n : R) 
goal: IsSelfAdjoint ↑n

full_name: IsSelfAdjoint.ofNat
code: @[simp]
protected theorem ofNat (n : ℕ) [n.AtLeastTwo] :
    IsSelfAdjoint (no_index (OfNat.ofNat n : R)) 
goal: IsSelfAdjoint (OfNat.ofNat n)

full_name: IsSelfAdjoint.mul
code: theorem mul {x y : R} (hx : IsSelfAdjoint x) (hy : IsSelfAdjoint y) : IsSelfAdjoint (x * y) 
goal: IsSelfAdjoint (x * y)

full_name: IsSelfAdjoint.conj_eq
code: lemma conj_eq (ha : IsSelfAdjoint a) : conj a = a 
goal: (starRingEnd α) a = a

full_name: IsSelfAdjoint.intCast
code: @[simp]
protected theorem intCast (z : ℤ) : IsSelfAdjoint (z : R) 
goal: IsSelfAdjoint ↑z

full_name: IsSelfAdjoint.inv
code: @[aesop safe apply]
theorem inv {x : R} (hx : IsSelfAdjoint x) : IsSelfAdjoint x⁻¹ 
goal: IsSelfAdjoint x⁻¹

full_name: IsSelfAdjoint.zpow
code: @[aesop safe apply]
theorem zpow {x : R} (hx : IsSelfAdjoint x) (n : ℤ) : IsSelfAdjoint (x ^ n) 
goal: IsSelfAdjoint (x ^ n)

full_name: IsSelfAdjoint.nnratCast
code: @[simp]
protected lemma nnratCast (q : ℚ≥0) : IsSelfAdjoint (q : R) 
goal: IsSelfAdjoint ↑q

full_name: IsSelfAdjoint.ratCast
code: @[simp]
protected theorem ratCast (x : ℚ) : IsSelfAdjoint (x : R) 
goal: IsSelfAdjoint ↑x

full_name: IsSelfAdjoint.div
code: theorem div {x y : R} (hx : IsSelfAdjoint x) (hy : IsSelfAdjoint y) : IsSelfAdjoint (x / y) 
goal: IsSelfAdjoint (x / y)

full_name: IsSelfAdjoint.smul
code: @[aesop safe apply]
theorem smul {r : R} (hr : IsSelfAdjoint r) {x : A} (hx : IsSelfAdjoint x) :
    IsSelfAdjoint (r • x) 
goal: IsSelfAdjoint (r • x)

full_name: selfAdjoint
code: /-- The self-adjoint elements of a star additive group, as an additive subgroup. -/
def selfAdjoint [AddGroup R] [StarAddMonoid R] : AddSubgroup R 
goal: AddSubgroup R

full_name: skewAdjoint
code: /-- The skew-adjoint elements of a star additive group, as an additive subgroup. -/
def skewAdjoint [AddCommGroup R] [StarAddMonoid R] : AddSubgroup R 
goal: AddSubgroup R

full_name: selfAdjoint.mem_iff
code: theorem mem_iff {x : R} : x ∈ selfAdjoint R ↔ star x = x 
goal: x ∈ selfAdjoint R ↔ star x = x

full_name: selfAdjoint.star_val_eq
code: @[simp, norm_cast]
theorem star_val_eq {x : selfAdjoint R} : star (x : R) = x 
goal: star ↑x = ↑x

full_name: selfAdjoint.instInhabitedSubtypeMemAddSubgroup
code: instance : Inhabited (selfAdjoint R) 
goal: Inhabited ↥(selfAdjoint R)

full_name: selfAdjoint.isStarNormal
code: instance isStarNormal [NonUnitalRing R] [StarRing R] (x : selfAdjoint R) :
    IsStarNormal (x : R) 
goal: IsStarNormal ↑x

full_name: selfAdjoint.instOneSubtypeMemAddSubgroup
code: instance : One (selfAdjoint R) 
goal: One ↥(selfAdjoint R)

full_name: selfAdjoint.val_one
code: @[simp, norm_cast]
theorem val_one : ↑(1 : selfAdjoint R) = (1 : R) 
goal: ↑1 = 1

full_name: selfAdjoint.instNontrivialSubtypeMemAddSubgroup
code: instance [Nontrivial R] : Nontrivial (selfAdjoint R) 
goal: Nontrivial ↥(selfAdjoint R)

full_name: selfAdjoint.instNatCastSubtypeMemAddSubgroup
code: instance : NatCast (selfAdjoint R) 
goal: NatCast ↥(selfAdjoint R)

full_name: selfAdjoint.instIntCastSubtypeMemAddSubgroup
code: instance : IntCast (selfAdjoint R) 
goal: IntCast ↥(selfAdjoint R)

full_name: selfAdjoint.instPowSubtypeMemAddSubgroupNat
code: instance : Pow (selfAdjoint R) ℕ 
goal: Pow ↥(selfAdjoint R) ℕ

full_name: selfAdjoint.val_pow
code: @[simp, norm_cast]
theorem val_pow (x : selfAdjoint R) (n : ℕ) : ↑(x ^ n) = (x : R) ^ n 
goal: ↑(x ^ n) = ↑x ^ n

full_name: selfAdjoint.instMulSubtypeMemAddSubgroup
code: instance : Mul (selfAdjoint R) 
goal: Mul ↥(selfAdjoint R)

full_name: selfAdjoint.val_mul
code: @[simp, norm_cast]
theorem val_mul (x y : selfAdjoint R) : ↑(x * y) = (x : R) * y 
goal: ↑(x * y) = ↑x * ↑y

full_name: selfAdjoint.instCommRingSubtypeMemAddSubgroup
code: instance : CommRing (selfAdjoint R) 
goal: CommRing ↥(selfAdjoint R)

full_name: selfAdjoint.instInvSubtypeMemAddSubgroup
code: instance : Inv (selfAdjoint R) 
goal: Inv ↥(selfAdjoint R)

full_name: selfAdjoint.val_inv
code: @[simp, norm_cast]
theorem val_inv (x : selfAdjoint R) : ↑x⁻¹ = (x : R)⁻¹ 
goal: ↑x⁻¹ = (↑x)⁻¹

full_name: selfAdjoint.instDivSubtypeMemAddSubgroup
code: instance : Div (selfAdjoint R) 
goal: Div ↥(selfAdjoint R)

full_name: selfAdjoint.val_div
code: @[simp, norm_cast]
theorem val_div (x y : selfAdjoint R) : ↑(x / y) = (x / y : R) 
goal: ↑(x / y) = ↑x / ↑y

full_name: selfAdjoint.instPowSubtypeMemAddSubgroupInt
code: instance : Pow (selfAdjoint R) ℤ 
goal: Pow ↥(selfAdjoint R) ℤ

full_name: selfAdjoint.val_zpow
code: @[simp, norm_cast]
theorem val_zpow (x : selfAdjoint R) (z : ℤ) : ↑(x ^ z) = (x : R) ^ z 
goal: ↑(x ^ z) = ↑x ^ z

full_name: selfAdjoint.instNNRatCast
code: instance instNNRatCast : NNRatCast (selfAdjoint R) 
goal: NNRatCast ↥(selfAdjoint R)

full_name: selfAdjoint.instRatCast
code: instance instRatCast : RatCast (selfAdjoint R) 
goal: RatCast ↥(selfAdjoint R)

full_name: selfAdjoint.val_nnratCast
code: @[simp, norm_cast] lemma val_nnratCast (q : ℚ≥0) : (q : selfAdjoint R) = (q : R) 
goal: ↑↑q = ↑q

full_name: selfAdjoint.val_ratCast
code: @[simp, norm_cast] lemma val_ratCast (q : ℚ) : (q : selfAdjoint R) = (q : R) 
goal: ↑↑q = ↑q

full_name: selfAdjoint.instSMulNNRat
code: instance instSMulNNRat : SMul ℚ≥0 (selfAdjoint R) 
goal: SMul ℚ≥0 ↥(selfAdjoint R)

full_name: selfAdjoint.instSMulRat
code: instance instSMulRat : SMul ℚ (selfAdjoint R) 
goal: SMul ℚ ↥(selfAdjoint R)

full_name: selfAdjoint.val_nnqsmul
code: @[simp, norm_cast] lemma val_nnqsmul (q : ℚ≥0) (x : selfAdjoint R) : ↑(q • x) = q • (x : R) 
goal: ↑(q • x) = q • ↑x

full_name: selfAdjoint.val_qsmul
code: @[simp, norm_cast] lemma val_qsmul (q : ℚ) (x : selfAdjoint R) : ↑(q • x) = q • (x : R) 
goal: ↑(q • x) = q • ↑x

full_name: selfAdjoint.instField
code: instance instField : Field (selfAdjoint R) 
goal: Field ↥(selfAdjoint R)

full_name: selfAdjoint.instSMulSubtypeMemAddSubgroupOfStarModule
code: instance [SMul R A] [StarModule R A] : SMul R (selfAdjoint A) 
goal: SMul R ↥(selfAdjoint A)

full_name: selfAdjoint.val_smul
code: @[simp, norm_cast]
theorem val_smul [SMul R A] [StarModule R A] (r : R) (x : selfAdjoint A) : ↑(r • x) = r • (x : A) 
goal: ↑(r • x) = r • ↑x

full_name: selfAdjoint.instMulActionSubtypeMemAddSubgroupOfStarModule
code: instance [Monoid R] [MulAction R A] [StarModule R A] : MulAction R (selfAdjoint A) 
goal: MulAction R ↥(selfAdjoint A)

full_name: selfAdjoint.instDistribMulActionSubtypeMemAddSubgroupOfStarModule
code: instance [Monoid R] [DistribMulAction R A] [StarModule R A] : DistribMulAction R (selfAdjoint A) 
goal: DistribMulAction R ↥(selfAdjoint A)

full_name: selfAdjoint.instModuleSubtypeMemAddSubgroupOfStarModule
code: instance [Semiring R] [Module R A] [StarModule R A] : Module R (selfAdjoint A) 
goal: Module R ↥(selfAdjoint A)

full_name: skewAdjoint.mem_iff
code: theorem mem_iff {x : R} : x ∈ skewAdjoint R ↔ star x = -x 
goal: x ∈ skewAdjoint R ↔ star x = -x

full_name: skewAdjoint.star_val_eq
code: @[simp, norm_cast]
theorem star_val_eq {x : skewAdjoint R} : star (x : R) = -x 
goal: star ↑x = -↑x

full_name: skewAdjoint.instInhabitedSubtypeMemAddSubgroup
code: instance : Inhabited (skewAdjoint R) 
goal: Inhabited ↥(skewAdjoint R)

full_name: skewAdjoint.conjugate
code: theorem conjugate {x : R} (hx : x ∈ skewAdjoint R) (z : R) : z * x * star z ∈ skewAdjoint R 
goal: z * x * star z ∈ skewAdjoint R

full_name: skewAdjoint.conjugate'
code: theorem conjugate' {x : R} (hx : x ∈ skewAdjoint R) (z : R) : star z * x * z ∈ skewAdjoint R 
goal: star z * x * z ∈ skewAdjoint R

full_name: skewAdjoint.isStarNormal_of_mem
code: theorem isStarNormal_of_mem {x : R} (hx : x ∈ skewAdjoint R) : IsStarNormal x 
goal: IsStarNormal x

full_name: skewAdjoint.instIsStarNormalValMemSetCoeAddSubgroup
code: instance (x : skewAdjoint R) : IsStarNormal (x : R) 
goal: IsStarNormal ↑x

full_name: skewAdjoint.smul_mem
code: @[aesop safe apply (rule_sets := [SetLike])]
theorem smul_mem [Monoid R] [DistribMulAction R A] [StarModule R A] (r : R) {x : A}
    (h : x ∈ skewAdjoint A) : r • x ∈ skewAdjoint A 
goal: r • x ∈ skewAdjoint A

full_name: skewAdjoint.instSMulSubtypeMemAddSubgroupOfStarModule
code: instance [Monoid R] [DistribMulAction R A] [StarModule R A] : SMul R (skewAdjoint A) 
goal: SMul R ↥(skewAdjoint A)

full_name: skewAdjoint.val_smul
code: @[simp, norm_cast]
theorem val_smul [Monoid R] [DistribMulAction R A] [StarModule R A] (r : R) (x : skewAdjoint A) :
    ↑(r • x) = r • (x : A) 
goal: ↑(r • x) = r • ↑x

full_name: skewAdjoint.instDistribMulActionSubtypeMemAddSubgroupOfStarModule
code: instance [Monoid R] [DistribMulAction R A] [StarModule R A] : DistribMulAction R (skewAdjoint A) 
goal: DistribMulAction R ↥(skewAdjoint A)

full_name: skewAdjoint.instModuleSubtypeMemAddSubgroupOfStarModule
code: instance [Semiring R] [Module R A] [StarModule R A] : Module R (skewAdjoint A) 
goal: Module R ↥(skewAdjoint A)

full_name: IsSelfAdjoint.smul_mem_skewAdjoint
code: /-- Scalar multiplication of a self-adjoint element by a skew-adjoint element produces a
skew-adjoint element. -/
theorem IsSelfAdjoint.smul_mem_skewAdjoint [Ring R] [AddCommGroup A] [Module R A] [StarAddMonoid R]
    [StarAddMonoid A] [StarModule R A] {r : R} (hr : r ∈ skewAdjoint R) {a : A}
    (ha : IsSelfAdjoint a) : r • a ∈ skewAdjoint A 
goal: r • a ∈ skewAdjoint A

full_name: isSelfAdjoint_smul_of_mem_skewAdjoint
code: /-- Scalar multiplication of a skew-adjoint element by a skew-adjoint element produces a
self-adjoint element. -/
theorem isSelfAdjoint_smul_of_mem_skewAdjoint [Ring R] [AddCommGroup A] [Module R A]
    [StarAddMonoid R] [StarAddMonoid A] [StarModule R A] {r : R} (hr : r ∈ skewAdjoint R) {a : A}
    (ha : a ∈ skewAdjoint A) : IsSelfAdjoint (r • a) 
goal: IsSelfAdjoint (r • a)

full_name: isStarNormal_zero
code: instance isStarNormal_zero [Semiring R] [StarRing R] : IsStarNormal (0 : R) 
goal: IsStarNormal 0

full_name: isStarNormal_one
code: instance isStarNormal_one [MulOneClass R] [StarMul R] : IsStarNormal (1 : R) 
goal: IsStarNormal 1

full_name: IsStarNormal.star
code: protected instance IsStarNormal.star [Mul R] [StarMul R] {x : R} [IsStarNormal x] :
    IsStarNormal (star x) 
goal: IsStarNormal (star x)

full_name: IsStarNormal.neg
code: protected instance IsStarNormal.neg [Ring R] [StarAddMonoid R] {x : R} [IsStarNormal x] :
    IsStarNormal (-x) 
goal: IsStarNormal (-x)

full_name: IsStarNormal.map
code: protected instance IsStarNormal.map {F R S : Type*} [Mul R] [Star R] [Mul S] [Star S]
    [FunLike F R S] [MulHomClass F R S] [StarHomClass F R S] (f : F) (r : R) [hr : IsStarNormal r] :
    IsStarNormal (f r) 
goal: IsStarNormal (f r)

full_name: TrivialStar.isStarNormal
code: instance (priority := 100) TrivialStar.isStarNormal [Mul R] [StarMul R] [TrivialStar R]
    {x : R} : IsStarNormal x 
goal: IsStarNormal x

full_name: CommMonoid.isStarNormal
code: instance (priority := 100) CommMonoid.isStarNormal [CommMonoid R] [StarMul R] {x : R} :
    IsStarNormal x 
goal: IsStarNormal x

full_name: Pi.isSelfAdjoint
code: protected lemma isSelfAdjoint : IsSelfAdjoint f ↔ ∀ i, IsSelfAdjoint (f i) 
goal: IsSelfAdjoint f ↔ ∀ (i : ι), IsSelfAdjoint (f i)