mathlib3documentation

algebra.hom.non_unital_alg

Morphisms of non-unital algebras #

THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.

This file defines morphisms between two types, each of which carries:

• a multiplication,
• a scalar action.

The multiplications are not assumed to be associative or unital, or even to be compatible with the scalar actions. In a typical application, the operations will satisfy compatibility conditions making them into algebras (albeit possibly non-associative and/or non-unital) but such conditions are not required to make this definition.

This notion of morphism should be useful for any category of non-unital algebras. The motivating application at the time it was introduced was to be able to state the adjunction property for magma algebras. These are non-unital, non-associative algebras obtained by applying the group-algebra construction except where we take a type carrying just has_mul instead of group.

For a plausible future application, one could take the non-unital algebra of compactly-supported functions on a non-compact topological space. A proper map between a pair of such spaces (contravariantly) induces a morphism between their algebras of compactly-supported functions which will be a non_unital_alg_hom.

TODO: add non_unital_alg_equiv when needed.

Main definitions #

• non_unital_alg_hom
• alg_hom.to_non_unital_alg_hom

Tags #

non-unital, algebra, morphism

@[nolint]
def non_unital_alg_hom.to_mul_hom {R : Type u} {A : Type v} {B : Type w} [monoid R] [ A] [ B] (self : A →ₙₐ[R] B) :
structure non_unital_alg_hom (R : Type u) (A : Type v) (B : Type w) [monoid R] [ A] [ B] :
Type (max v w)

A morphism respecting addition, multiplication, and scalar multiplication. When these arise from algebra structures, this is the same as a not-necessarily-unital morphism of algebras.

Instances for non_unital_alg_hom
@[nolint]
def non_unital_alg_hom.to_distrib_mul_action_hom {R : Type u} {A : Type v} {B : Type w} [monoid R] [ A] [ B] (self : A →ₙₐ[R] B) :
A →+[R] B
@[class]
structure non_unital_alg_hom_class (F : Type u_1) (R : out_param (Type u_2)) (A : out_param (Type u_3)) (B : out_param (Type u_4)) [monoid R] [ A] [ B] :
Type (max u_1 u_3 u_4)
• coe : F Π (a : A), (λ (_x : A), B) a
• coe_injective' :
• map_smul : (f : F) (c : R) (x : A), f (c x) = c f x
• map_add : (f : F) (x y : A), f (x + y) = f x + f y
• map_zero : (f : F), f 0 = 0
• map_mul : (f : F) (x y : A), f (x * y) = f x * f y

non_unital_alg_hom_class F R A B asserts F is a type of bundled algebra homomorphisms from A to B.

