| h0 ⊆ h, h1 ⊆ h, lls(r0, r1, x)(h0), lls(r0, r1, x0)(h1) ⊦ x0 ⊑ x ∨ x ⊑ x0 |
h0 ⊆ h, h1 ⊆ h, lls(r0, r1, x0)(h1), lls(r0, r1, x)(h0), ¬ x ⊑ x0, ¬ x0 ⊑ x ⊦
| h0 ⊆ h, h1 ⊆ h, lls(r0, r1, x0)(h1), lls(r0, r1, x)(h0), ¬ x ⊑ x0, ¬ x0 ⊑ x ⊦ |
h0 ⊆ h, h1 ⊆ h, lls(r0, r1, a + x1)(h0), lls(r0, r1, x0)(h1), ¬ a + x1 ⊑ x0, ¬ x0 ⊑ a + x1, ∀ h0, h, h1, r0, r1, x0. ¬(h0 ⊆ h ∧ h1 ⊆ h ∧ lls(r0, r1, x0)(h1) ∧ lls(r0, r1, x1)(h0) ∧ ¬ x1 ⊑ x0 ∧ ¬ x0 ⊑ x1) ⊦
Used simplifier rules: lls-base: ⊦ lls(r0, r1, []) = (emp ∧ ⌜r0 = r1⌝ ); List[A] freely generated by [], +; ⊦ (hP0 ∧ hP1)(h) ↔ hP0(h) ∧ hP1(h); (s) ⊦ emp(h) ↔ h = ∅; (s) ⊦ ⌜bv⌝ (h) ↔ bv; (s) and-ass: ⊦ ((hP0 ∧ hP1) ∧ hP2) = (hP0 ∧ hP1 ∧ hP2); from specification heap-sep and-com: ⊦ (hP0 ∧ hP1) = (hP1 ∧ hP0); from specification heap-sep ⊦ [] ⊑ x; (s)
| h0 ⊆ h, h1 ⊆ h, lls(r0, r1, a + x1)(h0), lls(r0, r1, x0)(h1), ¬ a + x1 ⊑ x0, ¬ x0 ⊑ a + x1, ∀ h0, h, h1, r0, r1, x0. ¬(h0 ⊆ h ∧ h1 ⊆ h ∧ lls(r0, r1, x0)(h1) ∧ lls(r0, r1, x1)(h0) ∧ ¬ x1 ⊑ x0 ∧ ¬ x0 ⊑ x1) ⊦ |
h0 ⊆ h, h1 ⊆ h, lls(r0, r1, x0)(h1), (r0 => a × r * lls(r, r1, x1))(h0), ¬ a ' + x1 ⊑ x0, ¬ x0 ⊑ a ' + x1, ∀ h2, h3, h4, r2, r3, x. ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ lls(r2, r3, x)(h4) ∨ ¬ lls(r2, r3, x1)(h2) ∨ x1 ⊑ x ∨ x ⊑ x1 ⊦
Used simplifier rules: lls-rec: ⊦ lls(r, r1, a ' + x) = _∃(λ r0. r => a × r0 * lls(r0, r1, x)); ⊦ a + x = a ' + x; (s) ⊦ (_∃ bP)(h) ↔ (∃ b. bP(b)(h)); (s) a: ⊦ (x + y) + z = x + y + z; from specification list
| h0 ⊆ h, h1 ⊆ h, lls(r0, r1, x0)(h1), (r0 => a × r * lls(r, r1, x1))(h0), ¬ a ' + x1 ⊑ x0, ¬ x0 ⊑ a ' + x1, ∀ h2, h3, h4, r2, r3, x. ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ lls(r2, r3, x)(h4) ∨ ¬ lls(r2, r3, x1)(h2) ∨ x1 ⊑ x ∨ x ⊑ x1 ⊦ |
x0 = a0 + x2, h0 ⊆ h, h1 ⊆ h, lls(r0, r1, x0)(h1), (r0 => a × r * lls(r, r1, x1))(h0), ¬ a ' + x1 ⊑ x0, ¬ x0 ⊑ a ' + x1, ∀ h2, h3, h4, r2, r3, x. ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ lls(r2, r3, x)(h4) ∨ ¬ lls(r2, r3, x1)(h2) ∨ x1 ⊑ x ∨ x ⊑ x1 ⊦
Used simplifier rules: lls-base: ⊦ lls(r0, r1, []) = (emp ∧ ⌜r0 = r1⌝ ); List[A] freely generated by [], +; ⊦ (hP0 ∧ hP1)(h) ↔ hP0(h) ∧ hP1(h); (s) ⊦ emp(h) ↔ h = ∅; (s) ⊦ ⌜bv⌝ (h) ↔ bv; (s) and-ass: ⊦ ((hP0 ∧ hP1) ∧ hP2) = (hP0 ∧ hP1 ∧ hP2); from specification heap-sep and-com: ⊦ (hP0 ∧ hP1) = (hP1 ∧ hP0); from specification heap-sep ⊦ [] ⊑ x; (s)
| x0 = a0 + x2, h0 ⊆ h, h1 ⊆ h, lls(r0, r1, x0)(h1), (r0 => a × r * lls(r, r1, x1))(h0), ¬ a ' + x1 ⊑ x0, ¬ x0 ⊑ a ' + x1, ∀ h2, h3, h4, r2, r3, x. ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ lls(r2, r3, x)(h4) ∨ ¬ lls(r2, r3, x1)(h2) ∨ x1 ⊑ x ∨ x ⊑ x1 ⊦ |
h0 ⊆ h, h1 ⊆ h, (r0 => a × r * lls(r, r1, x1))(h0), (r0 => a0 × r2 * lls(r2, r1, x2))(h1), ¬ a ' + x1 ⊑ a0 ' + x2, ¬ a0 ' + x2 ⊑ a ' + x1, ∀ h2, h3, h4, r2, r3, x. ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ lls(r2, r3, x)(h4) ∨ ¬ lls(r2, r3, x1)(h2) ∨ x1 ⊑ x ∨ x ⊑ x1 ⊦
Used simplifier rules: lls-rec: ⊦ lls(r, r1, a ' + x) = _∃(λ r0. r => a × r0 * lls(r0, r1, x)); ⊦ a + x = a ' + x; (s) ⊦ (_∃ bP)(h) ↔ (∃ b. bP(b)(h)); (s) a: ⊦ (x + y) + z = x + y + z; from specification list
| h0 ⊆ h, h1 ⊆ h, (r0 => a × r * lls(r, r1, x1))(h0), (r0 => a0 × r2 * lls(r2, r1, x2))(h1), ¬ a ' + x1 ⊑ a0 ' + x2, ¬ a0 ' + x2 ⊑ a ' + x1, ∀ h2, h3, h4, r2, r3, x. ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ lls(r2, r3, x)(h4) ∨ ¬ lls(r2, r3, x1)(h2) ∨ x1 ⊑ x ∨ x ⊑ x1 ⊦ |
⊦ (hP0 * hP1)(h) ↔ (∃ h0, h1. h0 ⊥ h1 ∧ h = h0 ∪ h1 ∧ hP0(h0) ∧ hP1(h1))
h0 ⊆ h, h1 ⊆ h, (r0 => a0 × r2 * lls(r2, r1, x2))(h1), ¬ a ' + x1 ⊑ a0 ' + x2, ¬ a0 ' + x2 ⊑ a ' + x1, ∃ h1, h2. h1 ⊥ h2 ∧ h0 = h1 ∪ h2 ∧ (r0 => a × r)(h1) ∧ lls(r, r1, x1)(h2), ∀ h2, h3, h4, r2, r3, x. ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ lls(r2, r3, x)(h4) ∨ ¬ lls(r2, r3, x1)(h2) ∨ x1 ⊑ x ∨ x ⊑ x1 ⊦
Used terms: h0, r0 => a × r, lls(r, r1, x1)
| ⊦ (hP0 * hP1)(h) ↔ (∃ h0, h1. h0 ⊥ h1 ∧ h = h0 ∪ h1 ∧ hP0(h0) ∧ hP1(h1)) |
| h0 ⊆ h, h1 ⊆ h, (r0 => a0 × r2 * lls(r2, r1, x2))(h1), ¬ a ' + x1 ⊑ a0 ' + x2, ¬ a0 ' + x2 ⊑ a ' + x1, ∃ h1, h2. h1 ⊥ h2 ∧ h0 = h1 ∪ h2 ∧ (r0 => a × r)(h1) ∧ lls(r, r1, x1)(h2), ∀ h2, h3, h4, r2, r3, x. ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ lls(r2, r3, x)(h4) ∨ ¬ lls(r2, r3, x1)(h2) ∨ x1 ⊑ x ∨ x ⊑ x1 ⊦ |
h1 ⊆ h, h2 ⊥ h3, h2 ⊆ h, h3 ⊆ h, lls(r, r1, x1)(h3), (r0 => a × r)(h2), (r0 => a0 × r2 * lls(r2, r1, x2))(h1), ¬ a ' + x1 ⊑ a0 ' + x2, ¬ a0 ' + x2 ⊑ a ' + x1, ∀ h2, h3, h4, r2, r3, x. ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ lls(r2, r3, x)(h4) ∨ ¬ lls(r2, r3, x1)(h2) ∨ x1 ⊑ x ∨ x ⊑ x1 ⊦
Used simplifier rules: ⊦ h0 ⊥ h1 → (h0 ∪ h1 ⊆ h ↔ h0 ⊆ h ∧ h1 ⊆ h); (ws)
| h1 ⊆ h, h2 ⊥ h3, h2 ⊆ h, h3 ⊆ h, lls(r, r1, x1)(h3), (r0 => a × r)(h2), (r0 => a0 × r2 * lls(r2, r1, x2))(h1), ¬ a ' + x1 ⊑ a0 ' + x2, ¬ a0 ' + x2 ⊑ a ' + x1, ∀ h2, h3, h4, r2, r3, x. ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ lls(r2, r3, x)(h4) ∨ ¬ lls(r2, r3, x1)(h2) ∨ x1 ⊑ x ∨ x ⊑ x1 ⊦ |
⊦ (hP0 * hP1)(h) ↔ (∃ h0, h1. h0 ⊥ h1 ∧ h = h0 ∪ h1 ∧ hP0(h0) ∧ hP1(h1))
h1 ⊆ h, h2 ⊆ h, h2 ⊥ h3, h3 ⊆ h, lls(r, r1, x1)(h3), (r0 => a × r)(h2), ¬ a ' + x1 ⊑ a0 ' + x2, ¬ a0 ' + x2 ⊑ a ' + x1, ∃ h0, h2. h0 ⊥ h2 ∧ h1 = h0 ∪ h2 ∧ (r0 => a0 × r2)(h0) ∧ lls(r2, r1, x2)(h2), ∀ h2, h3, h4, r2, r3, x. ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ lls(r2, r3, x)(h4) ∨ ¬ lls(r2, r3, x1)(h2) ∨ x1 ⊑ x ∨ x ⊑ x1 ⊦
Used terms: h1, r0 => a0 × r2, lls(r2, r1, x2)
| ⊦ (hP0 * hP1)(h) ↔ (∃ h0, h1. h0 ⊥ h1 ∧ h = h0 ∪ h1 ∧ hP0(h0) ∧ hP1(h1)) |
| h1 ⊆ h, h2 ⊆ h, h2 ⊥ h3, h3 ⊆ h, lls(r, r1, x1)(h3), (r0 => a × r)(h2), ¬ a ' + x1 ⊑ a0 ' + x2, ¬ a0 ' + x2 ⊑ a ' + x1, ∃ h0, h2. h0 ⊥ h2 ∧ h1 = h0 ∪ h2 ∧ (r0 => a0 × r2)(h0) ∧ lls(r2, r1, x2)(h2), ∀ h2, h3, h4, r2, r3, x. ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ lls(r2, r3, x)(h4) ∨ ¬ lls(r2, r3, x1)(h2) ∨ x1 ⊑ x ∨ x ⊑ x1 ⊦ |
h0 ⊥ h4, h0 ⊆ h, h0 ⊥ h3, h3 ⊆ h, h4 ⊆ h, lls(r, r1, x1)(h3), lls(r, r1, x2)(h4), (r0 => a × r)(h0), ¬ x1 ⊑ x2, ¬ x2 ⊑ x1, ∀ h2, h3, h4, r2, r3, x. ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ lls(r2, r3, x)(h4) ∨ ¬ lls(r2, r3, x1)(h2) ∨ x1 ⊑ x ∨ x ⊑ x1 ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a ' + x ⊑ b ' + y ↔ a = b ∧ x ⊑ y; (ws) ⊦ a × r = a0 × r0 ↔ a = a0 ∧ r = r0; (ws) ⊦ (r => o)(h1) ∧ h1 ⊆ h ∧ h2 ⊆ h → ((r => o1)(h2) ↔ o1 = o ∧ h1 = h2); (s) ⊦ h0 ⊥ h1 → (h0 ∪ h1 ⊆ h ↔ h0 ⊆ h ∧ h1 ⊆ h); (ws)
| h0 ⊥ h4, h0 ⊆ h, h0 ⊥ h3, h3 ⊆ h, h4 ⊆ h, lls(r, r1, x1)(h3), lls(r, r1, x2)(h4), (r0 => a × r)(h0), ¬ x1 ⊑ x2, ¬ x2 ⊑ x1, ∀ h2, h3, h4, r2, r3, x. ¬ h2 ⊆ h3 ∨ ¬ h4 ⊆ h3 ∨ ¬ lls(r2, r3, x)(h4) ∨ ¬ lls(r2, r3, x1)(h2) ∨ x1 ⊑ x ∨ x ⊑ x1 ⊦ |
Used terms: h3, h, h4, r, r1, x2
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.