| h0 ⊆ h, h1 ⊆ h, tr(r, t)(h0), tr(r, t0)(h1) ⊦ t0 = t |
t0 ≠ t, h0 ⊆ h, h1 ⊆ h, tr(r, t0)(h1), tr(r, t)(h0) ⊦
| t0 ≠ t, h0 ⊆ h, h1 ⊆ h, tr(r, t0)(h1), tr(r, t)(h0) ⊦ |
t0 ≠ branch(t1, a, t2), h0 ⊆ h, h1 ⊆ h, tr(r, branch(t1, a, t2))(h0), tr(r, t0)(h1), ∀ t0, h0, h, h1, r. ¬(t0 ≠ t2 ∧ h0 ⊆ h ∧ h1 ⊆ h ∧ tr(r, t0)(h1) ∧ tr(r, t2)(h0)), ∀ t0, h0, h, h1, r. ¬(t0 ≠ t1 ∧ h0 ⊆ h ∧ h1 ⊆ h ∧ tr(r, t0)(h1) ∧ tr(r, t1)(h0)) ⊦
Used simplifier rules: tr-base: ⊦ tr(r, leaf) = (emp ∧ ⌜r = null⌝ ); tr-null: ⊦ tr(null, t) = (emp ∧ ⌜t = leaf⌝ ); Tree[A] freely generated by leaf, branch; ⊦ (hP0 ∧ hP1)(h) ↔ hP0(h) ∧ hP1(h); (s) ⊦ emp(h) ↔ h = ∅; (s) ⊦ ⌜bv⌝ (h) ↔ bv; (s) ⊦ ⌜false⌝ = false; (s) ⊦ (false ∧ hP) = false; (s) and-ass: ⊦ ((hP0 ∧ hP1) ∧ hP2) = (hP0 ∧ hP1 ∧ hP2); from specification heap-sep and-com: ⊦ (hP0 ∧ hP1) = (hP1 ∧ hP0); from specification heap-sep ⊦ ¬ false(h); (s)
| t0 ≠ branch(t1, a, t2), h0 ⊆ h, h1 ⊆ h, tr(r, branch(t1, a, t2))(h0), tr(r, t0)(h1), ∀ t0, h0, h, h1, r. ¬(t0 ≠ t2 ∧ h0 ⊆ h ∧ h1 ⊆ h ∧ tr(r, t0)(h1) ∧ tr(r, t2)(h0)), ∀ t0, h0, h, h1, r. ¬(t0 ≠ t1 ∧ h0 ⊆ h ∧ h1 ⊆ h ∧ tr(r, t0)(h1) ∧ tr(r, t1)(h0)) ⊦ |
t0 ≠ branch(t1, a, t2), h0 ⊆ h, h1 ⊆ h, tr(r, t0)(h1), tr(r, branch(t1, a, t2))(h0), ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2), ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2) ⊦
| t0 ≠ branch(t1, a, t2), h0 ⊆ h, h1 ⊆ h, tr(r, t0)(h1), tr(r, branch(t1, a, t2))(h0), ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2), ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2) ⊦ |
t0 = branch(t3, a0, t4), t0 ≠ branch(t1, a, t2), h0 ⊆ h, h1 ⊆ h, tr(r, branch(t1, a, t2))(h0), tr(r, t0)(h1), ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2), ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2) ⊦
Used simplifier rules: tr-base: ⊦ tr(r, leaf) = (emp ∧ ⌜r = null⌝ ); tr-null: ⊦ tr(null, t) = (emp ∧ ⌜t = leaf⌝ ); Tree[A] freely generated by leaf, branch; ⊦ (hP0 ∧ hP1)(h) ↔ hP0(h) ∧ hP1(h); (s) ⊦ emp(h) ↔ h = ∅; (s) ⊦ ⌜bv⌝ (h) ↔ bv; (s) ⊦ ∅ ⊆ h; (s) ⊦ leaf ≠ branch(t, val, t0); (s) ⊦ ⌜false⌝ = false; (s) ⊦ (false ∧ hP) = false; (s) and-ass: ⊦ ((hP0 ∧ hP1) ∧ hP2) = (hP0 ∧ hP1 ∧ hP2); from specification heap-sep and-com: ⊦ (hP0 ∧ hP1) = (hP1 ∧ hP0); from specification heap-sep ⊦ ¬ false(h); (s)
| t0 = branch(t3, a0, t4), t0 ≠ branch(t1, a, t2), h0 ⊆ h, h1 ⊆ h, tr(r, branch(t1, a, t2))(h0), tr(r, t0)(h1), ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2), ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2) ⊦ |
branch(t3, a0, t4) ≠ branch(t1, a, t2), h0 ⊆ h, h1 ⊆ h, tr(r, branch(t3, a0, t4))(h1), tr(r, branch(t1, a, t2))(h0), ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2), ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2) ⊦
| branch(t3, a0, t4) ≠ branch(t1, a, t2), h0 ⊆ h, h1 ⊆ h, tr(r, branch(t3, a0, t4))(h1), tr(r, branch(t1, a, t2))(h0), ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2), ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2) ⊦ |
⊦ branch(t, val, t0) = branch(t1, val0, t2) ↔ t = t1 ∧ val = val0 ∧ t0 = t2
h0 ⊆ h, h1 ⊆ h, tr(r, branch(t1, a, t2))(h0), tr(r, branch(t3, a0, t4))(h1), t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2), ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2) ⊦
Used terms: a0, t4, a, t2, t1, t3
| ⊦ branch(t, val, t0) = branch(t1, val0, t2) ↔ t = t1 ∧ val = val0 ∧ t0 = t2 |
| h0 ⊆ h, h1 ⊆ h, tr(r, branch(t1, a, t2))(h0), tr(r, branch(t3, a0, t4))(h1), t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2), ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2) ⊦ |
⊦ tr(r, branch(t0, a, t1)) = _∃(λ r0, r1. r => mknode(r0, a, r1) * tr(r0, t0) * tr(r1, t1))
(_∃(λ r0, r1. r => mknode(r0, a, r1) * tr(r0, t1) * tr(r1, t2)))(h0), h0 ⊆ h, h1 ⊆ h, tr(r, branch(t3, a0, t4))(h1), t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2), ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2) ⊦
Used terms: r, t1, a, t2
| ⊦ tr(r, branch(t0, a, t1)) = _∃(λ r0, r1. r => mknode(r0, a, r1) * tr(r0, t0) * tr(r1, t1)) |
| (_∃(λ r0, r1. r => mknode(r0, a, r1) * tr(r0, t1) * tr(r1, t2)))(h0), h0 ⊆ h, h1 ⊆ h, tr(r, branch(t3, a0, t4))(h1), t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2), ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2) ⊦ |
h0 ⊆ h, h1 ⊆ h, (r => mknode(r0, a, r1) * tr(r0, t1) * tr(r1, t2))(h0), tr(r, branch(t3, a0, t4))(h1), t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2), ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2) ⊦
Used simplifier rules: ⊦ (_∃ bcP)(h) ↔ (∃ b, c. bcP(b, c)(h)); (s)
| h0 ⊆ h, h1 ⊆ h, (r => mknode(r0, a, r1) * tr(r0, t1) * tr(r1, t2))(h0), tr(r, branch(t3, a0, t4))(h1), t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2), ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2) ⊦ |
⊦ tr(r, branch(t0, a, t1)) = _∃(λ r0, r1. r => mknode(r0, a, r1) * tr(r0, t0) * tr(r1, t1))
(_∃(λ r0, r1. r => mknode(r0, a0, r1) * tr(r0, t3) * tr(r1, t4)))(h1), h0 ⊆ h, h1 ⊆ h, (r => mknode(r0, a, r1) * tr(r0, t1) * tr(r1, t2))(h0), t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2), ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2) ⊦
Used terms: r, t3, a0, t4
| ⊦ tr(r, branch(t0, a, t1)) = _∃(λ r0, r1. r => mknode(r0, a, r1) * tr(r0, t0) * tr(r1, t1)) |
| (_∃(λ r0, r1. r => mknode(r0, a0, r1) * tr(r0, t3) * tr(r1, t4)))(h1), h0 ⊆ h, h1 ⊆ h, (r => mknode(r0, a, r1) * tr(r0, t1) * tr(r1, t2))(h0), t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2), ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2) ⊦ |
h0 ⊆ h, h1 ⊆ h, (r => mknode(r0, a, r1) * tr(r0, t1) * tr(r1, t2))(h0), (r => mknode(r2, a0, r3) * tr(r2, t3) * tr(r3, t4))(h1), t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2), ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2) ⊦
Used simplifier rules: ⊦ (_∃ bcP)(h) ↔ (∃ b, c. bcP(b, c)(h)); (s)
| h0 ⊆ h, h1 ⊆ h, (r => mknode(r0, a, r1) * tr(r0, t1) * tr(r1, t2))(h0), (r => mknode(r2, a0, r3) * tr(r2, t3) * tr(r3, t4))(h1), t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2), ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2) ⊦ |
⊦ (hP0 * hP1)(h) ↔ (∃ h0, h1. h0 ⊥ h1 ∧ h = h0 ∪ h1 ∧ hP0(h0) ∧ hP1(h1))
h0 ⊆ h, h1 ⊆ h, (r => mknode(r2, a0, r3) * tr(r2, t3) * tr(r3, t4))(h1), ∃ h1, h2. h1 ⊥ h2 ∧ h0 = h1 ∪ h2 ∧ tr(r1, t2)(h1) ∧ (r => mknode(r0, a, r1) * tr(r0, t1))(h2), t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2), ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2) ⊦
Used simplifier rules: sep-ass: ⊦ (hP0 * hP1) * hP2 = hP0 * hP1 * hP2; from specification heap-sep sep-com: ⊦ hP0 * hP1 = hP1 * hP0; from specification heap-sep Used terms: h0, tr(r1, t2), r => mknode(r0, a, r1) * tr(r0, t1)
| ⊦ (hP0 * hP1)(h) ↔ (∃ h0, h1. h0 ⊥ h1 ∧ h = h0 ∪ h1 ∧ hP0(h0) ∧ hP1(h1)) |
| h0 ⊆ h, h1 ⊆ h, (r => mknode(r2, a0, r3) * tr(r2, t3) * tr(r3, t4))(h1), ∃ h1, h2. h1 ⊥ h2 ∧ h0 = h1 ∪ h2 ∧ tr(r1, t2)(h1) ∧ (r => mknode(r0, a, r1) * tr(r0, t1))(h2), t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2), ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2) ⊦ |
h1 ⊆ h, h2 ⊥ h3, h2 ⊆ h, h3 ⊆ h, (r => mknode(r0, a, r1) * tr(r0, t1))(h3), (r => mknode(r2, a0, r3) * tr(r2, t3) * tr(r3, t4))(h1), tr(r1, t2)(h2), t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2), ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2) ⊦
Used simplifier rules: ⊦ h0 ⊥ h1 → (h0 ∪ h1 ⊆ h ↔ h0 ⊆ h ∧ h1 ⊆ h); (ws)
| h1 ⊆ h, h2 ⊥ h3, h2 ⊆ h, h3 ⊆ h, (r => mknode(r0, a, r1) * tr(r0, t1))(h3), (r => mknode(r2, a0, r3) * tr(r2, t3) * tr(r3, t4))(h1), tr(r1, t2)(h2), t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2), ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2) ⊦ |
⊦ (hP0 * hP1)(h) ↔ (∃ h0, h1. h0 ⊥ h1 ∧ h = h0 ∪ h1 ∧ hP0(h0) ∧ hP1(h1))
h1 ⊆ h, h2 ⊆ h, h2 ⊥ h3, h3 ⊆ h, (r => mknode(r0, a, r1) * tr(r0, t1))(h3), tr(r1, t2)(h2), ∃ h0, h2. h0 ⊥ h2 ∧ h1 = h0 ∪ h2 ∧ tr(r3, t4)(h0) ∧ (r => mknode(r2, a0, r3) * tr(r2, t3))(h2), t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2), ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2) ⊦
Used simplifier rules: sep-ass: ⊦ (hP0 * hP1) * hP2 = hP0 * hP1 * hP2; from specification heap-sep sep-com: ⊦ hP0 * hP1 = hP1 * hP0; from specification heap-sep Used terms: h1, tr(r3, t4), r => mknode(r2, a0, r3) * tr(r2, t3)
| ⊦ (hP0 * hP1)(h) ↔ (∃ h0, h1. h0 ⊥ h1 ∧ h = h0 ∪ h1 ∧ hP0(h0) ∧ hP1(h1)) |
| h1 ⊆ h, h2 ⊆ h, h2 ⊥ h3, h3 ⊆ h, (r => mknode(r0, a, r1) * tr(r0, t1))(h3), tr(r1, t2)(h2), ∃ h0, h2. h0 ⊥ h2 ∧ h1 = h0 ∪ h2 ∧ tr(r3, t4)(h0) ∧ (r => mknode(r2, a0, r3) * tr(r2, t3))(h2), t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2), ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2) ⊦ |
h0 ⊥ h4, h0 ⊆ h, h2 ⊥ h3, h2 ⊆ h, h3 ⊆ h, h4 ⊆ h, (r => mknode(r2, a0, r3) * tr(r2, t3))(h4), (r => mknode(r0, a, r1) * tr(r0, t1))(h3), tr(r3, t4)(h0), tr(r1, t2)(h2), t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2), ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2) ⊦
Used simplifier rules: ⊦ h0 ⊥ h1 → (h0 ∪ h1 ⊆ h ↔ h0 ⊆ h ∧ h1 ⊆ h); (ws)
| h0 ⊥ h4, h0 ⊆ h, h2 ⊥ h3, h2 ⊆ h, h3 ⊆ h, h4 ⊆ h, (r => mknode(r2, a0, r3) * tr(r2, t3))(h4), (r => mknode(r0, a, r1) * tr(r0, t1))(h3), tr(r3, t4)(h0), tr(r1, t2)(h2), t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2), ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2) ⊦ |
⊦ (hP0 * hP1)(h) ↔ (∃ h0, h1. h0 ⊥ h1 ∧ h = h0 ∪ h1 ∧ hP0(h0) ∧ hP1(h1))
h0 ⊆ h, h0 ⊥ h4, h2 ⊆ h, h2 ⊥ h3, h3 ⊆ h, h4 ⊆ h, (r => mknode(r2, a0, r3) * tr(r2, t3))(h4), tr(r1, t2)(h2), tr(r3, t4)(h0), ∃ h0, h1. h0 ⊥ h1 ∧ h3 = h0 ∪ h1 ∧ tr(r0, t1)(h0) ∧ (r => mknode(r0, a, r1))(h1), t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2), ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2) ⊦
Used terms: h3, tr(r0, t1), r => mknode(r0, a, r1)
| ⊦ (hP0 * hP1)(h) ↔ (∃ h0, h1. h0 ⊥ h1 ∧ h = h0 ∪ h1 ∧ hP0(h0) ∧ hP1(h1)) |
| h0 ⊆ h, h0 ⊥ h4, h2 ⊆ h, h2 ⊥ h3, h3 ⊆ h, h4 ⊆ h, (r => mknode(r2, a0, r3) * tr(r2, t3))(h4), tr(r1, t2)(h2), tr(r3, t4)(h0), ∃ h0, h1. h0 ⊥ h1 ∧ h3 = h0 ∪ h1 ∧ tr(r0, t1)(h0) ∧ (r => mknode(r0, a, r1))(h1), t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2), ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2) ⊦ |
h0 ⊥ h4, h0 ⊆ h, h1 ⊥ h5, h1 ⊆ h, h2 ⊆ h, h2 ⊥ h1, h2 ⊥ h5, h4 ⊆ h, h5 ⊆ h, (r => mknode(r0, a, r1))(h5), (r => mknode(r2, a0, r3) * tr(r2, t3))(h4), tr(r0, t1)(h1), tr(r3, t4)(h0), tr(r1, t2)(h2), t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2), ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2) ⊦
Used simplifier rules: h1 ⊥ h ⊦ h0 ⊥ h1 ∪ h ↔ h0 ⊥ h1 ∧ h0 ⊥ h; (ws) ⊦ h0 ⊥ h1 → (h0 ∪ h1 ⊆ h ↔ h0 ⊆ h ∧ h1 ⊆ h); (ws)
| h0 ⊥ h4, h0 ⊆ h, h1 ⊥ h5, h1 ⊆ h, h2 ⊆ h, h2 ⊥ h1, h2 ⊥ h5, h4 ⊆ h, h5 ⊆ h, (r => mknode(r0, a, r1))(h5), (r => mknode(r2, a0, r3) * tr(r2, t3))(h4), tr(r0, t1)(h1), tr(r3, t4)(h0), tr(r1, t2)(h2), t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2), ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2) ⊦ |
⊦ (hP0 * hP1)(h) ↔ (∃ h0, h1. h0 ⊥ h1 ∧ h = h0 ∪ h1 ∧ hP0(h0) ∧ hP1(h1))
h0 ⊆ h, h0 ⊥ h4, h1 ⊆ h, h1 ⊥ h5, h2 ⊥ h5, h2 ⊥ h1, h2 ⊆ h, h4 ⊆ h, h5 ⊆ h, (r => mknode(r0, a, r1))(h5), tr(r1, t2)(h2), tr(r3, t4)(h0), tr(r0, t1)(h1), ∃ h0, h1. h0 ⊥ h1 ∧ h4 = h0 ∪ h1 ∧ tr(r2, t3)(h0) ∧ (r => mknode(r2, a0, r3))(h1), t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2), ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2) ⊦
Used terms: h4, tr(r2, t3), r => mknode(r2, a0, r3)
| ⊦ (hP0 * hP1)(h) ↔ (∃ h0, h1. h0 ⊥ h1 ∧ h = h0 ∪ h1 ∧ hP0(h0) ∧ hP1(h1)) |
| h0 ⊆ h, h0 ⊥ h4, h1 ⊆ h, h1 ⊥ h5, h2 ⊥ h5, h2 ⊥ h1, h2 ⊆ h, h4 ⊆ h, h5 ⊆ h, (r => mknode(r0, a, r1))(h5), tr(r1, t2)(h2), tr(r3, t4)(h0), tr(r0, t1)(h1), ∃ h0, h1. h0 ⊥ h1 ∧ h4 = h0 ∪ h1 ∧ tr(r2, t3)(h0) ∧ (r => mknode(r2, a0, r3))(h1), t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2), ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2) ⊦ |
h0 ⊆ h, h0 ⊥ h3, h0 ⊥ h6, h1 ⊥ h5, h1 ⊆ h, h2 ⊆ h, h2 ⊥ h1, h2 ⊥ h5, h3 ⊥ h6, h3 ⊆ h, h5 ⊆ h, h6 ⊆ h, (r => mknode(r2, a0, r3))(h6), (r => mknode(r0, a, r1))(h5), tr(r2, t3)(h3), tr(r0, t1)(h1), tr(r3, t4)(h0), tr(r1, t2)(h2), t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2), ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2) ⊦
Used simplifier rules: h1 ⊥ h ⊦ h0 ⊥ h1 ∪ h ↔ h0 ⊥ h1 ∧ h0 ⊥ h; (ws) ⊦ h0 ⊥ h1 → (h0 ∪ h1 ⊆ h ↔ h0 ⊆ h ∧ h1 ⊆ h); (ws)
| h0 ⊆ h, h0 ⊥ h3, h0 ⊥ h6, h1 ⊥ h5, h1 ⊆ h, h2 ⊆ h, h2 ⊥ h1, h2 ⊥ h5, h3 ⊥ h6, h3 ⊆ h, h5 ⊆ h, h6 ⊆ h, (r => mknode(r2, a0, r3))(h6), (r => mknode(r0, a, r1))(h5), tr(r2, t3)(h3), tr(r0, t1)(h1), tr(r3, t4)(h0), tr(r1, t2)(h2), t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2), ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2) ⊦ |
⊦ (r => o)(h) ↔ h = (∅ ++ r)(r := o) ∧ r ≠ null
h5 = (∅ ++ r)(r := mknode(r0, a, r1)), r ≠ null, h0 ⊥ h6, h0 ⊥ h3, h0 ⊆ h, h1 ⊆ h, h1 ⊥ h5, h2 ⊥ h5, h2 ⊥ h1, h2 ⊆ h, h3 ⊆ h, h3 ⊥ h6, h5 ⊆ h, h6 ⊆ h, (r => mknode(r2, a0, r3))(h6), tr(r1, t2)(h2), tr(r3, t4)(h0), tr(r0, t1)(h1), tr(r2, t3)(h3), t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2), ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2) ⊦
Used terms: r, mknode(r0, a, r1), h5
| ⊦ (r => o)(h) ↔ h = (∅ ++ r)(r := o) ∧ r ≠ null |
| h5 = (∅ ++ r)(r := mknode(r0, a, r1)), r ≠ null, h0 ⊥ h6, h0 ⊥ h3, h0 ⊆ h, h1 ⊆ h, h1 ⊥ h5, h2 ⊥ h5, h2 ⊥ h1, h2 ⊆ h, h3 ⊆ h, h3 ⊥ h6, h5 ⊆ h, h6 ⊆ h, (r => mknode(r2, a0, r3))(h6), tr(r1, t2)(h2), tr(r3, t4)(h0), tr(r0, t1)(h1), tr(r2, t3)(h3), t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2), ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2) ⊦ |
r ≠ null, h0 ⊆ h, h0 ⊥ h3, h0 ⊥ h6, h1 ⊆ h, h2 ⊆ h, h2 ⊥ h1, h3 ⊥ h6, h3 ⊆ h, h6 ⊆ h, (r => mknode(r2, a0, r3))(h6), tr(r2, t3)(h3), tr(r0, t1)(h1), tr(r3, t4)(h0), tr(r1, t2)(h2), (∅ ++ r)(r := mknode(r0, a, r1)) ⊆ h, ¬ r ∈ h2, ¬ r ∈ h1, t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2), ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2) ⊦
Used simplifier rules: ⊦ h ⊥ ∅; (s) r ≠ null, ¬ r ∈ h1 ⊦ h0 ⊥ (h1 ++ r)(r := o) ↔ h0 ⊥ h1 ∧ ¬ r ∈ h0; (s) ⊦ ¬ r ∈ ∅; (s)
| r ≠ null, h0 ⊆ h, h0 ⊥ h3, h0 ⊥ h6, h1 ⊆ h, h2 ⊆ h, h2 ⊥ h1, h3 ⊥ h6, h3 ⊆ h, h6 ⊆ h, (r => mknode(r2, a0, r3))(h6), tr(r2, t3)(h3), tr(r0, t1)(h1), tr(r3, t4)(h0), tr(r1, t2)(h2), (∅ ++ r)(r := mknode(r0, a, r1)) ⊆ h, ¬ r ∈ h2, ¬ r ∈ h1, t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2), ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2) ⊦ |
⊦ (r => o)(h) ↔ h = (∅ ++ r)(r := o) ∧ r ≠ null
h6 = (∅ ++ r)(r := mknode(r2, a0, r3)), r ≠ null, h0 ⊥ h6, h0 ⊥ h3, h0 ⊆ h, h1 ⊆ h, h2 ⊥ h1, h2 ⊆ h, h3 ⊆ h, h3 ⊥ h6, h6 ⊆ h, tr(r1, t2)(h2), tr(r3, t4)(h0), tr(r0, t1)(h1), tr(r2, t3)(h3), (∅ ++ r)(r := mknode(r0, a, r1)) ⊆ h, ¬ r ∈ h2, ¬ r ∈ h1, t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2), ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2) ⊦
Used terms: r, mknode(r2, a0, r3), h6
| ⊦ (r => o)(h) ↔ h = (∅ ++ r)(r := o) ∧ r ≠ null |
| h6 = (∅ ++ r)(r := mknode(r2, a0, r3)), r ≠ null, h0 ⊥ h6, h0 ⊥ h3, h0 ⊆ h, h1 ⊆ h, h2 ⊥ h1, h2 ⊆ h, h3 ⊆ h, h3 ⊥ h6, h6 ⊆ h, tr(r1, t2)(h2), tr(r3, t4)(h0), tr(r0, t1)(h1), tr(r2, t3)(h3), (∅ ++ r)(r := mknode(r0, a, r1)) ⊆ h, ¬ r ∈ h2, ¬ r ∈ h1, t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2), ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2) ⊦ |
r ≠ null, h0 ⊆ h, h0 ⊥ h3, h1 ⊆ h, h2 ⊆ h, h2 ⊥ h1, h3 ⊆ h, tr(r2, t3)(h3), tr(r0, t1)(h1), tr(r3, t4)(h0), tr(r1, t2)(h2), (∅ ++ r)(r := mknode(r0, a, r1)) ⊆ h, (∅ ++ r)(r := mknode(r2, a0, r3)) ⊆ h, ¬ r ∈ h2, ¬ r ∈ h1, ¬ r ∈ h3, ¬ r ∈ h0, t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2), ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2) ⊦
Used simplifier rules: ⊦ h ⊥ ∅; (s) r ≠ null, ¬ r ∈ h1 ⊦ h0 ⊥ (h1 ++ r)(r := o) ↔ h0 ⊥ h1 ∧ ¬ r ∈ h0; (s) ⊦ ¬ r ∈ ∅; (s)
| r ≠ null, h0 ⊆ h, h0 ⊥ h3, h1 ⊆ h, h2 ⊆ h, h2 ⊥ h1, h3 ⊆ h, tr(r2, t3)(h3), tr(r0, t1)(h1), tr(r3, t4)(h0), tr(r1, t2)(h2), (∅ ++ r)(r := mknode(r0, a, r1)) ⊆ h, (∅ ++ r)(r := mknode(r2, a0, r3)) ⊆ h, ¬ r ∈ h2, ¬ r ∈ h1, ¬ r ∈ h3, ¬ r ∈ h0, t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2), ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2) ⊦ |
a = a0, r0 = r2, r1 = r3, r ≠ null, h0 ⊥ h3, h0 ⊆ h, h1 ⊆ h, h2 ⊥ h1, h2 ⊆ h, h3 ⊆ h, tr(r1, t2)(h2), tr(r3, t4)(h0), tr(r0, t1)(h1), tr(r2, t3)(h3), (∅ ++ r)(r := mknode(r2, a0, r3)) ⊆ h, (∅ ++ r)(r := mknode(r0, a, r1)) ⊆ h, ¬ r ∈ h2, ¬ r ∈ h1, ¬ r ∈ h3, ¬ r ∈ h0, t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2), ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2) ⊦
r ≠ null, h0 ⊥ h3, h0 ⊆ h, h1 ⊆ h, h2 ⊥ h1, h2 ⊆ h, h3 ⊆ h, tr(r1, t2)(h2), tr(r3, t4)(h0), tr(r0, t1)(h1), tr(r2, t3)(h3), (∅ ++ r)(r := mknode(r2, a0, r3)) ⊆ h, (∅ ++ r)(r := mknode(r0, a, r1)) ⊆ h, ¬ r ∈ h2, ¬ r ∈ h1, ¬ r ∈ h3, ¬ r ∈ h0, t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2), ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2) ⊦ r0 = r2 ∧ r1 = r3 ∧ a = a0
Used formulas: r0 = r2 ∧ r1 = r3 ∧ a = a0
| a = a0, r0 = r2, r1 = r3, r ≠ null, h0 ⊥ h3, h0 ⊆ h, h1 ⊆ h, h2 ⊥ h1, h2 ⊆ h, h3 ⊆ h, tr(r1, t2)(h2), tr(r3, t4)(h0), tr(r0, t1)(h1), tr(r2, t3)(h3), (∅ ++ r)(r := mknode(r2, a0, r3)) ⊆ h, (∅ ++ r)(r := mknode(r0, a, r1)) ⊆ h, ¬ r ∈ h2, ¬ r ∈ h1, ¬ r ∈ h3, ¬ r ∈ h0, t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2), ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2) ⊦ |
r ≠ null, h0 ⊆ h, h0 ⊥ h3, h1 ⊆ h, h2 ⊆ h, h2 ⊥ h1, h3 ⊆ h, tr(r2, t3)(h3), tr(r2, t1)(h1), tr(r3, t4)(h0), tr(r3, t2)(h2), (∅ ++ r)(r := mknode(r2, a0, r3)) ⊆ h, ¬ r ∈ h2, ¬ r ∈ h1, ¬ r ∈ h3, ¬ r ∈ h0, t3 ≠ t1 ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2), ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2) ⊦
| r ≠ null, h0 ⊆ h, h0 ⊥ h3, h1 ⊆ h, h2 ⊆ h, h2 ⊥ h1, h3 ⊆ h, tr(r2, t3)(h3), tr(r2, t1)(h1), tr(r3, t4)(h0), tr(r3, t2)(h2), (∅ ++ r)(r := mknode(r2, a0, r3)) ⊆ h, ¬ r ∈ h2, ¬ r ∈ h1, ¬ r ∈ h3, ¬ r ∈ h0, t3 ≠ t1 ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2), ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2) ⊦ |
r ≠ null, t3 ≠ t1, h0 ⊥ h3, h0 ⊆ h, h1 ⊆ h, h2 ⊥ h1, h2 ⊆ h, h3 ⊆ h, tr(r3, t2)(h2), tr(r3, t4)(h0), tr(r2, t1)(h1), tr(r2, t3)(h3), (∅ ++ r)(r := mknode(r2, a0, r3)) ⊆ h, ¬ r ∈ h2, ¬ r ∈ h1, ¬ r ∈ h3, ¬ r ∈ h0, ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2), ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2) ⊦
r ≠ null, t4 ≠ t2, h0 ⊥ h3, h0 ⊆ h, h1 ⊆ h, h2 ⊥ h1, h2 ⊆ h, h3 ⊆ h, tr(r3, t2)(h2), tr(r3, t4)(h0), tr(r2, t1)(h1), tr(r2, t3)(h3), (∅ ++ r)(r := mknode(r2, a0, r3)) ⊆ h, ¬ r ∈ h2, ¬ r ∈ h1, ¬ r ∈ h3, ¬ r ∈ h0, ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2), ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2) ⊦
| r ≠ null, t3 ≠ t1, h0 ⊥ h3, h0 ⊆ h, h1 ⊆ h, h2 ⊥ h1, h2 ⊆ h, h3 ⊆ h, tr(r3, t2)(h2), tr(r3, t4)(h0), tr(r2, t1)(h1), tr(r2, t3)(h3), (∅ ++ r)(r := mknode(r2, a0, r3)) ⊆ h, ¬ r ∈ h2, ¬ r ∈ h1, ¬ r ∈ h3, ¬ r ∈ h0, ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2), ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2) ⊦ |
Used terms: t3, h1, h, h3, r2
| r ≠ null, t4 ≠ t2, h0 ⊥ h3, h0 ⊆ h, h1 ⊆ h, h2 ⊥ h1, h2 ⊆ h, h3 ⊆ h, tr(r3, t2)(h2), tr(r3, t4)(h0), tr(r2, t1)(h1), tr(r2, t3)(h3), (∅ ++ r)(r := mknode(r2, a0, r3)) ⊆ h, ¬ r ∈ h2, ¬ r ∈ h1, ¬ r ∈ h3, ¬ r ∈ h0, ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2), ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2) ⊦ |
Used terms: t4, h2, h, h0, r3
| r ≠ null, h0 ⊥ h3, h0 ⊆ h, h1 ⊆ h, h2 ⊥ h1, h2 ⊆ h, h3 ⊆ h, tr(r1, t2)(h2), tr(r3, t4)(h0), tr(r0, t1)(h1), tr(r2, t3)(h3), (∅ ++ r)(r := mknode(r2, a0, r3)) ⊆ h, (∅ ++ r)(r := mknode(r0, a, r1)) ⊆ h, ¬ r ∈ h2, ¬ r ∈ h1, ¬ r ∈ h3, ¬ r ∈ h0, t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2), ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2) ⊦ r0 = r2 ∧ r1 = r3 ∧ a = a0 |
⊦ h0 ⊆ h1 ↔ (∀ r. (r ∈ h0 → r ∈ h1) ∧ (r ∈ h0 → h0(r) = h1(r)))
r ≠ null, h0 ⊆ h, h0 ⊥ h3, h1 ⊆ h, h2 ⊆ h, h2 ⊥ h1, h3 ⊆ h, tr(r2, t3)(h3), tr(r0, t1)(h1), tr(r3, t4)(h0), tr(r1, t2)(h2), (∅ ++ r)(r := mknode(r0, a, r1)) ⊆ h, ¬ r ∈ h2, ¬ r ∈ h1, ¬ r ∈ h3, ¬ r ∈ h0, t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ r0. (r0 ∈ (∅ ++ r)(r := mknode(r2, a0, r3)) → r0 ∈ h) ∧ (r0 ∈ (∅ ++ r)(r := mknode(r2, a0, r3)) → (∅ ++ r)(r := mknode(r2, a0, r3))(r0) = h(r0)), ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2), ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2) ⊦ r0 = r2 ∧ r1 = r3 ∧ a = a0
Used terms: (∅ ++ r)(r := mknode(r2, a0, r3)), h
| ⊦ h0 ⊆ h1 ↔ (∀ r. (r ∈ h0 → r ∈ h1) ∧ (r ∈ h0 → h0(r) = h1(r))) |
| r ≠ null, h0 ⊆ h, h0 ⊥ h3, h1 ⊆ h, h2 ⊆ h, h2 ⊥ h1, h3 ⊆ h, tr(r2, t3)(h3), tr(r0, t1)(h1), tr(r3, t4)(h0), tr(r1, t2)(h2), (∅ ++ r)(r := mknode(r0, a, r1)) ⊆ h, ¬ r ∈ h2, ¬ r ∈ h1, ¬ r ∈ h3, ¬ r ∈ h0, t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ r0. (r0 ∈ (∅ ++ r)(r := mknode(r2, a0, r3)) → r0 ∈ h) ∧ (r0 ∈ (∅ ++ r)(r := mknode(r2, a0, r3)) → (∅ ++ r)(r := mknode(r2, a0, r3))(r0) = h(r0)), ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2), ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2) ⊦ r0 = r2 ∧ r1 = r3 ∧ a = a0 |
r ≠ null, h0 ⊥ h3, h0 ⊆ h, h1 ⊆ h, h2 ⊥ h1, h2 ⊆ h, h3 ⊆ h, tr(r1, t2)(h2), tr(r3, t4)(h0), tr(r0, t1)(h1), tr(r2, t3)(h3), (∅ ++ r)(r := mknode(r0, a, r1)) ⊆ h, ¬ r ∈ h2, ¬ r ∈ h1, ¬ r ∈ h3, ¬ r ∈ h0, t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ r4. (r4 = r → r ∈ h) ∧ (r4 = r → mknode(r2, a0, r3) = h(r)), ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2), ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2) ⊦ r0 = r2 ∧ r1 = r3 ∧ a = a0
Used simplifier rules: r0 ≠ null, ¬ r0 ∈ h ⊦ r ∈ h ++ r0 ↔ r = r0 ∨ r ∈ h; (s) ⊦ ¬ r ∈ ∅; (s) ⊦ h(r0 := o)(r) = (r = r0 ∧ r0 ∈ h ⊃ o;h(r)); (s) ⊦ r ∈ h(r0 := o) ↔ r ∈ h; (s)
| r ≠ null, h0 ⊥ h3, h0 ⊆ h, h1 ⊆ h, h2 ⊥ h1, h2 ⊆ h, h3 ⊆ h, tr(r1, t2)(h2), tr(r3, t4)(h0), tr(r0, t1)(h1), tr(r2, t3)(h3), (∅ ++ r)(r := mknode(r0, a, r1)) ⊆ h, ¬ r ∈ h2, ¬ r ∈ h1, ¬ r ∈ h3, ¬ r ∈ h0, t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ r4. (r4 = r → r ∈ h) ∧ (r4 = r → mknode(r2, a0, r3) = h(r)), ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2), ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2) ⊦ r0 = r2 ∧ r1 = r3 ∧ a = a0 |
r ≠ null, h0 ⊆ h, h0 ⊥ h3, h1 ⊆ h, h2 ⊆ h, h2 ⊥ h1, h3 ⊆ h, tr(r2, t3)(h3), tr(r0, t1)(h1), tr(r3, t4)(h0), tr(r1, t2)(h2), (∅ ++ r)(r := mknode(r0, a, r1)) ⊆ h, ¬ r ∈ h2, ¬ r ∈ h1, ¬ r ∈ h3, ¬ r ∈ h0, t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, r = r → r ∈ h, r = r → mknode(r2, a0, r3) = h(r), ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2), ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2) ⊦ r0 = r2 ∧ r1 = r3 ∧ a = a0
Used terms: r
| r ≠ null, h0 ⊆ h, h0 ⊥ h3, h1 ⊆ h, h2 ⊆ h, h2 ⊥ h1, h3 ⊆ h, tr(r2, t3)(h3), tr(r0, t1)(h1), tr(r3, t4)(h0), tr(r1, t2)(h2), (∅ ++ r)(r := mknode(r0, a, r1)) ⊆ h, ¬ r ∈ h2, ¬ r ∈ h1, ¬ r ∈ h3, ¬ r ∈ h0, t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, r = r → r ∈ h, r = r → mknode(r2, a0, r3) = h(r), ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2), ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2) ⊦ r0 = r2 ∧ r1 = r3 ∧ a = a0 |
mknode(r2, a0, r3) = h(r), h0 ⊥ h3, h0 ⊆ h, h1 ⊆ h, h2 ⊥ h1, h2 ⊆ h, h3 ⊆ h, r ∈ h, tr(r1, t2)(h2), tr(r3, t4)(h0), tr(r0, t1)(h1), tr(r2, t3)(h3), (∅ ++ r)(r := mknode(r0, a, r1)) ⊆ h, ¬ r ∈ h2, ¬ r ∈ h1, ¬ r ∈ h3, ¬ r ∈ h0, t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2), ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2) ⊦ r0 = r2 ∧ r1 = r3 ∧ a = a0
Used simplifier rules: ⊦ r ∈ h → r ≠ null; (s)
| mknode(r2, a0, r3) = h(r), h0 ⊥ h3, h0 ⊆ h, h1 ⊆ h, h2 ⊥ h1, h2 ⊆ h, h3 ⊆ h, r ∈ h, tr(r1, t2)(h2), tr(r3, t4)(h0), tr(r0, t1)(h1), tr(r2, t3)(h3), (∅ ++ r)(r := mknode(r0, a, r1)) ⊆ h, ¬ r ∈ h2, ¬ r ∈ h1, ¬ r ∈ h3, ¬ r ∈ h0, t3 ≠ t1 ∨ a0 ≠ a ∨ t4 ≠ t2, ∀ t, h2, h3, h4, r0. t = t1 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t1)(h2), ∀ t, h2, h3, h4, r0. t = t2 ∨ ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ tr(r0, t)(h4) ∨ ¬ tr(r0, t2)(h2) ⊦ r0 = r2 ∧ r1 = r3 ∧ a = a0 |
⊦ h0 ⊆ h1 ↔ (∀ r. (r ∈ h0 → r ∈ h1) ∧ (r ∈ h0 → h0(r) = h1(r)))
Used simplifier rules: ⊦ r ∈ h(r0 := o) ↔ r ∈ h; (s) ⊦ h(r0 := o)(r) = (r = r0 ∧ r0 ∈ h ⊃ o;h(r)); (s) ⊦ r ∈ h → r ≠ null; (s) ⊦ ¬ r ∈ ∅; (s) r0 ≠ null, ¬ r0 ∈ h ⊦ r ∈ h ++ r0 ↔ r = r0 ∨ r ∈ h; (s) ⊦ mknode(left, val, left0) = mknode(left1, val0, left2) ↔ left = left1 ∧ val = val0 ∧ left0 = left2; (ws) Used terms: (∅ ++ r)(r := mknode(r0, a, r1)), h
| ⊦ h0 ⊆ h1 ↔ (∀ r. (r ∈ h0 → r ∈ h1) ∧ (r ∈ h0 → h0(r) = h1(r))) |
The following image shows the proof tree of sequent calculus. The proved goal is at the bottom. You can click on the nodes to view additional rules. See here for details on colors in a proof tree.