An algebra as a module over B ⊗[K] Aᵐᵒᵖ #
A K-algebra homomorphism f : B →ₐ[K] A turns A into a B-A-bimodule: B acts on the left
through f and A on the right by multiplication. Packaged as a left module over
R = B ⊗[K] Aᵐᵒᵖ, with b ⊗ₜ op a acting by x ↦ f b * x * a, this is TauCeti.Bimodule f.
Two theorems rest on this one construction, and neither can use A itself as the carrier:
- the Skolem-Noether theorem (
TauCeti/Algebra/CentralSimple/SkolemNoether.lean) compares the structures coming from two homomorphismsfandgon the same underlyingK-vector space, so the two module structures must coexist; - the centralizer theorem (
TauCeti/Algebra/CentralSimple/Centralizer.lean) identifies the endomorphism ring ofBimodule fwith the centralizer of the image off, and needsAto carry no competingR-module structure while it does so.
Indexing a type synonym by the homomorphism answers both: the structures are separated by f, and
none of them is an instance on A. Mathlib takes the same route for A ⊗[R] Aᵐᵒᵖ acting on A
in Mathlib/Algebra/Azumaya/Defs.lean, where instModuleTensorProductMop is deliberately not an
instance.
Main definitions #
TauCeti.Bimodule f: the type synonym, with itsB ⊗[K] Aᵐᵒᵖ-module structure.TauCeti.Bimodule.of f : A ≃ₗ[K] Bimodule f: the identification withAas aK-module, the only route between the two types that the interface offers.TauCeti.Bimodule.toEnd f: the action, as aK-algebra homomorphism intoModule.End K A. It is Mathlib'sAlgHom.mulLeftRightrestricted alongfon the left factor, so forf = AlgHom.id K Ait isAlgHom.mulLeftRight K Aitself.
A B ⊗[K] Aᵐᵒᵖ-linear map Bimodule f →ₗ Bimodule g, transported along of, is determined by its
value u at 1, and that value intertwines f and g:
TauCeti.Bimodule.symm_apply_eq_symm_apply_one_mul: the transported map isa ↦ u * a.TauCeti.Bimodule.apply_of: the untransported form,φ (of f a) = of g (u * a).TauCeti.Bimodule.symm_apply_one_mul_eq_mul_symm_apply_one:u * f b = g b * u.TauCeti.Bimodule.exists_symm_apply_one_mul_eq_one: whenof g 1is hit,uhas a right inverse.
The two consumers take different halves. The Skolem-Noether argument in
TauCeti/Algebra/CentralSimple/SkolemNoether.lean uses the right-inverse lemma
exists_symm_apply_one_mul_eq_one and the intertwining lemma
symm_apply_one_mul_eq_mul_symm_apply_one; the centralizer theorem in
TauCeti/Algebra/CentralSimple/Centralizer.lean uses apply_of and the same intertwining lemma, at
f = g = B.val.
More generally, Bimodule f is generated by 1 subject only to b • 1 = 1 • f b, and this is
its universal property among all B ⊗[K] Aᵐᵒᵖ-modules M:
TauCeti.Bimodule.eq_of_apply_one_eq: aB ⊗[K] Aᵐᵒᵖ-linear mapBimodule f → Mis determined by its value at1.TauCeti.Bimodule.lift: everyc : Mon whichb ⊗ₜ 1and1 ⊗ₜ op (f b)act alike is the value at1of such a map,a ↦ (1 ⊗ₜ op a) • c. Forf = AlgHom.id K Athese are the maps ofA-bimodules out ofA, such as the coevaluation of a symmetric Frobenius algebra.
Implementation notes #
TauCeti.Bimodule.smul_of and TauCeti.Bimodule.symm_smul are the working interface: they compute
the action of a pure tensor on either side of of, and every consumer is expected to reach the
module structure through them and through TauCeti.Bimodule.smul_def rather than by unfolding the
synonym. Only Bimodule is @[expose]d, and it has to be: a type synonym cannot carry transported
instances unless its body is visible. Everything else, of and toEnd included, stays opaque, so
that no consumer can depend on their bodies; smul_def is proved by (rfl) rather than by rfl,
which is what keeps it from being tagged @[defeq] — an exported @[defeq] theorem would demand
that the body of of be exposed too.
Nothing in the construction uses negation, so A and B are asked only to be semirings; the
additive group structure is inherited conditionally, when A happens to be a ring.
References #
This is the shared construction beneath the Layer 5 targets skolemNoether and
finrank_mul_finrank_centralizer of the
semisimple algebras roadmap.
See R. S. Pierce, Associative Algebras, GTM 88, Chapter 12.
A regarded as a left module over B ⊗[K] Aᵐᵒᵖ through an algebra homomorphism
f : B →ₐ[K] A: the element b ⊗ₜ op a acts by x ↦ f b * x * a.
Equivalently this is the B-A-bimodule A obtained by restricting the left action along f,
packaged as a left module over B ⊗[K] Aᵐᵒᵖ in the usual way. It is a type synonym for A
precisely so that the structures coming from two different homomorphisms can be compared, and so
that A itself is left without a B ⊗[K] Aᵐᵒᵖ-action.
Equations
- TauCeti.Bimodule _f = A
Instances For
Equations
- One or more equations did not get rendered due to their size.
Equations
- TauCeti.Bimodule.instModule f = { toSMul := TauCeti.Bimodule.instModule._aux_1 f, mul_smul := ⋯, one_smul := ⋯, smul_zero := ⋯, smul_add := ⋯, add_smul := ⋯, zero_smul := ⋯ }
The action of B ⊗[K] Aᵐᵒᵖ on A defining Bimodule f, as an algebra homomorphism into
Module.End K A. It is Mathlib's AlgHom.mulLeftRight restricted along f on the left factor, so
for f = AlgHom.id K A it is AlgHom.mulLeftRight K A itself.
Equations
- TauCeti.Bimodule.toEnd f = (AlgHom.mulLeftRight K A).comp (Algebra.TensorProduct.map f (AlgHom.id K Aᵐᵒᵖ))
Instances For
A scalar r : B ⊗[K] Aᵐᵒᵖ acts on Bimodule f through toEnd f. This is the defining equation
of the module structure, and the single place it is unfolded: everything else below rewrites with it
instead of reasoning up to definitional equality.
A pure tensor b ⊗ₜ op a acts on Bimodule f by x ↦ f b * x * a: the left factor acts on the
left through f, the right factor on the right by multiplication.
smul_of read back through of: the action of a pure tensor b ⊗ₜ op a, transported to A,
is x ↦ f b * x * a.
Transported along Bimodule.of, a B ⊗[K] Aᵐᵒᵖ-linear map Bimodule f →ₗ Bimodule g sends
a to its value at 1, multiplied by a.
The untransported form of symm_apply_eq_symm_apply_one_mul: φ sends of f a to
of g (u * a), where u is its transported value at 1. This is the of-side companion, in the
same way that smul_of is the companion of symm_smul.
The transported value at 1 intertwines f and g: writing u for it, u * f b = g b * u
for every b : B.
Whenever of g 1 is in the range of φ, the transported value at 1 has a right inverse
in A. Surjectivity of φ is more than is needed: only this one value must be hit.
A B ⊗[K] Aᵐᵒᵖ-linear map out of Bimodule f is determined by its value at 1.
The universal property of Bimodule f. An element c of a B ⊗[K] Aᵐᵒᵖ-module on which
b ⊗ₜ 1 and 1 ⊗ₜ op (f b) act alike for every b : B is the value at 1 of the
B ⊗[K] Aᵐᵒᵖ-linear map Bimodule f → M sending a to (1 ⊗ₜ op a) • c. Conversely the value at
1 of any such map satisfies the hypothesis, and determines the map by
Bimodule.eq_of_apply_one_eq.
Equations
- TauCeti.Bimodule.lift f c hc = { toFun := fun (x : TauCeti.Bimodule f) => 1 ⊗ₜ[K] MulOpposite.op ((TauCeti.Bimodule.of f).symm x) • c, map_add' := ⋯, map_smul' := ⋯ }
Instances For
Bimodule.lift f c hc sends a to (1 ⊗ₜ op a) • c.
Bimodule.lift f c hc sends 1 to c.