| r ≠ null ∧ ¬ r ∈ h ⊦ r0 ≠ r → ((h -- r0) ++ r)(r := o) = (h ++ r)(r := o) -- r0 |
((h -- r0) ++ r)(r := o) ≠ (h ++ r)(r := o) -- r0, r ≠ null, r0 ≠ r, ¬ r ∈ h ⊦
| ((h -- r0) ++ r)(r := o) ≠ (h ++ r)(r := o) -- r0, r ≠ null, r0 ≠ r, ¬ r ∈ h ⊦ |
((h -- r0) ++ r)(r := o) ≠ (h ++ r)(r := o) -- r0, r ≠ null, r0 ≠ r, ¬ r ∈ h ⊦
| ((h -- r0) ++ r)(r := o) ≠ (h ++ r)(r := o) -- r0, r ≠ null, r0 ≠ r, ¬ r ∈ h ⊦ |
⊦ h0 = h1 ↔ (∀ r. (r ∈ h0 ↔ r ∈ h1) ∧ (r ∈ h0 → h0(r) = h1(r)))
r ≠ null, r0 ≠ r, ¬ r ∈ h, ∃ r1. ¬ ( (r1 ∈ ((h -- r0) ++ r)(r := o) ↔ r1 ∈ (h ++ r)(r := o) -- r0) ∧ (r1 ∈ ((h -- r0) ++ r)(r := o) → ((h -- r0) ++ r)(r := o)(r1) = ((h ++ r)(r := o) -- r0)(r1))) ⊦
Used terms: (h ++ r)(r := o) -- r0, ((h -- r0) ++ r)(r := o)
| ⊦ h0 = h1 ↔ (∀ r. (r ∈ h0 ↔ r ∈ h1) ∧ (r ∈ h0 → h0(r) = h1(r))) |
| r ≠ null, r0 ≠ r, ¬ r ∈ h, ∃ r1. ¬ ( (r1 ∈ ((h -- r0) ++ r)(r := o) ↔ r1 ∈ (h ++ r)(r := o) -- r0) ∧ (r1 ∈ ((h -- r0) ++ r)(r := o) → ((h -- r0) ++ r)(r := o)(r1) = ((h ++ r)(r := o) -- r0)(r1))) ⊦ |
r ≠ null, r0 ≠ r, ¬ r ∈ h ⊦ (r1 = r ∨ r1 ≠ r0 ∧ r1 ∈ h → r1 ≠ r0 ∧ (r1 = r ∨ r1 ∈ h)) ∧ (r1 = r ∨ r1 ≠ r0 ∧ r1 ∈ h → (r1 = r ⊃ o;((h -- r0) ++ r)(r1)) = ((h ++ r)(r := o) -- r0)(r1))
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-del: ⊦ r ∈ h -- r0 ↔ r ≠ r0 ∧ r ∈ h; in-alloc: r0 ≠ null, ¬ r0 ∈ h ⊦ r ∈ h ++ r0 ↔ r = r0 ∨ r ∈ h;
| r ≠ null, r0 ≠ r, ¬ r ∈ h ⊦ (r1 = r ∨ r1 ≠ r0 ∧ r1 ∈ h → r1 ≠ r0 ∧ (r1 = r ∨ r1 ∈ h)) ∧ (r1 = r ∨ r1 ≠ r0 ∧ r1 ∈ h → (r1 = r ⊃ o;((h -- r0) ++ r)(r1)) = ((h ++ r)(r := o) -- r0)(r1)) |
r ≠ null, r0 ≠ r, ¬ r ∈ h, r1 = r ∨ r1 ≠ r0 ∧ r1 ∈ h ⊦ r1 ≠ r0 ∧ (r1 = r ∨ r1 ∈ h)
(r1 = r ⊃ o;((h -- r0) ++ r)(r1)) ≠ ((h ++ r)(r := o) -- r0)(r1), r ≠ null, r0 ≠ r, ¬ r ∈ h, r1 = r ∨ r1 ≠ r0 ∧ r1 ∈ h ⊦
| r ≠ null, r0 ≠ r, ¬ r ∈ h, r1 = r ∨ r1 ≠ r0 ∧ r1 ∈ h ⊦ r1 ≠ r0 ∧ (r1 = r ∨ r1 ∈ h) |
r ≠ null, r0 ≠ r, ¬ r ∈ h, r1 = r ∨ r1 ≠ r0 ∧ r1 ∈ h ⊦ r1 ≠ r0 ∧ (r1 = r ∨ r1 ∈ h)
| r ≠ null, r0 ≠ r, ¬ r ∈ h, r1 = r ∨ r1 ≠ r0 ∧ r1 ∈ h ⊦ r1 ≠ r0 ∧ (r1 = r ∨ r1 ∈ h) |
| (r1 = r ⊃ o;((h -- r0) ++ r)(r1)) ≠ ((h ++ r)(r := o) -- r0)(r1), r ≠ null, r0 ≠ r, ¬ r ∈ h, r1 = r ∨ r1 ≠ r0 ∧ r1 ∈ h ⊦ |
(r1 = r ⊃ o;((h -- r0) ++ r)(r1)) ≠ ((h ++ r)(r := o) -- r0)(r1), r ≠ null, r0 ≠ r, ¬ r ∈ h, r1 = r ∨ r1 ≠ r0 ∧ r1 ∈ h ⊦
| (r1 = r ⊃ o;((h -- r0) ++ r)(r1)) ≠ ((h ++ r)(r := o) -- r0)(r1), r ≠ null, r0 ≠ r, ¬ r ∈ h, r1 = r ∨ r1 ≠ r0 ∧ r1 ∈ h ⊦ |
Used simplifier rules: in-write: ⊦ r ∈ h(r0 := o) ↔ r ∈ h; in-alloc: r0 ≠ null, ¬ r0 ∈ h ⊦ r ∈ h ++ r0 ↔ r = r0 ∨ r ∈ h; at-del: r ∈ h ⊦ r ≠ r0 → (h -- r0)(r) = h(r); at-write-same-alloc: ⊦ ¬ r ∈ h ∧ r ≠ null → (h ++ r)(r := o)(r) = o; in-del: ⊦ r ∈ h -- r0 ↔ r ≠ r0 ∧ r ∈ h; in-write: ⊦ r ∈ h(r0 := o) ↔ r ∈ h; in-alloc: r0 ≠ null, ¬ r0 ∈ h ⊦ r ∈ h ++ r0 ↔ r = r0 ∨ r ∈ h; at-del: r ∈ h ⊦ r ≠ r0 → (h -- r0)(r) = h(r); at-write: ⊦ h(r0 := o)(r) = (r = r0 ∧ r0 ∈ h ⊃ o;h(r)); at-alloc: r ∈ h, r0 ≠ null, ¬ r0 ∈ h ⊦ (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.