topology.algebra.mul_actionMathlib.Topology.Algebra.MulAction

This file has been ported!

Changes since the initial port

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

Changes in mathlib3

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(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)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -217,7 +217,7 @@ theorem continuousSMul_sInf {ts : Set (TopologicalSpace X)}
 @[to_additive]
 theorem continuousSMul_iInf {ts' : ι → TopologicalSpace X}
     (h : ∀ i, @ContinuousSMul M X _ _ (ts' i)) : @ContinuousSMul M X _ _ (⨅ i, ts' i) :=
-  continuousSMul_sInf <| Set.forall_range_iff.mpr h
+  continuousSMul_sInf <| Set.forall_mem_range.mpr h
 #align has_continuous_smul_infi continuousSMul_iInf
 #align has_continuous_vadd_infi continuousVAdd_iInf
 -/
Diff
@@ -3,10 +3,10 @@ Copyright (c) 2021 Yury Kudryashov. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Yury Kudryashov
 -/
-import Mathbin.Algebra.AddTorsor
-import Mathbin.Topology.Algebra.Constructions
-import Mathbin.GroupTheory.GroupAction.Prod
-import Mathbin.Topology.Algebra.ConstMulAction
+import Algebra.AddTorsor
+import Topology.Algebra.Constructions
+import GroupTheory.GroupAction.Prod
+import Topology.Algebra.ConstMulAction
 
 #align_import topology.algebra.mul_action from "leanprover-community/mathlib"@"ac34df03f74e6f797efd6991df2e3b7f7d8d33e0"
 
Diff
@@ -2,17 +2,14 @@
 Copyright (c) 2021 Yury Kudryashov. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Yury Kudryashov
-
-! This file was ported from Lean 3 source module topology.algebra.mul_action
-! leanprover-community/mathlib commit ac34df03f74e6f797efd6991df2e3b7f7d8d33e0
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.Algebra.AddTorsor
 import Mathbin.Topology.Algebra.Constructions
 import Mathbin.GroupTheory.GroupAction.Prod
 import Mathbin.Topology.Algebra.ConstMulAction
 
+#align_import topology.algebra.mul_action from "leanprover-community/mathlib"@"ac34df03f74e6f797efd6991df2e3b7f7d8d33e0"
+
 /-!
 # Continuous monoid action
 
Diff
@@ -88,6 +88,7 @@ instance (priority := 100) ContinuousSMul.continuousConstSMul : ContinuousConstS
 #align has_continuous_vadd.has_continuous_const_vadd ContinuousVAdd.continuousConstVAdd
 -/
 
+#print Filter.Tendsto.smul /-
 @[to_additive]
 theorem Filter.Tendsto.smul {f : α → M} {g : α → X} {l : Filter α} {c : M} {a : X}
     (hf : Tendsto f l (𝓝 c)) (hg : Tendsto g l (𝓝 a)) :
@@ -95,41 +96,52 @@ theorem Filter.Tendsto.smul {f : α → M} {g : α → X} {l : Filter α} {c : M
   (continuous_smul.Tendsto _).comp (hf.prod_mk_nhds hg)
 #align filter.tendsto.smul Filter.Tendsto.smul
 #align filter.tendsto.vadd Filter.Tendsto.vadd
+-/
 
+#print Filter.Tendsto.smul_const /-
 @[to_additive]
 theorem Filter.Tendsto.smul_const {f : α → M} {l : Filter α} {c : M} (hf : Tendsto f l (𝓝 c))
     (a : X) : Tendsto (fun x => f x • a) l (𝓝 (c • a)) :=
   hf.smul tendsto_const_nhds
 #align filter.tendsto.smul_const Filter.Tendsto.smul_const
 #align filter.tendsto.vadd_const Filter.Tendsto.vadd_const
+-/
 
 variable {f : Y → M} {g : Y → X} {b : Y} {s : Set Y}
 
+#print ContinuousWithinAt.smul /-
 @[to_additive]
 theorem ContinuousWithinAt.smul (hf : ContinuousWithinAt f s b) (hg : ContinuousWithinAt g s b) :
     ContinuousWithinAt (fun x => f x • g x) s b :=
   hf.smul hg
 #align continuous_within_at.smul ContinuousWithinAt.smul
 #align continuous_within_at.vadd ContinuousWithinAt.vadd
+-/
 
+#print ContinuousAt.smul /-
 @[to_additive]
 theorem ContinuousAt.smul (hf : ContinuousAt f b) (hg : ContinuousAt g b) :
     ContinuousAt (fun x => f x • g x) b :=
   hf.smul hg
 #align continuous_at.smul ContinuousAt.smul
 #align continuous_at.vadd ContinuousAt.vadd
+-/
 
+#print ContinuousOn.smul /-
 @[to_additive]
 theorem ContinuousOn.smul (hf : ContinuousOn f s) (hg : ContinuousOn g s) :
     ContinuousOn (fun x => f x • g x) s := fun x hx => (hf x hx).smul (hg x hx)
 #align continuous_on.smul ContinuousOn.smul
 #align continuous_on.vadd ContinuousOn.vadd
+-/
 
+#print Continuous.smul /-
 @[continuity, to_additive]
 theorem Continuous.smul (hf : Continuous f) (hg : Continuous g) : Continuous fun x => f x • g x :=
   continuous_smul.comp (hf.prod_mk hg)
 #align continuous.smul Continuous.smul
 #align continuous.vadd Continuous.vadd
+-/
 
 #print ContinuousSMul.op /-
 /-- If a scalar action is central, then its right action is continuous when its left action is. -/
@@ -159,6 +171,7 @@ section Monoid
 
 variable [Monoid M] [MulAction M X] [ContinuousSMul M X]
 
+#print Units.continuousSMul /-
 @[to_additive]
 instance Units.continuousSMul : ContinuousSMul Mˣ X
     where continuous_smul :=
@@ -166,6 +179,7 @@ instance Units.continuousSMul : ContinuousSMul Mˣ X
       continuous_smul.comp ((Units.continuous_val.comp continuous_fst).prod_mk continuous_snd)
 #align units.has_continuous_smul Units.continuousSMul
 #align add_units.has_continuous_vadd AddUnits.continuousVAdd
+-/
 
 end Monoid
 
@@ -188,6 +202,7 @@ section LatticeOps
 
 variable {ι : Sort _} {M X : Type _} [TopologicalSpace M] [SMul M X]
 
+#print continuousSMul_sInf /-
 @[to_additive]
 theorem continuousSMul_sInf {ts : Set (TopologicalSpace X)}
     (h : ∀ t ∈ ts, @ContinuousSMul M X _ _ t) : @ContinuousSMul M X _ _ (sInf ts) :=
@@ -199,20 +214,25 @@ theorem continuousSMul_sInf {ts : Set (TopologicalSpace X)}
           continuous_sInf_dom₂ (Eq.refl _) ht (@ContinuousSMul.continuous_smul _ _ _ _ t (h t ht)) }
 #align has_continuous_smul_Inf continuousSMul_sInf
 #align has_continuous_vadd_Inf continuousVAdd_sInf
+-/
 
+#print continuousSMul_iInf /-
 @[to_additive]
 theorem continuousSMul_iInf {ts' : ι → TopologicalSpace X}
     (h : ∀ i, @ContinuousSMul M X _ _ (ts' i)) : @ContinuousSMul M X _ _ (⨅ i, ts' i) :=
   continuousSMul_sInf <| Set.forall_range_iff.mpr h
 #align has_continuous_smul_infi continuousSMul_iInf
 #align has_continuous_vadd_infi continuousVAdd_iInf
+-/
 
+#print continuousSMul_inf /-
 @[to_additive]
 theorem continuousSMul_inf {t₁ t₂ : TopologicalSpace X} [@ContinuousSMul M X _ _ t₁]
     [@ContinuousSMul M X _ _ t₂] : @ContinuousSMul M X _ _ (t₁ ⊓ t₂) := by rw [inf_eq_iInf];
   refine' continuousSMul_iInf fun b => _; cases b <;> assumption
 #align has_continuous_smul_inf continuousSMul_inf
 #align has_continuous_vadd_inf continuousVAdd_inf
+-/
 
 end LatticeOps
 
@@ -222,8 +242,7 @@ variable (G : Type _) (P : Type _) [AddGroup G] [AddTorsor G P] [TopologicalSpac
 
 variable [PreconnectedSpace G] [TopologicalSpace P] [ContinuousVAdd G P]
 
-include G
-
+#print AddTorsor.connectedSpace /-
 /-- An `add_torsor` for a connected space is a connected space. This is not an instance because
 it loops for a group as a torsor over itself. -/
 protected theorem AddTorsor.connectedSpace : ConnectedSpace P :=
@@ -235,6 +254,7 @@ protected theorem AddTorsor.connectedSpace : ConnectedSpace P :=
       rw [Set.image_univ, Equiv.range_eq_univ]
     to_nonempty := inferInstance }
 #align add_torsor.connected_space AddTorsor.connectedSpace
+-/
 
 end AddTorsor
 
Diff
@@ -229,7 +229,8 @@ it loops for a group as a torsor over itself. -/
 protected theorem AddTorsor.connectedSpace : ConnectedSpace P :=
   { isPreconnected_univ :=
       by
-      convert is_preconnected_univ.image (Equiv.vaddConst (Classical.arbitrary P) : G → P)
+      convert
+        is_preconnected_univ.image (Equiv.vaddConst (Classical.arbitrary P) : G → P)
           (continuous_id.vadd continuous_const).ContinuousOn
       rw [Set.image_univ, Equiv.range_eq_univ]
     to_nonempty := inferInstance }
Diff
@@ -51,7 +51,7 @@ open Filter
 is continuous in both arguments. We use the same class for all kinds of multiplicative actions,
 including (semi)modules and algebras. -/
 class ContinuousSMul (M X : Type _) [SMul M X] [TopologicalSpace M] [TopologicalSpace X] :
-  Prop where
+    Prop where
   continuous_smul : Continuous fun p : M × X => p.1 • p.2
 #align has_continuous_smul ContinuousSMul
 -/
@@ -63,7 +63,7 @@ export ContinuousSMul (continuous_smul)
 is continuous in both arguments. We use the same class for all kinds of additive actions,
 including (semi)modules and algebras. -/
 class ContinuousVAdd (M X : Type _) [VAdd M X] [TopologicalSpace M] [TopologicalSpace X] :
-  Prop where
+    Prop where
   continuous_vadd : Continuous fun p : M × X => p.1 +ᵥ p.2
 #align has_continuous_vadd ContinuousVAdd
 -/
Diff
@@ -42,7 +42,7 @@ or `filter.tendsto.smul` that provide dot-syntax access to `continuous_smul`.
 -/
 
 
-open Topology Pointwise
+open scoped Topology Pointwise
 
 open Filter
 
Diff
@@ -88,12 +88,6 @@ instance (priority := 100) ContinuousSMul.continuousConstSMul : ContinuousConstS
 #align has_continuous_vadd.has_continuous_const_vadd ContinuousVAdd.continuousConstVAdd
 -/
 
-/- warning: filter.tendsto.smul -> Filter.Tendsto.smul is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} M] [_inst_2 : TopologicalSpace.{u2} X] [_inst_4 : SMul.{u1, u2} M X] [_inst_5 : ContinuousSMul.{u1, u2} M X _inst_4 _inst_1 _inst_2] {f : α -> M} {g : α -> X} {l : Filter.{u3} α} {c : M} {a : X}, (Filter.Tendsto.{u3, u1} α M f l (nhds.{u1} M _inst_1 c)) -> (Filter.Tendsto.{u3, u2} α X g l (nhds.{u2} X _inst_2 a)) -> (Filter.Tendsto.{u3, u2} α X (fun (x : α) => SMul.smul.{u1, u2} M X _inst_4 (f x) (g x)) l (nhds.{u2} X _inst_2 (SMul.smul.{u1, u2} M X _inst_4 c a)))
-but is expected to have type
-  forall {M : Type.{u2}} {X : Type.{u1}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} M] [_inst_2 : TopologicalSpace.{u1} X] [_inst_4 : SMul.{u2, u1} M X] [_inst_5 : ContinuousSMul.{u2, u1} M X _inst_4 _inst_1 _inst_2] {f : α -> M} {g : α -> X} {l : Filter.{u3} α} {c : M} {a : X}, (Filter.Tendsto.{u3, u2} α M f l (nhds.{u2} M _inst_1 c)) -> (Filter.Tendsto.{u3, u1} α X g l (nhds.{u1} X _inst_2 a)) -> (Filter.Tendsto.{u3, u1} α X (fun (x : α) => HSMul.hSMul.{u2, u1, u1} M X X (instHSMul.{u2, u1} M X _inst_4) (f x) (g x)) l (nhds.{u1} X _inst_2 (HSMul.hSMul.{u2, u1, u1} M X X (instHSMul.{u2, u1} M X _inst_4) c a)))
-Case conversion may be inaccurate. Consider using '#align filter.tendsto.smul Filter.Tendsto.smulₓ'. -/
 @[to_additive]
 theorem Filter.Tendsto.smul {f : α → M} {g : α → X} {l : Filter α} {c : M} {a : X}
     (hf : Tendsto f l (𝓝 c)) (hg : Tendsto g l (𝓝 a)) :
@@ -102,12 +96,6 @@ theorem Filter.Tendsto.smul {f : α → M} {g : α → X} {l : Filter α} {c : M
 #align filter.tendsto.smul Filter.Tendsto.smul
 #align filter.tendsto.vadd Filter.Tendsto.vadd
 
-/- warning: filter.tendsto.smul_const -> Filter.Tendsto.smul_const is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} M] [_inst_2 : TopologicalSpace.{u2} X] [_inst_4 : SMul.{u1, u2} M X] [_inst_5 : ContinuousSMul.{u1, u2} M X _inst_4 _inst_1 _inst_2] {f : α -> M} {l : Filter.{u3} α} {c : M}, (Filter.Tendsto.{u3, u1} α M f l (nhds.{u1} M _inst_1 c)) -> (forall (a : X), Filter.Tendsto.{u3, u2} α X (fun (x : α) => SMul.smul.{u1, u2} M X _inst_4 (f x) a) l (nhds.{u2} X _inst_2 (SMul.smul.{u1, u2} M X _inst_4 c a)))
-but is expected to have type
-  forall {M : Type.{u2}} {X : Type.{u1}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} M] [_inst_2 : TopologicalSpace.{u1} X] [_inst_4 : SMul.{u2, u1} M X] [_inst_5 : ContinuousSMul.{u2, u1} M X _inst_4 _inst_1 _inst_2] {f : α -> M} {l : Filter.{u3} α} {c : M}, (Filter.Tendsto.{u3, u2} α M f l (nhds.{u2} M _inst_1 c)) -> (forall (a : X), Filter.Tendsto.{u3, u1} α X (fun (x : α) => HSMul.hSMul.{u2, u1, u1} M X X (instHSMul.{u2, u1} M X _inst_4) (f x) a) l (nhds.{u1} X _inst_2 (HSMul.hSMul.{u2, u1, u1} M X X (instHSMul.{u2, u1} M X _inst_4) c a)))
-Case conversion may be inaccurate. Consider using '#align filter.tendsto.smul_const Filter.Tendsto.smul_constₓ'. -/
 @[to_additive]
 theorem Filter.Tendsto.smul_const {f : α → M} {l : Filter α} {c : M} (hf : Tendsto f l (𝓝 c))
     (a : X) : Tendsto (fun x => f x • a) l (𝓝 (c • a)) :=
