group_theory.group_action.sub_mul_action.pointwiseMathlib.GroupTheory.GroupAction.SubMulAction.Pointwise

This file has been ported!

Changes since the initial port

The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.

Changes in mathlib3

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(last sync)

feat(algebra/algebra/operations): the semiring of submodules over an algebra is idempotent (#18400)

The same results are repeated for ideal.

The two modifications of ported files are docstrings only, and are forward-ported at https://github.com/leanprover-community/mathlib4/pull/2175.

Since this adjusts the import hierarchy slightly, there are some files which now need to qualify names that were previously unambiguous.

One proof timed out, but the timeout went away after converting a messy term into tactic mode.

Diff
@@ -15,7 +15,7 @@ import group_theory.group_action.sub_mul_action
 This file provides `sub_mul_action.monoid` and weaker typeclasses, which show that `sub_mul_action`s
 inherit the same pointwise multiplications as sets.
 
-To match `submodule.semiring`, we do not put these in the `pointwise` locale.
+To match `submodule.idem_semiring`, we do not put these in the `pointwise` locale.
 
 -/
 

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(first ported)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -132,7 +132,7 @@ instance : Monoid (SubMulAction R M) :=
 theorem coe_pow (p : SubMulAction R M) : ∀ {n : ℕ} (hn : n ≠ 0), ↑(p ^ n) = (p ^ n : Set M)
   | 0, hn => (hn rfl).elim
   | 1, hn => by rw [pow_one, pow_one]
-  | n + 2, hn => by rw [pow_succ _ (n + 1), pow_succ _ (n + 1), coe_mul, coe_pow n.succ_ne_zero]
+  | n + 2, hn => by rw [pow_succ' _ (n + 1), pow_succ' _ (n + 1), coe_mul, coe_pow n.succ_ne_zero]
 #align sub_mul_action.coe_pow SubMulAction.coe_pow
 -/
 
Diff
@@ -3,7 +3,7 @@ Copyright (c) 2022 Eric Wieser. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Eric Wieser
 -/
-import Mathbin.GroupTheory.GroupAction.SubMulAction
+import GroupTheory.GroupAction.SubMulAction
 
 #align_import group_theory.group_action.sub_mul_action.pointwise from "leanprover-community/mathlib"@"2bbc7e3884ba234309d2a43b19144105a753292e"
 
Diff
@@ -34,7 +34,7 @@ variable [Monoid R] [MulAction R M] [One M]
 instance : One (SubMulAction R M)
     where one :=
     { carrier := Set.range fun r : R => r • (1 : M)
-      smul_mem' := fun r m ⟨r', hr'⟩ => hr' ▸ ⟨r * r', mul_smul _ _ _⟩ }
+      smul_mem' := fun r m ⟨r', hr'⟩ => hr' ▸ ⟨r * r', hMul_smul _ _ _⟩ }
 
 #print SubMulAction.coe_one /-
 theorem coe_one : ↑(1 : SubMulAction R M) = Set.range fun r : R => r • (1 : M) :=
Diff
@@ -2,14 +2,11 @@
 Copyright (c) 2022 Eric Wieser. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Eric Wieser
-
-! This file was ported from Lean 3 source module group_theory.group_action.sub_mul_action.pointwise
-! leanprover-community/mathlib commit 2bbc7e3884ba234309d2a43b19144105a753292e
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.GroupTheory.GroupAction.SubMulAction
 
+#align_import group_theory.group_action.sub_mul_action.pointwise from "leanprover-community/mathlib"@"2bbc7e3884ba234309d2a43b19144105a753292e"
+
 /-!
 # Pointwise monoid structures on sub_mul_action
 
Diff
@@ -70,14 +70,18 @@ instance : Mul (SubMulAction R M)
       smul_mem' := fun r m ⟨m₁, m₂, hm₁, hm₂, h⟩ =>
         h ▸ smul_mul_assoc r m₁ m₂ ▸ Set.mul_mem_mul (p.smul_mem _ hm₁) hm₂ }
 
+#print SubMulAction.coe_mul /-
 @[norm_cast]
 theorem coe_mul (p q : SubMulAction R M) : ↑(p * q) = (p * q : Set M) :=
   rfl
 #align sub_mul_action.coe_mul SubMulAction.coe_mul
+-/
 
+#print SubMulAction.mem_mul /-
 theorem mem_mul {p q : SubMulAction R M} {x : M} : x ∈ p * q ↔ ∃ y z, y ∈ p ∧ z ∈ q ∧ y * z = x :=
   Set.mem_mul
 #align sub_mul_action.mem_mul SubMulAction.mem_mul
+-/
 
 end Mul
 
@@ -127,16 +131,20 @@ instance : Monoid (SubMulAction R M) :=
     mul := (· * ·)
     one := 1 }
 
