group_theory.group_action.sub_mul_action.pointwise
⟷
Mathlib.GroupTheory.GroupAction.SubMulAction.Pointwise
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.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(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)
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.
@@ -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)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -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
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -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"
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -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) :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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 _}
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -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 := (· * ·)
Set.image2
etc (#9275)
Set.image2
to use ∃ a ∈ s, ∃ b ∈ t, f a b = c
instead of ∃ a b, a ∈ s ∧ b ∈ t ∧ f a b = c
.Set.seq
as Set.image2
. The new definition is equal to the old one but rw [Set.seq]
gives a different result.Filter.map₂
to use ∃ u ∈ f, ∃ v ∈ g, image2 m u v ⊆ s
instead of ∃ u v, u ∈ f ∧ v ∈ g ∧ ...
Set.mem_image2
, Finset.mem_image₂
, Set.mem_mul
, Finset.mem_div
etcThe two reasons to make the change are:
∃ a ∈ s, ∃ b ∈ t, _
is a simp
-normal form, and@@ -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
@@ -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
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.
In particular this includes adjustments for the Lean PRs
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).
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})
.
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:
(config := { unfoldPartialApp := true })
in some places, to recover the old behaviour@[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>
@@ -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
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.
@@ -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
@@ -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₂ }
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -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
@@ -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
@@ -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.
-/
The unported dependencies are