@@ -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-
492491end
493492
494493section 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+
519546end CompatibleScalar
520547
521548/-- Typeclass for multiplicative actions on multiplicative structures.
0 commit comments