+#print SubMulAction.coe_pow /-
 theorem coe_pow (p : SubMulAction R M) : ∀ {n : ℕ} (hn : n ≠ 0), ↑(p ^ n) = (p ^ n : Set M)
   | 0, hn => (hn rfl).elim
   | 1, hn => by rw [pow_one, pow_one]
   | n + 2, hn => by rw [pow_succ _ (n + 1), pow_succ _ (n + 1), coe_mul, coe_pow n.succ_ne_zero]
 #align sub_mul_action.coe_pow SubMulAction.coe_pow
+-/
 
+#print SubMulAction.subset_coe_pow /-
 theorem subset_coe_pow (p : SubMulAction R M) : ∀ {n : ℕ}, (p ^ n : Set M) ⊆ ↑(p ^ n)
   | 0 => by rw [pow_zero, pow_zero]; exact subset_coe_one
   | n + 1 => (coe_pow p n.succ_ne_zero).Superset
 #align sub_mul_action.subset_coe_pow SubMulAction.subset_coe_pow
+-/
 
 end Monoid
 
Diff
@@ -24,7 +24,7 @@ To match `submodule.idem_semiring`, we do not put these in the `pointwise` local
 -/
 
 
-open Pointwise
+open scoped Pointwise
 
 variable {R M : Type _}
 
Diff
@@ -70,23 +70,11 @@ instance : Mul (SubMulAction R M)
       smul_mem' := fun r m ⟨m₁, m₂, hm₁, hm₂, h⟩ =>
         h ▸ smul_mul_assoc r m₁ m₂ ▸ Set.mul_mem_mul (p.smul_mem _ hm₁) hm₂ }
 
-/- warning: sub_mul_action.coe_mul -> SubMulAction.coe_mul is a dubious translation:
-lean 3 declaration is
-  forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u1} R] [_inst_2 : MulAction.{u1, u2} R M _inst_1] [_inst_3 : Mul.{u2} M] [_inst_4 : IsScalarTower.{u1, u2, u2} R M M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2) (Mul.toSMul.{u2} M _inst_3) (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)] (p : SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) (q : SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)), Eq.{succ u2} (Set.{u2} M) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) (Set.{u2} M) (HasLiftT.mk.{succ u2, succ u2} (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) (Set.{u2} M) (CoeTCₓ.coe.{succ u2, succ u2} (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) (Set.{u2} M) (SetLike.Set.hasCoeT.{u2, u2} (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) M (SubMulAction.setLike.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2))))) (HMul.hMul.{u2, u2, u2} (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) (instHMul.{u2} (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) (SubMulAction.hasMul.{u1, u2} R M _inst_1 _inst_2 _inst_3 _inst_4)) p q)) (HMul.hMul.{u2, u2, u2} (Set.{u2} M) (Set.{u2} M) (Set.{u2} M) (instHMul.{u2} (Set.{u2} M) (Set.mul.{u2} M _inst_3)) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) (Set.{u2} M) (HasLiftT.mk.{succ u2, succ u2} (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) (Set.{u2} M) (CoeTCₓ.coe.{succ u2, succ u2} (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) (Set.{u2} M) (SetLike.Set.hasCoeT.{u2, u2} (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) M (SubMulAction.setLike.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2))))) p) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) (Set.{u2} M) (HasLiftT.mk.{succ u2, succ u2} (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) (Set.{u2} M) (CoeTCₓ.coe.{succ u2, succ u2} (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) (Set.{u2} M) (SetLike.Set.hasCoeT.{u2, u2} (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) M (SubMulAction.setLike.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2))))) q))
-but is expected to have type
-  forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Monoid.{u2} R] [_inst_2 : MulAction.{u2, u1} R M _inst_1] [_inst_3 : Mul.{u1} M] [_inst_4 : IsScalarTower.{u2, u1, u1} R M M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2) (Mul.toSMul.{u1} M _inst_3) (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)] (p : SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) (q : SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)), Eq.{succ u1} (Set.{u1} M) (SetLike.coe.{u1, u1} (SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) M (SubMulAction.instSetLikeSubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) (HMul.hMul.{u1, u1, u1} (SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) (SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) (SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) (instHMul.{u1} (SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) (SubMulAction.instMulSubMulActionToSMul.{u2, u1} R M _inst_1 _inst_2 _inst_3 _inst_4)) p q)) (HMul.hMul.{u1, u1, u1} (Set.{u1} M) (Set.{u1} M) (Set.{u1} M) (instHMul.{u1} (Set.{u1} M) (Set.mul.{u1} M _inst_3)) (SetLike.coe.{u1, u1} (SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) M (SubMulAction.instSetLikeSubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) p) (SetLike.coe.{u1, u1} (SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) M (SubMulAction.instSetLikeSubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) q))
-Case conversion may be inaccurate. Consider using '#align sub_mul_action.coe_mul SubMulAction.coe_mulₓ'. -/
 @[norm_cast]
 theorem coe_mul (p q : SubMulAction R M) : ↑(p * q) = (p * q : Set M) :=
   rfl
 #align sub_mul_action.coe_mul SubMulAction.coe_mul
 
