Theorem: Algdata.BinaryHeap.IsHeap.swap
Proof state before:
case node'.refine_1
α : Type u
lt : α → α → Bool
x : Subarray α
i✝ : Nat
j₁ j₂ : Fin (Subarray.size x)
i : Nat
hi : i < Subarray.size x
hx₂ : ∀ (x_1 : 2 * i + 2 < Subarray.size x), lt x[i] x[2 * i + 2] = false
a✝¹ : IsHeap lt x (2 * i + 1)
a✝ : IsHeap lt x (2 * i + 2)
hj₁ : ↑j₁ < i
hj₂ : ↑j₂ < i
IHl : IsHeap lt (Subarray.swap x j₁ j₂) (2 * i + 1)
IHr : IsHeap lt (Subarray.swap x j₁ j₂) (2 * i + 2)
hl : 2 * i + 1 < Subarray.size (Subarray.swap x j₁ j₂)
hx₁ : lt x[i] x[2 * i + 1] = false
⊢ lt x[i] (if ↑j₁ = 2 * i + 1 then x[↑j₂] else x[2 * i + 1]) = false

case node'.refine_1.hnc
α : Type u
lt : α → α → Bool
x : Subarray α
i✝ : Nat
j₁ j₂ : Fin (Subarray.size x)
i : Nat
hi : i < Subarray.size x
hx₂ : ∀ (x_1 : 2 * i + 2 < Subarray.size x), lt x[i] x[2 * i + 2] = false
a✝¹ : IsHeap lt x (2 * i + 1)
a✝ : IsHeap lt x (2 * i + 2)
hj₁ : ↑j₁ < i
hj₂ : ↑j₂ < i
IHl : IsHeap lt (Subarray.swap x j₁ j₂) (2 * i + 1)
IHr : IsHeap lt (Subarray.swap x j₁ j₂) (2 * i + 2)
hl : 2 * i + 1 < Subarray.size (Subarray.swap x j₁ j₂)
hx₁ : lt x[i] x[2 * i + 1] = false
⊢ ¬↑j₂ = 2 * i + 1

case node'.refine_1.hnc
α : Type u
lt : α → α → Bool
x : Subarray α
i✝ : Nat
j₁ j₂ : Fin (Subarray.size x)
i : Nat
hi : i < Subarray.size x
hx₂ : ∀ (x_1 : 2 * i + 2 < Subarray.size x), lt x[i] x[2 * i + 2] = false
a✝¹ : IsHeap lt x (2 * i + 1)
a✝ : IsHeap lt x (2 * i + 2)
hj₁ : ↑j₁ < i
hj₂ : ↑j₂ < i
IHl : IsHeap lt (Subarray.swap x j₁ j₂) (2 * i + 1)
IHr : IsHeap lt (Subarray.swap x j₁ j₂) (2 * i + 2)
hl : 2 * i + 1 < Subarray.size (Subarray.swap x j₁ j₂)
hx₁ : lt x[i] x[2 * i + 1] = false
⊢ ¬↑j₁ = i

case node'.refine_1.hnc
α : Type u
lt : α → α → Bool
x : Subarray α
i✝ : Nat
j₁ j₂ : Fin (Subarray.size x)
i : Nat
hi : i < Subarray.size x
hx₂ : ∀ (x_1 : 2 * i + 2 < Subarray.size x), lt x[i] x[2 * i + 2] = false
a✝¹ : IsHeap lt x (2 * i + 1)
a✝ : IsHeap lt x (2 * i + 2)
hj₁ : ↑j₁ < i
hj₂ : ↑j₂ < i
IHl : IsHeap lt (Subarray.swap x j₁ j₂) (2 * i + 1)
IHr : IsHeap lt (Subarray.swap x j₁ j₂) (2 * i + 2)
hl : 2 * i + 1 < Subarray.size (Subarray.swap x j₁ j₂)
hx₁ : lt x[i] x[2 * i + 1] = false
⊢ ¬↑j₂ = i
Tactic:
rewrite [if_neg]
Proof state after:
case node'.refine_1
α : Type u
lt : α → α → Bool
x : Subarray α
i✝ : Nat
j₁ j₂ : Fin (Subarray.size x)
i : Nat
hi : i < Subarray.size x
hx₂ : ∀ (x_1 : 2 * i + 2 < Subarray.size x), lt x[i] x[2 * i + 2] = false
a✝¹ : IsHeap lt x (2 * i + 1)
a✝ : IsHeap lt x (2 * i + 2)
hj₁ : ↑j₁ < i
hj₂ : ↑j₂ < i
IHl : IsHeap lt (Subarray.swap x j₁ j₂) (2 * i + 1)
IHr : IsHeap lt (Subarray.swap x j₁ j₂) (2 * i + 2)
hl : 2 * i + 1 < Subarray.size (Subarray.swap x j₁ j₂)
hx₁ : lt x[i] x[2 * i + 1] = false
⊢ lt x[i] x[2 * i + 1] = false

