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

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
⊢ 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: convert lip.isBounded_image 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: ext p
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: 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 ↔ 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: constructor
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: intro ⟨a, a_in_s, b, b_in_t, eq_p⟩
state_before: 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
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 a : R
a_in_s : a ∈ s
b : R
b_in_t : b ∈ t
eq_p : (fun x x_1 => x - x_1) a b = p
⊢ ∃ a b, (a ∈ s ∧ b ∈ t) ∧ a - b = p

tactic: exact ⟨a, b, ⟨a_in_s, b_in_t⟩, eq_p⟩
state_before: 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 a : R
a_in_s : a ∈ s
b : R
b_in_t : b ∈ t
eq_p : (fun x x_1 => x - x_1) a b = p
⊢ ∃ a b, (a ∈ s ∧ b ∈ t) ∧ a - b = p
state_after: no goals

tactic: intro ⟨a, b, ⟨a_in_s, b_in_t⟩, eq_p⟩
state_before: 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
state_after: 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 a b : R
a_in_s : a ∈ s
b_in_t : b ∈ t
eq_p : a - b = p
⊢ p ∈ s - t

tactic: simpa [← eq_p] using Set.sub_mem_sub a_in_s b_in_t
state_before: 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 a b : R
a_in_s : a ∈ s
b_in_t : b ∈ t
eq_p : a - b = p
⊢ p ∈ s - t
state_after: no goals