-/- warning: sub_mul_action.mem_mul -> SubMulAction.mem_mul is a dubious translation:
-lean 3 declaration is
-  forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u1} R] [_inst_2 : MulAction.{u1, u2} R M _inst_1] [_inst_3 : Mul.{u2} M] [_inst_4 : IsScalarTower.{u1, u2, u2} R M M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2) (Mul.toSMul.{u2} M _inst_3) (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)] {p : SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)} {q : SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)} {x : M}, Iff (Membership.Mem.{u2, u2} M (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) (SetLike.hasMem.{u2, u2} (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) M (SubMulAction.setLike.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2))) x (HMul.hMul.{u2, u2, u2} (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) (instHMul.{u2} (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) (SubMulAction.hasMul.{u1, u2} R M _inst_1 _inst_2 _inst_3 _inst_4)) p q)) (Exists.{succ u2} M (fun (y : M) => Exists.{succ u2} M (fun (z : M) => And (Membership.Mem.{u2, u2} M (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) (SetLike.hasMem.{u2, u2} (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) M (SubMulAction.setLike.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2))) y p) (And (Membership.Mem.{u2, u2} M (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) (SetLike.hasMem.{u2, u2} (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) M (SubMulAction.setLike.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2))) z q) (Eq.{succ u2} M (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_3) y z) x)))))
-but is expected to have type
-  forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Monoid.{u2} R] [_inst_2 : MulAction.{u2, u1} R M _inst_1] [_inst_3 : Mul.{u1} M] [_inst_4 : IsScalarTower.{u2, u1, u1} R M M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2) (Mul.toSMul.{u1} M _inst_3) (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)] {p : SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)} {q : SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)} {x : M}, Iff (Membership.mem.{u1, u1} M (SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) (SetLike.instMembership.{u1, u1} (SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) M (SubMulAction.instSetLikeSubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2))) x (HMul.hMul.{u1, u1, u1} (SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) (SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) (SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) (instHMul.{u1} (SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) (SubMulAction.instMulSubMulActionToSMul.{u2, u1} R M _inst_1 _inst_2 _inst_3 _inst_4)) p q)) (Exists.{succ u1} M (fun (y : M) => Exists.{succ u1} M (fun (z : M) => And (Membership.mem.{u1, u1} M (SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) (SetLike.instMembership.{u1, u1} (SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) M (SubMulAction.instSetLikeSubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2))) y p) (And (Membership.mem.{u1, u1} M (SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) (SetLike.instMembership.{u1, u1} (SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) M (SubMulAction.instSetLikeSubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2))) z q) (Eq.{succ u1} M (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) y z) x)))))
-Case conversion may be inaccurate. Consider using '#align sub_mul_action.mem_mul SubMulAction.mem_mulₓ'. -/
 theorem mem_mul {p q : SubMulAction R M} {x : M} : x ∈ p * q ↔ ∃ y z, y ∈ p ∧ z ∈ q ∧ y * z = x :=
   Set.mem_mul
 #align sub_mul_action.mem_mul SubMulAction.mem_mul
@@ -139,24 +127,12 @@ instance : Monoid (SubMulAction R M) :=
     mul := (· * ·)
     one := 1 }
 
