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