| r ∈ h0 ∪ h1 ⊦ h0 ⊥ h1 → (h0 ∪ h1)[r] = (r ∈ h0 ⊃ h0[r];h1[r]) |
(h0 ∪ h1)[r] ≠ (r ∈ h0 ⊃ h0[r];h1[r]), r ∈ h0 ∪ h1, h0 ⊥ h1 ⊦
| (h0 ∪ h1)[r] ≠ (r ∈ h0 ⊃ h0[r];h1[r]), r ∈ h0 ∪ h1, h0 ⊥ h1 ⊦ |
(h0 ∪ h1)[r] ≠ (r ∈ h0 ⊃ h0[r];h1[r]), h0 ⊥ h1, r ∈ h0 ∨ r ∈ h1 ⊦
Used simplifier rules: in-uni: ⊦ h0 ⊥ h1 → (r ∈ h0 ∪ h1 ↔ r ∈ h0 ∨ r ∈ h1);
| (h0 ∪ h1)[r] ≠ (r ∈ h0 ⊃ h0[r];h1[r]), h0 ⊥ h1, r ∈ h0 ∨ r ∈ h1 ⊦ |
(h0 ∪ h1)[r] ≠ (r ∈ h0 ⊃ h0[r];h1[r]), h0 ⊥ h1, r ∈ h0 ∨ r ∈ h1, ∀ h, h0, r. # h < # h1 → (h0 ∪ h)[r] ≠ (r ∈ h0 ⊃ h0[r];h[r]) ∧ h0 ⊥ h ∧ (r ∈ h0 ∨ r ∈ h) → false ⊦
Used simplifier rules: <; (wellfounded) Used terms: # h1
| (h0 ∪ h1)[r] ≠ (r ∈ h0 ⊃ h0[r];h1[r]), h0 ⊥ h1, r ∈ h0 ∨ r ∈ h1, ∀ h, h0, r. # h < # h1 → (h0 ∪ h)[r] ≠ (r ∈ h0 ⊃ h0[r];h[r]) ∧ h0 ⊥ h ∧ (r ∈ h0 ∨ r ∈ h) → false ⊦ |
(h0 ∪ h1)[r] ≠ (r ∈ h0 ⊃ h0[r];h1[r]), h0 ⊥ h1, r ∈ h0 ∨ r ∈ h1, ∀ h, h0, r. # h < # h1 → (h0 ∪ h)[r] ≠ (r ∈ h0 ⊃ h0[r];h[r]) ∧ h0 ⊥ h ∧ (r ∈ h0 ∨ r ∈ h) → false ⊦
| (h0 ∪ h1)[r] ≠ (r ∈ h0 ⊃ h0[r];h1[r]), h0 ⊥ h1, r ∈ h0 ∨ r ∈ h1, ∀ h, h0, r. # h < # h1 → (h0 ∪ h)[r] ≠ (r ∈ h0 ⊃ h0[r];h[r]) ∧ h0 ⊥ h ∧ (r ∈ h0 ∨ r ∈ h) → false ⊦ |
(h0 ∪ h1)[r] ≠ (r ∈ h0 ⊃ h0[r];h1[r]), h1 ≠ ∅, h0 ⊥ h1, r ∈ h0 ∨ r ∈ h1, ∀ h, h0, r. # h < # h1 → (h0 ∪ h)[r] ≠ (r ∈ h0 ⊃ h0[r];h[r]) ∧ h0 ⊥ h ∧ (r ∈ h0 ∨ r ∈ h) → false ⊦
Used simplifier rules: uni-emp: ⊦ h0 ∪ ∅ = h0; disj-emp-r: ⊦ h ⊥ ∅; in-emp: ⊦ ¬ r ∈ ∅; Used formulas: h1 = ∅
| (h0 ∪ h1)[r] ≠ (r ∈ h0 ⊃ h0[r];h1[r]), h1 ≠ ∅, h0 ⊥ h1, r ∈ h0 ∨ r ∈ h1, ∀ h, h0, r. # h < # h1 → (h0 ∪ h)[r] ≠ (r ∈ h0 ⊃ h0[r];h[r]) ∧ h0 ⊥ h ∧ (r ∈ h0 ∨ r ∈ h) → false ⊦ |
⊦ h0 = h1 ↔ (∀ r. (r ∈ h0 ↔ r ∈ h1) ∧ (r ∈ h0 → h0[r] = h1[r]))
(h0 ∪ h1)[r] ≠ (r ∈ h0 ⊃ h0[r];h1[r]), h0 ⊥ h1, ∃ r. ¬((r ∈ h1 ↔ r ∈ ∅) ∧ (r ∈ h1 → h1[r] = ∅[r])), r ∈ h0 ∨ r ∈ h1, ∀ h, h0, r. # h < # h1 → (h0 ∪ h)[r] ≠ (r ∈ h0 ⊃ h0[r];h[r]) ∧ h0 ⊥ h ∧ (r ∈ h0 ∨ r ∈ h) → false ⊦
Used terms: ∅, h1
| ⊦ h0 = h1 ↔ (∀ r. (r ∈ h0 ↔ r ∈ h1) ∧ (r ∈ h0 → h0[r] = h1[r])) |
| (h0 ∪ h1)[r] ≠ (r ∈ h0 ⊃ h0[r];h1[r]), h0 ⊥ h1, ∃ r. ¬((r ∈ h1 ↔ r ∈ ∅) ∧ (r ∈ h1 → h1[r] = ∅[r])), r ∈ h0 ∨ r ∈ h1, ∀ h, h0, r. # h < # h1 → (h0 ∪ h)[r] ≠ (r ∈ h0 ⊃ h0[r];h[r]) ∧ h0 ⊥ h ∧ (r ∈ h0 ∨ r ∈ h) → false ⊦ |
(h0 ∪ h1)[r] ≠ (r ∈ h0 ⊃ h0[r];h1[r]), r0 ∈ h1, h0 ⊥ h1, r ∈ h0 ∨ r ∈ h1, ∀ h, h0, r. # h < # h1 → (h0 ∪ h)[r] ≠ (r ∈ h0 ⊃ h0[r];h[r]) ∧ h0 ⊥ h ∧ (r ∈ h0 ∨ r ∈ h) → false ⊦
Used simplifier rules: in-emp: ⊦ ¬ r ∈ ∅;
| (h0 ∪ h1)[r] ≠ (r ∈ h0 ⊃ h0[r];h1[r]), r0 ∈ h1, h0 ⊥ h1, r ∈ h0 ∨ r ∈ h1, ∀ h, h0, r. # h < # h1 → (h0 ∪ h)[r] ≠ (r ∈ h0 ⊃ h0[r];h[r]) ∧ h0 ⊥ h ∧ (r ∈ h0 ∨ r ∈ h) → false ⊦ |
⊦ r ≠ null → (r ∈ h ↔ (∃ h0, o. h = (h0 ++ r)[r, o] ∧ ¬ r ∈ h0))
(h0 ∪ h1)[r] ≠ (r ∈ h0 ⊃ h0[r];h1[r]), r0 ≠ null, h0 ⊥ h1, ∃ h0, o. h1 = (h0 ++ r0)[r0, o] ∧ ¬ r0 ∈ h0, r ∈ h0 ∨ r ∈ h1, ∀ h, h0, r. # h < # h1 → (h0 ∪ h)[r] ≠ (r ∈ h0 ⊃ h0[r];h[r]) ∧ h0 ⊥ h ∧ (r ∈ h0 ∨ r ∈ h) → false ⊦
Used simplifier rules: sanity: ⊦ ¬ null ∈ h; Used terms: h1, r0
| ⊦ r ≠ null → (r ∈ h ↔ (∃ h0, o. h = (h0 ++ r)[r, o] ∧ ¬ r ∈ h0)) |
| (h0 ∪ h1)[r] ≠ (r ∈ h0 ⊃ h0[r];h1[r]), r0 ≠ null, h0 ⊥ h1, ∃ h0, o. h1 = (h0 ++ r0)[r0, o] ∧ ¬ r0 ∈ h0, r ∈ h0 ∨ r ∈ h1, ∀ h, h0, r. # h < # h1 → (h0 ∪ h)[r] ≠ (r ∈ h0 ⊃ h0[r];h[r]) ∧ h0 ⊥ h ∧ (r ∈ h0 ∨ r ∈ h) → false ⊦ |
((h0 ∪ h) ++ r0)[r] ≠ (r ∈ h0 ⊃ h0[r];(h ++ r0)[r]), r ≠ r0, r0 ≠ null, h0 ⊥ h, ¬ r0 ∈ h0, ¬ r0 ∈ h, r ∈ h ∨ r ∈ h0, ∀ h0, h2, r. # h0 < # (h ++ r0)[r0, o] → (h2 ∪ h0)[r] ≠ (r ∈ h2 ⊃ h2[r];h0[r]) ∧ h2 ⊥ h0 ∧ (r ∈ h2 ∨ r ∈ h0) → false ⊦
Used simplifier rules: disj-alloc: r0 ≠ null, ¬ r0 ∈ h0, ¬ r0 ∈ h1 ⊦ h0 ⊥ h1 → h0 ⊥ h1 ++ r0; uni-write: r ≠ null, r ∈ h1, h0 ⊥ h1 ⊦ h0 ∪ h1[r, o] = (h0 ∪ h1)[r, o]; uni-alloc: r ≠ null, ¬ r ∈ h1, ¬ r ∈ h0, h0 ⊥ h1 ⊦ h0 ∪ (h1 ++ r) = (h0 ∪ h1) ++ r; in-uni: ⊦ h0 ⊥ h1 → (r ∈ h0 ∪ h1 ↔ r ∈ h0 ∨ r ∈ h1); at-write: ⊦ h[r0, o][r] = (r = r0 ∧ r0 ∈ h ⊃ o;h[r]); disj-write: r ≠ null, ¬ r ∈ h1 ⊦ h0 ⊥ (h1 ++ r)[r, o] ↔ h0 ⊥ h1 ∧ ¬ r ∈ h0; in-write: ⊦ r ∈ h[r0, o] ↔ r ∈ h; in-alloc: r0 ≠ null, ¬ r0 ∈ h ⊦ r ∈ h ++ r0 ↔ r = r0 ∨ r ∈ h;
| ((h0 ∪ h) ++ r0)[r] ≠ (r ∈ h0 ⊃ h0[r];(h ++ r0)[r]), r ≠ r0, r0 ≠ null, h0 ⊥ h, ¬ r0 ∈ h0, ¬ r0 ∈ h, r ∈ h ∨ r ∈ h0, ∀ h0, h2, r. # h0 < # (h ++ r0)[r0, o] → (h2 ∪ h0)[r] ≠ (r ∈ h2 ⊃ h2[r];h0[r]) ∧ h2 ⊥ h0 ∧ (r ∈ h2 ∨ r ∈ h0) → false ⊦ |
r ∈ h, r0 ≠ null, ¬ r0 ∈ h ⊦ r ≠ r0 → (h ++ r0)[r] = h[r]
(h0 ∪ h)[r] ≠ (r ∈ h0 ⊃ h0[r];(h ++ r0)[r]), r ≠ r0, r0 ≠ null, r ∈ h0 ∪ h, h0 ⊥ h, ¬ r0 ∈ h0 ∪ h, ¬ r0 ∈ h0, ¬ r0 ∈ h, r ∈ h ∨ r ∈ h0, ∀ h0, h2, r. # h0 < # (h ++ r0)[r0, o] → (h2 ∪ h0)[r] ≠ (r ∈ h2 ⊃ h2[r];h0[r]) ∧ h2 ⊥ h0 ∧ (r ∈ h2 ∨ r ∈ h0) → false ⊦
Used simplifier rules: in-uni: ⊦ h0 ⊥ h1 → (r ∈ h0 ∪ h1 ↔ r ∈ h0 ∨ r ∈ h1); Used terms: r, r0, h0 ∪ h
| r ∈ h, r0 ≠ null, ¬ r0 ∈ h ⊦ r ≠ r0 → (h ++ r0)[r] = h[r] |
| (h0 ∪ h)[r] ≠ (r ∈ h0 ⊃ h0[r];(h ++ r0)[r]), r ≠ r0, r0 ≠ null, r ∈ h0 ∪ h, h0 ⊥ h, ¬ r0 ∈ h0 ∪ h, ¬ r0 ∈ h0, ¬ r0 ∈ h, r ∈ h ∨ r ∈ h0, ∀ h0, h2, r. # h0 < # (h ++ r0)[r0, o] → (h2 ∪ h0)[r] ≠ (r ∈ h2 ⊃ h2[r];h0[r]) ∧ h2 ⊥ h0 ∧ (r ∈ h2 ∨ r ∈ h0) → false ⊦ |
(h0 ∪ h)[r] ≠ (r ∈ h0 ⊃ h0[r];(h ++ r0)[r]), r ≠ r0, r0 ≠ null, h0 ⊥ h, ¬ r0 ∈ h0, ¬ r0 ∈ h, r ∈ h ∨ r ∈ h0, r ∈ h0 ∨ r ∈ h, ∀ h0, h2, r. # h0 < # (h ++ r0)[r0, o] → (h2 ∪ h0)[r] ≠ (r ∈ h2 ⊃ h2[r];h0[r]) ∧ h2 ⊥ h0 ∧ (r ∈ h2 ∨ r ∈ h0) → false ⊦
Used simplifier rules: in-uni: ⊦ h0 ⊥ h1 → (r ∈ h0 ∪ h1 ↔ r ∈ h0 ∨ r ∈ h1);
| (h0 ∪ h)[r] ≠ (r ∈ h0 ⊃ h0[r];(h ++ r0)[r]), r ≠ r0, r0 ≠ null, h0 ⊥ h, ¬ r0 ∈ h0, ¬ r0 ∈ h, r ∈ h ∨ r ∈ h0, r ∈ h0 ∨ r ∈ h, ∀ h0, h2, r. # h0 < # (h ++ r0)[r0, o] → (h2 ∪ h0)[r] ≠ (r ∈ h2 ⊃ h2[r];h0[r]) ∧ h2 ⊥ h0 ∧ (r ∈ h2 ∨ r ∈ h0) → false ⊦ |
(h0 ∪ h)[r] ≠ (r ∈ h0 ⊃ h0[r];(h ++ r0)[r]), r ≠ r0, r0 ≠ null, h0 ⊥ h, ¬ r0 ∈ h0, ¬ r0 ∈ h, r ∈ h0 ∨ r ∈ h, r ∈ h ∨ r ∈ h0, ∀ h0, h2, r. # h0 < # (h ++ r0)[r0, o] → (h2 ∪ h0)[r] ≠ (r ∈ h2 ⊃ h2[r];h0[r]) ∧ h2 ⊥ h0 ∧ (r ∈ h2 ∨ r ∈ h0) → false ⊦
Used formulas: r = r0
| (h0 ∪ h)[r] ≠ (r ∈ h0 ⊃ h0[r];(h ++ r0)[r]), r ≠ r0, r0 ≠ null, h0 ⊥ h, ¬ r0 ∈ h0, ¬ r0 ∈ h, r ∈ h0 ∨ r ∈ h, r ∈ h ∨ r ∈ h0, ∀ h0, h2, r. # h0 < # (h ++ r0)[r0, o] → (h2 ∪ h0)[r] ≠ (r ∈ h2 ⊃ h2[r];h0[r]) ∧ h2 ⊥ h0 ∧ (r ∈ h2 ∨ r ∈ h0) → false ⊦ |
(h0 ∪ h)[r] ≠ h0[r], r ≠ r0, r0 ≠ null, r ∈ h0, h0 ⊥ h, ¬ r0 ∈ h0, ¬ r0 ∈ h, r ∈ h ∨ r ∈ h0, r ∈ h0 ∨ r ∈ h, ∀ h0, h2, r. # h0 < # (h ++ r0)[r0, o] → (h2 ∪ h0)[r] ≠ (r ∈ h2 ⊃ h2[r];h0[r]) ∧ h2 ⊥ h0 ∧ (r ∈ h2 ∨ r ∈ h0) → false ⊦
(h0 ∪ h)[r] ≠ (h ++ r0)[r], r ≠ r0, r0 ≠ null, h0 ⊥ h, ¬ r ∈ h0, ¬ r0 ∈ h0, ¬ r0 ∈ h, r ∈ h ∨ r ∈ h0, r ∈ h0 ∨ r ∈ h, ∀ h0, h2, r. # h0 < # (h ++ r0)[r0, o] → (h2 ∪ h0)[r] ≠ (r ∈ h2 ⊃ h2[r];h0[r]) ∧ h2 ⊥ h0 ∧ (r ∈ h2 ∨ r ∈ h0) → false ⊦
| (h0 ∪ h)[r] ≠ h0[r], r ≠ r0, r0 ≠ null, r ∈ h0, h0 ⊥ h, ¬ r0 ∈ h0, ¬ r0 ∈ h, r ∈ h ∨ r ∈ h0, r ∈ h0 ∨ r ∈ h, ∀ h0, h2, r. # h0 < # (h ++ r0)[r0, o] → (h2 ∪ h0)[r] ≠ (r ∈ h2 ⊃ h2[r];h0[r]) ∧ h2 ⊥ h0 ∧ (r ∈ h2 ∨ r ∈ h0) → false ⊦ |
(h0 ∪ h)[r] ≠ h0[r], r ≠ r0, r0 ≠ null, r ∈ h0, h0 ⊥ h, ¬ r0 ∈ h0, ¬ r0 ∈ h, ∀ h0, h2, r. # h0 < # (h ++ r0)[r0, o] → (h2 ∪ h0)[r] ≠ (r ∈ h2 ⊃ h2[r];h0[r]) ∧ h2 ⊥ h0 ∧ (r ∈ h2 ∨ r ∈ h0) → false ⊦
Used simplifier rules: disj-l: ⊦ r ∈ h0 ∧ h0 ⊥ h1 → (r ∈ h1 ↔ false);
| (h0 ∪ h)[r] ≠ h0[r], r ≠ r0, r0 ≠ null, r ∈ h0, h0 ⊥ h, ¬ r0 ∈ h0, ¬ r0 ∈ h, ∀ h0, h2, r. # h0 < # (h ++ r0)[r0, o] → (h2 ∪ h0)[r] ≠ (r ∈ h2 ⊃ h2[r];h0[r]) ∧ h2 ⊥ h0 ∧ (r ∈ h2 ∨ r ∈ h0) → false ⊦ |
Used simplifier rules: in-alloc: r0 ≠ null, ¬ r0 ∈ h ⊦ r ∈ h ++ r0 ↔ r = r0 ∨ r ∈ h; size-write: r ∈ h ⊦ # h[r, o] = # h; size-alloc: ¬ r ∈ h, r ≠ null ⊦ #(h ++ r) = # h + 1; ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ ¬ n < n; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: h, h0, r
| (h0 ∪ h)[r] ≠ (h ++ r0)[r], r ≠ r0, r0 ≠ null, h0 ⊥ h, ¬ r ∈ h0, ¬ r0 ∈ h0, ¬ r0 ∈ h, r ∈ h ∨ r ∈ h0, r ∈ h0 ∨ r ∈ h, ∀ h0, h2, r. # h0 < # (h ++ r0)[r0, o] → (h2 ∪ h0)[r] ≠ (r ∈ h2 ⊃ h2[r];h0[r]) ∧ h2 ⊥ h0 ∧ (r ∈ h2 ∨ r ∈ h0) → false ⊦ |
(h0 ∪ h)[r] ≠ (h ++ r0)[r], r ≠ r0, r0 ≠ null, r ∈ h, h0 ⊥ h, ¬ r0 ∈ h0, ¬ r0 ∈ h, ∀ h0, h2, r. # h0 < # (h ++ r0)[r0, o] → (h2 ∪ h0)[r] ≠ (r ∈ h2 ⊃ h2[r];h0[r]) ∧ h2 ⊥ h0 ∧ (r ∈ h2 ∨ r ∈ h0) → false ⊦
Used simplifier rules: disj-r: ⊦ r ∈ h1 ∧ h0 ⊥ h1 → (r ∈ h0 ↔ false);
| (h0 ∪ h)[r] ≠ (h ++ r0)[r], r ≠ r0, r0 ≠ null, r ∈ h, h0 ⊥ h, ¬ r0 ∈ h0, ¬ r0 ∈ h, ∀ h0, h2, r. # h0 < # (h ++ r0)[r0, o] → (h2 ∪ h0)[r] ≠ (r ∈ h2 ⊃ h2[r];h0[r]) ∧ h2 ⊥ h0 ∧ (r ∈ h2 ∨ r ∈ h0) → false ⊦ |
(h0 ∪ h)[r] ≠ (h ++ r0)[r], r ≠ r0, r0 ≠ null, r ∈ h, h0 ⊥ h, ¬ r0 ∈ h0, ¬ r0 ∈ h, ∀ h0, h2, r. # h0 < # (h ++ r0)[r0, o] → (h2 ∪ h0)[r] ≠ (r ∈ h2 ⊃ h2[r];h0[r]) ∧ h2 ⊥ h0 ∧ (r ∈ h2 ∨ r ∈ h0) → false ⊦ (h0 ∪ h)[r] ≠ (r ∈ h0 ⊃ h0[r];h[r]) ∧ h0 ⊥ h ∧ (r ∈ h0 ∨ r ∈ h)
Used simplifier rules: in-alloc: r0 ≠ null, ¬ r0 ∈ h ⊦ r ∈ h ++ r0 ↔ r = r0 ∨ r ∈ h; size-write: r ∈ h ⊦ # h[r, o] = # h; size-alloc: ¬ r ∈ h, r ≠ null ⊦ #(h ++ r) = # h + 1; ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ ¬ n < n; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: h, h0, r
| (h0 ∪ h)[r] ≠ (h ++ r0)[r], r ≠ r0, r0 ≠ null, r ∈ h, h0 ⊥ h, ¬ r0 ∈ h0, ¬ r0 ∈ h, ∀ h0, h2, r. # h0 < # (h ++ r0)[r0, o] → (h2 ∪ h0)[r] ≠ (r ∈ h2 ⊃ h2[r];h0[r]) ∧ h2 ⊥ h0 ∧ (r ∈ h2 ∨ r ∈ h0) → false ⊦ (h0 ∪ h)[r] ≠ (r ∈ h0 ⊃ h0[r];h[r]) ∧ h0 ⊥ h ∧ (r ∈ h0 ∨ r ∈ h) |
(h0 ∪ h)[r] = h[r], h[r] ≠ (h ++ r0)[r], r ≠ r0, r0 ≠ null, r ∈ h, h0 ⊥ h, ¬ r0 ∈ h0, ¬ r0 ∈ h, ∀ h0, h2, r. # h0 < # (h ++ r0)[r0, o] → (h2 ∪ h0)[r] ≠ (r ∈ h2 ⊃ h2[r];h0[r]) ∧ h2 ⊥ h0 ∧ (r ∈ h2 ∨ r ∈ h0) → false ⊦
Used simplifier rules: disj-r: ⊦ r ∈ h1 ∧ h0 ⊥ h1 → (r ∈ h0 ↔ false);
| (h0 ∪ h)[r] = h[r], h[r] ≠ (h ++ r0)[r], r ≠ r0, r0 ≠ null, r ∈ h, h0 ⊥ h, ¬ r0 ∈ h0, ¬ r0 ∈ h, ∀ h0, h2, r. # h0 < # (h ++ r0)[r0, o] → (h2 ∪ h0)[r] ≠ (r ∈ h2 ⊃ h2[r];h0[r]) ∧ h2 ⊥ h0 ∧ (r ∈ h2 ∨ r ∈ h0) → false ⊦ |
r ∈ h, r0 ≠ null, ¬ r0 ∈ h ⊦ r ≠ r0 → (h ++ r0)[r] = h[r]
Used terms: r, r0, h
| r ∈ h, r0 ≠ null, ¬ r0 ∈ h ⊦ r ≠ r0 → (h ++ r0)[r] = h[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.