topology.algebra.monoidMathlib.Topology.Algebra.Monoid

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)

(last sync)

chore(*): fix @[to_additive, simp] to the correct order (#19169)

Whilst making some files, I noticed that there is some lemmas that have the wrong order for to_additive and simp.

Diff
@@ -698,14 +698,14 @@ variables [has_mul X] [has_continuous_mul X]
 @[to_additive "The continuous map `λ y, y + x"]
 protected def mul_right (x : X) : C(X, X) := mk _ (continuous_mul_right x)
 
-@[to_additive, simp]
+@[simp, to_additive]
 lemma coe_mul_right (x : X) : ⇑(continuous_map.mul_right x) = λ y, y * x := rfl
 
 /-- The continuous map `λ y, x * y` -/
 @[to_additive "The continuous map `λ y, x + y"]
 protected def mul_left (x : X) : C(X, X) := mk _ (continuous_mul_left x)
 
-@[to_additive, simp]
+@[simp, to_additive]
 lemma coe_mul_left (x : X) : ⇑(continuous_map.mul_left x) = λ y, x * y := rfl
 
 end continuous_map

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

feat(topology/continuous_function): some lemmas spun off from #18392 (#18465)

A few miscellaneous lemmas about continuous functions needed for my Poisson summation project. Companion mathlib4 PR (blank for now) at [#2369](https://github.com/leanprover-community/mathlib4/pull/2369).

Diff
@@ -7,6 +7,7 @@ import algebra.big_operators.finprod
 import order.filter.pointwise
 import topology.algebra.mul_action
 import algebra.big_operators.pi
+import topology.continuous_function.basic
 
 /-!
 # Theory of topological monoids
@@ -688,3 +689,23 @@ by { rw ← Inf_range, exact has_continuous_mul_Inf (set.forall_range_iff.mpr h'
 by { rw inf_eq_infi, refine has_continuous_mul_infi (λ b, _), cases b; assumption }
 
 end lattice_ops
+
+namespace continuous_map
+
+variables [has_mul X] [has_continuous_mul X]
+
+/-- The continuous map `λ y, y * x` -/
+@[to_additive "The continuous map `λ y, y + x"]
+protected def mul_right (x : X) : C(X, X) := mk _ (continuous_mul_right x)
+
+@[to_additive, simp]
+lemma coe_mul_right (x : X) : ⇑(continuous_map.mul_right x) = λ y, y * x := rfl
+
+/-- The continuous map `λ y, x * y` -/
+@[to_additive "The continuous map `λ y, x + y"]
+protected def mul_left (x : X) : C(X, X) := mk _ (continuous_mul_left x)
+
+@[to_additive, simp]
+lemma coe_mul_left (x : X) : ⇑(continuous_map.mul_left x) = λ y, x * y := rfl
+
+end continuous_map

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(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
@@ -652,7 +652,7 @@ theorem continuousOn_list_prod {f : ι → X → M} (l : List ι) {t : Set X}
 @[continuity, to_additive]
 theorem continuous_pow : ∀ n : ℕ, Continuous fun a : M => a ^ n
   | 0 => by simpa using continuous_const
-  | k + 1 => by simp only [pow_succ]; exact continuous_id.mul (continuous_pow _)
+  | k + 1 => by simp only [pow_succ']; exact continuous_id.mul (continuous_pow _)
 #align continuous_pow continuous_pow
 #align continuous_nsmul continuous_nsmul
 -/
Diff
@@ -642,7 +642,7 @@ theorem continuousOn_list_prod {f : ι → X → M} (l : List ι) {t : Set X}
   rw [continuousWithinAt_iff_continuousAt_restrict _ hx]
   refine' tendsto_list_prod _ fun i hi => _
   specialize h i hi x hx
-  rw [continuousWithinAt_iff_continuousAt_restrict _ hx] at h 
+  rw [continuousWithinAt_iff_continuousAt_restrict _ hx] at h
   exact h
 #align continuous_on_list_prod continuousOn_list_prod
 #align continuous_on_list_sum continuousOn_list_sum
Diff
@@ -3,11 +3,11 @@ Copyright (c) 2017 Johannes Hölzl. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johannes Hölzl, Mario Carneiro
 -/
-import Mathbin.Algebra.BigOperators.Finprod
-import Mathbin.Order.Filter.Pointwise
-import Mathbin.Topology.Algebra.MulAction
-import Mathbin.Algebra.BigOperators.Pi
-import Mathbin.Topology.ContinuousFunction.Basic
+import Algebra.BigOperators.Finprod
+import Order.Filter.Pointwise
+import Topology.Algebra.MulAction
+import Algebra.BigOperators.Pi
+import Topology.ContinuousFunction.Basic
 
 #align_import topology.algebra.monoid from "leanprover-community/mathlib"@"1ac8d4304efba9d03fa720d06516fac845aa5353"
 
Diff
@@ -60,7 +60,7 @@ Continuity in only the left/right argument can be stated using
 `has_continuous_const_smul α α`/`has_continuous_const_smul αᵐᵒᵖ α`. -/
 @[to_additive]
 class ContinuousMul (M : Type u) [TopologicalSpace M] [Mul M] : Prop where
-  continuous_mul : Continuous fun p : M × M => p.1 * p.2
+  continuous_hMul : Continuous fun p : M × M => p.1 * p.2
 #align has_continuous_mul ContinuousMul
 #align has_continuous_add ContinuousAdd
 -/
@@ -76,7 +76,7 @@ instance : ContinuousMul Mᵒᵈ :=
 #print continuous_mul /-
 @[to_additive]
 theorem continuous_mul : Continuous fun p : M × M => p.1 * p.2 :=
-  ContinuousMul.continuous_mul
+  ContinuousMul.continuous_hMul
 #align continuous_mul continuous_mul
 #align continuous_add continuous_add
 -/
@@ -136,7 +136,7 @@ theorem ContinuousOn.mul {f g : X → M} {s : Set X} (hf : ContinuousOn f s) (hg
 #print tendsto_mul /-
 @[to_additive]
 theorem tendsto_mul {a b : M} : Tendsto (fun p : M × M => p.fst * p.snd) (𝓝 (a, b)) (𝓝 (a * b)) :=
-  continuous_iff_continuousAt.mp ContinuousMul.continuous_mul (a, b)
+  continuous_iff_continuousAt.mp ContinuousMul.continuous_hMul (a, b)
 #align tendsto_mul tendsto_mul
 #align tendsto_add tendsto_add
 -/
@@ -283,7 +283,7 @@ instance [TopologicalSpace N] [Mul N] [ContinuousMul N] : ContinuousMul (M × N)
 @[to_additive]
 instance Pi.continuousMul {C : ι → Type _} [∀ i, TopologicalSpace (C i)] [∀ i, Mul (C i)]
     [∀ i, ContinuousMul (C i)] : ContinuousMul (∀ i, C i)
-    where continuous_mul :=
+    where continuous_hMul :=
     continuous_pi fun i => (continuous_apply i).fst'.mul (continuous_apply i).snd'
 #align pi.has_continuous_mul Pi.continuousMul
 #align pi.has_continuous_add Pi.continuousAdd
@@ -475,7 +475,7 @@ variable [TopologicalSpace M] [Monoid M] [ContinuousMul M]
 theorem Submonoid.top_closure_mul_self_subset (s : Submonoid M) :
     closure (s : Set M) * closure s ⊆ closure s :=
   image2_subset_iff.2 fun x hx y hy =>
-    map_mem_closure₂ continuous_mul hx hy fun a ha b hb => s.mul_mem ha hb
+    map_mem_closure₂ continuous_mul hx hy fun a ha b hb => s.hMul_mem ha hb
 #align submonoid.top_closure_mul_self_subset Submonoid.top_closure_mul_self_subset
 #align add_submonoid.top_closure_add_self_subset AddSubmonoid.top_closure_add_self_subset
 -/
@@ -499,7 +499,7 @@ def Submonoid.topologicalClosure (s : Submonoid M) : Submonoid M
     where
   carrier := closure (s : Set M)
   one_mem' := subset_closure s.one_mem
-  mul_mem' a b ha hb := s.top_closure_mul_self_subset ⟨a, b, ha, hb, rfl⟩
+  hMul_mem' a b ha hb := s.top_closure_mul_self_subset ⟨a, b, ha, hb, rfl⟩
 #align submonoid.topological_closure Submonoid.topologicalClosure
 #align add_submonoid.topological_closure AddSubmonoid.topologicalClosure
 -/
@@ -969,7 +969,7 @@ instance [TopologicalSpace M] [Mul M] [ContinuousMul M] : ContinuousAdd (Additiv
     where continuous_add := @continuous_mul M _ _ _
 
 instance [TopologicalSpace M] [Add M] [ContinuousAdd M] : ContinuousMul (Multiplicative M)
-    where continuous_mul := @continuous_add M _ _ _
+    where continuous_hMul := @continuous_add M _ _ _
 
 section LatticeOps
 
@@ -980,9 +980,9 @@ variable {ι' : Sort _} [Mul M]
 theorem continuousMul_sInf {ts : Set (TopologicalSpace M)} (h : ∀ t ∈ ts, @ContinuousMul M t _) :
     @ContinuousMul M (sInf ts) _ :=
   {
-    continuous_mul :=
+    continuous_hMul :=
       continuous_sInf_rng.2 fun t ht =>
-        continuous_sInf_dom₂ ht ht (@ContinuousMul.continuous_mul M t _ (h t ht)) }
+        continuous_sInf_dom₂ ht ht (@ContinuousMul.continuous_hMul M t _ (h t ht)) }
 #align has_continuous_mul_Inf continuousMul_sInf
 #align has_continuous_add_Inf continuousAdd_sInf
 -/
Diff
@@ -2,11 +2,6 @@
 Copyright (c) 2017 Johannes Hölzl. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johannes Hölzl, Mario Carneiro
-
-! This file was ported from Lean 3 source module topology.algebra.monoid
-! leanprover-community/mathlib commit 1ac8d4304efba9d03fa720d06516fac845aa5353
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.Algebra.BigOperators.Finprod
 import Mathbin.Order.Filter.Pointwise
@@ -14,6 +9,8 @@ import Mathbin.Topology.Algebra.MulAction
 import Mathbin.Algebra.BigOperators.Pi
 import Mathbin.Topology.ContinuousFunction.Basic
 
+#align_import topology.algebra.monoid from "leanprover-community/mathlib"@"1ac8d4304efba9d03fa720d06516fac845aa5353"
+
 /-!
 # Theory of topological monoids
 
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johannes Hölzl, Mario Carneiro
 
 ! This file was ported from Lean 3 source module topology.algebra.monoid
-! leanprover-community/mathlib commit 6efec6bb9fcaed3cf1baaddb2eaadd8a2a06679c
+! leanprover-community/mathlib commit 1ac8d4304efba9d03fa720d06516fac845aa5353
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -1024,7 +1024,7 @@ protected def mulRight (x : X) : C(X, X) :=
 -/
 
 #print ContinuousMap.coe_mulRight /-
-@[to_additive, simp]
+@[simp, to_additive]
 theorem coe_mulRight (x : X) : ⇑(ContinuousMap.mulRight x) = fun y => y * x :=
   rfl
 #align continuous_map.coe_mul_right ContinuousMap.coe_mulRight
@@ -1041,7 +1041,7 @@ protected def mulLeft (x : X) : C(X, X) :=
 -/
 
 #print ContinuousMap.coe_mulLeft /-
-@[to_additive, simp]
+@[simp, to_additive]
 theorem coe_mulLeft (x : X) : ⇑(ContinuousMap.mulLeft x) = fun y => x * y :=
   rfl
 #align continuous_map.coe_mul_left ContinuousMap.coe_mulLeft
Diff
@@ -76,11 +76,13 @@ variable [TopologicalSpace M] [Mul M] [ContinuousMul M]
 instance : ContinuousMul Mᵒᵈ :=
   ‹ContinuousMul M›
 
+#print continuous_mul /-
 @[to_additive]
 theorem continuous_mul : Continuous fun p : M × M => p.1 * p.2 :=
   ContinuousMul.continuous_mul
 #align continuous_mul continuous_mul
 #align continuous_add continuous_add
+-/
 
 #print ContinuousMul.to_continuousSMul /-
 @[to_additive]
@@ -100,12 +102,14 @@ instance ContinuousMul.to_continuousSMul_op : ContinuousSMul Mᵐᵒᵖ M :=
 #align has_continuous_add.to_has_continuous_vadd_op ContinuousAdd.to_continuousVAdd_op
 -/
 
+#print Continuous.mul /-
 @[continuity, to_additive]
 theorem Continuous.mul {f g : X → M} (hf : Continuous f) (hg : Continuous g) :
     Continuous fun x => f x * g x :=
   continuous_mul.comp (hf.prod_mk hg : _)
 #align continuous.mul Continuous.mul
 #align continuous.add Continuous.add
+-/
 
 #print continuous_mul_left /-
 @[to_additive]
@@ -123,46 +127,59 @@ theorem continuous_mul_right (a : M) : Continuous fun b : M => b * a :=
 #align continuous_add_right continuous_add_right
 -/
 
+#print ContinuousOn.mul /-
 @[to_additive]
 theorem ContinuousOn.mul {f g : X → M} {s : Set X} (hf : ContinuousOn f s) (hg : ContinuousOn g s) :
     ContinuousOn (fun x => f x * g x) s :=
   (continuous_mul.comp_continuousOn (hf.Prod hg) : _)
 #align continuous_on.mul ContinuousOn.mul
 #align continuous_on.add ContinuousOn.add
+-/
 
+#print tendsto_mul /-
 @[to_additive]
 theorem tendsto_mul {a b : M} : Tendsto (fun p : M × M => p.fst * p.snd) (𝓝 (a, b)) (𝓝 (a * b)) :=
   continuous_iff_continuousAt.mp ContinuousMul.continuous_mul (a, b)
 #align tendsto_mul tendsto_mul
 #align tendsto_add tendsto_add
+-/
 
+#print Filter.Tendsto.mul /-
 @[to_additive]
 theorem Filter.Tendsto.mul {f g : α → M} {x : Filter α} {a b : M} (hf : Tendsto f x (𝓝 a))
     (hg : Tendsto g x (𝓝 b)) : Tendsto (fun x => f x * g x) x (𝓝 (a * b)) :=
   tendsto_mul.comp (hf.prod_mk_nhds hg)
 #align filter.tendsto.mul Filter.Tendsto.mul
 #align filter.tendsto.add Filter.Tendsto.add
+-/
 
+#print Filter.Tendsto.const_mul /-
 @[to_additive]
 theorem Filter.Tendsto.const_mul (b : M) {c : M} {f : α → M} {l : Filter α}
     (h : Tendsto (fun k : α => f k) l (𝓝 c)) : Tendsto (fun k : α => b * f k) l (𝓝 (b * c)) :=
   tendsto_const_nhds.mul h
 #align filter.tendsto.const_mul Filter.Tendsto.const_mul
 #align filter.tendsto.const_add Filter.Tendsto.const_add
+-/
 
+#print Filter.Tendsto.mul_const /-
 @[to_additive]
 theorem Filter.Tendsto.mul_const (b : M) {c : M} {f : α → M} {l : Filter α}
     (h : Tendsto (fun k : α => f k) l (𝓝 c)) : Tendsto (fun k : α => f k * b) l (𝓝 (c * b)) :=
   h.mul tendsto_const_nhds
 #align filter.tendsto.mul_const Filter.Tendsto.mul_const
 #align filter.tendsto.add_const Filter.Tendsto.add_const
+-/
 
+#print le_nhds_mul /-
 @[to_additive]
 theorem le_nhds_mul (a b : M) : 𝓝 a * 𝓝 b ≤ 𝓝 (a * b) := by
   rw [← map₂_mul, ← map_uncurry_prod, ← nhds_prod_eq]; exact continuous_mul.tendsto _
 #align le_nhds_mul le_nhds_mul
 #align le_nhds_add le_nhds_add
+-/
 
+#print nhds_one_mul_nhds /-
 @[simp, to_additive]
 theorem nhds_one_mul_nhds {M} [MulOneClass M] [TopologicalSpace M] [ContinuousMul M] (a : M) :
     𝓝 (1 : M) * 𝓝 a = 𝓝 a :=
@@ -170,7 +187,9 @@ theorem nhds_one_mul_nhds {M} [MulOneClass M] [TopologicalSpace M] [ContinuousMu
     le_mul_of_one_le_left' <| pure_le_nhds 1
 #align nhds_one_mul_nhds nhds_one_mul_nhds
 #align nhds_zero_add_nhds nhds_zero_add_nhds
+-/
 
+#print nhds_mul_nhds_one /-
 @[simp, to_additive]
 theorem nhds_mul_nhds_one {M} [MulOneClass M] [TopologicalSpace M] [ContinuousMul M] (a : M) :
     𝓝 a * 𝓝 1 = 𝓝 a :=
@@ -178,6 +197,7 @@ theorem nhds_mul_nhds_one {M} [MulOneClass M] [TopologicalSpace M] [ContinuousMu
     le_mul_of_one_le_right' <| pure_le_nhds 1
 #align nhds_mul_nhds_one nhds_mul_nhds_one
 #align nhds_add_nhds_zero nhds_add_nhds_zero
+-/
 
 section tendsto_nhds
 
@@ -222,6 +242,7 @@ theorem Filter.TendstoNhdsWithinIio.mul_const [MulPosStrictMono 𝕜] [MulPosRef
 
 end tendsto_nhds
 
+#print Filter.Tendsto.units /-
 /-- Construct a unit from limits of units and their inverses. -/
 @[to_additive Filter.Tendsto.addUnits
       "Construct an additive unit from limits of additive units\nand their negatives.",
@@ -236,20 +257,25 @@ def Filter.Tendsto.units [TopologicalSpace N] [Monoid N] [ContinuousMul N] [T2Sp
   inv_val := by symm; simpa using h₂.mul h₁
 #align filter.tendsto.units Filter.Tendsto.units
 #align filter.tendsto.add_units Filter.Tendsto.addUnits
+-/
 
+#print ContinuousAt.mul /-
 @[to_additive]
 theorem ContinuousAt.mul {f g : X → M} {x : X} (hf : ContinuousAt f x) (hg : ContinuousAt g x) :
     ContinuousAt (fun x => f x * g x) x :=
   hf.mul hg
 #align continuous_at.mul ContinuousAt.mul
 #align continuous_at.add ContinuousAt.add
+-/
 
+#print ContinuousWithinAt.mul /-
 @[to_additive]
 theorem ContinuousWithinAt.mul {f g : X → M} {s : Set X} {x : X} (hf : ContinuousWithinAt f s x)
     (hg : ContinuousWithinAt g s x) : ContinuousWithinAt (fun x => f x * g x) s x :=
   hf.mul hg
 #align continuous_within_at.mul ContinuousWithinAt.mul
 #align continuous_within_at.add ContinuousWithinAt.add
+-/
 
 @[to_additive]
 instance [TopologicalSpace N] [Mul N] [ContinuousMul N] : ContinuousMul (M × N) :=
@@ -290,6 +316,7 @@ open scoped Filter
 
 open Function
 
+#print ContinuousMul.of_nhds_one /-
 @[to_additive]
 theorem ContinuousMul.of_nhds_one {M : Type u} [Monoid M] [TopologicalSpace M]
     (hmul : Tendsto (uncurry ((· * ·) : M → M → M)) (𝓝 1 ×ᶠ 𝓝 1) <| 𝓝 1)
@@ -315,7 +342,9 @@ theorem ContinuousMul.of_nhds_one {M : Type u} [Monoid M] [TopologicalSpace M]
         rw [← Filter.map_map, ← hright, hleft y₀, Filter.map_map, key₂, ← hleft]⟩
 #align has_continuous_mul.of_nhds_one ContinuousMul.of_nhds_one
 #align has_continuous_add.of_nhds_zero ContinuousAdd.of_nhds_zero
+-/
 
+#print continuousMul_of_comm_of_nhds_one /-
 @[to_additive]
 theorem continuousMul_of_comm_of_nhds_one (M : Type u) [CommMonoid M] [TopologicalSpace M]
     (hmul : Tendsto (uncurry ((· * ·) : M → M → M)) (𝓝 1 ×ᶠ 𝓝 1) (𝓝 1))
@@ -326,6 +355,7 @@ theorem continuousMul_of_comm_of_nhds_one (M : Type u) [CommMonoid M] [Topologic
   simp_rw [mul_comm, hleft x₀]
 #align has_continuous_mul_of_comm_of_nhds_one continuousMul_of_comm_of_nhds_one
 #align has_continuous_add_of_comm_of_nhds_zero continuousAdd_of_comm_of_nhds_zero
+-/
 
 end ContinuousMul
 
@@ -333,12 +363,15 @@ section PointwiseLimits
 
 variable (M₁ M₂ : Type _) [TopologicalSpace M₂] [T2Space M₂]
 
+#print isClosed_setOf_map_one /-
 @[to_additive]
 theorem isClosed_setOf_map_one [One M₁] [One M₂] : IsClosed {f : M₁ → M₂ | f 1 = 1} :=
   isClosed_eq (continuous_apply 1) continuous_const
 #align is_closed_set_of_map_one isClosed_setOf_map_one
 #align is_closed_set_of_map_zero isClosed_setOf_map_zero
+-/
 
+#print isClosed_setOf_map_mul /-
 @[to_additive]
 theorem isClosed_setOf_map_mul [Mul M₁] [Mul M₂] [ContinuousMul M₂] :
     IsClosed {f : M₁ → M₂ | ∀ x y, f (x * y) = f x * f y} :=
@@ -350,10 +383,12 @@ theorem isClosed_setOf_map_mul [Mul M₁] [Mul M₂] [ContinuousMul M₂] :
         isClosed_eq (continuous_apply _) ((continuous_apply _).mul (continuous_apply _))
 #align is_closed_set_of_map_mul isClosed_setOf_map_mul
 #align is_closed_set_of_map_add isClosed_setOf_map_add
+-/
 
 variable {M₁ M₂} [MulOneClass M₁] [MulOneClass M₂] [ContinuousMul M₂] {F : Type _}
   [MonoidHomClass F M₁ M₂] {l : Filter α}
 
+#print monoidHomOfMemClosureRangeCoe /-
 /-- Construct a bundled monoid homomorphism `M₁ →* M₂` from a function `f` and a proof that it
 belongs to the closure of the range of the coercion from `M₁ →* M₂` (or another type of bundled
 homomorphisms that has a `monoid_hom_class` instance) to `M₁ → M₂`. -/
@@ -368,7 +403,9 @@ def monoidHomOfMemClosureRangeCoe (f : M₁ → M₂)
   map_mul' := (isClosed_setOf_map_mul M₁ M₂).closure_subset_iff.2 (range_subset_iff.2 map_mul) hf
 #align monoid_hom_of_mem_closure_range_coe monoidHomOfMemClosureRangeCoe
 #align add_monoid_hom_of_mem_closure_range_coe addMonoidHomOfMemClosureRangeCoe
+-/
 
+#print monoidHomOfTendsto /-
 /-- Construct a bundled monoid homomorphism from a pointwise limit of monoid homomorphisms. -/
 @[to_additive
       "Construct a bundled additive monoid homomorphism from a pointwise limit of additive\nmonoid homomorphisms",
@@ -379,17 +416,21 @@ def monoidHomOfTendsto (f : M₁ → M₂) (g : α → F) [l.ne_bot]
     mem_closure_of_tendsto h <| eventually_of_forall fun a => mem_range_self _
 #align monoid_hom_of_tendsto monoidHomOfTendsto
 #align add_monoid_hom_of_tendsto addMonoidHomOfTendsto
+-/
 
 variable (M₁ M₂)
 
+#print MonoidHom.isClosed_range_coe /-
 @[to_additive]
 theorem MonoidHom.isClosed_range_coe : IsClosed (range (coeFn : (M₁ →* M₂) → M₁ → M₂)) :=
   isClosed_of_closure_subset fun f hf => ⟨monoidHomOfMemClosureRangeCoe f hf, rfl⟩
 #align monoid_hom.is_closed_range_coe MonoidHom.isClosed_range_coe
 #align add_monoid_hom.is_closed_range_coe AddMonoidHom.isClosed_range_coe
+-/
 
 end PointwiseLimits
 
+#print Inducing.continuousMul /-
 @[to_additive]
 theorem Inducing.continuousMul {M N F : Type _} [Mul M] [Mul N] [MulHomClass F M N]
     [TopologicalSpace M] [TopologicalSpace N] [ContinuousMul N] (f : F) (hf : Inducing f) :
@@ -398,7 +439,9 @@ theorem Inducing.continuousMul {M N F : Type _} [Mul M] [Mul N] [MulHomClass F M
       simpa only [(· ∘ ·), map_mul f] using hf.continuous.fst'.mul hf.continuous.snd'⟩
 #align inducing.has_continuous_mul Inducing.continuousMul
 #align inducing.has_continuous_add Inducing.continuousAdd
+-/
 
+#print continuousMul_induced /-
 @[to_additive]
 theorem continuousMul_induced {M N F : Type _} [Mul M] [Mul N] [MulHomClass F M N]
     [TopologicalSpace N] [ContinuousMul N] (f : F) : @ContinuousMul M (induced f ‹_›) _ :=
@@ -406,25 +449,31 @@ theorem continuousMul_induced {M N F : Type _} [Mul M] [Mul N] [MulHomClass F M
   Inducing.continuousMul f ⟨rfl⟩
 #align has_continuous_mul_induced continuousMul_induced
 #align has_continuous_add_induced continuousAdd_induced
+-/
 
+#print Subsemigroup.continuousMul /-
 @[to_additive]
 instance Subsemigroup.continuousMul [TopologicalSpace M] [Semigroup M] [ContinuousMul M]
     (S : Subsemigroup M) : ContinuousMul S :=
   Inducing.continuousMul (⟨coe, fun _ _ => rfl⟩ : MulHom S M) ⟨rfl⟩
 #align subsemigroup.has_continuous_mul Subsemigroup.continuousMul
 #align add_subsemigroup.has_continuous_add AddSubsemigroup.continuousAdd
+-/
 
+#print Submonoid.continuousMul /-
 @[to_additive]
 instance Submonoid.continuousMul [TopologicalSpace M] [Monoid M] [ContinuousMul M]
     (S : Submonoid M) : ContinuousMul S :=
   S.toSubsemigroup.ContinuousMul
 #align submonoid.has_continuous_mul Submonoid.continuousMul
 #align add_submonoid.has_continuous_add AddSubmonoid.continuousAdd
+-/
 
 section ContinuousMul
 
 variable [TopologicalSpace M] [Monoid M] [ContinuousMul M]
 
+#print Submonoid.top_closure_mul_self_subset /-
 @[to_additive]
 theorem Submonoid.top_closure_mul_self_subset (s : Submonoid M) :
     closure (s : Set M) * closure s ⊆ closure s :=
@@ -432,7 +481,9 @@ theorem Submonoid.top_closure_mul_self_subset (s : Submonoid M) :
     map_mem_closure₂ continuous_mul hx hy fun a ha b hb => s.mul_mem ha hb
 #align submonoid.top_closure_mul_self_subset Submonoid.top_closure_mul_self_subset
 #align add_submonoid.top_closure_add_self_subset AddSubmonoid.top_closure_add_self_subset
+-/
 
+#print Submonoid.top_closure_mul_self_eq /-
 @[to_additive]
 theorem Submonoid.top_closure_mul_self_eq (s : Submonoid M) :
     closure (s : Set M) * closure s = closure s :=
@@ -440,7 +491,9 @@ theorem Submonoid.top_closure_mul_self_eq (s : Submonoid M) :
     ⟨x, 1, hx, subset_closure s.one_mem, mul_one _⟩
 #align submonoid.top_closure_mul_self_eq Submonoid.top_closure_mul_self_eq
 #align add_submonoid.top_closure_add_self_eq AddSubmonoid.top_closure_add_self_eq
+-/
 
+#print Submonoid.topologicalClosure /-
 /-- The (topological-space) closure of a submonoid of a space `M` with `has_continuous_mul` is
 itself a submonoid. -/
 @[to_additive
@@ -452,26 +505,34 @@ def Submonoid.topologicalClosure (s : Submonoid M) : Submonoid M
   mul_mem' a b ha hb := s.top_closure_mul_self_subset ⟨a, b, ha, hb, rfl⟩
 #align submonoid.topological_closure Submonoid.topologicalClosure
 #align add_submonoid.topological_closure AddSubmonoid.topologicalClosure
+-/
 
+#print Submonoid.le_topologicalClosure /-
 @[to_additive]
 theorem Submonoid.le_topologicalClosure (s : Submonoid M) : s ≤ s.topologicalClosure :=
   subset_closure
 #align submonoid.le_topological_closure Submonoid.le_topologicalClosure
 #align add_submonoid.le_topological_closure AddSubmonoid.le_topologicalClosure
+-/
 
+#print Submonoid.isClosed_topologicalClosure /-
 @[to_additive]
 theorem Submonoid.isClosed_topologicalClosure (s : Submonoid M) :
     IsClosed (s.topologicalClosure : Set M) := by convert isClosed_closure
 #align submonoid.is_closed_topological_closure Submonoid.isClosed_topologicalClosure
 #align add_submonoid.is_closed_topological_closure AddSubmonoid.isClosed_topologicalClosure
+-/
 
+#print Submonoid.topologicalClosure_minimal /-
 @[to_additive]
 theorem Submonoid.topologicalClosure_minimal (s : Submonoid M) {t : Submonoid M} (h : s ≤ t)
     (ht : IsClosed (t : Set M)) : s.topologicalClosure ≤ t :=
   closure_minimal h ht
 #align submonoid.topological_closure_minimal Submonoid.topologicalClosure_minimal
 #align add_submonoid.topological_closure_minimal AddSubmonoid.topologicalClosure_minimal
+-/
 
+#print Submonoid.commMonoidTopologicalClosure /-
 /-- If a submonoid of a topological monoid is commutative, then so is its topological closure. -/
 @[to_additive
       "If a submonoid of an additive topological monoid is commutative, then so is its\ntopological closure."]
@@ -486,7 +547,9 @@ def Submonoid.commMonoidTopologicalClosure [T2Space M] (s : Submonoid M)
         eqOn_closure₂ this continuous_mul (continuous_snd.mul continuous_fst) x hx y hy }
 #align submonoid.comm_monoid_topological_closure Submonoid.commMonoidTopologicalClosure
 #align add_submonoid.add_comm_monoid_topological_closure AddSubmonoid.addCommMonoidTopologicalClosure
+-/
 
+#print exists_open_nhds_one_split /-
 @[to_additive exists_open_nhds_zero_half]
 theorem exists_open_nhds_one_split {s : Set M} (hs : s ∈ 𝓝 (1 : M)) :
     ∃ V : Set M, IsOpen V ∧ (1 : M) ∈ V ∧ ∀ v ∈ V, ∀ w ∈ V, v * w ∈ s :=
@@ -496,7 +559,9 @@ theorem exists_open_nhds_one_split {s : Set M} (hs : s ∈ 𝓝 (1 : M)) :
   simpa only [prod_subset_iff] using exists_nhds_square this
 #align exists_open_nhds_one_split exists_open_nhds_one_split
 #align exists_open_nhds_zero_half exists_open_nhds_zero_half
+-/
 
+#print exists_nhds_one_split /-
 @[to_additive exists_nhds_zero_half]
 theorem exists_nhds_one_split {s : Set M} (hs : s ∈ 𝓝 (1 : M)) :
     ∃ V ∈ 𝓝 (1 : M), ∀ v ∈ V, ∀ w ∈ V, v * w ∈ s :=
@@ -504,7 +569,9 @@ theorem exists_nhds_one_split {s : Set M} (hs : s ∈ 𝓝 (1 : M)) :
   ⟨V, IsOpen.mem_nhds Vo V1, hV⟩
 #align exists_nhds_one_split exists_nhds_one_split
 #align exists_nhds_zero_half exists_nhds_zero_half
+-/
 
+#print exists_nhds_one_split4 /-
 @[to_additive exists_nhds_zero_quarter]
 theorem exists_nhds_one_split4 {u : Set M} (hu : u ∈ 𝓝 (1 : M)) :
     ∃ V ∈ 𝓝 (1 : M), ∀ {v w s t}, v ∈ V → w ∈ V → s ∈ V → t ∈ V → v * w * s * t ∈ u :=
@@ -516,7 +583,9 @@ theorem exists_nhds_one_split4 {u : Set M} (hu : u ∈ 𝓝 (1 : M)) :
   simpa only [mul_assoc] using h _ (h' v v_in w w_in) _ (h' s s_in t t_in)
 #align exists_nhds_one_split4 exists_nhds_one_split4
 #align exists_nhds_zero_quarter exists_nhds_zero_quarter
+-/
 
+#print exists_open_nhds_one_mul_subset /-
 /-- Given a neighborhood `U` of `1` there is an open neighborhood `V` of `1`
 such that `VV ⊆ U`. -/
 @[to_additive
@@ -530,14 +599,18 @@ theorem exists_open_nhds_one_mul_subset {U : Set M} (hU : U ∈ 𝓝 (1 : M)) :
   exact hV _ hx _ hy
 #align exists_open_nhds_one_mul_subset exists_open_nhds_one_mul_subset
 #align exists_open_nhds_zero_add_subset exists_open_nhds_zero_add_subset
+-/
 
+#print IsCompact.mul /-
 @[to_additive]
 theorem IsCompact.mul {s t : Set M} (hs : IsCompact s) (ht : IsCompact t) : IsCompact (s * t) := by
   rw [← image_mul_prod]; exact (hs.prod ht).image continuous_mul
 #align is_compact.mul IsCompact.mul
 #align is_compact.add IsCompact.add
+-/
 
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print tendsto_list_prod /-
 @[to_additive]
 theorem tendsto_list_prod {f : ι → α → M} {x : Filter α} {a : ι → M} :
     ∀ l : List ι,
@@ -551,7 +624,9 @@ theorem tendsto_list_prod {f : ι → α → M} {x : Filter α} {a : ι → M} :
         (tendsto_list_prod l fun c hc => h c (List.mem_cons_of_mem _ hc))
 #align tendsto_list_prod tendsto_list_prod
 #align tendsto_list_sum tendsto_list_sum
+-/
 
+#print continuous_list_prod /-
 @[to_additive]
 theorem continuous_list_prod {f : ι → X → M} (l : List ι) (h : ∀ i ∈ l, Continuous (f i)) :
     Continuous fun a => (l.map fun i => f i a).Prod :=
@@ -559,7 +634,9 @@ theorem continuous_list_prod {f : ι → X → M} (l : List ι) (h : ∀ i ∈ l
     tendsto_list_prod l fun c hc => continuous_iff_continuousAt.1 (h c hc) x
 #align continuous_list_prod continuous_list_prod
 #align continuous_list_sum continuous_list_sum
+-/
 
+#print continuousOn_list_prod /-
 @[to_additive]
 theorem continuousOn_list_prod {f : ι → X → M} (l : List ι) {t : Set X}
     (h : ∀ i ∈ l, ContinuousOn (f i) t) : ContinuousOn (fun a => (l.map fun i => f i a).Prod) t :=
@@ -572,69 +649,91 @@ theorem continuousOn_list_prod {f : ι → X → M} (l : List ι) {t : Set X}
   exact h
 #align continuous_on_list_prod continuousOn_list_prod
 #align continuous_on_list_sum continuousOn_list_sum
+-/
 
+#print continuous_pow /-
 @[continuity, to_additive]
 theorem continuous_pow : ∀ n : ℕ, Continuous fun a : M => a ^ n
   | 0 => by simpa using continuous_const
   | k + 1 => by simp only [pow_succ]; exact continuous_id.mul (continuous_pow _)
 #align continuous_pow continuous_pow
 #align continuous_nsmul continuous_nsmul
+-/
 
+#print AddMonoid.continuousConstSMul_nat /-
 instance AddMonoid.continuousConstSMul_nat {A} [AddMonoid A] [TopologicalSpace A]
     [ContinuousAdd A] : ContinuousConstSMul ℕ A :=
   ⟨continuous_nsmul⟩
 #align add_monoid.has_continuous_const_smul_nat AddMonoid.continuousConstSMul_nat
+-/
 
+#print AddMonoid.continuousSMul_nat /-
 instance AddMonoid.continuousSMul_nat {A} [AddMonoid A] [TopologicalSpace A] [ContinuousAdd A] :
     ContinuousSMul ℕ A :=
   ⟨continuous_uncurry_of_discreteTopology continuous_nsmul⟩
 #align add_monoid.has_continuous_smul_nat AddMonoid.continuousSMul_nat
+-/
 
+#print Continuous.pow /-
 @[continuity, to_additive Continuous.nsmul]
 theorem Continuous.pow {f : X → M} (h : Continuous f) (n : ℕ) : Continuous fun b => f b ^ n :=
   (continuous_pow n).comp h
 #align continuous.pow Continuous.pow
 #align continuous.nsmul Continuous.nsmul
+-/
 
+#print continuousOn_pow /-
 @[to_additive]
 theorem continuousOn_pow {s : Set M} (n : ℕ) : ContinuousOn (fun x => x ^ n) s :=
   (continuous_pow n).ContinuousOn
 #align continuous_on_pow continuousOn_pow
 #align continuous_on_nsmul continuousOn_nsmul
+-/
 
+#print continuousAt_pow /-
 @[to_additive]
 theorem continuousAt_pow (x : M) (n : ℕ) : ContinuousAt (fun x => x ^ n) x :=
   (continuous_pow n).ContinuousAt
 #align continuous_at_pow continuousAt_pow
 #align continuous_at_nsmul continuousAt_nsmul
+-/
 
+#print Filter.Tendsto.pow /-
 @[to_additive Filter.Tendsto.nsmul]
 theorem Filter.Tendsto.pow {l : Filter α} {f : α → M} {x : M} (hf : Tendsto f l (𝓝 x)) (n : ℕ) :
     Tendsto (fun x => f x ^ n) l (𝓝 (x ^ n)) :=
   (continuousAt_pow _ _).Tendsto.comp hf
 #align filter.tendsto.pow Filter.Tendsto.pow
 #align filter.tendsto.nsmul Filter.Tendsto.nsmul
+-/
 
+#print ContinuousWithinAt.pow /-
 @[to_additive ContinuousWithinAt.nsmul]
 theorem ContinuousWithinAt.pow {f : X → M} {x : X} {s : Set X} (hf : ContinuousWithinAt f s x)
     (n : ℕ) : ContinuousWithinAt (fun x => f x ^ n) s x :=
   hf.pow n
 #align continuous_within_at.pow ContinuousWithinAt.pow
 #align continuous_within_at.nsmul ContinuousWithinAt.nsmul
+-/
 
+#print ContinuousAt.pow /-
 @[to_additive ContinuousAt.nsmul]
 theorem ContinuousAt.pow {f : X → M} {x : X} (hf : ContinuousAt f x) (n : ℕ) :
     ContinuousAt (fun x => f x ^ n) x :=
   hf.pow n
 #align continuous_at.pow ContinuousAt.pow
 #align continuous_at.nsmul ContinuousAt.nsmul
+-/
 
+#print ContinuousOn.pow /-
 @[to_additive ContinuousOn.nsmul]
 theorem ContinuousOn.pow {f : X → M} {s : Set X} (hf : ContinuousOn f s) (n : ℕ) :
     ContinuousOn (fun x => f x ^ n) s := fun x hx => (hf x hx).pow n
 #align continuous_on.pow ContinuousOn.pow
 #align continuous_on.nsmul ContinuousOn.nsmul
+-/
 
+#print Filter.tendsto_cocompact_mul_left /-
 /-- Left-multiplication by a left-invertible element of a topological monoid is proper, i.e.,
 inverse images of compact sets are compact. -/
 theorem Filter.tendsto_cocompact_mul_left {a b : M} (ha : b * a = 1) :
@@ -645,7 +744,9 @@ theorem Filter.tendsto_cocompact_mul_left {a b : M} (ha : b * a = 1) :
   ext x
   simp [ha]
 #align filter.tendsto_cocompact_mul_left Filter.tendsto_cocompact_mul_left
+-/
 
+#print Filter.tendsto_cocompact_mul_right /-
 /-- Right-multiplication by a right-invertible element of a topological monoid is proper, i.e.,
 inverse images of compact sets are compact. -/
 theorem Filter.tendsto_cocompact_mul_right {a b : M} (ha : a * b = 1) :
@@ -656,7 +757,9 @@ theorem Filter.tendsto_cocompact_mul_right {a b : M} (ha : a * b = 1) :
   ext x
   simp [ha]
 #align filter.tendsto_cocompact_mul_right Filter.tendsto_cocompact_mul_right
+-/
 
+#print IsScalarTower.continuousConstSMul /-
 /-- If `R` acts on `A` via `A`, then continuous multiplication implies continuous scalar
 multiplication by constants.
 
@@ -671,7 +774,9 @@ instance (priority := 100) IsScalarTower.continuousConstSMul {R A : Type _} [Mon
     exact continuous_const.mul continuous_id
 #align is_scalar_tower.has_continuous_const_smul IsScalarTower.continuousConstSMul
 #align vadd_assoc_class.has_continuous_const_vadd VAddAssocClass.continuousConstVAdd
+-/
 
+#print SMulCommClass.continuousConstSMul /-
 /-- If the action of `R` on `A` commutes with left-multiplication, then continuous multiplication
 implies continuous scalar multiplication by constants.
 
@@ -686,6 +791,7 @@ instance (priority := 100) SMulCommClass.continuousConstSMul {R A : Type _} [Mon
     exact continuous_id.mul continuous_const
 #align smul_comm_class.has_continuous_const_smul SMulCommClass.continuousConstSMul
 #align vadd_comm_class.has_continuous_const_vadd VAddCommClass.continuousConstVAdd
+-/
 
 end ContinuousMul
 
@@ -716,26 +822,31 @@ instance : ContinuousMul αˣ :=
 
 end Units
 
+#print Continuous.units_map /-
 @[to_additive]
 theorem Continuous.units_map [Monoid M] [Monoid N] [TopologicalSpace M] [TopologicalSpace N]
     (f : M →* N) (hf : Continuous f) : Continuous (Units.map f) :=
   Units.continuous_iff.2 ⟨hf.comp Units.continuous_val, hf.comp Units.continuous_coe_inv⟩
 #align continuous.units_map Continuous.units_map
 #align continuous.add_units_map Continuous.addUnits_map
+-/
 
 section
 
 variable [TopologicalSpace M] [CommMonoid M]
 
+#print Submonoid.mem_nhds_one /-
 @[to_additive]
 theorem Submonoid.mem_nhds_one (S : Submonoid M) (oS : IsOpen (S : Set M)) :
     (S : Set M) ∈ 𝓝 (1 : M) :=
   IsOpen.mem_nhds oS S.one_mem
 #align submonoid.mem_nhds_one Submonoid.mem_nhds_one
 #align add_submonoid.mem_nhds_zero AddSubmonoid.mem_nhds_zero
+-/
 
 variable [ContinuousMul M]
 
+#print tendsto_multiset_prod /-
 @[to_additive]
 theorem tendsto_multiset_prod {f : ι → α → M} {x : Filter α} {a : ι → M} (s : Multiset ι) :
     (∀ i ∈ s, Tendsto (f i) x (𝓝 (a i))) →
@@ -743,7 +854,9 @@ theorem tendsto_multiset_prod {f : ι → α → M} {x : Filter α} {a : ι →
   by rcases s with ⟨l⟩; simpa using tendsto_list_prod l
 #align tendsto_multiset_prod tendsto_multiset_prod
 #align tendsto_multiset_sum tendsto_multiset_sum
+-/
 
+#print tendsto_finset_prod /-
 @[to_additive]
 theorem tendsto_finset_prod {f : ι → α → M} {x : Filter α} {a : ι → M} (s : Finset ι) :
     (∀ i ∈ s, Tendsto (f i) x (𝓝 (a i))) →
@@ -751,35 +864,45 @@ theorem tendsto_finset_prod {f : ι → α → M} {x : Filter α} {a : ι → M}
   tendsto_multiset_prod _
 #align tendsto_finset_prod tendsto_finset_prod
 #align tendsto_finset_sum tendsto_finset_sum
+-/
 
+#print continuous_multiset_prod /-
 @[continuity, to_additive]
 theorem continuous_multiset_prod {f : ι → X → M} (s : Multiset ι) :
     (∀ i ∈ s, Continuous (f i)) → Continuous fun a => (s.map fun i => f i a).Prod := by
   rcases s with ⟨l⟩; simpa using continuous_list_prod l
 #align continuous_multiset_prod continuous_multiset_prod
 #align continuous_multiset_sum continuous_multiset_sum
+-/
 
+#print continuousOn_multiset_prod /-
 @[to_additive]
 theorem continuousOn_multiset_prod {f : ι → X → M} (s : Multiset ι) {t : Set X} :
     (∀ i ∈ s, ContinuousOn (f i) t) → ContinuousOn (fun a => (s.map fun i => f i a).Prod) t := by
   rcases s with ⟨l⟩; simpa using continuousOn_list_prod l
 #align continuous_on_multiset_prod continuousOn_multiset_prod
 #align continuous_on_multiset_sum continuousOn_multiset_sum
+-/
 
+#print continuous_finset_prod /-
 @[continuity, to_additive]
 theorem continuous_finset_prod {f : ι → X → M} (s : Finset ι) :
     (∀ i ∈ s, Continuous (f i)) → Continuous fun a => ∏ i in s, f i a :=
   continuous_multiset_prod _
 #align continuous_finset_prod continuous_finset_prod
 #align continuous_finset_sum continuous_finset_sum
+-/
 
+#print continuousOn_finset_prod /-
 @[to_additive]
 theorem continuousOn_finset_prod {f : ι → X → M} (s : Finset ι) {t : Set X} :
     (∀ i ∈ s, ContinuousOn (f i) t) → ContinuousOn (fun a => ∏ i in s, f i a) t :=
   continuousOn_multiset_prod _
 #align continuous_on_finset_prod continuousOn_finset_prod
 #align continuous_on_finset_sum continuousOn_finset_sum
+-/
 
+#print eventuallyEq_prod /-
 @[to_additive]
 theorem eventuallyEq_prod {X M : Type _} [CommMonoid M] {s : Finset ι} {l : Filter X}
     {f g : ι → X → M} (hs : ∀ i ∈ s, f i =ᶠ[l] g i) : ∏ i in s, f i =ᶠ[l] ∏ i in s, g i :=
@@ -790,9 +913,11 @@ theorem eventuallyEq_prod {X M : Type _} [CommMonoid M] {s : Finset ι} {l : Fil
   simp only [Finset.prod_apply, Finset.prod_congr rfl hx]
 #align eventually_eq_prod eventuallyEq_prod
 #align eventually_eq_sum eventuallyEq_sum
+-/
 
 open Function
 
+#print LocallyFinite.exists_finset_mulSupport /-
 @[to_additive]
 theorem LocallyFinite.exists_finset_mulSupport {M : Type _} [CommMonoid M] {f : ι → X → M}
     (hf : LocallyFinite fun i => mulSupport <| f i) (x₀ : X) :
@@ -804,7 +929,9 @@ theorem LocallyFinite.exists_finset_mulSupport {M : Type _} [CommMonoid M] {f :
   exact ⟨y, hi, hy⟩
 #align locally_finite.exists_finset_mul_support LocallyFinite.exists_finset_mulSupport
 #align locally_finite.exists_finset_support LocallyFinite.exists_finset_support
+-/
 
+#print finprod_eventually_eq_prod /-
 @[to_additive]
 theorem finprod_eventually_eq_prod {M : Type _} [CommMonoid M] {f : ι → X → M}
     (hf : LocallyFinite fun i => mulSupport (f i)) (x : X) :
@@ -813,7 +940,9 @@ theorem finprod_eventually_eq_prod {M : Type _} [CommMonoid M] {f : ι → X →
   ⟨I, hI.mono fun y hy => finprod_eq_prod_of_mulSupport_subset _ fun i hi => hy hi⟩
 #align finprod_eventually_eq_prod finprod_eventually_eq_prod
 #align finsum_eventually_eq_sum finsum_eventually_eq_sum
+-/
 
+#print continuous_finprod /-
 @[to_additive]
 theorem continuous_finprod {f : ι → X → M} (hc : ∀ i, Continuous (f i))
     (hf : LocallyFinite fun i => mulSupport (f i)) : Continuous fun x => ∏ᶠ i, f i x :=
@@ -824,7 +953,9 @@ theorem continuous_finprod {f : ι → X → M} (hc : ∀ i, Continuous (f i))
   exact tendsto_finset_prod _ fun i hi => (hc i).ContinuousAt
 #align continuous_finprod continuous_finprod
 #align continuous_finsum continuous_finsum
+-/
 
+#print continuous_finprod_cond /-
 @[to_additive]
 theorem continuous_finprod_cond {f : ι → X → M} {p : ι → Prop} (hc : ∀ i, p i → Continuous (f i))
     (hf : LocallyFinite fun i => mulSupport (f i)) : Continuous fun x => ∏ᶠ (i) (hi : p i), f i x :=
@@ -833,6 +964,7 @@ theorem continuous_finprod_cond {f : ι → X → M} {p : ι → Prop} (hc : ∀
   exact continuous_finprod (fun i => hc i i.2) (hf.comp_injective Subtype.coe_injective)
 #align continuous_finprod_cond continuous_finprod_cond
 #align continuous_finsum_cond continuous_finsum_cond
+-/
 
 end
 
@@ -846,6 +978,7 @@ section LatticeOps
 
 variable {ι' : Sort _} [Mul M]
 
+#print continuousMul_sInf /-
 @[to_additive]
 theorem continuousMul_sInf {ts : Set (TopologicalSpace M)} (h : ∀ t ∈ ts, @ContinuousMul M t _) :
     @ContinuousMul M (sInf ts) _ :=
@@ -855,20 +988,25 @@ theorem continuousMul_sInf {ts : Set (TopologicalSpace M)} (h : ∀ t ∈ ts, @C
         continuous_sInf_dom₂ ht ht (@ContinuousMul.continuous_mul M t _ (h t ht)) }
 #align has_continuous_mul_Inf continuousMul_sInf
 #align has_continuous_add_Inf continuousAdd_sInf
+-/
 
+#print continuousMul_iInf /-
 @[to_additive]
 theorem continuousMul_iInf {ts : ι' → TopologicalSpace M} (h' : ∀ i, @ContinuousMul M (ts i) _) :
     @ContinuousMul M (⨅ i, ts i) _ := by rw [← sInf_range];
   exact continuousMul_sInf (set.forall_range_iff.mpr h')
 #align has_continuous_mul_infi continuousMul_iInf
 #align has_continuous_add_infi continuousAdd_iInf
+-/
 
+#print continuousMul_inf /-
 @[to_additive]
 theorem continuousMul_inf {t₁ t₂ : TopologicalSpace M} (h₁ : @ContinuousMul M t₁ _)
     (h₂ : @ContinuousMul M t₂ _) : @ContinuousMul M (t₁ ⊓ t₂) _ := by rw [inf_eq_iInf];
   refine' continuousMul_iInf fun b => _; cases b <;> assumption
 #align has_continuous_mul_inf continuousMul_inf
 #align has_continuous_add_inf continuousAdd_inf
+-/
 
 end LatticeOps
 
@@ -885,11 +1023,13 @@ protected def mulRight (x : X) : C(X, X) :=
 #align continuous_map.add_right ContinuousMap.addRight
 -/
 
+#print ContinuousMap.coe_mulRight /-
 @[to_additive, simp]
 theorem coe_mulRight (x : X) : ⇑(ContinuousMap.mulRight x) = fun y => y * x :=
   rfl
 #align continuous_map.coe_mul_right ContinuousMap.coe_mulRight
 #align continuous_map.coe_add_right ContinuousMap.coe_addRight
+-/
 
 #print ContinuousMap.mulLeft /-
 /-- The continuous map `λ y, x * y` -/
@@ -900,11 +1040,13 @@ protected def mulLeft (x : X) : C(X, X) :=
 #align continuous_map.add_left ContinuousMap.addLeft
 -/
 
+#print ContinuousMap.coe_mulLeft /-
 @[to_additive, simp]
 theorem coe_mulLeft (x : X) : ⇑(ContinuousMap.mulLeft x) = fun y => x * y :=
   rfl
 #align continuous_map.coe_mul_left ContinuousMap.coe_mulLeft
 #align continuous_map.coe_add_left ContinuousMap.coe_addLeft
+-/
 
 end ContinuousMap
 
Diff
@@ -782,7 +782,7 @@ theorem continuousOn_finset_prod {f : ι → X → M} (s : Finset ι) {t : Set X
 
 @[to_additive]
 theorem eventuallyEq_prod {X M : Type _} [CommMonoid M] {s : Finset ι} {l : Filter X}
-    {f g : ι → X → M} (hs : ∀ i ∈ s, f i =ᶠ[l] g i) : (∏ i in s, f i) =ᶠ[l] ∏ i in s, g i :=
+    {f g : ι → X → M} (hs : ∀ i ∈ s, f i =ᶠ[l] g i) : ∏ i in s, f i =ᶠ[l] ∏ i in s, g i :=
   by
   replace hs : ∀ᶠ x in l, ∀ i ∈ s, f i x = g i x
   · rwa [eventually_all_finset]
@@ -808,7 +808,7 @@ theorem LocallyFinite.exists_finset_mulSupport {M : Type _} [CommMonoid M] {f :
 @[to_additive]
 theorem finprod_eventually_eq_prod {M : Type _} [CommMonoid M] {f : ι → X → M}
     (hf : LocallyFinite fun i => mulSupport (f i)) (x : X) :
-    ∃ s : Finset ι, ∀ᶠ y in 𝓝 x, (∏ᶠ i, f i y) = ∏ i in s, f i y :=
+    ∃ s : Finset ι, ∀ᶠ y in 𝓝 x, ∏ᶠ i, f i y = ∏ i in s, f i y :=
   let ⟨I, hI⟩ := hf.exists_finset_mulSupport x
   ⟨I, hI.mono fun y hy => finprod_eq_prod_of_mulSupport_subset _ fun i hi => hy hi⟩
 #align finprod_eventually_eq_prod finprod_eventually_eq_prod
Diff
@@ -311,8 +311,8 @@ theorem ContinuousMul.of_nhds_one {M : Type u} [Monoid M] [TopologicalSpace M]
       _ = map ((fun x => x₀ * x) ∘ fun x => x * y₀) (map (uncurry (· * ·)) (𝓝 1 ×ᶠ 𝓝 1)) := by
         rw [key, ← Filter.map_map]
       _ ≤ map ((fun x : M => x₀ * x) ∘ fun x => x * y₀) (𝓝 1) := (map_mono hmul)
-      _ = 𝓝 (x₀ * y₀) := by rw [← Filter.map_map, ← hright, hleft y₀, Filter.map_map, key₂, ← hleft]
-      ⟩
+      _ = 𝓝 (x₀ * y₀) := by
+        rw [← Filter.map_map, ← hright, hleft y₀, Filter.map_map, key₂, ← hleft]⟩
 #align has_continuous_mul.of_nhds_one ContinuousMul.of_nhds_one
 #align has_continuous_add.of_nhds_zero ContinuousAdd.of_nhds_zero
 
Diff
@@ -334,14 +334,14 @@ section PointwiseLimits
 variable (M₁ M₂ : Type _) [TopologicalSpace M₂] [T2Space M₂]
 
 @[to_additive]
-theorem isClosed_setOf_map_one [One M₁] [One M₂] : IsClosed { f : M₁ → M₂ | f 1 = 1 } :=
+theorem isClosed_setOf_map_one [One M₁] [One M₂] : IsClosed {f : M₁ → M₂ | f 1 = 1} :=
   isClosed_eq (continuous_apply 1) continuous_const
 #align is_closed_set_of_map_one isClosed_setOf_map_one
 #align is_closed_set_of_map_zero isClosed_setOf_map_zero
 
 @[to_additive]
 theorem isClosed_setOf_map_mul [Mul M₁] [Mul M₂] [ContinuousMul M₂] :
-    IsClosed { f : M₁ → M₂ | ∀ x y, f (x * y) = f x * f y } :=
+    IsClosed {f : M₁ → M₂ | ∀ x y, f (x * y) = f x * f y} :=
   by
   simp only [set_of_forall]
   exact
@@ -786,7 +786,7 @@ theorem eventuallyEq_prod {X M : Type _} [CommMonoid M] {s : Finset ι} {l : Fil
   by
   replace hs : ∀ᶠ x in l, ∀ i ∈ s, f i x = g i x
   · rwa [eventually_all_finset]
-  filter_upwards [hs]with x hx
+  filter_upwards [hs] with x hx
   simp only [Finset.prod_apply, Finset.prod_congr rfl hx]
 #align eventually_eq_prod eventuallyEq_prod
 #align eventually_eq_sum eventuallyEq_sum
Diff
@@ -568,7 +568,7 @@ theorem continuousOn_list_prod {f : ι → X → M} (l : List ι) {t : Set X}
   rw [continuousWithinAt_iff_continuousAt_restrict _ hx]
   refine' tendsto_list_prod _ fun i hi => _
   specialize h i hi x hx
-  rw [continuousWithinAt_iff_continuousAt_restrict _ hx] at h
+  rw [continuousWithinAt_iff_continuousAt_restrict _ hx] at h 
   exact h
 #align continuous_on_list_prod continuousOn_list_prod
 #align continuous_on_list_sum continuousOn_list_sum
Diff
@@ -30,7 +30,7 @@ universe u v
 
 open Classical Set Filter TopologicalSpace
 
-open Classical Topology BigOperators Pointwise
+open scoped Classical Topology BigOperators Pointwise
 
 variable {ι α X M N : Type _} [TopologicalSpace X]
 
@@ -184,33 +184,41 @@ section tendsto_nhds
 variable {𝕜 : Type _} [Preorder 𝕜] [Zero 𝕜] [Mul 𝕜] [TopologicalSpace 𝕜] [ContinuousMul 𝕜]
   {l : Filter α} {f : α → 𝕜} {b c : 𝕜} (hb : 0 < b)
 
+#print Filter.TendstoNhdsWithinIoi.const_mul /-
 theorem Filter.TendstoNhdsWithinIoi.const_mul [PosMulStrictMono 𝕜] [PosMulReflectLT 𝕜]
     (h : Tendsto f l (𝓝[>] c)) : Tendsto (fun a => b * f a) l (𝓝[>] (b * c)) :=
   tendsto_nhdsWithin_of_tendsto_nhds_of_eventually_within _
       ((tendsto_nhds_of_tendsto_nhdsWithin h).const_mul b) <|
     (tendsto_nhdsWithin_iff.mp h).2.mono fun j => (mul_lt_mul_left hb).mpr
 #align filter.tendsto_nhds_within_Ioi.const_mul Filter.TendstoNhdsWithinIoi.const_mul
+-/
 
+#print Filter.TendstoNhdsWithinIio.const_mul /-
 theorem Filter.TendstoNhdsWithinIio.const_mul [PosMulStrictMono 𝕜] [PosMulReflectLT 𝕜]
     (h : Tendsto f l (𝓝[<] c)) : Tendsto (fun a => b * f a) l (𝓝[<] (b * c)) :=
   tendsto_nhdsWithin_of_tendsto_nhds_of_eventually_within _
       ((tendsto_nhds_of_tendsto_nhdsWithin h).const_mul b) <|
     (tendsto_nhdsWithin_iff.mp h).2.mono fun j => (mul_lt_mul_left hb).mpr
 #align filter.tendsto_nhds_within_Iio.const_mul Filter.TendstoNhdsWithinIio.const_mul
+-/
 
+#print Filter.TendstoNhdsWithinIoi.mul_const /-
 theorem Filter.TendstoNhdsWithinIoi.mul_const [MulPosStrictMono 𝕜] [MulPosReflectLT 𝕜]
     (h : Tendsto f l (𝓝[>] c)) : Tendsto (fun a => f a * b) l (𝓝[>] (c * b)) :=
   tendsto_nhdsWithin_of_tendsto_nhds_of_eventually_within _
       ((tendsto_nhds_of_tendsto_nhdsWithin h).mul_const b) <|
     (tendsto_nhdsWithin_iff.mp h).2.mono fun j => (mul_lt_mul_right hb).mpr
 #align filter.tendsto_nhds_within_Ioi.mul_const Filter.TendstoNhdsWithinIoi.mul_const
+-/
 
+#print Filter.TendstoNhdsWithinIio.mul_const /-
 theorem Filter.TendstoNhdsWithinIio.mul_const [MulPosStrictMono 𝕜] [MulPosReflectLT 𝕜]
     (h : Tendsto f l (𝓝[<] c)) : Tendsto (fun a => f a * b) l (𝓝[<] (c * b)) :=
   tendsto_nhdsWithin_of_tendsto_nhds_of_eventually_within _
       ((tendsto_nhds_of_tendsto_nhdsWithin h).mul_const b) <|
     (tendsto_nhdsWithin_iff.mp h).2.mono fun j => (mul_lt_mul_right hb).mpr
 #align filter.tendsto_nhds_within_Iio.mul_const Filter.TendstoNhdsWithinIio.mul_const
+-/
 
 end tendsto_nhds
 
@@ -278,7 +286,7 @@ instance (priority := 100) continuousMul_of_discreteTopology [TopologicalSpace N
 #align has_continuous_add_of_discrete_topology continuousAdd_of_discreteTopology
 -/
 
-open Filter
+open scoped Filter
 
 open Function
 
Diff
@@ -76,12 +76,6 @@ variable [TopologicalSpace M] [Mul M] [ContinuousMul M]
 instance : ContinuousMul Mᵒᵈ :=
   ‹ContinuousMul M›
 
-/- warning: continuous_mul -> continuous_mul is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Mul.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 _inst_3], Continuous.{u1, u1} (Prod.{u1, u1} M M) M (Prod.topologicalSpace.{u1, u1} M M _inst_2 _inst_2) _inst_2 (fun (p : Prod.{u1, u1} M M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) (Prod.fst.{u1, u1} M M p) (Prod.snd.{u1, u1} M M p))
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Mul.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 _inst_3], Continuous.{u1, u1} (Prod.{u1, u1} M M) M (instTopologicalSpaceProd.{u1, u1} M M _inst_2 _inst_2) _inst_2 (fun (p : Prod.{u1, u1} M M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) (Prod.fst.{u1, u1} M M p) (Prod.snd.{u1, u1} M M p))
-Case conversion may be inaccurate. Consider using '#align continuous_mul continuous_mulₓ'. -/
 @[to_additive]
 theorem continuous_mul : Continuous fun p : M × M => p.1 * p.2 :=
   ContinuousMul.continuous_mul
@@ -106,12 +100,6 @@ instance ContinuousMul.to_continuousSMul_op : ContinuousSMul Mᵐᵒᵖ M :=
 #align has_continuous_add.to_has_continuous_vadd_op ContinuousAdd.to_continuousVAdd_op
 -/
 
-/- warning: continuous.mul -> Continuous.mul is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {M : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} M] [_inst_3 : Mul.{u2} M] [_inst_4 : ContinuousMul.{u2} M _inst_2 _inst_3] {f : X -> M} {g : X -> M}, (Continuous.{u1, u2} X M _inst_1 _inst_2 f) -> (Continuous.{u1, u2} X M _inst_1 _inst_2 g) -> (Continuous.{u1, u2} X M _inst_1 _inst_2 (fun (x : X) => HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_3) (f x) (g x)))
-but is expected to have type
-  forall {X : Type.{u2}} {M : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Mul.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 _inst_3] {f : X -> M} {g : X -> M}, (Continuous.{u2, u1} X M _inst_1 _inst_2 f) -> (Continuous.{u2, u1} X M _inst_1 _inst_2 g) -> (Continuous.{u2, u1} X M _inst_1 _inst_2 (fun (x : X) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) (f x) (g x)))
-Case conversion may be inaccurate. Consider using '#align continuous.mul Continuous.mulₓ'. -/
 @[continuity, to_additive]
 theorem Continuous.mul {f g : X → M} (hf : Continuous f) (hg : Continuous g) :
     Continuous fun x => f x * g x :=
@@ -135,12 +123,6 @@ theorem continuous_mul_right (a : M) : Continuous fun b : M => b * a :=
 #align continuous_add_right continuous_add_right
 -/
 
-/- warning: continuous_on.mul -> ContinuousOn.mul is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {M : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} M] [_inst_3 : Mul.{u2} M] [_inst_4 : ContinuousMul.{u2} M _inst_2 _inst_3] {f : X -> M} {g : X -> M} {s : Set.{u1} X}, (ContinuousOn.{u1, u2} X M _inst_1 _inst_2 f s) -> (ContinuousOn.{u1, u2} X M _inst_1 _inst_2 g s) -> (ContinuousOn.{u1, u2} X M _inst_1 _inst_2 (fun (x : X) => HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_3) (f x) (g x)) s)
-but is expected to have type
-  forall {X : Type.{u2}} {M : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Mul.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 _inst_3] {f : X -> M} {g : X -> M} {s : Set.{u2} X}, (ContinuousOn.{u2, u1} X M _inst_1 _inst_2 f s) -> (ContinuousOn.{u2, u1} X M _inst_1 _inst_2 g s) -> (ContinuousOn.{u2, u1} X M _inst_1 _inst_2 (fun (x : X) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) (f x) (g x)) s)
-Case conversion may be inaccurate. Consider using '#align continuous_on.mul ContinuousOn.mulₓ'. -/
 @[to_additive]
 theorem ContinuousOn.mul {f g : X → M} {s : Set X} (hf : ContinuousOn f s) (hg : ContinuousOn g s) :
     ContinuousOn (fun x => f x * g x) s :=
@@ -148,24 +130,12 @@ theorem ContinuousOn.mul {f g : X → M} {s : Set X} (hf : ContinuousOn f s) (hg
 #align continuous_on.mul ContinuousOn.mul
 #align continuous_on.add ContinuousOn.add
 
-/- warning: tendsto_mul -> tendsto_mul is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Mul.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 _inst_3] {a : M} {b : M}, Filter.Tendsto.{u1, u1} (Prod.{u1, u1} M M) M (fun (p : Prod.{u1, u1} M M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) (Prod.fst.{u1, u1} M M p) (Prod.snd.{u1, u1} M M p)) (nhds.{u1} (Prod.{u1, u1} M M) (Prod.topologicalSpace.{u1, u1} M M _inst_2 _inst_2) (Prod.mk.{u1, u1} M M a b)) (nhds.{u1} M _inst_2 (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) a b))
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Mul.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 _inst_3] {a : M} {b : M}, Filter.Tendsto.{u1, u1} (Prod.{u1, u1} M M) M (fun (p : Prod.{u1, u1} M M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) (Prod.fst.{u1, u1} M M p) (Prod.snd.{u1, u1} M M p)) (nhds.{u1} (Prod.{u1, u1} M M) (instTopologicalSpaceProd.{u1, u1} M M _inst_2 _inst_2) (Prod.mk.{u1, u1} M M a b)) (nhds.{u1} M _inst_2 (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) a b))
-Case conversion may be inaccurate. Consider using '#align tendsto_mul tendsto_mulₓ'. -/
 @[to_additive]
 theorem tendsto_mul {a b : M} : Tendsto (fun p : M × M => p.fst * p.snd) (𝓝 (a, b)) (𝓝 (a * b)) :=
   continuous_iff_continuousAt.mp ContinuousMul.continuous_mul (a, b)
 #align tendsto_mul tendsto_mul
 #align tendsto_add tendsto_add
 
-/- warning: filter.tendsto.mul -> Filter.Tendsto.mul is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {M : Type.{u2}} [_inst_2 : TopologicalSpace.{u2} M] [_inst_3 : Mul.{u2} M] [_inst_4 : ContinuousMul.{u2} M _inst_2 _inst_3] {f : α -> M} {g : α -> M} {x : Filter.{u1} α} {a : M} {b : M}, (Filter.Tendsto.{u1, u2} α M f x (nhds.{u2} M _inst_2 a)) -> (Filter.Tendsto.{u1, u2} α M g x (nhds.{u2} M _inst_2 b)) -> (Filter.Tendsto.{u1, u2} α M (fun (x : α) => HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_3) (f x) (g x)) x (nhds.{u2} M _inst_2 (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_3) a b)))
-but is expected to have type
-  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Mul.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 _inst_3] {f : α -> M} {g : α -> M} {x : Filter.{u2} α} {a : M} {b : M}, (Filter.Tendsto.{u2, u1} α M f x (nhds.{u1} M _inst_2 a)) -> (Filter.Tendsto.{u2, u1} α M g x (nhds.{u1} M _inst_2 b)) -> (Filter.Tendsto.{u2, u1} α M (fun (x : α) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) (f x) (g x)) x (nhds.{u1} M _inst_2 (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) a b)))
-Case conversion may be inaccurate. Consider using '#align filter.tendsto.mul Filter.Tendsto.mulₓ'. -/
 @[to_additive]
 theorem Filter.Tendsto.mul {f g : α → M} {x : Filter α} {a b : M} (hf : Tendsto f x (𝓝 a))
     (hg : Tendsto g x (𝓝 b)) : Tendsto (fun x => f x * g x) x (𝓝 (a * b)) :=
@@ -173,12 +143,6 @@ theorem Filter.Tendsto.mul {f g : α → M} {x : Filter α} {a b : M} (hf : Tend
 #align filter.tendsto.mul Filter.Tendsto.mul
 #align filter.tendsto.add Filter.Tendsto.add
 
-/- warning: filter.tendsto.const_mul -> Filter.Tendsto.const_mul is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {M : Type.{u2}} [_inst_2 : TopologicalSpace.{u2} M] [_inst_3 : Mul.{u2} M] [_inst_4 : ContinuousMul.{u2} M _inst_2 _inst_3] (b : M) {c : M} {f : α -> M} {l : Filter.{u1} α}, (Filter.Tendsto.{u1, u2} α M (fun (k : α) => f k) l (nhds.{u2} M _inst_2 c)) -> (Filter.Tendsto.{u1, u2} α M (fun (k : α) => HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_3) b (f k)) l (nhds.{u2} M _inst_2 (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_3) b c)))
-but is expected to have type
-  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Mul.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 _inst_3] (b : M) {c : M} {f : α -> M} {l : Filter.{u2} α}, (Filter.Tendsto.{u2, u1} α M (fun (k : α) => f k) l (nhds.{u1} M _inst_2 c)) -> (Filter.Tendsto.{u2, u1} α M (fun (k : α) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) b (f k)) l (nhds.{u1} M _inst_2 (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) b c)))
-Case conversion may be inaccurate. Consider using '#align filter.tendsto.const_mul Filter.Tendsto.const_mulₓ'. -/
 @[to_additive]
 theorem Filter.Tendsto.const_mul (b : M) {c : M} {f : α → M} {l : Filter α}
     (h : Tendsto (fun k : α => f k) l (𝓝 c)) : Tendsto (fun k : α => b * f k) l (𝓝 (b * c)) :=
@@ -186,12 +150,6 @@ theorem Filter.Tendsto.const_mul (b : M) {c : M} {f : α → M} {l : Filter α}
 #align filter.tendsto.const_mul Filter.Tendsto.const_mul
 #align filter.tendsto.const_add Filter.Tendsto.const_add
 
-/- warning: filter.tendsto.mul_const -> Filter.Tendsto.mul_const is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {M : Type.{u2}} [_inst_2 : TopologicalSpace.{u2} M] [_inst_3 : Mul.{u2} M] [_inst_4 : ContinuousMul.{u2} M _inst_2 _inst_3] (b : M) {c : M} {f : α -> M} {l : Filter.{u1} α}, (Filter.Tendsto.{u1, u2} α M (fun (k : α) => f k) l (nhds.{u2} M _inst_2 c)) -> (Filter.Tendsto.{u1, u2} α M (fun (k : α) => HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_3) (f k) b) l (nhds.{u2} M _inst_2 (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_3) c b)))
-but is expected to have type
-  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Mul.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 _inst_3] (b : M) {c : M} {f : α -> M} {l : Filter.{u2} α}, (Filter.Tendsto.{u2, u1} α M (fun (k : α) => f k) l (nhds.{u1} M _inst_2 c)) -> (Filter.Tendsto.{u2, u1} α M (fun (k : α) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) (f k) b) l (nhds.{u1} M _inst_2 (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) c b)))
-Case conversion may be inaccurate. Consider using '#align filter.tendsto.mul_const Filter.Tendsto.mul_constₓ'. -/
 @[to_additive]
 theorem Filter.Tendsto.mul_const (b : M) {c : M} {f : α → M} {l : Filter α}
     (h : Tendsto (fun k : α => f k) l (𝓝 c)) : Tendsto (fun k : α => f k * b) l (𝓝 (c * b)) :=
@@ -199,24 +157,12 @@ theorem Filter.Tendsto.mul_const (b : M) {c : M} {f : α → M} {l : Filter α}
 #align filter.tendsto.mul_const Filter.Tendsto.mul_const
 #align filter.tendsto.add_const Filter.Tendsto.add_const
 
-/- warning: le_nhds_mul -> le_nhds_mul is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Mul.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 _inst_3] (a : M) (b : M), LE.le.{u1} (Filter.{u1} M) (Preorder.toHasLe.{u1} (Filter.{u1} M) (PartialOrder.toPreorder.{u1} (Filter.{u1} M) (Filter.partialOrder.{u1} M))) (HMul.hMul.{u1, u1, u1} (Filter.{u1} M) (Filter.{u1} M) (Filter.{u1} M) (instHMul.{u1} (Filter.{u1} M) (Filter.instMul.{u1} M _inst_3)) (nhds.{u1} M _inst_2 a) (nhds.{u1} M _inst_2 b)) (nhds.{u1} M _inst_2 (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) a b))
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Mul.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 _inst_3] (a : M) (b : M), LE.le.{u1} (Filter.{u1} M) (Preorder.toLE.{u1} (Filter.{u1} M) (PartialOrder.toPreorder.{u1} (Filter.{u1} M) (Filter.instPartialOrderFilter.{u1} M))) (HMul.hMul.{u1, u1, u1} (Filter.{u1} M) (Filter.{u1} M) (Filter.{u1} M) (instHMul.{u1} (Filter.{u1} M) (Filter.instMul.{u1} M _inst_3)) (nhds.{u1} M _inst_2 a) (nhds.{u1} M _inst_2 b)) (nhds.{u1} M _inst_2 (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) a b))
-Case conversion may be inaccurate. Consider using '#align le_nhds_mul le_nhds_mulₓ'. -/
 @[to_additive]
 theorem le_nhds_mul (a b : M) : 𝓝 a * 𝓝 b ≤ 𝓝 (a * b) := by
   rw [← map₂_mul, ← map_uncurry_prod, ← nhds_prod_eq]; exact continuous_mul.tendsto _
 #align le_nhds_mul le_nhds_mul
 #align le_nhds_add le_nhds_add
 
-/- warning: nhds_one_mul_nhds -> nhds_one_mul_nhds is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_5 : MulOneClass.{u1} M] [_inst_6 : TopologicalSpace.{u1} M] [_inst_7 : ContinuousMul.{u1} M _inst_6 (MulOneClass.toHasMul.{u1} M _inst_5)] (a : M), Eq.{succ u1} (Filter.{u1} M) (HMul.hMul.{u1, u1, u1} (Filter.{u1} M) (Filter.{u1} M) (Filter.{u1} M) (instHMul.{u1} (Filter.{u1} M) (Filter.instMul.{u1} M (MulOneClass.toHasMul.{u1} M _inst_5))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M _inst_5))))) (nhds.{u1} M _inst_6 a)) (nhds.{u1} M _inst_6 a)
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_5 : MulOneClass.{u1} M] [_inst_6 : TopologicalSpace.{u1} M] [_inst_7 : ContinuousMul.{u1} M _inst_6 (MulOneClass.toMul.{u1} M _inst_5)] (a : M), Eq.{succ u1} (Filter.{u1} M) (HMul.hMul.{u1, u1, u1} (Filter.{u1} M) (Filter.{u1} M) (Filter.{u1} M) (instHMul.{u1} (Filter.{u1} M) (Filter.instMul.{u1} M (MulOneClass.toMul.{u1} M _inst_5))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (MulOneClass.toOne.{u1} M _inst_5)))) (nhds.{u1} M _inst_6 a)) (nhds.{u1} M _inst_6 a)
-Case conversion may be inaccurate. Consider using '#align nhds_one_mul_nhds nhds_one_mul_nhdsₓ'. -/
 @[simp, to_additive]
 theorem nhds_one_mul_nhds {M} [MulOneClass M] [TopologicalSpace M] [ContinuousMul M] (a : M) :
     𝓝 (1 : M) * 𝓝 a = 𝓝 a :=
@@ -225,12 +171,6 @@ theorem nhds_one_mul_nhds {M} [MulOneClass M] [TopologicalSpace M] [ContinuousMu
 #align nhds_one_mul_nhds nhds_one_mul_nhds
 #align nhds_zero_add_nhds nhds_zero_add_nhds
 
-/- warning: nhds_mul_nhds_one -> nhds_mul_nhds_one is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_5 : MulOneClass.{u1} M] [_inst_6 : TopologicalSpace.{u1} M] [_inst_7 : ContinuousMul.{u1} M _inst_6 (MulOneClass.toHasMul.{u1} M _inst_5)] (a : M), Eq.{succ u1} (Filter.{u1} M) (HMul.hMul.{u1, u1, u1} (Filter.{u1} M) (Filter.{u1} M) (Filter.{u1} M) (instHMul.{u1} (Filter.{u1} M) (Filter.instMul.{u1} M (MulOneClass.toHasMul.{u1} M _inst_5))) (nhds.{u1} M _inst_6 a) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M _inst_5)))))) (nhds.{u1} M _inst_6 a)
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_5 : MulOneClass.{u1} M] [_inst_6 : TopologicalSpace.{u1} M] [_inst_7 : ContinuousMul.{u1} M _inst_6 (MulOneClass.toMul.{u1} M _inst_5)] (a : M), Eq.{succ u1} (Filter.{u1} M) (HMul.hMul.{u1, u1, u1} (Filter.{u1} M) (Filter.{u1} M) (Filter.{u1} M) (instHMul.{u1} (Filter.{u1} M) (Filter.instMul.{u1} M (MulOneClass.toMul.{u1} M _inst_5))) (nhds.{u1} M _inst_6 a) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (MulOneClass.toOne.{u1} M _inst_5))))) (nhds.{u1} M _inst_6 a)
-Case conversion may be inaccurate. Consider using '#align nhds_mul_nhds_one nhds_mul_nhds_oneₓ'. -/
 @[simp, to_additive]
 theorem nhds_mul_nhds_one {M} [MulOneClass M] [TopologicalSpace M] [ContinuousMul M] (a : M) :
     𝓝 a * 𝓝 1 = 𝓝 a :=
@@ -244,12 +184,6 @@ section tendsto_nhds
 variable {𝕜 : Type _} [Preorder 𝕜] [Zero 𝕜] [Mul 𝕜] [TopologicalSpace 𝕜] [ContinuousMul 𝕜]
   {l : Filter α} {f : α → 𝕜} {b c : 𝕜} (hb : 0 < b)
 
-/- warning: filter.tendsto_nhds_within_Ioi.const_mul -> Filter.TendstoNhdsWithinIoi.const_mul is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_5 : Preorder.{u2} 𝕜] [_inst_6 : Zero.{u2} 𝕜] [_inst_7 : Mul.{u2} 𝕜] [_inst_8 : TopologicalSpace.{u2} 𝕜] [_inst_9 : ContinuousMul.{u2} 𝕜 _inst_8 _inst_7] {l : Filter.{u1} α} {f : α -> 𝕜} {b : 𝕜} {c : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toHasLt.{u2} 𝕜 _inst_5) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 _inst_6))) b) -> (forall [_inst_10 : PosMulStrictMono.{u2} 𝕜 _inst_7 _inst_6 _inst_5] [_inst_11 : PosMulReflectLT.{u2} 𝕜 _inst_7 _inst_6 _inst_5], (Filter.Tendsto.{u1, u2} α 𝕜 f l (nhdsWithin.{u2} 𝕜 _inst_8 c (Set.Ioi.{u2} 𝕜 _inst_5 c))) -> (Filter.Tendsto.{u1, u2} α 𝕜 (fun (a : α) => HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b (f a)) l (nhdsWithin.{u2} 𝕜 _inst_8 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b c) (Set.Ioi.{u2} 𝕜 _inst_5 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b c)))))
-but is expected to have type
-  forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_5 : Preorder.{u2} 𝕜] [_inst_6 : Zero.{u2} 𝕜] [_inst_7 : Mul.{u2} 𝕜] [_inst_8 : TopologicalSpace.{u2} 𝕜] [_inst_9 : ContinuousMul.{u2} 𝕜 _inst_8 _inst_7] {l : Filter.{u1} α} {f : α -> 𝕜} {b : 𝕜} {c : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toLT.{u2} 𝕜 _inst_5) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 _inst_6)) b) -> (forall [_inst_10 : PosMulStrictMono.{u2} 𝕜 _inst_7 _inst_6 _inst_5] [_inst_11 : PosMulReflectLT.{u2} 𝕜 _inst_7 _inst_6 _inst_5], (Filter.Tendsto.{u1, u2} α 𝕜 f l (nhdsWithin.{u2} 𝕜 _inst_8 c (Set.Ioi.{u2} 𝕜 _inst_5 c))) -> (Filter.Tendsto.{u1, u2} α 𝕜 (fun (a : α) => HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b (f a)) l (nhdsWithin.{u2} 𝕜 _inst_8 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b c) (Set.Ioi.{u2} 𝕜 _inst_5 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b c)))))
-Case conversion may be inaccurate. Consider using '#align filter.tendsto_nhds_within_Ioi.const_mul Filter.TendstoNhdsWithinIoi.const_mulₓ'. -/
 theorem Filter.TendstoNhdsWithinIoi.const_mul [PosMulStrictMono 𝕜] [PosMulReflectLT 𝕜]
     (h : Tendsto f l (𝓝[>] c)) : Tendsto (fun a => b * f a) l (𝓝[>] (b * c)) :=
   tendsto_nhdsWithin_of_tendsto_nhds_of_eventually_within _
@@ -257,12 +191,6 @@ theorem Filter.TendstoNhdsWithinIoi.const_mul [PosMulStrictMono 𝕜] [PosMulRef
     (tendsto_nhdsWithin_iff.mp h).2.mono fun j => (mul_lt_mul_left hb).mpr
 #align filter.tendsto_nhds_within_Ioi.const_mul Filter.TendstoNhdsWithinIoi.const_mul
 
-/- warning: filter.tendsto_nhds_within_Iio.const_mul -> Filter.TendstoNhdsWithinIio.const_mul is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_5 : Preorder.{u2} 𝕜] [_inst_6 : Zero.{u2} 𝕜] [_inst_7 : Mul.{u2} 𝕜] [_inst_8 : TopologicalSpace.{u2} 𝕜] [_inst_9 : ContinuousMul.{u2} 𝕜 _inst_8 _inst_7] {l : Filter.{u1} α} {f : α -> 𝕜} {b : 𝕜} {c : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toHasLt.{u2} 𝕜 _inst_5) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 _inst_6))) b) -> (forall [_inst_10 : PosMulStrictMono.{u2} 𝕜 _inst_7 _inst_6 _inst_5] [_inst_11 : PosMulReflectLT.{u2} 𝕜 _inst_7 _inst_6 _inst_5], (Filter.Tendsto.{u1, u2} α 𝕜 f l (nhdsWithin.{u2} 𝕜 _inst_8 c (Set.Iio.{u2} 𝕜 _inst_5 c))) -> (Filter.Tendsto.{u1, u2} α 𝕜 (fun (a : α) => HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b (f a)) l (nhdsWithin.{u2} 𝕜 _inst_8 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b c) (Set.Iio.{u2} 𝕜 _inst_5 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b c)))))
-but is expected to have type
-  forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_5 : Preorder.{u2} 𝕜] [_inst_6 : Zero.{u2} 𝕜] [_inst_7 : Mul.{u2} 𝕜] [_inst_8 : TopologicalSpace.{u2} 𝕜] [_inst_9 : ContinuousMul.{u2} 𝕜 _inst_8 _inst_7] {l : Filter.{u1} α} {f : α -> 𝕜} {b : 𝕜} {c : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toLT.{u2} 𝕜 _inst_5) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 _inst_6)) b) -> (forall [_inst_10 : PosMulStrictMono.{u2} 𝕜 _inst_7 _inst_6 _inst_5] [_inst_11 : PosMulReflectLT.{u2} 𝕜 _inst_7 _inst_6 _inst_5], (Filter.Tendsto.{u1, u2} α 𝕜 f l (nhdsWithin.{u2} 𝕜 _inst_8 c (Set.Iio.{u2} 𝕜 _inst_5 c))) -> (Filter.Tendsto.{u1, u2} α 𝕜 (fun (a : α) => HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b (f a)) l (nhdsWithin.{u2} 𝕜 _inst_8 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b c) (Set.Iio.{u2} 𝕜 _inst_5 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b c)))))
-Case conversion may be inaccurate. Consider using '#align filter.tendsto_nhds_within_Iio.const_mul Filter.TendstoNhdsWithinIio.const_mulₓ'. -/
 theorem Filter.TendstoNhdsWithinIio.const_mul [PosMulStrictMono 𝕜] [PosMulReflectLT 𝕜]
     (h : Tendsto f l (𝓝[<] c)) : Tendsto (fun a => b * f a) l (𝓝[<] (b * c)) :=
   tendsto_nhdsWithin_of_tendsto_nhds_of_eventually_within _
@@ -270,12 +198,6 @@ theorem Filter.TendstoNhdsWithinIio.const_mul [PosMulStrictMono 𝕜] [PosMulRef
     (tendsto_nhdsWithin_iff.mp h).2.mono fun j => (mul_lt_mul_left hb).mpr
 #align filter.tendsto_nhds_within_Iio.const_mul Filter.TendstoNhdsWithinIio.const_mul
 
-/- warning: filter.tendsto_nhds_within_Ioi.mul_const -> Filter.TendstoNhdsWithinIoi.mul_const is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_5 : Preorder.{u2} 𝕜] [_inst_6 : Zero.{u2} 𝕜] [_inst_7 : Mul.{u2} 𝕜] [_inst_8 : TopologicalSpace.{u2} 𝕜] [_inst_9 : ContinuousMul.{u2} 𝕜 _inst_8 _inst_7] {l : Filter.{u1} α} {f : α -> 𝕜} {b : 𝕜} {c : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toHasLt.{u2} 𝕜 _inst_5) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 _inst_6))) b) -> (forall [_inst_10 : MulPosStrictMono.{u2} 𝕜 _inst_7 _inst_6 _inst_5] [_inst_11 : MulPosReflectLT.{u2} 𝕜 _inst_7 _inst_6 _inst_5], (Filter.Tendsto.{u1, u2} α 𝕜 f l (nhdsWithin.{u2} 𝕜 _inst_8 c (Set.Ioi.{u2} 𝕜 _inst_5 c))) -> (Filter.Tendsto.{u1, u2} α 𝕜 (fun (a : α) => HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) (f a) b) l (nhdsWithin.{u2} 𝕜 _inst_8 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) c b) (Set.Ioi.{u2} 𝕜 _inst_5 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) c b)))))
-but is expected to have type
-  forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_5 : Preorder.{u2} 𝕜] [_inst_6 : Zero.{u2} 𝕜] [_inst_7 : Mul.{u2} 𝕜] [_inst_8 : TopologicalSpace.{u2} 𝕜] [_inst_9 : ContinuousMul.{u2} 𝕜 _inst_8 _inst_7] {l : Filter.{u1} α} {f : α -> 𝕜} {b : 𝕜} {c : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toLT.{u2} 𝕜 _inst_5) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 _inst_6)) b) -> (forall [_inst_10 : MulPosStrictMono.{u2} 𝕜 _inst_7 _inst_6 _inst_5] [_inst_11 : MulPosReflectLT.{u2} 𝕜 _inst_7 _inst_6 _inst_5], (Filter.Tendsto.{u1, u2} α 𝕜 f l (nhdsWithin.{u2} 𝕜 _inst_8 c (Set.Ioi.{u2} 𝕜 _inst_5 c))) -> (Filter.Tendsto.{u1, u2} α 𝕜 (fun (a : α) => HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) (f a) b) l (nhdsWithin.{u2} 𝕜 _inst_8 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) c b) (Set.Ioi.{u2} 𝕜 _inst_5 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) c b)))))
-Case conversion may be inaccurate. Consider using '#align filter.tendsto_nhds_within_Ioi.mul_const Filter.TendstoNhdsWithinIoi.mul_constₓ'. -/
 theorem Filter.TendstoNhdsWithinIoi.mul_const [MulPosStrictMono 𝕜] [MulPosReflectLT 𝕜]
     (h : Tendsto f l (𝓝[>] c)) : Tendsto (fun a => f a * b) l (𝓝[>] (c * b)) :=
   tendsto_nhdsWithin_of_tendsto_nhds_of_eventually_within _
@@ -283,12 +205,6 @@ theorem Filter.TendstoNhdsWithinIoi.mul_const [MulPosStrictMono 𝕜] [MulPosRef
     (tendsto_nhdsWithin_iff.mp h).2.mono fun j => (mul_lt_mul_right hb).mpr
 #align filter.tendsto_nhds_within_Ioi.mul_const Filter.TendstoNhdsWithinIoi.mul_const
 
-/- warning: filter.tendsto_nhds_within_Iio.mul_const -> Filter.TendstoNhdsWithinIio.mul_const is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_5 : Preorder.{u2} 𝕜] [_inst_6 : Zero.{u2} 𝕜] [_inst_7 : Mul.{u2} 𝕜] [_inst_8 : TopologicalSpace.{u2} 𝕜] [_inst_9 : ContinuousMul.{u2} 𝕜 _inst_8 _inst_7] {l : Filter.{u1} α} {f : α -> 𝕜} {b : 𝕜} {c : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toHasLt.{u2} 𝕜 _inst_5) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 _inst_6))) b) -> (forall [_inst_10 : MulPosStrictMono.{u2} 𝕜 _inst_7 _inst_6 _inst_5] [_inst_11 : MulPosReflectLT.{u2} 𝕜 _inst_7 _inst_6 _inst_5], (Filter.Tendsto.{u1, u2} α 𝕜 f l (nhdsWithin.{u2} 𝕜 _inst_8 c (Set.Iio.{u2} 𝕜 _inst_5 c))) -> (Filter.Tendsto.{u1, u2} α 𝕜 (fun (a : α) => HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) (f a) b) l (nhdsWithin.{u2} 𝕜 _inst_8 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) c b) (Set.Iio.{u2} 𝕜 _inst_5 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) c b)))))
-but is expected to have type
-  forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_5 : Preorder.{u2} 𝕜] [_inst_6 : Zero.{u2} 𝕜] [_inst_7 : Mul.{u2} 𝕜] [_inst_8 : TopologicalSpace.{u2} 𝕜] [_inst_9 : ContinuousMul.{u2} 𝕜 _inst_8 _inst_7] {l : Filter.{u1} α} {f : α -> 𝕜} {b : 𝕜} {c : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toLT.{u2} 𝕜 _inst_5) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 _inst_6)) b) -> (forall [_inst_10 : MulPosStrictMono.{u2} 𝕜 _inst_7 _inst_6 _inst_5] [_inst_11 : MulPosReflectLT.{u2} 𝕜 _inst_7 _inst_6 _inst_5], (Filter.Tendsto.{u1, u2} α 𝕜 f l (nhdsWithin.{u2} 𝕜 _inst_8 c (Set.Iio.{u2} 𝕜 _inst_5 c))) -> (Filter.Tendsto.{u1, u2} α 𝕜 (fun (a : α) => HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) (f a) b) l (nhdsWithin.{u2} 𝕜 _inst_8 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) c b) (Set.Iio.{u2} 𝕜 _inst_5 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) c b)))))
-Case conversion may be inaccurate. Consider using '#align filter.tendsto_nhds_within_Iio.mul_const Filter.TendstoNhdsWithinIio.mul_constₓ'. -/
 theorem Filter.TendstoNhdsWithinIio.mul_const [MulPosStrictMono 𝕜] [MulPosReflectLT 𝕜]
     (h : Tendsto f l (𝓝[<] c)) : Tendsto (fun a => f a * b) l (𝓝[<] (c * b)) :=
   tendsto_nhdsWithin_of_tendsto_nhds_of_eventually_within _
@@ -298,12 +214,6 @@ theorem Filter.TendstoNhdsWithinIio.mul_const [MulPosStrictMono 𝕜] [MulPosRef
 
 end tendsto_nhds
 
-/- warning: filter.tendsto.units -> Filter.Tendsto.units is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {N : Type.{u2}} [_inst_5 : TopologicalSpace.{u2} N] [_inst_6 : Monoid.{u2} N] [_inst_7 : ContinuousMul.{u2} N _inst_5 (MulOneClass.toHasMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_6))] [_inst_8 : T2Space.{u2} N _inst_5] {f : ι -> (Units.{u2} N _inst_6)} {r₁ : N} {r₂ : N} {l : Filter.{u1} ι} [_inst_9 : Filter.NeBot.{u1} ι l], (Filter.Tendsto.{u1, u2} ι N (fun (x : ι) => (fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Units.{u2} N _inst_6) N (HasLiftT.mk.{succ u2, succ u2} (Units.{u2} N _inst_6) N (CoeTCₓ.coe.{succ u2, succ u2} (Units.{u2} N _inst_6) N (coeBase.{succ u2, succ u2} (Units.{u2} N _inst_6) N (Units.hasCoe.{u2} N _inst_6)))) (f x)) l (nhds.{u2} N _inst_5 r₁)) -> (Filter.Tendsto.{u1, u2} ι N (fun (x : ι) => (fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Units.{u2} N _inst_6) N (HasLiftT.mk.{succ u2, succ u2} (Units.{u2} N _inst_6) N (CoeTCₓ.coe.{succ u2, succ u2} (Units.{u2} N _inst_6) N (coeBase.{succ u2, succ u2} (Units.{u2} N _inst_6) N (Units.hasCoe.{u2} N _inst_6)))) (Inv.inv.{u2} (Units.{u2} N _inst_6) (Units.hasInv.{u2} N _inst_6) (f x))) l (nhds.{u2} N _inst_5 r₂)) -> (Units.{u2} N _inst_6)
-but is expected to have type
-  forall {ι : Type.{u1}} {N : Type.{u2}} [_inst_5 : TopologicalSpace.{u2} N] [_inst_6 : Monoid.{u2} N] [_inst_7 : ContinuousMul.{u2} N _inst_5 (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_6))] [_inst_8 : T2Space.{u2} N _inst_5] {f : ι -> (Units.{u2} N _inst_6)} {r₁ : N} {r₂ : N} {l : Filter.{u1} ι} [_inst_9 : Filter.NeBot.{u1} ι l], (Filter.Tendsto.{u1, u2} ι N (fun (x : ι) => Units.val.{u2} N _inst_6 (f x)) l (nhds.{u2} N _inst_5 r₁)) -> (Filter.Tendsto.{u1, u2} ι N (fun (x : ι) => Units.val.{u2} N _inst_6 (Inv.inv.{u2} (Units.{u2} N _inst_6) (Units.instInv.{u2} N _inst_6) (f x))) l (nhds.{u2} N _inst_5 r₂)) -> (Units.{u2} N _inst_6)
-Case conversion may be inaccurate. Consider using '#align filter.tendsto.units Filter.Tendsto.unitsₓ'. -/
 /-- Construct a unit from limits of units and their inverses. -/
 @[to_additive Filter.Tendsto.addUnits
       "Construct an additive unit from limits of additive units\nand their negatives.",
@@ -319,12 +229,6 @@ def Filter.Tendsto.units [TopologicalSpace N] [Monoid N] [ContinuousMul N] [T2Sp
 #align filter.tendsto.units Filter.Tendsto.units
 #align filter.tendsto.add_units Filter.Tendsto.addUnits
 
-/- warning: continuous_at.mul -> ContinuousAt.mul is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {M : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} M] [_inst_3 : Mul.{u2} M] [_inst_4 : ContinuousMul.{u2} M _inst_2 _inst_3] {f : X -> M} {g : X -> M} {x : X}, (ContinuousAt.{u1, u2} X M _inst_1 _inst_2 f x) -> (ContinuousAt.{u1, u2} X M _inst_1 _inst_2 g x) -> (ContinuousAt.{u1, u2} X M _inst_1 _inst_2 (fun (x : X) => HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_3) (f x) (g x)) x)
-but is expected to have type
-  forall {X : Type.{u2}} {M : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Mul.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 _inst_3] {f : X -> M} {g : X -> M} {x : X}, (ContinuousAt.{u2, u1} X M _inst_1 _inst_2 f x) -> (ContinuousAt.{u2, u1} X M _inst_1 _inst_2 g x) -> (ContinuousAt.{u2, u1} X M _inst_1 _inst_2 (fun (x : X) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) (f x) (g x)) x)
-Case conversion may be inaccurate. Consider using '#align continuous_at.mul ContinuousAt.mulₓ'. -/
 @[to_additive]
 theorem ContinuousAt.mul {f g : X → M} {x : X} (hf : ContinuousAt f x) (hg : ContinuousAt g x) :
     ContinuousAt (fun x => f x * g x) x :=
@@ -332,12 +236,6 @@ theorem ContinuousAt.mul {f g : X → M} {x : X} (hf : ContinuousAt f x) (hg : C
 #align continuous_at.mul ContinuousAt.mul
 #align continuous_at.add ContinuousAt.add
 
-/- warning: continuous_within_at.mul -> ContinuousWithinAt.mul is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {M : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} M] [_inst_3 : Mul.{u2} M] [_inst_4 : ContinuousMul.{u2} M _inst_2 _inst_3] {f : X -> M} {g : X -> M} {s : Set.{u1} X} {x : X}, (ContinuousWithinAt.{u1, u2} X M _inst_1 _inst_2 f s x) -> (ContinuousWithinAt.{u1, u2} X M _inst_1 _inst_2 g s x) -> (ContinuousWithinAt.{u1, u2} X M _inst_1 _inst_2 (fun (x : X) => HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_3) (f x) (g x)) s x)
-but is expected to have type
-  forall {X : Type.{u2}} {M : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Mul.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 _inst_3] {f : X -> M} {g : X -> M} {s : Set.{u2} X} {x : X}, (ContinuousWithinAt.{u2, u1} X M _inst_1 _inst_2 f s x) -> (ContinuousWithinAt.{u2, u1} X M _inst_1 _inst_2 g s x) -> (ContinuousWithinAt.{u2, u1} X M _inst_1 _inst_2 (fun (x : X) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) (f x) (g x)) s x)
-Case conversion may be inaccurate. Consider using '#align continuous_within_at.mul ContinuousWithinAt.mulₓ'. -/
 @[to_additive]
 theorem ContinuousWithinAt.mul {f g : X → M} {s : Set X} {x : X} (hf : ContinuousWithinAt f s x)
     (hg : ContinuousWithinAt g s x) : ContinuousWithinAt (fun x => f x * g x) s x :=
@@ -384,12 +282,6 @@ open Filter
 
 open Function
 
-/- warning: has_continuous_mul.of_nhds_one -> ContinuousMul.of_nhds_one is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_5 : Monoid.{u1} M] [_inst_6 : TopologicalSpace.{u1} M], (Filter.Tendsto.{u1, u1} (Prod.{u1, u1} M M) M (Function.uncurry.{u1, u1, u1} M M M (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5))))) (Filter.prod.{u1, u1} M M (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5)))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5))))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5))))))) -> (forall (x₀ : M), Eq.{succ u1} (Filter.{u1} M) (nhds.{u1} M _inst_6 x₀) (Filter.map.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5))) x₀ x) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5)))))))) -> (forall (x₀ : M), Eq.{succ u1} (Filter.{u1} M) (nhds.{u1} M _inst_6 x₀) (Filter.map.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5))) x x₀) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5)))))))) -> (ContinuousMul.{u1} M _inst_6 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5)))
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_5 : Monoid.{u1} M] [_inst_6 : TopologicalSpace.{u1} M], (Filter.Tendsto.{u1, u1} (Prod.{u1, u1} M M) M (Function.uncurry.{u1, u1, u1} M M M (fun (x._@.Mathlib.Topology.Algebra.Monoid._hyg.2120 : M) (x._@.Mathlib.Topology.Algebra.Monoid._hyg.2122 : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5))) x._@.Mathlib.Topology.Algebra.Monoid._hyg.2120 x._@.Mathlib.Topology.Algebra.Monoid._hyg.2122)) (Filter.prod.{u1, u1} M M (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_5)))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_5))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_5))))) -> (forall (x₀ : M), Eq.{succ u1} (Filter.{u1} M) (nhds.{u1} M _inst_6 x₀) (Filter.map.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5))) x₀ x) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_5)))))) -> (forall (x₀ : M), Eq.{succ u1} (Filter.{u1} M) (nhds.{u1} M _inst_6 x₀) (Filter.map.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5))) x x₀) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_5)))))) -> (ContinuousMul.{u1} M _inst_6 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5)))
-Case conversion may be inaccurate. Consider using '#align has_continuous_mul.of_nhds_one ContinuousMul.of_nhds_oneₓ'. -/
 @[to_additive]
 theorem ContinuousMul.of_nhds_one {M : Type u} [Monoid M] [TopologicalSpace M]
     (hmul : Tendsto (uncurry ((· * ·) : M → M → M)) (𝓝 1 ×ᶠ 𝓝 1) <| 𝓝 1)
@@ -416,12 +308,6 @@ theorem ContinuousMul.of_nhds_one {M : Type u} [Monoid M] [TopologicalSpace M]
 #align has_continuous_mul.of_nhds_one ContinuousMul.of_nhds_one
 #align has_continuous_add.of_nhds_zero ContinuousAdd.of_nhds_zero
 
-/- warning: has_continuous_mul_of_comm_of_nhds_one -> continuousMul_of_comm_of_nhds_one is a dubious translation:
-lean 3 declaration is
-  forall (M : Type.{u1}) [_inst_5 : CommMonoid.{u1} M] [_inst_6 : TopologicalSpace.{u1} M], (Filter.Tendsto.{u1, u1} (Prod.{u1, u1} M M) M (Function.uncurry.{u1, u1, u1} M M M (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))))) (Filter.prod.{u1, u1} M M (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))))))) -> (forall (x₀ : M), Eq.{succ u1} (Filter.{u1} M) (nhds.{u1} M _inst_6 x₀) (Filter.map.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))) x₀ x) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))))))) -> (ContinuousMul.{u1} M _inst_6 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))
-but is expected to have type
-  forall (M : Type.{u1}) [_inst_5 : CommMonoid.{u1} M] [_inst_6 : TopologicalSpace.{u1} M], (Filter.Tendsto.{u1, u1} (Prod.{u1, u1} M M) M (Function.uncurry.{u1, u1, u1} M M M (fun (x._@.Mathlib.Topology.Algebra.Monoid._hyg.2838 : M) (x._@.Mathlib.Topology.Algebra.Monoid._hyg.2840 : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))) x._@.Mathlib.Topology.Algebra.Monoid._hyg.2838 x._@.Mathlib.Topology.Algebra.Monoid._hyg.2840)) (Filter.prod.{u1, u1} M M (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))))) -> (forall (x₀ : M), Eq.{succ u1} (Filter.{u1} M) (nhds.{u1} M _inst_6 x₀) (Filter.map.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))) x₀ x) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))))) -> (ContinuousMul.{u1} M _inst_6 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))
-Case conversion may be inaccurate. Consider using '#align has_continuous_mul_of_comm_of_nhds_one continuousMul_of_comm_of_nhds_oneₓ'. -/
 @[to_additive]
 theorem continuousMul_of_comm_of_nhds_one (M : Type u) [CommMonoid M] [TopologicalSpace M]
     (hmul : Tendsto (uncurry ((· * ·) : M → M → M)) (𝓝 1 ×ᶠ 𝓝 1) (𝓝 1))
@@ -439,24 +325,12 @@ section PointwiseLimits
 
 variable (M₁ M₂ : Type _) [TopologicalSpace M₂] [T2Space M₂]
 
-/- warning: is_closed_set_of_map_one -> isClosed_setOf_map_one is a dubious translation:
-lean 3 declaration is
-  forall (M₁ : Type.{u1}) (M₂ : Type.{u2}) [_inst_2 : TopologicalSpace.{u2} M₂] [_inst_3 : T2Space.{u2} M₂ _inst_2] [_inst_4 : One.{u1} M₁] [_inst_5 : One.{u2} M₂], IsClosed.{max u1 u2} (M₁ -> M₂) (Pi.topologicalSpace.{u1, u2} M₁ (fun (ᾰ : M₁) => M₂) (fun (a : M₁) => _inst_2)) (setOf.{max u1 u2} (M₁ -> M₂) (fun (f : M₁ -> M₂) => Eq.{succ u2} M₂ (f (OfNat.ofNat.{u1} M₁ 1 (OfNat.mk.{u1} M₁ 1 (One.one.{u1} M₁ _inst_4)))) (OfNat.ofNat.{u2} M₂ 1 (OfNat.mk.{u2} M₂ 1 (One.one.{u2} M₂ _inst_5)))))
-but is expected to have type
-  forall (M₁ : Type.{u2}) (M₂ : Type.{u1}) [_inst_2 : TopologicalSpace.{u1} M₂] [_inst_3 : T2Space.{u1} M₂ _inst_2] [_inst_4 : One.{u2} M₁] [_inst_5 : One.{u1} M₂], IsClosed.{max u2 u1} (M₁ -> M₂) (Pi.topologicalSpace.{u2, u1} M₁ (fun (ᾰ : M₁) => M₂) (fun (a : M₁) => _inst_2)) (setOf.{max u2 u1} (M₁ -> M₂) (fun (f : M₁ -> M₂) => Eq.{succ u1} M₂ (f (OfNat.ofNat.{u2} M₁ 1 (One.toOfNat1.{u2} M₁ _inst_4))) (OfNat.ofNat.{u1} M₂ 1 (One.toOfNat1.{u1} M₂ _inst_5))))
-Case conversion may be inaccurate. Consider using '#align is_closed_set_of_map_one isClosed_setOf_map_oneₓ'. -/
 @[to_additive]
 theorem isClosed_setOf_map_one [One M₁] [One M₂] : IsClosed { f : M₁ → M₂ | f 1 = 1 } :=
   isClosed_eq (continuous_apply 1) continuous_const
 #align is_closed_set_of_map_one isClosed_setOf_map_one
 #align is_closed_set_of_map_zero isClosed_setOf_map_zero
 
-/- warning: is_closed_set_of_map_mul -> isClosed_setOf_map_mul is a dubious translation:
-lean 3 declaration is
-  forall (M₁ : Type.{u1}) (M₂ : Type.{u2}) [_inst_2 : TopologicalSpace.{u2} M₂] [_inst_3 : T2Space.{u2} M₂ _inst_2] [_inst_4 : Mul.{u1} M₁] [_inst_5 : Mul.{u2} M₂] [_inst_6 : ContinuousMul.{u2} M₂ _inst_2 _inst_5], IsClosed.{max u1 u2} (M₁ -> M₂) (Pi.topologicalSpace.{u1, u2} M₁ (fun (ᾰ : M₁) => M₂) (fun (a : M₁) => _inst_2)) (setOf.{max u1 u2} (M₁ -> M₂) (fun (f : M₁ -> M₂) => forall (x : M₁) (y : M₁), Eq.{succ u2} M₂ (f (HMul.hMul.{u1, u1, u1} M₁ M₁ M₁ (instHMul.{u1} M₁ _inst_4) x y)) (HMul.hMul.{u2, u2, u2} M₂ M₂ M₂ (instHMul.{u2} M₂ _inst_5) (f x) (f y))))
-but is expected to have type
-  forall (M₁ : Type.{u2}) (M₂ : Type.{u1}) [_inst_2 : TopologicalSpace.{u1} M₂] [_inst_3 : T2Space.{u1} M₂ _inst_2] [_inst_4 : Mul.{u2} M₁] [_inst_5 : Mul.{u1} M₂] [_inst_6 : ContinuousMul.{u1} M₂ _inst_2 _inst_5], IsClosed.{max u2 u1} (M₁ -> M₂) (Pi.topologicalSpace.{u2, u1} M₁ (fun (ᾰ : M₁) => M₂) (fun (a : M₁) => _inst_2)) (setOf.{max u2 u1} (M₁ -> M₂) (fun (f : M₁ -> M₂) => forall (x : M₁) (y : M₁), Eq.{succ u1} M₂ (f (HMul.hMul.{u2, u2, u2} M₁ M₁ M₁ (instHMul.{u2} M₁ _inst_4) x y)) (HMul.hMul.{u1, u1, u1} M₂ M₂ M₂ (instHMul.{u1} M₂ _inst_5) (f x) (f y))))
-Case conversion may be inaccurate. Consider using '#align is_closed_set_of_map_mul isClosed_setOf_map_mulₓ'. -/
 @[to_additive]
 theorem isClosed_setOf_map_mul [Mul M₁] [Mul M₂] [ContinuousMul M₂] :
     IsClosed { f : M₁ → M₂ | ∀ x y, f (x * y) = f x * f y } :=
@@ -472,12 +346,6 @@ theorem isClosed_setOf_map_mul [Mul M₁] [Mul M₂] [ContinuousMul M₂] :
 variable {M₁ M₂} [MulOneClass M₁] [MulOneClass M₂] [ContinuousMul M₂] {F : Type _}
   [MonoidHomClass F M₁ M₂] {l : Filter α}
 
-/- warning: monoid_hom_of_mem_closure_range_coe -> monoidHomOfMemClosureRangeCoe is a dubious translation:
-lean 3 declaration is
-  forall {M₁ : Type.{u1}} {M₂ : Type.{u2}} [_inst_2 : TopologicalSpace.{u2} M₂] [_inst_3 : T2Space.{u2} M₂ _inst_2] [_inst_4 : MulOneClass.{u1} M₁] [_inst_5 : MulOneClass.{u2} M₂] [_inst_6 : ContinuousMul.{u2} M₂ _inst_2 (MulOneClass.toHasMul.{u2} M₂ _inst_5)] {F : Type.{u3}} [_inst_7 : MonoidHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5] (f : M₁ -> M₂), (Membership.Mem.{max u1 u2, max u1 u2} (M₁ -> M₂) (Set.{max u1 u2} (M₁ -> M₂)) (Set.hasMem.{max u1 u2} (M₁ -> M₂)) f (closure.{max u1 u2} (M₁ -> M₂) (Pi.topologicalSpace.{u1, u2} M₁ (fun (x : M₁) => M₂) (fun (a : M₁) => _inst_2)) (Set.range.{max u1 u2, succ u3} (M₁ -> M₂) F (fun (f : F) (x : M₁) => coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M₁ -> M₂) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M₁ (fun (_x : M₁) => M₂) (MulHomClass.toFunLike.{u3, u1, u2} F M₁ M₂ (MulOneClass.toHasMul.{u1} M₁ _inst_4) (MulOneClass.toHasMul.{u2} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5 _inst_7))) f x)))) -> (MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5)
-but is expected to have type
-  forall {M₁ : Type.{u1}} {M₂ : Type.{u2}} [_inst_2 : TopologicalSpace.{u2} M₂] [_inst_3 : T2Space.{u2} M₂ _inst_2] [_inst_4 : MulOneClass.{u1} M₁] [_inst_5 : MulOneClass.{u2} M₂] [_inst_6 : ContinuousMul.{u2} M₂ _inst_2 (MulOneClass.toMul.{u2} M₂ _inst_5)] {F : Type.{u3}} [_inst_7 : MonoidHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5] (f : M₁ -> M₂), (Membership.mem.{max u1 u2, max u1 u2} (M₁ -> M₂) (Set.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) x)) (Set.instMembershipSet.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) x)) f (closure.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) x) (Pi.topologicalSpace.{u1, u2} M₁ (fun (x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) x) (fun (a : M₁) => _inst_2)) (Set.range.{max u1 u2, succ u3} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) x) F (fun (f : F) (x : M₁) => FunLike.coe.{succ u3, succ u1, succ u2} F M₁ (fun (_x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) _x) (MulHomClass.toFunLike.{u3, u1, u2} F M₁ M₂ (MulOneClass.toMul.{u1} M₁ _inst_4) (MulOneClass.toMul.{u2} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5 _inst_7)) f x)))) -> (MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5)
-Case conversion may be inaccurate. Consider using '#align monoid_hom_of_mem_closure_range_coe monoidHomOfMemClosureRangeCoeₓ'. -/
 /-- Construct a bundled monoid homomorphism `M₁ →* M₂` from a function `f` and a proof that it
 belongs to the closure of the range of the coercion from `M₁ →* M₂` (or another type of bundled
 homomorphisms that has a `monoid_hom_class` instance) to `M₁ → M₂`. -/
@@ -493,9 +361,6 @@ def monoidHomOfMemClosureRangeCoe (f : M₁ → M₂)
 #align monoid_hom_of_mem_closure_range_coe monoidHomOfMemClosureRangeCoe
 #align add_monoid_hom_of_mem_closure_range_coe addMonoidHomOfMemClosureRangeCoe
 
-/- warning: monoid_hom_of_tendsto -> monoidHomOfTendsto is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align monoid_hom_of_tendsto monoidHomOfTendstoₓ'. -/
 /-- Construct a bundled monoid homomorphism from a pointwise limit of monoid homomorphisms. -/
 @[to_additive
       "Construct a bundled additive monoid homomorphism from a pointwise limit of additive\nmonoid homomorphisms",
@@ -509,12 +374,6 @@ def monoidHomOfTendsto (f : M₁ → M₂) (g : α → F) [l.ne_bot]
 
 variable (M₁ M₂)
 
-/- warning: monoid_hom.is_closed_range_coe -> MonoidHom.isClosed_range_coe is a dubious translation:
-lean 3 declaration is
-  forall (M₁ : Type.{u1}) (M₂ : Type.{u2}) [_inst_2 : TopologicalSpace.{u2} M₂] [_inst_3 : T2Space.{u2} M₂ _inst_2] [_inst_4 : MulOneClass.{u1} M₁] [_inst_5 : MulOneClass.{u2} M₂] [_inst_6 : ContinuousMul.{u2} M₂ _inst_2 (MulOneClass.toHasMul.{u2} M₂ _inst_5)], IsClosed.{max u1 u2} (M₁ -> M₂) (Pi.topologicalSpace.{u1, u2} M₁ (fun (ᾰ : M₁) => M₂) (fun (a : M₁) => _inst_2)) (Set.range.{max u1 u2, max (succ u2) (succ u1)} (M₁ -> M₂) (MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5) (fun (ᾰ : MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5) => M₁ -> M₂) (MonoidHom.hasCoeToFun.{u1, u2} M₁ M₂ _inst_4 _inst_5)))
-but is expected to have type
-  forall (M₁ : Type.{u2}) (M₂ : Type.{u1}) [_inst_2 : TopologicalSpace.{u1} M₂] [_inst_3 : T2Space.{u1} M₂ _inst_2] [_inst_4 : MulOneClass.{u2} M₁] [_inst_5 : MulOneClass.{u1} M₂] [_inst_6 : ContinuousMul.{u1} M₂ _inst_2 (MulOneClass.toMul.{u1} M₂ _inst_5)], IsClosed.{max u2 u1} (forall (ᾰ : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) ᾰ) (Pi.topologicalSpace.{u2, u1} M₁ (fun (ᾰ : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) ᾰ) (fun (a : M₁) => _inst_2)) (Set.range.{max u2 u1, max (succ u2) (succ u1)} (forall (ᾰ : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) ᾰ) (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ (fun (ᾰ : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) ᾰ) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ M₂ (MulOneClass.toMul.{u2} M₁ _inst_4) (MulOneClass.toMul.{u1} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ M₂ _inst_4 _inst_5 (MonoidHom.monoidHomClass.{u2, u1} M₁ M₂ _inst_4 _inst_5)))))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.is_closed_range_coe MonoidHom.isClosed_range_coeₓ'. -/
 @[to_additive]
 theorem MonoidHom.isClosed_range_coe : IsClosed (range (coeFn : (M₁ →* M₂) → M₁ → M₂)) :=
   isClosed_of_closure_subset fun f hf => ⟨monoidHomOfMemClosureRangeCoe f hf, rfl⟩
@@ -523,12 +382,6 @@ theorem MonoidHom.isClosed_range_coe : IsClosed (range (coeFn : (M₁ →* M₂)
 
 end PointwiseLimits
 
-/- warning: inducing.has_continuous_mul -> Inducing.continuousMul is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_2 : Mul.{u1} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u3, u1, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u1} M] [_inst_6 : TopologicalSpace.{u2} N] [_inst_7 : ContinuousMul.{u2} N _inst_6 _inst_3] (f : F), (Inducing.{u1, u2} M N _inst_5 _inst_6 (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N _inst_2 _inst_3 _inst_4)) f)) -> (ContinuousMul.{u1} M _inst_5 _inst_2)
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} [_inst_2 : Mul.{u3} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u1, u3, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u3} M] [_inst_6 : TopologicalSpace.{u2} N] [_inst_7 : ContinuousMul.{u2} N _inst_6 _inst_3] (f : F), (Inducing.{u3, u2} M N _inst_5 _inst_6 (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N _inst_2 _inst_3 _inst_4) f)) -> (ContinuousMul.{u3} M _inst_5 _inst_2)
-Case conversion may be inaccurate. Consider using '#align inducing.has_continuous_mul Inducing.continuousMulₓ'. -/
 @[to_additive]
 theorem Inducing.continuousMul {M N F : Type _} [Mul M] [Mul N] [MulHomClass F M N]
     [TopologicalSpace M] [TopologicalSpace N] [ContinuousMul N] (f : F) (hf : Inducing f) :
@@ -538,12 +391,6 @@ theorem Inducing.continuousMul {M N F : Type _} [Mul M] [Mul N] [MulHomClass F M
 #align inducing.has_continuous_mul Inducing.continuousMul
 #align inducing.has_continuous_add Inducing.continuousAdd
 
-/- warning: has_continuous_mul_induced -> continuousMul_induced is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_2 : Mul.{u1} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u3, u1, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u2} N] [_inst_6 : ContinuousMul.{u2} N _inst_5 _inst_3] (f : F), ContinuousMul.{u1} M (TopologicalSpace.induced.{u1, u2} M N (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N _inst_2 _inst_3 _inst_4)) f) _inst_5) _inst_2
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} [_inst_2 : Mul.{u3} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u1, u3, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u2} N] [_inst_6 : ContinuousMul.{u2} N _inst_5 _inst_3] (f : F), ContinuousMul.{u3} M (TopologicalSpace.induced.{u3, u2} M N (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N _inst_2 _inst_3 _inst_4) f) _inst_5) _inst_2
-Case conversion may be inaccurate. Consider using '#align has_continuous_mul_induced continuousMul_inducedₓ'. -/
 @[to_additive]
 theorem continuousMul_induced {M N F : Type _} [Mul M] [Mul N] [MulHomClass F M N]
     [TopologicalSpace N] [ContinuousMul N] (f : F) : @ContinuousMul M (induced f ‹_›) _ :=
@@ -552,12 +399,6 @@ theorem continuousMul_induced {M N F : Type _} [Mul M] [Mul N] [MulHomClass F M
 #align has_continuous_mul_induced continuousMul_induced
 #align has_continuous_add_induced continuousAdd_induced
 
-/- warning: subsemigroup.has_continuous_mul -> Subsemigroup.continuousMul is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Semigroup.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (Semigroup.toHasMul.{u1} M _inst_3)] (S : Subsemigroup.{u1} M (Semigroup.toHasMul.{u1} M _inst_3)), ContinuousMul.{u1} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M (Semigroup.toHasMul.{u1} M _inst_3)) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M (Semigroup.toHasMul.{u1} M _inst_3)) M (Subsemigroup.setLike.{u1} M (Semigroup.toHasMul.{u1} M _inst_3))) S) (Subtype.topologicalSpace.{u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M (Semigroup.toHasMul.{u1} M _inst_3)) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M (Semigroup.toHasMul.{u1} M _inst_3)) M (Subsemigroup.setLike.{u1} M (Semigroup.toHasMul.{u1} M _inst_3))) x S) _inst_2) (MulMemClass.mul.{u1, u1} M (Subsemigroup.{u1} M (Semigroup.toHasMul.{u1} M _inst_3)) (Semigroup.toHasMul.{u1} M _inst_3) (Subsemigroup.setLike.{u1} M (Semigroup.toHasMul.{u1} M _inst_3)) (Subsemigroup.mulMemClass.{u1} M (Semigroup.toHasMul.{u1} M _inst_3)) S)
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Semigroup.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (Semigroup.toMul.{u1} M _inst_3)] (S : Subsemigroup.{u1} M (Semigroup.toMul.{u1} M _inst_3)), ContinuousMul.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Subsemigroup.{u1} M (Semigroup.toMul.{u1} M _inst_3)) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M (Semigroup.toMul.{u1} M _inst_3)) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M (Semigroup.toMul.{u1} M _inst_3))) x S)) (instTopologicalSpaceSubtype.{u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Subsemigroup.{u1} M (Semigroup.toMul.{u1} M _inst_3)) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M (Semigroup.toMul.{u1} M _inst_3)) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M (Semigroup.toMul.{u1} M _inst_3))) x S) _inst_2) (Semigroup.toMul.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Subsemigroup.{u1} M (Semigroup.toMul.{u1} M _inst_3)) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M (Semigroup.toMul.{u1} M _inst_3)) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M (Semigroup.toMul.{u1} M _inst_3))) x S)) (MulMemClass.toSemigroup.{u1, u1} M _inst_3 (Subsemigroup.{u1} M (Semigroup.toMul.{u1} M _inst_3)) (Subsemigroup.instSetLikeSubsemigroup.{u1} M (Semigroup.toMul.{u1} M _inst_3)) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} M (Semigroup.toMul.{u1} M _inst_3)) S))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.has_continuous_mul Subsemigroup.continuousMulₓ'. -/
 @[to_additive]
 instance Subsemigroup.continuousMul [TopologicalSpace M] [Semigroup M] [ContinuousMul M]
     (S : Subsemigroup M) : ContinuousMul S :=
@@ -565,12 +406,6 @@ instance Subsemigroup.continuousMul [TopologicalSpace M] [Semigroup M] [Continuo
 #align subsemigroup.has_continuous_mul Subsemigroup.continuousMul
 #align add_subsemigroup.has_continuous_add AddSubsemigroup.continuousAdd
 
-/- warning: submonoid.has_continuous_mul -> Submonoid.continuousMul is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (S : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)), ContinuousMul.{u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) S) (Subtype.topologicalSpace.{u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) x S) _inst_2) (Submonoid.mul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3) S)
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (S : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)), ContinuousMul.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) x S)) (instTopologicalSpaceSubtype.{u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) x S) _inst_2) (Submonoid.mul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3) S)
-Case conversion may be inaccurate. Consider using '#align submonoid.has_continuous_mul Submonoid.continuousMulₓ'. -/
 @[to_additive]
 instance Submonoid.continuousMul [TopologicalSpace M] [Monoid M] [ContinuousMul M]
     (S : Submonoid M) : ContinuousMul S :=
@@ -582,12 +417,6 @@ section ContinuousMul
 
 variable [TopologicalSpace M] [Monoid M] [ContinuousMul M]
 
-/- warning: submonoid.top_closure_mul_self_subset -> Submonoid.top_closure_mul_self_subset is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (s : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)), HasSubset.Subset.{u1} (Set.{u1} M) (Set.hasSubset.{u1} M) (HMul.hMul.{u1, u1, u1} (Set.{u1} M) (Set.{u1} M) (Set.{u1} M) (instHMul.{u1} (Set.{u1} M) (Set.mul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)))) (closure.{u1} M _inst_2 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) s)) (closure.{u1} M _inst_2 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) s))) (closure.{u1} M _inst_2 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) s))
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (s : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)), HasSubset.Subset.{u1} (Set.{u1} M) (Set.instHasSubsetSet.{u1} M) (HMul.hMul.{u1, u1, u1} (Set.{u1} M) (Set.{u1} M) (Set.{u1} M) (instHMul.{u1} (Set.{u1} M) (Set.mul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)))) (closure.{u1} M _inst_2 (SetLike.coe.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) s)) (closure.{u1} M _inst_2 (SetLike.coe.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) s))) (closure.{u1} M _inst_2 (SetLike.coe.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) s))
-Case conversion may be inaccurate. Consider using '#align submonoid.top_closure_mul_self_subset Submonoid.top_closure_mul_self_subsetₓ'. -/
 @[to_additive]
 theorem Submonoid.top_closure_mul_self_subset (s : Submonoid M) :
     closure (s : Set M) * closure s ⊆ closure s :=
@@ -596,12 +425,6 @@ theorem Submonoid.top_closure_mul_self_subset (s : Submonoid M) :
 #align submonoid.top_closure_mul_self_subset Submonoid.top_closure_mul_self_subset
 #align add_submonoid.top_closure_add_self_subset AddSubmonoid.top_closure_add_self_subset
 
-/- warning: submonoid.top_closure_mul_self_eq -> Submonoid.top_closure_mul_self_eq is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (s : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)), Eq.{succ u1} (Set.{u1} M) (HMul.hMul.{u1, u1, u1} (Set.{u1} M) (Set.{u1} M) (Set.{u1} M) (instHMul.{u1} (Set.{u1} M) (Set.mul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)))) (closure.{u1} M _inst_2 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) s)) (closure.{u1} M _inst_2 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) s))) (closure.{u1} M _inst_2 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) s))
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (s : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)), Eq.{succ u1} (Set.{u1} M) (HMul.hMul.{u1, u1, u1} (Set.{u1} M) (Set.{u1} M) (Set.{u1} M) (instHMul.{u1} (Set.{u1} M) (Set.mul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)))) (closure.{u1} M _inst_2 (SetLike.coe.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) s)) (closure.{u1} M _inst_2 (SetLike.coe.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) s))) (closure.{u1} M _inst_2 (SetLike.coe.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) s))
-Case conversion may be inaccurate. Consider using '#align submonoid.top_closure_mul_self_eq Submonoid.top_closure_mul_self_eqₓ'. -/
 @[to_additive]
 theorem Submonoid.top_closure_mul_self_eq (s : Submonoid M) :
     closure (s : Set M) * closure s = closure s :=
@@ -610,12 +433,6 @@ theorem Submonoid.top_closure_mul_self_eq (s : Submonoid M) :
 #align submonoid.top_closure_mul_self_eq Submonoid.top_closure_mul_self_eq
 #align add_submonoid.top_closure_add_self_eq AddSubmonoid.top_closure_add_self_eq
 
-/- warning: submonoid.topological_closure -> Submonoid.topologicalClosure is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))], (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) -> (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))], (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) -> (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))
-Case conversion may be inaccurate. Consider using '#align submonoid.topological_closure Submonoid.topologicalClosureₓ'. -/
 /-- The (topological-space) closure of a submonoid of a space `M` with `has_continuous_mul` is
 itself a submonoid. -/
 @[to_additive
@@ -628,36 +445,18 @@ def Submonoid.topologicalClosure (s : Submonoid M) : Submonoid M
 #align submonoid.topological_closure Submonoid.topologicalClosure
 #align add_submonoid.topological_closure AddSubmonoid.topologicalClosure
 
-/- warning: submonoid.le_topological_closure -> Submonoid.le_topologicalClosure is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (s : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)), LE.le.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Preorder.toHasLe.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) s (Submonoid.topologicalClosure.{u1} M _inst_2 _inst_3 _inst_4 s)
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (s : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)), LE.le.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Preorder.toLE.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Submonoid.instCompleteLatticeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)))))) s (Submonoid.topologicalClosure.{u1} M _inst_2 _inst_3 _inst_4 s)
-Case conversion may be inaccurate. Consider using '#align submonoid.le_topological_closure Submonoid.le_topologicalClosureₓ'. -/
 @[to_additive]
 theorem Submonoid.le_topologicalClosure (s : Submonoid M) : s ≤ s.topologicalClosure :=
   subset_closure
 #align submonoid.le_topological_closure Submonoid.le_topologicalClosure
 #align add_submonoid.le_topological_closure AddSubmonoid.le_topologicalClosure
 
-/- warning: submonoid.is_closed_topological_closure -> Submonoid.isClosed_topologicalClosure is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (s : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)), IsClosed.{u1} M _inst_2 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) (Submonoid.topologicalClosure.{u1} M _inst_2 _inst_3 _inst_4 s))
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (s : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)), IsClosed.{u1} M _inst_2 (SetLike.coe.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Submonoid.topologicalClosure.{u1} M _inst_2 _inst_3 _inst_4 s))
-Case conversion may be inaccurate. Consider using '#align submonoid.is_closed_topological_closure Submonoid.isClosed_topologicalClosureₓ'. -/
 @[to_additive]
 theorem Submonoid.isClosed_topologicalClosure (s : Submonoid M) :
     IsClosed (s.topologicalClosure : Set M) := by convert isClosed_closure
 #align submonoid.is_closed_topological_closure Submonoid.isClosed_topologicalClosure
 #align add_submonoid.is_closed_topological_closure AddSubmonoid.isClosed_topologicalClosure
 
-/- warning: submonoid.topological_closure_minimal -> Submonoid.topologicalClosure_minimal is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (s : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) {t : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)}, (LE.le.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Preorder.toHasLe.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) s t) -> (IsClosed.{u1} M _inst_2 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) t)) -> (LE.le.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Preorder.toHasLe.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) (Submonoid.topologicalClosure.{u1} M _inst_2 _inst_3 _inst_4 s) t)
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (s : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) {t : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)}, (LE.le.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Preorder.toLE.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Submonoid.instCompleteLatticeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)))))) s t) -> (IsClosed.{u1} M _inst_2 (SetLike.coe.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) t)) -> (LE.le.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Preorder.toLE.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Submonoid.instCompleteLatticeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)))))) (Submonoid.topologicalClosure.{u1} M _inst_2 _inst_3 _inst_4 s) t)
-Case conversion may be inaccurate. Consider using '#align submonoid.topological_closure_minimal Submonoid.topologicalClosure_minimalₓ'. -/
 @[to_additive]
 theorem Submonoid.topologicalClosure_minimal (s : Submonoid M) {t : Submonoid M} (h : s ≤ t)
     (ht : IsClosed (t : Set M)) : s.topologicalClosure ≤ t :=
@@ -665,12 +464,6 @@ theorem Submonoid.topologicalClosure_minimal (s : Submonoid M) {t : Submonoid M}
 #align submonoid.topological_closure_minimal Submonoid.topologicalClosure_minimal
 #align add_submonoid.topological_closure_minimal AddSubmonoid.topologicalClosure_minimal
 
-/- warning: submonoid.comm_monoid_topological_closure -> Submonoid.commMonoidTopologicalClosure is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] [_inst_5 : T2Space.{u1} M _inst_2] (s : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)), (forall (x : coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) s) (y : coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) s), Eq.{succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) s) (HMul.hMul.{u1, u1, u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) s) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) s) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) s) (instHMul.{u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) s) (Submonoid.mul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3) s)) x y) (HMul.hMul.{u1, u1, u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) s) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) s) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) s) (instHMul.{u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) s) (Submonoid.mul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3) s)) y x)) -> (CommMonoid.{u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) (Submonoid.topologicalClosure.{u1} M _inst_2 _inst_3 _inst_4 s)))
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] [_inst_5 : T2Space.{u1} M _inst_2] (s : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)), (forall (x : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) x s)) (y : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) x s)), Eq.{succ u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) x s)) (HMul.hMul.{u1, u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) x s)) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) x s)) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) x s)) (instHMul.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) x s)) (Submonoid.mul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3) s)) x y) (HMul.hMul.{u1, u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) x s)) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) x s)) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) x s)) (instHMul.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) x s)) (Submonoid.mul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3) s)) y x)) -> (CommMonoid.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) x (Submonoid.topologicalClosure.{u1} M _inst_2 _inst_3 _inst_4 s))))
-Case conversion may be inaccurate. Consider using '#align submonoid.comm_monoid_topological_closure Submonoid.commMonoidTopologicalClosureₓ'. -/
 /-- If a submonoid of a topological monoid is commutative, then so is its topological closure. -/
 @[to_additive
       "If a submonoid of an additive topological monoid is commutative, then so is its\ntopological closure."]
@@ -686,12 +479,6 @@ def Submonoid.commMonoidTopologicalClosure [T2Space M] (s : Submonoid M)
 #align submonoid.comm_monoid_topological_closure Submonoid.commMonoidTopologicalClosure
 #align add_submonoid.add_comm_monoid_topological_closure AddSubmonoid.addCommMonoidTopologicalClosure
 
-/- warning: exists_open_nhds_one_split -> exists_open_nhds_one_split is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {s : Set.{u1} M}, (Membership.Mem.{u1, u1} (Set.{u1} M) (Filter.{u1} M) (Filter.hasMem.{u1} M) s (nhds.{u1} M _inst_2 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))))) -> (Exists.{succ u1} (Set.{u1} M) (fun (V : Set.{u1} M) => And (IsOpen.{u1} M _inst_2 V) (And (Membership.Mem.{u1, u1} M (Set.{u1} M) (Set.hasMem.{u1} M) (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) V) (forall (v : M), (Membership.Mem.{u1, u1} M (Set.{u1} M) (Set.hasMem.{u1} M) v V) -> (forall (w : M), (Membership.Mem.{u1, u1} M (Set.{u1} M) (Set.hasMem.{u1} M) w V) -> (Membership.Mem.{u1, u1} M (Set.{u1} M) (Set.hasMem.{u1} M) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) v w) s))))))
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {s : Set.{u1} M}, (Membership.mem.{u1, u1} (Set.{u1} M) (Filter.{u1} M) (instMembershipSetFilter.{u1} M) s (nhds.{u1} M _inst_2 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_3))))) -> (Exists.{succ u1} (Set.{u1} M) (fun (V : Set.{u1} M) => And (IsOpen.{u1} M _inst_2 V) (And (Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_3))) V) (forall (v : M), (Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) v V) -> (forall (w : M), (Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) w V) -> (Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) v w) s))))))
-Case conversion may be inaccurate. Consider using '#align exists_open_nhds_one_split exists_open_nhds_one_splitₓ'. -/
 @[to_additive exists_open_nhds_zero_half]
 theorem exists_open_nhds_one_split {s : Set M} (hs : s ∈ 𝓝 (1 : M)) :
     ∃ V : Set M, IsOpen V ∧ (1 : M) ∈ V ∧ ∀ v ∈ V, ∀ w ∈ V, v * w ∈ s :=
@@ -702,12 +489,6 @@ theorem exists_open_nhds_one_split {s : Set M} (hs : s ∈ 𝓝 (1 : M)) :
 #align exists_open_nhds_one_split exists_open_nhds_one_split
 #align exists_open_nhds_zero_half exists_open_nhds_zero_half
 
-/- warning: exists_nhds_one_split -> exists_nhds_one_split is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {s : Set.{u1} M}, (Membership.Mem.{u1, u1} (Set.{u1} M) (Filter.{u1} M) (Filter.hasMem.{u1} M) s (nhds.{u1} M _inst_2 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))))) -> (Exists.{succ u1} (Set.{u1} M) (fun (V : Set.{u1} M) => Exists.{0} (Membership.Mem.{u1, u1} (Set.{u1} M) (Filter.{u1} M) (Filter.hasMem.{u1} M) V (nhds.{u1} M _inst_2 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))))) (fun (H : Membership.Mem.{u1, u1} (Set.{u1} M) (Filter.{u1} M) (Filter.hasMem.{u1} M) V (nhds.{u1} M _inst_2 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))))) => forall (v : M), (Membership.Mem.{u1, u1} M (Set.{u1} M) (Set.hasMem.{u1} M) v V) -> (forall (w : M), (Membership.Mem.{u1, u1} M (Set.{u1} M) (Set.hasMem.{u1} M) w V) -> (Membership.Mem.{u1, u1} M (Set.{u1} M) (Set.hasMem.{u1} M) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) v w) s)))))
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {s : Set.{u1} M}, (Membership.mem.{u1, u1} (Set.{u1} M) (Filter.{u1} M) (instMembershipSetFilter.{u1} M) s (nhds.{u1} M _inst_2 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_3))))) -> (Exists.{succ u1} (Set.{u1} M) (fun (V : Set.{u1} M) => And (Membership.mem.{u1, u1} (Set.{u1} M) (Filter.{u1} M) (instMembershipSetFilter.{u1} M) V (nhds.{u1} M _inst_2 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_3))))) (forall (v : M), (Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) v V) -> (forall (w : M), (Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) w V) -> (Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) v w) s)))))
-Case conversion may be inaccurate. Consider using '#align exists_nhds_one_split exists_nhds_one_splitₓ'. -/
 @[to_additive exists_nhds_zero_half]
 theorem exists_nhds_one_split {s : Set M} (hs : s ∈ 𝓝 (1 : M)) :
     ∃ V ∈ 𝓝 (1 : M), ∀ v ∈ V, ∀ w ∈ V, v * w ∈ s :=
@@ -716,9 +497,6 @@ theorem exists_nhds_one_split {s : Set M} (hs : s ∈ 𝓝 (1 : M)) :
 #align exists_nhds_one_split exists_nhds_one_split
 #align exists_nhds_zero_half exists_nhds_zero_half
 
-/- warning: exists_nhds_one_split4 -> exists_nhds_one_split4 is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align exists_nhds_one_split4 exists_nhds_one_split4ₓ'. -/
 @[to_additive exists_nhds_zero_quarter]
 theorem exists_nhds_one_split4 {u : Set M} (hu : u ∈ 𝓝 (1 : M)) :
     ∃ V ∈ 𝓝 (1 : M), ∀ {v w s t}, v ∈ V → w ∈ V → s ∈ V → t ∈ V → v * w * s * t ∈ u :=
@@ -731,12 +509,6 @@ theorem exists_nhds_one_split4 {u : Set M} (hu : u ∈ 𝓝 (1 : M)) :
 #align exists_nhds_one_split4 exists_nhds_one_split4
 #align exists_nhds_zero_quarter exists_nhds_zero_quarter
 
-/- warning: exists_open_nhds_one_mul_subset -> exists_open_nhds_one_mul_subset is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {U : Set.{u1} M}, (Membership.Mem.{u1, u1} (Set.{u1} M) (Filter.{u1} M) (Filter.hasMem.{u1} M) U (nhds.{u1} M _inst_2 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))))) -> (Exists.{succ u1} (Set.{u1} M) (fun (V : Set.{u1} M) => And (IsOpen.{u1} M _inst_2 V) (And (Membership.Mem.{u1, u1} M (Set.{u1} M) (Set.hasMem.{u1} M) (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) V) (HasSubset.Subset.{u1} (Set.{u1} M) (Set.hasSubset.{u1} M) (HMul.hMul.{u1, u1, u1} (Set.{u1} M) (Set.{u1} M) (Set.{u1} M) (instHMul.{u1} (Set.{u1} M) (Set.mul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)))) V V) U))))
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {U : Set.{u1} M}, (Membership.mem.{u1, u1} (Set.{u1} M) (Filter.{u1} M) (instMembershipSetFilter.{u1} M) U (nhds.{u1} M _inst_2 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_3))))) -> (Exists.{succ u1} (Set.{u1} M) (fun (V : Set.{u1} M) => And (IsOpen.{u1} M _inst_2 V) (And (Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_3))) V) (HasSubset.Subset.{u1} (Set.{u1} M) (Set.instHasSubsetSet.{u1} M) (HMul.hMul.{u1, u1, u1} (Set.{u1} M) (Set.{u1} M) (Set.{u1} M) (instHMul.{u1} (Set.{u1} M) (Set.mul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)))) V V) U))))
-Case conversion may be inaccurate. Consider using '#align exists_open_nhds_one_mul_subset exists_open_nhds_one_mul_subsetₓ'. -/
 /-- Given a neighborhood `U` of `1` there is an open neighborhood `V` of `1`
 such that `VV ⊆ U`. -/
 @[to_additive
@@ -751,24 +523,12 @@ theorem exists_open_nhds_one_mul_subset {U : Set M} (hU : U ∈ 𝓝 (1 : M)) :
 #align exists_open_nhds_one_mul_subset exists_open_nhds_one_mul_subset
 #align exists_open_nhds_zero_add_subset exists_open_nhds_zero_add_subset
 
-/- warning: is_compact.mul -> IsCompact.mul is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {s : Set.{u1} M} {t : Set.{u1} M}, (IsCompact.{u1} M _inst_2 s) -> (IsCompact.{u1} M _inst_2 t) -> (IsCompact.{u1} M _inst_2 (HMul.hMul.{u1, u1, u1} (Set.{u1} M) (Set.{u1} M) (Set.{u1} M) (instHMul.{u1} (Set.{u1} M) (Set.mul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)))) s t))
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {s : Set.{u1} M} {t : Set.{u1} M}, (IsCompact.{u1} M _inst_2 s) -> (IsCompact.{u1} M _inst_2 t) -> (IsCompact.{u1} M _inst_2 (HMul.hMul.{u1, u1, u1} (Set.{u1} M) (Set.{u1} M) (Set.{u1} M) (instHMul.{u1} (Set.{u1} M) (Set.mul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)))) s t))
-Case conversion may be inaccurate. Consider using '#align is_compact.mul IsCompact.mulₓ'. -/
 @[to_additive]
 theorem IsCompact.mul {s t : Set M} (hs : IsCompact s) (ht : IsCompact t) : IsCompact (s * t) := by
   rw [← image_mul_prod]; exact (hs.prod ht).image continuous_mul
 #align is_compact.mul IsCompact.mul
 #align is_compact.add IsCompact.add
 
-/- warning: tendsto_list_prod -> tendsto_list_prod is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {α : Type.{u2}} {M : Type.{u3}} [_inst_2 : TopologicalSpace.{u3} M] [_inst_3 : Monoid.{u3} M] [_inst_4 : ContinuousMul.{u3} M _inst_2 (MulOneClass.toHasMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_3))] {f : ι -> α -> M} {x : Filter.{u2} α} {a : ι -> M} (l : List.{u1} ι), (forall (i : ι), (Membership.Mem.{u1, u1} ι (List.{u1} ι) (List.hasMem.{u1} ι) i l) -> (Filter.Tendsto.{u2, u3} α M (f i) x (nhds.{u3} M _inst_2 (a i)))) -> (Filter.Tendsto.{u2, u3} α M (fun (b : α) => List.prod.{u3} M (MulOneClass.toHasMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_3)) (MulOneClass.toHasOne.{u3} M (Monoid.toMulOneClass.{u3} M _inst_3)) (List.map.{u1, u3} ι M (fun (c : ι) => f c b) l)) x (nhds.{u3} M _inst_2 (List.prod.{u3} M (MulOneClass.toHasMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_3)) (MulOneClass.toHasOne.{u3} M (Monoid.toMulOneClass.{u3} M _inst_3)) (List.map.{u1, u3} ι M a l))))
-but is expected to have type
-  forall {ι : Type.{u2}} {α : Type.{u3}} {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {f : ι -> α -> M} {x : Filter.{u3} α} {a : ι -> M} (l : List.{u2} ι), (forall (i : ι), (Membership.mem.{u2, u2} ι (List.{u2} ι) (List.instMembershipList.{u2} ι) i l) -> (Filter.Tendsto.{u3, u1} α M (f i) x (nhds.{u1} M _inst_2 (a i)))) -> (Filter.Tendsto.{u3, u1} α M (fun (b : α) => List.prod.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Monoid.toOne.{u1} M _inst_3) (List.map.{u2, u1} ι M (fun (c : ι) => f c b) l)) x (nhds.{u1} M _inst_2 (List.prod.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Monoid.toOne.{u1} M _inst_3) (List.map.{u2, u1} ι M a l))))
-Case conversion may be inaccurate. Consider using '#align tendsto_list_prod tendsto_list_prodₓ'. -/
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
 @[to_additive]
 theorem tendsto_list_prod {f : ι → α → M} {x : Filter α} {a : ι → M} :
@@ -784,12 +544,6 @@ theorem tendsto_list_prod {f : ι → α → M} {x : Filter α} {a : ι → M} :
 #align tendsto_list_prod tendsto_list_prod
 #align tendsto_list_sum tendsto_list_sum
 
-/- warning: continuous_list_prod -> continuous_list_prod is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {X : Type.{u2}} {M : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u3} M] [_inst_3 : Monoid.{u3} M] [_inst_4 : ContinuousMul.{u3} M _inst_2 (MulOneClass.toHasMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_3))] {f : ι -> X -> M} (l : List.{u1} ι), (forall (i : ι), (Membership.Mem.{u1, u1} ι (List.{u1} ι) (List.hasMem.{u1} ι) i l) -> (Continuous.{u2, u3} X M _inst_1 _inst_2 (f i))) -> (Continuous.{u2, u3} X M _inst_1 _inst_2 (fun (a : X) => List.prod.{u3} M (MulOneClass.toHasMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_3)) (MulOneClass.toHasOne.{u3} M (Monoid.toMulOneClass.{u3} M _inst_3)) (List.map.{u1, u3} ι M (fun (i : ι) => f i a) l)))
-but is expected to have type
-  forall {ι : Type.{u3}} {X : Type.{u2}} {M : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {f : ι -> X -> M} (l : List.{u3} ι), (forall (i : ι), (Membership.mem.{u3, u3} ι (List.{u3} ι) (List.instMembershipList.{u3} ι) i l) -> (Continuous.{u2, u1} X M _inst_1 _inst_2 (f i))) -> (Continuous.{u2, u1} X M _inst_1 _inst_2 (fun (a : X) => List.prod.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Monoid.toOne.{u1} M _inst_3) (List.map.{u3, u1} ι M (fun (i : ι) => f i a) l)))
-Case conversion may be inaccurate. Consider using '#align continuous_list_prod continuous_list_prodₓ'. -/
 @[to_additive]
 theorem continuous_list_prod {f : ι → X → M} (l : List ι) (h : ∀ i ∈ l, Continuous (f i)) :
     Continuous fun a => (l.map fun i => f i a).Prod :=
@@ -798,12 +552,6 @@ theorem continuous_list_prod {f : ι → X → M} (l : List ι) (h : ∀ i ∈ l
 #align continuous_list_prod continuous_list_prod
 #align continuous_list_sum continuous_list_sum
 
-/- warning: continuous_on_list_prod -> continuousOn_list_prod is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {X : Type.{u2}} {M : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u3} M] [_inst_3 : Monoid.{u3} M] [_inst_4 : ContinuousMul.{u3} M _inst_2 (MulOneClass.toHasMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_3))] {f : ι -> X -> M} (l : List.{u1} ι) {t : Set.{u2} X}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (List.{u1} ι) (List.hasMem.{u1} ι) i l) -> (ContinuousOn.{u2, u3} X M _inst_1 _inst_2 (f i) t)) -> (ContinuousOn.{u2, u3} X M _inst_1 _inst_2 (fun (a : X) => List.prod.{u3} M (MulOneClass.toHasMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_3)) (MulOneClass.toHasOne.{u3} M (Monoid.toMulOneClass.{u3} M _inst_3)) (List.map.{u1, u3} ι M (fun (i : ι) => f i a) l)) t)
-but is expected to have type
-  forall {ι : Type.{u3}} {X : Type.{u2}} {M : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {f : ι -> X -> M} (l : List.{u3} ι) {t : Set.{u2} X}, (forall (i : ι), (Membership.mem.{u3, u3} ι (List.{u3} ι) (List.instMembershipList.{u3} ι) i l) -> (ContinuousOn.{u2, u1} X M _inst_1 _inst_2 (f i) t)) -> (ContinuousOn.{u2, u1} X M _inst_1 _inst_2 (fun (a : X) => List.prod.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Monoid.toOne.{u1} M _inst_3) (List.map.{u3, u1} ι M (fun (i : ι) => f i a) l)) t)
-Case conversion may be inaccurate. Consider using '#align continuous_on_list_prod continuousOn_list_prodₓ'. -/
 @[to_additive]
 theorem continuousOn_list_prod {f : ι → X → M} (l : List ι) {t : Set X}
     (h : ∀ i ∈ l, ContinuousOn (f i) t) : ContinuousOn (fun a => (l.map fun i => f i a).Prod) t :=
@@ -817,12 +565,6 @@ theorem continuousOn_list_prod {f : ι → X → M} (l : List ι) {t : Set X}
 #align continuous_on_list_prod continuousOn_list_prod
 #align continuous_on_list_sum continuousOn_list_sum
 
-/- warning: continuous_pow -> continuous_pow is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (n : Nat), Continuous.{u1, u1} M M _inst_2 _inst_2 (fun (a : M) => HPow.hPow.{u1, 0, u1} M Nat M (instHPow.{u1, 0} M Nat (Monoid.Pow.{u1} M _inst_3)) a n)
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (n : Nat), Continuous.{u1, u1} M M _inst_2 _inst_2 (fun (a : M) => HPow.hPow.{u1, 0, u1} M Nat M (instHPow.{u1, 0} M Nat (Monoid.Pow.{u1} M _inst_3)) a n)
-Case conversion may be inaccurate. Consider using '#align continuous_pow continuous_powₓ'. -/
 @[continuity, to_additive]
 theorem continuous_pow : ∀ n : ℕ, Continuous fun a : M => a ^ n
   | 0 => by simpa using continuous_const
@@ -830,70 +572,34 @@ theorem continuous_pow : ∀ n : ℕ, Continuous fun a : M => a ^ n
 #align continuous_pow continuous_pow
 #align continuous_nsmul continuous_nsmul
 
-/- warning: add_monoid.has_continuous_const_smul_nat -> AddMonoid.continuousConstSMul_nat is a dubious translation:
-lean 3 declaration is
-  forall {A : Type.{u1}} [_inst_5 : AddMonoid.{u1} A] [_inst_6 : TopologicalSpace.{u1} A] [_inst_7 : ContinuousAdd.{u1} A _inst_6 (AddZeroClass.toHasAdd.{u1} A (AddMonoid.toAddZeroClass.{u1} A _inst_5))], ContinuousConstSMul.{0, u1} Nat A _inst_6 (AddMonoid.SMul.{u1} A _inst_5)
-but is expected to have type
-  forall {A : Type.{u1}} [_inst_5 : AddMonoid.{u1} A] [_inst_6 : TopologicalSpace.{u1} A] [_inst_7 : ContinuousAdd.{u1} A _inst_6 (AddZeroClass.toAdd.{u1} A (AddMonoid.toAddZeroClass.{u1} A _inst_5))], ContinuousConstSMul.{0, u1} Nat A _inst_6 (AddMonoid.SMul.{u1} A _inst_5)
-Case conversion may be inaccurate. Consider using '#align add_monoid.has_continuous_const_smul_nat AddMonoid.continuousConstSMul_natₓ'. -/
 instance AddMonoid.continuousConstSMul_nat {A} [AddMonoid A] [TopologicalSpace A]
     [ContinuousAdd A] : ContinuousConstSMul ℕ A :=
   ⟨continuous_nsmul⟩
 #align add_monoid.has_continuous_const_smul_nat AddMonoid.continuousConstSMul_nat
 
-/- warning: add_monoid.has_continuous_smul_nat -> AddMonoid.continuousSMul_nat is a dubious translation:
-lean 3 declaration is
-  forall {A : Type.{u1}} [_inst_5 : AddMonoid.{u1} A] [_inst_6 : TopologicalSpace.{u1} A] [_inst_7 : ContinuousAdd.{u1} A _inst_6 (AddZeroClass.toHasAdd.{u1} A (AddMonoid.toAddZeroClass.{u1} A _inst_5))], ContinuousSMul.{0, u1} Nat A (AddMonoid.SMul.{u1} A _inst_5) Nat.topologicalSpace _inst_6
-but is expected to have type
-  forall {A : Type.{u1}} [_inst_5 : AddMonoid.{u1} A] [_inst_6 : TopologicalSpace.{u1} A] [_inst_7 : ContinuousAdd.{u1} A _inst_6 (AddZeroClass.toAdd.{u1} A (AddMonoid.toAddZeroClass.{u1} A _inst_5))], ContinuousSMul.{0, u1} Nat A (AddMonoid.SMul.{u1} A _inst_5) instTopologicalSpaceNat _inst_6
-Case conversion may be inaccurate. Consider using '#align add_monoid.has_continuous_smul_nat AddMonoid.continuousSMul_natₓ'. -/
 instance AddMonoid.continuousSMul_nat {A} [AddMonoid A] [TopologicalSpace A] [ContinuousAdd A] :
     ContinuousSMul ℕ A :=
   ⟨continuous_uncurry_of_discreteTopology continuous_nsmul⟩
 #align add_monoid.has_continuous_smul_nat AddMonoid.continuousSMul_nat
 
-/- warning: continuous.pow -> Continuous.pow is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {M : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} M] [_inst_3 : Monoid.{u2} M] [_inst_4 : ContinuousMul.{u2} M _inst_2 (MulOneClass.toHasMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_3))] {f : X -> M}, (Continuous.{u1, u2} X M _inst_1 _inst_2 f) -> (forall (n : Nat), Continuous.{u1, u2} X M _inst_1 _inst_2 (fun (b : X) => HPow.hPow.{u2, 0, u2} M Nat M (instHPow.{u2, 0} M Nat (Monoid.Pow.{u2} M _inst_3)) (f b) n))
-but is expected to have type
-  forall {X : Type.{u2}} {M : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {f : X -> M}, (Continuous.{u2, u1} X M _inst_1 _inst_2 f) -> (forall (n : Nat), Continuous.{u2, u1} X M _inst_1 _inst_2 (fun (b : X) => HPow.hPow.{u1, 0, u1} M Nat M (instHPow.{u1, 0} M Nat (Monoid.Pow.{u1} M _inst_3)) (f b) n))
-Case conversion may be inaccurate. Consider using '#align continuous.pow Continuous.powₓ'. -/
 @[continuity, to_additive Continuous.nsmul]
 theorem Continuous.pow {f : X → M} (h : Continuous f) (n : ℕ) : Continuous fun b => f b ^ n :=
   (continuous_pow n).comp h
 #align continuous.pow Continuous.pow
 #align continuous.nsmul Continuous.nsmul
 
-/- warning: continuous_on_pow -> continuousOn_pow is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {s : Set.{u1} M} (n : Nat), ContinuousOn.{u1, u1} M M _inst_2 _inst_2 (fun (x : M) => HPow.hPow.{u1, 0, u1} M Nat M (instHPow.{u1, 0} M Nat (Monoid.Pow.{u1} M _inst_3)) x n) s
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {s : Set.{u1} M} (n : Nat), ContinuousOn.{u1, u1} M M _inst_2 _inst_2 (fun (x : M) => HPow.hPow.{u1, 0, u1} M Nat M (instHPow.{u1, 0} M Nat (Monoid.Pow.{u1} M _inst_3)) x n) s
-Case conversion may be inaccurate. Consider using '#align continuous_on_pow continuousOn_powₓ'. -/
 @[to_additive]
 theorem continuousOn_pow {s : Set M} (n : ℕ) : ContinuousOn (fun x => x ^ n) s :=
   (continuous_pow n).ContinuousOn
 #align continuous_on_pow continuousOn_pow
 #align continuous_on_nsmul continuousOn_nsmul
 
-/- warning: continuous_at_pow -> continuousAt_pow is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (x : M) (n : Nat), ContinuousAt.{u1, u1} M M _inst_2 _inst_2 (fun (x : M) => HPow.hPow.{u1, 0, u1} M Nat M (instHPow.{u1, 0} M Nat (Monoid.Pow.{u1} M _inst_3)) x n) x
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (x : M) (n : Nat), ContinuousAt.{u1, u1} M M _inst_2 _inst_2 (fun (x : M) => HPow.hPow.{u1, 0, u1} M Nat M (instHPow.{u1, 0} M Nat (Monoid.Pow.{u1} M _inst_3)) x n) x
-Case conversion may be inaccurate. Consider using '#align continuous_at_pow continuousAt_powₓ'. -/
 @[to_additive]
 theorem continuousAt_pow (x : M) (n : ℕ) : ContinuousAt (fun x => x ^ n) x :=
   (continuous_pow n).ContinuousAt
 #align continuous_at_pow continuousAt_pow
 #align continuous_at_nsmul continuousAt_nsmul
 
-/- warning: filter.tendsto.pow -> Filter.Tendsto.pow is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {M : Type.{u2}} [_inst_2 : TopologicalSpace.{u2} M] [_inst_3 : Monoid.{u2} M] [_inst_4 : ContinuousMul.{u2} M _inst_2 (MulOneClass.toHasMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_3))] {l : Filter.{u1} α} {f : α -> M} {x : M}, (Filter.Tendsto.{u1, u2} α M f l (nhds.{u2} M _inst_2 x)) -> (forall (n : Nat), Filter.Tendsto.{u1, u2} α M (fun (x : α) => HPow.hPow.{u2, 0, u2} M Nat M (instHPow.{u2, 0} M Nat (Monoid.Pow.{u2} M _inst_3)) (f x) n) l (nhds.{u2} M _inst_2 (HPow.hPow.{u2, 0, u2} M Nat M (instHPow.{u2, 0} M Nat (Monoid.Pow.{u2} M _inst_3)) x n)))
-but is expected to have type
-  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {l : Filter.{u2} α} {f : α -> M} {x : M}, (Filter.Tendsto.{u2, u1} α M f l (nhds.{u1} M _inst_2 x)) -> (forall (n : Nat), Filter.Tendsto.{u2, u1} α M (fun (x : α) => HPow.hPow.{u1, 0, u1} M Nat M (instHPow.{u1, 0} M Nat (Monoid.Pow.{u1} M _inst_3)) (f x) n) l (nhds.{u1} M _inst_2 (HPow.hPow.{u1, 0, u1} M Nat M (instHPow.{u1, 0} M Nat (Monoid.Pow.{u1} M _inst_3)) x n)))
-Case conversion may be inaccurate. Consider using '#align filter.tendsto.pow Filter.Tendsto.powₓ'. -/
 @[to_additive Filter.Tendsto.nsmul]
 theorem Filter.Tendsto.pow {l : Filter α} {f : α → M} {x : M} (hf : Tendsto f l (𝓝 x)) (n : ℕ) :
     Tendsto (fun x => f x ^ n) l (𝓝 (x ^ n)) :=
@@ -901,12 +607,6 @@ theorem Filter.Tendsto.pow {l : Filter α} {f : α → M} {x : M} (hf : Tendsto
 #align filter.tendsto.pow Filter.Tendsto.pow
 #align filter.tendsto.nsmul Filter.Tendsto.nsmul
 
-/- warning: continuous_within_at.pow -> ContinuousWithinAt.pow is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {M : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} M] [_inst_3 : Monoid.{u2} M] [_inst_4 : ContinuousMul.{u2} M _inst_2 (MulOneClass.toHasMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_3))] {f : X -> M} {x : X} {s : Set.{u1} X}, (ContinuousWithinAt.{u1, u2} X M _inst_1 _inst_2 f s x) -> (forall (n : Nat), ContinuousWithinAt.{u1, u2} X M _inst_1 _inst_2 (fun (x : X) => HPow.hPow.{u2, 0, u2} M Nat M (instHPow.{u2, 0} M Nat (Monoid.Pow.{u2} M _inst_3)) (f x) n) s x)
-but is expected to have type
-  forall {X : Type.{u2}} {M : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {f : X -> M} {x : X} {s : Set.{u2} X}, (ContinuousWithinAt.{u2, u1} X M _inst_1 _inst_2 f s x) -> (forall (n : Nat), ContinuousWithinAt.{u2, u1} X M _inst_1 _inst_2 (fun (x : X) => HPow.hPow.{u1, 0, u1} M Nat M (instHPow.{u1, 0} M Nat (Monoid.Pow.{u1} M _inst_3)) (f x) n) s x)
-Case conversion may be inaccurate. Consider using '#align continuous_within_at.pow ContinuousWithinAt.powₓ'. -/
 @[to_additive ContinuousWithinAt.nsmul]
 theorem ContinuousWithinAt.pow {f : X → M} {x : X} {s : Set X} (hf : ContinuousWithinAt f s x)
     (n : ℕ) : ContinuousWithinAt (fun x => f x ^ n) s x :=
@@ -914,12 +614,6 @@ theorem ContinuousWithinAt.pow {f : X → M} {x : X} {s : Set X} (hf : Continuou
 #align continuous_within_at.pow ContinuousWithinAt.pow
 #align continuous_within_at.nsmul ContinuousWithinAt.nsmul
 
-/- warning: continuous_at.pow -> ContinuousAt.pow is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {M : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} M] [_inst_3 : Monoid.{u2} M] [_inst_4 : ContinuousMul.{u2} M _inst_2 (MulOneClass.toHasMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_3))] {f : X -> M} {x : X}, (ContinuousAt.{u1, u2} X M _inst_1 _inst_2 f x) -> (forall (n : Nat), ContinuousAt.{u1, u2} X M _inst_1 _inst_2 (fun (x : X) => HPow.hPow.{u2, 0, u2} M Nat M (instHPow.{u2, 0} M Nat (Monoid.Pow.{u2} M _inst_3)) (f x) n) x)
-but is expected to have type
-  forall {X : Type.{u2}} {M : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {f : X -> M} {x : X}, (ContinuousAt.{u2, u1} X M _inst_1 _inst_2 f x) -> (forall (n : Nat), ContinuousAt.{u2, u1} X M _inst_1 _inst_2 (fun (x : X) => HPow.hPow.{u1, 0, u1} M Nat M (instHPow.{u1, 0} M Nat (Monoid.Pow.{u1} M _inst_3)) (f x) n) x)
-Case conversion may be inaccurate. Consider using '#align continuous_at.pow ContinuousAt.powₓ'. -/
 @[to_additive ContinuousAt.nsmul]
 theorem ContinuousAt.pow {f : X → M} {x : X} (hf : ContinuousAt f x) (n : ℕ) :
     ContinuousAt (fun x => f x ^ n) x :=
@@ -927,24 +621,12 @@ theorem ContinuousAt.pow {f : X → M} {x : X} (hf : ContinuousAt f x) (n : ℕ)
 #align continuous_at.pow ContinuousAt.pow
 #align continuous_at.nsmul ContinuousAt.nsmul
 
-/- warning: continuous_on.pow -> ContinuousOn.pow is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {M : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} M] [_inst_3 : Monoid.{u2} M] [_inst_4 : ContinuousMul.{u2} M _inst_2 (MulOneClass.toHasMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_3))] {f : X -> M} {s : Set.{u1} X}, (ContinuousOn.{u1, u2} X M _inst_1 _inst_2 f s) -> (forall (n : Nat), ContinuousOn.{u1, u2} X M _inst_1 _inst_2 (fun (x : X) => HPow.hPow.{u2, 0, u2} M Nat M (instHPow.{u2, 0} M Nat (Monoid.Pow.{u2} M _inst_3)) (f x) n) s)
-but is expected to have type
-  forall {X : Type.{u2}} {M : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {f : X -> M} {s : Set.{u2} X}, (ContinuousOn.{u2, u1} X M _inst_1 _inst_2 f s) -> (forall (n : Nat), ContinuousOn.{u2, u1} X M _inst_1 _inst_2 (fun (x : X) => HPow.hPow.{u1, 0, u1} M Nat M (instHPow.{u1, 0} M Nat (Monoid.Pow.{u1} M _inst_3)) (f x) n) s)
-Case conversion may be inaccurate. Consider using '#align continuous_on.pow ContinuousOn.powₓ'. -/
 @[to_additive ContinuousOn.nsmul]
 theorem ContinuousOn.pow {f : X → M} {s : Set X} (hf : ContinuousOn f s) (n : ℕ) :
     ContinuousOn (fun x => f x ^ n) s := fun x hx => (hf x hx).pow n
 #align continuous_on.pow ContinuousOn.pow
 #align continuous_on.nsmul ContinuousOn.nsmul
 
-/- warning: filter.tendsto_cocompact_mul_left -> Filter.tendsto_cocompact_mul_left is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {a : M} {b : M}, (Eq.{succ u1} M (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) b a) (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)))))) -> (Filter.Tendsto.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) a x) (Filter.cocompact.{u1} M _inst_2) (Filter.cocompact.{u1} M _inst_2))
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {a : M} {b : M}, (Eq.{succ u1} M (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) b a) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_3)))) -> (Filter.Tendsto.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) a x) (Filter.cocompact.{u1} M _inst_2) (Filter.cocompact.{u1} M _inst_2))
-Case conversion may be inaccurate. Consider using '#align filter.tendsto_cocompact_mul_left Filter.tendsto_cocompact_mul_leftₓ'. -/
 /-- Left-multiplication by a left-invertible element of a topological monoid is proper, i.e.,
 inverse images of compact sets are compact. -/
 theorem Filter.tendsto_cocompact_mul_left {a b : M} (ha : b * a = 1) :
@@ -956,12 +638,6 @@ theorem Filter.tendsto_cocompact_mul_left {a b : M} (ha : b * a = 1) :
   simp [ha]
 #align filter.tendsto_cocompact_mul_left Filter.tendsto_cocompact_mul_left
 
-/- warning: filter.tendsto_cocompact_mul_right -> Filter.tendsto_cocompact_mul_right is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {a : M} {b : M}, (Eq.{succ u1} M (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) a b) (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)))))) -> (Filter.Tendsto.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) x a) (Filter.cocompact.{u1} M _inst_2) (Filter.cocompact.{u1} M _inst_2))
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {a : M} {b : M}, (Eq.{succ u1} M (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) a b) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_3)))) -> (Filter.Tendsto.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) x a) (Filter.cocompact.{u1} M _inst_2) (Filter.cocompact.{u1} M _inst_2))
-Case conversion may be inaccurate. Consider using '#align filter.tendsto_cocompact_mul_right Filter.tendsto_cocompact_mul_rightₓ'. -/
 /-- Right-multiplication by a right-invertible element of a topological monoid is proper, i.e.,
 inverse images of compact sets are compact. -/
 theorem Filter.tendsto_cocompact_mul_right {a b : M} (ha : a * b = 1) :
@@ -973,12 +649,6 @@ theorem Filter.tendsto_cocompact_mul_right {a b : M} (ha : a * b = 1) :
   simp [ha]
 #align filter.tendsto_cocompact_mul_right Filter.tendsto_cocompact_mul_right
 
-/- warning: is_scalar_tower.has_continuous_const_smul -> IsScalarTower.continuousConstSMul is a dubious translation:
-lean 3 declaration is
-  forall {R : Type.{u1}} {A : Type.{u2}} [_inst_5 : Monoid.{u2} A] [_inst_6 : SMul.{u1, u2} R A] [_inst_7 : IsScalarTower.{u1, u2, u2} R A A _inst_6 (Mul.toSMul.{u2} A (MulOneClass.toHasMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_5))) _inst_6] [_inst_8 : TopologicalSpace.{u2} A] [_inst_9 : ContinuousMul.{u2} A _inst_8 (MulOneClass.toHasMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_5))], ContinuousConstSMul.{u1, u2} R A _inst_8 _inst_6
-but is expected to have type
-  forall {R : Type.{u1}} {A : Type.{u2}} [_inst_5 : Monoid.{u2} A] [_inst_6 : SMul.{u1, u2} R A] [_inst_7 : IsScalarTower.{u1, u2, u2} R A A _inst_6 (MulAction.toSMul.{u2, u2} A A _inst_5 (Monoid.toMulAction.{u2} A _inst_5)) _inst_6] [_inst_8 : TopologicalSpace.{u2} A] [_inst_9 : ContinuousMul.{u2} A _inst_8 (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_5))], ContinuousConstSMul.{u1, u2} R A _inst_8 _inst_6
-Case conversion may be inaccurate. Consider using '#align is_scalar_tower.has_continuous_const_smul IsScalarTower.continuousConstSMulₓ'. -/
 /-- If `R` acts on `A` via `A`, then continuous multiplication implies continuous scalar
 multiplication by constants.
 
@@ -994,12 +664,6 @@ instance (priority := 100) IsScalarTower.continuousConstSMul {R A : Type _} [Mon
 #align is_scalar_tower.has_continuous_const_smul IsScalarTower.continuousConstSMul
 #align vadd_assoc_class.has_continuous_const_vadd VAddAssocClass.continuousConstVAdd
 
-/- warning: smul_comm_class.has_continuous_const_smul -> SMulCommClass.continuousConstSMul is a dubious translation:
-lean 3 declaration is
-  forall {R : Type.{u1}} {A : Type.{u2}} [_inst_5 : Monoid.{u2} A] [_inst_6 : SMul.{u1, u2} R A] [_inst_7 : SMulCommClass.{u1, u2, u2} R A A _inst_6 (Mul.toSMul.{u2} A (MulOneClass.toHasMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_5)))] [_inst_8 : TopologicalSpace.{u2} A] [_inst_9 : ContinuousMul.{u2} A _inst_8 (MulOneClass.toHasMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_5))], ContinuousConstSMul.{u1, u2} R A _inst_8 _inst_6
-but is expected to have type
-  forall {R : Type.{u1}} {A : Type.{u2}} [_inst_5 : Monoid.{u2} A] [_inst_6 : SMul.{u1, u2} R A] [_inst_7 : SMulCommClass.{u1, u2, u2} R A A _inst_6 (MulAction.toSMul.{u2, u2} A A _inst_5 (Monoid.toMulAction.{u2} A _inst_5))] [_inst_8 : TopologicalSpace.{u2} A] [_inst_9 : ContinuousMul.{u2} A _inst_8 (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_5))], ContinuousConstSMul.{u1, u2} R A _inst_8 _inst_6
-Case conversion may be inaccurate. Consider using '#align smul_comm_class.has_continuous_const_smul SMulCommClass.continuousConstSMulₓ'. -/
 /-- If the action of `R` on `A` commutes with left-multiplication, then continuous multiplication
 implies continuous scalar multiplication by constants.
 
@@ -1044,12 +708,6 @@ instance : ContinuousMul αˣ :=
 
 end Units
 
-/- warning: continuous.units_map -> Continuous.units_map is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_2 : Monoid.{u1} M] [_inst_3 : Monoid.{u2} N] [_inst_4 : TopologicalSpace.{u1} M] [_inst_5 : TopologicalSpace.{u2} N] (f : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_2) (Monoid.toMulOneClass.{u2} N _inst_3)), (Continuous.{u1, u2} M N _inst_4 _inst_5 (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_2) (Monoid.toMulOneClass.{u2} N _inst_3)) (fun (_x : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_2) (Monoid.toMulOneClass.{u2} N _inst_3)) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_2) (Monoid.toMulOneClass.{u2} N _inst_3)) f)) -> (Continuous.{u1, u2} (Units.{u1} M _inst_2) (Units.{u2} N _inst_3) (Units.topologicalSpace.{u1} M _inst_4 _inst_2) (Units.topologicalSpace.{u2} N _inst_5 _inst_3) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (Units.{u1} M _inst_2) (Units.{u2} N _inst_3) (Units.mulOneClass.{u1} M _inst_2) (Units.mulOneClass.{u2} N _inst_3)) (fun (_x : MonoidHom.{u1, u2} (Units.{u1} M _inst_2) (Units.{u2} N _inst_3) (Units.mulOneClass.{u1} M _inst_2) (Units.mulOneClass.{u2} N _inst_3)) => (Units.{u1} M _inst_2) -> (Units.{u2} N _inst_3)) (MonoidHom.hasCoeToFun.{u1, u2} (Units.{u1} M _inst_2) (Units.{u2} N _inst_3) (Units.mulOneClass.{u1} M _inst_2) (Units.mulOneClass.{u2} N _inst_3)) (Units.map.{u1, u2} M N _inst_2 _inst_3 f)))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_2 : Monoid.{u2} M] [_inst_3 : Monoid.{u1} N] [_inst_4 : TopologicalSpace.{u2} M] [_inst_5 : TopologicalSpace.{u1} N] (f : MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)), (Continuous.{u2, u1} M N _inst_4 _inst_5 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_2)) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)))) f)) -> (Continuous.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instTopologicalSpaceUnits.{u2} M _inst_4 _inst_2) (Units.instTopologicalSpaceUnits.{u1} N _inst_5 _inst_3) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (fun (_x : Units.{u2} M _inst_2) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Units.{u2} M _inst_2) => Units.{u1} N _inst_3) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (MulOneClass.toMul.{u2} (Units.{u2} M _inst_2) (Units.instMulOneClassUnits.{u2} M _inst_2)) (MulOneClass.toMul.{u1} (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u1} N _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3) (MonoidHom.monoidHomClass.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)))) (Units.map.{u2, u1} M N _inst_2 _inst_3 f)))
-Case conversion may be inaccurate. Consider using '#align continuous.units_map Continuous.units_mapₓ'. -/
 @[to_additive]
 theorem Continuous.units_map [Monoid M] [Monoid N] [TopologicalSpace M] [TopologicalSpace N]
     (f : M →* N) (hf : Continuous f) : Continuous (Units.map f) :=
@@ -1061,12 +719,6 @@ section
 
 variable [TopologicalSpace M] [CommMonoid M]
 
-/- warning: submonoid.mem_nhds_one -> Submonoid.mem_nhds_one is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : CommMonoid.{u1} M] (S : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3))), (IsOpen.{u1} M _inst_2 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3))) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3))) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3))) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3))) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3)))))) S)) -> (Membership.Mem.{u1, u1} (Set.{u1} M) (Filter.{u1} M) (Filter.hasMem.{u1} M) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3))) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3))) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3))) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3))) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3)))))) S) (nhds.{u1} M _inst_2 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3))))))))
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : CommMonoid.{u1} M] (S : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3))), (IsOpen.{u1} M _inst_2 (SetLike.coe.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3))) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3))) S)) -> (Membership.mem.{u1, u1} (Set.{u1} M) (Filter.{u1} M) (instMembershipSetFilter.{u1} M) (SetLike.coe.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3))) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3))) S) (nhds.{u1} M _inst_2 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3))))))
-Case conversion may be inaccurate. Consider using '#align submonoid.mem_nhds_one Submonoid.mem_nhds_oneₓ'. -/
 @[to_additive]
 theorem Submonoid.mem_nhds_one (S : Submonoid M) (oS : IsOpen (S : Set M)) :
     (S : Set M) ∈ 𝓝 (1 : M) :=
@@ -1076,12 +728,6 @@ theorem Submonoid.mem_nhds_one (S : Submonoid M) (oS : IsOpen (S : Set M)) :
 
 variable [ContinuousMul M]
 
-/- warning: tendsto_multiset_prod -> tendsto_multiset_prod is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {α : Type.{u2}} {M : Type.{u3}} [_inst_2 : TopologicalSpace.{u3} M] [_inst_3 : CommMonoid.{u3} M] [_inst_4 : ContinuousMul.{u3} M _inst_2 (MulOneClass.toHasMul.{u3} M (Monoid.toMulOneClass.{u3} M (CommMonoid.toMonoid.{u3} M _inst_3)))] {f : ι -> α -> M} {x : Filter.{u2} α} {a : ι -> M} (s : Multiset.{u1} ι), (forall (i : ι), (Membership.Mem.{u1, u1} ι (Multiset.{u1} ι) (Multiset.hasMem.{u1} ι) i s) -> (Filter.Tendsto.{u2, u3} α M (f i) x (nhds.{u3} M _inst_2 (a i)))) -> (Filter.Tendsto.{u2, u3} α M (fun (b : α) => Multiset.prod.{u3} M _inst_3 (Multiset.map.{u1, u3} ι M (fun (c : ι) => f c b) s)) x (nhds.{u3} M _inst_2 (Multiset.prod.{u3} M _inst_3 (Multiset.map.{u1, u3} ι M a s))))
-but is expected to have type
-  forall {ι : Type.{u2}} {α : Type.{u3}} {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : CommMonoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3)))] {f : ι -> α -> M} {x : Filter.{u3} α} {a : ι -> M} (s : Multiset.{u2} ι), (forall (i : ι), (Membership.mem.{u2, u2} ι (Multiset.{u2} ι) (Multiset.instMembershipMultiset.{u2} ι) i s) -> (Filter.Tendsto.{u3, u1} α M (f i) x (nhds.{u1} M _inst_2 (a i)))) -> (Filter.Tendsto.{u3, u1} α M (fun (b : α) => Multiset.prod.{u1} M _inst_3 (Multiset.map.{u2, u1} ι M (fun (c : ι) => f c b) s)) x (nhds.{u1} M _inst_2 (Multiset.prod.{u1} M _inst_3 (Multiset.map.{u2, u1} ι M a s))))
-Case conversion may be inaccurate. Consider using '#align tendsto_multiset_prod tendsto_multiset_prodₓ'. -/
 @[to_additive]
 theorem tendsto_multiset_prod {f : ι → α → M} {x : Filter α} {a : ι → M} (s : Multiset ι) :
     (∀ i ∈ s, Tendsto (f i) x (𝓝 (a i))) →
@@ -1090,12 +736,6 @@ theorem tendsto_multiset_prod {f : ι → α → M} {x : Filter α} {a : ι →
 #align tendsto_multiset_prod tendsto_multiset_prod
 #align tendsto_multiset_sum tendsto_multiset_sum
 
-/- warning: tendsto_finset_prod -> tendsto_finset_prod is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {α : Type.{u2}} {M : Type.{u3}} [_inst_2 : TopologicalSpace.{u3} M] [_inst_3 : CommMonoid.{u3} M] [_inst_4 : ContinuousMul.{u3} M _inst_2 (MulOneClass.toHasMul.{u3} M (Monoid.toMulOneClass.{u3} M (CommMonoid.toMonoid.{u3} M _inst_3)))] {f : ι -> α -> M} {x : Filter.{u2} α} {a : ι -> M} (s : Finset.{u1} ι), (forall (i : ι), (Membership.Mem.{u1, u1} ι (Finset.{u1} ι) (Finset.hasMem.{u1} ι) i s) -> (Filter.Tendsto.{u2, u3} α M (f i) x (nhds.{u3} M _inst_2 (a i)))) -> (Filter.Tendsto.{u2, u3} α M (fun (b : α) => Finset.prod.{u3, u1} M ι _inst_3 s (fun (c : ι) => f c b)) x (nhds.{u3} M _inst_2 (Finset.prod.{u3, u1} M ι _inst_3 s (fun (c : ι) => a c))))
-but is expected to have type
-  forall {ι : Type.{u2}} {α : Type.{u3}} {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : CommMonoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3)))] {f : ι -> α -> M} {x : Filter.{u3} α} {a : ι -> M} (s : Finset.{u2} ι), (forall (i : ι), (Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) i s) -> (Filter.Tendsto.{u3, u1} α M (f i) x (nhds.{u1} M _inst_2 (a i)))) -> (Filter.Tendsto.{u3, u1} α M (fun (b : α) => Finset.prod.{u1, u2} M ι _inst_3 s (fun (c : ι) => f c b)) x (nhds.{u1} M _inst_2 (Finset.prod.{u1, u2} M ι _inst_3 s (fun (c : ι) => a c))))
-Case conversion may be inaccurate. Consider using '#align tendsto_finset_prod tendsto_finset_prodₓ'. -/
 @[to_additive]
 theorem tendsto_finset_prod {f : ι → α → M} {x : Filter α} {a : ι → M} (s : Finset ι) :
     (∀ i ∈ s, Tendsto (f i) x (𝓝 (a i))) →
@@ -1104,12 +744,6 @@ theorem tendsto_finset_prod {f : ι → α → M} {x : Filter α} {a : ι → M}
 #align tendsto_finset_prod tendsto_finset_prod
 #align tendsto_finset_sum tendsto_finset_sum
 
-/- warning: continuous_multiset_prod -> continuous_multiset_prod is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {X : Type.{u2}} {M : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u3} M] [_inst_3 : CommMonoid.{u3} M] [_inst_4 : ContinuousMul.{u3} M _inst_2 (MulOneClass.toHasMul.{u3} M (Monoid.toMulOneClass.{u3} M (CommMonoid.toMonoid.{u3} M _inst_3)))] {f : ι -> X -> M} (s : Multiset.{u1} ι), (forall (i : ι), (Membership.Mem.{u1, u1} ι (Multiset.{u1} ι) (Multiset.hasMem.{u1} ι) i s) -> (Continuous.{u2, u3} X M _inst_1 _inst_2 (f i))) -> (Continuous.{u2, u3} X M _inst_1 _inst_2 (fun (a : X) => Multiset.prod.{u3} M _inst_3 (Multiset.map.{u1, u3} ι M (fun (i : ι) => f i a) s)))
-but is expected to have type
-  forall {ι : Type.{u3}} {X : Type.{u2}} {M : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : CommMonoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3)))] {f : ι -> X -> M} (s : Multiset.{u3} ι), (forall (i : ι), (Membership.mem.{u3, u3} ι (Multiset.{u3} ι) (Multiset.instMembershipMultiset.{u3} ι) i s) -> (Continuous.{u2, u1} X M _inst_1 _inst_2 (f i))) -> (Continuous.{u2, u1} X M _inst_1 _inst_2 (fun (a : X) => Multiset.prod.{u1} M _inst_3 (Multiset.map.{u3, u1} ι M (fun (i : ι) => f i a) s)))
-Case conversion may be inaccurate. Consider using '#align continuous_multiset_prod continuous_multiset_prodₓ'. -/
 @[continuity, to_additive]
 theorem continuous_multiset_prod {f : ι → X → M} (s : Multiset ι) :
     (∀ i ∈ s, Continuous (f i)) → Continuous fun a => (s.map fun i => f i a).Prod := by
@@ -1117,12 +751,6 @@ theorem continuous_multiset_prod {f : ι → X → M} (s : Multiset ι) :
 #align continuous_multiset_prod continuous_multiset_prod
 #align continuous_multiset_sum continuous_multiset_sum
 
-/- warning: continuous_on_multiset_prod -> continuousOn_multiset_prod is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {X : Type.{u2}} {M : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u3} M] [_inst_3 : CommMonoid.{u3} M] [_inst_4 : ContinuousMul.{u3} M _inst_2 (MulOneClass.toHasMul.{u3} M (Monoid.toMulOneClass.{u3} M (CommMonoid.toMonoid.{u3} M _inst_3)))] {f : ι -> X -> M} (s : Multiset.{u1} ι) {t : Set.{u2} X}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Multiset.{u1} ι) (Multiset.hasMem.{u1} ι) i s) -> (ContinuousOn.{u2, u3} X M _inst_1 _inst_2 (f i) t)) -> (ContinuousOn.{u2, u3} X M _inst_1 _inst_2 (fun (a : X) => Multiset.prod.{u3} M _inst_3 (Multiset.map.{u1, u3} ι M (fun (i : ι) => f i a) s)) t)
-but is expected to have type
-  forall {ι : Type.{u3}} {X : Type.{u2}} {M : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : CommMonoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3)))] {f : ι -> X -> M} (s : Multiset.{u3} ι) {t : Set.{u2} X}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Multiset.{u3} ι) (Multiset.instMembershipMultiset.{u3} ι) i s) -> (ContinuousOn.{u2, u1} X M _inst_1 _inst_2 (f i) t)) -> (ContinuousOn.{u2, u1} X M _inst_1 _inst_2 (fun (a : X) => Multiset.prod.{u1} M _inst_3 (Multiset.map.{u3, u1} ι M (fun (i : ι) => f i a) s)) t)
-Case conversion may be inaccurate. Consider using '#align continuous_on_multiset_prod continuousOn_multiset_prodₓ'. -/
 @[to_additive]
 theorem continuousOn_multiset_prod {f : ι → X → M} (s : Multiset ι) {t : Set X} :
     (∀ i ∈ s, ContinuousOn (f i) t) → ContinuousOn (fun a => (s.map fun i => f i a).Prod) t := by
@@ -1130,12 +758,6 @@ theorem continuousOn_multiset_prod {f : ι → X → M} (s : Multiset ι) {t : S
 #align continuous_on_multiset_prod continuousOn_multiset_prod
 #align continuous_on_multiset_sum continuousOn_multiset_sum
 
-/- warning: continuous_finset_prod -> continuous_finset_prod is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {X : Type.{u2}} {M : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u3} M] [_inst_3 : CommMonoid.{u3} M] [_inst_4 : ContinuousMul.{u3} M _inst_2 (MulOneClass.toHasMul.{u3} M (Monoid.toMulOneClass.{u3} M (CommMonoid.toMonoid.{u3} M _inst_3)))] {f : ι -> X -> M} (s : Finset.{u1} ι), (forall (i : ι), (Membership.Mem.{u1, u1} ι (Finset.{u1} ι) (Finset.hasMem.{u1} ι) i s) -> (Continuous.{u2, u3} X M _inst_1 _inst_2 (f i))) -> (Continuous.{u2, u3} X M _inst_1 _inst_2 (fun (a : X) => Finset.prod.{u3, u1} M ι _inst_3 s (fun (i : ι) => f i a)))
-but is expected to have type
-  forall {ι : Type.{u3}} {X : Type.{u2}} {M : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : CommMonoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3)))] {f : ι -> X -> M} (s : Finset.{u3} ι), (forall (i : ι), (Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i s) -> (Continuous.{u2, u1} X M _inst_1 _inst_2 (f i))) -> (Continuous.{u2, u1} X M _inst_1 _inst_2 (fun (a : X) => Finset.prod.{u1, u3} M ι _inst_3 s (fun (i : ι) => f i a)))
-Case conversion may be inaccurate. Consider using '#align continuous_finset_prod continuous_finset_prodₓ'. -/
 @[continuity, to_additive]
 theorem continuous_finset_prod {f : ι → X → M} (s : Finset ι) :
     (∀ i ∈ s, Continuous (f i)) → Continuous fun a => ∏ i in s, f i a :=
@@ -1143,12 +765,6 @@ theorem continuous_finset_prod {f : ι → X → M} (s : Finset ι) :
 #align continuous_finset_prod continuous_finset_prod
 #align continuous_finset_sum continuous_finset_sum
 
-/- warning: continuous_on_finset_prod -> continuousOn_finset_prod is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {X : Type.{u2}} {M : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u3} M] [_inst_3 : CommMonoid.{u3} M] [_inst_4 : ContinuousMul.{u3} M _inst_2 (MulOneClass.toHasMul.{u3} M (Monoid.toMulOneClass.{u3} M (CommMonoid.toMonoid.{u3} M _inst_3)))] {f : ι -> X -> M} (s : Finset.{u1} ι) {t : Set.{u2} X}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Finset.{u1} ι) (Finset.hasMem.{u1} ι) i s) -> (ContinuousOn.{u2, u3} X M _inst_1 _inst_2 (f i) t)) -> (ContinuousOn.{u2, u3} X M _inst_1 _inst_2 (fun (a : X) => Finset.prod.{u3, u1} M ι _inst_3 s (fun (i : ι) => f i a)) t)
-but is expected to have type
-  forall {ι : Type.{u3}} {X : Type.{u2}} {M : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : CommMonoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3)))] {f : ι -> X -> M} (s : Finset.{u3} ι) {t : Set.{u2} X}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i s) -> (ContinuousOn.{u2, u1} X M _inst_1 _inst_2 (f i) t)) -> (ContinuousOn.{u2, u1} X M _inst_1 _inst_2 (fun (a : X) => Finset.prod.{u1, u3} M ι _inst_3 s (fun (i : ι) => f i a)) t)
-Case conversion may be inaccurate. Consider using '#align continuous_on_finset_prod continuousOn_finset_prodₓ'. -/
 @[to_additive]
 theorem continuousOn_finset_prod {f : ι → X → M} (s : Finset ι) {t : Set X} :
     (∀ i ∈ s, ContinuousOn (f i) t) → ContinuousOn (fun a => ∏ i in s, f i a) t :=
@@ -1156,12 +772,6 @@ theorem continuousOn_finset_prod {f : ι → X → M} (s : Finset ι) {t : Set X
 #align continuous_on_finset_prod continuousOn_finset_prod
 #align continuous_on_finset_sum continuousOn_finset_sum
 
-/- warning: eventually_eq_prod -> eventuallyEq_prod is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {X : Type.{u2}} {M : Type.{u3}} [_inst_5 : CommMonoid.{u3} M] {s : Finset.{u1} ι} {l : Filter.{u2} X} {f : ι -> X -> M} {g : ι -> X -> M}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Finset.{u1} ι) (Finset.hasMem.{u1} ι) i s) -> (Filter.EventuallyEq.{u2, u3} X M l (f i) (g i))) -> (Filter.EventuallyEq.{u2, u3} X M l (Finset.prod.{max u2 u3, u1} (X -> M) ι (Pi.commMonoid.{u2, u3} X (fun (ᾰ : X) => M) (fun (i : X) => _inst_5)) s (fun (i : ι) => f i)) (Finset.prod.{max u2 u3, u1} (X -> M) ι (Pi.commMonoid.{u2, u3} X (fun (ᾰ : X) => M) (fun (i : X) => _inst_5)) s (fun (i : ι) => g i)))
-but is expected to have type
-  forall {ι : Type.{u1}} {X : Type.{u3}} {M : Type.{u2}} [_inst_5 : CommMonoid.{u2} M] {s : Finset.{u1} ι} {l : Filter.{u3} X} {f : ι -> X -> M} {g : ι -> X -> M}, (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (Filter.EventuallyEq.{u3, u2} X M l (f i) (g i))) -> (Filter.EventuallyEq.{u3, u2} X M l (Finset.prod.{max u3 u2, u1} (X -> M) ι (Pi.commMonoid.{u3, u2} X (fun (ᾰ : X) => M) (fun (i : X) => _inst_5)) s (fun (i : ι) => f i)) (Finset.prod.{max u3 u2, u1} (X -> M) ι (Pi.commMonoid.{u3, u2} X (fun (ᾰ : X) => M) (fun (i : X) => _inst_5)) s (fun (i : ι) => g i)))
-Case conversion may be inaccurate. Consider using '#align eventually_eq_prod eventuallyEq_prodₓ'. -/
 @[to_additive]
 theorem eventuallyEq_prod {X M : Type _} [CommMonoid M] {s : Finset ι} {l : Filter X}
     {f g : ι → X → M} (hs : ∀ i ∈ s, f i =ᶠ[l] g i) : (∏ i in s, f i) =ᶠ[l] ∏ i in s, g i :=
@@ -1175,12 +785,6 @@ theorem eventuallyEq_prod {X M : Type _} [CommMonoid M] {s : Finset ι} {l : Fil
 
 open Function
 
-/- warning: locally_finite.exists_finset_mul_support -> LocallyFinite.exists_finset_mulSupport is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {X : Type.{u2}} [_inst_1 : TopologicalSpace.{u2} X] {M : Type.{u3}} [_inst_5 : CommMonoid.{u3} M] {f : ι -> X -> M}, (LocallyFinite.{u1, u2} ι X _inst_1 (fun (i : ι) => Function.mulSupport.{u2, u3} X M (MulOneClass.toHasOne.{u3} M (Monoid.toMulOneClass.{u3} M (CommMonoid.toMonoid.{u3} M _inst_5))) (f i))) -> (forall (x₀ : X), Exists.{succ u1} (Finset.{u1} ι) (fun (I : Finset.{u1} ι) => Filter.Eventually.{u2} X (fun (x : X) => HasSubset.Subset.{u1} (Set.{u1} ι) (Set.hasSubset.{u1} ι) (Function.mulSupport.{u1, u3} ι M (MulOneClass.toHasOne.{u3} M (Monoid.toMulOneClass.{u3} M (CommMonoid.toMonoid.{u3} M _inst_5))) (fun (i : ι) => f i x)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} ι) (Set.{u1} ι) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} ι) (Set.{u1} ι) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} ι) (Set.{u1} ι) (Finset.Set.hasCoeT.{u1} ι))) I)) (nhds.{u2} X _inst_1 x₀)))
-but is expected to have type
-  forall {ι : Type.{u2}} {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] {M : Type.{u3}} [_inst_5 : CommMonoid.{u3} M] {f : ι -> X -> M}, (LocallyFinite.{u2, u1} ι X _inst_1 (fun (i : ι) => Function.mulSupport.{u1, u3} X M (Monoid.toOne.{u3} M (CommMonoid.toMonoid.{u3} M _inst_5)) (f i))) -> (forall (x₀ : X), Exists.{succ u2} (Finset.{u2} ι) (fun (I : Finset.{u2} ι) => Filter.Eventually.{u1} X (fun (x : X) => HasSubset.Subset.{u2} (Set.{u2} ι) (Set.instHasSubsetSet.{u2} ι) (Function.mulSupport.{u2, u3} ι M (Monoid.toOne.{u3} M (CommMonoid.toMonoid.{u3} M _inst_5)) (fun (i : ι) => f i x)) (Finset.toSet.{u2} ι I)) (nhds.{u1} X _inst_1 x₀)))
-Case conversion may be inaccurate. Consider using '#align locally_finite.exists_finset_mul_support LocallyFinite.exists_finset_mulSupportₓ'. -/
 @[to_additive]
 theorem LocallyFinite.exists_finset_mulSupport {M : Type _} [CommMonoid M] {f : ι → X → M}
     (hf : LocallyFinite fun i => mulSupport <| f i) (x₀ : X) :
@@ -1193,12 +797,6 @@ theorem LocallyFinite.exists_finset_mulSupport {M : Type _} [CommMonoid M] {f :
 #align locally_finite.exists_finset_mul_support LocallyFinite.exists_finset_mulSupport
 #align locally_finite.exists_finset_support LocallyFinite.exists_finset_support
 
-/- warning: finprod_eventually_eq_prod -> finprod_eventually_eq_prod is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {X : Type.{u2}} [_inst_1 : TopologicalSpace.{u2} X] {M : Type.{u3}} [_inst_5 : CommMonoid.{u3} M] {f : ι -> X -> M}, (LocallyFinite.{u1, u2} ι X _inst_1 (fun (i : ι) => Function.mulSupport.{u2, u3} X M (MulOneClass.toHasOne.{u3} M (Monoid.toMulOneClass.{u3} M (CommMonoid.toMonoid.{u3} M _inst_5))) (f i))) -> (forall (x : X), Exists.{succ u1} (Finset.{u1} ι) (fun (s : Finset.{u1} ι) => Filter.Eventually.{u2} X (fun (y : X) => Eq.{succ u3} M (finprod.{u3, succ u1} M ι _inst_5 (fun (i : ι) => f i y)) (Finset.prod.{u3, u1} M ι _inst_5 s (fun (i : ι) => f i y))) (nhds.{u2} X _inst_1 x)))
-but is expected to have type
-  forall {ι : Type.{u2}} {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] {M : Type.{u3}} [_inst_5 : CommMonoid.{u3} M] {f : ι -> X -> M}, (LocallyFinite.{u2, u1} ι X _inst_1 (fun (i : ι) => Function.mulSupport.{u1, u3} X M (Monoid.toOne.{u3} M (CommMonoid.toMonoid.{u3} M _inst_5)) (f i))) -> (forall (x : X), Exists.{succ u2} (Finset.{u2} ι) (fun (s : Finset.{u2} ι) => Filter.Eventually.{u1} X (fun (y : X) => Eq.{succ u3} M (finprod.{u3, succ u2} M ι _inst_5 (fun (i : ι) => f i y)) (Finset.prod.{u3, u2} M ι _inst_5 s (fun (i : ι) => f i y))) (nhds.{u1} X _inst_1 x)))
-Case conversion may be inaccurate. Consider using '#align finprod_eventually_eq_prod finprod_eventually_eq_prodₓ'. -/
 @[to_additive]
 theorem finprod_eventually_eq_prod {M : Type _} [CommMonoid M] {f : ι → X → M}
     (hf : LocallyFinite fun i => mulSupport (f i)) (x : X) :
@@ -1208,12 +806,6 @@ theorem finprod_eventually_eq_prod {M : Type _} [CommMonoid M] {f : ι → X →
 #align finprod_eventually_eq_prod finprod_eventually_eq_prod
 #align finsum_eventually_eq_sum finsum_eventually_eq_sum
 
-/- warning: continuous_finprod -> continuous_finprod is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {X : Type.{u2}} {M : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u3} M] [_inst_3 : CommMonoid.{u3} M] [_inst_4 : ContinuousMul.{u3} M _inst_2 (MulOneClass.toHasMul.{u3} M (Monoid.toMulOneClass.{u3} M (CommMonoid.toMonoid.{u3} M _inst_3)))] {f : ι -> X -> M}, (forall (i : ι), Continuous.{u2, u3} X M _inst_1 _inst_2 (f i)) -> (LocallyFinite.{u1, u2} ι X _inst_1 (fun (i : ι) => Function.mulSupport.{u2, u3} X M (MulOneClass.toHasOne.{u3} M (Monoid.toMulOneClass.{u3} M (CommMonoid.toMonoid.{u3} M _inst_3))) (f i))) -> (Continuous.{u2, u3} X M _inst_1 _inst_2 (fun (x : X) => finprod.{u3, succ u1} M ι _inst_3 (fun (i : ι) => f i x)))
-but is expected to have type
-  forall {ι : Type.{u1}} {X : Type.{u3}} {M : Type.{u2}} [_inst_1 : TopologicalSpace.{u3} X] [_inst_2 : TopologicalSpace.{u2} M] [_inst_3 : CommMonoid.{u2} M] [_inst_4 : ContinuousMul.{u2} M _inst_2 (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M (CommMonoid.toMonoid.{u2} M _inst_3)))] {f : ι -> X -> M}, (forall (i : ι), Continuous.{u3, u2} X M _inst_1 _inst_2 (f i)) -> (LocallyFinite.{u1, u3} ι X _inst_1 (fun (i : ι) => Function.mulSupport.{u3, u2} X M (Monoid.toOne.{u2} M (CommMonoid.toMonoid.{u2} M _inst_3)) (f i))) -> (Continuous.{u3, u2} X M _inst_1 _inst_2 (fun (x : X) => finprod.{u2, succ u1} M ι _inst_3 (fun (i : ι) => f i x)))
-Case conversion may be inaccurate. Consider using '#align continuous_finprod continuous_finprodₓ'. -/
 @[to_additive]
 theorem continuous_finprod {f : ι → X → M} (hc : ∀ i, Continuous (f i))
     (hf : LocallyFinite fun i => mulSupport (f i)) : Continuous fun x => ∏ᶠ i, f i x :=
@@ -1225,12 +817,6 @@ theorem continuous_finprod {f : ι → X → M} (hc : ∀ i, Continuous (f i))
 #align continuous_finprod continuous_finprod
 #align continuous_finsum continuous_finsum
 
-/- warning: continuous_finprod_cond -> continuous_finprod_cond is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {X : Type.{u2}} {M : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u3} M] [_inst_3 : CommMonoid.{u3} M] [_inst_4 : ContinuousMul.{u3} M _inst_2 (MulOneClass.toHasMul.{u3} M (Monoid.toMulOneClass.{u3} M (CommMonoid.toMonoid.{u3} M _inst_3)))] {f : ι -> X -> M} {p : ι -> Prop}, (forall (i : ι), (p i) -> (Continuous.{u2, u3} X M _inst_1 _inst_2 (f i))) -> (LocallyFinite.{u1, u2} ι X _inst_1 (fun (i : ι) => Function.mulSupport.{u2, u3} X M (MulOneClass.toHasOne.{u3} M (Monoid.toMulOneClass.{u3} M (CommMonoid.toMonoid.{u3} M _inst_3))) (f i))) -> (Continuous.{u2, u3} X M _inst_1 _inst_2 (fun (x : X) => finprod.{u3, succ u1} M ι _inst_3 (fun (i : ι) => finprod.{u3, 0} M (p i) _inst_3 (fun (hi : p i) => f i x))))
-but is expected to have type
-  forall {ι : Type.{u1}} {X : Type.{u3}} {M : Type.{u2}} [_inst_1 : TopologicalSpace.{u3} X] [_inst_2 : TopologicalSpace.{u2} M] [_inst_3 : CommMonoid.{u2} M] [_inst_4 : ContinuousMul.{u2} M _inst_2 (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M (CommMonoid.toMonoid.{u2} M _inst_3)))] {f : ι -> X -> M} {p : ι -> Prop}, (forall (i : ι), (p i) -> (Continuous.{u3, u2} X M _inst_1 _inst_2 (f i))) -> (LocallyFinite.{u1, u3} ι X _inst_1 (fun (i : ι) => Function.mulSupport.{u3, u2} X M (Monoid.toOne.{u2} M (CommMonoid.toMonoid.{u2} M _inst_3)) (f i))) -> (Continuous.{u3, u2} X M _inst_1 _inst_2 (fun (x : X) => finprod.{u2, succ u1} M ι _inst_3 (fun (i : ι) => finprod.{u2, 0} M (p i) _inst_3 (fun (hi : p i) => f i x))))
-Case conversion may be inaccurate. Consider using '#align continuous_finprod_cond continuous_finprod_condₓ'. -/
 @[to_additive]
 theorem continuous_finprod_cond {f : ι → X → M} {p : ι → Prop} (hc : ∀ i, p i → Continuous (f i))
     (hf : LocallyFinite fun i => mulSupport (f i)) : Continuous fun x => ∏ᶠ (i) (hi : p i), f i x :=
@@ -1252,12 +838,6 @@ section LatticeOps
 
 variable {ι' : Sort _} [Mul M]
 
-/- warning: has_continuous_mul_Inf -> continuousMul_sInf is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_2 : Mul.{u1} M] {ts : Set.{u1} (TopologicalSpace.{u1} M)}, (forall (t : TopologicalSpace.{u1} M), (Membership.Mem.{u1, u1} (TopologicalSpace.{u1} M) (Set.{u1} (TopologicalSpace.{u1} M)) (Set.hasMem.{u1} (TopologicalSpace.{u1} M)) t ts) -> (ContinuousMul.{u1} M t _inst_2)) -> (ContinuousMul.{u1} M (InfSet.sInf.{u1} (TopologicalSpace.{u1} M) (ConditionallyCompleteLattice.toHasInf.{u1} (TopologicalSpace.{u1} M) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.{u1} M) (TopologicalSpace.completeLattice.{u1} M))) ts) _inst_2)
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_2 : Mul.{u1} M] {ts : Set.{u1} (TopologicalSpace.{u1} M)}, (forall (t : TopologicalSpace.{u1} M), (Membership.mem.{u1, u1} (TopologicalSpace.{u1} M) (Set.{u1} (TopologicalSpace.{u1} M)) (Set.instMembershipSet.{u1} (TopologicalSpace.{u1} M)) t ts) -> (ContinuousMul.{u1} M t _inst_2)) -> (ContinuousMul.{u1} M (InfSet.sInf.{u1} (TopologicalSpace.{u1} M) (ConditionallyCompleteLattice.toInfSet.{u1} (TopologicalSpace.{u1} M) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.{u1} M) (TopologicalSpace.instCompleteLatticeTopologicalSpace.{u1} M))) ts) _inst_2)
-Case conversion may be inaccurate. Consider using '#align has_continuous_mul_Inf continuousMul_sInfₓ'. -/
 @[to_additive]
 theorem continuousMul_sInf {ts : Set (TopologicalSpace M)} (h : ∀ t ∈ ts, @ContinuousMul M t _) :
     @ContinuousMul M (sInf ts) _ :=
@@ -1268,12 +848,6 @@ theorem continuousMul_sInf {ts : Set (TopologicalSpace M)} (h : ∀ t ∈ ts, @C
 #align has_continuous_mul_Inf continuousMul_sInf
 #align has_continuous_add_Inf continuousAdd_sInf
 
-/- warning: has_continuous_mul_infi -> continuousMul_iInf is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {ι' : Sort.{u2}} [_inst_2 : Mul.{u1} M] {ts : ι' -> (TopologicalSpace.{u1} M)}, (forall (i : ι'), ContinuousMul.{u1} M (ts i) _inst_2) -> (ContinuousMul.{u1} M (iInf.{u1, u2} (TopologicalSpace.{u1} M) (ConditionallyCompleteLattice.toHasInf.{u1} (TopologicalSpace.{u1} M) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.{u1} M) (TopologicalSpace.completeLattice.{u1} M))) ι' (fun (i : ι') => ts i)) _inst_2)
-but is expected to have type
-  forall {M : Type.{u2}} {ι' : Sort.{u1}} [_inst_2 : Mul.{u2} M] {ts : ι' -> (TopologicalSpace.{u2} M)}, (forall (i : ι'), ContinuousMul.{u2} M (ts i) _inst_2) -> (ContinuousMul.{u2} M (iInf.{u2, u1} (TopologicalSpace.{u2} M) (ConditionallyCompleteLattice.toInfSet.{u2} (TopologicalSpace.{u2} M) (CompleteLattice.toConditionallyCompleteLattice.{u2} (TopologicalSpace.{u2} M) (TopologicalSpace.instCompleteLatticeTopologicalSpace.{u2} M))) ι' (fun (i : ι') => ts i)) _inst_2)
-Case conversion may be inaccurate. Consider using '#align has_continuous_mul_infi continuousMul_iInfₓ'. -/
 @[to_additive]
 theorem continuousMul_iInf {ts : ι' → TopologicalSpace M} (h' : ∀ i, @ContinuousMul M (ts i) _) :
     @ContinuousMul M (⨅ i, ts i) _ := by rw [← sInf_range];
@@ -1281,12 +855,6 @@ theorem continuousMul_iInf {ts : ι' → TopologicalSpace M} (h' : ∀ i, @Conti
 #align has_continuous_mul_infi continuousMul_iInf
 #align has_continuous_add_infi continuousAdd_iInf
 
-/- warning: has_continuous_mul_inf -> continuousMul_inf is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_2 : Mul.{u1} M] {t₁ : TopologicalSpace.{u1} M} {t₂ : TopologicalSpace.{u1} M}, (ContinuousMul.{u1} M t₁ _inst_2) -> (ContinuousMul.{u1} M t₂ _inst_2) -> (ContinuousMul.{u1} M (Inf.inf.{u1} (TopologicalSpace.{u1} M) (SemilatticeInf.toHasInf.{u1} (TopologicalSpace.{u1} M) (Lattice.toSemilatticeInf.{u1} (TopologicalSpace.{u1} M) (ConditionallyCompleteLattice.toLattice.{u1} (TopologicalSpace.{u1} M) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.{u1} M) (TopologicalSpace.completeLattice.{u1} M))))) t₁ t₂) _inst_2)
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_2 : Mul.{u1} M] {t₁ : TopologicalSpace.{u1} M} {t₂ : TopologicalSpace.{u1} M}, (ContinuousMul.{u1} M t₁ _inst_2) -> (ContinuousMul.{u1} M t₂ _inst_2) -> (ContinuousMul.{u1} M (Inf.inf.{u1} (TopologicalSpace.{u1} M) (Lattice.toInf.{u1} (TopologicalSpace.{u1} M) (ConditionallyCompleteLattice.toLattice.{u1} (TopologicalSpace.{u1} M) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.{u1} M) (TopologicalSpace.instCompleteLatticeTopologicalSpace.{u1} M)))) t₁ t₂) _inst_2)
-Case conversion may be inaccurate. Consider using '#align has_continuous_mul_inf continuousMul_infₓ'. -/
 @[to_additive]
 theorem continuousMul_inf {t₁ t₂ : TopologicalSpace M} (h₁ : @ContinuousMul M t₁ _)
     (h₂ : @ContinuousMul M t₂ _) : @ContinuousMul M (t₁ ⊓ t₂) _ := by rw [inf_eq_iInf];
@@ -1309,12 +877,6 @@ protected def mulRight (x : X) : C(X, X) :=
 #align continuous_map.add_right ContinuousMap.addRight
 -/
 
-/- warning: continuous_map.coe_mul_right -> ContinuousMap.coe_mulRight is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : Mul.{u1} X] [_inst_3 : ContinuousMul.{u1} X _inst_1 _inst_2] (x : X), Eq.{succ u1} (X -> X) (coeFn.{succ u1, succ u1} (ContinuousMap.{u1, u1} X X _inst_1 _inst_1) (fun (_x : ContinuousMap.{u1, u1} X X _inst_1 _inst_1) => X -> X) (ContinuousMap.hasCoeToFun.{u1, u1} X X _inst_1 _inst_1) (ContinuousMap.mulRight.{u1} X _inst_1 _inst_2 _inst_3 x)) (fun (y : X) => HMul.hMul.{u1, u1, u1} X X X (instHMul.{u1} X _inst_2) y x)
-but is expected to have type
-  forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : Mul.{u1} X] [_inst_3 : ContinuousMul.{u1} X _inst_1 _inst_2] (x : X), Eq.{succ u1} (forall (ᾰ : X), (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : X) => X) ᾰ) (FunLike.coe.{succ u1, succ u1, succ u1} (ContinuousMap.{u1, u1} X X _inst_1 _inst_1) X (fun (_x : X) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : X) => X) _x) (ContinuousMapClass.toFunLike.{u1, u1, u1} (ContinuousMap.{u1, u1} X X _inst_1 _inst_1) X X _inst_1 _inst_1 (ContinuousMap.instContinuousMapClassContinuousMap.{u1, u1} X X _inst_1 _inst_1)) (ContinuousMap.mulRight.{u1} X _inst_1 _inst_2 _inst_3 x)) (fun (y : X) => HMul.hMul.{u1, u1, u1} X X X (instHMul.{u1} X _inst_2) y x)
-Case conversion may be inaccurate. Consider using '#align continuous_map.coe_mul_right ContinuousMap.coe_mulRightₓ'. -/
 @[to_additive, simp]
 theorem coe_mulRight (x : X) : ⇑(ContinuousMap.mulRight x) = fun y => y * x :=
   rfl
@@ -1330,12 +892,6 @@ protected def mulLeft (x : X) : C(X, X) :=
 #align continuous_map.add_left ContinuousMap.addLeft
 -/
 
-/- warning: continuous_map.coe_mul_left -> ContinuousMap.coe_mulLeft is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : Mul.{u1} X] [_inst_3 : ContinuousMul.{u1} X _inst_1 _inst_2] (x : X), Eq.{succ u1} (X -> X) (coeFn.{succ u1, succ u1} (ContinuousMap.{u1, u1} X X _inst_1 _inst_1) (fun (_x : ContinuousMap.{u1, u1} X X _inst_1 _inst_1) => X -> X) (ContinuousMap.hasCoeToFun.{u1, u1} X X _inst_1 _inst_1) (ContinuousMap.mulLeft.{u1} X _inst_1 _inst_2 _inst_3 x)) (fun (y : X) => HMul.hMul.{u1, u1, u1} X X X (instHMul.{u1} X _inst_2) x y)
-but is expected to have type
-  forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : Mul.{u1} X] [_inst_3 : ContinuousMul.{u1} X _inst_1 _inst_2] (x : X), Eq.{succ u1} (forall (ᾰ : X), (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : X) => X) ᾰ) (FunLike.coe.{succ u1, succ u1, succ u1} (ContinuousMap.{u1, u1} X X _inst_1 _inst_1) X (fun (_x : X) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : X) => X) _x) (ContinuousMapClass.toFunLike.{u1, u1, u1} (ContinuousMap.{u1, u1} X X _inst_1 _inst_1) X X _inst_1 _inst_1 (ContinuousMap.instContinuousMapClassContinuousMap.{u1, u1} X X _inst_1 _inst_1)) (ContinuousMap.mulLeft.{u1} X _inst_1 _inst_2 _inst_3 x)) (fun (y : X) => HMul.hMul.{u1, u1, u1} X X X (instHMul.{u1} X _inst_2) x y)
-Case conversion may be inaccurate. Consider using '#align continuous_map.coe_mul_left ContinuousMap.coe_mulLeftₓ'. -/
 @[to_additive, simp]
 theorem coe_mulLeft (x : X) : ⇑(ContinuousMap.mulLeft x) = fun y => x * y :=
   rfl
Diff
@@ -206,10 +206,8 @@ but is expected to have type
   forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Mul.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 _inst_3] (a : M) (b : M), LE.le.{u1} (Filter.{u1} M) (Preorder.toLE.{u1} (Filter.{u1} M) (PartialOrder.toPreorder.{u1} (Filter.{u1} M) (Filter.instPartialOrderFilter.{u1} M))) (HMul.hMul.{u1, u1, u1} (Filter.{u1} M) (Filter.{u1} M) (Filter.{u1} M) (instHMul.{u1} (Filter.{u1} M) (Filter.instMul.{u1} M _inst_3)) (nhds.{u1} M _inst_2 a) (nhds.{u1} M _inst_2 b)) (nhds.{u1} M _inst_2 (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) a b))
 Case conversion may be inaccurate. Consider using '#align le_nhds_mul le_nhds_mulₓ'. -/
 @[to_additive]
-theorem le_nhds_mul (a b : M) : 𝓝 a * 𝓝 b ≤ 𝓝 (a * b) :=
-  by
-  rw [← map₂_mul, ← map_uncurry_prod, ← nhds_prod_eq]
-  exact continuous_mul.tendsto _
+theorem le_nhds_mul (a b : M) : 𝓝 a * 𝓝 b ≤ 𝓝 (a * b) := by
+  rw [← map₂_mul, ← map_uncurry_prod, ← nhds_prod_eq]; exact continuous_mul.tendsto _
 #align le_nhds_mul le_nhds_mul
 #align le_nhds_add le_nhds_add
 
@@ -316,12 +314,8 @@ def Filter.Tendsto.units [TopologicalSpace N] [Monoid N] [ContinuousMul N] [T2Sp
     where
   val := r₁
   inv := r₂
-  val_inv := by
-    symm
-    simpa using h₁.mul h₂
-  inv_val := by
-    symm
-    simpa using h₂.mul h₁
+  val_inv := by symm; simpa using h₁.mul h₂
+  inv_val := by symm; simpa using h₂.mul h₁
 #align filter.tendsto.units Filter.Tendsto.units
 #align filter.tendsto.add_units Filter.Tendsto.addUnits
 
@@ -407,13 +401,8 @@ theorem ContinuousMul.of_nhds_one {M : Type u} [Monoid M] [TopologicalSpace M]
     have key :
       (fun p : M × M => x₀ * p.1 * (p.2 * y₀)) =
         ((fun x => x₀ * x) ∘ fun x => x * y₀) ∘ uncurry (· * ·) :=
-      by
-      ext p
-      simp [uncurry, mul_assoc]
-    have key₂ : ((fun x => x₀ * x) ∘ fun x => y₀ * x) = fun x => x₀ * y₀ * x :=
-      by
-      ext x
-      simp
+      by ext p; simp [uncurry, mul_assoc]
+    have key₂ : ((fun x => x₀ * x) ∘ fun x => y₀ * x) = fun x => x₀ * y₀ * x := by ext x; simp
     calc
       map (uncurry (· * ·)) (𝓝 (x₀, y₀)) = map (uncurry (· * ·)) (𝓝 x₀ ×ᶠ 𝓝 y₀) := by
         rw [nhds_prod_eq]
@@ -769,10 +758,8 @@ but is expected to have type
   forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {s : Set.{u1} M} {t : Set.{u1} M}, (IsCompact.{u1} M _inst_2 s) -> (IsCompact.{u1} M _inst_2 t) -> (IsCompact.{u1} M _inst_2 (HMul.hMul.{u1, u1, u1} (Set.{u1} M) (Set.{u1} M) (Set.{u1} M) (instHMul.{u1} (Set.{u1} M) (Set.mul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)))) s t))
 Case conversion may be inaccurate. Consider using '#align is_compact.mul IsCompact.mulₓ'. -/
 @[to_additive]
-theorem IsCompact.mul {s t : Set M} (hs : IsCompact s) (ht : IsCompact t) : IsCompact (s * t) :=
-  by
-  rw [← image_mul_prod]
-  exact (hs.prod ht).image continuous_mul
+theorem IsCompact.mul {s t : Set M} (hs : IsCompact s) (ht : IsCompact t) : IsCompact (s * t) := by
+  rw [← image_mul_prod]; exact (hs.prod ht).image continuous_mul
 #align is_compact.mul IsCompact.mul
 #align is_compact.add IsCompact.add
 
@@ -839,9 +826,7 @@ Case conversion may be inaccurate. Consider using '#align continuous_pow continu
 @[continuity, to_additive]
 theorem continuous_pow : ∀ n : ℕ, Continuous fun a : M => a ^ n
   | 0 => by simpa using continuous_const
-  | k + 1 => by
-    simp only [pow_succ]
-    exact continuous_id.mul (continuous_pow _)
+  | k + 1 => by simp only [pow_succ]; exact continuous_id.mul (continuous_pow _)
 #align continuous_pow continuous_pow
 #align continuous_nsmul continuous_nsmul
 
@@ -1101,9 +1086,7 @@ Case conversion may be inaccurate. Consider using '#align tendsto_multiset_prod
 theorem tendsto_multiset_prod {f : ι → α → M} {x : Filter α} {a : ι → M} (s : Multiset ι) :
     (∀ i ∈ s, Tendsto (f i) x (𝓝 (a i))) →
       Tendsto (fun b => (s.map fun c => f c b).Prod) x (𝓝 (s.map a).Prod) :=
-  by
-  rcases s with ⟨l⟩
-  simpa using tendsto_list_prod l
+  by rcases s with ⟨l⟩; simpa using tendsto_list_prod l
 #align tendsto_multiset_prod tendsto_multiset_prod
 #align tendsto_multiset_sum tendsto_multiset_sum
 
@@ -1129,10 +1112,8 @@ but is expected to have type
 Case conversion may be inaccurate. Consider using '#align continuous_multiset_prod continuous_multiset_prodₓ'. -/
 @[continuity, to_additive]
 theorem continuous_multiset_prod {f : ι → X → M} (s : Multiset ι) :
-    (∀ i ∈ s, Continuous (f i)) → Continuous fun a => (s.map fun i => f i a).Prod :=
-  by
-  rcases s with ⟨l⟩
-  simpa using continuous_list_prod l
+    (∀ i ∈ s, Continuous (f i)) → Continuous fun a => (s.map fun i => f i a).Prod := by
+  rcases s with ⟨l⟩; simpa using continuous_list_prod l
 #align continuous_multiset_prod continuous_multiset_prod
 #align continuous_multiset_sum continuous_multiset_sum
 
@@ -1144,10 +1125,8 @@ but is expected to have type
 Case conversion may be inaccurate. Consider using '#align continuous_on_multiset_prod continuousOn_multiset_prodₓ'. -/
 @[to_additive]
 theorem continuousOn_multiset_prod {f : ι → X → M} (s : Multiset ι) {t : Set X} :
-    (∀ i ∈ s, ContinuousOn (f i) t) → ContinuousOn (fun a => (s.map fun i => f i a).Prod) t :=
-  by
-  rcases s with ⟨l⟩
-  simpa using continuousOn_list_prod l
+    (∀ i ∈ s, ContinuousOn (f i) t) → ContinuousOn (fun a => (s.map fun i => f i a).Prod) t := by
+  rcases s with ⟨l⟩; simpa using continuousOn_list_prod l
 #align continuous_on_multiset_prod continuousOn_multiset_prod
 #align continuous_on_multiset_sum continuousOn_multiset_sum
 
@@ -1297,8 +1276,7 @@ but is expected to have type
 Case conversion may be inaccurate. Consider using '#align has_continuous_mul_infi continuousMul_iInfₓ'. -/
 @[to_additive]
 theorem continuousMul_iInf {ts : ι' → TopologicalSpace M} (h' : ∀ i, @ContinuousMul M (ts i) _) :
-    @ContinuousMul M (⨅ i, ts i) _ := by
-  rw [← sInf_range]
+    @ContinuousMul M (⨅ i, ts i) _ := by rw [← sInf_range];
   exact continuousMul_sInf (set.forall_range_iff.mpr h')
 #align has_continuous_mul_infi continuousMul_iInf
 #align has_continuous_add_infi continuousAdd_iInf
@@ -1311,11 +1289,8 @@ but is expected to have type
 Case conversion may be inaccurate. Consider using '#align has_continuous_mul_inf continuousMul_infₓ'. -/
 @[to_additive]
 theorem continuousMul_inf {t₁ t₂ : TopologicalSpace M} (h₁ : @ContinuousMul M t₁ _)
-    (h₂ : @ContinuousMul M t₂ _) : @ContinuousMul M (t₁ ⊓ t₂) _ :=
-  by
-  rw [inf_eq_iInf]
-  refine' continuousMul_iInf fun b => _
-  cases b <;> assumption
+    (h₂ : @ContinuousMul M t₂ _) : @ContinuousMul M (t₁ ⊓ t₂) _ := by rw [inf_eq_iInf];
+  refine' continuousMul_iInf fun b => _; cases b <;> assumption
 #align has_continuous_mul_inf continuousMul_inf
 #align has_continuous_add_inf continuousAdd_inf
 
Diff
@@ -505,10 +505,7 @@ def monoidHomOfMemClosureRangeCoe (f : M₁ → M₂)
 #align add_monoid_hom_of_mem_closure_range_coe addMonoidHomOfMemClosureRangeCoe
 
 /- warning: monoid_hom_of_tendsto -> monoidHomOfTendsto is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {M₁ : Type.{u2}} {M₂ : Type.{u3}} [_inst_2 : TopologicalSpace.{u3} M₂] [_inst_3 : T2Space.{u3} M₂ _inst_2] [_inst_4 : MulOneClass.{u2} M₁] [_inst_5 : MulOneClass.{u3} M₂] [_inst_6 : ContinuousMul.{u3} M₂ _inst_2 (MulOneClass.toHasMul.{u3} M₂ _inst_5)] {F : Type.{u4}} [_inst_7 : MonoidHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5] {l : Filter.{u1} α} (f : M₁ -> M₂) (g : α -> F) [_inst_8 : Filter.NeBot.{u1} α l], (Filter.Tendsto.{u1, max u2 u3} α (M₁ -> M₂) (fun (a : α) (x : M₁) => coeFn.{succ u4, max (succ u2) (succ u3)} F (fun (_x : F) => M₁ -> M₂) (FunLike.hasCoeToFun.{succ u4, succ u2, succ u3} F M₁ (fun (_x : M₁) => M₂) (MulHomClass.toFunLike.{u4, u2, u3} F M₁ M₂ (MulOneClass.toHasMul.{u2} M₁ _inst_4) (MulOneClass.toHasMul.{u3} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5 _inst_7))) (g a) x) l (nhds.{max u2 u3} (M₁ -> M₂) (Pi.topologicalSpace.{u2, u3} M₁ (fun (x : M₁) => M₂) (fun (a : M₁) => _inst_2)) f)) -> (MonoidHom.{u2, u3} M₁ M₂ _inst_4 _inst_5)
-but is expected to have type
-  forall {α : Type.{u1}} {M₁ : Type.{u2}} {M₂ : Type.{u3}} [_inst_2 : TopologicalSpace.{u3} M₂] [_inst_3 : T2Space.{u3} M₂ _inst_2] [_inst_4 : MulOneClass.{u2} M₁] [_inst_5 : MulOneClass.{u3} M₂] [_inst_6 : ContinuousMul.{u3} M₂ _inst_2 (MulOneClass.toMul.{u3} M₂ _inst_5)] {F : Type.{u4}} [_inst_7 : MonoidHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5] {l : Filter.{u1} α} (f : M₁ -> M₂) (g : α -> F) [_inst_8 : Filter.NeBot.{u1} α l], (Filter.Tendsto.{u1, max u2 u3} α (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) x) (fun (a : α) (x : M₁) => FunLike.coe.{succ u4, succ u2, succ u3} F M₁ (fun (_x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) _x) (MulHomClass.toFunLike.{u4, u2, u3} F M₁ M₂ (MulOneClass.toMul.{u2} M₁ _inst_4) (MulOneClass.toMul.{u3} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5 _inst_7)) (g a) x) l (nhds.{max u2 u3} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) x) (Pi.topologicalSpace.{u2, u3} M₁ (fun (x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) x) (fun (a : M₁) => _inst_2)) f)) -> (MonoidHom.{u2, u3} M₁ M₂ _inst_4 _inst_5)
+<too large>
 Case conversion may be inaccurate. Consider using '#align monoid_hom_of_tendsto monoidHomOfTendstoₓ'. -/
 /-- Construct a bundled monoid homomorphism from a pointwise limit of monoid homomorphisms. -/
 @[to_additive
@@ -731,10 +728,7 @@ theorem exists_nhds_one_split {s : Set M} (hs : s ∈ 𝓝 (1 : M)) :
 #align exists_nhds_zero_half exists_nhds_zero_half
 
 /- warning: exists_nhds_one_split4 -> exists_nhds_one_split4 is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {u : Set.{u1} M}, (Membership.Mem.{u1, u1} (Set.{u1} M) (Filter.{u1} M) (Filter.hasMem.{u1} M) u (nhds.{u1} M _inst_2 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))))) -> (Exists.{succ u1} (Set.{u1} M) (fun (V : Set.{u1} M) => Exists.{0} (Membership.Mem.{u1, u1} (Set.{u1} M) (Filter.{u1} M) (Filter.hasMem.{u1} M) V (nhds.{u1} M _inst_2 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))))) (fun (H : Membership.Mem.{u1, u1} (Set.{u1} M) (Filter.{u1} M) (Filter.hasMem.{u1} M) V (nhds.{u1} M _inst_2 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))))) => forall {v : M} {w : M} {s : M} {t : M}, (Membership.Mem.{u1, u1} M (Set.{u1} M) (Set.hasMem.{u1} M) v V) -> (Membership.Mem.{u1, u1} M (Set.{u1} M) (Set.hasMem.{u1} M) w V) -> (Membership.Mem.{u1, u1} M (Set.{u1} M) (Set.hasMem.{u1} M) s V) -> (Membership.Mem.{u1, u1} M (Set.{u1} M) (Set.hasMem.{u1} M) t V) -> (Membership.Mem.{u1, u1} M (Set.{u1} M) (Set.hasMem.{u1} M) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) v w) s) t) u))))
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {u : Set.{u1} M}, (Membership.mem.{u1, u1} (Set.{u1} M) (Filter.{u1} M) (instMembershipSetFilter.{u1} M) u (nhds.{u1} M _inst_2 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_3))))) -> (Exists.{succ u1} (Set.{u1} M) (fun (V : Set.{u1} M) => And (Membership.mem.{u1, u1} (Set.{u1} M) (Filter.{u1} M) (instMembershipSetFilter.{u1} M) V (nhds.{u1} M _inst_2 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_3))))) (forall {v : M} {w : M} {s : M} {t : M}, (Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) v V) -> (Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) w V) -> (Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) s V) -> (Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) t V) -> (Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) v w) s) t) u))))
+<too large>
 Case conversion may be inaccurate. Consider using '#align exists_nhds_one_split4 exists_nhds_one_split4ₓ'. -/
 @[to_additive exists_nhds_zero_quarter]
 theorem exists_nhds_one_split4 {u : Set M} (hu : u ∈ 𝓝 (1 : M)) :
Diff
@@ -487,7 +487,7 @@ variable {M₁ M₂} [MulOneClass M₁] [MulOneClass M₂] [ContinuousMul M₂]
 lean 3 declaration is
   forall {M₁ : Type.{u1}} {M₂ : Type.{u2}} [_inst_2 : TopologicalSpace.{u2} M₂] [_inst_3 : T2Space.{u2} M₂ _inst_2] [_inst_4 : MulOneClass.{u1} M₁] [_inst_5 : MulOneClass.{u2} M₂] [_inst_6 : ContinuousMul.{u2} M₂ _inst_2 (MulOneClass.toHasMul.{u2} M₂ _inst_5)] {F : Type.{u3}} [_inst_7 : MonoidHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5] (f : M₁ -> M₂), (Membership.Mem.{max u1 u2, max u1 u2} (M₁ -> M₂) (Set.{max u1 u2} (M₁ -> M₂)) (Set.hasMem.{max u1 u2} (M₁ -> M₂)) f (closure.{max u1 u2} (M₁ -> M₂) (Pi.topologicalSpace.{u1, u2} M₁ (fun (x : M₁) => M₂) (fun (a : M₁) => _inst_2)) (Set.range.{max u1 u2, succ u3} (M₁ -> M₂) F (fun (f : F) (x : M₁) => coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M₁ -> M₂) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M₁ (fun (_x : M₁) => M₂) (MulHomClass.toFunLike.{u3, u1, u2} F M₁ M₂ (MulOneClass.toHasMul.{u1} M₁ _inst_4) (MulOneClass.toHasMul.{u2} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5 _inst_7))) f x)))) -> (MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5)
 but is expected to have type
-  forall {M₁ : Type.{u1}} {M₂ : Type.{u2}} [_inst_2 : TopologicalSpace.{u2} M₂] [_inst_3 : T2Space.{u2} M₂ _inst_2] [_inst_4 : MulOneClass.{u1} M₁] [_inst_5 : MulOneClass.{u2} M₂] [_inst_6 : ContinuousMul.{u2} M₂ _inst_2 (MulOneClass.toMul.{u2} M₂ _inst_5)] {F : Type.{u3}} [_inst_7 : MonoidHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5] (f : M₁ -> M₂), (Membership.mem.{max u1 u2, max u1 u2} (M₁ -> M₂) (Set.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) x)) (Set.instMembershipSet.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) x)) f (closure.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) x) (Pi.topologicalSpace.{u1, u2} M₁ (fun (x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) x) (fun (a : M₁) => _inst_2)) (Set.range.{max u1 u2, succ u3} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) x) F (fun (f : F) (x : M₁) => FunLike.coe.{succ u3, succ u1, succ u2} F M₁ (fun (_x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) _x) (MulHomClass.toFunLike.{u3, u1, u2} F M₁ M₂ (MulOneClass.toMul.{u1} M₁ _inst_4) (MulOneClass.toMul.{u2} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5 _inst_7)) f x)))) -> (MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5)
+  forall {M₁ : Type.{u1}} {M₂ : Type.{u2}} [_inst_2 : TopologicalSpace.{u2} M₂] [_inst_3 : T2Space.{u2} M₂ _inst_2] [_inst_4 : MulOneClass.{u1} M₁] [_inst_5 : MulOneClass.{u2} M₂] [_inst_6 : ContinuousMul.{u2} M₂ _inst_2 (MulOneClass.toMul.{u2} M₂ _inst_5)] {F : Type.{u3}} [_inst_7 : MonoidHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5] (f : M₁ -> M₂), (Membership.mem.{max u1 u2, max u1 u2} (M₁ -> M₂) (Set.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) x)) (Set.instMembershipSet.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) x)) f (closure.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) x) (Pi.topologicalSpace.{u1, u2} M₁ (fun (x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) x) (fun (a : M₁) => _inst_2)) (Set.range.{max u1 u2, succ u3} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) x) F (fun (f : F) (x : M₁) => FunLike.coe.{succ u3, succ u1, succ u2} F M₁ (fun (_x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) _x) (MulHomClass.toFunLike.{u3, u1, u2} F M₁ M₂ (MulOneClass.toMul.{u1} M₁ _inst_4) (MulOneClass.toMul.{u2} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5 _inst_7)) f x)))) -> (MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5)
 Case conversion may be inaccurate. Consider using '#align monoid_hom_of_mem_closure_range_coe monoidHomOfMemClosureRangeCoeₓ'. -/
 /-- Construct a bundled monoid homomorphism `M₁ →* M₂` from a function `f` and a proof that it
 belongs to the closure of the range of the coercion from `M₁ →* M₂` (or another type of bundled
@@ -508,7 +508,7 @@ def monoidHomOfMemClosureRangeCoe (f : M₁ → M₂)
 lean 3 declaration is
   forall {α : Type.{u1}} {M₁ : Type.{u2}} {M₂ : Type.{u3}} [_inst_2 : TopologicalSpace.{u3} M₂] [_inst_3 : T2Space.{u3} M₂ _inst_2] [_inst_4 : MulOneClass.{u2} M₁] [_inst_5 : MulOneClass.{u3} M₂] [_inst_6 : ContinuousMul.{u3} M₂ _inst_2 (MulOneClass.toHasMul.{u3} M₂ _inst_5)] {F : Type.{u4}} [_inst_7 : MonoidHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5] {l : Filter.{u1} α} (f : M₁ -> M₂) (g : α -> F) [_inst_8 : Filter.NeBot.{u1} α l], (Filter.Tendsto.{u1, max u2 u3} α (M₁ -> M₂) (fun (a : α) (x : M₁) => coeFn.{succ u4, max (succ u2) (succ u3)} F (fun (_x : F) => M₁ -> M₂) (FunLike.hasCoeToFun.{succ u4, succ u2, succ u3} F M₁ (fun (_x : M₁) => M₂) (MulHomClass.toFunLike.{u4, u2, u3} F M₁ M₂ (MulOneClass.toHasMul.{u2} M₁ _inst_4) (MulOneClass.toHasMul.{u3} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5 _inst_7))) (g a) x) l (nhds.{max u2 u3} (M₁ -> M₂) (Pi.topologicalSpace.{u2, u3} M₁ (fun (x : M₁) => M₂) (fun (a : M₁) => _inst_2)) f)) -> (MonoidHom.{u2, u3} M₁ M₂ _inst_4 _inst_5)
 but is expected to have type
-  forall {α : Type.{u1}} {M₁ : Type.{u2}} {M₂ : Type.{u3}} [_inst_2 : TopologicalSpace.{u3} M₂] [_inst_3 : T2Space.{u3} M₂ _inst_2] [_inst_4 : MulOneClass.{u2} M₁] [_inst_5 : MulOneClass.{u3} M₂] [_inst_6 : ContinuousMul.{u3} M₂ _inst_2 (MulOneClass.toMul.{u3} M₂ _inst_5)] {F : Type.{u4}} [_inst_7 : MonoidHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5] {l : Filter.{u1} α} (f : M₁ -> M₂) (g : α -> F) [_inst_8 : Filter.NeBot.{u1} α l], (Filter.Tendsto.{u1, max u2 u3} α (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) x) (fun (a : α) (x : M₁) => FunLike.coe.{succ u4, succ u2, succ u3} F M₁ (fun (_x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) _x) (MulHomClass.toFunLike.{u4, u2, u3} F M₁ M₂ (MulOneClass.toMul.{u2} M₁ _inst_4) (MulOneClass.toMul.{u3} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5 _inst_7)) (g a) x) l (nhds.{max u2 u3} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) x) (Pi.topologicalSpace.{u2, u3} M₁ (fun (x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) x) (fun (a : M₁) => _inst_2)) f)) -> (MonoidHom.{u2, u3} M₁ M₂ _inst_4 _inst_5)
+  forall {α : Type.{u1}} {M₁ : Type.{u2}} {M₂ : Type.{u3}} [_inst_2 : TopologicalSpace.{u3} M₂] [_inst_3 : T2Space.{u3} M₂ _inst_2] [_inst_4 : MulOneClass.{u2} M₁] [_inst_5 : MulOneClass.{u3} M₂] [_inst_6 : ContinuousMul.{u3} M₂ _inst_2 (MulOneClass.toMul.{u3} M₂ _inst_5)] {F : Type.{u4}} [_inst_7 : MonoidHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5] {l : Filter.{u1} α} (f : M₁ -> M₂) (g : α -> F) [_inst_8 : Filter.NeBot.{u1} α l], (Filter.Tendsto.{u1, max u2 u3} α (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) x) (fun (a : α) (x : M₁) => FunLike.coe.{succ u4, succ u2, succ u3} F M₁ (fun (_x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) _x) (MulHomClass.toFunLike.{u4, u2, u3} F M₁ M₂ (MulOneClass.toMul.{u2} M₁ _inst_4) (MulOneClass.toMul.{u3} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5 _inst_7)) (g a) x) l (nhds.{max u2 u3} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) x) (Pi.topologicalSpace.{u2, u3} M₁ (fun (x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) x) (fun (a : M₁) => _inst_2)) f)) -> (MonoidHom.{u2, u3} M₁ M₂ _inst_4 _inst_5)
 Case conversion may be inaccurate. Consider using '#align monoid_hom_of_tendsto monoidHomOfTendstoₓ'. -/
 /-- Construct a bundled monoid homomorphism from a pointwise limit of monoid homomorphisms. -/
 @[to_additive
@@ -527,7 +527,7 @@ variable (M₁ M₂)
 lean 3 declaration is
   forall (M₁ : Type.{u1}) (M₂ : Type.{u2}) [_inst_2 : TopologicalSpace.{u2} M₂] [_inst_3 : T2Space.{u2} M₂ _inst_2] [_inst_4 : MulOneClass.{u1} M₁] [_inst_5 : MulOneClass.{u2} M₂] [_inst_6 : ContinuousMul.{u2} M₂ _inst_2 (MulOneClass.toHasMul.{u2} M₂ _inst_5)], IsClosed.{max u1 u2} (M₁ -> M₂) (Pi.topologicalSpace.{u1, u2} M₁ (fun (ᾰ : M₁) => M₂) (fun (a : M₁) => _inst_2)) (Set.range.{max u1 u2, max (succ u2) (succ u1)} (M₁ -> M₂) (MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5) (fun (ᾰ : MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5) => M₁ -> M₂) (MonoidHom.hasCoeToFun.{u1, u2} M₁ M₂ _inst_4 _inst_5)))
 but is expected to have type
-  forall (M₁ : Type.{u2}) (M₂ : Type.{u1}) [_inst_2 : TopologicalSpace.{u1} M₂] [_inst_3 : T2Space.{u1} M₂ _inst_2] [_inst_4 : MulOneClass.{u2} M₁] [_inst_5 : MulOneClass.{u1} M₂] [_inst_6 : ContinuousMul.{u1} M₂ _inst_2 (MulOneClass.toMul.{u1} M₂ _inst_5)], IsClosed.{max u2 u1} (forall (ᾰ : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) ᾰ) (Pi.topologicalSpace.{u2, u1} M₁ (fun (ᾰ : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) ᾰ) (fun (a : M₁) => _inst_2)) (Set.range.{max u2 u1, max (succ u2) (succ u1)} (forall (ᾰ : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) ᾰ) (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ (fun (ᾰ : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) ᾰ) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ M₂ (MulOneClass.toMul.{u2} M₁ _inst_4) (MulOneClass.toMul.{u1} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ M₂ _inst_4 _inst_5 (MonoidHom.monoidHomClass.{u2, u1} M₁ M₂ _inst_4 _inst_5)))))
+  forall (M₁ : Type.{u2}) (M₂ : Type.{u1}) [_inst_2 : TopologicalSpace.{u1} M₂] [_inst_3 : T2Space.{u1} M₂ _inst_2] [_inst_4 : MulOneClass.{u2} M₁] [_inst_5 : MulOneClass.{u1} M₂] [_inst_6 : ContinuousMul.{u1} M₂ _inst_2 (MulOneClass.toMul.{u1} M₂ _inst_5)], IsClosed.{max u2 u1} (forall (ᾰ : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) ᾰ) (Pi.topologicalSpace.{u2, u1} M₁ (fun (ᾰ : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) ᾰ) (fun (a : M₁) => _inst_2)) (Set.range.{max u2 u1, max (succ u2) (succ u1)} (forall (ᾰ : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) ᾰ) (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ (fun (ᾰ : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) ᾰ) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ M₂ (MulOneClass.toMul.{u2} M₁ _inst_4) (MulOneClass.toMul.{u1} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ M₂ _inst_4 _inst_5 (MonoidHom.monoidHomClass.{u2, u1} M₁ M₂ _inst_4 _inst_5)))))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.is_closed_range_coe MonoidHom.isClosed_range_coeₓ'. -/
 @[to_additive]
 theorem MonoidHom.isClosed_range_coe : IsClosed (range (coeFn : (M₁ →* M₂) → M₁ → M₂)) :=
@@ -541,7 +541,7 @@ end PointwiseLimits
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_2 : Mul.{u1} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u3, u1, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u1} M] [_inst_6 : TopologicalSpace.{u2} N] [_inst_7 : ContinuousMul.{u2} N _inst_6 _inst_3] (f : F), (Inducing.{u1, u2} M N _inst_5 _inst_6 (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N _inst_2 _inst_3 _inst_4)) f)) -> (ContinuousMul.{u1} M _inst_5 _inst_2)
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} [_inst_2 : Mul.{u3} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u1, u3, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u3} M] [_inst_6 : TopologicalSpace.{u2} N] [_inst_7 : ContinuousMul.{u2} N _inst_6 _inst_3] (f : F), (Inducing.{u3, u2} M N _inst_5 _inst_6 (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N _inst_2 _inst_3 _inst_4) f)) -> (ContinuousMul.{u3} M _inst_5 _inst_2)
+  forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} [_inst_2 : Mul.{u3} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u1, u3, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u3} M] [_inst_6 : TopologicalSpace.{u2} N] [_inst_7 : ContinuousMul.{u2} N _inst_6 _inst_3] (f : F), (Inducing.{u3, u2} M N _inst_5 _inst_6 (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N _inst_2 _inst_3 _inst_4) f)) -> (ContinuousMul.{u3} M _inst_5 _inst_2)
 Case conversion may be inaccurate. Consider using '#align inducing.has_continuous_mul Inducing.continuousMulₓ'. -/
 @[to_additive]
 theorem Inducing.continuousMul {M N F : Type _} [Mul M] [Mul N] [MulHomClass F M N]
@@ -556,7 +556,7 @@ theorem Inducing.continuousMul {M N F : Type _} [Mul M] [Mul N] [MulHomClass F M
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_2 : Mul.{u1} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u3, u1, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u2} N] [_inst_6 : ContinuousMul.{u2} N _inst_5 _inst_3] (f : F), ContinuousMul.{u1} M (TopologicalSpace.induced.{u1, u2} M N (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N _inst_2 _inst_3 _inst_4)) f) _inst_5) _inst_2
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} [_inst_2 : Mul.{u3} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u1, u3, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u2} N] [_inst_6 : ContinuousMul.{u2} N _inst_5 _inst_3] (f : F), ContinuousMul.{u3} M (TopologicalSpace.induced.{u3, u2} M N (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N _inst_2 _inst_3 _inst_4) f) _inst_5) _inst_2
+  forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} [_inst_2 : Mul.{u3} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u1, u3, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u2} N] [_inst_6 : ContinuousMul.{u2} N _inst_5 _inst_3] (f : F), ContinuousMul.{u3} M (TopologicalSpace.induced.{u3, u2} M N (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N _inst_2 _inst_3 _inst_4) f) _inst_5) _inst_2
 Case conversion may be inaccurate. Consider using '#align has_continuous_mul_induced continuousMul_inducedₓ'. -/
 @[to_additive]
 theorem continuousMul_induced {M N F : Type _} [Mul M] [Mul N] [MulHomClass F M N]
@@ -1069,7 +1069,7 @@ end Units
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_2 : Monoid.{u1} M] [_inst_3 : Monoid.{u2} N] [_inst_4 : TopologicalSpace.{u1} M] [_inst_5 : TopologicalSpace.{u2} N] (f : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_2) (Monoid.toMulOneClass.{u2} N _inst_3)), (Continuous.{u1, u2} M N _inst_4 _inst_5 (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_2) (Monoid.toMulOneClass.{u2} N _inst_3)) (fun (_x : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_2) (Monoid.toMulOneClass.{u2} N _inst_3)) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_2) (Monoid.toMulOneClass.{u2} N _inst_3)) f)) -> (Continuous.{u1, u2} (Units.{u1} M _inst_2) (Units.{u2} N _inst_3) (Units.topologicalSpace.{u1} M _inst_4 _inst_2) (Units.topologicalSpace.{u2} N _inst_5 _inst_3) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (Units.{u1} M _inst_2) (Units.{u2} N _inst_3) (Units.mulOneClass.{u1} M _inst_2) (Units.mulOneClass.{u2} N _inst_3)) (fun (_x : MonoidHom.{u1, u2} (Units.{u1} M _inst_2) (Units.{u2} N _inst_3) (Units.mulOneClass.{u1} M _inst_2) (Units.mulOneClass.{u2} N _inst_3)) => (Units.{u1} M _inst_2) -> (Units.{u2} N _inst_3)) (MonoidHom.hasCoeToFun.{u1, u2} (Units.{u1} M _inst_2) (Units.{u2} N _inst_3) (Units.mulOneClass.{u1} M _inst_2) (Units.mulOneClass.{u2} N _inst_3)) (Units.map.{u1, u2} M N _inst_2 _inst_3 f)))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_2 : Monoid.{u2} M] [_inst_3 : Monoid.{u1} N] [_inst_4 : TopologicalSpace.{u2} M] [_inst_5 : TopologicalSpace.{u1} N] (f : MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)), (Continuous.{u2, u1} M N _inst_4 _inst_5 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_2)) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)))) f)) -> (Continuous.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instTopologicalSpaceUnits.{u2} M _inst_4 _inst_2) (Units.instTopologicalSpaceUnits.{u1} N _inst_5 _inst_3) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (fun (_x : Units.{u2} M _inst_2) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Units.{u2} M _inst_2) => Units.{u1} N _inst_3) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (MulOneClass.toMul.{u2} (Units.{u2} M _inst_2) (Units.instMulOneClassUnits.{u2} M _inst_2)) (MulOneClass.toMul.{u1} (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u1} N _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3) (MonoidHom.monoidHomClass.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)))) (Units.map.{u2, u1} M N _inst_2 _inst_3 f)))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_2 : Monoid.{u2} M] [_inst_3 : Monoid.{u1} N] [_inst_4 : TopologicalSpace.{u2} M] [_inst_5 : TopologicalSpace.{u1} N] (f : MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)), (Continuous.{u2, u1} M N _inst_4 _inst_5 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_2)) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)))) f)) -> (Continuous.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instTopologicalSpaceUnits.{u2} M _inst_4 _inst_2) (Units.instTopologicalSpaceUnits.{u1} N _inst_5 _inst_3) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (fun (_x : Units.{u2} M _inst_2) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Units.{u2} M _inst_2) => Units.{u1} N _inst_3) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (MulOneClass.toMul.{u2} (Units.{u2} M _inst_2) (Units.instMulOneClassUnits.{u2} M _inst_2)) (MulOneClass.toMul.{u1} (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u1} N _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3) (MonoidHom.monoidHomClass.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)))) (Units.map.{u2, u1} M N _inst_2 _inst_3 f)))
 Case conversion may be inaccurate. Consider using '#align continuous.units_map Continuous.units_mapₓ'. -/
 @[to_additive]
 theorem Continuous.units_map [Monoid M] [Monoid N] [TopologicalSpace M] [TopologicalSpace N]
Diff
@@ -201,7 +201,7 @@ theorem Filter.Tendsto.mul_const (b : M) {c : M} {f : α → M} {l : Filter α}
 
 /- warning: le_nhds_mul -> le_nhds_mul is a dubious translation:
 lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Mul.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 _inst_3] (a : M) (b : M), LE.le.{u1} (Filter.{u1} M) (Preorder.toLE.{u1} (Filter.{u1} M) (PartialOrder.toPreorder.{u1} (Filter.{u1} M) (Filter.partialOrder.{u1} M))) (HMul.hMul.{u1, u1, u1} (Filter.{u1} M) (Filter.{u1} M) (Filter.{u1} M) (instHMul.{u1} (Filter.{u1} M) (Filter.instMul.{u1} M _inst_3)) (nhds.{u1} M _inst_2 a) (nhds.{u1} M _inst_2 b)) (nhds.{u1} M _inst_2 (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) a b))
+  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Mul.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 _inst_3] (a : M) (b : M), LE.le.{u1} (Filter.{u1} M) (Preorder.toHasLe.{u1} (Filter.{u1} M) (PartialOrder.toPreorder.{u1} (Filter.{u1} M) (Filter.partialOrder.{u1} M))) (HMul.hMul.{u1, u1, u1} (Filter.{u1} M) (Filter.{u1} M) (Filter.{u1} M) (instHMul.{u1} (Filter.{u1} M) (Filter.instMul.{u1} M _inst_3)) (nhds.{u1} M _inst_2 a) (nhds.{u1} M _inst_2 b)) (nhds.{u1} M _inst_2 (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) a b))
 but is expected to have type
   forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Mul.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 _inst_3] (a : M) (b : M), LE.le.{u1} (Filter.{u1} M) (Preorder.toLE.{u1} (Filter.{u1} M) (PartialOrder.toPreorder.{u1} (Filter.{u1} M) (Filter.instPartialOrderFilter.{u1} M))) (HMul.hMul.{u1, u1, u1} (Filter.{u1} M) (Filter.{u1} M) (Filter.{u1} M) (instHMul.{u1} (Filter.{u1} M) (Filter.instMul.{u1} M _inst_3)) (nhds.{u1} M _inst_2 a) (nhds.{u1} M _inst_2 b)) (nhds.{u1} M _inst_2 (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) a b))
 Case conversion may be inaccurate. Consider using '#align le_nhds_mul le_nhds_mulₓ'. -/
@@ -246,41 +246,57 @@ section tendsto_nhds
 variable {𝕜 : Type _} [Preorder 𝕜] [Zero 𝕜] [Mul 𝕜] [TopologicalSpace 𝕜] [ContinuousMul 𝕜]
   {l : Filter α} {f : α → 𝕜} {b c : 𝕜} (hb : 0 < b)
 
-#print Filter.TendstoNhdsWithinIoi.const_mul /-
+/- warning: filter.tendsto_nhds_within_Ioi.const_mul -> Filter.TendstoNhdsWithinIoi.const_mul is a dubious translation:
+lean 3 declaration is
+  forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_5 : Preorder.{u2} 𝕜] [_inst_6 : Zero.{u2} 𝕜] [_inst_7 : Mul.{u2} 𝕜] [_inst_8 : TopologicalSpace.{u2} 𝕜] [_inst_9 : ContinuousMul.{u2} 𝕜 _inst_8 _inst_7] {l : Filter.{u1} α} {f : α -> 𝕜} {b : 𝕜} {c : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toHasLt.{u2} 𝕜 _inst_5) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 _inst_6))) b) -> (forall [_inst_10 : PosMulStrictMono.{u2} 𝕜 _inst_7 _inst_6 _inst_5] [_inst_11 : PosMulReflectLT.{u2} 𝕜 _inst_7 _inst_6 _inst_5], (Filter.Tendsto.{u1, u2} α 𝕜 f l (nhdsWithin.{u2} 𝕜 _inst_8 c (Set.Ioi.{u2} 𝕜 _inst_5 c))) -> (Filter.Tendsto.{u1, u2} α 𝕜 (fun (a : α) => HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b (f a)) l (nhdsWithin.{u2} 𝕜 _inst_8 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b c) (Set.Ioi.{u2} 𝕜 _inst_5 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b c)))))
+but is expected to have type
+  forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_5 : Preorder.{u2} 𝕜] [_inst_6 : Zero.{u2} 𝕜] [_inst_7 : Mul.{u2} 𝕜] [_inst_8 : TopologicalSpace.{u2} 𝕜] [_inst_9 : ContinuousMul.{u2} 𝕜 _inst_8 _inst_7] {l : Filter.{u1} α} {f : α -> 𝕜} {b : 𝕜} {c : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toLT.{u2} 𝕜 _inst_5) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 _inst_6)) b) -> (forall [_inst_10 : PosMulStrictMono.{u2} 𝕜 _inst_7 _inst_6 _inst_5] [_inst_11 : PosMulReflectLT.{u2} 𝕜 _inst_7 _inst_6 _inst_5], (Filter.Tendsto.{u1, u2} α 𝕜 f l (nhdsWithin.{u2} 𝕜 _inst_8 c (Set.Ioi.{u2} 𝕜 _inst_5 c))) -> (Filter.Tendsto.{u1, u2} α 𝕜 (fun (a : α) => HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b (f a)) l (nhdsWithin.{u2} 𝕜 _inst_8 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b c) (Set.Ioi.{u2} 𝕜 _inst_5 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b c)))))
+Case conversion may be inaccurate. Consider using '#align filter.tendsto_nhds_within_Ioi.const_mul Filter.TendstoNhdsWithinIoi.const_mulₓ'. -/
 theorem Filter.TendstoNhdsWithinIoi.const_mul [PosMulStrictMono 𝕜] [PosMulReflectLT 𝕜]
     (h : Tendsto f l (𝓝[>] c)) : Tendsto (fun a => b * f a) l (𝓝[>] (b * c)) :=
   tendsto_nhdsWithin_of_tendsto_nhds_of_eventually_within _
       ((tendsto_nhds_of_tendsto_nhdsWithin h).const_mul b) <|
     (tendsto_nhdsWithin_iff.mp h).2.mono fun j => (mul_lt_mul_left hb).mpr
 #align filter.tendsto_nhds_within_Ioi.const_mul Filter.TendstoNhdsWithinIoi.const_mul
--/
 
-#print Filter.TendstoNhdsWithinIio.const_mul /-
+/- warning: filter.tendsto_nhds_within_Iio.const_mul -> Filter.TendstoNhdsWithinIio.const_mul is a dubious translation:
+lean 3 declaration is
+  forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_5 : Preorder.{u2} 𝕜] [_inst_6 : Zero.{u2} 𝕜] [_inst_7 : Mul.{u2} 𝕜] [_inst_8 : TopologicalSpace.{u2} 𝕜] [_inst_9 : ContinuousMul.{u2} 𝕜 _inst_8 _inst_7] {l : Filter.{u1} α} {f : α -> 𝕜} {b : 𝕜} {c : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toHasLt.{u2} 𝕜 _inst_5) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 _inst_6))) b) -> (forall [_inst_10 : PosMulStrictMono.{u2} 𝕜 _inst_7 _inst_6 _inst_5] [_inst_11 : PosMulReflectLT.{u2} 𝕜 _inst_7 _inst_6 _inst_5], (Filter.Tendsto.{u1, u2} α 𝕜 f l (nhdsWithin.{u2} 𝕜 _inst_8 c (Set.Iio.{u2} 𝕜 _inst_5 c))) -> (Filter.Tendsto.{u1, u2} α 𝕜 (fun (a : α) => HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b (f a)) l (nhdsWithin.{u2} 𝕜 _inst_8 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b c) (Set.Iio.{u2} 𝕜 _inst_5 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b c)))))
+but is expected to have type
+  forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_5 : Preorder.{u2} 𝕜] [_inst_6 : Zero.{u2} 𝕜] [_inst_7 : Mul.{u2} 𝕜] [_inst_8 : TopologicalSpace.{u2} 𝕜] [_inst_9 : ContinuousMul.{u2} 𝕜 _inst_8 _inst_7] {l : Filter.{u1} α} {f : α -> 𝕜} {b : 𝕜} {c : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toLT.{u2} 𝕜 _inst_5) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 _inst_6)) b) -> (forall [_inst_10 : PosMulStrictMono.{u2} 𝕜 _inst_7 _inst_6 _inst_5] [_inst_11 : PosMulReflectLT.{u2} 𝕜 _inst_7 _inst_6 _inst_5], (Filter.Tendsto.{u1, u2} α 𝕜 f l (nhdsWithin.{u2} 𝕜 _inst_8 c (Set.Iio.{u2} 𝕜 _inst_5 c))) -> (Filter.Tendsto.{u1, u2} α 𝕜 (fun (a : α) => HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b (f a)) l (nhdsWithin.{u2} 𝕜 _inst_8 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b c) (Set.Iio.{u2} 𝕜 _inst_5 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b c)))))
+Case conversion may be inaccurate. Consider using '#align filter.tendsto_nhds_within_Iio.const_mul Filter.TendstoNhdsWithinIio.const_mulₓ'. -/
 theorem Filter.TendstoNhdsWithinIio.const_mul [PosMulStrictMono 𝕜] [PosMulReflectLT 𝕜]
     (h : Tendsto f l (𝓝[<] c)) : Tendsto (fun a => b * f a) l (𝓝[<] (b * c)) :=
   tendsto_nhdsWithin_of_tendsto_nhds_of_eventually_within _
       ((tendsto_nhds_of_tendsto_nhdsWithin h).const_mul b) <|
     (tendsto_nhdsWithin_iff.mp h).2.mono fun j => (mul_lt_mul_left hb).mpr
 #align filter.tendsto_nhds_within_Iio.const_mul Filter.TendstoNhdsWithinIio.const_mul
--/
 
-#print Filter.TendstoNhdsWithinIoi.mul_const /-
+/- warning: filter.tendsto_nhds_within_Ioi.mul_const -> Filter.TendstoNhdsWithinIoi.mul_const is a dubious translation:
+lean 3 declaration is
+  forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_5 : Preorder.{u2} 𝕜] [_inst_6 : Zero.{u2} 𝕜] [_inst_7 : Mul.{u2} 𝕜] [_inst_8 : TopologicalSpace.{u2} 𝕜] [_inst_9 : ContinuousMul.{u2} 𝕜 _inst_8 _inst_7] {l : Filter.{u1} α} {f : α -> 𝕜} {b : 𝕜} {c : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toHasLt.{u2} 𝕜 _inst_5) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 _inst_6))) b) -> (forall [_inst_10 : MulPosStrictMono.{u2} 𝕜 _inst_7 _inst_6 _inst_5] [_inst_11 : MulPosReflectLT.{u2} 𝕜 _inst_7 _inst_6 _inst_5], (Filter.Tendsto.{u1, u2} α 𝕜 f l (nhdsWithin.{u2} 𝕜 _inst_8 c (Set.Ioi.{u2} 𝕜 _inst_5 c))) -> (Filter.Tendsto.{u1, u2} α 𝕜 (fun (a : α) => HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) (f a) b) l (nhdsWithin.{u2} 𝕜 _inst_8 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) c b) (Set.Ioi.{u2} 𝕜 _inst_5 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) c b)))))
+but is expected to have type
+  forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_5 : Preorder.{u2} 𝕜] [_inst_6 : Zero.{u2} 𝕜] [_inst_7 : Mul.{u2} 𝕜] [_inst_8 : TopologicalSpace.{u2} 𝕜] [_inst_9 : ContinuousMul.{u2} 𝕜 _inst_8 _inst_7] {l : Filter.{u1} α} {f : α -> 𝕜} {b : 𝕜} {c : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toLT.{u2} 𝕜 _inst_5) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 _inst_6)) b) -> (forall [_inst_10 : MulPosStrictMono.{u2} 𝕜 _inst_7 _inst_6 _inst_5] [_inst_11 : MulPosReflectLT.{u2} 𝕜 _inst_7 _inst_6 _inst_5], (Filter.Tendsto.{u1, u2} α 𝕜 f l (nhdsWithin.{u2} 𝕜 _inst_8 c (Set.Ioi.{u2} 𝕜 _inst_5 c))) -> (Filter.Tendsto.{u1, u2} α 𝕜 (fun (a : α) => HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) (f a) b) l (nhdsWithin.{u2} 𝕜 _inst_8 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) c b) (Set.Ioi.{u2} 𝕜 _inst_5 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) c b)))))
+Case conversion may be inaccurate. Consider using '#align filter.tendsto_nhds_within_Ioi.mul_const Filter.TendstoNhdsWithinIoi.mul_constₓ'. -/
 theorem Filter.TendstoNhdsWithinIoi.mul_const [MulPosStrictMono 𝕜] [MulPosReflectLT 𝕜]
     (h : Tendsto f l (𝓝[>] c)) : Tendsto (fun a => f a * b) l (𝓝[>] (c * b)) :=
   tendsto_nhdsWithin_of_tendsto_nhds_of_eventually_within _
       ((tendsto_nhds_of_tendsto_nhdsWithin h).mul_const b) <|
     (tendsto_nhdsWithin_iff.mp h).2.mono fun j => (mul_lt_mul_right hb).mpr
 #align filter.tendsto_nhds_within_Ioi.mul_const Filter.TendstoNhdsWithinIoi.mul_const
--/
 
-#print Filter.TendstoNhdsWithinIio.mul_const /-
+/- warning: filter.tendsto_nhds_within_Iio.mul_const -> Filter.TendstoNhdsWithinIio.mul_const is a dubious translation:
+lean 3 declaration is
+  forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_5 : Preorder.{u2} 𝕜] [_inst_6 : Zero.{u2} 𝕜] [_inst_7 : Mul.{u2} 𝕜] [_inst_8 : TopologicalSpace.{u2} 𝕜] [_inst_9 : ContinuousMul.{u2} 𝕜 _inst_8 _inst_7] {l : Filter.{u1} α} {f : α -> 𝕜} {b : 𝕜} {c : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toHasLt.{u2} 𝕜 _inst_5) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 _inst_6))) b) -> (forall [_inst_10 : MulPosStrictMono.{u2} 𝕜 _inst_7 _inst_6 _inst_5] [_inst_11 : MulPosReflectLT.{u2} 𝕜 _inst_7 _inst_6 _inst_5], (Filter.Tendsto.{u1, u2} α 𝕜 f l (nhdsWithin.{u2} 𝕜 _inst_8 c (Set.Iio.{u2} 𝕜 _inst_5 c))) -> (Filter.Tendsto.{u1, u2} α 𝕜 (fun (a : α) => HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) (f a) b) l (nhdsWithin.{u2} 𝕜 _inst_8 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) c b) (Set.Iio.{u2} 𝕜 _inst_5 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) c b)))))
+but is expected to have type
+  forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_5 : Preorder.{u2} 𝕜] [_inst_6 : Zero.{u2} 𝕜] [_inst_7 : Mul.{u2} 𝕜] [_inst_8 : TopologicalSpace.{u2} 𝕜] [_inst_9 : ContinuousMul.{u2} 𝕜 _inst_8 _inst_7] {l : Filter.{u1} α} {f : α -> 𝕜} {b : 𝕜} {c : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toLT.{u2} 𝕜 _inst_5) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 _inst_6)) b) -> (forall [_inst_10 : MulPosStrictMono.{u2} 𝕜 _inst_7 _inst_6 _inst_5] [_inst_11 : MulPosReflectLT.{u2} 𝕜 _inst_7 _inst_6 _inst_5], (Filter.Tendsto.{u1, u2} α 𝕜 f l (nhdsWithin.{u2} 𝕜 _inst_8 c (Set.Iio.{u2} 𝕜 _inst_5 c))) -> (Filter.Tendsto.{u1, u2} α 𝕜 (fun (a : α) => HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) (f a) b) l (nhdsWithin.{u2} 𝕜 _inst_8 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) c b) (Set.Iio.{u2} 𝕜 _inst_5 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) c b)))))
+Case conversion may be inaccurate. Consider using '#align filter.tendsto_nhds_within_Iio.mul_const Filter.TendstoNhdsWithinIio.mul_constₓ'. -/
 theorem Filter.TendstoNhdsWithinIio.mul_const [MulPosStrictMono 𝕜] [MulPosReflectLT 𝕜]
     (h : Tendsto f l (𝓝[<] c)) : Tendsto (fun a => f a * b) l (𝓝[<] (c * b)) :=
   tendsto_nhdsWithin_of_tendsto_nhds_of_eventually_within _
       ((tendsto_nhds_of_tendsto_nhdsWithin h).mul_const b) <|
     (tendsto_nhdsWithin_iff.mp h).2.mono fun j => (mul_lt_mul_right hb).mpr
 #align filter.tendsto_nhds_within_Iio.mul_const Filter.TendstoNhdsWithinIio.mul_const
--/
 
 end tendsto_nhds
 
@@ -628,7 +644,7 @@ def Submonoid.topologicalClosure (s : Submonoid M) : Submonoid M
 
 /- warning: submonoid.le_topological_closure -> Submonoid.le_topologicalClosure is a dubious translation:
 lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (s : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)), LE.le.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Preorder.toLE.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) s (Submonoid.topologicalClosure.{u1} M _inst_2 _inst_3 _inst_4 s)
+  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (s : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)), LE.le.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Preorder.toHasLe.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) s (Submonoid.topologicalClosure.{u1} M _inst_2 _inst_3 _inst_4 s)
 but is expected to have type
   forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (s : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)), LE.le.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Preorder.toLE.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Submonoid.instCompleteLatticeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)))))) s (Submonoid.topologicalClosure.{u1} M _inst_2 _inst_3 _inst_4 s)
 Case conversion may be inaccurate. Consider using '#align submonoid.le_topological_closure Submonoid.le_topologicalClosureₓ'. -/
@@ -652,7 +668,7 @@ theorem Submonoid.isClosed_topologicalClosure (s : Submonoid M) :
 
 /- warning: submonoid.topological_closure_minimal -> Submonoid.topologicalClosure_minimal is a dubious translation:
 lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (s : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) {t : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)}, (LE.le.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Preorder.toLE.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) s t) -> (IsClosed.{u1} M _inst_2 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) t)) -> (LE.le.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Preorder.toLE.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) (Submonoid.topologicalClosure.{u1} M _inst_2 _inst_3 _inst_4 s) t)
+  forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (s : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) {t : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)}, (LE.le.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Preorder.toHasLe.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) s t) -> (IsClosed.{u1} M _inst_2 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) t)) -> (LE.le.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Preorder.toHasLe.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) (Submonoid.topologicalClosure.{u1} M _inst_2 _inst_3 _inst_4 s) t)
 but is expected to have type
   forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (s : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) {t : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)}, (LE.le.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Preorder.toLE.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Submonoid.instCompleteLatticeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)))))) s t) -> (IsClosed.{u1} M _inst_2 (SetLike.coe.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) t)) -> (LE.le.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Preorder.toLE.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Submonoid.instCompleteLatticeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)))))) (Submonoid.topologicalClosure.{u1} M _inst_2 _inst_3 _inst_4 s) t)
 Case conversion may be inaccurate. Consider using '#align submonoid.topological_closure_minimal Submonoid.topologicalClosure_minimalₓ'. -/
Diff
@@ -458,8 +458,8 @@ theorem isClosed_setOf_map_mul [Mul M₁] [Mul M₂] [ContinuousMul M₂] :
   by
   simp only [set_of_forall]
   exact
-    isClosed_interᵢ fun x =>
-      isClosed_interᵢ fun y =>
+    isClosed_iInter fun x =>
+      isClosed_iInter fun y =>
         isClosed_eq (continuous_apply _) ((continuous_apply _).mul (continuous_apply _))
 #align is_closed_set_of_map_mul isClosed_setOf_map_mul
 #align is_closed_set_of_map_add isClosed_setOf_map_add
@@ -1263,35 +1263,35 @@ section LatticeOps
 
 variable {ι' : Sort _} [Mul M]
 
-/- warning: has_continuous_mul_Inf -> continuousMul_infₛ is a dubious translation:
+/- warning: has_continuous_mul_Inf -> continuousMul_sInf is a dubious translation:
 lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_2 : Mul.{u1} M] {ts : Set.{u1} (TopologicalSpace.{u1} M)}, (forall (t : TopologicalSpace.{u1} M), (Membership.Mem.{u1, u1} (TopologicalSpace.{u1} M) (Set.{u1} (TopologicalSpace.{u1} M)) (Set.hasMem.{u1} (TopologicalSpace.{u1} M)) t ts) -> (ContinuousMul.{u1} M t _inst_2)) -> (ContinuousMul.{u1} M (InfSet.infₛ.{u1} (TopologicalSpace.{u1} M) (ConditionallyCompleteLattice.toHasInf.{u1} (TopologicalSpace.{u1} M) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.{u1} M) (TopologicalSpace.completeLattice.{u1} M))) ts) _inst_2)
+  forall {M : Type.{u1}} [_inst_2 : Mul.{u1} M] {ts : Set.{u1} (TopologicalSpace.{u1} M)}, (forall (t : TopologicalSpace.{u1} M), (Membership.Mem.{u1, u1} (TopologicalSpace.{u1} M) (Set.{u1} (TopologicalSpace.{u1} M)) (Set.hasMem.{u1} (TopologicalSpace.{u1} M)) t ts) -> (ContinuousMul.{u1} M t _inst_2)) -> (ContinuousMul.{u1} M (InfSet.sInf.{u1} (TopologicalSpace.{u1} M) (ConditionallyCompleteLattice.toHasInf.{u1} (TopologicalSpace.{u1} M) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.{u1} M) (TopologicalSpace.completeLattice.{u1} M))) ts) _inst_2)
 but is expected to have type
-  forall {M : Type.{u1}} [_inst_2 : Mul.{u1} M] {ts : Set.{u1} (TopologicalSpace.{u1} M)}, (forall (t : TopologicalSpace.{u1} M), (Membership.mem.{u1, u1} (TopologicalSpace.{u1} M) (Set.{u1} (TopologicalSpace.{u1} M)) (Set.instMembershipSet.{u1} (TopologicalSpace.{u1} M)) t ts) -> (ContinuousMul.{u1} M t _inst_2)) -> (ContinuousMul.{u1} M (InfSet.infₛ.{u1} (TopologicalSpace.{u1} M) (ConditionallyCompleteLattice.toInfSet.{u1} (TopologicalSpace.{u1} M) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.{u1} M) (TopologicalSpace.instCompleteLatticeTopologicalSpace.{u1} M))) ts) _inst_2)
-Case conversion may be inaccurate. Consider using '#align has_continuous_mul_Inf continuousMul_infₛₓ'. -/
+  forall {M : Type.{u1}} [_inst_2 : Mul.{u1} M] {ts : Set.{u1} (TopologicalSpace.{u1} M)}, (forall (t : TopologicalSpace.{u1} M), (Membership.mem.{u1, u1} (TopologicalSpace.{u1} M) (Set.{u1} (TopologicalSpace.{u1} M)) (Set.instMembershipSet.{u1} (TopologicalSpace.{u1} M)) t ts) -> (ContinuousMul.{u1} M t _inst_2)) -> (ContinuousMul.{u1} M (InfSet.sInf.{u1} (TopologicalSpace.{u1} M) (ConditionallyCompleteLattice.toInfSet.{u1} (TopologicalSpace.{u1} M) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.{u1} M) (TopologicalSpace.instCompleteLatticeTopologicalSpace.{u1} M))) ts) _inst_2)
+Case conversion may be inaccurate. Consider using '#align has_continuous_mul_Inf continuousMul_sInfₓ'. -/
 @[to_additive]
-theorem continuousMul_infₛ {ts : Set (TopologicalSpace M)} (h : ∀ t ∈ ts, @ContinuousMul M t _) :
-    @ContinuousMul M (infₛ ts) _ :=
+theorem continuousMul_sInf {ts : Set (TopologicalSpace M)} (h : ∀ t ∈ ts, @ContinuousMul M t _) :
+    @ContinuousMul M (sInf ts) _ :=
   {
     continuous_mul :=
-      continuous_infₛ_rng.2 fun t ht =>
-        continuous_infₛ_dom₂ ht ht (@ContinuousMul.continuous_mul M t _ (h t ht)) }
-#align has_continuous_mul_Inf continuousMul_infₛ
-#align has_continuous_add_Inf continuousAdd_infₛ
+      continuous_sInf_rng.2 fun t ht =>
+        continuous_sInf_dom₂ ht ht (@ContinuousMul.continuous_mul M t _ (h t ht)) }
+#align has_continuous_mul_Inf continuousMul_sInf
+#align has_continuous_add_Inf continuousAdd_sInf
 
-/- warning: has_continuous_mul_infi -> continuousMul_infᵢ is a dubious translation:
+/- warning: has_continuous_mul_infi -> continuousMul_iInf is a dubious translation:
 lean 3 declaration is
-  forall {M : Type.{u1}} {ι' : Sort.{u2}} [_inst_2 : Mul.{u1} M] {ts : ι' -> (TopologicalSpace.{u1} M)}, (forall (i : ι'), ContinuousMul.{u1} M (ts i) _inst_2) -> (ContinuousMul.{u1} M (infᵢ.{u1, u2} (TopologicalSpace.{u1} M) (ConditionallyCompleteLattice.toHasInf.{u1} (TopologicalSpace.{u1} M) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.{u1} M) (TopologicalSpace.completeLattice.{u1} M))) ι' (fun (i : ι') => ts i)) _inst_2)
+  forall {M : Type.{u1}} {ι' : Sort.{u2}} [_inst_2 : Mul.{u1} M] {ts : ι' -> (TopologicalSpace.{u1} M)}, (forall (i : ι'), ContinuousMul.{u1} M (ts i) _inst_2) -> (ContinuousMul.{u1} M (iInf.{u1, u2} (TopologicalSpace.{u1} M) (ConditionallyCompleteLattice.toHasInf.{u1} (TopologicalSpace.{u1} M) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.{u1} M) (TopologicalSpace.completeLattice.{u1} M))) ι' (fun (i : ι') => ts i)) _inst_2)
 but is expected to have type
-  forall {M : Type.{u2}} {ι' : Sort.{u1}} [_inst_2 : Mul.{u2} M] {ts : ι' -> (TopologicalSpace.{u2} M)}, (forall (i : ι'), ContinuousMul.{u2} M (ts i) _inst_2) -> (ContinuousMul.{u2} M (infᵢ.{u2, u1} (TopologicalSpace.{u2} M) (ConditionallyCompleteLattice.toInfSet.{u2} (TopologicalSpace.{u2} M) (CompleteLattice.toConditionallyCompleteLattice.{u2} (TopologicalSpace.{u2} M) (TopologicalSpace.instCompleteLatticeTopologicalSpace.{u2} M))) ι' (fun (i : ι') => ts i)) _inst_2)
-Case conversion may be inaccurate. Consider using '#align has_continuous_mul_infi continuousMul_infᵢₓ'. -/
+  forall {M : Type.{u2}} {ι' : Sort.{u1}} [_inst_2 : Mul.{u2} M] {ts : ι' -> (TopologicalSpace.{u2} M)}, (forall (i : ι'), ContinuousMul.{u2} M (ts i) _inst_2) -> (ContinuousMul.{u2} M (iInf.{u2, u1} (TopologicalSpace.{u2} M) (ConditionallyCompleteLattice.toInfSet.{u2} (TopologicalSpace.{u2} M) (CompleteLattice.toConditionallyCompleteLattice.{u2} (TopologicalSpace.{u2} M) (TopologicalSpace.instCompleteLatticeTopologicalSpace.{u2} M))) ι' (fun (i : ι') => ts i)) _inst_2)
+Case conversion may be inaccurate. Consider using '#align has_continuous_mul_infi continuousMul_iInfₓ'. -/
 @[to_additive]
-theorem continuousMul_infᵢ {ts : ι' → TopologicalSpace M} (h' : ∀ i, @ContinuousMul M (ts i) _) :
+theorem continuousMul_iInf {ts : ι' → TopologicalSpace M} (h' : ∀ i, @ContinuousMul M (ts i) _) :
     @ContinuousMul M (⨅ i, ts i) _ := by
-  rw [← infₛ_range]
-  exact continuousMul_infₛ (set.forall_range_iff.mpr h')
-#align has_continuous_mul_infi continuousMul_infᵢ
-#align has_continuous_add_infi continuousAdd_infᵢ
+  rw [← sInf_range]
+  exact continuousMul_sInf (set.forall_range_iff.mpr h')
+#align has_continuous_mul_infi continuousMul_iInf
+#align has_continuous_add_infi continuousAdd_iInf
 
 /- warning: has_continuous_mul_inf -> continuousMul_inf is a dubious translation:
 lean 3 declaration is
@@ -1303,8 +1303,8 @@ Case conversion may be inaccurate. Consider using '#align has_continuous_mul_inf
 theorem continuousMul_inf {t₁ t₂ : TopologicalSpace M} (h₁ : @ContinuousMul M t₁ _)
     (h₂ : @ContinuousMul M t₂ _) : @ContinuousMul M (t₁ ⊓ t₂) _ :=
   by
-  rw [inf_eq_infᵢ]
-  refine' continuousMul_infᵢ fun b => _
+  rw [inf_eq_iInf]
+  refine' continuousMul_iInf fun b => _
   cases b <;> assumption
 #align has_continuous_mul_inf continuousMul_inf
 #align has_continuous_add_inf continuousAdd_inf
Diff
@@ -415,7 +415,7 @@ theorem ContinuousMul.of_nhds_one {M : Type u} [Monoid M] [TopologicalSpace M]
 lean 3 declaration is
   forall (M : Type.{u1}) [_inst_5 : CommMonoid.{u1} M] [_inst_6 : TopologicalSpace.{u1} M], (Filter.Tendsto.{u1, u1} (Prod.{u1, u1} M M) M (Function.uncurry.{u1, u1, u1} M M M (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))))) (Filter.prod.{u1, u1} M M (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))))))) -> (forall (x₀ : M), Eq.{succ u1} (Filter.{u1} M) (nhds.{u1} M _inst_6 x₀) (Filter.map.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))) x₀ x) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))))))) -> (ContinuousMul.{u1} M _inst_6 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))
 but is expected to have type
-  forall (M : Type.{u1}) [_inst_5 : CommMonoid.{u1} M] [_inst_6 : TopologicalSpace.{u1} M], (Filter.Tendsto.{u1, u1} (Prod.{u1, u1} M M) M (Function.uncurry.{u1, u1, u1} M M M (fun (x._@.Mathlib.Topology.Algebra.Monoid._hyg.2840 : M) (x._@.Mathlib.Topology.Algebra.Monoid._hyg.2842 : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))) x._@.Mathlib.Topology.Algebra.Monoid._hyg.2840 x._@.Mathlib.Topology.Algebra.Monoid._hyg.2842)) (Filter.prod.{u1, u1} M M (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))))) -> (forall (x₀ : M), Eq.{succ u1} (Filter.{u1} M) (nhds.{u1} M _inst_6 x₀) (Filter.map.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))) x₀ x) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))))) -> (ContinuousMul.{u1} M _inst_6 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))
+  forall (M : Type.{u1}) [_inst_5 : CommMonoid.{u1} M] [_inst_6 : TopologicalSpace.{u1} M], (Filter.Tendsto.{u1, u1} (Prod.{u1, u1} M M) M (Function.uncurry.{u1, u1, u1} M M M (fun (x._@.Mathlib.Topology.Algebra.Monoid._hyg.2838 : M) (x._@.Mathlib.Topology.Algebra.Monoid._hyg.2840 : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))) x._@.Mathlib.Topology.Algebra.Monoid._hyg.2838 x._@.Mathlib.Topology.Algebra.Monoid._hyg.2840)) (Filter.prod.{u1, u1} M M (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))))) -> (forall (x₀ : M), Eq.{succ u1} (Filter.{u1} M) (nhds.{u1} M _inst_6 x₀) (Filter.map.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))) x₀ x) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))))) -> (ContinuousMul.{u1} M _inst_6 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))
 Case conversion may be inaccurate. Consider using '#align has_continuous_mul_of_comm_of_nhds_one continuousMul_of_comm_of_nhds_oneₓ'. -/
 @[to_additive]
 theorem continuousMul_of_comm_of_nhds_one (M : Type u) [CommMonoid M] [TopologicalSpace M]
Diff
@@ -288,7 +288,7 @@ end tendsto_nhds
 lean 3 declaration is
   forall {ι : Type.{u1}} {N : Type.{u2}} [_inst_5 : TopologicalSpace.{u2} N] [_inst_6 : Monoid.{u2} N] [_inst_7 : ContinuousMul.{u2} N _inst_5 (MulOneClass.toHasMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_6))] [_inst_8 : T2Space.{u2} N _inst_5] {f : ι -> (Units.{u2} N _inst_6)} {r₁ : N} {r₂ : N} {l : Filter.{u1} ι} [_inst_9 : Filter.NeBot.{u1} ι l], (Filter.Tendsto.{u1, u2} ι N (fun (x : ι) => (fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Units.{u2} N _inst_6) N (HasLiftT.mk.{succ u2, succ u2} (Units.{u2} N _inst_6) N (CoeTCₓ.coe.{succ u2, succ u2} (Units.{u2} N _inst_6) N (coeBase.{succ u2, succ u2} (Units.{u2} N _inst_6) N (Units.hasCoe.{u2} N _inst_6)))) (f x)) l (nhds.{u2} N _inst_5 r₁)) -> (Filter.Tendsto.{u1, u2} ι N (fun (x : ι) => (fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Units.{u2} N _inst_6) N (HasLiftT.mk.{succ u2, succ u2} (Units.{u2} N _inst_6) N (CoeTCₓ.coe.{succ u2, succ u2} (Units.{u2} N _inst_6) N (coeBase.{succ u2, succ u2} (Units.{u2} N _inst_6) N (Units.hasCoe.{u2} N _inst_6)))) (Inv.inv.{u2} (Units.{u2} N _inst_6) (Units.hasInv.{u2} N _inst_6) (f x))) l (nhds.{u2} N _inst_5 r₂)) -> (Units.{u2} N _inst_6)
 but is expected to have type
-  forall {ι : Type.{u1}} {N : Type.{u2}} [_inst_5 : TopologicalSpace.{u2} N] [_inst_6 : Monoid.{u2} N] [_inst_7 : ContinuousMul.{u2} N _inst_5 (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_6))] [_inst_8 : T2Space.{u2} N _inst_5] {f : ι -> (Units.{u2} N _inst_6)} {r₁ : N} {r₂ : N} {l : Filter.{u1} ι} [_inst_9 : Filter.NeBot.{u1} ι l], (Filter.Tendsto.{u1, u2} ι N (fun (x : ι) => Units.val.{u2} N _inst_6 (f x)) l (nhds.{u2} N _inst_5 r₁)) -> (Filter.Tendsto.{u1, u2} ι N (fun (x : ι) => Units.val.{u2} N _inst_6 (Inv.inv.{u2} (Units.{u2} N _inst_6) (Units.instInvUnits.{u2} N _inst_6) (f x))) l (nhds.{u2} N _inst_5 r₂)) -> (Units.{u2} N _inst_6)
+  forall {ι : Type.{u1}} {N : Type.{u2}} [_inst_5 : TopologicalSpace.{u2} N] [_inst_6 : Monoid.{u2} N] [_inst_7 : ContinuousMul.{u2} N _inst_5 (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_6))] [_inst_8 : T2Space.{u2} N _inst_5] {f : ι -> (Units.{u2} N _inst_6)} {r₁ : N} {r₂ : N} {l : Filter.{u1} ι} [_inst_9 : Filter.NeBot.{u1} ι l], (Filter.Tendsto.{u1, u2} ι N (fun (x : ι) => Units.val.{u2} N _inst_6 (f x)) l (nhds.{u2} N _inst_5 r₁)) -> (Filter.Tendsto.{u1, u2} ι N (fun (x : ι) => Units.val.{u2} N _inst_6 (Inv.inv.{u2} (Units.{u2} N _inst_6) (Units.instInv.{u2} N _inst_6) (f x))) l (nhds.{u2} N _inst_5 r₂)) -> (Units.{u2} N _inst_6)
 Case conversion may be inaccurate. Consider using '#align filter.tendsto.units Filter.Tendsto.unitsₓ'. -/
 /-- Construct a unit from limits of units and their inverses. -/
 @[to_additive Filter.Tendsto.addUnits
Diff
@@ -378,7 +378,7 @@ open Function
 lean 3 declaration is
   forall {M : Type.{u1}} [_inst_5 : Monoid.{u1} M] [_inst_6 : TopologicalSpace.{u1} M], (Filter.Tendsto.{u1, u1} (Prod.{u1, u1} M M) M (Function.uncurry.{u1, u1, u1} M M M (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5))))) (Filter.prod.{u1, u1} M M (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5)))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5))))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5))))))) -> (forall (x₀ : M), Eq.{succ u1} (Filter.{u1} M) (nhds.{u1} M _inst_6 x₀) (Filter.map.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5))) x₀ x) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5)))))))) -> (forall (x₀ : M), Eq.{succ u1} (Filter.{u1} M) (nhds.{u1} M _inst_6 x₀) (Filter.map.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5))) x x₀) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5)))))))) -> (ContinuousMul.{u1} M _inst_6 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5)))
 but is expected to have type
-  forall {M : Type.{u1}} [_inst_5 : Monoid.{u1} M] [_inst_6 : TopologicalSpace.{u1} M], (Filter.Tendsto.{u1, u1} (Prod.{u1, u1} M M) M (Function.uncurry.{u1, u1, u1} M M M (fun (x._@.Mathlib.Topology.Algebra.Monoid._hyg.2116 : M) (x._@.Mathlib.Topology.Algebra.Monoid._hyg.2118 : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5))) x._@.Mathlib.Topology.Algebra.Monoid._hyg.2116 x._@.Mathlib.Topology.Algebra.Monoid._hyg.2118)) (Filter.prod.{u1, u1} M M (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_5)))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_5))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_5))))) -> (forall (x₀ : M), Eq.{succ u1} (Filter.{u1} M) (nhds.{u1} M _inst_6 x₀) (Filter.map.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5))) x₀ x) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_5)))))) -> (forall (x₀ : M), Eq.{succ u1} (Filter.{u1} M) (nhds.{u1} M _inst_6 x₀) (Filter.map.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5))) x x₀) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_5)))))) -> (ContinuousMul.{u1} M _inst_6 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5)))
+  forall {M : Type.{u1}} [_inst_5 : Monoid.{u1} M] [_inst_6 : TopologicalSpace.{u1} M], (Filter.Tendsto.{u1, u1} (Prod.{u1, u1} M M) M (Function.uncurry.{u1, u1, u1} M M M (fun (x._@.Mathlib.Topology.Algebra.Monoid._hyg.2120 : M) (x._@.Mathlib.Topology.Algebra.Monoid._hyg.2122 : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5))) x._@.Mathlib.Topology.Algebra.Monoid._hyg.2120 x._@.Mathlib.Topology.Algebra.Monoid._hyg.2122)) (Filter.prod.{u1, u1} M M (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_5)))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_5))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_5))))) -> (forall (x₀ : M), Eq.{succ u1} (Filter.{u1} M) (nhds.{u1} M _inst_6 x₀) (Filter.map.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5))) x₀ x) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_5)))))) -> (forall (x₀ : M), Eq.{succ u1} (Filter.{u1} M) (nhds.{u1} M _inst_6 x₀) (Filter.map.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5))) x x₀) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_5)))))) -> (ContinuousMul.{u1} M _inst_6 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5)))
 Case conversion may be inaccurate. Consider using '#align has_continuous_mul.of_nhds_one ContinuousMul.of_nhds_oneₓ'. -/
 @[to_additive]
 theorem ContinuousMul.of_nhds_one {M : Type u} [Monoid M] [TopologicalSpace M]
@@ -415,7 +415,7 @@ theorem ContinuousMul.of_nhds_one {M : Type u} [Monoid M] [TopologicalSpace M]
 lean 3 declaration is
   forall (M : Type.{u1}) [_inst_5 : CommMonoid.{u1} M] [_inst_6 : TopologicalSpace.{u1} M], (Filter.Tendsto.{u1, u1} (Prod.{u1, u1} M M) M (Function.uncurry.{u1, u1, u1} M M M (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))))) (Filter.prod.{u1, u1} M M (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))))))) -> (forall (x₀ : M), Eq.{succ u1} (Filter.{u1} M) (nhds.{u1} M _inst_6 x₀) (Filter.map.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))) x₀ x) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))))))) -> (ContinuousMul.{u1} M _inst_6 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))
 but is expected to have type
-  forall (M : Type.{u1}) [_inst_5 : CommMonoid.{u1} M] [_inst_6 : TopologicalSpace.{u1} M], (Filter.Tendsto.{u1, u1} (Prod.{u1, u1} M M) M (Function.uncurry.{u1, u1, u1} M M M (fun (x._@.Mathlib.Topology.Algebra.Monoid._hyg.2836 : M) (x._@.Mathlib.Topology.Algebra.Monoid._hyg.2838 : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))) x._@.Mathlib.Topology.Algebra.Monoid._hyg.2836 x._@.Mathlib.Topology.Algebra.Monoid._hyg.2838)) (Filter.prod.{u1, u1} M M (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))))) -> (forall (x₀ : M), Eq.{succ u1} (Filter.{u1} M) (nhds.{u1} M _inst_6 x₀) (Filter.map.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))) x₀ x) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))))) -> (ContinuousMul.{u1} M _inst_6 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))
+  forall (M : Type.{u1}) [_inst_5 : CommMonoid.{u1} M] [_inst_6 : TopologicalSpace.{u1} M], (Filter.Tendsto.{u1, u1} (Prod.{u1, u1} M M) M (Function.uncurry.{u1, u1, u1} M M M (fun (x._@.Mathlib.Topology.Algebra.Monoid._hyg.2840 : M) (x._@.Mathlib.Topology.Algebra.Monoid._hyg.2842 : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))) x._@.Mathlib.Topology.Algebra.Monoid._hyg.2840 x._@.Mathlib.Topology.Algebra.Monoid._hyg.2842)) (Filter.prod.{u1, u1} M M (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))))) -> (forall (x₀ : M), Eq.{succ u1} (Filter.{u1} M) (nhds.{u1} M _inst_6 x₀) (Filter.map.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))) x₀ x) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))))) -> (ContinuousMul.{u1} M _inst_6 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))
 Case conversion may be inaccurate. Consider using '#align has_continuous_mul_of_comm_of_nhds_one continuousMul_of_comm_of_nhds_oneₓ'. -/
 @[to_additive]
 theorem continuousMul_of_comm_of_nhds_one (M : Type u) [CommMonoid M] [TopologicalSpace M]
Diff
@@ -1315,31 +1315,47 @@ namespace ContinuousMap
 
 variable [Mul X] [ContinuousMul X]
 
+#print ContinuousMap.mulRight /-
 /-- The continuous map `λ y, y * x` -/
 @[to_additive "The continuous map `λ y, y + x"]
 protected def mulRight (x : X) : C(X, X) :=
   mk _ (continuous_mul_right x)
 #align continuous_map.mul_right ContinuousMap.mulRight
 #align continuous_map.add_right ContinuousMap.addRight
+-/
 
+/- warning: continuous_map.coe_mul_right -> ContinuousMap.coe_mulRight is a dubious translation:
+lean 3 declaration is
+  forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : Mul.{u1} X] [_inst_3 : ContinuousMul.{u1} X _inst_1 _inst_2] (x : X), Eq.{succ u1} (X -> X) (coeFn.{succ u1, succ u1} (ContinuousMap.{u1, u1} X X _inst_1 _inst_1) (fun (_x : ContinuousMap.{u1, u1} X X _inst_1 _inst_1) => X -> X) (ContinuousMap.hasCoeToFun.{u1, u1} X X _inst_1 _inst_1) (ContinuousMap.mulRight.{u1} X _inst_1 _inst_2 _inst_3 x)) (fun (y : X) => HMul.hMul.{u1, u1, u1} X X X (instHMul.{u1} X _inst_2) y x)
+but is expected to have type
+  forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : Mul.{u1} X] [_inst_3 : ContinuousMul.{u1} X _inst_1 _inst_2] (x : X), Eq.{succ u1} (forall (ᾰ : X), (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : X) => X) ᾰ) (FunLike.coe.{succ u1, succ u1, succ u1} (ContinuousMap.{u1, u1} X X _inst_1 _inst_1) X (fun (_x : X) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : X) => X) _x) (ContinuousMapClass.toFunLike.{u1, u1, u1} (ContinuousMap.{u1, u1} X X _inst_1 _inst_1) X X _inst_1 _inst_1 (ContinuousMap.instContinuousMapClassContinuousMap.{u1, u1} X X _inst_1 _inst_1)) (ContinuousMap.mulRight.{u1} X _inst_1 _inst_2 _inst_3 x)) (fun (y : X) => HMul.hMul.{u1, u1, u1} X X X (instHMul.{u1} X _inst_2) y x)
+Case conversion may be inaccurate. Consider using '#align continuous_map.coe_mul_right ContinuousMap.coe_mulRightₓ'. -/
 @[to_additive, simp]
 theorem coe_mulRight (x : X) : ⇑(ContinuousMap.mulRight x) = fun y => y * x :=
   rfl
 #align continuous_map.coe_mul_right ContinuousMap.coe_mulRight
-#align continuous_map.coe_add_right ContinuousMap.coe_add_right
+#align continuous_map.coe_add_right ContinuousMap.coe_addRight
 
+#print ContinuousMap.mulLeft /-
 /-- The continuous map `λ y, x * y` -/
 @[to_additive "The continuous map `λ y, x + y"]
 protected def mulLeft (x : X) : C(X, X) :=
   mk _ (continuous_mul_left x)
 #align continuous_map.mul_left ContinuousMap.mulLeft
 #align continuous_map.add_left ContinuousMap.addLeft
+-/
 
+/- warning: continuous_map.coe_mul_left -> ContinuousMap.coe_mulLeft is a dubious translation:
+lean 3 declaration is
+  forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : Mul.{u1} X] [_inst_3 : ContinuousMul.{u1} X _inst_1 _inst_2] (x : X), Eq.{succ u1} (X -> X) (coeFn.{succ u1, succ u1} (ContinuousMap.{u1, u1} X X _inst_1 _inst_1) (fun (_x : ContinuousMap.{u1, u1} X X _inst_1 _inst_1) => X -> X) (ContinuousMap.hasCoeToFun.{u1, u1} X X _inst_1 _inst_1) (ContinuousMap.mulLeft.{u1} X _inst_1 _inst_2 _inst_3 x)) (fun (y : X) => HMul.hMul.{u1, u1, u1} X X X (instHMul.{u1} X _inst_2) x y)
+but is expected to have type
+  forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : Mul.{u1} X] [_inst_3 : ContinuousMul.{u1} X _inst_1 _inst_2] (x : X), Eq.{succ u1} (forall (ᾰ : X), (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : X) => X) ᾰ) (FunLike.coe.{succ u1, succ u1, succ u1} (ContinuousMap.{u1, u1} X X _inst_1 _inst_1) X (fun (_x : X) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : X) => X) _x) (ContinuousMapClass.toFunLike.{u1, u1, u1} (ContinuousMap.{u1, u1} X X _inst_1 _inst_1) X X _inst_1 _inst_1 (ContinuousMap.instContinuousMapClassContinuousMap.{u1, u1} X X _inst_1 _inst_1)) (ContinuousMap.mulLeft.{u1} X _inst_1 _inst_2 _inst_3 x)) (fun (y : X) => HMul.hMul.{u1, u1, u1} X X X (instHMul.{u1} X _inst_2) x y)
+Case conversion may be inaccurate. Consider using '#align continuous_map.coe_mul_left ContinuousMap.coe_mulLeftₓ'. -/
 @[to_additive, simp]
 theorem coe_mulLeft (x : X) : ⇑(ContinuousMap.mulLeft x) = fun y => x * y :=
   rfl
 #align continuous_map.coe_mul_left ContinuousMap.coe_mulLeft
-#align continuous_map.coe_add_left ContinuousMap.coe_add_left
+#align continuous_map.coe_add_left ContinuousMap.coe_addLeft
 
 end ContinuousMap
 
Diff
@@ -471,7 +471,7 @@ variable {M₁ M₂} [MulOneClass M₁] [MulOneClass M₂] [ContinuousMul M₂]
 lean 3 declaration is
   forall {M₁ : Type.{u1}} {M₂ : Type.{u2}} [_inst_2 : TopologicalSpace.{u2} M₂] [_inst_3 : T2Space.{u2} M₂ _inst_2] [_inst_4 : MulOneClass.{u1} M₁] [_inst_5 : MulOneClass.{u2} M₂] [_inst_6 : ContinuousMul.{u2} M₂ _inst_2 (MulOneClass.toHasMul.{u2} M₂ _inst_5)] {F : Type.{u3}} [_inst_7 : MonoidHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5] (f : M₁ -> M₂), (Membership.Mem.{max u1 u2, max u1 u2} (M₁ -> M₂) (Set.{max u1 u2} (M₁ -> M₂)) (Set.hasMem.{max u1 u2} (M₁ -> M₂)) f (closure.{max u1 u2} (M₁ -> M₂) (Pi.topologicalSpace.{u1, u2} M₁ (fun (x : M₁) => M₂) (fun (a : M₁) => _inst_2)) (Set.range.{max u1 u2, succ u3} (M₁ -> M₂) F (fun (f : F) (x : M₁) => coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M₁ -> M₂) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M₁ (fun (_x : M₁) => M₂) (MulHomClass.toFunLike.{u3, u1, u2} F M₁ M₂ (MulOneClass.toHasMul.{u1} M₁ _inst_4) (MulOneClass.toHasMul.{u2} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5 _inst_7))) f x)))) -> (MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5)
 but is expected to have type
-  forall {M₁ : Type.{u1}} {M₂ : Type.{u2}} [_inst_2 : TopologicalSpace.{u2} M₂] [_inst_3 : T2Space.{u2} M₂ _inst_2] [_inst_4 : MulOneClass.{u1} M₁] [_inst_5 : MulOneClass.{u2} M₂] [_inst_6 : ContinuousMul.{u2} M₂ _inst_2 (MulOneClass.toMul.{u2} M₂ _inst_5)] {F : Type.{u3}} [_inst_7 : MonoidHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5] (f : M₁ -> M₂), (Membership.mem.{max u1 u2, max u1 u2} (M₁ -> M₂) (Set.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) x)) (Set.instMembershipSet.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) x)) f (closure.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) x) (Pi.topologicalSpace.{u1, u2} M₁ (fun (x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) x) (fun (a : M₁) => _inst_2)) (Set.range.{max u1 u2, succ u3} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) x) F (fun (f : F) (x : M₁) => FunLike.coe.{succ u3, succ u1, succ u2} F M₁ (fun (_x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) _x) (MulHomClass.toFunLike.{u3, u1, u2} F M₁ M₂ (MulOneClass.toMul.{u1} M₁ _inst_4) (MulOneClass.toMul.{u2} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5 _inst_7)) f x)))) -> (MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5)
+  forall {M₁ : Type.{u1}} {M₂ : Type.{u2}} [_inst_2 : TopologicalSpace.{u2} M₂] [_inst_3 : T2Space.{u2} M₂ _inst_2] [_inst_4 : MulOneClass.{u1} M₁] [_inst_5 : MulOneClass.{u2} M₂] [_inst_6 : ContinuousMul.{u2} M₂ _inst_2 (MulOneClass.toMul.{u2} M₂ _inst_5)] {F : Type.{u3}} [_inst_7 : MonoidHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5] (f : M₁ -> M₂), (Membership.mem.{max u1 u2, max u1 u2} (M₁ -> M₂) (Set.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) x)) (Set.instMembershipSet.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) x)) f (closure.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) x) (Pi.topologicalSpace.{u1, u2} M₁ (fun (x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) x) (fun (a : M₁) => _inst_2)) (Set.range.{max u1 u2, succ u3} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) x) F (fun (f : F) (x : M₁) => FunLike.coe.{succ u3, succ u1, succ u2} F M₁ (fun (_x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) _x) (MulHomClass.toFunLike.{u3, u1, u2} F M₁ M₂ (MulOneClass.toMul.{u1} M₁ _inst_4) (MulOneClass.toMul.{u2} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5 _inst_7)) f x)))) -> (MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5)
 Case conversion may be inaccurate. Consider using '#align monoid_hom_of_mem_closure_range_coe monoidHomOfMemClosureRangeCoeₓ'. -/
 /-- Construct a bundled monoid homomorphism `M₁ →* M₂` from a function `f` and a proof that it
 belongs to the closure of the range of the coercion from `M₁ →* M₂` (or another type of bundled
@@ -492,7 +492,7 @@ def monoidHomOfMemClosureRangeCoe (f : M₁ → M₂)
 lean 3 declaration is
   forall {α : Type.{u1}} {M₁ : Type.{u2}} {M₂ : Type.{u3}} [_inst_2 : TopologicalSpace.{u3} M₂] [_inst_3 : T2Space.{u3} M₂ _inst_2] [_inst_4 : MulOneClass.{u2} M₁] [_inst_5 : MulOneClass.{u3} M₂] [_inst_6 : ContinuousMul.{u3} M₂ _inst_2 (MulOneClass.toHasMul.{u3} M₂ _inst_5)] {F : Type.{u4}} [_inst_7 : MonoidHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5] {l : Filter.{u1} α} (f : M₁ -> M₂) (g : α -> F) [_inst_8 : Filter.NeBot.{u1} α l], (Filter.Tendsto.{u1, max u2 u3} α (M₁ -> M₂) (fun (a : α) (x : M₁) => coeFn.{succ u4, max (succ u2) (succ u3)} F (fun (_x : F) => M₁ -> M₂) (FunLike.hasCoeToFun.{succ u4, succ u2, succ u3} F M₁ (fun (_x : M₁) => M₂) (MulHomClass.toFunLike.{u4, u2, u3} F M₁ M₂ (MulOneClass.toHasMul.{u2} M₁ _inst_4) (MulOneClass.toHasMul.{u3} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5 _inst_7))) (g a) x) l (nhds.{max u2 u3} (M₁ -> M₂) (Pi.topologicalSpace.{u2, u3} M₁ (fun (x : M₁) => M₂) (fun (a : M₁) => _inst_2)) f)) -> (MonoidHom.{u2, u3} M₁ M₂ _inst_4 _inst_5)
 but is expected to have type
-  forall {α : Type.{u1}} {M₁ : Type.{u2}} {M₂ : Type.{u3}} [_inst_2 : TopologicalSpace.{u3} M₂] [_inst_3 : T2Space.{u3} M₂ _inst_2] [_inst_4 : MulOneClass.{u2} M₁] [_inst_5 : MulOneClass.{u3} M₂] [_inst_6 : ContinuousMul.{u3} M₂ _inst_2 (MulOneClass.toMul.{u3} M₂ _inst_5)] {F : Type.{u4}} [_inst_7 : MonoidHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5] {l : Filter.{u1} α} (f : M₁ -> M₂) (g : α -> F) [_inst_8 : Filter.NeBot.{u1} α l], (Filter.Tendsto.{u1, max u2 u3} α (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) x) (fun (a : α) (x : M₁) => FunLike.coe.{succ u4, succ u2, succ u3} F M₁ (fun (_x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) _x) (MulHomClass.toFunLike.{u4, u2, u3} F M₁ M₂ (MulOneClass.toMul.{u2} M₁ _inst_4) (MulOneClass.toMul.{u3} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5 _inst_7)) (g a) x) l (nhds.{max u2 u3} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) x) (Pi.topologicalSpace.{u2, u3} M₁ (fun (x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) x) (fun (a : M₁) => _inst_2)) f)) -> (MonoidHom.{u2, u3} M₁ M₂ _inst_4 _inst_5)
+  forall {α : Type.{u1}} {M₁ : Type.{u2}} {M₂ : Type.{u3}} [_inst_2 : TopologicalSpace.{u3} M₂] [_inst_3 : T2Space.{u3} M₂ _inst_2] [_inst_4 : MulOneClass.{u2} M₁] [_inst_5 : MulOneClass.{u3} M₂] [_inst_6 : ContinuousMul.{u3} M₂ _inst_2 (MulOneClass.toMul.{u3} M₂ _inst_5)] {F : Type.{u4}} [_inst_7 : MonoidHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5] {l : Filter.{u1} α} (f : M₁ -> M₂) (g : α -> F) [_inst_8 : Filter.NeBot.{u1} α l], (Filter.Tendsto.{u1, max u2 u3} α (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) x) (fun (a : α) (x : M₁) => FunLike.coe.{succ u4, succ u2, succ u3} F M₁ (fun (_x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) _x) (MulHomClass.toFunLike.{u4, u2, u3} F M₁ M₂ (MulOneClass.toMul.{u2} M₁ _inst_4) (MulOneClass.toMul.{u3} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5 _inst_7)) (g a) x) l (nhds.{max u2 u3} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) x) (Pi.topologicalSpace.{u2, u3} M₁ (fun (x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) x) (fun (a : M₁) => _inst_2)) f)) -> (MonoidHom.{u2, u3} M₁ M₂ _inst_4 _inst_5)
 Case conversion may be inaccurate. Consider using '#align monoid_hom_of_tendsto monoidHomOfTendstoₓ'. -/
 /-- Construct a bundled monoid homomorphism from a pointwise limit of monoid homomorphisms. -/
 @[to_additive
@@ -511,7 +511,7 @@ variable (M₁ M₂)
 lean 3 declaration is
   forall (M₁ : Type.{u1}) (M₂ : Type.{u2}) [_inst_2 : TopologicalSpace.{u2} M₂] [_inst_3 : T2Space.{u2} M₂ _inst_2] [_inst_4 : MulOneClass.{u1} M₁] [_inst_5 : MulOneClass.{u2} M₂] [_inst_6 : ContinuousMul.{u2} M₂ _inst_2 (MulOneClass.toHasMul.{u2} M₂ _inst_5)], IsClosed.{max u1 u2} (M₁ -> M₂) (Pi.topologicalSpace.{u1, u2} M₁ (fun (ᾰ : M₁) => M₂) (fun (a : M₁) => _inst_2)) (Set.range.{max u1 u2, max (succ u2) (succ u1)} (M₁ -> M₂) (MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5) (fun (ᾰ : MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5) => M₁ -> M₂) (MonoidHom.hasCoeToFun.{u1, u2} M₁ M₂ _inst_4 _inst_5)))
 but is expected to have type
-  forall (M₁ : Type.{u2}) (M₂ : Type.{u1}) [_inst_2 : TopologicalSpace.{u1} M₂] [_inst_3 : T2Space.{u1} M₂ _inst_2] [_inst_4 : MulOneClass.{u2} M₁] [_inst_5 : MulOneClass.{u1} M₂] [_inst_6 : ContinuousMul.{u1} M₂ _inst_2 (MulOneClass.toMul.{u1} M₂ _inst_5)], IsClosed.{max u2 u1} (forall (ᾰ : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) ᾰ) (Pi.topologicalSpace.{u2, u1} M₁ (fun (ᾰ : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) ᾰ) (fun (a : M₁) => _inst_2)) (Set.range.{max u2 u1, max (succ u2) (succ u1)} (forall (ᾰ : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) ᾰ) (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ (fun (ᾰ : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) ᾰ) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ M₂ (MulOneClass.toMul.{u2} M₁ _inst_4) (MulOneClass.toMul.{u1} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ M₂ _inst_4 _inst_5 (MonoidHom.monoidHomClass.{u2, u1} M₁ M₂ _inst_4 _inst_5)))))
+  forall (M₁ : Type.{u2}) (M₂ : Type.{u1}) [_inst_2 : TopologicalSpace.{u1} M₂] [_inst_3 : T2Space.{u1} M₂ _inst_2] [_inst_4 : MulOneClass.{u2} M₁] [_inst_5 : MulOneClass.{u1} M₂] [_inst_6 : ContinuousMul.{u1} M₂ _inst_2 (MulOneClass.toMul.{u1} M₂ _inst_5)], IsClosed.{max u2 u1} (forall (ᾰ : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) ᾰ) (Pi.topologicalSpace.{u2, u1} M₁ (fun (ᾰ : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) ᾰ) (fun (a : M₁) => _inst_2)) (Set.range.{max u2 u1, max (succ u2) (succ u1)} (forall (ᾰ : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) ᾰ) (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ (fun (ᾰ : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) ᾰ) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ M₂ (MulOneClass.toMul.{u2} M₁ _inst_4) (MulOneClass.toMul.{u1} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ M₂ _inst_4 _inst_5 (MonoidHom.monoidHomClass.{u2, u1} M₁ M₂ _inst_4 _inst_5)))))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.is_closed_range_coe MonoidHom.isClosed_range_coeₓ'. -/
 @[to_additive]
 theorem MonoidHom.isClosed_range_coe : IsClosed (range (coeFn : (M₁ →* M₂) → M₁ → M₂)) :=
@@ -525,7 +525,7 @@ end PointwiseLimits
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_2 : Mul.{u1} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u3, u1, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u1} M] [_inst_6 : TopologicalSpace.{u2} N] [_inst_7 : ContinuousMul.{u2} N _inst_6 _inst_3] (f : F), (Inducing.{u1, u2} M N _inst_5 _inst_6 (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N _inst_2 _inst_3 _inst_4)) f)) -> (ContinuousMul.{u1} M _inst_5 _inst_2)
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} [_inst_2 : Mul.{u3} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u1, u3, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u3} M] [_inst_6 : TopologicalSpace.{u2} N] [_inst_7 : ContinuousMul.{u2} N _inst_6 _inst_3] (f : F), (Inducing.{u3, u2} M N _inst_5 _inst_6 (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N _inst_2 _inst_3 _inst_4) f)) -> (ContinuousMul.{u3} M _inst_5 _inst_2)
+  forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} [_inst_2 : Mul.{u3} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u1, u3, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u3} M] [_inst_6 : TopologicalSpace.{u2} N] [_inst_7 : ContinuousMul.{u2} N _inst_6 _inst_3] (f : F), (Inducing.{u3, u2} M N _inst_5 _inst_6 (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N _inst_2 _inst_3 _inst_4) f)) -> (ContinuousMul.{u3} M _inst_5 _inst_2)
 Case conversion may be inaccurate. Consider using '#align inducing.has_continuous_mul Inducing.continuousMulₓ'. -/
 @[to_additive]
 theorem Inducing.continuousMul {M N F : Type _} [Mul M] [Mul N] [MulHomClass F M N]
@@ -540,7 +540,7 @@ theorem Inducing.continuousMul {M N F : Type _} [Mul M] [Mul N] [MulHomClass F M
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_2 : Mul.{u1} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u3, u1, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u2} N] [_inst_6 : ContinuousMul.{u2} N _inst_5 _inst_3] (f : F), ContinuousMul.{u1} M (TopologicalSpace.induced.{u1, u2} M N (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N _inst_2 _inst_3 _inst_4)) f) _inst_5) _inst_2
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} [_inst_2 : Mul.{u3} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u1, u3, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u2} N] [_inst_6 : ContinuousMul.{u2} N _inst_5 _inst_3] (f : F), ContinuousMul.{u3} M (TopologicalSpace.induced.{u3, u2} M N (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N _inst_2 _inst_3 _inst_4) f) _inst_5) _inst_2
+  forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} [_inst_2 : Mul.{u3} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u1, u3, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u2} N] [_inst_6 : ContinuousMul.{u2} N _inst_5 _inst_3] (f : F), ContinuousMul.{u3} M (TopologicalSpace.induced.{u3, u2} M N (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N _inst_2 _inst_3 _inst_4) f) _inst_5) _inst_2
 Case conversion may be inaccurate. Consider using '#align has_continuous_mul_induced continuousMul_inducedₓ'. -/
 @[to_additive]
 theorem continuousMul_induced {M N F : Type _} [Mul M] [Mul N] [MulHomClass F M N]
@@ -1053,7 +1053,7 @@ end Units
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_2 : Monoid.{u1} M] [_inst_3 : Monoid.{u2} N] [_inst_4 : TopologicalSpace.{u1} M] [_inst_5 : TopologicalSpace.{u2} N] (f : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_2) (Monoid.toMulOneClass.{u2} N _inst_3)), (Continuous.{u1, u2} M N _inst_4 _inst_5 (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_2) (Monoid.toMulOneClass.{u2} N _inst_3)) (fun (_x : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_2) (Monoid.toMulOneClass.{u2} N _inst_3)) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_2) (Monoid.toMulOneClass.{u2} N _inst_3)) f)) -> (Continuous.{u1, u2} (Units.{u1} M _inst_2) (Units.{u2} N _inst_3) (Units.topologicalSpace.{u1} M _inst_4 _inst_2) (Units.topologicalSpace.{u2} N _inst_5 _inst_3) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (Units.{u1} M _inst_2) (Units.{u2} N _inst_3) (Units.mulOneClass.{u1} M _inst_2) (Units.mulOneClass.{u2} N _inst_3)) (fun (_x : MonoidHom.{u1, u2} (Units.{u1} M _inst_2) (Units.{u2} N _inst_3) (Units.mulOneClass.{u1} M _inst_2) (Units.mulOneClass.{u2} N _inst_3)) => (Units.{u1} M _inst_2) -> (Units.{u2} N _inst_3)) (MonoidHom.hasCoeToFun.{u1, u2} (Units.{u1} M _inst_2) (Units.{u2} N _inst_3) (Units.mulOneClass.{u1} M _inst_2) (Units.mulOneClass.{u2} N _inst_3)) (Units.map.{u1, u2} M N _inst_2 _inst_3 f)))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_2 : Monoid.{u2} M] [_inst_3 : Monoid.{u1} N] [_inst_4 : TopologicalSpace.{u2} M] [_inst_5 : TopologicalSpace.{u1} N] (f : MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)), (Continuous.{u2, u1} M N _inst_4 _inst_5 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_2)) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)))) f)) -> (Continuous.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instTopologicalSpaceUnits.{u2} M _inst_4 _inst_2) (Units.instTopologicalSpaceUnits.{u1} N _inst_5 _inst_3) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (fun (_x : Units.{u2} M _inst_2) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Units.{u2} M _inst_2) => Units.{u1} N _inst_3) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (MulOneClass.toMul.{u2} (Units.{u2} M _inst_2) (Units.instMulOneClassUnits.{u2} M _inst_2)) (MulOneClass.toMul.{u1} (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u1} N _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3) (MonoidHom.monoidHomClass.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)))) (Units.map.{u2, u1} M N _inst_2 _inst_3 f)))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_2 : Monoid.{u2} M] [_inst_3 : Monoid.{u1} N] [_inst_4 : TopologicalSpace.{u2} M] [_inst_5 : TopologicalSpace.{u1} N] (f : MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)), (Continuous.{u2, u1} M N _inst_4 _inst_5 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_2)) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)))) f)) -> (Continuous.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instTopologicalSpaceUnits.{u2} M _inst_4 _inst_2) (Units.instTopologicalSpaceUnits.{u1} N _inst_5 _inst_3) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (fun (_x : Units.{u2} M _inst_2) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Units.{u2} M _inst_2) => Units.{u1} N _inst_3) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (MulOneClass.toMul.{u2} (Units.{u2} M _inst_2) (Units.instMulOneClassUnits.{u2} M _inst_2)) (MulOneClass.toMul.{u1} (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u1} N _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3) (MonoidHom.monoidHomClass.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)))) (Units.map.{u2, u1} M N _inst_2 _inst_3 f)))
 Case conversion may be inaccurate. Consider using '#align continuous.units_map Continuous.units_mapₓ'. -/
 @[to_additive]
 theorem Continuous.units_map [Monoid M] [Monoid N] [TopologicalSpace M] [TopologicalSpace N]
Diff
@@ -471,7 +471,7 @@ variable {M₁ M₂} [MulOneClass M₁] [MulOneClass M₂] [ContinuousMul M₂]
 lean 3 declaration is
   forall {M₁ : Type.{u1}} {M₂ : Type.{u2}} [_inst_2 : TopologicalSpace.{u2} M₂] [_inst_3 : T2Space.{u2} M₂ _inst_2] [_inst_4 : MulOneClass.{u1} M₁] [_inst_5 : MulOneClass.{u2} M₂] [_inst_6 : ContinuousMul.{u2} M₂ _inst_2 (MulOneClass.toHasMul.{u2} M₂ _inst_5)] {F : Type.{u3}} [_inst_7 : MonoidHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5] (f : M₁ -> M₂), (Membership.Mem.{max u1 u2, max u1 u2} (M₁ -> M₂) (Set.{max u1 u2} (M₁ -> M₂)) (Set.hasMem.{max u1 u2} (M₁ -> M₂)) f (closure.{max u1 u2} (M₁ -> M₂) (Pi.topologicalSpace.{u1, u2} M₁ (fun (x : M₁) => M₂) (fun (a : M₁) => _inst_2)) (Set.range.{max u1 u2, succ u3} (M₁ -> M₂) F (fun (f : F) (x : M₁) => coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M₁ -> M₂) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M₁ (fun (_x : M₁) => M₂) (MulHomClass.toFunLike.{u3, u1, u2} F M₁ M₂ (MulOneClass.toHasMul.{u1} M₁ _inst_4) (MulOneClass.toHasMul.{u2} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5 _inst_7))) f x)))) -> (MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5)
 but is expected to have type
-  forall {M₁ : Type.{u1}} {M₂ : Type.{u2}} [_inst_2 : TopologicalSpace.{u2} M₂] [_inst_3 : T2Space.{u2} M₂ _inst_2] [_inst_4 : MulOneClass.{u1} M₁] [_inst_5 : MulOneClass.{u2} M₂] [_inst_6 : ContinuousMul.{u2} M₂ _inst_2 (MulOneClass.toMul.{u2} M₂ _inst_5)] {F : Type.{u3}} [_inst_7 : MonoidHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5] (f : M₁ -> M₂), (Membership.mem.{max u1 u2, max u1 u2} (M₁ -> M₂) (Set.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M₁) => M₂) x)) (Set.instMembershipSet.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M₁) => M₂) x)) f (closure.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M₁) => M₂) x) (Pi.topologicalSpace.{u1, u2} M₁ (fun (x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M₁) => M₂) x) (fun (a : M₁) => _inst_2)) (Set.range.{max u1 u2, succ u3} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M₁) => M₂) x) F (fun (f : F) (x : M₁) => FunLike.coe.{succ u3, succ u1, succ u2} F M₁ (fun (_x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M₁) => M₂) _x) (MulHomClass.toFunLike.{u3, u1, u2} F M₁ M₂ (MulOneClass.toMul.{u1} M₁ _inst_4) (MulOneClass.toMul.{u2} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5 _inst_7)) f x)))) -> (MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5)
+  forall {M₁ : Type.{u1}} {M₂ : Type.{u2}} [_inst_2 : TopologicalSpace.{u2} M₂] [_inst_3 : T2Space.{u2} M₂ _inst_2] [_inst_4 : MulOneClass.{u1} M₁] [_inst_5 : MulOneClass.{u2} M₂] [_inst_6 : ContinuousMul.{u2} M₂ _inst_2 (MulOneClass.toMul.{u2} M₂ _inst_5)] {F : Type.{u3}} [_inst_7 : MonoidHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5] (f : M₁ -> M₂), (Membership.mem.{max u1 u2, max u1 u2} (M₁ -> M₂) (Set.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) x)) (Set.instMembershipSet.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) x)) f (closure.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) x) (Pi.topologicalSpace.{u1, u2} M₁ (fun (x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) x) (fun (a : M₁) => _inst_2)) (Set.range.{max u1 u2, succ u3} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) x) F (fun (f : F) (x : M₁) => FunLike.coe.{succ u3, succ u1, succ u2} F M₁ (fun (_x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) _x) (MulHomClass.toFunLike.{u3, u1, u2} F M₁ M₂ (MulOneClass.toMul.{u1} M₁ _inst_4) (MulOneClass.toMul.{u2} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5 _inst_7)) f x)))) -> (MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5)
 Case conversion may be inaccurate. Consider using '#align monoid_hom_of_mem_closure_range_coe monoidHomOfMemClosureRangeCoeₓ'. -/
 /-- Construct a bundled monoid homomorphism `M₁ →* M₂` from a function `f` and a proof that it
 belongs to the closure of the range of the coercion from `M₁ →* M₂` (or another type of bundled
@@ -492,7 +492,7 @@ def monoidHomOfMemClosureRangeCoe (f : M₁ → M₂)
 lean 3 declaration is
   forall {α : Type.{u1}} {M₁ : Type.{u2}} {M₂ : Type.{u3}} [_inst_2 : TopologicalSpace.{u3} M₂] [_inst_3 : T2Space.{u3} M₂ _inst_2] [_inst_4 : MulOneClass.{u2} M₁] [_inst_5 : MulOneClass.{u3} M₂] [_inst_6 : ContinuousMul.{u3} M₂ _inst_2 (MulOneClass.toHasMul.{u3} M₂ _inst_5)] {F : Type.{u4}} [_inst_7 : MonoidHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5] {l : Filter.{u1} α} (f : M₁ -> M₂) (g : α -> F) [_inst_8 : Filter.NeBot.{u1} α l], (Filter.Tendsto.{u1, max u2 u3} α (M₁ -> M₂) (fun (a : α) (x : M₁) => coeFn.{succ u4, max (succ u2) (succ u3)} F (fun (_x : F) => M₁ -> M₂) (FunLike.hasCoeToFun.{succ u4, succ u2, succ u3} F M₁ (fun (_x : M₁) => M₂) (MulHomClass.toFunLike.{u4, u2, u3} F M₁ M₂ (MulOneClass.toHasMul.{u2} M₁ _inst_4) (MulOneClass.toHasMul.{u3} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5 _inst_7))) (g a) x) l (nhds.{max u2 u3} (M₁ -> M₂) (Pi.topologicalSpace.{u2, u3} M₁ (fun (x : M₁) => M₂) (fun (a : M₁) => _inst_2)) f)) -> (MonoidHom.{u2, u3} M₁ M₂ _inst_4 _inst_5)
 but is expected to have type
-  forall {α : Type.{u1}} {M₁ : Type.{u2}} {M₂ : Type.{u3}} [_inst_2 : TopologicalSpace.{u3} M₂] [_inst_3 : T2Space.{u3} M₂ _inst_2] [_inst_4 : MulOneClass.{u2} M₁] [_inst_5 : MulOneClass.{u3} M₂] [_inst_6 : ContinuousMul.{u3} M₂ _inst_2 (MulOneClass.toMul.{u3} M₂ _inst_5)] {F : Type.{u4}} [_inst_7 : MonoidHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5] {l : Filter.{u1} α} (f : M₁ -> M₂) (g : α -> F) [_inst_8 : Filter.NeBot.{u1} α l], (Filter.Tendsto.{u1, max u2 u3} α (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M₁) => M₂) x) (fun (a : α) (x : M₁) => FunLike.coe.{succ u4, succ u2, succ u3} F M₁ (fun (_x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M₁) => M₂) _x) (MulHomClass.toFunLike.{u4, u2, u3} F M₁ M₂ (MulOneClass.toMul.{u2} M₁ _inst_4) (MulOneClass.toMul.{u3} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5 _inst_7)) (g a) x) l (nhds.{max u2 u3} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M₁) => M₂) x) (Pi.topologicalSpace.{u2, u3} M₁ (fun (x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M₁) => M₂) x) (fun (a : M₁) => _inst_2)) f)) -> (MonoidHom.{u2, u3} M₁ M₂ _inst_4 _inst_5)
+  forall {α : Type.{u1}} {M₁ : Type.{u2}} {M₂ : Type.{u3}} [_inst_2 : TopologicalSpace.{u3} M₂] [_inst_3 : T2Space.{u3} M₂ _inst_2] [_inst_4 : MulOneClass.{u2} M₁] [_inst_5 : MulOneClass.{u3} M₂] [_inst_6 : ContinuousMul.{u3} M₂ _inst_2 (MulOneClass.toMul.{u3} M₂ _inst_5)] {F : Type.{u4}} [_inst_7 : MonoidHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5] {l : Filter.{u1} α} (f : M₁ -> M₂) (g : α -> F) [_inst_8 : Filter.NeBot.{u1} α l], (Filter.Tendsto.{u1, max u2 u3} α (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) x) (fun (a : α) (x : M₁) => FunLike.coe.{succ u4, succ u2, succ u3} F M₁ (fun (_x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) _x) (MulHomClass.toFunLike.{u4, u2, u3} F M₁ M₂ (MulOneClass.toMul.{u2} M₁ _inst_4) (MulOneClass.toMul.{u3} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5 _inst_7)) (g a) x) l (nhds.{max u2 u3} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) x) (Pi.topologicalSpace.{u2, u3} M₁ (fun (x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) x) (fun (a : M₁) => _inst_2)) f)) -> (MonoidHom.{u2, u3} M₁ M₂ _inst_4 _inst_5)
 Case conversion may be inaccurate. Consider using '#align monoid_hom_of_tendsto monoidHomOfTendstoₓ'. -/
 /-- Construct a bundled monoid homomorphism from a pointwise limit of monoid homomorphisms. -/
 @[to_additive
@@ -511,7 +511,7 @@ variable (M₁ M₂)
 lean 3 declaration is
   forall (M₁ : Type.{u1}) (M₂ : Type.{u2}) [_inst_2 : TopologicalSpace.{u2} M₂] [_inst_3 : T2Space.{u2} M₂ _inst_2] [_inst_4 : MulOneClass.{u1} M₁] [_inst_5 : MulOneClass.{u2} M₂] [_inst_6 : ContinuousMul.{u2} M₂ _inst_2 (MulOneClass.toHasMul.{u2} M₂ _inst_5)], IsClosed.{max u1 u2} (M₁ -> M₂) (Pi.topologicalSpace.{u1, u2} M₁ (fun (ᾰ : M₁) => M₂) (fun (a : M₁) => _inst_2)) (Set.range.{max u1 u2, max (succ u2) (succ u1)} (M₁ -> M₂) (MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5) (fun (ᾰ : MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5) => M₁ -> M₂) (MonoidHom.hasCoeToFun.{u1, u2} M₁ M₂ _inst_4 _inst_5)))
 but is expected to have type
-  forall (M₁ : Type.{u2}) (M₂ : Type.{u1}) [_inst_2 : TopologicalSpace.{u1} M₂] [_inst_3 : T2Space.{u1} M₂ _inst_2] [_inst_4 : MulOneClass.{u2} M₁] [_inst_5 : MulOneClass.{u1} M₂] [_inst_6 : ContinuousMul.{u1} M₂ _inst_2 (MulOneClass.toMul.{u1} M₂ _inst_5)], IsClosed.{max u2 u1} (forall (ᾰ : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M₁) => M₂) ᾰ) (Pi.topologicalSpace.{u2, u1} M₁ (fun (ᾰ : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M₁) => M₂) ᾰ) (fun (a : M₁) => _inst_2)) (Set.range.{max u2 u1, max (succ u2) (succ u1)} (forall (ᾰ : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M₁) => M₂) ᾰ) (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ (fun (ᾰ : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M₁) => M₂) ᾰ) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ M₂ (MulOneClass.toMul.{u2} M₁ _inst_4) (MulOneClass.toMul.{u1} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ M₂ _inst_4 _inst_5 (MonoidHom.monoidHomClass.{u2, u1} M₁ M₂ _inst_4 _inst_5)))))
+  forall (M₁ : Type.{u2}) (M₂ : Type.{u1}) [_inst_2 : TopologicalSpace.{u1} M₂] [_inst_3 : T2Space.{u1} M₂ _inst_2] [_inst_4 : MulOneClass.{u2} M₁] [_inst_5 : MulOneClass.{u1} M₂] [_inst_6 : ContinuousMul.{u1} M₂ _inst_2 (MulOneClass.toMul.{u1} M₂ _inst_5)], IsClosed.{max u2 u1} (forall (ᾰ : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) ᾰ) (Pi.topologicalSpace.{u2, u1} M₁ (fun (ᾰ : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) ᾰ) (fun (a : M₁) => _inst_2)) (Set.range.{max u2 u1, max (succ u2) (succ u1)} (forall (ᾰ : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) ᾰ) (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ (fun (ᾰ : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) ᾰ) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ M₂ (MulOneClass.toMul.{u2} M₁ _inst_4) (MulOneClass.toMul.{u1} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ M₂ _inst_4 _inst_5 (MonoidHom.monoidHomClass.{u2, u1} M₁ M₂ _inst_4 _inst_5)))))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.is_closed_range_coe MonoidHom.isClosed_range_coeₓ'. -/
 @[to_additive]
 theorem MonoidHom.isClosed_range_coe : IsClosed (range (coeFn : (M₁ →* M₂) → M₁ → M₂)) :=
@@ -525,7 +525,7 @@ end PointwiseLimits
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_2 : Mul.{u1} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u3, u1, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u1} M] [_inst_6 : TopologicalSpace.{u2} N] [_inst_7 : ContinuousMul.{u2} N _inst_6 _inst_3] (f : F), (Inducing.{u1, u2} M N _inst_5 _inst_6 (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N _inst_2 _inst_3 _inst_4)) f)) -> (ContinuousMul.{u1} M _inst_5 _inst_2)
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} [_inst_2 : Mul.{u3} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u1, u3, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u3} M] [_inst_6 : TopologicalSpace.{u2} N] [_inst_7 : ContinuousMul.{u2} N _inst_6 _inst_3] (f : F), (Inducing.{u3, u2} M N _inst_5 _inst_6 (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N _inst_2 _inst_3 _inst_4) f)) -> (ContinuousMul.{u3} M _inst_5 _inst_2)
+  forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} [_inst_2 : Mul.{u3} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u1, u3, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u3} M] [_inst_6 : TopologicalSpace.{u2} N] [_inst_7 : ContinuousMul.{u2} N _inst_6 _inst_3] (f : F), (Inducing.{u3, u2} M N _inst_5 _inst_6 (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N _inst_2 _inst_3 _inst_4) f)) -> (ContinuousMul.{u3} M _inst_5 _inst_2)
 Case conversion may be inaccurate. Consider using '#align inducing.has_continuous_mul Inducing.continuousMulₓ'. -/
 @[to_additive]
 theorem Inducing.continuousMul {M N F : Type _} [Mul M] [Mul N] [MulHomClass F M N]
@@ -540,7 +540,7 @@ theorem Inducing.continuousMul {M N F : Type _} [Mul M] [Mul N] [MulHomClass F M
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_2 : Mul.{u1} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u3, u1, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u2} N] [_inst_6 : ContinuousMul.{u2} N _inst_5 _inst_3] (f : F), ContinuousMul.{u1} M (TopologicalSpace.induced.{u1, u2} M N (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N _inst_2 _inst_3 _inst_4)) f) _inst_5) _inst_2
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} [_inst_2 : Mul.{u3} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u1, u3, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u2} N] [_inst_6 : ContinuousMul.{u2} N _inst_5 _inst_3] (f : F), ContinuousMul.{u3} M (TopologicalSpace.induced.{u3, u2} M N (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N _inst_2 _inst_3 _inst_4) f) _inst_5) _inst_2
+  forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} [_inst_2 : Mul.{u3} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u1, u3, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u2} N] [_inst_6 : ContinuousMul.{u2} N _inst_5 _inst_3] (f : F), ContinuousMul.{u3} M (TopologicalSpace.induced.{u3, u2} M N (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N _inst_2 _inst_3 _inst_4) f) _inst_5) _inst_2
 Case conversion may be inaccurate. Consider using '#align has_continuous_mul_induced continuousMul_inducedₓ'. -/
 @[to_additive]
 theorem continuousMul_induced {M N F : Type _} [Mul M] [Mul N] [MulHomClass F M N]
@@ -1053,7 +1053,7 @@ end Units
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_2 : Monoid.{u1} M] [_inst_3 : Monoid.{u2} N] [_inst_4 : TopologicalSpace.{u1} M] [_inst_5 : TopologicalSpace.{u2} N] (f : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_2) (Monoid.toMulOneClass.{u2} N _inst_3)), (Continuous.{u1, u2} M N _inst_4 _inst_5 (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_2) (Monoid.toMulOneClass.{u2} N _inst_3)) (fun (_x : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_2) (Monoid.toMulOneClass.{u2} N _inst_3)) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_2) (Monoid.toMulOneClass.{u2} N _inst_3)) f)) -> (Continuous.{u1, u2} (Units.{u1} M _inst_2) (Units.{u2} N _inst_3) (Units.topologicalSpace.{u1} M _inst_4 _inst_2) (Units.topologicalSpace.{u2} N _inst_5 _inst_3) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (Units.{u1} M _inst_2) (Units.{u2} N _inst_3) (Units.mulOneClass.{u1} M _inst_2) (Units.mulOneClass.{u2} N _inst_3)) (fun (_x : MonoidHom.{u1, u2} (Units.{u1} M _inst_2) (Units.{u2} N _inst_3) (Units.mulOneClass.{u1} M _inst_2) (Units.mulOneClass.{u2} N _inst_3)) => (Units.{u1} M _inst_2) -> (Units.{u2} N _inst_3)) (MonoidHom.hasCoeToFun.{u1, u2} (Units.{u1} M _inst_2) (Units.{u2} N _inst_3) (Units.mulOneClass.{u1} M _inst_2) (Units.mulOneClass.{u2} N _inst_3)) (Units.map.{u1, u2} M N _inst_2 _inst_3 f)))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_2 : Monoid.{u2} M] [_inst_3 : Monoid.{u1} N] [_inst_4 : TopologicalSpace.{u2} M] [_inst_5 : TopologicalSpace.{u1} N] (f : MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)), (Continuous.{u2, u1} M N _inst_4 _inst_5 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_2)) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)))) f)) -> (Continuous.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instTopologicalSpaceUnits.{u2} M _inst_4 _inst_2) (Units.instTopologicalSpaceUnits.{u1} N _inst_5 _inst_3) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (fun (_x : Units.{u2} M _inst_2) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : Units.{u2} M _inst_2) => Units.{u1} N _inst_3) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (MulOneClass.toMul.{u2} (Units.{u2} M _inst_2) (Units.instMulOneClassUnits.{u2} M _inst_2)) (MulOneClass.toMul.{u1} (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u1} N _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3) (MonoidHom.monoidHomClass.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)))) (Units.map.{u2, u1} M N _inst_2 _inst_3 f)))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_2 : Monoid.{u2} M] [_inst_3 : Monoid.{u1} N] [_inst_4 : TopologicalSpace.{u2} M] [_inst_5 : TopologicalSpace.{u1} N] (f : MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)), (Continuous.{u2, u1} M N _inst_4 _inst_5 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_2)) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)))) f)) -> (Continuous.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instTopologicalSpaceUnits.{u2} M _inst_4 _inst_2) (Units.instTopologicalSpaceUnits.{u1} N _inst_5 _inst_3) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (fun (_x : Units.{u2} M _inst_2) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Units.{u2} M _inst_2) => Units.{u1} N _inst_3) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (MulOneClass.toMul.{u2} (Units.{u2} M _inst_2) (Units.instMulOneClassUnits.{u2} M _inst_2)) (MulOneClass.toMul.{u1} (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u1} N _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3) (MonoidHom.monoidHomClass.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)))) (Units.map.{u2, u1} M N _inst_2 _inst_3 f)))
 Case conversion may be inaccurate. Consider using '#align continuous.units_map Continuous.units_mapₓ'. -/
 @[to_additive]
 theorem Continuous.units_map [Monoid M] [Monoid N] [TopologicalSpace M] [TopologicalSpace N]
Diff
@@ -405,7 +405,7 @@ theorem ContinuousMul.of_nhds_one {M : Type u} [Monoid M] [TopologicalSpace M]
         rw [uncurry, hleft x₀, hright y₀, prod_map_map_eq, Filter.map_map]
       _ = map ((fun x => x₀ * x) ∘ fun x => x * y₀) (map (uncurry (· * ·)) (𝓝 1 ×ᶠ 𝓝 1)) := by
         rw [key, ← Filter.map_map]
-      _ ≤ map ((fun x : M => x₀ * x) ∘ fun x => x * y₀) (𝓝 1) := map_mono hmul
+      _ ≤ map ((fun x : M => x₀ * x) ∘ fun x => x * y₀) (𝓝 1) := (map_mono hmul)
       _ = 𝓝 (x₀ * y₀) := by rw [← Filter.map_map, ← hright, hleft y₀, Filter.map_map, key₂, ← hleft]
       ⟩
 #align has_continuous_mul.of_nhds_one ContinuousMul.of_nhds_one
Diff
@@ -1295,9 +1295,9 @@ theorem continuousMul_infᵢ {ts : ι' → TopologicalSpace M} (h' : ∀ i, @Con
 
 /- warning: has_continuous_mul_inf -> continuousMul_inf is a dubious translation:
 lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_2 : Mul.{u1} M] {t₁ : TopologicalSpace.{u1} M} {t₂ : TopologicalSpace.{u1} M}, (ContinuousMul.{u1} M t₁ _inst_2) -> (ContinuousMul.{u1} M t₂ _inst_2) -> (ContinuousMul.{u1} M (HasInf.inf.{u1} (TopologicalSpace.{u1} M) (SemilatticeInf.toHasInf.{u1} (TopologicalSpace.{u1} M) (Lattice.toSemilatticeInf.{u1} (TopologicalSpace.{u1} M) (ConditionallyCompleteLattice.toLattice.{u1} (TopologicalSpace.{u1} M) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.{u1} M) (TopologicalSpace.completeLattice.{u1} M))))) t₁ t₂) _inst_2)
+  forall {M : Type.{u1}} [_inst_2 : Mul.{u1} M] {t₁ : TopologicalSpace.{u1} M} {t₂ : TopologicalSpace.{u1} M}, (ContinuousMul.{u1} M t₁ _inst_2) -> (ContinuousMul.{u1} M t₂ _inst_2) -> (ContinuousMul.{u1} M (Inf.inf.{u1} (TopologicalSpace.{u1} M) (SemilatticeInf.toHasInf.{u1} (TopologicalSpace.{u1} M) (Lattice.toSemilatticeInf.{u1} (TopologicalSpace.{u1} M) (ConditionallyCompleteLattice.toLattice.{u1} (TopologicalSpace.{u1} M) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.{u1} M) (TopologicalSpace.completeLattice.{u1} M))))) t₁ t₂) _inst_2)
 but is expected to have type
-  forall {M : Type.{u1}} [_inst_2 : Mul.{u1} M] {t₁ : TopologicalSpace.{u1} M} {t₂ : TopologicalSpace.{u1} M}, (ContinuousMul.{u1} M t₁ _inst_2) -> (ContinuousMul.{u1} M t₂ _inst_2) -> (ContinuousMul.{u1} M (HasInf.inf.{u1} (TopologicalSpace.{u1} M) (Lattice.toHasInf.{u1} (TopologicalSpace.{u1} M) (ConditionallyCompleteLattice.toLattice.{u1} (TopologicalSpace.{u1} M) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.{u1} M) (TopologicalSpace.instCompleteLatticeTopologicalSpace.{u1} M)))) t₁ t₂) _inst_2)
+  forall {M : Type.{u1}} [_inst_2 : Mul.{u1} M] {t₁ : TopologicalSpace.{u1} M} {t₂ : TopologicalSpace.{u1} M}, (ContinuousMul.{u1} M t₁ _inst_2) -> (ContinuousMul.{u1} M t₂ _inst_2) -> (ContinuousMul.{u1} M (Inf.inf.{u1} (TopologicalSpace.{u1} M) (Lattice.toInf.{u1} (TopologicalSpace.{u1} M) (ConditionallyCompleteLattice.toLattice.{u1} (TopologicalSpace.{u1} M) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.{u1} M) (TopologicalSpace.instCompleteLatticeTopologicalSpace.{u1} M)))) t₁ t₂) _inst_2)
 Case conversion may be inaccurate. Consider using '#align has_continuous_mul_inf continuousMul_infₓ'. -/
 @[to_additive]
 theorem continuousMul_inf {t₁ t₂ : TopologicalSpace M} (h₁ : @ContinuousMul M t₁ _)
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johannes Hölzl, Mario Carneiro
 
 ! This file was ported from Lean 3 source module topology.algebra.monoid
-! leanprover-community/mathlib commit 1ead22342e1a078bd44744ace999f85756555d35
+! leanprover-community/mathlib commit 6efec6bb9fcaed3cf1baaddb2eaadd8a2a06679c
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -12,6 +12,7 @@ import Mathbin.Algebra.BigOperators.Finprod
 import Mathbin.Order.Filter.Pointwise
 import Mathbin.Topology.Algebra.MulAction
 import Mathbin.Algebra.BigOperators.Pi
+import Mathbin.Topology.ContinuousFunction.Basic
 
 /-!
 # Theory of topological monoids
@@ -1310,3 +1311,35 @@ theorem continuousMul_inf {t₁ t₂ : TopologicalSpace M} (h₁ : @ContinuousMu
 
 end LatticeOps
 
+namespace ContinuousMap
+
+variable [Mul X] [ContinuousMul X]
+
+/-- The continuous map `λ y, y * x` -/
+@[to_additive "The continuous map `λ y, y + x"]
+protected def mulRight (x : X) : C(X, X) :=
+  mk _ (continuous_mul_right x)
+#align continuous_map.mul_right ContinuousMap.mulRight
+#align continuous_map.add_right ContinuousMap.addRight
+
+@[to_additive, simp]
+theorem coe_mulRight (x : X) : ⇑(ContinuousMap.mulRight x) = fun y => y * x :=
+  rfl
+#align continuous_map.coe_mul_right ContinuousMap.coe_mulRight
+#align continuous_map.coe_add_right ContinuousMap.coe_add_right
+
+/-- The continuous map `λ y, x * y` -/
+@[to_additive "The continuous map `λ y, x + y"]
+protected def mulLeft (x : X) : C(X, X) :=
+  mk _ (continuous_mul_left x)
+#align continuous_map.mul_left ContinuousMap.mulLeft
+#align continuous_map.add_left ContinuousMap.addLeft
+
+@[to_additive, simp]
+theorem coe_mulLeft (x : X) : ⇑(ContinuousMap.mulLeft x) = fun y => x * y :=
+  rfl
+#align continuous_map.coe_mul_left ContinuousMap.coe_mulLeft
+#align continuous_map.coe_add_left ContinuousMap.coe_add_left
+
+end ContinuousMap
+

Changes in mathlib4

mathlib3
mathlib4
feat(Topology/Algebra): add Inseparable.{smul,mul,inv} (#12142)

Add dot notation lemmas for algebraic operations on Specializes and Inseparable.

Diff
@@ -204,6 +204,26 @@ theorem Filter.TendstoNhdsWithinIio.mul_const [MulPosStrictMono 𝕜] [MulPosRef
 
 end tendsto_nhds
 
+@[to_additive]
+protected theorem Specializes.mul {a b c d : M} (hab : a ⤳ b) (hcd : c ⤳ d) : (a * c) ⤳ (b * d) :=
+  hab.smul hcd
+
+@[to_additive]
+protected theorem Inseparable.mul {a b c d : M} (hab : Inseparable a b) (hcd : Inseparable c d) :
+    Inseparable (a * c) (b * d) :=
+  hab.smul hcd
+
+@[to_additive]
+protected theorem Specializes.pow {M : Type*} [Monoid M] [TopologicalSpace M] [ContinuousMul M]
+    {a b : M} (h : a ⤳ b) (n : ℕ) : (a ^ n) ⤳ (b ^ n) :=
+  Nat.recOn n (by simp only [pow_zero, specializes_rfl]) fun _ ihn ↦ by
+    simpa only [pow_succ] using ihn.mul h
+
+@[to_additive]
+protected theorem Inseparable.pow {M : Type*} [Monoid M] [TopologicalSpace M] [ContinuousMul M]
+    {a b : M} (h : Inseparable a b) (n : ℕ) : Inseparable (a ^ n) (b ^ n) :=
+  (h.specializes.pow n).antisymm (h.specializes'.pow n)
+
 /-- Construct a unit from limits of units and their inverses. -/
 @[to_additive (attr := simps)
   "Construct an additive unit from limits of additive units and their negatives."]
style: replace '.-/' by '. -/' (#11938)

Purely automatic replacement. If this is in any way controversial; I'm happy to just close this PR.

Diff
@@ -681,7 +681,7 @@ instance (priority := 100) IsScalarTower.continuousConstSMul {R A : Type*} [Mono
 /-- If the action of `R` on `A` commutes with left-multiplication, then continuous multiplication
 implies continuous scalar multiplication by constants.
 
-Notably, this instances applies when `R = Aᵐᵒᵖ`.-/
+Notably, this instances applies when `R = Aᵐᵒᵖ`. -/
 @[to_additive "If the action of `R` on `A` commutes with left-addition, then
 continuous addition implies continuous affine addition by constants.
 
style: replace '/--A' by '/-- A' for each letter A. (#11939)

Also do the same for "/-A". This is a purely aesthetic change (and exhaustive).

Diff
@@ -648,7 +648,7 @@ theorem Filter.tendsto_cocompact_mul_left {a b : M} (ha : b * a = 1) :
   simp only [comp_mul_left, ha, one_mul]
   exact Filter.tendsto_id
   -- Porting note: changed proof, original proof was:
-  /-refine' Filter.Tendsto.of_tendsto_comp _ (Filter.comap_cocompact_le (continuous_mul_left b))
+  /- refine' Filter.Tendsto.of_tendsto_comp _ (Filter.comap_cocompact_le (continuous_mul_left b))
   convert Filter.tendsto_id
   ext x
   simp [ha]-/
feat: instances for actions of ulifted spaces (#11777)
Diff
@@ -8,6 +8,7 @@ import Mathlib.Order.Filter.Pointwise
 import Mathlib.Topology.Algebra.MulAction
 import Mathlib.Algebra.BigOperators.Pi
 import Mathlib.Topology.ContinuousFunction.Basic
+import Mathlib.Algebra.Group.ULift
 
 #align_import topology.algebra.monoid from "leanprover-community/mathlib"@"1ac8d4304efba9d03fa720d06516fac845aa5353"
 
@@ -71,6 +72,13 @@ theorem continuous_mul : Continuous fun p : M × M => p.1 * p.2 :=
 #align continuous_mul continuous_mul
 #align continuous_add continuous_add
 
+@[to_additive]
+instance : ContinuousMul (ULift.{u} M) := by
+  constructor
+  apply continuous_uLift_up.comp
+  exact continuous_mul.comp₂ (continuous_uLift_down.comp continuous_fst)
+    (continuous_uLift_down.comp continuous_snd)
+
 @[to_additive]
 instance ContinuousMul.to_continuousSMul : ContinuousSMul M M :=
   ⟨continuous_mul⟩
change the order of operation in zsmulRec and nsmulRec (#11451)

We change the following field in the definition of an additive commutative monoid:

 nsmul_succ : ∀ (n : ℕ) (x : G),
-  AddMonoid.nsmul (n + 1) x = x + AddMonoid.nsmul n x
+  AddMonoid.nsmul (n + 1) x = AddMonoid.nsmul n x + x

where the latter is more natural

We adjust the definitions of ^ in monoids, groups, etc. Originally there was a warning comment about why this natural order was preferred

use x * npowRec n x and not npowRec n x * x in the definition to make sure that definitional unfolding of npowRec is blocked, to avoid deep recursion issues.

but it seems to no longer apply.

Remarks on the PR :

  • pow_succ and pow_succ' have switched their meanings.
  • Most of the time, the proofs were adjusted by priming/unpriming one lemma, or exchanging left and right; a few proofs were more complicated to adjust.
  • In particular, [Mathlib/NumberTheory/RamificationInertia.lean] used Ideal.IsPrime.mul_mem_pow which is defined in [Mathlib/RingTheory/DedekindDomain/Ideal.lean]. Changing the order of operation forced me to add the symmetric lemma Ideal.IsPrime.mem_pow_mul.
  • the docstring for Cauchy condensation test in [Mathlib/Analysis/PSeries.lean] was mathematically incorrect, I added the mention that the function is antitone.
Diff
@@ -563,7 +563,7 @@ theorem continuousOn_list_prod {f : ι → X → M} (l : List ι) {t : Set X}
 theorem continuous_pow : ∀ n : ℕ, Continuous fun a : M => a ^ n
   | 0 => by simpa using continuous_const
   | k + 1 => by
-    simp only [pow_succ]
+    simp only [pow_succ']
     exact continuous_id.mul (continuous_pow _)
 #align continuous_pow continuous_pow
 #align continuous_nsmul continuous_nsmul
chore: classify new lemma porting notes (#11217)

Classifies by adding issue number #10756 to porting notes claiming anything semantically equivalent to:

  • "new lemma"
  • "added lemma"
Diff
@@ -468,7 +468,7 @@ def Submonoid.topologicalClosure (s : Submonoid M) : Submonoid M where
 #align submonoid.topological_closure Submonoid.topologicalClosure
 #align add_submonoid.topological_closure AddSubmonoid.topologicalClosure
 
--- Porting note: new lemma
+-- Porting note (#10756): new lemma
 @[to_additive]
 theorem Submonoid.coe_topologicalClosure (s : Submonoid M) :
     (s.topologicalClosure : Set M) = _root_.closure (s : Set M) := rfl
chore: Remove ball and bex from lemma names (#10816)

ball for "bounded forall" and bex for "bounded exists" are from experience very confusing abbreviations. This PR renames them to forall_mem and exists_mem in the few Set lemma names that mention them.

Also deprecate ball_image_of_ball, mem_image_elim, mem_image_elim_on since those lemmas are duplicates of the renamed lemmas (apart from argument order and implicitness, which I am also fixing by making the binder in the RHS of forall_mem_image semi-implicit), have obscure names and are completely unused.

Diff
@@ -861,7 +861,7 @@ theorem continuousMul_sInf {ts : Set (TopologicalSpace M)}
 theorem continuousMul_iInf {ts : ι' → TopologicalSpace M}
     (h' : ∀ i, @ContinuousMul M (ts i) _) : @ContinuousMul M (⨅ i, ts i) _ := by
   rw [← sInf_range]
-  exact continuousMul_sInf (Set.forall_range_iff.mpr h')
+  exact continuousMul_sInf (Set.forall_mem_range.mpr h')
 #align has_continuous_mul_infi continuousMul_iInf
 #align has_continuous_add_infi continuousAdd_iInf
 
chore: scope open Classical (#11199)

We remove all but one open Classicals, instead preferring to use open scoped Classical. The only real side-effect this led to is moving a couple declarations to use Exists.choose instead of Classical.choose.

The first few commits are explicitly labelled regex replaces for ease of review.

Diff
@@ -22,9 +22,11 @@ the definitions.
 
 universe u v
 
-open Classical Set Filter TopologicalSpace
+open scoped Classical
+open Set Filter TopologicalSpace
 
-open Classical Topology BigOperators Pointwise
+open scoped Classical
+open Topology BigOperators Pointwise
 
 variable {ι α M N X : Type*} [TopologicalSpace X]
 
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
@@ -329,7 +329,7 @@ theorem isClosed_setOf_map_mul [Mul M₁] [Mul M₂] [ContinuousMul M₂] :
 #align is_closed_set_of_map_mul isClosed_setOf_map_mul
 #align is_closed_set_of_map_add isClosed_setOf_map_add
 
--- porting note: split variables command over two lines, can't change explicitness at the same time
+-- Porting note: split variables command over two lines, can't change explicitness at the same time
 -- as declaring new variables.
 variable {M₁ M₂}
 variable [MulOneClass M₁] [MulOneClass M₂] [ContinuousMul M₂]
chore: bump aesop; update syntax (#10955)

Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -585,7 +585,7 @@ instance AddMonoid.continuousSMul_nat {A} [AddMonoid A] [TopologicalSpace A]
 -- To properly fix this, we should make sure that `continuity` applies its
 -- lemmas with reducible transparency, preventing the unfolding of `^`. But this
 -- is quite an invasive change.
-@[to_additive (attr := aesop safe -100 (rule_sets [Continuous]), fun_prop)]
+@[to_additive (attr := aesop safe -100 (rule_sets := [Continuous]), fun_prop)]
 theorem Continuous.pow {f : X → M} (h : Continuous f) (n : ℕ) : Continuous fun b => f b ^ n :=
   (continuous_pow n).comp h
 #align continuous.pow Continuous.pow
chore: add some fun_prop attributes for continuity (#10769)
Diff
@@ -28,7 +28,7 @@ open Classical Topology BigOperators Pointwise
 
 variable {ι α M N X : Type*} [TopologicalSpace X]
 
-@[to_additive (attr := continuity)]
+@[to_additive (attr := continuity, fun_prop)]
 theorem continuous_one [TopologicalSpace M] [One M] : Continuous (1 : X → M) :=
   @continuous_const _ _ _ _ 1
 #align continuous_one continuous_one
chore: remove stream-of-consciousness uses of have, replace and suffices (#10640)

No changes to tactic file, it's just boring fixes throughout the library.

This follows on from #6964.

Co-authored-by: sgouezel <sebastien.gouezel@univ-rennes1.fr> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>

Diff
@@ -786,8 +786,7 @@ theorem continuousOn_finset_prod {f : ι → X → M} (s : Finset ι) {t : Set X
 @[to_additive]
 theorem eventuallyEq_prod {X M : Type*} [CommMonoid M] {s : Finset ι} {l : Filter X}
     {f g : ι → X → M} (hs : ∀ i ∈ s, f i =ᶠ[l] g i) : ∏ i in s, f i =ᶠ[l] ∏ i in s, g i := by
-  replace hs : ∀ᶠ x in l, ∀ i ∈ s, f i x = g i x
-  · rwa [eventually_all_finset]
+  replace hs : ∀ᶠ x in l, ∀ i ∈ s, f i x = g i x := by rwa [eventually_all_finset]
   filter_upwards [hs] with x hx
   simp only [Finset.prod_apply, Finset.prod_congr rfl hx]
 #align eventually_eq_prod eventuallyEq_prod
chore: redistribute tags for fun_prop regarding continuity across the library (#10494)

Co-authored-by: Yury G. Kudryashov <urkud@urkud.name>

Diff
@@ -83,7 +83,7 @@ instance ContinuousMul.to_continuousSMul_op : ContinuousSMul Mᵐᵒᵖ M :=
 #align has_continuous_mul.to_has_continuous_smul_op ContinuousMul.to_continuousSMul_op
 #align has_continuous_add.to_has_continuous_vadd_op ContinuousAdd.to_continuousVAdd_op
 
-@[to_additive (attr := continuity)]
+@[to_additive (attr := continuity, fun_prop)]
 theorem Continuous.mul {f g : X → M} (hf : Continuous f) (hg : Continuous g) :
     Continuous fun x => f x * g x :=
   continuous_mul.comp (hf.prod_mk hg : _)
@@ -102,7 +102,7 @@ theorem continuous_mul_right (a : M) : Continuous fun b : M => b * a :=
 #align continuous_mul_right continuous_mul_right
 #align continuous_add_right continuous_add_right
 
-@[to_additive]
+@[to_additive (attr := fun_prop)]
 theorem ContinuousOn.mul {f g : X → M} {s : Set X} (hf : ContinuousOn f s) (hg : ContinuousOn g s) :
     ContinuousOn (fun x => f x * g x) s :=
   (continuous_mul.comp_continuousOn (hf.prod hg) : _)
@@ -212,7 +212,7 @@ def Filter.Tendsto.units [TopologicalSpace N] [Monoid N] [ContinuousMul N] [T2Sp
 #align filter.tendsto.units Filter.Tendsto.units
 #align filter.tendsto.add_units Filter.Tendsto.addUnits
 
-@[to_additive]
+@[to_additive (attr := fun_prop)]
 theorem ContinuousAt.mul {f g : X → M} {x : X} (hf : ContinuousAt f x) (hg : ContinuousAt g x) :
     ContinuousAt (fun x => f x * g x) x :=
   Filter.Tendsto.mul hf hg
@@ -585,7 +585,7 @@ instance AddMonoid.continuousSMul_nat {A} [AddMonoid A] [TopologicalSpace A]
 -- To properly fix this, we should make sure that `continuity` applies its
 -- lemmas with reducible transparency, preventing the unfolding of `^`. But this
 -- is quite an invasive change.
-@[to_additive (attr := aesop safe -100 (rule_sets [Continuous]))]
+@[to_additive (attr := aesop safe -100 (rule_sets [Continuous]), fun_prop)]
 theorem Continuous.pow {f : X → M} (h : Continuous f) (n : ℕ) : Continuous fun b => f b ^ n :=
   (continuous_pow n).comp h
 #align continuous.pow Continuous.pow
@@ -617,14 +617,14 @@ theorem ContinuousWithinAt.pow {f : X → M} {x : X} {s : Set X} (hf : Continuou
 #align continuous_within_at.pow ContinuousWithinAt.pow
 #align continuous_within_at.nsmul ContinuousWithinAt.nsmul
 
-@[to_additive]
+@[to_additive (attr := fun_prop)]
 theorem ContinuousAt.pow {f : X → M} {x : X} (hf : ContinuousAt f x) (n : ℕ) :
     ContinuousAt (fun x => f x ^ n) x :=
   Filter.Tendsto.pow hf n
 #align continuous_at.pow ContinuousAt.pow
 #align continuous_at.nsmul ContinuousAt.nsmul
 
-@[to_additive]
+@[to_additive (attr := fun_prop)]
 theorem ContinuousOn.pow {f : X → M} {s : Set X} (hf : ContinuousOn f s) (n : ℕ) :
     ContinuousOn (fun x => f x ^ n) s := fun x hx => (hf x hx).pow n
 #align continuous_on.pow ContinuousOn.pow
feat(LocallyConvex/Bounded): add IsVonNBounded.add etc (#10135)
  • add IsVonNBounded.add, IsVonNBounded.vadd, and isVonNBounded_vadd;
  • generalize some lemmas in Topology/Algebra/Monoid from Monoid to MulOneClass, move them to a new section.

Co-authored-by: Yaël Dillies <yael.dillies@gmail.com>

Diff
@@ -402,6 +402,39 @@ instance Submonoid.continuousMul [TopologicalSpace M] [Monoid M] [ContinuousMul
 #align submonoid.has_continuous_mul Submonoid.continuousMul
 #align add_submonoid.has_continuous_add AddSubmonoid.continuousAdd
 
+section MulOneClass
+
+variable [TopologicalSpace M] [MulOneClass M] [ContinuousMul M]
+
+@[to_additive exists_open_nhds_zero_half]
+theorem exists_open_nhds_one_split {s : Set M} (hs : s ∈ 𝓝 (1 : M)) :
+    ∃ V : Set M, IsOpen V ∧ (1 : M) ∈ V ∧ ∀ v ∈ V, ∀ w ∈ V, v * w ∈ s := by
+  have : (fun a : M × M => a.1 * a.2) ⁻¹' s ∈ 𝓝 ((1, 1) : M × M) :=
+    tendsto_mul (by simpa only [one_mul] using hs)
+  simpa only [prod_subset_iff] using exists_nhds_square this
+#align exists_open_nhds_one_split exists_open_nhds_one_split
+#align exists_open_nhds_zero_half exists_open_nhds_zero_half
+
+@[to_additive exists_nhds_zero_half]
+theorem exists_nhds_one_split {s : Set M} (hs : s ∈ 𝓝 (1 : M)) :
+    ∃ V ∈ 𝓝 (1 : M), ∀ v ∈ V, ∀ w ∈ V, v * w ∈ s :=
+  let ⟨V, Vo, V1, hV⟩ := exists_open_nhds_one_split hs
+  ⟨V, IsOpen.mem_nhds Vo V1, hV⟩
+#align exists_nhds_one_split exists_nhds_one_split
+#align exists_nhds_zero_half exists_nhds_zero_half
+
+/-- Given a neighborhood `U` of `1` there is an open neighborhood `V` of `1`
+such that `V * V ⊆ U`. -/
+@[to_additive "Given an open neighborhood `U` of `0` there is an open neighborhood `V` of `0`
+  such that `V + V ⊆ U`."]
+theorem exists_open_nhds_one_mul_subset {U : Set M} (hU : U ∈ 𝓝 (1 : M)) :
+    ∃ V : Set M, IsOpen V ∧ (1 : M) ∈ V ∧ V * V ⊆ U := by
+  simpa only [mul_subset_iff] using exists_open_nhds_one_split hU
+#align exists_open_nhds_one_mul_subset exists_open_nhds_one_mul_subset
+#align exists_open_nhds_zero_add_subset exists_open_nhds_zero_add_subset
+
+end MulOneClass
+
 section ContinuousMul
 
 variable [TopologicalSpace M] [Monoid M] [ContinuousMul M]
@@ -471,23 +504,6 @@ def Submonoid.commMonoidTopologicalClosure [T2Space M] (s : Submonoid M)
 #align submonoid.comm_monoid_topological_closure Submonoid.commMonoidTopologicalClosure
 #align add_submonoid.add_comm_monoid_topological_closure AddSubmonoid.addCommMonoidTopologicalClosure
 
-@[to_additive exists_open_nhds_zero_half]
-theorem exists_open_nhds_one_split {s : Set M} (hs : s ∈ 𝓝 (1 : M)) :
-    ∃ V : Set M, IsOpen V ∧ (1 : M) ∈ V ∧ ∀ v ∈ V, ∀ w ∈ V, v * w ∈ s := by
-  have : (fun a : M × M => a.1 * a.2) ⁻¹' s ∈ 𝓝 ((1, 1) : M × M) :=
-    tendsto_mul (by simpa only [one_mul] using hs)
-  simpa only [prod_subset_iff] using exists_nhds_square this
-#align exists_open_nhds_one_split exists_open_nhds_one_split
-#align exists_open_nhds_zero_half exists_open_nhds_zero_half
-
-@[to_additive exists_nhds_zero_half]
-theorem exists_nhds_one_split {s : Set M} (hs : s ∈ 𝓝 (1 : M)) :
-    ∃ V ∈ 𝓝 (1 : M), ∀ v ∈ V, ∀ w ∈ V, v * w ∈ s :=
-  let ⟨V, Vo, V1, hV⟩ := exists_open_nhds_one_split hs
-  ⟨V, IsOpen.mem_nhds Vo V1, hV⟩
-#align exists_nhds_one_split exists_nhds_one_split
-#align exists_nhds_zero_half exists_nhds_zero_half
-
 @[to_additive exists_nhds_zero_quarter]
 theorem exists_nhds_one_split4 {u : Set M} (hu : u ∈ 𝓝 (1 : M)) :
     ∃ V ∈ 𝓝 (1 : M), ∀ {v w s t}, v ∈ V → w ∈ V → s ∈ V → t ∈ V → v * w * s * t ∈ u := by
@@ -499,19 +515,6 @@ theorem exists_nhds_one_split4 {u : Set M} (hu : u ∈ 𝓝 (1 : M)) :
 #align exists_nhds_one_split4 exists_nhds_one_split4
 #align exists_nhds_zero_quarter exists_nhds_zero_quarter
 
-/-- Given a neighborhood `U` of `1` there is an open neighborhood `V` of `1`
-such that `VV ⊆ U`. -/
-@[to_additive "Given an open neighborhood `U` of `0` there is an open neighborhood `V` of `0`
-  such that `V + V ⊆ U`."]
-theorem exists_open_nhds_one_mul_subset {U : Set M} (hU : U ∈ 𝓝 (1 : M)) :
-    ∃ V : Set M, IsOpen V ∧ (1 : M) ∈ V ∧ V * V ⊆ U := by
-  rcases exists_open_nhds_one_split hU with ⟨V, Vo, V1, hV⟩
-  use V, Vo, V1
-  rintro _ ⟨x, hx, y, hy, rfl⟩
-  exact hV _ hx _ hy
-#align exists_open_nhds_one_mul_subset exists_open_nhds_one_mul_subset
-#align exists_open_nhds_zero_add_subset exists_open_nhds_zero_add_subset
-
 @[to_additive]
 theorem IsCompact.mul {s t : Set M} (hs : IsCompact s) (ht : IsCompact t) : IsCompact (s * t) := by
   rw [← image_mul_prod]
refactor(Data/FunLike): use unbundled inheritance from FunLike (#8386)

The FunLike hierarchy is very big and gets scanned through each time we need a coercion (via the CoeFun instance). It looks like unbundled inheritance suits Lean 4 better here. The only class that still extends FunLike is EquivLike, since that has a custom coe_injective' field that is easier to implement. All other classes should take FunLike or EquivLike as a parameter.

Zulip thread

Important changes

Previously, morphism classes would be Type-valued and extend FunLike:

/-- `MyHomClass F A B` states that `F` is a type of `MyClass.op`-preserving morphisms.
You should extend this class when you extend `MyHom`. -/
class MyHomClass (F : Type*) (A B : outParam <| Type*) [MyClass A] [MyClass B]
  extends FunLike F A B :=
(map_op : ∀ (f : F) (x y : A), f (MyClass.op x y) = MyClass.op (f x) (f y))

After this PR, they should be Prop-valued and take FunLike as a parameter:

/-- `MyHomClass F A B` states that `F` is a type of `MyClass.op`-preserving morphisms.
You should extend this class when you extend `MyHom`. -/
class MyHomClass (F : Type*) (A B : outParam <| Type*) [MyClass A] [MyClass B]
  [FunLike F A B] : Prop :=
(map_op : ∀ (f : F) (x y : A), f (MyClass.op x y) = MyClass.op (f x) (f y))

(Note that A B stay marked as outParam even though they are not purely required to be so due to the FunLike parameter already filling them in. This is required to see through type synonyms, which is important in the category theory library. Also, I think keeping them as outParam is slightly faster.)

Similarly, MyEquivClass should take EquivLike as a parameter.

As a result, every mention of [MyHomClass F A B] should become [FunLike F A B] [MyHomClass F A B].

Remaining issues

Slower (failing) search

While overall this gives some great speedups, there are some cases that are noticeably slower. In particular, a failing application of a lemma such as map_mul is more expensive. This is due to suboptimal processing of arguments. For example:

variable [FunLike F M N] [Mul M] [Mul N] (f : F) (x : M) (y : M)

theorem map_mul [MulHomClass F M N] : f (x * y) = f x * f y

example [AddHomClass F A B] : f (x * y) = f x * f y := map_mul f _ _

Before this PR, applying map_mul f gives the goals [Mul ?M] [Mul ?N] [MulHomClass F ?M ?N]. Since M and N are out_params, [MulHomClass F ?M ?N] is synthesized first, supplies values for ?M and ?N and then the Mul M and Mul N instances can be found.

After this PR, the goals become [FunLike F ?M ?N] [Mul ?M] [Mul ?N] [MulHomClass F ?M ?N]. Now [FunLike F ?M ?N] is synthesized first, supplies values for ?M and ?N and then the Mul M and Mul N instances can be found, before trying MulHomClass F M N which fails. Since the Mul hierarchy is very big, this can be slow to fail, especially when there is no such Mul instance.

A long-term but harder to achieve solution would be to specify the order in which instance goals get solved. For example, we'd like to change the arguments to map_mul to look like [FunLike F M N] [Mul M] [Mul N] [highPriority <| MulHomClass F M N] because MulHomClass fails or succeeds much faster than the others.

As a consequence, the simpNF linter is much slower since by design it tries and fails to apply many map_ lemmas. The same issue occurs a few times in existing calls to simp [map_mul], where map_mul is tried "too soon" and fails. Thanks to the speedup of leanprover/lean4#2478 the impact is very limited, only in files that already were close to the timeout.

simp not firing sometimes

This affects map_smulₛₗ and related definitions. For simp lemmas Lean apparently uses a slightly different mechanism to find instances, so that rw can find every argument to map_smulₛₗ successfully but simp can't: leanprover/lean4#3701.

Missing instances due to unification failing

Especially in the category theory library, we might sometimes have a type A which is also accessible as a synonym (Bundled A hA).1. Instance synthesis doesn't always work if we have f : A →* B but x * y : (Bundled A hA).1 or vice versa. This seems to be mostly fixed by keeping A B as outParams in MulHomClass F A B. (Presumably because Lean will do a definitional check A =?= (Bundled A hA).1 instead of using the syntax in the discrimination tree.)

Workaround for issues

The timeouts can be worked around for now by specifying which map_mul we mean, either as map_mul f for some explicit f, or as e.g. MonoidHomClass.map_mul.

map_smulₛₗ not firing as simp lemma can be worked around by going back to the pre-FunLike situation and making LinearMap.map_smulₛₗ a simp lemma instead of the generic map_smulₛₗ. Writing simp [map_smulₛₗ _] also works.

Co-authored-by: Matthew Ballard <matt@mrb.email> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Scott Morrison <scott@tqft.net> Co-authored-by: Anne Baanen <Vierkantor@users.noreply.github.com>

Diff
@@ -333,7 +333,7 @@ theorem isClosed_setOf_map_mul [Mul M₁] [Mul M₂] [ContinuousMul M₂] :
 -- as declaring new variables.
 variable {M₁ M₂}
 variable [MulOneClass M₁] [MulOneClass M₂] [ContinuousMul M₂]
-  {F : Type*} [MonoidHomClass F M₁ M₂] {l : Filter α}
+  {F : Type*} [FunLike F M₁ M₂] [MonoidHomClass F M₁ M₂] {l : Filter α}
 
 /-- Construct a bundled monoid homomorphism `M₁ →* M₂` from a function `f` and a proof that it
 belongs to the closure of the range of the coercion from `M₁ →* M₂` (or another type of bundled
@@ -373,7 +373,7 @@ theorem MonoidHom.isClosed_range_coe : IsClosed (Set.range ((↑) : (M₁ →* M
 end PointwiseLimits
 
 @[to_additive]
-theorem Inducing.continuousMul {M N F : Type*} [Mul M] [Mul N] [MulHomClass F M N]
+theorem Inducing.continuousMul {M N F : Type*} [Mul M] [Mul N] [FunLike F M N] [MulHomClass F M N]
     [TopologicalSpace M] [TopologicalSpace N] [ContinuousMul N] (f : F) (hf : Inducing f) :
     ContinuousMul M :=
   ⟨(hf.continuousSMul hf.continuous (map_mul f _ _)).1⟩
@@ -381,7 +381,7 @@ theorem Inducing.continuousMul {M N F : Type*} [Mul M] [Mul N] [MulHomClass F M
 #align inducing.has_continuous_add Inducing.continuousAdd
 
 @[to_additive]
-theorem continuousMul_induced {M N F : Type*} [Mul M] [Mul N] [MulHomClass F M N]
+theorem continuousMul_induced {M N F : Type*} [Mul M] [Mul N] [FunLike F M N] [MulHomClass F M N]
     [TopologicalSpace N] [ContinuousMul N] (f : F) : @ContinuousMul M (induced f ‹_›) _ :=
   letI := induced f ‹_›
   Inducing.continuousMul f ⟨rfl⟩
feat: add Inducing.continuousSMul (#9713)
  • add Inducing.continuousSMul and Inducing.continuousVAdd;
  • use it to golf Units.continuousSMul and Inducing.continuousMul;
  • generalize Submonoid.continuousSMul from a submonoid of a group to a submonoid of a monoid;
  • reuse Submonoid.continuousSMul in Subgroup.continuousSMul.
Diff
@@ -376,8 +376,7 @@ end PointwiseLimits
 theorem Inducing.continuousMul {M N F : Type*} [Mul M] [Mul N] [MulHomClass F M N]
     [TopologicalSpace M] [TopologicalSpace N] [ContinuousMul N] (f : F) (hf : Inducing f) :
     ContinuousMul M :=
-  ⟨hf.continuous_iff.2 <| by
-      simpa only [(· ∘ ·), map_mul f] using hf.continuous.fst'.mul hf.continuous.snd'⟩
+  ⟨(hf.continuousSMul hf.continuous (map_mul f _ _)).1⟩
 #align inducing.has_continuous_mul Inducing.continuousMul
 #align inducing.has_continuous_add Inducing.continuousAdd
 
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
@@ -419,7 +419,7 @@ theorem Submonoid.top_closure_mul_self_subset (s : Submonoid M) :
 theorem Submonoid.top_closure_mul_self_eq (s : Submonoid M) :
     _root_.closure (s : Set M) * _root_.closure s = _root_.closure s :=
   Subset.antisymm s.top_closure_mul_self_subset fun x hx =>
-    ⟨x, 1, hx, _root_.subset_closure s.one_mem, mul_one _⟩
+    ⟨x, hx, 1, _root_.subset_closure s.one_mem, mul_one _⟩
 #align submonoid.top_closure_mul_self_eq Submonoid.top_closure_mul_self_eq
 #align add_submonoid.top_closure_add_self_eq AddSubmonoid.top_closure_add_self_eq
 
@@ -430,7 +430,7 @@ itself a submonoid. -/
 def Submonoid.topologicalClosure (s : Submonoid M) : Submonoid M where
   carrier := _root_.closure (s : Set M)
   one_mem' := _root_.subset_closure s.one_mem
-  mul_mem' ha hb := s.top_closure_mul_self_subset ⟨_, _, ha, hb, rfl⟩
+  mul_mem' ha hb := s.top_closure_mul_self_subset ⟨_, ha, _, hb, rfl⟩
 #align submonoid.topological_closure Submonoid.topologicalClosure
 #align add_submonoid.topological_closure AddSubmonoid.topologicalClosure
 
@@ -508,7 +508,7 @@ theorem exists_open_nhds_one_mul_subset {U : Set M} (hU : U ∈ 𝓝 (1 : M)) :
     ∃ V : Set M, IsOpen V ∧ (1 : M) ∈ V ∧ V * V ⊆ U := by
   rcases exists_open_nhds_one_split hU with ⟨V, Vo, V1, hV⟩
   use V, Vo, V1
-  rintro _ ⟨x, y, hx, hy, rfl⟩
+  rintro _ ⟨x, hx, y, hy, rfl⟩
   exact hV _ hx _ hy
 #align exists_open_nhds_one_mul_subset exists_open_nhds_one_mul_subset
 #align exists_open_nhds_zero_add_subset exists_open_nhds_zero_add_subset
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
@@ -276,16 +276,17 @@ theorem ContinuousMul.of_nhds_one {M : Type u} [Monoid M] [TopologicalSpace M]
       ext x
       simp [mul_assoc]
     calc
-      map (uncurry (· * ·)) (𝓝 (x₀, y₀)) = map (uncurry (· * ·)) (𝓝 x₀ ×ˢ 𝓝 y₀) := by
-        rw [nhds_prod_eq]
+      map (uncurry (· * ·)) (𝓝 (x₀, y₀)) = map (uncurry (· * ·)) (𝓝 x₀ ×ˢ 𝓝 y₀) :=
+        by rw [nhds_prod_eq]
       _ = map (fun p : M × M => x₀ * p.1 * (p.2 * y₀)) (𝓝 1 ×ˢ 𝓝 1) := by
         -- Porting note: `rw` was able to prove this
         -- Now it fails with `failed to rewrite using equation theorems for 'Function.uncurry'`
         -- and `failed to rewrite using equation theorems for 'Function.comp'`.
         -- Removing those two lemmas, the `rw` would succeed, but then needs a `rfl`.
-        simp_rw [uncurry, hleft x₀, hright y₀, prod_map_map_eq, Filter.map_map, Function.comp]
-      _ = map ((fun x => x₀ * x) ∘ fun x => x * y₀) (map (uncurry (· * ·)) (𝓝 1 ×ˢ 𝓝 1)) := by
-        rw [key, ← Filter.map_map]
+        simp (config := { unfoldPartialApp := true }) only [uncurry]
+        simp_rw [hleft x₀, hright y₀, prod_map_map_eq, Filter.map_map, Function.comp_def]
+      _ = map ((fun x => x₀ * x) ∘ fun x => x * y₀) (map (uncurry (· * ·)) (𝓝 1 ×ˢ 𝓝 1)) :=
+        by rw [key, ← Filter.map_map]
       _ ≤ map ((fun x : M => x₀ * x) ∘ fun x => x * y₀) (𝓝 1) := map_mono hmul
       _ = 𝓝 (x₀ * y₀) := by
         rw [← Filter.map_map, ← hright, hleft y₀, Filter.map_map, key₂, ← hleft]⟩
style: cleanup by putting by on the same line as := (#8407)

Co-authored-by: Eric Wieser <wieser.eric@gmail.com>

Diff
@@ -276,16 +276,16 @@ theorem ContinuousMul.of_nhds_one {M : Type u} [Monoid M] [TopologicalSpace M]
       ext x
       simp [mul_assoc]
     calc
-      map (uncurry (· * ·)) (𝓝 (x₀, y₀)) = map (uncurry (· * ·)) (𝓝 x₀ ×ˢ 𝓝 y₀) :=
-        by rw [nhds_prod_eq]
-      _ = map (fun p : M × M => x₀ * p.1 * (p.2 * y₀)) (𝓝 1 ×ˢ 𝓝 1) :=
+      map (uncurry (· * ·)) (𝓝 (x₀, y₀)) = map (uncurry (· * ·)) (𝓝 x₀ ×ˢ 𝓝 y₀) := by
+        rw [nhds_prod_eq]
+      _ = map (fun p : M × M => x₀ * p.1 * (p.2 * y₀)) (𝓝 1 ×ˢ 𝓝 1) := by
         -- Porting note: `rw` was able to prove this
         -- Now it fails with `failed to rewrite using equation theorems for 'Function.uncurry'`
         -- and `failed to rewrite using equation theorems for 'Function.comp'`.
         -- Removing those two lemmas, the `rw` would succeed, but then needs a `rfl`.
-        by simp_rw [uncurry, hleft x₀, hright y₀, prod_map_map_eq, Filter.map_map, Function.comp]
-      _ = map ((fun x => x₀ * x) ∘ fun x => x * y₀) (map (uncurry (· * ·)) (𝓝 1 ×ˢ 𝓝 1)) :=
-        by rw [key, ← Filter.map_map]
+        simp_rw [uncurry, hleft x₀, hright y₀, prod_map_map_eq, Filter.map_map, Function.comp]
+      _ = map ((fun x => x₀ * x) ∘ fun x => x * y₀) (map (uncurry (· * ·)) (𝓝 1 ×ˢ 𝓝 1)) := by
+        rw [key, ← Filter.map_map]
       _ ≤ map ((fun x : M => x₀ * x) ∘ fun x => x * y₀) (𝓝 1) := map_mono hmul
       _ = 𝓝 (x₀ * y₀) := by
         rw [← Filter.map_map, ← hright, hleft y₀, Filter.map_map, key₂, ← hleft]⟩
fix: continuity: remove npowRec rule (#8312)

This rule used to unfold the recursive function npowRec unconditionally, so Aesop would loop during normalisation unless another normalisation rule (usually simp) happened to close the goal. To prevent this issue, Aesop master now disallows recursive unfold rules, so we have to remove the npowRec rule.

Diff
@@ -573,7 +573,16 @@ instance AddMonoid.continuousSMul_nat {A} [AddMonoid A] [TopologicalSpace A]
   ⟨continuous_prod_of_discrete_left.mpr continuous_nsmul⟩
 #align add_monoid.has_continuous_smul_nat AddMonoid.continuousSMul_nat
 
-@[to_additive (attr := continuity)]
+-- We register `Continuous.pow` as a `continuity` lemma with low penalty (so
+-- `continuity` will try it before other `continuity` lemmas). This is a
+-- workaround for goals of the form `Continuous fun x => x ^ 2`, where
+-- `continuity` applies `Continuous.mul` since the goal is defeq to
+-- `Continuous fun x => x * x`.
+--
+-- To properly fix this, we should make sure that `continuity` applies its
+-- lemmas with reducible transparency, preventing the unfolding of `^`. But this
+-- is quite an invasive change.
+@[to_additive (attr := aesop safe -100 (rule_sets [Continuous]))]
 theorem Continuous.pow {f : X → M} (h : Continuous f) (n : ℕ) : Continuous fun b => f b ^ n :=
   (continuous_pow n).comp h
 #align continuous.pow Continuous.pow
chore: reorder variables for to_additive (#7856)

to_additive heuristics work best when the type to be additivized comes first. We make sure this is the case for later applications.

Diff
@@ -26,7 +26,7 @@ open Classical Set Filter TopologicalSpace
 
 open Classical Topology BigOperators Pointwise
 
-variable {ι α X M N : Type*} [TopologicalSpace X]
+variable {ι α M N X : Type*} [TopologicalSpace X]
 
 @[to_additive (attr := continuity)]
 theorem continuous_one [TopologicalSpace M] [One M] : Continuous (1 : X → M) :=
feat(Topology): continuity from a product with a discrete space (#7511)
  • Add four pairs of lemmas continuous((Within)At/On)_prod_of_discrete_left/right in ContinuousOn.lean: to check continuity of a function from X × Y to Z with X discrete, it suffices to check continuity of every slice of it with x : X fixed.

  • Remove duplicate lemmas continuous_uncurry_of_discreteTopology(_left) from Constructions.lean in favor of the more general (iff) version.

  • Move the lemma continuous_iff_continuousOn_univ up.

Co-authored-by: Junyan Xu <junyanxu.math@gmail.com>

Diff
@@ -570,7 +570,7 @@ instance AddMonoid.continuousConstSMul_nat {A} [AddMonoid A] [TopologicalSpace A
 
 instance AddMonoid.continuousSMul_nat {A} [AddMonoid A] [TopologicalSpace A]
     [ContinuousAdd A] : ContinuousSMul ℕ A :=
-  ⟨continuous_uncurry_of_discreteTopology continuous_nsmul⟩
+  ⟨continuous_prod_of_discrete_left.mpr continuous_nsmul⟩
 #align add_monoid.has_continuous_smul_nat AddMonoid.continuousSMul_nat
 
 @[to_additive (attr := continuity)]
chore: only four spaces for subsequent lines (#7286)

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

Diff
@@ -436,7 +436,7 @@ def Submonoid.topologicalClosure (s : Submonoid M) : Submonoid M where
 -- Porting note: new lemma
 @[to_additive]
 theorem Submonoid.coe_topologicalClosure (s : Submonoid M) :
-  (s.topologicalClosure : Set M) = _root_.closure (s : Set M) := rfl
+    (s.topologicalClosure : Set M) = _root_.closure (s : Set M) := rfl
 
 @[to_additive]
 theorem Submonoid.le_topologicalClosure (s : Submonoid M) : s ≤ s.topologicalClosure :=
chore: replace anonymous morphism constructors with named fields (#7015)

This makes it easier to refactor the order or inheritance structure of morphisms without having to change all of the anonymous constructors.

This is far from exhaustive.

Diff
@@ -391,7 +391,7 @@ theorem continuousMul_induced {M N F : Type*} [Mul M] [Mul N] [MulHomClass F M N
 @[to_additive]
 instance Subsemigroup.continuousMul [TopologicalSpace M] [Semigroup M] [ContinuousMul M]
     (S : Subsemigroup M) : ContinuousMul S :=
-  Inducing.continuousMul (⟨(↑), fun _ _ => rfl⟩ : MulHom S M) ⟨rfl⟩
+  Inducing.continuousMul ({ toFun := (↑), map_mul' := fun _ _ => rfl} : MulHom S M) ⟨rfl⟩
 #align subsemigroup.has_continuous_mul Subsemigroup.continuousMul
 #align add_subsemigroup.has_continuous_add AddSubsemigroup.continuousAdd
 
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
@@ -26,7 +26,7 @@ open Classical Set Filter TopologicalSpace
 
 open Classical Topology BigOperators Pointwise
 
-variable {ι α X M N : Type _} [TopologicalSpace X]
+variable {ι α X M N : Type*} [TopologicalSpace X]
 
 @[to_additive (attr := continuity)]
 theorem continuous_one [TopologicalSpace M] [One M] : Continuous (1 : X → M) :=
@@ -161,7 +161,7 @@ theorem nhds_mul_nhds_one {M} [MulOneClass M] [TopologicalSpace M] [ContinuousMu
 
 section tendsto_nhds
 
-variable {𝕜 : Type _} [Preorder 𝕜] [Zero 𝕜] [Mul 𝕜] [TopologicalSpace 𝕜] [ContinuousMul 𝕜]
+variable {𝕜 : Type*} [Preorder 𝕜] [Zero 𝕜] [Mul 𝕜] [TopologicalSpace 𝕜] [ContinuousMul 𝕜]
   {l : Filter α} {f : α → 𝕜} {b c : 𝕜} (hb : 0 < b)
 
 theorem Filter.TendstoNhdsWithinIoi.const_mul [PosMulStrictMono 𝕜] [PosMulReflectLT 𝕜]
@@ -233,7 +233,7 @@ instance Prod.continuousMul [TopologicalSpace N] [Mul N] [ContinuousMul N] :
       (continuous_snd.fst'.mul continuous_snd.snd')⟩
 
 @[to_additive]
-instance Pi.continuousMul {C : ι → Type _} [∀ i, TopologicalSpace (C i)] [∀ i, Mul (C i)]
+instance Pi.continuousMul {C : ι → Type*} [∀ i, TopologicalSpace (C i)] [∀ i, Mul (C i)]
     [∀ i, ContinuousMul (C i)] : ContinuousMul (∀ i, C i) where
   continuous_mul :=
     continuous_pi fun i => (continuous_apply i).fst'.mul (continuous_apply i).snd'
@@ -306,7 +306,7 @@ end ContinuousMul
 
 section PointwiseLimits
 
-variable (M₁ M₂ : Type _) [TopologicalSpace M₂] [T2Space M₂]
+variable (M₁ M₂ : Type*) [TopologicalSpace M₂] [T2Space M₂]
 
 @[to_additive]
 theorem isClosed_setOf_map_one [One M₁] [One M₂] : IsClosed { f : M₁ → M₂ | f 1 = 1 } :=
@@ -332,7 +332,7 @@ theorem isClosed_setOf_map_mul [Mul M₁] [Mul M₂] [ContinuousMul M₂] :
 -- as declaring new variables.
 variable {M₁ M₂}
 variable [MulOneClass M₁] [MulOneClass M₂] [ContinuousMul M₂]
-  {F : Type _} [MonoidHomClass F M₁ M₂] {l : Filter α}
+  {F : Type*} [MonoidHomClass F M₁ M₂] {l : Filter α}
 
 /-- Construct a bundled monoid homomorphism `M₁ →* M₂` from a function `f` and a proof that it
 belongs to the closure of the range of the coercion from `M₁ →* M₂` (or another type of bundled
@@ -372,7 +372,7 @@ theorem MonoidHom.isClosed_range_coe : IsClosed (Set.range ((↑) : (M₁ →* M
 end PointwiseLimits
 
 @[to_additive]
-theorem Inducing.continuousMul {M N F : Type _} [Mul M] [Mul N] [MulHomClass F M N]
+theorem Inducing.continuousMul {M N F : Type*} [Mul M] [Mul N] [MulHomClass F M N]
     [TopologicalSpace M] [TopologicalSpace N] [ContinuousMul N] (f : F) (hf : Inducing f) :
     ContinuousMul M :=
   ⟨hf.continuous_iff.2 <| by
@@ -381,7 +381,7 @@ theorem Inducing.continuousMul {M N F : Type _} [Mul M] [Mul N] [MulHomClass F M
 #align inducing.has_continuous_add Inducing.continuousAdd
 
 @[to_additive]
-theorem continuousMul_induced {M N F : Type _} [Mul M] [Mul N] [MulHomClass F M N]
+theorem continuousMul_induced {M N F : Type*} [Mul M] [Mul N] [MulHomClass F M N]
     [TopologicalSpace N] [ContinuousMul N] (f : F) : @ContinuousMul M (induced f ‹_›) _ :=
   letI := induced f ‹_›
   Inducing.continuousMul f ⟨rfl⟩
@@ -648,7 +648,7 @@ multiplication by constants.
 Notably, this instances applies when `R = A`, or when `[Algebra R A]` is available. -/
 @[to_additive "If `R` acts on `A` via `A`, then continuous addition implies
 continuous affine addition by constants."]
-instance (priority := 100) IsScalarTower.continuousConstSMul {R A : Type _} [Monoid A] [SMul R A]
+instance (priority := 100) IsScalarTower.continuousConstSMul {R A : Type*} [Monoid A] [SMul R A]
     [IsScalarTower R A A] [TopologicalSpace A] [ContinuousMul A] : ContinuousConstSMul R A where
   continuous_const_smul q := by
     simp (config := { singlePass := true }) only [← smul_one_mul q (_ : A)]
@@ -664,7 +664,7 @@ Notably, this instances applies when `R = Aᵐᵒᵖ`.-/
 continuous addition implies continuous affine addition by constants.
 
 Notably, this instances applies when `R = Aᵃᵒᵖ`."]
-instance (priority := 100) SMulCommClass.continuousConstSMul {R A : Type _} [Monoid A] [SMul R A]
+instance (priority := 100) SMulCommClass.continuousConstSMul {R A : Type*} [Monoid A] [SMul R A]
     [SMulCommClass R A A] [TopologicalSpace A] [ContinuousMul A] : ContinuousConstSMul R A where
   continuous_const_smul q := by
     simp (config := { singlePass := true }) only [← mul_smul_one q (_ : A)]
@@ -772,7 +772,7 @@ theorem continuousOn_finset_prod {f : ι → X → M} (s : Finset ι) {t : Set X
 #align continuous_on_finset_sum continuousOn_finset_sum
 
 @[to_additive]
-theorem eventuallyEq_prod {X M : Type _} [CommMonoid M] {s : Finset ι} {l : Filter X}
+theorem eventuallyEq_prod {X M : Type*} [CommMonoid M] {s : Finset ι} {l : Filter X}
     {f g : ι → X → M} (hs : ∀ i ∈ s, f i =ᶠ[l] g i) : ∏ i in s, f i =ᶠ[l] ∏ i in s, g i := by
   replace hs : ∀ᶠ x in l, ∀ i ∈ s, f i x = g i x
   · rwa [eventually_all_finset]
@@ -784,7 +784,7 @@ theorem eventuallyEq_prod {X M : Type _} [CommMonoid M] {s : Finset ι} {l : Fil
 open Function
 
 @[to_additive]
-theorem LocallyFinite.exists_finset_mulSupport {M : Type _} [CommMonoid M] {f : ι → X → M}
+theorem LocallyFinite.exists_finset_mulSupport {M : Type*} [CommMonoid M] {f : ι → X → M}
     (hf : LocallyFinite fun i => mulSupport <| f i) (x₀ : X) :
     ∃ I : Finset ι, ∀ᶠ x in 𝓝 x₀, (mulSupport fun i => f i x) ⊆ I := by
   rcases hf x₀ with ⟨U, hxU, hUf⟩
@@ -795,7 +795,7 @@ theorem LocallyFinite.exists_finset_mulSupport {M : Type _} [CommMonoid M] {f :
 #align locally_finite.exists_finset_support LocallyFinite.exists_finset_support
 
 @[to_additive]
-theorem finprod_eventually_eq_prod {M : Type _} [CommMonoid M] {f : ι → X → M}
+theorem finprod_eventually_eq_prod {M : Type*} [CommMonoid M] {f : ι → X → M}
     (hf : LocallyFinite fun i => mulSupport (f i)) (x : X) :
     ∃ s : Finset ι, ∀ᶠ y in 𝓝 x, ∏ᶠ i, f i y = ∏ i in s, f i y :=
   let ⟨I, hI⟩ := hf.exists_finset_mulSupport x
@@ -832,7 +832,7 @@ instance [TopologicalSpace M] [Add M] [ContinuousAdd M] : ContinuousMul (Multipl
 
 section LatticeOps
 
-variable {ι' : Sort _} [Mul M]
+variable {ι' : Sort*} [Mul M]
 
 @[to_additive]
 theorem continuousMul_sInf {ts : Set (TopologicalSpace M)}
chore: tidy various files (#6174)
Diff
@@ -54,7 +54,6 @@ Continuity in only the left/right argument can be stated using
 class ContinuousMul (M : Type u) [TopologicalSpace M] [Mul M] : Prop where
   continuous_mul : Continuous fun p : M × M => p.1 * p.2
 #align has_continuous_mul ContinuousMul
--- #align has_continuous_add ContinuousAdd
 
 section ContinuousMul
 
@@ -235,16 +234,16 @@ instance Prod.continuousMul [TopologicalSpace N] [Mul N] [ContinuousMul N] :
 
 @[to_additive]
 instance Pi.continuousMul {C : ι → Type _} [∀ i, TopologicalSpace (C i)] [∀ i, Mul (C i)]
-    [∀ i, ContinuousMul (C i)] : ContinuousMul (∀ i, C i)
-    where continuous_mul :=
+    [∀ i, ContinuousMul (C i)] : ContinuousMul (∀ i, C i) where
+  continuous_mul :=
     continuous_pi fun i => (continuous_apply i).fst'.mul (continuous_apply i).snd'
 #align pi.has_continuous_mul Pi.continuousMul
 #align pi.has_continuous_add Pi.continuousAdd
 
-/-- A version of `pi.continuousMul` for non-dependent functions. It is needed because sometimes
-Lean 3 fails to use `pi.continuousMul` for non-dependent functions. -/
-@[to_additive "A version of `pi.continuousAdd` for non-dependent functions. It is needed
-because sometimes Lean fails to use `pi.continuousAdd` for non-dependent functions."]
+/-- A version of `Pi.continuousMul` for non-dependent functions. It is needed because sometimes
+Lean 3 fails to use `Pi.continuousMul` for non-dependent functions. -/
+@[to_additive "A version of `Pi.continuousAdd` for non-dependent functions. It is needed
+because sometimes Lean fails to use `Pi.continuousAdd` for non-dependent functions."]
 instance Pi.continuousMul' : ContinuousMul (ι → M) :=
   Pi.continuousMul
 #align pi.has_continuous_mul' Pi.continuousMul'
@@ -427,8 +426,7 @@ theorem Submonoid.top_closure_mul_self_eq (s : Submonoid M) :
 itself a submonoid. -/
 @[to_additive "The (topological-space) closure of an additive submonoid of a space `M` with
 `ContinuousAdd` is itself an additive submonoid."]
-def Submonoid.topologicalClosure (s : Submonoid M) : Submonoid M
-    where
+def Submonoid.topologicalClosure (s : Submonoid M) : Submonoid M where
   carrier := _root_.closure (s : Set M)
   one_mem' := _root_.subset_closure s.one_mem
   mul_mem' ha hb := s.top_closure_mul_self_subset ⟨_, _, ha, hb, rfl⟩
@@ -438,7 +436,7 @@ def Submonoid.topologicalClosure (s : Submonoid M) : Submonoid M
 -- Porting note: new lemma
 @[to_additive]
 theorem Submonoid.coe_topologicalClosure (s : Submonoid M) :
-  (s.topologicalClosure : Set M) = _root_.closure (s : Set M) := by rfl
+  (s.topologicalClosure : Set M) = _root_.closure (s : Set M) := rfl
 
 @[to_additive]
 theorem Submonoid.le_topologicalClosure (s : Submonoid M) : s ≤ s.topologicalClosure :=
@@ -652,9 +650,9 @@ Notably, this instances applies when `R = A`, or when `[Algebra R A]` is availab
 continuous affine addition by constants."]
 instance (priority := 100) IsScalarTower.continuousConstSMul {R A : Type _} [Monoid A] [SMul R A]
     [IsScalarTower R A A] [TopologicalSpace A] [ContinuousMul A] : ContinuousConstSMul R A where
-    continuous_const_smul q := by
-      simp (config := { singlePass := true }) only [← smul_one_mul q (_ : A)]
-      exact continuous_const.mul continuous_id
+  continuous_const_smul q := by
+    simp (config := { singlePass := true }) only [← smul_one_mul q (_ : A)]
+    exact continuous_const.mul continuous_id
 #align is_scalar_tower.has_continuous_const_smul IsScalarTower.continuousConstSMul
 #align vadd_assoc_class.has_continuous_const_vadd VAddAssocClass.continuousConstVAdd
 
@@ -668,9 +666,9 @@ continuous addition implies continuous affine addition by constants.
 Notably, this instances applies when `R = Aᵃᵒᵖ`."]
 instance (priority := 100) SMulCommClass.continuousConstSMul {R A : Type _} [Monoid A] [SMul R A]
     [SMulCommClass R A A] [TopologicalSpace A] [ContinuousMul A] : ContinuousConstSMul R A where
-    continuous_const_smul q := by
-      simp (config := { singlePass := true }) only [← mul_smul_one q (_ : A)]
-      exact continuous_id.mul continuous_const
+  continuous_const_smul q := by
+    simp (config := { singlePass := true }) only [← mul_smul_one q (_ : A)]
+    exact continuous_id.mul continuous_const
 #align smul_comm_class.has_continuous_const_smul SMulCommClass.continuousConstSMul
 #align vadd_comm_class.has_continuous_const_vadd VAddCommClass.continuousConstVAdd
 
@@ -778,7 +776,7 @@ theorem eventuallyEq_prod {X M : Type _} [CommMonoid M] {s : Finset ι} {l : Fil
     {f g : ι → X → M} (hs : ∀ i ∈ s, f i =ᶠ[l] g i) : ∏ i in s, f i =ᶠ[l] ∏ i in s, g i := by
   replace hs : ∀ᶠ x in l, ∀ i ∈ s, f i x = g i x
   · rwa [eventually_all_finset]
-  filter_upwards [hs]with x hx
+  filter_upwards [hs] with x hx
   simp only [Finset.prod_apply, Finset.prod_congr rfl hx]
 #align eventually_eq_prod eventuallyEq_prod
 #align eventually_eq_sum eventuallyEq_sum
@@ -826,11 +824,11 @@ theorem continuous_finprod_cond {f : ι → X → M} {p : ι → Prop} (hc : ∀
 
 end
 
-instance [TopologicalSpace M] [Mul M] [ContinuousMul M] : ContinuousAdd (Additive M)
-    where continuous_add := @continuous_mul M _ _ _
+instance [TopologicalSpace M] [Mul M] [ContinuousMul M] : ContinuousAdd (Additive M) where
+  continuous_add := @continuous_mul M _ _ _
 
-instance [TopologicalSpace M] [Add M] [ContinuousAdd M] : ContinuousMul (Multiplicative M)
-    where continuous_mul := @continuous_add M _ _ _
+instance [TopologicalSpace M] [Add M] [ContinuousAdd M] : ContinuousMul (Multiplicative M) where
+  continuous_mul := @continuous_add M _ _ _
 
 section LatticeOps
 
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,11 +2,6 @@
 Copyright (c) 2017 Johannes Hölzl. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johannes Hölzl, Mario Carneiro
-
-! This file was ported from Lean 3 source module topology.algebra.monoid
-! leanprover-community/mathlib commit 1ac8d4304efba9d03fa720d06516fac845aa5353
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.Algebra.BigOperators.Finprod
 import Mathlib.Order.Filter.Pointwise
@@ -14,6 +9,8 @@ import Mathlib.Topology.Algebra.MulAction
 import Mathlib.Algebra.BigOperators.Pi
 import Mathlib.Topology.ContinuousFunction.Basic
 
+#align_import topology.algebra.monoid from "leanprover-community/mathlib"@"1ac8d4304efba9d03fa720d06516fac845aa5353"
+
 /-!
 # Theory of topological monoids
 
fix: ∑' precedence (#5615)
  • Also remove most superfluous parentheses around big operators (, and variants).
  • roughly the used regex: ([^a-zA-Zα-ωΑ-Ω'𝓝ℳ₀𝕂ₛ)]) \(([∑∏][^()∑∏]*,[^()∑∏:]*)\) ([⊂⊆=<≤]) replaced by $1 $2 $3
Diff
@@ -778,7 +778,7 @@ theorem continuousOn_finset_prod {f : ι → X → M} (s : Finset ι) {t : Set X
 
 @[to_additive]
 theorem eventuallyEq_prod {X M : Type _} [CommMonoid M] {s : Finset ι} {l : Filter X}
-    {f g : ι → X → M} (hs : ∀ i ∈ s, f i =ᶠ[l] g i) : (∏ i in s, f i) =ᶠ[l] ∏ i in s, g i := by
+    {f g : ι → X → M} (hs : ∀ i ∈ s, f i =ᶠ[l] g i) : ∏ i in s, f i =ᶠ[l] ∏ i in s, g i := by
   replace hs : ∀ᶠ x in l, ∀ i ∈ s, f i x = g i x
   · rwa [eventually_all_finset]
   filter_upwards [hs]with x hx
@@ -802,7 +802,7 @@ theorem LocallyFinite.exists_finset_mulSupport {M : Type _} [CommMonoid M] {f :
 @[to_additive]
 theorem finprod_eventually_eq_prod {M : Type _} [CommMonoid M] {f : ι → X → M}
     (hf : LocallyFinite fun i => mulSupport (f i)) (x : X) :
-    ∃ s : Finset ι, ∀ᶠ y in 𝓝 x, (∏ᶠ i, f i y) = ∏ i in s, f i y :=
+    ∃ s : Finset ι, ∀ᶠ y in 𝓝 x, ∏ᶠ i, f i y = ∏ i in s, f i y :=
   let ⟨I, hI⟩ := hf.exists_finset_mulSupport x
   ⟨I, hI.mono fun _ hy => finprod_eq_prod_of_mulSupport_subset _ fun _ hi => hy hi⟩
 #align finprod_eventually_eq_prod finprod_eventually_eq_prod
chore: reviewing porting notes about rw/simp/simp_rw (#5244)

Co-authored-by: Scott Morrison <scott.morrison@anu.edu.au>

Diff
@@ -283,8 +283,11 @@ theorem ContinuousMul.of_nhds_one {M : Type u} [Monoid M] [TopologicalSpace M]
       map (uncurry (· * ·)) (𝓝 (x₀, y₀)) = map (uncurry (· * ·)) (𝓝 x₀ ×ˢ 𝓝 y₀) :=
         by rw [nhds_prod_eq]
       _ = map (fun p : M × M => x₀ * p.1 * (p.2 * y₀)) (𝓝 1 ×ˢ 𝓝 1) :=
-        by simp_rw [uncurry, hleft x₀, hright y₀, prod_map_map_eq, Filter.map_map, Function.comp]
         -- Porting note: `rw` was able to prove this
+        -- Now it fails with `failed to rewrite using equation theorems for 'Function.uncurry'`
+        -- and `failed to rewrite using equation theorems for 'Function.comp'`.
+        -- Removing those two lemmas, the `rw` would succeed, but then needs a `rfl`.
+        by simp_rw [uncurry, hleft x₀, hright y₀, prod_map_map_eq, Filter.map_map, Function.comp]
       _ = map ((fun x => x₀ * x) ∘ fun x => x * y₀) (map (uncurry (· * ·)) (𝓝 1 ×ˢ 𝓝 1)) :=
         by rw [key, ← Filter.map_map]
       _ ≤ map ((fun x : M => x₀ * x) ∘ fun x => x * y₀) (𝓝 1) := map_mono hmul
chore: fix backtick in docs (#5077)

I wrote a script to find lines that contain an odd number of backticks

Diff
@@ -870,7 +870,7 @@ namespace ContinuousMap
 variable [Mul X] [ContinuousMul X]
 
 /-- The continuous map `fun y => y * x` -/
-@[to_additive "The continuous map `fun y => y + x"]
+@[to_additive "The continuous map `fun y => y + x`"]
 protected def mulRight (x : X) : C(X, X) :=
   mk _ (continuous_mul_right x)
 #align continuous_map.mul_right ContinuousMap.mulRight
@@ -883,7 +883,7 @@ theorem coe_mulRight (x : X) : ⇑(ContinuousMap.mulRight x) = fun y => y * x :=
 #align continuous_map.coe_add_right ContinuousMap.coe_addRight
 
 /-- The continuous map `fun y => x * y` -/
-@[to_additive "The continuous map `fun y => x + y"]
+@[to_additive "The continuous map `fun y => x + y`"]
 protected def mulLeft (x : X) : C(X, X) :=
   mk _ (continuous_mul_left x)
 #align continuous_map.mul_left ContinuousMap.mulLeft
chore: forward_port leanprover-community/mathlib#19169 (#5057)

The other files were already fixed in Lean4. I also tried doing a sweep of the rest of the files to make sure there was no more broken ones - it seems ok.

Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johannes Hölzl, Mario Carneiro
 
 ! This file was ported from Lean 3 source module topology.algebra.monoid
-! leanprover-community/mathlib commit 6efec6bb9fcaed3cf1baaddb2eaadd8a2a06679c
+! leanprover-community/mathlib commit 1ac8d4304efba9d03fa720d06516fac845aa5353
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -876,7 +876,7 @@ protected def mulRight (x : X) : C(X, X) :=
 #align continuous_map.mul_right ContinuousMap.mulRight
 #align continuous_map.add_right ContinuousMap.addRight
 
-@[to_additive, simp]
+@[to_additive (attr := simp)]
 theorem coe_mulRight (x : X) : ⇑(ContinuousMap.mulRight x) = fun y => y * x :=
   rfl
 #align continuous_map.coe_mul_right ContinuousMap.coe_mulRight
@@ -889,7 +889,7 @@ protected def mulLeft (x : X) : C(X, X) :=
 #align continuous_map.mul_left ContinuousMap.mulLeft
 #align continuous_map.add_left ContinuousMap.addLeft
 
-@[to_additive, simp]
+@[to_additive (attr := simp)]
 theorem coe_mulLeft (x : X) : ⇑(ContinuousMap.mulLeft x) = fun y => x * y :=
   rfl
 #align continuous_map.coe_mul_left ContinuousMap.coe_mulLeft
chore: fix grammar 3/3 (#5003)

Part 3 of #5001

Diff
@@ -341,7 +341,7 @@ homomorphisms that has a `MonoidHomClass` instance) to `M₁ → M₂`. -/
 @[to_additive (attr := simps (config := .asFn))
   "Construct a bundled additive monoid homomorphism `M₁ →+ M₂` from a function `f`
 and a proof that it belongs to the closure of the range of the coercion from `M₁ →+ M₂` (or another
-type of bundled homomorphisms that has a `add_monoid_hom_class` instance) to `M₁ → M₂`."]
+type of bundled homomorphisms that has an `AddMonoidHomClass` instance) to `M₁ → M₂`."]
 def monoidHomOfMemClosureRangeCoe (f : M₁ → M₂)
     (hf : f ∈ closure (range fun (f : F) (x : M₁) => f x)) : M₁ →* M₂
     where
@@ -503,7 +503,7 @@ theorem exists_nhds_one_split4 {u : Set M} (hu : u ∈ 𝓝 (1 : M)) :
 
 /-- Given a neighborhood `U` of `1` there is an open neighborhood `V` of `1`
 such that `VV ⊆ U`. -/
-@[to_additive "Given a open neighborhood `U` of `0` there is a open neighborhood `V` of `0`
+@[to_additive "Given an open neighborhood `U` of `0` there is an open neighborhood `V` of `0`
   such that `V + V ⊆ U`."]
 theorem exists_open_nhds_one_mul_subset {U : Set M} (hU : U ∈ 𝓝 (1 : M)) :
     ∃ V : Set M, IsOpen V ∧ (1 : M) ∈ V ∧ V * V ⊆ U := by
style: allow _ for an argument in notation3 & replace _foo with _ in notation3 (#4652)
Diff
@@ -818,7 +818,7 @@ theorem continuous_finprod {f : ι → X → M} (hc : ∀ i, Continuous (f i))
 @[to_additive]
 theorem continuous_finprod_cond {f : ι → X → M} {p : ι → Prop} (hc : ∀ i, p i → Continuous (f i))
     (hf : LocallyFinite fun i => mulSupport (f i)) :
-    Continuous fun x => ∏ᶠ (i) (_h : p i), f i x := by
+    Continuous fun x => ∏ᶠ (i) (_ : p i), f i x := by
   simp only [← finprod_subtype_eq_finprod_cond]
   exact continuous_finprod (fun i => hc i i.2) (hf.comp_injective Subtype.coe_injective)
 #align continuous_finprod_cond continuous_finprod_cond
refactor: use the typeclass SProd to implement overloaded notation · ×ˢ · (#4200)

Currently, the following notations are changed from · ×ˢ · because Lean 4 can't deal with ambiguous notations. | Definition | Notation | | :

Co-authored-by: Jeremy Tan Jie Rui <reddeloostw@gmail.com> Co-authored-by: Kyle Miller <kmill31415@gmail.com> Co-authored-by: Chris Hughes <chrishughes24@gmail.com>

Diff
@@ -266,7 +266,7 @@ open Function
 
 @[to_additive]
 theorem ContinuousMul.of_nhds_one {M : Type u} [Monoid M] [TopologicalSpace M]
-    (hmul : Tendsto (uncurry ((· * ·) : M → M → M)) (𝓝 1 ×ᶠ 𝓝 1) <| 𝓝 1)
+    (hmul : Tendsto (uncurry ((· * ·) : M → M → M)) (𝓝 1 ×ˢ 𝓝 1) <| 𝓝 1)
     (hleft : ∀ x₀ : M, 𝓝 x₀ = map (fun x => x₀ * x) (𝓝 1))
     (hright : ∀ x₀ : M, 𝓝 x₀ = map (fun x => x * x₀) (𝓝 1)) : ContinuousMul M :=
   ⟨by
@@ -280,12 +280,12 @@ theorem ContinuousMul.of_nhds_one {M : Type u} [Monoid M] [TopologicalSpace M]
       ext x
       simp [mul_assoc]
     calc
-      map (uncurry (· * ·)) (𝓝 (x₀, y₀)) = map (uncurry (· * ·)) (𝓝 x₀ ×ᶠ 𝓝 y₀) :=
+      map (uncurry (· * ·)) (𝓝 (x₀, y₀)) = map (uncurry (· * ·)) (𝓝 x₀ ×ˢ 𝓝 y₀) :=
         by rw [nhds_prod_eq]
-      _ = map (fun p : M × M => x₀ * p.1 * (p.2 * y₀)) (𝓝 1 ×ᶠ 𝓝 1) :=
+      _ = map (fun p : M × M => x₀ * p.1 * (p.2 * y₀)) (𝓝 1 ×ˢ 𝓝 1) :=
         by simp_rw [uncurry, hleft x₀, hright y₀, prod_map_map_eq, Filter.map_map, Function.comp]
         -- Porting note: `rw` was able to prove this
-      _ = map ((fun x => x₀ * x) ∘ fun x => x * y₀) (map (uncurry (· * ·)) (𝓝 1 ×ᶠ 𝓝 1)) :=
+      _ = map ((fun x => x₀ * x) ∘ fun x => x * y₀) (map (uncurry (· * ·)) (𝓝 1 ×ˢ 𝓝 1)) :=
         by rw [key, ← Filter.map_map]
       _ ≤ map ((fun x : M => x₀ * x) ∘ fun x => x * y₀) (𝓝 1) := map_mono hmul
       _ = 𝓝 (x₀ * y₀) := by
@@ -295,7 +295,7 @@ theorem ContinuousMul.of_nhds_one {M : Type u} [Monoid M] [TopologicalSpace M]
 
 @[to_additive]
 theorem continuousMul_of_comm_of_nhds_one (M : Type u) [CommMonoid M] [TopologicalSpace M]
-    (hmul : Tendsto (uncurry ((· * ·) : M → M → M)) (𝓝 1 ×ᶠ 𝓝 1) (𝓝 1))
+    (hmul : Tendsto (uncurry ((· * ·) : M → M → M)) (𝓝 1 ×ˢ 𝓝 1) (𝓝 1))
     (hleft : ∀ x₀ : M, 𝓝 x₀ = map (fun x => x₀ * x) (𝓝 1)) : ContinuousMul M := by
   apply ContinuousMul.of_nhds_one hmul hleft
   intro x₀
chore: Rename to sSup/iSup (#3938)

As discussed on Zulip

Renames

  • supₛsSup
  • infₛsInf
  • supᵢiSup
  • infᵢiInf
  • bsupₛbsSup
  • binfₛbsInf
  • bsupᵢbiSup
  • binfᵢbiInf
  • csupₛcsSup
  • cinfₛcsInf
  • csupᵢciSup
  • cinfᵢciInf
  • unionₛsUnion
  • interₛsInter
  • unionᵢiUnion
  • interᵢiInter
  • bunionₛbsUnion
  • binterₛbsInter
  • bunionᵢbiUnion
  • binterᵢbiInter

Co-authored-by: Parcly Taxel <reddeloostw@gmail.com>

Diff
@@ -320,8 +320,8 @@ theorem isClosed_setOf_map_mul [Mul M₁] [Mul M₂] [ContinuousMul M₂] :
     IsClosed { f : M₁ → M₂ | ∀ x y, f (x * y) = f x * f y } := by
   simp only [setOf_forall]
   exact
-    isClosed_interᵢ fun x =>
-      isClosed_interᵢ fun y =>
+    isClosed_iInter fun x =>
+      isClosed_iInter fun y =>
         isClosed_eq (continuous_apply _)
           -- Porting note: proof was:
           -- `((continuous_apply _).mul (continuous_apply _))`
@@ -837,28 +837,28 @@ section LatticeOps
 variable {ι' : Sort _} [Mul M]
 
 @[to_additive]
-theorem continuousMul_infₛ {ts : Set (TopologicalSpace M)}
-    (h : ∀ t ∈ ts, @ContinuousMul M t _) : @ContinuousMul M (infₛ ts) _ :=
-  letI := infₛ ts
+theorem continuousMul_sInf {ts : Set (TopologicalSpace M)}
+    (h : ∀ t ∈ ts, @ContinuousMul M t _) : @ContinuousMul M (sInf ts) _ :=
+  letI := sInf ts
   { continuous_mul :=
-      continuous_infₛ_rng.2 fun t ht =>
-        continuous_infₛ_dom₂ ht ht (@ContinuousMul.continuous_mul M t _ (h t ht)) }
-#align has_continuous_mul_Inf continuousMul_infₛ
-#align has_continuous_add_Inf continuousAdd_infₛ
+      continuous_sInf_rng.2 fun t ht =>
+        continuous_sInf_dom₂ ht ht (@ContinuousMul.continuous_mul M t _ (h t ht)) }
+#align has_continuous_mul_Inf continuousMul_sInf
+#align has_continuous_add_Inf continuousAdd_sInf
 
 @[to_additive]
-theorem continuousMul_infᵢ {ts : ι' → TopologicalSpace M}
+theorem continuousMul_iInf {ts : ι' → TopologicalSpace M}
     (h' : ∀ i, @ContinuousMul M (ts i) _) : @ContinuousMul M (⨅ i, ts i) _ := by
-  rw [← infₛ_range]
-  exact continuousMul_infₛ (Set.forall_range_iff.mpr h')
-#align has_continuous_mul_infi continuousMul_infᵢ
-#align has_continuous_add_infi continuousAdd_infᵢ
+  rw [← sInf_range]
+  exact continuousMul_sInf (Set.forall_range_iff.mpr h')
+#align has_continuous_mul_infi continuousMul_iInf
+#align has_continuous_add_infi continuousAdd_iInf
 
 @[to_additive]
 theorem continuousMul_inf {t₁ t₂ : TopologicalSpace M} (h₁ : @ContinuousMul M t₁ _)
     (h₂ : @ContinuousMul M t₂ _) : @ContinuousMul M (t₁ ⊓ t₂) _ := by
-  rw [inf_eq_infᵢ]
-  refine' continuousMul_infᵢ fun b => _
+  rw [inf_eq_iInf]
+  refine' continuousMul_iInf fun b => _
   cases b <;> assumption
 #align has_continuous_mul_inf continuousMul_inf
 #align has_continuous_add_inf continuousAdd_inf
chore: bye-bye, solo bys! (#3825)

This PR puts, with one exception, every single remaining by that lies all by itself on its own line to the previous line, thus matching the current behaviour of start-port.sh. The exception is when the by begins the second or later argument to a tuple or anonymous constructor; see https://github.com/leanprover-community/mathlib4/pull/3825#discussion_r1186702599.

Essentially this is s/\n *by$/ by/g, but with manual editing to satisfy the linter's max-100-char-line requirement. The Python style linter is also modified to catch these "isolated bys".

Diff
@@ -272,14 +272,11 @@ theorem ContinuousMul.of_nhds_one {M : Type u} [Monoid M] [TopologicalSpace M]
   ⟨by
     rw [continuous_iff_continuousAt]
     rintro ⟨x₀, y₀⟩
-    have key :
-      (fun p : M × M => x₀ * p.1 * (p.2 * y₀)) =
-        ((fun x => x₀ * x) ∘ fun x => x * y₀) ∘ uncurry (· * ·) :=
-      by
+    have key : (fun p : M × M => x₀ * p.1 * (p.2 * y₀)) =
+        ((fun x => x₀ * x) ∘ fun x => x * y₀) ∘ uncurry (· * ·) := by
       ext p
       simp [uncurry, mul_assoc]
-    have key₂ : ((fun x => x₀ * x) ∘ fun x => y₀ * x) = fun x => x₀ * y₀ * x :=
-      by
+    have key₂ : ((fun x => x₀ * x) ∘ fun x => y₀ * x) = fun x => x₀ * y₀ * x := by
       ext x
       simp [mul_assoc]
     calc
@@ -291,8 +288,8 @@ theorem ContinuousMul.of_nhds_one {M : Type u} [Monoid M] [TopologicalSpace M]
       _ = map ((fun x => x₀ * x) ∘ fun x => x * y₀) (map (uncurry (· * ·)) (𝓝 1 ×ᶠ 𝓝 1)) :=
         by rw [key, ← Filter.map_map]
       _ ≤ map ((fun x : M => x₀ * x) ∘ fun x => x * y₀) (𝓝 1) := map_mono hmul
-      _ = 𝓝 (x₀ * y₀) := by rw [← Filter.map_map, ← hright, hleft y₀, Filter.map_map, key₂, ← hleft]
-      ⟩
+      _ = 𝓝 (x₀ * y₀) := by
+        rw [← Filter.map_map, ← hright, hleft y₀, Filter.map_map, key₂, ← hleft]⟩
 #align has_continuous_mul.of_nhds_one ContinuousMul.of_nhds_one
 #align has_continuous_add.of_nhds_zero ContinuousAdd.of_nhds_zero
 
@@ -548,8 +545,8 @@ theorem continuous_list_prod {f : ι → X → M} (l : List ι) (h : ∀ i ∈ l
 
 @[to_additive]
 theorem continuousOn_list_prod {f : ι → X → M} (l : List ι) {t : Set X}
-    (h : ∀ i ∈ l, ContinuousOn (f i) t) : ContinuousOn (fun a => (l.map fun i => f i a).prod) t :=
-  by
+    (h : ∀ i ∈ l, ContinuousOn (f i) t) :
+    ContinuousOn (fun a => (l.map fun i => f i a).prod) t := by
   intro x hx
   rw [continuousWithinAt_iff_continuousAt_restrict _ hx]
   refine' tendsto_list_prod _ fun i hi => _
@@ -820,8 +817,8 @@ theorem continuous_finprod {f : ι → X → M} (hc : ∀ i, Continuous (f i))
 
 @[to_additive]
 theorem continuous_finprod_cond {f : ι → X → M} {p : ι → Prop} (hc : ∀ i, p i → Continuous (f i))
-    (hf : LocallyFinite fun i => mulSupport (f i)) : Continuous fun x => ∏ᶠ (i) (_h : p i), f i x :=
-  by
+    (hf : LocallyFinite fun i => mulSupport (f i)) :
+    Continuous fun x => ∏ᶠ (i) (_h : p i), f i x := by
   simp only [← finprod_subtype_eq_finprod_cond]
   exact continuous_finprod (fun i => hc i i.2) (hf.comp_injective Subtype.coe_injective)
 #align continuous_finprod_cond continuous_finprod_cond
chore: fix some names in comments (#3276)

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

Diff
@@ -702,8 +702,8 @@ because the predicate `ContinuousInv` has not yet been defined. -/
 @[to_additive "If addition on an additive monoid is continuous, then addition on the additive units
 of the monoid, with respect to the induced topology, is continuous.
 
-Negation is also continuous, but we register this in a later file, `topology.algebra.group`, because
-the predicate `has_continuous_neg` has not yet been defined."]
+Negation is also continuous, but we register this in a later file, `Topology.Algebra.Group`, because
+the predicate `ContinuousNeg` has not yet been defined."]
 instance : ContinuousMul αˣ :=
   inducing_embedProduct.continuousMul (embedProduct α)
 
feat: port Topology.Instances.TrivSqZeroExt (#3275)
Diff
@@ -231,7 +231,8 @@ theorem ContinuousWithinAt.mul {f g : X → M} {s : Set X} {x : X} (hf : Continu
 #align continuous_within_at.add ContinuousWithinAt.add
 
 @[to_additive]
-instance [TopologicalSpace N] [Mul N] [ContinuousMul N] : ContinuousMul (M × N) :=
+instance Prod.continuousMul [TopologicalSpace N] [Mul N] [ContinuousMul N] :
+    ContinuousMul (M × N) :=
   ⟨(continuous_fst.fst'.mul continuous_fst.snd').prod_mk
       (continuous_snd.fst'.mul continuous_snd.snd')⟩
 
feat(topology/continuous_map): forward-port #18465 (#2369)

Forward-port of changes to already-ported files topology.algebra.monoid and topology.continuous_map.basic made in mathlib3 PR [#18465](https://github.com/leanprover-community/mathlib/pull/18465)

Co-authored-by: Eric Wieser <wieser.eric@gmail.com>

Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johannes Hölzl, Mario Carneiro
 
 ! This file was ported from Lean 3 source module topology.algebra.monoid
-! leanprover-community/mathlib commit dc6c365e751e34d100e80fe6e314c3c3e0fd2988
+! leanprover-community/mathlib commit 6efec6bb9fcaed3cf1baaddb2eaadd8a2a06679c
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -12,6 +12,7 @@ import Mathlib.Algebra.BigOperators.Finprod
 import Mathlib.Order.Filter.Pointwise
 import Mathlib.Topology.Algebra.MulAction
 import Mathlib.Algebra.BigOperators.Pi
+import Mathlib.Topology.ContinuousFunction.Basic
 
 /-!
 # Theory of topological monoids
@@ -865,3 +866,35 @@ theorem continuousMul_inf {t₁ t₂ : TopologicalSpace M} (h₁ : @ContinuousMu
 #align has_continuous_add_inf continuousAdd_inf
 
 end LatticeOps
+
+namespace ContinuousMap
+
+variable [Mul X] [ContinuousMul X]
+
+/-- The continuous map `fun y => y * x` -/
+@[to_additive "The continuous map `fun y => y + x"]
+protected def mulRight (x : X) : C(X, X) :=
+  mk _ (continuous_mul_right x)
+#align continuous_map.mul_right ContinuousMap.mulRight
+#align continuous_map.add_right ContinuousMap.addRight
+
+@[to_additive, simp]
+theorem coe_mulRight (x : X) : ⇑(ContinuousMap.mulRight x) = fun y => y * x :=
+  rfl
+#align continuous_map.coe_mul_right ContinuousMap.coe_mulRight
+#align continuous_map.coe_add_right ContinuousMap.coe_addRight
+
+/-- The continuous map `fun y => x * y` -/
+@[to_additive "The continuous map `fun y => x + y"]
+protected def mulLeft (x : X) : C(X, X) :=
+  mk _ (continuous_mul_left x)
+#align continuous_map.mul_left ContinuousMap.mulLeft
+#align continuous_map.add_left ContinuousMap.addLeft
+
+@[to_additive, simp]
+theorem coe_mulLeft (x : X) : ⇑(ContinuousMap.mulLeft x) = fun y => x * y :=
+  rfl
+#align continuous_map.coe_mul_left ContinuousMap.coe_mulLeft
+#align continuous_map.coe_add_left ContinuousMap.coe_addLeft
+
+end ContinuousMap
Fix: Move more attributes to the attr argument of to_additive (#2558)
Diff
@@ -339,10 +339,10 @@ variable [MulOneClass M₁] [MulOneClass M₂] [ContinuousMul M₂]
 /-- Construct a bundled monoid homomorphism `M₁ →* M₂` from a function `f` and a proof that it
 belongs to the closure of the range of the coercion from `M₁ →* M₂` (or another type of bundled
 homomorphisms that has a `MonoidHomClass` instance) to `M₁ → M₂`. -/
-@[to_additive "Construct a bundled additive monoid homomorphism `M₁ →+ M₂` from a function `f`
+@[to_additive (attr := simps (config := .asFn))
+  "Construct a bundled additive monoid homomorphism `M₁ →+ M₂` from a function `f`
 and a proof that it belongs to the closure of the range of the coercion from `M₁ →+ M₂` (or another
-type of bundled homomorphisms that has a `add_monoid_hom_class` instance) to `M₁ → M₂`.",
-  simps (config := { fullyApplied := false })]
+type of bundled homomorphisms that has a `add_monoid_hom_class` instance) to `M₁ → M₂`."]
 def monoidHomOfMemClosureRangeCoe (f : M₁ → M₂)
     (hf : f ∈ closure (range fun (f : F) (x : M₁) => f x)) : M₁ →* M₂
     where
@@ -353,9 +353,9 @@ def monoidHomOfMemClosureRangeCoe (f : M₁ → M₂)
 #align add_monoid_hom_of_mem_closure_range_coe addMonoidHomOfMemClosureRangeCoe
 
 /-- Construct a bundled monoid homomorphism from a pointwise limit of monoid homomorphisms. -/
-@[to_additive "Construct a bundled additive monoid homomorphism from a pointwise limit of additive
-monoid homomorphisms",
-  simps! (config := { fullyApplied := false })]
+@[to_additive (attr := simps! (config := .asFn))
+  "Construct a bundled additive monoid homomorphism from a pointwise limit of additive
+monoid homomorphisms"]
 def monoidHomOfTendsto (f : M₁ → M₂) (g : α → F) [l.NeBot]
     (h : Tendsto (fun a x => g a x) l (𝓝 f)) : M₁ →* M₂ :=
   monoidHomOfMemClosureRangeCoe f <|
feat: port Topology.Algebra.Monoid (#2245)

Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Johan Commelin <johan@commelin.net>

Dependencies 9 + 342

343 files ported (97.4%)
150424 lines ported (96.7%)
Show graph

The unported dependencies are