Symmetrized algebra #
A commutative multiplication on a real or complex space can be constructed from any multiplication by "symmetrization" i.e $$ a \circ b = \frac{1}{2}(ab + ba) $$
We provide the symmetrized version of a type α
as sym_alg α
, with notation αˢʸᵐ
.
Implementation notes #
The approach taken here is inspired by algebra.opposites. We use Oxford Spellings (IETF en-GB-oxendict).
References #
The symmetrized algebra has the same underlying space as the original algebra.
Instances for sym_alg
- sym_alg.nontrivial
- sym_alg.inhabited
- sym_alg.subsingleton
- sym_alg.unique
- sym_alg.is_empty
- sym_alg.has_one
- sym_alg.has_zero
- sym_alg.has_add
- sym_alg.has_sub
- sym_alg.has_neg
- sym_alg.has_mul
- sym_alg.has_inv
- sym_alg.has_smul
- sym_alg.add_comm_semigroup
- sym_alg.add_monoid
- sym_alg.add_group
- sym_alg.add_comm_monoid
- sym_alg.add_comm_group
- sym_alg.module
- sym_alg.non_assoc_semiring
- sym_alg.non_assoc_ring
The element of α
represented by x : αˢʸᵐ
.
Equations
@[simp]
The canonical bijection between α
and αˢʸᵐ
.
Equations
- sym_alg.sym_equiv = {to_fun := sym_alg.sym α, inv_fun := sym_alg.unsym α, left_inv := _, right_inv := _}
@[simp]
@[simp]
@[protected, instance]
@[protected, instance]
Equations
@[protected, instance]
@[protected, instance]
Equations
@[protected, instance]
Equations
- sym_alg.has_zero = {zero := sym_alg.sym 0}
@[protected, instance]
Equations
- sym_alg.has_one = {one := sym_alg.sym 1}
@[protected, instance]
Equations
- sym_alg.has_add = {add := λ (a b : αˢʸᵐ), sym_alg.sym (sym_alg.unsym a + sym_alg.unsym b)}
@[protected, instance]
Equations
- sym_alg.has_sub = {sub := λ (a b : αˢʸᵐ), sym_alg.sym (sym_alg.unsym a - sym_alg.unsym b)}
@[protected, instance]
Equations
- sym_alg.has_neg = {neg := λ (a : αˢʸᵐ), sym_alg.sym (-sym_alg.unsym a)}
@[protected, instance]
Equations
- sym_alg.has_mul = {mul := λ (a b : αˢʸᵐ), sym_alg.sym (⅟ 2 * (sym_alg.unsym a * sym_alg.unsym b + sym_alg.unsym b * sym_alg.unsym a))}
@[protected, instance]
Equations
- sym_alg.has_inv = {inv := λ (a : αˢʸᵐ), sym_alg.sym (sym_alg.unsym a)⁻¹}
@[protected, instance]
Equations
- sym_alg.has_smul R = {smul := λ (r : R) (a : αˢʸᵐ), sym_alg.sym (r • sym_alg.unsym a)}
@[simp]
theorem
sym_alg.sym_add
{α : Type u_1}
[has_add α]
(a b : α) :
sym_alg.sym (a + b) = sym_alg.sym a + sym_alg.sym b
@[simp]
theorem
sym_alg.unsym_add
{α : Type u_1}
[has_add α]
(a b : αˢʸᵐ) :
sym_alg.unsym (a + b) = sym_alg.unsym a + sym_alg.unsym b
@[simp]
theorem
sym_alg.sym_sub
{α : Type u_1}
[has_sub α]
(a b : α) :
sym_alg.sym (a - b) = sym_alg.sym a - sym_alg.sym b
@[simp]
theorem
sym_alg.unsym_sub
{α : Type u_1}
[has_sub α]
(a b : αˢʸᵐ) :
sym_alg.unsym (a - b) = sym_alg.unsym a - sym_alg.unsym b
@[simp]
@[simp]
theorem
sym_alg.unsym_neg
{α : Type u_1}
[has_neg α]
(a : αˢʸᵐ) :
sym_alg.unsym (-a) = -sym_alg.unsym a
theorem
sym_alg.mul_def
{α : Type u_1}
[has_add α]
[has_mul α]
[has_one α]
[invertible 2]
(a b : αˢʸᵐ) :
a * b = sym_alg.sym (⅟ 2 * (sym_alg.unsym a * sym_alg.unsym b + sym_alg.unsym b * sym_alg.unsym a))
theorem
sym_alg.unsym_mul
{α : Type u_1}
[has_mul α]
[has_add α]
[has_one α]
[invertible 2]
(a b : αˢʸᵐ) :
sym_alg.unsym (a * b) = ⅟ 2 * (sym_alg.unsym a * sym_alg.unsym b + sym_alg.unsym b * sym_alg.unsym a)
theorem
sym_alg.sym_mul_sym
{α : Type u_1}
[has_mul α]
[has_add α]
[has_one α]
[invertible 2]
(a b : α) :
sym_alg.sym a * sym_alg.sym b = sym_alg.sym (⅟ 2 * (a * b + b * a))
@[simp]
@[simp]
theorem
sym_alg.unsym_inv
{α : Type u_1}
[has_inv α]
(a : αˢʸᵐ) :
sym_alg.unsym a⁻¹ = (sym_alg.unsym a)⁻¹
@[simp]
theorem
sym_alg.sym_smul
{α : Type u_1}
{R : Type u_2}
[has_smul R α]
(c : R)
(a : α) :
sym_alg.sym (c • a) = c • sym_alg.sym a
@[simp]
theorem
sym_alg.unsym_smul
{α : Type u_1}
{R : Type u_2}
[has_smul R α]
(c : R)
(a : αˢʸᵐ) :
sym_alg.unsym (c • a) = c • sym_alg.unsym a
@[simp]
theorem
sym_alg.unsym_eq_one_iff
{α : Type u_1}
[has_one α]
(a : αˢʸᵐ) :
sym_alg.unsym a = 1 ↔ a = 1
@[simp]
theorem
sym_alg.unsym_eq_zero_iff
{α : Type u_1}
[has_zero α]
(a : αˢʸᵐ) :
sym_alg.unsym a = 0 ↔ a = 0
@[simp]
@[simp]
theorem
sym_alg.unsym_ne_one_iff
{α : Type u_1}
[has_one α]
(a : αˢʸᵐ) :
sym_alg.unsym a ≠ 1 ↔ a ≠ 1
theorem
sym_alg.unsym_ne_zero_iff
{α : Type u_1}
[has_zero α]
(a : αˢʸᵐ) :
sym_alg.unsym a ≠ 0 ↔ a ≠ 0
@[protected, instance]
Equations
- sym_alg.add_comm_semigroup = function.injective.add_comm_semigroup sym_alg.unsym sym_alg.unsym_injective sym_alg.add_comm_semigroup._proof_1
@[protected, instance]
Equations
- sym_alg.add_monoid = function.injective.add_monoid sym_alg.unsym sym_alg.unsym_injective sym_alg.add_monoid._proof_1 sym_alg.add_monoid._proof_2 sym_alg.add_monoid._proof_3
@[protected, instance]
Equations
- sym_alg.add_group = function.injective.add_group sym_alg.unsym sym_alg.unsym_injective sym_alg.add_group._proof_1 sym_alg.add_group._proof_2 sym_alg.add_group._proof_3 sym_alg.add_group._proof_4 sym_alg.add_group._proof_5 sym_alg.add_group._proof_6
@[protected, instance]
Equations
- sym_alg.add_comm_monoid = {add := add_comm_semigroup.add sym_alg.add_comm_semigroup, add_assoc := _, zero := add_monoid.zero sym_alg.add_monoid, zero_add := _, add_zero := _, nsmul := add_monoid.nsmul sym_alg.add_monoid, nsmul_zero' := _, nsmul_succ' := _, add_comm := _}
@[protected, instance]
Equations
- sym_alg.add_comm_group = {add := add_comm_monoid.add sym_alg.add_comm_monoid, add_assoc := _, zero := add_comm_monoid.zero sym_alg.add_comm_monoid, zero_add := _, add_zero := _, nsmul := add_comm_monoid.nsmul sym_alg.add_comm_monoid, nsmul_zero' := _, nsmul_succ' := _, neg := add_group.neg sym_alg.add_group, sub := add_group.sub sym_alg.add_group, sub_eq_add_neg := _, zsmul := add_group.zsmul sym_alg.add_group, zsmul_zero' := _, zsmul_succ' := _, zsmul_neg' := _, add_left_neg := _, add_comm := _}
@[protected, instance]
Equations
- sym_alg.module = function.injective.module R {to_fun := sym_alg.unsym α, map_zero' := _, map_add' := _} sym_alg.unsym_injective sym_alg.module._proof_3
@[protected, instance]
def
sym_alg.sym.invertible
{α : Type u_1}
[has_mul α]
[has_add α]
[has_one α]
[invertible 2]
(a : α)
[invertible a] :
Equations
- sym_alg.sym.invertible a = {inv_of := sym_alg.sym (⅟ a), inv_of_mul_self := _, mul_inv_of_self := _}
@[simp]
theorem
sym_alg.inv_of_sym
{α : Type u_1}
[has_mul α]
[has_add α]
[has_one α]
[invertible 2]
(a : α)
[invertible a] :
⅟ (sym_alg.sym a) = sym_alg.sym (⅟ a)
@[protected, instance]
Equations
- sym_alg.non_assoc_semiring = {add := add_comm_monoid.add sym_alg.add_comm_monoid, add_assoc := _, zero := 0, zero_add := _, add_zero := _, nsmul := add_comm_monoid.nsmul sym_alg.add_comm_monoid, nsmul_zero' := _, nsmul_succ' := _, add_comm := _, mul := has_mul.mul sym_alg.has_mul, left_distrib := _, right_distrib := _, zero_mul := _, mul_zero := _, one := 1, one_mul := _, mul_one := _, nat_cast := add_comm_monoid_with_one.nat_cast._default 1 add_comm_monoid.add sym_alg.non_assoc_semiring._proof_13 0 sym_alg.non_assoc_semiring._proof_14 sym_alg.non_assoc_semiring._proof_15 add_comm_monoid.nsmul sym_alg.non_assoc_semiring._proof_16 sym_alg.non_assoc_semiring._proof_17, nat_cast_zero := _, nat_cast_succ := _}
@[protected, instance]
The symmetrization of a real (unital, associative) algebra is a non-associative ring.
Equations
- sym_alg.non_assoc_ring = {add := non_assoc_semiring.add sym_alg.non_assoc_semiring, add_assoc := _, zero := non_assoc_semiring.zero sym_alg.non_assoc_semiring, zero_add := _, add_zero := _, nsmul := non_assoc_semiring.nsmul sym_alg.non_assoc_semiring, nsmul_zero' := _, nsmul_succ' := _, neg := add_comm_group.neg sym_alg.add_comm_group, sub := add_comm_group.sub sym_alg.add_comm_group, sub_eq_add_neg := _, zsmul := add_comm_group.zsmul sym_alg.add_comm_group, zsmul_zero' := _, zsmul_succ' := _, zsmul_neg' := _, add_left_neg := _, add_comm := _, mul := non_assoc_semiring.mul sym_alg.non_assoc_semiring, left_distrib := _, right_distrib := _, zero_mul := _, mul_zero := _, one := non_assoc_semiring.one sym_alg.non_assoc_semiring, one_mul := _, mul_one := _, nat_cast := non_assoc_semiring.nat_cast sym_alg.non_assoc_semiring, nat_cast_zero := _, nat_cast_succ := _, int_cast := add_group_with_one.int_cast._default non_assoc_semiring.nat_cast non_assoc_semiring.add sym_alg.non_assoc_ring._proof_20 non_assoc_semiring.zero sym_alg.non_assoc_ring._proof_21 sym_alg.non_assoc_ring._proof_22 non_assoc_semiring.nsmul sym_alg.non_assoc_ring._proof_23 sym_alg.non_assoc_ring._proof_24 non_assoc_semiring.one sym_alg.non_assoc_ring._proof_25 sym_alg.non_assoc_ring._proof_26 add_comm_group.neg add_comm_group.sub sym_alg.non_assoc_ring._proof_27 add_comm_group.zsmul sym_alg.non_assoc_ring._proof_28 sym_alg.non_assoc_ring._proof_29 sym_alg.non_assoc_ring._proof_30 sym_alg.non_assoc_ring._proof_31, int_cast_of_nat := _, int_cast_neg_succ_of_nat := _}
The squaring operation coincides for both multiplications
theorem
sym_alg.unsym_mul_self
{α : Type u_1}
[semiring α]
[invertible 2]
(a : αˢʸᵐ) :
sym_alg.unsym (a * a) = sym_alg.unsym a * sym_alg.unsym a
theorem
sym_alg.sym_mul_self
{α : Type u_1}
[semiring α]
[invertible 2]
(a : α) :
sym_alg.sym (a * a) = sym_alg.sym a * sym_alg.sym a
theorem
sym_alg.mul_comm
{α : Type u_1}
[has_mul α]
[add_comm_semigroup α]
[has_one α]
[invertible 2]
(a b : αˢʸᵐ) :