Instances of this typeclass
Instances of other typeclasses for non_unital_alg_hom_class
• non_unital_alg_hom_class.has_sizeof_inst
@[nolint, instance]
def non_unital_alg_hom_class.to_mul_hom_class (F : Type u_1) (R : out_param (Type u_2)) (A : out_param (Type u_3)) (B : out_param (Type u_4)) [monoid R] [ A] [ B] [self : B] :
B
@[instance]
def non_unital_alg_hom_class.to_distrib_mul_action_hom_class (F : Type u_1) (R : out_param (Type u_2)) (A : out_param (Type u_3)) (B : out_param (Type u_4)) [monoid R] [ A] [ B] [self : B] :
B
@[protected, nolint, instance]
def non_unital_alg_hom_class.non_unital_alg_hom_class.to_non_unital_ring_hom_class {F : Type u_1} {R : Type u_2} {A : Type u_3} {B : Type u_4} [monoid R] [ A] [ B] [ B] :
Equations
@[protected, instance]
def non_unital_alg_hom_class.linear_map_class (R : Type u) (A : Type v) (B : Type w) [semiring R] [ A] [ B] {F : Type u_1} [ B] :
A B
Equations
@[protected, instance]
def non_unital_alg_hom_class.non_unital_alg_hom.has_coe_t {F : Type u_1} {R : Type u_2} {A : Type u_3} {B : Type u_4} [monoid R] [ A] [ B] [ B] :
(A →ₙₐ[R] B)
Equations
@[protected, instance]
def non_unital_alg_hom.has_coe_to_fun {R : Type u} {A : Type v} {B : Type w} [monoid R] [ A] [ B] :
has_coe_to_fun (A →ₙₐ[R] B) (λ (_x : A →ₙₐ[R] B), A B)
Equations
@[simp]
theorem non_unital_alg_hom.to_fun_eq_coe {R : Type u} {A : Type v} {B : Type w} [monoid R] [ A] [ B] (f : A →ₙₐ[R] B) :
@[protected, simp]
theorem non_unital_alg_hom.coe_coe {R : Type u} {A : Type v} {B : Type w} [monoid R] [ A] [ B] {F : Type u_1} [ B] (f : F) :
theorem non_unital_alg_hom.coe_injective {R : Type u} {A : Type v} {B : Type w} [monoid R] [ A] [ B] :
@[protected, instance]
def non_unital_alg_hom.non_unital_alg_hom_class {R : Type u} {A : Type v} {B : Type w} [monoid R] [ A] [ B] :
R A B
Equations
@[ext]
theorem non_unital_alg_hom.ext {R : Type u} {A : Type v} {B : Type w} [monoid R] [ A] [ B] {f g : A →ₙₐ[R] B} (h : (x : A), f x = g x) :
f = g
theorem non_unital_alg_hom.ext_iff {R : Type u} {A : Type v} {B : Type w} [monoid R] [ A] [ B] {f g : A →ₙₐ[R] B} :
f = g (x : A), f x = g x
theorem non_unital_alg_hom.congr_fun {R : Type u} {A : Type v} {B : Type w} [monoid R] [ A] [ B] {f g : A →ₙₐ[R] B} (h : f = g) (x : A) :
f x = g x
@[simp]
theorem non_unital_alg_hom.coe_mk {R : Type u} {A : Type v} {B : Type w} [monoid R] [ A] [ B] (f : A B) (h₁ : (m : R) (x : A), f (m x) = m f x) (h₂ : f 0 = 0) (h₃ : (x y : A), f (x + y) = f x + f y) (h₄ : (x y : A), f (x * y) = f x * f y) :
{to_fun := f, map_smul' := h₁, map_zero' := h₂, map_add' := h₃, map_mul' := h₄} = f
@[simp]
theorem non_unital_alg_hom.mk_coe {R : Type u} {A : Type v} {B : Type w} [monoid R] [ A] [ B] (f : A →ₙₐ[R] B) (h₁ : (m : R) (x : A), f (m x) = m f x) (h₂ : f 0 = 0) (h₃ : (x y : A), f (x + y) = f x + f y) (h₄ : (x y : A), f (x * y) = f x * f y) :
{to_fun := f, map_smul' := h₁, map_zero' := h₂, map_add' := h₃, map_mul' := h₄} = f
@[protected, instance]
def non_unital_alg_hom.distrib_mul_action_hom.has_coe {R : Type u} {A : Type v} {B : Type w} [monoid R] [ A] [ B] :
has_coe (A →ₙₐ[R] B) (A →+[R] B)
Equations
@[protected, instance]
def non_unital_alg_hom.mul_hom.has_coe {R : Type u} {A : Type v} {B : Type w} [monoid R] [ A] [ B] :
Equations
@[simp]
theorem non_unital_alg_hom.to_distrib_mul_action_hom_eq_coe {R : Type u} {A : Type v} {B : Type w} [monoid R] [ A] [ B] (f : A →ₙₐ[R] B) :
@[simp]
theorem non_unital_alg_hom.to_mul_hom_eq_coe {R : Type u} {A : Type v} {B : Type w} [monoid R] [ A] [ B] (f : A →ₙₐ[R] B) :
@[simp, norm_cast]
theorem non_unital_alg_hom.coe_to_distrib_mul_action_hom {R : Type u} {A : Type v} {B : Type w} [monoid R] [ A] [ B] (f : A →ₙₐ[R] B) :
@[simp, norm_cast]
theorem non_unital_alg_hom.coe_to_mul_hom {R : Type u} {A : Type v} {B : Type w} [monoid R] [ A] [ B] (f : A →ₙₐ[R] B) :
theorem non_unital_alg_hom.to_distrib_mul_action_hom_injective {R : Type u} {A : Type v} {B : Type w} [monoid R] [ A] [ B] {f g : A →ₙₐ[R] B} (h : f = g) :
f = g
theorem non_unital_alg_hom.to_mul_hom_injective {R : Type u} {A : Type v} {B : Type w} [monoid R] [ A] [ B] {f g : A →ₙₐ[R] B} (h : f = g) :
f = g
@[norm_cast]
theorem non_unital_alg_hom.coe_distrib_mul_action_hom_mk {R : Type u} {A : Type v} {B : Type w} [monoid R] [ A] [ B] (f : A →ₙₐ[R] B) (h₁ : (m : R) (x : A), f (m x) = m f x) (h₂ : f 0 = 0) (h₃ : (x y : A), f (x + y) = f x + f y) (h₄ : (x y : A), f (x * y) = f x * f y) :
{to_fun := f, map_smul' := h₁, map_zero' := h₂, map_add' := h₃, map_mul' := h₄} = {to_fun := f, map_smul' := h₁, map_zero' := h₂, map_add' := h₃}
@[norm_cast]
theorem non_unital_alg_hom.coe_mul_hom_mk {R : Type u} {A : Type v} {B : Type w} [monoid R] [ A] [ B] (f : A →ₙₐ[R] B) (h₁ : (m : R) (x : A), f (m x) = m f x) (h₂ : f 0 = 0) (h₃ : (x y : A), f (x + y) = f x + f y) (h₄ : (x y : A), f (x * y) = f x * f y) :
{to_fun := f, map_smul' := h₁, map_zero' := h₂, map_add' := h₃, map_mul' := h₄} = {to_fun := f, map_mul' := h₄}
@[protected, simp]
theorem non_unital_alg_hom.map_smul {R : Type u} {A : Type v} {B : Type w} [monoid R] [ A] [ B] (f : A →ₙₐ[R] B) (c : R) (x : A) :
f (c x) = c f x
@[protected, simp]
theorem non_unital_alg_hom.map_add {R : Type u} {A : Type v} {B : Type w} [monoid R] [ A] [ B] (f : A →ₙₐ[R] B) (x y : A) :
f (x + y) = f x + f y
@[protected, simp]
theorem non_unital_alg_hom.map_mul {R : Type u} {A : Type v} {B : Type w} [monoid R] [ A] [ B] (f : A →ₙₐ[R] B) (x y : A) :
f (x * y) = f x * f y
@[protected, simp]
theorem non_unital_alg_hom.map_zero {R : Type u} {A : Type v} {B : Type w} [monoid R] [ A] [ B] (f : A →ₙₐ[R] B) :
f 0 = 0
@[protected, instance]
def non_unital_alg_hom.has_zero {R : Type u} {A : Type v} {B : Type w} [monoid R] [ A] [ B] :
Equations
@[protected, instance]
def non_unital_alg_hom.has_one {R : Type u} {A : Type v} [monoid R] [ A] :
Equations
@[simp]
theorem non_unital_alg_hom.coe_zero {R : Type u} {A : Type v} {B : Type w} [monoid R] [ A] [ B] :
0 = 0
@[simp]
theorem non_unital_alg_hom.coe_one {R : Type u} {A : Type v} [monoid R] [ A] :
theorem non_unital_alg_hom.zero_apply {R : Type u} {A : Type v} {B : Type w} [monoid R] [ A] [ B] (a : A) :
0 a = 0
theorem non_unital_alg_hom.one_apply {R : Type u} {A : Type v} [monoid R] [ A] (a : A) :
1 a = a
@[protected, instance]
def non_unital_alg_hom.inhabited {R : Type u} {A : Type v} {B : Type w} [monoid R] [ A] [ B] :
Equations
def non_unital_alg_hom.comp {R : Type u} {A : Type v} {B : Type w} {C : Type w₁} [monoid R] [ A] [ B] [ C] (f : B →ₙₐ[R] C) (g : A →ₙₐ[R] B) :

The composition of morphisms is a morphism.

Equations
@[simp, norm_cast]
theorem non_unital_alg_hom.coe_comp {R : Type u} {A : Type v} {B : Type w} {C : Type w₁} [monoid R] [ A] [ B] [ C] (f : B →ₙₐ[R] C) (g : A →ₙₐ[R] B) :
(f.comp g) = f g
theorem non_unital_alg_hom.comp_apply {R : Type u} {A : Type v} {B : Type w} {C : Type w₁} [monoid R] [ A] [ B] [ C] (f : B →ₙₐ[R] C) (g : A →ₙₐ[R] B) (x : A) :
(f.comp g) x = f (g x)
def non_unital_alg_hom.inverse {R : Type u} {A : Type v} {B : Type w} [monoid R] [ A] [ B] (f : A →ₙₐ[R] B) (g : B A) (h₁ : f) (h₂ : f) :

The inverse of a bijective morphism is a morphism.

Equations
@[simp]
theorem non_unital_alg_hom.coe_inverse {R : Type u} {A : Type v} {B : Type w} [monoid R] [ A] [ B] (f : A →ₙₐ[R] B) (g : B A) (h₁ : f) (h₂ : f) :
(f.inverse g h₁ h₂) = g

Operations on the product type #

Note that much of this is copied from linear_algebra/prod.

def non_unital_alg_hom.fst (R : Type u) (A : Type v) (B : Type w) [monoid R] [ A] [ B] :

The first projection of a product is a non-unital alg_hom.

Equations
@[simp]
theorem non_unital_alg_hom.fst_apply (R : Type u) (A : Type v) (B : Type w) [monoid R] [ A] [ B] (self : A × B) :
B) self = self.fst
def non_unital_alg_hom.snd (R : Type u) (A : Type v) (B : Type w) [monoid R] [ A] [ B] :

The second projection of a product is a non-unital alg_hom.

Equations
@[simp]
theorem non_unital_alg_hom.snd_apply (R : Type u) (A : Type v) (B : Type w) [monoid R] [ A] [ B] (self : A × B) :
B) self = self.snd
def non_unital_alg_hom.prod {R : Type u} {A : Type v} {B : Type w} {C : Type w₁} [monoid R] [ A] [ B] [ C] (f : A →ₙₐ[R] B) (g : A →ₙₐ[R] C) :