-/- warning: sub_mul_action.coe_pow -> SubMulAction.coe_pow is a dubious translation:
-lean 3 declaration is
-  forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u1} R] [_inst_2 : MulAction.{u1, u2} R M _inst_1] [_inst_3 : Monoid.{u2} M] [_inst_4 : IsScalarTower.{u1, u2, u2} R M M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2) (Mul.toSMul.{u2} M (MulOneClass.toHasMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_3))) (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)] [_inst_5 : SMulCommClass.{u1, u2, u2} R M M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2) (Mul.toSMul.{u2} M (MulOneClass.toHasMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_3)))] (p : SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) {n : Nat}, (Ne.{1} Nat n (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero)))) -> (Eq.{succ u2} (Set.{u2} M) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) (Set.{u2} M) (HasLiftT.mk.{succ u2, succ u2} (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) (Set.{u2} M) (CoeTCₓ.coe.{succ u2, succ u2} (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) (Set.{u2} M) (SetLike.Set.hasCoeT.{u2, u2} (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) M (SubMulAction.setLike.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2))))) (HPow.hPow.{u2, 0, u2} (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) Nat (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) (instHPow.{u2, 0} (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) Nat (Monoid.Pow.{u2} (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) (SubMulAction.monoid.{u1, u2} R M _inst_1 _inst_2 _inst_3 _inst_4 _inst_5))) p n)) (HPow.hPow.{u2, 0, u2} (Set.{u2} M) Nat (Set.{u2} M) (instHPow.{u2, 0} (Set.{u2} M) Nat (Set.NPow.{u2} M (MulOneClass.toHasOne.{u2} M (Monoid.toMulOneClass.{u2} M _inst_3)) (MulOneClass.toHasMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_3)))) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) (Set.{u2} M) (HasLiftT.mk.{succ u2, succ u2} (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) (Set.{u2} M) (CoeTCₓ.coe.{succ u2, succ u2} (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) (Set.{u2} M) (SetLike.Set.hasCoeT.{u2, u2} (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) M (SubMulAction.setLike.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2))))) p) n))
-but is expected to have type
-  forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Monoid.{u2} R] [_inst_2 : MulAction.{u2, u1} R M _inst_1] [_inst_3 : Monoid.{u1} M] [_inst_4 : IsScalarTower.{u2, u1, u1} R M M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2) (MulAction.toSMul.{u1, u1} M M _inst_3 (Monoid.toMulAction.{u1} M _inst_3)) (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)] [_inst_5 : SMulCommClass.{u2, u1, u1} R M M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2) (MulAction.toSMul.{u1, u1} M M _inst_3 (Monoid.toMulAction.{u1} M _inst_3))] (p : SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) {n : Nat}, (Ne.{1} Nat n (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))) -> (Eq.{succ u1} (Set.{u1} M) (SetLike.coe.{u1, u1} (SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) M (SubMulAction.instSetLikeSubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) (HPow.hPow.{u1, 0, u1} (SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) Nat (SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) (instHPow.{u1, 0} (SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) Nat (Monoid.Pow.{u1} (SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) (SubMulAction.instMonoidSubMulActionToSMul.{u2, u1} R M _inst_1 _inst_2 _inst_3 _inst_4 _inst_5))) p n)) (HPow.hPow.{u1, 0, u1} (Set.{u1} M) Nat (Set.{u1} M) (instHPow.{u1, 0} (Set.{u1} M) Nat (Set.NPow.{u1} M (Monoid.toOne.{u1} M _inst_3) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)))) (SetLike.coe.{u1, u1} (SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) M (SubMulAction.instSetLikeSubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) p) n))
-Case conversion may be inaccurate. Consider using '#align sub_mul_action.coe_pow SubMulAction.coe_powₓ'. -/
 theorem coe_pow (p : SubMulAction R M) : ∀ {n : ℕ} (hn : n ≠ 0), ↑(p ^ n) = (p ^ n : Set M)
   | 0, hn => (hn rfl).elim
   | 1, hn => by rw [pow_one, pow_one]
   | n + 2, hn => by rw [pow_succ _ (n + 1), pow_succ _ (n + 1), coe_mul, coe_pow n.succ_ne_zero]
 #align sub_mul_action.coe_pow SubMulAction.coe_pow
 
