Skip to content

Commit 3a09953

Browse files
YaelDilliesKiolt
andcommitted
feat(MonoidAlgebra): mapRange as an AlgHom (#28956)
From Toric Co-authored-by: Michał Mrugała <kiolterino@gmail.com>
1 parent 5bc74d2 commit 3a09953

File tree

1 file changed

+75
-33
lines changed

1 file changed

+75
-33
lines changed

Mathlib/Algebra/MonoidAlgebra/Basic.lean

Lines changed: 75 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -22,24 +22,18 @@ open Finset
2222

2323
open Finsupp hiding single mapDomain
2424

25-
universe u₁ u₂ u₃ u₄
26-
27-
variable (k : Type u₁) (G : Type u₂) (H : Type*) {R : Type*}
25+
variable {k G H R S T A B M N : Type*}
2826

2927
/-! ### Multiplicative monoids -/
3028

3129
namespace MonoidAlgebra
3230

33-
variable {k G}
34-
3531
/-! #### Non-unital, non-associative algebra structure -/
3632

3733

3834
section NonUnitalNonAssocAlgebra
3935

40-
variable (k) [Semiring k] [DistribSMul R k] [Mul G]
41-
42-
variable {A : Type u₃} [NonUnitalNonAssocSemiring A]
36+
variable (k) [Semiring k] [DistribSMul R k] [Mul G] [NonUnitalNonAssocSemiring A]
4337

4438
/-- A non_unital `k`-algebra homomorphism from `MonoidAlgebra k G` is uniquely defined by its
4539
values on the functions `single a 1`. -/
@@ -161,15 +155,18 @@ end Algebra
161155

162156
section lift
163157

164-
variable [CommSemiring k] [Monoid G] [Monoid H]
165-
variable {A : Type u₃} [Semiring A] [Algebra k A] {B : Type*} [Semiring B] [Algebra k B]
158+
variable [CommSemiring k] [Monoid G] [Monoid H] [Semiring A] [Algebra k A] [Semiring B]
159+
[Algebra k B]
166160

167161
/-- `liftNCRingHom` as an `AlgHom`, for when `f` is an `AlgHom` -/
168162
def liftNCAlgHom (f : A →ₐ[k] B) (g : G →* B) (h_comm : ∀ x y, Commute (f x) (g y)) :
169163
MonoidAlgebra A G →ₐ[k] B :=
170164
{ liftNCRingHom (f : A →+* B) g h_comm with
171165
commutes' := by simp [liftNCRingHom] }
172166

167+
@[simp] lemma coe_liftNCAlgHom (f : A →ₐ[k] B) (g : G →* B) (h_comm) :
168+
⇑(liftNCAlgHom f g h_comm) = liftNC f g := rfl
169+
173170
/-- A `k`-algebra homomorphism from `MonoidAlgebra k G` is uniquely defined by its
174171
values on the functions `single a 1`. -/
175172
@[to_additive (dont_translate := k) /--
@@ -188,8 +185,7 @@ theorem algHom_ext' ⦃φ₁ φ₂ : MonoidAlgebra k G →ₐ[k] A⦄
188185
φ₁ = φ₂ :=
189186
algHom_ext <| DFunLike.congr_fun h
190187

191-
variable (k G A)
192-
188+
variable (k G A) in
193189
/-- Any monoid homomorphism `G →* A` can be lifted to an algebra homomorphism
194190
`MonoidAlgebra k G →ₐ[k] A`. -/
195191
def lift : (G →* A) ≃ (MonoidAlgebra k G →ₐ[k] A) where
@@ -202,8 +198,6 @@ def lift : (G →* A) ≃ (MonoidAlgebra k G →ₐ[k] A) where
202198
ext
203199
simp [liftNCAlgHom, liftNCRingHom]
204200

205-
variable {k G H A}
206-
207201
theorem lift_apply' (F : G →* A) (f : MonoidAlgebra k G) :
208202
lift k G A F f = f.sum fun a b => algebraMap k A b * F a :=
209203
rfl
@@ -321,27 +315,77 @@ theorem domCongr_symm (e : G ≃* H) : (domCongr k A e).symm = domCongr k A e.sy
321315

322316
end lift
323317

318+
section mapRange
319+
variable [CommSemiring R] [CommSemiring S] [Semiring A] [Algebra R A] [Semiring B] [Algebra R B]
320+
[Monoid M] [Monoid N]
321+
322+
@[to_additive (attr := simp)]
323+
lemma mapDomainRingHom_comp_algebraMap (f : M →* N) :
324+
(mapDomainRingHom A f).comp (algebraMap R <| MonoidAlgebra A M) =
325+
algebraMap R (MonoidAlgebra A N) := by ext; simp
326+
327+
@[to_additive (attr := simp)]
328+
lemma mapRangeRingHom_comp_algebraMap (f : R →+* S) :
329+
(mapRangeRingHom (M := M) f).comp (algebraMap _ _) = (algebraMap _ _).comp f := by ext; simp
330+
331+
variable (M) in
332+
/-- The algebra homomorphism of monoid algebras induced by a homomorphism of the base algebras. -/
333+
@[to_additive
334+
/-- The algebra homomorphism of additive monoid algebras induced by a homomorphism of the base
335+
algebras. -/]
336+
noncomputable def mapRangeAlgHom (f : A →ₐ[R] B) : MonoidAlgebra A M →ₐ[R] MonoidAlgebra B M where
337+
__ := mapRangeRingHom M f
338+
commutes' := by simp
339+
340+
variable (M) in
341+
@[to_additive (attr := simp)]
342+
lemma toRingHom_mapRangeAlgHom (f : A →ₐ[R] B) :
343+
mapRangeAlgHom M f = mapRangeRingHom M f.toRingHom := rfl
344+
345+
@[to_additive (attr := simp)]
346+
lemma mapRangeAlgHom_apply (f : A →ₐ[R] B) (x : MonoidAlgebra A M) (m : M) :
347+
mapRangeAlgHom M f x m = f (x m) := mapRangeRingHom_apply f.toRingHom x m
348+
349+
@[to_additive (attr := simp)]
350+
lemma mapRangeAlgHom_single (f : A →ₐ[R] B) (m : M) (a : A) :
351+
mapRangeAlgHom M f (single m a) = single m (f a) := by
352+
classical ext; simp [single_apply, apply_ite f]
353+
354+
variable (M) in
355+
/-- The algebra isomorphism of monoid algebras induced by an isomorphism of the base algebras. -/
356+
@[to_additive (attr := simps apply)
357+
/-- The algebra isomorphism of additive monoid algebras induced by an isomorphism of the base
358+
algebras. -/]
359+
noncomputable def mapRangeAlgEquiv (f : A ≃ₐ[R] B) :
360+
MonoidAlgebra A M ≃ₐ[R] MonoidAlgebra B M where
361+
__ := mapRangeAlgHom M f
362+
invFun := mapRangeAlgHom M (f.symm : B →ₐ[R] A)
363+
left_inv _ := by aesop
364+
right_inv _ := by aesop
365+
366+
end mapRange
367+
324368
section
325369

326370
variable (k)
327371

328372
/-- When `V` is a `k[G]`-module, multiplication by a group element `g` is a `k`-linear map. -/
329-
def GroupSMul.linearMap [Monoid G] [CommSemiring k] (V : Type u₃) [AddCommMonoid V] [Module k V]
373+
def GroupSMul.linearMap [Monoid G] [CommSemiring k] (V : Type*) [AddCommMonoid V] [Module k V]
330374
[Module (MonoidAlgebra k G) V] [IsScalarTower k (MonoidAlgebra k G) V] (g : G) : V →ₗ[k] V where
331375
toFun v := single g (1 : k) • v
332376
map_add' x y := smul_add (single g (1 : k)) x y
333377
map_smul' _c _x := smul_algebra_smul_comm _ _ _
334378

335379
@[simp]
336-
theorem GroupSMul.linearMap_apply [Monoid G] [CommSemiring k] (V : Type u₃) [AddCommMonoid V]
380+
theorem GroupSMul.linearMap_apply [Monoid G] [CommSemiring k] (V : Type*) [AddCommMonoid V]
337381
[Module k V] [Module (MonoidAlgebra k G) V] [IsScalarTower k (MonoidAlgebra k G) V] (g : G)
338382
(v : V) : (GroupSMul.linearMap k V g) v = single g (1 : k) • v :=
339383
rfl
340384

341385
section
342386

343387
variable {k}
344-
variable [Monoid G] [CommSemiring k] {V : Type u₃} {W : Type u₄} [AddCommMonoid V] [Module k V]
388+
variable [Monoid G] [CommSemiring k] {V W : Type*} [AddCommMonoid V] [Module k V]
345389
[Module (MonoidAlgebra k G) V] [IsScalarTower k (MonoidAlgebra k G) V] [AddCommMonoid W]
346390
[Module k W] [Module (MonoidAlgebra k G) W] [IsScalarTower k (MonoidAlgebra k G) W]
347391
(f : V →ₗ[k] W)
@@ -375,14 +419,11 @@ end MonoidAlgebra
375419

376420
namespace AddMonoidAlgebra
377421

378-
variable {k G H}
379-
380422
/-! #### Non-unital, non-associative algebra structure -/
381423

382424
section NonUnitalNonAssocAlgebra
383425

384-
variable (k) [Semiring k] [DistribSMul R k] [Add G]
385-
variable {A : Type u₃} [NonUnitalNonAssocSemiring A]
426+
variable (k) [Semiring k] [DistribSMul R k] [Add G] [NonUnitalNonAssocSemiring A]
386427

387428
/-- See note [partially-applied ext lemmas]. -/
388429
@[ext high]
@@ -408,34 +449,33 @@ end NonUnitalNonAssocAlgebra
408449

409450
section lift
410451

411-
variable [CommSemiring k] [AddMonoid G]
412-
variable {A : Type u₃} [Semiring A] [Algebra k A] {B : Type*} [Semiring B] [Algebra k B]
452+
variable [CommSemiring k] [AddMonoid G] [Semiring A] [Algebra k A] [Semiring B] [Algebra k B]
413453

414454
/-- `liftNCRingHom` as an `AlgHom`, for when `f` is an `AlgHom` -/
415455
def liftNCAlgHom (f : A →ₐ[k] B) (g : Multiplicative G →* B) (h_comm : ∀ x y, Commute (f x) (g y)) :
416456
A[G] →ₐ[k] B :=
417457
{ liftNCRingHom (f : A →+* B) g h_comm with
418458
commutes' := by simp [liftNCRingHom] }
419459

460+
@[simp] lemma coe_liftNCAlgHom (f : A →ₐ[k] B) (g : Multiplicative G →* B) (h_comm) :
461+
⇑(liftNCAlgHom f g h_comm) = liftNC f g := rfl
462+
420463
/-- See note [partially-applied ext lemmas]. -/
421464
@[ext high]
422465
theorem algHom_ext' ⦃φ₁ φ₂ : k[G] →ₐ[k] A⦄
423466
(h : (φ₁ : k[G] →* A).comp (of k G) = (φ₂ : k[G] →* A).comp (of k G)) :
424467
φ₁ = φ₂ :=
425468
algHom_ext <| DFunLike.congr_fun h
426469

427-
variable (k G A)
428-
470+
variable (k G A) in
429471
/-- Any monoid homomorphism `G →* A` can be lifted to an algebra homomorphism
430472
`k[G] →ₐ[k] A`. -/
431-
def lift : (Multiplicative G →* A) ≃ (k[G] →ₐ[k] A) :=
432-
{ @MonoidAlgebra.lift k (Multiplicative G) _ _ A _ _ with
433-
invFun := fun f => (f : k[G] →* A).comp (of k G)
434-
toFun := fun F =>
435-
{ @MonoidAlgebra.lift k (Multiplicative G) _ _ A _ _ F with
436-
toFun := liftNCAlgHom (Algebra.ofId k A) F fun _ _ => Algebra.commutes _ _ } }
437-
438-
variable {k G A}
473+
def lift : (Multiplicative G →* A) ≃ (k[G] →ₐ[k] A) where
474+
__ := MonoidAlgebra.lift k (Multiplicative G) A
475+
invFun f := (f : k[G] →* A).comp (of k G)
476+
toFun F :=
477+
{ MonoidAlgebra.lift k (Multiplicative G) A F with
478+
toFun := liftNCAlgHom (Algebra.ofId k A) F fun _ _ => Algebra.commutes _ _ }
439479

440480
theorem lift_apply' (F : Multiplicative G →* A) (f : MonoidAlgebra k G) :
441481
lift k G A F f = f.sum fun a b => algebraMap k A b * F (Multiplicative.ofAdd a) :=
@@ -488,13 +528,15 @@ end AddMonoidAlgebra
488528

489529
variable [CommSemiring R]
490530

531+
variable (k G) in
491532
/-- The algebra equivalence between `AddMonoidAlgebra` and `MonoidAlgebra` in terms of
492533
`Multiplicative`. -/
493534
def AddMonoidAlgebra.toMultiplicativeAlgEquiv [Semiring k] [Algebra R k] [AddMonoid G] :
494535
AddMonoidAlgebra k G ≃ₐ[R] MonoidAlgebra k (Multiplicative G) :=
495536
{ AddMonoidAlgebra.toMultiplicative k G with
496537
commutes' := fun r => by simp [AddMonoidAlgebra.toMultiplicative] }
497538

539+
variable (k G) in
498540
/-- The algebra equivalence between `MonoidAlgebra` and `AddMonoidAlgebra` in terms of
499541
`Additive`. -/
500542
def MonoidAlgebra.toAdditiveAlgEquiv [Semiring k] [Algebra R k] [Monoid G] :

0 commit comments

Comments
 (0)