-- Mathlib/MeasureTheory/Measure/Content.lean
theorem innerContent_exists_compact {U : Opens G} (hU : μ.innerContent U ≠ ∞) {ε : ℝ≥0}
    (hε : ε ≠ 0) : ∃ K : Compacts G, (K : Set G) ⊆ U ∧ μ.innerContent U ≤ μ K + ε

Proof state:
case inr
G : Type w
inst✝ : TopologicalSpace G
μ : Content G
U : Opens G
hU : μ.innerContent U ≠ ⊤
ε : ℝ≥0
hε : ε ≠ 0
h'ε : ↑ε ≠ 0
h : ↑ε < μ.innerContent U
h₂ : μ.innerContent U - ↑ε < ⨆ K, ⨆ (_ : ↑K ⊆ ↑U), μ K
⊢ ∃ K, ↑K ⊆ ↑U ∧ μ.innerContent U ≤ μ K + ↑ε

Tactic:
simp only [lt_iSup_iff] at h₂

Result:
case inr
G : Type w
inst✝ : TopologicalSpace G
μ : Content G
U : Opens G
hU : μ.innerContent U ≠ ⊤
ε : ℝ≥0
hε : ε ≠ 0
h'ε : ↑ε ≠ 0
h : ↑ε < μ.innerContent U
h₂ : ∃ i, ∃ (_ : ↑i ⊆ ↑U), μ.innerContent U - ↑ε < μ i
⊢ ∃ K, ↑K ⊆ ↑U ∧ μ.innerContent U ≤ μ K + ↑ε

Proof state:
case inr
G : Type w
inst✝ : TopologicalSpace G
μ : Content G
U : Opens G
hU : μ.innerContent U ≠ ⊤
ε : ℝ≥0
hε : ε ≠ 0
h'ε : ↑ε ≠ 0
h : ↑ε < μ.innerContent U
⊢ ∃ K, ↑K ⊆ ↑U ∧ μ.innerContent U ≤ μ K + ↑ε

Tactic:
have h₂ := ENNReal.sub_lt_self hU h.ne_bot h'ε

Result:
case inr
G : Type w
inst✝ : TopologicalSpace G
μ : Content G
U : Opens G
hU : μ.innerContent U ≠ ⊤
ε : ℝ≥0
hε : ε ≠ 0
h'ε : ↑ε ≠ 0
h : ↑ε < μ.innerContent U
h₂ : μ.innerContent U - ↑ε < μ.innerContent U
⊢ ∃ K, ↑K ⊆ ↑U ∧ μ.innerContent U ≤ μ K + ↑ε

Proof state:
case inr.intro.intro
G : Type w
inst✝ : TopologicalSpace G
μ : Content G
U✝ : Opens G
hU : μ.innerContent U✝ ≠ ⊤
ε : ℝ≥0
hε : ε ≠ 0
h'ε : ↑ε ≠ 0
h : ↑ε < μ.innerContent U✝
U : Compacts G
h1U : ↑U ⊆ ↑U✝
h2U : μ.innerContent U✝ - ↑ε < μ U
⊢ μ.innerContent U✝ - ↑ε ≤ μ U

Tactic:
exact le_of_lt h2U

Result:
no goals

Proof state:
case inl
G : Type w
inst✝ : TopologicalSpace G
μ : Content G
U : Opens G
hU : μ.innerContent U ≠ ⊤
ε : ℝ≥0
hε : ε ≠ 0
h'ε : ↑ε ≠ 0
h : μ.innerContent U ≤ ↑ε
⊢ ∃ K, ↑K ⊆ ↑U ∧ μ.innerContent U ≤ μ K + ↑ε

Tactic:
exact ⟨⊥, empty_subset _, le_add_left h⟩

Result:
no goals

Proof state:
G : Type w
inst✝ : TopologicalSpace G
μ : Content G
U : Opens G
hU : μ.innerContent U ≠ ⊤
ε : ℝ≥0
hε : ε ≠ 0
⊢ ∃ K, ↑K ⊆ ↑U ∧ μ.innerContent U ≤ μ K + ↑ε

Tactic:
have h'ε := ENNReal.coe_ne_zero.2 hε

Result:
G : Type w
inst✝ : TopologicalSpace G
μ : Content G
U : Opens G
hU : μ.innerContent U ≠ ⊤
ε : ℝ≥0
hε : ε ≠ 0
h'ε : ↑ε ≠ 0
⊢ ∃ K, ↑K ⊆ ↑U ∧ μ.innerContent U ≤ μ K + ↑ε

Proof state:
case inr.intro.intro
G : Type w
inst✝ : TopologicalSpace G
μ : Content G
U✝ : Opens G
hU : μ.innerContent U✝ ≠ ⊤
ε : ℝ≥0
hε : ε ≠ 0
h'ε : ↑ε ≠ 0
h : ↑ε < μ.innerContent U✝
U : Compacts G
h1U : ↑U ⊆ ↑U✝
h2U : μ.innerContent U✝ - ↑ε < μ U
⊢ μ.innerContent U✝ ≤ μ U + ↑ε

Tactic:
rw [← tsub_le_iff_right]