@@ -117,12 +105,6 @@ theorem Filter.Tendsto.smul_const {f : α → M} {l : Filter α} {c : M} (hf : T
 
 variable {f : Y → M} {g : Y → X} {b : Y} {s : Set Y}
 
-/- warning: continuous_within_at.smul -> ContinuousWithinAt.smul is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {X : Type.{u2}} {Y : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} M] [_inst_2 : TopologicalSpace.{u2} X] [_inst_3 : TopologicalSpace.{u3} Y] [_inst_4 : SMul.{u1, u2} M X] [_inst_5 : ContinuousSMul.{u1, u2} M X _inst_4 _inst_1 _inst_2] {f : Y -> M} {g : Y -> X} {b : Y} {s : Set.{u3} Y}, (ContinuousWithinAt.{u3, u1} Y M _inst_3 _inst_1 f s b) -> (ContinuousWithinAt.{u3, u2} Y X _inst_3 _inst_2 g s b) -> (ContinuousWithinAt.{u3, u2} Y X _inst_3 _inst_2 (fun (x : Y) => SMul.smul.{u1, u2} M X _inst_4 (f x) (g x)) s b)
-but is expected to have type
-  forall {M : Type.{u2}} {X : Type.{u1}} {Y : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} M] [_inst_2 : TopologicalSpace.{u1} X] [_inst_3 : TopologicalSpace.{u3} Y] [_inst_4 : SMul.{u2, u1} M X] [_inst_5 : ContinuousSMul.{u2, u1} M X _inst_4 _inst_1 _inst_2] {f : Y -> M} {g : Y -> X} {b : Y} {s : Set.{u3} Y}, (ContinuousWithinAt.{u3, u2} Y M _inst_3 _inst_1 f s b) -> (ContinuousWithinAt.{u3, u1} Y X _inst_3 _inst_2 g s b) -> (ContinuousWithinAt.{u3, u1} Y X _inst_3 _inst_2 (fun (x : Y) => HSMul.hSMul.{u2, u1, u1} M X X (instHSMul.{u2, u1} M X _inst_4) (f x) (g x)) s b)
-Case conversion may be inaccurate. Consider using '#align continuous_within_at.smul ContinuousWithinAt.smulₓ'. -/
 @[to_additive]
 theorem ContinuousWithinAt.smul (hf : ContinuousWithinAt f s b) (hg : ContinuousWithinAt g s b) :
     ContinuousWithinAt (fun x => f x • g x) s b :=
@@ -130,12 +112,6 @@ theorem ContinuousWithinAt.smul (hf : ContinuousWithinAt f s b) (hg : Continuous
 #align continuous_within_at.smul ContinuousWithinAt.smul
 #align continuous_within_at.vadd ContinuousWithinAt.vadd
 
-/- warning: continuous_at.smul -> ContinuousAt.smul is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {X : Type.{u2}} {Y : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} M] [_inst_2 : TopologicalSpace.{u2} X] [_inst_3 : TopologicalSpace.{u3} Y] [_inst_4 : SMul.{u1, u2} M X] [_inst_5 : ContinuousSMul.{u1, u2} M X _inst_4 _inst_1 _inst_2] {f : Y -> M} {g : Y -> X} {b : Y}, (ContinuousAt.{u3, u1} Y M _inst_3 _inst_1 f b) -> (ContinuousAt.{u3, u2} Y X _inst_3 _inst_2 g b) -> (ContinuousAt.{u3, u2} Y X _inst_3 _inst_2 (fun (x : Y) => SMul.smul.{u1, u2} M X _inst_4 (f x) (g x)) b)
-but is expected to have type
-  forall {M : Type.{u2}} {X : Type.{u1}} {Y : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} M] [_inst_2 : TopologicalSpace.{u1} X] [_inst_3 : TopologicalSpace.{u3} Y] [_inst_4 : SMul.{u2, u1} M X] [_inst_5 : ContinuousSMul.{u2, u1} M X _inst_4 _inst_1 _inst_2] {f : Y -> M} {g : Y -> X} {b : Y}, (ContinuousAt.{u3, u2} Y M _inst_3 _inst_1 f b) -> (ContinuousAt.{u3, u1} Y X _inst_3 _inst_2 g b) -> (ContinuousAt.{u3, u1} Y X _inst_3 _inst_2 (fun (x : Y) => HSMul.hSMul.{u2, u1, u1} M X X (instHSMul.{u2, u1} M X _inst_4) (f x) (g x)) b)
-Case conversion may be inaccurate. Consider using '#align continuous_at.smul ContinuousAt.smulₓ'. -/
 @[to_additive]
 theorem ContinuousAt.smul (hf : ContinuousAt f b) (hg : ContinuousAt g b) :
     ContinuousAt (fun x => f x • g x) b :=
@@ -143,24 +119,12 @@ theorem ContinuousAt.smul (hf : ContinuousAt f b) (hg : ContinuousAt g b) :
 #align continuous_at.smul ContinuousAt.smul
 #align continuous_at.vadd ContinuousAt.vadd
 