-/- warning: sub_mul_action.subset_coe_pow -> SubMulAction.subset_coe_pow is a dubious translation:
-lean 3 declaration is
-  forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u1} R] [_inst_2 : MulAction.{u1, u2} R M _inst_1] [_inst_3 : Monoid.{u2} M] [_inst_4 : IsScalarTower.{u1, u2, u2} R M M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2) (Mul.toSMul.{u2} M (MulOneClass.toHasMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_3))) (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)] [_inst_5 : SMulCommClass.{u1, u2, u2} R M M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2) (Mul.toSMul.{u2} M (MulOneClass.toHasMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_3)))] (p : SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) {n : Nat}, HasSubset.Subset.{u2} (Set.{u2} M) (Set.hasSubset.{u2} M) (HPow.hPow.{u2, 0, u2} (Set.{u2} M) Nat (Set.{u2} M) (instHPow.{u2, 0} (Set.{u2} M) Nat (Set.NPow.{u2} M (MulOneClass.toHasOne.{u2} M (Monoid.toMulOneClass.{u2} M _inst_3)) (MulOneClass.toHasMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_3)))) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) (Set.{u2} M) (HasLiftT.mk.{succ u2, succ u2} (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) (Set.{u2} M) (CoeTCₓ.coe.{succ u2, succ u2} (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) (Set.{u2} M) (SetLike.Set.hasCoeT.{u2, u2} (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) M (SubMulAction.setLike.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2))))) p) n) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) (Set.{u2} M) (HasLiftT.mk.{succ u2, succ u2} (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) (Set.{u2} M) (CoeTCₓ.coe.{succ u2, succ u2} (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) (Set.{u2} M) (SetLike.Set.hasCoeT.{u2, u2} (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) M (SubMulAction.setLike.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2))))) (HPow.hPow.{u2, 0, u2} (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) Nat (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) (instHPow.{u2, 0} (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) Nat (Monoid.Pow.{u2} (SubMulAction.{u1, u2} R M (MulAction.toHasSmul.{u1, u2} R M _inst_1 _inst_2)) (SubMulAction.monoid.{u1, u2} R M _inst_1 _inst_2 _inst_3 _inst_4 _inst_5))) p n))
-but is expected to have type
-  forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Monoid.{u2} R] [_inst_2 : MulAction.{u2, u1} R M _inst_1] [_inst_3 : Monoid.{u1} M] [_inst_4 : IsScalarTower.{u2, u1, u1} R M M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2) (MulAction.toSMul.{u1, u1} M M _inst_3 (Monoid.toMulAction.{u1} M _inst_3)) (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)] [_inst_5 : SMulCommClass.{u2, u1, u1} R M M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2) (MulAction.toSMul.{u1, u1} M M _inst_3 (Monoid.toMulAction.{u1} M _inst_3))] (p : SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) {n : Nat}, HasSubset.Subset.{u1} (Set.{u1} M) (Set.instHasSubsetSet.{u1} M) (HPow.hPow.{u1, 0, u1} (Set.{u1} M) Nat (Set.{u1} M) (instHPow.{u1, 0} (Set.{u1} M) Nat (Set.NPow.{u1} M (Monoid.toOne.{u1} M _inst_3) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)))) (SetLike.coe.{u1, u1} (SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) M (SubMulAction.instSetLikeSubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) p) n) (SetLike.coe.{u1, u1} (SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) M (SubMulAction.instSetLikeSubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) (HPow.hPow.{u1, 0, u1} (SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) Nat (SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) (instHPow.{u1, 0} (SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) Nat (Monoid.Pow.{u1} (SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) (SubMulAction.instMonoidSubMulActionToSMul.{u2, u1} R M _inst_1 _inst_2 _inst_3 _inst_4 _inst_5))) p n))
-Case conversion may be inaccurate. Consider using '#align sub_mul_action.subset_coe_pow SubMulAction.subset_coe_powₓ'. -/
 theorem subset_coe_pow (p : SubMulAction R M) : ∀ {n : ℕ}, (p ^ n : Set M) ⊆ ↑(p ^ n)
   | 0 => by rw [pow_zero, pow_zero]; exact subset_coe_one
   | n + 1 => (coe_pow p n.succ_ne_zero).Superset
Diff
@@ -158,9 +158,7 @@ but is expected to have type
   forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Monoid.{u2} R] [_inst_2 : MulAction.{u2, u1} R M _inst_1] [_inst_3 : Monoid.{u1} M] [_inst_4 : IsScalarTower.{u2, u1, u1} R M M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2) (MulAction.toSMul.{u1, u1} M M _inst_3 (Monoid.toMulAction.{u1} M _inst_3)) (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)] [_inst_5 : SMulCommClass.{u2, u1, u1} R M M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2) (MulAction.toSMul.{u1, u1} M M _inst_3 (Monoid.toMulAction.{u1} M _inst_3))] (p : SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) {n : Nat}, HasSubset.Subset.{u1} (Set.{u1} M) (Set.instHasSubsetSet.{u1} M) (HPow.hPow.{u1, 0, u1} (Set.{u1} M) Nat (Set.{u1} M) (instHPow.{u1, 0} (Set.{u1} M) Nat (Set.NPow.{u1} M (Monoid.toOne.{u1} M _inst_3) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)))) (SetLike.coe.{u1, u1} (SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) M (SubMulAction.instSetLikeSubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) p) n) (SetLike.coe.{u1, u1} (SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) M (SubMulAction.instSetLikeSubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) (HPow.hPow.{u1, 0, u1} (SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) Nat (SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) (instHPow.{u1, 0} (SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) Nat (Monoid.Pow.{u1} (SubMulAction.{u2, u1} R M (MulAction.toSMul.{u2, u1} R M _inst_1 _inst_2)) (SubMulAction.instMonoidSubMulActionToSMul.{u2, u1} R M _inst_1 _inst_2 _inst_3 _inst_4 _inst_5))) p n))
 Case conversion may be inaccurate. Consider using '#align sub_mul_action.subset_coe_pow SubMulAction.subset_coe_powₓ'. -/
 theorem subset_coe_pow (p : SubMulAction R M) : ∀ {n : ℕ}, (p ^ n : Set M) ⊆ ↑(p ^ n)
-  | 0 => by
-    rw [pow_zero, pow_zero]
-    exact subset_coe_one
+  | 0 => by rw [pow_zero, pow_zero]; exact subset_coe_one
   | n + 1 => (coe_pow p n.succ_ne_zero).Superset
 #align sub_mul_action.subset_coe_pow SubMulAction.subset_coe_pow
 