Result:
case inr.intro.intro
G : Type w
inst✝ : TopologicalSpace G
μ : Content G
U✝ : Opens G
hU : μ.innerContent U✝ ≠ ⊤
ε : ℝ≥0
hε : ε ≠ 0
h'ε : ↑ε ≠ 0
h : ↑ε < μ.innerContent U✝
U : Compacts G
h1U : ↑U ⊆ ↑U✝
h2U : μ.innerContent U✝ - ↑ε < μ U
⊢ μ.innerContent U✝ - ↑ε ≤ μ U

Proof state:
case inr.intro.intro
G : Type w
inst✝ : TopologicalSpace G
μ : Content G
U✝ : Opens G
hU : μ.innerContent U✝ ≠ ⊤
ε : ℝ≥0
hε : ε ≠ 0
h'ε : ↑ε ≠ 0
h : ↑ε < μ.innerContent U✝
U : Compacts G
h1U : ↑U ⊆ ↑U✝
h2U : μ.innerContent U✝ - ↑ε < μ U
⊢ ∃ K, ↑K ⊆ ↑U✝ ∧ μ.innerContent U✝ ≤ μ K + ↑ε

Tactic:
refine ⟨U, h1U, ?_⟩

Result:
case inr.intro.intro
G : Type w
inst✝ : TopologicalSpace G
μ : Content G
U✝ : Opens G
hU : μ.innerContent U✝ ≠ ⊤
ε : ℝ≥0
hε : ε ≠ 0
h'ε : ↑ε ≠ 0
h : ↑ε < μ.innerContent U✝
U : Compacts G
h1U : ↑U ⊆ ↑U✝
h2U : μ.innerContent U✝ - ↑ε < μ U
⊢ μ.innerContent U✝ ≤ μ U + ↑ε

Proof state:
case inr
G : Type w
inst✝ : TopologicalSpace G
μ : Content G
U : Opens G
hU : μ.innerContent U ≠ ⊤
ε : ℝ≥0
hε : ε ≠ 0
h'ε : ↑ε ≠ 0
h : ↑ε < μ.innerContent U
h₂ : ∃ i, ∃ (_ : ↑i ⊆ ↑U), μ.innerContent U - ↑ε < μ i
⊢ ∃ K, ↑K ⊆ ↑U ∧ μ.innerContent U ≤ μ K + ↑ε

Tactic:
rcases h₂ with ⟨U, h1U, h2U⟩

Result:
case inr.intro.intro
G : Type w
inst✝ : TopologicalSpace G
μ : Content G
U✝ : Opens G
hU : μ.innerContent U✝ ≠ ⊤
ε : ℝ≥0
hε : ε ≠ 0
h'ε : ↑ε ≠ 0
h : ↑ε < μ.innerContent U✝
U : Compacts G
h1U : ↑U ⊆ ↑U✝
h2U : μ.innerContent U✝ - ↑ε < μ U
⊢ ∃ K, ↑K ⊆ ↑U✝ ∧ μ.innerContent U✝ ≤ μ K + ↑ε

Proof state:
case inr
G : Type w
inst✝ : TopologicalSpace G
μ : Content G
U : Opens G
hU : μ.innerContent U ≠ ⊤
ε : ℝ≥0
hε : ε ≠ 0
h'ε : ↑ε ≠ 0
h : ↑ε < μ.innerContent U
h₂ : μ.innerContent U - ↑ε < μ.innerContent U
⊢ ∃ K, ↑K ⊆ ↑U ∧ μ.innerContent U ≤ μ K + ↑ε

Tactic:
conv at h₂ => rhs; rw [innerContent]

Result:
case inr
G : Type w
inst✝ : TopologicalSpace G
μ : Content G
U : Opens G
hU : μ.innerContent U ≠ ⊤
ε : ℝ≥0
hε : ε ≠ 0
h'ε : ↑ε ≠ 0
h : ↑ε < μ.innerContent U
h₂ : μ.innerContent U - ↑ε < ⨆ K, ⨆ (_ : ↑K ⊆ ↑U), μ K
⊢ ∃ K, ↑K ⊆ ↑U ∧ μ.innerContent U ≤ μ K + ↑ε

Proof state:
G : Type w
inst✝ : TopologicalSpace G
μ : Content G
U : Opens G
hU : μ.innerContent U ≠ ⊤
ε : ℝ≥0
hε : ε ≠ 0
h'ε : ↑ε ≠ 0
⊢ ∃ K, ↑K ⊆ ↑U ∧ μ.innerContent U ≤ μ K + ↑ε

Tactic:
rcases le_or_lt (μ.innerContent U) ε with h | h

Result:
case inl
G : Type w
inst✝ : TopologicalSpace G
μ : Content G
U : Opens G
hU : μ.innerContent U ≠ ⊤
ε : ℝ≥0
hε : ε ≠ 0
h'ε : ↑ε ≠ 0
h : μ.innerContent U ≤ ↑ε
⊢ ∃ K, ↑K ⊆ ↑U ∧ μ.innerContent U ≤ μ K + ↑ε

case inr
G : Type w
inst✝ : TopologicalSpace G
μ : Content G
U : Opens G
hU : μ.innerContent U ≠ ⊤
ε : ℝ≥0
hε : ε ≠ 0
h'ε : ↑ε ≠ 0
h : ↑ε < μ.innerContent U
⊢ ∃ K, ↑K ⊆ ↑U ∧ μ.innerContent U ≤ μ K + ↑ε