Theorem: project.findMin_is_minimum (Project/findMin.lean)

State before:
α : Type u_1
le : α → α → Bool
not_le_le : ∀ (x y : α), ¬le x y = true → le y x = true
le_trans : ∀ (x y z : α), le x y = true → le y z = true → le x z = true
le_rfl : ∀ (z : α), le z z = true
⊢ ∀ (hs : List (BinTree α)) (idx : ℕ) (h' : BinTree α) (idx' : ℕ),
    le (findMin le hs idx (h', idx')).fst.val h'.val = true ∧
      ∀ (x : BinTree α), x ∈ hs → le (findMin le hs idx (h', idx')).fst.val x.val = true
Tactic:
intros
State after:
α : Type u_1
le : α → α → Bool
not_le_le : ∀ (x y : α), ¬le x y = true → le y x = true
le_trans : ∀ (x y z : α), le x y = true → le y z = true → le x z = true
le_rfl : ∀ (z : α), le z z = true
hs✝ : List (BinTree α)
idx✝ : ℕ
h'✝ : BinTree α
idx'✝ : ℕ
⊢ le (findMin le hs✝ idx✝ (h'✝, idx'✝)).fst.val h'✝.val = true ∧
    ∀ (x : BinTree α), x ∈ hs✝ → le (findMin le hs✝ idx✝ (h'✝, idx'✝)).fst.val x.val = true

State before:
α : Type u_1
le : α → α → Bool
not_le_le : ∀ (x y : α), ¬le x y = true → le y x = true
le_trans : ∀ (x y z : α), le x y = true → le y z = true → le x z = true
le_rfl : ∀ (z : α), le z z = true
hs✝ : List (BinTree α)
idx✝ : ℕ
h'✝ : BinTree α
idx'✝ : ℕ
⊢ le (findMin le hs✝ idx✝ (h'✝, idx'✝)).fst.val h'✝.val = true ∧
    ∀ (x : BinTree α), x ∈ hs✝ → le (findMin le hs✝ idx✝ (h'✝, idx'✝)).fst.val x.val = true
Tactic:
apply And.intro
State after:
case left
α : Type u_1
le : α → α → Bool
not_le_le : ∀ (x y : α), ¬le x y = true → le y x = true
le_trans : ∀ (x y z : α), le x y = true → le y z = true → le x z = true
le_rfl : ∀ (z : α), le z z = true
hs✝ : List (BinTree α)
idx✝ : ℕ
h'✝ : BinTree α
idx'✝ : ℕ
⊢ le (findMin le hs✝ idx✝ (h'✝, idx'✝)).fst.val h'✝.val = true

case right
α : Type u_1
le : α → α → Bool
not_le_le : ∀ (x y : α), ¬le x y = true → le y x = true
le_trans : ∀ (x y z : α), le x y = true → le y z = true → le x z = true
le_rfl : ∀ (z : α), le z z = true
hs✝ : List (BinTree α)
idx✝ : ℕ
h'✝ : BinTree α
idx'✝ : ℕ
⊢ ∀ (x : BinTree α), x ∈ hs✝ → le (findMin le hs✝ idx✝ (h'✝, idx'✝)).fst.val x.val = true

State before:
case left
α : Type u_1
le : α → α → Bool
not_le_le : ∀ (x y : α), ¬le x y = true → le y x = true
le_trans : ∀ (x y z : α), le x y = true → le y z = true → le x z = true
le_rfl : ∀ (z : α), le z z = true
hs✝ : List (BinTree α)
idx✝ : ℕ
h'✝ : BinTree α
idx'✝ : ℕ
⊢ le (findMin le hs✝ idx✝ (h'✝, idx'✝)).fst.val h'✝.val = true

case right
α : Type u_1
le : α → α → Bool
not_le_le : ∀ (x y : α), ¬le x y = true → le y x = true
le_trans : ∀ (x y z : α), le x y = true → le y z = true → le x z = true
le_rfl : ∀ (z : α), le z z = true
hs✝ : List (BinTree α)
idx✝ : ℕ
h'✝ : BinTree α
idx'✝ : ℕ
⊢ ∀ (x : BinTree α), x ∈ hs✝ → le (findMin le hs✝ idx✝ (h'✝, idx'✝)).fst.val x.val = true
Tactic:
. apply findMin_is_minimum_head <;> assumption
State after:
case right
α : Type u_1
le : α → α → Bool
not_le_le : ∀ (x y : α), ¬le x y = true → le y x = true
le_trans : ∀ (x y z : α), le x y = true → le y z = true → le x z = true
le_rfl : ∀ (z : α), le z z = true
hs✝ : List (BinTree α)
idx✝ : ℕ
h'✝ : BinTree α
idx'✝ : ℕ
⊢ ∀ (x : BinTree α), x ∈ hs✝ → le (findMin le hs✝ idx✝ (h'✝, idx'✝)).fst.val x.val = true

State before:
case right
α : Type u_1
le : α → α → Bool
not_le_le : ∀ (x y : α), ¬le x y = true → le y x = true
le_trans : ∀ (x y z : α), le x y = true → le y z = true → le x z = true
le_rfl : ∀ (z : α), le z z = true
hs✝ : List (BinTree α)
idx✝ : ℕ
h'✝ : BinTree α
idx'✝ : ℕ
⊢ ∀ (x : BinTree α), x ∈ hs✝ → le (findMin le hs✝ idx✝ (h'✝, idx'✝)).fst.val x.val = true
Tactic:
. apply findMin_is_minimum_tail <;> try assumption
  apply findMin_is_minimum_head <;> assumption
State after:
no goals

State before:
case right.le_rfl
α : Type u_1
le : α → α → Bool
not_le_le : ∀ (x y : α), ¬le x y = true → le y x = true
le_trans : ∀ (x y z : α), le x y = true → le y z = true → le x z = true
le_rfl : ∀ (z : α), le z z = true
hs✝ : List (BinTree α)
idx✝ : ℕ
h'✝ : BinTree α
idx'✝ : ℕ
⊢ ∀ (z : α), le z z = true
Tactic:
assumption
State after:
no goals