split at dmeq
α : 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
xs : Heap α
y : α
ys : Heap α
h : HeapNodeAux α (Heap α)
hs : List (HeapNodeAux α (Heap α))
h₁ : IsHeap (Heap.heap (h :: hs))
h₂ : IsMinHeap le (Heap.heap (h :: hs))
dmeq :
  (match Heap.heap (h :: hs) with
    | Heap.heap [] => none
    | Heap.heap [h] => some (h.val, h.children)
    | Heap.heap hhs@h_1:(h :: hs) =>
      some
        ((findMin le hs 1 (h, 0)).fst.val,
          merge le (Heap.heap (List.eraseIdx hhs (findMin le hs 1 (h, 0)).snd))
            (findMin le hs 1 (h, 0)).fst.children)) =
    some (y, ys)
⊢ IsHeap ys ∧ IsMinHeap le ys
case h_1
α : 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
xs : Heap α
y : α
ys : Heap α
h : HeapNodeAux α (Heap α)
hs : List (HeapNodeAux α (Heap α))
h₁ : IsHeap (Heap.heap (h :: hs))
h₂ : IsMinHeap le (Heap.heap (h :: hs))
x✝ : Heap α
heq✝ : Heap.heap (h :: hs) = Heap.heap []
dmeq : none = some (y, ys)
⊢ IsHeap ys ∧ IsMinHeap le ys

case h_2
α : 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
xs : Heap α
y : α
ys : Heap α
h : HeapNodeAux α (Heap α)
hs : List (HeapNodeAux α (Heap α))
h₁ : IsHeap (Heap.heap (h :: hs))
h₂ : IsMinHeap le (Heap.heap (h :: hs))
x✝ : Heap α
h✝ : HeapNodeAux α (Heap α)
heq✝ : Heap.heap (h :: hs) = Heap.heap [h✝]
dmeq : some (h✝.val, h✝.children) = some (y, ys)
⊢ IsHeap ys ∧ IsMinHeap le ys

case h_3
α : 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
xs : Heap α
y : α
ys : Heap α
h : HeapNodeAux α (Heap α)
hs : List (HeapNodeAux α (Heap α))
h₁ : IsHeap (Heap.heap (h :: hs))
h₂ : IsMinHeap le (Heap.heap (h :: hs))
x✝¹ : Heap α
h✝ : HeapNodeAux α (Heap α)
hs✝ : List (HeapNodeAux α (Heap α))
x✝ : hs✝ = [] → False
heq✝ : Heap.heap (h :: hs) = Heap.heap (h✝ :: hs✝)
dmeq :
  some
      ((findMin le hs✝ 1 (h✝, 0)).fst.val,
        merge le (Heap.heap (List.eraseIdx (h✝ :: hs✝) (findMin le hs✝ 1 (h✝, 0)).snd))
          (findMin le hs✝ 1 (h✝, 0)).fst.children) =
    some (y, ys)
⊢ IsHeap ys ∧ IsMinHeap le ys