| ⊦ (h2 |W | l) | true = [] → mem ⊕ (h1 + (W(t, l, v), b) ' + (h2 | true)) = (mem ⊕ (h1 + (h2 | true)))(l := v) |
(h2 |W | l) | true = [], mem ⊕ (h1 + (W(t, l, v), b) ' + (h2 | true)) ≠ (mem ⊕ (h1 + (h2 | true)))(l := v) ⊦
| (h2 |W | l) | true = [], mem ⊕ (h1 + (W(t, l, v), b) ' + (h2 | true)) ≠ (mem ⊕ (h1 + (h2 | true)))(l := v) ⊦ |
h2.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem ⊕ (h1 + (W(t, l, v), b) ' + h2.filter(._2)) ≠ (mem ⊕ (h1 + 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-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 + (W(t, l, v), b) ' + h2.filter(._2)) ≠ (mem ⊕ (h1 + h2.filter(._2)))(l := v) ⊦ |
h2.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem ⊕ (h1 + (W(t, l, v), b) ' + h2.filter(._2)) ≠ (mem ⊕ (h1 + h2.filter(._2)))(l := v), ∀ h, l, mem, h1, t, v, b. # h < # h2 → h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2)) ≠ (mem ⊕ (h1 + h.filter(._2)))(l := v) → false ⊦
Used simplifier rules: <; (wellfounded) Used terms: # h2
| h2.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem ⊕ (h1 + (W(t, l, v), b) ' + h2.filter(._2)) ≠ (mem ⊕ (h1 + h2.filter(._2)))(l := v), ∀ h, l, mem, h1, t, v, b. # h < # h2 → h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2)) ≠ (mem ⊕ (h1 + h.filter(._2)))(l := v) → false ⊦ |
h2.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], h2 ≠ [], mem ⊕ (h1 + (W(t, l, v), b) ' + h2.filter(._2)) ≠ (mem ⊕ (h1 + h2.filter(._2)))(l := v), ∀ h, l, mem, h1, t, v, b. # h < # h2 → h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2)) ≠ (mem ⊕ (h1 + h.filter(._2)))(l := v) → false ⊦
Used simplifier rules: overwrite-attach-write: ⊦ mem ⊕ (h + (W(t, l, v), b) ') = (mem ⊕ h)(l := v); ⊦ [].filter(p) = []; (s) ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list Used formulas: h2 = []
| h2.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], h2 ≠ [], mem ⊕ (h1 + (W(t, l, v), b) ' + h2.filter(._2)) ≠ (mem ⊕ (h1 + h2.filter(._2)))(l := v), ∀ h, l, mem, h1, t, v, b. # h < # h2 → h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2)) ≠ (mem ⊕ (h1 + h.filter(._2)))(l := v) → false ⊦ |
⊦ x = [] ↔ ¬(∃ y, a. x = y + a ')
h2.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem ⊕ (h1 + (W(t, l, v), b) ' + h2.filter(._2)) ≠ (mem ⊕ (h1 + h2.filter(._2)))(l := v), ∃ y, a. h2 = y + a ', ∀ h, l, mem, h1, t, v, b. # h < # h2 → h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2)) ≠ (mem ⊕ (h1 + h.filter(._2)))(l := v) → false ⊦
Used terms: h2
| ⊦ x = [] ↔ ¬(∃ y, a. x = y + a ') |
| h2.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem ⊕ (h1 + (W(t, l, v), b) ' + h2.filter(._2)) ≠ (mem ⊕ (h1 + h2.filter(._2)))(l := v), ∃ y, a. h2 = y + a ', ∀ h, l, mem, h1, t, v, b. # h < # h2 → h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2)) ≠ (mem ⊕ (h1 + h.filter(._2)))(l := v) → false ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], (vpe._1.W? ⊃ vpe ';[]).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2) + (vpe._2 ⊃ vpe ';[])) ≠ (mem ⊕ (h1 + h.filter(._2) + (vpe._2 ⊃ vpe ';[])))(l := v), ∀ h0, l, mem, h1, t, v, b. # h0 < #(h + vpe ') → h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem ⊕ (h1 + (W(t, l, v), b) ' + h0.filter(._2)) ≠ (mem ⊕ (h1 + h0.filter(._2)))(l := v) → false ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a '.filter(p) = (p(a) ⊃ a ';[]); (s) ⊦ (x + y).filter(p) = x.filter(p) + y.filter(p); (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s)
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], (vpe._1.W? ⊃ vpe ';[]).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2) + (vpe._2 ⊃ vpe ';[])) ≠ (mem ⊕ (h1 + h.filter(._2) + (vpe._2 ⊃ vpe ';[])))(l := v), ∀ h0, l, mem, h1, t, v, b. # h0 < #(h + vpe ') → h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem ⊕ (h1 + (W(t, l, v), b) ' + h0.filter(._2)) ≠ (mem ⊕ (h1 + h0.filter(._2)))(l := v) → false ⊦ |
(e.W? ⊃ vpe ';[]).filter(λ vpe. vpe._1.l = l).filter(._2) = [], h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], vpe = (e, b0), mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2) + (b0 ⊃ vpe ';[])) ≠ (mem ⊕ (h1 + h.filter(._2) + (b0 ⊃ vpe ';[])))(l := v), ∀ h0, l, mem, h1, t, v, b. # h0 < #(h + vpe ') → h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem ⊕ (h1 + (W(t, l, v), b) ' + h0.filter(._2)) ≠ (mem ⊕ (h1 + h0.filter(._2)))(l := v) → false ⊦
Used terms: e, b0
| (e.W? ⊃ vpe ';[]).filter(λ vpe. vpe._1.l = l).filter(._2) = [], h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], vpe = (e, b0), mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2) + (b0 ⊃ vpe ';[])) ≠ (mem ⊕ (h1 + h.filter(._2) + (b0 ⊃ vpe ';[])))(l := v), ∀ h0, l, mem, h1, t, v, b. # h0 < #(h + vpe ') → h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem ⊕ (h1 + (W(t, l, v), b) ' + h0.filter(._2)) ≠ (mem ⊕ (h1 + h0.filter(._2)))(l := v) → false ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], (e.W? ⊃ (e, b0) ';[]).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2) + (b0 ⊃ (e, true) ';[])) ≠ (mem ⊕ (h1 + h.filter(._2) + (b0 ⊃ (e, true) ';[])))(l := v), ∀ h0, l, mem, h1, t, v, b. # h0 < #(h + (e, b0) ') → h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem ⊕ (h1 + (W(t, l, v), b) ' + h0.filter(._2)) ≠ (mem ⊕ (h1 + h0.filter(._2)))(l := v) → false ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], (e.W? ⊃ (e, b0) ';[]).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2) + (b0 ⊃ (e, true) ';[])) ≠ (mem ⊕ (h1 + h.filter(._2) + (b0 ⊃ (e, true) ';[])))(l := v), ∀ h0, l, mem, h1, t, v, b. # h0 < #(h + (e, b0) ') → h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem ⊕ (h1 + (W(t, l, v), b) ' + h0.filter(._2)) ≠ (mem ⊕ (h1 + h0.filter(._2)))(l := v) → false ⊦ |
(e.W? ⊃ (e, b0) ';[]).filter(λ vpe. vpe._1.l = l).filter(._2) = [], h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2) + (b0 ⊃ (e, true) ';[])) ≠ (mem ⊕ (h1 + h.filter(._2) + (b0 ⊃ (e, true) ';[])))(l := v), ∀ h0, l, mem, h1, t, v, b. # h0 < #(h + (e, b0) ') → h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem ⊕ (h1 + (W(t, l, v), b) ' + h0.filter(._2)) ≠ (mem ⊕ (h1 + h0.filter(._2)))(l := v) → false ⊦ h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2)) ≠ (mem ⊕ (h1 + h.filter(._2)))(l := v)
Used simplifier rules: ⊦ #(x + y) = # x + # y; (s) ⊦ # a ' = 0 +1; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ 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, l, mem, h1, t, v, b
| (e.W? ⊃ (e, b0) ';[]).filter(λ vpe. vpe._1.l = l).filter(._2) = [], h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2) + (b0 ⊃ (e, true) ';[])) ≠ (mem ⊕ (h1 + h.filter(._2) + (b0 ⊃ (e, true) ';[])))(l := v), ∀ h0, l, mem, h1, t, v, b. # h0 < #(h + (e, b0) ') → h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem ⊕ (h1 + (W(t, l, v), b) ' + h0.filter(._2)) ≠ (mem ⊕ (h1 + h0.filter(._2)))(l := v) → false ⊦ h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2)) ≠ (mem ⊕ (h1 + h.filter(._2)))(l := v) |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], (e.W? ⊃ (e, b0) ';[]).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2)) = (mem ⊕ (h1 + h.filter(._2)))(l := v), mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2) + (b0 ⊃ (e, true) ';[])) ≠ (mem ⊕ (h1 + h.filter(._2) + (b0 ⊃ (e, true) ';[])))(l := v), ∀ h0, l, mem, h1, t, v, b. # h0 < #(h + (e, b0) ') → h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem ⊕ (h1 + (W(t, l, v), b) ' + h0.filter(._2)) ≠ (mem ⊕ (h1 + h0.filter(._2)))(l := v) → false ⊦
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], (e.W? ⊃ (e, b0) ';[]).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2)) = (mem ⊕ (h1 + h.filter(._2)))(l := v), mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2) + (b0 ⊃ (e, true) ';[])) ≠ (mem ⊕ (h1 + h.filter(._2) + (b0 ⊃ (e, true) ';[])))(l := v), ∀ h0, l, mem, h1, t, v, b. # h0 < #(h + (e, b0) ') → h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem ⊕ (h1 + (W(t, l, v), b) ' + h0.filter(._2)) ≠ (mem ⊕ (h1 + h0.filter(._2)))(l := v) → false ⊦ |
(e.W? ⊃ (e, b0) ';[]).filter(λ vpe. vpe._1.l = l).filter(._2) = [], h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], e = R(t0, l0, v0), mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2)) = (mem ⊕ (h1 + h.filter(._2)))(l := v), mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2) + (b0 ⊃ (e, true) ';[])) ≠ (mem ⊕ (h1 + h.filter(._2) + (b0 ⊃ (e, true) ';[])))(l := v), ∀ h0, l, mem, h1, t, v, b. # h0 < #(h + (e, b0) ') → h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem ⊕ (h1 + (W(t, l, v), b) ' + h0.filter(._2)) ≠ (mem ⊕ (h1 + h0.filter(._2)))(l := v) → false ⊦
(e.W? ⊃ (e, b0) ';[]).filter(λ vpe. vpe._1.l = l).filter(._2) = [], h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], e = W(t0, l0, v0), mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2)) = (mem ⊕ (h1 + h.filter(._2)))(l := v), mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2) + (b0 ⊃ (e, true) ';[])) ≠ (mem ⊕ (h1 + h.filter(._2) + (b0 ⊃ (e, true) ';[])))(l := v), ∀ h0, l, mem, h1, t, v, b. # h0 < #(h + (e, b0) ') → h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem ⊕ (h1 + (W(t, l, v), b) ' + h0.filter(._2)) ≠ (mem ⊕ (h1 + h0.filter(._2)))(l := v) → false ⊦
Used simplifier rules: RWevent freely generated by R, W;;
| (e.W? ⊃ (e, b0) ';[]).filter(λ vpe. vpe._1.l = l).filter(._2) = [], h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], e = R(t0, l0, v0), mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2)) = (mem ⊕ (h1 + h.filter(._2)))(l := v), mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2) + (b0 ⊃ (e, true) ';[])) ≠ (mem ⊕ (h1 + h.filter(._2) + (b0 ⊃ (e, true) ';[])))(l := v), ∀ h0, l, mem, h1, t, v, b. # h0 < #(h + (e, b0) ') → h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem ⊕ (h1 + (W(t, l, v), b) ' + h0.filter(._2)) ≠ (mem ⊕ (h1 + h0.filter(._2)))(l := v) → false ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2)) = (mem ⊕ (h1 + h.filter(._2)))(l := v), mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2) + (b0 ⊃ (R(t0, l0, v0), true) ';[])) ≠ (mem ⊕ (h1 + h.filter(._2) + (b0 ⊃ (R(t0, l0, v0), true) ';[])))(l := v), ∀ h0, l, mem, h1, t, v, b. # h0 < #(h + (R(t0, l0, v0), b0) ') → h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem ⊕ (h1 + (W(t, l, v), b) ' + h0.filter(._2)) ≠ (mem ⊕ (h1 + h0.filter(._2)))(l := v) → false ⊦
Used simplifier rules: ⊦ [].filter(p) = []; (s) ⊦ ¬ R(t, l, v).W?; (s)
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2)) = (mem ⊕ (h1 + h.filter(._2)))(l := v), mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2) + (b0 ⊃ (R(t0, l0, v0), true) ';[])) ≠ (mem ⊕ (h1 + h.filter(._2) + (b0 ⊃ (R(t0, l0, v0), true) ';[])))(l := v), ∀ h0, l, mem, h1, t, v, b. # h0 < #(h + (R(t0, l0, v0), b0) ') → h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem ⊕ (h1 + (W(t, l, v), b) ' + h0.filter(._2)) ≠ (mem ⊕ (h1 + h0.filter(._2)))(l := v) → false ⊦ |
Used simplifier rules: overwrite-attach-read: ⊦ mem ⊕ (h + (R(t, l, v), b) ') = mem ⊕ h; ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list
| (e.W? ⊃ (e, b0) ';[]).filter(λ vpe. vpe._1.l = l).filter(._2) = [], h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], e = W(t0, l0, v0), mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2)) = (mem ⊕ (h1 + h.filter(._2)))(l := v), mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2) + (b0 ⊃ (e, true) ';[])) ≠ (mem ⊕ (h1 + h.filter(._2) + (b0 ⊃ (e, true) ';[])))(l := v), ∀ h0, l, mem, h1, t, v, b. # h0 < #(h + (e, b0) ') → h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem ⊕ (h1 + (W(t, l, v), b) ' + h0.filter(._2)) ≠ (mem ⊕ (h1 + h0.filter(._2)))(l := v) → false ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], (l0 = l ⊃ (W(t0, l, v0), b0) ';[]).filter(._2) = [], mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2)) = (mem ⊕ (h1 + h.filter(._2)))(l := v), mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2) + (b0 ⊃ (W(t0, l0, v0), true) ';[])) ≠ (mem ⊕ (h1 + h.filter(._2) + (b0 ⊃ (W(t0, l0, v0), true) ';[])))(l := v), ∀ h0, l, mem, h1, t, v, b. # h0 < #(h + (W(t0, l0, v0), b0) ') → h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem ⊕ (h1 + (W(t, l, v), b) ' + h0.filter(._2)) ≠ (mem ⊕ (h1 + h0.filter(._2)))(l := v) → false ⊦
Used simplifier rules: ⊦ W(t, l, v).l = l; (s) ⊦ a '.filter(p) = (p(a) ⊃ a ';[]); (s) ⊦ W(t, l, v).W?; (s)
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], (l0 = l ⊃ (W(t0, l, v0), b0) ';[]).filter(._2) = [], mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2)) = (mem ⊕ (h1 + h.filter(._2)))(l := v), mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2) + (b0 ⊃ (W(t0, l0, v0), true) ';[])) ≠ (mem ⊕ (h1 + h.filter(._2) + (b0 ⊃ (W(t0, l0, v0), true) ';[])))(l := v), ∀ h0, l, mem, h1, t, v, b. # h0 < #(h + (W(t0, l0, v0), b0) ') → h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem ⊕ (h1 + (W(t, l, v), b) ' + h0.filter(._2)) ≠ (mem ⊕ (h1 + h0.filter(._2)))(l := v) → false ⊦ |
(l0 = l ⊃ (W(t0, l, v0), b0) ';[]).filter(._2) = [], h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], b0, mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2)) = (mem ⊕ (h1 + h.filter(._2)))(l := v), mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2) + (W(t0, l0, v0), true) ') ≠ (mem ⊕ (h1 + h.filter(._2) + (b0 ⊃ (W(t0, l0, v0), true) ';[])))(l := v), ∀ h0, l, mem, h1, t, v, b. # h0 < #(h + (W(t0, l0, v0), b0) ') → h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem ⊕ (h1 + (W(t, l, v), b) ' + h0.filter(._2)) ≠ (mem ⊕ (h1 + h0.filter(._2)))(l := v) → false ⊦
Used simplifier rules: ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list
| (l0 = l ⊃ (W(t0, l, v0), b0) ';[]).filter(._2) = [], h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], b0, mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2)) = (mem ⊕ (h1 + h.filter(._2)))(l := v), mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2) + (W(t0, l0, v0), true) ') ≠ (mem ⊕ (h1 + h.filter(._2) + (b0 ⊃ (W(t0, l0, v0), true) ';[])))(l := v), ∀ h0, l, mem, h1, t, v, b. # h0 < #(h + (W(t0, l0, v0), b0) ') → h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem ⊕ (h1 + (W(t, l, v), b) ' + h0.filter(._2)) ≠ (mem ⊕ (h1 + h0.filter(._2)))(l := v) → false ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], (l0 = l ⊃ (W(t0, l, v0), true) ';[]).filter(._2) = [], mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2)) = (mem ⊕ (h1 + h.filter(._2)))(l := v), (mem ⊕ (h1 + h.filter(._2)))(l := v)(l0 := v0) ≠ (mem ⊕ (h1 + h.filter(._2)))(l0 := v0)(l := v), ∀ h0, l, mem, h1, t, v, b. # h0 < #(h + (W(t0, l0, v0), true) ') → h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem ⊕ (h1 + (W(t, l, v), b) ' + h0.filter(._2)) ≠ (mem ⊕ (h1 + h0.filter(._2)))(l := v) → false ⊦
Used simplifier rules: overwrite-attach-write: ⊦ mem ⊕ (h + (W(t, l, v), b) ') = (mem ⊕ h)(l := v); a: ⊦ (x + y) + z = x + y + z; from specification list
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], (l0 = l ⊃ (W(t0, l, v0), true) ';[]).filter(._2) = [], mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2)) = (mem ⊕ (h1 + h.filter(._2)))(l := v), (mem ⊕ (h1 + h.filter(._2)))(l := v)(l0 := v0) ≠ (mem ⊕ (h1 + h.filter(._2)))(l0 := v0)(l := v), ∀ h0, l, mem, h1, t, v, b. # h0 < #(h + (W(t0, l0, v0), true) ') → h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem ⊕ (h1 + (W(t, l, v), b) ' + h0.filter(._2)) ≠ (mem ⊕ (h1 + h0.filter(._2)))(l := v) → false ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], [].filter(._2) = [], mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2)) = (mem ⊕ (h1 + h.filter(._2)))(l := v), (mem ⊕ (h1 + h.filter(._2)))(l := v)(l0 := v0) ≠ (mem ⊕ (h1 + h.filter(._2)))(l0 := v0)(l := v), l0 ≠ l, ∀ h0, l, mem, h1, t, v, b. # h0 < #(h + (W(t0, l0, v0), true) ') → h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem ⊕ (h1 + (W(t, l, v), b) ' + h0.filter(._2)) ≠ (mem ⊕ (h1 + h0.filter(._2)))(l := v) → false ⊦
Used simplifier rules: ⊦ a '.filter(p) = (p(a) ⊃ a ';[]); (s) ⊦ a ' ≠ []; (s)
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], [].filter(._2) = [], mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2)) = (mem ⊕ (h1 + h.filter(._2)))(l := v), (mem ⊕ (h1 + h.filter(._2)))(l := v)(l0 := v0) ≠ (mem ⊕ (h1 + h.filter(._2)))(l0 := v0)(l := v), l0 ≠ l, ∀ h0, l, mem, h1, t, v, b. # h0 < #(h + (W(t0, l0, v0), true) ') → h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem ⊕ (h1 + (W(t, l, v), b) ' + h0.filter(._2)) ≠ (mem ⊕ (h1 + h0.filter(._2)))(l := v) → false ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2)) = (mem ⊕ (h1 + h.filter(._2)))(l := v), (mem ⊕ (h1 + h.filter(._2)))(l := v)(l0 := v0) ≠ (mem ⊕ (h1 + h.filter(._2)))(l0 := v0)(l := v), l0 ≠ l, ∀ h0, l, mem, h1, t, v, b. # h0 < #(h + (W(t0, l0, v0), true) ') → h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem ⊕ (h1 + (W(t, l, v), b) ' + h0.filter(._2)) ≠ (mem ⊕ (h1 + h0.filter(._2)))(l := v) → false ⊦
Used simplifier rules: ⊦ [].filter(p) = []; (s)
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2)) = (mem ⊕ (h1 + h.filter(._2)))(l := v), (mem ⊕ (h1 + h.filter(._2)))(l := v)(l0 := v0) ≠ (mem ⊕ (h1 + h.filter(._2)))(l0 := v0)(l := v), l0 ≠ l, ∀ h0, l, mem, h1, t, v, b. # h0 < #(h + (W(t0, l0, v0), true) ') → h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem ⊕ (h1 + (W(t, l, v), b) ' + h0.filter(._2)) ≠ (mem ⊕ (h1 + h0.filter(._2)))(l := v) → false ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2)) = (mem ⊕ (h1 + h.filter(._2)))(l := v), (mem ⊕ (h1 + h.filter(._2)))(l := v)(l0 := v0)(l1) ≠ (mem ⊕ (h1 + h.filter(._2)))(l0 := v0)(l := v)(l1), l0 ≠ l, ∀ h0, l, mem, h1, t, v, b. # h0 < #(h + (W(t0, l0, v0), true) ') → h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem ⊕ (h1 + (W(t, l, v), b) ' + h0.filter(._2)) ≠ (mem ⊕ (h1 + h0.filter(._2)))(l := v) → false ⊦
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2)) = (mem ⊕ (h1 + h.filter(._2)))(l := v), (mem ⊕ (h1 + h.filter(._2)))(l := v)(l0 := v0)(l1) ≠ (mem ⊕ (h1 + h.filter(._2)))(l0 := v0)(l := v)(l1), l0 ≠ l, ∀ h0, l, mem, h1, t, v, b. # h0 < #(h + (W(t0, l0, v0), true) ') → h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem ⊕ (h1 + (W(t, l, v), b) ' + h0.filter(._2)) ≠ (mem ⊕ (h1 + h0.filter(._2)))(l := v) → false ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2)) = (mem ⊕ (h1 + h.filter(._2)))(l := v), (l0 = l1 ⊃ v0;(l = l1 ⊃ v;((mem ⊕ (h1 + h.filter(._2))))(l1))) ≠ (l = l1 ⊃ v;(l0 = l1 ⊃ v0;((mem ⊕ (h1 + h.filter(._2))))(l1))), l0 ≠ l, ∀ h0, l, mem, h1, t, v, b. # h0 < #(h + (W(t0, l0, v0), true) ') → h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem ⊕ (h1 + (W(t, l, v), b) ' + h0.filter(._2)) ≠ (mem ⊕ (h1 + h0.filter(._2)))(l := v) → false ⊦
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [], mem ⊕ (h1 + (W(t, l, v), b) ' + h.filter(._2)) = (mem ⊕ (h1 + h.filter(._2)))(l := v), (l0 = l1 ⊃ v0;(l = l1 ⊃ v;((mem ⊕ (h1 + h.filter(._2))))(l1))) ≠ (l = l1 ⊃ v;(l0 = l1 ⊃ v0;((mem ⊕ (h1 + h.filter(._2))))(l1))), l0 ≠ l, ∀ h0, l, mem, h1, t, v, b. # h0 < #(h + (W(t0, l0, v0), true) ') → h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(._2) = [] ∧ mem ⊕ (h1 + (W(t, l, v), b) ' + h0.filter(._2)) ≠ (mem ⊕ (h1 + h0.filter(._2)))(l := v) → false ⊦ |
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.