| ⊦ (h | l)|W = [] → ((mem ⊕ h))(l) = mem(l) |
(h | l)|W = [], ((mem ⊕ h))(l) ≠ mem(l) ⊦
| (h | l)|W = [], ((mem ⊕ h))(l) ≠ mem(l) ⊦ |
h.filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.W?) = [], ((mem ⊕ h))(l) ≠ mem(l) ⊦
Used simplifier rules: restrict-loc: ⊦ h | l = h.filter(λ vpe. vpe._1.l = l); restrict-W: ⊦ h |W = h.filter(λ vpe. vpe._1.W?);
| h.filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.W?) = [], ((mem ⊕ h))(l) ≠ mem(l) ⊦ |
(vpe + h0).filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.W?) = [], ((mem ⊕ (vpe + h0)))(l) ≠ mem(l), ∀ l, mem. ¬(h0.filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.W?) = [] ∧ ((mem ⊕ h0))(l) ≠ mem(l)) ⊦
Used simplifier rules: overwrite-base: ⊦ mem ⊕ [] = mem; List('a) freely generated by [], +;; ⊦ [].filter(p) = []; (s)
| (vpe + h0).filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.W?) = [], ((mem ⊕ (vpe + h0)))(l) ≠ mem(l), ∀ l, mem. ¬(h0.filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.W?) = [] ∧ ((mem ⊕ h0))(l) ≠ mem(l)) ⊦ |
(vpe._1.l = l ⊃ vpe ';[]).filter(λ vpe. vpe._1.W?) = [], h0.filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.W?) = [], ((mem ⊕ (vpe ' + h0)))(l) ≠ mem(l), ∀ l0, mem0. h0.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.W?) ≠ [] ∨ ((mem0 ⊕ h0))(l0) = mem0(l0) ⊦
Used simplifier rules: ⊦ a + x = a ' + x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ (x + y).filter(p) = x.filter(p) + y.filter(p); (s) ⊦ (a ' + x).filter(p) = (p(a) ⊃ a ';[]) + x.filter(p); (s)
| (vpe._1.l = l ⊃ vpe ';[]).filter(λ vpe. vpe._1.W?) = [], h0.filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.W?) = [], ((mem ⊕ (vpe ' + h0)))(l) ≠ mem(l), ∀ l0, mem0. h0.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.W?) ≠ [] ∨ ((mem0 ⊕ h0))(l0) = mem0(l0) ⊦ |
h0.filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.W?) = [], (e.l = l ⊃ vpe ';[]).filter(λ vpe. vpe._1.W?) = [], vpe = (e, boolvar), ((mem ⊕ (vpe ' + h0)))(l) ≠ mem(l), ∀ l0, mem0. h0.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.W?) ≠ [] ∨ ((mem0 ⊕ h0))(l0) = mem0(l0) ⊦
Used terms: e, boolvar
| h0.filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.W?) = [], (e.l = l ⊃ vpe ';[]).filter(λ vpe. vpe._1.W?) = [], vpe = (e, boolvar), ((mem ⊕ (vpe ' + h0)))(l) ≠ mem(l), ∀ l0, mem0. h0.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.W?) ≠ [] ∨ ((mem0 ⊕ h0))(l0) = mem0(l0) ⊦ |
(e.l = l ⊃ (e, boolvar) ';[]).filter(λ vpe. vpe._1.W?) = [], h0.filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.W?) = [], ((mem ⊕ ((e, boolvar) ' + h0)))(l) ≠ mem(l), ∀ l0, mem0. h0.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.W?) ≠ [] ∨ ((mem0 ⊕ h0))(l0) = mem0(l0) ⊦
| (e.l = l ⊃ (e, boolvar) ';[]).filter(λ vpe. vpe._1.W?) = [], h0.filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.W?) = [], ((mem ⊕ ((e, boolvar) ' + h0)))(l) ≠ mem(l), ∀ l0, mem0. h0.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.W?) ≠ [] ∨ ((mem0 ⊕ h0))(l0) = mem0(l0) ⊦ |
h0.filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.W?) = [], (e, boolvar) '.filter(λ vpe. vpe._1.W?) = [], e.l = l, ((mem ⊕ ((e, boolvar) ' + h0)))(l) ≠ mem(l), ∀ l0, mem0. h0.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.W?) ≠ [] ∨ ((mem0 ⊕ h0))(l0) = mem0(l0) ⊦
h0.filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.W?) = [], [].filter(λ vpe. vpe._1.W?) = [], e.l ≠ l, ((mem ⊕ ((e, boolvar) ' + h0)))(l) ≠ mem(l), ∀ l0, mem0. h0.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.W?) ≠ [] ∨ ((mem0 ⊕ h0))(l0) = mem0(l0) ⊦
| h0.filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.W?) = [], (e, boolvar) '.filter(λ vpe. vpe._1.W?) = [], e.l = l, ((mem ⊕ ((e, boolvar) ' + h0)))(l) ≠ mem(l), ∀ l0, mem0. h0.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.W?) ≠ [] ∨ ((mem0 ⊕ h0))(l0) = mem0(l0) ⊦ |
h0.filter(λ vpe. vpe._1.l = e.l).filter(λ vpe. vpe._1.W?) = [], ((mem ⊕ ((e, boolvar) ' + h0)))(e.l) ≠ mem(e.l), ¬ e.W?, ∀ l0, mem0. h0.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.W?) ≠ [] ∨ ((mem0 ⊕ h0))(l0) = mem0(l0) ⊦
Used simplifier rules: ⊦ a ' ≠ []; (s) ⊦ a '.filter(p) = (p(a) ⊃ a ';[]); (s)
| h0.filter(λ vpe. vpe._1.l = e.l).filter(λ vpe. vpe._1.W?) = [], ((mem ⊕ ((e, boolvar) ' + h0)))(e.l) ≠ mem(e.l), ¬ e.W?, ∀ l0, mem0. h0.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.W?) ≠ [] ∨ ((mem0 ⊕ h0))(l0) = mem0(l0) ⊦ |
h0.filter(λ vpe. vpe._1.l = e.l).filter(λ vpe. vpe._1.W?) = [], e = R(t, l, v), ((mem ⊕ ((e, boolvar) ' + h0)))(e.l) ≠ mem(e.l), ¬ e.W?, ∀ l0, mem0. h0.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.W?) ≠ [] ∨ ((mem0 ⊕ h0))(l0) = mem0(l0) ⊦
Used simplifier rules: overwrite-rec-write: ⊦ mem ⊕ ((W(t, l, v), b) ' + h) = mem(l := v) ⊕ h; RWevent freely generated by R, W;; a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ W(t, l, v).l = l; (s) ⊦ W(t, l, v).W?; (s)
| h0.filter(λ vpe. vpe._1.l = e.l).filter(λ vpe. vpe._1.W?) = [], e = R(t, l, v), ((mem ⊕ ((e, boolvar) ' + h0)))(e.l) ≠ mem(e.l), ¬ e.W?, ∀ l0, mem0. h0.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.W?) ≠ [] ∨ ((mem0 ⊕ h0))(l0) = mem0(l0) ⊦ |
h0.filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.W?) = [], ((mem ⊕ h0))(l) ≠ mem(l), ∀ l0, mem0. h0.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.W?) ≠ [] ∨ ((mem0 ⊕ h0))(l0) = mem0(l0) ⊦
Used simplifier rules: overwrite-rec-read: ⊦ mem ⊕ ((R(t, l, v), b) ' + h) = mem ⊕ h; ⊦ ¬ R(t, l, v).W?; (s) ⊦ R(t, l, v).l = l; (s) a: ⊦ (x + y) + z = x + y + z; from specification list
| h0.filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.W?) = [], ((mem ⊕ h0))(l) ≠ mem(l), ∀ l0, mem0. h0.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.W?) ≠ [] ∨ ((mem0 ⊕ h0))(l0) = mem0(l0) ⊦ |
Used terms: l, mem
| h0.filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.W?) = [], [].filter(λ vpe. vpe._1.W?) = [], e.l ≠ l, ((mem ⊕ ((e, boolvar) ' + h0)))(l) ≠ mem(l), ∀ l0, mem0. h0.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.W?) ≠ [] ∨ ((mem0 ⊕ h0))(l0) = mem0(l0) ⊦ |
h0.filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.W?) = [], e.l ≠ l, ((mem ⊕ ((e, boolvar) ' + h0)))(l) ≠ mem(l), ∀ l0, mem0. h0.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.W?) ≠ [] ∨ ((mem0 ⊕ h0))(l0) = mem0(l0) ⊦
Used simplifier rules: ⊦ [].filter(p) = []; (s)
| h0.filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.W?) = [], e.l ≠ l, ((mem ⊕ ((e, boolvar) ' + h0)))(l) ≠ mem(l), ∀ l0, mem0. h0.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.W?) ≠ [] ∨ ((mem0 ⊕ h0))(l0) = mem0(l0) ⊦ |
h0.filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.W?) = [], e = R(t, l1, v), e.l ≠ l, ((mem ⊕ ((e, boolvar) ' + h0)))(l) ≠ mem(l), ∀ l0, mem0. h0.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.W?) ≠ [] ∨ ((mem0 ⊕ h0))(l0) = mem0(l0) ⊦
h0.filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.W?) = [], e = W(t, l1, v), e.l ≠ l, ((mem ⊕ ((e, boolvar) ' + h0)))(l) ≠ mem(l), ∀ l0, mem0. h0.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.W?) ≠ [] ∨ ((mem0 ⊕ h0))(l0) = mem0(l0) ⊦
Used simplifier rules: RWevent freely generated by R, W;;
| h0.filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.W?) = [], e = R(t, l1, v), e.l ≠ l, ((mem ⊕ ((e, boolvar) ' + h0)))(l) ≠ mem(l), ∀ l0, mem0. h0.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.W?) ≠ [] ∨ ((mem0 ⊕ h0))(l0) = mem0(l0) ⊦ |
h0.filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.W?) = [], l1 ≠ l, ((mem ⊕ h0))(l) ≠ mem(l), ∀ l0, mem0. h0.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.W?) ≠ [] ∨ ((mem0 ⊕ h0))(l0) = mem0(l0) ⊦
Used simplifier rules: overwrite-rec-read: ⊦ mem ⊕ ((R(t, l, v), b) ' + h) = mem ⊕ h; a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ R(t, l, v).l = l; (s)
| h0.filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.W?) = [], l1 ≠ l, ((mem ⊕ h0))(l) ≠ mem(l), ∀ l0, mem0. h0.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.W?) ≠ [] ∨ ((mem0 ⊕ h0))(l0) = mem0(l0) ⊦ |
Used terms: l, mem
| h0.filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.W?) = [], e = W(t, l1, v), e.l ≠ l, ((mem ⊕ ((e, boolvar) ' + h0)))(l) ≠ mem(l), ∀ l0, mem0. h0.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.W?) ≠ [] ∨ ((mem0 ⊕ h0))(l0) = mem0(l0) ⊦ |
h0.filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.W?) = [], l1 ≠ l, ((mem(l1 := v) ⊕ h0))(l) ≠ mem(l), ∀ l0, mem0. h0.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.W?) ≠ [] ∨ ((mem0 ⊕ h0))(l0) = mem0(l0) ⊦
Used simplifier rules: overwrite-rec-write: ⊦ mem ⊕ ((W(t, l, v), b) ' + h) = mem(l := v) ⊕ h; a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ W(t, l, v).l = l; (s)
| h0.filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.W?) = [], l1 ≠ l, ((mem(l1 := v) ⊕ h0))(l) ≠ mem(l), ∀ l0, mem0. h0.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.W?) ≠ [] ∨ ((mem0 ⊕ h0))(l0) = mem0(l0) ⊦ |
Used terms: l, mem(l1 := v)
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.