| ⊦ (h2 |W | l) | true = [] → mem ⊕ (h1 + (W(t, l, v), true) ' + h2 | true) = (mem ⊕ (h1 + (W(t, l, v), false) ' + h2 | true))(l := v) |
(h2 |W | l) | true = [], mem ⊕ (h1 + (W(t, l, v), true) ' + h2 | true) ≠ (mem ⊕ (h1 + (W(t, l, v), false) ' + h2 | true))(l := v) ⊦
| (h2 |W | l) | true = [], mem ⊕ (h1 + (W(t, l, v), true) ' + h2 | true) ≠ (mem ⊕ (h1 + (W(t, l, v), false) ' + h2 | true))(l := v) ⊦ |
h2.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem ⊕ (h1.filter(._2) + (W(t, l, v), false) ' + h2.filter(._2)) ≠ (mem ⊕ (h1.filter(._2) + h2.filter(._2)))(l := v) ⊦
Used simplifier rules: restrict-W: ⊦ h |W = h.filter(λ vpe. vpe._1.W?); restrict-loc: ⊦ h | l = h.filter(λ vpe. vpe._1.l = l); restrict-true-true: ⊦ (e, true) ' + h | true = (e, true) ' + (h | true); overwrite-persist-one-write: ⊦ mem ⊕ (h1 + (W(t, l, v), true) ' + h2) = mem ⊕ (h1 + (W(t, l, v), false) ' + h2); restrict-b-append: ⊦ h + h0 | b = (h | b) + (h0 | b); restrict-true-false: ⊦ (e, false) ' + h | true = h | true; restrict-vp: ⊦ h | b = h.filter(λ vpe. vpe._2 ↔ b); a: ⊦ (x + y) + z = x + y + z; from specification list
| h2.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem ⊕ (h1.filter(._2) + (W(t, l, v), false) ' + h2.filter(._2)) ≠ (mem ⊕ (h1.filter(._2) + h2.filter(._2)))(l := v) ⊦ |
h2.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem ⊕ ([].filter(._2) + (W(t, l, v), false) ' + h2.filter(._2)) ≠ (mem ⊕ ([].filter(._2) + h2.filter(._2)))(l := v) ⊦
h2.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem ⊕ ((vpe + h).filter(._2) + (W(t, l, v), false) ' + h2.filter(._2)) ≠ (mem ⊕ ((vpe + h).filter(._2) + h2.filter(._2)))(l := v), ∀ h2, l, mem, t, v. ¬ ( h2.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem ⊕ (h.filter(._2) + (W(t, l, v), false) ' + h2.filter(._2)) ≠ (mem ⊕ (h.filter(._2) + h2.filter(._2)))(l := v)) ⊦
Used simplifier rules: List('a) freely generated by [], +;;
| h2.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem ⊕ ([].filter(._2) + (W(t, l, v), false) ' + h2.filter(._2)) ≠ (mem ⊕ ([].filter(._2) + h2.filter(._2)))(l := v) ⊦ |
h2.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem(l := v) ⊕ h2.filter(._2) ≠ (mem ⊕ h2.filter(._2))(l := v) ⊦
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 ⊦ [] + x = x; (s) ⊦ [].filter(p) = []; (s)
| h2.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem(l := v) ⊕ h2.filter(._2) ≠ (mem ⊕ h2.filter(._2))(l := v) ⊦ |
(vpe + h).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem(l := v) ⊕ (vpe + h).filter(._2) ≠ (mem ⊕ (vpe + h).filter(._2))(l := v), ∀ l, mem, v. ¬(h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem(l := v) ⊕ h.filter(._2) ≠ (mem ⊕ h.filter(._2))(l := v)) ⊦
Used simplifier rules: overwrite-base: ⊦ mem ⊕ [] = mem; List('a) freely generated by [], +;; ⊦ [].filter(p) = []; (s)
| (vpe + h).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem(l := v) ⊕ (vpe + h).filter(._2) ≠ (mem ⊕ (vpe + h).filter(._2))(l := v), ∀ l, mem, v. ¬(h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem(l := v) ⊕ h.filter(._2) ≠ (mem ⊕ h.filter(._2))(l := v)) ⊦ |
(vpe._1.W? ⊃ vpe ';[]).filter(λ vpe. vpe._1.l = l).filter(._2) = [], h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem(l := v) ⊕ ((vpe._2 ⊃ vpe ';[]) + h.filter(._2)) ≠ (mem ⊕ ((vpe._2 ⊃ vpe ';[]) + h.filter(._2)))(l := v), ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ (a ' + x).filter(p) = (p(a) ⊃ a ';[]) + x.filter(p); (s) ⊦ a + x = a ' + x; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ (x + y).filter(p) = x.filter(p) + y.filter(p); (s)
| (vpe._1.W? ⊃ vpe ';[]).filter(λ vpe. vpe._1.l = l).filter(._2) = [], h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem(l := v) ⊕ ((vpe._2 ⊃ vpe ';[]) + h.filter(._2)) ≠ (mem ⊕ ((vpe._2 ⊃ vpe ';[]) + h.filter(._2)))(l := v), ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], (e.W? ⊃ vpe ';[]).filter(λ vpe. vpe._1.l = l).filter(._2) = [], vpe = (e, boolvar), mem(l := v) ⊕ ((boolvar ⊃ vpe ';[]) + h.filter(._2)) ≠ (mem ⊕ ((boolvar ⊃ vpe ';[]) + h.filter(._2)))(l := v), ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦
Used terms: e, boolvar
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], (e.W? ⊃ vpe ';[]).filter(λ vpe. vpe._1.l = l).filter(._2) = [], vpe = (e, boolvar), mem(l := v) ⊕ ((boolvar ⊃ vpe ';[]) + h.filter(._2)) ≠ (mem ⊕ ((boolvar ⊃ vpe ';[]) + h.filter(._2)))(l := v), ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦ |
(e.W? ⊃ (e, boolvar) ';[]).filter(λ vpe. vpe._1.l = l).filter(._2) = [], h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem(l := v) ⊕ ((boolvar ⊃ (e, true) ';[]) + h.filter(._2)) ≠ (mem ⊕ ((boolvar ⊃ (e, true) ';[]) + h.filter(._2)))(l := v), ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦
| (e.W? ⊃ (e, boolvar) ';[]).filter(λ vpe. vpe._1.l = l).filter(._2) = [], h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem(l := v) ⊕ ((boolvar ⊃ (e, true) ';[]) + h.filter(._2)) ≠ (mem ⊕ ((boolvar ⊃ (e, true) ';[]) + h.filter(._2)))(l := v), ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], (e, boolvar) '.filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem(l := v) ⊕ ((boolvar ⊃ (e, true) ';[]) + h.filter(._2)) ≠ (mem ⊕ ((boolvar ⊃ (e, true) ';[]) + h.filter(._2)))(l := v), e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], [].filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem(l := v) ⊕ ((boolvar ⊃ (e, true) ';[]) + h.filter(._2)) ≠ (mem ⊕ ((boolvar ⊃ (e, true) ';[]) + h.filter(._2)))(l := v), ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], (e, boolvar) '.filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem(l := v) ⊕ ((boolvar ⊃ (e, true) ';[]) + h.filter(._2)) ≠ (mem ⊕ ((boolvar ⊃ (e, true) ';[]) + h.filter(._2)))(l := v), e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], (e.l = l ⊃ (e, boolvar) ';[]).filter(._2) = [], mem(l := v) ⊕ ((boolvar ⊃ (e, true) ';[]) + h.filter(._2)) ≠ (mem ⊕ ((boolvar ⊃ (e, true) ';[]) + h.filter(._2)))(l := v), e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦
Used simplifier rules: ⊦ a '.filter(p) = (p(a) ⊃ a ';[]); (s)
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], (e.l = l ⊃ (e, boolvar) ';[]).filter(._2) = [], mem(l := v) ⊕ ((boolvar ⊃ (e, true) ';[]) + h.filter(._2)) ≠ (mem ⊕ ((boolvar ⊃ (e, true) ';[]) + h.filter(._2)))(l := v), e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦ |
(l1 = l ⊃ (e, boolvar) ';[]).filter(._2) = [], h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], e = W(t, l1, v1), mem(l := v) ⊕ ((boolvar ⊃ (e, true) ';[]) + h.filter(._2)) ≠ (mem ⊕ ((boolvar ⊃ (e, true) ';[]) + h.filter(._2)))(l := v), e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦
Used simplifier rules: ⊦ e.W? → ((t = e.t ∧ l = e.l) ∧ v = e.v ↔ e = W(t, l, v)); (elim) Used terms: e, t, l1, v1
| (l1 = l ⊃ (e, boolvar) ';[]).filter(._2) = [], h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], e = W(t, l1, v1), mem(l := v) ⊕ ((boolvar ⊃ (e, true) ';[]) + h.filter(._2)) ≠ (mem ⊕ ((boolvar ⊃ (e, true) ';[]) + h.filter(._2)))(l := v), e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], (l1 = l ⊃ (W(t, l, v1), boolvar) ';[]).filter(._2) = [], mem(l := v) ⊕ ((boolvar ⊃ (W(t, l1, v1), true) ';[]) + h.filter(._2)) ≠ (mem ⊕ ((boolvar ⊃ (W(t, l1, v1), true) ';[]) + h.filter(._2)))(l := v), ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦
Used simplifier rules: ⊦ W(t, l, v).W?; (s)
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], (l1 = l ⊃ (W(t, l, v1), boolvar) ';[]).filter(._2) = [], mem(l := v) ⊕ ((boolvar ⊃ (W(t, l1, v1), true) ';[]) + h.filter(._2)) ≠ (mem ⊕ ((boolvar ⊃ (W(t, l1, v1), true) ';[]) + h.filter(._2)))(l := v), ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], (W(t, l, v1), boolvar) '.filter(._2) = [], l1 = l, mem(l := v) ⊕ ((boolvar ⊃ (W(t, l1, v1), true) ';[]) + h.filter(._2)) ≠ (mem ⊕ ((boolvar ⊃ (W(t, l1, v1), true) ';[]) + h.filter(._2)))(l := v), ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], [].filter(._2) = [], l1 ≠ l, mem(l := v) ⊕ ((boolvar ⊃ (W(t, l1, v1), true) ';[]) + h.filter(._2)) ≠ (mem ⊕ ((boolvar ⊃ (W(t, l1, v1), true) ';[]) + h.filter(._2)))(l := v), ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], (W(t, l, v1), boolvar) '.filter(._2) = [], l1 = l, mem(l := v) ⊕ ((boolvar ⊃ (W(t, l1, v1), true) ';[]) + h.filter(._2)) ≠ (mem ⊕ ((boolvar ⊃ (W(t, l1, v1), true) ';[]) + h.filter(._2)))(l := v), ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem(l := v) ⊕ h.filter(._2) ≠ (mem ⊕ h.filter(._2))(l := v), ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] + x = x; (s) ⊦ a ' ≠ []; (s) ⊦ a '.filter(p) = (p(a) ⊃ a ';[]); (s)
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem(l := v) ⊕ h.filter(._2) ≠ (mem ⊕ h.filter(._2))(l := v), ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦ |
Used terms: l, mem, v
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], [].filter(._2) = [], l1 ≠ l, mem(l := v) ⊕ ((boolvar ⊃ (W(t, l1, v1), true) ';[]) + h.filter(._2)) ≠ (mem ⊕ ((boolvar ⊃ (W(t, l1, v1), true) ';[]) + h.filter(._2)))(l := v), ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], l1 ≠ l, mem(l := v) ⊕ ((boolvar ⊃ (W(t, l1, v1), true) ';[]) + h.filter(._2)) ≠ (mem ⊕ ((boolvar ⊃ (W(t, l1, v1), true) ';[]) + h.filter(._2)))(l := v), ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦
Used simplifier rules: ⊦ [].filter(p) = []; (s)
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], l1 ≠ l, mem(l := v) ⊕ ((boolvar ⊃ (W(t, l1, v1), true) ';[]) + h.filter(._2)) ≠ (mem ⊕ ((boolvar ⊃ (W(t, l1, v1), true) ';[]) + h.filter(._2)))(l := v), ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], boolvar, l1 ≠ l, mem(l := v) ⊕ ((W(t, l1, v1), true) ' + h.filter(._2)) ≠ (mem ⊕ ((boolvar ⊃ (W(t, l1, v1), true) ';[]) + h.filter(._2)))(l := v), ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], ¬ boolvar, l1 ≠ l, mem(l := v) ⊕ ([] + h.filter(._2)) ≠ (mem ⊕ ((boolvar ⊃ (W(t, l1, v1), true) ';[]) + h.filter(._2)))(l := v), ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], boolvar, l1 ≠ l, mem(l := v) ⊕ ((W(t, l1, v1), true) ' + h.filter(._2)) ≠ (mem ⊕ ((boolvar ⊃ (W(t, l1, v1), true) ';[]) + h.filter(._2)))(l := v), ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], l1 ≠ l, mem(l := v)(l1 := v1) ⊕ h.filter(._2) ≠ (mem(l1 := v1) ⊕ h.filter(._2))(l := v), ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦
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
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], l1 ≠ l, mem(l := v)(l1 := v1) ⊕ h.filter(._2) ≠ (mem(l1 := v1) ⊕ h.filter(._2))(l := v), ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦ |
⊦ l0 ≠ l1 → mem(l0 := v0)(l1 := v1) = mem(l1 := v1)(l0 := v0)
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], l1 ≠ l, mem(l1 := v1)(l := v) ⊕ h.filter(._2) ≠ (mem(l1 := v1) ⊕ h.filter(._2))(l := v), ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦
Used terms: l1, mem, v1, l, v
| ⊦ l0 ≠ l1 → mem(l0 := v0)(l1 := v1) = mem(l1 := v1)(l0 := v0) |
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], l1 ≠ l, mem(l1 := v1)(l := v) ⊕ h.filter(._2) ≠ (mem(l1 := v1) ⊕ h.filter(._2))(l := v), ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦ |
Used terms: l, mem(l1 := v1), v
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], ¬ boolvar, l1 ≠ l, mem(l := v) ⊕ ([] + h.filter(._2)) ≠ (mem ⊕ ((boolvar ⊃ (W(t, l1, v1), true) ';[]) + h.filter(._2)))(l := v), ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], l1 ≠ l, mem(l := v) ⊕ h.filter(._2) ≠ (mem ⊕ h.filter(._2))(l := v), ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] + x = x; (s)
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], l1 ≠ l, mem(l := v) ⊕ h.filter(._2) ≠ (mem ⊕ h.filter(._2))(l := v), ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦ |
Used terms: l, mem, v
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], [].filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem(l := v) ⊕ ((boolvar ⊃ (e, true) ';[]) + h.filter(._2)) ≠ (mem ⊕ ((boolvar ⊃ (e, true) ';[]) + h.filter(._2)))(l := v), ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem(l := v) ⊕ ((boolvar ⊃ (e, true) ';[]) + h.filter(._2)) ≠ (mem ⊕ ((boolvar ⊃ (e, true) ';[]) + h.filter(._2)))(l := v), ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦
Used simplifier rules: ⊦ [].filter(p) = []; (s)
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem(l := v) ⊕ ((boolvar ⊃ (e, true) ';[]) + h.filter(._2)) ≠ (mem ⊕ ((boolvar ⊃ (e, true) ';[]) + h.filter(._2)))(l := v), ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], boolvar, mem(l := v) ⊕ ((e, true) ' + h.filter(._2)) ≠ (mem ⊕ ((boolvar ⊃ (e, true) ';[]) + h.filter(._2)))(l := v), ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], ¬ boolvar, mem(l := v) ⊕ ([] + h.filter(._2)) ≠ (mem ⊕ ((boolvar ⊃ (e, true) ';[]) + h.filter(._2)))(l := v), ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], boolvar, mem(l := v) ⊕ ((e, true) ' + h.filter(._2)) ≠ (mem ⊕ ((boolvar ⊃ (e, true) ';[]) + h.filter(._2)))(l := v), ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem(l := v) ⊕ ((e, true) ' + h.filter(._2)) ≠ (mem ⊕ ((e, true) ' + h.filter(._2)))(l := v), ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem(l := v) ⊕ ((e, true) ' + h.filter(._2)) ≠ (mem ⊕ ((e, true) ' + h.filter(._2)))(l := v), ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], ((mem(l := v) ⊕ ((e, true) ' + h.filter(._2))))(l0) ≠ (mem ⊕ ((e, true) ' + h.filter(._2)))(l := v)(l0), ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], ((mem(l := v) ⊕ ((e, true) ' + h.filter(._2))))(l0) ≠ (mem ⊕ ((e, true) ' + h.filter(._2)))(l := v)(l0), ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], ((mem(l := v) ⊕ ((e, true) ' + h.filter(._2))))(l0) ≠ (l = l0 ⊃ v;((mem ⊕ ((e, true) ' + h.filter(._2))))(l0)), ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], ((mem(l := v) ⊕ ((e, true) ' + h.filter(._2))))(l0) ≠ (l = l0 ⊃ v;((mem ⊕ ((e, true) ' + h.filter(._2))))(l0)), ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], l = l0, ((mem(l := v) ⊕ ((e, true) ' + h.filter(._2))))(l0) ≠ v, ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦
Used simplifier rules: at-overwrite-mem-update-other: ⊦ l ≠ l0 → ((mem(l0 := v) ⊕ h))(l) = ((mem ⊕ h))(l);
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], l = l0, ((mem(l := v) ⊕ ((e, true) ' + h.filter(._2))))(l0) ≠ v, ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) = [], ((mem(l0 := v) ⊕ ((e, true) ' + h.filter(._2))))(l0) ≠ v, ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) = [], ((mem(l0 := v) ⊕ ((e, true) ' + h.filter(._2))))(l0) ≠ v, ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦ |
⊦ (h | l)|W = [] → ((mem ⊕ h))(l) = mem(l)
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) = [], ((e, true) ' + h.filter(._2) | l0)|W ≠ [], ((mem(l0 := v) ⊕ ((e, true) ' + h.filter(._2))))(l0) ≠ v, ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦
Used simplifier rules: restrict-l-append: ⊦ h + h0 | l0 = (h | l0) + (h0 | l0); restrict-l-one: ⊦ vpe ' | l = (vpe._1.l = l ⊃ vpe ';[]); restrict-loc: ⊦ h | l = h.filter(λ vpe. vpe._1.l = l); restrict-W-append: ⊦ (h + h0)|W = h |W + h0 |W; restrict-W: ⊦ h |W = h.filter(λ vpe. vpe._1.W?); ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: mem(l0 := v), (e, true) ' + h.filter(._2), l0
| ⊦ (h | l)|W = [] → ((mem ⊕ h))(l) = mem(l) |
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) = [], ((e, true) ' + h.filter(._2) | l0)|W ≠ [], ((mem(l0 := v) ⊕ ((e, true) ' + h.filter(._2))))(l0) ≠ v, ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) = [], ((mem(l0 := v) ⊕ ((e, true) ' + h.filter(._2))))(l0) ≠ v, ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦ (e.l = l0 ⊃ (e, true) ';[]).filter(λ vpe. vpe._1.W?) = [] ∧ h.filter(._2).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.W?) = []
Used simplifier rules: restrict-l-append: ⊦ h + h0 | l0 = (h | l0) + (h0 | l0); restrict-l-one: ⊦ vpe ' | l = (vpe._1.l = l ⊃ vpe ';[]); restrict-loc: ⊦ h | l = h.filter(λ vpe. vpe._1.l = l); restrict-W-append: ⊦ (h + h0)|W = h |W + h0 |W; restrict-W: ⊦ h |W = h.filter(λ vpe. vpe._1.W?); a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ x + y = [] ↔ x = [] ∧ y = []; (s)
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) = [], ((mem(l0 := v) ⊕ ((e, true) ' + h.filter(._2))))(l0) ≠ v, ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦ (e.l = l0 ⊃ (e, true) ';[]).filter(λ vpe. vpe._1.W?) = [] ∧ h.filter(._2).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.W?) = [] |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) = [], (e.l = l0 ⊃ (e, true) ';[]).filter(λ vpe. vpe._1.W?) ≠ [], ((mem(l0 := v) ⊕ ((e, true) ' + h.filter(._2))))(l0) ≠ v, ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) = [], h.filter(._2).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.W?) ≠ [], ((mem(l0 := v) ⊕ ((e, true) ' + h.filter(._2))))(l0) ≠ v, ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) = [], (e.l = l0 ⊃ (e, true) ';[]).filter(λ vpe. vpe._1.W?) ≠ [], ((mem(l0 := v) ⊕ ((e, true) ' + h.filter(._2))))(l0) ≠ v, ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦ |
Used simplifier rules: ⊦ [].filter(p) = []; (s) ⊦ a '.filter(p) = (p(a) ⊃ a ';[]); (s) Used formulas: e.l = l0
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) = [], h.filter(._2).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.W?) ≠ [], ((mem(l0 := v) ⊕ ((e, true) ' + h.filter(._2))))(l0) ≠ v, ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦ |
⊦ x = [] ↔ ¬(∃ a. a ∈ x)
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) = [], ((mem(l0 := v) ⊕ ((e, true) ' + h.filter(._2))))(l0) ≠ v, ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0), ∃ a. a ∈ h.filter(._2).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.W?) ⊦
Used terms: h.filter(._2).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.W?)
| ⊦ x = [] ↔ ¬(∃ a. a ∈ x) |
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) = [], ((mem(l0 := v) ⊕ ((e, true) ' + h.filter(._2))))(l0) ≠ v, ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0), ∃ a. a ∈ h.filter(._2).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.W?) ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe0. vpe0._1.l = vpe._1.l).filter(._2) = [], ((mem(vpe._1.l := v) ⊕ ((e, true) ' + h.filter(._2))))(vpe._1.l) ≠ v, vpe._1.W?, vpe ∈ h, ¬ e.W?, vpe._2, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦
Used simplifier rules: ⊦ a ∈ x.filter(p) ↔ a ∈ x ∧ p(a); (s)
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe0. vpe0._1.l = vpe._1.l).filter(._2) = [], ((mem(vpe._1.l := v) ⊕ ((e, true) ' + h.filter(._2))))(vpe._1.l) ≠ v, vpe._1.W?, vpe ∈ h, ¬ e.W?, vpe._2, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe0. vpe0._1.l = e0.l).filter(._2) = [], boolvar, vpe = (e0, boolvar), ((mem(e0.l := v) ⊕ ((e, true) ' + h.filter(._2))))(e0.l) ≠ v, e0.W?, vpe ∈ h, ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦
Used terms: e0, boolvar
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe0. vpe0._1.l = e0.l).filter(._2) = [], boolvar, vpe = (e0, boolvar), ((mem(e0.l := v) ⊕ ((e, true) ' + h.filter(._2))))(e0.l) ≠ v, e0.W?, vpe ∈ h, ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe0. vpe0._1.l = e0.l).filter(._2) = [], ((mem(e0.l := v) ⊕ ((e, true) ' + h.filter(._2))))(e0.l) ≠ v, e0.W?, (e0, true) ∈ h, ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe0. vpe0._1.l = e0.l).filter(._2) = [], ((mem(e0.l := v) ⊕ ((e, true) ' + h.filter(._2))))(e0.l) ≠ v, e0.W?, (e0, true) ∈ h, ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe0. vpe0._1.l = l).filter(._2) = [], e0 = W(t, l, v1), ((mem(l := v) ⊕ ((e, true) ' + h.filter(._2))))(l) ≠ v, e0.W?, (e0, true) ∈ h, ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦
Used simplifier rules: ⊦ e.W? → ((t = e.t ∧ l = e.l) ∧ v = e.v ↔ e = W(t, l, v)); (elim) Used terms: e0, t, l, v1
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe0. vpe0._1.l = l).filter(._2) = [], e0 = W(t, l, v1), ((mem(l := v) ⊕ ((e, true) ' + h.filter(._2))))(l) ≠ v, e0.W?, (e0, true) ∈ h, ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe0. vpe0._1.l = l).filter(._2) = [], ((mem(l := v) ⊕ ((e, true) ' + h.filter(._2))))(l) ≠ v, (W(t, l, v1), true) ∈ h, ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦
Used simplifier rules: ⊦ W(t, l, v).W?; (s)
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe0. vpe0._1.l = l).filter(._2) = [], ((mem(l := v) ⊕ ((e, true) ' + h.filter(._2))))(l) ≠ v, (W(t, l, v1), true) ∈ h, ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦ |
⊦ x = [] ↔ ¬(∃ a. a ∈ x)
((mem(l := v) ⊕ ((e, true) ' + h.filter(._2))))(l) ≠ v, (W(t, l, v1), true) ∈ h, ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0), ∀ a. ¬ a ∈ h.filter(λ vpe. vpe._1.W?).filter(λ vpe0. vpe0._1.l = l).filter(._2) ⊦
Used terms: h.filter(λ vpe. vpe._1.W?).filter(λ vpe0. vpe0._1.l = l).filter(._2)
| ⊦ x = [] ↔ ¬(∃ a. a ∈ x) |
| ((mem(l := v) ⊕ ((e, true) ' + h.filter(._2))))(l) ≠ v, (W(t, l, v1), true) ∈ h, ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0), ∀ a. ¬ a ∈ h.filter(λ vpe. vpe._1.W?).filter(λ vpe0. vpe0._1.l = l).filter(._2) ⊦ |
((mem(l := v) ⊕ ((e, true) ' + h.filter(._2))))(l) ≠ v, (W(t, l, v1), true) ∈ h, ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0), ∀ a. ¬ a ∈ h ∨ ¬ a._1.W? ∨ a._1.l ≠ l ∨ ¬ a._2 ⊦
Used simplifier rules: ⊦ a ∈ x.filter(p) ↔ a ∈ x ∧ p(a); (s)
| ((mem(l := v) ⊕ ((e, true) ' + h.filter(._2))))(l) ≠ v, (W(t, l, v1), true) ∈ h, ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0), ∀ a. ¬ a ∈ h ∨ ¬ a._1.W? ∨ a._1.l ≠ l ∨ ¬ a._2 ⊦ |
Used simplifier rules: ⊦ W(t, l, v).W?; (s) ⊦ W(t, l, v).l = l; (s) Used terms: (W(t, l, v1), true)
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], ¬ boolvar, mem(l := v) ⊕ ([] + h.filter(._2)) ≠ (mem ⊕ ((boolvar ⊃ (e, true) ';[]) + h.filter(._2)))(l := v), ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem(l := v) ⊕ h.filter(._2) ≠ (mem ⊕ h.filter(._2))(l := v), ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] + x = x; (s)
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem(l := v) ⊕ h.filter(._2) ≠ (mem ⊕ h.filter(._2))(l := v), ¬ e.W?, ∀ l0, mem0, v0. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0(l0 := v0) ⊕ h.filter(._2) = (mem0 ⊕ h.filter(._2))(l0 := v0) ⊦ |
Used terms: l, mem, v
| h2.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem ⊕ ((vpe + h).filter(._2) + (W(t, l, v), false) ' + h2.filter(._2)) ≠ (mem ⊕ ((vpe + h).filter(._2) + h2.filter(._2)))(l := v), ∀ h2, l, mem, t, v. ¬ ( h2.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem ⊕ (h.filter(._2) + (W(t, l, v), false) ' + h2.filter(._2)) ≠ (mem ⊕ (h.filter(._2) + h2.filter(._2)))(l := v)) ⊦ |
h2.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem ⊕ (((vpe._2 ⊃ vpe ';[]) + h.filter(._2)) + (W(t, l, v), false) ' + h2.filter(._2)) ≠ (mem ⊕ (((vpe._2 ⊃ vpe ';[]) + h.filter(._2)) + h2.filter(._2)))(l := v), ∀ h0, l0, mem0, t0, v0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0 ⊕ (h.filter(._2) + (W(t0, l0, v0), false) ' + h0.filter(._2)) = (mem0 ⊕ (h.filter(._2) + h0.filter(._2)))(l0 := v0) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ (a ' + x).filter(p) = (p(a) ⊃ a ';[]) + x.filter(p); (s) ⊦ a + x = a ' + x; (s)
| h2.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem ⊕ (((vpe._2 ⊃ vpe ';[]) + h.filter(._2)) + (W(t, l, v), false) ' + h2.filter(._2)) ≠ (mem ⊕ (((vpe._2 ⊃ vpe ';[]) + h.filter(._2)) + h2.filter(._2)))(l := v), ∀ h0, l0, mem0, t0, v0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0 ⊕ (h.filter(._2) + (W(t0, l0, v0), false) ' + h0.filter(._2)) = (mem0 ⊕ (h.filter(._2) + h0.filter(._2)))(l0 := v0) ⊦ |
h2.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], vpe = (e, boolvar), mem ⊕ (((boolvar ⊃ vpe ';[]) + h.filter(._2)) + (W(t, l, v), false) ' + h2.filter(._2)) ≠ (mem ⊕ (((boolvar ⊃ vpe ';[]) + h.filter(._2)) + h2.filter(._2)))(l := v), ∀ h0, l0, mem0, t0, v0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0 ⊕ (h.filter(._2) + (W(t0, l0, v0), false) ' + h0.filter(._2)) = (mem0 ⊕ (h.filter(._2) + h0.filter(._2)))(l0 := v0) ⊦
Used terms: e, boolvar
| h2.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], vpe = (e, boolvar), mem ⊕ (((boolvar ⊃ vpe ';[]) + h.filter(._2)) + (W(t, l, v), false) ' + h2.filter(._2)) ≠ (mem ⊕ (((boolvar ⊃ vpe ';[]) + h.filter(._2)) + h2.filter(._2)))(l := v), ∀ h0, l0, mem0, t0, v0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0 ⊕ (h.filter(._2) + (W(t0, l0, v0), false) ' + h0.filter(._2)) = (mem0 ⊕ (h.filter(._2) + h0.filter(._2)))(l0 := v0) ⊦ |
h2.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem ⊕ ((boolvar ⊃ (e, true) ';[]) + h.filter(._2) + (W(t, l, v), false) ' + h2.filter(._2)) ≠ (mem ⊕ ((boolvar ⊃ (e, true) ';[]) + h.filter(._2) + h2.filter(._2)))(l := v), ∀ h0, l0, mem0, t0, v0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0 ⊕ (h.filter(._2) + (W(t0, l0, v0), false) ' + h0.filter(._2)) = (mem0 ⊕ (h.filter(._2) + h0.filter(._2)))(l0 := v0) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list
| h2.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem ⊕ ((boolvar ⊃ (e, true) ';[]) + h.filter(._2) + (W(t, l, v), false) ' + h2.filter(._2)) ≠ (mem ⊕ ((boolvar ⊃ (e, true) ';[]) + h.filter(._2) + h2.filter(._2)))(l := v), ∀ h0, l0, mem0, t0, v0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0 ⊕ (h.filter(._2) + (W(t0, l0, v0), false) ' + h0.filter(._2)) = (mem0 ⊕ (h.filter(._2) + h0.filter(._2)))(l0 := v0) ⊦ |
h2.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], boolvar, mem ⊕ ((e, true) ' + h.filter(._2) + (W(t, l, v), false) ' + h2.filter(._2)) ≠ (mem ⊕ ((boolvar ⊃ (e, true) ';[]) + h.filter(._2) + h2.filter(._2)))(l := v), ∀ h0, l0, mem0, t0, v0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0 ⊕ (h.filter(._2) + (W(t0, l0, v0), false) ' + h0.filter(._2)) = (mem0 ⊕ (h.filter(._2) + h0.filter(._2)))(l0 := v0) ⊦
h2.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], ¬ boolvar, mem ⊕ ([] + h.filter(._2) + (W(t, l, v), false) ' + h2.filter(._2)) ≠ (mem ⊕ ((boolvar ⊃ (e, true) ';[]) + h.filter(._2) + h2.filter(._2)))(l := v), ∀ h0, l0, mem0, t0, v0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0 ⊕ (h.filter(._2) + (W(t0, l0, v0), false) ' + h0.filter(._2)) = (mem0 ⊕ (h.filter(._2) + h0.filter(._2)))(l0 := v0) ⊦
| h2.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], boolvar, mem ⊕ ((e, true) ' + h.filter(._2) + (W(t, l, v), false) ' + h2.filter(._2)) ≠ (mem ⊕ ((boolvar ⊃ (e, true) ';[]) + h.filter(._2) + h2.filter(._2)))(l := v), ∀ h0, l0, mem0, t0, v0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0 ⊕ (h.filter(._2) + (W(t0, l0, v0), false) ' + h0.filter(._2)) = (mem0 ⊕ (h.filter(._2) + h0.filter(._2)))(l0 := v0) ⊦ |
h2.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem ⊕ ((e, true) ' + h.filter(._2) + (W(t, l, v), false) ' + h2.filter(._2)) ≠ (mem ⊕ ((e, true) ' + h.filter(._2) + h2.filter(._2)))(l := v), ∀ h0, l0, mem0, t0, v0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0 ⊕ (h.filter(._2) + (W(t0, l0, v0), false) ' + h0.filter(._2)) = (mem0 ⊕ (h.filter(._2) + h0.filter(._2)))(l0 := v0) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list
| h2.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem ⊕ ((e, true) ' + h.filter(._2) + (W(t, l, v), false) ' + h2.filter(._2)) ≠ (mem ⊕ ((e, true) ' + h.filter(._2) + h2.filter(._2)))(l := v), ∀ h0, l0, mem0, t0, v0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0 ⊕ (h.filter(._2) + (W(t0, l0, v0), false) ' + h0.filter(._2)) = (mem0 ⊕ (h.filter(._2) + h0.filter(._2)))(l0 := v0) ⊦ |
h2.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], e = R(t1, l1, v1), mem ⊕ ((e, true) ' + h.filter(._2) + (W(t, l, v), false) ' + h2.filter(._2)) ≠ (mem ⊕ ((e, true) ' + h.filter(._2) + h2.filter(._2)))(l := v), ∀ h0, l0, mem0, t0, v0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0 ⊕ (h.filter(._2) + (W(t0, l0, v0), false) ' + h0.filter(._2)) = (mem0 ⊕ (h.filter(._2) + h0.filter(._2)))(l0 := v0) ⊦
h2.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], e = W(t1, l1, v1), mem ⊕ ((e, true) ' + h.filter(._2) + (W(t, l, v), false) ' + h2.filter(._2)) ≠ (mem ⊕ ((e, true) ' + h.filter(._2) + h2.filter(._2)))(l := v), ∀ h0, l0, mem0, t0, v0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0 ⊕ (h.filter(._2) + (W(t0, l0, v0), false) ' + h0.filter(._2)) = (mem0 ⊕ (h.filter(._2) + h0.filter(._2)))(l0 := v0) ⊦
Used simplifier rules: RWevent freely generated by R, W;;
| h2.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], e = R(t1, l1, v1), mem ⊕ ((e, true) ' + h.filter(._2) + (W(t, l, v), false) ' + h2.filter(._2)) ≠ (mem ⊕ ((e, true) ' + h.filter(._2) + h2.filter(._2)))(l := v), ∀ h0, l0, mem0, t0, v0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0 ⊕ (h.filter(._2) + (W(t0, l0, v0), false) ' + h0.filter(._2)) = (mem0 ⊕ (h.filter(._2) + h0.filter(._2)))(l0 := v0) ⊦ |
h2.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem ⊕ (h.filter(._2) + (W(t, l, v), false) ' + h2.filter(._2)) ≠ (mem ⊕ (h.filter(._2) + h2.filter(._2)))(l := v), ∀ h0, l0, mem0, t0, v0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0 ⊕ (h.filter(._2) + (W(t0, l0, v0), false) ' + h0.filter(._2)) = (mem0 ⊕ (h.filter(._2) + h0.filter(._2)))(l0 := v0) ⊦
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
| h2.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem ⊕ (h.filter(._2) + (W(t, l, v), false) ' + h2.filter(._2)) ≠ (mem ⊕ (h.filter(._2) + h2.filter(._2)))(l := v), ∀ h0, l0, mem0, t0, v0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0 ⊕ (h.filter(._2) + (W(t0, l0, v0), false) ' + h0.filter(._2)) = (mem0 ⊕ (h.filter(._2) + h0.filter(._2)))(l0 := v0) ⊦ |
Used terms: h2, l, mem, t, v
| h2.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], e = W(t1, l1, v1), mem ⊕ ((e, true) ' + h.filter(._2) + (W(t, l, v), false) ' + h2.filter(._2)) ≠ (mem ⊕ ((e, true) ' + h.filter(._2) + h2.filter(._2)))(l := v), ∀ h0, l0, mem0, t0, v0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0 ⊕ (h.filter(._2) + (W(t0, l0, v0), false) ' + h0.filter(._2)) = (mem0 ⊕ (h.filter(._2) + h0.filter(._2)))(l0 := v0) ⊦ |
h2.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem(l1 := v1) ⊕ (h.filter(._2) + (W(t, l, v), false) ' + h2.filter(._2)) ≠ (mem(l1 := v1) ⊕ (h.filter(._2) + h2.filter(._2)))(l := v), ∀ h0, l0, mem0, t0, v0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0 ⊕ (h.filter(._2) + (W(t0, l0, v0), false) ' + h0.filter(._2)) = (mem0 ⊕ (h.filter(._2) + h0.filter(._2)))(l0 := v0) ⊦
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
| h2.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem(l1 := v1) ⊕ (h.filter(._2) + (W(t, l, v), false) ' + h2.filter(._2)) ≠ (mem(l1 := v1) ⊕ (h.filter(._2) + h2.filter(._2)))(l := v), ∀ h0, l0, mem0, t0, v0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0 ⊕ (h.filter(._2) + (W(t0, l0, v0), false) ' + h0.filter(._2)) = (mem0 ⊕ (h.filter(._2) + h0.filter(._2)))(l0 := v0) ⊦ |
Used terms: h2, l, mem(l1 := v1), t, v
| h2.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], ¬ boolvar, mem ⊕ ([] + h.filter(._2) + (W(t, l, v), false) ' + h2.filter(._2)) ≠ (mem ⊕ ((boolvar ⊃ (e, true) ';[]) + h.filter(._2) + h2.filter(._2)))(l := v), ∀ h0, l0, mem0, t0, v0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0 ⊕ (h.filter(._2) + (W(t0, l0, v0), false) ' + h0.filter(._2)) = (mem0 ⊕ (h.filter(._2) + h0.filter(._2)))(l0 := v0) ⊦ |
h2.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem ⊕ (h.filter(._2) + (W(t, l, v), false) ' + h2.filter(._2)) ≠ (mem ⊕ (h.filter(._2) + h2.filter(._2)))(l := v), ∀ h0, l0, mem0, t0, v0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0 ⊕ (h.filter(._2) + (W(t0, l0, v0), false) ' + h0.filter(._2)) = (mem0 ⊕ (h.filter(._2) + h0.filter(._2)))(l0 := v0) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] + x = x; (s)
| h2.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem ⊕ (h.filter(._2) + (W(t, l, v), false) ' + h2.filter(._2)) ≠ (mem ⊕ (h.filter(._2) + h2.filter(._2)))(l := v), ∀ h0, l0, mem0, t0, v0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(._2) ≠ [] ∨ mem0 ⊕ (h.filter(._2) + (W(t0, l0, v0), false) ' + h0.filter(._2)) = (mem0 ⊕ (h.filter(._2) + h0.filter(._2)))(l0 := v0) ⊦ |
Used terms: h2, l, mem, t, 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.