| ⊦ abs(h, rs, p) ∧ allReadsOK(h) ∧ noPendingW(t, p) ∧ isPersistFO(n, p(l)) ∧ ¬ FO(t) ∈ p(l) -p n ∧ FO(t) ∈ fowl ∧ ¬ t ∈ rs(l) → ((h | l) | t) | false = [] |
((h | l) | t) | false ≠ [], abs(h, rs, p), allReadsOK(h), isPersistFO(n, p(l)), noPendingW(t, p), FO(t) ∈ fowl, ¬ t ∈ rs(l), ¬ FO(t) ∈ p(l) -p n ⊦
| ((h | l) | t) | false ≠ [], abs(h, rs, p), allReadsOK(h), isPersistFO(n, p(l)), noPendingW(t, p), FO(t) ∈ fowl, ¬ t ∈ rs(l), ¬ FO(t) ∈ p(l) -p n ⊦ |
((h | l) | t) | false ≠ [], abs(h, rs, p), allReadsOK(h), isPersistFO(n, p(l)), noPendingW(t, p), FO(t) ∈ fowl, ¬ t ∈ rs(l), ¬ FO(t) ∈ p(l) -p n ⊦
| ((h | l) | t) | false ≠ [], abs(h, rs, p), allReadsOK(h), isPersistFO(n, p(l)), noPendingW(t, p), FO(t) ∈ fowl, ¬ t ∈ rs(l), ¬ FO(t) ∈ p(l) -p n ⊦ |
⊦ abs(h, rs, p) ↔ (∀ l. absloc(events((h | l) | false), rs(l), p(l)))
((h | l) | t) | false ≠ [], allReadsOK(h), isPersistFO(n, p(l)), noPendingW(t, p), FO(t) ∈ fowl, ¬ t ∈ rs(l), ¬ FO(t) ∈ p(l) -p n, ∀ l. absloc(events((h | l) | false), rs(l), p(l)) ⊦
Used terms: h, rs, p
| ⊦ abs(h, rs, p) ↔ (∀ l. absloc(events((h | l) | false), rs(l), p(l))) |
| ((h | l) | t) | false ≠ [], allReadsOK(h), isPersistFO(n, p(l)), noPendingW(t, p), FO(t) ∈ fowl, ¬ t ∈ rs(l), ¬ FO(t) ∈ p(l) -p n, ∀ l. absloc(events((h | l) | false), rs(l), p(l)) ⊦ |
((h | l) | t) | false ≠ [], absloc(events((h | l) | false), rs(l), p(l)), allReadsOK(h), isPersistFO(n, p(l)), noPendingW(t, p), FO(t) ∈ fowl, ¬ t ∈ rs(l), ¬ FO(t) ∈ p(l) -p n ⊦
Used terms: l
| ((h | l) | t) | false ≠ [], absloc(events((h | l) | false), rs(l), p(l)), allReadsOK(h), isPersistFO(n, p(l)), noPendingW(t, p), FO(t) ∈ fowl, ¬ t ∈ rs(l), ¬ FO(t) ∈ p(l) -p n ⊦ |
⊦ allReadsOK(h) ↔ allReadsOKInd(∅, λ l. true, h)
((h | l) | t) | false ≠ [], absloc(events((h | l) | false), rs(l), p(l)), allReadsOKInd(∅, λ l. true, h), isPersistFO(n, p(l)), noPendingW(t, p), FO(t) ∈ fowl, ¬ t ∈ rs(l), ¬ FO(t) ∈ p(l) -p n ⊦
Used terms: h
| ⊦ allReadsOK(h) ↔ allReadsOKInd(∅, λ l. true, h) |
| ((h | l) | t) | false ≠ [], absloc(events((h | l) | false), rs(l), p(l)), allReadsOKInd(∅, λ l. true, h), isPersistFO(n, p(l)), noPendingW(t, p), FO(t) ∈ fowl, ¬ t ∈ rs(l), ¬ FO(t) ∈ p(l) -p n ⊦ |
⊦ noPendingW(t, p) ↔ (∀ l. p(l) |W | t = [])
((h | l) | t) | false ≠ [], absloc(events((h | l) | false), rs(l), p(l)), allReadsOKInd(∅, λ l. true, h), isPersistFO(n, p(l)), FO(t) ∈ fowl, ¬ t ∈ rs(l), ¬ FO(t) ∈ p(l) -p n, ∀ l. p(l) |W | t = [] ⊦
Used terms: t, p
| ⊦ noPendingW(t, p) ↔ (∀ l. p(l) |W | t = []) |
| ((h | l) | t) | false ≠ [], absloc(events((h | l) | false), rs(l), p(l)), allReadsOKInd(∅, λ l. true, h), isPersistFO(n, p(l)), FO(t) ∈ fowl, ¬ t ∈ rs(l), ¬ FO(t) ∈ p(l) -p n, ∀ l. p(l) |W | t = [] ⊦ |
p(l) |W | t = [], ((h | l) | t) | false ≠ [], absloc(events((h | l) | false), rs(l), p(l)), allReadsOKInd(∅, λ l. true, h), isPersistFO(n, p(l)), FO(t) ∈ fowl, ¬ t ∈ rs(l), ¬ FO(t) ∈ p(l) -p n ⊦
Used terms: l
| p(l) |W | t = [], ((h | l) | t) | false ≠ [], absloc(events((h | l) | false), rs(l), p(l)), allReadsOKInd(∅, λ l. true, h), isPersistFO(n, p(l)), FO(t) ∈ fowl, ¬ t ∈ rs(l), ¬ FO(t) ∈ p(l) -p n ⊦ |
⊦ absloc(events((h | l) | false), rset, fowl) ∧ allReadsOKInd(mem, persisted, h) ∧ persisted(l) ∧ isPersistFO(n, fowl) ∧ (fowl -p n)|W | t = [] ∧ ¬ FO(t) ∈ fowl -p n ∧ FO(t) ∈ fowl ∧ ¬ t ∈ rset → ((h | l) | t) | false = []
Used simplifier rules: abs-loc-no-w-no-fo-then-no-pending: ⊦ absloc(events((h | l) | false), rset, fowl) ∧ fowl |W | t = [] ∧ ¬ FO(t) ∈ fowl ∧ ¬ t ∈ rset → ((h | l) | t) | false = []; ⊦ isPersistFO(n, fowl) → (fowl -p n)|W = fowl |W; (s) Used terms: λ l. true, p(l), ∅, l, t, n, rs(l), h
| ⊦ absloc(events((h | l) | false), rset, fowl) ∧ allReadsOKInd(mem, persisted, h) ∧ persisted(l) ∧ isPersistFO(n, fowl) ∧ (fowl -p n)|W | t = [] ∧ ¬ FO(t) ∈ fowl -p n ∧ FO(t) ∈ fowl ∧ ¬ t ∈ rset → ((h | l) | t) | 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.