Theorem: AntilipschitzWith.isBounded_of_image2_left
File: Mathlib/Topology/MetricSpace/Antilipschitz.lean

tactic: contrapose! hst
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : PseudoMetricSpace α
inst✝¹ : PseudoMetricSpace β
inst✝ : PseudoMetricSpace γ
K : ℝ≥0
f✝ : α → β
f : α → β → γ
K₁ : ℝ≥0
hf : ∀ (b : β), AntilipschitzWith K₁ fun a => f a b
s : Set α
t : Set β
hst : IsBounded (image2 f s t)
⊢ IsBounded s ∨ IsBounded t
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : PseudoMetricSpace α
inst✝¹ : PseudoMetricSpace β
inst✝ : PseudoMetricSpace γ
K : ℝ≥0
f✝ : α → β
f : α → β → γ
K₁ : ℝ≥0
hf : ∀ (b : β), AntilipschitzWith K₁ fun a => f a b
s : Set α
t : Set β
hst : ¬IsBounded s ∧ ¬IsBounded t
⊢ ¬IsBounded (image2 f s t)

tactic: obtain ⟨b, hb⟩ : t.Nonempty := nonempty_of_not_isBounded hst.2
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : PseudoMetricSpace α
inst✝¹ : PseudoMetricSpace β
inst✝ : PseudoMetricSpace γ
K : ℝ≥0
f✝ : α → β
f : α → β → γ
K₁ : ℝ≥0
hf : ∀ (b : β), AntilipschitzWith K₁ fun a => f a b
s : Set α
t : Set β
hst : ¬IsBounded s ∧ ¬IsBounded t
⊢ ¬IsBounded (image2 f s t)
state_after: case intro
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : PseudoMetricSpace α
inst✝¹ : PseudoMetricSpace β
inst✝ : PseudoMetricSpace γ
K : ℝ≥0
f✝ : α → β
f : α → β → γ
K₁ : ℝ≥0
hf : ∀ (b : β), AntilipschitzWith K₁ fun a => f a b
s : Set α
t : Set β
hst : ¬IsBounded s ∧ ¬IsBounded t
b : β
hb : b ∈ t
⊢ ¬IsBounded (image2 f s t)

tactic: 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
  exact h.subset (subset_preimage_image _ _)
state_before: case intro
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : PseudoMetricSpace α
inst✝¹ : PseudoMetricSpace β
inst✝ : PseudoMetricSpace γ
K : ℝ≥0
f✝ : α → β
f : α → β → γ
K₁ : ℝ≥0
hf : ∀ (b : β), AntilipschitzWith K₁ fun a => f a b
s : Set α
t : Set β
hst : ¬IsBounded s ∧ ¬IsBounded t
b : β
hb : b ∈ t
⊢ ¬IsBounded (image2 f s t)
state_after: case intro
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : PseudoMetricSpace α
inst✝¹ : PseudoMetricSpace β
inst✝ : PseudoMetricSpace γ
K : ℝ≥0
f✝ : α → β
f : α → β → γ
K₁ : ℝ≥0
hf : ∀ (b : β), AntilipschitzWith K₁ fun a => f a b
s : Set α
t : Set β
hst : ¬IsBounded s ∧ ¬IsBounded t
b : β
hb : b ∈ t
this : ¬IsBounded (image2 f s {b})
⊢ ¬IsBounded (image2 f s t)

tactic: intro h
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : PseudoMetricSpace α
inst✝¹ : PseudoMetricSpace β
inst✝ : PseudoMetricSpace γ
K : ℝ≥0
f✝ : α → β
f : α → β → γ
K₁ : ℝ≥0
hf : ∀ (b : β), AntilipschitzWith K₁ fun a => f a b
s : Set α
t : Set β
hst : ¬IsBounded s ∧ ¬IsBounded t
b : β
hb : b ∈ t
⊢ ¬IsBounded (image2 f s {b})
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : PseudoMetricSpace α
inst✝¹ : PseudoMetricSpace β
inst✝ : PseudoMetricSpace γ
K : ℝ≥0
f✝ : α → β
f : α → β → γ
K₁ : ℝ≥0
hf : ∀ (b : β), AntilipschitzWith K₁ fun a => f a b
s : Set α
t : Set β
hst : ¬IsBounded s ∧ ¬IsBounded t
b : β
hb : b ∈ t
h : IsBounded (image2 f s {b})
⊢ False

