Theorem: MeasureTheory.SimpleFunc.simpleFunc_bot
File: Mathlib/MeasureTheory/Function/SimpleFunc.lean

tactic: have hf_meas := @SimpleFunc.measurableSet_fiber α _ ⊥ f
state_before: α✝ : Type ?u.20769
β : Type u_2
γ : Type ?u.20775
δ : Type ?u.20778
inst✝¹ : MeasurableSpace α✝
α : Type u_1
f : α →ₛ β
inst✝ : Nonempty β
⊢ ∃ c, ∀ (x : α), ↑f x = c

tactic: simp_rw [MeasurableSpace.measurableSet_bot_iff] at hf_meas
state_before: α✝ : Type ?u.20769
β : Type u_2
γ : Type ?u.20775
δ : Type ?u.20778
inst✝¹ : MeasurableSpace α✝
α : Type u_1
f : α →ₛ β
inst✝ : Nonempty β
hf_meas : ∀ (x : β), MeasurableSet (↑f ⁻¹' {x})
⊢ ∃ c, ∀ (x : α), ↑f x = c

tactic: cases' isEmpty_or_nonempty α with h h
state_before: α✝ : Type ?u.20769
β : Type u_2
γ : Type ?u.20775
δ : Type ?u.20778
inst✝¹ : MeasurableSpace α✝
α : Type u_1
f : α →ₛ β
inst✝ : Nonempty β
hf_meas : ∀ (x : β), ↑f ⁻¹' {x} = ∅ ∨ ↑f ⁻¹' {x} = univ
⊢ ∃ c, ∀ (x : α), ↑f x = c

tactic: simp only [IsEmpty.forall_iff, exists_const]
state_before: case inl
α✝ : Type ?u.20769
β : Type u_2
γ : Type ?u.20775
δ : Type ?u.20778
inst✝¹ : MeasurableSpace α✝
α : Type u_1
f : α →ₛ β
inst✝ : Nonempty β
hf_meas : ∀ (x : β), ↑f ⁻¹' {x} = ∅ ∨ ↑f ⁻¹' {x} = univ
h : IsEmpty α
⊢ ∃ c, ∀ (x : α), ↑f x = c

tactic: specialize hf_meas (f h.some)
state_before: case inr
α✝ : Type ?u.20769
β : Type u_2
γ : Type ?u.20775
δ : Type ?u.20778
inst✝¹ : MeasurableSpace α✝
α : Type u_1
f : α →ₛ β
inst✝ : Nonempty β
hf_meas : ∀ (x : β), ↑f ⁻¹' {x} = ∅ ∨ ↑f ⁻¹' {x} = univ
h : Nonempty α
⊢ ∃ c, ∀ (x : α), ↑f x = c

tactic: cases' hf_meas with hf_meas hf_meas
state_before: case inr
α✝ : Type ?u.20769
β : Type u_2
γ : Type ?u.20775
δ : Type ?u.20778
inst✝¹ : MeasurableSpace α✝
α : Type u_1
f : α →ₛ β
inst✝ : Nonempty β
h : Nonempty α
hf_meas : ↑f ⁻¹' {↑f (Nonempty.some h)} = ∅ ∨ ↑f ⁻¹' {↑f (Nonempty.some h)} = univ
⊢ ∃ c, ∀ (x : α), ↑f x = c

tactic: exfalso
state_before: case inr.inl
α✝ : Type ?u.20769
β : Type u_2
γ : Type ?u.20775
δ : Type ?u.20778
inst✝¹ : MeasurableSpace α✝
α : Type u_1
f : α →ₛ β
inst✝ : Nonempty β
h : Nonempty α
hf_meas : ↑f ⁻¹' {↑f (Nonempty.some h)} = ∅
⊢ ∃ c, ∀ (x : α), ↑f x = c

tactic: refine' Set.not_mem_empty h.some _
state_before: case inr.inl.h
α✝ : Type ?u.20769
β : Type u_2
γ : Type ?u.20775
δ : Type ?u.20778
inst✝¹ : MeasurableSpace α✝
α : Type u_1
f : α →ₛ β
inst✝ : Nonempty β
h : Nonempty α
hf_meas : ↑f ⁻¹' {↑f (Nonempty.some h)} = ∅
⊢ False

tactic: rw [← hf_meas, Set.mem_preimage]
state_before: case inr.inl.h
α✝ : Type ?u.20769
β : Type u_2
γ : Type ?u.20775
δ : Type ?u.20778
inst✝¹ : MeasurableSpace α✝
α : Type u_1
f : α →ₛ β
inst✝ : Nonempty β
h : Nonempty α
hf_meas : ↑f ⁻¹' {↑f (Nonempty.some h)} = ∅
⊢ Nonempty.some h ∈ ∅

tactic: exact Set.mem_singleton _
state_before: case inr.inl.h
α✝ : Type ?u.20769
β : Type u_2
γ : Type ?u.20775
δ : Type ?u.20778
inst✝¹ : MeasurableSpace α✝
α : Type u_1
f : α →ₛ β
inst✝ : Nonempty β
h : Nonempty α
hf_meas : ↑f ⁻¹' {↑f (Nonempty.some h)} = ∅
⊢ ↑f (Nonempty.some h) ∈ {↑f (Nonempty.some h)}

tactic: refine' ⟨f h.some, fun x => _⟩
state_before: case inr.inr
α✝ : Type ?u.20769
β : Type u_2
γ : Type ?u.20775
δ : Type ?u.20778
inst✝¹ : MeasurableSpace α✝
α : Type u_1
f : α →ₛ β
inst✝ : Nonempty β
h : Nonempty α
hf_meas : ↑f ⁻¹' {↑f (Nonempty.some h)} = univ
⊢ ∃ c, ∀ (x : α), ↑f x = c

tactic: have : x ∈ f ⁻¹' {f h.some} := by
  rw [hf_meas]
  exact Set.mem_univ x
state_before: case inr.inr
α✝ : Type ?u.20769
β : Type u_2
γ : Type ?u.20775
δ : Type ?u.20778
inst✝¹ : MeasurableSpace α✝
α : Type u_1
f : α →ₛ β
inst✝ : Nonempty β
h : Nonempty α
hf_meas : ↑f ⁻¹' {↑f (Nonempty.some h)} = univ
x : α
⊢ ↑f x = ↑f (Nonempty.some h)

tactic: rwa [Set.mem_preimage, Set.mem_singleton_iff] at this
state_before: case inr.inr
α✝ : Type ?u.20769
β : Type u_2
γ : Type ?u.20775
δ : Type ?u.20778
inst✝¹ : MeasurableSpace α✝
α : Type u_1
f : α →ₛ β
inst✝ : Nonempty β
h : Nonempty α
hf_meas : ↑f ⁻¹' {↑f (Nonempty.some h)} = univ
x : α
this : x ∈ ↑f ⁻¹' {↑f (Nonempty.some h)}
⊢ ↑f x = ↑f (Nonempty.some h)

tactic: rw [hf_meas]
state_before: α✝ : Type ?u.20769
β : Type u_2
γ : Type ?u.20775
δ : Type ?u.20778
inst✝¹ : MeasurableSpace α✝
α : Type u_1
f : α →ₛ β
inst✝ : Nonempty β
h : Nonempty α
hf_meas : ↑f ⁻¹' {↑f (Nonempty.some h)} = univ
x : α
⊢ x ∈ ↑f ⁻¹' {↑f (Nonempty.some h)}

tactic: exact Set.mem_univ x
state_before: α✝ : Type ?u.20769
β : Type u_2
γ : Type ?u.20775
δ : Type ?u.20778
inst✝¹ : MeasurableSpace α✝
α : Type u_1
f : α →ₛ β
inst✝ : Nonempty β
h : Nonempty α
hf_meas : ↑f ⁻¹' {↑f (Nonempty.some h)} = univ
x : α
⊢ x ∈ univ