topology.algebra.mul_action
⟷
Mathlib.Topology.Algebra.MulAction
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(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)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -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
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -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"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -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 }
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -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
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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 :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/e3fb84046afd187b710170887195d50bada934ee
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce7e9d53d4bbc38065db3b595cd5bd73c323bc1d
@@ -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 }
mathlib commit https://github.com/leanprover-community/mathlib/commit/9da1b3534b65d9661eb8f42443598a92bbb49211
@@ -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₁]
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
Inseparable.{smul,mul,inv}
(#12142)
Add dot notation lemmas
for algebraic operations on Specializes
and Inseparable
.
@@ -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
@@ -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)
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)
@@ -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
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.
@@ -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
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -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 =>
@@ -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
Inducing.continuousSMul
(#9713)
Inducing.continuousSMul
and Inducing.continuousVAdd
;Units.continuousSMul
and Inducing.continuousMul
;Submonoid.continuousSMul
from a submonoid of a group
to a submonoid of a monoid;Submonoid.continuousSMul
in Subgroup.continuousSMul
.@@ -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
@@ -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
@@ -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
closure {1}
in topological groups does not change closed and open subsets (#7858)
@@ -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
@@ -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
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -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]
@@ -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
@@ -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
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.
@@ -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) :=
@@ -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
sSup
/iSup
(#3938)
As discussed on Zulip
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>
@@ -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
@@ -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))⟩
@@ -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
Co-authored-by: Moritz Doll <moritz.doll@googlemail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
The unported dependencies are