Theorem: _private.«.lake».packages.batteries.Batteries.Data.BinomialHeap.Basic.0.Batteries.BinomialHeap.Imp.Heap.realSize_findMin
File: .lake/packages/batteries/Batteries/Data/BinomialHeap/Basic.lean

Proof steps:
state_before: α : Type u_1
k : Heap α → Heap α
n : Nat
le : α → α → Bool
res : FindMin α
s✝ : Heap α
m : Nat
hk : ∀ (s : Heap α), (k s).realSize = m + s.realSize
hres : Batteries.BinomialHeap.Imp.FindMin.HasSize res n
r : Nat
a : α
c : HeapNode α
s : Heap α
eq : n = m + (cons r a c s).realSize
⊢ Batteries.BinomialHeap.Imp.FindMin.HasSize (findMin le k (cons r a c s) res) n
state_after: α : Type u_1
k : Heap α → Heap α
n : Nat
le : α → α → Bool
res : FindMin α
s✝ : Heap α
m : Nat
hk : ∀ (s : Heap α), (k s).realSize = m + s.realSize
hres : Batteries.BinomialHeap.Imp.FindMin.HasSize res n
r : Nat
a : α
c : HeapNode α
s : Heap α
eq : n = m + (cons r a c s).realSize
⊢ Batteries.BinomialHeap.Imp.FindMin.HasSize
    (findMin le (k ∘ cons r a c) s
      (if le res.val a = true then res else { before := k, val := a, node := c, next := s }))
    n
tactic: simp [findMin]
state_before: α : Type u_1
k : Heap α → Heap α
n : Nat
le : α → α → Bool
res : FindMin α
s✝ : Heap α
m : Nat
hk : ∀ (s : Heap α), (k s).realSize = m + s.realSize
hres : Batteries.BinomialHeap.Imp.FindMin.HasSize res n
r : Nat
a : α
c : HeapNode α
s : Heap α
eq : n = m + (cons r a c s).realSize
⊢ Batteries.BinomialHeap.Imp.FindMin.HasSize
    (findMin le (k ∘ cons r a c) s
      (if le res.val a = true then res else { before := k, val := a, node := c, next := s }))
    n
state_after: α : Type u_1
k : Heap α → Heap α
n : Nat
le : α → α → Bool
res : FindMin α
s✝ : Heap α
m : Nat
hk : ∀ (s : Heap α), (k s).realSize = m + s.realSize
hres : Batteries.BinomialHeap.Imp.FindMin.HasSize res n
r : Nat
a : α
c : HeapNode α
s : Heap α
eq : n = m + (cons r a c s).realSize
⊢ Batteries.BinomialHeap.Imp.FindMin.HasSize
    (if le res.val a = true then res else { before := k, val := a, node := c, next := s }) n
tactic: refine realSize_findMin (m + c.realSize + 1)
      (by simp [hk, Nat.add_assoc]) (by simp [eq, Nat.add_assoc]) ?_
state_before: α : Type u_1
k : Heap α → Heap α
n : Nat
le : α → α → Bool
res : FindMin α
s✝ : Heap α
m : Nat
hk : ∀ (s : Heap α), (k s).realSize = m + s.realSize
hres : Batteries.BinomialHeap.Imp.FindMin.HasSize res n
r : Nat
a : α
c : HeapNode α
s : Heap α
eq : n = m + (cons r a c s).realSize
⊢ Batteries.BinomialHeap.Imp.FindMin.HasSize
    (if le res.val a = true then res else { before := k, val := a, node := c, next := s }) n
state_after: case isTrue
α : Type u_1
k : Heap α → Heap α
n : Nat
le : α → α → Bool
res : FindMin α
s✝ : Heap α
m : Nat
hk : ∀ (s : Heap α), (k s).realSize = m + s.realSize
hres : Batteries.BinomialHeap.Imp.FindMin.HasSize res n
r : Nat
a : α
c : HeapNode α
s : Heap α
eq : n = m + (cons r a c s).realSize
h✝ : le res.val a = true
⊢ Batteries.BinomialHeap.Imp.FindMin.HasSize res n

case isFalse
α : Type u_1
k : Heap α → Heap α
n : Nat
le : α → α → Bool
res : FindMin α
s✝ : Heap α
m : Nat
hk : ∀ (s : Heap α), (k s).realSize = m + s.realSize
hres : Batteries.BinomialHeap.Imp.FindMin.HasSize res n
r : Nat
a : α
c : HeapNode α
s : Heap α
eq : n = m + (cons r a c s).realSize
h✝ : ¬le res.val a = true
⊢ Batteries.BinomialHeap.Imp.FindMin.HasSize { before := k, val := a, node := c, next := s } n
tactic: split