The prod of two morphisms is a morphism.

Equations
@[simp]
theorem non_unital_alg_hom.prod_apply {R : Type u} {A : Type v} {B : Type w} {C : Type w₁} [monoid R] [ A] [ B] [ C] (f : A →ₙₐ[R] B) (g : A →ₙₐ[R] C) (i : A) :
(f.prod g) i = g i
theorem non_unital_alg_hom.coe_prod {R : Type u} {A : Type v} {B : Type w} {C : Type w₁} [monoid R] [ A] [ B] [ C] (f : A →ₙₐ[R] B) (g : A →ₙₐ[R] C) :
(f.prod g) = g
@[simp]
theorem non_unital_alg_hom.fst_prod {R : Type u} {A : Type v} {B : Type w} {C : Type w₁} [monoid R] [ A] [ B] [ C] (f : A →ₙₐ[R] B) (g : A →ₙₐ[R] C) :
C).comp (f.prod g) = f
@[simp]
theorem non_unital_alg_hom.snd_prod {R : Type u} {A : Type v} {B : Type w} {C : Type w₁} [monoid R] [ A] [ B] [ C] (f : A →ₙₐ[R] B) (g : A →ₙₐ[R] C) :
C).comp (f.prod g) = g
@[simp]
theorem non_unital_alg_hom.prod_fst_snd {R : Type u} {A : Type v} {B : Type w} [monoid R] [ A] [ B] :
B).prod B) = 1
def non_unital_alg_hom.prod_equiv {R : Type u} {A : Type v} {B : Type w} {C : Type w₁} [monoid R] [ A] [ B] [ C] :
(A →ₙₐ[R] B) × (A →ₙₐ[R] C) (A →ₙₐ[R] B × C)

