Theorem: Directed.extend_bot
File: Mathlib/Order/Directed.lean

tactic: intro a b
state_before: α : Type u
β : Type v
ι : Sort w
r r' s : α → α → Prop
inst✝¹ : Preorder α
inst✝ : OrderBot α
e : ι → β
f : ι → α
hf : Directed (fun x x_1 => x ≤ x_1) f
he : Injective e
⊢ Directed (fun x x_1 => x ≤ x_1) (extend e f ⊥)

tactic: rcases(em (∃ i, e i = a)).symm with (ha | ⟨i, rfl⟩)
state_before: α : Type u
β : Type v
ι : Sort w
r r' s : α → α → Prop
inst✝¹ : Preorder α
inst✝ : OrderBot α
e : ι → β
f : ι → α
hf : Directed (fun x x_1 => x ≤ x_1) f
he : Injective e
a b : β
⊢ ∃ z,
    (fun x x_1 => x ≤ x_1) (extend e f ⊥ a) (extend e f ⊥ z) ∧ (fun x x_1 => x ≤ x_1) (extend e f ⊥ b) (extend e f ⊥ z)

tactic: rcases(em (∃ i, e i = b)).symm with (hb | ⟨j, rfl⟩)
state_before: case inr.intro
α : Type u
β : Type v
ι : Sort w
r r' s : α → α → Prop
inst✝¹ : Preorder α
inst✝ : OrderBot α
e : ι → β
f : ι → α
hf : Directed (fun x x_1 => x ≤ x_1) f
he : Injective e
b : β
i : ι
⊢ ∃ z,
    (fun x x_1 => x ≤ x_1) (extend e f ⊥ (e i)) (extend e f ⊥ z) ∧
      (fun x x_1 => x ≤ x_1) (extend e f ⊥ b) (extend e f ⊥ z)

tactic: rcases hf i j with ⟨k, hi, hj⟩
state_before: case inr.intro.inr.intro
α : Type u
β : Type v
ι : Sort w
r r' s : α → α → Prop
inst✝¹ : Preorder α
inst✝ : OrderBot α
e : ι → β
f : ι → α
hf : Directed (fun x x_1 => x ≤ x_1) f
he : Injective e
i j : ι
⊢ ∃ z,
    (fun x x_1 => x ≤ x_1) (extend e f ⊥ (e i)) (extend e f ⊥ z) ∧
      (fun x x_1 => x ≤ x_1) (extend e f ⊥ (e j)) (extend e f ⊥ z)

tactic: use e k
state_before: case inr.intro.inr.intro.intro.intro
α : Type u
β : Type v
ι : Sort w
r r' s : α → α → Prop
inst✝¹ : Preorder α
inst✝ : OrderBot α
e : ι → β
f : ι → α
hf : Directed (fun x x_1 => x ≤ x_1) f
he : Injective e
i j k : ι
hi : f i ≤ f k
hj : f j ≤ f k
⊢ ∃ z,
    (fun x x_1 => x ≤ x_1) (extend e f ⊥ (e i)) (extend e f ⊥ z) ∧
      (fun x x_1 => x ≤ x_1) (extend e f ⊥ (e j)) (extend e f ⊥ z)

tactic: simp only [he.extend_apply, *, true_and_iff]
state_before: case inr.intro.inr.intro.intro.intro
α : Type u
β : Type v
ι : Sort w
r r' s : α → α → Prop
inst✝¹ : Preorder α
inst✝ : OrderBot α
e : ι → β
f : ι → α
hf : Directed (fun x x_1 => x ≤ x_1) f
he : Injective e
i j k : ι
hi : f i ≤ f k
hj : f j ≤ f k
⊢ (fun x x_1 => x ≤ x_1) (extend e f ⊥ (e i)) (extend e f ⊥ (e k)) ∧
    (fun x x_1 => x ≤ x_1) (extend e f ⊥ (e j)) (extend e f ⊥ (e k))

tactic: use b
state_before: case inl
α : Type u
β : Type v
ι : Sort w
r r' s : α → α → Prop
inst✝¹ : Preorder α
inst✝ : OrderBot α
e : ι → β
f : ι → α
hf : Directed (fun x x_1 => x ≤ x_1) f
he : Injective e
a b : β
ha : ¬∃ i, e i = a
⊢ ∃ z,
    (fun x x_1 => x ≤ x_1) (extend e f ⊥ a) (extend e f ⊥ z) ∧ (fun x x_1 => x ≤ x_1) (extend e f ⊥ b) (extend e f ⊥ z)

tactic: simp [Function.extend_apply' _ _ _ ha]
state_before: case inl
α : Type u
β : Type v
ι : Sort w
r r' s : α → α → Prop
inst✝¹ : Preorder α
inst✝ : OrderBot α
e : ι → β
f : ι → α
hf : Directed (fun x x_1 => x ≤ x_1) f
he : Injective e
a b : β
ha : ¬∃ i, e i = a
⊢ (fun x x_1 => x ≤ x_1) (extend e f ⊥ a) (extend e f ⊥ b) ∧ (fun x x_1 => x ≤ x_1) (extend e f ⊥ b) (extend e f ⊥ b)

tactic: use e i
state_before: case inr.intro.inl
α : Type u
β : Type v
ι : Sort w
r r' s : α → α → Prop
inst✝¹ : Preorder α
inst✝ : OrderBot α
e : ι → β
f : ι → α
hf : Directed (fun x x_1 => x ≤ x_1) f
he : Injective e
b : β
i : ι
hb : ¬∃ i, e i = b
⊢ ∃ z,
    (fun x x_1 => x ≤ x_1) (extend e f ⊥ (e i)) (extend e f ⊥ z) ∧
      (fun x x_1 => x ≤ x_1) (extend e f ⊥ b) (extend e f ⊥ z)

tactic: simp [Function.extend_apply' _ _ _ hb]
state_before: case inr.intro.inl
α : Type u
β : Type v
ι : Sort w
r r' s : α → α → Prop
inst✝¹ : Preorder α
inst✝ : OrderBot α
e : ι → β
f : ι → α
hf : Directed (fun x x_1 => x ≤ x_1) f
he : Injective e
b : β
i : ι
hb : ¬∃ i, e i = b
⊢ (fun x x_1 => x ≤ x_1) (extend e f ⊥ (e i)) (extend e f ⊥ (e i)) ∧
    (fun x x_1 => x ≤ x_1) (extend e f ⊥ b) (extend e f ⊥ (e i))