| r ≠ null ⊦ r ∈ h → (∅ ++ r)[r, h[r]] ∪ (h -- r) = h |
r ≠ null, (∅ ++ r)[r, h[r]] ∪ (h -- r) ≠ h, r ∈ h ⊦
| r ≠ null, (∅ ++ r)[r, h[r]] ∪ (h -- r) ≠ h, r ∈ h ⊦ |
⊦ h0 = h1 ↔ (∀ r. (r ∈ h0 ↔ r ∈ h1) ∧ (r ∈ h0 → h0[r] = h1[r]))
r ≠ null, r ∈ h, ∃ r0. ¬((r0 ∈ (∅ ++ r)[r, h[r]] ∪ (h -- r) ↔ r0 ∈ h) ∧ (r0 ∈ (∅ ++ r)[r, h[r]] ∪ (h -- r) → ((∅ ++ r)[r, h[r]] ∪ (h -- r))[r0] = h[r0])) ⊦
Used terms: h, (∅ ++ r)[r, h[r]] ∪ (h -- r)
| ⊦ h0 = h1 ↔ (∀ r. (r ∈ h0 ↔ r ∈ h1) ∧ (r ∈ h0 → h0[r] = h1[r])) |
| r ≠ null, r ∈ h, ∃ r0. ¬((r0 ∈ (∅ ++ r)[r, h[r]] ∪ (h -- r) ↔ r0 ∈ h) ∧ (r0 ∈ (∅ ++ r)[r, h[r]] ∪ (h -- r) → ((∅ ++ r)[r, h[r]] ∪ (h -- r))[r0] = h[r0])) ⊦ |
r ∈ h ⊦ (r0 ∈ (∅ ++ r)[r, h[r]] ∪ (h -- r) ↔ r0 ∈ h) ∧ (r0 ∈ (∅ ++ r)[r, h[r]] ∪ (h -- r) → ((∅ ++ r)[r, h[r]] ∪ (h -- r))[r0] = h[r0])
Used simplifier rules: nonnull: ⊦ r ∈ h → r ≠ null;
| r ∈ h ⊦ (r0 ∈ (∅ ++ r)[r, h[r]] ∪ (h -- r) ↔ r0 ∈ h) ∧ (r0 ∈ (∅ ++ r)[r, h[r]] ∪ (h -- r) → ((∅ ++ r)[r, h[r]] ∪ (h -- r))[r0] = h[r0]) |
⊦ h0 ⊥ h1 → (r ∈ h0 ∪ h1 ↔ r ∈ h0 ∨ r ∈ h1)
r ∈ h, (∅ ++ r)[r, h[r]] ⊥ h -- r ⊦ (r0 ∈ (∅ ++ r)[r, h[r]] ∨ r0 ∈ h -- r ↔ r0 ∈ h) ∧ (r0 ∈ (∅ ++ r)[r, h[r]] ∨ r0 ∈ h -- r → ((∅ ++ r)[r, h[r]] ∪ (h -- r))[r0] = h[r0])
Used simplifier rules: nonnull: ⊦ r ∈ h → r ≠ null; disj-singleton-write: r ≠ null ⊦ (∅ ++ r)[r, o] ⊥ h ↔ ¬ r ∈ h; in-del: ⊦ r ∈ h -- r0 ↔ r ≠ r0 ∧ r ∈ h; Used terms: h -- r, (∅ ++ r)[r, h[r]], r0
| ⊦ h0 ⊥ h1 → (r ∈ h0 ∪ h1 ↔ r ∈ h0 ∨ r ∈ h1) |
| r ∈ h, (∅ ++ r)[r, h[r]] ⊥ h -- r ⊦ (r0 ∈ (∅ ++ r)[r, h[r]] ∨ r0 ∈ h -- r ↔ r0 ∈ h) ∧ (r0 ∈ (∅ ++ r)[r, h[r]] ∨ r0 ∈ h -- r → ((∅ ++ r)[r, h[r]] ∪ (h -- r))[r0] = h[r0]) |
((∅ ++ r)[r, h[r]] ∪ (h -- r))[r0] ≠ h[r0], r ∈ h, r0 ∈ h ⊦
Used simplifier rules: disj-singleton-write: r ≠ null ⊦ (∅ ++ r)[r, o] ⊥ h ↔ ¬ r ∈ h; in-write: ⊦ r ∈ h[r0, o] ↔ r ∈ h; nonnull: ⊦ r ∈ h → r ≠ null; in-alloc: r0 ≠ null, ¬ r0 ∈ h ⊦ r ∈ h ++ r0 ↔ r = r0 ∨ r ∈ h; in-emp: ⊦ ¬ r ∈ ∅; in-del: ⊦ r ∈ h -- r0 ↔ r ≠ r0 ∧ r ∈ h;
| ((∅ ++ r)[r, h[r]] ∪ (h -- r))[r0] ≠ h[r0], r ∈ h, r0 ∈ h ⊦ |
r ∈ h0 ∪ h1 ⊦ h0 ⊥ h1 → (h0 ∪ h1)[r] = (r ∈ h0 ⊃ h0[r];h1[r])
(r0 ∈ (∅ ++ r)[r, h[r]] ⊃ (∅ ++ r)[r, h[r]][r0];(h -- r)[r0]) ≠ h[r0], r0 ∈ h, r ∈ h, r0 ∈ (∅ ++ r)[r, h[r]] ∪ (h -- r), (∅ ++ r)[r, h[r]] ⊥ h -- r ⊦
Used simplifier rules: in-uni: ⊦ h0 ⊥ h1 → (r ∈ h0 ∪ h1 ↔ r ∈ h0 ∨ r ∈ h1); in-write: ⊦ r ∈ h[r0, o] ↔ r ∈ h; in-alloc: r0 ≠ null, ¬ r0 ∈ h ⊦ r ∈ h ++ r0 ↔ r = r0 ∨ r ∈ h; in-emp: ⊦ ¬ r ∈ ∅; nonnull: ⊦ r ∈ h → r ≠ null; disj-singleton-write: r ≠ null ⊦ (∅ ++ r)[r, o] ⊥ h ↔ ¬ r ∈ h; in-del: ⊦ r ∈ h -- r0 ↔ r ≠ r0 ∧ r ∈ h; Used terms: r0, h -- r, (∅ ++ r)[r, h[r]]
| r ∈ h0 ∪ h1 ⊦ h0 ⊥ h1 → (h0 ∪ h1)[r] = (r ∈ h0 ⊃ h0[r];h1[r]) |
| (r0 ∈ (∅ ++ r)[r, h[r]] ⊃ (∅ ++ r)[r, h[r]][r0];(h -- r)[r0]) ≠ h[r0], r0 ∈ h, r ∈ h, r0 ∈ (∅ ++ r)[r, h[r]] ∪ (h -- r), (∅ ++ r)[r, h[r]] ⊥ h -- r ⊦ |
(r0 = r ⊃ h[r];h[r0]) ≠ h[r0], r0 ∈ (∅ ++ r)[r, h[r]] ∪ (h -- r), r ∈ h, r0 ∈ h ⊦
Used simplifier rules: in-write: ⊦ r ∈ h[r0, o] ↔ r ∈ h; at-write: ⊦ h[r0, o][r] = (r = r0 ∧ r0 ∈ h ⊃ o;h[r]); in-emp: ⊦ ¬ r ∈ ∅; in-alloc: r0 ≠ null, ¬ r0 ∈ h ⊦ r ∈ h ++ r0 ↔ r = r0 ∨ r ∈ h; at-del: r ∈ h ⊦ r ≠ r0 → (h -- r0)[r] = h[r]; nonnull: ⊦ r ∈ h → r ≠ null; disj-singleton-write: r ≠ null ⊦ (∅ ++ r)[r, o] ⊥ h ↔ ¬ r ∈ h; in-del: ⊦ r ∈ h -- r0 ↔ r ≠ r0 ∧ r ∈ h;
| (r0 = r ⊃ h[r];h[r0]) ≠ h[r0], r0 ∈ (∅ ++ r)[r, h[r]] ∪ (h -- r), r ∈ h, r0 ∈ h ⊦ |
Used formulas: r0 = 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.