topology.metric_space.antilipschitz
⟷
Mathlib.Topology.MetricSpace.Antilipschitz
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)
@@ -192,7 +192,8 @@ namespace antilipschitz_with
open metric
-variables [pseudo_metric_space α] [pseudo_metric_space β] {K : ℝ≥0} {f : α → β}
+variables [pseudo_metric_space α] [pseudo_metric_space β] [pseudo_metric_space γ]
+variables {K : ℝ≥0} {f : α → β}
lemma bounded_preimage (hf : antilipschitz_with K f)
{s : set β} (hs : bounded s) :
@@ -219,6 +220,28 @@ begin
exact (hf.image_preimage _).symm
end
+lemma bounded_of_image2_left (f : α → β → γ) {K₁ : ℝ≥0}
+ (hf : ∀ b, antilipschitz_with K₁ (λ a, f a b))
+ {s : set α} {t : set β} (hst : bounded (set.image2 f s t)) :
+ bounded s ∨ bounded t :=
+begin
+ contrapose! hst,
+ obtain ⟨b, hb⟩ : t.nonempty := nonempty_of_unbounded hst.2,
+ have : ¬bounded (set.image2 f s {b}),
+ { intro h,
+ apply hst.1,
+ rw set.image2_singleton_right at h,
+ replace h := (hf b).bounded_preimage h,
+ refine h.mono (subset_preimage_image _ _) },
+ exact mt (bounded.mono (image2_subset subset.rfl (singleton_subset_iff.mpr hb))) this,
+end
+
+lemma bounded_of_image2_right {f : α → β → γ} {K₂ : ℝ≥0}
+ (hf : ∀ a, antilipschitz_with K₂ (f a))
+ {s : set α} {t : set β} (hst : bounded (set.image2 f s t)) :
+ bounded s ∨ bounded t :=
+or.symm $ bounded_of_image2_left (flip f) hf $ image2_swap f s t ▸ hst
+
end antilipschitz_with
lemma lipschitz_with.to_right_inverse [pseudo_emetric_space α] [pseudo_emetric_space β] {K : ℝ≥0}
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(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
@@ -3,7 +3,7 @@ Copyright (c) 2020 Yury Kudryashov. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yury Kudryashov
-/
-import Topology.MetricSpace.Lipschitz
+import Topology.EMetricSpace.Lipschitz
import Topology.UniformSpace.CompleteSeparated
#align_import topology.metric_space.antilipschitz from "leanprover-community/mathlib"@"c8f305514e0d47dfaa710f5a52f0d21b588e6328"
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -246,7 +246,7 @@ theorem isClosed_range {α β : Type _} [PseudoEMetricSpace α] [EMetricSpace β
theorem closedEmbedding {α : Type _} {β : Type _} [EMetricSpace α] [EMetricSpace β] {K : ℝ≥0}
{f : α → β} [CompleteSpace α] (hf : AntilipschitzWith K f) (hfc : UniformContinuous f) :
ClosedEmbedding f :=
- { (hf.UniformEmbedding hfc).Embedding with closed_range := hf.isClosed_range hfc }
+ { (hf.UniformEmbedding hfc).Embedding with isClosed_range := hf.isClosed_range hfc }
#align antilipschitz_with.closed_embedding AntilipschitzWith.closedEmbedding
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -196,7 +196,7 @@ theorem to_rightInverse (hf : AntilipschitzWith K f) {g : β → α} (hg : Funct
LipschitzWith K g := by
intro x y
have := hf (g x) (g y)
- rwa [hg x, hg y] at this
+ rwa [hg x, hg y] at this
#align antilipschitz_with.to_right_inverse AntilipschitzWith.to_rightInverse
-/
@@ -206,7 +206,7 @@ theorem comap_uniformity_le (hf : AntilipschitzWith K f) : (𝓤 β).comap (Prod
refine' ((uniformity_basis_edist.comap _).le_basis_iffₓ uniformity_basis_edist).2 fun ε h₀ => _
refine' ⟨K⁻¹ * ε, ENNReal.mul_pos (ENNReal.inv_ne_zero.2 ENNReal.coe_ne_top) h₀.ne', _⟩
refine' fun x hx => (hf x.1 x.2).trans_lt _
- rw [mul_comm, ← div_eq_mul_inv] at hx
+ rw [mul_comm, ← div_eq_mul_inv] at hx
rw [mul_comm]
exact ENNReal.mul_lt_of_lt_div hx
#align antilipschitz_with.comap_uniformity_le AntilipschitzWith.comap_uniformity_le
@@ -323,7 +323,7 @@ theorem isBounded_of_image2_left (f : α → β → γ) {K₁ : ℝ≥0}
have : ¬bounded (Set.image2 f s {b}) := by
intro h
apply hst.1
- rw [Set.image2_singleton_right] at h
+ rw [Set.image2_singleton_right] at h
replace h := (hf b).isBounded_preimage h
refine' h.mono (subset_preimage_image _ _)
exact mt (bounded.mono (image2_subset subset.rfl (singleton_subset_iff.mpr hb))) this
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -303,7 +303,7 @@ protected theorem properSpace {α : Type _} [MetricSpace α] {K : ℝ≥0} {f :
(hK : AntilipschitzWith K f) (f_cont : Continuous f) (hf : Function.Surjective f) :
ProperSpace β :=
by
- apply properSpace_of_compact_closedBall_of_le 0 fun x₀ r hr => _
+ apply ProperSpace.of_isCompact_closedBall_of_le 0 fun x₀ r hr => _
let K := f ⁻¹' closed_ball x₀ r
have A : IsClosed K := is_closed_ball.preimage f_cont
have B : bounded K := hK.bounded_preimage bounded_closed_ball
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -313,6 +313,7 @@ protected theorem properSpace {α : Type _} [MetricSpace α] {K : ℝ≥0} {f :
#align antilipschitz_with.proper_space AntilipschitzWith.properSpace
-/
+#print AntilipschitzWith.isBounded_of_image2_left /-
theorem isBounded_of_image2_left (f : α → β → γ) {K₁ : ℝ≥0}
(hf : ∀ b, AntilipschitzWith K₁ fun a => f a b) {s : Set α} {t : Set β}
(hst : IsBounded (Set.image2 f s t)) : IsBounded s ∨ IsBounded t :=
@@ -327,11 +328,14 @@ theorem isBounded_of_image2_left (f : α → β → γ) {K₁ : ℝ≥0}
refine' h.mono (subset_preimage_image _ _)
exact mt (bounded.mono (image2_subset subset.rfl (singleton_subset_iff.mpr hb))) this
#align antilipschitz_with.bounded_of_image2_left AntilipschitzWith.isBounded_of_image2_left
+-/
+#print AntilipschitzWith.isBounded_of_image2_right /-
theorem isBounded_of_image2_right {f : α → β → γ} {K₂ : ℝ≥0} (hf : ∀ a, AntilipschitzWith K₂ (f a))
{s : Set α} {t : Set β} (hst : IsBounded (Set.image2 f s t)) : IsBounded s ∨ IsBounded t :=
Or.symm <| isBounded_of_image2_left (flip f) hf <| image2_swap f s t ▸ hst
#align antilipschitz_with.bounded_of_image2_right AntilipschitzWith.isBounded_of_image2_right
+-/
end AntilipschitzWith
mathlib commit https://github.com/leanprover-community/mathlib/commit/c8f305514e0d47dfaa710f5a52f0d21b588e6328
@@ -6,7 +6,7 @@ Authors: Yury Kudryashov
import Topology.MetricSpace.Lipschitz
import Topology.UniformSpace.CompleteSeparated
-#align_import topology.metric_space.antilipschitz from "leanprover-community/mathlib"@"f47581155c818e6361af4e4fda60d27d020c226b"
+#align_import topology.metric_space.antilipschitz from "leanprover-community/mathlib"@"c8f305514e0d47dfaa710f5a52f0d21b588e6328"
/-!
# Antilipschitz functions
@@ -276,7 +276,9 @@ namespace AntilipschitzWith
open Metric
-variable [PseudoMetricSpace α] [PseudoMetricSpace β] {K : ℝ≥0} {f : α → β}
+variable [PseudoMetricSpace α] [PseudoMetricSpace β] [PseudoMetricSpace γ]
+
+variable {K : ℝ≥0} {f : α → β}
#print AntilipschitzWith.isBounded_preimage /-
theorem isBounded_preimage (hf : AntilipschitzWith K f) {s : Set β} (hs : IsBounded s) :
@@ -311,6 +313,26 @@ protected theorem properSpace {α : Type _} [MetricSpace α] {K : ℝ≥0} {f :
#align antilipschitz_with.proper_space AntilipschitzWith.properSpace
-/
+theorem isBounded_of_image2_left (f : α → β → γ) {K₁ : ℝ≥0}
+ (hf : ∀ b, AntilipschitzWith K₁ fun a => f a b) {s : Set α} {t : Set β}
+ (hst : IsBounded (Set.image2 f s t)) : IsBounded s ∨ IsBounded t :=
+ by
+ contrapose! hst
+ obtain ⟨b, hb⟩ : t.nonempty := nonempty_of_unbounded hst.2
+ have : ¬bounded (Set.image2 f s {b}) := by
+ intro h
+ apply hst.1
+ rw [Set.image2_singleton_right] at h
+ replace h := (hf b).isBounded_preimage h
+ refine' h.mono (subset_preimage_image _ _)
+ exact mt (bounded.mono (image2_subset subset.rfl (singleton_subset_iff.mpr hb))) this
+#align antilipschitz_with.bounded_of_image2_left AntilipschitzWith.isBounded_of_image2_left
+
+theorem isBounded_of_image2_right {f : α → β → γ} {K₂ : ℝ≥0} (hf : ∀ a, AntilipschitzWith K₂ (f a))
+ {s : Set α} {t : Set β} (hst : IsBounded (Set.image2 f s t)) : IsBounded s ∨ IsBounded t :=
+ Or.symm <| isBounded_of_image2_left (flip f) hf <| image2_swap f s t ▸ hst
+#align antilipschitz_with.bounded_of_image2_right AntilipschitzWith.isBounded_of_image2_right
+
end AntilipschitzWith
#print LipschitzWith.to_rightInverse /-
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,8 +3,8 @@ Copyright (c) 2020 Yury Kudryashov. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yury Kudryashov
-/
-import Mathbin.Topology.MetricSpace.Lipschitz
-import Mathbin.Topology.UniformSpace.CompleteSeparated
+import Topology.MetricSpace.Lipschitz
+import Topology.UniformSpace.CompleteSeparated
#align_import topology.metric_space.antilipschitz from "leanprover-community/mathlib"@"f47581155c818e6361af4e4fda60d27d020c226b"
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -278,20 +278,20 @@ open Metric
variable [PseudoMetricSpace α] [PseudoMetricSpace β] {K : ℝ≥0} {f : α → β}
-#print AntilipschitzWith.bounded_preimage /-
-theorem bounded_preimage (hf : AntilipschitzWith K f) {s : Set β} (hs : Bounded s) :
- Bounded (f ⁻¹' s) :=
+#print AntilipschitzWith.isBounded_preimage /-
+theorem isBounded_preimage (hf : AntilipschitzWith K f) {s : Set β} (hs : IsBounded s) :
+ IsBounded (f ⁻¹' s) :=
Exists.intro (K * diam s) fun x hx y hy =>
calc
dist x y ≤ K * dist (f x) (f y) := hf.le_mul_dist x y
_ ≤ K * diam s := mul_le_mul_of_nonneg_left (dist_le_diam_of_mem hs hx hy) K.2
-#align antilipschitz_with.bounded_preimage AntilipschitzWith.bounded_preimage
+#align antilipschitz_with.bounded_preimage AntilipschitzWith.isBounded_preimage
-/
#print AntilipschitzWith.tendsto_cobounded /-
theorem tendsto_cobounded (hf : AntilipschitzWith K f) : Tendsto f (cobounded α) (cobounded β) :=
compl_surjective.forall.2 fun s (hs : IsBounded s) =>
- Metric.isBounded_iff.2 <| hf.bounded_preimage <| Metric.isBounded_iff.1 hs
+ Metric.isBounded_iff.2 <| hf.isBounded_preimage <| Metric.isBounded_iff.1 hs
#align antilipschitz_with.tendsto_cobounded AntilipschitzWith.tendsto_cobounded
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -65,8 +65,8 @@ theorem antilipschitzWith_iff_le_mul_nndist :
#align antilipschitz_with_iff_le_mul_nndist antilipschitzWith_iff_le_mul_nndist
-/
-alias antilipschitzWith_iff_le_mul_nndist ↔ AntilipschitzWith.le_mul_nndist
- AntilipschitzWith.of_le_mul_nndist
+alias ⟨AntilipschitzWith.le_mul_nndist, AntilipschitzWith.of_le_mul_nndist⟩ :=
+ antilipschitzWith_iff_le_mul_nndist
#align antilipschitz_with.le_mul_nndist AntilipschitzWith.le_mul_nndist
#align antilipschitz_with.of_le_mul_nndist AntilipschitzWith.of_le_mul_nndist
@@ -77,8 +77,8 @@ theorem antilipschitzWith_iff_le_mul_dist :
#align antilipschitz_with_iff_le_mul_dist antilipschitzWith_iff_le_mul_dist
-/
-alias antilipschitzWith_iff_le_mul_dist ↔ AntilipschitzWith.le_mul_dist
- AntilipschitzWith.of_le_mul_dist
+alias ⟨AntilipschitzWith.le_mul_dist, AntilipschitzWith.of_le_mul_dist⟩ :=
+ antilipschitzWith_iff_le_mul_dist
#align antilipschitz_with.le_mul_dist AntilipschitzWith.le_mul_dist
#align antilipschitz_with.of_le_mul_dist AntilipschitzWith.of_le_mul_dist
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,15 +2,12 @@
Copyright (c) 2020 Yury Kudryashov. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yury Kudryashov
-
-! This file was ported from Lean 3 source module topology.metric_space.antilipschitz
-! leanprover-community/mathlib commit f47581155c818e6361af4e4fda60d27d020c226b
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Topology.MetricSpace.Lipschitz
import Mathbin.Topology.UniformSpace.CompleteSeparated
+#align_import topology.metric_space.antilipschitz from "leanprover-community/mathlib"@"f47581155c818e6361af4e4fda60d27d020c226b"
+
/-!
# Antilipschitz functions
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -43,34 +43,42 @@ def AntilipschitzWith [PseudoEMetricSpace α] [PseudoEMetricSpace β] (K : ℝ
#align antilipschitz_with AntilipschitzWith
-/
+#print AntilipschitzWith.edist_lt_top /-
theorem AntilipschitzWith.edist_lt_top [PseudoEMetricSpace α] [PseudoMetricSpace β] {K : ℝ≥0}
{f : α → β} (h : AntilipschitzWith K f) (x y : α) : edist x y < ⊤ :=
(h x y).trans_lt <| ENNReal.mul_lt_top ENNReal.coe_ne_top (edist_ne_top _ _)
#align antilipschitz_with.edist_lt_top AntilipschitzWith.edist_lt_top
+-/
+#print AntilipschitzWith.edist_ne_top /-
theorem AntilipschitzWith.edist_ne_top [PseudoEMetricSpace α] [PseudoMetricSpace β] {K : ℝ≥0}
{f : α → β} (h : AntilipschitzWith K f) (x y : α) : edist x y ≠ ⊤ :=
(h.edist_lt_top x y).Ne
#align antilipschitz_with.edist_ne_top AntilipschitzWith.edist_ne_top
+-/
section Metric
variable [PseudoMetricSpace α] [PseudoMetricSpace β] {K : ℝ≥0} {f : α → β}
+#print antilipschitzWith_iff_le_mul_nndist /-
theorem antilipschitzWith_iff_le_mul_nndist :
AntilipschitzWith K f ↔ ∀ x y, nndist x y ≤ K * nndist (f x) (f y) := by
simp only [AntilipschitzWith, edist_nndist]; norm_cast
#align antilipschitz_with_iff_le_mul_nndist antilipschitzWith_iff_le_mul_nndist
+-/
alias antilipschitzWith_iff_le_mul_nndist ↔ AntilipschitzWith.le_mul_nndist
AntilipschitzWith.of_le_mul_nndist
#align antilipschitz_with.le_mul_nndist AntilipschitzWith.le_mul_nndist
#align antilipschitz_with.of_le_mul_nndist AntilipschitzWith.of_le_mul_nndist
+#print antilipschitzWith_iff_le_mul_dist /-
theorem antilipschitzWith_iff_le_mul_dist :
AntilipschitzWith K f ↔ ∀ x y, dist x y ≤ K * dist (f x) (f y) := by
simp only [antilipschitzWith_iff_le_mul_nndist, dist_nndist]; norm_cast
#align antilipschitz_with_iff_le_mul_dist antilipschitzWith_iff_le_mul_dist
+-/
alias antilipschitzWith_iff_le_mul_dist ↔ AntilipschitzWith.le_mul_dist
AntilipschitzWith.of_le_mul_dist
@@ -79,14 +87,18 @@ alias antilipschitzWith_iff_le_mul_dist ↔ AntilipschitzWith.le_mul_dist
namespace AntilipschitzWith
+#print AntilipschitzWith.mul_le_nndist /-
theorem mul_le_nndist (hf : AntilipschitzWith K f) (x y : α) :
K⁻¹ * nndist x y ≤ nndist (f x) (f y) := by
simpa only [div_eq_inv_mul] using NNReal.div_le_of_le_mul' (hf.le_mul_nndist x y)
#align antilipschitz_with.mul_le_nndist AntilipschitzWith.mul_le_nndist
+-/
+#print AntilipschitzWith.mul_le_dist /-
theorem mul_le_dist (hf : AntilipschitzWith K f) (x y : α) :
(K⁻¹ * dist x y : ℝ) ≤ dist (f x) (f y) := by exact_mod_cast hf.mul_le_nndist x y
#align antilipschitz_with.mul_le_dist AntilipschitzWith.mul_le_dist
+-/
end AntilipschitzWith
@@ -110,25 +122,33 @@ protected def k (hf : AntilipschitzWith K f) : ℝ≥0 :=
#align antilipschitz_with.K AntilipschitzWith.k
-/
+#print AntilipschitzWith.injective /-
protected theorem injective {α : Type _} {β : Type _} [EMetricSpace α] [PseudoEMetricSpace β]
{K : ℝ≥0} {f : α → β} (hf : AntilipschitzWith K f) : Function.Injective f := fun x y h => by
simpa only [h, edist_self, MulZeroClass.mul_zero, edist_le_zero] using hf x y
#align antilipschitz_with.injective AntilipschitzWith.injective
+-/
+#print AntilipschitzWith.mul_le_edist /-
theorem mul_le_edist (hf : AntilipschitzWith K f) (x y : α) :
(K⁻¹ * edist x y : ℝ≥0∞) ≤ edist (f x) (f y) :=
by
rw [mul_comm, ← div_eq_mul_inv]
exact ENNReal.div_le_of_le_mul' (hf x y)
#align antilipschitz_with.mul_le_edist AntilipschitzWith.mul_le_edist
+-/
+#print AntilipschitzWith.ediam_preimage_le /-
theorem ediam_preimage_le (hf : AntilipschitzWith K f) (s : Set β) : diam (f ⁻¹' s) ≤ K * diam s :=
diam_le fun x hx y hy => (hf x y).trans <| mul_le_mul_left' (edist_le_diam_of_mem hx hy) K
#align antilipschitz_with.ediam_preimage_le AntilipschitzWith.ediam_preimage_le
+-/
+#print AntilipschitzWith.le_mul_ediam_image /-
theorem le_mul_ediam_image (hf : AntilipschitzWith K f) (s : Set α) : diam s ≤ K * diam (f '' s) :=
(diam_mono (subset_preimage_image _ _)).trans (hf.ediam_preimage_le (f '' s))
#align antilipschitz_with.le_mul_ediam_image AntilipschitzWith.le_mul_ediam_image
+-/
#print AntilipschitzWith.id /-
protected theorem id : AntilipschitzWith 1 (id : α → α) := fun x y => by
@@ -136,6 +156,7 @@ protected theorem id : AntilipschitzWith 1 (id : α → α) := fun x y => by
#align antilipschitz_with.id AntilipschitzWith.id
-/
+#print AntilipschitzWith.comp /-
theorem comp {Kg : ℝ≥0} {g : β → γ} (hg : AntilipschitzWith Kg g) {Kf : ℝ≥0} {f : α → β}
(hf : AntilipschitzWith Kf f) : AntilipschitzWith (Kf * Kg) (g ∘ f) := fun x y =>
calc
@@ -143,34 +164,46 @@ theorem comp {Kg : ℝ≥0} {g : β → γ} (hg : AntilipschitzWith Kg g) {Kf :
_ ≤ Kf * (Kg * edist (g (f x)) (g (f y))) := (ENNReal.mul_left_mono (hg _ _))
_ = _ := by rw [ENNReal.coe_mul, mul_assoc]
#align antilipschitz_with.comp AntilipschitzWith.comp
+-/
+#print AntilipschitzWith.restrict /-
theorem restrict (hf : AntilipschitzWith K f) (s : Set α) : AntilipschitzWith K (s.restrict f) :=
fun x y => hf x y
#align antilipschitz_with.restrict AntilipschitzWith.restrict
+-/
+#print AntilipschitzWith.codRestrict /-
theorem codRestrict (hf : AntilipschitzWith K f) {s : Set β} (hs : ∀ x, f x ∈ s) :
AntilipschitzWith K (s.codRestrict f hs) := fun x y => hf x y
#align antilipschitz_with.cod_restrict AntilipschitzWith.codRestrict
+-/
+#print AntilipschitzWith.to_rightInvOn' /-
theorem to_rightInvOn' {s : Set α} (hf : AntilipschitzWith K (s.restrict f)) {g : β → α} {t : Set β}
(g_maps : MapsTo g t s) (g_inv : RightInvOn g f t) : LipschitzWith K (t.restrict g) :=
fun x y => by
simpa only [restrict_apply, g_inv x.mem, g_inv y.mem, Subtype.edist_eq, Subtype.coe_mk] using
hf ⟨g x, g_maps x.mem⟩ ⟨g y, g_maps y.mem⟩
#align antilipschitz_with.to_right_inv_on' AntilipschitzWith.to_rightInvOn'
+-/
+#print AntilipschitzWith.to_rightInvOn /-
theorem to_rightInvOn (hf : AntilipschitzWith K f) {g : β → α} {t : Set β} (h : RightInvOn g f t) :
LipschitzWith K (t.restrict g) :=
(hf.restrict univ).to_rightInvOn' (mapsTo_univ g t) h
#align antilipschitz_with.to_right_inv_on AntilipschitzWith.to_rightInvOn
+-/
+#print AntilipschitzWith.to_rightInverse /-
theorem to_rightInverse (hf : AntilipschitzWith K f) {g : β → α} (hg : Function.RightInverse g f) :
LipschitzWith K g := by
intro x y
have := hf (g x) (g y)
rwa [hg x, hg y] at this
#align antilipschitz_with.to_right_inverse AntilipschitzWith.to_rightInverse
+-/
+#print AntilipschitzWith.comap_uniformity_le /-
theorem comap_uniformity_le (hf : AntilipschitzWith K f) : (𝓤 β).comap (Prod.map f f) ≤ 𝓤 α :=
by
refine' ((uniformity_basis_edist.comap _).le_basis_iffₓ uniformity_basis_edist).2 fun ε h₀ => _
@@ -180,34 +213,45 @@ theorem comap_uniformity_le (hf : AntilipschitzWith K f) : (𝓤 β).comap (Prod
rw [mul_comm]
exact ENNReal.mul_lt_of_lt_div hx
#align antilipschitz_with.comap_uniformity_le AntilipschitzWith.comap_uniformity_le
+-/
+#print AntilipschitzWith.uniformInducing /-
protected theorem uniformInducing (hf : AntilipschitzWith K f) (hfc : UniformContinuous f) :
UniformInducing f :=
⟨le_antisymm hf.comap_uniformity_le hfc.le_comap⟩
#align antilipschitz_with.uniform_inducing AntilipschitzWith.uniformInducing
+-/
+#print AntilipschitzWith.uniformEmbedding /-
protected theorem uniformEmbedding {α : Type _} {β : Type _} [EMetricSpace α] [PseudoEMetricSpace β]
{K : ℝ≥0} {f : α → β} (hf : AntilipschitzWith K f) (hfc : UniformContinuous f) :
UniformEmbedding f :=
⟨hf.UniformInducing hfc, hf.Injective⟩
#align antilipschitz_with.uniform_embedding AntilipschitzWith.uniformEmbedding
+-/
+#print AntilipschitzWith.isComplete_range /-
theorem isComplete_range [CompleteSpace α] (hf : AntilipschitzWith K f)
(hfc : UniformContinuous f) : IsComplete (range f) :=
(hf.UniformInducing hfc).isComplete_range
#align antilipschitz_with.is_complete_range AntilipschitzWith.isComplete_range
+-/
+#print AntilipschitzWith.isClosed_range /-
theorem isClosed_range {α β : Type _} [PseudoEMetricSpace α] [EMetricSpace β] [CompleteSpace α]
{f : α → β} {K : ℝ≥0} (hf : AntilipschitzWith K f) (hfc : UniformContinuous f) :
IsClosed (range f) :=
(hf.isComplete_range hfc).IsClosed
#align antilipschitz_with.is_closed_range AntilipschitzWith.isClosed_range
+-/
+#print AntilipschitzWith.closedEmbedding /-
theorem closedEmbedding {α : Type _} {β : Type _} [EMetricSpace α] [EMetricSpace β] {K : ℝ≥0}
{f : α → β} [CompleteSpace α] (hf : AntilipschitzWith K f) (hfc : UniformContinuous f) :
ClosedEmbedding f :=
{ (hf.UniformEmbedding hfc).Embedding with closed_range := hf.isClosed_range hfc }
#align antilipschitz_with.closed_embedding AntilipschitzWith.closedEmbedding
+-/
#print AntilipschitzWith.subtype_coe /-
theorem subtype_coe (s : Set α) : AntilipschitzWith 1 (coe : s → α) :=
@@ -215,15 +259,19 @@ theorem subtype_coe (s : Set α) : AntilipschitzWith 1 (coe : s → α) :=
#align antilipschitz_with.subtype_coe AntilipschitzWith.subtype_coe
-/
+#print AntilipschitzWith.of_subsingleton /-
theorem of_subsingleton [Subsingleton α] {K : ℝ≥0} : AntilipschitzWith K f := fun x y => by
simp only [Subsingleton.elim x y, edist_self, zero_le]
#align antilipschitz_with.of_subsingleton AntilipschitzWith.of_subsingleton
+-/
+#print AntilipschitzWith.subsingleton /-
/-- If `f : α → β` is `0`-antilipschitz, then `α` is a `subsingleton`. -/
protected theorem subsingleton {α β} [EMetricSpace α] [PseudoEMetricSpace β] {f : α → β}
(h : AntilipschitzWith 0 f) : Subsingleton α :=
⟨fun x y => edist_le_zero.1 <| (h x y).trans_eq <| MulZeroClass.zero_mul _⟩
#align antilipschitz_with.subsingleton AntilipschitzWith.subsingleton
+-/
end AntilipschitzWith
@@ -233,6 +281,7 @@ open Metric
variable [PseudoMetricSpace α] [PseudoMetricSpace β] {K : ℝ≥0} {f : α → β}
+#print AntilipschitzWith.bounded_preimage /-
theorem bounded_preimage (hf : AntilipschitzWith K f) {s : Set β} (hs : Bounded s) :
Bounded (f ⁻¹' s) :=
Exists.intro (K * diam s) fun x hx y hy =>
@@ -240,11 +289,14 @@ theorem bounded_preimage (hf : AntilipschitzWith K f) {s : Set β} (hs : Bounded
dist x y ≤ K * dist (f x) (f y) := hf.le_mul_dist x y
_ ≤ K * diam s := mul_le_mul_of_nonneg_left (dist_le_diam_of_mem hs hx hy) K.2
#align antilipschitz_with.bounded_preimage AntilipschitzWith.bounded_preimage
+-/
+#print AntilipschitzWith.tendsto_cobounded /-
theorem tendsto_cobounded (hf : AntilipschitzWith K f) : Tendsto f (cobounded α) (cobounded β) :=
compl_surjective.forall.2 fun s (hs : IsBounded s) =>
Metric.isBounded_iff.2 <| hf.bounded_preimage <| Metric.isBounded_iff.1 hs
#align antilipschitz_with.tendsto_cobounded AntilipschitzWith.tendsto_cobounded
+-/
#print AntilipschitzWith.properSpace /-
/-- The image of a proper space under an expanding onto map is proper. -/
@@ -264,15 +316,19 @@ protected theorem properSpace {α : Type _} [MetricSpace α] {K : ℝ≥0} {f :
end AntilipschitzWith
+#print LipschitzWith.to_rightInverse /-
theorem LipschitzWith.to_rightInverse [PseudoEMetricSpace α] [PseudoEMetricSpace β] {K : ℝ≥0}
{f : α → β} (hf : LipschitzWith K f) {g : β → α} (hg : Function.RightInverse g f) :
AntilipschitzWith K g := fun x y => by simpa only [hg _] using hf (g x) (g y)
#align lipschitz_with.to_right_inverse LipschitzWith.to_rightInverse
+-/
+#print LipschitzWith.properSpace /-
/-- The preimage of a proper space under a Lipschitz homeomorphism is proper. -/
@[protected]
theorem LipschitzWith.properSpace [PseudoMetricSpace α] [MetricSpace β] [ProperSpace β] {K : ℝ≥0}
{f : α ≃ₜ β} (hK : LipschitzWith K f) : ProperSpace α :=
(hK.to_rightInverse f.right_inv).ProperSpace f.symm.Continuous f.symm.Surjective
#align lipschitz_with.proper_space LipschitzWith.properSpace
+-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -142,7 +142,6 @@ theorem comp {Kg : ℝ≥0} {g : β → γ} (hg : AntilipschitzWith Kg g) {Kf :
edist x y ≤ Kf * edist (f x) (f y) := hf x y
_ ≤ Kf * (Kg * edist (g (f x)) (g (f y))) := (ENNReal.mul_left_mono (hg _ _))
_ = _ := by rw [ENNReal.coe_mul, mul_assoc]
-
#align antilipschitz_with.comp AntilipschitzWith.comp
theorem restrict (hf : AntilipschitzWith K f) (s : Set α) : AntilipschitzWith K (s.restrict f) :=
@@ -240,7 +239,6 @@ theorem bounded_preimage (hf : AntilipschitzWith K f) {s : Set β} (hs : Bounded
calc
dist x y ≤ K * dist (f x) (f y) := hf.le_mul_dist x y
_ ≤ K * diam s := mul_le_mul_of_nonneg_left (dist_le_diam_of_mem hs hx hy) K.2
-
#align antilipschitz_with.bounded_preimage AntilipschitzWith.bounded_preimage
theorem tendsto_cobounded (hf : AntilipschitzWith K f) : Tendsto f (cobounded α) (cobounded β) :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -62,8 +62,8 @@ theorem antilipschitzWith_iff_le_mul_nndist :
simp only [AntilipschitzWith, edist_nndist]; norm_cast
#align antilipschitz_with_iff_le_mul_nndist antilipschitzWith_iff_le_mul_nndist
-alias antilipschitzWith_iff_le_mul_nndist ↔
- AntilipschitzWith.le_mul_nndist AntilipschitzWith.of_le_mul_nndist
+alias antilipschitzWith_iff_le_mul_nndist ↔ AntilipschitzWith.le_mul_nndist
+ AntilipschitzWith.of_le_mul_nndist
#align antilipschitz_with.le_mul_nndist AntilipschitzWith.le_mul_nndist
#align antilipschitz_with.of_le_mul_nndist AntilipschitzWith.of_le_mul_nndist
@@ -72,8 +72,8 @@ theorem antilipschitzWith_iff_le_mul_dist :
simp only [antilipschitzWith_iff_le_mul_nndist, dist_nndist]; norm_cast
#align antilipschitz_with_iff_le_mul_dist antilipschitzWith_iff_le_mul_dist
-alias antilipschitzWith_iff_le_mul_dist ↔
- AntilipschitzWith.le_mul_dist AntilipschitzWith.of_le_mul_dist
+alias antilipschitzWith_iff_le_mul_dist ↔ AntilipschitzWith.le_mul_dist
+ AntilipschitzWith.of_le_mul_dist
#align antilipschitz_with.le_mul_dist AntilipschitzWith.le_mul_dist
#align antilipschitz_with.of_le_mul_dist AntilipschitzWith.of_le_mul_dist
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -169,7 +169,7 @@ theorem to_rightInverse (hf : AntilipschitzWith K f) {g : β → α} (hg : Funct
LipschitzWith K g := by
intro x y
have := hf (g x) (g y)
- rwa [hg x, hg y] at this
+ rwa [hg x, hg y] at this
#align antilipschitz_with.to_right_inverse AntilipschitzWith.to_rightInverse
theorem comap_uniformity_le (hf : AntilipschitzWith K f) : (𝓤 β).comap (Prod.map f f) ≤ 𝓤 α :=
@@ -177,7 +177,7 @@ theorem comap_uniformity_le (hf : AntilipschitzWith K f) : (𝓤 β).comap (Prod
refine' ((uniformity_basis_edist.comap _).le_basis_iffₓ uniformity_basis_edist).2 fun ε h₀ => _
refine' ⟨K⁻¹ * ε, ENNReal.mul_pos (ENNReal.inv_ne_zero.2 ENNReal.coe_ne_top) h₀.ne', _⟩
refine' fun x hx => (hf x.1 x.2).trans_lt _
- rw [mul_comm, ← div_eq_mul_inv] at hx
+ rw [mul_comm, ← div_eq_mul_inv] at hx
rw [mul_comm]
exact ENNReal.mul_lt_of_lt_div hx
#align antilipschitz_with.comap_uniformity_le AntilipschitzWith.comap_uniformity_le
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -31,7 +31,7 @@ we do not have a `posreal` type.
variable {α : Type _} {β : Type _} {γ : Type _}
-open NNReal ENNReal uniformity
+open scoped NNReal ENNReal uniformity
open Set Filter Bornology
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -43,23 +43,11 @@ def AntilipschitzWith [PseudoEMetricSpace α] [PseudoEMetricSpace β] (K : ℝ
#align antilipschitz_with AntilipschitzWith
-/
-/- warning: antilipschitz_with.edist_lt_top -> AntilipschitzWith.edist_lt_top is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β _inst_1 (PseudoMetricSpace.toPseudoEMetricSpace.{u2} β _inst_2) K f) -> (forall (x : α) (y : α), LT.lt.{0} ENNReal (Preorder.toHasLt.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y) (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u2} α] [_inst_2 : PseudoMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β _inst_1 (PseudoMetricSpace.toPseudoEMetricSpace.{u1} β _inst_2) K f) -> (forall (x : α) (y : α), LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EDist.edist.{u2} α (PseudoEMetricSpace.toEDist.{u2} α _inst_1) x y) (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))
-Case conversion may be inaccurate. Consider using '#align antilipschitz_with.edist_lt_top AntilipschitzWith.edist_lt_topₓ'. -/
theorem AntilipschitzWith.edist_lt_top [PseudoEMetricSpace α] [PseudoMetricSpace β] {K : ℝ≥0}
{f : α → β} (h : AntilipschitzWith K f) (x y : α) : edist x y < ⊤ :=
(h x y).trans_lt <| ENNReal.mul_lt_top ENNReal.coe_ne_top (edist_ne_top _ _)
#align antilipschitz_with.edist_lt_top AntilipschitzWith.edist_lt_top
-/- warning: antilipschitz_with.edist_ne_top -> AntilipschitzWith.edist_ne_top is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β _inst_1 (PseudoMetricSpace.toPseudoEMetricSpace.{u2} β _inst_2) K f) -> (forall (x : α) (y : α), Ne.{1} ENNReal (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y) (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u2} α] [_inst_2 : PseudoMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β _inst_1 (PseudoMetricSpace.toPseudoEMetricSpace.{u1} β _inst_2) K f) -> (forall (x : α) (y : α), Ne.{1} ENNReal (EDist.edist.{u2} α (PseudoEMetricSpace.toEDist.{u2} α _inst_1) x y) (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))
-Case conversion may be inaccurate. Consider using '#align antilipschitz_with.edist_ne_top AntilipschitzWith.edist_ne_topₓ'. -/
theorem AntilipschitzWith.edist_ne_top [PseudoEMetricSpace α] [PseudoMetricSpace β] {K : ℝ≥0}
{f : α → β} (h : AntilipschitzWith K f) (x y : α) : edist x y ≠ ⊤ :=
(h.edist_lt_top x y).Ne
@@ -69,57 +57,21 @@ section Metric
variable [PseudoMetricSpace α] [PseudoMetricSpace β] {K : ℝ≥0} {f : α → β}
-/- warning: antilipschitz_with_iff_le_mul_nndist -> antilipschitzWith_iff_le_mul_nndist is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoMetricSpace.{u1} α] [_inst_2 : PseudoMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, Iff (AntilipschitzWith.{u1, u2} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u2} β _inst_2) K f) (forall (x : α) (y : α), LE.le.{0} NNReal (Preorder.toHasLe.{0} NNReal (PartialOrder.toPreorder.{0} NNReal (OrderedCancelAddCommMonoid.toPartialOrder.{0} NNReal (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} NNReal NNReal.strictOrderedSemiring)))) (NNDist.nndist.{u1} α (PseudoMetricSpace.toNNDist.{u1} α _inst_1) x y) (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (Distrib.toHasMul.{0} NNReal (NonUnitalNonAssocSemiring.toDistrib.{0} NNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))) K (NNDist.nndist.{u2} β (PseudoMetricSpace.toNNDist.{u2} β _inst_2) (f x) (f y))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u2} α] [_inst_2 : PseudoMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, Iff (AntilipschitzWith.{u2, u1} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u2} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u1} β _inst_2) K f) (forall (x : α) (y : α), LE.le.{0} NNReal (Preorder.toLE.{0} NNReal (PartialOrder.toPreorder.{0} NNReal (StrictOrderedSemiring.toPartialOrder.{0} NNReal instNNRealStrictOrderedSemiring))) (NNDist.nndist.{u2} α (PseudoMetricSpace.toNNDist.{u2} α _inst_1) x y) (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (CanonicallyOrderedCommSemiring.toMul.{0} NNReal instNNRealCanonicallyOrderedCommSemiring)) K (NNDist.nndist.{u1} β (PseudoMetricSpace.toNNDist.{u1} β _inst_2) (f x) (f y))))
-Case conversion may be inaccurate. Consider using '#align antilipschitz_with_iff_le_mul_nndist antilipschitzWith_iff_le_mul_nndistₓ'. -/
theorem antilipschitzWith_iff_le_mul_nndist :
AntilipschitzWith K f ↔ ∀ x y, nndist x y ≤ K * nndist (f x) (f y) := by
simp only [AntilipschitzWith, edist_nndist]; norm_cast
#align antilipschitz_with_iff_le_mul_nndist antilipschitzWith_iff_le_mul_nndist
-/- warning: antilipschitz_with.le_mul_nndist -> AntilipschitzWith.le_mul_nndist is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoMetricSpace.{u1} α] [_inst_2 : PseudoMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u2} β _inst_2) K f) -> (forall (x : α) (y : α), LE.le.{0} NNReal (Preorder.toHasLe.{0} NNReal (PartialOrder.toPreorder.{0} NNReal (OrderedCancelAddCommMonoid.toPartialOrder.{0} NNReal (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} NNReal NNReal.strictOrderedSemiring)))) (NNDist.nndist.{u1} α (PseudoMetricSpace.toNNDist.{u1} α _inst_1) x y) (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (Distrib.toHasMul.{0} NNReal (NonUnitalNonAssocSemiring.toDistrib.{0} NNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))) K (NNDist.nndist.{u2} β (PseudoMetricSpace.toNNDist.{u2} β _inst_2) (f x) (f y))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u2} α] [_inst_2 : PseudoMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u2} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u1} β _inst_2) K f) -> (forall (x : α) (y : α), LE.le.{0} NNReal (Preorder.toLE.{0} NNReal (PartialOrder.toPreorder.{0} NNReal (StrictOrderedSemiring.toPartialOrder.{0} NNReal instNNRealStrictOrderedSemiring))) (NNDist.nndist.{u2} α (PseudoMetricSpace.toNNDist.{u2} α _inst_1) x y) (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (CanonicallyOrderedCommSemiring.toMul.{0} NNReal instNNRealCanonicallyOrderedCommSemiring)) K (NNDist.nndist.{u1} β (PseudoMetricSpace.toNNDist.{u1} β _inst_2) (f x) (f y))))
-Case conversion may be inaccurate. Consider using '#align antilipschitz_with.le_mul_nndist AntilipschitzWith.le_mul_nndistₓ'. -/
-/- warning: antilipschitz_with.of_le_mul_nndist -> AntilipschitzWith.of_le_mul_nndist is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoMetricSpace.{u1} α] [_inst_2 : PseudoMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (forall (x : α) (y : α), LE.le.{0} NNReal (Preorder.toHasLe.{0} NNReal (PartialOrder.toPreorder.{0} NNReal (OrderedCancelAddCommMonoid.toPartialOrder.{0} NNReal (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} NNReal NNReal.strictOrderedSemiring)))) (NNDist.nndist.{u1} α (PseudoMetricSpace.toNNDist.{u1} α _inst_1) x y) (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (Distrib.toHasMul.{0} NNReal (NonUnitalNonAssocSemiring.toDistrib.{0} NNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))) K (NNDist.nndist.{u2} β (PseudoMetricSpace.toNNDist.{u2} β _inst_2) (f x) (f y)))) -> (AntilipschitzWith.{u1, u2} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u2} β _inst_2) K f)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u2} α] [_inst_2 : PseudoMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (forall (x : α) (y : α), LE.le.{0} NNReal (Preorder.toLE.{0} NNReal (PartialOrder.toPreorder.{0} NNReal (StrictOrderedSemiring.toPartialOrder.{0} NNReal instNNRealStrictOrderedSemiring))) (NNDist.nndist.{u2} α (PseudoMetricSpace.toNNDist.{u2} α _inst_1) x y) (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (CanonicallyOrderedCommSemiring.toMul.{0} NNReal instNNRealCanonicallyOrderedCommSemiring)) K (NNDist.nndist.{u1} β (PseudoMetricSpace.toNNDist.{u1} β _inst_2) (f x) (f y)))) -> (AntilipschitzWith.{u2, u1} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u2} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u1} β _inst_2) K f)
-Case conversion may be inaccurate. Consider using '#align antilipschitz_with.of_le_mul_nndist AntilipschitzWith.of_le_mul_nndistₓ'. -/
alias antilipschitzWith_iff_le_mul_nndist ↔
AntilipschitzWith.le_mul_nndist AntilipschitzWith.of_le_mul_nndist
#align antilipschitz_with.le_mul_nndist AntilipschitzWith.le_mul_nndist
#align antilipschitz_with.of_le_mul_nndist AntilipschitzWith.of_le_mul_nndist
-/- warning: antilipschitz_with_iff_le_mul_dist -> antilipschitzWith_iff_le_mul_dist is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoMetricSpace.{u1} α] [_inst_2 : PseudoMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, Iff (AntilipschitzWith.{u1, u2} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u2} β _inst_2) K f) (forall (x : α) (y : α), LE.le.{0} Real Real.hasLe (Dist.dist.{u1} α (PseudoMetricSpace.toHasDist.{u1} α _inst_1) x y) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal Real (HasLiftT.mk.{1, 1} NNReal Real (CoeTCₓ.coe.{1, 1} NNReal Real (coeBase.{1, 1} NNReal Real NNReal.Real.hasCoe))) K) (Dist.dist.{u2} β (PseudoMetricSpace.toHasDist.{u2} β _inst_2) (f x) (f y))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u2} α] [_inst_2 : PseudoMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, Iff (AntilipschitzWith.{u2, u1} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u2} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u1} β _inst_2) K f) (forall (x : α) (y : α), LE.le.{0} Real Real.instLEReal (Dist.dist.{u2} α (PseudoMetricSpace.toDist.{u2} α _inst_1) x y) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) (NNReal.toReal K) (Dist.dist.{u1} β (PseudoMetricSpace.toDist.{u1} β _inst_2) (f x) (f y))))
-Case conversion may be inaccurate. Consider using '#align antilipschitz_with_iff_le_mul_dist antilipschitzWith_iff_le_mul_distₓ'. -/
theorem antilipschitzWith_iff_le_mul_dist :
AntilipschitzWith K f ↔ ∀ x y, dist x y ≤ K * dist (f x) (f y) := by
simp only [antilipschitzWith_iff_le_mul_nndist, dist_nndist]; norm_cast
#align antilipschitz_with_iff_le_mul_dist antilipschitzWith_iff_le_mul_dist
-/- warning: antilipschitz_with.le_mul_dist -> AntilipschitzWith.le_mul_dist is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoMetricSpace.{u1} α] [_inst_2 : PseudoMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u2} β _inst_2) K f) -> (forall (x : α) (y : α), LE.le.{0} Real Real.hasLe (Dist.dist.{u1} α (PseudoMetricSpace.toHasDist.{u1} α _inst_1) x y) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal Real (HasLiftT.mk.{1, 1} NNReal Real (CoeTCₓ.coe.{1, 1} NNReal Real (coeBase.{1, 1} NNReal Real NNReal.Real.hasCoe))) K) (Dist.dist.{u2} β (PseudoMetricSpace.toHasDist.{u2} β _inst_2) (f x) (f y))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u2} α] [_inst_2 : PseudoMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u2} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u1} β _inst_2) K f) -> (forall (x : α) (y : α), LE.le.{0} Real Real.instLEReal (Dist.dist.{u2} α (PseudoMetricSpace.toDist.{u2} α _inst_1) x y) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) (NNReal.toReal K) (Dist.dist.{u1} β (PseudoMetricSpace.toDist.{u1} β _inst_2) (f x) (f y))))
-Case conversion may be inaccurate. Consider using '#align antilipschitz_with.le_mul_dist AntilipschitzWith.le_mul_distₓ'. -/
-/- warning: antilipschitz_with.of_le_mul_dist -> AntilipschitzWith.of_le_mul_dist is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoMetricSpace.{u1} α] [_inst_2 : PseudoMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (forall (x : α) (y : α), LE.le.{0} Real Real.hasLe (Dist.dist.{u1} α (PseudoMetricSpace.toHasDist.{u1} α _inst_1) x y) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal Real (HasLiftT.mk.{1, 1} NNReal Real (CoeTCₓ.coe.{1, 1} NNReal Real (coeBase.{1, 1} NNReal Real NNReal.Real.hasCoe))) K) (Dist.dist.{u2} β (PseudoMetricSpace.toHasDist.{u2} β _inst_2) (f x) (f y)))) -> (AntilipschitzWith.{u1, u2} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u2} β _inst_2) K f)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u2} α] [_inst_2 : PseudoMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (forall (x : α) (y : α), LE.le.{0} Real Real.instLEReal (Dist.dist.{u2} α (PseudoMetricSpace.toDist.{u2} α _inst_1) x y) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) (NNReal.toReal K) (Dist.dist.{u1} β (PseudoMetricSpace.toDist.{u1} β _inst_2) (f x) (f y)))) -> (AntilipschitzWith.{u2, u1} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u2} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u1} β _inst_2) K f)
-Case conversion may be inaccurate. Consider using '#align antilipschitz_with.of_le_mul_dist AntilipschitzWith.of_le_mul_distₓ'. -/
alias antilipschitzWith_iff_le_mul_dist ↔
AntilipschitzWith.le_mul_dist AntilipschitzWith.of_le_mul_dist
#align antilipschitz_with.le_mul_dist AntilipschitzWith.le_mul_dist
@@ -127,23 +79,11 @@ alias antilipschitzWith_iff_le_mul_dist ↔
namespace AntilipschitzWith
-/- warning: antilipschitz_with.mul_le_nndist -> AntilipschitzWith.mul_le_nndist is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoMetricSpace.{u1} α] [_inst_2 : PseudoMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u2} β _inst_2) K f) -> (forall (x : α) (y : α), LE.le.{0} NNReal (Preorder.toHasLe.{0} NNReal (PartialOrder.toPreorder.{0} NNReal (OrderedCancelAddCommMonoid.toPartialOrder.{0} NNReal (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} NNReal NNReal.strictOrderedSemiring)))) (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (Distrib.toHasMul.{0} NNReal (NonUnitalNonAssocSemiring.toDistrib.{0} NNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))) (Inv.inv.{0} NNReal (DivInvMonoid.toHasInv.{0} NNReal (GroupWithZero.toDivInvMonoid.{0} NNReal (DivisionSemiring.toGroupWithZero.{0} NNReal (Semifield.toDivisionSemiring.{0} NNReal (LinearOrderedSemifield.toSemifield.{0} NNReal (CanonicallyLinearOrderedSemifield.toLinearOrderedSemifield.{0} NNReal NNReal.canonicallyLinearOrderedSemifield)))))) K) (NNDist.nndist.{u1} α (PseudoMetricSpace.toNNDist.{u1} α _inst_1) x y)) (NNDist.nndist.{u2} β (PseudoMetricSpace.toNNDist.{u2} β _inst_2) (f x) (f y)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u2} α] [_inst_2 : PseudoMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u2} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u1} β _inst_2) K f) -> (forall (x : α) (y : α), LE.le.{0} NNReal (Preorder.toLE.{0} NNReal (PartialOrder.toPreorder.{0} NNReal (StrictOrderedSemiring.toPartialOrder.{0} NNReal instNNRealStrictOrderedSemiring))) (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (CanonicallyOrderedCommSemiring.toMul.{0} NNReal instNNRealCanonicallyOrderedCommSemiring)) (Inv.inv.{0} NNReal (CanonicallyLinearOrderedSemifield.toInv.{0} NNReal NNReal.instCanonicallyLinearOrderedSemifieldNNReal) K) (NNDist.nndist.{u2} α (PseudoMetricSpace.toNNDist.{u2} α _inst_1) x y)) (NNDist.nndist.{u1} β (PseudoMetricSpace.toNNDist.{u1} β _inst_2) (f x) (f y)))
-Case conversion may be inaccurate. Consider using '#align antilipschitz_with.mul_le_nndist AntilipschitzWith.mul_le_nndistₓ'. -/
theorem mul_le_nndist (hf : AntilipschitzWith K f) (x y : α) :
K⁻¹ * nndist x y ≤ nndist (f x) (f y) := by
simpa only [div_eq_inv_mul] using NNReal.div_le_of_le_mul' (hf.le_mul_nndist x y)
#align antilipschitz_with.mul_le_nndist AntilipschitzWith.mul_le_nndist
-/- warning: antilipschitz_with.mul_le_dist -> AntilipschitzWith.mul_le_dist is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoMetricSpace.{u1} α] [_inst_2 : PseudoMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u2} β _inst_2) K f) -> (forall (x : α) (y : α), LE.le.{0} Real Real.hasLe (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) (Inv.inv.{0} Real Real.hasInv ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal Real (HasLiftT.mk.{1, 1} NNReal Real (CoeTCₓ.coe.{1, 1} NNReal Real (coeBase.{1, 1} NNReal Real NNReal.Real.hasCoe))) K)) (Dist.dist.{u1} α (PseudoMetricSpace.toHasDist.{u1} α _inst_1) x y)) (Dist.dist.{u2} β (PseudoMetricSpace.toHasDist.{u2} β _inst_2) (f x) (f y)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u2} α] [_inst_2 : PseudoMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u2} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u1} β _inst_2) K f) -> (forall (x : α) (y : α), LE.le.{0} Real Real.instLEReal (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) (NNReal.toReal (Inv.inv.{0} NNReal (CanonicallyLinearOrderedSemifield.toInv.{0} NNReal NNReal.instCanonicallyLinearOrderedSemifieldNNReal) K)) (Dist.dist.{u2} α (PseudoMetricSpace.toDist.{u2} α _inst_1) x y)) (Dist.dist.{u1} β (PseudoMetricSpace.toDist.{u1} β _inst_2) (f x) (f y)))
-Case conversion may be inaccurate. Consider using '#align antilipschitz_with.mul_le_dist AntilipschitzWith.mul_le_distₓ'. -/
theorem mul_le_dist (hf : AntilipschitzWith K f) (x y : α) :
(K⁻¹ * dist x y : ℝ) ≤ dist (f x) (f y) := by exact_mod_cast hf.mul_le_nndist x y
#align antilipschitz_with.mul_le_dist AntilipschitzWith.mul_le_dist
@@ -170,23 +110,11 @@ protected def k (hf : AntilipschitzWith K f) : ℝ≥0 :=
#align antilipschitz_with.K AntilipschitzWith.k
-/
-/- warning: antilipschitz_with.injective -> AntilipschitzWith.injective is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_4 : EMetricSpace.{u1} α] [_inst_5 : PseudoEMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β (EMetricSpace.toPseudoEmetricSpace.{u1} α _inst_4) _inst_5 K f) -> (Function.Injective.{succ u1, succ u2} α β f)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_4 : EMetricSpace.{u2} α] [_inst_5 : PseudoEMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β (EMetricSpace.toPseudoEMetricSpace.{u2} α _inst_4) _inst_5 K f) -> (Function.Injective.{succ u2, succ u1} α β f)
-Case conversion may be inaccurate. Consider using '#align antilipschitz_with.injective AntilipschitzWith.injectiveₓ'. -/
protected theorem injective {α : Type _} {β : Type _} [EMetricSpace α] [PseudoEMetricSpace β]
{K : ℝ≥0} {f : α → β} (hf : AntilipschitzWith K f) : Function.Injective f := fun x y h => by
simpa only [h, edist_self, MulZeroClass.mul_zero, edist_le_zero] using hf x y
#align antilipschitz_with.injective AntilipschitzWith.injective
-/- warning: antilipschitz_with.mul_le_edist -> AntilipschitzWith.mul_le_edist is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoEMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β _inst_1 _inst_2 K f) -> (forall (x : α) (y : α), LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (HMul.hMul.{0, 0, 0} ENNReal ENNReal ENNReal (instHMul.{0} ENNReal (Distrib.toHasMul.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (Inv.inv.{0} ENNReal ENNReal.hasInv ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal ENNReal (HasLiftT.mk.{1, 1} NNReal ENNReal (CoeTCₓ.coe.{1, 1} NNReal ENNReal (coeBase.{1, 1} NNReal ENNReal ENNReal.hasCoe))) K)) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y)) (EDist.edist.{u2} β (PseudoEMetricSpace.toHasEdist.{u2} β _inst_2) (f x) (f y)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u2} α] [_inst_2 : PseudoEMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β _inst_1 _inst_2 K f) -> (forall (x : α) (y : α), LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (HMul.hMul.{0, 0, 0} ENNReal ENNReal ENNReal (instHMul.{0} ENNReal (CanonicallyOrderedCommSemiring.toMul.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)) (Inv.inv.{0} ENNReal ENNReal.instInvENNReal (ENNReal.some K)) (EDist.edist.{u2} α (PseudoEMetricSpace.toEDist.{u2} α _inst_1) x y)) (EDist.edist.{u1} β (PseudoEMetricSpace.toEDist.{u1} β _inst_2) (f x) (f y)))
-Case conversion may be inaccurate. Consider using '#align antilipschitz_with.mul_le_edist AntilipschitzWith.mul_le_edistₓ'. -/
theorem mul_le_edist (hf : AntilipschitzWith K f) (x y : α) :
(K⁻¹ * edist x y : ℝ≥0∞) ≤ edist (f x) (f y) :=
by
@@ -194,22 +122,10 @@ theorem mul_le_edist (hf : AntilipschitzWith K f) (x y : α) :
exact ENNReal.div_le_of_le_mul' (hf x y)
#align antilipschitz_with.mul_le_edist AntilipschitzWith.mul_le_edist
-/- warning: antilipschitz_with.ediam_preimage_le -> AntilipschitzWith.ediam_preimage_le is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoEMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β _inst_1 _inst_2 K f) -> (forall (s : Set.{u2} β), LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.diam.{u1} α _inst_1 (Set.preimage.{u1, u2} α β f s)) (HMul.hMul.{0, 0, 0} ENNReal ENNReal ENNReal (instHMul.{0} ENNReal (Distrib.toHasMul.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal ENNReal (HasLiftT.mk.{1, 1} NNReal ENNReal (CoeTCₓ.coe.{1, 1} NNReal ENNReal (coeBase.{1, 1} NNReal ENNReal ENNReal.hasCoe))) K) (EMetric.diam.{u2} β _inst_2 s)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u2} α] [_inst_2 : PseudoEMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β _inst_1 _inst_2 K f) -> (forall (s : Set.{u1} β), LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.diam.{u2} α _inst_1 (Set.preimage.{u2, u1} α β f s)) (HMul.hMul.{0, 0, 0} ENNReal ENNReal ENNReal (instHMul.{0} ENNReal (CanonicallyOrderedCommSemiring.toMul.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)) (ENNReal.some K) (EMetric.diam.{u1} β _inst_2 s)))
-Case conversion may be inaccurate. Consider using '#align antilipschitz_with.ediam_preimage_le AntilipschitzWith.ediam_preimage_leₓ'. -/
theorem ediam_preimage_le (hf : AntilipschitzWith K f) (s : Set β) : diam (f ⁻¹' s) ≤ K * diam s :=
diam_le fun x hx y hy => (hf x y).trans <| mul_le_mul_left' (edist_le_diam_of_mem hx hy) K
#align antilipschitz_with.ediam_preimage_le AntilipschitzWith.ediam_preimage_le
-/- warning: antilipschitz_with.le_mul_ediam_image -> AntilipschitzWith.le_mul_ediam_image is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoEMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β _inst_1 _inst_2 K f) -> (forall (s : Set.{u1} α), LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.diam.{u1} α _inst_1 s) (HMul.hMul.{0, 0, 0} ENNReal ENNReal ENNReal (instHMul.{0} ENNReal (Distrib.toHasMul.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal ENNReal (HasLiftT.mk.{1, 1} NNReal ENNReal (CoeTCₓ.coe.{1, 1} NNReal ENNReal (coeBase.{1, 1} NNReal ENNReal ENNReal.hasCoe))) K) (EMetric.diam.{u2} β _inst_2 (Set.image.{u1, u2} α β f s))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u2} α] [_inst_2 : PseudoEMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β _inst_1 _inst_2 K f) -> (forall (s : Set.{u2} α), LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.diam.{u2} α _inst_1 s) (HMul.hMul.{0, 0, 0} ENNReal ENNReal ENNReal (instHMul.{0} ENNReal (CanonicallyOrderedCommSemiring.toMul.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)) (ENNReal.some K) (EMetric.diam.{u1} β _inst_2 (Set.image.{u2, u1} α β f s))))
-Case conversion may be inaccurate. Consider using '#align antilipschitz_with.le_mul_ediam_image AntilipschitzWith.le_mul_ediam_imageₓ'. -/
theorem le_mul_ediam_image (hf : AntilipschitzWith K f) (s : Set α) : diam s ≤ K * diam (f '' s) :=
(diam_mono (subset_preimage_image _ _)).trans (hf.ediam_preimage_le (f '' s))
#align antilipschitz_with.le_mul_ediam_image AntilipschitzWith.le_mul_ediam_image
@@ -220,12 +136,6 @@ protected theorem id : AntilipschitzWith 1 (id : α → α) := fun x y => by
#align antilipschitz_with.id AntilipschitzWith.id
-/
-/- warning: antilipschitz_with.comp -> AntilipschitzWith.comp is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoEMetricSpace.{u2} β] [_inst_3 : PseudoEMetricSpace.{u3} γ] {Kg : NNReal} {g : β -> γ}, (AntilipschitzWith.{u2, u3} β γ _inst_2 _inst_3 Kg g) -> (forall {Kf : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β _inst_1 _inst_2 Kf f) -> (AntilipschitzWith.{u1, u3} α γ _inst_1 _inst_3 (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (Distrib.toHasMul.{0} NNReal (NonUnitalNonAssocSemiring.toDistrib.{0} NNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))) Kf Kg) (Function.comp.{succ u1, succ u2, succ u3} α β γ g f)))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoEMetricSpace.{u3} β] [_inst_3 : PseudoEMetricSpace.{u2} γ] {Kg : NNReal} {g : β -> γ}, (AntilipschitzWith.{u3, u2} β γ _inst_2 _inst_3 Kg g) -> (forall {Kf : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u3} α β _inst_1 _inst_2 Kf f) -> (AntilipschitzWith.{u1, u2} α γ _inst_1 _inst_3 (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (CanonicallyOrderedCommSemiring.toMul.{0} NNReal instNNRealCanonicallyOrderedCommSemiring)) Kf Kg) (Function.comp.{succ u1, succ u3, succ u2} α β γ g f)))
-Case conversion may be inaccurate. Consider using '#align antilipschitz_with.comp AntilipschitzWith.compₓ'. -/
theorem comp {Kg : ℝ≥0} {g : β → γ} (hg : AntilipschitzWith Kg g) {Kf : ℝ≥0} {f : α → β}
(hf : AntilipschitzWith Kf f) : AntilipschitzWith (Kf * Kg) (g ∘ f) := fun x y =>
calc
@@ -235,32 +145,14 @@ theorem comp {Kg : ℝ≥0} {g : β → γ} (hg : AntilipschitzWith Kg g) {Kf :
#align antilipschitz_with.comp AntilipschitzWith.comp
-/- warning: antilipschitz_with.restrict -> AntilipschitzWith.restrict is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoEMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β _inst_1 _inst_2 K f) -> (forall (s : Set.{u1} α), AntilipschitzWith.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) β (Subtype.pseudoEmetricSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) _inst_1) _inst_2 K (Set.restrict.{u1, u2} α (fun (ᾰ : α) => β) s f))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u2} α] [_inst_2 : PseudoEMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β _inst_1 _inst_2 K f) -> (forall (s : Set.{u2} α), AntilipschitzWith.{u2, u1} (Set.Elem.{u2} α s) β (instPseudoEMetricSpaceSubtype.{u2} α (fun (x : α) => Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) _inst_1) _inst_2 K (Set.restrict.{u2, u1} α (fun (ᾰ : α) => β) s f))
-Case conversion may be inaccurate. Consider using '#align antilipschitz_with.restrict AntilipschitzWith.restrictₓ'. -/
theorem restrict (hf : AntilipschitzWith K f) (s : Set α) : AntilipschitzWith K (s.restrict f) :=
fun x y => hf x y
#align antilipschitz_with.restrict AntilipschitzWith.restrict
-/- warning: antilipschitz_with.cod_restrict -> AntilipschitzWith.codRestrict is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoEMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β _inst_1 _inst_2 K f) -> (forall {s : Set.{u2} β} (hs : forall (x : α), Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) (f x) s), AntilipschitzWith.{u1, u2} α (coeSort.{succ u2, succ (succ u2)} (Set.{u2} β) Type.{u2} (Set.hasCoeToSort.{u2} β) s) _inst_1 (Subtype.pseudoEmetricSpace.{u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) x s) _inst_2) K (Set.codRestrict.{u2, succ u1} β α f s hs))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u2} α] [_inst_2 : PseudoEMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β _inst_1 _inst_2 K f) -> (forall {s : Set.{u1} β} (hs : forall (x : α), Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) (f x) s), AntilipschitzWith.{u2, u1} α (Set.Elem.{u1} β s) _inst_1 (instPseudoEMetricSpaceSubtype.{u1} β (fun (x : β) => Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) x s) _inst_2) K (Set.codRestrict.{u1, succ u2} β α f s hs))
-Case conversion may be inaccurate. Consider using '#align antilipschitz_with.cod_restrict AntilipschitzWith.codRestrictₓ'. -/
theorem codRestrict (hf : AntilipschitzWith K f) {s : Set β} (hs : ∀ x, f x ∈ s) :
AntilipschitzWith K (s.codRestrict f hs) := fun x y => hf x y
#align antilipschitz_with.cod_restrict AntilipschitzWith.codRestrict
-/- warning: antilipschitz_with.to_right_inv_on' -> AntilipschitzWith.to_rightInvOn' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoEMetricSpace.{u2} β] {K : NNReal} {f : α -> β} {s : Set.{u1} α}, (AntilipschitzWith.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) β (Subtype.pseudoEmetricSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) _inst_1) _inst_2 K (Set.restrict.{u1, u2} α (fun (ᾰ : α) => β) s f)) -> (forall {g : β -> α} {t : Set.{u2} β}, (Set.MapsTo.{u2, u1} β α g t s) -> (Set.RightInvOn.{u1, u2} α β g f t) -> (LipschitzWith.{u2, u1} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} β) Type.{u2} (Set.hasCoeToSort.{u2} β) t) α (Subtype.pseudoEmetricSpace.{u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) x t) _inst_2) _inst_1 K (Set.restrict.{u2, u1} β (fun (ᾰ : β) => α) t g)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u2} α] [_inst_2 : PseudoEMetricSpace.{u1} β] {K : NNReal} {f : α -> β} {s : Set.{u2} α}, (AntilipschitzWith.{u2, u1} (Set.Elem.{u2} α s) β (instPseudoEMetricSpaceSubtype.{u2} α (fun (x : α) => Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) _inst_1) _inst_2 K (Set.restrict.{u2, u1} α (fun (ᾰ : α) => β) s f)) -> (forall {g : β -> α} {t : Set.{u1} β}, (Set.MapsTo.{u1, u2} β α g t s) -> (Set.RightInvOn.{u2, u1} α β g f t) -> (LipschitzWith.{u1, u2} (Set.Elem.{u1} β t) α (instPseudoEMetricSpaceSubtype.{u1} β (fun (x : β) => Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) x t) _inst_2) _inst_1 K (Set.restrict.{u1, u2} β (fun (ᾰ : β) => α) t g)))
-Case conversion may be inaccurate. Consider using '#align antilipschitz_with.to_right_inv_on' AntilipschitzWith.to_rightInvOn'ₓ'. -/
theorem to_rightInvOn' {s : Set α} (hf : AntilipschitzWith K (s.restrict f)) {g : β → α} {t : Set β}
(g_maps : MapsTo g t s) (g_inv : RightInvOn g f t) : LipschitzWith K (t.restrict g) :=
fun x y => by
@@ -268,23 +160,11 @@ theorem to_rightInvOn' {s : Set α} (hf : AntilipschitzWith K (s.restrict f)) {g
hf ⟨g x, g_maps x.mem⟩ ⟨g y, g_maps y.mem⟩
#align antilipschitz_with.to_right_inv_on' AntilipschitzWith.to_rightInvOn'
-/- warning: antilipschitz_with.to_right_inv_on -> AntilipschitzWith.to_rightInvOn is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoEMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β _inst_1 _inst_2 K f) -> (forall {g : β -> α} {t : Set.{u2} β}, (Set.RightInvOn.{u1, u2} α β g f t) -> (LipschitzWith.{u2, u1} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} β) Type.{u2} (Set.hasCoeToSort.{u2} β) t) α (Subtype.pseudoEmetricSpace.{u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) x t) _inst_2) _inst_1 K (Set.restrict.{u2, u1} β (fun (ᾰ : β) => α) t g)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u2} α] [_inst_2 : PseudoEMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β _inst_1 _inst_2 K f) -> (forall {g : β -> α} {t : Set.{u1} β}, (Set.RightInvOn.{u2, u1} α β g f t) -> (LipschitzWith.{u1, u2} (Set.Elem.{u1} β t) α (instPseudoEMetricSpaceSubtype.{u1} β (fun (x : β) => Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) x t) _inst_2) _inst_1 K (Set.restrict.{u1, u2} β (fun (ᾰ : β) => α) t g)))
-Case conversion may be inaccurate. Consider using '#align antilipschitz_with.to_right_inv_on AntilipschitzWith.to_rightInvOnₓ'. -/
theorem to_rightInvOn (hf : AntilipschitzWith K f) {g : β → α} {t : Set β} (h : RightInvOn g f t) :
LipschitzWith K (t.restrict g) :=
(hf.restrict univ).to_rightInvOn' (mapsTo_univ g t) h
#align antilipschitz_with.to_right_inv_on AntilipschitzWith.to_rightInvOn
-/- warning: antilipschitz_with.to_right_inverse -> AntilipschitzWith.to_rightInverse is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoEMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β _inst_1 _inst_2 K f) -> (forall {g : β -> α}, (Function.RightInverse.{succ u1, succ u2} α β g f) -> (LipschitzWith.{u2, u1} β α _inst_2 _inst_1 K g))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u2} α] [_inst_2 : PseudoEMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β _inst_1 _inst_2 K f) -> (forall {g : β -> α}, (Function.RightInverse.{succ u2, succ u1} α β g f) -> (LipschitzWith.{u1, u2} β α _inst_2 _inst_1 K g))
-Case conversion may be inaccurate. Consider using '#align antilipschitz_with.to_right_inverse AntilipschitzWith.to_rightInverseₓ'. -/
theorem to_rightInverse (hf : AntilipschitzWith K f) {g : β → α} (hg : Function.RightInverse g f) :
LipschitzWith K g := by
intro x y
@@ -292,12 +172,6 @@ theorem to_rightInverse (hf : AntilipschitzWith K f) {g : β → α} (hg : Funct
rwa [hg x, hg y] at this
#align antilipschitz_with.to_right_inverse AntilipschitzWith.to_rightInverse
-/- warning: antilipschitz_with.comap_uniformity_le -> AntilipschitzWith.comap_uniformity_le is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoEMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β _inst_1 _inst_2 K f) -> (LE.le.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (Preorder.toHasLe.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (PartialOrder.toPreorder.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (Filter.partialOrder.{u1} (Prod.{u1, u1} α α)))) (Filter.comap.{u1, u2} (Prod.{u1, u1} α α) (Prod.{u2, u2} β β) (Prod.map.{u1, u2, u1, u2} α β α β f f) (uniformity.{u2} β (PseudoEMetricSpace.toUniformSpace.{u2} β _inst_2))) (uniformity.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u2} α] [_inst_2 : PseudoEMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β _inst_1 _inst_2 K f) -> (LE.le.{u2} (Filter.{u2} (Prod.{u2, u2} α α)) (Preorder.toLE.{u2} (Filter.{u2} (Prod.{u2, u2} α α)) (PartialOrder.toPreorder.{u2} (Filter.{u2} (Prod.{u2, u2} α α)) (Filter.instPartialOrderFilter.{u2} (Prod.{u2, u2} α α)))) (Filter.comap.{u2, u1} (Prod.{u2, u2} α α) (Prod.{u1, u1} β β) (Prod.map.{u2, u1, u2, u1} α β α β f f) (uniformity.{u1} β (PseudoEMetricSpace.toUniformSpace.{u1} β _inst_2))) (uniformity.{u2} α (PseudoEMetricSpace.toUniformSpace.{u2} α _inst_1)))
-Case conversion may be inaccurate. Consider using '#align antilipschitz_with.comap_uniformity_le AntilipschitzWith.comap_uniformity_leₓ'. -/
theorem comap_uniformity_le (hf : AntilipschitzWith K f) : (𝓤 β).comap (Prod.map f f) ≤ 𝓤 α :=
by
refine' ((uniformity_basis_edist.comap _).le_basis_iffₓ uniformity_basis_edist).2 fun ε h₀ => _
@@ -308,58 +182,28 @@ theorem comap_uniformity_le (hf : AntilipschitzWith K f) : (𝓤 β).comap (Prod
exact ENNReal.mul_lt_of_lt_div hx
#align antilipschitz_with.comap_uniformity_le AntilipschitzWith.comap_uniformity_le
-/- warning: antilipschitz_with.uniform_inducing -> AntilipschitzWith.uniformInducing is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoEMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β _inst_1 _inst_2 K f) -> (UniformContinuous.{u1, u2} α β (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1) (PseudoEMetricSpace.toUniformSpace.{u2} β _inst_2) f) -> (UniformInducing.{u1, u2} α β (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1) (PseudoEMetricSpace.toUniformSpace.{u2} β _inst_2) f)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u2} α] [_inst_2 : PseudoEMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β _inst_1 _inst_2 K f) -> (UniformContinuous.{u2, u1} α β (PseudoEMetricSpace.toUniformSpace.{u2} α _inst_1) (PseudoEMetricSpace.toUniformSpace.{u1} β _inst_2) f) -> (UniformInducing.{u2, u1} α β (PseudoEMetricSpace.toUniformSpace.{u2} α _inst_1) (PseudoEMetricSpace.toUniformSpace.{u1} β _inst_2) f)
-Case conversion may be inaccurate. Consider using '#align antilipschitz_with.uniform_inducing AntilipschitzWith.uniformInducingₓ'. -/
protected theorem uniformInducing (hf : AntilipschitzWith K f) (hfc : UniformContinuous f) :
UniformInducing f :=
⟨le_antisymm hf.comap_uniformity_le hfc.le_comap⟩
#align antilipschitz_with.uniform_inducing AntilipschitzWith.uniformInducing
-/- warning: antilipschitz_with.uniform_embedding -> AntilipschitzWith.uniformEmbedding is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_4 : EMetricSpace.{u1} α] [_inst_5 : PseudoEMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β (EMetricSpace.toPseudoEmetricSpace.{u1} α _inst_4) _inst_5 K f) -> (UniformContinuous.{u1, u2} α β (PseudoEMetricSpace.toUniformSpace.{u1} α (EMetricSpace.toPseudoEmetricSpace.{u1} α _inst_4)) (PseudoEMetricSpace.toUniformSpace.{u2} β _inst_5) f) -> (UniformEmbedding.{u1, u2} α β (PseudoEMetricSpace.toUniformSpace.{u1} α (EMetricSpace.toPseudoEmetricSpace.{u1} α _inst_4)) (PseudoEMetricSpace.toUniformSpace.{u2} β _inst_5) f)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_4 : EMetricSpace.{u2} α] [_inst_5 : PseudoEMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β (EMetricSpace.toPseudoEMetricSpace.{u2} α _inst_4) _inst_5 K f) -> (UniformContinuous.{u2, u1} α β (PseudoEMetricSpace.toUniformSpace.{u2} α (EMetricSpace.toPseudoEMetricSpace.{u2} α _inst_4)) (PseudoEMetricSpace.toUniformSpace.{u1} β _inst_5) f) -> (UniformEmbedding.{u2, u1} α β (PseudoEMetricSpace.toUniformSpace.{u2} α (EMetricSpace.toPseudoEMetricSpace.{u2} α _inst_4)) (PseudoEMetricSpace.toUniformSpace.{u1} β _inst_5) f)
-Case conversion may be inaccurate. Consider using '#align antilipschitz_with.uniform_embedding AntilipschitzWith.uniformEmbeddingₓ'. -/
protected theorem uniformEmbedding {α : Type _} {β : Type _} [EMetricSpace α] [PseudoEMetricSpace β]
{K : ℝ≥0} {f : α → β} (hf : AntilipschitzWith K f) (hfc : UniformContinuous f) :
UniformEmbedding f :=
⟨hf.UniformInducing hfc, hf.Injective⟩
#align antilipschitz_with.uniform_embedding AntilipschitzWith.uniformEmbedding
-/- warning: antilipschitz_with.is_complete_range -> AntilipschitzWith.isComplete_range is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoEMetricSpace.{u2} β] {K : NNReal} {f : α -> β} [_inst_4 : CompleteSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)], (AntilipschitzWith.{u1, u2} α β _inst_1 _inst_2 K f) -> (UniformContinuous.{u1, u2} α β (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1) (PseudoEMetricSpace.toUniformSpace.{u2} β _inst_2) f) -> (IsComplete.{u2} β (PseudoEMetricSpace.toUniformSpace.{u2} β _inst_2) (Set.range.{u2, succ u1} β α f))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u2} α] [_inst_2 : PseudoEMetricSpace.{u1} β] {K : NNReal} {f : α -> β} [_inst_4 : CompleteSpace.{u2} α (PseudoEMetricSpace.toUniformSpace.{u2} α _inst_1)], (AntilipschitzWith.{u2, u1} α β _inst_1 _inst_2 K f) -> (UniformContinuous.{u2, u1} α β (PseudoEMetricSpace.toUniformSpace.{u2} α _inst_1) (PseudoEMetricSpace.toUniformSpace.{u1} β _inst_2) f) -> (IsComplete.{u1} β (PseudoEMetricSpace.toUniformSpace.{u1} β _inst_2) (Set.range.{u1, succ u2} β α f))
-Case conversion may be inaccurate. Consider using '#align antilipschitz_with.is_complete_range AntilipschitzWith.isComplete_rangeₓ'. -/
theorem isComplete_range [CompleteSpace α] (hf : AntilipschitzWith K f)
(hfc : UniformContinuous f) : IsComplete (range f) :=
(hf.UniformInducing hfc).isComplete_range
#align antilipschitz_with.is_complete_range AntilipschitzWith.isComplete_range
-/- warning: antilipschitz_with.is_closed_range -> AntilipschitzWith.isClosed_range is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_4 : PseudoEMetricSpace.{u1} α] [_inst_5 : EMetricSpace.{u2} β] [_inst_6 : CompleteSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_4)] {f : α -> β} {K : NNReal}, (AntilipschitzWith.{u1, u2} α β _inst_4 (EMetricSpace.toPseudoEmetricSpace.{u2} β _inst_5) K f) -> (UniformContinuous.{u1, u2} α β (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_4) (PseudoEMetricSpace.toUniformSpace.{u2} β (EMetricSpace.toPseudoEmetricSpace.{u2} β _inst_5)) f) -> (IsClosed.{u2} β (UniformSpace.toTopologicalSpace.{u2} β (PseudoEMetricSpace.toUniformSpace.{u2} β (EMetricSpace.toPseudoEmetricSpace.{u2} β _inst_5))) (Set.range.{u2, succ u1} β α f))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_4 : PseudoEMetricSpace.{u2} α] [_inst_5 : EMetricSpace.{u1} β] [_inst_6 : CompleteSpace.{u2} α (PseudoEMetricSpace.toUniformSpace.{u2} α _inst_4)] {f : α -> β} {K : NNReal}, (AntilipschitzWith.{u2, u1} α β _inst_4 (EMetricSpace.toPseudoEMetricSpace.{u1} β _inst_5) K f) -> (UniformContinuous.{u2, u1} α β (PseudoEMetricSpace.toUniformSpace.{u2} α _inst_4) (PseudoEMetricSpace.toUniformSpace.{u1} β (EMetricSpace.toPseudoEMetricSpace.{u1} β _inst_5)) f) -> (IsClosed.{u1} β (UniformSpace.toTopologicalSpace.{u1} β (PseudoEMetricSpace.toUniformSpace.{u1} β (EMetricSpace.toPseudoEMetricSpace.{u1} β _inst_5))) (Set.range.{u1, succ u2} β α f))
-Case conversion may be inaccurate. Consider using '#align antilipschitz_with.is_closed_range AntilipschitzWith.isClosed_rangeₓ'. -/
theorem isClosed_range {α β : Type _} [PseudoEMetricSpace α] [EMetricSpace β] [CompleteSpace α]
{f : α → β} {K : ℝ≥0} (hf : AntilipschitzWith K f) (hfc : UniformContinuous f) :
IsClosed (range f) :=
(hf.isComplete_range hfc).IsClosed
#align antilipschitz_with.is_closed_range AntilipschitzWith.isClosed_range
-/- warning: antilipschitz_with.closed_embedding -> AntilipschitzWith.closedEmbedding is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_4 : EMetricSpace.{u1} α] [_inst_5 : EMetricSpace.{u2} β] {K : NNReal} {f : α -> β} [_inst_6 : CompleteSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α (EMetricSpace.toPseudoEmetricSpace.{u1} α _inst_4))], (AntilipschitzWith.{u1, u2} α β (EMetricSpace.toPseudoEmetricSpace.{u1} α _inst_4) (EMetricSpace.toPseudoEmetricSpace.{u2} β _inst_5) K f) -> (UniformContinuous.{u1, u2} α β (PseudoEMetricSpace.toUniformSpace.{u1} α (EMetricSpace.toPseudoEmetricSpace.{u1} α _inst_4)) (PseudoEMetricSpace.toUniformSpace.{u2} β (EMetricSpace.toPseudoEmetricSpace.{u2} β _inst_5)) f) -> (ClosedEmbedding.{u1, u2} α β (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α (EMetricSpace.toPseudoEmetricSpace.{u1} α _inst_4))) (UniformSpace.toTopologicalSpace.{u2} β (PseudoEMetricSpace.toUniformSpace.{u2} β (EMetricSpace.toPseudoEmetricSpace.{u2} β _inst_5))) f)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_4 : EMetricSpace.{u2} α] [_inst_5 : EMetricSpace.{u1} β] {K : NNReal} {f : α -> β} [_inst_6 : CompleteSpace.{u2} α (PseudoEMetricSpace.toUniformSpace.{u2} α (EMetricSpace.toPseudoEMetricSpace.{u2} α _inst_4))], (AntilipschitzWith.{u2, u1} α β (EMetricSpace.toPseudoEMetricSpace.{u2} α _inst_4) (EMetricSpace.toPseudoEMetricSpace.{u1} β _inst_5) K f) -> (UniformContinuous.{u2, u1} α β (PseudoEMetricSpace.toUniformSpace.{u2} α (EMetricSpace.toPseudoEMetricSpace.{u2} α _inst_4)) (PseudoEMetricSpace.toUniformSpace.{u1} β (EMetricSpace.toPseudoEMetricSpace.{u1} β _inst_5)) f) -> (ClosedEmbedding.{u2, u1} α β (UniformSpace.toTopologicalSpace.{u2} α (PseudoEMetricSpace.toUniformSpace.{u2} α (EMetricSpace.toPseudoEMetricSpace.{u2} α _inst_4))) (UniformSpace.toTopologicalSpace.{u1} β (PseudoEMetricSpace.toUniformSpace.{u1} β (EMetricSpace.toPseudoEMetricSpace.{u1} β _inst_5))) f)
-Case conversion may be inaccurate. Consider using '#align antilipschitz_with.closed_embedding AntilipschitzWith.closedEmbeddingₓ'. -/
theorem closedEmbedding {α : Type _} {β : Type _} [EMetricSpace α] [EMetricSpace β] {K : ℝ≥0}
{f : α → β} [CompleteSpace α] (hf : AntilipschitzWith K f) (hfc : UniformContinuous f) :
ClosedEmbedding f :=
@@ -372,22 +216,10 @@ theorem subtype_coe (s : Set α) : AntilipschitzWith 1 (coe : s → α) :=
#align antilipschitz_with.subtype_coe AntilipschitzWith.subtype_coe
-/
-/- warning: antilipschitz_with.of_subsingleton -> AntilipschitzWith.of_subsingleton is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoEMetricSpace.{u2} β] {f : α -> β} [_inst_4 : Subsingleton.{succ u1} α] {K : NNReal}, AntilipschitzWith.{u1, u2} α β _inst_1 _inst_2 K f
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u2} α] [_inst_2 : PseudoEMetricSpace.{u1} β] {f : α -> β} [_inst_4 : Subsingleton.{succ u2} α] {K : NNReal}, AntilipschitzWith.{u2, u1} α β _inst_1 _inst_2 K f
-Case conversion may be inaccurate. Consider using '#align antilipschitz_with.of_subsingleton AntilipschitzWith.of_subsingletonₓ'. -/
theorem of_subsingleton [Subsingleton α] {K : ℝ≥0} : AntilipschitzWith K f := fun x y => by
simp only [Subsingleton.elim x y, edist_self, zero_le]
#align antilipschitz_with.of_subsingleton AntilipschitzWith.of_subsingleton
-/- warning: antilipschitz_with.subsingleton -> AntilipschitzWith.subsingleton is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_4 : EMetricSpace.{u1} α] [_inst_5 : PseudoEMetricSpace.{u2} β] {f : α -> β}, (AntilipschitzWith.{u1, u2} α β (EMetricSpace.toPseudoEmetricSpace.{u1} α _inst_4) _inst_5 (OfNat.ofNat.{0} NNReal 0 (OfNat.mk.{0} NNReal 0 (Zero.zero.{0} NNReal (MulZeroClass.toHasZero.{0} NNReal (NonUnitalNonAssocSemiring.toMulZeroClass.{0} NNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))))) f) -> (Subsingleton.{succ u1} α)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_4 : EMetricSpace.{u2} α] [_inst_5 : PseudoEMetricSpace.{u1} β] {f : α -> β}, (AntilipschitzWith.{u2, u1} α β (EMetricSpace.toPseudoEMetricSpace.{u2} α _inst_4) _inst_5 (OfNat.ofNat.{0} NNReal 0 (Zero.toOfNat0.{0} NNReal instNNRealZero)) f) -> (Subsingleton.{succ u2} α)
-Case conversion may be inaccurate. Consider using '#align antilipschitz_with.subsingleton AntilipschitzWith.subsingletonₓ'. -/
/-- If `f : α → β` is `0`-antilipschitz, then `α` is a `subsingleton`. -/
protected theorem subsingleton {α β} [EMetricSpace α] [PseudoEMetricSpace β] {f : α → β}
(h : AntilipschitzWith 0 f) : Subsingleton α :=
@@ -402,12 +234,6 @@ open Metric
variable [PseudoMetricSpace α] [PseudoMetricSpace β] {K : ℝ≥0} {f : α → β}
-/- warning: antilipschitz_with.bounded_preimage -> AntilipschitzWith.bounded_preimage is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoMetricSpace.{u1} α] [_inst_2 : PseudoMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u2} β _inst_2) K f) -> (forall {s : Set.{u2} β}, (Metric.Bounded.{u2} β _inst_2 s) -> (Metric.Bounded.{u1} α _inst_1 (Set.preimage.{u1, u2} α β f s)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u2} α] [_inst_2 : PseudoMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u2} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u1} β _inst_2) K f) -> (forall {s : Set.{u1} β}, (Metric.Bounded.{u1} β _inst_2 s) -> (Metric.Bounded.{u2} α _inst_1 (Set.preimage.{u2, u1} α β f s)))
-Case conversion may be inaccurate. Consider using '#align antilipschitz_with.bounded_preimage AntilipschitzWith.bounded_preimageₓ'. -/
theorem bounded_preimage (hf : AntilipschitzWith K f) {s : Set β} (hs : Bounded s) :
Bounded (f ⁻¹' s) :=
Exists.intro (K * diam s) fun x hx y hy =>
@@ -417,12 +243,6 @@ theorem bounded_preimage (hf : AntilipschitzWith K f) {s : Set β} (hs : Bounded
#align antilipschitz_with.bounded_preimage AntilipschitzWith.bounded_preimage
-/- warning: antilipschitz_with.tendsto_cobounded -> AntilipschitzWith.tendsto_cobounded is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoMetricSpace.{u1} α] [_inst_2 : PseudoMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u2} β _inst_2) K f) -> (Filter.Tendsto.{u1, u2} α β f (Bornology.cobounded.{u1} α (PseudoMetricSpace.toBornology.{u1} α _inst_1)) (Bornology.cobounded.{u2} β (PseudoMetricSpace.toBornology.{u2} β _inst_2)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u2} α] [_inst_2 : PseudoMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u2} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u1} β _inst_2) K f) -> (Filter.Tendsto.{u2, u1} α β f (Bornology.cobounded.{u2} α (PseudoMetricSpace.toBornology.{u2} α _inst_1)) (Bornology.cobounded.{u1} β (PseudoMetricSpace.toBornology.{u1} β _inst_2)))
-Case conversion may be inaccurate. Consider using '#align antilipschitz_with.tendsto_cobounded AntilipschitzWith.tendsto_coboundedₓ'. -/
theorem tendsto_cobounded (hf : AntilipschitzWith K f) : Tendsto f (cobounded α) (cobounded β) :=
compl_surjective.forall.2 fun s (hs : IsBounded s) =>
Metric.isBounded_iff.2 <| hf.bounded_preimage <| Metric.isBounded_iff.1 hs
@@ -446,23 +266,11 @@ protected theorem properSpace {α : Type _} [MetricSpace α] {K : ℝ≥0} {f :
end AntilipschitzWith
-/- warning: lipschitz_with.to_right_inverse -> LipschitzWith.to_rightInverse is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoEMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (LipschitzWith.{u1, u2} α β _inst_1 _inst_2 K f) -> (forall {g : β -> α}, (Function.RightInverse.{succ u1, succ u2} α β g f) -> (AntilipschitzWith.{u2, u1} β α _inst_2 _inst_1 K g))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u2} α] [_inst_2 : PseudoEMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (LipschitzWith.{u2, u1} α β _inst_1 _inst_2 K f) -> (forall {g : β -> α}, (Function.RightInverse.{succ u2, succ u1} α β g f) -> (AntilipschitzWith.{u1, u2} β α _inst_2 _inst_1 K g))
-Case conversion may be inaccurate. Consider using '#align lipschitz_with.to_right_inverse LipschitzWith.to_rightInverseₓ'. -/
theorem LipschitzWith.to_rightInverse [PseudoEMetricSpace α] [PseudoEMetricSpace β] {K : ℝ≥0}
{f : α → β} (hf : LipschitzWith K f) {g : β → α} (hg : Function.RightInverse g f) :
AntilipschitzWith K g := fun x y => by simpa only [hg _] using hf (g x) (g y)
#align lipschitz_with.to_right_inverse LipschitzWith.to_rightInverse
-/- warning: lipschitz_with.proper_space -> LipschitzWith.properSpace is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoMetricSpace.{u1} α] [_inst_2 : MetricSpace.{u2} β] [_inst_3 : ProperSpace.{u2} β (MetricSpace.toPseudoMetricSpace.{u2} β _inst_2)] {K : NNReal} {f : Homeomorph.{u1, u2} α β (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) (UniformSpace.toTopologicalSpace.{u2} β (PseudoMetricSpace.toUniformSpace.{u2} β (MetricSpace.toPseudoMetricSpace.{u2} β _inst_2)))}, (LipschitzWith.{u1, u2} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u2} β (MetricSpace.toPseudoMetricSpace.{u2} β _inst_2)) K (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Homeomorph.{u1, u2} α β (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) (UniformSpace.toTopologicalSpace.{u2} β (PseudoMetricSpace.toUniformSpace.{u2} β (MetricSpace.toPseudoMetricSpace.{u2} β _inst_2)))) (fun (_x : Homeomorph.{u1, u2} α β (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) (UniformSpace.toTopologicalSpace.{u2} β (PseudoMetricSpace.toUniformSpace.{u2} β (MetricSpace.toPseudoMetricSpace.{u2} β _inst_2)))) => α -> β) (Homeomorph.hasCoeToFun.{u1, u2} α β (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) (UniformSpace.toTopologicalSpace.{u2} β (PseudoMetricSpace.toUniformSpace.{u2} β (MetricSpace.toPseudoMetricSpace.{u2} β _inst_2)))) f)) -> (ProperSpace.{u1} α _inst_1)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u2} α] [_inst_2 : MetricSpace.{u1} β] [_inst_3 : ProperSpace.{u1} β (MetricSpace.toPseudoMetricSpace.{u1} β _inst_2)] {K : NNReal} {f : Homeomorph.{u2, u1} α β (UniformSpace.toTopologicalSpace.{u2} α (PseudoMetricSpace.toUniformSpace.{u2} α _inst_1)) (UniformSpace.toTopologicalSpace.{u1} β (PseudoMetricSpace.toUniformSpace.{u1} β (MetricSpace.toPseudoMetricSpace.{u1} β _inst_2)))}, (LipschitzWith.{u2, u1} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u2} α _inst_1) (EMetricSpace.toPseudoEMetricSpace.{u1} β (MetricSpace.toEMetricSpace.{u1} β _inst_2)) K (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (Homeomorph.{u2, u1} α β (UniformSpace.toTopologicalSpace.{u2} α (PseudoMetricSpace.toUniformSpace.{u2} α _inst_1)) (UniformSpace.toTopologicalSpace.{u1} β (PseudoMetricSpace.toUniformSpace.{u1} β (MetricSpace.toPseudoMetricSpace.{u1} β _inst_2)))) α (fun (_x : α) => β) (EmbeddingLike.toFunLike.{max (succ u2) (succ u1), succ u2, succ u1} (Homeomorph.{u2, u1} α β (UniformSpace.toTopologicalSpace.{u2} α (PseudoMetricSpace.toUniformSpace.{u2} α _inst_1)) (UniformSpace.toTopologicalSpace.{u1} β (PseudoMetricSpace.toUniformSpace.{u1} β (MetricSpace.toPseudoMetricSpace.{u1} β _inst_2)))) α β (EquivLike.toEmbeddingLike.{max (succ u2) (succ u1), succ u2, succ u1} (Homeomorph.{u2, u1} α β (UniformSpace.toTopologicalSpace.{u2} α (PseudoMetricSpace.toUniformSpace.{u2} α _inst_1)) (UniformSpace.toTopologicalSpace.{u1} β (PseudoMetricSpace.toUniformSpace.{u1} β (MetricSpace.toPseudoMetricSpace.{u1} β _inst_2)))) α β (Homeomorph.instEquivLikeHomeomorph.{u2, u1} α β (UniformSpace.toTopologicalSpace.{u2} α (PseudoMetricSpace.toUniformSpace.{u2} α _inst_1)) (UniformSpace.toTopologicalSpace.{u1} β (PseudoMetricSpace.toUniformSpace.{u1} β (MetricSpace.toPseudoMetricSpace.{u1} β _inst_2)))))) f)) -> (ProperSpace.{u2} α _inst_1)
-Case conversion may be inaccurate. Consider using '#align lipschitz_with.proper_space LipschitzWith.properSpaceₓ'. -/
/-- The preimage of a proper space under a Lipschitz homeomorphism is proper. -/
@[protected]
theorem LipschitzWith.properSpace [PseudoMetricSpace α] [MetricSpace β] [ProperSpace β] {K : ℝ≥0}
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -76,10 +76,8 @@ but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u2} α] [_inst_2 : PseudoMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, Iff (AntilipschitzWith.{u2, u1} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u2} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u1} β _inst_2) K f) (forall (x : α) (y : α), LE.le.{0} NNReal (Preorder.toLE.{0} NNReal (PartialOrder.toPreorder.{0} NNReal (StrictOrderedSemiring.toPartialOrder.{0} NNReal instNNRealStrictOrderedSemiring))) (NNDist.nndist.{u2} α (PseudoMetricSpace.toNNDist.{u2} α _inst_1) x y) (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (CanonicallyOrderedCommSemiring.toMul.{0} NNReal instNNRealCanonicallyOrderedCommSemiring)) K (NNDist.nndist.{u1} β (PseudoMetricSpace.toNNDist.{u1} β _inst_2) (f x) (f y))))
Case conversion may be inaccurate. Consider using '#align antilipschitz_with_iff_le_mul_nndist antilipschitzWith_iff_le_mul_nndistₓ'. -/
theorem antilipschitzWith_iff_le_mul_nndist :
- AntilipschitzWith K f ↔ ∀ x y, nndist x y ≤ K * nndist (f x) (f y) :=
- by
- simp only [AntilipschitzWith, edist_nndist]
- norm_cast
+ AntilipschitzWith K f ↔ ∀ x y, nndist x y ≤ K * nndist (f x) (f y) := by
+ simp only [AntilipschitzWith, edist_nndist]; norm_cast
#align antilipschitz_with_iff_le_mul_nndist antilipschitzWith_iff_le_mul_nndist
/- warning: antilipschitz_with.le_mul_nndist -> AntilipschitzWith.le_mul_nndist is a dubious translation:
@@ -106,10 +104,8 @@ but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u2} α] [_inst_2 : PseudoMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, Iff (AntilipschitzWith.{u2, u1} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u2} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u1} β _inst_2) K f) (forall (x : α) (y : α), LE.le.{0} Real Real.instLEReal (Dist.dist.{u2} α (PseudoMetricSpace.toDist.{u2} α _inst_1) x y) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) (NNReal.toReal K) (Dist.dist.{u1} β (PseudoMetricSpace.toDist.{u1} β _inst_2) (f x) (f y))))
Case conversion may be inaccurate. Consider using '#align antilipschitz_with_iff_le_mul_dist antilipschitzWith_iff_le_mul_distₓ'. -/
theorem antilipschitzWith_iff_le_mul_dist :
- AntilipschitzWith K f ↔ ∀ x y, dist x y ≤ K * dist (f x) (f y) :=
- by
- simp only [antilipschitzWith_iff_le_mul_nndist, dist_nndist]
- norm_cast
+ AntilipschitzWith K f ↔ ∀ x y, dist x y ≤ K * dist (f x) (f y) := by
+ simp only [antilipschitzWith_iff_le_mul_nndist, dist_nndist]; norm_cast
#align antilipschitz_with_iff_le_mul_dist antilipschitzWith_iff_le_mul_dist
/- warning: antilipschitz_with.le_mul_dist -> AntilipschitzWith.le_mul_dist is a dubious translation:
mathlib commit https://github.com/leanprover-community/mathlib/commit/0b9eaaa7686280fad8cce467f5c3c57ee6ce77f8
@@ -45,7 +45,7 @@ def AntilipschitzWith [PseudoEMetricSpace α] [PseudoEMetricSpace β] (K : ℝ
/- warning: antilipschitz_with.edist_lt_top -> AntilipschitzWith.edist_lt_top is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β _inst_1 (PseudoMetricSpace.toPseudoEMetricSpace.{u2} β _inst_2) K f) -> (forall (x : α) (y : α), LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y) (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β _inst_1 (PseudoMetricSpace.toPseudoEMetricSpace.{u2} β _inst_2) K f) -> (forall (x : α) (y : α), LT.lt.{0} ENNReal (Preorder.toHasLt.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y) (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u2} α] [_inst_2 : PseudoMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β _inst_1 (PseudoMetricSpace.toPseudoEMetricSpace.{u1} β _inst_2) K f) -> (forall (x : α) (y : α), LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EDist.edist.{u2} α (PseudoEMetricSpace.toEDist.{u2} α _inst_1) x y) (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))
Case conversion may be inaccurate. Consider using '#align antilipschitz_with.edist_lt_top AntilipschitzWith.edist_lt_topₓ'. -/
@@ -71,7 +71,7 @@ variable [PseudoMetricSpace α] [PseudoMetricSpace β] {K : ℝ≥0} {f : α →
/- warning: antilipschitz_with_iff_le_mul_nndist -> antilipschitzWith_iff_le_mul_nndist is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoMetricSpace.{u1} α] [_inst_2 : PseudoMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, Iff (AntilipschitzWith.{u1, u2} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u2} β _inst_2) K f) (forall (x : α) (y : α), LE.le.{0} NNReal (Preorder.toLE.{0} NNReal (PartialOrder.toPreorder.{0} NNReal (OrderedCancelAddCommMonoid.toPartialOrder.{0} NNReal (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} NNReal NNReal.strictOrderedSemiring)))) (NNDist.nndist.{u1} α (PseudoMetricSpace.toNNDist.{u1} α _inst_1) x y) (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (Distrib.toHasMul.{0} NNReal (NonUnitalNonAssocSemiring.toDistrib.{0} NNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))) K (NNDist.nndist.{u2} β (PseudoMetricSpace.toNNDist.{u2} β _inst_2) (f x) (f y))))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoMetricSpace.{u1} α] [_inst_2 : PseudoMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, Iff (AntilipschitzWith.{u1, u2} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u2} β _inst_2) K f) (forall (x : α) (y : α), LE.le.{0} NNReal (Preorder.toHasLe.{0} NNReal (PartialOrder.toPreorder.{0} NNReal (OrderedCancelAddCommMonoid.toPartialOrder.{0} NNReal (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} NNReal NNReal.strictOrderedSemiring)))) (NNDist.nndist.{u1} α (PseudoMetricSpace.toNNDist.{u1} α _inst_1) x y) (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (Distrib.toHasMul.{0} NNReal (NonUnitalNonAssocSemiring.toDistrib.{0} NNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))) K (NNDist.nndist.{u2} β (PseudoMetricSpace.toNNDist.{u2} β _inst_2) (f x) (f y))))
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u2} α] [_inst_2 : PseudoMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, Iff (AntilipschitzWith.{u2, u1} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u2} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u1} β _inst_2) K f) (forall (x : α) (y : α), LE.le.{0} NNReal (Preorder.toLE.{0} NNReal (PartialOrder.toPreorder.{0} NNReal (StrictOrderedSemiring.toPartialOrder.{0} NNReal instNNRealStrictOrderedSemiring))) (NNDist.nndist.{u2} α (PseudoMetricSpace.toNNDist.{u2} α _inst_1) x y) (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (CanonicallyOrderedCommSemiring.toMul.{0} NNReal instNNRealCanonicallyOrderedCommSemiring)) K (NNDist.nndist.{u1} β (PseudoMetricSpace.toNNDist.{u1} β _inst_2) (f x) (f y))))
Case conversion may be inaccurate. Consider using '#align antilipschitz_with_iff_le_mul_nndist antilipschitzWith_iff_le_mul_nndistₓ'. -/
@@ -84,13 +84,13 @@ theorem antilipschitzWith_iff_le_mul_nndist :
/- warning: antilipschitz_with.le_mul_nndist -> AntilipschitzWith.le_mul_nndist is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoMetricSpace.{u1} α] [_inst_2 : PseudoMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u2} β _inst_2) K f) -> (forall (x : α) (y : α), LE.le.{0} NNReal (Preorder.toLE.{0} NNReal (PartialOrder.toPreorder.{0} NNReal (OrderedCancelAddCommMonoid.toPartialOrder.{0} NNReal (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} NNReal NNReal.strictOrderedSemiring)))) (NNDist.nndist.{u1} α (PseudoMetricSpace.toNNDist.{u1} α _inst_1) x y) (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (Distrib.toHasMul.{0} NNReal (NonUnitalNonAssocSemiring.toDistrib.{0} NNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))) K (NNDist.nndist.{u2} β (PseudoMetricSpace.toNNDist.{u2} β _inst_2) (f x) (f y))))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoMetricSpace.{u1} α] [_inst_2 : PseudoMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u2} β _inst_2) K f) -> (forall (x : α) (y : α), LE.le.{0} NNReal (Preorder.toHasLe.{0} NNReal (PartialOrder.toPreorder.{0} NNReal (OrderedCancelAddCommMonoid.toPartialOrder.{0} NNReal (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} NNReal NNReal.strictOrderedSemiring)))) (NNDist.nndist.{u1} α (PseudoMetricSpace.toNNDist.{u1} α _inst_1) x y) (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (Distrib.toHasMul.{0} NNReal (NonUnitalNonAssocSemiring.toDistrib.{0} NNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))) K (NNDist.nndist.{u2} β (PseudoMetricSpace.toNNDist.{u2} β _inst_2) (f x) (f y))))
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u2} α] [_inst_2 : PseudoMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u2} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u1} β _inst_2) K f) -> (forall (x : α) (y : α), LE.le.{0} NNReal (Preorder.toLE.{0} NNReal (PartialOrder.toPreorder.{0} NNReal (StrictOrderedSemiring.toPartialOrder.{0} NNReal instNNRealStrictOrderedSemiring))) (NNDist.nndist.{u2} α (PseudoMetricSpace.toNNDist.{u2} α _inst_1) x y) (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (CanonicallyOrderedCommSemiring.toMul.{0} NNReal instNNRealCanonicallyOrderedCommSemiring)) K (NNDist.nndist.{u1} β (PseudoMetricSpace.toNNDist.{u1} β _inst_2) (f x) (f y))))
Case conversion may be inaccurate. Consider using '#align antilipschitz_with.le_mul_nndist AntilipschitzWith.le_mul_nndistₓ'. -/
/- warning: antilipschitz_with.of_le_mul_nndist -> AntilipschitzWith.of_le_mul_nndist is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoMetricSpace.{u1} α] [_inst_2 : PseudoMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (forall (x : α) (y : α), LE.le.{0} NNReal (Preorder.toLE.{0} NNReal (PartialOrder.toPreorder.{0} NNReal (OrderedCancelAddCommMonoid.toPartialOrder.{0} NNReal (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} NNReal NNReal.strictOrderedSemiring)))) (NNDist.nndist.{u1} α (PseudoMetricSpace.toNNDist.{u1} α _inst_1) x y) (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (Distrib.toHasMul.{0} NNReal (NonUnitalNonAssocSemiring.toDistrib.{0} NNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))) K (NNDist.nndist.{u2} β (PseudoMetricSpace.toNNDist.{u2} β _inst_2) (f x) (f y)))) -> (AntilipschitzWith.{u1, u2} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u2} β _inst_2) K f)
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoMetricSpace.{u1} α] [_inst_2 : PseudoMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (forall (x : α) (y : α), LE.le.{0} NNReal (Preorder.toHasLe.{0} NNReal (PartialOrder.toPreorder.{0} NNReal (OrderedCancelAddCommMonoid.toPartialOrder.{0} NNReal (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} NNReal NNReal.strictOrderedSemiring)))) (NNDist.nndist.{u1} α (PseudoMetricSpace.toNNDist.{u1} α _inst_1) x y) (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (Distrib.toHasMul.{0} NNReal (NonUnitalNonAssocSemiring.toDistrib.{0} NNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))) K (NNDist.nndist.{u2} β (PseudoMetricSpace.toNNDist.{u2} β _inst_2) (f x) (f y)))) -> (AntilipschitzWith.{u1, u2} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u2} β _inst_2) K f)
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u2} α] [_inst_2 : PseudoMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (forall (x : α) (y : α), LE.le.{0} NNReal (Preorder.toLE.{0} NNReal (PartialOrder.toPreorder.{0} NNReal (StrictOrderedSemiring.toPartialOrder.{0} NNReal instNNRealStrictOrderedSemiring))) (NNDist.nndist.{u2} α (PseudoMetricSpace.toNNDist.{u2} α _inst_1) x y) (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (CanonicallyOrderedCommSemiring.toMul.{0} NNReal instNNRealCanonicallyOrderedCommSemiring)) K (NNDist.nndist.{u1} β (PseudoMetricSpace.toNNDist.{u1} β _inst_2) (f x) (f y)))) -> (AntilipschitzWith.{u2, u1} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u2} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u1} β _inst_2) K f)
Case conversion may be inaccurate. Consider using '#align antilipschitz_with.of_le_mul_nndist AntilipschitzWith.of_le_mul_nndistₓ'. -/
@@ -133,7 +133,7 @@ namespace AntilipschitzWith
/- warning: antilipschitz_with.mul_le_nndist -> AntilipschitzWith.mul_le_nndist is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoMetricSpace.{u1} α] [_inst_2 : PseudoMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u2} β _inst_2) K f) -> (forall (x : α) (y : α), LE.le.{0} NNReal (Preorder.toLE.{0} NNReal (PartialOrder.toPreorder.{0} NNReal (OrderedCancelAddCommMonoid.toPartialOrder.{0} NNReal (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} NNReal NNReal.strictOrderedSemiring)))) (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (Distrib.toHasMul.{0} NNReal (NonUnitalNonAssocSemiring.toDistrib.{0} NNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))) (Inv.inv.{0} NNReal (DivInvMonoid.toHasInv.{0} NNReal (GroupWithZero.toDivInvMonoid.{0} NNReal (DivisionSemiring.toGroupWithZero.{0} NNReal (Semifield.toDivisionSemiring.{0} NNReal (LinearOrderedSemifield.toSemifield.{0} NNReal (CanonicallyLinearOrderedSemifield.toLinearOrderedSemifield.{0} NNReal NNReal.canonicallyLinearOrderedSemifield)))))) K) (NNDist.nndist.{u1} α (PseudoMetricSpace.toNNDist.{u1} α _inst_1) x y)) (NNDist.nndist.{u2} β (PseudoMetricSpace.toNNDist.{u2} β _inst_2) (f x) (f y)))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoMetricSpace.{u1} α] [_inst_2 : PseudoMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u2} β _inst_2) K f) -> (forall (x : α) (y : α), LE.le.{0} NNReal (Preorder.toHasLe.{0} NNReal (PartialOrder.toPreorder.{0} NNReal (OrderedCancelAddCommMonoid.toPartialOrder.{0} NNReal (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} NNReal NNReal.strictOrderedSemiring)))) (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (Distrib.toHasMul.{0} NNReal (NonUnitalNonAssocSemiring.toDistrib.{0} NNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))) (Inv.inv.{0} NNReal (DivInvMonoid.toHasInv.{0} NNReal (GroupWithZero.toDivInvMonoid.{0} NNReal (DivisionSemiring.toGroupWithZero.{0} NNReal (Semifield.toDivisionSemiring.{0} NNReal (LinearOrderedSemifield.toSemifield.{0} NNReal (CanonicallyLinearOrderedSemifield.toLinearOrderedSemifield.{0} NNReal NNReal.canonicallyLinearOrderedSemifield)))))) K) (NNDist.nndist.{u1} α (PseudoMetricSpace.toNNDist.{u1} α _inst_1) x y)) (NNDist.nndist.{u2} β (PseudoMetricSpace.toNNDist.{u2} β _inst_2) (f x) (f y)))
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u2} α] [_inst_2 : PseudoMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u2} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u1} β _inst_2) K f) -> (forall (x : α) (y : α), LE.le.{0} NNReal (Preorder.toLE.{0} NNReal (PartialOrder.toPreorder.{0} NNReal (StrictOrderedSemiring.toPartialOrder.{0} NNReal instNNRealStrictOrderedSemiring))) (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (CanonicallyOrderedCommSemiring.toMul.{0} NNReal instNNRealCanonicallyOrderedCommSemiring)) (Inv.inv.{0} NNReal (CanonicallyLinearOrderedSemifield.toInv.{0} NNReal NNReal.instCanonicallyLinearOrderedSemifieldNNReal) K) (NNDist.nndist.{u2} α (PseudoMetricSpace.toNNDist.{u2} α _inst_1) x y)) (NNDist.nndist.{u1} β (PseudoMetricSpace.toNNDist.{u1} β _inst_2) (f x) (f y)))
Case conversion may be inaccurate. Consider using '#align antilipschitz_with.mul_le_nndist AntilipschitzWith.mul_le_nndistₓ'. -/
@@ -187,7 +187,7 @@ protected theorem injective {α : Type _} {β : Type _} [EMetricSpace α] [Pseud
/- warning: antilipschitz_with.mul_le_edist -> AntilipschitzWith.mul_le_edist is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoEMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β _inst_1 _inst_2 K f) -> (forall (x : α) (y : α), LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (HMul.hMul.{0, 0, 0} ENNReal ENNReal ENNReal (instHMul.{0} ENNReal (Distrib.toHasMul.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (Inv.inv.{0} ENNReal ENNReal.hasInv ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal ENNReal (HasLiftT.mk.{1, 1} NNReal ENNReal (CoeTCₓ.coe.{1, 1} NNReal ENNReal (coeBase.{1, 1} NNReal ENNReal ENNReal.hasCoe))) K)) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y)) (EDist.edist.{u2} β (PseudoEMetricSpace.toHasEdist.{u2} β _inst_2) (f x) (f y)))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoEMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β _inst_1 _inst_2 K f) -> (forall (x : α) (y : α), LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (HMul.hMul.{0, 0, 0} ENNReal ENNReal ENNReal (instHMul.{0} ENNReal (Distrib.toHasMul.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (Inv.inv.{0} ENNReal ENNReal.hasInv ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal ENNReal (HasLiftT.mk.{1, 1} NNReal ENNReal (CoeTCₓ.coe.{1, 1} NNReal ENNReal (coeBase.{1, 1} NNReal ENNReal ENNReal.hasCoe))) K)) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y)) (EDist.edist.{u2} β (PseudoEMetricSpace.toHasEdist.{u2} β _inst_2) (f x) (f y)))
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u2} α] [_inst_2 : PseudoEMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β _inst_1 _inst_2 K f) -> (forall (x : α) (y : α), LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (HMul.hMul.{0, 0, 0} ENNReal ENNReal ENNReal (instHMul.{0} ENNReal (CanonicallyOrderedCommSemiring.toMul.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)) (Inv.inv.{0} ENNReal ENNReal.instInvENNReal (ENNReal.some K)) (EDist.edist.{u2} α (PseudoEMetricSpace.toEDist.{u2} α _inst_1) x y)) (EDist.edist.{u1} β (PseudoEMetricSpace.toEDist.{u1} β _inst_2) (f x) (f y)))
Case conversion may be inaccurate. Consider using '#align antilipschitz_with.mul_le_edist AntilipschitzWith.mul_le_edistₓ'. -/
@@ -200,7 +200,7 @@ theorem mul_le_edist (hf : AntilipschitzWith K f) (x y : α) :
/- warning: antilipschitz_with.ediam_preimage_le -> AntilipschitzWith.ediam_preimage_le is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoEMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β _inst_1 _inst_2 K f) -> (forall (s : Set.{u2} β), LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.diam.{u1} α _inst_1 (Set.preimage.{u1, u2} α β f s)) (HMul.hMul.{0, 0, 0} ENNReal ENNReal ENNReal (instHMul.{0} ENNReal (Distrib.toHasMul.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal ENNReal (HasLiftT.mk.{1, 1} NNReal ENNReal (CoeTCₓ.coe.{1, 1} NNReal ENNReal (coeBase.{1, 1} NNReal ENNReal ENNReal.hasCoe))) K) (EMetric.diam.{u2} β _inst_2 s)))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoEMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β _inst_1 _inst_2 K f) -> (forall (s : Set.{u2} β), LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.diam.{u1} α _inst_1 (Set.preimage.{u1, u2} α β f s)) (HMul.hMul.{0, 0, 0} ENNReal ENNReal ENNReal (instHMul.{0} ENNReal (Distrib.toHasMul.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal ENNReal (HasLiftT.mk.{1, 1} NNReal ENNReal (CoeTCₓ.coe.{1, 1} NNReal ENNReal (coeBase.{1, 1} NNReal ENNReal ENNReal.hasCoe))) K) (EMetric.diam.{u2} β _inst_2 s)))
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u2} α] [_inst_2 : PseudoEMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β _inst_1 _inst_2 K f) -> (forall (s : Set.{u1} β), LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.diam.{u2} α _inst_1 (Set.preimage.{u2, u1} α β f s)) (HMul.hMul.{0, 0, 0} ENNReal ENNReal ENNReal (instHMul.{0} ENNReal (CanonicallyOrderedCommSemiring.toMul.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)) (ENNReal.some K) (EMetric.diam.{u1} β _inst_2 s)))
Case conversion may be inaccurate. Consider using '#align antilipschitz_with.ediam_preimage_le AntilipschitzWith.ediam_preimage_leₓ'. -/
@@ -210,7 +210,7 @@ theorem ediam_preimage_le (hf : AntilipschitzWith K f) (s : Set β) : diam (f
/- warning: antilipschitz_with.le_mul_ediam_image -> AntilipschitzWith.le_mul_ediam_image is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoEMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β _inst_1 _inst_2 K f) -> (forall (s : Set.{u1} α), LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.diam.{u1} α _inst_1 s) (HMul.hMul.{0, 0, 0} ENNReal ENNReal ENNReal (instHMul.{0} ENNReal (Distrib.toHasMul.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal ENNReal (HasLiftT.mk.{1, 1} NNReal ENNReal (CoeTCₓ.coe.{1, 1} NNReal ENNReal (coeBase.{1, 1} NNReal ENNReal ENNReal.hasCoe))) K) (EMetric.diam.{u2} β _inst_2 (Set.image.{u1, u2} α β f s))))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoEMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β _inst_1 _inst_2 K f) -> (forall (s : Set.{u1} α), LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.diam.{u1} α _inst_1 s) (HMul.hMul.{0, 0, 0} ENNReal ENNReal ENNReal (instHMul.{0} ENNReal (Distrib.toHasMul.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal ENNReal (HasLiftT.mk.{1, 1} NNReal ENNReal (CoeTCₓ.coe.{1, 1} NNReal ENNReal (coeBase.{1, 1} NNReal ENNReal ENNReal.hasCoe))) K) (EMetric.diam.{u2} β _inst_2 (Set.image.{u1, u2} α β f s))))
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u2} α] [_inst_2 : PseudoEMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β _inst_1 _inst_2 K f) -> (forall (s : Set.{u2} α), LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.diam.{u2} α _inst_1 s) (HMul.hMul.{0, 0, 0} ENNReal ENNReal ENNReal (instHMul.{0} ENNReal (CanonicallyOrderedCommSemiring.toMul.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)) (ENNReal.some K) (EMetric.diam.{u1} β _inst_2 (Set.image.{u2, u1} α β f s))))
Case conversion may be inaccurate. Consider using '#align antilipschitz_with.le_mul_ediam_image AntilipschitzWith.le_mul_ediam_imageₓ'. -/
@@ -298,7 +298,7 @@ theorem to_rightInverse (hf : AntilipschitzWith K f) {g : β → α} (hg : Funct
/- warning: antilipschitz_with.comap_uniformity_le -> AntilipschitzWith.comap_uniformity_le is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoEMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β _inst_1 _inst_2 K f) -> (LE.le.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (Preorder.toLE.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (PartialOrder.toPreorder.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (Filter.partialOrder.{u1} (Prod.{u1, u1} α α)))) (Filter.comap.{u1, u2} (Prod.{u1, u1} α α) (Prod.{u2, u2} β β) (Prod.map.{u1, u2, u1, u2} α β α β f f) (uniformity.{u2} β (PseudoEMetricSpace.toUniformSpace.{u2} β _inst_2))) (uniformity.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoEMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β _inst_1 _inst_2 K f) -> (LE.le.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (Preorder.toHasLe.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (PartialOrder.toPreorder.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (Filter.partialOrder.{u1} (Prod.{u1, u1} α α)))) (Filter.comap.{u1, u2} (Prod.{u1, u1} α α) (Prod.{u2, u2} β β) (Prod.map.{u1, u2, u1, u2} α β α β f f) (uniformity.{u2} β (PseudoEMetricSpace.toUniformSpace.{u2} β _inst_2))) (uniformity.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)))
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u2} α] [_inst_2 : PseudoEMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β _inst_1 _inst_2 K f) -> (LE.le.{u2} (Filter.{u2} (Prod.{u2, u2} α α)) (Preorder.toLE.{u2} (Filter.{u2} (Prod.{u2, u2} α α)) (PartialOrder.toPreorder.{u2} (Filter.{u2} (Prod.{u2, u2} α α)) (Filter.instPartialOrderFilter.{u2} (Prod.{u2, u2} α α)))) (Filter.comap.{u2, u1} (Prod.{u2, u2} α α) (Prod.{u1, u1} β β) (Prod.map.{u2, u1, u2, u1} α β α β f f) (uniformity.{u1} β (PseudoEMetricSpace.toUniformSpace.{u1} β _inst_2))) (uniformity.{u2} α (PseudoEMetricSpace.toUniformSpace.{u2} α _inst_1)))
Case conversion may be inaccurate. Consider using '#align antilipschitz_with.comap_uniformity_le AntilipschitzWith.comap_uniformity_leₓ'. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/172bf2812857f5e56938cc148b7a539f52f84ca9
@@ -259,18 +259,18 @@ theorem codRestrict (hf : AntilipschitzWith K f) {s : Set β} (hs : ∀ x, f x
AntilipschitzWith K (s.codRestrict f hs) := fun x y => hf x y
#align antilipschitz_with.cod_restrict AntilipschitzWith.codRestrict
-/- warning: antilipschitz_with.to_right_inv_on' -> AntilipschitzWith.to_right_inv_on' is a dubious translation:
+/- warning: antilipschitz_with.to_right_inv_on' -> AntilipschitzWith.to_rightInvOn' is a dubious translation:
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoEMetricSpace.{u2} β] {K : NNReal} {f : α -> β} {s : Set.{u1} α}, (AntilipschitzWith.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) β (Subtype.pseudoEmetricSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) _inst_1) _inst_2 K (Set.restrict.{u1, u2} α (fun (ᾰ : α) => β) s f)) -> (forall {g : β -> α} {t : Set.{u2} β}, (Set.MapsTo.{u2, u1} β α g t s) -> (Set.RightInvOn.{u1, u2} α β g f t) -> (LipschitzWith.{u2, u1} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} β) Type.{u2} (Set.hasCoeToSort.{u2} β) t) α (Subtype.pseudoEmetricSpace.{u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) x t) _inst_2) _inst_1 K (Set.restrict.{u2, u1} β (fun (ᾰ : β) => α) t g)))
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u2} α] [_inst_2 : PseudoEMetricSpace.{u1} β] {K : NNReal} {f : α -> β} {s : Set.{u2} α}, (AntilipschitzWith.{u2, u1} (Set.Elem.{u2} α s) β (instPseudoEMetricSpaceSubtype.{u2} α (fun (x : α) => Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) _inst_1) _inst_2 K (Set.restrict.{u2, u1} α (fun (ᾰ : α) => β) s f)) -> (forall {g : β -> α} {t : Set.{u1} β}, (Set.MapsTo.{u1, u2} β α g t s) -> (Set.RightInvOn.{u2, u1} α β g f t) -> (LipschitzWith.{u1, u2} (Set.Elem.{u1} β t) α (instPseudoEMetricSpaceSubtype.{u1} β (fun (x : β) => Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) x t) _inst_2) _inst_1 K (Set.restrict.{u1, u2} β (fun (ᾰ : β) => α) t g)))
-Case conversion may be inaccurate. Consider using '#align antilipschitz_with.to_right_inv_on' AntilipschitzWith.to_right_inv_on'ₓ'. -/
-theorem to_right_inv_on' {s : Set α} (hf : AntilipschitzWith K (s.restrict f)) {g : β → α}
- {t : Set β} (g_maps : MapsTo g t s) (g_inv : RightInvOn g f t) :
- LipschitzWith K (t.restrict g) := fun x y => by
+Case conversion may be inaccurate. Consider using '#align antilipschitz_with.to_right_inv_on' AntilipschitzWith.to_rightInvOn'ₓ'. -/
+theorem to_rightInvOn' {s : Set α} (hf : AntilipschitzWith K (s.restrict f)) {g : β → α} {t : Set β}
+ (g_maps : MapsTo g t s) (g_inv : RightInvOn g f t) : LipschitzWith K (t.restrict g) :=
+ fun x y => by
simpa only [restrict_apply, g_inv x.mem, g_inv y.mem, Subtype.edist_eq, Subtype.coe_mk] using
hf ⟨g x, g_maps x.mem⟩ ⟨g y, g_maps y.mem⟩
-#align antilipschitz_with.to_right_inv_on' AntilipschitzWith.to_right_inv_on'
+#align antilipschitz_with.to_right_inv_on' AntilipschitzWith.to_rightInvOn'
/- warning: antilipschitz_with.to_right_inv_on -> AntilipschitzWith.to_rightInvOn is a dubious translation:
lean 3 declaration is
@@ -280,7 +280,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align antilipschitz_with.to_right_inv_on AntilipschitzWith.to_rightInvOnₓ'. -/
theorem to_rightInvOn (hf : AntilipschitzWith K f) {g : β → α} {t : Set β} (h : RightInvOn g f t) :
LipschitzWith K (t.restrict g) :=
- (hf.restrict univ).to_right_inv_on' (mapsTo_univ g t) h
+ (hf.restrict univ).to_rightInvOn' (mapsTo_univ g t) h
#align antilipschitz_with.to_right_inv_on AntilipschitzWith.to_rightInvOn
/- warning: antilipschitz_with.to_right_inverse -> AntilipschitzWith.to_rightInverse is a dubious translation:
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce7e9d53d4bbc38065db3b595cd5bd73c323bc1d
@@ -465,7 +465,7 @@ theorem LipschitzWith.to_rightInverse [PseudoEMetricSpace α] [PseudoEMetricSpac
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoMetricSpace.{u1} α] [_inst_2 : MetricSpace.{u2} β] [_inst_3 : ProperSpace.{u2} β (MetricSpace.toPseudoMetricSpace.{u2} β _inst_2)] {K : NNReal} {f : Homeomorph.{u1, u2} α β (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) (UniformSpace.toTopologicalSpace.{u2} β (PseudoMetricSpace.toUniformSpace.{u2} β (MetricSpace.toPseudoMetricSpace.{u2} β _inst_2)))}, (LipschitzWith.{u1, u2} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u2} β (MetricSpace.toPseudoMetricSpace.{u2} β _inst_2)) K (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Homeomorph.{u1, u2} α β (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) (UniformSpace.toTopologicalSpace.{u2} β (PseudoMetricSpace.toUniformSpace.{u2} β (MetricSpace.toPseudoMetricSpace.{u2} β _inst_2)))) (fun (_x : Homeomorph.{u1, u2} α β (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) (UniformSpace.toTopologicalSpace.{u2} β (PseudoMetricSpace.toUniformSpace.{u2} β (MetricSpace.toPseudoMetricSpace.{u2} β _inst_2)))) => α -> β) (Homeomorph.hasCoeToFun.{u1, u2} α β (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) (UniformSpace.toTopologicalSpace.{u2} β (PseudoMetricSpace.toUniformSpace.{u2} β (MetricSpace.toPseudoMetricSpace.{u2} β _inst_2)))) f)) -> (ProperSpace.{u1} α _inst_1)
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u2} α] [_inst_2 : MetricSpace.{u1} β] [_inst_3 : ProperSpace.{u1} β (MetricSpace.toPseudoMetricSpace.{u1} β _inst_2)] {K : NNReal} {f : Homeomorph.{u2, u1} α β (UniformSpace.toTopologicalSpace.{u2} α (PseudoMetricSpace.toUniformSpace.{u2} α _inst_1)) (UniformSpace.toTopologicalSpace.{u1} β (PseudoMetricSpace.toUniformSpace.{u1} β (MetricSpace.toPseudoMetricSpace.{u1} β _inst_2)))}, (LipschitzWith.{u2, u1} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u2} α _inst_1) (EMetricSpace.toPseudoEMetricSpace.{u1} β (MetricSpace.toEMetricSpace.{u1} β _inst_2)) K (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (Homeomorph.{u2, u1} α β (UniformSpace.toTopologicalSpace.{u2} α (PseudoMetricSpace.toUniformSpace.{u2} α _inst_1)) (UniformSpace.toTopologicalSpace.{u1} β (PseudoMetricSpace.toUniformSpace.{u1} β (MetricSpace.toPseudoMetricSpace.{u1} β _inst_2)))) α (fun (_x : α) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : α) => β) _x) (EmbeddingLike.toFunLike.{max (succ u2) (succ u1), succ u2, succ u1} (Homeomorph.{u2, u1} α β (UniformSpace.toTopologicalSpace.{u2} α (PseudoMetricSpace.toUniformSpace.{u2} α _inst_1)) (UniformSpace.toTopologicalSpace.{u1} β (PseudoMetricSpace.toUniformSpace.{u1} β (MetricSpace.toPseudoMetricSpace.{u1} β _inst_2)))) α β (EquivLike.toEmbeddingLike.{max (succ u2) (succ u1), succ u2, succ u1} (Homeomorph.{u2, u1} α β (UniformSpace.toTopologicalSpace.{u2} α (PseudoMetricSpace.toUniformSpace.{u2} α _inst_1)) (UniformSpace.toTopologicalSpace.{u1} β (PseudoMetricSpace.toUniformSpace.{u1} β (MetricSpace.toPseudoMetricSpace.{u1} β _inst_2)))) α β (Homeomorph.instEquivLikeHomeomorph.{u2, u1} α β (UniformSpace.toTopologicalSpace.{u2} α (PseudoMetricSpace.toUniformSpace.{u2} α _inst_1)) (UniformSpace.toTopologicalSpace.{u1} β (PseudoMetricSpace.toUniformSpace.{u1} β (MetricSpace.toPseudoMetricSpace.{u1} β _inst_2)))))) f)) -> (ProperSpace.{u2} α _inst_1)
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u2} α] [_inst_2 : MetricSpace.{u1} β] [_inst_3 : ProperSpace.{u1} β (MetricSpace.toPseudoMetricSpace.{u1} β _inst_2)] {K : NNReal} {f : Homeomorph.{u2, u1} α β (UniformSpace.toTopologicalSpace.{u2} α (PseudoMetricSpace.toUniformSpace.{u2} α _inst_1)) (UniformSpace.toTopologicalSpace.{u1} β (PseudoMetricSpace.toUniformSpace.{u1} β (MetricSpace.toPseudoMetricSpace.{u1} β _inst_2)))}, (LipschitzWith.{u2, u1} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u2} α _inst_1) (EMetricSpace.toPseudoEMetricSpace.{u1} β (MetricSpace.toEMetricSpace.{u1} β _inst_2)) K (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (Homeomorph.{u2, u1} α β (UniformSpace.toTopologicalSpace.{u2} α (PseudoMetricSpace.toUniformSpace.{u2} α _inst_1)) (UniformSpace.toTopologicalSpace.{u1} β (PseudoMetricSpace.toUniformSpace.{u1} β (MetricSpace.toPseudoMetricSpace.{u1} β _inst_2)))) α (fun (_x : α) => β) (EmbeddingLike.toFunLike.{max (succ u2) (succ u1), succ u2, succ u1} (Homeomorph.{u2, u1} α β (UniformSpace.toTopologicalSpace.{u2} α (PseudoMetricSpace.toUniformSpace.{u2} α _inst_1)) (UniformSpace.toTopologicalSpace.{u1} β (PseudoMetricSpace.toUniformSpace.{u1} β (MetricSpace.toPseudoMetricSpace.{u1} β _inst_2)))) α β (EquivLike.toEmbeddingLike.{max (succ u2) (succ u1), succ u2, succ u1} (Homeomorph.{u2, u1} α β (UniformSpace.toTopologicalSpace.{u2} α (PseudoMetricSpace.toUniformSpace.{u2} α _inst_1)) (UniformSpace.toTopologicalSpace.{u1} β (PseudoMetricSpace.toUniformSpace.{u1} β (MetricSpace.toPseudoMetricSpace.{u1} β _inst_2)))) α β (Homeomorph.instEquivLikeHomeomorph.{u2, u1} α β (UniformSpace.toTopologicalSpace.{u2} α (PseudoMetricSpace.toUniformSpace.{u2} α _inst_1)) (UniformSpace.toTopologicalSpace.{u1} β (PseudoMetricSpace.toUniformSpace.{u1} β (MetricSpace.toPseudoMetricSpace.{u1} β _inst_2)))))) f)) -> (ProperSpace.{u2} α _inst_1)
Case conversion may be inaccurate. Consider using '#align lipschitz_with.proper_space LipschitzWith.properSpaceₓ'. -/
/-- The preimage of a proper space under a Lipschitz homeomorphism is proper. -/
@[protected]
mathlib commit https://github.com/leanprover-community/mathlib/commit/3180fab693e2cee3bff62675571264cb8778b212
@@ -182,7 +182,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align antilipschitz_with.injective AntilipschitzWith.injectiveₓ'. -/
protected theorem injective {α : Type _} {β : Type _} [EMetricSpace α] [PseudoEMetricSpace β]
{K : ℝ≥0} {f : α → β} (hf : AntilipschitzWith K f) : Function.Injective f := fun x y h => by
- simpa only [h, edist_self, mul_zero, edist_le_zero] using hf x y
+ simpa only [h, edist_self, MulZeroClass.mul_zero, edist_le_zero] using hf x y
#align antilipschitz_with.injective AntilipschitzWith.injective
/- warning: antilipschitz_with.mul_le_edist -> AntilipschitzWith.mul_le_edist is a dubious translation:
@@ -395,7 +395,7 @@ Case conversion may be inaccurate. Consider using '#align antilipschitz_with.sub
/-- If `f : α → β` is `0`-antilipschitz, then `α` is a `subsingleton`. -/
protected theorem subsingleton {α β} [EMetricSpace α] [PseudoEMetricSpace β] {f : α → β}
(h : AntilipschitzWith 0 f) : Subsingleton α :=
- ⟨fun x y => edist_le_zero.1 <| (h x y).trans_eq <| zero_mul _⟩
+ ⟨fun x y => edist_le_zero.1 <| (h x y).trans_eq <| MulZeroClass.zero_mul _⟩
#align antilipschitz_with.subsingleton AntilipschitzWith.subsingleton
end AntilipschitzWith
mathlib commit https://github.com/leanprover-community/mathlib/commit/21e3562c5e12d846c7def5eff8cdbc520d7d4936
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yury Kudryashov
! This file was ported from Lean 3 source module topology.metric_space.antilipschitz
-! leanprover-community/mathlib commit 97f079b7e89566de3a1143f887713667328c38ba
+! leanprover-community/mathlib commit f47581155c818e6361af4e4fda60d27d020c226b
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -14,6 +14,9 @@ import Mathbin.Topology.UniformSpace.CompleteSeparated
/-!
# Antilipschitz functions
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
We say that a map `f : α → β` between two (extended) metric spaces is
`antilipschitz_with K`, `K ≥ 0`, if for all `x, y` we have `edist x y ≤ K * edist (f x) (f y)`.
For a metric space, the latter inequality is equivalent to `dist x y ≤ K * dist (f x) (f y)`.
mathlib commit https://github.com/leanprover-community/mathlib/commit/3b267e70a936eebb21ab546f49a8df34dd300b25
@@ -32,17 +32,31 @@ open NNReal ENNReal uniformity
open Set Filter Bornology
+#print AntilipschitzWith /-
/-- We say that `f : α → β` is `antilipschitz_with K` if for any two points `x`, `y` we have
`edist x y ≤ K * edist (f x) (f y)`. -/
def AntilipschitzWith [PseudoEMetricSpace α] [PseudoEMetricSpace β] (K : ℝ≥0) (f : α → β) :=
∀ x y, edist x y ≤ K * edist (f x) (f y)
#align antilipschitz_with AntilipschitzWith
+-/
+/- warning: antilipschitz_with.edist_lt_top -> AntilipschitzWith.edist_lt_top is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β _inst_1 (PseudoMetricSpace.toPseudoEMetricSpace.{u2} β _inst_2) K f) -> (forall (x : α) (y : α), LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y) (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u2} α] [_inst_2 : PseudoMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β _inst_1 (PseudoMetricSpace.toPseudoEMetricSpace.{u1} β _inst_2) K f) -> (forall (x : α) (y : α), LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EDist.edist.{u2} α (PseudoEMetricSpace.toEDist.{u2} α _inst_1) x y) (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))
+Case conversion may be inaccurate. Consider using '#align antilipschitz_with.edist_lt_top AntilipschitzWith.edist_lt_topₓ'. -/
theorem AntilipschitzWith.edist_lt_top [PseudoEMetricSpace α] [PseudoMetricSpace β] {K : ℝ≥0}
{f : α → β} (h : AntilipschitzWith K f) (x y : α) : edist x y < ⊤ :=
(h x y).trans_lt <| ENNReal.mul_lt_top ENNReal.coe_ne_top (edist_ne_top _ _)
#align antilipschitz_with.edist_lt_top AntilipschitzWith.edist_lt_top
+/- warning: antilipschitz_with.edist_ne_top -> AntilipschitzWith.edist_ne_top is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β _inst_1 (PseudoMetricSpace.toPseudoEMetricSpace.{u2} β _inst_2) K f) -> (forall (x : α) (y : α), Ne.{1} ENNReal (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y) (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u2} α] [_inst_2 : PseudoMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β _inst_1 (PseudoMetricSpace.toPseudoEMetricSpace.{u1} β _inst_2) K f) -> (forall (x : α) (y : α), Ne.{1} ENNReal (EDist.edist.{u2} α (PseudoEMetricSpace.toEDist.{u2} α _inst_1) x y) (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))
+Case conversion may be inaccurate. Consider using '#align antilipschitz_with.edist_ne_top AntilipschitzWith.edist_ne_topₓ'. -/
theorem AntilipschitzWith.edist_ne_top [PseudoEMetricSpace α] [PseudoMetricSpace β] {K : ℝ≥0}
{f : α → β} (h : AntilipschitzWith K f) (x y : α) : edist x y ≠ ⊤ :=
(h.edist_lt_top x y).Ne
@@ -52,6 +66,12 @@ section Metric
variable [PseudoMetricSpace α] [PseudoMetricSpace β] {K : ℝ≥0} {f : α → β}
+/- warning: antilipschitz_with_iff_le_mul_nndist -> antilipschitzWith_iff_le_mul_nndist is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoMetricSpace.{u1} α] [_inst_2 : PseudoMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, Iff (AntilipschitzWith.{u1, u2} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u2} β _inst_2) K f) (forall (x : α) (y : α), LE.le.{0} NNReal (Preorder.toLE.{0} NNReal (PartialOrder.toPreorder.{0} NNReal (OrderedCancelAddCommMonoid.toPartialOrder.{0} NNReal (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} NNReal NNReal.strictOrderedSemiring)))) (NNDist.nndist.{u1} α (PseudoMetricSpace.toNNDist.{u1} α _inst_1) x y) (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (Distrib.toHasMul.{0} NNReal (NonUnitalNonAssocSemiring.toDistrib.{0} NNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))) K (NNDist.nndist.{u2} β (PseudoMetricSpace.toNNDist.{u2} β _inst_2) (f x) (f y))))
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u2} α] [_inst_2 : PseudoMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, Iff (AntilipschitzWith.{u2, u1} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u2} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u1} β _inst_2) K f) (forall (x : α) (y : α), LE.le.{0} NNReal (Preorder.toLE.{0} NNReal (PartialOrder.toPreorder.{0} NNReal (StrictOrderedSemiring.toPartialOrder.{0} NNReal instNNRealStrictOrderedSemiring))) (NNDist.nndist.{u2} α (PseudoMetricSpace.toNNDist.{u2} α _inst_1) x y) (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (CanonicallyOrderedCommSemiring.toMul.{0} NNReal instNNRealCanonicallyOrderedCommSemiring)) K (NNDist.nndist.{u1} β (PseudoMetricSpace.toNNDist.{u1} β _inst_2) (f x) (f y))))
+Case conversion may be inaccurate. Consider using '#align antilipschitz_with_iff_le_mul_nndist antilipschitzWith_iff_le_mul_nndistₓ'. -/
theorem antilipschitzWith_iff_le_mul_nndist :
AntilipschitzWith K f ↔ ∀ x y, nndist x y ≤ K * nndist (f x) (f y) :=
by
@@ -59,11 +79,29 @@ theorem antilipschitzWith_iff_le_mul_nndist :
norm_cast
#align antilipschitz_with_iff_le_mul_nndist antilipschitzWith_iff_le_mul_nndist
+/- warning: antilipschitz_with.le_mul_nndist -> AntilipschitzWith.le_mul_nndist is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoMetricSpace.{u1} α] [_inst_2 : PseudoMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u2} β _inst_2) K f) -> (forall (x : α) (y : α), LE.le.{0} NNReal (Preorder.toLE.{0} NNReal (PartialOrder.toPreorder.{0} NNReal (OrderedCancelAddCommMonoid.toPartialOrder.{0} NNReal (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} NNReal NNReal.strictOrderedSemiring)))) (NNDist.nndist.{u1} α (PseudoMetricSpace.toNNDist.{u1} α _inst_1) x y) (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (Distrib.toHasMul.{0} NNReal (NonUnitalNonAssocSemiring.toDistrib.{0} NNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))) K (NNDist.nndist.{u2} β (PseudoMetricSpace.toNNDist.{u2} β _inst_2) (f x) (f y))))
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u2} α] [_inst_2 : PseudoMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u2} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u1} β _inst_2) K f) -> (forall (x : α) (y : α), LE.le.{0} NNReal (Preorder.toLE.{0} NNReal (PartialOrder.toPreorder.{0} NNReal (StrictOrderedSemiring.toPartialOrder.{0} NNReal instNNRealStrictOrderedSemiring))) (NNDist.nndist.{u2} α (PseudoMetricSpace.toNNDist.{u2} α _inst_1) x y) (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (CanonicallyOrderedCommSemiring.toMul.{0} NNReal instNNRealCanonicallyOrderedCommSemiring)) K (NNDist.nndist.{u1} β (PseudoMetricSpace.toNNDist.{u1} β _inst_2) (f x) (f y))))
+Case conversion may be inaccurate. Consider using '#align antilipschitz_with.le_mul_nndist AntilipschitzWith.le_mul_nndistₓ'. -/
+/- warning: antilipschitz_with.of_le_mul_nndist -> AntilipschitzWith.of_le_mul_nndist is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoMetricSpace.{u1} α] [_inst_2 : PseudoMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (forall (x : α) (y : α), LE.le.{0} NNReal (Preorder.toLE.{0} NNReal (PartialOrder.toPreorder.{0} NNReal (OrderedCancelAddCommMonoid.toPartialOrder.{0} NNReal (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} NNReal NNReal.strictOrderedSemiring)))) (NNDist.nndist.{u1} α (PseudoMetricSpace.toNNDist.{u1} α _inst_1) x y) (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (Distrib.toHasMul.{0} NNReal (NonUnitalNonAssocSemiring.toDistrib.{0} NNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))) K (NNDist.nndist.{u2} β (PseudoMetricSpace.toNNDist.{u2} β _inst_2) (f x) (f y)))) -> (AntilipschitzWith.{u1, u2} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u2} β _inst_2) K f)
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u2} α] [_inst_2 : PseudoMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (forall (x : α) (y : α), LE.le.{0} NNReal (Preorder.toLE.{0} NNReal (PartialOrder.toPreorder.{0} NNReal (StrictOrderedSemiring.toPartialOrder.{0} NNReal instNNRealStrictOrderedSemiring))) (NNDist.nndist.{u2} α (PseudoMetricSpace.toNNDist.{u2} α _inst_1) x y) (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (CanonicallyOrderedCommSemiring.toMul.{0} NNReal instNNRealCanonicallyOrderedCommSemiring)) K (NNDist.nndist.{u1} β (PseudoMetricSpace.toNNDist.{u1} β _inst_2) (f x) (f y)))) -> (AntilipschitzWith.{u2, u1} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u2} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u1} β _inst_2) K f)
+Case conversion may be inaccurate. Consider using '#align antilipschitz_with.of_le_mul_nndist AntilipschitzWith.of_le_mul_nndistₓ'. -/
alias antilipschitzWith_iff_le_mul_nndist ↔
AntilipschitzWith.le_mul_nndist AntilipschitzWith.of_le_mul_nndist
#align antilipschitz_with.le_mul_nndist AntilipschitzWith.le_mul_nndist
#align antilipschitz_with.of_le_mul_nndist AntilipschitzWith.of_le_mul_nndist
+/- warning: antilipschitz_with_iff_le_mul_dist -> antilipschitzWith_iff_le_mul_dist is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoMetricSpace.{u1} α] [_inst_2 : PseudoMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, Iff (AntilipschitzWith.{u1, u2} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u2} β _inst_2) K f) (forall (x : α) (y : α), LE.le.{0} Real Real.hasLe (Dist.dist.{u1} α (PseudoMetricSpace.toHasDist.{u1} α _inst_1) x y) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal Real (HasLiftT.mk.{1, 1} NNReal Real (CoeTCₓ.coe.{1, 1} NNReal Real (coeBase.{1, 1} NNReal Real NNReal.Real.hasCoe))) K) (Dist.dist.{u2} β (PseudoMetricSpace.toHasDist.{u2} β _inst_2) (f x) (f y))))
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u2} α] [_inst_2 : PseudoMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, Iff (AntilipschitzWith.{u2, u1} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u2} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u1} β _inst_2) K f) (forall (x : α) (y : α), LE.le.{0} Real Real.instLEReal (Dist.dist.{u2} α (PseudoMetricSpace.toDist.{u2} α _inst_1) x y) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) (NNReal.toReal K) (Dist.dist.{u1} β (PseudoMetricSpace.toDist.{u1} β _inst_2) (f x) (f y))))
+Case conversion may be inaccurate. Consider using '#align antilipschitz_with_iff_le_mul_dist antilipschitzWith_iff_le_mul_distₓ'. -/
theorem antilipschitzWith_iff_le_mul_dist :
AntilipschitzWith K f ↔ ∀ x y, dist x y ≤ K * dist (f x) (f y) :=
by
@@ -71,6 +109,18 @@ theorem antilipschitzWith_iff_le_mul_dist :
norm_cast
#align antilipschitz_with_iff_le_mul_dist antilipschitzWith_iff_le_mul_dist
+/- warning: antilipschitz_with.le_mul_dist -> AntilipschitzWith.le_mul_dist is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoMetricSpace.{u1} α] [_inst_2 : PseudoMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u2} β _inst_2) K f) -> (forall (x : α) (y : α), LE.le.{0} Real Real.hasLe (Dist.dist.{u1} α (PseudoMetricSpace.toHasDist.{u1} α _inst_1) x y) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal Real (HasLiftT.mk.{1, 1} NNReal Real (CoeTCₓ.coe.{1, 1} NNReal Real (coeBase.{1, 1} NNReal Real NNReal.Real.hasCoe))) K) (Dist.dist.{u2} β (PseudoMetricSpace.toHasDist.{u2} β _inst_2) (f x) (f y))))
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u2} α] [_inst_2 : PseudoMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u2} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u1} β _inst_2) K f) -> (forall (x : α) (y : α), LE.le.{0} Real Real.instLEReal (Dist.dist.{u2} α (PseudoMetricSpace.toDist.{u2} α _inst_1) x y) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) (NNReal.toReal K) (Dist.dist.{u1} β (PseudoMetricSpace.toDist.{u1} β _inst_2) (f x) (f y))))
+Case conversion may be inaccurate. Consider using '#align antilipschitz_with.le_mul_dist AntilipschitzWith.le_mul_distₓ'. -/
+/- warning: antilipschitz_with.of_le_mul_dist -> AntilipschitzWith.of_le_mul_dist is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoMetricSpace.{u1} α] [_inst_2 : PseudoMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (forall (x : α) (y : α), LE.le.{0} Real Real.hasLe (Dist.dist.{u1} α (PseudoMetricSpace.toHasDist.{u1} α _inst_1) x y) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal Real (HasLiftT.mk.{1, 1} NNReal Real (CoeTCₓ.coe.{1, 1} NNReal Real (coeBase.{1, 1} NNReal Real NNReal.Real.hasCoe))) K) (Dist.dist.{u2} β (PseudoMetricSpace.toHasDist.{u2} β _inst_2) (f x) (f y)))) -> (AntilipschitzWith.{u1, u2} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u2} β _inst_2) K f)
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u2} α] [_inst_2 : PseudoMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (forall (x : α) (y : α), LE.le.{0} Real Real.instLEReal (Dist.dist.{u2} α (PseudoMetricSpace.toDist.{u2} α _inst_1) x y) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) (NNReal.toReal K) (Dist.dist.{u1} β (PseudoMetricSpace.toDist.{u1} β _inst_2) (f x) (f y)))) -> (AntilipschitzWith.{u2, u1} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u2} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u1} β _inst_2) K f)
+Case conversion may be inaccurate. Consider using '#align antilipschitz_with.of_le_mul_dist AntilipschitzWith.of_le_mul_distₓ'. -/
alias antilipschitzWith_iff_le_mul_dist ↔
AntilipschitzWith.le_mul_dist AntilipschitzWith.of_le_mul_dist
#align antilipschitz_with.le_mul_dist AntilipschitzWith.le_mul_dist
@@ -78,11 +128,23 @@ alias antilipschitzWith_iff_le_mul_dist ↔
namespace AntilipschitzWith
+/- warning: antilipschitz_with.mul_le_nndist -> AntilipschitzWith.mul_le_nndist is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoMetricSpace.{u1} α] [_inst_2 : PseudoMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u2} β _inst_2) K f) -> (forall (x : α) (y : α), LE.le.{0} NNReal (Preorder.toLE.{0} NNReal (PartialOrder.toPreorder.{0} NNReal (OrderedCancelAddCommMonoid.toPartialOrder.{0} NNReal (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} NNReal NNReal.strictOrderedSemiring)))) (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (Distrib.toHasMul.{0} NNReal (NonUnitalNonAssocSemiring.toDistrib.{0} NNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))) (Inv.inv.{0} NNReal (DivInvMonoid.toHasInv.{0} NNReal (GroupWithZero.toDivInvMonoid.{0} NNReal (DivisionSemiring.toGroupWithZero.{0} NNReal (Semifield.toDivisionSemiring.{0} NNReal (LinearOrderedSemifield.toSemifield.{0} NNReal (CanonicallyLinearOrderedSemifield.toLinearOrderedSemifield.{0} NNReal NNReal.canonicallyLinearOrderedSemifield)))))) K) (NNDist.nndist.{u1} α (PseudoMetricSpace.toNNDist.{u1} α _inst_1) x y)) (NNDist.nndist.{u2} β (PseudoMetricSpace.toNNDist.{u2} β _inst_2) (f x) (f y)))
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u2} α] [_inst_2 : PseudoMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u2} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u1} β _inst_2) K f) -> (forall (x : α) (y : α), LE.le.{0} NNReal (Preorder.toLE.{0} NNReal (PartialOrder.toPreorder.{0} NNReal (StrictOrderedSemiring.toPartialOrder.{0} NNReal instNNRealStrictOrderedSemiring))) (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (CanonicallyOrderedCommSemiring.toMul.{0} NNReal instNNRealCanonicallyOrderedCommSemiring)) (Inv.inv.{0} NNReal (CanonicallyLinearOrderedSemifield.toInv.{0} NNReal NNReal.instCanonicallyLinearOrderedSemifieldNNReal) K) (NNDist.nndist.{u2} α (PseudoMetricSpace.toNNDist.{u2} α _inst_1) x y)) (NNDist.nndist.{u1} β (PseudoMetricSpace.toNNDist.{u1} β _inst_2) (f x) (f y)))
+Case conversion may be inaccurate. Consider using '#align antilipschitz_with.mul_le_nndist AntilipschitzWith.mul_le_nndistₓ'. -/
theorem mul_le_nndist (hf : AntilipschitzWith K f) (x y : α) :
K⁻¹ * nndist x y ≤ nndist (f x) (f y) := by
simpa only [div_eq_inv_mul] using NNReal.div_le_of_le_mul' (hf.le_mul_nndist x y)
#align antilipschitz_with.mul_le_nndist AntilipschitzWith.mul_le_nndist
+/- warning: antilipschitz_with.mul_le_dist -> AntilipschitzWith.mul_le_dist is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoMetricSpace.{u1} α] [_inst_2 : PseudoMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u2} β _inst_2) K f) -> (forall (x : α) (y : α), LE.le.{0} Real Real.hasLe (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) (Inv.inv.{0} Real Real.hasInv ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal Real (HasLiftT.mk.{1, 1} NNReal Real (CoeTCₓ.coe.{1, 1} NNReal Real (coeBase.{1, 1} NNReal Real NNReal.Real.hasCoe))) K)) (Dist.dist.{u1} α (PseudoMetricSpace.toHasDist.{u1} α _inst_1) x y)) (Dist.dist.{u2} β (PseudoMetricSpace.toHasDist.{u2} β _inst_2) (f x) (f y)))
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u2} α] [_inst_2 : PseudoMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u2} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u1} β _inst_2) K f) -> (forall (x : α) (y : α), LE.le.{0} Real Real.instLEReal (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) (NNReal.toReal (Inv.inv.{0} NNReal (CanonicallyLinearOrderedSemifield.toInv.{0} NNReal NNReal.instCanonicallyLinearOrderedSemifieldNNReal) K)) (Dist.dist.{u2} α (PseudoMetricSpace.toDist.{u2} α _inst_1) x y)) (Dist.dist.{u1} β (PseudoMetricSpace.toDist.{u1} β _inst_2) (f x) (f y)))
+Case conversion may be inaccurate. Consider using '#align antilipschitz_with.mul_le_dist AntilipschitzWith.mul_le_distₓ'. -/
theorem mul_le_dist (hf : AntilipschitzWith K f) (x y : α) :
(K⁻¹ * dist x y : ℝ) ≤ dist (f x) (f y) := by exact_mod_cast hf.mul_le_nndist x y
#align antilipschitz_with.mul_le_dist AntilipschitzWith.mul_le_dist
@@ -99,6 +161,7 @@ variable {K : ℝ≥0} {f : α → β}
open Emetric
+#print AntilipschitzWith.k /-
-- uses neither `f` nor `hf`
/-- Extract the constant from `hf : antilipschitz_with K f`. This is useful, e.g.,
if `K` is given by a long formula, and we want to reuse this value. -/
@@ -106,12 +169,25 @@ if `K` is given by a long formula, and we want to reuse this value. -/
protected def k (hf : AntilipschitzWith K f) : ℝ≥0 :=
K
#align antilipschitz_with.K AntilipschitzWith.k
+-/
+/- warning: antilipschitz_with.injective -> AntilipschitzWith.injective is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_4 : EMetricSpace.{u1} α] [_inst_5 : PseudoEMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β (EMetricSpace.toPseudoEmetricSpace.{u1} α _inst_4) _inst_5 K f) -> (Function.Injective.{succ u1, succ u2} α β f)
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_4 : EMetricSpace.{u2} α] [_inst_5 : PseudoEMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β (EMetricSpace.toPseudoEMetricSpace.{u2} α _inst_4) _inst_5 K f) -> (Function.Injective.{succ u2, succ u1} α β f)
+Case conversion may be inaccurate. Consider using '#align antilipschitz_with.injective AntilipschitzWith.injectiveₓ'. -/
protected theorem injective {α : Type _} {β : Type _} [EMetricSpace α] [PseudoEMetricSpace β]
{K : ℝ≥0} {f : α → β} (hf : AntilipschitzWith K f) : Function.Injective f := fun x y h => by
simpa only [h, edist_self, mul_zero, edist_le_zero] using hf x y
#align antilipschitz_with.injective AntilipschitzWith.injective
+/- warning: antilipschitz_with.mul_le_edist -> AntilipschitzWith.mul_le_edist is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoEMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β _inst_1 _inst_2 K f) -> (forall (x : α) (y : α), LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (HMul.hMul.{0, 0, 0} ENNReal ENNReal ENNReal (instHMul.{0} ENNReal (Distrib.toHasMul.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (Inv.inv.{0} ENNReal ENNReal.hasInv ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal ENNReal (HasLiftT.mk.{1, 1} NNReal ENNReal (CoeTCₓ.coe.{1, 1} NNReal ENNReal (coeBase.{1, 1} NNReal ENNReal ENNReal.hasCoe))) K)) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y)) (EDist.edist.{u2} β (PseudoEMetricSpace.toHasEdist.{u2} β _inst_2) (f x) (f y)))
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u2} α] [_inst_2 : PseudoEMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β _inst_1 _inst_2 K f) -> (forall (x : α) (y : α), LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (HMul.hMul.{0, 0, 0} ENNReal ENNReal ENNReal (instHMul.{0} ENNReal (CanonicallyOrderedCommSemiring.toMul.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)) (Inv.inv.{0} ENNReal ENNReal.instInvENNReal (ENNReal.some K)) (EDist.edist.{u2} α (PseudoEMetricSpace.toEDist.{u2} α _inst_1) x y)) (EDist.edist.{u1} β (PseudoEMetricSpace.toEDist.{u1} β _inst_2) (f x) (f y)))
+Case conversion may be inaccurate. Consider using '#align antilipschitz_with.mul_le_edist AntilipschitzWith.mul_le_edistₓ'. -/
theorem mul_le_edist (hf : AntilipschitzWith K f) (x y : α) :
(K⁻¹ * edist x y : ℝ≥0∞) ≤ edist (f x) (f y) :=
by
@@ -119,18 +195,38 @@ theorem mul_le_edist (hf : AntilipschitzWith K f) (x y : α) :
exact ENNReal.div_le_of_le_mul' (hf x y)
#align antilipschitz_with.mul_le_edist AntilipschitzWith.mul_le_edist
+/- warning: antilipschitz_with.ediam_preimage_le -> AntilipschitzWith.ediam_preimage_le is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoEMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β _inst_1 _inst_2 K f) -> (forall (s : Set.{u2} β), LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.diam.{u1} α _inst_1 (Set.preimage.{u1, u2} α β f s)) (HMul.hMul.{0, 0, 0} ENNReal ENNReal ENNReal (instHMul.{0} ENNReal (Distrib.toHasMul.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal ENNReal (HasLiftT.mk.{1, 1} NNReal ENNReal (CoeTCₓ.coe.{1, 1} NNReal ENNReal (coeBase.{1, 1} NNReal ENNReal ENNReal.hasCoe))) K) (EMetric.diam.{u2} β _inst_2 s)))
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u2} α] [_inst_2 : PseudoEMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β _inst_1 _inst_2 K f) -> (forall (s : Set.{u1} β), LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.diam.{u2} α _inst_1 (Set.preimage.{u2, u1} α β f s)) (HMul.hMul.{0, 0, 0} ENNReal ENNReal ENNReal (instHMul.{0} ENNReal (CanonicallyOrderedCommSemiring.toMul.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)) (ENNReal.some K) (EMetric.diam.{u1} β _inst_2 s)))
+Case conversion may be inaccurate. Consider using '#align antilipschitz_with.ediam_preimage_le AntilipschitzWith.ediam_preimage_leₓ'. -/
theorem ediam_preimage_le (hf : AntilipschitzWith K f) (s : Set β) : diam (f ⁻¹' s) ≤ K * diam s :=
diam_le fun x hx y hy => (hf x y).trans <| mul_le_mul_left' (edist_le_diam_of_mem hx hy) K
#align antilipschitz_with.ediam_preimage_le AntilipschitzWith.ediam_preimage_le
+/- warning: antilipschitz_with.le_mul_ediam_image -> AntilipschitzWith.le_mul_ediam_image is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoEMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β _inst_1 _inst_2 K f) -> (forall (s : Set.{u1} α), LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.diam.{u1} α _inst_1 s) (HMul.hMul.{0, 0, 0} ENNReal ENNReal ENNReal (instHMul.{0} ENNReal (Distrib.toHasMul.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal ENNReal (HasLiftT.mk.{1, 1} NNReal ENNReal (CoeTCₓ.coe.{1, 1} NNReal ENNReal (coeBase.{1, 1} NNReal ENNReal ENNReal.hasCoe))) K) (EMetric.diam.{u2} β _inst_2 (Set.image.{u1, u2} α β f s))))
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u2} α] [_inst_2 : PseudoEMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β _inst_1 _inst_2 K f) -> (forall (s : Set.{u2} α), LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.diam.{u2} α _inst_1 s) (HMul.hMul.{0, 0, 0} ENNReal ENNReal ENNReal (instHMul.{0} ENNReal (CanonicallyOrderedCommSemiring.toMul.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)) (ENNReal.some K) (EMetric.diam.{u1} β _inst_2 (Set.image.{u2, u1} α β f s))))
+Case conversion may be inaccurate. Consider using '#align antilipschitz_with.le_mul_ediam_image AntilipschitzWith.le_mul_ediam_imageₓ'. -/
theorem le_mul_ediam_image (hf : AntilipschitzWith K f) (s : Set α) : diam s ≤ K * diam (f '' s) :=
(diam_mono (subset_preimage_image _ _)).trans (hf.ediam_preimage_le (f '' s))
#align antilipschitz_with.le_mul_ediam_image AntilipschitzWith.le_mul_ediam_image
+#print AntilipschitzWith.id /-
protected theorem id : AntilipschitzWith 1 (id : α → α) := fun x y => by
simp only [ENNReal.coe_one, one_mul, id, le_refl]
#align antilipschitz_with.id AntilipschitzWith.id
+-/
+/- warning: antilipschitz_with.comp -> AntilipschitzWith.comp is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoEMetricSpace.{u2} β] [_inst_3 : PseudoEMetricSpace.{u3} γ] {Kg : NNReal} {g : β -> γ}, (AntilipschitzWith.{u2, u3} β γ _inst_2 _inst_3 Kg g) -> (forall {Kf : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β _inst_1 _inst_2 Kf f) -> (AntilipschitzWith.{u1, u3} α γ _inst_1 _inst_3 (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (Distrib.toHasMul.{0} NNReal (NonUnitalNonAssocSemiring.toDistrib.{0} NNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))) Kf Kg) (Function.comp.{succ u1, succ u2, succ u3} α β γ g f)))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoEMetricSpace.{u3} β] [_inst_3 : PseudoEMetricSpace.{u2} γ] {Kg : NNReal} {g : β -> γ}, (AntilipschitzWith.{u3, u2} β γ _inst_2 _inst_3 Kg g) -> (forall {Kf : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u3} α β _inst_1 _inst_2 Kf f) -> (AntilipschitzWith.{u1, u2} α γ _inst_1 _inst_3 (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (CanonicallyOrderedCommSemiring.toMul.{0} NNReal instNNRealCanonicallyOrderedCommSemiring)) Kf Kg) (Function.comp.{succ u1, succ u3, succ u2} α β γ g f)))
+Case conversion may be inaccurate. Consider using '#align antilipschitz_with.comp AntilipschitzWith.compₓ'. -/
theorem comp {Kg : ℝ≥0} {g : β → γ} (hg : AntilipschitzWith Kg g) {Kf : ℝ≥0} {f : α → β}
(hf : AntilipschitzWith Kf f) : AntilipschitzWith (Kf * Kg) (g ∘ f) := fun x y =>
calc
@@ -140,14 +236,32 @@ theorem comp {Kg : ℝ≥0} {g : β → γ} (hg : AntilipschitzWith Kg g) {Kf :
#align antilipschitz_with.comp AntilipschitzWith.comp
+/- warning: antilipschitz_with.restrict -> AntilipschitzWith.restrict is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoEMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β _inst_1 _inst_2 K f) -> (forall (s : Set.{u1} α), AntilipschitzWith.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) β (Subtype.pseudoEmetricSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) _inst_1) _inst_2 K (Set.restrict.{u1, u2} α (fun (ᾰ : α) => β) s f))
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u2} α] [_inst_2 : PseudoEMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β _inst_1 _inst_2 K f) -> (forall (s : Set.{u2} α), AntilipschitzWith.{u2, u1} (Set.Elem.{u2} α s) β (instPseudoEMetricSpaceSubtype.{u2} α (fun (x : α) => Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) _inst_1) _inst_2 K (Set.restrict.{u2, u1} α (fun (ᾰ : α) => β) s f))
+Case conversion may be inaccurate. Consider using '#align antilipschitz_with.restrict AntilipschitzWith.restrictₓ'. -/
theorem restrict (hf : AntilipschitzWith K f) (s : Set α) : AntilipschitzWith K (s.restrict f) :=
fun x y => hf x y
#align antilipschitz_with.restrict AntilipschitzWith.restrict
+/- warning: antilipschitz_with.cod_restrict -> AntilipschitzWith.codRestrict is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoEMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β _inst_1 _inst_2 K f) -> (forall {s : Set.{u2} β} (hs : forall (x : α), Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) (f x) s), AntilipschitzWith.{u1, u2} α (coeSort.{succ u2, succ (succ u2)} (Set.{u2} β) Type.{u2} (Set.hasCoeToSort.{u2} β) s) _inst_1 (Subtype.pseudoEmetricSpace.{u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) x s) _inst_2) K (Set.codRestrict.{u2, succ u1} β α f s hs))
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u2} α] [_inst_2 : PseudoEMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β _inst_1 _inst_2 K f) -> (forall {s : Set.{u1} β} (hs : forall (x : α), Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) (f x) s), AntilipschitzWith.{u2, u1} α (Set.Elem.{u1} β s) _inst_1 (instPseudoEMetricSpaceSubtype.{u1} β (fun (x : β) => Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) x s) _inst_2) K (Set.codRestrict.{u1, succ u2} β α f s hs))
+Case conversion may be inaccurate. Consider using '#align antilipschitz_with.cod_restrict AntilipschitzWith.codRestrictₓ'. -/
theorem codRestrict (hf : AntilipschitzWith K f) {s : Set β} (hs : ∀ x, f x ∈ s) :
AntilipschitzWith K (s.codRestrict f hs) := fun x y => hf x y
#align antilipschitz_with.cod_restrict AntilipschitzWith.codRestrict
+/- warning: antilipschitz_with.to_right_inv_on' -> AntilipschitzWith.to_right_inv_on' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoEMetricSpace.{u2} β] {K : NNReal} {f : α -> β} {s : Set.{u1} α}, (AntilipschitzWith.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) β (Subtype.pseudoEmetricSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) _inst_1) _inst_2 K (Set.restrict.{u1, u2} α (fun (ᾰ : α) => β) s f)) -> (forall {g : β -> α} {t : Set.{u2} β}, (Set.MapsTo.{u2, u1} β α g t s) -> (Set.RightInvOn.{u1, u2} α β g f t) -> (LipschitzWith.{u2, u1} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} β) Type.{u2} (Set.hasCoeToSort.{u2} β) t) α (Subtype.pseudoEmetricSpace.{u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) x t) _inst_2) _inst_1 K (Set.restrict.{u2, u1} β (fun (ᾰ : β) => α) t g)))
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u2} α] [_inst_2 : PseudoEMetricSpace.{u1} β] {K : NNReal} {f : α -> β} {s : Set.{u2} α}, (AntilipschitzWith.{u2, u1} (Set.Elem.{u2} α s) β (instPseudoEMetricSpaceSubtype.{u2} α (fun (x : α) => Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) _inst_1) _inst_2 K (Set.restrict.{u2, u1} α (fun (ᾰ : α) => β) s f)) -> (forall {g : β -> α} {t : Set.{u1} β}, (Set.MapsTo.{u1, u2} β α g t s) -> (Set.RightInvOn.{u2, u1} α β g f t) -> (LipschitzWith.{u1, u2} (Set.Elem.{u1} β t) α (instPseudoEMetricSpaceSubtype.{u1} β (fun (x : β) => Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) x t) _inst_2) _inst_1 K (Set.restrict.{u1, u2} β (fun (ᾰ : β) => α) t g)))
+Case conversion may be inaccurate. Consider using '#align antilipschitz_with.to_right_inv_on' AntilipschitzWith.to_right_inv_on'ₓ'. -/
theorem to_right_inv_on' {s : Set α} (hf : AntilipschitzWith K (s.restrict f)) {g : β → α}
{t : Set β} (g_maps : MapsTo g t s) (g_inv : RightInvOn g f t) :
LipschitzWith K (t.restrict g) := fun x y => by
@@ -155,11 +269,23 @@ theorem to_right_inv_on' {s : Set α} (hf : AntilipschitzWith K (s.restrict f))
hf ⟨g x, g_maps x.mem⟩ ⟨g y, g_maps y.mem⟩
#align antilipschitz_with.to_right_inv_on' AntilipschitzWith.to_right_inv_on'
+/- warning: antilipschitz_with.to_right_inv_on -> AntilipschitzWith.to_rightInvOn is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoEMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β _inst_1 _inst_2 K f) -> (forall {g : β -> α} {t : Set.{u2} β}, (Set.RightInvOn.{u1, u2} α β g f t) -> (LipschitzWith.{u2, u1} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} β) Type.{u2} (Set.hasCoeToSort.{u2} β) t) α (Subtype.pseudoEmetricSpace.{u2} β (fun (x : β) => Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) x t) _inst_2) _inst_1 K (Set.restrict.{u2, u1} β (fun (ᾰ : β) => α) t g)))
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u2} α] [_inst_2 : PseudoEMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β _inst_1 _inst_2 K f) -> (forall {g : β -> α} {t : Set.{u1} β}, (Set.RightInvOn.{u2, u1} α β g f t) -> (LipschitzWith.{u1, u2} (Set.Elem.{u1} β t) α (instPseudoEMetricSpaceSubtype.{u1} β (fun (x : β) => Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) x t) _inst_2) _inst_1 K (Set.restrict.{u1, u2} β (fun (ᾰ : β) => α) t g)))
+Case conversion may be inaccurate. Consider using '#align antilipschitz_with.to_right_inv_on AntilipschitzWith.to_rightInvOnₓ'. -/
theorem to_rightInvOn (hf : AntilipschitzWith K f) {g : β → α} {t : Set β} (h : RightInvOn g f t) :
LipschitzWith K (t.restrict g) :=
(hf.restrict univ).to_right_inv_on' (mapsTo_univ g t) h
#align antilipschitz_with.to_right_inv_on AntilipschitzWith.to_rightInvOn
+/- warning: antilipschitz_with.to_right_inverse -> AntilipschitzWith.to_rightInverse is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoEMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β _inst_1 _inst_2 K f) -> (forall {g : β -> α}, (Function.RightInverse.{succ u1, succ u2} α β g f) -> (LipschitzWith.{u2, u1} β α _inst_2 _inst_1 K g))
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u2} α] [_inst_2 : PseudoEMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β _inst_1 _inst_2 K f) -> (forall {g : β -> α}, (Function.RightInverse.{succ u2, succ u1} α β g f) -> (LipschitzWith.{u1, u2} β α _inst_2 _inst_1 K g))
+Case conversion may be inaccurate. Consider using '#align antilipschitz_with.to_right_inverse AntilipschitzWith.to_rightInverseₓ'. -/
theorem to_rightInverse (hf : AntilipschitzWith K f) {g : β → α} (hg : Function.RightInverse g f) :
LipschitzWith K g := by
intro x y
@@ -167,6 +293,12 @@ theorem to_rightInverse (hf : AntilipschitzWith K f) {g : β → α} (hg : Funct
rwa [hg x, hg y] at this
#align antilipschitz_with.to_right_inverse AntilipschitzWith.to_rightInverse
+/- warning: antilipschitz_with.comap_uniformity_le -> AntilipschitzWith.comap_uniformity_le is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoEMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β _inst_1 _inst_2 K f) -> (LE.le.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (Preorder.toLE.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (PartialOrder.toPreorder.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (Filter.partialOrder.{u1} (Prod.{u1, u1} α α)))) (Filter.comap.{u1, u2} (Prod.{u1, u1} α α) (Prod.{u2, u2} β β) (Prod.map.{u1, u2, u1, u2} α β α β f f) (uniformity.{u2} β (PseudoEMetricSpace.toUniformSpace.{u2} β _inst_2))) (uniformity.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)))
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u2} α] [_inst_2 : PseudoEMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β _inst_1 _inst_2 K f) -> (LE.le.{u2} (Filter.{u2} (Prod.{u2, u2} α α)) (Preorder.toLE.{u2} (Filter.{u2} (Prod.{u2, u2} α α)) (PartialOrder.toPreorder.{u2} (Filter.{u2} (Prod.{u2, u2} α α)) (Filter.instPartialOrderFilter.{u2} (Prod.{u2, u2} α α)))) (Filter.comap.{u2, u1} (Prod.{u2, u2} α α) (Prod.{u1, u1} β β) (Prod.map.{u2, u1, u2, u1} α β α β f f) (uniformity.{u1} β (PseudoEMetricSpace.toUniformSpace.{u1} β _inst_2))) (uniformity.{u2} α (PseudoEMetricSpace.toUniformSpace.{u2} α _inst_1)))
+Case conversion may be inaccurate. Consider using '#align antilipschitz_with.comap_uniformity_le AntilipschitzWith.comap_uniformity_leₓ'. -/
theorem comap_uniformity_le (hf : AntilipschitzWith K f) : (𝓤 β).comap (Prod.map f f) ≤ 𝓤 α :=
by
refine' ((uniformity_basis_edist.comap _).le_basis_iffₓ uniformity_basis_edist).2 fun ε h₀ => _
@@ -177,42 +309,86 @@ theorem comap_uniformity_le (hf : AntilipschitzWith K f) : (𝓤 β).comap (Prod
exact ENNReal.mul_lt_of_lt_div hx
#align antilipschitz_with.comap_uniformity_le AntilipschitzWith.comap_uniformity_le
+/- warning: antilipschitz_with.uniform_inducing -> AntilipschitzWith.uniformInducing is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoEMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β _inst_1 _inst_2 K f) -> (UniformContinuous.{u1, u2} α β (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1) (PseudoEMetricSpace.toUniformSpace.{u2} β _inst_2) f) -> (UniformInducing.{u1, u2} α β (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1) (PseudoEMetricSpace.toUniformSpace.{u2} β _inst_2) f)
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u2} α] [_inst_2 : PseudoEMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β _inst_1 _inst_2 K f) -> (UniformContinuous.{u2, u1} α β (PseudoEMetricSpace.toUniformSpace.{u2} α _inst_1) (PseudoEMetricSpace.toUniformSpace.{u1} β _inst_2) f) -> (UniformInducing.{u2, u1} α β (PseudoEMetricSpace.toUniformSpace.{u2} α _inst_1) (PseudoEMetricSpace.toUniformSpace.{u1} β _inst_2) f)
+Case conversion may be inaccurate. Consider using '#align antilipschitz_with.uniform_inducing AntilipschitzWith.uniformInducingₓ'. -/
protected theorem uniformInducing (hf : AntilipschitzWith K f) (hfc : UniformContinuous f) :
UniformInducing f :=
⟨le_antisymm hf.comap_uniformity_le hfc.le_comap⟩
#align antilipschitz_with.uniform_inducing AntilipschitzWith.uniformInducing
+/- warning: antilipschitz_with.uniform_embedding -> AntilipschitzWith.uniformEmbedding is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_4 : EMetricSpace.{u1} α] [_inst_5 : PseudoEMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β (EMetricSpace.toPseudoEmetricSpace.{u1} α _inst_4) _inst_5 K f) -> (UniformContinuous.{u1, u2} α β (PseudoEMetricSpace.toUniformSpace.{u1} α (EMetricSpace.toPseudoEmetricSpace.{u1} α _inst_4)) (PseudoEMetricSpace.toUniformSpace.{u2} β _inst_5) f) -> (UniformEmbedding.{u1, u2} α β (PseudoEMetricSpace.toUniformSpace.{u1} α (EMetricSpace.toPseudoEmetricSpace.{u1} α _inst_4)) (PseudoEMetricSpace.toUniformSpace.{u2} β _inst_5) f)
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_4 : EMetricSpace.{u2} α] [_inst_5 : PseudoEMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β (EMetricSpace.toPseudoEMetricSpace.{u2} α _inst_4) _inst_5 K f) -> (UniformContinuous.{u2, u1} α β (PseudoEMetricSpace.toUniformSpace.{u2} α (EMetricSpace.toPseudoEMetricSpace.{u2} α _inst_4)) (PseudoEMetricSpace.toUniformSpace.{u1} β _inst_5) f) -> (UniformEmbedding.{u2, u1} α β (PseudoEMetricSpace.toUniformSpace.{u2} α (EMetricSpace.toPseudoEMetricSpace.{u2} α _inst_4)) (PseudoEMetricSpace.toUniformSpace.{u1} β _inst_5) f)
+Case conversion may be inaccurate. Consider using '#align antilipschitz_with.uniform_embedding AntilipschitzWith.uniformEmbeddingₓ'. -/
protected theorem uniformEmbedding {α : Type _} {β : Type _} [EMetricSpace α] [PseudoEMetricSpace β]
{K : ℝ≥0} {f : α → β} (hf : AntilipschitzWith K f) (hfc : UniformContinuous f) :
UniformEmbedding f :=
⟨hf.UniformInducing hfc, hf.Injective⟩
#align antilipschitz_with.uniform_embedding AntilipschitzWith.uniformEmbedding
+/- warning: antilipschitz_with.is_complete_range -> AntilipschitzWith.isComplete_range is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoEMetricSpace.{u2} β] {K : NNReal} {f : α -> β} [_inst_4 : CompleteSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)], (AntilipschitzWith.{u1, u2} α β _inst_1 _inst_2 K f) -> (UniformContinuous.{u1, u2} α β (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1) (PseudoEMetricSpace.toUniformSpace.{u2} β _inst_2) f) -> (IsComplete.{u2} β (PseudoEMetricSpace.toUniformSpace.{u2} β _inst_2) (Set.range.{u2, succ u1} β α f))
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u2} α] [_inst_2 : PseudoEMetricSpace.{u1} β] {K : NNReal} {f : α -> β} [_inst_4 : CompleteSpace.{u2} α (PseudoEMetricSpace.toUniformSpace.{u2} α _inst_1)], (AntilipschitzWith.{u2, u1} α β _inst_1 _inst_2 K f) -> (UniformContinuous.{u2, u1} α β (PseudoEMetricSpace.toUniformSpace.{u2} α _inst_1) (PseudoEMetricSpace.toUniformSpace.{u1} β _inst_2) f) -> (IsComplete.{u1} β (PseudoEMetricSpace.toUniformSpace.{u1} β _inst_2) (Set.range.{u1, succ u2} β α f))
+Case conversion may be inaccurate. Consider using '#align antilipschitz_with.is_complete_range AntilipschitzWith.isComplete_rangeₓ'. -/
theorem isComplete_range [CompleteSpace α] (hf : AntilipschitzWith K f)
(hfc : UniformContinuous f) : IsComplete (range f) :=
(hf.UniformInducing hfc).isComplete_range
#align antilipschitz_with.is_complete_range AntilipschitzWith.isComplete_range
+/- warning: antilipschitz_with.is_closed_range -> AntilipschitzWith.isClosed_range is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_4 : PseudoEMetricSpace.{u1} α] [_inst_5 : EMetricSpace.{u2} β] [_inst_6 : CompleteSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_4)] {f : α -> β} {K : NNReal}, (AntilipschitzWith.{u1, u2} α β _inst_4 (EMetricSpace.toPseudoEmetricSpace.{u2} β _inst_5) K f) -> (UniformContinuous.{u1, u2} α β (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_4) (PseudoEMetricSpace.toUniformSpace.{u2} β (EMetricSpace.toPseudoEmetricSpace.{u2} β _inst_5)) f) -> (IsClosed.{u2} β (UniformSpace.toTopologicalSpace.{u2} β (PseudoEMetricSpace.toUniformSpace.{u2} β (EMetricSpace.toPseudoEmetricSpace.{u2} β _inst_5))) (Set.range.{u2, succ u1} β α f))
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_4 : PseudoEMetricSpace.{u2} α] [_inst_5 : EMetricSpace.{u1} β] [_inst_6 : CompleteSpace.{u2} α (PseudoEMetricSpace.toUniformSpace.{u2} α _inst_4)] {f : α -> β} {K : NNReal}, (AntilipschitzWith.{u2, u1} α β _inst_4 (EMetricSpace.toPseudoEMetricSpace.{u1} β _inst_5) K f) -> (UniformContinuous.{u2, u1} α β (PseudoEMetricSpace.toUniformSpace.{u2} α _inst_4) (PseudoEMetricSpace.toUniformSpace.{u1} β (EMetricSpace.toPseudoEMetricSpace.{u1} β _inst_5)) f) -> (IsClosed.{u1} β (UniformSpace.toTopologicalSpace.{u1} β (PseudoEMetricSpace.toUniformSpace.{u1} β (EMetricSpace.toPseudoEMetricSpace.{u1} β _inst_5))) (Set.range.{u1, succ u2} β α f))
+Case conversion may be inaccurate. Consider using '#align antilipschitz_with.is_closed_range AntilipschitzWith.isClosed_rangeₓ'. -/
theorem isClosed_range {α β : Type _} [PseudoEMetricSpace α] [EMetricSpace β] [CompleteSpace α]
{f : α → β} {K : ℝ≥0} (hf : AntilipschitzWith K f) (hfc : UniformContinuous f) :
IsClosed (range f) :=
(hf.isComplete_range hfc).IsClosed
#align antilipschitz_with.is_closed_range AntilipschitzWith.isClosed_range
+/- warning: antilipschitz_with.closed_embedding -> AntilipschitzWith.closedEmbedding is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_4 : EMetricSpace.{u1} α] [_inst_5 : EMetricSpace.{u2} β] {K : NNReal} {f : α -> β} [_inst_6 : CompleteSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α (EMetricSpace.toPseudoEmetricSpace.{u1} α _inst_4))], (AntilipschitzWith.{u1, u2} α β (EMetricSpace.toPseudoEmetricSpace.{u1} α _inst_4) (EMetricSpace.toPseudoEmetricSpace.{u2} β _inst_5) K f) -> (UniformContinuous.{u1, u2} α β (PseudoEMetricSpace.toUniformSpace.{u1} α (EMetricSpace.toPseudoEmetricSpace.{u1} α _inst_4)) (PseudoEMetricSpace.toUniformSpace.{u2} β (EMetricSpace.toPseudoEmetricSpace.{u2} β _inst_5)) f) -> (ClosedEmbedding.{u1, u2} α β (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α (EMetricSpace.toPseudoEmetricSpace.{u1} α _inst_4))) (UniformSpace.toTopologicalSpace.{u2} β (PseudoEMetricSpace.toUniformSpace.{u2} β (EMetricSpace.toPseudoEmetricSpace.{u2} β _inst_5))) f)
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_4 : EMetricSpace.{u2} α] [_inst_5 : EMetricSpace.{u1} β] {K : NNReal} {f : α -> β} [_inst_6 : CompleteSpace.{u2} α (PseudoEMetricSpace.toUniformSpace.{u2} α (EMetricSpace.toPseudoEMetricSpace.{u2} α _inst_4))], (AntilipschitzWith.{u2, u1} α β (EMetricSpace.toPseudoEMetricSpace.{u2} α _inst_4) (EMetricSpace.toPseudoEMetricSpace.{u1} β _inst_5) K f) -> (UniformContinuous.{u2, u1} α β (PseudoEMetricSpace.toUniformSpace.{u2} α (EMetricSpace.toPseudoEMetricSpace.{u2} α _inst_4)) (PseudoEMetricSpace.toUniformSpace.{u1} β (EMetricSpace.toPseudoEMetricSpace.{u1} β _inst_5)) f) -> (ClosedEmbedding.{u2, u1} α β (UniformSpace.toTopologicalSpace.{u2} α (PseudoEMetricSpace.toUniformSpace.{u2} α (EMetricSpace.toPseudoEMetricSpace.{u2} α _inst_4))) (UniformSpace.toTopologicalSpace.{u1} β (PseudoEMetricSpace.toUniformSpace.{u1} β (EMetricSpace.toPseudoEMetricSpace.{u1} β _inst_5))) f)
+Case conversion may be inaccurate. Consider using '#align antilipschitz_with.closed_embedding AntilipschitzWith.closedEmbeddingₓ'. -/
theorem closedEmbedding {α : Type _} {β : Type _} [EMetricSpace α] [EMetricSpace β] {K : ℝ≥0}
{f : α → β} [CompleteSpace α] (hf : AntilipschitzWith K f) (hfc : UniformContinuous f) :
ClosedEmbedding f :=
{ (hf.UniformEmbedding hfc).Embedding with closed_range := hf.isClosed_range hfc }
#align antilipschitz_with.closed_embedding AntilipschitzWith.closedEmbedding
+#print AntilipschitzWith.subtype_coe /-
theorem subtype_coe (s : Set α) : AntilipschitzWith 1 (coe : s → α) :=
AntilipschitzWith.id.restrict s
#align antilipschitz_with.subtype_coe AntilipschitzWith.subtype_coe
+-/
+/- warning: antilipschitz_with.of_subsingleton -> AntilipschitzWith.of_subsingleton is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoEMetricSpace.{u2} β] {f : α -> β} [_inst_4 : Subsingleton.{succ u1} α] {K : NNReal}, AntilipschitzWith.{u1, u2} α β _inst_1 _inst_2 K f
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u2} α] [_inst_2 : PseudoEMetricSpace.{u1} β] {f : α -> β} [_inst_4 : Subsingleton.{succ u2} α] {K : NNReal}, AntilipschitzWith.{u2, u1} α β _inst_1 _inst_2 K f
+Case conversion may be inaccurate. Consider using '#align antilipschitz_with.of_subsingleton AntilipschitzWith.of_subsingletonₓ'. -/
theorem of_subsingleton [Subsingleton α] {K : ℝ≥0} : AntilipschitzWith K f := fun x y => by
simp only [Subsingleton.elim x y, edist_self, zero_le]
#align antilipschitz_with.of_subsingleton AntilipschitzWith.of_subsingleton
+/- warning: antilipschitz_with.subsingleton -> AntilipschitzWith.subsingleton is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_4 : EMetricSpace.{u1} α] [_inst_5 : PseudoEMetricSpace.{u2} β] {f : α -> β}, (AntilipschitzWith.{u1, u2} α β (EMetricSpace.toPseudoEmetricSpace.{u1} α _inst_4) _inst_5 (OfNat.ofNat.{0} NNReal 0 (OfNat.mk.{0} NNReal 0 (Zero.zero.{0} NNReal (MulZeroClass.toHasZero.{0} NNReal (NonUnitalNonAssocSemiring.toMulZeroClass.{0} NNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))))) f) -> (Subsingleton.{succ u1} α)
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_4 : EMetricSpace.{u2} α] [_inst_5 : PseudoEMetricSpace.{u1} β] {f : α -> β}, (AntilipschitzWith.{u2, u1} α β (EMetricSpace.toPseudoEMetricSpace.{u2} α _inst_4) _inst_5 (OfNat.ofNat.{0} NNReal 0 (Zero.toOfNat0.{0} NNReal instNNRealZero)) f) -> (Subsingleton.{succ u2} α)
+Case conversion may be inaccurate. Consider using '#align antilipschitz_with.subsingleton AntilipschitzWith.subsingletonₓ'. -/
/-- If `f : α → β` is `0`-antilipschitz, then `α` is a `subsingleton`. -/
protected theorem subsingleton {α β} [EMetricSpace α] [PseudoEMetricSpace β] {f : α → β}
(h : AntilipschitzWith 0 f) : Subsingleton α :=
@@ -227,6 +403,12 @@ open Metric
variable [PseudoMetricSpace α] [PseudoMetricSpace β] {K : ℝ≥0} {f : α → β}
+/- warning: antilipschitz_with.bounded_preimage -> AntilipschitzWith.bounded_preimage is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoMetricSpace.{u1} α] [_inst_2 : PseudoMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u2} β _inst_2) K f) -> (forall {s : Set.{u2} β}, (Metric.Bounded.{u2} β _inst_2 s) -> (Metric.Bounded.{u1} α _inst_1 (Set.preimage.{u1, u2} α β f s)))
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u2} α] [_inst_2 : PseudoMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u2} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u1} β _inst_2) K f) -> (forall {s : Set.{u1} β}, (Metric.Bounded.{u1} β _inst_2 s) -> (Metric.Bounded.{u2} α _inst_1 (Set.preimage.{u2, u1} α β f s)))
+Case conversion may be inaccurate. Consider using '#align antilipschitz_with.bounded_preimage AntilipschitzWith.bounded_preimageₓ'. -/
theorem bounded_preimage (hf : AntilipschitzWith K f) {s : Set β} (hs : Bounded s) :
Bounded (f ⁻¹' s) :=
Exists.intro (K * diam s) fun x hx y hy =>
@@ -236,11 +418,18 @@ theorem bounded_preimage (hf : AntilipschitzWith K f) {s : Set β} (hs : Bounded
#align antilipschitz_with.bounded_preimage AntilipschitzWith.bounded_preimage
+/- warning: antilipschitz_with.tendsto_cobounded -> AntilipschitzWith.tendsto_cobounded is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoMetricSpace.{u1} α] [_inst_2 : PseudoMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u1, u2} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u2} β _inst_2) K f) -> (Filter.Tendsto.{u1, u2} α β f (Bornology.cobounded.{u1} α (PseudoMetricSpace.toBornology.{u1} α _inst_1)) (Bornology.cobounded.{u2} β (PseudoMetricSpace.toBornology.{u2} β _inst_2)))
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u2} α] [_inst_2 : PseudoMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (AntilipschitzWith.{u2, u1} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u2} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u1} β _inst_2) K f) -> (Filter.Tendsto.{u2, u1} α β f (Bornology.cobounded.{u2} α (PseudoMetricSpace.toBornology.{u2} α _inst_1)) (Bornology.cobounded.{u1} β (PseudoMetricSpace.toBornology.{u1} β _inst_2)))
+Case conversion may be inaccurate. Consider using '#align antilipschitz_with.tendsto_cobounded AntilipschitzWith.tendsto_coboundedₓ'. -/
theorem tendsto_cobounded (hf : AntilipschitzWith K f) : Tendsto f (cobounded α) (cobounded β) :=
compl_surjective.forall.2 fun s (hs : IsBounded s) =>
Metric.isBounded_iff.2 <| hf.bounded_preimage <| Metric.isBounded_iff.1 hs
#align antilipschitz_with.tendsto_cobounded AntilipschitzWith.tendsto_cobounded
+#print AntilipschitzWith.properSpace /-
/-- The image of a proper space under an expanding onto map is proper. -/
protected theorem properSpace {α : Type _} [MetricSpace α] {K : ℝ≥0} {f : α → β} [ProperSpace α]
(hK : AntilipschitzWith K f) (f_cont : Continuous f) (hf : Function.Surjective f) :
@@ -254,14 +443,27 @@ protected theorem properSpace {α : Type _} [MetricSpace α] {K : ℝ≥0} {f :
convert this.image f_cont
exact (hf.image_preimage _).symm
#align antilipschitz_with.proper_space AntilipschitzWith.properSpace
+-/
end AntilipschitzWith
+/- warning: lipschitz_with.to_right_inverse -> LipschitzWith.to_rightInverse is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u1} α] [_inst_2 : PseudoEMetricSpace.{u2} β] {K : NNReal} {f : α -> β}, (LipschitzWith.{u1, u2} α β _inst_1 _inst_2 K f) -> (forall {g : β -> α}, (Function.RightInverse.{succ u1, succ u2} α β g f) -> (AntilipschitzWith.{u2, u1} β α _inst_2 _inst_1 K g))
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u2} α] [_inst_2 : PseudoEMetricSpace.{u1} β] {K : NNReal} {f : α -> β}, (LipschitzWith.{u2, u1} α β _inst_1 _inst_2 K f) -> (forall {g : β -> α}, (Function.RightInverse.{succ u2, succ u1} α β g f) -> (AntilipschitzWith.{u1, u2} β α _inst_2 _inst_1 K g))
+Case conversion may be inaccurate. Consider using '#align lipschitz_with.to_right_inverse LipschitzWith.to_rightInverseₓ'. -/
theorem LipschitzWith.to_rightInverse [PseudoEMetricSpace α] [PseudoEMetricSpace β] {K : ℝ≥0}
{f : α → β} (hf : LipschitzWith K f) {g : β → α} (hg : Function.RightInverse g f) :
AntilipschitzWith K g := fun x y => by simpa only [hg _] using hf (g x) (g y)
#align lipschitz_with.to_right_inverse LipschitzWith.to_rightInverse
+/- warning: lipschitz_with.proper_space -> LipschitzWith.properSpace is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : PseudoMetricSpace.{u1} α] [_inst_2 : MetricSpace.{u2} β] [_inst_3 : ProperSpace.{u2} β (MetricSpace.toPseudoMetricSpace.{u2} β _inst_2)] {K : NNReal} {f : Homeomorph.{u1, u2} α β (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) (UniformSpace.toTopologicalSpace.{u2} β (PseudoMetricSpace.toUniformSpace.{u2} β (MetricSpace.toPseudoMetricSpace.{u2} β _inst_2)))}, (LipschitzWith.{u1, u2} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{u2} β (MetricSpace.toPseudoMetricSpace.{u2} β _inst_2)) K (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Homeomorph.{u1, u2} α β (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) (UniformSpace.toTopologicalSpace.{u2} β (PseudoMetricSpace.toUniformSpace.{u2} β (MetricSpace.toPseudoMetricSpace.{u2} β _inst_2)))) (fun (_x : Homeomorph.{u1, u2} α β (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) (UniformSpace.toTopologicalSpace.{u2} β (PseudoMetricSpace.toUniformSpace.{u2} β (MetricSpace.toPseudoMetricSpace.{u2} β _inst_2)))) => α -> β) (Homeomorph.hasCoeToFun.{u1, u2} α β (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) (UniformSpace.toTopologicalSpace.{u2} β (PseudoMetricSpace.toUniformSpace.{u2} β (MetricSpace.toPseudoMetricSpace.{u2} β _inst_2)))) f)) -> (ProperSpace.{u1} α _inst_1)
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u2} α] [_inst_2 : MetricSpace.{u1} β] [_inst_3 : ProperSpace.{u1} β (MetricSpace.toPseudoMetricSpace.{u1} β _inst_2)] {K : NNReal} {f : Homeomorph.{u2, u1} α β (UniformSpace.toTopologicalSpace.{u2} α (PseudoMetricSpace.toUniformSpace.{u2} α _inst_1)) (UniformSpace.toTopologicalSpace.{u1} β (PseudoMetricSpace.toUniformSpace.{u1} β (MetricSpace.toPseudoMetricSpace.{u1} β _inst_2)))}, (LipschitzWith.{u2, u1} α β (PseudoMetricSpace.toPseudoEMetricSpace.{u2} α _inst_1) (EMetricSpace.toPseudoEMetricSpace.{u1} β (MetricSpace.toEMetricSpace.{u1} β _inst_2)) K (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (Homeomorph.{u2, u1} α β (UniformSpace.toTopologicalSpace.{u2} α (PseudoMetricSpace.toUniformSpace.{u2} α _inst_1)) (UniformSpace.toTopologicalSpace.{u1} β (PseudoMetricSpace.toUniformSpace.{u1} β (MetricSpace.toPseudoMetricSpace.{u1} β _inst_2)))) α (fun (_x : α) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : α) => β) _x) (EmbeddingLike.toFunLike.{max (succ u2) (succ u1), succ u2, succ u1} (Homeomorph.{u2, u1} α β (UniformSpace.toTopologicalSpace.{u2} α (PseudoMetricSpace.toUniformSpace.{u2} α _inst_1)) (UniformSpace.toTopologicalSpace.{u1} β (PseudoMetricSpace.toUniformSpace.{u1} β (MetricSpace.toPseudoMetricSpace.{u1} β _inst_2)))) α β (EquivLike.toEmbeddingLike.{max (succ u2) (succ u1), succ u2, succ u1} (Homeomorph.{u2, u1} α β (UniformSpace.toTopologicalSpace.{u2} α (PseudoMetricSpace.toUniformSpace.{u2} α _inst_1)) (UniformSpace.toTopologicalSpace.{u1} β (PseudoMetricSpace.toUniformSpace.{u1} β (MetricSpace.toPseudoMetricSpace.{u1} β _inst_2)))) α β (Homeomorph.instEquivLikeHomeomorph.{u2, u1} α β (UniformSpace.toTopologicalSpace.{u2} α (PseudoMetricSpace.toUniformSpace.{u2} α _inst_1)) (UniformSpace.toTopologicalSpace.{u1} β (PseudoMetricSpace.toUniformSpace.{u1} β (MetricSpace.toPseudoMetricSpace.{u1} β _inst_2)))))) f)) -> (ProperSpace.{u2} α _inst_1)
+Case conversion may be inaccurate. Consider using '#align lipschitz_with.proper_space LipschitzWith.properSpaceₓ'. -/
/-- The preimage of a proper space under a Lipschitz homeomorphism is proper. -/
@[protected]
theorem LipschitzWith.properSpace [PseudoMetricSpace α] [MetricSpace β] [ProperSpace β] {K : ℝ≥0}
mathlib commit https://github.com/leanprover-community/mathlib/commit/195fcd60ff2bfe392543bceb0ec2adcdb472db4c
@@ -34,16 +34,16 @@ open Set Filter Bornology
/-- We say that `f : α → β` is `antilipschitz_with K` if for any two points `x`, `y` we have
`edist x y ≤ K * edist (f x) (f y)`. -/
-def AntilipschitzWith [PseudoEmetricSpace α] [PseudoEmetricSpace β] (K : ℝ≥0) (f : α → β) :=
+def AntilipschitzWith [PseudoEMetricSpace α] [PseudoEMetricSpace β] (K : ℝ≥0) (f : α → β) :=
∀ x y, edist x y ≤ K * edist (f x) (f y)
#align antilipschitz_with AntilipschitzWith
-theorem AntilipschitzWith.edist_lt_top [PseudoEmetricSpace α] [PseudoMetricSpace β] {K : ℝ≥0}
+theorem AntilipschitzWith.edist_lt_top [PseudoEMetricSpace α] [PseudoMetricSpace β] {K : ℝ≥0}
{f : α → β} (h : AntilipschitzWith K f) (x y : α) : edist x y < ⊤ :=
(h x y).trans_lt <| ENNReal.mul_lt_top ENNReal.coe_ne_top (edist_ne_top _ _)
#align antilipschitz_with.edist_lt_top AntilipschitzWith.edist_lt_top
-theorem AntilipschitzWith.edist_ne_top [PseudoEmetricSpace α] [PseudoMetricSpace β] {K : ℝ≥0}
+theorem AntilipschitzWith.edist_ne_top [PseudoEMetricSpace α] [PseudoMetricSpace β] {K : ℝ≥0}
{f : α → β} (h : AntilipschitzWith K f) (x y : α) : edist x y ≠ ⊤ :=
(h.edist_lt_top x y).Ne
#align antilipschitz_with.edist_ne_top AntilipschitzWith.edist_ne_top
@@ -93,7 +93,7 @@ end Metric
namespace AntilipschitzWith
-variable [PseudoEmetricSpace α] [PseudoEmetricSpace β] [PseudoEmetricSpace γ]
+variable [PseudoEMetricSpace α] [PseudoEMetricSpace β] [PseudoEMetricSpace γ]
variable {K : ℝ≥0} {f : α → β}
@@ -107,7 +107,7 @@ protected def k (hf : AntilipschitzWith K f) : ℝ≥0 :=
K
#align antilipschitz_with.K AntilipschitzWith.k
-protected theorem injective {α : Type _} {β : Type _} [EmetricSpace α] [PseudoEmetricSpace β]
+protected theorem injective {α : Type _} {β : Type _} [EMetricSpace α] [PseudoEMetricSpace β]
{K : ℝ≥0} {f : α → β} (hf : AntilipschitzWith K f) : Function.Injective f := fun x y h => by
simpa only [h, edist_self, mul_zero, edist_le_zero] using hf x y
#align antilipschitz_with.injective AntilipschitzWith.injective
@@ -182,7 +182,7 @@ protected theorem uniformInducing (hf : AntilipschitzWith K f) (hfc : UniformCon
⟨le_antisymm hf.comap_uniformity_le hfc.le_comap⟩
#align antilipschitz_with.uniform_inducing AntilipschitzWith.uniformInducing
-protected theorem uniformEmbedding {α : Type _} {β : Type _} [EmetricSpace α] [PseudoEmetricSpace β]
+protected theorem uniformEmbedding {α : Type _} {β : Type _} [EMetricSpace α] [PseudoEMetricSpace β]
{K : ℝ≥0} {f : α → β} (hf : AntilipschitzWith K f) (hfc : UniformContinuous f) :
UniformEmbedding f :=
⟨hf.UniformInducing hfc, hf.Injective⟩
@@ -193,13 +193,13 @@ theorem isComplete_range [CompleteSpace α] (hf : AntilipschitzWith K f)
(hf.UniformInducing hfc).isComplete_range
#align antilipschitz_with.is_complete_range AntilipschitzWith.isComplete_range
-theorem isClosed_range {α β : Type _} [PseudoEmetricSpace α] [EmetricSpace β] [CompleteSpace α]
+theorem isClosed_range {α β : Type _} [PseudoEMetricSpace α] [EMetricSpace β] [CompleteSpace α]
{f : α → β} {K : ℝ≥0} (hf : AntilipschitzWith K f) (hfc : UniformContinuous f) :
IsClosed (range f) :=
(hf.isComplete_range hfc).IsClosed
#align antilipschitz_with.is_closed_range AntilipschitzWith.isClosed_range
-theorem closedEmbedding {α : Type _} {β : Type _} [EmetricSpace α] [EmetricSpace β] {K : ℝ≥0}
+theorem closedEmbedding {α : Type _} {β : Type _} [EMetricSpace α] [EMetricSpace β] {K : ℝ≥0}
{f : α → β} [CompleteSpace α] (hf : AntilipschitzWith K f) (hfc : UniformContinuous f) :
ClosedEmbedding f :=
{ (hf.UniformEmbedding hfc).Embedding with closed_range := hf.isClosed_range hfc }
@@ -214,7 +214,7 @@ theorem of_subsingleton [Subsingleton α] {K : ℝ≥0} : AntilipschitzWith K f
#align antilipschitz_with.of_subsingleton AntilipschitzWith.of_subsingleton
/-- If `f : α → β` is `0`-antilipschitz, then `α` is a `subsingleton`. -/
-protected theorem subsingleton {α β} [EmetricSpace α] [PseudoEmetricSpace β] {f : α → β}
+protected theorem subsingleton {α β} [EMetricSpace α] [PseudoEMetricSpace β] {f : α → β}
(h : AntilipschitzWith 0 f) : Subsingleton α :=
⟨fun x y => edist_le_zero.1 <| (h x y).trans_eq <| zero_mul _⟩
#align antilipschitz_with.subsingleton AntilipschitzWith.subsingleton
@@ -257,7 +257,7 @@ protected theorem properSpace {α : Type _} [MetricSpace α] {K : ℝ≥0} {f :
end AntilipschitzWith
-theorem LipschitzWith.to_rightInverse [PseudoEmetricSpace α] [PseudoEmetricSpace β] {K : ℝ≥0}
+theorem LipschitzWith.to_rightInverse [PseudoEMetricSpace α] [PseudoEMetricSpace β] {K : ℝ≥0}
{f : α → β} (hf : LipschitzWith K f) {g : β → α} (hg : Function.RightInverse g f) :
AntilipschitzWith K g := fun x y => by simpa only [hg _] using hf (g x) (g y)
#align lipschitz_with.to_right_inverse LipschitzWith.to_rightInverse
mathlib commit https://github.com/leanprover-community/mathlib/commit/4c586d291f189eecb9d00581aeb3dd998ac34442
@@ -135,7 +135,7 @@ theorem comp {Kg : ℝ≥0} {g : β → γ} (hg : AntilipschitzWith Kg g) {Kf :
(hf : AntilipschitzWith Kf f) : AntilipschitzWith (Kf * Kg) (g ∘ f) := fun x y =>
calc
edist x y ≤ Kf * edist (f x) (f y) := hf x y
- _ ≤ Kf * (Kg * edist (g (f x)) (g (f y))) := ENNReal.mul_left_mono (hg _ _)
+ _ ≤ Kf * (Kg * edist (g (f x)) (g (f y))) := (ENNReal.mul_left_mono (hg _ _))
_ = _ := by rw [ENNReal.coe_mul, mul_assoc]
#align antilipschitz_with.comp AntilipschitzWith.comp
mathlib commit https://github.com/leanprover-community/mathlib/commit/eb0cb4511aaef0da2462207b67358a0e1fe1e2ee
@@ -28,7 +28,7 @@ we do not have a `posreal` type.
variable {α : Type _} {β : Type _} {γ : Type _}
-open NNReal Ennreal uniformity
+open NNReal ENNReal uniformity
open Set Filter Bornology
@@ -40,7 +40,7 @@ def AntilipschitzWith [PseudoEmetricSpace α] [PseudoEmetricSpace β] (K : ℝ
theorem AntilipschitzWith.edist_lt_top [PseudoEmetricSpace α] [PseudoMetricSpace β] {K : ℝ≥0}
{f : α → β} (h : AntilipschitzWith K f) (x y : α) : edist x y < ⊤ :=
- (h x y).trans_lt <| Ennreal.mul_lt_top Ennreal.coe_ne_top (edist_ne_top _ _)
+ (h x y).trans_lt <| ENNReal.mul_lt_top ENNReal.coe_ne_top (edist_ne_top _ _)
#align antilipschitz_with.edist_lt_top AntilipschitzWith.edist_lt_top
theorem AntilipschitzWith.edist_ne_top [PseudoEmetricSpace α] [PseudoMetricSpace β] {K : ℝ≥0}
@@ -116,7 +116,7 @@ theorem mul_le_edist (hf : AntilipschitzWith K f) (x y : α) :
(K⁻¹ * edist x y : ℝ≥0∞) ≤ edist (f x) (f y) :=
by
rw [mul_comm, ← div_eq_mul_inv]
- exact Ennreal.div_le_of_le_mul' (hf x y)
+ exact ENNReal.div_le_of_le_mul' (hf x y)
#align antilipschitz_with.mul_le_edist AntilipschitzWith.mul_le_edist
theorem ediam_preimage_le (hf : AntilipschitzWith K f) (s : Set β) : diam (f ⁻¹' s) ≤ K * diam s :=
@@ -128,15 +128,15 @@ theorem le_mul_ediam_image (hf : AntilipschitzWith K f) (s : Set α) : diam s
#align antilipschitz_with.le_mul_ediam_image AntilipschitzWith.le_mul_ediam_image
protected theorem id : AntilipschitzWith 1 (id : α → α) := fun x y => by
- simp only [Ennreal.coe_one, one_mul, id, le_refl]
+ simp only [ENNReal.coe_one, one_mul, id, le_refl]
#align antilipschitz_with.id AntilipschitzWith.id
theorem comp {Kg : ℝ≥0} {g : β → γ} (hg : AntilipschitzWith Kg g) {Kf : ℝ≥0} {f : α → β}
(hf : AntilipschitzWith Kf f) : AntilipschitzWith (Kf * Kg) (g ∘ f) := fun x y =>
calc
edist x y ≤ Kf * edist (f x) (f y) := hf x y
- _ ≤ Kf * (Kg * edist (g (f x)) (g (f y))) := Ennreal.mul_left_mono (hg _ _)
- _ = _ := by rw [Ennreal.coe_mul, mul_assoc]
+ _ ≤ Kf * (Kg * edist (g (f x)) (g (f y))) := ENNReal.mul_left_mono (hg _ _)
+ _ = _ := by rw [ENNReal.coe_mul, mul_assoc]
#align antilipschitz_with.comp AntilipschitzWith.comp
@@ -170,11 +170,11 @@ theorem to_rightInverse (hf : AntilipschitzWith K f) {g : β → α} (hg : Funct
theorem comap_uniformity_le (hf : AntilipschitzWith K f) : (𝓤 β).comap (Prod.map f f) ≤ 𝓤 α :=
by
refine' ((uniformity_basis_edist.comap _).le_basis_iffₓ uniformity_basis_edist).2 fun ε h₀ => _
- refine' ⟨K⁻¹ * ε, Ennreal.mul_pos (Ennreal.inv_ne_zero.2 Ennreal.coe_ne_top) h₀.ne', _⟩
+ refine' ⟨K⁻¹ * ε, ENNReal.mul_pos (ENNReal.inv_ne_zero.2 ENNReal.coe_ne_top) h₀.ne', _⟩
refine' fun x hx => (hf x.1 x.2).trans_lt _
rw [mul_comm, ← div_eq_mul_inv] at hx
rw [mul_comm]
- exact Ennreal.mul_lt_of_lt_div hx
+ exact ENNReal.mul_lt_of_lt_div hx
#align antilipschitz_with.comap_uniformity_le AntilipschitzWith.comap_uniformity_le
protected theorem uniformInducing (hf : AntilipschitzWith K f) (hfc : UniformContinuous f) :
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -130,7 +130,7 @@ theorem comp {Kg : ℝ≥0} {g : β → γ} (hg : AntilipschitzWith Kg g) {Kf :
(hf : AntilipschitzWith Kf f) : AntilipschitzWith (Kf * Kg) (g ∘ f) := fun x y =>
calc
edist x y ≤ Kf * edist (f x) (f y) := hf x y
- _ ≤ Kf * (Kg * edist (g (f x)) (g (f y))) := (ENNReal.mul_left_mono (hg _ _))
+ _ ≤ Kf * (Kg * edist (g (f x)) (g (f y))) := ENNReal.mul_left_mono (hg _ _)
_ = _ := by rw [ENNReal.coe_mul, mul_assoc]; rfl
#align antilipschitz_with.comp AntilipschitzWith.comp
All these lemmas refer to the range of some function being open/range (i.e. isOpen
or isClosed
).
@@ -195,7 +195,7 @@ theorem isClosed_range {α β : Type*} [PseudoEMetricSpace α] [EMetricSpace β]
theorem closedEmbedding {α : Type*} {β : Type*} [EMetricSpace α] [EMetricSpace β] {K : ℝ≥0}
{f : α → β} [CompleteSpace α] (hf : AntilipschitzWith K f) (hfc : UniformContinuous f) :
ClosedEmbedding f :=
- { (hf.uniformEmbedding hfc).embedding with closed_range := hf.isClosed_range hfc }
+ { (hf.uniformEmbedding hfc).embedding with isClosed_range := hf.isClosed_range hfc }
#align antilipschitz_with.closed_embedding AntilipschitzWith.closedEmbedding
theorem subtype_coe (s : Set α) : AntilipschitzWith 1 ((↑) : s → α) :=
Empty lines were removed by executing the following Python script twice
import os
import re
# Loop through each file in the repository
for dir_path, dirs, files in os.walk('.'):
for filename in files:
if filename.endswith('.lean'):
file_path = os.path.join(dir_path, filename)
# Open the file and read its contents
with open(file_path, 'r') as file:
content = file.read()
# Use a regular expression to replace sequences of "variable" lines separated by empty lines
# with sequences without empty lines
modified_content = re.sub(r'(variable.*\n)\n(variable(?! .* in))', r'\1\2', content)
# Write the modified content back to the file
with open(file_path, 'w') as file:
file.write(modified_content)
@@ -90,7 +90,6 @@ end Metric
namespace AntilipschitzWith
variable [PseudoEMetricSpace α] [PseudoEMetricSpace β] [PseudoEMetricSpace γ]
-
variable {K : ℝ≥0} {f : α → β}
open EMetric
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -203,7 +203,7 @@ theorem subtype_coe (s : Set α) : AntilipschitzWith 1 ((↑) : s → α) :=
AntilipschitzWith.id.restrict s
#align antilipschitz_with.subtype_coe AntilipschitzWith.subtype_coe
-@[nontriviality] -- porting note: added `nontriviality`
+@[nontriviality] -- Porting note: added `nontriviality`
theorem of_subsingleton [Subsingleton α] {K : ℝ≥0} : AntilipschitzWith K f := fun x y => by
simp only [Subsingleton.elim x y, edist_self, zero_le]
#align antilipschitz_with.of_subsingleton AntilipschitzWith.of_subsingleton
refine
s (#10762)
I replaced a few "terminal" refine/refine'
s with exact
.
The strategy was very simple-minded: essentially any refine
whose following line had smaller indentation got replaced by exact
and then I cleaned up the mess.
This PR certainly leaves some further terminal refine
s, but maybe the current change is beneficial.
@@ -256,7 +256,7 @@ theorem isBounded_of_image2_left (f : α → β → γ) {K₁ : ℝ≥0}
apply hst.1
rw [Set.image2_singleton_right] at h
replace h := (hf b).isBounded_preimage h
- refine' h.subset (subset_preimage_image _ _)
+ exact h.subset (subset_preimage_image _ _)
exact mt (IsBounded.subset · (image2_subset subset_rfl (singleton_subset_iff.mpr hb))) this
#align antilipschitz_with.bounded_of_image2_left AntilipschitzWith.isBounded_of_image2_left
@@ -3,8 +3,10 @@ Copyright (c) 2020 Yury Kudryashov. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yury Kudryashov
-/
-import Mathlib.Topology.MetricSpace.Lipschitz
import Mathlib.Topology.UniformSpace.CompleteSeparated
+import Mathlib.Topology.EMetricSpace.Lipschitz
+import Mathlib.Topology.MetricSpace.Basic
+import Mathlib.Topology.MetricSpace.Bounded
#align_import topology.metric_space.antilipschitz from "leanprover-community/mathlib"@"c8f305514e0d47dfaa710f5a52f0d21b588e6328"
exact_mod_cast
tactic with mod_cast
elaborator where possible (#8404)
We still have the exact_mod_cast
tactic, used in a few places, which somehow (?) works a little bit harder to prevent the expected type influencing the elaboration of the term. I would like to get to the bottom of this, and it will be easier once the only usages of exact_mod_cast
are the ones that don't work using the term elaborator by itself.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
@@ -78,7 +78,7 @@ theorem mul_le_nndist (hf : AntilipschitzWith K f) (x y : α) :
#align antilipschitz_with.mul_le_nndist AntilipschitzWith.mul_le_nndist
theorem mul_le_dist (hf : AntilipschitzWith K f) (x y : α) :
- (K⁻¹ * dist x y : ℝ) ≤ dist (f x) (f y) := by exact_mod_cast hf.mul_le_nndist x y
+ (K⁻¹ * dist x y : ℝ) ≤ dist (f x) (f y) := mod_cast hf.mul_le_nndist x y
#align antilipschitz_with.mul_le_dist AntilipschitzWith.mul_le_dist
end AntilipschitzWith
This was "feat(topology/metric_space): diameter of pointwise zero and addition"
@@ -6,7 +6,7 @@ Authors: Yury Kudryashov
import Mathlib.Topology.MetricSpace.Lipschitz
import Mathlib.Topology.UniformSpace.CompleteSeparated
-#align_import topology.metric_space.antilipschitz from "leanprover-community/mathlib"@"97f079b7e89566de3a1143f887713667328c38ba"
+#align_import topology.metric_space.antilipschitz from "leanprover-community/mathlib"@"c8f305514e0d47dfaa710f5a52f0d21b588e6328"
/-!
# Antilipschitz functions
@@ -218,7 +218,8 @@ namespace AntilipschitzWith
open Metric
-variable [PseudoMetricSpace α] [PseudoMetricSpace β] {K : ℝ≥0} {f : α → β}
+variable [PseudoMetricSpace α] [PseudoMetricSpace β] [PseudoMetricSpace γ]
+variable {K : ℝ≥0} {f : α → β}
theorem isBounded_preimage (hf : AntilipschitzWith K f) {s : Set β} (hs : IsBounded s) :
IsBounded (f ⁻¹' s) :=
@@ -243,6 +244,25 @@ protected theorem properSpace {α : Type*} [MetricSpace α] {K : ℝ≥0} {f :
exact (hf.image_preimage _).symm
#align antilipschitz_with.proper_space AntilipschitzWith.properSpace
+theorem isBounded_of_image2_left (f : α → β → γ) {K₁ : ℝ≥0}
+ (hf : ∀ b, AntilipschitzWith K₁ fun a => f a b) {s : Set α} {t : Set β}
+ (hst : IsBounded (Set.image2 f s t)) : IsBounded s ∨ IsBounded t := by
+ contrapose! hst
+ obtain ⟨b, hb⟩ : t.Nonempty := nonempty_of_not_isBounded hst.2
+ have : ¬IsBounded (Set.image2 f s {b}) := by
+ intro h
+ apply hst.1
+ rw [Set.image2_singleton_right] at h
+ replace h := (hf b).isBounded_preimage h
+ refine' h.subset (subset_preimage_image _ _)
+ exact mt (IsBounded.subset · (image2_subset subset_rfl (singleton_subset_iff.mpr hb))) this
+#align antilipschitz_with.bounded_of_image2_left AntilipschitzWith.isBounded_of_image2_left
+
+theorem isBounded_of_image2_right {f : α → β → γ} {K₂ : ℝ≥0} (hf : ∀ a, AntilipschitzWith K₂ (f a))
+ {s : Set α} {t : Set β} (hst : IsBounded (Set.image2 f s t)) : IsBounded s ∨ IsBounded t :=
+ Or.symm <| isBounded_of_image2_left (flip f) hf <| image2_swap f s t ▸ hst
+#align antilipschitz_with.bounded_of_image2_right AntilipschitzWith.isBounded_of_image2_right
+
end AntilipschitzWith
theorem LipschitzWith.to_rightInverse [PseudoEMetricSpace α] [PseudoEMetricSpace β] {K : ℝ≥0}
Metric.Bounded
(#7240)
Use Bornology.IsBounded
instead.
@@ -220,17 +220,14 @@ open Metric
variable [PseudoMetricSpace α] [PseudoMetricSpace β] {K : ℝ≥0} {f : α → β}
-theorem bounded_preimage (hf : AntilipschitzWith K f) {s : Set β} (hs : Bounded s) :
- Bounded (f ⁻¹' s) :=
- Exists.intro (K * diam s) fun x hx y hy =>
- calc
- dist x y ≤ K * dist (f x) (f y) := hf.le_mul_dist x y
- _ ≤ K * diam s := by gcongr; exact dist_le_diam_of_mem hs hx hy
-#align antilipschitz_with.bounded_preimage AntilipschitzWith.bounded_preimage
+theorem isBounded_preimage (hf : AntilipschitzWith K f) {s : Set β} (hs : IsBounded s) :
+ IsBounded (f ⁻¹' s) :=
+ isBounded_iff_ediam_ne_top.2 <| ne_top_of_le_ne_top
+ (ENNReal.mul_ne_top ENNReal.coe_ne_top hs.ediam_ne_top) (hf.ediam_preimage_le _)
+#align antilipschitz_with.bounded_preimage AntilipschitzWith.isBounded_preimage
theorem tendsto_cobounded (hf : AntilipschitzWith K f) : Tendsto f (cobounded α) (cobounded β) :=
- compl_surjective.forall.2 fun s (hs : IsBounded s) =>
- Metric.isBounded_iff.2 <| hf.bounded_preimage <| Metric.isBounded_iff.1 hs
+ compl_surjective.forall.2 fun _ ↦ hf.isBounded_preimage
#align antilipschitz_with.tendsto_cobounded AntilipschitzWith.tendsto_cobounded
/-- The image of a proper space under an expanding onto map is proper. -/
@@ -240,7 +237,7 @@ protected theorem properSpace {α : Type*} [MetricSpace α] {K : ℝ≥0} {f :
refine ⟨fun x₀ r => ?_⟩
let K := f ⁻¹' closedBall x₀ r
have A : IsClosed K := isClosed_ball.preimage f_cont
- have B : Bounded K := hK.bounded_preimage bounded_closedBall
+ have B : IsBounded K := hK.isBounded_preimage isBounded_closedBall
have : IsCompact K := isCompact_iff_isClosed_bounded.2 ⟨A, B⟩
convert this.image f_cont
exact (hf.image_preimage _).symm
@@ -54,8 +54,8 @@ theorem antilipschitzWith_iff_le_mul_nndist :
norm_cast
#align antilipschitz_with_iff_le_mul_nndist antilipschitzWith_iff_le_mul_nndist
-alias antilipschitzWith_iff_le_mul_nndist ↔
- AntilipschitzWith.le_mul_nndist AntilipschitzWith.of_le_mul_nndist
+alias ⟨AntilipschitzWith.le_mul_nndist, AntilipschitzWith.of_le_mul_nndist⟩ :=
+ antilipschitzWith_iff_le_mul_nndist
#align antilipschitz_with.le_mul_nndist AntilipschitzWith.le_mul_nndist
#align antilipschitz_with.of_le_mul_nndist AntilipschitzWith.of_le_mul_nndist
@@ -65,8 +65,8 @@ theorem antilipschitzWith_iff_le_mul_dist :
norm_cast
#align antilipschitz_with_iff_le_mul_dist antilipschitzWith_iff_le_mul_dist
-alias antilipschitzWith_iff_le_mul_dist ↔
- AntilipschitzWith.le_mul_dist AntilipschitzWith.of_le_mul_dist
+alias ⟨AntilipschitzWith.le_mul_dist, AntilipschitzWith.of_le_mul_dist⟩ :=
+ antilipschitzWith_iff_le_mul_dist
#align antilipschitz_with.le_mul_dist AntilipschitzWith.le_mul_dist
#align antilipschitz_with.of_le_mul_dist AntilipschitzWith.of_le_mul_dist
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -23,7 +23,7 @@ we do not have a `posreal` type.
-/
-variable {α β γ : Type _}
+variable {α β γ : Type*}
open scoped NNReal ENNReal Uniformity Topology
open Set Filter Bornology
@@ -101,7 +101,7 @@ protected def k (_hf : AntilipschitzWith K f) : ℝ≥0 := K
set_option linter.uppercaseLean3 false in
#align antilipschitz_with.K AntilipschitzWith.k
-protected theorem injective {α : Type _} {β : Type _} [EMetricSpace α] [PseudoEMetricSpace β]
+protected theorem injective {α : Type*} {β : Type*} [EMetricSpace α] [PseudoEMetricSpace β]
{K : ℝ≥0} {f : α → β} (hf : AntilipschitzWith K f) : Function.Injective f := fun x y h => by
simpa only [h, edist_self, mul_zero, edist_le_zero] using hf x y
#align antilipschitz_with.injective AntilipschitzWith.injective
@@ -174,7 +174,7 @@ protected theorem uniformInducing (hf : AntilipschitzWith K f) (hfc : UniformCon
⟨le_antisymm hf.comap_uniformity_le hfc.le_comap⟩
#align antilipschitz_with.uniform_inducing AntilipschitzWith.uniformInducing
-protected theorem uniformEmbedding {α : Type _} {β : Type _} [EMetricSpace α] [PseudoEMetricSpace β]
+protected theorem uniformEmbedding {α : Type*} {β : Type*} [EMetricSpace α] [PseudoEMetricSpace β]
{K : ℝ≥0} {f : α → β} (hf : AntilipschitzWith K f) (hfc : UniformContinuous f) :
UniformEmbedding f :=
⟨hf.uniformInducing hfc, hf.injective⟩
@@ -185,13 +185,13 @@ theorem isComplete_range [CompleteSpace α] (hf : AntilipschitzWith K f)
(hf.uniformInducing hfc).isComplete_range
#align antilipschitz_with.is_complete_range AntilipschitzWith.isComplete_range
-theorem isClosed_range {α β : Type _} [PseudoEMetricSpace α] [EMetricSpace β] [CompleteSpace α]
+theorem isClosed_range {α β : Type*} [PseudoEMetricSpace α] [EMetricSpace β] [CompleteSpace α]
{f : α → β} {K : ℝ≥0} (hf : AntilipschitzWith K f) (hfc : UniformContinuous f) :
IsClosed (range f) :=
(hf.isComplete_range hfc).isClosed
#align antilipschitz_with.is_closed_range AntilipschitzWith.isClosed_range
-theorem closedEmbedding {α : Type _} {β : Type _} [EMetricSpace α] [EMetricSpace β] {K : ℝ≥0}
+theorem closedEmbedding {α : Type*} {β : Type*} [EMetricSpace α] [EMetricSpace β] {K : ℝ≥0}
{f : α → β} [CompleteSpace α] (hf : AntilipschitzWith K f) (hfc : UniformContinuous f) :
ClosedEmbedding f :=
{ (hf.uniformEmbedding hfc).embedding with closed_range := hf.isClosed_range hfc }
@@ -234,7 +234,7 @@ theorem tendsto_cobounded (hf : AntilipschitzWith K f) : Tendsto f (cobounded α
#align antilipschitz_with.tendsto_cobounded AntilipschitzWith.tendsto_cobounded
/-- The image of a proper space under an expanding onto map is proper. -/
-protected theorem properSpace {α : Type _} [MetricSpace α] {K : ℝ≥0} {f : α → β} [ProperSpace α]
+protected theorem properSpace {α : Type*} [MetricSpace α] {K : ℝ≥0} {f : α → β} [ProperSpace α]
(hK : AntilipschitzWith K f) (f_cont : Continuous f) (hf : Function.Surjective f) :
ProperSpace β := by
refine ⟨fun x₀ r => ?_⟩
@@ -2,15 +2,12 @@
Copyright (c) 2020 Yury Kudryashov. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yury Kudryashov
-
-! This file was ported from Lean 3 source module topology.metric_space.antilipschitz
-! leanprover-community/mathlib commit 97f079b7e89566de3a1143f887713667328c38ba
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Topology.MetricSpace.Lipschitz
import Mathlib.Topology.UniformSpace.CompleteSeparated
+#align_import topology.metric_space.antilipschitz from "leanprover-community/mathlib"@"97f079b7e89566de3a1143f887713667328c38ba"
+
/-!
# Antilipschitz functions
@@ -228,7 +228,7 @@ theorem bounded_preimage (hf : AntilipschitzWith K f) {s : Set β} (hs : Bounded
Exists.intro (K * diam s) fun x hx y hy =>
calc
dist x y ≤ K * dist (f x) (f y) := hf.le_mul_dist x y
- _ ≤ K * diam s := mul_le_mul_of_nonneg_left (dist_le_diam_of_mem hs hx hy) K.2
+ _ ≤ K * diam s := by gcongr; exact dist_le_diam_of_mem hs hx hy
#align antilipschitz_with.bounded_preimage AntilipschitzWith.bounded_preimage
theorem tendsto_cobounded (hf : AntilipschitzWith K f) : Tendsto f (cobounded α) (cobounded β) :=
@@ -20,7 +20,7 @@ For a metric space, the latter inequality is equivalent to `dist x y ≤ K * dis
## Implementation notes
-The parameter `K` has type `ℝ≥0`. This way we avoid conjuction in the definition and have
+The parameter `K` has type `ℝ≥0`. This way we avoid conjunction in the definition and have
coercions both to `ℝ` and `ℝ≥0∞`. We do not require `0 < K` in the definition, mostly because
we do not have a `posreal` type.
-/
@@ -144,16 +144,16 @@ theorem codRestrict (hf : AntilipschitzWith K f) {s : Set β} (hs : ∀ x, f x
AntilipschitzWith K (s.codRestrict f hs) := fun x y => hf x y
#align antilipschitz_with.cod_restrict AntilipschitzWith.codRestrict
-theorem to_right_inv_on' {s : Set α} (hf : AntilipschitzWith K (s.restrict f)) {g : β → α}
+theorem to_rightInvOn' {s : Set α} (hf : AntilipschitzWith K (s.restrict f)) {g : β → α}
{t : Set β} (g_maps : MapsTo g t s) (g_inv : RightInvOn g f t) :
LipschitzWith K (t.restrict g) := fun x y => by
simpa only [restrict_apply, g_inv x.mem, g_inv y.mem, Subtype.edist_eq, Subtype.coe_mk] using
hf ⟨g x, g_maps x.mem⟩ ⟨g y, g_maps y.mem⟩
-#align antilipschitz_with.to_right_inv_on' AntilipschitzWith.to_right_inv_on'
+#align antilipschitz_with.to_right_inv_on' AntilipschitzWith.to_rightInvOn'
theorem to_rightInvOn (hf : AntilipschitzWith K f) {g : β → α} {t : Set β} (h : RightInvOn g f t) :
LipschitzWith K (t.restrict g) :=
- (hf.restrict univ).to_right_inv_on' (mapsTo_univ g t) h
+ (hf.restrict univ).to_rightInvOn' (mapsTo_univ g t) h
#align antilipschitz_with.to_right_inv_on AntilipschitzWith.to_rightInvOn
theorem to_rightInverse (hf : AntilipschitzWith K f) {g : β → α} (hg : Function.RightInverse g f) :
The unported dependencies are
algebra.order.module
init.core
algebra.order.monoid.cancel.defs
algebra.abs
algebra.group_power.lemmas
init.data.list.basic
algebra.order.monoid.cancel.basic
init.data.list.default
topology.subset_properties
init.logic
The following 1 dependencies have changed in mathlib3 since they were ported, which may complicate porting this file