Type tags that turn additive structures into multiplicative, and vice versa
We define two type tags:
additive α: turns any multiplicative structure onαinto the corresponding additive structure onadditive α;multiplicative α: turns any additive structure onαinto the corresponding multiplicative structure onmultiplicative α.
We also define instances additive.* and multiplicative.* that actually transfer the structures.
If α carries some additive structure, then multiplicative α carries the corresponding
multiplicative structure.
Equations
- multiplicative α = α
 
Reinterpret x : α as an element of additive α.
Equations
- additive.of_mul x = x
 
Reinterpret x : α as an element of multiplicative α.
Equations
Reinterpret x : multiplicative α as an element of α.
@[simp]
@[instance]
    Equations
@[instance]
    Equations
@[instance]
    Equations
- additive.has_add = {add := λ (x y : additive α), additive.of_mul (x.to_mul * y.to_mul)}
 
@[instance]
    Equations
- multiplicative.has_mul = {mul := λ (x y : multiplicative α), multiplicative.of_add (x.to_add + y.to_add)}
 
@[simp]
@[simp]
@[simp]
    
theorem
of_mul_mul
    {α : Type u}
    [has_mul α]
    (x y : α) :
additive.of_mul (x * y) = additive.of_mul x + additive.of_mul y
@[instance]
    Equations
@[instance]
    Equations
@[instance]
    Equations
- additive.add_comm_semigroup = {add := add_semigroup.add additive.add_semigroup, add_assoc := _, add_comm := _}
 
@[instance]
    Equations
- multiplicative.comm_semigroup = {mul := semigroup.mul multiplicative.semigroup, mul_assoc := _, mul_comm := _}
 
@[instance]
    Equations
@[instance]
    Equations
@[instance]
    Equations
@[instance]
    Equations
@[instance]
    Equations
@[instance]
    Equations
@[instance]
    Equations
- additive.add_monoid = {add := add_semigroup.add additive.add_semigroup, add_assoc := _, zero := 0, zero_add := _, add_zero := _}
 
@[instance]
    Equations
- multiplicative.monoid = {mul := semigroup.mul multiplicative.semigroup, mul_assoc := _, one := 1, one_mul := _, mul_one := _}
 
@[instance]
    Equations
- additive.add_comm_monoid = {add := add_monoid.add additive.add_monoid, add_assoc := _, zero := add_monoid.zero additive.add_monoid, zero_add := _, add_zero := _, add_comm := _}
 
@[instance]
    Equations
- multiplicative.comm_monoid = {mul := monoid.mul multiplicative.monoid, mul_assoc := _, one := monoid.one multiplicative.monoid, one_mul := _, mul_one := _, mul_comm := _}
 
@[instance]
    Equations
- additive.has_neg = {neg := λ (x : additive α), multiplicative.of_add (x.to_mul)⁻¹}
 
@[simp]
@[instance]
    Equations
- multiplicative.has_inv = {inv := λ (x : multiplicative α), additive.of_mul (-x.to_add)}
 
@[simp]
@[simp]
@[instance]
    Equations
- additive.add_group = {add := add_monoid.add additive.add_monoid, add_assoc := _, zero := add_monoid.zero additive.add_monoid, zero_add := _, add_zero := _, neg := has_neg.neg additive.has_neg, add_left_neg := _}
 
@[instance]
    Equations
- multiplicative.group = {mul := monoid.mul multiplicative.monoid, mul_assoc := _, one := monoid.one multiplicative.monoid, one_mul := _, mul_one := _, inv := has_inv.inv multiplicative.has_inv, mul_left_inv := _}
 
@[instance]
    Equations
- additive.add_comm_group = {add := add_group.add additive.add_group, add_assoc := _, zero := add_group.zero additive.add_group, zero_add := _, add_zero := _, neg := add_group.neg additive.add_group, add_left_neg := _, add_comm := _}
 
@[instance]
    Equations
- multiplicative.comm_group = {mul := group.mul multiplicative.group, mul_assoc := _, one := group.one multiplicative.group, one_mul := _, mul_one := _, inv := group.inv multiplicative.group, mul_left_inv := _, mul_comm := _}
 
    
def
add_monoid_hom.to_multiplicative
    {α : Type u}
    {β : Type v}
    [add_monoid α]
    [add_monoid β] :
(α →+ β) → multiplicative α →* multiplicative β
Reinterpret f : α →+ β as multiplicative α →* multiplicative β.
    
def
add_monoid_hom.to_multiplicative'
    {α : Type u}
    {β : Type v}
    [monoid α]
    [add_monoid β] :
(additive α →+ β) → α →* multiplicative β
Reinterpret f : additive α →+ β as α →* multiplicative β.
    
def
monoid_hom.to_additive'
    {α : Type u}
    {β : Type v}
    [monoid α]
    [add_monoid β] :
(α →* multiplicative β) → additive α →+ β
Reinterpret f : α →* multiplicative β as additive α →+ β.