Changes in mathlib4

mathlib3
mathlib4
style: homogenise porting notes (#11145)

Homogenises porting notes via capitalisation and addition of whitespace.

It makes the following changes:

  • converts "--porting note" into "-- Porting note";
  • converts "porting note" into "Porting note".
Diff
@@ -73,7 +73,7 @@ section MulOneClass
 
 variable [Monoid R] [MulAction R M] [MulOneClass M] [IsScalarTower R M M] [SMulCommClass R M M]
 
--- porting note: giving the instance the name `mulOneClass`
+-- Porting note: giving the instance the name `mulOneClass`
 instance mulOneClass : MulOneClass (SubMulAction R M) where
   mul := (· * ·)
   one := 1
@@ -98,7 +98,7 @@ section Semigroup
 
 variable [Monoid R] [MulAction R M] [Semigroup M] [IsScalarTower R M M]
 
--- porting note: giving the instance the name `semiGroup`
+-- Porting note: giving the instance the name `semiGroup`
 instance semiGroup : Semigroup (SubMulAction R M)
     where
   mul := (· * ·)
refactor(*): change definition of Set.image2 etc (#9275)
  • Redefine Set.image2 to use ∃ a ∈ s, ∃ b ∈ t, f a b = c instead of ∃ a b, a ∈ s ∧ b ∈ t ∧ f a b = c.
  • Redefine Set.seq as Set.image2. The new definition is equal to the old one but rw [Set.seq] gives a different result.
  • Redefine Filter.map₂ to use ∃ u ∈ f, ∃ v ∈ g, image2 m u v ⊆ s instead of ∃ u v, u ∈ f ∧ v ∈ g ∧ ...
  • Update lemmas like Set.mem_image2, Finset.mem_image₂, Set.mem_mul, Finset.mem_div etc

The two reasons to make the change are:

  • ∃ a ∈ s, ∃ b ∈ t, _ is a simp-normal form, and
  • it looks a bit nicer.
Diff
@@ -55,7 +55,7 @@ variable [Monoid R] [MulAction R M] [Mul M] [IsScalarTower R M M]
 instance : Mul (SubMulAction R M) where
   mul p q :=
     { carrier := Set.image2 (· * ·) p q
-      smul_mem' := fun r _ ⟨m₁, m₂, hm₁, hm₂, h⟩ =>
+      smul_mem' := fun r _ ⟨m₁, hm₁, m₂, hm₂, h⟩ =>
         h ▸ smul_mul_assoc r m₁ m₂ ▸ Set.mul_mem_mul (p.smul_mem _ hm₁) hm₂ }
 
 @[norm_cast]
@@ -63,7 +63,7 @@ theorem coe_mul (p q : SubMulAction R M) : ↑(p * q) = (p * q : Set M) :=
   rfl
 #align sub_mul_action.coe_mul SubMulAction.coe_mul
 
-theorem mem_mul {p q : SubMulAction R M} {x : M} : x ∈ p * q ↔ ∃ y z, y ∈ p ∧ z ∈ q ∧ y * z = x :=
+theorem mem_mul {p q : SubMulAction R M} {x : M} : x ∈ p * q ↔ ∃ y ∈ p, ∃ z ∈ q, y * z = x :=
   Set.mem_mul
 #align sub_mul_action.mem_mul SubMulAction.mem_mul
 
@@ -74,13 +74,12 @@ section MulOneClass
 variable [Monoid R] [MulAction R M] [MulOneClass M] [IsScalarTower R M M] [SMulCommClass R M M]
 
 -- porting note: giving the instance the name `mulOneClass`
-instance mulOneClass : MulOneClass (SubMulAction R M)
-    where
+instance mulOneClass : MulOneClass (SubMulAction R M) where
   mul := (· * ·)
   one := 1
   mul_one a := by
     ext x
-    simp only [mem_mul, mem_one, mul_smul_comm, exists_and_left, exists_exists_eq_and, mul_one]
+    simp only [mem_mul, mem_one, mul_smul_comm, exists_exists_eq_and, mul_one]
     constructor
     · rintro ⟨y, hy, r, rfl⟩
       exact smul_mem _ _ hy
@@ -88,7 +87,7 @@ instance mulOneClass : MulOneClass (SubMulAction R M)
       exact ⟨x, hx, 1, one_smul _ _⟩
   one_mul a := by
     ext x
-    simp only [mem_mul, mem_one, smul_mul_assoc, exists_and_left, exists_exists_eq_and, one_mul]
+    simp only [mem_mul, mem_one, smul_mul_assoc, exists_exists_eq_and, one_mul]
     refine' ⟨_, fun hx => ⟨1, x, hx, one_smul _ _⟩⟩
     rintro ⟨r, y, hy, rfl⟩
     exact smul_mem _ _ hy
style(Algebra): write coe_pow lemmas more clearly (#8292)
Diff
@@ -115,14 +115,14 @@ instance : Monoid (SubMulAction R M) :=
   { SubMulAction.semiGroup,
     SubMulAction.mulOneClass with }
 
-theorem coe_pow (p : SubMulAction R M) : ∀ {n : ℕ} (_ : n ≠ 0), ↑(p ^ n) = ((p : Set M) ^ n)
+theorem coe_pow (p : SubMulAction R M) : ∀ {n : ℕ} (_ : n ≠ 0), ↑(p ^ n) = (p : Set M) ^ n
   | 0, hn => (hn rfl).elim
   | 1, _ => by rw [pow_one, pow_one]
   | n + 2, _ => by
     rw [pow_succ _ (n + 1), pow_succ _ (n + 1), coe_mul, coe_pow _ n.succ_ne_zero]
 #align sub_mul_action.coe_pow SubMulAction.coe_pow
 
-theorem subset_coe_pow (p : SubMulAction R M) : ∀ {n : ℕ}, ((p : Set M) ^ n) ⊆ ↑(p ^ n)
+theorem subset_coe_pow (p : SubMulAction R M) : ∀ {n : ℕ}, (p : Set M) ^ n ⊆ ↑(p ^ n)
   | 0 => by
     rw [pow_zero, pow_zero]
     exact subset_coe_one
chore: bump to v4.3.0-rc2 (#8366)

PR contents

This is the supremum of

along with some minor fixes from failures on nightly-testing as Mathlib master is merged into it.

Note that some PRs for changes that are already compatible with the current toolchain and will be necessary have already been split out: #8380.

I am hopeful that in future we will be able to progressively merge adaptation PRs into a bump/v4.X.0 branch, so we never end up with a "big merge" like this. However one of these adaptation PRs (#8056) predates my new scheme for combined CI, and it wasn't possible to keep that PR viable in the meantime.

Lean PRs involved in this bump

In particular this includes adjustments for the Lean PRs

leanprover/lean4#2778

We can get rid of all the

local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See issue [lean4#2220](https://github.com/leanprover/lean4/pull/2220)

macros across Mathlib (and in any projects that want to write natural number powers of reals).

leanprover/lean4#2722

Changes the default behaviour of simp to (config := {decide := false}). This makes simp (and consequentially norm_num) less powerful, but also more consistent, and less likely to blow up in long failures. This requires a variety of changes: changing some previously by simp or norm_num to decide or rfl, or adding (config := {decide := true}).

leanprover/lean4#2783

This changed the behaviour of simp so that simp [f] will only unfold "fully applied" occurrences of f. The old behaviour can be recovered with simp (config := { unfoldPartialApp := true }). We may in future add a syntax for this, e.g. simp [!f]; please provide feedback! In the meantime, we have made the following changes:

  • switching to using explicit lemmas that have the intended level of application
  • (config := { unfoldPartialApp := true }) in some places, to recover the old behaviour
  • Using @[eqns] to manually adjust the equation lemmas for a particular definition, recovering the old behaviour just for that definition. See #8371, where we do this for Function.comp and Function.flip.

This change in Lean may require further changes down the line (e.g. adding the !f syntax, and/or upstreaming the special treatment for Function.comp and Function.flip, and/or removing this special treatment). Please keep an open and skeptical mind about these changes!

Co-authored-by: leanprover-community-mathlib4-bot <leanprover-community-mathlib4-bot@users.noreply.github.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Mauricio Collares <mauricio@collares.org>

Diff
@@ -115,14 +115,14 @@ instance : Monoid (SubMulAction R M) :=
   { SubMulAction.semiGroup,
     SubMulAction.mulOneClass with }
 
-theorem coe_pow (p : SubMulAction R M) : ∀ {n : ℕ} (_ : n ≠ 0), (p ^ n : Set M) = ((p : Set M) ^ n)
+theorem coe_pow (p : SubMulAction R M) : ∀ {n : ℕ} (_ : n ≠ 0), ↑(p ^ n) = ((p : Set M) ^ n)
   | 0, hn => (hn rfl).elim
   | 1, _ => by rw [pow_one, pow_one]
   | n + 2, _ => by
     rw [pow_succ _ (n + 1), pow_succ _ (n + 1), coe_mul, coe_pow _ n.succ_ne_zero]
 #align sub_mul_action.coe_pow SubMulAction.coe_pow
 
-theorem subset_coe_pow (p : SubMulAction R M) : ∀ {n : ℕ}, ((p : Set M) ^ n) ⊆ (p ^ n : Set M)
+theorem subset_coe_pow (p : SubMulAction R M) : ∀ {n : ℕ}, ((p : Set M) ^ n) ⊆ ↑(p ^ n)
   | 0 => by
     rw [pow_zero, pow_zero]
     exact subset_coe_one
perf: remove overspecified fields (#6965)

This removes redundant field values of the form add := add for smaller terms and less unfolding during unification.

A list of all files containing a structure instance of the form { a1, ... with x1 := val, ... } where some xi is a field of some aj was generated by modifying the structure instance elaboration algorithm to print such overlaps to stdout in a custom toolchain.

Using that toolchain, I went through each file on the list and attempted to remove algebraic fields that overlapped and were redundant, eg add := add and not toFun (though some other ones did creep in). If things broke (which was the case in a couple of cases), I did not push further and reverted.

It is possible that pushing harder and trying to remove all redundant overlaps will yield further improvements.

Diff
@@ -113,9 +113,7 @@ variable [Monoid R] [MulAction R M] [Monoid M] [IsScalarTower R M M] [SMulCommCl
 
 instance : Monoid (SubMulAction R M) :=
   { SubMulAction.semiGroup,
-    SubMulAction.mulOneClass with
-    mul := (· * ·)
-    one := 1 }
+    SubMulAction.mulOneClass with }
 
 theorem coe_pow (p : SubMulAction R M) : ∀ {n : ℕ} (_ : n ≠ 0), (p ^ n : Set M) = ((p : Set M) ^ n)
   | 0, hn => (hn rfl).elim
style: fix wrapping of where (#7149)
Diff
@@ -28,8 +28,8 @@ section One
 
 variable [Monoid R] [MulAction R M] [One M]
 
-instance : One (SubMulAction R M)
-    where one :=
+instance : One (SubMulAction R M) where
+  one :=
     { carrier := Set.range fun r : R => r • (1 : M)
       smul_mem' := fun r _ ⟨r', hr'⟩ => hr' ▸ ⟨r * r', mul_smul _ _ _⟩ }
 
@@ -52,8 +52,8 @@ section Mul
 
 variable [Monoid R] [MulAction R M] [Mul M] [IsScalarTower R M M]
 
-instance : Mul (SubMulAction R M)
-    where mul p q :=
+instance : Mul (SubMulAction R M) where
+  mul p q :=
     { carrier := Set.image2 (· * ·) p q
       smul_mem' := fun r _ ⟨m₁, m₂, hm₁, hm₂, h⟩ =>
         h ▸ smul_mul_assoc r m₁ m₂ ▸ Set.mul_mem_mul (p.smul_mem _ hm₁) hm₂ }
chore: banish Type _ and Sort _ (#6499)

We remove all possible occurences of Type _ and Sort _ in favor of Type* and Sort*.

This has nice performance benefits.

Diff
@@ -20,7 +20,7 @@ To match `Submodule.idemSemiring`, we do not put these in the `Pointwise` locale
 
 open Pointwise
 
-variable {R M : Type _}
+variable {R M : Type*}
 
 namespace SubMulAction
 
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -2,14 +2,11 @@
 Copyright (c) 2022 Eric Wieser. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Eric Wieser
-
-! This file was ported from Lean 3 source module group_theory.group_action.sub_mul_action.pointwise
-! leanprover-community/mathlib commit 2bbc7e3884ba234309d2a43b19144105a753292e
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.GroupTheory.GroupAction.SubMulAction
 
+#align_import group_theory.group_action.sub_mul_action.pointwise from "leanprover-community/mathlib"@"2bbc7e3884ba234309d2a43b19144105a753292e"
+
 /-!
 # Pointwise monoid structures on SubMulAction
 
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Eric Wieser
 
 ! This file was ported from Lean 3 source module group_theory.group_action.sub_mul_action.pointwise
-! leanprover-community/mathlib commit f7fc89d5d5ff1db2d1242c7bb0e9062ce47ef47c
+! leanprover-community/mathlib commit 2bbc7e3884ba234309d2a43b19144105a753292e
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -16,7 +16,7 @@ import Mathlib.GroupTheory.GroupAction.SubMulAction
 This file provides `SubMulAction.Monoid` and weaker typeclasses, which show that `SubMulAction`s
 inherit the same pointwise multiplications as sets.
 
-To match `Submodule.Semiring`, we do not put these in the `Pointwise` locale.
+To match `Submodule.idemSemiring`, we do not put these in the `Pointwise` locale.
 
 -/
 
feat: port GroupTheory.GroupAction.SubMulAction.Pointwise (#1893)

Co-authored-by: Moritz Firsching <firsching@google.com>

Dependencies 4 + 238

239 files ported (98.4%)
104768 lines ported (99.0%)
Show graph

The unported dependencies are