-/- warning: continuous_on.smul -> ContinuousOn.smul is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {X : Type.{u2}} {Y : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} M] [_inst_2 : TopologicalSpace.{u2} X] [_inst_3 : TopologicalSpace.{u3} Y] [_inst_4 : SMul.{u1, u2} M X] [_inst_5 : ContinuousSMul.{u1, u2} M X _inst_4 _inst_1 _inst_2] {f : Y -> M} {g : Y -> X} {s : Set.{u3} Y}, (ContinuousOn.{u3, u1} Y M _inst_3 _inst_1 f s) -> (ContinuousOn.{u3, u2} Y X _inst_3 _inst_2 g s) -> (ContinuousOn.{u3, u2} Y X _inst_3 _inst_2 (fun (x : Y) => SMul.smul.{u1, u2} M X _inst_4 (f x) (g x)) s)
-but is expected to have type
-  forall {M : Type.{u2}} {X : Type.{u1}} {Y : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} M] [_inst_2 : TopologicalSpace.{u1} X] [_inst_3 : TopologicalSpace.{u3} Y] [_inst_4 : SMul.{u2, u1} M X] [_inst_5 : ContinuousSMul.{u2, u1} M X _inst_4 _inst_1 _inst_2] {f : Y -> M} {g : Y -> X} {s : Set.{u3} Y}, (ContinuousOn.{u3, u2} Y M _inst_3 _inst_1 f s) -> (ContinuousOn.{u3, u1} Y X _inst_3 _inst_2 g s) -> (ContinuousOn.{u3, u1} Y X _inst_3 _inst_2 (fun (x : Y) => HSMul.hSMul.{u2, u1, u1} M X X (instHSMul.{u2, u1} M X _inst_4) (f x) (g x)) s)
-Case conversion may be inaccurate. Consider using '#align continuous_on.smul ContinuousOn.smulₓ'. -/
 @[to_additive]
 theorem ContinuousOn.smul (hf : ContinuousOn f s) (hg : ContinuousOn g s) :
     ContinuousOn (fun x => f x • g x) s := fun x hx => (hf x hx).smul (hg x hx)
 #align continuous_on.smul ContinuousOn.smul
 #align continuous_on.vadd ContinuousOn.vadd
 
-/- warning: continuous.smul -> Continuous.smul is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {X : Type.{u2}} {Y : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} M] [_inst_2 : TopologicalSpace.{u2} X] [_inst_3 : TopologicalSpace.{u3} Y] [_inst_4 : SMul.{u1, u2} M X] [_inst_5 : ContinuousSMul.{u1, u2} M X _inst_4 _inst_1 _inst_2] {f : Y -> M} {g : Y -> X}, (Continuous.{u3, u1} Y M _inst_3 _inst_1 f) -> (Continuous.{u3, u2} Y X _inst_3 _inst_2 g) -> (Continuous.{u3, u2} Y X _inst_3 _inst_2 (fun (x : Y) => SMul.smul.{u1, u2} M X _inst_4 (f x) (g x)))
-but is expected to have type
-  forall {M : Type.{u2}} {X : Type.{u1}} {Y : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} M] [_inst_2 : TopologicalSpace.{u1} X] [_inst_3 : TopologicalSpace.{u3} Y] [_inst_4 : SMul.{u2, u1} M X] [_inst_5 : ContinuousSMul.{u2, u1} M X _inst_4 _inst_1 _inst_2] {f : Y -> M} {g : Y -> X}, (Continuous.{u3, u2} Y M _inst_3 _inst_1 f) -> (Continuous.{u3, u1} Y X _inst_3 _inst_2 g) -> (Continuous.{u3, u1} Y X _inst_3 _inst_2 (fun (x : Y) => HSMul.hSMul.{u2, u1, u1} M X X (instHSMul.{u2, u1} M X _inst_4) (f x) (g x)))
-Case conversion may be inaccurate. Consider using '#align continuous.smul Continuous.smulₓ'. -/
 @[continuity, to_additive]
 theorem Continuous.smul (hf : Continuous f) (hg : Continuous g) : Continuous fun x => f x • g x :=
   continuous_smul.comp (hf.prod_mk hg)
@@ -195,12 +159,6 @@ section Monoid
 
 variable [Monoid M] [MulAction M X] [ContinuousSMul M X]
 
-/- warning: units.has_continuous_smul -> Units.continuousSMul is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {X : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} M] [_inst_2 : TopologicalSpace.{u2} X] [_inst_4 : Monoid.{u1} M] [_inst_5 : MulAction.{u1, u2} M X _inst_4] [_inst_6 : ContinuousSMul.{u1, u2} M X (MulAction.toHasSmul.{u1, u2} M X _inst_4 _inst_5) _inst_1 _inst_2], ContinuousSMul.{u1, u2} (Units.{u1} M _inst_4) X (Units.hasSmul.{u1, u2} M X _inst_4 (MulAction.toHasSmul.{u1, u2} M X _inst_4 _inst_5)) (Units.topologicalSpace.{u1} M _inst_1 _inst_4) _inst_2
-but is expected to have type
-  forall {M : Type.{u1}} {X : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} M] [_inst_2 : TopologicalSpace.{u2} X] [_inst_4 : Monoid.{u1} M] [_inst_5 : MulAction.{u1, u2} M X _inst_4] [_inst_6 : ContinuousSMul.{u1, u2} M X (MulAction.toSMul.{u1, u2} M X _inst_4 _inst_5) _inst_1 _inst_2], ContinuousSMul.{u1, u2} (Units.{u1} M _inst_4) X (Units.instSMulUnits.{u1, u2} M X _inst_4 (MulAction.toSMul.{u1, u2} M X _inst_4 _inst_5)) (Units.instTopologicalSpaceUnits.{u1} M _inst_1 _inst_4) _inst_2
-Case conversion may be inaccurate. Consider using '#align units.has_continuous_smul Units.continuousSMulₓ'. -/
 @[to_additive]
 instance Units.continuousSMul : ContinuousSMul Mˣ X
     where continuous_smul :=
@@ -230,12 +188,6 @@ section LatticeOps
 
 variable {ι : Sort _} {M X : Type _} [TopologicalSpace M] [SMul M X]
 
-/- warning: has_continuous_smul_Inf -> continuousSMul_sInf is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {X : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} M] [_inst_2 : SMul.{u1, u2} M X] {ts : Set.{u2} (TopologicalSpace.{u2} X)}, (forall (t : TopologicalSpace.{u2} X), (Membership.Mem.{u2, u2} (TopologicalSpace.{u2} X) (Set.{u2} (TopologicalSpace.{u2} X)) (Set.hasMem.{u2} (TopologicalSpace.{u2} X)) t ts) -> (ContinuousSMul.{u1, u2} M X _inst_2 _inst_1 t)) -> (ContinuousSMul.{u1, u2} M X _inst_2 _inst_1 (InfSet.sInf.{u2} (TopologicalSpace.{u2} X) (ConditionallyCompleteLattice.toHasInf.{u2} (TopologicalSpace.{u2} X) (CompleteLattice.toConditionallyCompleteLattice.{u2} (TopologicalSpace.{u2} X) (TopologicalSpace.completeLattice.{u2} X))) ts))
-but is expected to have type
-  forall {M : Type.{u1}} {X : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} M] [_inst_2 : SMul.{u1, u2} M X] {ts : Set.{u2} (TopologicalSpace.{u2} X)}, (forall (t : TopologicalSpace.{u2} X), (Membership.mem.{u2, u2} (TopologicalSpace.{u2} X) (Set.{u2} (TopologicalSpace.{u2} X)) (Set.instMembershipSet.{u2} (TopologicalSpace.{u2} X)) t ts) -> (ContinuousSMul.{u1, u2} M X _inst_2 _inst_1 t)) -> (ContinuousSMul.{u1, u2} M X _inst_2 _inst_1 (InfSet.sInf.{u2} (TopologicalSpace.{u2} X) (ConditionallyCompleteLattice.toInfSet.{u2} (TopologicalSpace.{u2} X) (CompleteLattice.toConditionallyCompleteLattice.{u2} (TopologicalSpace.{u2} X) (TopologicalSpace.instCompleteLatticeTopologicalSpace.{u2} X))) ts))
-Case conversion may be inaccurate. Consider using '#align has_continuous_smul_Inf continuousSMul_sInfₓ'. -/
 @[to_additive]
 theorem continuousSMul_sInf {ts : Set (TopologicalSpace X)}
     (h : ∀ t ∈ ts, @ContinuousSMul M X _ _ t) : @ContinuousSMul M X _ _ (sInf ts) :=
@@ -248,12 +200,6 @@ theorem continuousSMul_sInf {ts : Set (TopologicalSpace X)}
 #align has_continuous_smul_Inf continuousSMul_sInf
 #align has_continuous_vadd_Inf continuousVAdd_sInf
 
