Theorem: Prod.disjoint_iff
File: Mathlib/Order/Disjoint.lean

tactic: constructor
state_before: α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : PartialOrder β
inst✝¹ : OrderBot α
inst✝ : OrderBot β
x y : α × β
⊢ Disjoint x y ↔ Disjoint x.1 y.1 ∧ Disjoint x.2 y.2
state_after: case mp
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : PartialOrder β
inst✝¹ : OrderBot α
inst✝ : OrderBot β
x y : α × β
⊢ Disjoint x y → Disjoint x.1 y.1 ∧ Disjoint x.2 y.2

case mpr
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : PartialOrder β
inst✝¹ : OrderBot α
inst✝ : OrderBot β
x y : α × β
⊢ Disjoint x.1 y.1 ∧ Disjoint x.2 y.2 → Disjoint x y

tactic: intro h
state_before: case mp
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : PartialOrder β
inst✝¹ : OrderBot α
inst✝ : OrderBot β
x y : α × β
⊢ Disjoint x y → Disjoint x.1 y.1 ∧ Disjoint x.2 y.2
state_after: case mp
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : PartialOrder β
inst✝¹ : OrderBot α
inst✝ : OrderBot β
x y : α × β
h : Disjoint x y
⊢ Disjoint x.1 y.1 ∧ Disjoint x.2 y.2

tactic: refine ⟨fun a hx hy ↦ (@h (a, ⊥) ⟨hx, ?_⟩ ⟨hy, ?_⟩).1,
  fun b hx hy ↦ (@h (⊥, b) ⟨?_, hx⟩ ⟨?_, hy⟩).2⟩
state_before: case mp
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : PartialOrder β
inst✝¹ : OrderBot α
inst✝ : OrderBot β
x y : α × β
h : Disjoint x y
⊢ Disjoint x.1 y.1 ∧ Disjoint x.2 y.2
state_after: case mp.refine_1
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : PartialOrder β
inst✝¹ : OrderBot α
inst✝ : OrderBot β
x y : α × β
h : Disjoint x y
a : α
hx : a ≤ x.1
hy : a ≤ y.1
⊢ (a, ⊥).2 ≤ x.2

case mp.refine_2
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : PartialOrder β
inst✝¹ : OrderBot α
inst✝ : OrderBot β
x y : α × β
h : Disjoint x y
a : α
hx : a ≤ x.1
hy : a ≤ y.1
⊢ (a, ⊥).2 ≤ y.2

case mp.refine_3
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : PartialOrder β
inst✝¹ : OrderBot α
inst✝ : OrderBot β
x y : α × β
h : Disjoint x y
b : β
hx : b ≤ x.2
hy : b ≤ y.2
⊢ (⊥, b).1 ≤ x.1

case mp.refine_4
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : PartialOrder β
inst✝¹ : OrderBot α
inst✝ : OrderBot β
x y : α × β
h : Disjoint x y
b : β
hx : b ≤ x.2
hy : b ≤ y.2
⊢ (⊥, b).1 ≤ y.1

tactic: all_goals exact bot_le
state_before: case mp.refine_1
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : PartialOrder β
inst✝¹ : OrderBot α
inst✝ : OrderBot β
x y : α × β
h : Disjoint x y
a : α
hx : a ≤ x.1
hy : a ≤ y.1
⊢ (a, ⊥).2 ≤ x.2

case mp.refine_2
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : PartialOrder β
inst✝¹ : OrderBot α
inst✝ : OrderBot β
x y : α × β
h : Disjoint x y
a : α
hx : a ≤ x.1
hy : a ≤ y.1
⊢ (a, ⊥).2 ≤ y.2

case mp.refine_3
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : PartialOrder β
inst✝¹ : OrderBot α
inst✝ : OrderBot β
x y : α × β
h : Disjoint x y
b : β
hx : b ≤ x.2
hy : b ≤ y.2
⊢ (⊥, b).1 ≤ x.1

case mp.refine_4
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : PartialOrder β
inst✝¹ : OrderBot α
inst✝ : OrderBot β
x y : α × β
h : Disjoint x y
b : β
hx : b ≤ x.2
hy : b ≤ y.2
⊢ (⊥, b).1 ≤ y.1
state_after: no goals

tactic: exact bot_le
state_before: case mp.refine_4
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : PartialOrder β
inst✝¹ : OrderBot α
inst✝ : OrderBot β
x y : α × β
h : Disjoint x y
b : β
hx : b ≤ x.2
hy : b ≤ y.2
⊢ (⊥, b).1 ≤ y.1
state_after: no goals

tactic: rintro ⟨ha, hb⟩ z hza hzb
state_before: case mpr
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : PartialOrder β
inst✝¹ : OrderBot α
inst✝ : OrderBot β
x y : α × β
⊢ Disjoint x.1 y.1 ∧ Disjoint x.2 y.2 → Disjoint x y
state_after: case mpr.intro
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : PartialOrder β
inst✝¹ : OrderBot α
inst✝ : OrderBot β
x y : α × β
ha : Disjoint x.1 y.1
hb : Disjoint x.2 y.2
z : α × β
hza : z ≤ x
hzb : z ≤ y
⊢ z ≤ ⊥

tactic: exact ⟨ha hza.1 hzb.1, hb hza.2 hzb.2⟩
state_before: case mpr.intro
α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : PartialOrder β
inst✝¹ : OrderBot α
inst✝ : OrderBot β
x y : α × β
ha : Disjoint x.1 y.1
hb : Disjoint x.2 y.2
z : α × β
hza : z ≤ x
hzb : z ≤ y
⊢ z ≤ ⊥
state_after: no goals