| ⊦ (h |W | l) | false = [] → (h.lastPersistedOrElse(l, true) ↔ true) |
(h |W | l) | false = [], ¬(h.lastPersistedOrElse(l, true) ↔ true) ⊦
| (h |W | l) | false = [], ¬(h.lastPersistedOrElse(l, true) ↔ true) ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], ¬ h.lastPersistedOrElse(l, true) ⊦
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);
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], ¬ h.lastPersistedOrElse(l, true) ⊦ |
(vpe + h0).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], ¬ (vpe + h0).lastPersistedOrElse(l, true), ∀ l. ¬(h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ∧ ¬ h0.lastPersistedOrElse(l, true)) ⊦
Used simplifier rules: lastPersistedOrElse-base: ⊦ [].lastPersistedOrElse(l, b) ↔ b; List('a) freely generated by [], +;; ⊦ [].filter(p) = []; (s)
| (vpe + h0).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], ¬ (vpe + h0).lastPersistedOrElse(l, true), ∀ l. ¬(h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ∧ ¬ h0.lastPersistedOrElse(l, true)) ⊦ |
(vpe._1.W? ⊃ vpe ';[]).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], ¬ (vpe ' + h0).lastPersistedOrElse(l, true), ∀ l0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) ≠ [] ∨ h0.lastPersistedOrElse(l0, true) ⊦
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.W? ⊃ vpe ';[]).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], ¬ (vpe ' + h0).lastPersistedOrElse(l, true), ∀ l0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) ≠ [] ∨ h0.lastPersistedOrElse(l0, true) ⊦ |
h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], (e.W? ⊃ vpe ';[]).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], vpe = (e, boolvar), ¬ (vpe ' + h0).lastPersistedOrElse(l, true), ∀ l0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) ≠ [] ∨ h0.lastPersistedOrElse(l0, true) ⊦
Used terms: e, boolvar
| h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], (e.W? ⊃ vpe ';[]).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], vpe = (e, boolvar), ¬ (vpe ' + h0).lastPersistedOrElse(l, true), ∀ l0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) ≠ [] ∨ h0.lastPersistedOrElse(l0, true) ⊦ |
(e.W? ⊃ (e, boolvar) ';[]).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], ¬ ((e, boolvar) ' + h0).lastPersistedOrElse(l, true), ∀ l0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) ≠ [] ∨ h0.lastPersistedOrElse(l0, true) ⊦
| (e.W? ⊃ (e, boolvar) ';[]).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], ¬ ((e, boolvar) ' + h0).lastPersistedOrElse(l, true), ∀ l0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) ≠ [] ∨ h0.lastPersistedOrElse(l0, true) ⊦ |
h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], (e, boolvar) '.filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], e.W?, ¬ ((e, boolvar) ' + h0).lastPersistedOrElse(l, true), ∀ l0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) ≠ [] ∨ h0.lastPersistedOrElse(l0, true) ⊦
h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], [].filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], ¬ e.W?, ¬ ((e, boolvar) ' + h0).lastPersistedOrElse(l, true), ∀ l0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) ≠ [] ∨ h0.lastPersistedOrElse(l0, true) ⊦
| h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], (e, boolvar) '.filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], e.W?, ¬ ((e, boolvar) ' + h0).lastPersistedOrElse(l, true), ∀ l0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) ≠ [] ∨ h0.lastPersistedOrElse(l0, true) ⊦ |
h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], (e.l = l ⊃ (e, boolvar) ';[]).filter(λ vpe. ¬ vpe._2) = [], e.W?, ¬ ((e, boolvar) ' + h0).lastPersistedOrElse(l, true), ∀ l0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) ≠ [] ∨ h0.lastPersistedOrElse(l0, true) ⊦
Used simplifier rules: ⊦ a '.filter(p) = (p(a) ⊃ a ';[]); (s)
| h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], (e.l = l ⊃ (e, boolvar) ';[]).filter(λ vpe. ¬ vpe._2) = [], e.W?, ¬ ((e, boolvar) ' + h0).lastPersistedOrElse(l, true), ∀ l0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) ≠ [] ∨ h0.lastPersistedOrElse(l0, true) ⊦ |
(l1 = l ⊃ (e, boolvar) ';[]).filter(λ vpe. ¬ vpe._2) = [], h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], e = W(t, l1, v), e.W?, ¬ ((e, boolvar) ' + h0).lastPersistedOrElse(l, true), ∀ l0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) ≠ [] ∨ h0.lastPersistedOrElse(l0, true) ⊦
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, v
| (l1 = l ⊃ (e, boolvar) ';[]).filter(λ vpe. ¬ vpe._2) = [], h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], e = W(t, l1, v), e.W?, ¬ ((e, boolvar) ' + h0).lastPersistedOrElse(l, true), ∀ l0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) ≠ [] ∨ h0.lastPersistedOrElse(l0, true) ⊦ |
h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], (l1 = l ⊃ (W(t, l, v), boolvar) ';[]).filter(λ vpe. ¬ vpe._2) = [], ¬ h0.lastPersistedOrElse(l, l = l1 → boolvar), ∀ l0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) ≠ [] ∨ h0.lastPersistedOrElse(l0, true) ⊦
Used simplifier rules: lastPersistedOrElse-recW: ⊦ ((W(t0, l0, v0), b0) ' + h).lastPersistedOrElse(l, b) ↔ h.lastPersistedOrElse(l, (l = l0 ⊃ b0;b)); a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ W(t, l, v).W?; (s)
| h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], (l1 = l ⊃ (W(t, l, v), boolvar) ';[]).filter(λ vpe. ¬ vpe._2) = [], ¬ h0.lastPersistedOrElse(l, l = l1 → boolvar), ∀ l0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) ≠ [] ∨ h0.lastPersistedOrElse(l0, true) ⊦ |
h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], (W(t, l, v), boolvar) '.filter(λ vpe. ¬ vpe._2) = [], l1 = l, ¬ h0.lastPersistedOrElse(l, l = l1 → boolvar), ∀ l0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) ≠ [] ∨ h0.lastPersistedOrElse(l0, true) ⊦
h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], [].filter(λ vpe. ¬ vpe._2) = [], l1 ≠ l, ¬ h0.lastPersistedOrElse(l, l = l1 → boolvar), ∀ l0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) ≠ [] ∨ h0.lastPersistedOrElse(l0, true) ⊦
| h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], (W(t, l, v), boolvar) '.filter(λ vpe. ¬ vpe._2) = [], l1 = l, ¬ h0.lastPersistedOrElse(l, l = l1 → boolvar), ∀ l0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) ≠ [] ∨ h0.lastPersistedOrElse(l0, true) ⊦ |
h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], ¬ h0.lastPersistedOrElse(l, true), ∀ l0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) ≠ [] ∨ h0.lastPersistedOrElse(l0, true) ⊦
Used simplifier rules: ⊦ a ' ≠ []; (s) ⊦ a '.filter(p) = (p(a) ⊃ a ';[]); (s)
| h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], ¬ h0.lastPersistedOrElse(l, true), ∀ l0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) ≠ [] ∨ h0.lastPersistedOrElse(l0, true) ⊦ |
Used terms: l
| h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], [].filter(λ vpe. ¬ vpe._2) = [], l1 ≠ l, ¬ h0.lastPersistedOrElse(l, l = l1 → boolvar), ∀ l0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) ≠ [] ∨ h0.lastPersistedOrElse(l0, true) ⊦ |
h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], l1 ≠ l, ¬ h0.lastPersistedOrElse(l, true), ∀ l0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) ≠ [] ∨ h0.lastPersistedOrElse(l0, true) ⊦
Used simplifier rules: ⊦ [].filter(p) = []; (s)
| h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], l1 ≠ l, ¬ h0.lastPersistedOrElse(l, true), ∀ l0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) ≠ [] ∨ h0.lastPersistedOrElse(l0, true) ⊦ |
Used terms: l
| h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], [].filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], ¬ e.W?, ¬ ((e, boolvar) ' + h0).lastPersistedOrElse(l, true), ∀ l0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) ≠ [] ∨ h0.lastPersistedOrElse(l0, true) ⊦ |
h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], ¬ e.W?, ¬ ((e, boolvar) ' + h0).lastPersistedOrElse(l, true), ∀ l0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) ≠ [] ∨ h0.lastPersistedOrElse(l0, true) ⊦
Used simplifier rules: ⊦ [].filter(p) = []; (s)
| h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], ¬ e.W?, ¬ ((e, boolvar) ' + h0).lastPersistedOrElse(l, true), ∀ l0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) ≠ [] ∨ h0.lastPersistedOrElse(l0, true) ⊦ |
h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], e = R(t, l1, v), ¬ e.W?, ¬ ((e, boolvar) ' + h0).lastPersistedOrElse(l, true), ∀ l0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) ≠ [] ∨ h0.lastPersistedOrElse(l0, true) ⊦
Used simplifier rules: RWevent freely generated by R, W;; ⊦ W(t, l, v).W?; (s)
| h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], e = R(t, l1, v), ¬ e.W?, ¬ ((e, boolvar) ' + h0).lastPersistedOrElse(l, true), ∀ l0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) ≠ [] ∨ h0.lastPersistedOrElse(l0, true) ⊦ |
h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], ¬ h0.lastPersistedOrElse(l, true), ∀ l0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) ≠ [] ∨ h0.lastPersistedOrElse(l0, true) ⊦
Used simplifier rules: lastPersistedOrElse-recR: ⊦ ((R(t0, l0, v0), b0) ' + h).lastPersistedOrElse(l, b) ↔ h.lastPersistedOrElse(l, b); a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ¬ R(t, l, v).W?; (s)
| h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], ¬ h0.lastPersistedOrElse(l, true), ∀ l0. h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) ≠ [] ∨ h0.lastPersistedOrElse(l0, true) ⊦ |
Used terms: l
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.