topology.algebra.monoid
⟷
Mathlib.Topology.Algebra.Monoid
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)
(last sync)
@[to_additive, simp]
to the correct order (#19169)
Whilst making some files, I noticed that there is some lemmas that have the wrong order for to_additive
and simp
.
@@ -698,14 +698,14 @@ variables [has_mul X] [has_continuous_mul X]
@[to_additive "The continuous map `λ y, y + x"]
protected def mul_right (x : X) : C(X, X) := mk _ (continuous_mul_right x)
-@[to_additive, simp]
+@[simp, to_additive]
lemma coe_mul_right (x : X) : ⇑(continuous_map.mul_right x) = λ y, y * x := rfl
/-- The continuous map `λ y, x * y` -/
@[to_additive "The continuous map `λ y, x + y"]
protected def mul_left (x : X) : C(X, X) := mk _ (continuous_mul_left x)
-@[to_additive, simp]
+@[simp, to_additive]
lemma coe_mul_left (x : X) : ⇑(continuous_map.mul_left x) = λ y, x * y := rfl
end continuous_map
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
A few miscellaneous lemmas about continuous functions needed for my Poisson summation project. Companion mathlib4 PR (blank for now) at [#2369](https://github.com/leanprover-community/mathlib4/pull/2369).
@@ -7,6 +7,7 @@ import algebra.big_operators.finprod
import order.filter.pointwise
import topology.algebra.mul_action
import algebra.big_operators.pi
+import topology.continuous_function.basic
/-!
# Theory of topological monoids
@@ -688,3 +689,23 @@ by { rw ← Inf_range, exact has_continuous_mul_Inf (set.forall_range_iff.mpr h'
by { rw inf_eq_infi, refine has_continuous_mul_infi (λ b, _), cases b; assumption }
end lattice_ops
+
+namespace continuous_map
+
+variables [has_mul X] [has_continuous_mul X]
+
+/-- The continuous map `λ y, y * x` -/
+@[to_additive "The continuous map `λ y, y + x"]
+protected def mul_right (x : X) : C(X, X) := mk _ (continuous_mul_right x)
+
+@[to_additive, simp]
+lemma coe_mul_right (x : X) : ⇑(continuous_map.mul_right x) = λ y, y * x := rfl
+
+/-- The continuous map `λ y, x * y` -/
+@[to_additive "The continuous map `λ y, x + y"]
+protected def mul_left (x : X) : C(X, X) := mk _ (continuous_mul_left x)
+
+@[to_additive, simp]
+lemma coe_mul_left (x : X) : ⇑(continuous_map.mul_left x) = λ y, x * y := rfl
+
+end continuous_map
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(first ported)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -652,7 +652,7 @@ theorem continuousOn_list_prod {f : ι → X → M} (l : List ι) {t : Set X}
@[continuity, to_additive]
theorem continuous_pow : ∀ n : ℕ, Continuous fun a : M => a ^ n
| 0 => by simpa using continuous_const
- | k + 1 => by simp only [pow_succ]; exact continuous_id.mul (continuous_pow _)
+ | k + 1 => by simp only [pow_succ']; exact continuous_id.mul (continuous_pow _)
#align continuous_pow continuous_pow
#align continuous_nsmul continuous_nsmul
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -642,7 +642,7 @@ theorem continuousOn_list_prod {f : ι → X → M} (l : List ι) {t : Set X}
rw [continuousWithinAt_iff_continuousAt_restrict _ hx]
refine' tendsto_list_prod _ fun i hi => _
specialize h i hi x hx
- rw [continuousWithinAt_iff_continuousAt_restrict _ hx] at h
+ rw [continuousWithinAt_iff_continuousAt_restrict _ hx] at h
exact h
#align continuous_on_list_prod continuousOn_list_prod
#align continuous_on_list_sum continuousOn_list_sum
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,11 +3,11 @@ Copyright (c) 2017 Johannes Hölzl. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Mario Carneiro
-/
-import Mathbin.Algebra.BigOperators.Finprod
-import Mathbin.Order.Filter.Pointwise
-import Mathbin.Topology.Algebra.MulAction
-import Mathbin.Algebra.BigOperators.Pi
-import Mathbin.Topology.ContinuousFunction.Basic
+import Algebra.BigOperators.Finprod
+import Order.Filter.Pointwise
+import Topology.Algebra.MulAction
+import Algebra.BigOperators.Pi
+import Topology.ContinuousFunction.Basic
#align_import topology.algebra.monoid from "leanprover-community/mathlib"@"1ac8d4304efba9d03fa720d06516fac845aa5353"
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -60,7 +60,7 @@ Continuity in only the left/right argument can be stated using
`has_continuous_const_smul α α`/`has_continuous_const_smul αᵐᵒᵖ α`. -/
@[to_additive]
class ContinuousMul (M : Type u) [TopologicalSpace M] [Mul M] : Prop where
- continuous_mul : Continuous fun p : M × M => p.1 * p.2
+ continuous_hMul : Continuous fun p : M × M => p.1 * p.2
#align has_continuous_mul ContinuousMul
#align has_continuous_add ContinuousAdd
-/
@@ -76,7 +76,7 @@ instance : ContinuousMul Mᵒᵈ :=
#print continuous_mul /-
@[to_additive]
theorem continuous_mul : Continuous fun p : M × M => p.1 * p.2 :=
- ContinuousMul.continuous_mul
+ ContinuousMul.continuous_hMul
#align continuous_mul continuous_mul
#align continuous_add continuous_add
-/
@@ -136,7 +136,7 @@ theorem ContinuousOn.mul {f g : X → M} {s : Set X} (hf : ContinuousOn f s) (hg
#print tendsto_mul /-
@[to_additive]
theorem tendsto_mul {a b : M} : Tendsto (fun p : M × M => p.fst * p.snd) (𝓝 (a, b)) (𝓝 (a * b)) :=
- continuous_iff_continuousAt.mp ContinuousMul.continuous_mul (a, b)
+ continuous_iff_continuousAt.mp ContinuousMul.continuous_hMul (a, b)
#align tendsto_mul tendsto_mul
#align tendsto_add tendsto_add
-/
@@ -283,7 +283,7 @@ instance [TopologicalSpace N] [Mul N] [ContinuousMul N] : ContinuousMul (M × N)
@[to_additive]
instance Pi.continuousMul {C : ι → Type _} [∀ i, TopologicalSpace (C i)] [∀ i, Mul (C i)]
[∀ i, ContinuousMul (C i)] : ContinuousMul (∀ i, C i)
- where continuous_mul :=
+ where continuous_hMul :=
continuous_pi fun i => (continuous_apply i).fst'.mul (continuous_apply i).snd'
#align pi.has_continuous_mul Pi.continuousMul
#align pi.has_continuous_add Pi.continuousAdd
@@ -475,7 +475,7 @@ variable [TopologicalSpace M] [Monoid M] [ContinuousMul M]
theorem Submonoid.top_closure_mul_self_subset (s : Submonoid M) :
closure (s : Set M) * closure s ⊆ closure s :=
image2_subset_iff.2 fun x hx y hy =>
- map_mem_closure₂ continuous_mul hx hy fun a ha b hb => s.mul_mem ha hb
+ map_mem_closure₂ continuous_mul hx hy fun a ha b hb => s.hMul_mem ha hb
#align submonoid.top_closure_mul_self_subset Submonoid.top_closure_mul_self_subset
#align add_submonoid.top_closure_add_self_subset AddSubmonoid.top_closure_add_self_subset
-/
@@ -499,7 +499,7 @@ def Submonoid.topologicalClosure (s : Submonoid M) : Submonoid M
where
carrier := closure (s : Set M)
one_mem' := subset_closure s.one_mem
- mul_mem' a b ha hb := s.top_closure_mul_self_subset ⟨a, b, ha, hb, rfl⟩
+ hMul_mem' a b ha hb := s.top_closure_mul_self_subset ⟨a, b, ha, hb, rfl⟩
#align submonoid.topological_closure Submonoid.topologicalClosure
#align add_submonoid.topological_closure AddSubmonoid.topologicalClosure
-/
@@ -969,7 +969,7 @@ instance [TopologicalSpace M] [Mul M] [ContinuousMul M] : ContinuousAdd (Additiv
where continuous_add := @continuous_mul M _ _ _
instance [TopologicalSpace M] [Add M] [ContinuousAdd M] : ContinuousMul (Multiplicative M)
- where continuous_mul := @continuous_add M _ _ _
+ where continuous_hMul := @continuous_add M _ _ _
section LatticeOps
@@ -980,9 +980,9 @@ variable {ι' : Sort _} [Mul M]
theorem continuousMul_sInf {ts : Set (TopologicalSpace M)} (h : ∀ t ∈ ts, @ContinuousMul M t _) :
@ContinuousMul M (sInf ts) _ :=
{
- continuous_mul :=
+ continuous_hMul :=
continuous_sInf_rng.2 fun t ht =>
- continuous_sInf_dom₂ ht ht (@ContinuousMul.continuous_mul M t _ (h t ht)) }
+ continuous_sInf_dom₂ ht ht (@ContinuousMul.continuous_hMul M t _ (h t ht)) }
#align has_continuous_mul_Inf continuousMul_sInf
#align has_continuous_add_Inf continuousAdd_sInf
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,11 +2,6 @@
Copyright (c) 2017 Johannes Hölzl. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Mario Carneiro
-
-! This file was ported from Lean 3 source module topology.algebra.monoid
-! leanprover-community/mathlib commit 1ac8d4304efba9d03fa720d06516fac845aa5353
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Algebra.BigOperators.Finprod
import Mathbin.Order.Filter.Pointwise
@@ -14,6 +9,8 @@ import Mathbin.Topology.Algebra.MulAction
import Mathbin.Algebra.BigOperators.Pi
import Mathbin.Topology.ContinuousFunction.Basic
+#align_import topology.algebra.monoid from "leanprover-community/mathlib"@"1ac8d4304efba9d03fa720d06516fac845aa5353"
+
/-!
# Theory of topological monoids
mathlib commit https://github.com/leanprover-community/mathlib/commit/9f55d0d4363ae59948c33864cbc52e0b12e0e8ce
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Mario Carneiro
! This file was ported from Lean 3 source module topology.algebra.monoid
-! leanprover-community/mathlib commit 6efec6bb9fcaed3cf1baaddb2eaadd8a2a06679c
+! leanprover-community/mathlib commit 1ac8d4304efba9d03fa720d06516fac845aa5353
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -1024,7 +1024,7 @@ protected def mulRight (x : X) : C(X, X) :=
-/
#print ContinuousMap.coe_mulRight /-
-@[to_additive, simp]
+@[simp, to_additive]
theorem coe_mulRight (x : X) : ⇑(ContinuousMap.mulRight x) = fun y => y * x :=
rfl
#align continuous_map.coe_mul_right ContinuousMap.coe_mulRight
@@ -1041,7 +1041,7 @@ protected def mulLeft (x : X) : C(X, X) :=
-/
#print ContinuousMap.coe_mulLeft /-
-@[to_additive, simp]
+@[simp, to_additive]
theorem coe_mulLeft (x : X) : ⇑(ContinuousMap.mulLeft x) = fun y => x * y :=
rfl
#align continuous_map.coe_mul_left ContinuousMap.coe_mulLeft
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -76,11 +76,13 @@ variable [TopologicalSpace M] [Mul M] [ContinuousMul M]
instance : ContinuousMul Mᵒᵈ :=
‹ContinuousMul M›
+#print continuous_mul /-
@[to_additive]
theorem continuous_mul : Continuous fun p : M × M => p.1 * p.2 :=
ContinuousMul.continuous_mul
#align continuous_mul continuous_mul
#align continuous_add continuous_add
+-/
#print ContinuousMul.to_continuousSMul /-
@[to_additive]
@@ -100,12 +102,14 @@ instance ContinuousMul.to_continuousSMul_op : ContinuousSMul Mᵐᵒᵖ M :=
#align has_continuous_add.to_has_continuous_vadd_op ContinuousAdd.to_continuousVAdd_op
-/
+#print Continuous.mul /-
@[continuity, to_additive]
theorem Continuous.mul {f g : X → M} (hf : Continuous f) (hg : Continuous g) :
Continuous fun x => f x * g x :=
continuous_mul.comp (hf.prod_mk hg : _)
#align continuous.mul Continuous.mul
#align continuous.add Continuous.add
+-/
#print continuous_mul_left /-
@[to_additive]
@@ -123,46 +127,59 @@ theorem continuous_mul_right (a : M) : Continuous fun b : M => b * a :=
#align continuous_add_right continuous_add_right
-/
+#print ContinuousOn.mul /-
@[to_additive]
theorem ContinuousOn.mul {f g : X → M} {s : Set X} (hf : ContinuousOn f s) (hg : ContinuousOn g s) :
ContinuousOn (fun x => f x * g x) s :=
(continuous_mul.comp_continuousOn (hf.Prod hg) : _)
#align continuous_on.mul ContinuousOn.mul
#align continuous_on.add ContinuousOn.add
+-/
+#print tendsto_mul /-
@[to_additive]
theorem tendsto_mul {a b : M} : Tendsto (fun p : M × M => p.fst * p.snd) (𝓝 (a, b)) (𝓝 (a * b)) :=
continuous_iff_continuousAt.mp ContinuousMul.continuous_mul (a, b)
#align tendsto_mul tendsto_mul
#align tendsto_add tendsto_add
+-/
+#print Filter.Tendsto.mul /-
@[to_additive]
theorem Filter.Tendsto.mul {f g : α → M} {x : Filter α} {a b : M} (hf : Tendsto f x (𝓝 a))
(hg : Tendsto g x (𝓝 b)) : Tendsto (fun x => f x * g x) x (𝓝 (a * b)) :=
tendsto_mul.comp (hf.prod_mk_nhds hg)
#align filter.tendsto.mul Filter.Tendsto.mul
#align filter.tendsto.add Filter.Tendsto.add
+-/
+#print Filter.Tendsto.const_mul /-
@[to_additive]
theorem Filter.Tendsto.const_mul (b : M) {c : M} {f : α → M} {l : Filter α}
(h : Tendsto (fun k : α => f k) l (𝓝 c)) : Tendsto (fun k : α => b * f k) l (𝓝 (b * c)) :=
tendsto_const_nhds.mul h
#align filter.tendsto.const_mul Filter.Tendsto.const_mul
#align filter.tendsto.const_add Filter.Tendsto.const_add
+-/
+#print Filter.Tendsto.mul_const /-
@[to_additive]
theorem Filter.Tendsto.mul_const (b : M) {c : M} {f : α → M} {l : Filter α}
(h : Tendsto (fun k : α => f k) l (𝓝 c)) : Tendsto (fun k : α => f k * b) l (𝓝 (c * b)) :=
h.mul tendsto_const_nhds
#align filter.tendsto.mul_const Filter.Tendsto.mul_const
#align filter.tendsto.add_const Filter.Tendsto.add_const
+-/
+#print le_nhds_mul /-
@[to_additive]
theorem le_nhds_mul (a b : M) : 𝓝 a * 𝓝 b ≤ 𝓝 (a * b) := by
rw [← map₂_mul, ← map_uncurry_prod, ← nhds_prod_eq]; exact continuous_mul.tendsto _
#align le_nhds_mul le_nhds_mul
#align le_nhds_add le_nhds_add
+-/
+#print nhds_one_mul_nhds /-
@[simp, to_additive]
theorem nhds_one_mul_nhds {M} [MulOneClass M] [TopologicalSpace M] [ContinuousMul M] (a : M) :
𝓝 (1 : M) * 𝓝 a = 𝓝 a :=
@@ -170,7 +187,9 @@ theorem nhds_one_mul_nhds {M} [MulOneClass M] [TopologicalSpace M] [ContinuousMu
le_mul_of_one_le_left' <| pure_le_nhds 1
#align nhds_one_mul_nhds nhds_one_mul_nhds
#align nhds_zero_add_nhds nhds_zero_add_nhds
+-/
+#print nhds_mul_nhds_one /-
@[simp, to_additive]
theorem nhds_mul_nhds_one {M} [MulOneClass M] [TopologicalSpace M] [ContinuousMul M] (a : M) :
𝓝 a * 𝓝 1 = 𝓝 a :=
@@ -178,6 +197,7 @@ theorem nhds_mul_nhds_one {M} [MulOneClass M] [TopologicalSpace M] [ContinuousMu
le_mul_of_one_le_right' <| pure_le_nhds 1
#align nhds_mul_nhds_one nhds_mul_nhds_one
#align nhds_add_nhds_zero nhds_add_nhds_zero
+-/
section tendsto_nhds
@@ -222,6 +242,7 @@ theorem Filter.TendstoNhdsWithinIio.mul_const [MulPosStrictMono 𝕜] [MulPosRef
end tendsto_nhds
+#print Filter.Tendsto.units /-
/-- Construct a unit from limits of units and their inverses. -/
@[to_additive Filter.Tendsto.addUnits
"Construct an additive unit from limits of additive units\nand their negatives.",
@@ -236,20 +257,25 @@ def Filter.Tendsto.units [TopologicalSpace N] [Monoid N] [ContinuousMul N] [T2Sp
inv_val := by symm; simpa using h₂.mul h₁
#align filter.tendsto.units Filter.Tendsto.units
#align filter.tendsto.add_units Filter.Tendsto.addUnits
+-/
+#print ContinuousAt.mul /-
@[to_additive]
theorem ContinuousAt.mul {f g : X → M} {x : X} (hf : ContinuousAt f x) (hg : ContinuousAt g x) :
ContinuousAt (fun x => f x * g x) x :=
hf.mul hg
#align continuous_at.mul ContinuousAt.mul
#align continuous_at.add ContinuousAt.add
+-/
+#print ContinuousWithinAt.mul /-
@[to_additive]
theorem ContinuousWithinAt.mul {f g : X → M} {s : Set X} {x : X} (hf : ContinuousWithinAt f s x)
(hg : ContinuousWithinAt g s x) : ContinuousWithinAt (fun x => f x * g x) s x :=
hf.mul hg
#align continuous_within_at.mul ContinuousWithinAt.mul
#align continuous_within_at.add ContinuousWithinAt.add
+-/
@[to_additive]
instance [TopologicalSpace N] [Mul N] [ContinuousMul N] : ContinuousMul (M × N) :=
@@ -290,6 +316,7 @@ open scoped Filter
open Function
+#print ContinuousMul.of_nhds_one /-
@[to_additive]
theorem ContinuousMul.of_nhds_one {M : Type u} [Monoid M] [TopologicalSpace M]
(hmul : Tendsto (uncurry ((· * ·) : M → M → M)) (𝓝 1 ×ᶠ 𝓝 1) <| 𝓝 1)
@@ -315,7 +342,9 @@ theorem ContinuousMul.of_nhds_one {M : Type u} [Monoid M] [TopologicalSpace M]
rw [← Filter.map_map, ← hright, hleft y₀, Filter.map_map, key₂, ← hleft]⟩
#align has_continuous_mul.of_nhds_one ContinuousMul.of_nhds_one
#align has_continuous_add.of_nhds_zero ContinuousAdd.of_nhds_zero
+-/
+#print continuousMul_of_comm_of_nhds_one /-
@[to_additive]
theorem continuousMul_of_comm_of_nhds_one (M : Type u) [CommMonoid M] [TopologicalSpace M]
(hmul : Tendsto (uncurry ((· * ·) : M → M → M)) (𝓝 1 ×ᶠ 𝓝 1) (𝓝 1))
@@ -326,6 +355,7 @@ theorem continuousMul_of_comm_of_nhds_one (M : Type u) [CommMonoid M] [Topologic
simp_rw [mul_comm, hleft x₀]
#align has_continuous_mul_of_comm_of_nhds_one continuousMul_of_comm_of_nhds_one
#align has_continuous_add_of_comm_of_nhds_zero continuousAdd_of_comm_of_nhds_zero
+-/
end ContinuousMul
@@ -333,12 +363,15 @@ section PointwiseLimits
variable (M₁ M₂ : Type _) [TopologicalSpace M₂] [T2Space M₂]
+#print isClosed_setOf_map_one /-
@[to_additive]
theorem isClosed_setOf_map_one [One M₁] [One M₂] : IsClosed {f : M₁ → M₂ | f 1 = 1} :=
isClosed_eq (continuous_apply 1) continuous_const
#align is_closed_set_of_map_one isClosed_setOf_map_one
#align is_closed_set_of_map_zero isClosed_setOf_map_zero
+-/
+#print isClosed_setOf_map_mul /-
@[to_additive]
theorem isClosed_setOf_map_mul [Mul M₁] [Mul M₂] [ContinuousMul M₂] :
IsClosed {f : M₁ → M₂ | ∀ x y, f (x * y) = f x * f y} :=
@@ -350,10 +383,12 @@ theorem isClosed_setOf_map_mul [Mul M₁] [Mul M₂] [ContinuousMul M₂] :
isClosed_eq (continuous_apply _) ((continuous_apply _).mul (continuous_apply _))
#align is_closed_set_of_map_mul isClosed_setOf_map_mul
#align is_closed_set_of_map_add isClosed_setOf_map_add
+-/
variable {M₁ M₂} [MulOneClass M₁] [MulOneClass M₂] [ContinuousMul M₂] {F : Type _}
[MonoidHomClass F M₁ M₂] {l : Filter α}
+#print monoidHomOfMemClosureRangeCoe /-
/-- Construct a bundled monoid homomorphism `M₁ →* M₂` from a function `f` and a proof that it
belongs to the closure of the range of the coercion from `M₁ →* M₂` (or another type of bundled
homomorphisms that has a `monoid_hom_class` instance) to `M₁ → M₂`. -/
@@ -368,7 +403,9 @@ def monoidHomOfMemClosureRangeCoe (f : M₁ → M₂)
map_mul' := (isClosed_setOf_map_mul M₁ M₂).closure_subset_iff.2 (range_subset_iff.2 map_mul) hf
#align monoid_hom_of_mem_closure_range_coe monoidHomOfMemClosureRangeCoe
#align add_monoid_hom_of_mem_closure_range_coe addMonoidHomOfMemClosureRangeCoe
+-/
+#print monoidHomOfTendsto /-
/-- Construct a bundled monoid homomorphism from a pointwise limit of monoid homomorphisms. -/
@[to_additive
"Construct a bundled additive monoid homomorphism from a pointwise limit of additive\nmonoid homomorphisms",
@@ -379,17 +416,21 @@ def monoidHomOfTendsto (f : M₁ → M₂) (g : α → F) [l.ne_bot]
mem_closure_of_tendsto h <| eventually_of_forall fun a => mem_range_self _
#align monoid_hom_of_tendsto monoidHomOfTendsto
#align add_monoid_hom_of_tendsto addMonoidHomOfTendsto
+-/
variable (M₁ M₂)
+#print MonoidHom.isClosed_range_coe /-
@[to_additive]
theorem MonoidHom.isClosed_range_coe : IsClosed (range (coeFn : (M₁ →* M₂) → M₁ → M₂)) :=
isClosed_of_closure_subset fun f hf => ⟨monoidHomOfMemClosureRangeCoe f hf, rfl⟩
#align monoid_hom.is_closed_range_coe MonoidHom.isClosed_range_coe
#align add_monoid_hom.is_closed_range_coe AddMonoidHom.isClosed_range_coe
+-/
end PointwiseLimits
+#print Inducing.continuousMul /-
@[to_additive]
theorem Inducing.continuousMul {M N F : Type _} [Mul M] [Mul N] [MulHomClass F M N]
[TopologicalSpace M] [TopologicalSpace N] [ContinuousMul N] (f : F) (hf : Inducing f) :
@@ -398,7 +439,9 @@ theorem Inducing.continuousMul {M N F : Type _} [Mul M] [Mul N] [MulHomClass F M
simpa only [(· ∘ ·), map_mul f] using hf.continuous.fst'.mul hf.continuous.snd'⟩
#align inducing.has_continuous_mul Inducing.continuousMul
#align inducing.has_continuous_add Inducing.continuousAdd
+-/
+#print continuousMul_induced /-
@[to_additive]
theorem continuousMul_induced {M N F : Type _} [Mul M] [Mul N] [MulHomClass F M N]
[TopologicalSpace N] [ContinuousMul N] (f : F) : @ContinuousMul M (induced f ‹_›) _ :=
@@ -406,25 +449,31 @@ theorem continuousMul_induced {M N F : Type _} [Mul M] [Mul N] [MulHomClass F M
Inducing.continuousMul f ⟨rfl⟩
#align has_continuous_mul_induced continuousMul_induced
#align has_continuous_add_induced continuousAdd_induced
+-/
+#print Subsemigroup.continuousMul /-
@[to_additive]
instance Subsemigroup.continuousMul [TopologicalSpace M] [Semigroup M] [ContinuousMul M]
(S : Subsemigroup M) : ContinuousMul S :=
Inducing.continuousMul (⟨coe, fun _ _ => rfl⟩ : MulHom S M) ⟨rfl⟩
#align subsemigroup.has_continuous_mul Subsemigroup.continuousMul
#align add_subsemigroup.has_continuous_add AddSubsemigroup.continuousAdd
+-/
+#print Submonoid.continuousMul /-
@[to_additive]
instance Submonoid.continuousMul [TopologicalSpace M] [Monoid M] [ContinuousMul M]
(S : Submonoid M) : ContinuousMul S :=
S.toSubsemigroup.ContinuousMul
#align submonoid.has_continuous_mul Submonoid.continuousMul
#align add_submonoid.has_continuous_add AddSubmonoid.continuousAdd
+-/
section ContinuousMul
variable [TopologicalSpace M] [Monoid M] [ContinuousMul M]
+#print Submonoid.top_closure_mul_self_subset /-
@[to_additive]
theorem Submonoid.top_closure_mul_self_subset (s : Submonoid M) :
closure (s : Set M) * closure s ⊆ closure s :=
@@ -432,7 +481,9 @@ theorem Submonoid.top_closure_mul_self_subset (s : Submonoid M) :
map_mem_closure₂ continuous_mul hx hy fun a ha b hb => s.mul_mem ha hb
#align submonoid.top_closure_mul_self_subset Submonoid.top_closure_mul_self_subset
#align add_submonoid.top_closure_add_self_subset AddSubmonoid.top_closure_add_self_subset
+-/
+#print Submonoid.top_closure_mul_self_eq /-
@[to_additive]
theorem Submonoid.top_closure_mul_self_eq (s : Submonoid M) :
closure (s : Set M) * closure s = closure s :=
@@ -440,7 +491,9 @@ theorem Submonoid.top_closure_mul_self_eq (s : Submonoid M) :
⟨x, 1, hx, subset_closure s.one_mem, mul_one _⟩
#align submonoid.top_closure_mul_self_eq Submonoid.top_closure_mul_self_eq
#align add_submonoid.top_closure_add_self_eq AddSubmonoid.top_closure_add_self_eq
+-/
+#print Submonoid.topologicalClosure /-
/-- The (topological-space) closure of a submonoid of a space `M` with `has_continuous_mul` is
itself a submonoid. -/
@[to_additive
@@ -452,26 +505,34 @@ def Submonoid.topologicalClosure (s : Submonoid M) : Submonoid M
mul_mem' a b ha hb := s.top_closure_mul_self_subset ⟨a, b, ha, hb, rfl⟩
#align submonoid.topological_closure Submonoid.topologicalClosure
#align add_submonoid.topological_closure AddSubmonoid.topologicalClosure
+-/
+#print Submonoid.le_topologicalClosure /-
@[to_additive]
theorem Submonoid.le_topologicalClosure (s : Submonoid M) : s ≤ s.topologicalClosure :=
subset_closure
#align submonoid.le_topological_closure Submonoid.le_topologicalClosure
#align add_submonoid.le_topological_closure AddSubmonoid.le_topologicalClosure
+-/
+#print Submonoid.isClosed_topologicalClosure /-
@[to_additive]
theorem Submonoid.isClosed_topologicalClosure (s : Submonoid M) :
IsClosed (s.topologicalClosure : Set M) := by convert isClosed_closure
#align submonoid.is_closed_topological_closure Submonoid.isClosed_topologicalClosure
#align add_submonoid.is_closed_topological_closure AddSubmonoid.isClosed_topologicalClosure
+-/
+#print Submonoid.topologicalClosure_minimal /-
@[to_additive]
theorem Submonoid.topologicalClosure_minimal (s : Submonoid M) {t : Submonoid M} (h : s ≤ t)
(ht : IsClosed (t : Set M)) : s.topologicalClosure ≤ t :=
closure_minimal h ht
#align submonoid.topological_closure_minimal Submonoid.topologicalClosure_minimal
#align add_submonoid.topological_closure_minimal AddSubmonoid.topologicalClosure_minimal
+-/
+#print Submonoid.commMonoidTopologicalClosure /-
/-- If a submonoid of a topological monoid is commutative, then so is its topological closure. -/
@[to_additive
"If a submonoid of an additive topological monoid is commutative, then so is its\ntopological closure."]
@@ -486,7 +547,9 @@ def Submonoid.commMonoidTopologicalClosure [T2Space M] (s : Submonoid M)
eqOn_closure₂ this continuous_mul (continuous_snd.mul continuous_fst) x hx y hy }
#align submonoid.comm_monoid_topological_closure Submonoid.commMonoidTopologicalClosure
#align add_submonoid.add_comm_monoid_topological_closure AddSubmonoid.addCommMonoidTopologicalClosure
+-/
+#print exists_open_nhds_one_split /-
@[to_additive exists_open_nhds_zero_half]
theorem exists_open_nhds_one_split {s : Set M} (hs : s ∈ 𝓝 (1 : M)) :
∃ V : Set M, IsOpen V ∧ (1 : M) ∈ V ∧ ∀ v ∈ V, ∀ w ∈ V, v * w ∈ s :=
@@ -496,7 +559,9 @@ theorem exists_open_nhds_one_split {s : Set M} (hs : s ∈ 𝓝 (1 : M)) :
simpa only [prod_subset_iff] using exists_nhds_square this
#align exists_open_nhds_one_split exists_open_nhds_one_split
#align exists_open_nhds_zero_half exists_open_nhds_zero_half
+-/
+#print exists_nhds_one_split /-
@[to_additive exists_nhds_zero_half]
theorem exists_nhds_one_split {s : Set M} (hs : s ∈ 𝓝 (1 : M)) :
∃ V ∈ 𝓝 (1 : M), ∀ v ∈ V, ∀ w ∈ V, v * w ∈ s :=
@@ -504,7 +569,9 @@ theorem exists_nhds_one_split {s : Set M} (hs : s ∈ 𝓝 (1 : M)) :
⟨V, IsOpen.mem_nhds Vo V1, hV⟩
#align exists_nhds_one_split exists_nhds_one_split
#align exists_nhds_zero_half exists_nhds_zero_half
+-/
+#print exists_nhds_one_split4 /-
@[to_additive exists_nhds_zero_quarter]
theorem exists_nhds_one_split4 {u : Set M} (hu : u ∈ 𝓝 (1 : M)) :
∃ V ∈ 𝓝 (1 : M), ∀ {v w s t}, v ∈ V → w ∈ V → s ∈ V → t ∈ V → v * w * s * t ∈ u :=
@@ -516,7 +583,9 @@ theorem exists_nhds_one_split4 {u : Set M} (hu : u ∈ 𝓝 (1 : M)) :
simpa only [mul_assoc] using h _ (h' v v_in w w_in) _ (h' s s_in t t_in)
#align exists_nhds_one_split4 exists_nhds_one_split4
#align exists_nhds_zero_quarter exists_nhds_zero_quarter
+-/
+#print exists_open_nhds_one_mul_subset /-
/-- Given a neighborhood `U` of `1` there is an open neighborhood `V` of `1`
such that `VV ⊆ U`. -/
@[to_additive
@@ -530,14 +599,18 @@ theorem exists_open_nhds_one_mul_subset {U : Set M} (hU : U ∈ 𝓝 (1 : M)) :
exact hV _ hx _ hy
#align exists_open_nhds_one_mul_subset exists_open_nhds_one_mul_subset
#align exists_open_nhds_zero_add_subset exists_open_nhds_zero_add_subset
+-/
+#print IsCompact.mul /-
@[to_additive]
theorem IsCompact.mul {s t : Set M} (hs : IsCompact s) (ht : IsCompact t) : IsCompact (s * t) := by
rw [← image_mul_prod]; exact (hs.prod ht).image continuous_mul
#align is_compact.mul IsCompact.mul
#align is_compact.add IsCompact.add
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print tendsto_list_prod /-
@[to_additive]
theorem tendsto_list_prod {f : ι → α → M} {x : Filter α} {a : ι → M} :
∀ l : List ι,
@@ -551,7 +624,9 @@ theorem tendsto_list_prod {f : ι → α → M} {x : Filter α} {a : ι → M} :
(tendsto_list_prod l fun c hc => h c (List.mem_cons_of_mem _ hc))
#align tendsto_list_prod tendsto_list_prod
#align tendsto_list_sum tendsto_list_sum
+-/
+#print continuous_list_prod /-
@[to_additive]
theorem continuous_list_prod {f : ι → X → M} (l : List ι) (h : ∀ i ∈ l, Continuous (f i)) :
Continuous fun a => (l.map fun i => f i a).Prod :=
@@ -559,7 +634,9 @@ theorem continuous_list_prod {f : ι → X → M} (l : List ι) (h : ∀ i ∈ l
tendsto_list_prod l fun c hc => continuous_iff_continuousAt.1 (h c hc) x
#align continuous_list_prod continuous_list_prod
#align continuous_list_sum continuous_list_sum
+-/
+#print continuousOn_list_prod /-
@[to_additive]
theorem continuousOn_list_prod {f : ι → X → M} (l : List ι) {t : Set X}
(h : ∀ i ∈ l, ContinuousOn (f i) t) : ContinuousOn (fun a => (l.map fun i => f i a).Prod) t :=
@@ -572,69 +649,91 @@ theorem continuousOn_list_prod {f : ι → X → M} (l : List ι) {t : Set X}
exact h
#align continuous_on_list_prod continuousOn_list_prod
#align continuous_on_list_sum continuousOn_list_sum
+-/
+#print continuous_pow /-
@[continuity, to_additive]
theorem continuous_pow : ∀ n : ℕ, Continuous fun a : M => a ^ n
| 0 => by simpa using continuous_const
| k + 1 => by simp only [pow_succ]; exact continuous_id.mul (continuous_pow _)
#align continuous_pow continuous_pow
#align continuous_nsmul continuous_nsmul
+-/
+#print AddMonoid.continuousConstSMul_nat /-
instance AddMonoid.continuousConstSMul_nat {A} [AddMonoid A] [TopologicalSpace A]
[ContinuousAdd A] : ContinuousConstSMul ℕ A :=
⟨continuous_nsmul⟩
#align add_monoid.has_continuous_const_smul_nat AddMonoid.continuousConstSMul_nat
+-/
+#print AddMonoid.continuousSMul_nat /-
instance AddMonoid.continuousSMul_nat {A} [AddMonoid A] [TopologicalSpace A] [ContinuousAdd A] :
ContinuousSMul ℕ A :=
⟨continuous_uncurry_of_discreteTopology continuous_nsmul⟩
#align add_monoid.has_continuous_smul_nat AddMonoid.continuousSMul_nat
+-/
+#print Continuous.pow /-
@[continuity, to_additive Continuous.nsmul]
theorem Continuous.pow {f : X → M} (h : Continuous f) (n : ℕ) : Continuous fun b => f b ^ n :=
(continuous_pow n).comp h
#align continuous.pow Continuous.pow
#align continuous.nsmul Continuous.nsmul
+-/
+#print continuousOn_pow /-
@[to_additive]
theorem continuousOn_pow {s : Set M} (n : ℕ) : ContinuousOn (fun x => x ^ n) s :=
(continuous_pow n).ContinuousOn
#align continuous_on_pow continuousOn_pow
#align continuous_on_nsmul continuousOn_nsmul
+-/
+#print continuousAt_pow /-
@[to_additive]
theorem continuousAt_pow (x : M) (n : ℕ) : ContinuousAt (fun x => x ^ n) x :=
(continuous_pow n).ContinuousAt
#align continuous_at_pow continuousAt_pow
#align continuous_at_nsmul continuousAt_nsmul
+-/
+#print Filter.Tendsto.pow /-
@[to_additive Filter.Tendsto.nsmul]
theorem Filter.Tendsto.pow {l : Filter α} {f : α → M} {x : M} (hf : Tendsto f l (𝓝 x)) (n : ℕ) :
Tendsto (fun x => f x ^ n) l (𝓝 (x ^ n)) :=
(continuousAt_pow _ _).Tendsto.comp hf
#align filter.tendsto.pow Filter.Tendsto.pow
#align filter.tendsto.nsmul Filter.Tendsto.nsmul
+-/
+#print ContinuousWithinAt.pow /-
@[to_additive ContinuousWithinAt.nsmul]
theorem ContinuousWithinAt.pow {f : X → M} {x : X} {s : Set X} (hf : ContinuousWithinAt f s x)
(n : ℕ) : ContinuousWithinAt (fun x => f x ^ n) s x :=
hf.pow n
#align continuous_within_at.pow ContinuousWithinAt.pow
#align continuous_within_at.nsmul ContinuousWithinAt.nsmul
+-/
+#print ContinuousAt.pow /-
@[to_additive ContinuousAt.nsmul]
theorem ContinuousAt.pow {f : X → M} {x : X} (hf : ContinuousAt f x) (n : ℕ) :
ContinuousAt (fun x => f x ^ n) x :=
hf.pow n
#align continuous_at.pow ContinuousAt.pow
#align continuous_at.nsmul ContinuousAt.nsmul
+-/
+#print ContinuousOn.pow /-
@[to_additive ContinuousOn.nsmul]
theorem ContinuousOn.pow {f : X → M} {s : Set X} (hf : ContinuousOn f s) (n : ℕ) :
ContinuousOn (fun x => f x ^ n) s := fun x hx => (hf x hx).pow n
#align continuous_on.pow ContinuousOn.pow
#align continuous_on.nsmul ContinuousOn.nsmul
+-/
+#print Filter.tendsto_cocompact_mul_left /-
/-- Left-multiplication by a left-invertible element of a topological monoid is proper, i.e.,
inverse images of compact sets are compact. -/
theorem Filter.tendsto_cocompact_mul_left {a b : M} (ha : b * a = 1) :
@@ -645,7 +744,9 @@ theorem Filter.tendsto_cocompact_mul_left {a b : M} (ha : b * a = 1) :
ext x
simp [ha]
#align filter.tendsto_cocompact_mul_left Filter.tendsto_cocompact_mul_left
+-/
+#print Filter.tendsto_cocompact_mul_right /-
/-- Right-multiplication by a right-invertible element of a topological monoid is proper, i.e.,
inverse images of compact sets are compact. -/
theorem Filter.tendsto_cocompact_mul_right {a b : M} (ha : a * b = 1) :
@@ -656,7 +757,9 @@ theorem Filter.tendsto_cocompact_mul_right {a b : M} (ha : a * b = 1) :
ext x
simp [ha]
#align filter.tendsto_cocompact_mul_right Filter.tendsto_cocompact_mul_right
+-/
+#print IsScalarTower.continuousConstSMul /-
/-- If `R` acts on `A` via `A`, then continuous multiplication implies continuous scalar
multiplication by constants.
@@ -671,7 +774,9 @@ instance (priority := 100) IsScalarTower.continuousConstSMul {R A : Type _} [Mon
exact continuous_const.mul continuous_id
#align is_scalar_tower.has_continuous_const_smul IsScalarTower.continuousConstSMul
#align vadd_assoc_class.has_continuous_const_vadd VAddAssocClass.continuousConstVAdd
+-/
+#print SMulCommClass.continuousConstSMul /-
/-- If the action of `R` on `A` commutes with left-multiplication, then continuous multiplication
implies continuous scalar multiplication by constants.
@@ -686,6 +791,7 @@ instance (priority := 100) SMulCommClass.continuousConstSMul {R A : Type _} [Mon
exact continuous_id.mul continuous_const
#align smul_comm_class.has_continuous_const_smul SMulCommClass.continuousConstSMul
#align vadd_comm_class.has_continuous_const_vadd VAddCommClass.continuousConstVAdd
+-/
end ContinuousMul
@@ -716,26 +822,31 @@ instance : ContinuousMul αˣ :=
end Units
+#print Continuous.units_map /-
@[to_additive]
theorem Continuous.units_map [Monoid M] [Monoid N] [TopologicalSpace M] [TopologicalSpace N]
(f : M →* N) (hf : Continuous f) : Continuous (Units.map f) :=
Units.continuous_iff.2 ⟨hf.comp Units.continuous_val, hf.comp Units.continuous_coe_inv⟩
#align continuous.units_map Continuous.units_map
#align continuous.add_units_map Continuous.addUnits_map
+-/
section
variable [TopologicalSpace M] [CommMonoid M]
+#print Submonoid.mem_nhds_one /-
@[to_additive]
theorem Submonoid.mem_nhds_one (S : Submonoid M) (oS : IsOpen (S : Set M)) :
(S : Set M) ∈ 𝓝 (1 : M) :=
IsOpen.mem_nhds oS S.one_mem
#align submonoid.mem_nhds_one Submonoid.mem_nhds_one
#align add_submonoid.mem_nhds_zero AddSubmonoid.mem_nhds_zero
+-/
variable [ContinuousMul M]
+#print tendsto_multiset_prod /-
@[to_additive]
theorem tendsto_multiset_prod {f : ι → α → M} {x : Filter α} {a : ι → M} (s : Multiset ι) :
(∀ i ∈ s, Tendsto (f i) x (𝓝 (a i))) →
@@ -743,7 +854,9 @@ theorem tendsto_multiset_prod {f : ι → α → M} {x : Filter α} {a : ι →
by rcases s with ⟨l⟩; simpa using tendsto_list_prod l
#align tendsto_multiset_prod tendsto_multiset_prod
#align tendsto_multiset_sum tendsto_multiset_sum
+-/
+#print tendsto_finset_prod /-
@[to_additive]
theorem tendsto_finset_prod {f : ι → α → M} {x : Filter α} {a : ι → M} (s : Finset ι) :
(∀ i ∈ s, Tendsto (f i) x (𝓝 (a i))) →
@@ -751,35 +864,45 @@ theorem tendsto_finset_prod {f : ι → α → M} {x : Filter α} {a : ι → M}
tendsto_multiset_prod _
#align tendsto_finset_prod tendsto_finset_prod
#align tendsto_finset_sum tendsto_finset_sum
+-/
+#print continuous_multiset_prod /-
@[continuity, to_additive]
theorem continuous_multiset_prod {f : ι → X → M} (s : Multiset ι) :
(∀ i ∈ s, Continuous (f i)) → Continuous fun a => (s.map fun i => f i a).Prod := by
rcases s with ⟨l⟩; simpa using continuous_list_prod l
#align continuous_multiset_prod continuous_multiset_prod
#align continuous_multiset_sum continuous_multiset_sum
+-/
+#print continuousOn_multiset_prod /-
@[to_additive]
theorem continuousOn_multiset_prod {f : ι → X → M} (s : Multiset ι) {t : Set X} :
(∀ i ∈ s, ContinuousOn (f i) t) → ContinuousOn (fun a => (s.map fun i => f i a).Prod) t := by
rcases s with ⟨l⟩; simpa using continuousOn_list_prod l
#align continuous_on_multiset_prod continuousOn_multiset_prod
#align continuous_on_multiset_sum continuousOn_multiset_sum
+-/
+#print continuous_finset_prod /-
@[continuity, to_additive]
theorem continuous_finset_prod {f : ι → X → M} (s : Finset ι) :
(∀ i ∈ s, Continuous (f i)) → Continuous fun a => ∏ i in s, f i a :=
continuous_multiset_prod _
#align continuous_finset_prod continuous_finset_prod
#align continuous_finset_sum continuous_finset_sum
+-/
+#print continuousOn_finset_prod /-
@[to_additive]
theorem continuousOn_finset_prod {f : ι → X → M} (s : Finset ι) {t : Set X} :
(∀ i ∈ s, ContinuousOn (f i) t) → ContinuousOn (fun a => ∏ i in s, f i a) t :=
continuousOn_multiset_prod _
#align continuous_on_finset_prod continuousOn_finset_prod
#align continuous_on_finset_sum continuousOn_finset_sum
+-/
+#print eventuallyEq_prod /-
@[to_additive]
theorem eventuallyEq_prod {X M : Type _} [CommMonoid M] {s : Finset ι} {l : Filter X}
{f g : ι → X → M} (hs : ∀ i ∈ s, f i =ᶠ[l] g i) : ∏ i in s, f i =ᶠ[l] ∏ i in s, g i :=
@@ -790,9 +913,11 @@ theorem eventuallyEq_prod {X M : Type _} [CommMonoid M] {s : Finset ι} {l : Fil
simp only [Finset.prod_apply, Finset.prod_congr rfl hx]
#align eventually_eq_prod eventuallyEq_prod
#align eventually_eq_sum eventuallyEq_sum
+-/
open Function
+#print LocallyFinite.exists_finset_mulSupport /-
@[to_additive]
theorem LocallyFinite.exists_finset_mulSupport {M : Type _} [CommMonoid M] {f : ι → X → M}
(hf : LocallyFinite fun i => mulSupport <| f i) (x₀ : X) :
@@ -804,7 +929,9 @@ theorem LocallyFinite.exists_finset_mulSupport {M : Type _} [CommMonoid M] {f :
exact ⟨y, hi, hy⟩
#align locally_finite.exists_finset_mul_support LocallyFinite.exists_finset_mulSupport
#align locally_finite.exists_finset_support LocallyFinite.exists_finset_support
+-/
+#print finprod_eventually_eq_prod /-
@[to_additive]
theorem finprod_eventually_eq_prod {M : Type _} [CommMonoid M] {f : ι → X → M}
(hf : LocallyFinite fun i => mulSupport (f i)) (x : X) :
@@ -813,7 +940,9 @@ theorem finprod_eventually_eq_prod {M : Type _} [CommMonoid M] {f : ι → X →
⟨I, hI.mono fun y hy => finprod_eq_prod_of_mulSupport_subset _ fun i hi => hy hi⟩
#align finprod_eventually_eq_prod finprod_eventually_eq_prod
#align finsum_eventually_eq_sum finsum_eventually_eq_sum
+-/
+#print continuous_finprod /-
@[to_additive]
theorem continuous_finprod {f : ι → X → M} (hc : ∀ i, Continuous (f i))
(hf : LocallyFinite fun i => mulSupport (f i)) : Continuous fun x => ∏ᶠ i, f i x :=
@@ -824,7 +953,9 @@ theorem continuous_finprod {f : ι → X → M} (hc : ∀ i, Continuous (f i))
exact tendsto_finset_prod _ fun i hi => (hc i).ContinuousAt
#align continuous_finprod continuous_finprod
#align continuous_finsum continuous_finsum
+-/
+#print continuous_finprod_cond /-
@[to_additive]
theorem continuous_finprod_cond {f : ι → X → M} {p : ι → Prop} (hc : ∀ i, p i → Continuous (f i))
(hf : LocallyFinite fun i => mulSupport (f i)) : Continuous fun x => ∏ᶠ (i) (hi : p i), f i x :=
@@ -833,6 +964,7 @@ theorem continuous_finprod_cond {f : ι → X → M} {p : ι → Prop} (hc : ∀
exact continuous_finprod (fun i => hc i i.2) (hf.comp_injective Subtype.coe_injective)
#align continuous_finprod_cond continuous_finprod_cond
#align continuous_finsum_cond continuous_finsum_cond
+-/
end
@@ -846,6 +978,7 @@ section LatticeOps
variable {ι' : Sort _} [Mul M]
+#print continuousMul_sInf /-
@[to_additive]
theorem continuousMul_sInf {ts : Set (TopologicalSpace M)} (h : ∀ t ∈ ts, @ContinuousMul M t _) :
@ContinuousMul M (sInf ts) _ :=
@@ -855,20 +988,25 @@ theorem continuousMul_sInf {ts : Set (TopologicalSpace M)} (h : ∀ t ∈ ts, @C
continuous_sInf_dom₂ ht ht (@ContinuousMul.continuous_mul M t _ (h t ht)) }
#align has_continuous_mul_Inf continuousMul_sInf
#align has_continuous_add_Inf continuousAdd_sInf
+-/
+#print continuousMul_iInf /-
@[to_additive]
theorem continuousMul_iInf {ts : ι' → TopologicalSpace M} (h' : ∀ i, @ContinuousMul M (ts i) _) :
@ContinuousMul M (⨅ i, ts i) _ := by rw [← sInf_range];
exact continuousMul_sInf (set.forall_range_iff.mpr h')
#align has_continuous_mul_infi continuousMul_iInf
#align has_continuous_add_infi continuousAdd_iInf
+-/
+#print continuousMul_inf /-
@[to_additive]
theorem continuousMul_inf {t₁ t₂ : TopologicalSpace M} (h₁ : @ContinuousMul M t₁ _)
(h₂ : @ContinuousMul M t₂ _) : @ContinuousMul M (t₁ ⊓ t₂) _ := by rw [inf_eq_iInf];
refine' continuousMul_iInf fun b => _; cases b <;> assumption
#align has_continuous_mul_inf continuousMul_inf
#align has_continuous_add_inf continuousAdd_inf
+-/
end LatticeOps
@@ -885,11 +1023,13 @@ protected def mulRight (x : X) : C(X, X) :=
#align continuous_map.add_right ContinuousMap.addRight
-/
+#print ContinuousMap.coe_mulRight /-
@[to_additive, simp]
theorem coe_mulRight (x : X) : ⇑(ContinuousMap.mulRight x) = fun y => y * x :=
rfl
#align continuous_map.coe_mul_right ContinuousMap.coe_mulRight
#align continuous_map.coe_add_right ContinuousMap.coe_addRight
+-/
#print ContinuousMap.mulLeft /-
/-- The continuous map `λ y, x * y` -/
@@ -900,11 +1040,13 @@ protected def mulLeft (x : X) : C(X, X) :=
#align continuous_map.add_left ContinuousMap.addLeft
-/
+#print ContinuousMap.coe_mulLeft /-
@[to_additive, simp]
theorem coe_mulLeft (x : X) : ⇑(ContinuousMap.mulLeft x) = fun y => x * y :=
rfl
#align continuous_map.coe_mul_left ContinuousMap.coe_mulLeft
#align continuous_map.coe_add_left ContinuousMap.coe_addLeft
+-/
end ContinuousMap
mathlib commit https://github.com/leanprover-community/mathlib/commit/a3e83f0fa4391c8740f7d773a7a9b74e311ae2a3
@@ -782,7 +782,7 @@ theorem continuousOn_finset_prod {f : ι → X → M} (s : Finset ι) {t : Set X
@[to_additive]
theorem eventuallyEq_prod {X M : Type _} [CommMonoid M] {s : Finset ι} {l : Filter X}
- {f g : ι → X → M} (hs : ∀ i ∈ s, f i =ᶠ[l] g i) : (∏ i in s, f i) =ᶠ[l] ∏ i in s, g i :=
+ {f g : ι → X → M} (hs : ∀ i ∈ s, f i =ᶠ[l] g i) : ∏ i in s, f i =ᶠ[l] ∏ i in s, g i :=
by
replace hs : ∀ᶠ x in l, ∀ i ∈ s, f i x = g i x
· rwa [eventually_all_finset]
@@ -808,7 +808,7 @@ theorem LocallyFinite.exists_finset_mulSupport {M : Type _} [CommMonoid M] {f :
@[to_additive]
theorem finprod_eventually_eq_prod {M : Type _} [CommMonoid M] {f : ι → X → M}
(hf : LocallyFinite fun i => mulSupport (f i)) (x : X) :
- ∃ s : Finset ι, ∀ᶠ y in 𝓝 x, (∏ᶠ i, f i y) = ∏ i in s, f i y :=
+ ∃ s : Finset ι, ∀ᶠ y in 𝓝 x, ∏ᶠ i, f i y = ∏ i in s, f i y :=
let ⟨I, hI⟩ := hf.exists_finset_mulSupport x
⟨I, hI.mono fun y hy => finprod_eq_prod_of_mulSupport_subset _ fun i hi => hy hi⟩
#align finprod_eventually_eq_prod finprod_eventually_eq_prod
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -311,8 +311,8 @@ theorem ContinuousMul.of_nhds_one {M : Type u} [Monoid M] [TopologicalSpace M]
_ = map ((fun x => x₀ * x) ∘ fun x => x * y₀) (map (uncurry (· * ·)) (𝓝 1 ×ᶠ 𝓝 1)) := by
rw [key, ← Filter.map_map]
_ ≤ map ((fun x : M => x₀ * x) ∘ fun x => x * y₀) (𝓝 1) := (map_mono hmul)
- _ = 𝓝 (x₀ * y₀) := by rw [← Filter.map_map, ← hright, hleft y₀, Filter.map_map, key₂, ← hleft]
- ⟩
+ _ = 𝓝 (x₀ * y₀) := by
+ rw [← Filter.map_map, ← hright, hleft y₀, Filter.map_map, key₂, ← hleft]⟩
#align has_continuous_mul.of_nhds_one ContinuousMul.of_nhds_one
#align has_continuous_add.of_nhds_zero ContinuousAdd.of_nhds_zero
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -334,14 +334,14 @@ section PointwiseLimits
variable (M₁ M₂ : Type _) [TopologicalSpace M₂] [T2Space M₂]
@[to_additive]
-theorem isClosed_setOf_map_one [One M₁] [One M₂] : IsClosed { f : M₁ → M₂ | f 1 = 1 } :=
+theorem isClosed_setOf_map_one [One M₁] [One M₂] : IsClosed {f : M₁ → M₂ | f 1 = 1} :=
isClosed_eq (continuous_apply 1) continuous_const
#align is_closed_set_of_map_one isClosed_setOf_map_one
#align is_closed_set_of_map_zero isClosed_setOf_map_zero
@[to_additive]
theorem isClosed_setOf_map_mul [Mul M₁] [Mul M₂] [ContinuousMul M₂] :
- IsClosed { f : M₁ → M₂ | ∀ x y, f (x * y) = f x * f y } :=
+ IsClosed {f : M₁ → M₂ | ∀ x y, f (x * y) = f x * f y} :=
by
simp only [set_of_forall]
exact
@@ -786,7 +786,7 @@ theorem eventuallyEq_prod {X M : Type _} [CommMonoid M] {s : Finset ι} {l : Fil
by
replace hs : ∀ᶠ x in l, ∀ i ∈ s, f i x = g i x
· rwa [eventually_all_finset]
- filter_upwards [hs]with x hx
+ filter_upwards [hs] with x hx
simp only [Finset.prod_apply, Finset.prod_congr rfl hx]
#align eventually_eq_prod eventuallyEq_prod
#align eventually_eq_sum eventuallyEq_sum
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -568,7 +568,7 @@ theorem continuousOn_list_prod {f : ι → X → M} (l : List ι) {t : Set X}
rw [continuousWithinAt_iff_continuousAt_restrict _ hx]
refine' tendsto_list_prod _ fun i hi => _
specialize h i hi x hx
- rw [continuousWithinAt_iff_continuousAt_restrict _ hx] at h
+ rw [continuousWithinAt_iff_continuousAt_restrict _ hx] at h
exact h
#align continuous_on_list_prod continuousOn_list_prod
#align continuous_on_list_sum continuousOn_list_sum
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -30,7 +30,7 @@ universe u v
open Classical Set Filter TopologicalSpace
-open Classical Topology BigOperators Pointwise
+open scoped Classical Topology BigOperators Pointwise
variable {ι α X M N : Type _} [TopologicalSpace X]
@@ -184,33 +184,41 @@ section tendsto_nhds
variable {𝕜 : Type _} [Preorder 𝕜] [Zero 𝕜] [Mul 𝕜] [TopologicalSpace 𝕜] [ContinuousMul 𝕜]
{l : Filter α} {f : α → 𝕜} {b c : 𝕜} (hb : 0 < b)
+#print Filter.TendstoNhdsWithinIoi.const_mul /-
theorem Filter.TendstoNhdsWithinIoi.const_mul [PosMulStrictMono 𝕜] [PosMulReflectLT 𝕜]
(h : Tendsto f l (𝓝[>] c)) : Tendsto (fun a => b * f a) l (𝓝[>] (b * c)) :=
tendsto_nhdsWithin_of_tendsto_nhds_of_eventually_within _
((tendsto_nhds_of_tendsto_nhdsWithin h).const_mul b) <|
(tendsto_nhdsWithin_iff.mp h).2.mono fun j => (mul_lt_mul_left hb).mpr
#align filter.tendsto_nhds_within_Ioi.const_mul Filter.TendstoNhdsWithinIoi.const_mul
+-/
+#print Filter.TendstoNhdsWithinIio.const_mul /-
theorem Filter.TendstoNhdsWithinIio.const_mul [PosMulStrictMono 𝕜] [PosMulReflectLT 𝕜]
(h : Tendsto f l (𝓝[<] c)) : Tendsto (fun a => b * f a) l (𝓝[<] (b * c)) :=
tendsto_nhdsWithin_of_tendsto_nhds_of_eventually_within _
((tendsto_nhds_of_tendsto_nhdsWithin h).const_mul b) <|
(tendsto_nhdsWithin_iff.mp h).2.mono fun j => (mul_lt_mul_left hb).mpr
#align filter.tendsto_nhds_within_Iio.const_mul Filter.TendstoNhdsWithinIio.const_mul
+-/
+#print Filter.TendstoNhdsWithinIoi.mul_const /-
theorem Filter.TendstoNhdsWithinIoi.mul_const [MulPosStrictMono 𝕜] [MulPosReflectLT 𝕜]
(h : Tendsto f l (𝓝[>] c)) : Tendsto (fun a => f a * b) l (𝓝[>] (c * b)) :=
tendsto_nhdsWithin_of_tendsto_nhds_of_eventually_within _
((tendsto_nhds_of_tendsto_nhdsWithin h).mul_const b) <|
(tendsto_nhdsWithin_iff.mp h).2.mono fun j => (mul_lt_mul_right hb).mpr
#align filter.tendsto_nhds_within_Ioi.mul_const Filter.TendstoNhdsWithinIoi.mul_const
+-/
+#print Filter.TendstoNhdsWithinIio.mul_const /-
theorem Filter.TendstoNhdsWithinIio.mul_const [MulPosStrictMono 𝕜] [MulPosReflectLT 𝕜]
(h : Tendsto f l (𝓝[<] c)) : Tendsto (fun a => f a * b) l (𝓝[<] (c * b)) :=
tendsto_nhdsWithin_of_tendsto_nhds_of_eventually_within _
((tendsto_nhds_of_tendsto_nhdsWithin h).mul_const b) <|
(tendsto_nhdsWithin_iff.mp h).2.mono fun j => (mul_lt_mul_right hb).mpr
#align filter.tendsto_nhds_within_Iio.mul_const Filter.TendstoNhdsWithinIio.mul_const
+-/
end tendsto_nhds
@@ -278,7 +286,7 @@ instance (priority := 100) continuousMul_of_discreteTopology [TopologicalSpace N
#align has_continuous_add_of_discrete_topology continuousAdd_of_discreteTopology
-/
-open Filter
+open scoped Filter
open Function
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -76,12 +76,6 @@ variable [TopologicalSpace M] [Mul M] [ContinuousMul M]
instance : ContinuousMul Mᵒᵈ :=
‹ContinuousMul M›
-/- warning: continuous_mul -> continuous_mul is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Mul.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 _inst_3], Continuous.{u1, u1} (Prod.{u1, u1} M M) M (Prod.topologicalSpace.{u1, u1} M M _inst_2 _inst_2) _inst_2 (fun (p : Prod.{u1, u1} M M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) (Prod.fst.{u1, u1} M M p) (Prod.snd.{u1, u1} M M p))
-but is expected to have type
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Mul.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 _inst_3], Continuous.{u1, u1} (Prod.{u1, u1} M M) M (instTopologicalSpaceProd.{u1, u1} M M _inst_2 _inst_2) _inst_2 (fun (p : Prod.{u1, u1} M M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) (Prod.fst.{u1, u1} M M p) (Prod.snd.{u1, u1} M M p))
-Case conversion may be inaccurate. Consider using '#align continuous_mul continuous_mulₓ'. -/
@[to_additive]
theorem continuous_mul : Continuous fun p : M × M => p.1 * p.2 :=
ContinuousMul.continuous_mul
@@ -106,12 +100,6 @@ instance ContinuousMul.to_continuousSMul_op : ContinuousSMul Mᵐᵒᵖ M :=
#align has_continuous_add.to_has_continuous_vadd_op ContinuousAdd.to_continuousVAdd_op
-/
-/- warning: continuous.mul -> Continuous.mul is a dubious translation:
-lean 3 declaration is
- forall {X : Type.{u1}} {M : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} M] [_inst_3 : Mul.{u2} M] [_inst_4 : ContinuousMul.{u2} M _inst_2 _inst_3] {f : X -> M} {g : X -> M}, (Continuous.{u1, u2} X M _inst_1 _inst_2 f) -> (Continuous.{u1, u2} X M _inst_1 _inst_2 g) -> (Continuous.{u1, u2} X M _inst_1 _inst_2 (fun (x : X) => HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_3) (f x) (g x)))
-but is expected to have type
- forall {X : Type.{u2}} {M : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Mul.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 _inst_3] {f : X -> M} {g : X -> M}, (Continuous.{u2, u1} X M _inst_1 _inst_2 f) -> (Continuous.{u2, u1} X M _inst_1 _inst_2 g) -> (Continuous.{u2, u1} X M _inst_1 _inst_2 (fun (x : X) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) (f x) (g x)))
-Case conversion may be inaccurate. Consider using '#align continuous.mul Continuous.mulₓ'. -/
@[continuity, to_additive]
theorem Continuous.mul {f g : X → M} (hf : Continuous f) (hg : Continuous g) :
Continuous fun x => f x * g x :=
@@ -135,12 +123,6 @@ theorem continuous_mul_right (a : M) : Continuous fun b : M => b * a :=
#align continuous_add_right continuous_add_right
-/
-/- warning: continuous_on.mul -> ContinuousOn.mul is a dubious translation:
-lean 3 declaration is
- forall {X : Type.{u1}} {M : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} M] [_inst_3 : Mul.{u2} M] [_inst_4 : ContinuousMul.{u2} M _inst_2 _inst_3] {f : X -> M} {g : X -> M} {s : Set.{u1} X}, (ContinuousOn.{u1, u2} X M _inst_1 _inst_2 f s) -> (ContinuousOn.{u1, u2} X M _inst_1 _inst_2 g s) -> (ContinuousOn.{u1, u2} X M _inst_1 _inst_2 (fun (x : X) => HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_3) (f x) (g x)) s)
-but is expected to have type
- forall {X : Type.{u2}} {M : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Mul.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 _inst_3] {f : X -> M} {g : X -> M} {s : Set.{u2} X}, (ContinuousOn.{u2, u1} X M _inst_1 _inst_2 f s) -> (ContinuousOn.{u2, u1} X M _inst_1 _inst_2 g s) -> (ContinuousOn.{u2, u1} X M _inst_1 _inst_2 (fun (x : X) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) (f x) (g x)) s)
-Case conversion may be inaccurate. Consider using '#align continuous_on.mul ContinuousOn.mulₓ'. -/
@[to_additive]
theorem ContinuousOn.mul {f g : X → M} {s : Set X} (hf : ContinuousOn f s) (hg : ContinuousOn g s) :
ContinuousOn (fun x => f x * g x) s :=
@@ -148,24 +130,12 @@ theorem ContinuousOn.mul {f g : X → M} {s : Set X} (hf : ContinuousOn f s) (hg
#align continuous_on.mul ContinuousOn.mul
#align continuous_on.add ContinuousOn.add
-/- warning: tendsto_mul -> tendsto_mul is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Mul.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 _inst_3] {a : M} {b : M}, Filter.Tendsto.{u1, u1} (Prod.{u1, u1} M M) M (fun (p : Prod.{u1, u1} M M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) (Prod.fst.{u1, u1} M M p) (Prod.snd.{u1, u1} M M p)) (nhds.{u1} (Prod.{u1, u1} M M) (Prod.topologicalSpace.{u1, u1} M M _inst_2 _inst_2) (Prod.mk.{u1, u1} M M a b)) (nhds.{u1} M _inst_2 (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) a b))
-but is expected to have type
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Mul.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 _inst_3] {a : M} {b : M}, Filter.Tendsto.{u1, u1} (Prod.{u1, u1} M M) M (fun (p : Prod.{u1, u1} M M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) (Prod.fst.{u1, u1} M M p) (Prod.snd.{u1, u1} M M p)) (nhds.{u1} (Prod.{u1, u1} M M) (instTopologicalSpaceProd.{u1, u1} M M _inst_2 _inst_2) (Prod.mk.{u1, u1} M M a b)) (nhds.{u1} M _inst_2 (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) a b))
-Case conversion may be inaccurate. Consider using '#align tendsto_mul tendsto_mulₓ'. -/
@[to_additive]
theorem tendsto_mul {a b : M} : Tendsto (fun p : M × M => p.fst * p.snd) (𝓝 (a, b)) (𝓝 (a * b)) :=
continuous_iff_continuousAt.mp ContinuousMul.continuous_mul (a, b)
#align tendsto_mul tendsto_mul
#align tendsto_add tendsto_add
-/- warning: filter.tendsto.mul -> Filter.Tendsto.mul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_2 : TopologicalSpace.{u2} M] [_inst_3 : Mul.{u2} M] [_inst_4 : ContinuousMul.{u2} M _inst_2 _inst_3] {f : α -> M} {g : α -> M} {x : Filter.{u1} α} {a : M} {b : M}, (Filter.Tendsto.{u1, u2} α M f x (nhds.{u2} M _inst_2 a)) -> (Filter.Tendsto.{u1, u2} α M g x (nhds.{u2} M _inst_2 b)) -> (Filter.Tendsto.{u1, u2} α M (fun (x : α) => HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_3) (f x) (g x)) x (nhds.{u2} M _inst_2 (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_3) a b)))
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Mul.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 _inst_3] {f : α -> M} {g : α -> M} {x : Filter.{u2} α} {a : M} {b : M}, (Filter.Tendsto.{u2, u1} α M f x (nhds.{u1} M _inst_2 a)) -> (Filter.Tendsto.{u2, u1} α M g x (nhds.{u1} M _inst_2 b)) -> (Filter.Tendsto.{u2, u1} α M (fun (x : α) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) (f x) (g x)) x (nhds.{u1} M _inst_2 (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) a b)))
-Case conversion may be inaccurate. Consider using '#align filter.tendsto.mul Filter.Tendsto.mulₓ'. -/
@[to_additive]
theorem Filter.Tendsto.mul {f g : α → M} {x : Filter α} {a b : M} (hf : Tendsto f x (𝓝 a))
(hg : Tendsto g x (𝓝 b)) : Tendsto (fun x => f x * g x) x (𝓝 (a * b)) :=
@@ -173,12 +143,6 @@ theorem Filter.Tendsto.mul {f g : α → M} {x : Filter α} {a b : M} (hf : Tend
#align filter.tendsto.mul Filter.Tendsto.mul
#align filter.tendsto.add Filter.Tendsto.add
-/- warning: filter.tendsto.const_mul -> Filter.Tendsto.const_mul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_2 : TopologicalSpace.{u2} M] [_inst_3 : Mul.{u2} M] [_inst_4 : ContinuousMul.{u2} M _inst_2 _inst_3] (b : M) {c : M} {f : α -> M} {l : Filter.{u1} α}, (Filter.Tendsto.{u1, u2} α M (fun (k : α) => f k) l (nhds.{u2} M _inst_2 c)) -> (Filter.Tendsto.{u1, u2} α M (fun (k : α) => HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_3) b (f k)) l (nhds.{u2} M _inst_2 (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_3) b c)))
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Mul.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 _inst_3] (b : M) {c : M} {f : α -> M} {l : Filter.{u2} α}, (Filter.Tendsto.{u2, u1} α M (fun (k : α) => f k) l (nhds.{u1} M _inst_2 c)) -> (Filter.Tendsto.{u2, u1} α M (fun (k : α) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) b (f k)) l (nhds.{u1} M _inst_2 (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) b c)))
-Case conversion may be inaccurate. Consider using '#align filter.tendsto.const_mul Filter.Tendsto.const_mulₓ'. -/
@[to_additive]
theorem Filter.Tendsto.const_mul (b : M) {c : M} {f : α → M} {l : Filter α}
(h : Tendsto (fun k : α => f k) l (𝓝 c)) : Tendsto (fun k : α => b * f k) l (𝓝 (b * c)) :=
@@ -186,12 +150,6 @@ theorem Filter.Tendsto.const_mul (b : M) {c : M} {f : α → M} {l : Filter α}
#align filter.tendsto.const_mul Filter.Tendsto.const_mul
#align filter.tendsto.const_add Filter.Tendsto.const_add
-/- warning: filter.tendsto.mul_const -> Filter.Tendsto.mul_const is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_2 : TopologicalSpace.{u2} M] [_inst_3 : Mul.{u2} M] [_inst_4 : ContinuousMul.{u2} M _inst_2 _inst_3] (b : M) {c : M} {f : α -> M} {l : Filter.{u1} α}, (Filter.Tendsto.{u1, u2} α M (fun (k : α) => f k) l (nhds.{u2} M _inst_2 c)) -> (Filter.Tendsto.{u1, u2} α M (fun (k : α) => HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_3) (f k) b) l (nhds.{u2} M _inst_2 (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_3) c b)))
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Mul.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 _inst_3] (b : M) {c : M} {f : α -> M} {l : Filter.{u2} α}, (Filter.Tendsto.{u2, u1} α M (fun (k : α) => f k) l (nhds.{u1} M _inst_2 c)) -> (Filter.Tendsto.{u2, u1} α M (fun (k : α) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) (f k) b) l (nhds.{u1} M _inst_2 (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) c b)))
-Case conversion may be inaccurate. Consider using '#align filter.tendsto.mul_const Filter.Tendsto.mul_constₓ'. -/
@[to_additive]
theorem Filter.Tendsto.mul_const (b : M) {c : M} {f : α → M} {l : Filter α}
(h : Tendsto (fun k : α => f k) l (𝓝 c)) : Tendsto (fun k : α => f k * b) l (𝓝 (c * b)) :=
@@ -199,24 +157,12 @@ theorem Filter.Tendsto.mul_const (b : M) {c : M} {f : α → M} {l : Filter α}
#align filter.tendsto.mul_const Filter.Tendsto.mul_const
#align filter.tendsto.add_const Filter.Tendsto.add_const
-/- warning: le_nhds_mul -> le_nhds_mul is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Mul.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 _inst_3] (a : M) (b : M), LE.le.{u1} (Filter.{u1} M) (Preorder.toHasLe.{u1} (Filter.{u1} M) (PartialOrder.toPreorder.{u1} (Filter.{u1} M) (Filter.partialOrder.{u1} M))) (HMul.hMul.{u1, u1, u1} (Filter.{u1} M) (Filter.{u1} M) (Filter.{u1} M) (instHMul.{u1} (Filter.{u1} M) (Filter.instMul.{u1} M _inst_3)) (nhds.{u1} M _inst_2 a) (nhds.{u1} M _inst_2 b)) (nhds.{u1} M _inst_2 (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) a b))
-but is expected to have type
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Mul.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 _inst_3] (a : M) (b : M), LE.le.{u1} (Filter.{u1} M) (Preorder.toLE.{u1} (Filter.{u1} M) (PartialOrder.toPreorder.{u1} (Filter.{u1} M) (Filter.instPartialOrderFilter.{u1} M))) (HMul.hMul.{u1, u1, u1} (Filter.{u1} M) (Filter.{u1} M) (Filter.{u1} M) (instHMul.{u1} (Filter.{u1} M) (Filter.instMul.{u1} M _inst_3)) (nhds.{u1} M _inst_2 a) (nhds.{u1} M _inst_2 b)) (nhds.{u1} M _inst_2 (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) a b))
-Case conversion may be inaccurate. Consider using '#align le_nhds_mul le_nhds_mulₓ'. -/
@[to_additive]
theorem le_nhds_mul (a b : M) : 𝓝 a * 𝓝 b ≤ 𝓝 (a * b) := by
rw [← map₂_mul, ← map_uncurry_prod, ← nhds_prod_eq]; exact continuous_mul.tendsto _
#align le_nhds_mul le_nhds_mul
#align le_nhds_add le_nhds_add
-/- warning: nhds_one_mul_nhds -> nhds_one_mul_nhds is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} [_inst_5 : MulOneClass.{u1} M] [_inst_6 : TopologicalSpace.{u1} M] [_inst_7 : ContinuousMul.{u1} M _inst_6 (MulOneClass.toHasMul.{u1} M _inst_5)] (a : M), Eq.{succ u1} (Filter.{u1} M) (HMul.hMul.{u1, u1, u1} (Filter.{u1} M) (Filter.{u1} M) (Filter.{u1} M) (instHMul.{u1} (Filter.{u1} M) (Filter.instMul.{u1} M (MulOneClass.toHasMul.{u1} M _inst_5))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M _inst_5))))) (nhds.{u1} M _inst_6 a)) (nhds.{u1} M _inst_6 a)
-but is expected to have type
- forall {M : Type.{u1}} [_inst_5 : MulOneClass.{u1} M] [_inst_6 : TopologicalSpace.{u1} M] [_inst_7 : ContinuousMul.{u1} M _inst_6 (MulOneClass.toMul.{u1} M _inst_5)] (a : M), Eq.{succ u1} (Filter.{u1} M) (HMul.hMul.{u1, u1, u1} (Filter.{u1} M) (Filter.{u1} M) (Filter.{u1} M) (instHMul.{u1} (Filter.{u1} M) (Filter.instMul.{u1} M (MulOneClass.toMul.{u1} M _inst_5))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (MulOneClass.toOne.{u1} M _inst_5)))) (nhds.{u1} M _inst_6 a)) (nhds.{u1} M _inst_6 a)
-Case conversion may be inaccurate. Consider using '#align nhds_one_mul_nhds nhds_one_mul_nhdsₓ'. -/
@[simp, to_additive]
theorem nhds_one_mul_nhds {M} [MulOneClass M] [TopologicalSpace M] [ContinuousMul M] (a : M) :
𝓝 (1 : M) * 𝓝 a = 𝓝 a :=
@@ -225,12 +171,6 @@ theorem nhds_one_mul_nhds {M} [MulOneClass M] [TopologicalSpace M] [ContinuousMu
#align nhds_one_mul_nhds nhds_one_mul_nhds
#align nhds_zero_add_nhds nhds_zero_add_nhds
-/- warning: nhds_mul_nhds_one -> nhds_mul_nhds_one is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} [_inst_5 : MulOneClass.{u1} M] [_inst_6 : TopologicalSpace.{u1} M] [_inst_7 : ContinuousMul.{u1} M _inst_6 (MulOneClass.toHasMul.{u1} M _inst_5)] (a : M), Eq.{succ u1} (Filter.{u1} M) (HMul.hMul.{u1, u1, u1} (Filter.{u1} M) (Filter.{u1} M) (Filter.{u1} M) (instHMul.{u1} (Filter.{u1} M) (Filter.instMul.{u1} M (MulOneClass.toHasMul.{u1} M _inst_5))) (nhds.{u1} M _inst_6 a) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M _inst_5)))))) (nhds.{u1} M _inst_6 a)
-but is expected to have type
- forall {M : Type.{u1}} [_inst_5 : MulOneClass.{u1} M] [_inst_6 : TopologicalSpace.{u1} M] [_inst_7 : ContinuousMul.{u1} M _inst_6 (MulOneClass.toMul.{u1} M _inst_5)] (a : M), Eq.{succ u1} (Filter.{u1} M) (HMul.hMul.{u1, u1, u1} (Filter.{u1} M) (Filter.{u1} M) (Filter.{u1} M) (instHMul.{u1} (Filter.{u1} M) (Filter.instMul.{u1} M (MulOneClass.toMul.{u1} M _inst_5))) (nhds.{u1} M _inst_6 a) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (MulOneClass.toOne.{u1} M _inst_5))))) (nhds.{u1} M _inst_6 a)
-Case conversion may be inaccurate. Consider using '#align nhds_mul_nhds_one nhds_mul_nhds_oneₓ'. -/
@[simp, to_additive]
theorem nhds_mul_nhds_one {M} [MulOneClass M] [TopologicalSpace M] [ContinuousMul M] (a : M) :
𝓝 a * 𝓝 1 = 𝓝 a :=
@@ -244,12 +184,6 @@ section tendsto_nhds
variable {𝕜 : Type _} [Preorder 𝕜] [Zero 𝕜] [Mul 𝕜] [TopologicalSpace 𝕜] [ContinuousMul 𝕜]
{l : Filter α} {f : α → 𝕜} {b c : 𝕜} (hb : 0 < b)
-/- warning: filter.tendsto_nhds_within_Ioi.const_mul -> Filter.TendstoNhdsWithinIoi.const_mul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_5 : Preorder.{u2} 𝕜] [_inst_6 : Zero.{u2} 𝕜] [_inst_7 : Mul.{u2} 𝕜] [_inst_8 : TopologicalSpace.{u2} 𝕜] [_inst_9 : ContinuousMul.{u2} 𝕜 _inst_8 _inst_7] {l : Filter.{u1} α} {f : α -> 𝕜} {b : 𝕜} {c : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toHasLt.{u2} 𝕜 _inst_5) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 _inst_6))) b) -> (forall [_inst_10 : PosMulStrictMono.{u2} 𝕜 _inst_7 _inst_6 _inst_5] [_inst_11 : PosMulReflectLT.{u2} 𝕜 _inst_7 _inst_6 _inst_5], (Filter.Tendsto.{u1, u2} α 𝕜 f l (nhdsWithin.{u2} 𝕜 _inst_8 c (Set.Ioi.{u2} 𝕜 _inst_5 c))) -> (Filter.Tendsto.{u1, u2} α 𝕜 (fun (a : α) => HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b (f a)) l (nhdsWithin.{u2} 𝕜 _inst_8 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b c) (Set.Ioi.{u2} 𝕜 _inst_5 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b c)))))
-but is expected to have type
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_5 : Preorder.{u2} 𝕜] [_inst_6 : Zero.{u2} 𝕜] [_inst_7 : Mul.{u2} 𝕜] [_inst_8 : TopologicalSpace.{u2} 𝕜] [_inst_9 : ContinuousMul.{u2} 𝕜 _inst_8 _inst_7] {l : Filter.{u1} α} {f : α -> 𝕜} {b : 𝕜} {c : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toLT.{u2} 𝕜 _inst_5) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 _inst_6)) b) -> (forall [_inst_10 : PosMulStrictMono.{u2} 𝕜 _inst_7 _inst_6 _inst_5] [_inst_11 : PosMulReflectLT.{u2} 𝕜 _inst_7 _inst_6 _inst_5], (Filter.Tendsto.{u1, u2} α 𝕜 f l (nhdsWithin.{u2} 𝕜 _inst_8 c (Set.Ioi.{u2} 𝕜 _inst_5 c))) -> (Filter.Tendsto.{u1, u2} α 𝕜 (fun (a : α) => HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b (f a)) l (nhdsWithin.{u2} 𝕜 _inst_8 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b c) (Set.Ioi.{u2} 𝕜 _inst_5 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b c)))))
-Case conversion may be inaccurate. Consider using '#align filter.tendsto_nhds_within_Ioi.const_mul Filter.TendstoNhdsWithinIoi.const_mulₓ'. -/
theorem Filter.TendstoNhdsWithinIoi.const_mul [PosMulStrictMono 𝕜] [PosMulReflectLT 𝕜]
(h : Tendsto f l (𝓝[>] c)) : Tendsto (fun a => b * f a) l (𝓝[>] (b * c)) :=
tendsto_nhdsWithin_of_tendsto_nhds_of_eventually_within _
@@ -257,12 +191,6 @@ theorem Filter.TendstoNhdsWithinIoi.const_mul [PosMulStrictMono 𝕜] [PosMulRef
(tendsto_nhdsWithin_iff.mp h).2.mono fun j => (mul_lt_mul_left hb).mpr
#align filter.tendsto_nhds_within_Ioi.const_mul Filter.TendstoNhdsWithinIoi.const_mul
-/- warning: filter.tendsto_nhds_within_Iio.const_mul -> Filter.TendstoNhdsWithinIio.const_mul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_5 : Preorder.{u2} 𝕜] [_inst_6 : Zero.{u2} 𝕜] [_inst_7 : Mul.{u2} 𝕜] [_inst_8 : TopologicalSpace.{u2} 𝕜] [_inst_9 : ContinuousMul.{u2} 𝕜 _inst_8 _inst_7] {l : Filter.{u1} α} {f : α -> 𝕜} {b : 𝕜} {c : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toHasLt.{u2} 𝕜 _inst_5) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 _inst_6))) b) -> (forall [_inst_10 : PosMulStrictMono.{u2} 𝕜 _inst_7 _inst_6 _inst_5] [_inst_11 : PosMulReflectLT.{u2} 𝕜 _inst_7 _inst_6 _inst_5], (Filter.Tendsto.{u1, u2} α 𝕜 f l (nhdsWithin.{u2} 𝕜 _inst_8 c (Set.Iio.{u2} 𝕜 _inst_5 c))) -> (Filter.Tendsto.{u1, u2} α 𝕜 (fun (a : α) => HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b (f a)) l (nhdsWithin.{u2} 𝕜 _inst_8 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b c) (Set.Iio.{u2} 𝕜 _inst_5 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b c)))))
-but is expected to have type
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_5 : Preorder.{u2} 𝕜] [_inst_6 : Zero.{u2} 𝕜] [_inst_7 : Mul.{u2} 𝕜] [_inst_8 : TopologicalSpace.{u2} 𝕜] [_inst_9 : ContinuousMul.{u2} 𝕜 _inst_8 _inst_7] {l : Filter.{u1} α} {f : α -> 𝕜} {b : 𝕜} {c : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toLT.{u2} 𝕜 _inst_5) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 _inst_6)) b) -> (forall [_inst_10 : PosMulStrictMono.{u2} 𝕜 _inst_7 _inst_6 _inst_5] [_inst_11 : PosMulReflectLT.{u2} 𝕜 _inst_7 _inst_6 _inst_5], (Filter.Tendsto.{u1, u2} α 𝕜 f l (nhdsWithin.{u2} 𝕜 _inst_8 c (Set.Iio.{u2} 𝕜 _inst_5 c))) -> (Filter.Tendsto.{u1, u2} α 𝕜 (fun (a : α) => HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b (f a)) l (nhdsWithin.{u2} 𝕜 _inst_8 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b c) (Set.Iio.{u2} 𝕜 _inst_5 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b c)))))
-Case conversion may be inaccurate. Consider using '#align filter.tendsto_nhds_within_Iio.const_mul Filter.TendstoNhdsWithinIio.const_mulₓ'. -/
theorem Filter.TendstoNhdsWithinIio.const_mul [PosMulStrictMono 𝕜] [PosMulReflectLT 𝕜]
(h : Tendsto f l (𝓝[<] c)) : Tendsto (fun a => b * f a) l (𝓝[<] (b * c)) :=
tendsto_nhdsWithin_of_tendsto_nhds_of_eventually_within _
@@ -270,12 +198,6 @@ theorem Filter.TendstoNhdsWithinIio.const_mul [PosMulStrictMono 𝕜] [PosMulRef
(tendsto_nhdsWithin_iff.mp h).2.mono fun j => (mul_lt_mul_left hb).mpr
#align filter.tendsto_nhds_within_Iio.const_mul Filter.TendstoNhdsWithinIio.const_mul
-/- warning: filter.tendsto_nhds_within_Ioi.mul_const -> Filter.TendstoNhdsWithinIoi.mul_const is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_5 : Preorder.{u2} 𝕜] [_inst_6 : Zero.{u2} 𝕜] [_inst_7 : Mul.{u2} 𝕜] [_inst_8 : TopologicalSpace.{u2} 𝕜] [_inst_9 : ContinuousMul.{u2} 𝕜 _inst_8 _inst_7] {l : Filter.{u1} α} {f : α -> 𝕜} {b : 𝕜} {c : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toHasLt.{u2} 𝕜 _inst_5) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 _inst_6))) b) -> (forall [_inst_10 : MulPosStrictMono.{u2} 𝕜 _inst_7 _inst_6 _inst_5] [_inst_11 : MulPosReflectLT.{u2} 𝕜 _inst_7 _inst_6 _inst_5], (Filter.Tendsto.{u1, u2} α 𝕜 f l (nhdsWithin.{u2} 𝕜 _inst_8 c (Set.Ioi.{u2} 𝕜 _inst_5 c))) -> (Filter.Tendsto.{u1, u2} α 𝕜 (fun (a : α) => HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) (f a) b) l (nhdsWithin.{u2} 𝕜 _inst_8 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) c b) (Set.Ioi.{u2} 𝕜 _inst_5 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) c b)))))
-but is expected to have type
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_5 : Preorder.{u2} 𝕜] [_inst_6 : Zero.{u2} 𝕜] [_inst_7 : Mul.{u2} 𝕜] [_inst_8 : TopologicalSpace.{u2} 𝕜] [_inst_9 : ContinuousMul.{u2} 𝕜 _inst_8 _inst_7] {l : Filter.{u1} α} {f : α -> 𝕜} {b : 𝕜} {c : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toLT.{u2} 𝕜 _inst_5) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 _inst_6)) b) -> (forall [_inst_10 : MulPosStrictMono.{u2} 𝕜 _inst_7 _inst_6 _inst_5] [_inst_11 : MulPosReflectLT.{u2} 𝕜 _inst_7 _inst_6 _inst_5], (Filter.Tendsto.{u1, u2} α 𝕜 f l (nhdsWithin.{u2} 𝕜 _inst_8 c (Set.Ioi.{u2} 𝕜 _inst_5 c))) -> (Filter.Tendsto.{u1, u2} α 𝕜 (fun (a : α) => HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) (f a) b) l (nhdsWithin.{u2} 𝕜 _inst_8 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) c b) (Set.Ioi.{u2} 𝕜 _inst_5 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) c b)))))
-Case conversion may be inaccurate. Consider using '#align filter.tendsto_nhds_within_Ioi.mul_const Filter.TendstoNhdsWithinIoi.mul_constₓ'. -/
theorem Filter.TendstoNhdsWithinIoi.mul_const [MulPosStrictMono 𝕜] [MulPosReflectLT 𝕜]
(h : Tendsto f l (𝓝[>] c)) : Tendsto (fun a => f a * b) l (𝓝[>] (c * b)) :=
tendsto_nhdsWithin_of_tendsto_nhds_of_eventually_within _
@@ -283,12 +205,6 @@ theorem Filter.TendstoNhdsWithinIoi.mul_const [MulPosStrictMono 𝕜] [MulPosRef
(tendsto_nhdsWithin_iff.mp h).2.mono fun j => (mul_lt_mul_right hb).mpr
#align filter.tendsto_nhds_within_Ioi.mul_const Filter.TendstoNhdsWithinIoi.mul_const
-/- warning: filter.tendsto_nhds_within_Iio.mul_const -> Filter.TendstoNhdsWithinIio.mul_const is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_5 : Preorder.{u2} 𝕜] [_inst_6 : Zero.{u2} 𝕜] [_inst_7 : Mul.{u2} 𝕜] [_inst_8 : TopologicalSpace.{u2} 𝕜] [_inst_9 : ContinuousMul.{u2} 𝕜 _inst_8 _inst_7] {l : Filter.{u1} α} {f : α -> 𝕜} {b : 𝕜} {c : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toHasLt.{u2} 𝕜 _inst_5) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 _inst_6))) b) -> (forall [_inst_10 : MulPosStrictMono.{u2} 𝕜 _inst_7 _inst_6 _inst_5] [_inst_11 : MulPosReflectLT.{u2} 𝕜 _inst_7 _inst_6 _inst_5], (Filter.Tendsto.{u1, u2} α 𝕜 f l (nhdsWithin.{u2} 𝕜 _inst_8 c (Set.Iio.{u2} 𝕜 _inst_5 c))) -> (Filter.Tendsto.{u1, u2} α 𝕜 (fun (a : α) => HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) (f a) b) l (nhdsWithin.{u2} 𝕜 _inst_8 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) c b) (Set.Iio.{u2} 𝕜 _inst_5 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) c b)))))
-but is expected to have type
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_5 : Preorder.{u2} 𝕜] [_inst_6 : Zero.{u2} 𝕜] [_inst_7 : Mul.{u2} 𝕜] [_inst_8 : TopologicalSpace.{u2} 𝕜] [_inst_9 : ContinuousMul.{u2} 𝕜 _inst_8 _inst_7] {l : Filter.{u1} α} {f : α -> 𝕜} {b : 𝕜} {c : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toLT.{u2} 𝕜 _inst_5) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 _inst_6)) b) -> (forall [_inst_10 : MulPosStrictMono.{u2} 𝕜 _inst_7 _inst_6 _inst_5] [_inst_11 : MulPosReflectLT.{u2} 𝕜 _inst_7 _inst_6 _inst_5], (Filter.Tendsto.{u1, u2} α 𝕜 f l (nhdsWithin.{u2} 𝕜 _inst_8 c (Set.Iio.{u2} 𝕜 _inst_5 c))) -> (Filter.Tendsto.{u1, u2} α 𝕜 (fun (a : α) => HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) (f a) b) l (nhdsWithin.{u2} 𝕜 _inst_8 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) c b) (Set.Iio.{u2} 𝕜 _inst_5 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) c b)))))
-Case conversion may be inaccurate. Consider using '#align filter.tendsto_nhds_within_Iio.mul_const Filter.TendstoNhdsWithinIio.mul_constₓ'. -/
theorem Filter.TendstoNhdsWithinIio.mul_const [MulPosStrictMono 𝕜] [MulPosReflectLT 𝕜]
(h : Tendsto f l (𝓝[<] c)) : Tendsto (fun a => f a * b) l (𝓝[<] (c * b)) :=
tendsto_nhdsWithin_of_tendsto_nhds_of_eventually_within _
@@ -298,12 +214,6 @@ theorem Filter.TendstoNhdsWithinIio.mul_const [MulPosStrictMono 𝕜] [MulPosRef
end tendsto_nhds
-/- warning: filter.tendsto.units -> Filter.Tendsto.units is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {N : Type.{u2}} [_inst_5 : TopologicalSpace.{u2} N] [_inst_6 : Monoid.{u2} N] [_inst_7 : ContinuousMul.{u2} N _inst_5 (MulOneClass.toHasMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_6))] [_inst_8 : T2Space.{u2} N _inst_5] {f : ι -> (Units.{u2} N _inst_6)} {r₁ : N} {r₂ : N} {l : Filter.{u1} ι} [_inst_9 : Filter.NeBot.{u1} ι l], (Filter.Tendsto.{u1, u2} ι N (fun (x : ι) => (fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Units.{u2} N _inst_6) N (HasLiftT.mk.{succ u2, succ u2} (Units.{u2} N _inst_6) N (CoeTCₓ.coe.{succ u2, succ u2} (Units.{u2} N _inst_6) N (coeBase.{succ u2, succ u2} (Units.{u2} N _inst_6) N (Units.hasCoe.{u2} N _inst_6)))) (f x)) l (nhds.{u2} N _inst_5 r₁)) -> (Filter.Tendsto.{u1, u2} ι N (fun (x : ι) => (fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Units.{u2} N _inst_6) N (HasLiftT.mk.{succ u2, succ u2} (Units.{u2} N _inst_6) N (CoeTCₓ.coe.{succ u2, succ u2} (Units.{u2} N _inst_6) N (coeBase.{succ u2, succ u2} (Units.{u2} N _inst_6) N (Units.hasCoe.{u2} N _inst_6)))) (Inv.inv.{u2} (Units.{u2} N _inst_6) (Units.hasInv.{u2} N _inst_6) (f x))) l (nhds.{u2} N _inst_5 r₂)) -> (Units.{u2} N _inst_6)
-but is expected to have type
- forall {ι : Type.{u1}} {N : Type.{u2}} [_inst_5 : TopologicalSpace.{u2} N] [_inst_6 : Monoid.{u2} N] [_inst_7 : ContinuousMul.{u2} N _inst_5 (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_6))] [_inst_8 : T2Space.{u2} N _inst_5] {f : ι -> (Units.{u2} N _inst_6)} {r₁ : N} {r₂ : N} {l : Filter.{u1} ι} [_inst_9 : Filter.NeBot.{u1} ι l], (Filter.Tendsto.{u1, u2} ι N (fun (x : ι) => Units.val.{u2} N _inst_6 (f x)) l (nhds.{u2} N _inst_5 r₁)) -> (Filter.Tendsto.{u1, u2} ι N (fun (x : ι) => Units.val.{u2} N _inst_6 (Inv.inv.{u2} (Units.{u2} N _inst_6) (Units.instInv.{u2} N _inst_6) (f x))) l (nhds.{u2} N _inst_5 r₂)) -> (Units.{u2} N _inst_6)
-Case conversion may be inaccurate. Consider using '#align filter.tendsto.units Filter.Tendsto.unitsₓ'. -/
/-- Construct a unit from limits of units and their inverses. -/
@[to_additive Filter.Tendsto.addUnits
"Construct an additive unit from limits of additive units\nand their negatives.",
@@ -319,12 +229,6 @@ def Filter.Tendsto.units [TopologicalSpace N] [Monoid N] [ContinuousMul N] [T2Sp
#align filter.tendsto.units Filter.Tendsto.units
#align filter.tendsto.add_units Filter.Tendsto.addUnits
-/- warning: continuous_at.mul -> ContinuousAt.mul is a dubious translation:
-lean 3 declaration is
- forall {X : Type.{u1}} {M : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} M] [_inst_3 : Mul.{u2} M] [_inst_4 : ContinuousMul.{u2} M _inst_2 _inst_3] {f : X -> M} {g : X -> M} {x : X}, (ContinuousAt.{u1, u2} X M _inst_1 _inst_2 f x) -> (ContinuousAt.{u1, u2} X M _inst_1 _inst_2 g x) -> (ContinuousAt.{u1, u2} X M _inst_1 _inst_2 (fun (x : X) => HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_3) (f x) (g x)) x)
-but is expected to have type
- forall {X : Type.{u2}} {M : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Mul.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 _inst_3] {f : X -> M} {g : X -> M} {x : X}, (ContinuousAt.{u2, u1} X M _inst_1 _inst_2 f x) -> (ContinuousAt.{u2, u1} X M _inst_1 _inst_2 g x) -> (ContinuousAt.{u2, u1} X M _inst_1 _inst_2 (fun (x : X) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) (f x) (g x)) x)
-Case conversion may be inaccurate. Consider using '#align continuous_at.mul ContinuousAt.mulₓ'. -/
@[to_additive]
theorem ContinuousAt.mul {f g : X → M} {x : X} (hf : ContinuousAt f x) (hg : ContinuousAt g x) :
ContinuousAt (fun x => f x * g x) x :=
@@ -332,12 +236,6 @@ theorem ContinuousAt.mul {f g : X → M} {x : X} (hf : ContinuousAt f x) (hg : C
#align continuous_at.mul ContinuousAt.mul
#align continuous_at.add ContinuousAt.add
-/- warning: continuous_within_at.mul -> ContinuousWithinAt.mul is a dubious translation:
-lean 3 declaration is
- forall {X : Type.{u1}} {M : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} M] [_inst_3 : Mul.{u2} M] [_inst_4 : ContinuousMul.{u2} M _inst_2 _inst_3] {f : X -> M} {g : X -> M} {s : Set.{u1} X} {x : X}, (ContinuousWithinAt.{u1, u2} X M _inst_1 _inst_2 f s x) -> (ContinuousWithinAt.{u1, u2} X M _inst_1 _inst_2 g s x) -> (ContinuousWithinAt.{u1, u2} X M _inst_1 _inst_2 (fun (x : X) => HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_3) (f x) (g x)) s x)
-but is expected to have type
- forall {X : Type.{u2}} {M : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Mul.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 _inst_3] {f : X -> M} {g : X -> M} {s : Set.{u2} X} {x : X}, (ContinuousWithinAt.{u2, u1} X M _inst_1 _inst_2 f s x) -> (ContinuousWithinAt.{u2, u1} X M _inst_1 _inst_2 g s x) -> (ContinuousWithinAt.{u2, u1} X M _inst_1 _inst_2 (fun (x : X) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) (f x) (g x)) s x)
-Case conversion may be inaccurate. Consider using '#align continuous_within_at.mul ContinuousWithinAt.mulₓ'. -/
@[to_additive]
theorem ContinuousWithinAt.mul {f g : X → M} {s : Set X} {x : X} (hf : ContinuousWithinAt f s x)
(hg : ContinuousWithinAt g s x) : ContinuousWithinAt (fun x => f x * g x) s x :=
@@ -384,12 +282,6 @@ open Filter
open Function
-/- warning: has_continuous_mul.of_nhds_one -> ContinuousMul.of_nhds_one is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} [_inst_5 : Monoid.{u1} M] [_inst_6 : TopologicalSpace.{u1} M], (Filter.Tendsto.{u1, u1} (Prod.{u1, u1} M M) M (Function.uncurry.{u1, u1, u1} M M M (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5))))) (Filter.prod.{u1, u1} M M (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5)))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5))))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5))))))) -> (forall (x₀ : M), Eq.{succ u1} (Filter.{u1} M) (nhds.{u1} M _inst_6 x₀) (Filter.map.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5))) x₀ x) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5)))))))) -> (forall (x₀ : M), Eq.{succ u1} (Filter.{u1} M) (nhds.{u1} M _inst_6 x₀) (Filter.map.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5))) x x₀) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5)))))))) -> (ContinuousMul.{u1} M _inst_6 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5)))
-but is expected to have type
- forall {M : Type.{u1}} [_inst_5 : Monoid.{u1} M] [_inst_6 : TopologicalSpace.{u1} M], (Filter.Tendsto.{u1, u1} (Prod.{u1, u1} M M) M (Function.uncurry.{u1, u1, u1} M M M (fun (x._@.Mathlib.Topology.Algebra.Monoid._hyg.2120 : M) (x._@.Mathlib.Topology.Algebra.Monoid._hyg.2122 : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5))) x._@.Mathlib.Topology.Algebra.Monoid._hyg.2120 x._@.Mathlib.Topology.Algebra.Monoid._hyg.2122)) (Filter.prod.{u1, u1} M M (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_5)))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_5))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_5))))) -> (forall (x₀ : M), Eq.{succ u1} (Filter.{u1} M) (nhds.{u1} M _inst_6 x₀) (Filter.map.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5))) x₀ x) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_5)))))) -> (forall (x₀ : M), Eq.{succ u1} (Filter.{u1} M) (nhds.{u1} M _inst_6 x₀) (Filter.map.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5))) x x₀) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_5)))))) -> (ContinuousMul.{u1} M _inst_6 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5)))
-Case conversion may be inaccurate. Consider using '#align has_continuous_mul.of_nhds_one ContinuousMul.of_nhds_oneₓ'. -/
@[to_additive]
theorem ContinuousMul.of_nhds_one {M : Type u} [Monoid M] [TopologicalSpace M]
(hmul : Tendsto (uncurry ((· * ·) : M → M → M)) (𝓝 1 ×ᶠ 𝓝 1) <| 𝓝 1)
@@ -416,12 +308,6 @@ theorem ContinuousMul.of_nhds_one {M : Type u} [Monoid M] [TopologicalSpace M]
#align has_continuous_mul.of_nhds_one ContinuousMul.of_nhds_one
#align has_continuous_add.of_nhds_zero ContinuousAdd.of_nhds_zero
-/- warning: has_continuous_mul_of_comm_of_nhds_one -> continuousMul_of_comm_of_nhds_one is a dubious translation:
-lean 3 declaration is
- forall (M : Type.{u1}) [_inst_5 : CommMonoid.{u1} M] [_inst_6 : TopologicalSpace.{u1} M], (Filter.Tendsto.{u1, u1} (Prod.{u1, u1} M M) M (Function.uncurry.{u1, u1, u1} M M M (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))))) (Filter.prod.{u1, u1} M M (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))))))) -> (forall (x₀ : M), Eq.{succ u1} (Filter.{u1} M) (nhds.{u1} M _inst_6 x₀) (Filter.map.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))) x₀ x) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))))))) -> (ContinuousMul.{u1} M _inst_6 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))
-but is expected to have type
- forall (M : Type.{u1}) [_inst_5 : CommMonoid.{u1} M] [_inst_6 : TopologicalSpace.{u1} M], (Filter.Tendsto.{u1, u1} (Prod.{u1, u1} M M) M (Function.uncurry.{u1, u1, u1} M M M (fun (x._@.Mathlib.Topology.Algebra.Monoid._hyg.2838 : M) (x._@.Mathlib.Topology.Algebra.Monoid._hyg.2840 : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))) x._@.Mathlib.Topology.Algebra.Monoid._hyg.2838 x._@.Mathlib.Topology.Algebra.Monoid._hyg.2840)) (Filter.prod.{u1, u1} M M (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))))) -> (forall (x₀ : M), Eq.{succ u1} (Filter.{u1} M) (nhds.{u1} M _inst_6 x₀) (Filter.map.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))) x₀ x) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))))) -> (ContinuousMul.{u1} M _inst_6 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))
-Case conversion may be inaccurate. Consider using '#align has_continuous_mul_of_comm_of_nhds_one continuousMul_of_comm_of_nhds_oneₓ'. -/
@[to_additive]
theorem continuousMul_of_comm_of_nhds_one (M : Type u) [CommMonoid M] [TopologicalSpace M]
(hmul : Tendsto (uncurry ((· * ·) : M → M → M)) (𝓝 1 ×ᶠ 𝓝 1) (𝓝 1))
@@ -439,24 +325,12 @@ section PointwiseLimits
variable (M₁ M₂ : Type _) [TopologicalSpace M₂] [T2Space M₂]
-/- warning: is_closed_set_of_map_one -> isClosed_setOf_map_one is a dubious translation:
-lean 3 declaration is
- forall (M₁ : Type.{u1}) (M₂ : Type.{u2}) [_inst_2 : TopologicalSpace.{u2} M₂] [_inst_3 : T2Space.{u2} M₂ _inst_2] [_inst_4 : One.{u1} M₁] [_inst_5 : One.{u2} M₂], IsClosed.{max u1 u2} (M₁ -> M₂) (Pi.topologicalSpace.{u1, u2} M₁ (fun (ᾰ : M₁) => M₂) (fun (a : M₁) => _inst_2)) (setOf.{max u1 u2} (M₁ -> M₂) (fun (f : M₁ -> M₂) => Eq.{succ u2} M₂ (f (OfNat.ofNat.{u1} M₁ 1 (OfNat.mk.{u1} M₁ 1 (One.one.{u1} M₁ _inst_4)))) (OfNat.ofNat.{u2} M₂ 1 (OfNat.mk.{u2} M₂ 1 (One.one.{u2} M₂ _inst_5)))))
-but is expected to have type
- forall (M₁ : Type.{u2}) (M₂ : Type.{u1}) [_inst_2 : TopologicalSpace.{u1} M₂] [_inst_3 : T2Space.{u1} M₂ _inst_2] [_inst_4 : One.{u2} M₁] [_inst_5 : One.{u1} M₂], IsClosed.{max u2 u1} (M₁ -> M₂) (Pi.topologicalSpace.{u2, u1} M₁ (fun (ᾰ : M₁) => M₂) (fun (a : M₁) => _inst_2)) (setOf.{max u2 u1} (M₁ -> M₂) (fun (f : M₁ -> M₂) => Eq.{succ u1} M₂ (f (OfNat.ofNat.{u2} M₁ 1 (One.toOfNat1.{u2} M₁ _inst_4))) (OfNat.ofNat.{u1} M₂ 1 (One.toOfNat1.{u1} M₂ _inst_5))))
-Case conversion may be inaccurate. Consider using '#align is_closed_set_of_map_one isClosed_setOf_map_oneₓ'. -/
@[to_additive]
theorem isClosed_setOf_map_one [One M₁] [One M₂] : IsClosed { f : M₁ → M₂ | f 1 = 1 } :=
isClosed_eq (continuous_apply 1) continuous_const
#align is_closed_set_of_map_one isClosed_setOf_map_one
#align is_closed_set_of_map_zero isClosed_setOf_map_zero
-/- warning: is_closed_set_of_map_mul -> isClosed_setOf_map_mul is a dubious translation:
-lean 3 declaration is
- forall (M₁ : Type.{u1}) (M₂ : Type.{u2}) [_inst_2 : TopologicalSpace.{u2} M₂] [_inst_3 : T2Space.{u2} M₂ _inst_2] [_inst_4 : Mul.{u1} M₁] [_inst_5 : Mul.{u2} M₂] [_inst_6 : ContinuousMul.{u2} M₂ _inst_2 _inst_5], IsClosed.{max u1 u2} (M₁ -> M₂) (Pi.topologicalSpace.{u1, u2} M₁ (fun (ᾰ : M₁) => M₂) (fun (a : M₁) => _inst_2)) (setOf.{max u1 u2} (M₁ -> M₂) (fun (f : M₁ -> M₂) => forall (x : M₁) (y : M₁), Eq.{succ u2} M₂ (f (HMul.hMul.{u1, u1, u1} M₁ M₁ M₁ (instHMul.{u1} M₁ _inst_4) x y)) (HMul.hMul.{u2, u2, u2} M₂ M₂ M₂ (instHMul.{u2} M₂ _inst_5) (f x) (f y))))
-but is expected to have type
- forall (M₁ : Type.{u2}) (M₂ : Type.{u1}) [_inst_2 : TopologicalSpace.{u1} M₂] [_inst_3 : T2Space.{u1} M₂ _inst_2] [_inst_4 : Mul.{u2} M₁] [_inst_5 : Mul.{u1} M₂] [_inst_6 : ContinuousMul.{u1} M₂ _inst_2 _inst_5], IsClosed.{max u2 u1} (M₁ -> M₂) (Pi.topologicalSpace.{u2, u1} M₁ (fun (ᾰ : M₁) => M₂) (fun (a : M₁) => _inst_2)) (setOf.{max u2 u1} (M₁ -> M₂) (fun (f : M₁ -> M₂) => forall (x : M₁) (y : M₁), Eq.{succ u1} M₂ (f (HMul.hMul.{u2, u2, u2} M₁ M₁ M₁ (instHMul.{u2} M₁ _inst_4) x y)) (HMul.hMul.{u1, u1, u1} M₂ M₂ M₂ (instHMul.{u1} M₂ _inst_5) (f x) (f y))))
-Case conversion may be inaccurate. Consider using '#align is_closed_set_of_map_mul isClosed_setOf_map_mulₓ'. -/
@[to_additive]
theorem isClosed_setOf_map_mul [Mul M₁] [Mul M₂] [ContinuousMul M₂] :
IsClosed { f : M₁ → M₂ | ∀ x y, f (x * y) = f x * f y } :=
@@ -472,12 +346,6 @@ theorem isClosed_setOf_map_mul [Mul M₁] [Mul M₂] [ContinuousMul M₂] :
variable {M₁ M₂} [MulOneClass M₁] [MulOneClass M₂] [ContinuousMul M₂] {F : Type _}
[MonoidHomClass F M₁ M₂] {l : Filter α}
-/- warning: monoid_hom_of_mem_closure_range_coe -> monoidHomOfMemClosureRangeCoe is a dubious translation:
-lean 3 declaration is
- forall {M₁ : Type.{u1}} {M₂ : Type.{u2}} [_inst_2 : TopologicalSpace.{u2} M₂] [_inst_3 : T2Space.{u2} M₂ _inst_2] [_inst_4 : MulOneClass.{u1} M₁] [_inst_5 : MulOneClass.{u2} M₂] [_inst_6 : ContinuousMul.{u2} M₂ _inst_2 (MulOneClass.toHasMul.{u2} M₂ _inst_5)] {F : Type.{u3}} [_inst_7 : MonoidHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5] (f : M₁ -> M₂), (Membership.Mem.{max u1 u2, max u1 u2} (M₁ -> M₂) (Set.{max u1 u2} (M₁ -> M₂)) (Set.hasMem.{max u1 u2} (M₁ -> M₂)) f (closure.{max u1 u2} (M₁ -> M₂) (Pi.topologicalSpace.{u1, u2} M₁ (fun (x : M₁) => M₂) (fun (a : M₁) => _inst_2)) (Set.range.{max u1 u2, succ u3} (M₁ -> M₂) F (fun (f : F) (x : M₁) => coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M₁ -> M₂) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M₁ (fun (_x : M₁) => M₂) (MulHomClass.toFunLike.{u3, u1, u2} F M₁ M₂ (MulOneClass.toHasMul.{u1} M₁ _inst_4) (MulOneClass.toHasMul.{u2} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5 _inst_7))) f x)))) -> (MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5)
-but is expected to have type
- forall {M₁ : Type.{u1}} {M₂ : Type.{u2}} [_inst_2 : TopologicalSpace.{u2} M₂] [_inst_3 : T2Space.{u2} M₂ _inst_2] [_inst_4 : MulOneClass.{u1} M₁] [_inst_5 : MulOneClass.{u2} M₂] [_inst_6 : ContinuousMul.{u2} M₂ _inst_2 (MulOneClass.toMul.{u2} M₂ _inst_5)] {F : Type.{u3}} [_inst_7 : MonoidHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5] (f : M₁ -> M₂), (Membership.mem.{max u1 u2, max u1 u2} (M₁ -> M₂) (Set.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) x)) (Set.instMembershipSet.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) x)) f (closure.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) x) (Pi.topologicalSpace.{u1, u2} M₁ (fun (x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) x) (fun (a : M₁) => _inst_2)) (Set.range.{max u1 u2, succ u3} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) x) F (fun (f : F) (x : M₁) => FunLike.coe.{succ u3, succ u1, succ u2} F M₁ (fun (_x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) _x) (MulHomClass.toFunLike.{u3, u1, u2} F M₁ M₂ (MulOneClass.toMul.{u1} M₁ _inst_4) (MulOneClass.toMul.{u2} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5 _inst_7)) f x)))) -> (MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5)
-Case conversion may be inaccurate. Consider using '#align monoid_hom_of_mem_closure_range_coe monoidHomOfMemClosureRangeCoeₓ'. -/
/-- Construct a bundled monoid homomorphism `M₁ →* M₂` from a function `f` and a proof that it
belongs to the closure of the range of the coercion from `M₁ →* M₂` (or another type of bundled
homomorphisms that has a `monoid_hom_class` instance) to `M₁ → M₂`. -/
@@ -493,9 +361,6 @@ def monoidHomOfMemClosureRangeCoe (f : M₁ → M₂)
#align monoid_hom_of_mem_closure_range_coe monoidHomOfMemClosureRangeCoe
#align add_monoid_hom_of_mem_closure_range_coe addMonoidHomOfMemClosureRangeCoe
-/- warning: monoid_hom_of_tendsto -> monoidHomOfTendsto is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align monoid_hom_of_tendsto monoidHomOfTendstoₓ'. -/
/-- Construct a bundled monoid homomorphism from a pointwise limit of monoid homomorphisms. -/
@[to_additive
"Construct a bundled additive monoid homomorphism from a pointwise limit of additive\nmonoid homomorphisms",
@@ -509,12 +374,6 @@ def monoidHomOfTendsto (f : M₁ → M₂) (g : α → F) [l.ne_bot]
variable (M₁ M₂)
-/- warning: monoid_hom.is_closed_range_coe -> MonoidHom.isClosed_range_coe is a dubious translation:
-lean 3 declaration is
- forall (M₁ : Type.{u1}) (M₂ : Type.{u2}) [_inst_2 : TopologicalSpace.{u2} M₂] [_inst_3 : T2Space.{u2} M₂ _inst_2] [_inst_4 : MulOneClass.{u1} M₁] [_inst_5 : MulOneClass.{u2} M₂] [_inst_6 : ContinuousMul.{u2} M₂ _inst_2 (MulOneClass.toHasMul.{u2} M₂ _inst_5)], IsClosed.{max u1 u2} (M₁ -> M₂) (Pi.topologicalSpace.{u1, u2} M₁ (fun (ᾰ : M₁) => M₂) (fun (a : M₁) => _inst_2)) (Set.range.{max u1 u2, max (succ u2) (succ u1)} (M₁ -> M₂) (MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5) (fun (ᾰ : MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5) => M₁ -> M₂) (MonoidHom.hasCoeToFun.{u1, u2} M₁ M₂ _inst_4 _inst_5)))
-but is expected to have type
- forall (M₁ : Type.{u2}) (M₂ : Type.{u1}) [_inst_2 : TopologicalSpace.{u1} M₂] [_inst_3 : T2Space.{u1} M₂ _inst_2] [_inst_4 : MulOneClass.{u2} M₁] [_inst_5 : MulOneClass.{u1} M₂] [_inst_6 : ContinuousMul.{u1} M₂ _inst_2 (MulOneClass.toMul.{u1} M₂ _inst_5)], IsClosed.{max u2 u1} (forall (ᾰ : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) ᾰ) (Pi.topologicalSpace.{u2, u1} M₁ (fun (ᾰ : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) ᾰ) (fun (a : M₁) => _inst_2)) (Set.range.{max u2 u1, max (succ u2) (succ u1)} (forall (ᾰ : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) ᾰ) (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ (fun (ᾰ : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) ᾰ) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ M₂ (MulOneClass.toMul.{u2} M₁ _inst_4) (MulOneClass.toMul.{u1} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ M₂ _inst_4 _inst_5 (MonoidHom.monoidHomClass.{u2, u1} M₁ M₂ _inst_4 _inst_5)))))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.is_closed_range_coe MonoidHom.isClosed_range_coeₓ'. -/
@[to_additive]
theorem MonoidHom.isClosed_range_coe : IsClosed (range (coeFn : (M₁ →* M₂) → M₁ → M₂)) :=
isClosed_of_closure_subset fun f hf => ⟨monoidHomOfMemClosureRangeCoe f hf, rfl⟩
@@ -523,12 +382,6 @@ theorem MonoidHom.isClosed_range_coe : IsClosed (range (coeFn : (M₁ →* M₂)
end PointwiseLimits
-/- warning: inducing.has_continuous_mul -> Inducing.continuousMul is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_2 : Mul.{u1} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u3, u1, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u1} M] [_inst_6 : TopologicalSpace.{u2} N] [_inst_7 : ContinuousMul.{u2} N _inst_6 _inst_3] (f : F), (Inducing.{u1, u2} M N _inst_5 _inst_6 (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N _inst_2 _inst_3 _inst_4)) f)) -> (ContinuousMul.{u1} M _inst_5 _inst_2)
-but is expected to have type
- forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} [_inst_2 : Mul.{u3} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u1, u3, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u3} M] [_inst_6 : TopologicalSpace.{u2} N] [_inst_7 : ContinuousMul.{u2} N _inst_6 _inst_3] (f : F), (Inducing.{u3, u2} M N _inst_5 _inst_6 (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N _inst_2 _inst_3 _inst_4) f)) -> (ContinuousMul.{u3} M _inst_5 _inst_2)
-Case conversion may be inaccurate. Consider using '#align inducing.has_continuous_mul Inducing.continuousMulₓ'. -/
@[to_additive]
theorem Inducing.continuousMul {M N F : Type _} [Mul M] [Mul N] [MulHomClass F M N]
[TopologicalSpace M] [TopologicalSpace N] [ContinuousMul N] (f : F) (hf : Inducing f) :
@@ -538,12 +391,6 @@ theorem Inducing.continuousMul {M N F : Type _} [Mul M] [Mul N] [MulHomClass F M
#align inducing.has_continuous_mul Inducing.continuousMul
#align inducing.has_continuous_add Inducing.continuousAdd
-/- warning: has_continuous_mul_induced -> continuousMul_induced is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_2 : Mul.{u1} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u3, u1, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u2} N] [_inst_6 : ContinuousMul.{u2} N _inst_5 _inst_3] (f : F), ContinuousMul.{u1} M (TopologicalSpace.induced.{u1, u2} M N (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N _inst_2 _inst_3 _inst_4)) f) _inst_5) _inst_2
-but is expected to have type
- forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} [_inst_2 : Mul.{u3} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u1, u3, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u2} N] [_inst_6 : ContinuousMul.{u2} N _inst_5 _inst_3] (f : F), ContinuousMul.{u3} M (TopologicalSpace.induced.{u3, u2} M N (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N _inst_2 _inst_3 _inst_4) f) _inst_5) _inst_2
-Case conversion may be inaccurate. Consider using '#align has_continuous_mul_induced continuousMul_inducedₓ'. -/
@[to_additive]
theorem continuousMul_induced {M N F : Type _} [Mul M] [Mul N] [MulHomClass F M N]
[TopologicalSpace N] [ContinuousMul N] (f : F) : @ContinuousMul M (induced f ‹_›) _ :=
@@ -552,12 +399,6 @@ theorem continuousMul_induced {M N F : Type _} [Mul M] [Mul N] [MulHomClass F M
#align has_continuous_mul_induced continuousMul_induced
#align has_continuous_add_induced continuousAdd_induced
-/- warning: subsemigroup.has_continuous_mul -> Subsemigroup.continuousMul is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Semigroup.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (Semigroup.toHasMul.{u1} M _inst_3)] (S : Subsemigroup.{u1} M (Semigroup.toHasMul.{u1} M _inst_3)), ContinuousMul.{u1} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M (Semigroup.toHasMul.{u1} M _inst_3)) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M (Semigroup.toHasMul.{u1} M _inst_3)) M (Subsemigroup.setLike.{u1} M (Semigroup.toHasMul.{u1} M _inst_3))) S) (Subtype.topologicalSpace.{u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M (Semigroup.toHasMul.{u1} M _inst_3)) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M (Semigroup.toHasMul.{u1} M _inst_3)) M (Subsemigroup.setLike.{u1} M (Semigroup.toHasMul.{u1} M _inst_3))) x S) _inst_2) (MulMemClass.mul.{u1, u1} M (Subsemigroup.{u1} M (Semigroup.toHasMul.{u1} M _inst_3)) (Semigroup.toHasMul.{u1} M _inst_3) (Subsemigroup.setLike.{u1} M (Semigroup.toHasMul.{u1} M _inst_3)) (Subsemigroup.mulMemClass.{u1} M (Semigroup.toHasMul.{u1} M _inst_3)) S)
-but is expected to have type
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Semigroup.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (Semigroup.toMul.{u1} M _inst_3)] (S : Subsemigroup.{u1} M (Semigroup.toMul.{u1} M _inst_3)), ContinuousMul.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Subsemigroup.{u1} M (Semigroup.toMul.{u1} M _inst_3)) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M (Semigroup.toMul.{u1} M _inst_3)) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M (Semigroup.toMul.{u1} M _inst_3))) x S)) (instTopologicalSpaceSubtype.{u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Subsemigroup.{u1} M (Semigroup.toMul.{u1} M _inst_3)) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M (Semigroup.toMul.{u1} M _inst_3)) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M (Semigroup.toMul.{u1} M _inst_3))) x S) _inst_2) (Semigroup.toMul.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Subsemigroup.{u1} M (Semigroup.toMul.{u1} M _inst_3)) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M (Semigroup.toMul.{u1} M _inst_3)) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M (Semigroup.toMul.{u1} M _inst_3))) x S)) (MulMemClass.toSemigroup.{u1, u1} M _inst_3 (Subsemigroup.{u1} M (Semigroup.toMul.{u1} M _inst_3)) (Subsemigroup.instSetLikeSubsemigroup.{u1} M (Semigroup.toMul.{u1} M _inst_3)) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} M (Semigroup.toMul.{u1} M _inst_3)) S))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.has_continuous_mul Subsemigroup.continuousMulₓ'. -/
@[to_additive]
instance Subsemigroup.continuousMul [TopologicalSpace M] [Semigroup M] [ContinuousMul M]
(S : Subsemigroup M) : ContinuousMul S :=
@@ -565,12 +406,6 @@ instance Subsemigroup.continuousMul [TopologicalSpace M] [Semigroup M] [Continuo
#align subsemigroup.has_continuous_mul Subsemigroup.continuousMul
#align add_subsemigroup.has_continuous_add AddSubsemigroup.continuousAdd
-/- warning: submonoid.has_continuous_mul -> Submonoid.continuousMul is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (S : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)), ContinuousMul.{u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) S) (Subtype.topologicalSpace.{u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) x S) _inst_2) (Submonoid.mul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3) S)
-but is expected to have type
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (S : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)), ContinuousMul.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) x S)) (instTopologicalSpaceSubtype.{u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) x S) _inst_2) (Submonoid.mul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3) S)
-Case conversion may be inaccurate. Consider using '#align submonoid.has_continuous_mul Submonoid.continuousMulₓ'. -/
@[to_additive]
instance Submonoid.continuousMul [TopologicalSpace M] [Monoid M] [ContinuousMul M]
(S : Submonoid M) : ContinuousMul S :=
@@ -582,12 +417,6 @@ section ContinuousMul
variable [TopologicalSpace M] [Monoid M] [ContinuousMul M]
-/- warning: submonoid.top_closure_mul_self_subset -> Submonoid.top_closure_mul_self_subset is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (s : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)), HasSubset.Subset.{u1} (Set.{u1} M) (Set.hasSubset.{u1} M) (HMul.hMul.{u1, u1, u1} (Set.{u1} M) (Set.{u1} M) (Set.{u1} M) (instHMul.{u1} (Set.{u1} M) (Set.mul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)))) (closure.{u1} M _inst_2 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) s)) (closure.{u1} M _inst_2 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) s))) (closure.{u1} M _inst_2 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) s))
-but is expected to have type
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (s : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)), HasSubset.Subset.{u1} (Set.{u1} M) (Set.instHasSubsetSet.{u1} M) (HMul.hMul.{u1, u1, u1} (Set.{u1} M) (Set.{u1} M) (Set.{u1} M) (instHMul.{u1} (Set.{u1} M) (Set.mul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)))) (closure.{u1} M _inst_2 (SetLike.coe.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) s)) (closure.{u1} M _inst_2 (SetLike.coe.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) s))) (closure.{u1} M _inst_2 (SetLike.coe.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) s))
-Case conversion may be inaccurate. Consider using '#align submonoid.top_closure_mul_self_subset Submonoid.top_closure_mul_self_subsetₓ'. -/
@[to_additive]
theorem Submonoid.top_closure_mul_self_subset (s : Submonoid M) :
closure (s : Set M) * closure s ⊆ closure s :=
@@ -596,12 +425,6 @@ theorem Submonoid.top_closure_mul_self_subset (s : Submonoid M) :
#align submonoid.top_closure_mul_self_subset Submonoid.top_closure_mul_self_subset
#align add_submonoid.top_closure_add_self_subset AddSubmonoid.top_closure_add_self_subset
-/- warning: submonoid.top_closure_mul_self_eq -> Submonoid.top_closure_mul_self_eq is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (s : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)), Eq.{succ u1} (Set.{u1} M) (HMul.hMul.{u1, u1, u1} (Set.{u1} M) (Set.{u1} M) (Set.{u1} M) (instHMul.{u1} (Set.{u1} M) (Set.mul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)))) (closure.{u1} M _inst_2 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) s)) (closure.{u1} M _inst_2 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) s))) (closure.{u1} M _inst_2 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) s))
-but is expected to have type
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (s : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)), Eq.{succ u1} (Set.{u1} M) (HMul.hMul.{u1, u1, u1} (Set.{u1} M) (Set.{u1} M) (Set.{u1} M) (instHMul.{u1} (Set.{u1} M) (Set.mul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)))) (closure.{u1} M _inst_2 (SetLike.coe.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) s)) (closure.{u1} M _inst_2 (SetLike.coe.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) s))) (closure.{u1} M _inst_2 (SetLike.coe.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) s))
-Case conversion may be inaccurate. Consider using '#align submonoid.top_closure_mul_self_eq Submonoid.top_closure_mul_self_eqₓ'. -/
@[to_additive]
theorem Submonoid.top_closure_mul_self_eq (s : Submonoid M) :
closure (s : Set M) * closure s = closure s :=
@@ -610,12 +433,6 @@ theorem Submonoid.top_closure_mul_self_eq (s : Submonoid M) :
#align submonoid.top_closure_mul_self_eq Submonoid.top_closure_mul_self_eq
#align add_submonoid.top_closure_add_self_eq AddSubmonoid.top_closure_add_self_eq
-/- warning: submonoid.topological_closure -> Submonoid.topologicalClosure is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))], (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) -> (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))
-but is expected to have type
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))], (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) -> (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))
-Case conversion may be inaccurate. Consider using '#align submonoid.topological_closure Submonoid.topologicalClosureₓ'. -/
/-- The (topological-space) closure of a submonoid of a space `M` with `has_continuous_mul` is
itself a submonoid. -/
@[to_additive
@@ -628,36 +445,18 @@ def Submonoid.topologicalClosure (s : Submonoid M) : Submonoid M
#align submonoid.topological_closure Submonoid.topologicalClosure
#align add_submonoid.topological_closure AddSubmonoid.topologicalClosure
-/- warning: submonoid.le_topological_closure -> Submonoid.le_topologicalClosure is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (s : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)), LE.le.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Preorder.toHasLe.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) s (Submonoid.topologicalClosure.{u1} M _inst_2 _inst_3 _inst_4 s)
-but is expected to have type
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (s : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)), LE.le.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Preorder.toLE.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Submonoid.instCompleteLatticeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)))))) s (Submonoid.topologicalClosure.{u1} M _inst_2 _inst_3 _inst_4 s)
-Case conversion may be inaccurate. Consider using '#align submonoid.le_topological_closure Submonoid.le_topologicalClosureₓ'. -/
@[to_additive]
theorem Submonoid.le_topologicalClosure (s : Submonoid M) : s ≤ s.topologicalClosure :=
subset_closure
#align submonoid.le_topological_closure Submonoid.le_topologicalClosure
#align add_submonoid.le_topological_closure AddSubmonoid.le_topologicalClosure
-/- warning: submonoid.is_closed_topological_closure -> Submonoid.isClosed_topologicalClosure is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (s : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)), IsClosed.{u1} M _inst_2 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) (Submonoid.topologicalClosure.{u1} M _inst_2 _inst_3 _inst_4 s))
-but is expected to have type
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (s : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)), IsClosed.{u1} M _inst_2 (SetLike.coe.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Submonoid.topologicalClosure.{u1} M _inst_2 _inst_3 _inst_4 s))
-Case conversion may be inaccurate. Consider using '#align submonoid.is_closed_topological_closure Submonoid.isClosed_topologicalClosureₓ'. -/
@[to_additive]
theorem Submonoid.isClosed_topologicalClosure (s : Submonoid M) :
IsClosed (s.topologicalClosure : Set M) := by convert isClosed_closure
#align submonoid.is_closed_topological_closure Submonoid.isClosed_topologicalClosure
#align add_submonoid.is_closed_topological_closure AddSubmonoid.isClosed_topologicalClosure
-/- warning: submonoid.topological_closure_minimal -> Submonoid.topologicalClosure_minimal is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (s : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) {t : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)}, (LE.le.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Preorder.toHasLe.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) s t) -> (IsClosed.{u1} M _inst_2 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) t)) -> (LE.le.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Preorder.toHasLe.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) (Submonoid.topologicalClosure.{u1} M _inst_2 _inst_3 _inst_4 s) t)
-but is expected to have type
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (s : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) {t : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)}, (LE.le.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Preorder.toLE.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Submonoid.instCompleteLatticeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)))))) s t) -> (IsClosed.{u1} M _inst_2 (SetLike.coe.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) t)) -> (LE.le.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Preorder.toLE.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Submonoid.instCompleteLatticeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)))))) (Submonoid.topologicalClosure.{u1} M _inst_2 _inst_3 _inst_4 s) t)
-Case conversion may be inaccurate. Consider using '#align submonoid.topological_closure_minimal Submonoid.topologicalClosure_minimalₓ'. -/
@[to_additive]
theorem Submonoid.topologicalClosure_minimal (s : Submonoid M) {t : Submonoid M} (h : s ≤ t)
(ht : IsClosed (t : Set M)) : s.topologicalClosure ≤ t :=
@@ -665,12 +464,6 @@ theorem Submonoid.topologicalClosure_minimal (s : Submonoid M) {t : Submonoid M}
#align submonoid.topological_closure_minimal Submonoid.topologicalClosure_minimal
#align add_submonoid.topological_closure_minimal AddSubmonoid.topologicalClosure_minimal
-/- warning: submonoid.comm_monoid_topological_closure -> Submonoid.commMonoidTopologicalClosure is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] [_inst_5 : T2Space.{u1} M _inst_2] (s : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)), (forall (x : coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) s) (y : coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) s), Eq.{succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) s) (HMul.hMul.{u1, u1, u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) s) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) s) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) s) (instHMul.{u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) s) (Submonoid.mul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3) s)) x y) (HMul.hMul.{u1, u1, u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) s) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) s) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) s) (instHMul.{u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) s) (Submonoid.mul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3) s)) y x)) -> (CommMonoid.{u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) (Submonoid.topologicalClosure.{u1} M _inst_2 _inst_3 _inst_4 s)))
-but is expected to have type
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] [_inst_5 : T2Space.{u1} M _inst_2] (s : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)), (forall (x : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) x s)) (y : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) x s)), Eq.{succ u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) x s)) (HMul.hMul.{u1, u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) x s)) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) x s)) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) x s)) (instHMul.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) x s)) (Submonoid.mul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3) s)) x y) (HMul.hMul.{u1, u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) x s)) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) x s)) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) x s)) (instHMul.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) x s)) (Submonoid.mul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3) s)) y x)) -> (CommMonoid.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) x (Submonoid.topologicalClosure.{u1} M _inst_2 _inst_3 _inst_4 s))))
-Case conversion may be inaccurate. Consider using '#align submonoid.comm_monoid_topological_closure Submonoid.commMonoidTopologicalClosureₓ'. -/
/-- If a submonoid of a topological monoid is commutative, then so is its topological closure. -/
@[to_additive
"If a submonoid of an additive topological monoid is commutative, then so is its\ntopological closure."]
@@ -686,12 +479,6 @@ def Submonoid.commMonoidTopologicalClosure [T2Space M] (s : Submonoid M)
#align submonoid.comm_monoid_topological_closure Submonoid.commMonoidTopologicalClosure
#align add_submonoid.add_comm_monoid_topological_closure AddSubmonoid.addCommMonoidTopologicalClosure
-/- warning: exists_open_nhds_one_split -> exists_open_nhds_one_split is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {s : Set.{u1} M}, (Membership.Mem.{u1, u1} (Set.{u1} M) (Filter.{u1} M) (Filter.hasMem.{u1} M) s (nhds.{u1} M _inst_2 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))))) -> (Exists.{succ u1} (Set.{u1} M) (fun (V : Set.{u1} M) => And (IsOpen.{u1} M _inst_2 V) (And (Membership.Mem.{u1, u1} M (Set.{u1} M) (Set.hasMem.{u1} M) (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) V) (forall (v : M), (Membership.Mem.{u1, u1} M (Set.{u1} M) (Set.hasMem.{u1} M) v V) -> (forall (w : M), (Membership.Mem.{u1, u1} M (Set.{u1} M) (Set.hasMem.{u1} M) w V) -> (Membership.Mem.{u1, u1} M (Set.{u1} M) (Set.hasMem.{u1} M) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) v w) s))))))
-but is expected to have type
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {s : Set.{u1} M}, (Membership.mem.{u1, u1} (Set.{u1} M) (Filter.{u1} M) (instMembershipSetFilter.{u1} M) s (nhds.{u1} M _inst_2 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_3))))) -> (Exists.{succ u1} (Set.{u1} M) (fun (V : Set.{u1} M) => And (IsOpen.{u1} M _inst_2 V) (And (Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_3))) V) (forall (v : M), (Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) v V) -> (forall (w : M), (Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) w V) -> (Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) v w) s))))))
-Case conversion may be inaccurate. Consider using '#align exists_open_nhds_one_split exists_open_nhds_one_splitₓ'. -/
@[to_additive exists_open_nhds_zero_half]
theorem exists_open_nhds_one_split {s : Set M} (hs : s ∈ 𝓝 (1 : M)) :
∃ V : Set M, IsOpen V ∧ (1 : M) ∈ V ∧ ∀ v ∈ V, ∀ w ∈ V, v * w ∈ s :=
@@ -702,12 +489,6 @@ theorem exists_open_nhds_one_split {s : Set M} (hs : s ∈ 𝓝 (1 : M)) :
#align exists_open_nhds_one_split exists_open_nhds_one_split
#align exists_open_nhds_zero_half exists_open_nhds_zero_half
-/- warning: exists_nhds_one_split -> exists_nhds_one_split is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {s : Set.{u1} M}, (Membership.Mem.{u1, u1} (Set.{u1} M) (Filter.{u1} M) (Filter.hasMem.{u1} M) s (nhds.{u1} M _inst_2 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))))) -> (Exists.{succ u1} (Set.{u1} M) (fun (V : Set.{u1} M) => Exists.{0} (Membership.Mem.{u1, u1} (Set.{u1} M) (Filter.{u1} M) (Filter.hasMem.{u1} M) V (nhds.{u1} M _inst_2 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))))) (fun (H : Membership.Mem.{u1, u1} (Set.{u1} M) (Filter.{u1} M) (Filter.hasMem.{u1} M) V (nhds.{u1} M _inst_2 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))))) => forall (v : M), (Membership.Mem.{u1, u1} M (Set.{u1} M) (Set.hasMem.{u1} M) v V) -> (forall (w : M), (Membership.Mem.{u1, u1} M (Set.{u1} M) (Set.hasMem.{u1} M) w V) -> (Membership.Mem.{u1, u1} M (Set.{u1} M) (Set.hasMem.{u1} M) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) v w) s)))))
-but is expected to have type
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {s : Set.{u1} M}, (Membership.mem.{u1, u1} (Set.{u1} M) (Filter.{u1} M) (instMembershipSetFilter.{u1} M) s (nhds.{u1} M _inst_2 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_3))))) -> (Exists.{succ u1} (Set.{u1} M) (fun (V : Set.{u1} M) => And (Membership.mem.{u1, u1} (Set.{u1} M) (Filter.{u1} M) (instMembershipSetFilter.{u1} M) V (nhds.{u1} M _inst_2 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_3))))) (forall (v : M), (Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) v V) -> (forall (w : M), (Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) w V) -> (Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) v w) s)))))
-Case conversion may be inaccurate. Consider using '#align exists_nhds_one_split exists_nhds_one_splitₓ'. -/
@[to_additive exists_nhds_zero_half]
theorem exists_nhds_one_split {s : Set M} (hs : s ∈ 𝓝 (1 : M)) :
∃ V ∈ 𝓝 (1 : M), ∀ v ∈ V, ∀ w ∈ V, v * w ∈ s :=
@@ -716,9 +497,6 @@ theorem exists_nhds_one_split {s : Set M} (hs : s ∈ 𝓝 (1 : M)) :
#align exists_nhds_one_split exists_nhds_one_split
#align exists_nhds_zero_half exists_nhds_zero_half
-/- warning: exists_nhds_one_split4 -> exists_nhds_one_split4 is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align exists_nhds_one_split4 exists_nhds_one_split4ₓ'. -/
@[to_additive exists_nhds_zero_quarter]
theorem exists_nhds_one_split4 {u : Set M} (hu : u ∈ 𝓝 (1 : M)) :
∃ V ∈ 𝓝 (1 : M), ∀ {v w s t}, v ∈ V → w ∈ V → s ∈ V → t ∈ V → v * w * s * t ∈ u :=
@@ -731,12 +509,6 @@ theorem exists_nhds_one_split4 {u : Set M} (hu : u ∈ 𝓝 (1 : M)) :
#align exists_nhds_one_split4 exists_nhds_one_split4
#align exists_nhds_zero_quarter exists_nhds_zero_quarter
-/- warning: exists_open_nhds_one_mul_subset -> exists_open_nhds_one_mul_subset is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {U : Set.{u1} M}, (Membership.Mem.{u1, u1} (Set.{u1} M) (Filter.{u1} M) (Filter.hasMem.{u1} M) U (nhds.{u1} M _inst_2 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))))) -> (Exists.{succ u1} (Set.{u1} M) (fun (V : Set.{u1} M) => And (IsOpen.{u1} M _inst_2 V) (And (Membership.Mem.{u1, u1} M (Set.{u1} M) (Set.hasMem.{u1} M) (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) V) (HasSubset.Subset.{u1} (Set.{u1} M) (Set.hasSubset.{u1} M) (HMul.hMul.{u1, u1, u1} (Set.{u1} M) (Set.{u1} M) (Set.{u1} M) (instHMul.{u1} (Set.{u1} M) (Set.mul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)))) V V) U))))
-but is expected to have type
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {U : Set.{u1} M}, (Membership.mem.{u1, u1} (Set.{u1} M) (Filter.{u1} M) (instMembershipSetFilter.{u1} M) U (nhds.{u1} M _inst_2 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_3))))) -> (Exists.{succ u1} (Set.{u1} M) (fun (V : Set.{u1} M) => And (IsOpen.{u1} M _inst_2 V) (And (Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_3))) V) (HasSubset.Subset.{u1} (Set.{u1} M) (Set.instHasSubsetSet.{u1} M) (HMul.hMul.{u1, u1, u1} (Set.{u1} M) (Set.{u1} M) (Set.{u1} M) (instHMul.{u1} (Set.{u1} M) (Set.mul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)))) V V) U))))
-Case conversion may be inaccurate. Consider using '#align exists_open_nhds_one_mul_subset exists_open_nhds_one_mul_subsetₓ'. -/
/-- Given a neighborhood `U` of `1` there is an open neighborhood `V` of `1`
such that `VV ⊆ U`. -/
@[to_additive
@@ -751,24 +523,12 @@ theorem exists_open_nhds_one_mul_subset {U : Set M} (hU : U ∈ 𝓝 (1 : M)) :
#align exists_open_nhds_one_mul_subset exists_open_nhds_one_mul_subset
#align exists_open_nhds_zero_add_subset exists_open_nhds_zero_add_subset
-/- warning: is_compact.mul -> IsCompact.mul is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {s : Set.{u1} M} {t : Set.{u1} M}, (IsCompact.{u1} M _inst_2 s) -> (IsCompact.{u1} M _inst_2 t) -> (IsCompact.{u1} M _inst_2 (HMul.hMul.{u1, u1, u1} (Set.{u1} M) (Set.{u1} M) (Set.{u1} M) (instHMul.{u1} (Set.{u1} M) (Set.mul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)))) s t))
-but is expected to have type
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {s : Set.{u1} M} {t : Set.{u1} M}, (IsCompact.{u1} M _inst_2 s) -> (IsCompact.{u1} M _inst_2 t) -> (IsCompact.{u1} M _inst_2 (HMul.hMul.{u1, u1, u1} (Set.{u1} M) (Set.{u1} M) (Set.{u1} M) (instHMul.{u1} (Set.{u1} M) (Set.mul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)))) s t))
-Case conversion may be inaccurate. Consider using '#align is_compact.mul IsCompact.mulₓ'. -/
@[to_additive]
theorem IsCompact.mul {s t : Set M} (hs : IsCompact s) (ht : IsCompact t) : IsCompact (s * t) := by
rw [← image_mul_prod]; exact (hs.prod ht).image continuous_mul
#align is_compact.mul IsCompact.mul
#align is_compact.add IsCompact.add
-/- warning: tendsto_list_prod -> tendsto_list_prod is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {α : Type.{u2}} {M : Type.{u3}} [_inst_2 : TopologicalSpace.{u3} M] [_inst_3 : Monoid.{u3} M] [_inst_4 : ContinuousMul.{u3} M _inst_2 (MulOneClass.toHasMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_3))] {f : ι -> α -> M} {x : Filter.{u2} α} {a : ι -> M} (l : List.{u1} ι), (forall (i : ι), (Membership.Mem.{u1, u1} ι (List.{u1} ι) (List.hasMem.{u1} ι) i l) -> (Filter.Tendsto.{u2, u3} α M (f i) x (nhds.{u3} M _inst_2 (a i)))) -> (Filter.Tendsto.{u2, u3} α M (fun (b : α) => List.prod.{u3} M (MulOneClass.toHasMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_3)) (MulOneClass.toHasOne.{u3} M (Monoid.toMulOneClass.{u3} M _inst_3)) (List.map.{u1, u3} ι M (fun (c : ι) => f c b) l)) x (nhds.{u3} M _inst_2 (List.prod.{u3} M (MulOneClass.toHasMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_3)) (MulOneClass.toHasOne.{u3} M (Monoid.toMulOneClass.{u3} M _inst_3)) (List.map.{u1, u3} ι M a l))))
-but is expected to have type
- forall {ι : Type.{u2}} {α : Type.{u3}} {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {f : ι -> α -> M} {x : Filter.{u3} α} {a : ι -> M} (l : List.{u2} ι), (forall (i : ι), (Membership.mem.{u2, u2} ι (List.{u2} ι) (List.instMembershipList.{u2} ι) i l) -> (Filter.Tendsto.{u3, u1} α M (f i) x (nhds.{u1} M _inst_2 (a i)))) -> (Filter.Tendsto.{u3, u1} α M (fun (b : α) => List.prod.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Monoid.toOne.{u1} M _inst_3) (List.map.{u2, u1} ι M (fun (c : ι) => f c b) l)) x (nhds.{u1} M _inst_2 (List.prod.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Monoid.toOne.{u1} M _inst_3) (List.map.{u2, u1} ι M a l))))
-Case conversion may be inaccurate. Consider using '#align tendsto_list_prod tendsto_list_prodₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@[to_additive]
theorem tendsto_list_prod {f : ι → α → M} {x : Filter α} {a : ι → M} :
@@ -784,12 +544,6 @@ theorem tendsto_list_prod {f : ι → α → M} {x : Filter α} {a : ι → M} :
#align tendsto_list_prod tendsto_list_prod
#align tendsto_list_sum tendsto_list_sum
-/- warning: continuous_list_prod -> continuous_list_prod is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {X : Type.{u2}} {M : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u3} M] [_inst_3 : Monoid.{u3} M] [_inst_4 : ContinuousMul.{u3} M _inst_2 (MulOneClass.toHasMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_3))] {f : ι -> X -> M} (l : List.{u1} ι), (forall (i : ι), (Membership.Mem.{u1, u1} ι (List.{u1} ι) (List.hasMem.{u1} ι) i l) -> (Continuous.{u2, u3} X M _inst_1 _inst_2 (f i))) -> (Continuous.{u2, u3} X M _inst_1 _inst_2 (fun (a : X) => List.prod.{u3} M (MulOneClass.toHasMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_3)) (MulOneClass.toHasOne.{u3} M (Monoid.toMulOneClass.{u3} M _inst_3)) (List.map.{u1, u3} ι M (fun (i : ι) => f i a) l)))
-but is expected to have type
- forall {ι : Type.{u3}} {X : Type.{u2}} {M : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {f : ι -> X -> M} (l : List.{u3} ι), (forall (i : ι), (Membership.mem.{u3, u3} ι (List.{u3} ι) (List.instMembershipList.{u3} ι) i l) -> (Continuous.{u2, u1} X M _inst_1 _inst_2 (f i))) -> (Continuous.{u2, u1} X M _inst_1 _inst_2 (fun (a : X) => List.prod.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Monoid.toOne.{u1} M _inst_3) (List.map.{u3, u1} ι M (fun (i : ι) => f i a) l)))
-Case conversion may be inaccurate. Consider using '#align continuous_list_prod continuous_list_prodₓ'. -/
@[to_additive]
theorem continuous_list_prod {f : ι → X → M} (l : List ι) (h : ∀ i ∈ l, Continuous (f i)) :
Continuous fun a => (l.map fun i => f i a).Prod :=
@@ -798,12 +552,6 @@ theorem continuous_list_prod {f : ι → X → M} (l : List ι) (h : ∀ i ∈ l
#align continuous_list_prod continuous_list_prod
#align continuous_list_sum continuous_list_sum
-/- warning: continuous_on_list_prod -> continuousOn_list_prod is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {X : Type.{u2}} {M : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u3} M] [_inst_3 : Monoid.{u3} M] [_inst_4 : ContinuousMul.{u3} M _inst_2 (MulOneClass.toHasMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_3))] {f : ι -> X -> M} (l : List.{u1} ι) {t : Set.{u2} X}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (List.{u1} ι) (List.hasMem.{u1} ι) i l) -> (ContinuousOn.{u2, u3} X M _inst_1 _inst_2 (f i) t)) -> (ContinuousOn.{u2, u3} X M _inst_1 _inst_2 (fun (a : X) => List.prod.{u3} M (MulOneClass.toHasMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_3)) (MulOneClass.toHasOne.{u3} M (Monoid.toMulOneClass.{u3} M _inst_3)) (List.map.{u1, u3} ι M (fun (i : ι) => f i a) l)) t)
-but is expected to have type
- forall {ι : Type.{u3}} {X : Type.{u2}} {M : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {f : ι -> X -> M} (l : List.{u3} ι) {t : Set.{u2} X}, (forall (i : ι), (Membership.mem.{u3, u3} ι (List.{u3} ι) (List.instMembershipList.{u3} ι) i l) -> (ContinuousOn.{u2, u1} X M _inst_1 _inst_2 (f i) t)) -> (ContinuousOn.{u2, u1} X M _inst_1 _inst_2 (fun (a : X) => List.prod.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Monoid.toOne.{u1} M _inst_3) (List.map.{u3, u1} ι M (fun (i : ι) => f i a) l)) t)
-Case conversion may be inaccurate. Consider using '#align continuous_on_list_prod continuousOn_list_prodₓ'. -/
@[to_additive]
theorem continuousOn_list_prod {f : ι → X → M} (l : List ι) {t : Set X}
(h : ∀ i ∈ l, ContinuousOn (f i) t) : ContinuousOn (fun a => (l.map fun i => f i a).Prod) t :=
@@ -817,12 +565,6 @@ theorem continuousOn_list_prod {f : ι → X → M} (l : List ι) {t : Set X}
#align continuous_on_list_prod continuousOn_list_prod
#align continuous_on_list_sum continuousOn_list_sum
-/- warning: continuous_pow -> continuous_pow is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (n : Nat), Continuous.{u1, u1} M M _inst_2 _inst_2 (fun (a : M) => HPow.hPow.{u1, 0, u1} M Nat M (instHPow.{u1, 0} M Nat (Monoid.Pow.{u1} M _inst_3)) a n)
-but is expected to have type
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (n : Nat), Continuous.{u1, u1} M M _inst_2 _inst_2 (fun (a : M) => HPow.hPow.{u1, 0, u1} M Nat M (instHPow.{u1, 0} M Nat (Monoid.Pow.{u1} M _inst_3)) a n)
-Case conversion may be inaccurate. Consider using '#align continuous_pow continuous_powₓ'. -/
@[continuity, to_additive]
theorem continuous_pow : ∀ n : ℕ, Continuous fun a : M => a ^ n
| 0 => by simpa using continuous_const
@@ -830,70 +572,34 @@ theorem continuous_pow : ∀ n : ℕ, Continuous fun a : M => a ^ n
#align continuous_pow continuous_pow
#align continuous_nsmul continuous_nsmul
-/- warning: add_monoid.has_continuous_const_smul_nat -> AddMonoid.continuousConstSMul_nat is a dubious translation:
-lean 3 declaration is
- forall {A : Type.{u1}} [_inst_5 : AddMonoid.{u1} A] [_inst_6 : TopologicalSpace.{u1} A] [_inst_7 : ContinuousAdd.{u1} A _inst_6 (AddZeroClass.toHasAdd.{u1} A (AddMonoid.toAddZeroClass.{u1} A _inst_5))], ContinuousConstSMul.{0, u1} Nat A _inst_6 (AddMonoid.SMul.{u1} A _inst_5)
-but is expected to have type
- forall {A : Type.{u1}} [_inst_5 : AddMonoid.{u1} A] [_inst_6 : TopologicalSpace.{u1} A] [_inst_7 : ContinuousAdd.{u1} A _inst_6 (AddZeroClass.toAdd.{u1} A (AddMonoid.toAddZeroClass.{u1} A _inst_5))], ContinuousConstSMul.{0, u1} Nat A _inst_6 (AddMonoid.SMul.{u1} A _inst_5)
-Case conversion may be inaccurate. Consider using '#align add_monoid.has_continuous_const_smul_nat AddMonoid.continuousConstSMul_natₓ'. -/
instance AddMonoid.continuousConstSMul_nat {A} [AddMonoid A] [TopologicalSpace A]
[ContinuousAdd A] : ContinuousConstSMul ℕ A :=
⟨continuous_nsmul⟩
#align add_monoid.has_continuous_const_smul_nat AddMonoid.continuousConstSMul_nat
-/- warning: add_monoid.has_continuous_smul_nat -> AddMonoid.continuousSMul_nat is a dubious translation:
-lean 3 declaration is
- forall {A : Type.{u1}} [_inst_5 : AddMonoid.{u1} A] [_inst_6 : TopologicalSpace.{u1} A] [_inst_7 : ContinuousAdd.{u1} A _inst_6 (AddZeroClass.toHasAdd.{u1} A (AddMonoid.toAddZeroClass.{u1} A _inst_5))], ContinuousSMul.{0, u1} Nat A (AddMonoid.SMul.{u1} A _inst_5) Nat.topologicalSpace _inst_6
-but is expected to have type
- forall {A : Type.{u1}} [_inst_5 : AddMonoid.{u1} A] [_inst_6 : TopologicalSpace.{u1} A] [_inst_7 : ContinuousAdd.{u1} A _inst_6 (AddZeroClass.toAdd.{u1} A (AddMonoid.toAddZeroClass.{u1} A _inst_5))], ContinuousSMul.{0, u1} Nat A (AddMonoid.SMul.{u1} A _inst_5) instTopologicalSpaceNat _inst_6
-Case conversion may be inaccurate. Consider using '#align add_monoid.has_continuous_smul_nat AddMonoid.continuousSMul_natₓ'. -/
instance AddMonoid.continuousSMul_nat {A} [AddMonoid A] [TopologicalSpace A] [ContinuousAdd A] :
ContinuousSMul ℕ A :=
⟨continuous_uncurry_of_discreteTopology continuous_nsmul⟩
#align add_monoid.has_continuous_smul_nat AddMonoid.continuousSMul_nat
-/- warning: continuous.pow -> Continuous.pow is a dubious translation:
-lean 3 declaration is
- forall {X : Type.{u1}} {M : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} M] [_inst_3 : Monoid.{u2} M] [_inst_4 : ContinuousMul.{u2} M _inst_2 (MulOneClass.toHasMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_3))] {f : X -> M}, (Continuous.{u1, u2} X M _inst_1 _inst_2 f) -> (forall (n : Nat), Continuous.{u1, u2} X M _inst_1 _inst_2 (fun (b : X) => HPow.hPow.{u2, 0, u2} M Nat M (instHPow.{u2, 0} M Nat (Monoid.Pow.{u2} M _inst_3)) (f b) n))
-but is expected to have type
- forall {X : Type.{u2}} {M : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {f : X -> M}, (Continuous.{u2, u1} X M _inst_1 _inst_2 f) -> (forall (n : Nat), Continuous.{u2, u1} X M _inst_1 _inst_2 (fun (b : X) => HPow.hPow.{u1, 0, u1} M Nat M (instHPow.{u1, 0} M Nat (Monoid.Pow.{u1} M _inst_3)) (f b) n))
-Case conversion may be inaccurate. Consider using '#align continuous.pow Continuous.powₓ'. -/
@[continuity, to_additive Continuous.nsmul]
theorem Continuous.pow {f : X → M} (h : Continuous f) (n : ℕ) : Continuous fun b => f b ^ n :=
(continuous_pow n).comp h
#align continuous.pow Continuous.pow
#align continuous.nsmul Continuous.nsmul
-/- warning: continuous_on_pow -> continuousOn_pow is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {s : Set.{u1} M} (n : Nat), ContinuousOn.{u1, u1} M M _inst_2 _inst_2 (fun (x : M) => HPow.hPow.{u1, 0, u1} M Nat M (instHPow.{u1, 0} M Nat (Monoid.Pow.{u1} M _inst_3)) x n) s
-but is expected to have type
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {s : Set.{u1} M} (n : Nat), ContinuousOn.{u1, u1} M M _inst_2 _inst_2 (fun (x : M) => HPow.hPow.{u1, 0, u1} M Nat M (instHPow.{u1, 0} M Nat (Monoid.Pow.{u1} M _inst_3)) x n) s
-Case conversion may be inaccurate. Consider using '#align continuous_on_pow continuousOn_powₓ'. -/
@[to_additive]
theorem continuousOn_pow {s : Set M} (n : ℕ) : ContinuousOn (fun x => x ^ n) s :=
(continuous_pow n).ContinuousOn
#align continuous_on_pow continuousOn_pow
#align continuous_on_nsmul continuousOn_nsmul
-/- warning: continuous_at_pow -> continuousAt_pow is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (x : M) (n : Nat), ContinuousAt.{u1, u1} M M _inst_2 _inst_2 (fun (x : M) => HPow.hPow.{u1, 0, u1} M Nat M (instHPow.{u1, 0} M Nat (Monoid.Pow.{u1} M _inst_3)) x n) x
-but is expected to have type
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (x : M) (n : Nat), ContinuousAt.{u1, u1} M M _inst_2 _inst_2 (fun (x : M) => HPow.hPow.{u1, 0, u1} M Nat M (instHPow.{u1, 0} M Nat (Monoid.Pow.{u1} M _inst_3)) x n) x
-Case conversion may be inaccurate. Consider using '#align continuous_at_pow continuousAt_powₓ'. -/
@[to_additive]
theorem continuousAt_pow (x : M) (n : ℕ) : ContinuousAt (fun x => x ^ n) x :=
(continuous_pow n).ContinuousAt
#align continuous_at_pow continuousAt_pow
#align continuous_at_nsmul continuousAt_nsmul
-/- warning: filter.tendsto.pow -> Filter.Tendsto.pow is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} [_inst_2 : TopologicalSpace.{u2} M] [_inst_3 : Monoid.{u2} M] [_inst_4 : ContinuousMul.{u2} M _inst_2 (MulOneClass.toHasMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_3))] {l : Filter.{u1} α} {f : α -> M} {x : M}, (Filter.Tendsto.{u1, u2} α M f l (nhds.{u2} M _inst_2 x)) -> (forall (n : Nat), Filter.Tendsto.{u1, u2} α M (fun (x : α) => HPow.hPow.{u2, 0, u2} M Nat M (instHPow.{u2, 0} M Nat (Monoid.Pow.{u2} M _inst_3)) (f x) n) l (nhds.{u2} M _inst_2 (HPow.hPow.{u2, 0, u2} M Nat M (instHPow.{u2, 0} M Nat (Monoid.Pow.{u2} M _inst_3)) x n)))
-but is expected to have type
- forall {α : Type.{u2}} {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {l : Filter.{u2} α} {f : α -> M} {x : M}, (Filter.Tendsto.{u2, u1} α M f l (nhds.{u1} M _inst_2 x)) -> (forall (n : Nat), Filter.Tendsto.{u2, u1} α M (fun (x : α) => HPow.hPow.{u1, 0, u1} M Nat M (instHPow.{u1, 0} M Nat (Monoid.Pow.{u1} M _inst_3)) (f x) n) l (nhds.{u1} M _inst_2 (HPow.hPow.{u1, 0, u1} M Nat M (instHPow.{u1, 0} M Nat (Monoid.Pow.{u1} M _inst_3)) x n)))
-Case conversion may be inaccurate. Consider using '#align filter.tendsto.pow Filter.Tendsto.powₓ'. -/
@[to_additive Filter.Tendsto.nsmul]
theorem Filter.Tendsto.pow {l : Filter α} {f : α → M} {x : M} (hf : Tendsto f l (𝓝 x)) (n : ℕ) :
Tendsto (fun x => f x ^ n) l (𝓝 (x ^ n)) :=
@@ -901,12 +607,6 @@ theorem Filter.Tendsto.pow {l : Filter α} {f : α → M} {x : M} (hf : Tendsto
#align filter.tendsto.pow Filter.Tendsto.pow
#align filter.tendsto.nsmul Filter.Tendsto.nsmul
-/- warning: continuous_within_at.pow -> ContinuousWithinAt.pow is a dubious translation:
-lean 3 declaration is
- forall {X : Type.{u1}} {M : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} M] [_inst_3 : Monoid.{u2} M] [_inst_4 : ContinuousMul.{u2} M _inst_2 (MulOneClass.toHasMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_3))] {f : X -> M} {x : X} {s : Set.{u1} X}, (ContinuousWithinAt.{u1, u2} X M _inst_1 _inst_2 f s x) -> (forall (n : Nat), ContinuousWithinAt.{u1, u2} X M _inst_1 _inst_2 (fun (x : X) => HPow.hPow.{u2, 0, u2} M Nat M (instHPow.{u2, 0} M Nat (Monoid.Pow.{u2} M _inst_3)) (f x) n) s x)
-but is expected to have type
- forall {X : Type.{u2}} {M : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {f : X -> M} {x : X} {s : Set.{u2} X}, (ContinuousWithinAt.{u2, u1} X M _inst_1 _inst_2 f s x) -> (forall (n : Nat), ContinuousWithinAt.{u2, u1} X M _inst_1 _inst_2 (fun (x : X) => HPow.hPow.{u1, 0, u1} M Nat M (instHPow.{u1, 0} M Nat (Monoid.Pow.{u1} M _inst_3)) (f x) n) s x)
-Case conversion may be inaccurate. Consider using '#align continuous_within_at.pow ContinuousWithinAt.powₓ'. -/
@[to_additive ContinuousWithinAt.nsmul]
theorem ContinuousWithinAt.pow {f : X → M} {x : X} {s : Set X} (hf : ContinuousWithinAt f s x)
(n : ℕ) : ContinuousWithinAt (fun x => f x ^ n) s x :=
@@ -914,12 +614,6 @@ theorem ContinuousWithinAt.pow {f : X → M} {x : X} {s : Set X} (hf : Continuou
#align continuous_within_at.pow ContinuousWithinAt.pow
#align continuous_within_at.nsmul ContinuousWithinAt.nsmul
-/- warning: continuous_at.pow -> ContinuousAt.pow is a dubious translation:
-lean 3 declaration is
- forall {X : Type.{u1}} {M : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} M] [_inst_3 : Monoid.{u2} M] [_inst_4 : ContinuousMul.{u2} M _inst_2 (MulOneClass.toHasMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_3))] {f : X -> M} {x : X}, (ContinuousAt.{u1, u2} X M _inst_1 _inst_2 f x) -> (forall (n : Nat), ContinuousAt.{u1, u2} X M _inst_1 _inst_2 (fun (x : X) => HPow.hPow.{u2, 0, u2} M Nat M (instHPow.{u2, 0} M Nat (Monoid.Pow.{u2} M _inst_3)) (f x) n) x)
-but is expected to have type
- forall {X : Type.{u2}} {M : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {f : X -> M} {x : X}, (ContinuousAt.{u2, u1} X M _inst_1 _inst_2 f x) -> (forall (n : Nat), ContinuousAt.{u2, u1} X M _inst_1 _inst_2 (fun (x : X) => HPow.hPow.{u1, 0, u1} M Nat M (instHPow.{u1, 0} M Nat (Monoid.Pow.{u1} M _inst_3)) (f x) n) x)
-Case conversion may be inaccurate. Consider using '#align continuous_at.pow ContinuousAt.powₓ'. -/
@[to_additive ContinuousAt.nsmul]
theorem ContinuousAt.pow {f : X → M} {x : X} (hf : ContinuousAt f x) (n : ℕ) :
ContinuousAt (fun x => f x ^ n) x :=
@@ -927,24 +621,12 @@ theorem ContinuousAt.pow {f : X → M} {x : X} (hf : ContinuousAt f x) (n : ℕ)
#align continuous_at.pow ContinuousAt.pow
#align continuous_at.nsmul ContinuousAt.nsmul
-/- warning: continuous_on.pow -> ContinuousOn.pow is a dubious translation:
-lean 3 declaration is
- forall {X : Type.{u1}} {M : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} M] [_inst_3 : Monoid.{u2} M] [_inst_4 : ContinuousMul.{u2} M _inst_2 (MulOneClass.toHasMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_3))] {f : X -> M} {s : Set.{u1} X}, (ContinuousOn.{u1, u2} X M _inst_1 _inst_2 f s) -> (forall (n : Nat), ContinuousOn.{u1, u2} X M _inst_1 _inst_2 (fun (x : X) => HPow.hPow.{u2, 0, u2} M Nat M (instHPow.{u2, 0} M Nat (Monoid.Pow.{u2} M _inst_3)) (f x) n) s)
-but is expected to have type
- forall {X : Type.{u2}} {M : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {f : X -> M} {s : Set.{u2} X}, (ContinuousOn.{u2, u1} X M _inst_1 _inst_2 f s) -> (forall (n : Nat), ContinuousOn.{u2, u1} X M _inst_1 _inst_2 (fun (x : X) => HPow.hPow.{u1, 0, u1} M Nat M (instHPow.{u1, 0} M Nat (Monoid.Pow.{u1} M _inst_3)) (f x) n) s)
-Case conversion may be inaccurate. Consider using '#align continuous_on.pow ContinuousOn.powₓ'. -/
@[to_additive ContinuousOn.nsmul]
theorem ContinuousOn.pow {f : X → M} {s : Set X} (hf : ContinuousOn f s) (n : ℕ) :
ContinuousOn (fun x => f x ^ n) s := fun x hx => (hf x hx).pow n
#align continuous_on.pow ContinuousOn.pow
#align continuous_on.nsmul ContinuousOn.nsmul
-/- warning: filter.tendsto_cocompact_mul_left -> Filter.tendsto_cocompact_mul_left is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {a : M} {b : M}, (Eq.{succ u1} M (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) b a) (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)))))) -> (Filter.Tendsto.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) a x) (Filter.cocompact.{u1} M _inst_2) (Filter.cocompact.{u1} M _inst_2))
-but is expected to have type
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {a : M} {b : M}, (Eq.{succ u1} M (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) b a) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_3)))) -> (Filter.Tendsto.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) a x) (Filter.cocompact.{u1} M _inst_2) (Filter.cocompact.{u1} M _inst_2))
-Case conversion may be inaccurate. Consider using '#align filter.tendsto_cocompact_mul_left Filter.tendsto_cocompact_mul_leftₓ'. -/
/-- Left-multiplication by a left-invertible element of a topological monoid is proper, i.e.,
inverse images of compact sets are compact. -/
theorem Filter.tendsto_cocompact_mul_left {a b : M} (ha : b * a = 1) :
@@ -956,12 +638,6 @@ theorem Filter.tendsto_cocompact_mul_left {a b : M} (ha : b * a = 1) :
simp [ha]
#align filter.tendsto_cocompact_mul_left Filter.tendsto_cocompact_mul_left
-/- warning: filter.tendsto_cocompact_mul_right -> Filter.tendsto_cocompact_mul_right is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {a : M} {b : M}, (Eq.{succ u1} M (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) a b) (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)))))) -> (Filter.Tendsto.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) x a) (Filter.cocompact.{u1} M _inst_2) (Filter.cocompact.{u1} M _inst_2))
-but is expected to have type
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {a : M} {b : M}, (Eq.{succ u1} M (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) a b) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_3)))) -> (Filter.Tendsto.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) x a) (Filter.cocompact.{u1} M _inst_2) (Filter.cocompact.{u1} M _inst_2))
-Case conversion may be inaccurate. Consider using '#align filter.tendsto_cocompact_mul_right Filter.tendsto_cocompact_mul_rightₓ'. -/
/-- Right-multiplication by a right-invertible element of a topological monoid is proper, i.e.,
inverse images of compact sets are compact. -/
theorem Filter.tendsto_cocompact_mul_right {a b : M} (ha : a * b = 1) :
@@ -973,12 +649,6 @@ theorem Filter.tendsto_cocompact_mul_right {a b : M} (ha : a * b = 1) :
simp [ha]
#align filter.tendsto_cocompact_mul_right Filter.tendsto_cocompact_mul_right
-/- warning: is_scalar_tower.has_continuous_const_smul -> IsScalarTower.continuousConstSMul is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {A : Type.{u2}} [_inst_5 : Monoid.{u2} A] [_inst_6 : SMul.{u1, u2} R A] [_inst_7 : IsScalarTower.{u1, u2, u2} R A A _inst_6 (Mul.toSMul.{u2} A (MulOneClass.toHasMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_5))) _inst_6] [_inst_8 : TopologicalSpace.{u2} A] [_inst_9 : ContinuousMul.{u2} A _inst_8 (MulOneClass.toHasMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_5))], ContinuousConstSMul.{u1, u2} R A _inst_8 _inst_6
-but is expected to have type
- forall {R : Type.{u1}} {A : Type.{u2}} [_inst_5 : Monoid.{u2} A] [_inst_6 : SMul.{u1, u2} R A] [_inst_7 : IsScalarTower.{u1, u2, u2} R A A _inst_6 (MulAction.toSMul.{u2, u2} A A _inst_5 (Monoid.toMulAction.{u2} A _inst_5)) _inst_6] [_inst_8 : TopologicalSpace.{u2} A] [_inst_9 : ContinuousMul.{u2} A _inst_8 (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_5))], ContinuousConstSMul.{u1, u2} R A _inst_8 _inst_6
-Case conversion may be inaccurate. Consider using '#align is_scalar_tower.has_continuous_const_smul IsScalarTower.continuousConstSMulₓ'. -/
/-- If `R` acts on `A` via `A`, then continuous multiplication implies continuous scalar
multiplication by constants.
@@ -994,12 +664,6 @@ instance (priority := 100) IsScalarTower.continuousConstSMul {R A : Type _} [Mon
#align is_scalar_tower.has_continuous_const_smul IsScalarTower.continuousConstSMul
#align vadd_assoc_class.has_continuous_const_vadd VAddAssocClass.continuousConstVAdd
-/- warning: smul_comm_class.has_continuous_const_smul -> SMulCommClass.continuousConstSMul is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {A : Type.{u2}} [_inst_5 : Monoid.{u2} A] [_inst_6 : SMul.{u1, u2} R A] [_inst_7 : SMulCommClass.{u1, u2, u2} R A A _inst_6 (Mul.toSMul.{u2} A (MulOneClass.toHasMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_5)))] [_inst_8 : TopologicalSpace.{u2} A] [_inst_9 : ContinuousMul.{u2} A _inst_8 (MulOneClass.toHasMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_5))], ContinuousConstSMul.{u1, u2} R A _inst_8 _inst_6
-but is expected to have type
- forall {R : Type.{u1}} {A : Type.{u2}} [_inst_5 : Monoid.{u2} A] [_inst_6 : SMul.{u1, u2} R A] [_inst_7 : SMulCommClass.{u1, u2, u2} R A A _inst_6 (MulAction.toSMul.{u2, u2} A A _inst_5 (Monoid.toMulAction.{u2} A _inst_5))] [_inst_8 : TopologicalSpace.{u2} A] [_inst_9 : ContinuousMul.{u2} A _inst_8 (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_5))], ContinuousConstSMul.{u1, u2} R A _inst_8 _inst_6
-Case conversion may be inaccurate. Consider using '#align smul_comm_class.has_continuous_const_smul SMulCommClass.continuousConstSMulₓ'. -/
/-- If the action of `R` on `A` commutes with left-multiplication, then continuous multiplication
implies continuous scalar multiplication by constants.
@@ -1044,12 +708,6 @@ instance : ContinuousMul αˣ :=
end Units
-/- warning: continuous.units_map -> Continuous.units_map is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} {N : Type.{u2}} [_inst_2 : Monoid.{u1} M] [_inst_3 : Monoid.{u2} N] [_inst_4 : TopologicalSpace.{u1} M] [_inst_5 : TopologicalSpace.{u2} N] (f : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_2) (Monoid.toMulOneClass.{u2} N _inst_3)), (Continuous.{u1, u2} M N _inst_4 _inst_5 (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_2) (Monoid.toMulOneClass.{u2} N _inst_3)) (fun (_x : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_2) (Monoid.toMulOneClass.{u2} N _inst_3)) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_2) (Monoid.toMulOneClass.{u2} N _inst_3)) f)) -> (Continuous.{u1, u2} (Units.{u1} M _inst_2) (Units.{u2} N _inst_3) (Units.topologicalSpace.{u1} M _inst_4 _inst_2) (Units.topologicalSpace.{u2} N _inst_5 _inst_3) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (Units.{u1} M _inst_2) (Units.{u2} N _inst_3) (Units.mulOneClass.{u1} M _inst_2) (Units.mulOneClass.{u2} N _inst_3)) (fun (_x : MonoidHom.{u1, u2} (Units.{u1} M _inst_2) (Units.{u2} N _inst_3) (Units.mulOneClass.{u1} M _inst_2) (Units.mulOneClass.{u2} N _inst_3)) => (Units.{u1} M _inst_2) -> (Units.{u2} N _inst_3)) (MonoidHom.hasCoeToFun.{u1, u2} (Units.{u1} M _inst_2) (Units.{u2} N _inst_3) (Units.mulOneClass.{u1} M _inst_2) (Units.mulOneClass.{u2} N _inst_3)) (Units.map.{u1, u2} M N _inst_2 _inst_3 f)))
-but is expected to have type
- forall {M : Type.{u2}} {N : Type.{u1}} [_inst_2 : Monoid.{u2} M] [_inst_3 : Monoid.{u1} N] [_inst_4 : TopologicalSpace.{u2} M] [_inst_5 : TopologicalSpace.{u1} N] (f : MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)), (Continuous.{u2, u1} M N _inst_4 _inst_5 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_2)) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)))) f)) -> (Continuous.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instTopologicalSpaceUnits.{u2} M _inst_4 _inst_2) (Units.instTopologicalSpaceUnits.{u1} N _inst_5 _inst_3) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (fun (_x : Units.{u2} M _inst_2) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Units.{u2} M _inst_2) => Units.{u1} N _inst_3) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (MulOneClass.toMul.{u2} (Units.{u2} M _inst_2) (Units.instMulOneClassUnits.{u2} M _inst_2)) (MulOneClass.toMul.{u1} (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u1} N _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3) (MonoidHom.monoidHomClass.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)))) (Units.map.{u2, u1} M N _inst_2 _inst_3 f)))
-Case conversion may be inaccurate. Consider using '#align continuous.units_map Continuous.units_mapₓ'. -/
@[to_additive]
theorem Continuous.units_map [Monoid M] [Monoid N] [TopologicalSpace M] [TopologicalSpace N]
(f : M →* N) (hf : Continuous f) : Continuous (Units.map f) :=
@@ -1061,12 +719,6 @@ section
variable [TopologicalSpace M] [CommMonoid M]
-/- warning: submonoid.mem_nhds_one -> Submonoid.mem_nhds_one is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : CommMonoid.{u1} M] (S : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3))), (IsOpen.{u1} M _inst_2 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3))) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3))) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3))) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3))) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3)))))) S)) -> (Membership.Mem.{u1, u1} (Set.{u1} M) (Filter.{u1} M) (Filter.hasMem.{u1} M) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3))) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3))) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3))) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3))) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3)))))) S) (nhds.{u1} M _inst_2 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3))))))))
-but is expected to have type
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : CommMonoid.{u1} M] (S : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3))), (IsOpen.{u1} M _inst_2 (SetLike.coe.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3))) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3))) S)) -> (Membership.mem.{u1, u1} (Set.{u1} M) (Filter.{u1} M) (instMembershipSetFilter.{u1} M) (SetLike.coe.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3))) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3))) S) (nhds.{u1} M _inst_2 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3))))))
-Case conversion may be inaccurate. Consider using '#align submonoid.mem_nhds_one Submonoid.mem_nhds_oneₓ'. -/
@[to_additive]
theorem Submonoid.mem_nhds_one (S : Submonoid M) (oS : IsOpen (S : Set M)) :
(S : Set M) ∈ 𝓝 (1 : M) :=
@@ -1076,12 +728,6 @@ theorem Submonoid.mem_nhds_one (S : Submonoid M) (oS : IsOpen (S : Set M)) :
variable [ContinuousMul M]
-/- warning: tendsto_multiset_prod -> tendsto_multiset_prod is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {α : Type.{u2}} {M : Type.{u3}} [_inst_2 : TopologicalSpace.{u3} M] [_inst_3 : CommMonoid.{u3} M] [_inst_4 : ContinuousMul.{u3} M _inst_2 (MulOneClass.toHasMul.{u3} M (Monoid.toMulOneClass.{u3} M (CommMonoid.toMonoid.{u3} M _inst_3)))] {f : ι -> α -> M} {x : Filter.{u2} α} {a : ι -> M} (s : Multiset.{u1} ι), (forall (i : ι), (Membership.Mem.{u1, u1} ι (Multiset.{u1} ι) (Multiset.hasMem.{u1} ι) i s) -> (Filter.Tendsto.{u2, u3} α M (f i) x (nhds.{u3} M _inst_2 (a i)))) -> (Filter.Tendsto.{u2, u3} α M (fun (b : α) => Multiset.prod.{u3} M _inst_3 (Multiset.map.{u1, u3} ι M (fun (c : ι) => f c b) s)) x (nhds.{u3} M _inst_2 (Multiset.prod.{u3} M _inst_3 (Multiset.map.{u1, u3} ι M a s))))
-but is expected to have type
- forall {ι : Type.{u2}} {α : Type.{u3}} {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : CommMonoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3)))] {f : ι -> α -> M} {x : Filter.{u3} α} {a : ι -> M} (s : Multiset.{u2} ι), (forall (i : ι), (Membership.mem.{u2, u2} ι (Multiset.{u2} ι) (Multiset.instMembershipMultiset.{u2} ι) i s) -> (Filter.Tendsto.{u3, u1} α M (f i) x (nhds.{u1} M _inst_2 (a i)))) -> (Filter.Tendsto.{u3, u1} α M (fun (b : α) => Multiset.prod.{u1} M _inst_3 (Multiset.map.{u2, u1} ι M (fun (c : ι) => f c b) s)) x (nhds.{u1} M _inst_2 (Multiset.prod.{u1} M _inst_3 (Multiset.map.{u2, u1} ι M a s))))
-Case conversion may be inaccurate. Consider using '#align tendsto_multiset_prod tendsto_multiset_prodₓ'. -/
@[to_additive]
theorem tendsto_multiset_prod {f : ι → α → M} {x : Filter α} {a : ι → M} (s : Multiset ι) :
(∀ i ∈ s, Tendsto (f i) x (𝓝 (a i))) →
@@ -1090,12 +736,6 @@ theorem tendsto_multiset_prod {f : ι → α → M} {x : Filter α} {a : ι →
#align tendsto_multiset_prod tendsto_multiset_prod
#align tendsto_multiset_sum tendsto_multiset_sum
-/- warning: tendsto_finset_prod -> tendsto_finset_prod is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {α : Type.{u2}} {M : Type.{u3}} [_inst_2 : TopologicalSpace.{u3} M] [_inst_3 : CommMonoid.{u3} M] [_inst_4 : ContinuousMul.{u3} M _inst_2 (MulOneClass.toHasMul.{u3} M (Monoid.toMulOneClass.{u3} M (CommMonoid.toMonoid.{u3} M _inst_3)))] {f : ι -> α -> M} {x : Filter.{u2} α} {a : ι -> M} (s : Finset.{u1} ι), (forall (i : ι), (Membership.Mem.{u1, u1} ι (Finset.{u1} ι) (Finset.hasMem.{u1} ι) i s) -> (Filter.Tendsto.{u2, u3} α M (f i) x (nhds.{u3} M _inst_2 (a i)))) -> (Filter.Tendsto.{u2, u3} α M (fun (b : α) => Finset.prod.{u3, u1} M ι _inst_3 s (fun (c : ι) => f c b)) x (nhds.{u3} M _inst_2 (Finset.prod.{u3, u1} M ι _inst_3 s (fun (c : ι) => a c))))
-but is expected to have type
- forall {ι : Type.{u2}} {α : Type.{u3}} {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : CommMonoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3)))] {f : ι -> α -> M} {x : Filter.{u3} α} {a : ι -> M} (s : Finset.{u2} ι), (forall (i : ι), (Membership.mem.{u2, u2} ι (Finset.{u2} ι) (Finset.instMembershipFinset.{u2} ι) i s) -> (Filter.Tendsto.{u3, u1} α M (f i) x (nhds.{u1} M _inst_2 (a i)))) -> (Filter.Tendsto.{u3, u1} α M (fun (b : α) => Finset.prod.{u1, u2} M ι _inst_3 s (fun (c : ι) => f c b)) x (nhds.{u1} M _inst_2 (Finset.prod.{u1, u2} M ι _inst_3 s (fun (c : ι) => a c))))
-Case conversion may be inaccurate. Consider using '#align tendsto_finset_prod tendsto_finset_prodₓ'. -/
@[to_additive]
theorem tendsto_finset_prod {f : ι → α → M} {x : Filter α} {a : ι → M} (s : Finset ι) :
(∀ i ∈ s, Tendsto (f i) x (𝓝 (a i))) →
@@ -1104,12 +744,6 @@ theorem tendsto_finset_prod {f : ι → α → M} {x : Filter α} {a : ι → M}
#align tendsto_finset_prod tendsto_finset_prod
#align tendsto_finset_sum tendsto_finset_sum
-/- warning: continuous_multiset_prod -> continuous_multiset_prod is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {X : Type.{u2}} {M : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u3} M] [_inst_3 : CommMonoid.{u3} M] [_inst_4 : ContinuousMul.{u3} M _inst_2 (MulOneClass.toHasMul.{u3} M (Monoid.toMulOneClass.{u3} M (CommMonoid.toMonoid.{u3} M _inst_3)))] {f : ι -> X -> M} (s : Multiset.{u1} ι), (forall (i : ι), (Membership.Mem.{u1, u1} ι (Multiset.{u1} ι) (Multiset.hasMem.{u1} ι) i s) -> (Continuous.{u2, u3} X M _inst_1 _inst_2 (f i))) -> (Continuous.{u2, u3} X M _inst_1 _inst_2 (fun (a : X) => Multiset.prod.{u3} M _inst_3 (Multiset.map.{u1, u3} ι M (fun (i : ι) => f i a) s)))
-but is expected to have type
- forall {ι : Type.{u3}} {X : Type.{u2}} {M : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : CommMonoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3)))] {f : ι -> X -> M} (s : Multiset.{u3} ι), (forall (i : ι), (Membership.mem.{u3, u3} ι (Multiset.{u3} ι) (Multiset.instMembershipMultiset.{u3} ι) i s) -> (Continuous.{u2, u1} X M _inst_1 _inst_2 (f i))) -> (Continuous.{u2, u1} X M _inst_1 _inst_2 (fun (a : X) => Multiset.prod.{u1} M _inst_3 (Multiset.map.{u3, u1} ι M (fun (i : ι) => f i a) s)))
-Case conversion may be inaccurate. Consider using '#align continuous_multiset_prod continuous_multiset_prodₓ'. -/
@[continuity, to_additive]
theorem continuous_multiset_prod {f : ι → X → M} (s : Multiset ι) :
(∀ i ∈ s, Continuous (f i)) → Continuous fun a => (s.map fun i => f i a).Prod := by
@@ -1117,12 +751,6 @@ theorem continuous_multiset_prod {f : ι → X → M} (s : Multiset ι) :
#align continuous_multiset_prod continuous_multiset_prod
#align continuous_multiset_sum continuous_multiset_sum
-/- warning: continuous_on_multiset_prod -> continuousOn_multiset_prod is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {X : Type.{u2}} {M : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u3} M] [_inst_3 : CommMonoid.{u3} M] [_inst_4 : ContinuousMul.{u3} M _inst_2 (MulOneClass.toHasMul.{u3} M (Monoid.toMulOneClass.{u3} M (CommMonoid.toMonoid.{u3} M _inst_3)))] {f : ι -> X -> M} (s : Multiset.{u1} ι) {t : Set.{u2} X}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Multiset.{u1} ι) (Multiset.hasMem.{u1} ι) i s) -> (ContinuousOn.{u2, u3} X M _inst_1 _inst_2 (f i) t)) -> (ContinuousOn.{u2, u3} X M _inst_1 _inst_2 (fun (a : X) => Multiset.prod.{u3} M _inst_3 (Multiset.map.{u1, u3} ι M (fun (i : ι) => f i a) s)) t)
-but is expected to have type
- forall {ι : Type.{u3}} {X : Type.{u2}} {M : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : CommMonoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3)))] {f : ι -> X -> M} (s : Multiset.{u3} ι) {t : Set.{u2} X}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Multiset.{u3} ι) (Multiset.instMembershipMultiset.{u3} ι) i s) -> (ContinuousOn.{u2, u1} X M _inst_1 _inst_2 (f i) t)) -> (ContinuousOn.{u2, u1} X M _inst_1 _inst_2 (fun (a : X) => Multiset.prod.{u1} M _inst_3 (Multiset.map.{u3, u1} ι M (fun (i : ι) => f i a) s)) t)
-Case conversion may be inaccurate. Consider using '#align continuous_on_multiset_prod continuousOn_multiset_prodₓ'. -/
@[to_additive]
theorem continuousOn_multiset_prod {f : ι → X → M} (s : Multiset ι) {t : Set X} :
(∀ i ∈ s, ContinuousOn (f i) t) → ContinuousOn (fun a => (s.map fun i => f i a).Prod) t := by
@@ -1130,12 +758,6 @@ theorem continuousOn_multiset_prod {f : ι → X → M} (s : Multiset ι) {t : S
#align continuous_on_multiset_prod continuousOn_multiset_prod
#align continuous_on_multiset_sum continuousOn_multiset_sum
-/- warning: continuous_finset_prod -> continuous_finset_prod is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {X : Type.{u2}} {M : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u3} M] [_inst_3 : CommMonoid.{u3} M] [_inst_4 : ContinuousMul.{u3} M _inst_2 (MulOneClass.toHasMul.{u3} M (Monoid.toMulOneClass.{u3} M (CommMonoid.toMonoid.{u3} M _inst_3)))] {f : ι -> X -> M} (s : Finset.{u1} ι), (forall (i : ι), (Membership.Mem.{u1, u1} ι (Finset.{u1} ι) (Finset.hasMem.{u1} ι) i s) -> (Continuous.{u2, u3} X M _inst_1 _inst_2 (f i))) -> (Continuous.{u2, u3} X M _inst_1 _inst_2 (fun (a : X) => Finset.prod.{u3, u1} M ι _inst_3 s (fun (i : ι) => f i a)))
-but is expected to have type
- forall {ι : Type.{u3}} {X : Type.{u2}} {M : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : CommMonoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3)))] {f : ι -> X -> M} (s : Finset.{u3} ι), (forall (i : ι), (Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i s) -> (Continuous.{u2, u1} X M _inst_1 _inst_2 (f i))) -> (Continuous.{u2, u1} X M _inst_1 _inst_2 (fun (a : X) => Finset.prod.{u1, u3} M ι _inst_3 s (fun (i : ι) => f i a)))
-Case conversion may be inaccurate. Consider using '#align continuous_finset_prod continuous_finset_prodₓ'. -/
@[continuity, to_additive]
theorem continuous_finset_prod {f : ι → X → M} (s : Finset ι) :
(∀ i ∈ s, Continuous (f i)) → Continuous fun a => ∏ i in s, f i a :=
@@ -1143,12 +765,6 @@ theorem continuous_finset_prod {f : ι → X → M} (s : Finset ι) :
#align continuous_finset_prod continuous_finset_prod
#align continuous_finset_sum continuous_finset_sum
-/- warning: continuous_on_finset_prod -> continuousOn_finset_prod is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {X : Type.{u2}} {M : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u3} M] [_inst_3 : CommMonoid.{u3} M] [_inst_4 : ContinuousMul.{u3} M _inst_2 (MulOneClass.toHasMul.{u3} M (Monoid.toMulOneClass.{u3} M (CommMonoid.toMonoid.{u3} M _inst_3)))] {f : ι -> X -> M} (s : Finset.{u1} ι) {t : Set.{u2} X}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Finset.{u1} ι) (Finset.hasMem.{u1} ι) i s) -> (ContinuousOn.{u2, u3} X M _inst_1 _inst_2 (f i) t)) -> (ContinuousOn.{u2, u3} X M _inst_1 _inst_2 (fun (a : X) => Finset.prod.{u3, u1} M ι _inst_3 s (fun (i : ι) => f i a)) t)
-but is expected to have type
- forall {ι : Type.{u3}} {X : Type.{u2}} {M : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : CommMonoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_3)))] {f : ι -> X -> M} (s : Finset.{u3} ι) {t : Set.{u2} X}, (forall (i : ι), (Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i s) -> (ContinuousOn.{u2, u1} X M _inst_1 _inst_2 (f i) t)) -> (ContinuousOn.{u2, u1} X M _inst_1 _inst_2 (fun (a : X) => Finset.prod.{u1, u3} M ι _inst_3 s (fun (i : ι) => f i a)) t)
-Case conversion may be inaccurate. Consider using '#align continuous_on_finset_prod continuousOn_finset_prodₓ'. -/
@[to_additive]
theorem continuousOn_finset_prod {f : ι → X → M} (s : Finset ι) {t : Set X} :
(∀ i ∈ s, ContinuousOn (f i) t) → ContinuousOn (fun a => ∏ i in s, f i a) t :=
@@ -1156,12 +772,6 @@ theorem continuousOn_finset_prod {f : ι → X → M} (s : Finset ι) {t : Set X
#align continuous_on_finset_prod continuousOn_finset_prod
#align continuous_on_finset_sum continuousOn_finset_sum
-/- warning: eventually_eq_prod -> eventuallyEq_prod is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {X : Type.{u2}} {M : Type.{u3}} [_inst_5 : CommMonoid.{u3} M] {s : Finset.{u1} ι} {l : Filter.{u2} X} {f : ι -> X -> M} {g : ι -> X -> M}, (forall (i : ι), (Membership.Mem.{u1, u1} ι (Finset.{u1} ι) (Finset.hasMem.{u1} ι) i s) -> (Filter.EventuallyEq.{u2, u3} X M l (f i) (g i))) -> (Filter.EventuallyEq.{u2, u3} X M l (Finset.prod.{max u2 u3, u1} (X -> M) ι (Pi.commMonoid.{u2, u3} X (fun (ᾰ : X) => M) (fun (i : X) => _inst_5)) s (fun (i : ι) => f i)) (Finset.prod.{max u2 u3, u1} (X -> M) ι (Pi.commMonoid.{u2, u3} X (fun (ᾰ : X) => M) (fun (i : X) => _inst_5)) s (fun (i : ι) => g i)))
-but is expected to have type
- forall {ι : Type.{u1}} {X : Type.{u3}} {M : Type.{u2}} [_inst_5 : CommMonoid.{u2} M] {s : Finset.{u1} ι} {l : Filter.{u3} X} {f : ι -> X -> M} {g : ι -> X -> M}, (forall (i : ι), (Membership.mem.{u1, u1} ι (Finset.{u1} ι) (Finset.instMembershipFinset.{u1} ι) i s) -> (Filter.EventuallyEq.{u3, u2} X M l (f i) (g i))) -> (Filter.EventuallyEq.{u3, u2} X M l (Finset.prod.{max u3 u2, u1} (X -> M) ι (Pi.commMonoid.{u3, u2} X (fun (ᾰ : X) => M) (fun (i : X) => _inst_5)) s (fun (i : ι) => f i)) (Finset.prod.{max u3 u2, u1} (X -> M) ι (Pi.commMonoid.{u3, u2} X (fun (ᾰ : X) => M) (fun (i : X) => _inst_5)) s (fun (i : ι) => g i)))
-Case conversion may be inaccurate. Consider using '#align eventually_eq_prod eventuallyEq_prodₓ'. -/
@[to_additive]
theorem eventuallyEq_prod {X M : Type _} [CommMonoid M] {s : Finset ι} {l : Filter X}
{f g : ι → X → M} (hs : ∀ i ∈ s, f i =ᶠ[l] g i) : (∏ i in s, f i) =ᶠ[l] ∏ i in s, g i :=
@@ -1175,12 +785,6 @@ theorem eventuallyEq_prod {X M : Type _} [CommMonoid M] {s : Finset ι} {l : Fil
open Function
-/- warning: locally_finite.exists_finset_mul_support -> LocallyFinite.exists_finset_mulSupport is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {X : Type.{u2}} [_inst_1 : TopologicalSpace.{u2} X] {M : Type.{u3}} [_inst_5 : CommMonoid.{u3} M] {f : ι -> X -> M}, (LocallyFinite.{u1, u2} ι X _inst_1 (fun (i : ι) => Function.mulSupport.{u2, u3} X M (MulOneClass.toHasOne.{u3} M (Monoid.toMulOneClass.{u3} M (CommMonoid.toMonoid.{u3} M _inst_5))) (f i))) -> (forall (x₀ : X), Exists.{succ u1} (Finset.{u1} ι) (fun (I : Finset.{u1} ι) => Filter.Eventually.{u2} X (fun (x : X) => HasSubset.Subset.{u1} (Set.{u1} ι) (Set.hasSubset.{u1} ι) (Function.mulSupport.{u1, u3} ι M (MulOneClass.toHasOne.{u3} M (Monoid.toMulOneClass.{u3} M (CommMonoid.toMonoid.{u3} M _inst_5))) (fun (i : ι) => f i x)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} ι) (Set.{u1} ι) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} ι) (Set.{u1} ι) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} ι) (Set.{u1} ι) (Finset.Set.hasCoeT.{u1} ι))) I)) (nhds.{u2} X _inst_1 x₀)))
-but is expected to have type
- forall {ι : Type.{u2}} {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] {M : Type.{u3}} [_inst_5 : CommMonoid.{u3} M] {f : ι -> X -> M}, (LocallyFinite.{u2, u1} ι X _inst_1 (fun (i : ι) => Function.mulSupport.{u1, u3} X M (Monoid.toOne.{u3} M (CommMonoid.toMonoid.{u3} M _inst_5)) (f i))) -> (forall (x₀ : X), Exists.{succ u2} (Finset.{u2} ι) (fun (I : Finset.{u2} ι) => Filter.Eventually.{u1} X (fun (x : X) => HasSubset.Subset.{u2} (Set.{u2} ι) (Set.instHasSubsetSet.{u2} ι) (Function.mulSupport.{u2, u3} ι M (Monoid.toOne.{u3} M (CommMonoid.toMonoid.{u3} M _inst_5)) (fun (i : ι) => f i x)) (Finset.toSet.{u2} ι I)) (nhds.{u1} X _inst_1 x₀)))
-Case conversion may be inaccurate. Consider using '#align locally_finite.exists_finset_mul_support LocallyFinite.exists_finset_mulSupportₓ'. -/
@[to_additive]
theorem LocallyFinite.exists_finset_mulSupport {M : Type _} [CommMonoid M] {f : ι → X → M}
(hf : LocallyFinite fun i => mulSupport <| f i) (x₀ : X) :
@@ -1193,12 +797,6 @@ theorem LocallyFinite.exists_finset_mulSupport {M : Type _} [CommMonoid M] {f :
#align locally_finite.exists_finset_mul_support LocallyFinite.exists_finset_mulSupport
#align locally_finite.exists_finset_support LocallyFinite.exists_finset_support
-/- warning: finprod_eventually_eq_prod -> finprod_eventually_eq_prod is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {X : Type.{u2}} [_inst_1 : TopologicalSpace.{u2} X] {M : Type.{u3}} [_inst_5 : CommMonoid.{u3} M] {f : ι -> X -> M}, (LocallyFinite.{u1, u2} ι X _inst_1 (fun (i : ι) => Function.mulSupport.{u2, u3} X M (MulOneClass.toHasOne.{u3} M (Monoid.toMulOneClass.{u3} M (CommMonoid.toMonoid.{u3} M _inst_5))) (f i))) -> (forall (x : X), Exists.{succ u1} (Finset.{u1} ι) (fun (s : Finset.{u1} ι) => Filter.Eventually.{u2} X (fun (y : X) => Eq.{succ u3} M (finprod.{u3, succ u1} M ι _inst_5 (fun (i : ι) => f i y)) (Finset.prod.{u3, u1} M ι _inst_5 s (fun (i : ι) => f i y))) (nhds.{u2} X _inst_1 x)))
-but is expected to have type
- forall {ι : Type.{u2}} {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] {M : Type.{u3}} [_inst_5 : CommMonoid.{u3} M] {f : ι -> X -> M}, (LocallyFinite.{u2, u1} ι X _inst_1 (fun (i : ι) => Function.mulSupport.{u1, u3} X M (Monoid.toOne.{u3} M (CommMonoid.toMonoid.{u3} M _inst_5)) (f i))) -> (forall (x : X), Exists.{succ u2} (Finset.{u2} ι) (fun (s : Finset.{u2} ι) => Filter.Eventually.{u1} X (fun (y : X) => Eq.{succ u3} M (finprod.{u3, succ u2} M ι _inst_5 (fun (i : ι) => f i y)) (Finset.prod.{u3, u2} M ι _inst_5 s (fun (i : ι) => f i y))) (nhds.{u1} X _inst_1 x)))
-Case conversion may be inaccurate. Consider using '#align finprod_eventually_eq_prod finprod_eventually_eq_prodₓ'. -/
@[to_additive]
theorem finprod_eventually_eq_prod {M : Type _} [CommMonoid M] {f : ι → X → M}
(hf : LocallyFinite fun i => mulSupport (f i)) (x : X) :
@@ -1208,12 +806,6 @@ theorem finprod_eventually_eq_prod {M : Type _} [CommMonoid M] {f : ι → X →
#align finprod_eventually_eq_prod finprod_eventually_eq_prod
#align finsum_eventually_eq_sum finsum_eventually_eq_sum
-/- warning: continuous_finprod -> continuous_finprod is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {X : Type.{u2}} {M : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u3} M] [_inst_3 : CommMonoid.{u3} M] [_inst_4 : ContinuousMul.{u3} M _inst_2 (MulOneClass.toHasMul.{u3} M (Monoid.toMulOneClass.{u3} M (CommMonoid.toMonoid.{u3} M _inst_3)))] {f : ι -> X -> M}, (forall (i : ι), Continuous.{u2, u3} X M _inst_1 _inst_2 (f i)) -> (LocallyFinite.{u1, u2} ι X _inst_1 (fun (i : ι) => Function.mulSupport.{u2, u3} X M (MulOneClass.toHasOne.{u3} M (Monoid.toMulOneClass.{u3} M (CommMonoid.toMonoid.{u3} M _inst_3))) (f i))) -> (Continuous.{u2, u3} X M _inst_1 _inst_2 (fun (x : X) => finprod.{u3, succ u1} M ι _inst_3 (fun (i : ι) => f i x)))
-but is expected to have type
- forall {ι : Type.{u1}} {X : Type.{u3}} {M : Type.{u2}} [_inst_1 : TopologicalSpace.{u3} X] [_inst_2 : TopologicalSpace.{u2} M] [_inst_3 : CommMonoid.{u2} M] [_inst_4 : ContinuousMul.{u2} M _inst_2 (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M (CommMonoid.toMonoid.{u2} M _inst_3)))] {f : ι -> X -> M}, (forall (i : ι), Continuous.{u3, u2} X M _inst_1 _inst_2 (f i)) -> (LocallyFinite.{u1, u3} ι X _inst_1 (fun (i : ι) => Function.mulSupport.{u3, u2} X M (Monoid.toOne.{u2} M (CommMonoid.toMonoid.{u2} M _inst_3)) (f i))) -> (Continuous.{u3, u2} X M _inst_1 _inst_2 (fun (x : X) => finprod.{u2, succ u1} M ι _inst_3 (fun (i : ι) => f i x)))
-Case conversion may be inaccurate. Consider using '#align continuous_finprod continuous_finprodₓ'. -/
@[to_additive]
theorem continuous_finprod {f : ι → X → M} (hc : ∀ i, Continuous (f i))
(hf : LocallyFinite fun i => mulSupport (f i)) : Continuous fun x => ∏ᶠ i, f i x :=
@@ -1225,12 +817,6 @@ theorem continuous_finprod {f : ι → X → M} (hc : ∀ i, Continuous (f i))
#align continuous_finprod continuous_finprod
#align continuous_finsum continuous_finsum
-/- warning: continuous_finprod_cond -> continuous_finprod_cond is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {X : Type.{u2}} {M : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u3} M] [_inst_3 : CommMonoid.{u3} M] [_inst_4 : ContinuousMul.{u3} M _inst_2 (MulOneClass.toHasMul.{u3} M (Monoid.toMulOneClass.{u3} M (CommMonoid.toMonoid.{u3} M _inst_3)))] {f : ι -> X -> M} {p : ι -> Prop}, (forall (i : ι), (p i) -> (Continuous.{u2, u3} X M _inst_1 _inst_2 (f i))) -> (LocallyFinite.{u1, u2} ι X _inst_1 (fun (i : ι) => Function.mulSupport.{u2, u3} X M (MulOneClass.toHasOne.{u3} M (Monoid.toMulOneClass.{u3} M (CommMonoid.toMonoid.{u3} M _inst_3))) (f i))) -> (Continuous.{u2, u3} X M _inst_1 _inst_2 (fun (x : X) => finprod.{u3, succ u1} M ι _inst_3 (fun (i : ι) => finprod.{u3, 0} M (p i) _inst_3 (fun (hi : p i) => f i x))))
-but is expected to have type
- forall {ι : Type.{u1}} {X : Type.{u3}} {M : Type.{u2}} [_inst_1 : TopologicalSpace.{u3} X] [_inst_2 : TopologicalSpace.{u2} M] [_inst_3 : CommMonoid.{u2} M] [_inst_4 : ContinuousMul.{u2} M _inst_2 (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M (CommMonoid.toMonoid.{u2} M _inst_3)))] {f : ι -> X -> M} {p : ι -> Prop}, (forall (i : ι), (p i) -> (Continuous.{u3, u2} X M _inst_1 _inst_2 (f i))) -> (LocallyFinite.{u1, u3} ι X _inst_1 (fun (i : ι) => Function.mulSupport.{u3, u2} X M (Monoid.toOne.{u2} M (CommMonoid.toMonoid.{u2} M _inst_3)) (f i))) -> (Continuous.{u3, u2} X M _inst_1 _inst_2 (fun (x : X) => finprod.{u2, succ u1} M ι _inst_3 (fun (i : ι) => finprod.{u2, 0} M (p i) _inst_3 (fun (hi : p i) => f i x))))
-Case conversion may be inaccurate. Consider using '#align continuous_finprod_cond continuous_finprod_condₓ'. -/
@[to_additive]
theorem continuous_finprod_cond {f : ι → X → M} {p : ι → Prop} (hc : ∀ i, p i → Continuous (f i))
(hf : LocallyFinite fun i => mulSupport (f i)) : Continuous fun x => ∏ᶠ (i) (hi : p i), f i x :=
@@ -1252,12 +838,6 @@ section LatticeOps
variable {ι' : Sort _} [Mul M]
-/- warning: has_continuous_mul_Inf -> continuousMul_sInf is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} [_inst_2 : Mul.{u1} M] {ts : Set.{u1} (TopologicalSpace.{u1} M)}, (forall (t : TopologicalSpace.{u1} M), (Membership.Mem.{u1, u1} (TopologicalSpace.{u1} M) (Set.{u1} (TopologicalSpace.{u1} M)) (Set.hasMem.{u1} (TopologicalSpace.{u1} M)) t ts) -> (ContinuousMul.{u1} M t _inst_2)) -> (ContinuousMul.{u1} M (InfSet.sInf.{u1} (TopologicalSpace.{u1} M) (ConditionallyCompleteLattice.toHasInf.{u1} (TopologicalSpace.{u1} M) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.{u1} M) (TopologicalSpace.completeLattice.{u1} M))) ts) _inst_2)
-but is expected to have type
- forall {M : Type.{u1}} [_inst_2 : Mul.{u1} M] {ts : Set.{u1} (TopologicalSpace.{u1} M)}, (forall (t : TopologicalSpace.{u1} M), (Membership.mem.{u1, u1} (TopologicalSpace.{u1} M) (Set.{u1} (TopologicalSpace.{u1} M)) (Set.instMembershipSet.{u1} (TopologicalSpace.{u1} M)) t ts) -> (ContinuousMul.{u1} M t _inst_2)) -> (ContinuousMul.{u1} M (InfSet.sInf.{u1} (TopologicalSpace.{u1} M) (ConditionallyCompleteLattice.toInfSet.{u1} (TopologicalSpace.{u1} M) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.{u1} M) (TopologicalSpace.instCompleteLatticeTopologicalSpace.{u1} M))) ts) _inst_2)
-Case conversion may be inaccurate. Consider using '#align has_continuous_mul_Inf continuousMul_sInfₓ'. -/
@[to_additive]
theorem continuousMul_sInf {ts : Set (TopologicalSpace M)} (h : ∀ t ∈ ts, @ContinuousMul M t _) :
@ContinuousMul M (sInf ts) _ :=
@@ -1268,12 +848,6 @@ theorem continuousMul_sInf {ts : Set (TopologicalSpace M)} (h : ∀ t ∈ ts, @C
#align has_continuous_mul_Inf continuousMul_sInf
#align has_continuous_add_Inf continuousAdd_sInf
-/- warning: has_continuous_mul_infi -> continuousMul_iInf is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} {ι' : Sort.{u2}} [_inst_2 : Mul.{u1} M] {ts : ι' -> (TopologicalSpace.{u1} M)}, (forall (i : ι'), ContinuousMul.{u1} M (ts i) _inst_2) -> (ContinuousMul.{u1} M (iInf.{u1, u2} (TopologicalSpace.{u1} M) (ConditionallyCompleteLattice.toHasInf.{u1} (TopologicalSpace.{u1} M) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.{u1} M) (TopologicalSpace.completeLattice.{u1} M))) ι' (fun (i : ι') => ts i)) _inst_2)
-but is expected to have type
- forall {M : Type.{u2}} {ι' : Sort.{u1}} [_inst_2 : Mul.{u2} M] {ts : ι' -> (TopologicalSpace.{u2} M)}, (forall (i : ι'), ContinuousMul.{u2} M (ts i) _inst_2) -> (ContinuousMul.{u2} M (iInf.{u2, u1} (TopologicalSpace.{u2} M) (ConditionallyCompleteLattice.toInfSet.{u2} (TopologicalSpace.{u2} M) (CompleteLattice.toConditionallyCompleteLattice.{u2} (TopologicalSpace.{u2} M) (TopologicalSpace.instCompleteLatticeTopologicalSpace.{u2} M))) ι' (fun (i : ι') => ts i)) _inst_2)
-Case conversion may be inaccurate. Consider using '#align has_continuous_mul_infi continuousMul_iInfₓ'. -/
@[to_additive]
theorem continuousMul_iInf {ts : ι' → TopologicalSpace M} (h' : ∀ i, @ContinuousMul M (ts i) _) :
@ContinuousMul M (⨅ i, ts i) _ := by rw [← sInf_range];
@@ -1281,12 +855,6 @@ theorem continuousMul_iInf {ts : ι' → TopologicalSpace M} (h' : ∀ i, @Conti
#align has_continuous_mul_infi continuousMul_iInf
#align has_continuous_add_infi continuousAdd_iInf
-/- warning: has_continuous_mul_inf -> continuousMul_inf is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} [_inst_2 : Mul.{u1} M] {t₁ : TopologicalSpace.{u1} M} {t₂ : TopologicalSpace.{u1} M}, (ContinuousMul.{u1} M t₁ _inst_2) -> (ContinuousMul.{u1} M t₂ _inst_2) -> (ContinuousMul.{u1} M (Inf.inf.{u1} (TopologicalSpace.{u1} M) (SemilatticeInf.toHasInf.{u1} (TopologicalSpace.{u1} M) (Lattice.toSemilatticeInf.{u1} (TopologicalSpace.{u1} M) (ConditionallyCompleteLattice.toLattice.{u1} (TopologicalSpace.{u1} M) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.{u1} M) (TopologicalSpace.completeLattice.{u1} M))))) t₁ t₂) _inst_2)
-but is expected to have type
- forall {M : Type.{u1}} [_inst_2 : Mul.{u1} M] {t₁ : TopologicalSpace.{u1} M} {t₂ : TopologicalSpace.{u1} M}, (ContinuousMul.{u1} M t₁ _inst_2) -> (ContinuousMul.{u1} M t₂ _inst_2) -> (ContinuousMul.{u1} M (Inf.inf.{u1} (TopologicalSpace.{u1} M) (Lattice.toInf.{u1} (TopologicalSpace.{u1} M) (ConditionallyCompleteLattice.toLattice.{u1} (TopologicalSpace.{u1} M) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.{u1} M) (TopologicalSpace.instCompleteLatticeTopologicalSpace.{u1} M)))) t₁ t₂) _inst_2)
-Case conversion may be inaccurate. Consider using '#align has_continuous_mul_inf continuousMul_infₓ'. -/
@[to_additive]
theorem continuousMul_inf {t₁ t₂ : TopologicalSpace M} (h₁ : @ContinuousMul M t₁ _)
(h₂ : @ContinuousMul M t₂ _) : @ContinuousMul M (t₁ ⊓ t₂) _ := by rw [inf_eq_iInf];
@@ -1309,12 +877,6 @@ protected def mulRight (x : X) : C(X, X) :=
#align continuous_map.add_right ContinuousMap.addRight
-/
-/- warning: continuous_map.coe_mul_right -> ContinuousMap.coe_mulRight is a dubious translation:
-lean 3 declaration is
- forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : Mul.{u1} X] [_inst_3 : ContinuousMul.{u1} X _inst_1 _inst_2] (x : X), Eq.{succ u1} (X -> X) (coeFn.{succ u1, succ u1} (ContinuousMap.{u1, u1} X X _inst_1 _inst_1) (fun (_x : ContinuousMap.{u1, u1} X X _inst_1 _inst_1) => X -> X) (ContinuousMap.hasCoeToFun.{u1, u1} X X _inst_1 _inst_1) (ContinuousMap.mulRight.{u1} X _inst_1 _inst_2 _inst_3 x)) (fun (y : X) => HMul.hMul.{u1, u1, u1} X X X (instHMul.{u1} X _inst_2) y x)
-but is expected to have type
- forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : Mul.{u1} X] [_inst_3 : ContinuousMul.{u1} X _inst_1 _inst_2] (x : X), Eq.{succ u1} (forall (ᾰ : X), (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : X) => X) ᾰ) (FunLike.coe.{succ u1, succ u1, succ u1} (ContinuousMap.{u1, u1} X X _inst_1 _inst_1) X (fun (_x : X) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : X) => X) _x) (ContinuousMapClass.toFunLike.{u1, u1, u1} (ContinuousMap.{u1, u1} X X _inst_1 _inst_1) X X _inst_1 _inst_1 (ContinuousMap.instContinuousMapClassContinuousMap.{u1, u1} X X _inst_1 _inst_1)) (ContinuousMap.mulRight.{u1} X _inst_1 _inst_2 _inst_3 x)) (fun (y : X) => HMul.hMul.{u1, u1, u1} X X X (instHMul.{u1} X _inst_2) y x)
-Case conversion may be inaccurate. Consider using '#align continuous_map.coe_mul_right ContinuousMap.coe_mulRightₓ'. -/
@[to_additive, simp]
theorem coe_mulRight (x : X) : ⇑(ContinuousMap.mulRight x) = fun y => y * x :=
rfl
@@ -1330,12 +892,6 @@ protected def mulLeft (x : X) : C(X, X) :=
#align continuous_map.add_left ContinuousMap.addLeft
-/
-/- warning: continuous_map.coe_mul_left -> ContinuousMap.coe_mulLeft is a dubious translation:
-lean 3 declaration is
- forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : Mul.{u1} X] [_inst_3 : ContinuousMul.{u1} X _inst_1 _inst_2] (x : X), Eq.{succ u1} (X -> X) (coeFn.{succ u1, succ u1} (ContinuousMap.{u1, u1} X X _inst_1 _inst_1) (fun (_x : ContinuousMap.{u1, u1} X X _inst_1 _inst_1) => X -> X) (ContinuousMap.hasCoeToFun.{u1, u1} X X _inst_1 _inst_1) (ContinuousMap.mulLeft.{u1} X _inst_1 _inst_2 _inst_3 x)) (fun (y : X) => HMul.hMul.{u1, u1, u1} X X X (instHMul.{u1} X _inst_2) x y)
-but is expected to have type
- forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : Mul.{u1} X] [_inst_3 : ContinuousMul.{u1} X _inst_1 _inst_2] (x : X), Eq.{succ u1} (forall (ᾰ : X), (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : X) => X) ᾰ) (FunLike.coe.{succ u1, succ u1, succ u1} (ContinuousMap.{u1, u1} X X _inst_1 _inst_1) X (fun (_x : X) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : X) => X) _x) (ContinuousMapClass.toFunLike.{u1, u1, u1} (ContinuousMap.{u1, u1} X X _inst_1 _inst_1) X X _inst_1 _inst_1 (ContinuousMap.instContinuousMapClassContinuousMap.{u1, u1} X X _inst_1 _inst_1)) (ContinuousMap.mulLeft.{u1} X _inst_1 _inst_2 _inst_3 x)) (fun (y : X) => HMul.hMul.{u1, u1, u1} X X X (instHMul.{u1} X _inst_2) x y)
-Case conversion may be inaccurate. Consider using '#align continuous_map.coe_mul_left ContinuousMap.coe_mulLeftₓ'. -/
@[to_additive, simp]
theorem coe_mulLeft (x : X) : ⇑(ContinuousMap.mulLeft x) = fun y => x * y :=
rfl
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -206,10 +206,8 @@ but is expected to have type
forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Mul.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 _inst_3] (a : M) (b : M), LE.le.{u1} (Filter.{u1} M) (Preorder.toLE.{u1} (Filter.{u1} M) (PartialOrder.toPreorder.{u1} (Filter.{u1} M) (Filter.instPartialOrderFilter.{u1} M))) (HMul.hMul.{u1, u1, u1} (Filter.{u1} M) (Filter.{u1} M) (Filter.{u1} M) (instHMul.{u1} (Filter.{u1} M) (Filter.instMul.{u1} M _inst_3)) (nhds.{u1} M _inst_2 a) (nhds.{u1} M _inst_2 b)) (nhds.{u1} M _inst_2 (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) a b))
Case conversion may be inaccurate. Consider using '#align le_nhds_mul le_nhds_mulₓ'. -/
@[to_additive]
-theorem le_nhds_mul (a b : M) : 𝓝 a * 𝓝 b ≤ 𝓝 (a * b) :=
- by
- rw [← map₂_mul, ← map_uncurry_prod, ← nhds_prod_eq]
- exact continuous_mul.tendsto _
+theorem le_nhds_mul (a b : M) : 𝓝 a * 𝓝 b ≤ 𝓝 (a * b) := by
+ rw [← map₂_mul, ← map_uncurry_prod, ← nhds_prod_eq]; exact continuous_mul.tendsto _
#align le_nhds_mul le_nhds_mul
#align le_nhds_add le_nhds_add
@@ -316,12 +314,8 @@ def Filter.Tendsto.units [TopologicalSpace N] [Monoid N] [ContinuousMul N] [T2Sp
where
val := r₁
inv := r₂
- val_inv := by
- symm
- simpa using h₁.mul h₂
- inv_val := by
- symm
- simpa using h₂.mul h₁
+ val_inv := by symm; simpa using h₁.mul h₂
+ inv_val := by symm; simpa using h₂.mul h₁
#align filter.tendsto.units Filter.Tendsto.units
#align filter.tendsto.add_units Filter.Tendsto.addUnits
@@ -407,13 +401,8 @@ theorem ContinuousMul.of_nhds_one {M : Type u} [Monoid M] [TopologicalSpace M]
have key :
(fun p : M × M => x₀ * p.1 * (p.2 * y₀)) =
((fun x => x₀ * x) ∘ fun x => x * y₀) ∘ uncurry (· * ·) :=
- by
- ext p
- simp [uncurry, mul_assoc]
- have key₂ : ((fun x => x₀ * x) ∘ fun x => y₀ * x) = fun x => x₀ * y₀ * x :=
- by
- ext x
- simp
+ by ext p; simp [uncurry, mul_assoc]
+ have key₂ : ((fun x => x₀ * x) ∘ fun x => y₀ * x) = fun x => x₀ * y₀ * x := by ext x; simp
calc
map (uncurry (· * ·)) (𝓝 (x₀, y₀)) = map (uncurry (· * ·)) (𝓝 x₀ ×ᶠ 𝓝 y₀) := by
rw [nhds_prod_eq]
@@ -769,10 +758,8 @@ but is expected to have type
forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {s : Set.{u1} M} {t : Set.{u1} M}, (IsCompact.{u1} M _inst_2 s) -> (IsCompact.{u1} M _inst_2 t) -> (IsCompact.{u1} M _inst_2 (HMul.hMul.{u1, u1, u1} (Set.{u1} M) (Set.{u1} M) (Set.{u1} M) (instHMul.{u1} (Set.{u1} M) (Set.mul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)))) s t))
Case conversion may be inaccurate. Consider using '#align is_compact.mul IsCompact.mulₓ'. -/
@[to_additive]
-theorem IsCompact.mul {s t : Set M} (hs : IsCompact s) (ht : IsCompact t) : IsCompact (s * t) :=
- by
- rw [← image_mul_prod]
- exact (hs.prod ht).image continuous_mul
+theorem IsCompact.mul {s t : Set M} (hs : IsCompact s) (ht : IsCompact t) : IsCompact (s * t) := by
+ rw [← image_mul_prod]; exact (hs.prod ht).image continuous_mul
#align is_compact.mul IsCompact.mul
#align is_compact.add IsCompact.add
@@ -839,9 +826,7 @@ Case conversion may be inaccurate. Consider using '#align continuous_pow continu
@[continuity, to_additive]
theorem continuous_pow : ∀ n : ℕ, Continuous fun a : M => a ^ n
| 0 => by simpa using continuous_const
- | k + 1 => by
- simp only [pow_succ]
- exact continuous_id.mul (continuous_pow _)
+ | k + 1 => by simp only [pow_succ]; exact continuous_id.mul (continuous_pow _)
#align continuous_pow continuous_pow
#align continuous_nsmul continuous_nsmul
@@ -1101,9 +1086,7 @@ Case conversion may be inaccurate. Consider using '#align tendsto_multiset_prod
theorem tendsto_multiset_prod {f : ι → α → M} {x : Filter α} {a : ι → M} (s : Multiset ι) :
(∀ i ∈ s, Tendsto (f i) x (𝓝 (a i))) →
Tendsto (fun b => (s.map fun c => f c b).Prod) x (𝓝 (s.map a).Prod) :=
- by
- rcases s with ⟨l⟩
- simpa using tendsto_list_prod l
+ by rcases s with ⟨l⟩; simpa using tendsto_list_prod l
#align tendsto_multiset_prod tendsto_multiset_prod
#align tendsto_multiset_sum tendsto_multiset_sum
@@ -1129,10 +1112,8 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align continuous_multiset_prod continuous_multiset_prodₓ'. -/
@[continuity, to_additive]
theorem continuous_multiset_prod {f : ι → X → M} (s : Multiset ι) :
- (∀ i ∈ s, Continuous (f i)) → Continuous fun a => (s.map fun i => f i a).Prod :=
- by
- rcases s with ⟨l⟩
- simpa using continuous_list_prod l
+ (∀ i ∈ s, Continuous (f i)) → Continuous fun a => (s.map fun i => f i a).Prod := by
+ rcases s with ⟨l⟩; simpa using continuous_list_prod l
#align continuous_multiset_prod continuous_multiset_prod
#align continuous_multiset_sum continuous_multiset_sum
@@ -1144,10 +1125,8 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align continuous_on_multiset_prod continuousOn_multiset_prodₓ'. -/
@[to_additive]
theorem continuousOn_multiset_prod {f : ι → X → M} (s : Multiset ι) {t : Set X} :
- (∀ i ∈ s, ContinuousOn (f i) t) → ContinuousOn (fun a => (s.map fun i => f i a).Prod) t :=
- by
- rcases s with ⟨l⟩
- simpa using continuousOn_list_prod l
+ (∀ i ∈ s, ContinuousOn (f i) t) → ContinuousOn (fun a => (s.map fun i => f i a).Prod) t := by
+ rcases s with ⟨l⟩; simpa using continuousOn_list_prod l
#align continuous_on_multiset_prod continuousOn_multiset_prod
#align continuous_on_multiset_sum continuousOn_multiset_sum
@@ -1297,8 +1276,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align has_continuous_mul_infi continuousMul_iInfₓ'. -/
@[to_additive]
theorem continuousMul_iInf {ts : ι' → TopologicalSpace M} (h' : ∀ i, @ContinuousMul M (ts i) _) :
- @ContinuousMul M (⨅ i, ts i) _ := by
- rw [← sInf_range]
+ @ContinuousMul M (⨅ i, ts i) _ := by rw [← sInf_range];
exact continuousMul_sInf (set.forall_range_iff.mpr h')
#align has_continuous_mul_infi continuousMul_iInf
#align has_continuous_add_infi continuousAdd_iInf
@@ -1311,11 +1289,8 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align has_continuous_mul_inf continuousMul_infₓ'. -/
@[to_additive]
theorem continuousMul_inf {t₁ t₂ : TopologicalSpace M} (h₁ : @ContinuousMul M t₁ _)
- (h₂ : @ContinuousMul M t₂ _) : @ContinuousMul M (t₁ ⊓ t₂) _ :=
- by
- rw [inf_eq_iInf]
- refine' continuousMul_iInf fun b => _
- cases b <;> assumption
+ (h₂ : @ContinuousMul M t₂ _) : @ContinuousMul M (t₁ ⊓ t₂) _ := by rw [inf_eq_iInf];
+ refine' continuousMul_iInf fun b => _; cases b <;> assumption
#align has_continuous_mul_inf continuousMul_inf
#align has_continuous_add_inf continuousAdd_inf
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -505,10 +505,7 @@ def monoidHomOfMemClosureRangeCoe (f : M₁ → M₂)
#align add_monoid_hom_of_mem_closure_range_coe addMonoidHomOfMemClosureRangeCoe
/- warning: monoid_hom_of_tendsto -> monoidHomOfTendsto is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M₁ : Type.{u2}} {M₂ : Type.{u3}} [_inst_2 : TopologicalSpace.{u3} M₂] [_inst_3 : T2Space.{u3} M₂ _inst_2] [_inst_4 : MulOneClass.{u2} M₁] [_inst_5 : MulOneClass.{u3} M₂] [_inst_6 : ContinuousMul.{u3} M₂ _inst_2 (MulOneClass.toHasMul.{u3} M₂ _inst_5)] {F : Type.{u4}} [_inst_7 : MonoidHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5] {l : Filter.{u1} α} (f : M₁ -> M₂) (g : α -> F) [_inst_8 : Filter.NeBot.{u1} α l], (Filter.Tendsto.{u1, max u2 u3} α (M₁ -> M₂) (fun (a : α) (x : M₁) => coeFn.{succ u4, max (succ u2) (succ u3)} F (fun (_x : F) => M₁ -> M₂) (FunLike.hasCoeToFun.{succ u4, succ u2, succ u3} F M₁ (fun (_x : M₁) => M₂) (MulHomClass.toFunLike.{u4, u2, u3} F M₁ M₂ (MulOneClass.toHasMul.{u2} M₁ _inst_4) (MulOneClass.toHasMul.{u3} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5 _inst_7))) (g a) x) l (nhds.{max u2 u3} (M₁ -> M₂) (Pi.topologicalSpace.{u2, u3} M₁ (fun (x : M₁) => M₂) (fun (a : M₁) => _inst_2)) f)) -> (MonoidHom.{u2, u3} M₁ M₂ _inst_4 _inst_5)
-but is expected to have type
- forall {α : Type.{u1}} {M₁ : Type.{u2}} {M₂ : Type.{u3}} [_inst_2 : TopologicalSpace.{u3} M₂] [_inst_3 : T2Space.{u3} M₂ _inst_2] [_inst_4 : MulOneClass.{u2} M₁] [_inst_5 : MulOneClass.{u3} M₂] [_inst_6 : ContinuousMul.{u3} M₂ _inst_2 (MulOneClass.toMul.{u3} M₂ _inst_5)] {F : Type.{u4}} [_inst_7 : MonoidHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5] {l : Filter.{u1} α} (f : M₁ -> M₂) (g : α -> F) [_inst_8 : Filter.NeBot.{u1} α l], (Filter.Tendsto.{u1, max u2 u3} α (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) x) (fun (a : α) (x : M₁) => FunLike.coe.{succ u4, succ u2, succ u3} F M₁ (fun (_x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) _x) (MulHomClass.toFunLike.{u4, u2, u3} F M₁ M₂ (MulOneClass.toMul.{u2} M₁ _inst_4) (MulOneClass.toMul.{u3} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5 _inst_7)) (g a) x) l (nhds.{max u2 u3} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) x) (Pi.topologicalSpace.{u2, u3} M₁ (fun (x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) x) (fun (a : M₁) => _inst_2)) f)) -> (MonoidHom.{u2, u3} M₁ M₂ _inst_4 _inst_5)
+<too large>
Case conversion may be inaccurate. Consider using '#align monoid_hom_of_tendsto monoidHomOfTendstoₓ'. -/
/-- Construct a bundled monoid homomorphism from a pointwise limit of monoid homomorphisms. -/
@[to_additive
@@ -731,10 +728,7 @@ theorem exists_nhds_one_split {s : Set M} (hs : s ∈ 𝓝 (1 : M)) :
#align exists_nhds_zero_half exists_nhds_zero_half
/- warning: exists_nhds_one_split4 -> exists_nhds_one_split4 is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {u : Set.{u1} M}, (Membership.Mem.{u1, u1} (Set.{u1} M) (Filter.{u1} M) (Filter.hasMem.{u1} M) u (nhds.{u1} M _inst_2 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))))) -> (Exists.{succ u1} (Set.{u1} M) (fun (V : Set.{u1} M) => Exists.{0} (Membership.Mem.{u1, u1} (Set.{u1} M) (Filter.{u1} M) (Filter.hasMem.{u1} M) V (nhds.{u1} M _inst_2 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))))) (fun (H : Membership.Mem.{u1, u1} (Set.{u1} M) (Filter.{u1} M) (Filter.hasMem.{u1} M) V (nhds.{u1} M _inst_2 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))))) => forall {v : M} {w : M} {s : M} {t : M}, (Membership.Mem.{u1, u1} M (Set.{u1} M) (Set.hasMem.{u1} M) v V) -> (Membership.Mem.{u1, u1} M (Set.{u1} M) (Set.hasMem.{u1} M) w V) -> (Membership.Mem.{u1, u1} M (Set.{u1} M) (Set.hasMem.{u1} M) s V) -> (Membership.Mem.{u1, u1} M (Set.{u1} M) (Set.hasMem.{u1} M) t V) -> (Membership.Mem.{u1, u1} M (Set.{u1} M) (Set.hasMem.{u1} M) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) v w) s) t) u))))
-but is expected to have type
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] {u : Set.{u1} M}, (Membership.mem.{u1, u1} (Set.{u1} M) (Filter.{u1} M) (instMembershipSetFilter.{u1} M) u (nhds.{u1} M _inst_2 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_3))))) -> (Exists.{succ u1} (Set.{u1} M) (fun (V : Set.{u1} M) => And (Membership.mem.{u1, u1} (Set.{u1} M) (Filter.{u1} M) (instMembershipSetFilter.{u1} M) V (nhds.{u1} M _inst_2 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_3))))) (forall {v : M} {w : M} {s : M} {t : M}, (Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) v V) -> (Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) w V) -> (Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) s V) -> (Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) t V) -> (Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))) v w) s) t) u))))
+<too large>
Case conversion may be inaccurate. Consider using '#align exists_nhds_one_split4 exists_nhds_one_split4ₓ'. -/
@[to_additive exists_nhds_zero_quarter]
theorem exists_nhds_one_split4 {u : Set M} (hu : u ∈ 𝓝 (1 : M)) :
mathlib commit https://github.com/leanprover-community/mathlib/commit/95a87616d63b3cb49d3fe678d416fbe9c4217bf4
@@ -487,7 +487,7 @@ variable {M₁ M₂} [MulOneClass M₁] [MulOneClass M₂] [ContinuousMul M₂]
lean 3 declaration is
forall {M₁ : Type.{u1}} {M₂ : Type.{u2}} [_inst_2 : TopologicalSpace.{u2} M₂] [_inst_3 : T2Space.{u2} M₂ _inst_2] [_inst_4 : MulOneClass.{u1} M₁] [_inst_5 : MulOneClass.{u2} M₂] [_inst_6 : ContinuousMul.{u2} M₂ _inst_2 (MulOneClass.toHasMul.{u2} M₂ _inst_5)] {F : Type.{u3}} [_inst_7 : MonoidHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5] (f : M₁ -> M₂), (Membership.Mem.{max u1 u2, max u1 u2} (M₁ -> M₂) (Set.{max u1 u2} (M₁ -> M₂)) (Set.hasMem.{max u1 u2} (M₁ -> M₂)) f (closure.{max u1 u2} (M₁ -> M₂) (Pi.topologicalSpace.{u1, u2} M₁ (fun (x : M₁) => M₂) (fun (a : M₁) => _inst_2)) (Set.range.{max u1 u2, succ u3} (M₁ -> M₂) F (fun (f : F) (x : M₁) => coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M₁ -> M₂) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M₁ (fun (_x : M₁) => M₂) (MulHomClass.toFunLike.{u3, u1, u2} F M₁ M₂ (MulOneClass.toHasMul.{u1} M₁ _inst_4) (MulOneClass.toHasMul.{u2} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5 _inst_7))) f x)))) -> (MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5)
but is expected to have type
- forall {M₁ : Type.{u1}} {M₂ : Type.{u2}} [_inst_2 : TopologicalSpace.{u2} M₂] [_inst_3 : T2Space.{u2} M₂ _inst_2] [_inst_4 : MulOneClass.{u1} M₁] [_inst_5 : MulOneClass.{u2} M₂] [_inst_6 : ContinuousMul.{u2} M₂ _inst_2 (MulOneClass.toMul.{u2} M₂ _inst_5)] {F : Type.{u3}} [_inst_7 : MonoidHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5] (f : M₁ -> M₂), (Membership.mem.{max u1 u2, max u1 u2} (M₁ -> M₂) (Set.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) x)) (Set.instMembershipSet.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) x)) f (closure.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) x) (Pi.topologicalSpace.{u1, u2} M₁ (fun (x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) x) (fun (a : M₁) => _inst_2)) (Set.range.{max u1 u2, succ u3} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) x) F (fun (f : F) (x : M₁) => FunLike.coe.{succ u3, succ u1, succ u2} F M₁ (fun (_x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) _x) (MulHomClass.toFunLike.{u3, u1, u2} F M₁ M₂ (MulOneClass.toMul.{u1} M₁ _inst_4) (MulOneClass.toMul.{u2} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5 _inst_7)) f x)))) -> (MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5)
+ forall {M₁ : Type.{u1}} {M₂ : Type.{u2}} [_inst_2 : TopologicalSpace.{u2} M₂] [_inst_3 : T2Space.{u2} M₂ _inst_2] [_inst_4 : MulOneClass.{u1} M₁] [_inst_5 : MulOneClass.{u2} M₂] [_inst_6 : ContinuousMul.{u2} M₂ _inst_2 (MulOneClass.toMul.{u2} M₂ _inst_5)] {F : Type.{u3}} [_inst_7 : MonoidHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5] (f : M₁ -> M₂), (Membership.mem.{max u1 u2, max u1 u2} (M₁ -> M₂) (Set.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) x)) (Set.instMembershipSet.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) x)) f (closure.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) x) (Pi.topologicalSpace.{u1, u2} M₁ (fun (x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) x) (fun (a : M₁) => _inst_2)) (Set.range.{max u1 u2, succ u3} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) x) F (fun (f : F) (x : M₁) => FunLike.coe.{succ u3, succ u1, succ u2} F M₁ (fun (_x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) _x) (MulHomClass.toFunLike.{u3, u1, u2} F M₁ M₂ (MulOneClass.toMul.{u1} M₁ _inst_4) (MulOneClass.toMul.{u2} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5 _inst_7)) f x)))) -> (MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5)
Case conversion may be inaccurate. Consider using '#align monoid_hom_of_mem_closure_range_coe monoidHomOfMemClosureRangeCoeₓ'. -/
/-- Construct a bundled monoid homomorphism `M₁ →* M₂` from a function `f` and a proof that it
belongs to the closure of the range of the coercion from `M₁ →* M₂` (or another type of bundled
@@ -508,7 +508,7 @@ def monoidHomOfMemClosureRangeCoe (f : M₁ → M₂)
lean 3 declaration is
forall {α : Type.{u1}} {M₁ : Type.{u2}} {M₂ : Type.{u3}} [_inst_2 : TopologicalSpace.{u3} M₂] [_inst_3 : T2Space.{u3} M₂ _inst_2] [_inst_4 : MulOneClass.{u2} M₁] [_inst_5 : MulOneClass.{u3} M₂] [_inst_6 : ContinuousMul.{u3} M₂ _inst_2 (MulOneClass.toHasMul.{u3} M₂ _inst_5)] {F : Type.{u4}} [_inst_7 : MonoidHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5] {l : Filter.{u1} α} (f : M₁ -> M₂) (g : α -> F) [_inst_8 : Filter.NeBot.{u1} α l], (Filter.Tendsto.{u1, max u2 u3} α (M₁ -> M₂) (fun (a : α) (x : M₁) => coeFn.{succ u4, max (succ u2) (succ u3)} F (fun (_x : F) => M₁ -> M₂) (FunLike.hasCoeToFun.{succ u4, succ u2, succ u3} F M₁ (fun (_x : M₁) => M₂) (MulHomClass.toFunLike.{u4, u2, u3} F M₁ M₂ (MulOneClass.toHasMul.{u2} M₁ _inst_4) (MulOneClass.toHasMul.{u3} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5 _inst_7))) (g a) x) l (nhds.{max u2 u3} (M₁ -> M₂) (Pi.topologicalSpace.{u2, u3} M₁ (fun (x : M₁) => M₂) (fun (a : M₁) => _inst_2)) f)) -> (MonoidHom.{u2, u3} M₁ M₂ _inst_4 _inst_5)
but is expected to have type
- forall {α : Type.{u1}} {M₁ : Type.{u2}} {M₂ : Type.{u3}} [_inst_2 : TopologicalSpace.{u3} M₂] [_inst_3 : T2Space.{u3} M₂ _inst_2] [_inst_4 : MulOneClass.{u2} M₁] [_inst_5 : MulOneClass.{u3} M₂] [_inst_6 : ContinuousMul.{u3} M₂ _inst_2 (MulOneClass.toMul.{u3} M₂ _inst_5)] {F : Type.{u4}} [_inst_7 : MonoidHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5] {l : Filter.{u1} α} (f : M₁ -> M₂) (g : α -> F) [_inst_8 : Filter.NeBot.{u1} α l], (Filter.Tendsto.{u1, max u2 u3} α (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) x) (fun (a : α) (x : M₁) => FunLike.coe.{succ u4, succ u2, succ u3} F M₁ (fun (_x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) _x) (MulHomClass.toFunLike.{u4, u2, u3} F M₁ M₂ (MulOneClass.toMul.{u2} M₁ _inst_4) (MulOneClass.toMul.{u3} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5 _inst_7)) (g a) x) l (nhds.{max u2 u3} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) x) (Pi.topologicalSpace.{u2, u3} M₁ (fun (x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) x) (fun (a : M₁) => _inst_2)) f)) -> (MonoidHom.{u2, u3} M₁ M₂ _inst_4 _inst_5)
+ forall {α : Type.{u1}} {M₁ : Type.{u2}} {M₂ : Type.{u3}} [_inst_2 : TopologicalSpace.{u3} M₂] [_inst_3 : T2Space.{u3} M₂ _inst_2] [_inst_4 : MulOneClass.{u2} M₁] [_inst_5 : MulOneClass.{u3} M₂] [_inst_6 : ContinuousMul.{u3} M₂ _inst_2 (MulOneClass.toMul.{u3} M₂ _inst_5)] {F : Type.{u4}} [_inst_7 : MonoidHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5] {l : Filter.{u1} α} (f : M₁ -> M₂) (g : α -> F) [_inst_8 : Filter.NeBot.{u1} α l], (Filter.Tendsto.{u1, max u2 u3} α (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) x) (fun (a : α) (x : M₁) => FunLike.coe.{succ u4, succ u2, succ u3} F M₁ (fun (_x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) _x) (MulHomClass.toFunLike.{u4, u2, u3} F M₁ M₂ (MulOneClass.toMul.{u2} M₁ _inst_4) (MulOneClass.toMul.{u3} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5 _inst_7)) (g a) x) l (nhds.{max u2 u3} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) x) (Pi.topologicalSpace.{u2, u3} M₁ (fun (x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) x) (fun (a : M₁) => _inst_2)) f)) -> (MonoidHom.{u2, u3} M₁ M₂ _inst_4 _inst_5)
Case conversion may be inaccurate. Consider using '#align monoid_hom_of_tendsto monoidHomOfTendstoₓ'. -/
/-- Construct a bundled monoid homomorphism from a pointwise limit of monoid homomorphisms. -/
@[to_additive
@@ -527,7 +527,7 @@ variable (M₁ M₂)
lean 3 declaration is
forall (M₁ : Type.{u1}) (M₂ : Type.{u2}) [_inst_2 : TopologicalSpace.{u2} M₂] [_inst_3 : T2Space.{u2} M₂ _inst_2] [_inst_4 : MulOneClass.{u1} M₁] [_inst_5 : MulOneClass.{u2} M₂] [_inst_6 : ContinuousMul.{u2} M₂ _inst_2 (MulOneClass.toHasMul.{u2} M₂ _inst_5)], IsClosed.{max u1 u2} (M₁ -> M₂) (Pi.topologicalSpace.{u1, u2} M₁ (fun (ᾰ : M₁) => M₂) (fun (a : M₁) => _inst_2)) (Set.range.{max u1 u2, max (succ u2) (succ u1)} (M₁ -> M₂) (MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5) (fun (ᾰ : MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5) => M₁ -> M₂) (MonoidHom.hasCoeToFun.{u1, u2} M₁ M₂ _inst_4 _inst_5)))
but is expected to have type
- forall (M₁ : Type.{u2}) (M₂ : Type.{u1}) [_inst_2 : TopologicalSpace.{u1} M₂] [_inst_3 : T2Space.{u1} M₂ _inst_2] [_inst_4 : MulOneClass.{u2} M₁] [_inst_5 : MulOneClass.{u1} M₂] [_inst_6 : ContinuousMul.{u1} M₂ _inst_2 (MulOneClass.toMul.{u1} M₂ _inst_5)], IsClosed.{max u2 u1} (forall (ᾰ : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) ᾰ) (Pi.topologicalSpace.{u2, u1} M₁ (fun (ᾰ : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) ᾰ) (fun (a : M₁) => _inst_2)) (Set.range.{max u2 u1, max (succ u2) (succ u1)} (forall (ᾰ : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) ᾰ) (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ (fun (ᾰ : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) ᾰ) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ M₂ (MulOneClass.toMul.{u2} M₁ _inst_4) (MulOneClass.toMul.{u1} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ M₂ _inst_4 _inst_5 (MonoidHom.monoidHomClass.{u2, u1} M₁ M₂ _inst_4 _inst_5)))))
+ forall (M₁ : Type.{u2}) (M₂ : Type.{u1}) [_inst_2 : TopologicalSpace.{u1} M₂] [_inst_3 : T2Space.{u1} M₂ _inst_2] [_inst_4 : MulOneClass.{u2} M₁] [_inst_5 : MulOneClass.{u1} M₂] [_inst_6 : ContinuousMul.{u1} M₂ _inst_2 (MulOneClass.toMul.{u1} M₂ _inst_5)], IsClosed.{max u2 u1} (forall (ᾰ : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) ᾰ) (Pi.topologicalSpace.{u2, u1} M₁ (fun (ᾰ : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) ᾰ) (fun (a : M₁) => _inst_2)) (Set.range.{max u2 u1, max (succ u2) (succ u1)} (forall (ᾰ : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) ᾰ) (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ (fun (ᾰ : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M₁) => M₂) ᾰ) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ M₂ (MulOneClass.toMul.{u2} M₁ _inst_4) (MulOneClass.toMul.{u1} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ M₂ _inst_4 _inst_5 (MonoidHom.monoidHomClass.{u2, u1} M₁ M₂ _inst_4 _inst_5)))))
Case conversion may be inaccurate. Consider using '#align monoid_hom.is_closed_range_coe MonoidHom.isClosed_range_coeₓ'. -/
@[to_additive]
theorem MonoidHom.isClosed_range_coe : IsClosed (range (coeFn : (M₁ →* M₂) → M₁ → M₂)) :=
@@ -541,7 +541,7 @@ end PointwiseLimits
lean 3 declaration is
forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_2 : Mul.{u1} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u3, u1, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u1} M] [_inst_6 : TopologicalSpace.{u2} N] [_inst_7 : ContinuousMul.{u2} N _inst_6 _inst_3] (f : F), (Inducing.{u1, u2} M N _inst_5 _inst_6 (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N _inst_2 _inst_3 _inst_4)) f)) -> (ContinuousMul.{u1} M _inst_5 _inst_2)
but is expected to have type
- forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} [_inst_2 : Mul.{u3} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u1, u3, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u3} M] [_inst_6 : TopologicalSpace.{u2} N] [_inst_7 : ContinuousMul.{u2} N _inst_6 _inst_3] (f : F), (Inducing.{u3, u2} M N _inst_5 _inst_6 (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N _inst_2 _inst_3 _inst_4) f)) -> (ContinuousMul.{u3} M _inst_5 _inst_2)
+ forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} [_inst_2 : Mul.{u3} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u1, u3, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u3} M] [_inst_6 : TopologicalSpace.{u2} N] [_inst_7 : ContinuousMul.{u2} N _inst_6 _inst_3] (f : F), (Inducing.{u3, u2} M N _inst_5 _inst_6 (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N _inst_2 _inst_3 _inst_4) f)) -> (ContinuousMul.{u3} M _inst_5 _inst_2)
Case conversion may be inaccurate. Consider using '#align inducing.has_continuous_mul Inducing.continuousMulₓ'. -/
@[to_additive]
theorem Inducing.continuousMul {M N F : Type _} [Mul M] [Mul N] [MulHomClass F M N]
@@ -556,7 +556,7 @@ theorem Inducing.continuousMul {M N F : Type _} [Mul M] [Mul N] [MulHomClass F M
lean 3 declaration is
forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_2 : Mul.{u1} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u3, u1, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u2} N] [_inst_6 : ContinuousMul.{u2} N _inst_5 _inst_3] (f : F), ContinuousMul.{u1} M (TopologicalSpace.induced.{u1, u2} M N (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N _inst_2 _inst_3 _inst_4)) f) _inst_5) _inst_2
but is expected to have type
- forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} [_inst_2 : Mul.{u3} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u1, u3, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u2} N] [_inst_6 : ContinuousMul.{u2} N _inst_5 _inst_3] (f : F), ContinuousMul.{u3} M (TopologicalSpace.induced.{u3, u2} M N (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N _inst_2 _inst_3 _inst_4) f) _inst_5) _inst_2
+ forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} [_inst_2 : Mul.{u3} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u1, u3, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u2} N] [_inst_6 : ContinuousMul.{u2} N _inst_5 _inst_3] (f : F), ContinuousMul.{u3} M (TopologicalSpace.induced.{u3, u2} M N (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N _inst_2 _inst_3 _inst_4) f) _inst_5) _inst_2
Case conversion may be inaccurate. Consider using '#align has_continuous_mul_induced continuousMul_inducedₓ'. -/
@[to_additive]
theorem continuousMul_induced {M N F : Type _} [Mul M] [Mul N] [MulHomClass F M N]
@@ -1069,7 +1069,7 @@ end Units
lean 3 declaration is
forall {M : Type.{u1}} {N : Type.{u2}} [_inst_2 : Monoid.{u1} M] [_inst_3 : Monoid.{u2} N] [_inst_4 : TopologicalSpace.{u1} M] [_inst_5 : TopologicalSpace.{u2} N] (f : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_2) (Monoid.toMulOneClass.{u2} N _inst_3)), (Continuous.{u1, u2} M N _inst_4 _inst_5 (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_2) (Monoid.toMulOneClass.{u2} N _inst_3)) (fun (_x : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_2) (Monoid.toMulOneClass.{u2} N _inst_3)) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_2) (Monoid.toMulOneClass.{u2} N _inst_3)) f)) -> (Continuous.{u1, u2} (Units.{u1} M _inst_2) (Units.{u2} N _inst_3) (Units.topologicalSpace.{u1} M _inst_4 _inst_2) (Units.topologicalSpace.{u2} N _inst_5 _inst_3) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (Units.{u1} M _inst_2) (Units.{u2} N _inst_3) (Units.mulOneClass.{u1} M _inst_2) (Units.mulOneClass.{u2} N _inst_3)) (fun (_x : MonoidHom.{u1, u2} (Units.{u1} M _inst_2) (Units.{u2} N _inst_3) (Units.mulOneClass.{u1} M _inst_2) (Units.mulOneClass.{u2} N _inst_3)) => (Units.{u1} M _inst_2) -> (Units.{u2} N _inst_3)) (MonoidHom.hasCoeToFun.{u1, u2} (Units.{u1} M _inst_2) (Units.{u2} N _inst_3) (Units.mulOneClass.{u1} M _inst_2) (Units.mulOneClass.{u2} N _inst_3)) (Units.map.{u1, u2} M N _inst_2 _inst_3 f)))
but is expected to have type
- forall {M : Type.{u2}} {N : Type.{u1}} [_inst_2 : Monoid.{u2} M] [_inst_3 : Monoid.{u1} N] [_inst_4 : TopologicalSpace.{u2} M] [_inst_5 : TopologicalSpace.{u1} N] (f : MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)), (Continuous.{u2, u1} M N _inst_4 _inst_5 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_2)) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)))) f)) -> (Continuous.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instTopologicalSpaceUnits.{u2} M _inst_4 _inst_2) (Units.instTopologicalSpaceUnits.{u1} N _inst_5 _inst_3) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (fun (_x : Units.{u2} M _inst_2) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Units.{u2} M _inst_2) => Units.{u1} N _inst_3) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (MulOneClass.toMul.{u2} (Units.{u2} M _inst_2) (Units.instMulOneClassUnits.{u2} M _inst_2)) (MulOneClass.toMul.{u1} (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u1} N _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3) (MonoidHom.monoidHomClass.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)))) (Units.map.{u2, u1} M N _inst_2 _inst_3 f)))
+ forall {M : Type.{u2}} {N : Type.{u1}} [_inst_2 : Monoid.{u2} M] [_inst_3 : Monoid.{u1} N] [_inst_4 : TopologicalSpace.{u2} M] [_inst_5 : TopologicalSpace.{u1} N] (f : MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)), (Continuous.{u2, u1} M N _inst_4 _inst_5 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_2)) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)))) f)) -> (Continuous.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instTopologicalSpaceUnits.{u2} M _inst_4 _inst_2) (Units.instTopologicalSpaceUnits.{u1} N _inst_5 _inst_3) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (fun (_x : Units.{u2} M _inst_2) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Units.{u2} M _inst_2) => Units.{u1} N _inst_3) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (MulOneClass.toMul.{u2} (Units.{u2} M _inst_2) (Units.instMulOneClassUnits.{u2} M _inst_2)) (MulOneClass.toMul.{u1} (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u1} N _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3) (MonoidHom.monoidHomClass.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)))) (Units.map.{u2, u1} M N _inst_2 _inst_3 f)))
Case conversion may be inaccurate. Consider using '#align continuous.units_map Continuous.units_mapₓ'. -/
@[to_additive]
theorem Continuous.units_map [Monoid M] [Monoid N] [TopologicalSpace M] [TopologicalSpace N]
mathlib commit https://github.com/leanprover-community/mathlib/commit/0b9eaaa7686280fad8cce467f5c3c57ee6ce77f8
@@ -201,7 +201,7 @@ theorem Filter.Tendsto.mul_const (b : M) {c : M} {f : α → M} {l : Filter α}
/- warning: le_nhds_mul -> le_nhds_mul is a dubious translation:
lean 3 declaration is
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Mul.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 _inst_3] (a : M) (b : M), LE.le.{u1} (Filter.{u1} M) (Preorder.toLE.{u1} (Filter.{u1} M) (PartialOrder.toPreorder.{u1} (Filter.{u1} M) (Filter.partialOrder.{u1} M))) (HMul.hMul.{u1, u1, u1} (Filter.{u1} M) (Filter.{u1} M) (Filter.{u1} M) (instHMul.{u1} (Filter.{u1} M) (Filter.instMul.{u1} M _inst_3)) (nhds.{u1} M _inst_2 a) (nhds.{u1} M _inst_2 b)) (nhds.{u1} M _inst_2 (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) a b))
+ forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Mul.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 _inst_3] (a : M) (b : M), LE.le.{u1} (Filter.{u1} M) (Preorder.toHasLe.{u1} (Filter.{u1} M) (PartialOrder.toPreorder.{u1} (Filter.{u1} M) (Filter.partialOrder.{u1} M))) (HMul.hMul.{u1, u1, u1} (Filter.{u1} M) (Filter.{u1} M) (Filter.{u1} M) (instHMul.{u1} (Filter.{u1} M) (Filter.instMul.{u1} M _inst_3)) (nhds.{u1} M _inst_2 a) (nhds.{u1} M _inst_2 b)) (nhds.{u1} M _inst_2 (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) a b))
but is expected to have type
forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Mul.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 _inst_3] (a : M) (b : M), LE.le.{u1} (Filter.{u1} M) (Preorder.toLE.{u1} (Filter.{u1} M) (PartialOrder.toPreorder.{u1} (Filter.{u1} M) (Filter.instPartialOrderFilter.{u1} M))) (HMul.hMul.{u1, u1, u1} (Filter.{u1} M) (Filter.{u1} M) (Filter.{u1} M) (instHMul.{u1} (Filter.{u1} M) (Filter.instMul.{u1} M _inst_3)) (nhds.{u1} M _inst_2 a) (nhds.{u1} M _inst_2 b)) (nhds.{u1} M _inst_2 (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_3) a b))
Case conversion may be inaccurate. Consider using '#align le_nhds_mul le_nhds_mulₓ'. -/
@@ -246,41 +246,57 @@ section tendsto_nhds
variable {𝕜 : Type _} [Preorder 𝕜] [Zero 𝕜] [Mul 𝕜] [TopologicalSpace 𝕜] [ContinuousMul 𝕜]
{l : Filter α} {f : α → 𝕜} {b c : 𝕜} (hb : 0 < b)
-#print Filter.TendstoNhdsWithinIoi.const_mul /-
+/- warning: filter.tendsto_nhds_within_Ioi.const_mul -> Filter.TendstoNhdsWithinIoi.const_mul is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_5 : Preorder.{u2} 𝕜] [_inst_6 : Zero.{u2} 𝕜] [_inst_7 : Mul.{u2} 𝕜] [_inst_8 : TopologicalSpace.{u2} 𝕜] [_inst_9 : ContinuousMul.{u2} 𝕜 _inst_8 _inst_7] {l : Filter.{u1} α} {f : α -> 𝕜} {b : 𝕜} {c : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toHasLt.{u2} 𝕜 _inst_5) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 _inst_6))) b) -> (forall [_inst_10 : PosMulStrictMono.{u2} 𝕜 _inst_7 _inst_6 _inst_5] [_inst_11 : PosMulReflectLT.{u2} 𝕜 _inst_7 _inst_6 _inst_5], (Filter.Tendsto.{u1, u2} α 𝕜 f l (nhdsWithin.{u2} 𝕜 _inst_8 c (Set.Ioi.{u2} 𝕜 _inst_5 c))) -> (Filter.Tendsto.{u1, u2} α 𝕜 (fun (a : α) => HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b (f a)) l (nhdsWithin.{u2} 𝕜 _inst_8 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b c) (Set.Ioi.{u2} 𝕜 _inst_5 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b c)))))
+but is expected to have type
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_5 : Preorder.{u2} 𝕜] [_inst_6 : Zero.{u2} 𝕜] [_inst_7 : Mul.{u2} 𝕜] [_inst_8 : TopologicalSpace.{u2} 𝕜] [_inst_9 : ContinuousMul.{u2} 𝕜 _inst_8 _inst_7] {l : Filter.{u1} α} {f : α -> 𝕜} {b : 𝕜} {c : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toLT.{u2} 𝕜 _inst_5) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 _inst_6)) b) -> (forall [_inst_10 : PosMulStrictMono.{u2} 𝕜 _inst_7 _inst_6 _inst_5] [_inst_11 : PosMulReflectLT.{u2} 𝕜 _inst_7 _inst_6 _inst_5], (Filter.Tendsto.{u1, u2} α 𝕜 f l (nhdsWithin.{u2} 𝕜 _inst_8 c (Set.Ioi.{u2} 𝕜 _inst_5 c))) -> (Filter.Tendsto.{u1, u2} α 𝕜 (fun (a : α) => HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b (f a)) l (nhdsWithin.{u2} 𝕜 _inst_8 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b c) (Set.Ioi.{u2} 𝕜 _inst_5 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b c)))))
+Case conversion may be inaccurate. Consider using '#align filter.tendsto_nhds_within_Ioi.const_mul Filter.TendstoNhdsWithinIoi.const_mulₓ'. -/
theorem Filter.TendstoNhdsWithinIoi.const_mul [PosMulStrictMono 𝕜] [PosMulReflectLT 𝕜]
(h : Tendsto f l (𝓝[>] c)) : Tendsto (fun a => b * f a) l (𝓝[>] (b * c)) :=
tendsto_nhdsWithin_of_tendsto_nhds_of_eventually_within _
((tendsto_nhds_of_tendsto_nhdsWithin h).const_mul b) <|
(tendsto_nhdsWithin_iff.mp h).2.mono fun j => (mul_lt_mul_left hb).mpr
#align filter.tendsto_nhds_within_Ioi.const_mul Filter.TendstoNhdsWithinIoi.const_mul
--/
-#print Filter.TendstoNhdsWithinIio.const_mul /-
+/- warning: filter.tendsto_nhds_within_Iio.const_mul -> Filter.TendstoNhdsWithinIio.const_mul is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_5 : Preorder.{u2} 𝕜] [_inst_6 : Zero.{u2} 𝕜] [_inst_7 : Mul.{u2} 𝕜] [_inst_8 : TopologicalSpace.{u2} 𝕜] [_inst_9 : ContinuousMul.{u2} 𝕜 _inst_8 _inst_7] {l : Filter.{u1} α} {f : α -> 𝕜} {b : 𝕜} {c : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toHasLt.{u2} 𝕜 _inst_5) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 _inst_6))) b) -> (forall [_inst_10 : PosMulStrictMono.{u2} 𝕜 _inst_7 _inst_6 _inst_5] [_inst_11 : PosMulReflectLT.{u2} 𝕜 _inst_7 _inst_6 _inst_5], (Filter.Tendsto.{u1, u2} α 𝕜 f l (nhdsWithin.{u2} 𝕜 _inst_8 c (Set.Iio.{u2} 𝕜 _inst_5 c))) -> (Filter.Tendsto.{u1, u2} α 𝕜 (fun (a : α) => HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b (f a)) l (nhdsWithin.{u2} 𝕜 _inst_8 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b c) (Set.Iio.{u2} 𝕜 _inst_5 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b c)))))
+but is expected to have type
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_5 : Preorder.{u2} 𝕜] [_inst_6 : Zero.{u2} 𝕜] [_inst_7 : Mul.{u2} 𝕜] [_inst_8 : TopologicalSpace.{u2} 𝕜] [_inst_9 : ContinuousMul.{u2} 𝕜 _inst_8 _inst_7] {l : Filter.{u1} α} {f : α -> 𝕜} {b : 𝕜} {c : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toLT.{u2} 𝕜 _inst_5) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 _inst_6)) b) -> (forall [_inst_10 : PosMulStrictMono.{u2} 𝕜 _inst_7 _inst_6 _inst_5] [_inst_11 : PosMulReflectLT.{u2} 𝕜 _inst_7 _inst_6 _inst_5], (Filter.Tendsto.{u1, u2} α 𝕜 f l (nhdsWithin.{u2} 𝕜 _inst_8 c (Set.Iio.{u2} 𝕜 _inst_5 c))) -> (Filter.Tendsto.{u1, u2} α 𝕜 (fun (a : α) => HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b (f a)) l (nhdsWithin.{u2} 𝕜 _inst_8 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b c) (Set.Iio.{u2} 𝕜 _inst_5 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) b c)))))
+Case conversion may be inaccurate. Consider using '#align filter.tendsto_nhds_within_Iio.const_mul Filter.TendstoNhdsWithinIio.const_mulₓ'. -/
theorem Filter.TendstoNhdsWithinIio.const_mul [PosMulStrictMono 𝕜] [PosMulReflectLT 𝕜]
(h : Tendsto f l (𝓝[<] c)) : Tendsto (fun a => b * f a) l (𝓝[<] (b * c)) :=
tendsto_nhdsWithin_of_tendsto_nhds_of_eventually_within _
((tendsto_nhds_of_tendsto_nhdsWithin h).const_mul b) <|
(tendsto_nhdsWithin_iff.mp h).2.mono fun j => (mul_lt_mul_left hb).mpr
#align filter.tendsto_nhds_within_Iio.const_mul Filter.TendstoNhdsWithinIio.const_mul
--/
-#print Filter.TendstoNhdsWithinIoi.mul_const /-
+/- warning: filter.tendsto_nhds_within_Ioi.mul_const -> Filter.TendstoNhdsWithinIoi.mul_const is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_5 : Preorder.{u2} 𝕜] [_inst_6 : Zero.{u2} 𝕜] [_inst_7 : Mul.{u2} 𝕜] [_inst_8 : TopologicalSpace.{u2} 𝕜] [_inst_9 : ContinuousMul.{u2} 𝕜 _inst_8 _inst_7] {l : Filter.{u1} α} {f : α -> 𝕜} {b : 𝕜} {c : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toHasLt.{u2} 𝕜 _inst_5) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 _inst_6))) b) -> (forall [_inst_10 : MulPosStrictMono.{u2} 𝕜 _inst_7 _inst_6 _inst_5] [_inst_11 : MulPosReflectLT.{u2} 𝕜 _inst_7 _inst_6 _inst_5], (Filter.Tendsto.{u1, u2} α 𝕜 f l (nhdsWithin.{u2} 𝕜 _inst_8 c (Set.Ioi.{u2} 𝕜 _inst_5 c))) -> (Filter.Tendsto.{u1, u2} α 𝕜 (fun (a : α) => HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) (f a) b) l (nhdsWithin.{u2} 𝕜 _inst_8 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) c b) (Set.Ioi.{u2} 𝕜 _inst_5 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) c b)))))
+but is expected to have type
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_5 : Preorder.{u2} 𝕜] [_inst_6 : Zero.{u2} 𝕜] [_inst_7 : Mul.{u2} 𝕜] [_inst_8 : TopologicalSpace.{u2} 𝕜] [_inst_9 : ContinuousMul.{u2} 𝕜 _inst_8 _inst_7] {l : Filter.{u1} α} {f : α -> 𝕜} {b : 𝕜} {c : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toLT.{u2} 𝕜 _inst_5) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 _inst_6)) b) -> (forall [_inst_10 : MulPosStrictMono.{u2} 𝕜 _inst_7 _inst_6 _inst_5] [_inst_11 : MulPosReflectLT.{u2} 𝕜 _inst_7 _inst_6 _inst_5], (Filter.Tendsto.{u1, u2} α 𝕜 f l (nhdsWithin.{u2} 𝕜 _inst_8 c (Set.Ioi.{u2} 𝕜 _inst_5 c))) -> (Filter.Tendsto.{u1, u2} α 𝕜 (fun (a : α) => HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) (f a) b) l (nhdsWithin.{u2} 𝕜 _inst_8 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) c b) (Set.Ioi.{u2} 𝕜 _inst_5 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) c b)))))
+Case conversion may be inaccurate. Consider using '#align filter.tendsto_nhds_within_Ioi.mul_const Filter.TendstoNhdsWithinIoi.mul_constₓ'. -/
theorem Filter.TendstoNhdsWithinIoi.mul_const [MulPosStrictMono 𝕜] [MulPosReflectLT 𝕜]
(h : Tendsto f l (𝓝[>] c)) : Tendsto (fun a => f a * b) l (𝓝[>] (c * b)) :=
tendsto_nhdsWithin_of_tendsto_nhds_of_eventually_within _
((tendsto_nhds_of_tendsto_nhdsWithin h).mul_const b) <|
(tendsto_nhdsWithin_iff.mp h).2.mono fun j => (mul_lt_mul_right hb).mpr
#align filter.tendsto_nhds_within_Ioi.mul_const Filter.TendstoNhdsWithinIoi.mul_const
--/
-#print Filter.TendstoNhdsWithinIio.mul_const /-
+/- warning: filter.tendsto_nhds_within_Iio.mul_const -> Filter.TendstoNhdsWithinIio.mul_const is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_5 : Preorder.{u2} 𝕜] [_inst_6 : Zero.{u2} 𝕜] [_inst_7 : Mul.{u2} 𝕜] [_inst_8 : TopologicalSpace.{u2} 𝕜] [_inst_9 : ContinuousMul.{u2} 𝕜 _inst_8 _inst_7] {l : Filter.{u1} α} {f : α -> 𝕜} {b : 𝕜} {c : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toHasLt.{u2} 𝕜 _inst_5) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 _inst_6))) b) -> (forall [_inst_10 : MulPosStrictMono.{u2} 𝕜 _inst_7 _inst_6 _inst_5] [_inst_11 : MulPosReflectLT.{u2} 𝕜 _inst_7 _inst_6 _inst_5], (Filter.Tendsto.{u1, u2} α 𝕜 f l (nhdsWithin.{u2} 𝕜 _inst_8 c (Set.Iio.{u2} 𝕜 _inst_5 c))) -> (Filter.Tendsto.{u1, u2} α 𝕜 (fun (a : α) => HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) (f a) b) l (nhdsWithin.{u2} 𝕜 _inst_8 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) c b) (Set.Iio.{u2} 𝕜 _inst_5 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) c b)))))
+but is expected to have type
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_5 : Preorder.{u2} 𝕜] [_inst_6 : Zero.{u2} 𝕜] [_inst_7 : Mul.{u2} 𝕜] [_inst_8 : TopologicalSpace.{u2} 𝕜] [_inst_9 : ContinuousMul.{u2} 𝕜 _inst_8 _inst_7] {l : Filter.{u1} α} {f : α -> 𝕜} {b : 𝕜} {c : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toLT.{u2} 𝕜 _inst_5) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 _inst_6)) b) -> (forall [_inst_10 : MulPosStrictMono.{u2} 𝕜 _inst_7 _inst_6 _inst_5] [_inst_11 : MulPosReflectLT.{u2} 𝕜 _inst_7 _inst_6 _inst_5], (Filter.Tendsto.{u1, u2} α 𝕜 f l (nhdsWithin.{u2} 𝕜 _inst_8 c (Set.Iio.{u2} 𝕜 _inst_5 c))) -> (Filter.Tendsto.{u1, u2} α 𝕜 (fun (a : α) => HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) (f a) b) l (nhdsWithin.{u2} 𝕜 _inst_8 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) c b) (Set.Iio.{u2} 𝕜 _inst_5 (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 _inst_7) c b)))))
+Case conversion may be inaccurate. Consider using '#align filter.tendsto_nhds_within_Iio.mul_const Filter.TendstoNhdsWithinIio.mul_constₓ'. -/
theorem Filter.TendstoNhdsWithinIio.mul_const [MulPosStrictMono 𝕜] [MulPosReflectLT 𝕜]
(h : Tendsto f l (𝓝[<] c)) : Tendsto (fun a => f a * b) l (𝓝[<] (c * b)) :=
tendsto_nhdsWithin_of_tendsto_nhds_of_eventually_within _
((tendsto_nhds_of_tendsto_nhdsWithin h).mul_const b) <|
(tendsto_nhdsWithin_iff.mp h).2.mono fun j => (mul_lt_mul_right hb).mpr
#align filter.tendsto_nhds_within_Iio.mul_const Filter.TendstoNhdsWithinIio.mul_const
--/
end tendsto_nhds
@@ -628,7 +644,7 @@ def Submonoid.topologicalClosure (s : Submonoid M) : Submonoid M
/- warning: submonoid.le_topological_closure -> Submonoid.le_topologicalClosure is a dubious translation:
lean 3 declaration is
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (s : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)), LE.le.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Preorder.toLE.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) s (Submonoid.topologicalClosure.{u1} M _inst_2 _inst_3 _inst_4 s)
+ forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (s : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)), LE.le.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Preorder.toHasLe.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) s (Submonoid.topologicalClosure.{u1} M _inst_2 _inst_3 _inst_4 s)
but is expected to have type
forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (s : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)), LE.le.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Preorder.toLE.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Submonoid.instCompleteLatticeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)))))) s (Submonoid.topologicalClosure.{u1} M _inst_2 _inst_3 _inst_4 s)
Case conversion may be inaccurate. Consider using '#align submonoid.le_topological_closure Submonoid.le_topologicalClosureₓ'. -/
@@ -652,7 +668,7 @@ theorem Submonoid.isClosed_topologicalClosure (s : Submonoid M) :
/- warning: submonoid.topological_closure_minimal -> Submonoid.topologicalClosure_minimal is a dubious translation:
lean 3 declaration is
- forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (s : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) {t : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)}, (LE.le.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Preorder.toLE.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) s t) -> (IsClosed.{u1} M _inst_2 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) t)) -> (LE.le.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Preorder.toLE.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) (Submonoid.topologicalClosure.{u1} M _inst_2 _inst_3 _inst_4 s) t)
+ forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (s : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) {t : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)}, (LE.le.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Preorder.toHasLe.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) s t) -> (IsClosed.{u1} M _inst_2 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) t)) -> (LE.le.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Preorder.toHasLe.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))))) (Submonoid.topologicalClosure.{u1} M _inst_2 _inst_3 _inst_4 s) t)
but is expected to have type
forall {M : Type.{u1}} [_inst_2 : TopologicalSpace.{u1} M] [_inst_3 : Monoid.{u1} M] [_inst_4 : ContinuousMul.{u1} M _inst_2 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3))] (s : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) {t : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)}, (LE.le.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Preorder.toLE.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Submonoid.instCompleteLatticeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)))))) s t) -> (IsClosed.{u1} M _inst_2 (SetLike.coe.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) t)) -> (LE.le.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Preorder.toLE.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)) (Submonoid.instCompleteLatticeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_3)))))) (Submonoid.topologicalClosure.{u1} M _inst_2 _inst_3 _inst_4 s) t)
Case conversion may be inaccurate. Consider using '#align submonoid.topological_closure_minimal Submonoid.topologicalClosure_minimalₓ'. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/e3fb84046afd187b710170887195d50bada934ee
@@ -458,8 +458,8 @@ theorem isClosed_setOf_map_mul [Mul M₁] [Mul M₂] [ContinuousMul M₂] :
by
simp only [set_of_forall]
exact
- isClosed_interᵢ fun x =>
- isClosed_interᵢ fun y =>
+ isClosed_iInter fun x =>
+ isClosed_iInter fun y =>
isClosed_eq (continuous_apply _) ((continuous_apply _).mul (continuous_apply _))
#align is_closed_set_of_map_mul isClosed_setOf_map_mul
#align is_closed_set_of_map_add isClosed_setOf_map_add
@@ -1263,35 +1263,35 @@ section LatticeOps
variable {ι' : Sort _} [Mul M]
-/- warning: has_continuous_mul_Inf -> continuousMul_infₛ is a dubious translation:
+/- warning: has_continuous_mul_Inf -> continuousMul_sInf is a dubious translation:
lean 3 declaration is
- forall {M : Type.{u1}} [_inst_2 : Mul.{u1} M] {ts : Set.{u1} (TopologicalSpace.{u1} M)}, (forall (t : TopologicalSpace.{u1} M), (Membership.Mem.{u1, u1} (TopologicalSpace.{u1} M) (Set.{u1} (TopologicalSpace.{u1} M)) (Set.hasMem.{u1} (TopologicalSpace.{u1} M)) t ts) -> (ContinuousMul.{u1} M t _inst_2)) -> (ContinuousMul.{u1} M (InfSet.infₛ.{u1} (TopologicalSpace.{u1} M) (ConditionallyCompleteLattice.toHasInf.{u1} (TopologicalSpace.{u1} M) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.{u1} M) (TopologicalSpace.completeLattice.{u1} M))) ts) _inst_2)
+ forall {M : Type.{u1}} [_inst_2 : Mul.{u1} M] {ts : Set.{u1} (TopologicalSpace.{u1} M)}, (forall (t : TopologicalSpace.{u1} M), (Membership.Mem.{u1, u1} (TopologicalSpace.{u1} M) (Set.{u1} (TopologicalSpace.{u1} M)) (Set.hasMem.{u1} (TopologicalSpace.{u1} M)) t ts) -> (ContinuousMul.{u1} M t _inst_2)) -> (ContinuousMul.{u1} M (InfSet.sInf.{u1} (TopologicalSpace.{u1} M) (ConditionallyCompleteLattice.toHasInf.{u1} (TopologicalSpace.{u1} M) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.{u1} M) (TopologicalSpace.completeLattice.{u1} M))) ts) _inst_2)
but is expected to have type
- forall {M : Type.{u1}} [_inst_2 : Mul.{u1} M] {ts : Set.{u1} (TopologicalSpace.{u1} M)}, (forall (t : TopologicalSpace.{u1} M), (Membership.mem.{u1, u1} (TopologicalSpace.{u1} M) (Set.{u1} (TopologicalSpace.{u1} M)) (Set.instMembershipSet.{u1} (TopologicalSpace.{u1} M)) t ts) -> (ContinuousMul.{u1} M t _inst_2)) -> (ContinuousMul.{u1} M (InfSet.infₛ.{u1} (TopologicalSpace.{u1} M) (ConditionallyCompleteLattice.toInfSet.{u1} (TopologicalSpace.{u1} M) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.{u1} M) (TopologicalSpace.instCompleteLatticeTopologicalSpace.{u1} M))) ts) _inst_2)
-Case conversion may be inaccurate. Consider using '#align has_continuous_mul_Inf continuousMul_infₛₓ'. -/
+ forall {M : Type.{u1}} [_inst_2 : Mul.{u1} M] {ts : Set.{u1} (TopologicalSpace.{u1} M)}, (forall (t : TopologicalSpace.{u1} M), (Membership.mem.{u1, u1} (TopologicalSpace.{u1} M) (Set.{u1} (TopologicalSpace.{u1} M)) (Set.instMembershipSet.{u1} (TopologicalSpace.{u1} M)) t ts) -> (ContinuousMul.{u1} M t _inst_2)) -> (ContinuousMul.{u1} M (InfSet.sInf.{u1} (TopologicalSpace.{u1} M) (ConditionallyCompleteLattice.toInfSet.{u1} (TopologicalSpace.{u1} M) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.{u1} M) (TopologicalSpace.instCompleteLatticeTopologicalSpace.{u1} M))) ts) _inst_2)
+Case conversion may be inaccurate. Consider using '#align has_continuous_mul_Inf continuousMul_sInfₓ'. -/
@[to_additive]
-theorem continuousMul_infₛ {ts : Set (TopologicalSpace M)} (h : ∀ t ∈ ts, @ContinuousMul M t _) :
- @ContinuousMul M (infₛ ts) _ :=
+theorem continuousMul_sInf {ts : Set (TopologicalSpace M)} (h : ∀ t ∈ ts, @ContinuousMul M t _) :
+ @ContinuousMul M (sInf ts) _ :=
{
continuous_mul :=
- continuous_infₛ_rng.2 fun t ht =>
- continuous_infₛ_dom₂ ht ht (@ContinuousMul.continuous_mul M t _ (h t ht)) }
-#align has_continuous_mul_Inf continuousMul_infₛ
-#align has_continuous_add_Inf continuousAdd_infₛ
+ continuous_sInf_rng.2 fun t ht =>
+ continuous_sInf_dom₂ ht ht (@ContinuousMul.continuous_mul M t _ (h t ht)) }
+#align has_continuous_mul_Inf continuousMul_sInf
+#align has_continuous_add_Inf continuousAdd_sInf
-/- warning: has_continuous_mul_infi -> continuousMul_infᵢ is a dubious translation:
+/- warning: has_continuous_mul_infi -> continuousMul_iInf is a dubious translation:
lean 3 declaration is
- forall {M : Type.{u1}} {ι' : Sort.{u2}} [_inst_2 : Mul.{u1} M] {ts : ι' -> (TopologicalSpace.{u1} M)}, (forall (i : ι'), ContinuousMul.{u1} M (ts i) _inst_2) -> (ContinuousMul.{u1} M (infᵢ.{u1, u2} (TopologicalSpace.{u1} M) (ConditionallyCompleteLattice.toHasInf.{u1} (TopologicalSpace.{u1} M) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.{u1} M) (TopologicalSpace.completeLattice.{u1} M))) ι' (fun (i : ι') => ts i)) _inst_2)
+ forall {M : Type.{u1}} {ι' : Sort.{u2}} [_inst_2 : Mul.{u1} M] {ts : ι' -> (TopologicalSpace.{u1} M)}, (forall (i : ι'), ContinuousMul.{u1} M (ts i) _inst_2) -> (ContinuousMul.{u1} M (iInf.{u1, u2} (TopologicalSpace.{u1} M) (ConditionallyCompleteLattice.toHasInf.{u1} (TopologicalSpace.{u1} M) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.{u1} M) (TopologicalSpace.completeLattice.{u1} M))) ι' (fun (i : ι') => ts i)) _inst_2)
but is expected to have type
- forall {M : Type.{u2}} {ι' : Sort.{u1}} [_inst_2 : Mul.{u2} M] {ts : ι' -> (TopologicalSpace.{u2} M)}, (forall (i : ι'), ContinuousMul.{u2} M (ts i) _inst_2) -> (ContinuousMul.{u2} M (infᵢ.{u2, u1} (TopologicalSpace.{u2} M) (ConditionallyCompleteLattice.toInfSet.{u2} (TopologicalSpace.{u2} M) (CompleteLattice.toConditionallyCompleteLattice.{u2} (TopologicalSpace.{u2} M) (TopologicalSpace.instCompleteLatticeTopologicalSpace.{u2} M))) ι' (fun (i : ι') => ts i)) _inst_2)
-Case conversion may be inaccurate. Consider using '#align has_continuous_mul_infi continuousMul_infᵢₓ'. -/
+ forall {M : Type.{u2}} {ι' : Sort.{u1}} [_inst_2 : Mul.{u2} M] {ts : ι' -> (TopologicalSpace.{u2} M)}, (forall (i : ι'), ContinuousMul.{u2} M (ts i) _inst_2) -> (ContinuousMul.{u2} M (iInf.{u2, u1} (TopologicalSpace.{u2} M) (ConditionallyCompleteLattice.toInfSet.{u2} (TopologicalSpace.{u2} M) (CompleteLattice.toConditionallyCompleteLattice.{u2} (TopologicalSpace.{u2} M) (TopologicalSpace.instCompleteLatticeTopologicalSpace.{u2} M))) ι' (fun (i : ι') => ts i)) _inst_2)
+Case conversion may be inaccurate. Consider using '#align has_continuous_mul_infi continuousMul_iInfₓ'. -/
@[to_additive]
-theorem continuousMul_infᵢ {ts : ι' → TopologicalSpace M} (h' : ∀ i, @ContinuousMul M (ts i) _) :
+theorem continuousMul_iInf {ts : ι' → TopologicalSpace M} (h' : ∀ i, @ContinuousMul M (ts i) _) :
@ContinuousMul M (⨅ i, ts i) _ := by
- rw [← infₛ_range]
- exact continuousMul_infₛ (set.forall_range_iff.mpr h')
-#align has_continuous_mul_infi continuousMul_infᵢ
-#align has_continuous_add_infi continuousAdd_infᵢ
+ rw [← sInf_range]
+ exact continuousMul_sInf (set.forall_range_iff.mpr h')
+#align has_continuous_mul_infi continuousMul_iInf
+#align has_continuous_add_infi continuousAdd_iInf
/- warning: has_continuous_mul_inf -> continuousMul_inf is a dubious translation:
lean 3 declaration is
@@ -1303,8 +1303,8 @@ Case conversion may be inaccurate. Consider using '#align has_continuous_mul_inf
theorem continuousMul_inf {t₁ t₂ : TopologicalSpace M} (h₁ : @ContinuousMul M t₁ _)
(h₂ : @ContinuousMul M t₂ _) : @ContinuousMul M (t₁ ⊓ t₂) _ :=
by
- rw [inf_eq_infᵢ]
- refine' continuousMul_infᵢ fun b => _
+ rw [inf_eq_iInf]
+ refine' continuousMul_iInf fun b => _
cases b <;> assumption
#align has_continuous_mul_inf continuousMul_inf
#align has_continuous_add_inf continuousAdd_inf
mathlib commit https://github.com/leanprover-community/mathlib/commit/36b8aa61ea7c05727161f96a0532897bd72aedab
@@ -415,7 +415,7 @@ theorem ContinuousMul.of_nhds_one {M : Type u} [Monoid M] [TopologicalSpace M]
lean 3 declaration is
forall (M : Type.{u1}) [_inst_5 : CommMonoid.{u1} M] [_inst_6 : TopologicalSpace.{u1} M], (Filter.Tendsto.{u1, u1} (Prod.{u1, u1} M M) M (Function.uncurry.{u1, u1, u1} M M M (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))))) (Filter.prod.{u1, u1} M M (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))))))) -> (forall (x₀ : M), Eq.{succ u1} (Filter.{u1} M) (nhds.{u1} M _inst_6 x₀) (Filter.map.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))) x₀ x) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))))))) -> (ContinuousMul.{u1} M _inst_6 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))
but is expected to have type
- forall (M : Type.{u1}) [_inst_5 : CommMonoid.{u1} M] [_inst_6 : TopologicalSpace.{u1} M], (Filter.Tendsto.{u1, u1} (Prod.{u1, u1} M M) M (Function.uncurry.{u1, u1, u1} M M M (fun (x._@.Mathlib.Topology.Algebra.Monoid._hyg.2840 : M) (x._@.Mathlib.Topology.Algebra.Monoid._hyg.2842 : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))) x._@.Mathlib.Topology.Algebra.Monoid._hyg.2840 x._@.Mathlib.Topology.Algebra.Monoid._hyg.2842)) (Filter.prod.{u1, u1} M M (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))))) -> (forall (x₀ : M), Eq.{succ u1} (Filter.{u1} M) (nhds.{u1} M _inst_6 x₀) (Filter.map.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))) x₀ x) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))))) -> (ContinuousMul.{u1} M _inst_6 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))
+ forall (M : Type.{u1}) [_inst_5 : CommMonoid.{u1} M] [_inst_6 : TopologicalSpace.{u1} M], (Filter.Tendsto.{u1, u1} (Prod.{u1, u1} M M) M (Function.uncurry.{u1, u1, u1} M M M (fun (x._@.Mathlib.Topology.Algebra.Monoid._hyg.2838 : M) (x._@.Mathlib.Topology.Algebra.Monoid._hyg.2840 : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))) x._@.Mathlib.Topology.Algebra.Monoid._hyg.2838 x._@.Mathlib.Topology.Algebra.Monoid._hyg.2840)) (Filter.prod.{u1, u1} M M (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))))) -> (forall (x₀ : M), Eq.{succ u1} (Filter.{u1} M) (nhds.{u1} M _inst_6 x₀) (Filter.map.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))) x₀ x) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))))) -> (ContinuousMul.{u1} M _inst_6 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))
Case conversion may be inaccurate. Consider using '#align has_continuous_mul_of_comm_of_nhds_one continuousMul_of_comm_of_nhds_oneₓ'. -/
@[to_additive]
theorem continuousMul_of_comm_of_nhds_one (M : Type u) [CommMonoid M] [TopologicalSpace M]
mathlib commit https://github.com/leanprover-community/mathlib/commit/2651125b48fc5c170ab1111afd0817c903b1fc6c
@@ -288,7 +288,7 @@ end tendsto_nhds
lean 3 declaration is
forall {ι : Type.{u1}} {N : Type.{u2}} [_inst_5 : TopologicalSpace.{u2} N] [_inst_6 : Monoid.{u2} N] [_inst_7 : ContinuousMul.{u2} N _inst_5 (MulOneClass.toHasMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_6))] [_inst_8 : T2Space.{u2} N _inst_5] {f : ι -> (Units.{u2} N _inst_6)} {r₁ : N} {r₂ : N} {l : Filter.{u1} ι} [_inst_9 : Filter.NeBot.{u1} ι l], (Filter.Tendsto.{u1, u2} ι N (fun (x : ι) => (fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Units.{u2} N _inst_6) N (HasLiftT.mk.{succ u2, succ u2} (Units.{u2} N _inst_6) N (CoeTCₓ.coe.{succ u2, succ u2} (Units.{u2} N _inst_6) N (coeBase.{succ u2, succ u2} (Units.{u2} N _inst_6) N (Units.hasCoe.{u2} N _inst_6)))) (f x)) l (nhds.{u2} N _inst_5 r₁)) -> (Filter.Tendsto.{u1, u2} ι N (fun (x : ι) => (fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Units.{u2} N _inst_6) N (HasLiftT.mk.{succ u2, succ u2} (Units.{u2} N _inst_6) N (CoeTCₓ.coe.{succ u2, succ u2} (Units.{u2} N _inst_6) N (coeBase.{succ u2, succ u2} (Units.{u2} N _inst_6) N (Units.hasCoe.{u2} N _inst_6)))) (Inv.inv.{u2} (Units.{u2} N _inst_6) (Units.hasInv.{u2} N _inst_6) (f x))) l (nhds.{u2} N _inst_5 r₂)) -> (Units.{u2} N _inst_6)
but is expected to have type
- forall {ι : Type.{u1}} {N : Type.{u2}} [_inst_5 : TopologicalSpace.{u2} N] [_inst_6 : Monoid.{u2} N] [_inst_7 : ContinuousMul.{u2} N _inst_5 (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_6))] [_inst_8 : T2Space.{u2} N _inst_5] {f : ι -> (Units.{u2} N _inst_6)} {r₁ : N} {r₂ : N} {l : Filter.{u1} ι} [_inst_9 : Filter.NeBot.{u1} ι l], (Filter.Tendsto.{u1, u2} ι N (fun (x : ι) => Units.val.{u2} N _inst_6 (f x)) l (nhds.{u2} N _inst_5 r₁)) -> (Filter.Tendsto.{u1, u2} ι N (fun (x : ι) => Units.val.{u2} N _inst_6 (Inv.inv.{u2} (Units.{u2} N _inst_6) (Units.instInvUnits.{u2} N _inst_6) (f x))) l (nhds.{u2} N _inst_5 r₂)) -> (Units.{u2} N _inst_6)
+ forall {ι : Type.{u1}} {N : Type.{u2}} [_inst_5 : TopologicalSpace.{u2} N] [_inst_6 : Monoid.{u2} N] [_inst_7 : ContinuousMul.{u2} N _inst_5 (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_6))] [_inst_8 : T2Space.{u2} N _inst_5] {f : ι -> (Units.{u2} N _inst_6)} {r₁ : N} {r₂ : N} {l : Filter.{u1} ι} [_inst_9 : Filter.NeBot.{u1} ι l], (Filter.Tendsto.{u1, u2} ι N (fun (x : ι) => Units.val.{u2} N _inst_6 (f x)) l (nhds.{u2} N _inst_5 r₁)) -> (Filter.Tendsto.{u1, u2} ι N (fun (x : ι) => Units.val.{u2} N _inst_6 (Inv.inv.{u2} (Units.{u2} N _inst_6) (Units.instInv.{u2} N _inst_6) (f x))) l (nhds.{u2} N _inst_5 r₂)) -> (Units.{u2} N _inst_6)
Case conversion may be inaccurate. Consider using '#align filter.tendsto.units Filter.Tendsto.unitsₓ'. -/
/-- Construct a unit from limits of units and their inverses. -/
@[to_additive Filter.Tendsto.addUnits
mathlib commit https://github.com/leanprover-community/mathlib/commit/1a4df69ca1a9a0e5e26bfe12e2b92814216016d0
@@ -378,7 +378,7 @@ open Function
lean 3 declaration is
forall {M : Type.{u1}} [_inst_5 : Monoid.{u1} M] [_inst_6 : TopologicalSpace.{u1} M], (Filter.Tendsto.{u1, u1} (Prod.{u1, u1} M M) M (Function.uncurry.{u1, u1, u1} M M M (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5))))) (Filter.prod.{u1, u1} M M (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5)))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5))))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5))))))) -> (forall (x₀ : M), Eq.{succ u1} (Filter.{u1} M) (nhds.{u1} M _inst_6 x₀) (Filter.map.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5))) x₀ x) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5)))))))) -> (forall (x₀ : M), Eq.{succ u1} (Filter.{u1} M) (nhds.{u1} M _inst_6 x₀) (Filter.map.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5))) x x₀) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5)))))))) -> (ContinuousMul.{u1} M _inst_6 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5)))
but is expected to have type
- forall {M : Type.{u1}} [_inst_5 : Monoid.{u1} M] [_inst_6 : TopologicalSpace.{u1} M], (Filter.Tendsto.{u1, u1} (Prod.{u1, u1} M M) M (Function.uncurry.{u1, u1, u1} M M M (fun (x._@.Mathlib.Topology.Algebra.Monoid._hyg.2116 : M) (x._@.Mathlib.Topology.Algebra.Monoid._hyg.2118 : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5))) x._@.Mathlib.Topology.Algebra.Monoid._hyg.2116 x._@.Mathlib.Topology.Algebra.Monoid._hyg.2118)) (Filter.prod.{u1, u1} M M (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_5)))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_5))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_5))))) -> (forall (x₀ : M), Eq.{succ u1} (Filter.{u1} M) (nhds.{u1} M _inst_6 x₀) (Filter.map.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5))) x₀ x) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_5)))))) -> (forall (x₀ : M), Eq.{succ u1} (Filter.{u1} M) (nhds.{u1} M _inst_6 x₀) (Filter.map.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5))) x x₀) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_5)))))) -> (ContinuousMul.{u1} M _inst_6 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5)))
+ forall {M : Type.{u1}} [_inst_5 : Monoid.{u1} M] [_inst_6 : TopologicalSpace.{u1} M], (Filter.Tendsto.{u1, u1} (Prod.{u1, u1} M M) M (Function.uncurry.{u1, u1, u1} M M M (fun (x._@.Mathlib.Topology.Algebra.Monoid._hyg.2120 : M) (x._@.Mathlib.Topology.Algebra.Monoid._hyg.2122 : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5))) x._@.Mathlib.Topology.Algebra.Monoid._hyg.2120 x._@.Mathlib.Topology.Algebra.Monoid._hyg.2122)) (Filter.prod.{u1, u1} M M (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_5)))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_5))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_5))))) -> (forall (x₀ : M), Eq.{succ u1} (Filter.{u1} M) (nhds.{u1} M _inst_6 x₀) (Filter.map.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5))) x₀ x) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_5)))))) -> (forall (x₀ : M), Eq.{succ u1} (Filter.{u1} M) (nhds.{u1} M _inst_6 x₀) (Filter.map.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5))) x x₀) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_5)))))) -> (ContinuousMul.{u1} M _inst_6 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_5)))
Case conversion may be inaccurate. Consider using '#align has_continuous_mul.of_nhds_one ContinuousMul.of_nhds_oneₓ'. -/
@[to_additive]
theorem ContinuousMul.of_nhds_one {M : Type u} [Monoid M] [TopologicalSpace M]
@@ -415,7 +415,7 @@ theorem ContinuousMul.of_nhds_one {M : Type u} [Monoid M] [TopologicalSpace M]
lean 3 declaration is
forall (M : Type.{u1}) [_inst_5 : CommMonoid.{u1} M] [_inst_6 : TopologicalSpace.{u1} M], (Filter.Tendsto.{u1, u1} (Prod.{u1, u1} M M) M (Function.uncurry.{u1, u1, u1} M M M (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))))) (Filter.prod.{u1, u1} M M (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))))))) -> (forall (x₀ : M), Eq.{succ u1} (Filter.{u1} M) (nhds.{u1} M _inst_6 x₀) (Filter.map.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))) x₀ x) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))))))) -> (ContinuousMul.{u1} M _inst_6 (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))
but is expected to have type
- forall (M : Type.{u1}) [_inst_5 : CommMonoid.{u1} M] [_inst_6 : TopologicalSpace.{u1} M], (Filter.Tendsto.{u1, u1} (Prod.{u1, u1} M M) M (Function.uncurry.{u1, u1, u1} M M M (fun (x._@.Mathlib.Topology.Algebra.Monoid._hyg.2836 : M) (x._@.Mathlib.Topology.Algebra.Monoid._hyg.2838 : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))) x._@.Mathlib.Topology.Algebra.Monoid._hyg.2836 x._@.Mathlib.Topology.Algebra.Monoid._hyg.2838)) (Filter.prod.{u1, u1} M M (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))))) -> (forall (x₀ : M), Eq.{succ u1} (Filter.{u1} M) (nhds.{u1} M _inst_6 x₀) (Filter.map.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))) x₀ x) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))))) -> (ContinuousMul.{u1} M _inst_6 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))
+ forall (M : Type.{u1}) [_inst_5 : CommMonoid.{u1} M] [_inst_6 : TopologicalSpace.{u1} M], (Filter.Tendsto.{u1, u1} (Prod.{u1, u1} M M) M (Function.uncurry.{u1, u1, u1} M M M (fun (x._@.Mathlib.Topology.Algebra.Monoid._hyg.2840 : M) (x._@.Mathlib.Topology.Algebra.Monoid._hyg.2842 : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))) x._@.Mathlib.Topology.Algebra.Monoid._hyg.2840 x._@.Mathlib.Topology.Algebra.Monoid._hyg.2842)) (Filter.prod.{u1, u1} M M (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))))) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))))) -> (forall (x₀ : M), Eq.{succ u1} (Filter.{u1} M) (nhds.{u1} M _inst_6 x₀) (Filter.map.{u1, u1} M M (fun (x : M) => HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5)))) x₀ x) (nhds.{u1} M _inst_6 (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))))) -> (ContinuousMul.{u1} M _inst_6 (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_5))))
Case conversion may be inaccurate. Consider using '#align has_continuous_mul_of_comm_of_nhds_one continuousMul_of_comm_of_nhds_oneₓ'. -/
@[to_additive]
theorem continuousMul_of_comm_of_nhds_one (M : Type u) [CommMonoid M] [TopologicalSpace M]
mathlib commit https://github.com/leanprover-community/mathlib/commit/290a7ba01fbcab1b64757bdaa270d28f4dcede35
@@ -1315,31 +1315,47 @@ namespace ContinuousMap
variable [Mul X] [ContinuousMul X]
+#print ContinuousMap.mulRight /-
/-- The continuous map `λ y, y * x` -/
@[to_additive "The continuous map `λ y, y + x"]
protected def mulRight (x : X) : C(X, X) :=
mk _ (continuous_mul_right x)
#align continuous_map.mul_right ContinuousMap.mulRight
#align continuous_map.add_right ContinuousMap.addRight
+-/
+/- warning: continuous_map.coe_mul_right -> ContinuousMap.coe_mulRight is a dubious translation:
+lean 3 declaration is
+ forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : Mul.{u1} X] [_inst_3 : ContinuousMul.{u1} X _inst_1 _inst_2] (x : X), Eq.{succ u1} (X -> X) (coeFn.{succ u1, succ u1} (ContinuousMap.{u1, u1} X X _inst_1 _inst_1) (fun (_x : ContinuousMap.{u1, u1} X X _inst_1 _inst_1) => X -> X) (ContinuousMap.hasCoeToFun.{u1, u1} X X _inst_1 _inst_1) (ContinuousMap.mulRight.{u1} X _inst_1 _inst_2 _inst_3 x)) (fun (y : X) => HMul.hMul.{u1, u1, u1} X X X (instHMul.{u1} X _inst_2) y x)
+but is expected to have type
+ forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : Mul.{u1} X] [_inst_3 : ContinuousMul.{u1} X _inst_1 _inst_2] (x : X), Eq.{succ u1} (forall (ᾰ : X), (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : X) => X) ᾰ) (FunLike.coe.{succ u1, succ u1, succ u1} (ContinuousMap.{u1, u1} X X _inst_1 _inst_1) X (fun (_x : X) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : X) => X) _x) (ContinuousMapClass.toFunLike.{u1, u1, u1} (ContinuousMap.{u1, u1} X X _inst_1 _inst_1) X X _inst_1 _inst_1 (ContinuousMap.instContinuousMapClassContinuousMap.{u1, u1} X X _inst_1 _inst_1)) (ContinuousMap.mulRight.{u1} X _inst_1 _inst_2 _inst_3 x)) (fun (y : X) => HMul.hMul.{u1, u1, u1} X X X (instHMul.{u1} X _inst_2) y x)
+Case conversion may be inaccurate. Consider using '#align continuous_map.coe_mul_right ContinuousMap.coe_mulRightₓ'. -/
@[to_additive, simp]
theorem coe_mulRight (x : X) : ⇑(ContinuousMap.mulRight x) = fun y => y * x :=
rfl
#align continuous_map.coe_mul_right ContinuousMap.coe_mulRight
-#align continuous_map.coe_add_right ContinuousMap.coe_add_right
+#align continuous_map.coe_add_right ContinuousMap.coe_addRight
+#print ContinuousMap.mulLeft /-
/-- The continuous map `λ y, x * y` -/
@[to_additive "The continuous map `λ y, x + y"]
protected def mulLeft (x : X) : C(X, X) :=
mk _ (continuous_mul_left x)
#align continuous_map.mul_left ContinuousMap.mulLeft
#align continuous_map.add_left ContinuousMap.addLeft
+-/
+/- warning: continuous_map.coe_mul_left -> ContinuousMap.coe_mulLeft is a dubious translation:
+lean 3 declaration is
+ forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : Mul.{u1} X] [_inst_3 : ContinuousMul.{u1} X _inst_1 _inst_2] (x : X), Eq.{succ u1} (X -> X) (coeFn.{succ u1, succ u1} (ContinuousMap.{u1, u1} X X _inst_1 _inst_1) (fun (_x : ContinuousMap.{u1, u1} X X _inst_1 _inst_1) => X -> X) (ContinuousMap.hasCoeToFun.{u1, u1} X X _inst_1 _inst_1) (ContinuousMap.mulLeft.{u1} X _inst_1 _inst_2 _inst_3 x)) (fun (y : X) => HMul.hMul.{u1, u1, u1} X X X (instHMul.{u1} X _inst_2) x y)
+but is expected to have type
+ forall {X : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : Mul.{u1} X] [_inst_3 : ContinuousMul.{u1} X _inst_1 _inst_2] (x : X), Eq.{succ u1} (forall (ᾰ : X), (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : X) => X) ᾰ) (FunLike.coe.{succ u1, succ u1, succ u1} (ContinuousMap.{u1, u1} X X _inst_1 _inst_1) X (fun (_x : X) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : X) => X) _x) (ContinuousMapClass.toFunLike.{u1, u1, u1} (ContinuousMap.{u1, u1} X X _inst_1 _inst_1) X X _inst_1 _inst_1 (ContinuousMap.instContinuousMapClassContinuousMap.{u1, u1} X X _inst_1 _inst_1)) (ContinuousMap.mulLeft.{u1} X _inst_1 _inst_2 _inst_3 x)) (fun (y : X) => HMul.hMul.{u1, u1, u1} X X X (instHMul.{u1} X _inst_2) x y)
+Case conversion may be inaccurate. Consider using '#align continuous_map.coe_mul_left ContinuousMap.coe_mulLeftₓ'. -/
@[to_additive, simp]
theorem coe_mulLeft (x : X) : ⇑(ContinuousMap.mulLeft x) = fun y => x * y :=
rfl
#align continuous_map.coe_mul_left ContinuousMap.coe_mulLeft
-#align continuous_map.coe_add_left ContinuousMap.coe_add_left
+#align continuous_map.coe_add_left ContinuousMap.coe_addLeft
end ContinuousMap
mathlib commit https://github.com/leanprover-community/mathlib/commit/3180fab693e2cee3bff62675571264cb8778b212
@@ -471,7 +471,7 @@ variable {M₁ M₂} [MulOneClass M₁] [MulOneClass M₂] [ContinuousMul M₂]
lean 3 declaration is
forall {M₁ : Type.{u1}} {M₂ : Type.{u2}} [_inst_2 : TopologicalSpace.{u2} M₂] [_inst_3 : T2Space.{u2} M₂ _inst_2] [_inst_4 : MulOneClass.{u1} M₁] [_inst_5 : MulOneClass.{u2} M₂] [_inst_6 : ContinuousMul.{u2} M₂ _inst_2 (MulOneClass.toHasMul.{u2} M₂ _inst_5)] {F : Type.{u3}} [_inst_7 : MonoidHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5] (f : M₁ -> M₂), (Membership.Mem.{max u1 u2, max u1 u2} (M₁ -> M₂) (Set.{max u1 u2} (M₁ -> M₂)) (Set.hasMem.{max u1 u2} (M₁ -> M₂)) f (closure.{max u1 u2} (M₁ -> M₂) (Pi.topologicalSpace.{u1, u2} M₁ (fun (x : M₁) => M₂) (fun (a : M₁) => _inst_2)) (Set.range.{max u1 u2, succ u3} (M₁ -> M₂) F (fun (f : F) (x : M₁) => coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M₁ -> M₂) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M₁ (fun (_x : M₁) => M₂) (MulHomClass.toFunLike.{u3, u1, u2} F M₁ M₂ (MulOneClass.toHasMul.{u1} M₁ _inst_4) (MulOneClass.toHasMul.{u2} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5 _inst_7))) f x)))) -> (MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5)
but is expected to have type
- forall {M₁ : Type.{u1}} {M₂ : Type.{u2}} [_inst_2 : TopologicalSpace.{u2} M₂] [_inst_3 : T2Space.{u2} M₂ _inst_2] [_inst_4 : MulOneClass.{u1} M₁] [_inst_5 : MulOneClass.{u2} M₂] [_inst_6 : ContinuousMul.{u2} M₂ _inst_2 (MulOneClass.toMul.{u2} M₂ _inst_5)] {F : Type.{u3}} [_inst_7 : MonoidHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5] (f : M₁ -> M₂), (Membership.mem.{max u1 u2, max u1 u2} (M₁ -> M₂) (Set.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) x)) (Set.instMembershipSet.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) x)) f (closure.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) x) (Pi.topologicalSpace.{u1, u2} M₁ (fun (x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) x) (fun (a : M₁) => _inst_2)) (Set.range.{max u1 u2, succ u3} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) x) F (fun (f : F) (x : M₁) => FunLike.coe.{succ u3, succ u1, succ u2} F M₁ (fun (_x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) _x) (MulHomClass.toFunLike.{u3, u1, u2} F M₁ M₂ (MulOneClass.toMul.{u1} M₁ _inst_4) (MulOneClass.toMul.{u2} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5 _inst_7)) f x)))) -> (MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5)
+ forall {M₁ : Type.{u1}} {M₂ : Type.{u2}} [_inst_2 : TopologicalSpace.{u2} M₂] [_inst_3 : T2Space.{u2} M₂ _inst_2] [_inst_4 : MulOneClass.{u1} M₁] [_inst_5 : MulOneClass.{u2} M₂] [_inst_6 : ContinuousMul.{u2} M₂ _inst_2 (MulOneClass.toMul.{u2} M₂ _inst_5)] {F : Type.{u3}} [_inst_7 : MonoidHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5] (f : M₁ -> M₂), (Membership.mem.{max u1 u2, max u1 u2} (M₁ -> M₂) (Set.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) x)) (Set.instMembershipSet.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) x)) f (closure.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) x) (Pi.topologicalSpace.{u1, u2} M₁ (fun (x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) x) (fun (a : M₁) => _inst_2)) (Set.range.{max u1 u2, succ u3} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) x) F (fun (f : F) (x : M₁) => FunLike.coe.{succ u3, succ u1, succ u2} F M₁ (fun (_x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) _x) (MulHomClass.toFunLike.{u3, u1, u2} F M₁ M₂ (MulOneClass.toMul.{u1} M₁ _inst_4) (MulOneClass.toMul.{u2} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5 _inst_7)) f x)))) -> (MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5)
Case conversion may be inaccurate. Consider using '#align monoid_hom_of_mem_closure_range_coe monoidHomOfMemClosureRangeCoeₓ'. -/
/-- Construct a bundled monoid homomorphism `M₁ →* M₂` from a function `f` and a proof that it
belongs to the closure of the range of the coercion from `M₁ →* M₂` (or another type of bundled
@@ -492,7 +492,7 @@ def monoidHomOfMemClosureRangeCoe (f : M₁ → M₂)
lean 3 declaration is
forall {α : Type.{u1}} {M₁ : Type.{u2}} {M₂ : Type.{u3}} [_inst_2 : TopologicalSpace.{u3} M₂] [_inst_3 : T2Space.{u3} M₂ _inst_2] [_inst_4 : MulOneClass.{u2} M₁] [_inst_5 : MulOneClass.{u3} M₂] [_inst_6 : ContinuousMul.{u3} M₂ _inst_2 (MulOneClass.toHasMul.{u3} M₂ _inst_5)] {F : Type.{u4}} [_inst_7 : MonoidHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5] {l : Filter.{u1} α} (f : M₁ -> M₂) (g : α -> F) [_inst_8 : Filter.NeBot.{u1} α l], (Filter.Tendsto.{u1, max u2 u3} α (M₁ -> M₂) (fun (a : α) (x : M₁) => coeFn.{succ u4, max (succ u2) (succ u3)} F (fun (_x : F) => M₁ -> M₂) (FunLike.hasCoeToFun.{succ u4, succ u2, succ u3} F M₁ (fun (_x : M₁) => M₂) (MulHomClass.toFunLike.{u4, u2, u3} F M₁ M₂ (MulOneClass.toHasMul.{u2} M₁ _inst_4) (MulOneClass.toHasMul.{u3} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5 _inst_7))) (g a) x) l (nhds.{max u2 u3} (M₁ -> M₂) (Pi.topologicalSpace.{u2, u3} M₁ (fun (x : M₁) => M₂) (fun (a : M₁) => _inst_2)) f)) -> (MonoidHom.{u2, u3} M₁ M₂ _inst_4 _inst_5)
but is expected to have type
- forall {α : Type.{u1}} {M₁ : Type.{u2}} {M₂ : Type.{u3}} [_inst_2 : TopologicalSpace.{u3} M₂] [_inst_3 : T2Space.{u3} M₂ _inst_2] [_inst_4 : MulOneClass.{u2} M₁] [_inst_5 : MulOneClass.{u3} M₂] [_inst_6 : ContinuousMul.{u3} M₂ _inst_2 (MulOneClass.toMul.{u3} M₂ _inst_5)] {F : Type.{u4}} [_inst_7 : MonoidHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5] {l : Filter.{u1} α} (f : M₁ -> M₂) (g : α -> F) [_inst_8 : Filter.NeBot.{u1} α l], (Filter.Tendsto.{u1, max u2 u3} α (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) x) (fun (a : α) (x : M₁) => FunLike.coe.{succ u4, succ u2, succ u3} F M₁ (fun (_x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) _x) (MulHomClass.toFunLike.{u4, u2, u3} F M₁ M₂ (MulOneClass.toMul.{u2} M₁ _inst_4) (MulOneClass.toMul.{u3} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5 _inst_7)) (g a) x) l (nhds.{max u2 u3} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) x) (Pi.topologicalSpace.{u2, u3} M₁ (fun (x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) x) (fun (a : M₁) => _inst_2)) f)) -> (MonoidHom.{u2, u3} M₁ M₂ _inst_4 _inst_5)
+ forall {α : Type.{u1}} {M₁ : Type.{u2}} {M₂ : Type.{u3}} [_inst_2 : TopologicalSpace.{u3} M₂] [_inst_3 : T2Space.{u3} M₂ _inst_2] [_inst_4 : MulOneClass.{u2} M₁] [_inst_5 : MulOneClass.{u3} M₂] [_inst_6 : ContinuousMul.{u3} M₂ _inst_2 (MulOneClass.toMul.{u3} M₂ _inst_5)] {F : Type.{u4}} [_inst_7 : MonoidHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5] {l : Filter.{u1} α} (f : M₁ -> M₂) (g : α -> F) [_inst_8 : Filter.NeBot.{u1} α l], (Filter.Tendsto.{u1, max u2 u3} α (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) x) (fun (a : α) (x : M₁) => FunLike.coe.{succ u4, succ u2, succ u3} F M₁ (fun (_x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) _x) (MulHomClass.toFunLike.{u4, u2, u3} F M₁ M₂ (MulOneClass.toMul.{u2} M₁ _inst_4) (MulOneClass.toMul.{u3} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5 _inst_7)) (g a) x) l (nhds.{max u2 u3} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) x) (Pi.topologicalSpace.{u2, u3} M₁ (fun (x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) x) (fun (a : M₁) => _inst_2)) f)) -> (MonoidHom.{u2, u3} M₁ M₂ _inst_4 _inst_5)
Case conversion may be inaccurate. Consider using '#align monoid_hom_of_tendsto monoidHomOfTendstoₓ'. -/
/-- Construct a bundled monoid homomorphism from a pointwise limit of monoid homomorphisms. -/
@[to_additive
@@ -511,7 +511,7 @@ variable (M₁ M₂)
lean 3 declaration is
forall (M₁ : Type.{u1}) (M₂ : Type.{u2}) [_inst_2 : TopologicalSpace.{u2} M₂] [_inst_3 : T2Space.{u2} M₂ _inst_2] [_inst_4 : MulOneClass.{u1} M₁] [_inst_5 : MulOneClass.{u2} M₂] [_inst_6 : ContinuousMul.{u2} M₂ _inst_2 (MulOneClass.toHasMul.{u2} M₂ _inst_5)], IsClosed.{max u1 u2} (M₁ -> M₂) (Pi.topologicalSpace.{u1, u2} M₁ (fun (ᾰ : M₁) => M₂) (fun (a : M₁) => _inst_2)) (Set.range.{max u1 u2, max (succ u2) (succ u1)} (M₁ -> M₂) (MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5) (fun (ᾰ : MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5) => M₁ -> M₂) (MonoidHom.hasCoeToFun.{u1, u2} M₁ M₂ _inst_4 _inst_5)))
but is expected to have type
- forall (M₁ : Type.{u2}) (M₂ : Type.{u1}) [_inst_2 : TopologicalSpace.{u1} M₂] [_inst_3 : T2Space.{u1} M₂ _inst_2] [_inst_4 : MulOneClass.{u2} M₁] [_inst_5 : MulOneClass.{u1} M₂] [_inst_6 : ContinuousMul.{u1} M₂ _inst_2 (MulOneClass.toMul.{u1} M₂ _inst_5)], IsClosed.{max u2 u1} (forall (ᾰ : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) ᾰ) (Pi.topologicalSpace.{u2, u1} M₁ (fun (ᾰ : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) ᾰ) (fun (a : M₁) => _inst_2)) (Set.range.{max u2 u1, max (succ u2) (succ u1)} (forall (ᾰ : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) ᾰ) (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ (fun (ᾰ : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) ᾰ) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ M₂ (MulOneClass.toMul.{u2} M₁ _inst_4) (MulOneClass.toMul.{u1} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ M₂ _inst_4 _inst_5 (MonoidHom.monoidHomClass.{u2, u1} M₁ M₂ _inst_4 _inst_5)))))
+ forall (M₁ : Type.{u2}) (M₂ : Type.{u1}) [_inst_2 : TopologicalSpace.{u1} M₂] [_inst_3 : T2Space.{u1} M₂ _inst_2] [_inst_4 : MulOneClass.{u2} M₁] [_inst_5 : MulOneClass.{u1} M₂] [_inst_6 : ContinuousMul.{u1} M₂ _inst_2 (MulOneClass.toMul.{u1} M₂ _inst_5)], IsClosed.{max u2 u1} (forall (ᾰ : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) ᾰ) (Pi.topologicalSpace.{u2, u1} M₁ (fun (ᾰ : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) ᾰ) (fun (a : M₁) => _inst_2)) (Set.range.{max u2 u1, max (succ u2) (succ u1)} (forall (ᾰ : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) ᾰ) (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ (fun (ᾰ : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M₁) => M₂) ᾰ) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ M₂ (MulOneClass.toMul.{u2} M₁ _inst_4) (MulOneClass.toMul.{u1} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ M₂ _inst_4 _inst_5 (MonoidHom.monoidHomClass.{u2, u1} M₁ M₂ _inst_4 _inst_5)))))
Case conversion may be inaccurate. Consider using '#align monoid_hom.is_closed_range_coe MonoidHom.isClosed_range_coeₓ'. -/
@[to_additive]
theorem MonoidHom.isClosed_range_coe : IsClosed (range (coeFn : (M₁ →* M₂) → M₁ → M₂)) :=
@@ -525,7 +525,7 @@ end PointwiseLimits
lean 3 declaration is
forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_2 : Mul.{u1} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u3, u1, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u1} M] [_inst_6 : TopologicalSpace.{u2} N] [_inst_7 : ContinuousMul.{u2} N _inst_6 _inst_3] (f : F), (Inducing.{u1, u2} M N _inst_5 _inst_6 (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N _inst_2 _inst_3 _inst_4)) f)) -> (ContinuousMul.{u1} M _inst_5 _inst_2)
but is expected to have type
- forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} [_inst_2 : Mul.{u3} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u1, u3, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u3} M] [_inst_6 : TopologicalSpace.{u2} N] [_inst_7 : ContinuousMul.{u2} N _inst_6 _inst_3] (f : F), (Inducing.{u3, u2} M N _inst_5 _inst_6 (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N _inst_2 _inst_3 _inst_4) f)) -> (ContinuousMul.{u3} M _inst_5 _inst_2)
+ forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} [_inst_2 : Mul.{u3} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u1, u3, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u3} M] [_inst_6 : TopologicalSpace.{u2} N] [_inst_7 : ContinuousMul.{u2} N _inst_6 _inst_3] (f : F), (Inducing.{u3, u2} M N _inst_5 _inst_6 (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N _inst_2 _inst_3 _inst_4) f)) -> (ContinuousMul.{u3} M _inst_5 _inst_2)
Case conversion may be inaccurate. Consider using '#align inducing.has_continuous_mul Inducing.continuousMulₓ'. -/
@[to_additive]
theorem Inducing.continuousMul {M N F : Type _} [Mul M] [Mul N] [MulHomClass F M N]
@@ -540,7 +540,7 @@ theorem Inducing.continuousMul {M N F : Type _} [Mul M] [Mul N] [MulHomClass F M
lean 3 declaration is
forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_2 : Mul.{u1} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u3, u1, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u2} N] [_inst_6 : ContinuousMul.{u2} N _inst_5 _inst_3] (f : F), ContinuousMul.{u1} M (TopologicalSpace.induced.{u1, u2} M N (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N _inst_2 _inst_3 _inst_4)) f) _inst_5) _inst_2
but is expected to have type
- forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} [_inst_2 : Mul.{u3} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u1, u3, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u2} N] [_inst_6 : ContinuousMul.{u2} N _inst_5 _inst_3] (f : F), ContinuousMul.{u3} M (TopologicalSpace.induced.{u3, u2} M N (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N _inst_2 _inst_3 _inst_4) f) _inst_5) _inst_2
+ forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} [_inst_2 : Mul.{u3} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u1, u3, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u2} N] [_inst_6 : ContinuousMul.{u2} N _inst_5 _inst_3] (f : F), ContinuousMul.{u3} M (TopologicalSpace.induced.{u3, u2} M N (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N _inst_2 _inst_3 _inst_4) f) _inst_5) _inst_2
Case conversion may be inaccurate. Consider using '#align has_continuous_mul_induced continuousMul_inducedₓ'. -/
@[to_additive]
theorem continuousMul_induced {M N F : Type _} [Mul M] [Mul N] [MulHomClass F M N]
@@ -1053,7 +1053,7 @@ end Units
lean 3 declaration is
forall {M : Type.{u1}} {N : Type.{u2}} [_inst_2 : Monoid.{u1} M] [_inst_3 : Monoid.{u2} N] [_inst_4 : TopologicalSpace.{u1} M] [_inst_5 : TopologicalSpace.{u2} N] (f : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_2) (Monoid.toMulOneClass.{u2} N _inst_3)), (Continuous.{u1, u2} M N _inst_4 _inst_5 (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_2) (Monoid.toMulOneClass.{u2} N _inst_3)) (fun (_x : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_2) (Monoid.toMulOneClass.{u2} N _inst_3)) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_2) (Monoid.toMulOneClass.{u2} N _inst_3)) f)) -> (Continuous.{u1, u2} (Units.{u1} M _inst_2) (Units.{u2} N _inst_3) (Units.topologicalSpace.{u1} M _inst_4 _inst_2) (Units.topologicalSpace.{u2} N _inst_5 _inst_3) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (Units.{u1} M _inst_2) (Units.{u2} N _inst_3) (Units.mulOneClass.{u1} M _inst_2) (Units.mulOneClass.{u2} N _inst_3)) (fun (_x : MonoidHom.{u1, u2} (Units.{u1} M _inst_2) (Units.{u2} N _inst_3) (Units.mulOneClass.{u1} M _inst_2) (Units.mulOneClass.{u2} N _inst_3)) => (Units.{u1} M _inst_2) -> (Units.{u2} N _inst_3)) (MonoidHom.hasCoeToFun.{u1, u2} (Units.{u1} M _inst_2) (Units.{u2} N _inst_3) (Units.mulOneClass.{u1} M _inst_2) (Units.mulOneClass.{u2} N _inst_3)) (Units.map.{u1, u2} M N _inst_2 _inst_3 f)))
but is expected to have type
- forall {M : Type.{u2}} {N : Type.{u1}} [_inst_2 : Monoid.{u2} M] [_inst_3 : Monoid.{u1} N] [_inst_4 : TopologicalSpace.{u2} M] [_inst_5 : TopologicalSpace.{u1} N] (f : MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)), (Continuous.{u2, u1} M N _inst_4 _inst_5 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_2)) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)))) f)) -> (Continuous.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instTopologicalSpaceUnits.{u2} M _inst_4 _inst_2) (Units.instTopologicalSpaceUnits.{u1} N _inst_5 _inst_3) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (fun (_x : Units.{u2} M _inst_2) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Units.{u2} M _inst_2) => Units.{u1} N _inst_3) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (MulOneClass.toMul.{u2} (Units.{u2} M _inst_2) (Units.instMulOneClassUnits.{u2} M _inst_2)) (MulOneClass.toMul.{u1} (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u1} N _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3) (MonoidHom.monoidHomClass.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)))) (Units.map.{u2, u1} M N _inst_2 _inst_3 f)))
+ forall {M : Type.{u2}} {N : Type.{u1}} [_inst_2 : Monoid.{u2} M] [_inst_3 : Monoid.{u1} N] [_inst_4 : TopologicalSpace.{u2} M] [_inst_5 : TopologicalSpace.{u1} N] (f : MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)), (Continuous.{u2, u1} M N _inst_4 _inst_5 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_2)) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)))) f)) -> (Continuous.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instTopologicalSpaceUnits.{u2} M _inst_4 _inst_2) (Units.instTopologicalSpaceUnits.{u1} N _inst_5 _inst_3) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (fun (_x : Units.{u2} M _inst_2) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Units.{u2} M _inst_2) => Units.{u1} N _inst_3) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (MulOneClass.toMul.{u2} (Units.{u2} M _inst_2) (Units.instMulOneClassUnits.{u2} M _inst_2)) (MulOneClass.toMul.{u1} (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u1} N _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3) (MonoidHom.monoidHomClass.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)))) (Units.map.{u2, u1} M N _inst_2 _inst_3 f)))
Case conversion may be inaccurate. Consider using '#align continuous.units_map Continuous.units_mapₓ'. -/
@[to_additive]
theorem Continuous.units_map [Monoid M] [Monoid N] [TopologicalSpace M] [TopologicalSpace N]
mathlib commit https://github.com/leanprover-community/mathlib/commit/38f16f960f5006c6c0c2bac7b0aba5273188f4e5
@@ -471,7 +471,7 @@ variable {M₁ M₂} [MulOneClass M₁] [MulOneClass M₂] [ContinuousMul M₂]
lean 3 declaration is
forall {M₁ : Type.{u1}} {M₂ : Type.{u2}} [_inst_2 : TopologicalSpace.{u2} M₂] [_inst_3 : T2Space.{u2} M₂ _inst_2] [_inst_4 : MulOneClass.{u1} M₁] [_inst_5 : MulOneClass.{u2} M₂] [_inst_6 : ContinuousMul.{u2} M₂ _inst_2 (MulOneClass.toHasMul.{u2} M₂ _inst_5)] {F : Type.{u3}} [_inst_7 : MonoidHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5] (f : M₁ -> M₂), (Membership.Mem.{max u1 u2, max u1 u2} (M₁ -> M₂) (Set.{max u1 u2} (M₁ -> M₂)) (Set.hasMem.{max u1 u2} (M₁ -> M₂)) f (closure.{max u1 u2} (M₁ -> M₂) (Pi.topologicalSpace.{u1, u2} M₁ (fun (x : M₁) => M₂) (fun (a : M₁) => _inst_2)) (Set.range.{max u1 u2, succ u3} (M₁ -> M₂) F (fun (f : F) (x : M₁) => coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M₁ -> M₂) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M₁ (fun (_x : M₁) => M₂) (MulHomClass.toFunLike.{u3, u1, u2} F M₁ M₂ (MulOneClass.toHasMul.{u1} M₁ _inst_4) (MulOneClass.toHasMul.{u2} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5 _inst_7))) f x)))) -> (MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5)
but is expected to have type
- forall {M₁ : Type.{u1}} {M₂ : Type.{u2}} [_inst_2 : TopologicalSpace.{u2} M₂] [_inst_3 : T2Space.{u2} M₂ _inst_2] [_inst_4 : MulOneClass.{u1} M₁] [_inst_5 : MulOneClass.{u2} M₂] [_inst_6 : ContinuousMul.{u2} M₂ _inst_2 (MulOneClass.toMul.{u2} M₂ _inst_5)] {F : Type.{u3}} [_inst_7 : MonoidHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5] (f : M₁ -> M₂), (Membership.mem.{max u1 u2, max u1 u2} (M₁ -> M₂) (Set.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M₁) => M₂) x)) (Set.instMembershipSet.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M₁) => M₂) x)) f (closure.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M₁) => M₂) x) (Pi.topologicalSpace.{u1, u2} M₁ (fun (x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M₁) => M₂) x) (fun (a : M₁) => _inst_2)) (Set.range.{max u1 u2, succ u3} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M₁) => M₂) x) F (fun (f : F) (x : M₁) => FunLike.coe.{succ u3, succ u1, succ u2} F M₁ (fun (_x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M₁) => M₂) _x) (MulHomClass.toFunLike.{u3, u1, u2} F M₁ M₂ (MulOneClass.toMul.{u1} M₁ _inst_4) (MulOneClass.toMul.{u2} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5 _inst_7)) f x)))) -> (MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5)
+ forall {M₁ : Type.{u1}} {M₂ : Type.{u2}} [_inst_2 : TopologicalSpace.{u2} M₂] [_inst_3 : T2Space.{u2} M₂ _inst_2] [_inst_4 : MulOneClass.{u1} M₁] [_inst_5 : MulOneClass.{u2} M₂] [_inst_6 : ContinuousMul.{u2} M₂ _inst_2 (MulOneClass.toMul.{u2} M₂ _inst_5)] {F : Type.{u3}} [_inst_7 : MonoidHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5] (f : M₁ -> M₂), (Membership.mem.{max u1 u2, max u1 u2} (M₁ -> M₂) (Set.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) x)) (Set.instMembershipSet.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) x)) f (closure.{max u1 u2} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) x) (Pi.topologicalSpace.{u1, u2} M₁ (fun (x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) x) (fun (a : M₁) => _inst_2)) (Set.range.{max u1 u2, succ u3} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) x) F (fun (f : F) (x : M₁) => FunLike.coe.{succ u3, succ u1, succ u2} F M₁ (fun (_x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) _x) (MulHomClass.toFunLike.{u3, u1, u2} F M₁ M₂ (MulOneClass.toMul.{u1} M₁ _inst_4) (MulOneClass.toMul.{u2} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M₁ M₂ _inst_4 _inst_5 _inst_7)) f x)))) -> (MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5)
Case conversion may be inaccurate. Consider using '#align monoid_hom_of_mem_closure_range_coe monoidHomOfMemClosureRangeCoeₓ'. -/
/-- Construct a bundled monoid homomorphism `M₁ →* M₂` from a function `f` and a proof that it
belongs to the closure of the range of the coercion from `M₁ →* M₂` (or another type of bundled
@@ -492,7 +492,7 @@ def monoidHomOfMemClosureRangeCoe (f : M₁ → M₂)
lean 3 declaration is
forall {α : Type.{u1}} {M₁ : Type.{u2}} {M₂ : Type.{u3}} [_inst_2 : TopologicalSpace.{u3} M₂] [_inst_3 : T2Space.{u3} M₂ _inst_2] [_inst_4 : MulOneClass.{u2} M₁] [_inst_5 : MulOneClass.{u3} M₂] [_inst_6 : ContinuousMul.{u3} M₂ _inst_2 (MulOneClass.toHasMul.{u3} M₂ _inst_5)] {F : Type.{u4}} [_inst_7 : MonoidHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5] {l : Filter.{u1} α} (f : M₁ -> M₂) (g : α -> F) [_inst_8 : Filter.NeBot.{u1} α l], (Filter.Tendsto.{u1, max u2 u3} α (M₁ -> M₂) (fun (a : α) (x : M₁) => coeFn.{succ u4, max (succ u2) (succ u3)} F (fun (_x : F) => M₁ -> M₂) (FunLike.hasCoeToFun.{succ u4, succ u2, succ u3} F M₁ (fun (_x : M₁) => M₂) (MulHomClass.toFunLike.{u4, u2, u3} F M₁ M₂ (MulOneClass.toHasMul.{u2} M₁ _inst_4) (MulOneClass.toHasMul.{u3} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5 _inst_7))) (g a) x) l (nhds.{max u2 u3} (M₁ -> M₂) (Pi.topologicalSpace.{u2, u3} M₁ (fun (x : M₁) => M₂) (fun (a : M₁) => _inst_2)) f)) -> (MonoidHom.{u2, u3} M₁ M₂ _inst_4 _inst_5)
but is expected to have type
- forall {α : Type.{u1}} {M₁ : Type.{u2}} {M₂ : Type.{u3}} [_inst_2 : TopologicalSpace.{u3} M₂] [_inst_3 : T2Space.{u3} M₂ _inst_2] [_inst_4 : MulOneClass.{u2} M₁] [_inst_5 : MulOneClass.{u3} M₂] [_inst_6 : ContinuousMul.{u3} M₂ _inst_2 (MulOneClass.toMul.{u3} M₂ _inst_5)] {F : Type.{u4}} [_inst_7 : MonoidHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5] {l : Filter.{u1} α} (f : M₁ -> M₂) (g : α -> F) [_inst_8 : Filter.NeBot.{u1} α l], (Filter.Tendsto.{u1, max u2 u3} α (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M₁) => M₂) x) (fun (a : α) (x : M₁) => FunLike.coe.{succ u4, succ u2, succ u3} F M₁ (fun (_x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M₁) => M₂) _x) (MulHomClass.toFunLike.{u4, u2, u3} F M₁ M₂ (MulOneClass.toMul.{u2} M₁ _inst_4) (MulOneClass.toMul.{u3} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5 _inst_7)) (g a) x) l (nhds.{max u2 u3} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M₁) => M₂) x) (Pi.topologicalSpace.{u2, u3} M₁ (fun (x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M₁) => M₂) x) (fun (a : M₁) => _inst_2)) f)) -> (MonoidHom.{u2, u3} M₁ M₂ _inst_4 _inst_5)
+ forall {α : Type.{u1}} {M₁ : Type.{u2}} {M₂ : Type.{u3}} [_inst_2 : TopologicalSpace.{u3} M₂] [_inst_3 : T2Space.{u3} M₂ _inst_2] [_inst_4 : MulOneClass.{u2} M₁] [_inst_5 : MulOneClass.{u3} M₂] [_inst_6 : ContinuousMul.{u3} M₂ _inst_2 (MulOneClass.toMul.{u3} M₂ _inst_5)] {F : Type.{u4}} [_inst_7 : MonoidHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5] {l : Filter.{u1} α} (f : M₁ -> M₂) (g : α -> F) [_inst_8 : Filter.NeBot.{u1} α l], (Filter.Tendsto.{u1, max u2 u3} α (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) x) (fun (a : α) (x : M₁) => FunLike.coe.{succ u4, succ u2, succ u3} F M₁ (fun (_x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) _x) (MulHomClass.toFunLike.{u4, u2, u3} F M₁ M₂ (MulOneClass.toMul.{u2} M₁ _inst_4) (MulOneClass.toMul.{u3} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{u4, u2, u3} F M₁ M₂ _inst_4 _inst_5 _inst_7)) (g a) x) l (nhds.{max u2 u3} (forall (x : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) x) (Pi.topologicalSpace.{u2, u3} M₁ (fun (x : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) x) (fun (a : M₁) => _inst_2)) f)) -> (MonoidHom.{u2, u3} M₁ M₂ _inst_4 _inst_5)
Case conversion may be inaccurate. Consider using '#align monoid_hom_of_tendsto monoidHomOfTendstoₓ'. -/
/-- Construct a bundled monoid homomorphism from a pointwise limit of monoid homomorphisms. -/
@[to_additive
@@ -511,7 +511,7 @@ variable (M₁ M₂)
lean 3 declaration is
forall (M₁ : Type.{u1}) (M₂ : Type.{u2}) [_inst_2 : TopologicalSpace.{u2} M₂] [_inst_3 : T2Space.{u2} M₂ _inst_2] [_inst_4 : MulOneClass.{u1} M₁] [_inst_5 : MulOneClass.{u2} M₂] [_inst_6 : ContinuousMul.{u2} M₂ _inst_2 (MulOneClass.toHasMul.{u2} M₂ _inst_5)], IsClosed.{max u1 u2} (M₁ -> M₂) (Pi.topologicalSpace.{u1, u2} M₁ (fun (ᾰ : M₁) => M₂) (fun (a : M₁) => _inst_2)) (Set.range.{max u1 u2, max (succ u2) (succ u1)} (M₁ -> M₂) (MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5) (fun (ᾰ : MonoidHom.{u1, u2} M₁ M₂ _inst_4 _inst_5) => M₁ -> M₂) (MonoidHom.hasCoeToFun.{u1, u2} M₁ M₂ _inst_4 _inst_5)))
but is expected to have type
- forall (M₁ : Type.{u2}) (M₂ : Type.{u1}) [_inst_2 : TopologicalSpace.{u1} M₂] [_inst_3 : T2Space.{u1} M₂ _inst_2] [_inst_4 : MulOneClass.{u2} M₁] [_inst_5 : MulOneClass.{u1} M₂] [_inst_6 : ContinuousMul.{u1} M₂ _inst_2 (MulOneClass.toMul.{u1} M₂ _inst_5)], IsClosed.{max u2 u1} (forall (ᾰ : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M₁) => M₂) ᾰ) (Pi.topologicalSpace.{u2, u1} M₁ (fun (ᾰ : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M₁) => M₂) ᾰ) (fun (a : M₁) => _inst_2)) (Set.range.{max u2 u1, max (succ u2) (succ u1)} (forall (ᾰ : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M₁) => M₂) ᾰ) (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ (fun (ᾰ : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M₁) => M₂) ᾰ) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ M₂ (MulOneClass.toMul.{u2} M₁ _inst_4) (MulOneClass.toMul.{u1} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ M₂ _inst_4 _inst_5 (MonoidHom.monoidHomClass.{u2, u1} M₁ M₂ _inst_4 _inst_5)))))
+ forall (M₁ : Type.{u2}) (M₂ : Type.{u1}) [_inst_2 : TopologicalSpace.{u1} M₂] [_inst_3 : T2Space.{u1} M₂ _inst_2] [_inst_4 : MulOneClass.{u2} M₁] [_inst_5 : MulOneClass.{u1} M₂] [_inst_6 : ContinuousMul.{u1} M₂ _inst_2 (MulOneClass.toMul.{u1} M₂ _inst_5)], IsClosed.{max u2 u1} (forall (ᾰ : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) ᾰ) (Pi.topologicalSpace.{u2, u1} M₁ (fun (ᾰ : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) ᾰ) (fun (a : M₁) => _inst_2)) (Set.range.{max u2 u1, max (succ u2) (succ u1)} (forall (ᾰ : M₁), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) ᾰ) (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ (fun (ᾰ : M₁) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M₁) => M₂) ᾰ) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ M₂ (MulOneClass.toMul.{u2} M₁ _inst_4) (MulOneClass.toMul.{u1} M₂ _inst_5) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M₁ M₂ _inst_4 _inst_5) M₁ M₂ _inst_4 _inst_5 (MonoidHom.monoidHomClass.{u2, u1} M₁ M₂ _inst_4 _inst_5)))))
Case conversion may be inaccurate. Consider using '#align monoid_hom.is_closed_range_coe MonoidHom.isClosed_range_coeₓ'. -/
@[to_additive]
theorem MonoidHom.isClosed_range_coe : IsClosed (range (coeFn : (M₁ →* M₂) → M₁ → M₂)) :=
@@ -525,7 +525,7 @@ end PointwiseLimits
lean 3 declaration is
forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_2 : Mul.{u1} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u3, u1, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u1} M] [_inst_6 : TopologicalSpace.{u2} N] [_inst_7 : ContinuousMul.{u2} N _inst_6 _inst_3] (f : F), (Inducing.{u1, u2} M N _inst_5 _inst_6 (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N _inst_2 _inst_3 _inst_4)) f)) -> (ContinuousMul.{u1} M _inst_5 _inst_2)
but is expected to have type
- forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} [_inst_2 : Mul.{u3} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u1, u3, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u3} M] [_inst_6 : TopologicalSpace.{u2} N] [_inst_7 : ContinuousMul.{u2} N _inst_6 _inst_3] (f : F), (Inducing.{u3, u2} M N _inst_5 _inst_6 (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N _inst_2 _inst_3 _inst_4) f)) -> (ContinuousMul.{u3} M _inst_5 _inst_2)
+ forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} [_inst_2 : Mul.{u3} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u1, u3, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u3} M] [_inst_6 : TopologicalSpace.{u2} N] [_inst_7 : ContinuousMul.{u2} N _inst_6 _inst_3] (f : F), (Inducing.{u3, u2} M N _inst_5 _inst_6 (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N _inst_2 _inst_3 _inst_4) f)) -> (ContinuousMul.{u3} M _inst_5 _inst_2)
Case conversion may be inaccurate. Consider using '#align inducing.has_continuous_mul Inducing.continuousMulₓ'. -/
@[to_additive]
theorem Inducing.continuousMul {M N F : Type _} [Mul M] [Mul N] [MulHomClass F M N]
@@ -540,7 +540,7 @@ theorem Inducing.continuousMul {M N F : Type _} [Mul M] [Mul N] [MulHomClass F M
lean 3 declaration is
forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_2 : Mul.{u1} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u3, u1, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u2} N] [_inst_6 : ContinuousMul.{u2} N _inst_5 _inst_3] (f : F), ContinuousMul.{u1} M (TopologicalSpace.induced.{u1, u2} M N (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N _inst_2 _inst_3 _inst_4)) f) _inst_5) _inst_2
but is expected to have type
- forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} [_inst_2 : Mul.{u3} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u1, u3, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u2} N] [_inst_6 : ContinuousMul.{u2} N _inst_5 _inst_3] (f : F), ContinuousMul.{u3} M (TopologicalSpace.induced.{u3, u2} M N (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N _inst_2 _inst_3 _inst_4) f) _inst_5) _inst_2
+ forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} [_inst_2 : Mul.{u3} M] [_inst_3 : Mul.{u2} N] [_inst_4 : MulHomClass.{u1, u3, u2} F M N _inst_2 _inst_3] [_inst_5 : TopologicalSpace.{u2} N] [_inst_6 : ContinuousMul.{u2} N _inst_5 _inst_3] (f : F), ContinuousMul.{u3} M (TopologicalSpace.induced.{u3, u2} M N (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N _inst_2 _inst_3 _inst_4) f) _inst_5) _inst_2
Case conversion may be inaccurate. Consider using '#align has_continuous_mul_induced continuousMul_inducedₓ'. -/
@[to_additive]
theorem continuousMul_induced {M N F : Type _} [Mul M] [Mul N] [MulHomClass F M N]
@@ -1053,7 +1053,7 @@ end Units
lean 3 declaration is
forall {M : Type.{u1}} {N : Type.{u2}} [_inst_2 : Monoid.{u1} M] [_inst_3 : Monoid.{u2} N] [_inst_4 : TopologicalSpace.{u1} M] [_inst_5 : TopologicalSpace.{u2} N] (f : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_2) (Monoid.toMulOneClass.{u2} N _inst_3)), (Continuous.{u1, u2} M N _inst_4 _inst_5 (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_2) (Monoid.toMulOneClass.{u2} N _inst_3)) (fun (_x : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_2) (Monoid.toMulOneClass.{u2} N _inst_3)) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_2) (Monoid.toMulOneClass.{u2} N _inst_3)) f)) -> (Continuous.{u1, u2} (Units.{u1} M _inst_2) (Units.{u2} N _inst_3) (Units.topologicalSpace.{u1} M _inst_4 _inst_2) (Units.topologicalSpace.{u2} N _inst_5 _inst_3) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (Units.{u1} M _inst_2) (Units.{u2} N _inst_3) (Units.mulOneClass.{u1} M _inst_2) (Units.mulOneClass.{u2} N _inst_3)) (fun (_x : MonoidHom.{u1, u2} (Units.{u1} M _inst_2) (Units.{u2} N _inst_3) (Units.mulOneClass.{u1} M _inst_2) (Units.mulOneClass.{u2} N _inst_3)) => (Units.{u1} M _inst_2) -> (Units.{u2} N _inst_3)) (MonoidHom.hasCoeToFun.{u1, u2} (Units.{u1} M _inst_2) (Units.{u2} N _inst_3) (Units.mulOneClass.{u1} M _inst_2) (Units.mulOneClass.{u2} N _inst_3)) (Units.map.{u1, u2} M N _inst_2 _inst_3 f)))
but is expected to have type
- forall {M : Type.{u2}} {N : Type.{u1}} [_inst_2 : Monoid.{u2} M] [_inst_3 : Monoid.{u1} N] [_inst_4 : TopologicalSpace.{u2} M] [_inst_5 : TopologicalSpace.{u1} N] (f : MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)), (Continuous.{u2, u1} M N _inst_4 _inst_5 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_2)) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)))) f)) -> (Continuous.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instTopologicalSpaceUnits.{u2} M _inst_4 _inst_2) (Units.instTopologicalSpaceUnits.{u1} N _inst_5 _inst_3) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (fun (_x : Units.{u2} M _inst_2) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : Units.{u2} M _inst_2) => Units.{u1} N _inst_3) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (MulOneClass.toMul.{u2} (Units.{u2} M _inst_2) (Units.instMulOneClassUnits.{u2} M _inst_2)) (MulOneClass.toMul.{u1} (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u1} N _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3) (MonoidHom.monoidHomClass.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)))) (Units.map.{u2, u1} M N _inst_2 _inst_3 f)))
+ forall {M : Type.{u2}} {N : Type.{u1}} [_inst_2 : Monoid.{u2} M] [_inst_3 : Monoid.{u1} N] [_inst_4 : TopologicalSpace.{u2} M] [_inst_5 : TopologicalSpace.{u1} N] (f : MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)), (Continuous.{u2, u1} M N _inst_4 _inst_5 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_2)) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)) M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_2) (Monoid.toMulOneClass.{u1} N _inst_3)))) f)) -> (Continuous.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instTopologicalSpaceUnits.{u2} M _inst_4 _inst_2) (Units.instTopologicalSpaceUnits.{u1} N _inst_5 _inst_3) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (fun (_x : Units.{u2} M _inst_2) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Units.{u2} M _inst_2) => Units.{u1} N _inst_3) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (MulOneClass.toMul.{u2} (Units.{u2} M _inst_2) (Units.instMulOneClassUnits.{u2} M _inst_2)) (MulOneClass.toMul.{u1} (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u1} N _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)) (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3) (MonoidHom.monoidHomClass.{u2, u1} (Units.{u2} M _inst_2) (Units.{u1} N _inst_3) (Units.instMulOneClassUnits.{u2} M _inst_2) (Units.instMulOneClassUnits.{u1} N _inst_3)))) (Units.map.{u2, u1} M N _inst_2 _inst_3 f)))
Case conversion may be inaccurate. Consider using '#align continuous.units_map Continuous.units_mapₓ'. -/
@[to_additive]
theorem Continuous.units_map [Monoid M] [Monoid N] [TopologicalSpace M] [TopologicalSpace N]
mathlib commit https://github.com/leanprover-community/mathlib/commit/4c586d291f189eecb9d00581aeb3dd998ac34442
@@ -405,7 +405,7 @@ theorem ContinuousMul.of_nhds_one {M : Type u} [Monoid M] [TopologicalSpace M]
rw [uncurry, hleft x₀, hright y₀, prod_map_map_eq, Filter.map_map]
_ = map ((fun x => x₀ * x) ∘ fun x => x * y₀) (map (uncurry (· * ·)) (𝓝 1 ×ᶠ 𝓝 1)) := by
rw [key, ← Filter.map_map]
- _ ≤ map ((fun x : M => x₀ * x) ∘ fun x => x * y₀) (𝓝 1) := map_mono hmul
+ _ ≤ map ((fun x : M => x₀ * x) ∘ fun x => x * y₀) (𝓝 1) := (map_mono hmul)
_ = 𝓝 (x₀ * y₀) := by rw [← Filter.map_map, ← hright, hleft y₀, Filter.map_map, key₂, ← hleft]
⟩
#align has_continuous_mul.of_nhds_one ContinuousMul.of_nhds_one
mathlib commit https://github.com/leanprover-community/mathlib/commit/9da1b3534b65d9661eb8f42443598a92bbb49211
@@ -1295,9 +1295,9 @@ theorem continuousMul_infᵢ {ts : ι' → TopologicalSpace M} (h' : ∀ i, @Con
/- warning: has_continuous_mul_inf -> continuousMul_inf is a dubious translation:
lean 3 declaration is
- forall {M : Type.{u1}} [_inst_2 : Mul.{u1} M] {t₁ : TopologicalSpace.{u1} M} {t₂ : TopologicalSpace.{u1} M}, (ContinuousMul.{u1} M t₁ _inst_2) -> (ContinuousMul.{u1} M t₂ _inst_2) -> (ContinuousMul.{u1} M (HasInf.inf.{u1} (TopologicalSpace.{u1} M) (SemilatticeInf.toHasInf.{u1} (TopologicalSpace.{u1} M) (Lattice.toSemilatticeInf.{u1} (TopologicalSpace.{u1} M) (ConditionallyCompleteLattice.toLattice.{u1} (TopologicalSpace.{u1} M) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.{u1} M) (TopologicalSpace.completeLattice.{u1} M))))) t₁ t₂) _inst_2)
+ forall {M : Type.{u1}} [_inst_2 : Mul.{u1} M] {t₁ : TopologicalSpace.{u1} M} {t₂ : TopologicalSpace.{u1} M}, (ContinuousMul.{u1} M t₁ _inst_2) -> (ContinuousMul.{u1} M t₂ _inst_2) -> (ContinuousMul.{u1} M (Inf.inf.{u1} (TopologicalSpace.{u1} M) (SemilatticeInf.toHasInf.{u1} (TopologicalSpace.{u1} M) (Lattice.toSemilatticeInf.{u1} (TopologicalSpace.{u1} M) (ConditionallyCompleteLattice.toLattice.{u1} (TopologicalSpace.{u1} M) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.{u1} M) (TopologicalSpace.completeLattice.{u1} M))))) t₁ t₂) _inst_2)
but is expected to have type
- forall {M : Type.{u1}} [_inst_2 : Mul.{u1} M] {t₁ : TopologicalSpace.{u1} M} {t₂ : TopologicalSpace.{u1} M}, (ContinuousMul.{u1} M t₁ _inst_2) -> (ContinuousMul.{u1} M t₂ _inst_2) -> (ContinuousMul.{u1} M (HasInf.inf.{u1} (TopologicalSpace.{u1} M) (Lattice.toHasInf.{u1} (TopologicalSpace.{u1} M) (ConditionallyCompleteLattice.toLattice.{u1} (TopologicalSpace.{u1} M) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.{u1} M) (TopologicalSpace.instCompleteLatticeTopologicalSpace.{u1} M)))) t₁ t₂) _inst_2)
+ forall {M : Type.{u1}} [_inst_2 : Mul.{u1} M] {t₁ : TopologicalSpace.{u1} M} {t₂ : TopologicalSpace.{u1} M}, (ContinuousMul.{u1} M t₁ _inst_2) -> (ContinuousMul.{u1} M t₂ _inst_2) -> (ContinuousMul.{u1} M (Inf.inf.{u1} (TopologicalSpace.{u1} M) (Lattice.toInf.{u1} (TopologicalSpace.{u1} M) (ConditionallyCompleteLattice.toLattice.{u1} (TopologicalSpace.{u1} M) (CompleteLattice.toConditionallyCompleteLattice.{u1} (TopologicalSpace.{u1} M) (TopologicalSpace.instCompleteLatticeTopologicalSpace.{u1} M)))) t₁ t₂) _inst_2)
Case conversion may be inaccurate. Consider using '#align has_continuous_mul_inf continuousMul_infₓ'. -/
@[to_additive]
theorem continuousMul_inf {t₁ t₂ : TopologicalSpace M} (h₁ : @ContinuousMul M t₁ _)
mathlib commit https://github.com/leanprover-community/mathlib/commit/22131150f88a2d125713ffa0f4693e3355b1eb49
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Mario Carneiro
! This file was ported from Lean 3 source module topology.algebra.monoid
-! leanprover-community/mathlib commit 1ead22342e1a078bd44744ace999f85756555d35
+! leanprover-community/mathlib commit 6efec6bb9fcaed3cf1baaddb2eaadd8a2a06679c
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -12,6 +12,7 @@ import Mathbin.Algebra.BigOperators.Finprod
import Mathbin.Order.Filter.Pointwise
import Mathbin.Topology.Algebra.MulAction
import Mathbin.Algebra.BigOperators.Pi
+import Mathbin.Topology.ContinuousFunction.Basic
/-!
# Theory of topological monoids
@@ -1310,3 +1311,35 @@ theorem continuousMul_inf {t₁ t₂ : TopologicalSpace M} (h₁ : @ContinuousMu
end LatticeOps
+namespace ContinuousMap
+
+variable [Mul X] [ContinuousMul X]
+
+/-- The continuous map `λ y, y * x` -/
+@[to_additive "The continuous map `λ y, y + x"]
+protected def mulRight (x : X) : C(X, X) :=
+ mk _ (continuous_mul_right x)
+#align continuous_map.mul_right ContinuousMap.mulRight
+#align continuous_map.add_right ContinuousMap.addRight
+
+@[to_additive, simp]
+theorem coe_mulRight (x : X) : ⇑(ContinuousMap.mulRight x) = fun y => y * x :=
+ rfl
+#align continuous_map.coe_mul_right ContinuousMap.coe_mulRight
+#align continuous_map.coe_add_right ContinuousMap.coe_add_right
+
+/-- The continuous map `λ y, x * y` -/
+@[to_additive "The continuous map `λ y, x + y"]
+protected def mulLeft (x : X) : C(X, X) :=
+ mk _ (continuous_mul_left x)
+#align continuous_map.mul_left ContinuousMap.mulLeft
+#align continuous_map.add_left ContinuousMap.addLeft
+
+@[to_additive, simp]
+theorem coe_mulLeft (x : X) : ⇑(ContinuousMap.mulLeft x) = fun y => x * y :=
+ rfl
+#align continuous_map.coe_mul_left ContinuousMap.coe_mulLeft
+#align continuous_map.coe_add_left ContinuousMap.coe_add_left
+
+end ContinuousMap
+
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
.
@@ -204,6 +204,26 @@ theorem Filter.TendstoNhdsWithinIio.mul_const [MulPosStrictMono 𝕜] [MulPosRef
end tendsto_nhds
+@[to_additive]
+protected theorem Specializes.mul {a b c d : M} (hab : a ⤳ b) (hcd : c ⤳ d) : (a * c) ⤳ (b * d) :=
+ hab.smul hcd
+
+@[to_additive]
+protected theorem Inseparable.mul {a b c d : M} (hab : Inseparable a b) (hcd : Inseparable c d) :
+ Inseparable (a * c) (b * d) :=
+ hab.smul hcd
+
+@[to_additive]
+protected theorem Specializes.pow {M : Type*} [Monoid M] [TopologicalSpace M] [ContinuousMul M]
+ {a b : M} (h : a ⤳ b) (n : ℕ) : (a ^ n) ⤳ (b ^ n) :=
+ Nat.recOn n (by simp only [pow_zero, specializes_rfl]) fun _ ihn ↦ by
+ simpa only [pow_succ] using ihn.mul h
+
+@[to_additive]
+protected theorem Inseparable.pow {M : Type*} [Monoid M] [TopologicalSpace M] [ContinuousMul M]
+ {a b : M} (h : Inseparable a b) (n : ℕ) : Inseparable (a ^ n) (b ^ n) :=
+ (h.specializes.pow n).antisymm (h.specializes'.pow n)
+
/-- Construct a unit from limits of units and their inverses. -/
@[to_additive (attr := simps)
"Construct an additive unit from limits of additive units and their negatives."]
Purely automatic replacement. If this is in any way controversial; I'm happy to just close this PR.
@@ -681,7 +681,7 @@ instance (priority := 100) IsScalarTower.continuousConstSMul {R A : Type*} [Mono
/-- If the action of `R` on `A` commutes with left-multiplication, then continuous multiplication
implies continuous scalar multiplication by constants.
-Notably, this instances applies when `R = Aᵐᵒᵖ`.-/
+Notably, this instances applies when `R = Aᵐᵒᵖ`. -/
@[to_additive "If the action of `R` on `A` commutes with left-addition, then
continuous addition implies continuous affine addition by constants.
Also do the same for "/-A". This is a purely aesthetic change (and exhaustive).
@@ -648,7 +648,7 @@ theorem Filter.tendsto_cocompact_mul_left {a b : M} (ha : b * a = 1) :
simp only [comp_mul_left, ha, one_mul]
exact Filter.tendsto_id
-- Porting note: changed proof, original proof was:
- /-refine' Filter.Tendsto.of_tendsto_comp _ (Filter.comap_cocompact_le (continuous_mul_left b))
+ /- refine' Filter.Tendsto.of_tendsto_comp _ (Filter.comap_cocompact_le (continuous_mul_left b))
convert Filter.tendsto_id
ext x
simp [ha]-/
@@ -8,6 +8,7 @@ import Mathlib.Order.Filter.Pointwise
import Mathlib.Topology.Algebra.MulAction
import Mathlib.Algebra.BigOperators.Pi
import Mathlib.Topology.ContinuousFunction.Basic
+import Mathlib.Algebra.Group.ULift
#align_import topology.algebra.monoid from "leanprover-community/mathlib"@"1ac8d4304efba9d03fa720d06516fac845aa5353"
@@ -71,6 +72,13 @@ theorem continuous_mul : Continuous fun p : M × M => p.1 * p.2 :=
#align continuous_mul continuous_mul
#align continuous_add continuous_add
+@[to_additive]
+instance : ContinuousMul (ULift.{u} M) := by
+ constructor
+ apply continuous_uLift_up.comp
+ exact continuous_mul.comp₂ (continuous_uLift_down.comp continuous_fst)
+ (continuous_uLift_down.comp continuous_snd)
+
@[to_additive]
instance ContinuousMul.to_continuousSMul : ContinuousSMul M M :=
⟨continuous_mul⟩
We change the following field in the definition of an additive commutative monoid:
nsmul_succ : ∀ (n : ℕ) (x : G),
- AddMonoid.nsmul (n + 1) x = x + AddMonoid.nsmul n x
+ AddMonoid.nsmul (n + 1) x = AddMonoid.nsmul n x + x
where the latter is more natural
We adjust the definitions of ^
in monoids, groups, etc.
Originally there was a warning comment about why this natural order was preferred
use
x * npowRec n x
and notnpowRec n x * x
in the definition to make sure that definitional unfolding ofnpowRec
is blocked, to avoid deep recursion issues.
but it seems to no longer apply.
Remarks on the PR :
pow_succ
and pow_succ'
have switched their meanings.Ideal.IsPrime.mul_mem_pow
which is defined in [Mathlib/RingTheory/DedekindDomain/Ideal.lean]. Changing the order of operation forced me to add the symmetric lemma Ideal.IsPrime.mem_pow_mul
.@@ -563,7 +563,7 @@ theorem continuousOn_list_prod {f : ι → X → M} (l : List ι) {t : Set X}
theorem continuous_pow : ∀ n : ℕ, Continuous fun a : M => a ^ n
| 0 => by simpa using continuous_const
| k + 1 => by
- simp only [pow_succ]
+ simp only [pow_succ']
exact continuous_id.mul (continuous_pow _)
#align continuous_pow continuous_pow
#align continuous_nsmul continuous_nsmul
@@ -468,7 +468,7 @@ def Submonoid.topologicalClosure (s : Submonoid M) : Submonoid M where
#align submonoid.topological_closure Submonoid.topologicalClosure
#align add_submonoid.topological_closure AddSubmonoid.topologicalClosure
--- Porting note: new lemma
+-- Porting note (#10756): new lemma
@[to_additive]
theorem Submonoid.coe_topologicalClosure (s : Submonoid M) :
(s.topologicalClosure : Set M) = _root_.closure (s : Set M) := rfl
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.
@@ -861,7 +861,7 @@ theorem continuousMul_sInf {ts : Set (TopologicalSpace M)}
theorem continuousMul_iInf {ts : ι' → TopologicalSpace M}
(h' : ∀ i, @ContinuousMul M (ts i) _) : @ContinuousMul M (⨅ i, ts i) _ := by
rw [← sInf_range]
- exact continuousMul_sInf (Set.forall_range_iff.mpr h')
+ exact continuousMul_sInf (Set.forall_mem_range.mpr h')
#align has_continuous_mul_infi continuousMul_iInf
#align has_continuous_add_infi continuousAdd_iInf
open Classical
(#11199)
We remove all but one open Classical
s, instead preferring to use open scoped Classical
. The only real side-effect this led to is moving a couple declarations to use Exists.choose
instead of Classical.choose
.
The first few commits are explicitly labelled regex replaces for ease of review.
@@ -22,9 +22,11 @@ the definitions.
universe u v
-open Classical Set Filter TopologicalSpace
+open scoped Classical
+open Set Filter TopologicalSpace
-open Classical Topology BigOperators Pointwise
+open scoped Classical
+open Topology BigOperators Pointwise
variable {ι α M N X : Type*} [TopologicalSpace X]
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -329,7 +329,7 @@ theorem isClosed_setOf_map_mul [Mul M₁] [Mul M₂] [ContinuousMul M₂] :
#align is_closed_set_of_map_mul isClosed_setOf_map_mul
#align is_closed_set_of_map_add isClosed_setOf_map_add
--- porting note: split variables command over two lines, can't change explicitness at the same time
+-- Porting note: split variables command over two lines, can't change explicitness at the same time
-- as declaring new variables.
variable {M₁ M₂}
variable [MulOneClass M₁] [MulOneClass M₂] [ContinuousMul M₂]
@@ -585,7 +585,7 @@ instance AddMonoid.continuousSMul_nat {A} [AddMonoid A] [TopologicalSpace A]
-- To properly fix this, we should make sure that `continuity` applies its
-- lemmas with reducible transparency, preventing the unfolding of `^`. But this
-- is quite an invasive change.
-@[to_additive (attr := aesop safe -100 (rule_sets [Continuous]), fun_prop)]
+@[to_additive (attr := aesop safe -100 (rule_sets := [Continuous]), fun_prop)]
theorem Continuous.pow {f : X → M} (h : Continuous f) (n : ℕ) : Continuous fun b => f b ^ n :=
(continuous_pow n).comp h
#align continuous.pow Continuous.pow
@@ -28,7 +28,7 @@ open Classical Topology BigOperators Pointwise
variable {ι α M N X : Type*} [TopologicalSpace X]
-@[to_additive (attr := continuity)]
+@[to_additive (attr := continuity, fun_prop)]
theorem continuous_one [TopologicalSpace M] [One M] : Continuous (1 : X → M) :=
@continuous_const _ _ _ _ 1
#align continuous_one continuous_one
have
, replace
and suffices
(#10640)
No changes to tactic file, it's just boring fixes throughout the library.
This follows on from #6964.
Co-authored-by: sgouezel <sebastien.gouezel@univ-rennes1.fr> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -786,8 +786,7 @@ theorem continuousOn_finset_prod {f : ι → X → M} (s : Finset ι) {t : Set X
@[to_additive]
theorem eventuallyEq_prod {X M : Type*} [CommMonoid M] {s : Finset ι} {l : Filter X}
{f g : ι → X → M} (hs : ∀ i ∈ s, f i =ᶠ[l] g i) : ∏ i in s, f i =ᶠ[l] ∏ i in s, g i := by
- replace hs : ∀ᶠ x in l, ∀ i ∈ s, f i x = g i x
- · rwa [eventually_all_finset]
+ replace hs : ∀ᶠ x in l, ∀ i ∈ s, f i x = g i x := by rwa [eventually_all_finset]
filter_upwards [hs] with x hx
simp only [Finset.prod_apply, Finset.prod_congr rfl hx]
#align eventually_eq_prod eventuallyEq_prod
@@ -83,7 +83,7 @@ instance ContinuousMul.to_continuousSMul_op : ContinuousSMul Mᵐᵒᵖ M :=
#align has_continuous_mul.to_has_continuous_smul_op ContinuousMul.to_continuousSMul_op
#align has_continuous_add.to_has_continuous_vadd_op ContinuousAdd.to_continuousVAdd_op
-@[to_additive (attr := continuity)]
+@[to_additive (attr := continuity, fun_prop)]
theorem Continuous.mul {f g : X → M} (hf : Continuous f) (hg : Continuous g) :
Continuous fun x => f x * g x :=
continuous_mul.comp (hf.prod_mk hg : _)
@@ -102,7 +102,7 @@ theorem continuous_mul_right (a : M) : Continuous fun b : M => b * a :=
#align continuous_mul_right continuous_mul_right
#align continuous_add_right continuous_add_right
-@[to_additive]
+@[to_additive (attr := fun_prop)]
theorem ContinuousOn.mul {f g : X → M} {s : Set X} (hf : ContinuousOn f s) (hg : ContinuousOn g s) :
ContinuousOn (fun x => f x * g x) s :=
(continuous_mul.comp_continuousOn (hf.prod hg) : _)
@@ -212,7 +212,7 @@ def Filter.Tendsto.units [TopologicalSpace N] [Monoid N] [ContinuousMul N] [T2Sp
#align filter.tendsto.units Filter.Tendsto.units
#align filter.tendsto.add_units Filter.Tendsto.addUnits
-@[to_additive]
+@[to_additive (attr := fun_prop)]
theorem ContinuousAt.mul {f g : X → M} {x : X} (hf : ContinuousAt f x) (hg : ContinuousAt g x) :
ContinuousAt (fun x => f x * g x) x :=
Filter.Tendsto.mul hf hg
@@ -585,7 +585,7 @@ instance AddMonoid.continuousSMul_nat {A} [AddMonoid A] [TopologicalSpace A]
-- To properly fix this, we should make sure that `continuity` applies its
-- lemmas with reducible transparency, preventing the unfolding of `^`. But this
-- is quite an invasive change.
-@[to_additive (attr := aesop safe -100 (rule_sets [Continuous]))]
+@[to_additive (attr := aesop safe -100 (rule_sets [Continuous]), fun_prop)]
theorem Continuous.pow {f : X → M} (h : Continuous f) (n : ℕ) : Continuous fun b => f b ^ n :=
(continuous_pow n).comp h
#align continuous.pow Continuous.pow
@@ -617,14 +617,14 @@ theorem ContinuousWithinAt.pow {f : X → M} {x : X} {s : Set X} (hf : Continuou
#align continuous_within_at.pow ContinuousWithinAt.pow
#align continuous_within_at.nsmul ContinuousWithinAt.nsmul
-@[to_additive]
+@[to_additive (attr := fun_prop)]
theorem ContinuousAt.pow {f : X → M} {x : X} (hf : ContinuousAt f x) (n : ℕ) :
ContinuousAt (fun x => f x ^ n) x :=
Filter.Tendsto.pow hf n
#align continuous_at.pow ContinuousAt.pow
#align continuous_at.nsmul ContinuousAt.nsmul
-@[to_additive]
+@[to_additive (attr := fun_prop)]
theorem ContinuousOn.pow {f : X → M} {s : Set X} (hf : ContinuousOn f s) (n : ℕ) :
ContinuousOn (fun x => f x ^ n) s := fun x hx => (hf x hx).pow n
#align continuous_on.pow ContinuousOn.pow
@@ -402,6 +402,39 @@ instance Submonoid.continuousMul [TopologicalSpace M] [Monoid M] [ContinuousMul
#align submonoid.has_continuous_mul Submonoid.continuousMul
#align add_submonoid.has_continuous_add AddSubmonoid.continuousAdd
+section MulOneClass
+
+variable [TopologicalSpace M] [MulOneClass M] [ContinuousMul M]
+
+@[to_additive exists_open_nhds_zero_half]
+theorem exists_open_nhds_one_split {s : Set M} (hs : s ∈ 𝓝 (1 : M)) :
+ ∃ V : Set M, IsOpen V ∧ (1 : M) ∈ V ∧ ∀ v ∈ V, ∀ w ∈ V, v * w ∈ s := by
+ have : (fun a : M × M => a.1 * a.2) ⁻¹' s ∈ 𝓝 ((1, 1) : M × M) :=
+ tendsto_mul (by simpa only [one_mul] using hs)
+ simpa only [prod_subset_iff] using exists_nhds_square this
+#align exists_open_nhds_one_split exists_open_nhds_one_split
+#align exists_open_nhds_zero_half exists_open_nhds_zero_half
+
+@[to_additive exists_nhds_zero_half]
+theorem exists_nhds_one_split {s : Set M} (hs : s ∈ 𝓝 (1 : M)) :
+ ∃ V ∈ 𝓝 (1 : M), ∀ v ∈ V, ∀ w ∈ V, v * w ∈ s :=
+ let ⟨V, Vo, V1, hV⟩ := exists_open_nhds_one_split hs
+ ⟨V, IsOpen.mem_nhds Vo V1, hV⟩
+#align exists_nhds_one_split exists_nhds_one_split
+#align exists_nhds_zero_half exists_nhds_zero_half
+
+/-- Given a neighborhood `U` of `1` there is an open neighborhood `V` of `1`
+such that `V * V ⊆ U`. -/
+@[to_additive "Given an open neighborhood `U` of `0` there is an open neighborhood `V` of `0`
+ such that `V + V ⊆ U`."]
+theorem exists_open_nhds_one_mul_subset {U : Set M} (hU : U ∈ 𝓝 (1 : M)) :
+ ∃ V : Set M, IsOpen V ∧ (1 : M) ∈ V ∧ V * V ⊆ U := by
+ simpa only [mul_subset_iff] using exists_open_nhds_one_split hU
+#align exists_open_nhds_one_mul_subset exists_open_nhds_one_mul_subset
+#align exists_open_nhds_zero_add_subset exists_open_nhds_zero_add_subset
+
+end MulOneClass
+
section ContinuousMul
variable [TopologicalSpace M] [Monoid M] [ContinuousMul M]
@@ -471,23 +504,6 @@ def Submonoid.commMonoidTopologicalClosure [T2Space M] (s : Submonoid M)
#align submonoid.comm_monoid_topological_closure Submonoid.commMonoidTopologicalClosure
#align add_submonoid.add_comm_monoid_topological_closure AddSubmonoid.addCommMonoidTopologicalClosure
-@[to_additive exists_open_nhds_zero_half]
-theorem exists_open_nhds_one_split {s : Set M} (hs : s ∈ 𝓝 (1 : M)) :
- ∃ V : Set M, IsOpen V ∧ (1 : M) ∈ V ∧ ∀ v ∈ V, ∀ w ∈ V, v * w ∈ s := by
- have : (fun a : M × M => a.1 * a.2) ⁻¹' s ∈ 𝓝 ((1, 1) : M × M) :=
- tendsto_mul (by simpa only [one_mul] using hs)
- simpa only [prod_subset_iff] using exists_nhds_square this
-#align exists_open_nhds_one_split exists_open_nhds_one_split
-#align exists_open_nhds_zero_half exists_open_nhds_zero_half
-
-@[to_additive exists_nhds_zero_half]
-theorem exists_nhds_one_split {s : Set M} (hs : s ∈ 𝓝 (1 : M)) :
- ∃ V ∈ 𝓝 (1 : M), ∀ v ∈ V, ∀ w ∈ V, v * w ∈ s :=
- let ⟨V, Vo, V1, hV⟩ := exists_open_nhds_one_split hs
- ⟨V, IsOpen.mem_nhds Vo V1, hV⟩
-#align exists_nhds_one_split exists_nhds_one_split
-#align exists_nhds_zero_half exists_nhds_zero_half
-
@[to_additive exists_nhds_zero_quarter]
theorem exists_nhds_one_split4 {u : Set M} (hu : u ∈ 𝓝 (1 : M)) :
∃ V ∈ 𝓝 (1 : M), ∀ {v w s t}, v ∈ V → w ∈ V → s ∈ V → t ∈ V → v * w * s * t ∈ u := by
@@ -499,19 +515,6 @@ theorem exists_nhds_one_split4 {u : Set M} (hu : u ∈ 𝓝 (1 : M)) :
#align exists_nhds_one_split4 exists_nhds_one_split4
#align exists_nhds_zero_quarter exists_nhds_zero_quarter
-/-- Given a neighborhood `U` of `1` there is an open neighborhood `V` of `1`
-such that `VV ⊆ U`. -/
-@[to_additive "Given an open neighborhood `U` of `0` there is an open neighborhood `V` of `0`
- such that `V + V ⊆ U`."]
-theorem exists_open_nhds_one_mul_subset {U : Set M} (hU : U ∈ 𝓝 (1 : M)) :
- ∃ V : Set M, IsOpen V ∧ (1 : M) ∈ V ∧ V * V ⊆ U := by
- rcases exists_open_nhds_one_split hU with ⟨V, Vo, V1, hV⟩
- use V, Vo, V1
- rintro _ ⟨x, hx, y, hy, rfl⟩
- exact hV _ hx _ hy
-#align exists_open_nhds_one_mul_subset exists_open_nhds_one_mul_subset
-#align exists_open_nhds_zero_add_subset exists_open_nhds_zero_add_subset
-
@[to_additive]
theorem IsCompact.mul {s t : Set M} (hs : IsCompact s) (ht : IsCompact t) : IsCompact (s * t) := by
rw [← image_mul_prod]
The FunLike hierarchy is very big and gets scanned through each time we need a coercion (via the CoeFun
instance). It looks like unbundled inheritance suits Lean 4 better here. The only class that still extends FunLike
is EquivLike
, since that has a custom coe_injective'
field that is easier to implement. All other classes should take FunLike
or EquivLike
as a parameter.
Previously, morphism classes would be Type
-valued and extend FunLike
:
/-- `MyHomClass F A B` states that `F` is a type of `MyClass.op`-preserving morphisms.
You should extend this class when you extend `MyHom`. -/
class MyHomClass (F : Type*) (A B : outParam <| Type*) [MyClass A] [MyClass B]
extends FunLike F A B :=
(map_op : ∀ (f : F) (x y : A), f (MyClass.op x y) = MyClass.op (f x) (f y))
After this PR, they should be Prop
-valued and take FunLike
as a parameter:
/-- `MyHomClass F A B` states that `F` is a type of `MyClass.op`-preserving morphisms.
You should extend this class when you extend `MyHom`. -/
class MyHomClass (F : Type*) (A B : outParam <| Type*) [MyClass A] [MyClass B]
[FunLike F A B] : Prop :=
(map_op : ∀ (f : F) (x y : A), f (MyClass.op x y) = MyClass.op (f x) (f y))
(Note that A B
stay marked as outParam
even though they are not purely required to be so due to the FunLike
parameter already filling them in. This is required to see through type synonyms, which is important in the category theory library. Also, I think keeping them as outParam
is slightly faster.)
Similarly, MyEquivClass
should take EquivLike
as a parameter.
As a result, every mention of [MyHomClass F A B]
should become [FunLike F A B] [MyHomClass F A B]
.
While overall this gives some great speedups, there are some cases that are noticeably slower. In particular, a failing application of a lemma such as map_mul
is more expensive. This is due to suboptimal processing of arguments. For example:
variable [FunLike F M N] [Mul M] [Mul N] (f : F) (x : M) (y : M)
theorem map_mul [MulHomClass F M N] : f (x * y) = f x * f y
example [AddHomClass F A B] : f (x * y) = f x * f y := map_mul f _ _
Before this PR, applying map_mul f
gives the goals [Mul ?M] [Mul ?N] [MulHomClass F ?M ?N]
. Since M
and N
are out_param
s, [MulHomClass F ?M ?N]
is synthesized first, supplies values for ?M
and ?N
and then the Mul M
and Mul N
instances can be found.
After this PR, the goals become [FunLike F ?M ?N] [Mul ?M] [Mul ?N] [MulHomClass F ?M ?N]
. Now [FunLike F ?M ?N]
is synthesized first, supplies values for ?M
and ?N
and then the Mul M
and Mul N
instances can be found, before trying MulHomClass F M N
which fails. Since the Mul
hierarchy is very big, this can be slow to fail, especially when there is no such Mul
instance.
A long-term but harder to achieve solution would be to specify the order in which instance goals get solved. For example, we'd like to change the arguments to map_mul
to look like [FunLike F M N] [Mul M] [Mul N] [highPriority <| MulHomClass F M N]
because MulHomClass
fails or succeeds much faster than the others.
As a consequence, the simpNF
linter is much slower since by design it tries and fails to apply many map_
lemmas. The same issue occurs a few times in existing calls to simp [map_mul]
, where map_mul
is tried "too soon" and fails. Thanks to the speedup of leanprover/lean4#2478 the impact is very limited, only in files that already were close to the timeout.
simp
not firing sometimesThis affects map_smulₛₗ
and related definitions. For simp
lemmas Lean apparently uses a slightly different mechanism to find instances, so that rw
can find every argument to map_smulₛₗ
successfully but simp
can't: leanprover/lean4#3701.
Especially in the category theory library, we might sometimes have a type A
which is also accessible as a synonym (Bundled A hA).1
. Instance synthesis doesn't always work if we have f : A →* B
but x * y : (Bundled A hA).1
or vice versa. This seems to be mostly fixed by keeping A B
as outParam
s in MulHomClass F A B
. (Presumably because Lean will do a definitional check A =?= (Bundled A hA).1
instead of using the syntax in the discrimination tree.)
The timeouts can be worked around for now by specifying which map_mul
we mean, either as map_mul f
for some explicit f
, or as e.g. MonoidHomClass.map_mul
.
map_smulₛₗ
not firing as simp
lemma can be worked around by going back to the pre-FunLike situation and making LinearMap.map_smulₛₗ
a simp
lemma instead of the generic map_smulₛₗ
. Writing simp [map_smulₛₗ _]
also works.
Co-authored-by: Matthew Ballard <matt@mrb.email> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Scott Morrison <scott@tqft.net> Co-authored-by: Anne Baanen <Vierkantor@users.noreply.github.com>
@@ -333,7 +333,7 @@ theorem isClosed_setOf_map_mul [Mul M₁] [Mul M₂] [ContinuousMul M₂] :
-- as declaring new variables.
variable {M₁ M₂}
variable [MulOneClass M₁] [MulOneClass M₂] [ContinuousMul M₂]
- {F : Type*} [MonoidHomClass F M₁ M₂] {l : Filter α}
+ {F : Type*} [FunLike F M₁ M₂] [MonoidHomClass F M₁ M₂] {l : Filter α}
/-- Construct a bundled monoid homomorphism `M₁ →* M₂` from a function `f` and a proof that it
belongs to the closure of the range of the coercion from `M₁ →* M₂` (or another type of bundled
@@ -373,7 +373,7 @@ theorem MonoidHom.isClosed_range_coe : IsClosed (Set.range ((↑) : (M₁ →* M
end PointwiseLimits
@[to_additive]
-theorem Inducing.continuousMul {M N F : Type*} [Mul M] [Mul N] [MulHomClass F M N]
+theorem Inducing.continuousMul {M N F : Type*} [Mul M] [Mul N] [FunLike F M N] [MulHomClass F M N]
[TopologicalSpace M] [TopologicalSpace N] [ContinuousMul N] (f : F) (hf : Inducing f) :
ContinuousMul M :=
⟨(hf.continuousSMul hf.continuous (map_mul f _ _)).1⟩
@@ -381,7 +381,7 @@ theorem Inducing.continuousMul {M N F : Type*} [Mul M] [Mul N] [MulHomClass F M
#align inducing.has_continuous_add Inducing.continuousAdd
@[to_additive]
-theorem continuousMul_induced {M N F : Type*} [Mul M] [Mul N] [MulHomClass F M N]
+theorem continuousMul_induced {M N F : Type*} [Mul M] [Mul N] [FunLike F M N] [MulHomClass F M N]
[TopologicalSpace N] [ContinuousMul N] (f : F) : @ContinuousMul M (induced f ‹_›) _ :=
letI := induced f ‹_›
Inducing.continuousMul f ⟨rfl⟩
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
.@@ -376,8 +376,7 @@ end PointwiseLimits
theorem Inducing.continuousMul {M N F : Type*} [Mul M] [Mul N] [MulHomClass F M N]
[TopologicalSpace M] [TopologicalSpace N] [ContinuousMul N] (f : F) (hf : Inducing f) :
ContinuousMul M :=
- ⟨hf.continuous_iff.2 <| by
- simpa only [(· ∘ ·), map_mul f] using hf.continuous.fst'.mul hf.continuous.snd'⟩
+ ⟨(hf.continuousSMul hf.continuous (map_mul f _ _)).1⟩
#align inducing.has_continuous_mul Inducing.continuousMul
#align inducing.has_continuous_add Inducing.continuousAdd
Set.image2
etc (#9275)
Set.image2
to use ∃ a ∈ s, ∃ b ∈ t, f a b = c
instead of ∃ a b, a ∈ s ∧ b ∈ t ∧ f a b = c
.Set.seq
as Set.image2
. The new definition is equal to the old one but rw [Set.seq]
gives a different result.Filter.map₂
to use ∃ u ∈ f, ∃ v ∈ g, image2 m u v ⊆ s
instead of ∃ u v, u ∈ f ∧ v ∈ g ∧ ...
Set.mem_image2
, Finset.mem_image₂
, Set.mem_mul
, Finset.mem_div
etcThe two reasons to make the change are:
∃ a ∈ s, ∃ b ∈ t, _
is a simp
-normal form, and@@ -419,7 +419,7 @@ theorem Submonoid.top_closure_mul_self_subset (s : Submonoid M) :
theorem Submonoid.top_closure_mul_self_eq (s : Submonoid M) :
_root_.closure (s : Set M) * _root_.closure s = _root_.closure s :=
Subset.antisymm s.top_closure_mul_self_subset fun x hx =>
- ⟨x, 1, hx, _root_.subset_closure s.one_mem, mul_one _⟩
+ ⟨x, hx, 1, _root_.subset_closure s.one_mem, mul_one _⟩
#align submonoid.top_closure_mul_self_eq Submonoid.top_closure_mul_self_eq
#align add_submonoid.top_closure_add_self_eq AddSubmonoid.top_closure_add_self_eq
@@ -430,7 +430,7 @@ itself a submonoid. -/
def Submonoid.topologicalClosure (s : Submonoid M) : Submonoid M where
carrier := _root_.closure (s : Set M)
one_mem' := _root_.subset_closure s.one_mem
- mul_mem' ha hb := s.top_closure_mul_self_subset ⟨_, _, ha, hb, rfl⟩
+ mul_mem' ha hb := s.top_closure_mul_self_subset ⟨_, ha, _, hb, rfl⟩
#align submonoid.topological_closure Submonoid.topologicalClosure
#align add_submonoid.topological_closure AddSubmonoid.topologicalClosure
@@ -508,7 +508,7 @@ theorem exists_open_nhds_one_mul_subset {U : Set M} (hU : U ∈ 𝓝 (1 : M)) :
∃ V : Set M, IsOpen V ∧ (1 : M) ∈ V ∧ V * V ⊆ U := by
rcases exists_open_nhds_one_split hU with ⟨V, Vo, V1, hV⟩
use V, Vo, V1
- rintro _ ⟨x, y, hx, hy, rfl⟩
+ rintro _ ⟨x, hx, y, hy, rfl⟩
exact hV _ hx _ hy
#align exists_open_nhds_one_mul_subset exists_open_nhds_one_mul_subset
#align exists_open_nhds_zero_add_subset exists_open_nhds_zero_add_subset
This is the supremum of
along with some minor fixes from failures on nightly-testing as Mathlib master
is merged into it.
Note that some PRs for changes that are already compatible with the current toolchain and will be necessary have already been split out: #8380.
I am hopeful that in future we will be able to progressively merge adaptation PRs into a bump/v4.X.0
branch, so we never end up with a "big merge" like this. However one of these adaptation PRs (#8056) predates my new scheme for combined CI, and it wasn't possible to keep that PR viable in the meantime.
In particular this includes adjustments for the Lean PRs
We can get rid of all the
local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See issue [lean4#2220](https://github.com/leanprover/lean4/pull/2220)
macros across Mathlib (and in any projects that want to write natural number powers of reals).
Changes the default behaviour of simp
to (config := {decide := false})
. This makes simp
(and consequentially norm_num
) less powerful, but also more consistent, and less likely to blow up in long failures. This requires a variety of changes: changing some previously by simp
or norm_num
to decide
or rfl
, or adding (config := {decide := true})
.
This changed the behaviour of simp
so that simp [f]
will only unfold "fully applied" occurrences of f
. The old behaviour can be recovered with simp (config := { unfoldPartialApp := true })
. We may in future add a syntax for this, e.g. simp [!f]
; please provide feedback! In the meantime, we have made the following changes:
(config := { unfoldPartialApp := true })
in some places, to recover the old behaviour@[eqns]
to manually adjust the equation lemmas for a particular definition, recovering the old behaviour just for that definition. See #8371, where we do this for Function.comp
and Function.flip
.This change in Lean may require further changes down the line (e.g. adding the !f
syntax, and/or upstreaming the special treatment for Function.comp
and Function.flip
, and/or removing this special treatment). Please keep an open and skeptical mind about these changes!
Co-authored-by: leanprover-community-mathlib4-bot <leanprover-community-mathlib4-bot@users.noreply.github.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Mauricio Collares <mauricio@collares.org>
@@ -276,16 +276,17 @@ theorem ContinuousMul.of_nhds_one {M : Type u} [Monoid M] [TopologicalSpace M]
ext x
simp [mul_assoc]
calc
- map (uncurry (· * ·)) (𝓝 (x₀, y₀)) = map (uncurry (· * ·)) (𝓝 x₀ ×ˢ 𝓝 y₀) := by
- rw [nhds_prod_eq]
+ map (uncurry (· * ·)) (𝓝 (x₀, y₀)) = map (uncurry (· * ·)) (𝓝 x₀ ×ˢ 𝓝 y₀) :=
+ by rw [nhds_prod_eq]
_ = map (fun p : M × M => x₀ * p.1 * (p.2 * y₀)) (𝓝 1 ×ˢ 𝓝 1) := by
-- Porting note: `rw` was able to prove this
-- Now it fails with `failed to rewrite using equation theorems for 'Function.uncurry'`
-- and `failed to rewrite using equation theorems for 'Function.comp'`.
-- Removing those two lemmas, the `rw` would succeed, but then needs a `rfl`.
- simp_rw [uncurry, hleft x₀, hright y₀, prod_map_map_eq, Filter.map_map, Function.comp]
- _ = map ((fun x => x₀ * x) ∘ fun x => x * y₀) (map (uncurry (· * ·)) (𝓝 1 ×ˢ 𝓝 1)) := by
- rw [key, ← Filter.map_map]
+ simp (config := { unfoldPartialApp := true }) only [uncurry]
+ simp_rw [hleft x₀, hright y₀, prod_map_map_eq, Filter.map_map, Function.comp_def]
+ _ = map ((fun x => x₀ * x) ∘ fun x => x * y₀) (map (uncurry (· * ·)) (𝓝 1 ×ˢ 𝓝 1)) :=
+ by rw [key, ← Filter.map_map]
_ ≤ map ((fun x : M => x₀ * x) ∘ fun x => x * y₀) (𝓝 1) := map_mono hmul
_ = 𝓝 (x₀ * y₀) := by
rw [← Filter.map_map, ← hright, hleft y₀, Filter.map_map, key₂, ← hleft]⟩
@@ -276,16 +276,16 @@ theorem ContinuousMul.of_nhds_one {M : Type u} [Monoid M] [TopologicalSpace M]
ext x
simp [mul_assoc]
calc
- map (uncurry (· * ·)) (𝓝 (x₀, y₀)) = map (uncurry (· * ·)) (𝓝 x₀ ×ˢ 𝓝 y₀) :=
- by rw [nhds_prod_eq]
- _ = map (fun p : M × M => x₀ * p.1 * (p.2 * y₀)) (𝓝 1 ×ˢ 𝓝 1) :=
+ map (uncurry (· * ·)) (𝓝 (x₀, y₀)) = map (uncurry (· * ·)) (𝓝 x₀ ×ˢ 𝓝 y₀) := by
+ rw [nhds_prod_eq]
+ _ = map (fun p : M × M => x₀ * p.1 * (p.2 * y₀)) (𝓝 1 ×ˢ 𝓝 1) := by
-- Porting note: `rw` was able to prove this
-- Now it fails with `failed to rewrite using equation theorems for 'Function.uncurry'`
-- and `failed to rewrite using equation theorems for 'Function.comp'`.
-- Removing those two lemmas, the `rw` would succeed, but then needs a `rfl`.
- by simp_rw [uncurry, hleft x₀, hright y₀, prod_map_map_eq, Filter.map_map, Function.comp]
- _ = map ((fun x => x₀ * x) ∘ fun x => x * y₀) (map (uncurry (· * ·)) (𝓝 1 ×ˢ 𝓝 1)) :=
- by rw [key, ← Filter.map_map]
+ simp_rw [uncurry, hleft x₀, hright y₀, prod_map_map_eq, Filter.map_map, Function.comp]
+ _ = map ((fun x => x₀ * x) ∘ fun x => x * y₀) (map (uncurry (· * ·)) (𝓝 1 ×ˢ 𝓝 1)) := by
+ rw [key, ← Filter.map_map]
_ ≤ map ((fun x : M => x₀ * x) ∘ fun x => x * y₀) (𝓝 1) := map_mono hmul
_ = 𝓝 (x₀ * y₀) := by
rw [← Filter.map_map, ← hright, hleft y₀, Filter.map_map, key₂, ← hleft]⟩
This rule used to unfold the recursive function npowRec
unconditionally, so Aesop would loop during normalisation unless another normalisation rule (usually simp) happened to close the goal. To prevent this issue, Aesop master now disallows recursive unfold rules, so we have to remove the npowRec
rule.
@@ -573,7 +573,16 @@ instance AddMonoid.continuousSMul_nat {A} [AddMonoid A] [TopologicalSpace A]
⟨continuous_prod_of_discrete_left.mpr continuous_nsmul⟩
#align add_monoid.has_continuous_smul_nat AddMonoid.continuousSMul_nat
-@[to_additive (attr := continuity)]
+-- We register `Continuous.pow` as a `continuity` lemma with low penalty (so
+-- `continuity` will try it before other `continuity` lemmas). This is a
+-- workaround for goals of the form `Continuous fun x => x ^ 2`, where
+-- `continuity` applies `Continuous.mul` since the goal is defeq to
+-- `Continuous fun x => x * x`.
+--
+-- To properly fix this, we should make sure that `continuity` applies its
+-- lemmas with reducible transparency, preventing the unfolding of `^`. But this
+-- is quite an invasive change.
+@[to_additive (attr := aesop safe -100 (rule_sets [Continuous]))]
theorem Continuous.pow {f : X → M} (h : Continuous f) (n : ℕ) : Continuous fun b => f b ^ n :=
(continuous_pow n).comp h
#align continuous.pow Continuous.pow
to_additive
(#7856)
to_additive
heuristics work best when the type to be additivized comes first. We make sure this is the case for later applications.
@@ -26,7 +26,7 @@ open Classical Set Filter TopologicalSpace
open Classical Topology BigOperators Pointwise
-variable {ι α X M N : Type*} [TopologicalSpace X]
+variable {ι α M N X : Type*} [TopologicalSpace X]
@[to_additive (attr := continuity)]
theorem continuous_one [TopologicalSpace M] [One M] : Continuous (1 : X → M) :=
Add four pairs of lemmas continuous((Within)At/On)_prod_of_discrete_left/right in ContinuousOn.lean: to check continuity of a function from X × Y
to Z
with X
discrete, it suffices to check continuity of every slice of it with x : X
fixed.
Remove duplicate lemmas continuous_uncurry_of_discreteTopology(_left) from Constructions.lean in favor of the more general (iff) version.
Move the lemma continuous_iff_continuousOn_univ up.
Co-authored-by: Junyan Xu <junyanxu.math@gmail.com>
@@ -570,7 +570,7 @@ instance AddMonoid.continuousConstSMul_nat {A} [AddMonoid A] [TopologicalSpace A
instance AddMonoid.continuousSMul_nat {A} [AddMonoid A] [TopologicalSpace A]
[ContinuousAdd A] : ContinuousSMul ℕ A :=
- ⟨continuous_uncurry_of_discreteTopology continuous_nsmul⟩
+ ⟨continuous_prod_of_discrete_left.mpr continuous_nsmul⟩
#align add_monoid.has_continuous_smul_nat AddMonoid.continuousSMul_nat
@[to_additive (attr := continuity)]
@@ -436,7 +436,7 @@ def Submonoid.topologicalClosure (s : Submonoid M) : Submonoid M where
-- Porting note: new lemma
@[to_additive]
theorem Submonoid.coe_topologicalClosure (s : Submonoid M) :
- (s.topologicalClosure : Set M) = _root_.closure (s : Set M) := rfl
+ (s.topologicalClosure : Set M) = _root_.closure (s : Set M) := rfl
@[to_additive]
theorem Submonoid.le_topologicalClosure (s : Submonoid M) : s ≤ s.topologicalClosure :=
This makes it easier to refactor the order or inheritance structure of morphisms without having to change all of the anonymous constructors.
This is far from exhaustive.
@@ -391,7 +391,7 @@ theorem continuousMul_induced {M N F : Type*} [Mul M] [Mul N] [MulHomClass F M N
@[to_additive]
instance Subsemigroup.continuousMul [TopologicalSpace M] [Semigroup M] [ContinuousMul M]
(S : Subsemigroup M) : ContinuousMul S :=
- Inducing.continuousMul (⟨(↑), fun _ _ => rfl⟩ : MulHom S M) ⟨rfl⟩
+ Inducing.continuousMul ({ toFun := (↑), map_mul' := fun _ _ => rfl} : MulHom S M) ⟨rfl⟩
#align subsemigroup.has_continuous_mul Subsemigroup.continuousMul
#align add_subsemigroup.has_continuous_add AddSubsemigroup.continuousAdd
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -26,7 +26,7 @@ open Classical Set Filter TopologicalSpace
open Classical Topology BigOperators Pointwise
-variable {ι α X M N : Type _} [TopologicalSpace X]
+variable {ι α X M N : Type*} [TopologicalSpace X]
@[to_additive (attr := continuity)]
theorem continuous_one [TopologicalSpace M] [One M] : Continuous (1 : X → M) :=
@@ -161,7 +161,7 @@ theorem nhds_mul_nhds_one {M} [MulOneClass M] [TopologicalSpace M] [ContinuousMu
section tendsto_nhds
-variable {𝕜 : Type _} [Preorder 𝕜] [Zero 𝕜] [Mul 𝕜] [TopologicalSpace 𝕜] [ContinuousMul 𝕜]
+variable {𝕜 : Type*} [Preorder 𝕜] [Zero 𝕜] [Mul 𝕜] [TopologicalSpace 𝕜] [ContinuousMul 𝕜]
{l : Filter α} {f : α → 𝕜} {b c : 𝕜} (hb : 0 < b)
theorem Filter.TendstoNhdsWithinIoi.const_mul [PosMulStrictMono 𝕜] [PosMulReflectLT 𝕜]
@@ -233,7 +233,7 @@ instance Prod.continuousMul [TopologicalSpace N] [Mul N] [ContinuousMul N] :
(continuous_snd.fst'.mul continuous_snd.snd')⟩
@[to_additive]
-instance Pi.continuousMul {C : ι → Type _} [∀ i, TopologicalSpace (C i)] [∀ i, Mul (C i)]
+instance Pi.continuousMul {C : ι → Type*} [∀ i, TopologicalSpace (C i)] [∀ i, Mul (C i)]
[∀ i, ContinuousMul (C i)] : ContinuousMul (∀ i, C i) where
continuous_mul :=
continuous_pi fun i => (continuous_apply i).fst'.mul (continuous_apply i).snd'
@@ -306,7 +306,7 @@ end ContinuousMul
section PointwiseLimits
-variable (M₁ M₂ : Type _) [TopologicalSpace M₂] [T2Space M₂]
+variable (M₁ M₂ : Type*) [TopologicalSpace M₂] [T2Space M₂]
@[to_additive]
theorem isClosed_setOf_map_one [One M₁] [One M₂] : IsClosed { f : M₁ → M₂ | f 1 = 1 } :=
@@ -332,7 +332,7 @@ theorem isClosed_setOf_map_mul [Mul M₁] [Mul M₂] [ContinuousMul M₂] :
-- as declaring new variables.
variable {M₁ M₂}
variable [MulOneClass M₁] [MulOneClass M₂] [ContinuousMul M₂]
- {F : Type _} [MonoidHomClass F M₁ M₂] {l : Filter α}
+ {F : Type*} [MonoidHomClass F M₁ M₂] {l : Filter α}
/-- Construct a bundled monoid homomorphism `M₁ →* M₂` from a function `f` and a proof that it
belongs to the closure of the range of the coercion from `M₁ →* M₂` (or another type of bundled
@@ -372,7 +372,7 @@ theorem MonoidHom.isClosed_range_coe : IsClosed (Set.range ((↑) : (M₁ →* M
end PointwiseLimits
@[to_additive]
-theorem Inducing.continuousMul {M N F : Type _} [Mul M] [Mul N] [MulHomClass F M N]
+theorem Inducing.continuousMul {M N F : Type*} [Mul M] [Mul N] [MulHomClass F M N]
[TopologicalSpace M] [TopologicalSpace N] [ContinuousMul N] (f : F) (hf : Inducing f) :
ContinuousMul M :=
⟨hf.continuous_iff.2 <| by
@@ -381,7 +381,7 @@ theorem Inducing.continuousMul {M N F : Type _} [Mul M] [Mul N] [MulHomClass F M
#align inducing.has_continuous_add Inducing.continuousAdd
@[to_additive]
-theorem continuousMul_induced {M N F : Type _} [Mul M] [Mul N] [MulHomClass F M N]
+theorem continuousMul_induced {M N F : Type*} [Mul M] [Mul N] [MulHomClass F M N]
[TopologicalSpace N] [ContinuousMul N] (f : F) : @ContinuousMul M (induced f ‹_›) _ :=
letI := induced f ‹_›
Inducing.continuousMul f ⟨rfl⟩
@@ -648,7 +648,7 @@ multiplication by constants.
Notably, this instances applies when `R = A`, or when `[Algebra R A]` is available. -/
@[to_additive "If `R` acts on `A` via `A`, then continuous addition implies
continuous affine addition by constants."]
-instance (priority := 100) IsScalarTower.continuousConstSMul {R A : Type _} [Monoid A] [SMul R A]
+instance (priority := 100) IsScalarTower.continuousConstSMul {R A : Type*} [Monoid A] [SMul R A]
[IsScalarTower R A A] [TopologicalSpace A] [ContinuousMul A] : ContinuousConstSMul R A where
continuous_const_smul q := by
simp (config := { singlePass := true }) only [← smul_one_mul q (_ : A)]
@@ -664,7 +664,7 @@ Notably, this instances applies when `R = Aᵐᵒᵖ`.-/
continuous addition implies continuous affine addition by constants.
Notably, this instances applies when `R = Aᵃᵒᵖ`."]
-instance (priority := 100) SMulCommClass.continuousConstSMul {R A : Type _} [Monoid A] [SMul R A]
+instance (priority := 100) SMulCommClass.continuousConstSMul {R A : Type*} [Monoid A] [SMul R A]
[SMulCommClass R A A] [TopologicalSpace A] [ContinuousMul A] : ContinuousConstSMul R A where
continuous_const_smul q := by
simp (config := { singlePass := true }) only [← mul_smul_one q (_ : A)]
@@ -772,7 +772,7 @@ theorem continuousOn_finset_prod {f : ι → X → M} (s : Finset ι) {t : Set X
#align continuous_on_finset_sum continuousOn_finset_sum
@[to_additive]
-theorem eventuallyEq_prod {X M : Type _} [CommMonoid M] {s : Finset ι} {l : Filter X}
+theorem eventuallyEq_prod {X M : Type*} [CommMonoid M] {s : Finset ι} {l : Filter X}
{f g : ι → X → M} (hs : ∀ i ∈ s, f i =ᶠ[l] g i) : ∏ i in s, f i =ᶠ[l] ∏ i in s, g i := by
replace hs : ∀ᶠ x in l, ∀ i ∈ s, f i x = g i x
· rwa [eventually_all_finset]
@@ -784,7 +784,7 @@ theorem eventuallyEq_prod {X M : Type _} [CommMonoid M] {s : Finset ι} {l : Fil
open Function
@[to_additive]
-theorem LocallyFinite.exists_finset_mulSupport {M : Type _} [CommMonoid M] {f : ι → X → M}
+theorem LocallyFinite.exists_finset_mulSupport {M : Type*} [CommMonoid M] {f : ι → X → M}
(hf : LocallyFinite fun i => mulSupport <| f i) (x₀ : X) :
∃ I : Finset ι, ∀ᶠ x in 𝓝 x₀, (mulSupport fun i => f i x) ⊆ I := by
rcases hf x₀ with ⟨U, hxU, hUf⟩
@@ -795,7 +795,7 @@ theorem LocallyFinite.exists_finset_mulSupport {M : Type _} [CommMonoid M] {f :
#align locally_finite.exists_finset_support LocallyFinite.exists_finset_support
@[to_additive]
-theorem finprod_eventually_eq_prod {M : Type _} [CommMonoid M] {f : ι → X → M}
+theorem finprod_eventually_eq_prod {M : Type*} [CommMonoid M] {f : ι → X → M}
(hf : LocallyFinite fun i => mulSupport (f i)) (x : X) :
∃ s : Finset ι, ∀ᶠ y in 𝓝 x, ∏ᶠ i, f i y = ∏ i in s, f i y :=
let ⟨I, hI⟩ := hf.exists_finset_mulSupport x
@@ -832,7 +832,7 @@ instance [TopologicalSpace M] [Add M] [ContinuousAdd M] : ContinuousMul (Multipl
section LatticeOps
-variable {ι' : Sort _} [Mul M]
+variable {ι' : Sort*} [Mul M]
@[to_additive]
theorem continuousMul_sInf {ts : Set (TopologicalSpace M)}
@@ -54,7 +54,6 @@ Continuity in only the left/right argument can be stated using
class ContinuousMul (M : Type u) [TopologicalSpace M] [Mul M] : Prop where
continuous_mul : Continuous fun p : M × M => p.1 * p.2
#align has_continuous_mul ContinuousMul
--- #align has_continuous_add ContinuousAdd
section ContinuousMul
@@ -235,16 +234,16 @@ instance Prod.continuousMul [TopologicalSpace N] [Mul N] [ContinuousMul N] :
@[to_additive]
instance Pi.continuousMul {C : ι → Type _} [∀ i, TopologicalSpace (C i)] [∀ i, Mul (C i)]
- [∀ i, ContinuousMul (C i)] : ContinuousMul (∀ i, C i)
- where continuous_mul :=
+ [∀ i, ContinuousMul (C i)] : ContinuousMul (∀ i, C i) where
+ continuous_mul :=
continuous_pi fun i => (continuous_apply i).fst'.mul (continuous_apply i).snd'
#align pi.has_continuous_mul Pi.continuousMul
#align pi.has_continuous_add Pi.continuousAdd
-/-- A version of `pi.continuousMul` for non-dependent functions. It is needed because sometimes
-Lean 3 fails to use `pi.continuousMul` for non-dependent functions. -/
-@[to_additive "A version of `pi.continuousAdd` for non-dependent functions. It is needed
-because sometimes Lean fails to use `pi.continuousAdd` for non-dependent functions."]
+/-- A version of `Pi.continuousMul` for non-dependent functions. It is needed because sometimes
+Lean 3 fails to use `Pi.continuousMul` for non-dependent functions. -/
+@[to_additive "A version of `Pi.continuousAdd` for non-dependent functions. It is needed
+because sometimes Lean fails to use `Pi.continuousAdd` for non-dependent functions."]
instance Pi.continuousMul' : ContinuousMul (ι → M) :=
Pi.continuousMul
#align pi.has_continuous_mul' Pi.continuousMul'
@@ -427,8 +426,7 @@ theorem Submonoid.top_closure_mul_self_eq (s : Submonoid M) :
itself a submonoid. -/
@[to_additive "The (topological-space) closure of an additive submonoid of a space `M` with
`ContinuousAdd` is itself an additive submonoid."]
-def Submonoid.topologicalClosure (s : Submonoid M) : Submonoid M
- where
+def Submonoid.topologicalClosure (s : Submonoid M) : Submonoid M where
carrier := _root_.closure (s : Set M)
one_mem' := _root_.subset_closure s.one_mem
mul_mem' ha hb := s.top_closure_mul_self_subset ⟨_, _, ha, hb, rfl⟩
@@ -438,7 +436,7 @@ def Submonoid.topologicalClosure (s : Submonoid M) : Submonoid M
-- Porting note: new lemma
@[to_additive]
theorem Submonoid.coe_topologicalClosure (s : Submonoid M) :
- (s.topologicalClosure : Set M) = _root_.closure (s : Set M) := by rfl
+ (s.topologicalClosure : Set M) = _root_.closure (s : Set M) := rfl
@[to_additive]
theorem Submonoid.le_topologicalClosure (s : Submonoid M) : s ≤ s.topologicalClosure :=
@@ -652,9 +650,9 @@ Notably, this instances applies when `R = A`, or when `[Algebra R A]` is availab
continuous affine addition by constants."]
instance (priority := 100) IsScalarTower.continuousConstSMul {R A : Type _} [Monoid A] [SMul R A]
[IsScalarTower R A A] [TopologicalSpace A] [ContinuousMul A] : ContinuousConstSMul R A where
- continuous_const_smul q := by
- simp (config := { singlePass := true }) only [← smul_one_mul q (_ : A)]
- exact continuous_const.mul continuous_id
+ continuous_const_smul q := by
+ simp (config := { singlePass := true }) only [← smul_one_mul q (_ : A)]
+ exact continuous_const.mul continuous_id
#align is_scalar_tower.has_continuous_const_smul IsScalarTower.continuousConstSMul
#align vadd_assoc_class.has_continuous_const_vadd VAddAssocClass.continuousConstVAdd
@@ -668,9 +666,9 @@ continuous addition implies continuous affine addition by constants.
Notably, this instances applies when `R = Aᵃᵒᵖ`."]
instance (priority := 100) SMulCommClass.continuousConstSMul {R A : Type _} [Monoid A] [SMul R A]
[SMulCommClass R A A] [TopologicalSpace A] [ContinuousMul A] : ContinuousConstSMul R A where
- continuous_const_smul q := by
- simp (config := { singlePass := true }) only [← mul_smul_one q (_ : A)]
- exact continuous_id.mul continuous_const
+ continuous_const_smul q := by
+ simp (config := { singlePass := true }) only [← mul_smul_one q (_ : A)]
+ exact continuous_id.mul continuous_const
#align smul_comm_class.has_continuous_const_smul SMulCommClass.continuousConstSMul
#align vadd_comm_class.has_continuous_const_vadd VAddCommClass.continuousConstVAdd
@@ -778,7 +776,7 @@ theorem eventuallyEq_prod {X M : Type _} [CommMonoid M] {s : Finset ι} {l : Fil
{f g : ι → X → M} (hs : ∀ i ∈ s, f i =ᶠ[l] g i) : ∏ i in s, f i =ᶠ[l] ∏ i in s, g i := by
replace hs : ∀ᶠ x in l, ∀ i ∈ s, f i x = g i x
· rwa [eventually_all_finset]
- filter_upwards [hs]with x hx
+ filter_upwards [hs] with x hx
simp only [Finset.prod_apply, Finset.prod_congr rfl hx]
#align eventually_eq_prod eventuallyEq_prod
#align eventually_eq_sum eventuallyEq_sum
@@ -826,11 +824,11 @@ theorem continuous_finprod_cond {f : ι → X → M} {p : ι → Prop} (hc : ∀
end
-instance [TopologicalSpace M] [Mul M] [ContinuousMul M] : ContinuousAdd (Additive M)
- where continuous_add := @continuous_mul M _ _ _
+instance [TopologicalSpace M] [Mul M] [ContinuousMul M] : ContinuousAdd (Additive M) where
+ continuous_add := @continuous_mul M _ _ _
-instance [TopologicalSpace M] [Add M] [ContinuousAdd M] : ContinuousMul (Multiplicative M)
- where continuous_mul := @continuous_add M _ _ _
+instance [TopologicalSpace M] [Add M] [ContinuousAdd M] : ContinuousMul (Multiplicative M) where
+ continuous_mul := @continuous_add M _ _ _
section LatticeOps
@@ -2,11 +2,6 @@
Copyright (c) 2017 Johannes Hölzl. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Mario Carneiro
-
-! This file was ported from Lean 3 source module topology.algebra.monoid
-! leanprover-community/mathlib commit 1ac8d4304efba9d03fa720d06516fac845aa5353
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Algebra.BigOperators.Finprod
import Mathlib.Order.Filter.Pointwise
@@ -14,6 +9,8 @@ import Mathlib.Topology.Algebra.MulAction
import Mathlib.Algebra.BigOperators.Pi
import Mathlib.Topology.ContinuousFunction.Basic
+#align_import topology.algebra.monoid from "leanprover-community/mathlib"@"1ac8d4304efba9d03fa720d06516fac845aa5353"
+
/-!
# Theory of topological monoids
∑'
precedence (#5615)
∑
, ∏
and variants).([^a-zA-Zα-ωΑ-Ω'𝓝ℳ₀𝕂ₛ)]) \(([∑∏][^()∑∏]*,[^()∑∏:]*)\) ([⊂⊆=<≤])
replaced by $1 $2 $3
@@ -778,7 +778,7 @@ theorem continuousOn_finset_prod {f : ι → X → M} (s : Finset ι) {t : Set X
@[to_additive]
theorem eventuallyEq_prod {X M : Type _} [CommMonoid M] {s : Finset ι} {l : Filter X}
- {f g : ι → X → M} (hs : ∀ i ∈ s, f i =ᶠ[l] g i) : (∏ i in s, f i) =ᶠ[l] ∏ i in s, g i := by
+ {f g : ι → X → M} (hs : ∀ i ∈ s, f i =ᶠ[l] g i) : ∏ i in s, f i =ᶠ[l] ∏ i in s, g i := by
replace hs : ∀ᶠ x in l, ∀ i ∈ s, f i x = g i x
· rwa [eventually_all_finset]
filter_upwards [hs]with x hx
@@ -802,7 +802,7 @@ theorem LocallyFinite.exists_finset_mulSupport {M : Type _} [CommMonoid M] {f :
@[to_additive]
theorem finprod_eventually_eq_prod {M : Type _} [CommMonoid M] {f : ι → X → M}
(hf : LocallyFinite fun i => mulSupport (f i)) (x : X) :
- ∃ s : Finset ι, ∀ᶠ y in 𝓝 x, (∏ᶠ i, f i y) = ∏ i in s, f i y :=
+ ∃ s : Finset ι, ∀ᶠ y in 𝓝 x, ∏ᶠ i, f i y = ∏ i in s, f i y :=
let ⟨I, hI⟩ := hf.exists_finset_mulSupport x
⟨I, hI.mono fun _ hy => finprod_eq_prod_of_mulSupport_subset _ fun _ hi => hy hi⟩
#align finprod_eventually_eq_prod finprod_eventually_eq_prod
@@ -283,8 +283,11 @@ theorem ContinuousMul.of_nhds_one {M : Type u} [Monoid M] [TopologicalSpace M]
map (uncurry (· * ·)) (𝓝 (x₀, y₀)) = map (uncurry (· * ·)) (𝓝 x₀ ×ˢ 𝓝 y₀) :=
by rw [nhds_prod_eq]
_ = map (fun p : M × M => x₀ * p.1 * (p.2 * y₀)) (𝓝 1 ×ˢ 𝓝 1) :=
- by simp_rw [uncurry, hleft x₀, hright y₀, prod_map_map_eq, Filter.map_map, Function.comp]
-- Porting note: `rw` was able to prove this
+ -- Now it fails with `failed to rewrite using equation theorems for 'Function.uncurry'`
+ -- and `failed to rewrite using equation theorems for 'Function.comp'`.
+ -- Removing those two lemmas, the `rw` would succeed, but then needs a `rfl`.
+ by simp_rw [uncurry, hleft x₀, hright y₀, prod_map_map_eq, Filter.map_map, Function.comp]
_ = map ((fun x => x₀ * x) ∘ fun x => x * y₀) (map (uncurry (· * ·)) (𝓝 1 ×ˢ 𝓝 1)) :=
by rw [key, ← Filter.map_map]
_ ≤ map ((fun x : M => x₀ * x) ∘ fun x => x * y₀) (𝓝 1) := map_mono hmul
I wrote a script to find lines that contain an odd number of backticks
@@ -870,7 +870,7 @@ namespace ContinuousMap
variable [Mul X] [ContinuousMul X]
/-- The continuous map `fun y => y * x` -/
-@[to_additive "The continuous map `fun y => y + x"]
+@[to_additive "The continuous map `fun y => y + x`"]
protected def mulRight (x : X) : C(X, X) :=
mk _ (continuous_mul_right x)
#align continuous_map.mul_right ContinuousMap.mulRight
@@ -883,7 +883,7 @@ theorem coe_mulRight (x : X) : ⇑(ContinuousMap.mulRight x) = fun y => y * x :=
#align continuous_map.coe_add_right ContinuousMap.coe_addRight
/-- The continuous map `fun y => x * y` -/
-@[to_additive "The continuous map `fun y => x + y"]
+@[to_additive "The continuous map `fun y => x + y`"]
protected def mulLeft (x : X) : C(X, X) :=
mk _ (continuous_mul_left x)
#align continuous_map.mul_left ContinuousMap.mulLeft
The other files were already fixed in Lean4. I also tried doing a sweep of the rest of the files to make sure there was no more broken ones - it seems ok.
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Mario Carneiro
! This file was ported from Lean 3 source module topology.algebra.monoid
-! leanprover-community/mathlib commit 6efec6bb9fcaed3cf1baaddb2eaadd8a2a06679c
+! leanprover-community/mathlib commit 1ac8d4304efba9d03fa720d06516fac845aa5353
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -876,7 +876,7 @@ protected def mulRight (x : X) : C(X, X) :=
#align continuous_map.mul_right ContinuousMap.mulRight
#align continuous_map.add_right ContinuousMap.addRight
-@[to_additive, simp]
+@[to_additive (attr := simp)]
theorem coe_mulRight (x : X) : ⇑(ContinuousMap.mulRight x) = fun y => y * x :=
rfl
#align continuous_map.coe_mul_right ContinuousMap.coe_mulRight
@@ -889,7 +889,7 @@ protected def mulLeft (x : X) : C(X, X) :=
#align continuous_map.mul_left ContinuousMap.mulLeft
#align continuous_map.add_left ContinuousMap.addLeft
-@[to_additive, simp]
+@[to_additive (attr := simp)]
theorem coe_mulLeft (x : X) : ⇑(ContinuousMap.mulLeft x) = fun y => x * y :=
rfl
#align continuous_map.coe_mul_left ContinuousMap.coe_mulLeft
@@ -341,7 +341,7 @@ homomorphisms that has a `MonoidHomClass` instance) to `M₁ → M₂`. -/
@[to_additive (attr := simps (config := .asFn))
"Construct a bundled additive monoid homomorphism `M₁ →+ M₂` from a function `f`
and a proof that it belongs to the closure of the range of the coercion from `M₁ →+ M₂` (or another
-type of bundled homomorphisms that has a `add_monoid_hom_class` instance) to `M₁ → M₂`."]
+type of bundled homomorphisms that has an `AddMonoidHomClass` instance) to `M₁ → M₂`."]
def monoidHomOfMemClosureRangeCoe (f : M₁ → M₂)
(hf : f ∈ closure (range fun (f : F) (x : M₁) => f x)) : M₁ →* M₂
where
@@ -503,7 +503,7 @@ theorem exists_nhds_one_split4 {u : Set M} (hu : u ∈ 𝓝 (1 : M)) :
/-- Given a neighborhood `U` of `1` there is an open neighborhood `V` of `1`
such that `VV ⊆ U`. -/
-@[to_additive "Given a open neighborhood `U` of `0` there is a open neighborhood `V` of `0`
+@[to_additive "Given an open neighborhood `U` of `0` there is an open neighborhood `V` of `0`
such that `V + V ⊆ U`."]
theorem exists_open_nhds_one_mul_subset {U : Set M} (hU : U ∈ 𝓝 (1 : M)) :
∃ V : Set M, IsOpen V ∧ (1 : M) ∈ V ∧ V * V ⊆ U := by
@@ -818,7 +818,7 @@ theorem continuous_finprod {f : ι → X → M} (hc : ∀ i, Continuous (f i))
@[to_additive]
theorem continuous_finprod_cond {f : ι → X → M} {p : ι → Prop} (hc : ∀ i, p i → Continuous (f i))
(hf : LocallyFinite fun i => mulSupport (f i)) :
- Continuous fun x => ∏ᶠ (i) (_h : p i), f i x := by
+ Continuous fun x => ∏ᶠ (i) (_ : p i), f i x := by
simp only [← finprod_subtype_eq_finprod_cond]
exact continuous_finprod (fun i => hc i i.2) (hf.comp_injective Subtype.coe_injective)
#align continuous_finprod_cond continuous_finprod_cond
SProd
to implement overloaded notation · ×ˢ ·
(#4200)
Currently, the following notations are changed from · ×ˢ ·
because Lean 4 can't deal with ambiguous notations.
| Definition | Notation |
| :
Co-authored-by: Jeremy Tan Jie Rui <reddeloostw@gmail.com> Co-authored-by: Kyle Miller <kmill31415@gmail.com> Co-authored-by: Chris Hughes <chrishughes24@gmail.com>
@@ -266,7 +266,7 @@ open Function
@[to_additive]
theorem ContinuousMul.of_nhds_one {M : Type u} [Monoid M] [TopologicalSpace M]
- (hmul : Tendsto (uncurry ((· * ·) : M → M → M)) (𝓝 1 ×ᶠ 𝓝 1) <| 𝓝 1)
+ (hmul : Tendsto (uncurry ((· * ·) : M → M → M)) (𝓝 1 ×ˢ 𝓝 1) <| 𝓝 1)
(hleft : ∀ x₀ : M, 𝓝 x₀ = map (fun x => x₀ * x) (𝓝 1))
(hright : ∀ x₀ : M, 𝓝 x₀ = map (fun x => x * x₀) (𝓝 1)) : ContinuousMul M :=
⟨by
@@ -280,12 +280,12 @@ theorem ContinuousMul.of_nhds_one {M : Type u} [Monoid M] [TopologicalSpace M]
ext x
simp [mul_assoc]
calc
- map (uncurry (· * ·)) (𝓝 (x₀, y₀)) = map (uncurry (· * ·)) (𝓝 x₀ ×ᶠ 𝓝 y₀) :=
+ map (uncurry (· * ·)) (𝓝 (x₀, y₀)) = map (uncurry (· * ·)) (𝓝 x₀ ×ˢ 𝓝 y₀) :=
by rw [nhds_prod_eq]
- _ = map (fun p : M × M => x₀ * p.1 * (p.2 * y₀)) (𝓝 1 ×ᶠ 𝓝 1) :=
+ _ = map (fun p : M × M => x₀ * p.1 * (p.2 * y₀)) (𝓝 1 ×ˢ 𝓝 1) :=
by simp_rw [uncurry, hleft x₀, hright y₀, prod_map_map_eq, Filter.map_map, Function.comp]
-- Porting note: `rw` was able to prove this
- _ = map ((fun x => x₀ * x) ∘ fun x => x * y₀) (map (uncurry (· * ·)) (𝓝 1 ×ᶠ 𝓝 1)) :=
+ _ = map ((fun x => x₀ * x) ∘ fun x => x * y₀) (map (uncurry (· * ·)) (𝓝 1 ×ˢ 𝓝 1)) :=
by rw [key, ← Filter.map_map]
_ ≤ map ((fun x : M => x₀ * x) ∘ fun x => x * y₀) (𝓝 1) := map_mono hmul
_ = 𝓝 (x₀ * y₀) := by
@@ -295,7 +295,7 @@ theorem ContinuousMul.of_nhds_one {M : Type u} [Monoid M] [TopologicalSpace M]
@[to_additive]
theorem continuousMul_of_comm_of_nhds_one (M : Type u) [CommMonoid M] [TopologicalSpace M]
- (hmul : Tendsto (uncurry ((· * ·) : M → M → M)) (𝓝 1 ×ᶠ 𝓝 1) (𝓝 1))
+ (hmul : Tendsto (uncurry ((· * ·) : M → M → M)) (𝓝 1 ×ˢ 𝓝 1) (𝓝 1))
(hleft : ∀ x₀ : M, 𝓝 x₀ = map (fun x => x₀ * x) (𝓝 1)) : ContinuousMul M := by
apply ContinuousMul.of_nhds_one hmul hleft
intro x₀
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>
@@ -320,8 +320,8 @@ theorem isClosed_setOf_map_mul [Mul M₁] [Mul M₂] [ContinuousMul M₂] :
IsClosed { f : M₁ → M₂ | ∀ x y, f (x * y) = f x * f y } := by
simp only [setOf_forall]
exact
- isClosed_interᵢ fun x =>
- isClosed_interᵢ fun y =>
+ isClosed_iInter fun x =>
+ isClosed_iInter fun y =>
isClosed_eq (continuous_apply _)
-- Porting note: proof was:
-- `((continuous_apply _).mul (continuous_apply _))`
@@ -837,28 +837,28 @@ section LatticeOps
variable {ι' : Sort _} [Mul M]
@[to_additive]
-theorem continuousMul_infₛ {ts : Set (TopologicalSpace M)}
- (h : ∀ t ∈ ts, @ContinuousMul M t _) : @ContinuousMul M (infₛ ts) _ :=
- letI := infₛ ts
+theorem continuousMul_sInf {ts : Set (TopologicalSpace M)}
+ (h : ∀ t ∈ ts, @ContinuousMul M t _) : @ContinuousMul M (sInf ts) _ :=
+ letI := sInf ts
{ continuous_mul :=
- continuous_infₛ_rng.2 fun t ht =>
- continuous_infₛ_dom₂ ht ht (@ContinuousMul.continuous_mul M t _ (h t ht)) }
-#align has_continuous_mul_Inf continuousMul_infₛ
-#align has_continuous_add_Inf continuousAdd_infₛ
+ continuous_sInf_rng.2 fun t ht =>
+ continuous_sInf_dom₂ ht ht (@ContinuousMul.continuous_mul M t _ (h t ht)) }
+#align has_continuous_mul_Inf continuousMul_sInf
+#align has_continuous_add_Inf continuousAdd_sInf
@[to_additive]
-theorem continuousMul_infᵢ {ts : ι' → TopologicalSpace M}
+theorem continuousMul_iInf {ts : ι' → TopologicalSpace M}
(h' : ∀ i, @ContinuousMul M (ts i) _) : @ContinuousMul M (⨅ i, ts i) _ := by
- rw [← infₛ_range]
- exact continuousMul_infₛ (Set.forall_range_iff.mpr h')
-#align has_continuous_mul_infi continuousMul_infᵢ
-#align has_continuous_add_infi continuousAdd_infᵢ
+ rw [← sInf_range]
+ exact continuousMul_sInf (Set.forall_range_iff.mpr h')
+#align has_continuous_mul_infi continuousMul_iInf
+#align has_continuous_add_infi continuousAdd_iInf
@[to_additive]
theorem continuousMul_inf {t₁ t₂ : TopologicalSpace M} (h₁ : @ContinuousMul M t₁ _)
(h₂ : @ContinuousMul M t₂ _) : @ContinuousMul M (t₁ ⊓ t₂) _ := by
- rw [inf_eq_infᵢ]
- refine' continuousMul_infᵢ fun b => _
+ rw [inf_eq_iInf]
+ refine' continuousMul_iInf fun b => _
cases b <;> assumption
#align has_continuous_mul_inf continuousMul_inf
#align has_continuous_add_inf continuousAdd_inf
by
s! (#3825)
This PR puts, with one exception, every single remaining by
that lies all by itself on its own line to the previous line, thus matching the current behaviour of start-port.sh
. The exception is when the by
begins the second or later argument to a tuple or anonymous constructor; see https://github.com/leanprover-community/mathlib4/pull/3825#discussion_r1186702599.
Essentially this is s/\n *by$/ by/g
, but with manual editing to satisfy the linter's max-100-char-line requirement. The Python style linter is also modified to catch these "isolated by
s".
@@ -272,14 +272,11 @@ theorem ContinuousMul.of_nhds_one {M : Type u} [Monoid M] [TopologicalSpace M]
⟨by
rw [continuous_iff_continuousAt]
rintro ⟨x₀, y₀⟩
- have key :
- (fun p : M × M => x₀ * p.1 * (p.2 * y₀)) =
- ((fun x => x₀ * x) ∘ fun x => x * y₀) ∘ uncurry (· * ·) :=
- by
+ have key : (fun p : M × M => x₀ * p.1 * (p.2 * y₀)) =
+ ((fun x => x₀ * x) ∘ fun x => x * y₀) ∘ uncurry (· * ·) := by
ext p
simp [uncurry, mul_assoc]
- have key₂ : ((fun x => x₀ * x) ∘ fun x => y₀ * x) = fun x => x₀ * y₀ * x :=
- by
+ have key₂ : ((fun x => x₀ * x) ∘ fun x => y₀ * x) = fun x => x₀ * y₀ * x := by
ext x
simp [mul_assoc]
calc
@@ -291,8 +288,8 @@ theorem ContinuousMul.of_nhds_one {M : Type u} [Monoid M] [TopologicalSpace M]
_ = map ((fun x => x₀ * x) ∘ fun x => x * y₀) (map (uncurry (· * ·)) (𝓝 1 ×ᶠ 𝓝 1)) :=
by rw [key, ← Filter.map_map]
_ ≤ map ((fun x : M => x₀ * x) ∘ fun x => x * y₀) (𝓝 1) := map_mono hmul
- _ = 𝓝 (x₀ * y₀) := by rw [← Filter.map_map, ← hright, hleft y₀, Filter.map_map, key₂, ← hleft]
- ⟩
+ _ = 𝓝 (x₀ * y₀) := by
+ rw [← Filter.map_map, ← hright, hleft y₀, Filter.map_map, key₂, ← hleft]⟩
#align has_continuous_mul.of_nhds_one ContinuousMul.of_nhds_one
#align has_continuous_add.of_nhds_zero ContinuousAdd.of_nhds_zero
@@ -548,8 +545,8 @@ theorem continuous_list_prod {f : ι → X → M} (l : List ι) (h : ∀ i ∈ l
@[to_additive]
theorem continuousOn_list_prod {f : ι → X → M} (l : List ι) {t : Set X}
- (h : ∀ i ∈ l, ContinuousOn (f i) t) : ContinuousOn (fun a => (l.map fun i => f i a).prod) t :=
- by
+ (h : ∀ i ∈ l, ContinuousOn (f i) t) :
+ ContinuousOn (fun a => (l.map fun i => f i a).prod) t := by
intro x hx
rw [continuousWithinAt_iff_continuousAt_restrict _ hx]
refine' tendsto_list_prod _ fun i hi => _
@@ -820,8 +817,8 @@ theorem continuous_finprod {f : ι → X → M} (hc : ∀ i, Continuous (f i))
@[to_additive]
theorem continuous_finprod_cond {f : ι → X → M} {p : ι → Prop} (hc : ∀ i, p i → Continuous (f i))
- (hf : LocallyFinite fun i => mulSupport (f i)) : Continuous fun x => ∏ᶠ (i) (_h : p i), f i x :=
- by
+ (hf : LocallyFinite fun i => mulSupport (f i)) :
+ Continuous fun x => ∏ᶠ (i) (_h : p i), f i x := by
simp only [← finprod_subtype_eq_finprod_cond]
exact continuous_finprod (fun i => hc i i.2) (hf.comp_injective Subtype.coe_injective)
#align continuous_finprod_cond continuous_finprod_cond
@@ -702,8 +702,8 @@ because the predicate `ContinuousInv` has not yet been defined. -/
@[to_additive "If addition on an additive monoid is continuous, then addition on the additive units
of the monoid, with respect to the induced topology, is continuous.
-Negation is also continuous, but we register this in a later file, `topology.algebra.group`, because
-the predicate `has_continuous_neg` has not yet been defined."]
+Negation is also continuous, but we register this in a later file, `Topology.Algebra.Group`, because
+the predicate `ContinuousNeg` has not yet been defined."]
instance : ContinuousMul αˣ :=
inducing_embedProduct.continuousMul (embedProduct α)
@@ -231,7 +231,8 @@ theorem ContinuousWithinAt.mul {f g : X → M} {s : Set X} {x : X} (hf : Continu
#align continuous_within_at.add ContinuousWithinAt.add
@[to_additive]
-instance [TopologicalSpace N] [Mul N] [ContinuousMul N] : ContinuousMul (M × N) :=
+instance Prod.continuousMul [TopologicalSpace N] [Mul N] [ContinuousMul N] :
+ ContinuousMul (M × N) :=
⟨(continuous_fst.fst'.mul continuous_fst.snd').prod_mk
(continuous_snd.fst'.mul continuous_snd.snd')⟩
Forward-port of changes to already-ported files topology.algebra.monoid
and topology.continuous_map.basic
made in mathlib3 PR [#18465](https://github.com/leanprover-community/mathlib/pull/18465)
Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Mario Carneiro
! This file was ported from Lean 3 source module topology.algebra.monoid
-! leanprover-community/mathlib commit dc6c365e751e34d100e80fe6e314c3c3e0fd2988
+! leanprover-community/mathlib commit 6efec6bb9fcaed3cf1baaddb2eaadd8a2a06679c
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -12,6 +12,7 @@ import Mathlib.Algebra.BigOperators.Finprod
import Mathlib.Order.Filter.Pointwise
import Mathlib.Topology.Algebra.MulAction
import Mathlib.Algebra.BigOperators.Pi
+import Mathlib.Topology.ContinuousFunction.Basic
/-!
# Theory of topological monoids
@@ -865,3 +866,35 @@ theorem continuousMul_inf {t₁ t₂ : TopologicalSpace M} (h₁ : @ContinuousMu
#align has_continuous_add_inf continuousAdd_inf
end LatticeOps
+
+namespace ContinuousMap
+
+variable [Mul X] [ContinuousMul X]
+
+/-- The continuous map `fun y => y * x` -/
+@[to_additive "The continuous map `fun y => y + x"]
+protected def mulRight (x : X) : C(X, X) :=
+ mk _ (continuous_mul_right x)
+#align continuous_map.mul_right ContinuousMap.mulRight
+#align continuous_map.add_right ContinuousMap.addRight
+
+@[to_additive, simp]
+theorem coe_mulRight (x : X) : ⇑(ContinuousMap.mulRight x) = fun y => y * x :=
+ rfl
+#align continuous_map.coe_mul_right ContinuousMap.coe_mulRight
+#align continuous_map.coe_add_right ContinuousMap.coe_addRight
+
+/-- The continuous map `fun y => x * y` -/
+@[to_additive "The continuous map `fun y => x + y"]
+protected def mulLeft (x : X) : C(X, X) :=
+ mk _ (continuous_mul_left x)
+#align continuous_map.mul_left ContinuousMap.mulLeft
+#align continuous_map.add_left ContinuousMap.addLeft
+
+@[to_additive, simp]
+theorem coe_mulLeft (x : X) : ⇑(ContinuousMap.mulLeft x) = fun y => x * y :=
+ rfl
+#align continuous_map.coe_mul_left ContinuousMap.coe_mulLeft
+#align continuous_map.coe_add_left ContinuousMap.coe_addLeft
+
+end ContinuousMap
@@ -339,10 +339,10 @@ variable [MulOneClass M₁] [MulOneClass M₂] [ContinuousMul M₂]
/-- Construct a bundled monoid homomorphism `M₁ →* M₂` from a function `f` and a proof that it
belongs to the closure of the range of the coercion from `M₁ →* M₂` (or another type of bundled
homomorphisms that has a `MonoidHomClass` instance) to `M₁ → M₂`. -/
-@[to_additive "Construct a bundled additive monoid homomorphism `M₁ →+ M₂` from a function `f`
+@[to_additive (attr := simps (config := .asFn))
+ "Construct a bundled additive monoid homomorphism `M₁ →+ M₂` from a function `f`
and a proof that it belongs to the closure of the range of the coercion from `M₁ →+ M₂` (or another
-type of bundled homomorphisms that has a `add_monoid_hom_class` instance) to `M₁ → M₂`.",
- simps (config := { fullyApplied := false })]
+type of bundled homomorphisms that has a `add_monoid_hom_class` instance) to `M₁ → M₂`."]
def monoidHomOfMemClosureRangeCoe (f : M₁ → M₂)
(hf : f ∈ closure (range fun (f : F) (x : M₁) => f x)) : M₁ →* M₂
where
@@ -353,9 +353,9 @@ def monoidHomOfMemClosureRangeCoe (f : M₁ → M₂)
#align add_monoid_hom_of_mem_closure_range_coe addMonoidHomOfMemClosureRangeCoe
/-- Construct a bundled monoid homomorphism from a pointwise limit of monoid homomorphisms. -/
-@[to_additive "Construct a bundled additive monoid homomorphism from a pointwise limit of additive
-monoid homomorphisms",
- simps! (config := { fullyApplied := false })]
+@[to_additive (attr := simps! (config := .asFn))
+ "Construct a bundled additive monoid homomorphism from a pointwise limit of additive
+monoid homomorphisms"]
def monoidHomOfTendsto (f : M₁ → M₂) (g : α → F) [l.NeBot]
(h : Tendsto (fun a x => g a x) l (𝓝 f)) : M₁ →* M₂ :=
monoidHomOfMemClosureRangeCoe f <|
The unported dependencies are