Theorem: Part.bind_le
File: Mathlib/Data/Part.lean

tactic: constructor <;> intro h
state_before: α✝ : Type u_1
β : Type u_2
γ : Type u_3
α : Type u_2
x : Part α
f : α → Part β
y : Part β
⊢ x >>= f ≤ y ↔ ∀ a ∈ x, f a ≤ y
state_after: case mp
α✝ : Type u_1
β : Type u_2
γ : Type u_3
α : Type u_2
x : Part α
f : α → Part β
y : Part β
h : x >>= f ≤ y
⊢ ∀ a ∈ x, f a ≤ y

case mpr
α✝ : Type u_1
β : Type u_2
γ : Type u_3
α : Type u_2
x : Part α
f : α → Part β
y : Part β
h : ∀ a ∈ x, f a ≤ y
⊢ x >>= f ≤ y

tactic: intro a h' b
state_before: case mp
α✝ : Type u_1
β : Type u_2
γ : Type u_3
α : Type u_2
x : Part α
f : α → Part β
y : Part β
h : x >>= f ≤ y
⊢ ∀ a ∈ x, f a ≤ y
state_after: case mp
α✝ : Type u_1
β : Type u_2
γ : Type u_3
α : Type u_2
x : Part α
f : α → Part β
y : Part β
h : x >>= f ≤ y
a : α
h' : a ∈ x
b : β
⊢ b ∈ f a → b ∈ y

tactic: have h := h b
state_before: case mp
α✝ : Type u_1
β : Type u_2
γ : Type u_3
α : Type u_2
x : Part α
f : α → Part β
y : Part β
h : x >>= f ≤ y
a : α
h' : a ∈ x
b : β
⊢ b ∈ f a → b ∈ y
state_after: case mp
α✝ : Type u_1
β : Type u_2
γ : Type u_3
α : Type u_2
x : Part α
f : α → Part β
y : Part β
h✝ : x >>= f ≤ y
a : α
h' : a ∈ x
b : β
h : b ∈ x >>= f → b ∈ y
⊢ b ∈ f a → b ∈ y

tactic: simp only [and_imp, exists_prop, bind_eq_bind, mem_bind_iff, exists_imp] at h
state_before: case mp
α✝ : Type u_1
β : Type u_2
γ : Type u_3
α : Type u_2
x : Part α
f : α → Part β
y : Part β
h✝ : x >>= f ≤ y
a : α
h' : a ∈ x
b : β
h : b ∈ x >>= f → b ∈ y
⊢ b ∈ f a → b ∈ y
state_after: case mp
α✝ : Type u_1
β : Type u_2
γ : Type u_3
α : Type u_2
x : Part α
f : α → Part β
y : Part β
h✝ : x >>= f ≤ y
a : α
h' : a ∈ x
b : β
h : ∀ x_1 ∈ x, b ∈ f x_1 → b ∈ y
⊢ b ∈ f a → b ∈ y

tactic: apply h _ h'
state_before: case mp
α✝ : Type u_1
β : Type u_2
γ : Type u_3
α : Type u_2
x : Part α
f : α → Part β
y : Part β
h✝ : x >>= f ≤ y
a : α
h' : a ∈ x
b : β
h : ∀ x_1 ∈ x, b ∈ f x_1 → b ∈ y
⊢ b ∈ f a → b ∈ y
state_after: no goals

tactic: intro b h'
state_before: case mpr
α✝ : Type u_1
β : Type u_2
γ : Type u_3
α : Type u_2
x : Part α
f : α → Part β
y : Part β
h : ∀ a ∈ x, f a ≤ y
⊢ x >>= f ≤ y
state_after: case mpr
α✝ : Type u_1
β : Type u_2
γ : Type u_3
α : Type u_2
x : Part α
f : α → Part β
y : Part β
h : ∀ a ∈ x, f a ≤ y
b : β
h' : b ∈ x >>= f
⊢ b ∈ y

tactic: simp only [exists_prop, bind_eq_bind, mem_bind_iff] at h'
state_before: case mpr
α✝ : Type u_1
β : Type u_2
γ : Type u_3
α : Type u_2
x : Part α
f : α → Part β
y : Part β
h : ∀ a ∈ x, f a ≤ y
b : β
h' : b ∈ x >>= f
⊢ b ∈ y
state_after: case mpr
α✝ : Type u_1
β : Type u_2
γ : Type u_3
α : Type u_2
x : Part α
f : α → Part β
y : Part β
h : ∀ a ∈ x, f a ≤ y
b : β
h' : ∃ a ∈ x, b ∈ f a
⊢ b ∈ y

tactic: rcases h' with ⟨a, h₀, h₁⟩
state_before: case mpr
α✝ : Type u_1
β : Type u_2
γ : Type u_3
α : Type u_2
x : Part α
f : α → Part β
y : Part β
h : ∀ a ∈ x, f a ≤ y
b : β
h' : ∃ a ∈ x, b ∈ f a
⊢ b ∈ y
state_after: case mpr.intro.intro
α✝ : Type u_1
β : Type u_2
γ : Type u_3
α : Type u_2
x : Part α
f : α → Part β
y : Part β
h : ∀ a ∈ x, f a ≤ y
b : β
a : α
h₀ : a ∈ x
h₁ : b ∈ f a
⊢ b ∈ y

tactic: apply h _ h₀ _ h₁
state_before: case mpr.intro.intro
α✝ : Type u_1
β : Type u_2
γ : Type u_3
α : Type u_2
x : Part α
f : α → Part β
y : Part β
h : ∀ a ∈ x, f a ≤ y
b : β
a : α
h₀ : a ∈ x
h₁ : b ∈ f a
⊢ b ∈ y
state_after: no goals