Taking the product of two maps with the same domain is equivalent to taking the product of their codomains.

Equations
@[simp]
theorem non_unital_alg_hom.prod_equiv_apply {R : Type u} {A : Type v} {B : Type w} {C : Type w₁} [monoid R] [ A] [ B] [ C] (f : (A →ₙₐ[R] B) × (A →ₙₐ[R] C)) :
@[simp]
theorem non_unital_alg_hom.prod_equiv_symm_apply {R : Type u} {A : Type v} {B : Type w} {C : Type w₁} [monoid R] [ A] [ B] [ C] (f : A →ₙₐ[R] B × C) :
= C).comp f, C).comp f)
def non_unital_alg_hom.inl (R : Type u) (A : Type v) (B : Type w) [monoid R] [ A] [ B] :

The left injection into a product is a non-unital algebra homomorphism.

Equations
def non_unital_alg_hom.inr (R : Type u) (A : Type v) (B : Type w) [monoid R] [ A] [ B] :

The right injection into a product is a non-unital algebra homomorphism.

Equations
@[simp]
theorem non_unital_alg_hom.coe_inl {R : Type u} {A : Type v} {B : Type w} [monoid R] [ A] [ B] :
B) = λ (x : A), (x, 0)
theorem non_unital_alg_hom.inl_apply {R : Type u} {A : Type v} {B : Type w} [monoid R] [ A] [ B] (x : A) :
B) x = (x, 0)
@[simp]
theorem non_unital_alg_hom.coe_inr {R : Type u} {A : Type v} {B : Type w} [monoid R] [ A] [ B] :
B) =
theorem non_unital_alg_hom.inr_apply {R : Type u} {A : Type v} {B : Type w} [monoid R] [ A] [ B] (x : B) :
B) x = (0, x)

Interaction with alg_hom#

@[protected, instance]
def alg_hom.non_unital_alg_hom_class {R : Type u} {A : Type v} {B : Type w} [semiring A] [semiring B] [ A] [ B] {F : Type u_1} [ A B] :
B
Equations
def alg_hom.to_non_unital_alg_hom {R : Type u} {A : Type v} {B : Type w} [semiring A] [semiring B] [ A] [ B] (f : A →ₐ[R] B) :

A unital morphism of algebras is a non_unital_alg_hom.

Equations
@[protected, instance]
def alg_hom.non_unital_alg_hom.has_coe {R : Type u} {A : Type v} {B : Type w} [semiring A] [semiring B] [ A] [ B] :
Equations
@[simp]
theorem alg_hom.to_non_unital_alg_hom_eq_coe {R : Type u} {A : Type v} {B : Type w} [semiring A] [semiring B] [ A] [ B] (f : A →ₐ[R] B) :
@[simp, norm_cast]
theorem alg_hom.coe_to_non_unital_alg_hom {R : Type u} {A : Type v} {B : Type w} [semiring A] [semiring B] [ A] [ B] (f : A →ₐ[R] B) :