| ⊦ allReadsOK(h) ∧ isPersistFO(n, p(l)) ∧ abs(h, rs, p) → abs(h, rs, p(l := p(l) -p n)) |
abs(h, rs, p), allReadsOK(h), isPersistFO(n, p(l)), ¬ abs(h, rs, p(l := p(l) -p n)) ⊦
| abs(h, rs, p), allReadsOK(h), isPersistFO(n, p(l)), ¬ abs(h, rs, p(l := p(l) -p n)) ⊦ |
⊦ abs(h, rs, p) → (abs(h0, rs0, p0) ↔ (∀ l. absloc(events((h | l) | false), rs(l), p(l)) → absloc(events((h0 | l) | false), rs0(l), p0(l))))
abs(h, rs, p), allReadsOK(h), isPersistFO(n, p(l)), ∃ l0. ¬(absloc(events((h | l0) | false), rs(l0), p(l0)) → absloc(events((h | l0) | false), rs(l0), p(l := p(l) -p n)(l0))) ⊦
Used terms: p(l := p(l) -p n), rs, h, rs, p, h
| ⊦ abs(h, rs, p) → (abs(h0, rs0, p0) ↔ (∀ l. absloc(events((h | l) | false), rs(l), p(l)) → absloc(events((h0 | l) | false), rs0(l), p0(l)))) |
| abs(h, rs, p), allReadsOK(h), isPersistFO(n, p(l)), ∃ l0. ¬(absloc(events((h | l0) | false), rs(l0), p(l0)) → absloc(events((h | l0) | false), rs(l0), p(l := p(l) -p n)(l0))) ⊦ |
abs(h, rs, p), absloc(events((h | l0) | false), rs(l0), p(l0)), allReadsOK(h), isPersistFO(n, p(l)), ¬ absloc(events((h | l0) | false), rs(l0), (l = l0 ⊃ p(l0) -p n;p(l0))) ⊦
| abs(h, rs, p), absloc(events((h | l0) | false), rs(l0), p(l0)), allReadsOK(h), isPersistFO(n, p(l)), ¬ absloc(events((h | l0) | false), rs(l0), (l = l0 ⊃ p(l0) -p n;p(l0))) ⊦ |
l = l0, abs(h, rs, p), absloc(events((h | l0) | false), rs(l0), p(l0)), allReadsOK(h), isPersistFO(n, p(l)), ¬ absloc(events((h | l0) | false), rs(l0), (l = l0 ⊃ p(l0) -p n;p(l0))) ⊦
Used formulas: l = l0
| l = l0, abs(h, rs, p), absloc(events((h | l0) | false), rs(l0), p(l0)), allReadsOK(h), isPersistFO(n, p(l)), ¬ absloc(events((h | l0) | false), rs(l0), (l = l0 ⊃ p(l0) -p n;p(l0))) ⊦ |
abs(h, rs, p), absloc(events((h | l0) | false), rs(l0), p(l0)), allReadsOK(h), isPersistFO(n, p(l0)), ¬ absloc(events((h | l0) | false), rs(l0), p(l0) -p n) ⊦
| abs(h, rs, p), absloc(events((h | l0) | false), rs(l0), p(l0)), allReadsOK(h), isPersistFO(n, p(l0)), ¬ absloc(events((h | l0) | false), rs(l0), p(l0) -p n) ⊦ |
⊦ (el = [] ∨ ¬ el.head.R?) ∧ absloc(el, rset, fowl) ∧ isPersistFO(n, fowl) → absloc(el, rset, fowl -p n)
abs(h, rs, p), absloc(events((h | l0) | false), rs(l0), p(l0)), allReadsOK(h), isPersistFO(n, p(l0)), ¬ absloc(events((h | l0) | false), rs(l0), p(l0) -p n) ⊦ (events((h | l0) | false) = [] ∨ ¬ events((h | l0) | false).head.R?) ∧ absloc(events((h | l0) | false), rs(l0), p(l0)) ∧ isPersistFO(n, p(l0))
Used terms: events((h | l0) | false), rs(l0), p(l0), n
| ⊦ (el = [] ∨ ¬ el.head.R?) ∧ absloc(el, rset, fowl) ∧ isPersistFO(n, fowl) → absloc(el, rset, fowl -p n) |
| abs(h, rs, p), absloc(events((h | l0) | false), rs(l0), p(l0)), allReadsOK(h), isPersistFO(n, p(l0)), ¬ absloc(events((h | l0) | false), rs(l0), p(l0) -p n) ⊦ (events((h | l0) | false) = [] ∨ ¬ events((h | l0) | false).head.R?) ∧ absloc(events((h | l0) | false), rs(l0), p(l0)) ∧ isPersistFO(n, p(l0)) |
events((h | l0) | false) ≠ [], events((h | l0) | false).head.R?, abs(h, rs, p), absloc(events((h | l0) | false), rs(l0), p(l0)), allReadsOK(h), isPersistFO(n, p(l0)), ¬ absloc(events((h | l0) | false), rs(l0), p(l0) -p n) ⊦
| events((h | l0) | false) ≠ [], events((h | l0) | false).head.R?, abs(h, rs, p), absloc(events((h | l0) | false), rs(l0), p(l0)), allReadsOK(h), isPersistFO(n, p(l0)), ¬ absloc(events((h | l0) | false), rs(l0), p(l0) -p n) ⊦ |
events((h | l0) | false) = e + el, events((h | l0) | false) ≠ [], e.R?, abs(h, rs, p), absloc(events((h | l0) | false), rs(l0), p(l0)), allReadsOK(h), isPersistFO(n, p(l0)), ¬ absloc(events((h | l0) | false), rs(l0), p(l0) -p n) ⊦
Used simplifier rules: ⊦ x ≠ [] → (head = x.head ∧ tail = x.tail ↔ x = head + tail); (elim) Used terms: events((h | l0) | false), e, el
| events((h | l0) | false) = e + el, events((h | l0) | false) ≠ [], e.R?, abs(h, rs, p), absloc(events((h | l0) | false), rs(l0), p(l0)), allReadsOK(h), isPersistFO(n, p(l0)), ¬ absloc(events((h | l0) | false), rs(l0), p(l0) -p n) ⊦ |
events((h | l0) | false) = e ' + el, e.R?, abs(h, rs, p), absloc(e ' + el, rs(l0), p(l0)), allReadsOK(h), isPersistFO(n, p(l0)), ¬ absloc(e ' + el, rs(l0), p(l0) -p n) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a ∈ a0 ' + x ↔ a = a0 ∨ a ∈ x; (s) ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ a + x = a ' + x; (s)
| events((h | l0) | false) = e ' + el, e.R?, abs(h, rs, p), absloc(e ' + el, rs(l0), p(l0)), allReadsOK(h), isPersistFO(n, p(l0)), ¬ absloc(e ' + el, rs(l0), p(l0) -p n) ⊦ |
Used simplifier rules: RWevent freely generated by R, W;; ⊦ ¬ W(t, l, v).R?; (s) ⊦ allReadsOK(h) → events((h | l) | false) ≠ R(t0, l0, v0) ' + el; (as) a: ⊦ (x + y) + z = x + y + z; from specification list
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.