-/- warning: has_continuous_smul_infi -> continuousSMul_iInf is a dubious translation:
-lean 3 declaration is
-  forall {ι : Sort.{u1}} {M : Type.{u2}} {X : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} M] [_inst_2 : SMul.{u2, u3} M X] {ts' : ι -> (TopologicalSpace.{u3} X)}, (forall (i : ι), ContinuousSMul.{u2, u3} M X _inst_2 _inst_1 (ts' i)) -> (ContinuousSMul.{u2, u3} M X _inst_2 _inst_1 (iInf.{u3, u1} (TopologicalSpace.{u3} X) (ConditionallyCompleteLattice.toHasInf.{u3} (TopologicalSpace.{u3} X) (CompleteLattice.toConditionallyCompleteLattice.{u3} (TopologicalSpace.{u3} X) (TopologicalSpace.completeLattice.{u3} X))) ι (fun (i : ι) => ts' i)))
-but is expected to have type
-  forall {ι : Sort.{u1}} {M : Type.{u2}} {X : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} M] [_inst_2 : SMul.{u2, u3} M X] {ts' : ι -> (TopologicalSpace.{u3} X)}, (forall (i : ι), ContinuousSMul.{u2, u3} M X _inst_2 _inst_1 (ts' i)) -> (ContinuousSMul.{u2, u3} M X _inst_2 _inst_1 (iInf.{u3, u1} (TopologicalSpace.{u3} X) (ConditionallyCompleteLattice.toInfSet.{u3} (TopologicalSpace.{u3} X) (CompleteLattice.toConditionallyCompleteLattice.{u3} (TopologicalSpace.{u3} X) (TopologicalSpace.instCompleteLatticeTopologicalSpace.{u3} X))) ι (fun (i : ι) => ts' i)))
-Case conversion may be inaccurate. Consider using '#align has_continuous_smul_infi continuousSMul_iInfₓ'. -/
 @[to_additive]
 theorem continuousSMul_iInf {ts' : ι → TopologicalSpace X}
     (h : ∀ i, @ContinuousSMul M X _ _ (ts' i)) : @ContinuousSMul M X _ _ (⨅ i, ts' i) :=
@@ -261,12 +207,6 @@ theorem continuousSMul_iInf {ts' : ι → TopologicalSpace X}
 #align has_continuous_smul_infi continuousSMul_iInf
 #align has_continuous_vadd_infi continuousVAdd_iInf
 
-/- warning: has_continuous_smul_inf -> continuousSMul_inf is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {X : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} M] [_inst_2 : SMul.{u1, u2} M X] {t₁ : TopologicalSpace.{u2} X} {t₂ : TopologicalSpace.{u2} X} [_inst_3 : ContinuousSMul.{u1, u2} M X _inst_2 _inst_1 t₁] [_inst_4 : ContinuousSMul.{u1, u2} M X _inst_2 _inst_1 t₂], ContinuousSMul.{u1, u2} M X _inst_2 _inst_1 (Inf.inf.{u2} (TopologicalSpace.{u2} X) (SemilatticeInf.toHasInf.{u2} (TopologicalSpace.{u2} X) (Lattice.toSemilatticeInf.{u2} (TopologicalSpace.{u2} X) (ConditionallyCompleteLattice.toLattice.{u2} (TopologicalSpace.{u2} X) (CompleteLattice.toConditionallyCompleteLattice.{u2} (TopologicalSpace.{u2} X) (TopologicalSpace.completeLattice.{u2} X))))) t₁ t₂)
-but is expected to have type
-  forall {M : Type.{u1}} {X : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} M] [_inst_2 : SMul.{u1, u2} M X] {t₁ : TopologicalSpace.{u2} X} {t₂ : TopologicalSpace.{u2} X} [_inst_3 : ContinuousSMul.{u1, u2} M X _inst_2 _inst_1 t₁] [_inst_4 : ContinuousSMul.{u1, u2} M X _inst_2 _inst_1 t₂], ContinuousSMul.{u1, u2} M X _inst_2 _inst_1 (Inf.inf.{u2} (TopologicalSpace.{u2} X) (Lattice.toInf.{u2} (TopologicalSpace.{u2} X) (ConditionallyCompleteLattice.toLattice.{u2} (TopologicalSpace.{u2} X) (CompleteLattice.toConditionallyCompleteLattice.{u2} (TopologicalSpace.{u2} X) (TopologicalSpace.instCompleteLatticeTopologicalSpace.{u2} X)))) t₁ t₂)
-Case conversion may be inaccurate. Consider using '#align has_continuous_smul_inf continuousSMul_infₓ'. -/
 @[to_additive]
 theorem continuousSMul_inf {t₁ t₂ : TopologicalSpace X} [@ContinuousSMul M X _ _ t₁]
     [@ContinuousSMul M X _ _ t₂] : @ContinuousSMul M X _ _ (t₁ ⊓ t₂) := by rw [inf_eq_iInf];
@@ -284,12 +224,6 @@ variable [PreconnectedSpace G] [TopologicalSpace P] [ContinuousVAdd G P]
 
 include G
 
-/- warning: add_torsor.connected_space -> AddTorsor.connectedSpace is a dubious translation:
-lean 3 declaration is
-  forall (G : Type.{u1}) (P : Type.{u2}) [_inst_1 : AddGroup.{u1} G] [_inst_2 : AddTorsor.{u1, u2} G P _inst_1] [_inst_3 : TopologicalSpace.{u1} G] [_inst_4 : PreconnectedSpace.{u1} G _inst_3] [_inst_5 : TopologicalSpace.{u2} P] [_inst_6 : ContinuousVAdd.{u1, u2} G P (AddAction.toHasVadd.{u1, u2} G P (SubNegMonoid.toAddMonoid.{u1} G (AddGroup.toSubNegMonoid.{u1} G _inst_1)) (AddTorsor.toAddAction.{u1, u2} G P _inst_1 _inst_2)) _inst_3 _inst_5], ConnectedSpace.{u2} P _inst_5
-but is expected to have type
-  forall (G : Type.{u2}) (P : Type.{u1}) [_inst_1 : AddGroup.{u2} G] [_inst_2 : AddTorsor.{u2, u1} G P _inst_1] [_inst_3 : TopologicalSpace.{u2} G] [_inst_4 : PreconnectedSpace.{u2} G _inst_3] [_inst_5 : TopologicalSpace.{u1} P] [_inst_6 : ContinuousVAdd.{u2, u1} G P (AddAction.toVAdd.{u2, u1} G P (SubNegMonoid.toAddMonoid.{u2} G (AddGroup.toSubNegMonoid.{u2} G _inst_1)) (AddTorsor.toAddAction.{u2, u1} G P _inst_1 _inst_2)) _inst_3 _inst_5], ConnectedSpace.{u1} P _inst_5
-Case conversion may be inaccurate. Consider using '#align add_torsor.connected_space AddTorsor.connectedSpaceₓ'. -/
 /-- An `add_torsor` for a connected space is a connected space. This is not an instance because
 it loops for a group as a torsor over itself. -/
 protected theorem AddTorsor.connectedSpace : ConnectedSpace P :=
Diff
@@ -269,11 +269,8 @@ but is expected to have type
 Case conversion may be inaccurate. Consider using '#align has_continuous_smul_inf continuousSMul_infₓ'. -/
 @[to_additive]
 theorem continuousSMul_inf {t₁ t₂ : TopologicalSpace X} [@ContinuousSMul M X _ _ t₁]
-    [@ContinuousSMul M X _ _ t₂] : @ContinuousSMul M X _ _ (t₁ ⊓ t₂) :=
-  by
-  rw [inf_eq_iInf]
-  refine' continuousSMul_iInf fun b => _
-  cases b <;> assumption
+    [@ContinuousSMul M X _ _ t₂] : @ContinuousSMul M X _ _ (t₁ ⊓ t₂) := by rw [inf_eq_iInf];
+  refine' continuousSMul_iInf fun b => _; cases b <;> assumption
 #align has_continuous_smul_inf continuousSMul_inf
 #align has_continuous_vadd_inf continuousVAdd_inf
 
Diff
@@ -230,36 +230,36 @@ section LatticeOps
 
 variable {ι : Sort _} {M X : Type _} [TopologicalSpace M] [SMul M X]
 
-/- warning: has_continuous_smul_Inf -> continuousSMul_infₛ is a dubious translation:
+/- warning: has_continuous_smul_Inf -> continuousSMul_sInf is a dubious translation:
 lean 3 declaration is
-  forall {M : Type.{u1}} {X : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} M] [_inst_2 : SMul.{u1, u2} M X] {ts : Set.{u2} (TopologicalSpace.{u2} X)}, (forall (t : TopologicalSpace.{u2} X), (Membership.Mem.{u2, u2} (TopologicalSpace.{u2} X) (Set.{u2} (TopologicalSpace.{u2} X)) (Set.hasMem.{u2} (TopologicalSpace.{u2} X)) t ts) -> (ContinuousSMul.{u1, u2} M X _inst_2 _inst_1 t)) -> (ContinuousSMul.{u1, u2} M X _inst_2 _inst_1 (InfSet.infₛ.{u2} (TopologicalSpace.{u2} X) (ConditionallyCompleteLattice.toHasInf.{u2} (TopologicalSpace.{u2} X) (CompleteLattice.toConditionallyCompleteLattice.{u2} (TopologicalSpace.{u2} X) (TopologicalSpace.completeLattice.{u2} X))) ts))
+  forall {M : Type.{u1}} {X : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} M] [_inst_2 : SMul.{u1, u2} M X] {ts : Set.{u2} (TopologicalSpace.{u2} X)}, (forall (t : TopologicalSpace.{u2} X), (Membership.Mem.{u2, u2} (TopologicalSpace.{u2} X) (Set.{u2} (TopologicalSpace.{u2} X)) (Set.hasMem.{u2} (TopologicalSpace.{u2} X)) t ts) -> (ContinuousSMul.{u1, u2} M X _inst_2 _inst_1 t)) -> (ContinuousSMul.{u1, u2} M X _inst_2 _inst_1 (InfSet.sInf.{u2} (TopologicalSpace.{u2} X) (ConditionallyCompleteLattice.toHasInf.{u2} (TopologicalSpace.{u2} X) (CompleteLattice.toConditionallyCompleteLattice.{u2} (TopologicalSpace.{u2} X) (TopologicalSpace.completeLattice.{u2} X))) ts))
 but is expected to have type
-  forall {M : Type.{u1}} {X : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} M] [_inst_2 : SMul.{u1, u2} M X] {ts : Set.{u2} (TopologicalSpace.{u2} X)}, (forall (t : TopologicalSpace.{u2} X), (Membership.mem.{u2, u2} (TopologicalSpace.{u2} X) (Set.{u2} (TopologicalSpace.{u2} X)) (Set.instMembershipSet.{u2} (TopologicalSpace.{u2} X)) t ts) -> (ContinuousSMul.{u1, u2} M X _inst_2 _inst_1 t)) -> (ContinuousSMul.{u1, u2} M X _inst_2 _inst_1 (InfSet.infₛ.{u2} (TopologicalSpace.{u2} X) (ConditionallyCompleteLattice.toInfSet.{u2} (TopologicalSpace.{u2} X) (CompleteLattice.toConditionallyCompleteLattice.{u2} (TopologicalSpace.{u2} X) (TopologicalSpace.instCompleteLatticeTopologicalSpace.{u2} X))) ts))
-Case conversion may be inaccurate. Consider using '#align has_continuous_smul_Inf continuousSMul_infₛₓ'. -/
+  forall {M : Type.{u1}} {X : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} M] [_inst_2 : SMul.{u1, u2} M X] {ts : Set.{u2} (TopologicalSpace.{u2} X)}, (forall (t : TopologicalSpace.{u2} X), (Membership.mem.{u2, u2} (TopologicalSpace.{u2} X) (Set.{u2} (TopologicalSpace.{u2} X)) (Set.instMembershipSet.{u2} (TopologicalSpace.{u2} X)) t ts) -> (ContinuousSMul.{u1, u2} M X _inst_2 _inst_1 t)) -> (ContinuousSMul.{u1, u2} M X _inst_2 _inst_1 (InfSet.sInf.{u2} (TopologicalSpace.{u2} X) (ConditionallyCompleteLattice.toInfSet.{u2} (TopologicalSpace.{u2} X) (CompleteLattice.toConditionallyCompleteLattice.{u2} (TopologicalSpace.{u2} X) (TopologicalSpace.instCompleteLatticeTopologicalSpace.{u2} X))) ts))
+Case conversion may be inaccurate. Consider using '#align has_continuous_smul_Inf continuousSMul_sInfₓ'. -/
 @[to_additive]
-theorem continuousSMul_infₛ {ts : Set (TopologicalSpace X)}
-    (h : ∀ t ∈ ts, @ContinuousSMul M X _ _ t) : @ContinuousSMul M X _ _ (infₛ ts) :=
+theorem continuousSMul_sInf {ts : Set (TopologicalSpace X)}
+    (h : ∀ t ∈ ts, @ContinuousSMul M X _ _ t) : @ContinuousSMul M X _ _ (sInf ts) :=
   {
     continuous_smul := by
-      rw [← @infₛ_singleton _ _ ‹TopologicalSpace M›]
+      rw [← @sInf_singleton _ _ ‹TopologicalSpace M›]
       exact
-        continuous_infₛ_rng.2 fun t ht =>
-          continuous_infₛ_dom₂ (Eq.refl _) ht (@ContinuousSMul.continuous_smul _ _ _ _ t (h t ht)) }
-#align has_continuous_smul_Inf continuousSMul_infₛ
-#align has_continuous_vadd_Inf continuousVAdd_infₛ
+        continuous_sInf_rng.2 fun t ht =>
+          continuous_sInf_dom₂ (Eq.refl _) ht (@ContinuousSMul.continuous_smul _ _ _ _ t (h t ht)) }
+#align has_continuous_smul_Inf continuousSMul_sInf
+#align has_continuous_vadd_Inf continuousVAdd_sInf
 
