Theorem: boundedSub_of_lipschitzWith_sub
File: Mathlib/Topology/Bornology/BoundedOperation.lean

Proof steps:
state_before: R : Type u_1
inst✝¹ : PseudoMetricSpace R
inst✝ : Sub R
K : ℝ≥0
lip : LipschitzWith K fun p => p.1 - p.2
s t : Set R
s_bdd : Bornology.IsBounded s
t_bdd : Bornology.IsBounded t
⊢ Bornology.IsBounded (s - t)
state_after: R : Type u_1
inst✝¹ : PseudoMetricSpace R
inst✝ : Sub R
K : ℝ≥0
lip : LipschitzWith K fun p => p.1 - p.2
s t : Set R
s_bdd : Bornology.IsBounded s
t_bdd : Bornology.IsBounded t
bdd : Bornology.IsBounded (s ×ˢ t)
⊢ Bornology.IsBounded (s - t)
tactic: have bdd : Bornology.IsBounded (s ×ˢ t) := Bornology.IsBounded.prod s_bdd t_bdd
state_before: R : Type u_1
inst✝¹ : PseudoMetricSpace R
inst✝ : Sub R
K : ℝ≥0
lip : LipschitzWith K fun p => p.1 - p.2
s t : Set R
s_bdd : Bornology.IsBounded s
t_bdd : Bornology.IsBounded t
bdd : Bornology.IsBounded (s ×ˢ t)
⊢ Bornology.IsBounded (s - t)
state_after: case h.e'_3
R : Type u_1
inst✝¹ : PseudoMetricSpace R
inst✝ : Sub R
K : ℝ≥0
lip : LipschitzWith K fun p => p.1 - p.2
s t : Set R
s_bdd : Bornology.IsBounded s
t_bdd : Bornology.IsBounded t
bdd : Bornology.IsBounded (s ×ˢ t)
⊢ s - t = (fun p => p.1 - p.2) '' s ×ˢ t
tactic: convert lip.isBounded_image bdd
state_before: case h.e'_3
R : Type u_1
inst✝¹ : PseudoMetricSpace R
inst✝ : Sub R
K : ℝ≥0
lip : LipschitzWith K fun p => p.1 - p.2
s t : Set R
s_bdd : Bornology.IsBounded s
t_bdd : Bornology.IsBounded t
bdd : Bornology.IsBounded (s ×ˢ t)
⊢ s - t = (fun p => p.1 - p.2) '' s ×ˢ t
state_after: case h.e'_3.h
R : Type u_1
inst✝¹ : PseudoMetricSpace R
inst✝ : Sub R
K : ℝ≥0
lip : LipschitzWith K fun p => p.1 - p.2
s t : Set R
s_bdd : Bornology.IsBounded s
t_bdd : Bornology.IsBounded t
bdd : Bornology.IsBounded (s ×ˢ t)
p : R
⊢ p ∈ s - t ↔ p ∈ (fun p => p.1 - p.2) '' s ×ˢ t
tactic: ext p
state_before: case h.e'_3.h
R : Type u_1
inst✝¹ : PseudoMetricSpace R
inst✝ : Sub R
K : ℝ≥0
lip : LipschitzWith K fun p => p.1 - p.2
s t : Set R
s_bdd : Bornology.IsBounded s
t_bdd : Bornology.IsBounded t
bdd : Bornology.IsBounded (s ×ˢ t)
p : R
⊢ p ∈ s - t ↔ p ∈ (fun p => p.1 - p.2) '' s ×ˢ t
state_after: case h.e'_3.h
R : Type u_1
inst✝¹ : PseudoMetricSpace R
inst✝ : Sub R
K : ℝ≥0
lip : LipschitzWith K fun p => p.1 - p.2
s t : Set R
s_bdd : Bornology.IsBounded s
t_bdd : Bornology.IsBounded t
bdd : Bornology.IsBounded (s ×ˢ t)
p : R
⊢ p ∈ s - t ↔ ∃ a b, (a ∈ s ∧ b ∈ t) ∧ a - b = p
tactic: simp only [Set.mem_image, Set.mem_prod, Prod.exists]
state_before: case h.e'_3.h
R : Type u_1
inst✝¹ : PseudoMetricSpace R
inst✝ : Sub R
K : ℝ≥0
lip : LipschitzWith K fun p => p.1 - p.2
s t : Set R
s_bdd : Bornology.IsBounded s
t_bdd : Bornology.IsBounded t
bdd : Bornology.IsBounded (s ×ˢ t)
p : R
⊢ p ∈ s - t ↔ ∃ a b, (a ∈ s ∧ b ∈ t) ∧ a - b = p
state_after: case h.e'_3.h.mp
R : Type u_1
inst✝¹ : PseudoMetricSpace R
inst✝ : Sub R
K : ℝ≥0
lip : LipschitzWith K fun p => p.1 - p.2
s t : Set R
s_bdd : Bornology.IsBounded s
t_bdd : Bornology.IsBounded t
bdd : Bornology.IsBounded (s ×ˢ t)
p : R
⊢ p ∈ s - t → ∃ a b, (a ∈ s ∧ b ∈ t) ∧ a - b = p

case h.e'_3.h.mpr
R : Type u_1
inst✝¹ : PseudoMetricSpace R
inst✝ : Sub R
K : ℝ≥0
lip : LipschitzWith K fun p => p.1 - p.2
s t : Set R
s_bdd : Bornology.IsBounded s
t_bdd : Bornology.IsBounded t
bdd : Bornology.IsBounded (s ×ˢ t)
p : R
⊢ (∃ a b, (a ∈ s ∧ b ∈ t) ∧ a - b = p) → p ∈ s - t
tactic: constructor