case node'.refine_1.hnc
α : Type u
lt : α → α → Bool
x : Subarray α
i✝ : Nat
j₁ j₂ : Fin (Subarray.size x)
i : Nat
hi : i < Subarray.size x
hx₂ : ∀ (x_1 : 2 * i + 2 < Subarray.size x), lt x[i] x[2 * i + 2] = false
a✝¹ : IsHeap lt x (2 * i + 1)
a✝ : IsHeap lt x (2 * i + 2)
hj₁ : ↑j₁ < i
hj₂ : ↑j₂ < i
IHl : IsHeap lt (Subarray.swap x j₁ j₂) (2 * i + 1)
IHr : IsHeap lt (Subarray.swap x j₁ j₂) (2 * i + 2)
hl : 2 * i + 1 < Subarray.size (Subarray.swap x j₁ j₂)
hx₁ : lt x[i] x[2 * i + 1] = false
⊢ ¬↑j₁ = 2 * i + 1

case node'.refine_1.hnc
α : Type u
lt : α → α → Bool
x : Subarray α
i✝ : Nat
j₁ j₂ : Fin (Subarray.size x)
i : Nat
hi : i < Subarray.size x
hx₂ : ∀ (x_1 : 2 * i + 2 < Subarray.size x), lt x[i] x[2 * i + 2] = false
a✝¹ : IsHeap lt x (2 * i + 1)
a✝ : IsHeap lt x (2 * i + 2)
hj₁ : ↑j₁ < i
hj₂ : ↑j₂ < i
IHl : IsHeap lt (Subarray.swap x j₁ j₂) (2 * i + 1)
IHr : IsHeap lt (Subarray.swap x j₁ j₂) (2 * i + 2)
hl : 2 * i + 1 < Subarray.size (Subarray.swap x j₁ j₂)
hx₁ : lt x[i] x[2 * i + 1] = false
⊢ ¬↑j₂ = 2 * i + 1

case node'.refine_1.hnc
α : Type u
lt : α → α → Bool
x : Subarray α
i✝ : Nat
j₁ j₂ : Fin (Subarray.size x)
i : Nat
hi : i < Subarray.size x
hx₂ : ∀ (x_1 : 2 * i + 2 < Subarray.size x), lt x[i] x[2 * i + 2] = false
a✝¹ : IsHeap lt x (2 * i + 1)
a✝ : IsHeap lt x (2 * i + 2)
hj₁ : ↑j₁ < i
hj₂ : ↑j₂ < i
IHl : IsHeap lt (Subarray.swap x j₁ j₂) (2 * i + 1)
IHr : IsHeap lt (Subarray.swap x j₁ j₂) (2 * i + 2)
hl : 2 * i + 1 < Subarray.size (Subarray.swap x j₁ j₂)
hx₁ : lt x[i] x[2 * i + 1] = false
⊢ ¬↑j₁ = i

case node'.refine_1.hnc
α : Type u
lt : α → α → Bool
x : Subarray α
i✝ : Nat
j₁ j₂ : Fin (Subarray.size x)
i : Nat
hi : i < Subarray.size x
hx₂ : ∀ (x_1 : 2 * i + 2 < Subarray.size x), lt x[i] x[2 * i + 2] = false
a✝¹ : IsHeap lt x (2 * i + 1)
a✝ : IsHeap lt x (2 * i + 2)
hj₁ : ↑j₁ < i
hj₂ : ↑j₂ < i
IHl : IsHeap lt (Subarray.swap x j₁ j₂) (2 * i + 1)
IHr : IsHeap lt (Subarray.swap x j₁ j₂) (2 * i + 2)
hl : 2 * i + 1 < Subarray.size (Subarray.swap x j₁ j₂)
hx₁ : lt x[i] x[2 * i + 1] = false
⊢ ¬↑j₂ = i