Skip to content

Commit 39aeb68

Browse files
xroblotalreadydone
andcommitted
feat(Algebra/IsScalarTower): add transitivity results (#27866)
Add the following: ``` Let `Q / P / N / M` be a scalar tower. If `P / N / M`, `Q / P / M` and `Q / P / N` are scalar towers, then `Q / N / M` is also a scalar tower. ``` and variations. Co-authored-by: Junyan Xu <junyanxu.math@gmail.com> Co-authored-by: Junyan Xu <junyanxu.math@gmail.com>
1 parent a7cf25e commit 39aeb68

2 files changed

Lines changed: 37 additions & 1 deletion

File tree

Mathlib/Algebra/Group/Action/Defs.lean

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -488,7 +488,6 @@ lemma isScalarTower_iff_smulCommClass_of_commMonoid (R₁ R : Type*)
488488
SMulCommClass R₁ R R ↔ IsScalarTower R₁ R R :=
489489
fun _ ↦ IsScalarTower.of_commMonoid R₁ R, fun _ ↦ SMulCommClass.of_commMonoid R₁ R R⟩
490490

491-
492491
end
493492

494493
section CompatibleScalar
@@ -516,6 +515,34 @@ lemma SMulCommClass.of_mul_smul_one {M N} [Monoid N] [SMul M N]
516515
(H : ∀ (x : M) (y : N), y * x • (1 : N) = x • y) : SMulCommClass M N N :=
517516
fun x y z ↦ by rw [← H x z, smul_eq_mul, ← H, smul_eq_mul, mul_assoc]⟩
518517

518+
/--
519+
Let `Q / P / N / M` be a tower. If `P / N / M`, `Q / P / M` and `Q / P / N` are
520+
scalar towers, then `Q / N / M` is also a scalar tower.
521+
-/
522+
@[to_additive] lemma IsScalarTower.to₁₂₄ (M N P Q)
523+
[SMul M N] [SMul M P] [SMul M Q] [SMul N P] [SMul N Q] [Monoid P] [MulAction P Q]
524+
[IsScalarTower M N P] [IsScalarTower M P Q] [IsScalarTower N P Q] : IsScalarTower M N Q where
525+
smul_assoc m n q := by rw [← smul_one_smul P, smul_assoc m, smul_assoc, smul_one_smul]
526+
527+
/--
528+
Let `Q / P / N / M` be a tower. If `P / N / M`, `Q / N / M` and `Q / P / N` are
529+
scalar towers, then `Q / P / M` is also a scalar tower.
530+
-/
531+
@[to_additive] lemma IsScalarTower.to₁₃₄ (M N P Q)
532+
[SMul M N] [SMul M P] [SMul M Q] [SMul P Q] [Monoid N] [MulAction N P] [MulAction N Q]
533+
[IsScalarTower M N P] [IsScalarTower M N Q] [IsScalarTower N P Q] : IsScalarTower M P Q where
534+
smul_assoc m p q := by rw [← smul_one_smul N m, smul_assoc, smul_one_smul]
535+
536+
/--
537+
Let `Q / P / N / M` be a tower. If `P / N / M`, `Q / N / M` and `Q / P / M` are
538+
scalar towers, then `Q / P / N` is also a scalar tower.
539+
-/
540+
@[to_additive] lemma IsScalarTower.to₂₃₄ (M N P Q)
541+
[SMul M N] [SMul M P] [SMul M Q] [SMul P Q] [Monoid N] [MulAction N P] [MulAction N Q]
542+
[IsScalarTower M N P] [IsScalarTower M N Q] [IsScalarTower M P Q]
543+
(h : Function.Surjective fun m : M ↦ m • (1 : N)) : IsScalarTower N P Q where
544+
smul_assoc n p q := by obtain ⟨m, rfl⟩ := h n; simp_rw [smul_one_smul, smul_assoc]
545+
519546
end CompatibleScalar
520547

521548
/-- Typeclass for multiplicative actions on multiplicative structures.

Mathlib/Algebra/Group/Action/Faithful.lean

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,3 +70,12 @@ lemma faithfulSMul_iff_injective_smul_one (R A : Type*)
7070
· simp only at hr
7171
rw [← one_mul a, ← smul_mul_assoc, ← smul_mul_assoc, hr]
7272
· simpa using hr 1
73+
74+
/--
75+
Let `Q / P / N / M` be a tower. If `Q / N / M`, `Q / P / M` and `Q / P / N` are
76+
scalar towers, then `P / N / M` is also a scalar tower.
77+
-/
78+
@[to_additive] lemma IsScalarTower.to₁₂₃ (M N P Q)
79+
[SMul M N] [SMul M P] [SMul M Q] [SMul N P] [SMul N Q] [SMul P Q] [FaithfulSMul P Q]
80+
[IsScalarTower M N Q] [IsScalarTower M P Q] [IsScalarTower N P Q] : IsScalarTower M N P where
81+
smul_assoc m n p := by simp_rw [← (smul_left_injective' (α := Q)).eq_iff, smul_assoc]

0 commit comments

Comments
 (0)