tactic: apply hst.1
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : PseudoMetricSpace α
inst✝¹ : PseudoMetricSpace β
inst✝ : PseudoMetricSpace γ
K : ℝ≥0
f✝ : α → β
f : α → β → γ
K₁ : ℝ≥0
hf : ∀ (b : β), AntilipschitzWith K₁ fun a => f a b
s : Set α
t : Set β
hst : ¬IsBounded s ∧ ¬IsBounded t
b : β
hb : b ∈ t
h : IsBounded (image2 f s {b})
⊢ False
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : PseudoMetricSpace α
inst✝¹ : PseudoMetricSpace β
inst✝ : PseudoMetricSpace γ
K : ℝ≥0
f✝ : α → β
f : α → β → γ
K₁ : ℝ≥0
hf : ∀ (b : β), AntilipschitzWith K₁ fun a => f a b
s : Set α
t : Set β
hst : ¬IsBounded s ∧ ¬IsBounded t
b : β
hb : b ∈ t
h : IsBounded (image2 f s {b})
⊢ IsBounded s

tactic: rw [Set.image2_singleton_right] at h
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : PseudoMetricSpace α
inst✝¹ : PseudoMetricSpace β
inst✝ : PseudoMetricSpace γ
K : ℝ≥0
f✝ : α → β
f : α → β → γ
K₁ : ℝ≥0
hf : ∀ (b : β), AntilipschitzWith K₁ fun a => f a b
s : Set α
t : Set β
hst : ¬IsBounded s ∧ ¬IsBounded t
b : β
hb : b ∈ t
h : IsBounded (image2 f s {b})
⊢ IsBounded s
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : PseudoMetricSpace α
inst✝¹ : PseudoMetricSpace β
inst✝ : PseudoMetricSpace γ
K : ℝ≥0
f✝ : α → β
f : α → β → γ
K₁ : ℝ≥0
hf : ∀ (b : β), AntilipschitzWith K₁ fun a => f a b
s : Set α
t : Set β
hst : ¬IsBounded s ∧ ¬IsBounded t
b : β
hb : b ∈ t
h : IsBounded ((fun a => f a b) '' s)
⊢ IsBounded s

tactic: replace h := (hf b).isBounded_preimage h
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : PseudoMetricSpace α
inst✝¹ : PseudoMetricSpace β
inst✝ : PseudoMetricSpace γ
K : ℝ≥0
f✝ : α → β
f : α → β → γ
K₁ : ℝ≥0
hf : ∀ (b : β), AntilipschitzWith K₁ fun a => f a b
s : Set α
t : Set β
hst : ¬IsBounded s ∧ ¬IsBounded t
b : β
hb : b ∈ t
h : IsBounded ((fun a => f a b) '' s)
⊢ IsBounded s
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : PseudoMetricSpace α
inst✝¹ : PseudoMetricSpace β
inst✝ : PseudoMetricSpace γ
K : ℝ≥0
f✝ : α → β
f : α → β → γ
K₁ : ℝ≥0
hf : ∀ (b : β), AntilipschitzWith K₁ fun a => f a b
s : Set α
t : Set β
hst : ¬IsBounded s ∧ ¬IsBounded t
b : β
hb : b ∈ t
h : IsBounded ((fun a => f a b) ⁻¹' ((fun a => f a b) '' s))
⊢ IsBounded s

tactic: exact h.subset (subset_preimage_image _ _)
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : PseudoMetricSpace α
inst✝¹ : PseudoMetricSpace β
inst✝ : PseudoMetricSpace γ
K : ℝ≥0
f✝ : α → β
f : α → β → γ
K₁ : ℝ≥0
hf : ∀ (b : β), AntilipschitzWith K₁ fun a => f a b
s : Set α
t : Set β
hst : ¬IsBounded s ∧ ¬IsBounded t
b : β
hb : b ∈ t
h : IsBounded ((fun a => f a b) ⁻¹' ((fun a => f a b) '' s))
⊢ IsBounded s
state_after: no goals