-/- warning: has_continuous_smul_infi -> continuousSMul_infᵢ is a dubious translation:
+/- warning: has_continuous_smul_infi -> continuousSMul_iInf is a dubious translation:
 lean 3 declaration is
-  forall {ι : Sort.{u1}} {M : Type.{u2}} {X : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} M] [_inst_2 : SMul.{u2, u3} M X] {ts' : ι -> (TopologicalSpace.{u3} X)}, (forall (i : ι), ContinuousSMul.{u2, u3} M X _inst_2 _inst_1 (ts' i)) -> (ContinuousSMul.{u2, u3} M X _inst_2 _inst_1 (infᵢ.{u3, u1} (TopologicalSpace.{u3} X) (ConditionallyCompleteLattice.toHasInf.{u3} (TopologicalSpace.{u3} X) (CompleteLattice.toConditionallyCompleteLattice.{u3} (TopologicalSpace.{u3} X) (TopologicalSpace.completeLattice.{u3} X))) ι (fun (i : ι) => ts' i)))
+  forall {ι : Sort.{u1}} {M : Type.{u2}} {X : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} M] [_inst_2 : SMul.{u2, u3} M X] {ts' : ι -> (TopologicalSpace.{u3} X)}, (forall (i : ι), ContinuousSMul.{u2, u3} M X _inst_2 _inst_1 (ts' i)) -> (ContinuousSMul.{u2, u3} M X _inst_2 _inst_1 (iInf.{u3, u1} (TopologicalSpace.{u3} X) (ConditionallyCompleteLattice.toHasInf.{u3} (TopologicalSpace.{u3} X) (CompleteLattice.toConditionallyCompleteLattice.{u3} (TopologicalSpace.{u3} X) (TopologicalSpace.completeLattice.{u3} X))) ι (fun (i : ι) => ts' i)))
 but is expected to have type
-  forall {ι : Sort.{u1}} {M : Type.{u2}} {X : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} M] [_inst_2 : SMul.{u2, u3} M X] {ts' : ι -> (TopologicalSpace.{u3} X)}, (forall (i : ι), ContinuousSMul.{u2, u3} M X _inst_2 _inst_1 (ts' i)) -> (ContinuousSMul.{u2, u3} M X _inst_2 _inst_1 (infᵢ.{u3, u1} (TopologicalSpace.{u3} X) (ConditionallyCompleteLattice.toInfSet.{u3} (TopologicalSpace.{u3} X) (CompleteLattice.toConditionallyCompleteLattice.{u3} (TopologicalSpace.{u3} X) (TopologicalSpace.instCompleteLatticeTopologicalSpace.{u3} X))) ι (fun (i : ι) => ts' i)))
-Case conversion may be inaccurate. Consider using '#align has_continuous_smul_infi continuousSMul_infᵢₓ'. -/
+  forall {ι : Sort.{u1}} {M : Type.{u2}} {X : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} M] [_inst_2 : SMul.{u2, u3} M X] {ts' : ι -> (TopologicalSpace.{u3} X)}, (forall (i : ι), ContinuousSMul.{u2, u3} M X _inst_2 _inst_1 (ts' i)) -> (ContinuousSMul.{u2, u3} M X _inst_2 _inst_1 (iInf.{u3, u1} (TopologicalSpace.{u3} X) (ConditionallyCompleteLattice.toInfSet.{u3} (TopologicalSpace.{u3} X) (CompleteLattice.toConditionallyCompleteLattice.{u3} (TopologicalSpace.{u3} X) (TopologicalSpace.instCompleteLatticeTopologicalSpace.{u3} X))) ι (fun (i : ι) => ts' i)))
+Case conversion may be inaccurate. Consider using '#align has_continuous_smul_infi continuousSMul_iInfₓ'. -/
 @[to_additive]
-theorem continuousSMul_infᵢ {ts' : ι → TopologicalSpace X}
+theorem continuousSMul_iInf {ts' : ι → TopologicalSpace X}
     (h : ∀ i, @ContinuousSMul M X _ _ (ts' i)) : @ContinuousSMul M X _ _ (⨅ i, ts' i) :=
-  continuousSMul_infₛ <| Set.forall_range_iff.mpr h
-#align has_continuous_smul_infi continuousSMul_infᵢ
-#align has_continuous_vadd_infi continuousVAdd_infᵢ
+  continuousSMul_sInf <| Set.forall_range_iff.mpr h
+#align has_continuous_smul_infi continuousSMul_iInf
+#align has_continuous_vadd_infi continuousVAdd_iInf
 
 /- warning: has_continuous_smul_inf -> continuousSMul_inf is a dubious translation:
 lean 3 declaration is
@@ -271,8 +271,8 @@ Case conversion may be inaccurate. Consider using '#align has_continuous_smul_in
 theorem continuousSMul_inf {t₁ t₂ : TopologicalSpace X} [@ContinuousSMul M X _ _ t₁]
     [@ContinuousSMul M X _ _ t₂] : @ContinuousSMul M X _ _ (t₁ ⊓ t₂) :=
   by
-  rw [inf_eq_infᵢ]
-  refine' continuousSMul_infᵢ fun b => _
+  rw [inf_eq_iInf]
+  refine' continuousSMul_iInf fun b => _
   cases b <;> assumption
 #align has_continuous_smul_inf continuousSMul_inf
 #align has_continuous_vadd_inf continuousVAdd_inf
Diff
@@ -298,8 +298,7 @@ it loops for a group as a torsor over itself. -/
 protected theorem AddTorsor.connectedSpace : ConnectedSpace P :=
   { isPreconnected_univ :=
       by
-      convert
-        is_preconnected_univ.image (Equiv.vaddConst (Classical.arbitrary P) : G → P)
+      convert is_preconnected_univ.image (Equiv.vaddConst (Classical.arbitrary P) : G → P)
           (continuous_id.vadd continuous_const).ContinuousOn
       rw [Set.image_univ, Equiv.range_eq_univ]
     to_nonempty := inferInstance }
Diff
@@ -263,9 +263,9 @@ theorem continuousSMul_infᵢ {ts' : ι → TopologicalSpace X}
 
 /- warning: has_continuous_smul_inf -> continuousSMul_inf is a dubious translation:
 lean 3 declaration is
-  forall {M : Type.{u1}} {X : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} M] [_inst_2 : SMul.{u1, u2} M X] {t₁ : TopologicalSpace.{u2} X} {t₂ : TopologicalSpace.{u2} X} [_inst_3 : ContinuousSMul.{u1, u2} M X _inst_2 _inst_1 t₁] [_inst_4 : ContinuousSMul.{u1, u2} M X _inst_2 _inst_1 t₂], ContinuousSMul.{u1, u2} M X _inst_2 _inst_1 (HasInf.inf.{u2} (TopologicalSpace.{u2} X) (SemilatticeInf.toHasInf.{u2} (TopologicalSpace.{u2} X) (Lattice.toSemilatticeInf.{u2} (TopologicalSpace.{u2} X) (ConditionallyCompleteLattice.toLattice.{u2} (TopologicalSpace.{u2} X) (CompleteLattice.toConditionallyCompleteLattice.{u2} (TopologicalSpace.{u2} X) (TopologicalSpace.completeLattice.{u2} X))))) t₁ t₂)
+  forall {M : Type.{u1}} {X : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} M] [_inst_2 : SMul.{u1, u2} M X] {t₁ : TopologicalSpace.{u2} X} {t₂ : TopologicalSpace.{u2} X} [_inst_3 : ContinuousSMul.{u1, u2} M X _inst_2 _inst_1 t₁] [_inst_4 : ContinuousSMul.{u1, u2} M X _inst_2 _inst_1 t₂], ContinuousSMul.{u1, u2} M X _inst_2 _inst_1 (Inf.inf.{u2} (TopologicalSpace.{u2} X) (SemilatticeInf.toHasInf.{u2} (TopologicalSpace.{u2} X) (Lattice.toSemilatticeInf.{u2} (TopologicalSpace.{u2} X) (ConditionallyCompleteLattice.toLattice.{u2} (TopologicalSpace.{u2} X) (CompleteLattice.toConditionallyCompleteLattice.{u2} (TopologicalSpace.{u2} X) (TopologicalSpace.completeLattice.{u2} X))))) t₁ t₂)
 but is expected to have type
-  forall {M : Type.{u1}} {X : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} M] [_inst_2 : SMul.{u1, u2} M X] {t₁ : TopologicalSpace.{u2} X} {t₂ : TopologicalSpace.{u2} X} [_inst_3 : ContinuousSMul.{u1, u2} M X _inst_2 _inst_1 t₁] [_inst_4 : ContinuousSMul.{u1, u2} M X _inst_2 _inst_1 t₂], ContinuousSMul.{u1, u2} M X _inst_2 _inst_1 (HasInf.inf.{u2} (TopologicalSpace.{u2} X) (Lattice.toHasInf.{u2} (TopologicalSpace.{u2} X) (ConditionallyCompleteLattice.toLattice.{u2} (TopologicalSpace.{u2} X) (CompleteLattice.toConditionallyCompleteLattice.{u2} (TopologicalSpace.{u2} X) (TopologicalSpace.instCompleteLatticeTopologicalSpace.{u2} X)))) t₁ t₂)
+  forall {M : Type.{u1}} {X : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} M] [_inst_2 : SMul.{u1, u2} M X] {t₁ : TopologicalSpace.{u2} X} {t₂ : TopologicalSpace.{u2} X} [_inst_3 : ContinuousSMul.{u1, u2} M X _inst_2 _inst_1 t₁] [_inst_4 : ContinuousSMul.{u1, u2} M X _inst_2 _inst_1 t₂], ContinuousSMul.{u1, u2} M X _inst_2 _inst_1 (Inf.inf.{u2} (TopologicalSpace.{u2} X) (Lattice.toInf.{u2} (TopologicalSpace.{u2} X) (ConditionallyCompleteLattice.toLattice.{u2} (TopologicalSpace.{u2} X) (CompleteLattice.toConditionallyCompleteLattice.{u2} (TopologicalSpace.{u2} X) (TopologicalSpace.instCompleteLatticeTopologicalSpace.{u2} X)))) t₁ t₂)
 Case conversion may be inaccurate. Consider using '#align has_continuous_smul_inf continuousSMul_infₓ'. -/
 @[to_additive]
 theorem continuousSMul_inf {t₁ t₂ : TopologicalSpace X} [@ContinuousSMul M X _ _ t₁]

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
@@ -144,6 +144,16 @@ instance MulOpposite.continuousSMul : ContinuousSMul M Xᵐᵒᵖ :=
 #align mul_opposite.has_continuous_smul MulOpposite.continuousSMul
 #align add_opposite.has_continuous_vadd AddOpposite.continuousVAdd
 
+@[to_additive]
+protected theorem Specializes.smul {a b : M} {x y : X} (h₁ : a ⤳ b) (h₂ : x ⤳ y) :
+    (a • x) ⤳ (b • y) :=
+  (h₁.prod h₂).map continuous_smul
+
+@[to_additive]
+protected theorem Inseparable.smul {a b : M} {x y : X} (h₁ : Inseparable a b)
+    (h₂ : Inseparable x y) : Inseparable (a • x) (b • y) :=
+  (h₁.prod h₂).map continuous_smul
+
 @[to_additive]
 lemma IsCompact.smul_set {k : Set M} {u : Set X} (hk : IsCompact k) (hu : IsCompact u) :
     IsCompact (k • u) := by
feat: instances for actions of ulifted spaces (#11777)
Diff
@@ -73,6 +73,10 @@ section SMul
 
 variable [SMul M X] [ContinuousSMul M X]
 
+@[to_additive]
+instance : ContinuousSMul (ULift M) X :=
+  ⟨(continuous_smul (M := M)).comp₂ (continuous_uLift_down.comp continuous_fst) continuous_snd⟩
+
 @[to_additive]
 instance (priority := 100) ContinuousSMul.continuousConstSMul : ContinuousConstSMul M X where
   continuous_const_smul _ := continuous_smul.comp (continuous_const.prod_mk continuous_id)
chore(*): remove empty lines between variable statements (#11418)

Empty lines were removed by executing the following Python script twice

import os
import re


# Loop through each file in the repository
for dir_path, dirs, files in os.walk('.'):
  for filename in files:
    if filename.endswith('.lean'):
      file_path = os.path.join(dir_path, filename)

      # Open the file and read its contents
      with open(file_path, 'r') as file:
        content = file.read()

      # Use a regular expression to replace sequences of "variable" lines separated by empty lines
      # with sequences without empty lines
      modified_content = re.sub(r'(variable.*\n)\n(variable(?! .* in))', r'\1\2', content)

      # Write the modified content back to the file
      with open(file_path, 'w') as file:
        file.write(modified_content)
Diff
@@ -272,7 +272,6 @@ end LatticeOps
 section AddTorsor
 
 variable (G : Type*) (P : Type*) [AddGroup G] [AddTorsor G P] [TopologicalSpace G]
-
 variable [PreconnectedSpace G] [TopologicalSpace P] [ContinuousVAdd G P]
 
 /-- An `AddTorsor` for a connected space is a connected space. This is not an instance because
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
@@ -254,7 +254,7 @@ theorem continuousSMul_sInf {ts : Set (TopologicalSpace X)}
 @[to_additive]
 theorem continuousSMul_iInf {ts' : ι → TopologicalSpace X}
     (h : ∀ i, @ContinuousSMul M X _ _ (ts' i)) : @ContinuousSMul M X _ _ (⨅ i, ts' i) :=
-  continuousSMul_sInf <| Set.forall_range_iff.mpr h
+  continuousSMul_sInf <| Set.forall_mem_range.mpr h
 #align has_continuous_smul_infi continuousSMul_iInf
 #align has_continuous_vadd_infi continuousVAdd_iInf
 
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
@@ -239,10 +239,10 @@ variable {ι : Sort*} {M X : Type*} [TopologicalSpace M] [SMul M X]
 @[to_additive]
 theorem continuousSMul_sInf {ts : Set (TopologicalSpace X)}
     (h : ∀ t ∈ ts, @ContinuousSMul M X _ _ t) : @ContinuousSMul M X _ _ (sInf ts) :=
-  -- porting note: {} doesn't work because `sInf ts` isn't found by TC search. `(_)` finds it by
+  -- Porting note: {} doesn't work because `sInf ts` isn't found by TC search. `(_)` finds it by
   -- unification instead.
   @ContinuousSMul.mk M X _ _ (_) <| by
-      -- porting note: needs `( :)`
+      -- Porting note: needs `( :)`
       rw [← (@sInf_singleton _ _ ‹TopologicalSpace M›:)]
       exact
         continuous_sInf_rng.2 fun t ht =>
chore: redistribute tags for fun_prop regarding continuity across the library (#10494)

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

Diff
@@ -103,20 +103,20 @@ theorem ContinuousWithinAt.smul (hf : ContinuousWithinAt f s b) (hg : Continuous
 #align continuous_within_at.smul ContinuousWithinAt.smul
 #align continuous_within_at.vadd ContinuousWithinAt.vadd
 
-@[to_additive]
+@[to_additive (attr := fun_prop)]
 theorem ContinuousAt.smul (hf : ContinuousAt f b) (hg : ContinuousAt g b) :
     ContinuousAt (fun x => f x • g x) b :=
   Filter.Tendsto.smul hf hg
 #align continuous_at.smul ContinuousAt.smul
 #align continuous_at.vadd ContinuousAt.vadd
 
-@[to_additive]
+@[to_additive (attr := fun_prop)]
 theorem ContinuousOn.smul (hf : ContinuousOn f s) (hg : ContinuousOn g s) :
     ContinuousOn (fun x => f x • g x) s := fun x hx => (hf x hx).smul (hg x hx)
 #align continuous_on.smul ContinuousOn.smul
 #align continuous_on.vadd ContinuousOn.vadd
 
-@[to_additive (attr := continuity)]
+@[to_additive (attr := continuity, fun_prop)]
 theorem Continuous.smul (hf : Continuous f) (hg : Continuous g) : Continuous fun x => f x • g x :=
   continuous_smul.comp (hf.prod_mk hg)
 #align continuous.smul Continuous.smul
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
@@ -5,7 +5,7 @@ Authors: Yury Kudryashov
 -/
 import Mathlib.Algebra.AddTorsor
 import Mathlib.Topology.Algebra.Constructions
-import Mathlib.GroupTheory.GroupAction.Prod
+import Mathlib.GroupTheory.GroupAction.SubMulAction
 import Mathlib.Topology.Algebra.ConstMulAction
 
 #align_import topology.algebra.mul_action from "leanprover-community/mathlib"@"d90e4e186f1d18e375dcd4e5b5f6364b01cb3e46"
@@ -152,6 +152,33 @@ lemma smul_set_closure_subset (K : Set M) (L : Set X) :
   Set.smul_subset_iff.2 fun _x hx _y hy ↦ map_mem_closure₂ continuous_smul hx hy fun _a ha _b hb ↦
     Set.smul_mem_smul ha hb
 
+/-- Suppose that `N` acts on `X` and `M` continuously acts on `Y`.
+Suppose that `g : Y → X` is an action homomorphism in the following sense:
+there exists a continuous function `f : N → M` such that `g (c • x) = f c • g x`.
+Then the action of `N` on `X` is continuous as well.
+
+In many cases, `f = id` so that `g` is an action homomorphism in the sense of `MulActionHom`.
+However, this version also works for semilinear maps and `f = Units.val`. -/
+@[to_additive
+  "Suppose that `N` additively acts on `X` and `M` continuously additively acts on `Y`.
+Suppose that `g : Y → X` is an additive action homomorphism in the following sense:
+there exists a continuous function `f : N → M` such that `g (c +ᵥ x) = f c +ᵥ g x`.
+Then the action of `N` on `X` is continuous as well.
+
+In many cases, `f = id` so that `g` is an action homomorphism in the sense of `AddActionHom`.
+However, this version also works for `f = AddUnits.val`."]
+lemma Inducing.continuousSMul {N : Type*} [SMul N Y] [TopologicalSpace N] {f : N → M}
+    (hg : Inducing g) (hf : Continuous f) (hsmul : ∀ {c x}, g (c • x) = f c • g x) :
+    ContinuousSMul N Y where
+  continuous_smul := by
+    simpa only [hg.continuous_iff, Function.comp_def, hsmul]
+      using (hf.comp continuous_fst).smul <| hg.continuous.comp continuous_snd
+
+@[to_additive]
+instance SMulMemClass.continuousSMul {S : Type*} [SetLike S X] [SMulMemClass S M X] (s : S) :
+    ContinuousSMul M s :=
+  inducing_subtype_val.continuousSMul continuous_id rfl
+
 end SMul
 
 section Monoid
@@ -159,10 +186,8 @@ section Monoid
 variable [Monoid M] [MulAction M X] [ContinuousSMul M X]
 
 @[to_additive]
-instance Units.continuousSMul : ContinuousSMul Mˣ X where
-  continuous_smul :=
-    show Continuous ((fun p : M × X => p.fst • p.snd) ∘ fun p : Mˣ × X => (p.1, p.2)) from
-      continuous_smul.comp ((Units.continuous_val.comp continuous_fst).prod_mk continuous_snd)
+instance Units.continuousSMul : ContinuousSMul Mˣ X :=
+  inducing_id.continuousSMul Units.continuous_val rfl
 #align units.has_continuous_smul Units.continuousSMul
 #align add_units.has_continuous_vadd AddUnits.continuousVAdd
 
@@ -176,6 +201,10 @@ theorem MulAction.continuousSMul_compHom
   let _ : MulAction N X := MulAction.compHom _ f
   exact ⟨(hf.comp continuous_fst).smul continuous_snd⟩
 
+@[to_additive]
+instance Submonoid.continuousSMul {S : Submonoid M} : ContinuousSMul S X :=
+  inducing_id.continuousSMul continuous_subtype_val rfl
+
 end Monoid
 
 section Group
@@ -183,12 +212,8 @@ section Group
 variable [Group M] [MulAction M X] [ContinuousSMul M X]
 
 @[to_additive]
-instance Submonoid.continuousSMul {S : Submonoid M} : ContinuousSMul S X where
-  continuous_smul := (continuous_subtype_val.comp continuous_fst).smul continuous_snd
-
-@[to_additive]
-instance Subgroup.continuousSMul {S : Subgroup M} : ContinuousSMul S X where
-  continuous_smul := (continuous_subtype_val.comp continuous_fst).smul continuous_snd
+instance Subgroup.continuousSMul {S : Subgroup M} : ContinuousSMul S X :=
+  S.toSubmonoid.continuousSMul
 
 end Group
 
chore(Topology/../MulAction): golf (#9212)
Diff
@@ -148,17 +148,9 @@ lemma IsCompact.smul_set {k : Set M} {u : Set X} (hk : IsCompact k) (hu : IsComp
 
 @[to_additive]
 lemma smul_set_closure_subset (K : Set M) (L : Set X) :
-    closure K • closure L ⊆ closure (K • L) := by
-  rintro - ⟨x, y, hx, hy, rfl⟩
-  apply mem_closure_iff_nhds.2 (fun u hu ↦ ?_)
-  have A : (fun p ↦ p.fst • p.snd) ⁻¹' u ∈ 𝓝 (x, y) :=
-    (continuous_smul.continuousAt (x := (x, y))).preimage_mem_nhds hu
-  obtain ⟨a, ha, b, hb, hab⟩ :
-    ∃ a, a ∈ 𝓝 x ∧ ∃ b, b ∈ 𝓝 y ∧ a ×ˢ b ⊆ (fun p ↦ p.fst • p.snd) ⁻¹' u :=
-      mem_nhds_prod_iff.1 A
-  obtain ⟨x', ⟨x'a, x'K⟩⟩ : Set.Nonempty (a ∩ K) := mem_closure_iff_nhds.1 hx a ha
-  obtain ⟨y', ⟨y'b, y'L⟩⟩ : Set.Nonempty (b ∩ L) := mem_closure_iff_nhds.1 hy b hb
-  exact ⟨x' • y', hab (Set.mk_mem_prod x'a y'b), Set.smul_mem_smul x'K y'L⟩
+    closure K • closure L ⊆ closure (K • L) :=
+  Set.smul_subset_iff.2 fun _x hx _y hy ↦ map_mem_closure₂ continuous_smul hx hy fun _a ha _b hb ↦
+    Set.smul_mem_smul ha hb
 
 end SMul
 
chore: exact, not refine when possible (#8130)

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

Diff
@@ -158,7 +158,7 @@ lemma smul_set_closure_subset (K : Set M) (L : Set X) :
       mem_nhds_prod_iff.1 A
   obtain ⟨x', ⟨x'a, x'K⟩⟩ : Set.Nonempty (a ∩ K) := mem_closure_iff_nhds.1 hx a ha
   obtain ⟨y', ⟨y'b, y'L⟩⟩ : Set.Nonempty (b ∩ L) := mem_closure_iff_nhds.1 hy b hb
-  refine ⟨x' • y', hab (Set.mk_mem_prod x'a y'b), Set.smul_mem_smul x'K y'L⟩
+  exact ⟨x' • y', hab (Set.mk_mem_prod x'a y'b), Set.smul_mem_smul x'K y'L⟩
 
 end SMul
 
feat: multiplication by closure {1} in topological groups does not change closed and open subsets (#7858)
Diff
@@ -140,6 +140,26 @@ instance MulOpposite.continuousSMul : ContinuousSMul M Xᵐᵒᵖ :=
 #align mul_opposite.has_continuous_smul MulOpposite.continuousSMul
 #align add_opposite.has_continuous_vadd AddOpposite.continuousVAdd
 
+@[to_additive]
+lemma IsCompact.smul_set {k : Set M} {u : Set X} (hk : IsCompact k) (hu : IsCompact u) :
+    IsCompact (k • u) := by
+  rw [← Set.image_smul_prod]
+  exact IsCompact.image (hk.prod hu) continuous_smul
+
+@[to_additive]
+lemma smul_set_closure_subset (K : Set M) (L : Set X) :
+    closure K • closure L ⊆ closure (K • L) := by
+  rintro - ⟨x, y, hx, hy, rfl⟩
+  apply mem_closure_iff_nhds.2 (fun u hu ↦ ?_)
+  have A : (fun p ↦ p.fst • p.snd) ⁻¹' u ∈ 𝓝 (x, y) :=
+    (continuous_smul.continuousAt (x := (x, y))).preimage_mem_nhds hu
+  obtain ⟨a, ha, b, hb, hab⟩ :
+    ∃ a, a ∈ 𝓝 x ∧ ∃ b, b ∈ 𝓝 y ∧ a ×ˢ b ⊆ (fun p ↦ p.fst • p.snd) ⁻¹' u :=
+      mem_nhds_prod_iff.1 A
+  obtain ⟨x', ⟨x'a, x'K⟩⟩ : Set.Nonempty (a ∩ K) := mem_closure_iff_nhds.1 hx a ha
+  obtain ⟨y', ⟨y'b, y'L⟩⟩ : Set.Nonempty (b ∩ L) := mem_closure_iff_nhds.1 hy b hb
+  refine ⟨x' • y', hab (Set.mk_mem_prod x'a y'b), Set.smul_mem_smul x'K y'L⟩
+
 end SMul
 
 section Monoid
feat: open mapping theorem for surjective morphisms between locally compact groups (#7356)
Diff
@@ -154,6 +154,16 @@ instance Units.continuousSMul : ContinuousSMul Mˣ X where
 #align units.has_continuous_smul Units.continuousSMul
 #align add_units.has_continuous_vadd AddUnits.continuousVAdd
 
+/-- If an action is continuous, then composing this action with a continuous homomorphism gives
+again a continuous action. -/
+@[to_additive]
+theorem MulAction.continuousSMul_compHom
+    {N : Type*} [TopologicalSpace N] [Monoid N] {f : N →* M} (hf : Continuous f) :
+    letI : MulAction N X := MulAction.compHom _ f
+    ContinuousSMul N X := by
+  let _ : MulAction N X := MulAction.compHom _ f
+  exact ⟨(hf.comp continuous_fst).smul continuous_snd⟩
+
 end Monoid
 
 section Group
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
@@ -44,7 +44,7 @@ open Filter
 /-- Class `ContinuousSMul M X` says that the scalar multiplication `(•) : M → X → X`
 is continuous in both arguments. We use the same class for all kinds of multiplicative actions,
 including (semi)modules and algebras. -/
-class ContinuousSMul (M X : Type _) [SMul M X] [TopologicalSpace M] [TopologicalSpace X] :
+class ContinuousSMul (M X : Type*) [SMul M X] [TopologicalSpace M] [TopologicalSpace X] :
     Prop where
   /-- The scalar multiplication `(•)` is continuous. -/
   continuous_smul : Continuous fun p : M × X => p.1 • p.2
@@ -55,7 +55,7 @@ export ContinuousSMul (continuous_smul)
 /-- Class `ContinuousVAdd M X` says that the additive action `(+ᵥ) : M → X → X`
 is continuous in both arguments. We use the same class for all kinds of additive actions,
 including (semi)modules and algebras. -/
-class ContinuousVAdd (M X : Type _) [VAdd M X] [TopologicalSpace M] [TopologicalSpace X] :
+class ContinuousVAdd (M X : Type*) [VAdd M X] [TopologicalSpace M] [TopologicalSpace X] :
     Prop where
   /-- The additive action `(+ᵥ)` is continuous. -/
   continuous_vadd : Continuous fun p : M × X => p.1 +ᵥ p.2
@@ -67,7 +67,7 @@ attribute [to_additive] ContinuousSMul
 
 section Main
 
-variable {M X Y α : Type _} [TopologicalSpace M] [TopologicalSpace X] [TopologicalSpace Y]
+variable {M X Y α : Type*} [TopologicalSpace M] [TopologicalSpace X] [TopologicalSpace Y]
 
 section SMul
 
@@ -177,7 +177,7 @@ instance Prod.continuousSMul [SMul M X] [SMul M Y] [ContinuousSMul M X] [Continu
       (continuous_fst.smul (continuous_snd.comp continuous_snd))⟩
 
 @[to_additive]
-instance {ι : Type _} {γ : ι → Type _} [∀ i, TopologicalSpace (γ i)] [∀ i, SMul M (γ i)]
+instance {ι : Type*} {γ : ι → Type*} [∀ i, TopologicalSpace (γ i)] [∀ i, SMul M (γ i)]
     [∀ i, ContinuousSMul M (γ i)] : ContinuousSMul M (∀ i, γ i) :=
   ⟨continuous_pi fun i =>
       (continuous_fst.smul continuous_snd).comp <|
@@ -187,7 +187,7 @@ end Main
 
 section LatticeOps
 
-variable {ι : Sort _} {M X : Type _} [TopologicalSpace M] [SMul M X]
+variable {ι : Sort*} {M X : Type*} [TopologicalSpace M] [SMul M X]
 
 @[to_additive]
 theorem continuousSMul_sInf {ts : Set (TopologicalSpace X)}
@@ -224,7 +224,7 @@ end LatticeOps
 
 section AddTorsor
 
-variable (G : Type _) (P : Type _) [AddGroup G] [AddTorsor G P] [TopologicalSpace G]
+variable (G : Type*) (P : Type*) [AddGroup G] [AddTorsor G P] [TopologicalSpace G]
 
 variable [PreconnectedSpace G] [TopologicalSpace P] [ContinuousVAdd G P]
 
chore: tidy various files (#5999)
Diff
@@ -45,7 +45,7 @@ open Filter
 is continuous in both arguments. We use the same class for all kinds of multiplicative actions,
 including (semi)modules and algebras. -/
 class ContinuousSMul (M X : Type _) [SMul M X] [TopologicalSpace M] [TopologicalSpace X] :
-  Prop where
+    Prop where
   /-- The scalar multiplication `(•)` is continuous. -/
   continuous_smul : Continuous fun p : M × X => p.1 • p.2
 #align has_continuous_smul ContinuousSMul
@@ -56,7 +56,7 @@ export ContinuousSMul (continuous_smul)
 is continuous in both arguments. We use the same class for all kinds of additive actions,
 including (semi)modules and algebras. -/
 class ContinuousVAdd (M X : Type _) [VAdd M X] [TopologicalSpace M] [TopologicalSpace X] :
-  Prop where
+    Prop where
   /-- The additive action `(+ᵥ)` is continuous. -/
   continuous_vadd : Continuous fun p : M × X => p.1 +ᵥ p.2
 #align has_continuous_vadd ContinuousVAdd
@@ -74,8 +74,8 @@ section SMul
 variable [SMul M X] [ContinuousSMul M X]
 
 @[to_additive]
-instance (priority := 100) ContinuousSMul.continuousConstSMul : ContinuousConstSMul M X
-    where continuous_const_smul _ := continuous_smul.comp (continuous_const.prod_mk continuous_id)
+instance (priority := 100) ContinuousSMul.continuousConstSMul : ContinuousConstSMul M X where
+  continuous_const_smul _ := continuous_smul.comp (continuous_const.prod_mk continuous_id)
 #align has_continuous_smul.has_continuous_const_smul ContinuousSMul.continuousConstSMul
 #align has_continuous_vadd.has_continuous_const_vadd ContinuousVAdd.continuousConstVAdd
 
@@ -123,7 +123,7 @@ theorem Continuous.smul (hf : Continuous f) (hg : Continuous g) : Continuous fun
 #align continuous.vadd Continuous.vadd
 
 /-- If a scalar action is central, then its right action is continuous when its left action is. -/
-@[to_additive "If an additive action is central, then its right action is continuous when its left\n
+@[to_additive "If an additive action is central, then its right action is continuous when its left
 action is."]
 instance ContinuousSMul.op [SMul Mᵐᵒᵖ X] [IsCentralScalar M X] : ContinuousSMul Mᵐᵒᵖ X :=
   ⟨by
@@ -147,8 +147,8 @@ section Monoid
 variable [Monoid M] [MulAction M X] [ContinuousSMul M X]
 
 @[to_additive]
-instance Units.continuousSMul : ContinuousSMul Mˣ X
-    where continuous_smul :=
+instance Units.continuousSMul : ContinuousSMul Mˣ X where
+  continuous_smul :=
     show Continuous ((fun p : M × X => p.fst • p.snd) ∘ fun p : Mˣ × X => (p.1, p.2)) from
       continuous_smul.comp ((Units.continuous_val.comp continuous_fst).prod_mk continuous_snd)
 #align units.has_continuous_smul Units.continuousSMul
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,17 +2,14 @@
 Copyright (c) 2021 Yury Kudryashov. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Yury Kudryashov
-
-! This file was ported from Lean 3 source module topology.algebra.mul_action
-! leanprover-community/mathlib commit d90e4e186f1d18e375dcd4e5b5f6364b01cb3e46
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.Algebra.AddTorsor
 import Mathlib.Topology.Algebra.Constructions
 import Mathlib.GroupTheory.GroupAction.Prod
 import Mathlib.Topology.Algebra.ConstMulAction
 
+#align_import topology.algebra.mul_action from "leanprover-community/mathlib"@"d90e4e186f1d18e375dcd4e5b5f6364b01cb3e46"
+
 /-!
 # Continuous monoid action
 
feat(Topology/Algebra/Group/Basic): product of compact set and closed set is closed (#5471)

Also adds the version for group actions, and the consequence that if we quotient by a compact subgroup then the quotient map is closed.

I also made some syntax tweaks in some places, mainly making use of our great new implicit functions.

Diff
@@ -159,6 +159,20 @@ instance Units.continuousSMul : ContinuousSMul Mˣ X
 
 end Monoid
 
+section Group
+
+variable [Group M] [MulAction M X] [ContinuousSMul M X]
+
+@[to_additive]
+instance Submonoid.continuousSMul {S : Submonoid M} : ContinuousSMul S X where
+  continuous_smul := (continuous_subtype_val.comp continuous_fst).smul continuous_snd
+
+@[to_additive]
+instance Subgroup.continuousSMul {S : Subgroup M} : ContinuousSMul S X where
+  continuous_smul := (continuous_subtype_val.comp continuous_fst).smul continuous_snd
+
+end Group
+
 @[to_additive]
 instance Prod.continuousSMul [SMul M X] [SMul M Y] [ContinuousSMul M X] [ContinuousSMul M Y] :
     ContinuousSMul M (X × Y) :=
chore: fix many typos (#4967)

These are all doc fixes

Diff
@@ -49,7 +49,7 @@ is continuous in both arguments. We use the same class for all kinds of multipli
 including (semi)modules and algebras. -/
 class ContinuousSMul (M X : Type _) [SMul M X] [TopologicalSpace M] [TopologicalSpace X] :
   Prop where
-  /-- The calar multiplication `(•)` is continuous. -/
+  /-- The scalar multiplication `(•)` is continuous. -/
   continuous_smul : Continuous fun p : M × X => p.1 • p.2
 #align has_continuous_smul ContinuousSMul
 
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
@@ -179,32 +179,32 @@ section LatticeOps
 variable {ι : Sort _} {M X : Type _} [TopologicalSpace M] [SMul M X]
 
 @[to_additive]
-theorem continuousSMul_infₛ {ts : Set (TopologicalSpace X)}
-    (h : ∀ t ∈ ts, @ContinuousSMul M X _ _ t) : @ContinuousSMul M X _ _ (infₛ ts) :=
-  -- porting note: {} doesn't work because `infₛ ts` isn't found by TC search. `(_)` finds it by
+theorem continuousSMul_sInf {ts : Set (TopologicalSpace X)}
+    (h : ∀ t ∈ ts, @ContinuousSMul M X _ _ t) : @ContinuousSMul M X _ _ (sInf ts) :=
+  -- porting note: {} doesn't work because `sInf ts` isn't found by TC search. `(_)` finds it by
   -- unification instead.
   @ContinuousSMul.mk M X _ _ (_) <| by
       -- porting note: needs `( :)`
-      rw [← (@infₛ_singleton _ _ ‹TopologicalSpace M›:)]
+      rw [← (@sInf_singleton _ _ ‹TopologicalSpace M›:)]
       exact
-        continuous_infₛ_rng.2 fun t ht =>
-          continuous_infₛ_dom₂ (Eq.refl _) ht
+        continuous_sInf_rng.2 fun t ht =>
+          continuous_sInf_dom₂ (Eq.refl _) ht
             (@ContinuousSMul.continuous_smul _ _ _ _ t (h t ht))
-#align has_continuous_smul_Inf continuousSMul_infₛ
-#align has_continuous_vadd_Inf continuousVAdd_infₛ
+#align has_continuous_smul_Inf continuousSMul_sInf
+#align has_continuous_vadd_Inf continuousVAdd_sInf
 
 @[to_additive]
-theorem continuousSMul_infᵢ {ts' : ι → TopologicalSpace X}
+theorem continuousSMul_iInf {ts' : ι → TopologicalSpace X}
     (h : ∀ i, @ContinuousSMul M X _ _ (ts' i)) : @ContinuousSMul M X _ _ (⨅ i, ts' i) :=
-  continuousSMul_infₛ <| Set.forall_range_iff.mpr h
-#align has_continuous_smul_infi continuousSMul_infᵢ
-#align has_continuous_vadd_infi continuousVAdd_infᵢ
+  continuousSMul_sInf <| Set.forall_range_iff.mpr h
+#align has_continuous_smul_infi continuousSMul_iInf
+#align has_continuous_vadd_infi continuousVAdd_iInf
 
 @[to_additive]
 theorem continuousSMul_inf {t₁ t₂ : TopologicalSpace X} [@ContinuousSMul M X _ _ t₁]
     [@ContinuousSMul M X _ _ t₂] : @ContinuousSMul M X _ _ (t₁ ⊓ t₂) := by
-  rw [inf_eq_infᵢ]
-  refine' continuousSMul_infᵢ fun b => _
+  rw [inf_eq_iInf]
+  refine' continuousSMul_iInf fun b => _
   cases b <;> assumption
 #align has_continuous_smul_inf continuousSMul_inf
 #align has_continuous_vadd_inf continuousVAdd_inf
feat: port Topology.Instances.TrivSqZeroExt (#3275)
Diff
@@ -160,7 +160,7 @@ instance Units.continuousSMul : ContinuousSMul Mˣ X
 end Monoid
 
 @[to_additive]
-instance [SMul M X] [SMul M Y] [ContinuousSMul M X] [ContinuousSMul M Y] :
+instance Prod.continuousSMul [SMul M X] [SMul M Y] [ContinuousSMul M X] [ContinuousSMul M Y] :
     ContinuousSMul M (X × Y) :=
   ⟨(continuous_fst.smul (continuous_fst.comp continuous_snd)).prod_mk
       (continuous_fst.smul (continuous_snd.comp continuous_snd))⟩
fix: missing attribute in to_additive (#2252)
Diff
@@ -119,7 +119,7 @@ theorem ContinuousOn.smul (hf : ContinuousOn f s) (hg : ContinuousOn g s) :
 #align continuous_on.smul ContinuousOn.smul
 #align continuous_on.vadd ContinuousOn.vadd
 
-@[continuity, to_additive]
+@[to_additive (attr := continuity)]
 theorem Continuous.smul (hf : Continuous f) (hg : Continuous g) : Continuous fun x => f x • g x :=
   continuous_smul.comp (hf.prod_mk hg)
 #align continuous.smul Continuous.smul
feat: port Topology.Algebra.MulAction (#2013)

Co-authored-by: Moritz Doll <moritz.doll@googlemail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>

Dependencies 9 + 324

325 files ported (97.3%)
143767 lines ported (96.6%)
Show graph

The unported dependencies are