-- Mathlib/MeasureTheory/Measure/Haar/NormedSpace.lean
@[to_additive]
lemma _root_.MonoidHom.exists_nhds_isBounded (f : G →* H) (hf : Measurable f) (x : G) :
    ∃ s ∈ 𝓝 x, IsBounded (f '' s)

Proof state:
case intro
G : Type u_1
H : Type u_2
inst✝⁸ : MeasurableSpace G
inst✝⁷ : Group G
inst✝⁶ : TopologicalSpace G
inst✝⁵ : IsTopologicalGroup G
inst✝⁴ : BorelSpace G
inst✝³ : LocallyCompactSpace G
inst✝² : MeasurableSpace H
inst✝¹ : SeminormedGroup H
inst✝ : OpensMeasurableSpace H
f : G →* H
hf : Measurable ⇑f
x : G
K : PositiveCompacts G := Classical.arbitrary (PositiveCompacts G)
n : ℕ
hn : 0 < haar (interior ↑K ∩ ⇑f ⁻¹' ball 1 ↑n)
this : Bornology.IsBounded (⇑f '' (interior ↑K ∩ ⇑f ⁻¹' ball 1 ↑n))
⊢ Bornology.IsBounded (⇑f '' (MulOpposite.op x • (interior ↑K ∩ ⇑f ⁻¹' ball 1 ↑n / (interior ↑K ∩ ⇑f ⁻¹' ball 1 ↑n))))

Tactic:
rw [image_op_smul_distrib, image_div]

Result:
case intro
G : Type u_1
H : Type u_2
inst✝⁸ : MeasurableSpace G
inst✝⁷ : Group G
inst✝⁶ : TopologicalSpace G
inst✝⁵ : IsTopologicalGroup G
inst✝⁴ : BorelSpace G
inst✝³ : LocallyCompactSpace G
inst✝² : MeasurableSpace H
inst✝¹ : SeminormedGroup H
inst✝ : OpensMeasurableSpace H
f : G →* H
hf : Measurable ⇑f
x : G
K : PositiveCompacts G := Classical.arbitrary (PositiveCompacts G)
n : ℕ
hn : 0 < haar (interior ↑K ∩ ⇑f ⁻¹' ball 1 ↑n)
this : Bornology.IsBounded (⇑f '' (interior ↑K ∩ ⇑f ⁻¹' ball 1 ↑n))
⊢ Bornology.IsBounded
    (MulOpposite.op (f x) • (⇑f '' (interior ↑K ∩ ⇑f ⁻¹' ball 1 ↑n) / ⇑f '' (interior ↑K ∩ ⇑f ⁻¹' ball 1 ↑n)))

Proof state:
case intro
G : Type u_1
H : Type u_2
inst✝⁸ : MeasurableSpace G
inst✝⁷ : Group G
inst✝⁶ : TopologicalSpace G
inst✝⁵ : IsTopologicalGroup G
inst✝⁴ : BorelSpace G
inst✝³ : LocallyCompactSpace G
inst✝² : MeasurableSpace H
inst✝¹ : SeminormedGroup H
inst✝ : OpensMeasurableSpace H
f : G →* H
hf : Measurable ⇑f
x : G
K : PositiveCompacts G := Classical.arbitrary (PositiveCompacts G)
n : ℕ
hn : 0 < haar (interior ↑K ∩ ⇑f ⁻¹' ball 1 ↑n)
this : Bornology.IsBounded (⇑f '' (interior ↑K ∩ ⇑f ⁻¹' ball 1 ↑n))
⊢ Bornology.IsBounded
    (MulOpposite.op (f x) • (⇑f '' (interior ↑K ∩ ⇑f ⁻¹' ball 1 ↑n) / ⇑f '' (interior ↑K ∩ ⇑f ⁻¹' ball 1 ↑n)))

Tactic:
exact (this.div this).smul _

Result:
no goals

Proof state:
case intro
G : Type u_1
H : Type u_2
inst✝⁸ : MeasurableSpace G
inst✝⁷ : Group G
inst✝⁶ : TopologicalSpace G
inst✝⁵ : IsTopologicalGroup G
inst✝⁴ : BorelSpace G
inst✝³ : LocallyCompactSpace G
inst✝² : MeasurableSpace H
inst✝¹ : SeminormedGroup H
inst✝ : OpensMeasurableSpace H
f : G →* H
hf : Measurable ⇑f
x : G
K : PositiveCompacts G := Classical.arbitrary (PositiveCompacts G)
n : ℕ
hn : 0 < haar (interior ↑K ∩ ⇑f ⁻¹' ball 1 ↑n)
⊢ Bornology.IsBounded (⇑f '' (MulOpposite.op x • (interior ↑K ∩ ⇑f ⁻¹' ball 1 ↑n / (interior ↑K ∩ ⇑f ⁻¹' ball 1 ↑n))))

Tactic:
have : Bornology.IsBounded (f '' (interior K ∩ f ⁻¹' ball 1 n)) :=
  isBounded_ball.subset <| (image_mono inter_subset_right).trans <| image_preimage_subset _ _

Result:
case intro
G : Type u_1
H : Type u_2
inst✝⁸ : MeasurableSpace G
inst✝⁷ : Group G
inst✝⁶ : TopologicalSpace G
inst✝⁵ : IsTopologicalGroup G
inst✝⁴ : BorelSpace G
inst✝³ : LocallyCompactSpace G
inst✝² : MeasurableSpace H
inst✝¹ : SeminormedGroup H
inst✝ : OpensMeasurableSpace H
f : G →* H
hf : Measurable ⇑f
x : G
K : PositiveCompacts G := Classical.arbitrary (PositiveCompacts G)
n : ℕ
hn : 0 < haar (interior ↑K ∩ ⇑f ⁻¹' ball 1 ↑n)
this : Bornology.IsBounded (⇑f '' (interior ↑K ∩ ⇑f ⁻¹' ball 1 ↑n))
⊢ Bornology.IsBounded (⇑f '' (MulOpposite.op x • (interior ↑K ∩ ⇑f ⁻¹' ball 1 ↑n / (interior ↑K ∩ ⇑f ⁻¹' ball 1 ↑n))))

Proof state:
case intro
G : Type u_1
H : Type u_2
inst✝⁸ : MeasurableSpace G
inst✝⁷ : Group G
inst✝⁶ : TopologicalSpace G
inst✝⁵ : IsTopologicalGroup G
inst✝⁴ : BorelSpace G
inst✝³ : LocallyCompactSpace G
inst✝² : MeasurableSpace H
inst✝¹ : SeminormedGroup H
inst✝ : OpensMeasurableSpace H
f : G →* H
hf : Measurable ⇑f
x : G
K : PositiveCompacts G := Classical.arbitrary (PositiveCompacts G)
n : ℕ
hn : 0 < haar (interior ↑K ∩ ⇑f ⁻¹' ball 1 ↑n)
⊢ ∃ s ∈ 𝓝 x, Bornology.IsBounded (⇑f '' s)

Tactic:
rw [← one_mul x, ← op_smul_eq_mul]

Result:
case intro
G : Type u_1
H : Type u_2
inst✝⁸ : MeasurableSpace G
inst✝⁷ : Group G
inst✝⁶ : TopologicalSpace G
inst✝⁵ : IsTopologicalGroup G
inst✝⁴ : BorelSpace G
inst✝³ : LocallyCompactSpace G
inst✝² : MeasurableSpace H
inst✝¹ : SeminormedGroup H
inst✝ : OpensMeasurableSpace H
f : G →* H
hf : Measurable ⇑f
x : G
K : PositiveCompacts G := Classical.arbitrary (PositiveCompacts G)
n : ℕ
hn : 0 < haar (interior ↑K ∩ ⇑f ⁻¹' ball 1 ↑n)
⊢ ∃ s ∈ 𝓝 (MulOpposite.op x • 1), Bornology.IsBounded (⇑f '' s)

Proof state:
case intro
G : Type u_1
H : Type u_2
inst✝⁸ : MeasurableSpace G
inst✝⁷ : Group G
inst✝⁶ : TopologicalSpace G
inst✝⁵ : IsTopologicalGroup G
inst✝⁴ : BorelSpace G
inst✝³ : LocallyCompactSpace G
inst✝² : MeasurableSpace H
inst✝¹ : SeminormedGroup H
inst✝ : OpensMeasurableSpace H
f : G →* H
hf : Measurable ⇑f
x : G
K : PositiveCompacts G := Classical.arbitrary (PositiveCompacts G)
n : ℕ
hn : 0 < haar (interior ↑K ∩ ⇑f ⁻¹' ball 1 ↑n)
⊢ ∃ s ∈ 𝓝 (MulOpposite.op x • 1), Bornology.IsBounded (⇑f '' s)

Tactic:
refine ⟨_, smul_mem_nhds_smul _ <| div_mem_nhds_one_of_haar_pos_ne_top haar _
  (isOpen_interior.measurableSet.inter <| hf measurableSet_ball) hn <|
    mt (measure_mono_top <| inter_subset_left.trans interior_subset) K.isCompact.measure_ne_top,
  ?_⟩

Result:
case intro
G : Type u_1
H : Type u_2
inst✝⁸ : MeasurableSpace G
inst✝⁷ : Group G
inst✝⁶ : TopologicalSpace G
inst✝⁵ : IsTopologicalGroup G
inst✝⁴ : BorelSpace G
inst✝³ : LocallyCompactSpace G
inst✝² : MeasurableSpace H
inst✝¹ : SeminormedGroup H
inst✝ : OpensMeasurableSpace H
f : G →* H
hf : Measurable ⇑f
x : G
K : PositiveCompacts G := Classical.arbitrary (PositiveCompacts G)
n : ℕ
hn : 0 < haar (interior ↑K ∩ ⇑f ⁻¹' ball 1 ↑n)
⊢ Bornology.IsBounded (⇑f '' (MulOpposite.op x • (interior ↑K ∩ ⇑f ⁻¹' ball 1 ↑n / (interior ↑K ∩ ⇑f ⁻¹' ball 1 ↑n))))

Proof state:
G : Type u_1
H : Type u_2
inst✝⁸ : MeasurableSpace G
inst✝⁷ : Group G
inst✝⁶ : TopologicalSpace G
inst✝⁵ : IsTopologicalGroup G
inst✝⁴ : BorelSpace G
inst✝³ : LocallyCompactSpace G
inst✝² : MeasurableSpace H
inst✝¹ : SeminormedGroup H
inst✝ : OpensMeasurableSpace H
f : G →* H
hf : Measurable ⇑f
x : G
K : PositiveCompacts G := Classical.arbitrary (PositiveCompacts G)
⊢ ∃ n, 0 < haar (interior ↑K ∩ ⇑f ⁻¹' ball 1 ↑n)

Tactic:
by_contra!

Result:
G : Type u_1
H : Type u_2
inst✝⁸ : MeasurableSpace G
inst✝⁷ : Group G
inst✝⁶ : TopologicalSpace G
inst✝⁵ : IsTopologicalGroup G
inst✝⁴ : BorelSpace G
inst✝³ : LocallyCompactSpace G
inst✝² : MeasurableSpace H
inst✝¹ : SeminormedGroup H
inst✝ : OpensMeasurableSpace H
f : G →* H
hf : Measurable ⇑f
x : G
K : PositiveCompacts G := Classical.arbitrary (PositiveCompacts G)
this : ∀ (n : ℕ), haar (interior ↑K ∩ ⇑f ⁻¹' ball 1 ↑n) ≤ 0
⊢ False

Proof state:
G : Type u_1
H : Type u_2
inst✝⁸ : MeasurableSpace G
inst✝⁷ : Group G
inst✝⁶ : TopologicalSpace G
inst✝⁵ : IsTopologicalGroup G
inst✝⁴ : BorelSpace G
inst✝³ : LocallyCompactSpace G
inst✝² : MeasurableSpace H
inst✝¹ : SeminormedGroup H
inst✝ : OpensMeasurableSpace H
f : G →* H
hf : Measurable ⇑f
x : G
K : PositiveCompacts G := Classical.arbitrary (PositiveCompacts G)
this : haar (interior ↑K) = 0
⊢ False

Tactic:
exact this.not_gt <| isOpen_interior.measure_pos _ K.interior_nonempty

Result:
no goals