| ⊦ abs(h, rs, p) ∧ allReadsOK(h) ∧ noPendingW(t, p) ∧ p(l) = FO(t) ' + fowl ∧ ¬ FO(t) ∈ fowl ∧ ¬ t ∈ rs(l) → ((h | l) | t) | false = [] |
p(l) = FO(t) ' + fowl, ((h | l) | t) | false ≠ [], abs(h, rs, p), allReadsOK(h), noPendingW(t, p), ¬ t ∈ rs(l), ¬ FO(t) ∈ fowl ⊦
| p(l) = FO(t) ' + fowl, ((h | l) | t) | false ≠ [], abs(h, rs, p), allReadsOK(h), noPendingW(t, p), ¬ t ∈ rs(l), ¬ FO(t) ∈ fowl ⊦ |
p(l) = FO(t) ' + fowl, ((h | l) | t) | false ≠ [], abs(h, rs, p), allReadsOK(h), noPendingW(t, p), FO(t) ∈ p(l), ¬ t ∈ rs(l), ¬ FO(t) ∈ fowl ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list
| p(l) = FO(t) ' + fowl, ((h | l) | t) | false ≠ [], abs(h, rs, p), allReadsOK(h), noPendingW(t, p), FO(t) ∈ p(l), ¬ t ∈ rs(l), ¬ FO(t) ∈ fowl ⊦ |
⊦ abs(h, rs, p) ↔ (∀ l. absloc(events((h | l) | false), rs(l), p(l)))
p(l) = FO(t) ' + fowl, ((h | l) | t) | false ≠ [], allReadsOK(h), noPendingW(t, p), FO(t) ∈ p(l), ¬ t ∈ rs(l), ¬ FO(t) ∈ fowl, ∀ 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))) |
| p(l) = FO(t) ' + fowl, ((h | l) | t) | false ≠ [], allReadsOK(h), noPendingW(t, p), FO(t) ∈ p(l), ¬ t ∈ rs(l), ¬ FO(t) ∈ fowl, ∀ l. absloc(events((h | l) | false), rs(l), p(l)) ⊦ |
p(l) = FO(t) ' + fowl, ((h | l) | t) | false ≠ [], absloc(events((h | l) | false), rs(l), p(l)), allReadsOK(h), noPendingW(t, p), FO(t) ∈ p(l), ¬ t ∈ rs(l), ¬ FO(t) ∈ fowl ⊦
Used terms: l
| p(l) = FO(t) ' + fowl, ((h | l) | t) | false ≠ [], absloc(events((h | l) | false), rs(l), p(l)), allReadsOK(h), noPendingW(t, p), FO(t) ∈ p(l), ¬ t ∈ rs(l), ¬ FO(t) ∈ fowl ⊦ |
⊦ allReadsOK(h) ↔ allReadsOKInd(∅, λ l. true, h)
p(l) = FO(t) ' + fowl, ((h | l) | t) | false ≠ [], absloc(events((h | l) | false), rs(l), p(l)), allReadsOKInd(∅, λ l. true, h), noPendingW(t, p), FO(t) ∈ p(l), ¬ t ∈ rs(l), ¬ FO(t) ∈ fowl ⊦
Used terms: h
| ⊦ allReadsOK(h) ↔ allReadsOKInd(∅, λ l. true, h) |
| p(l) = FO(t) ' + fowl, ((h | l) | t) | false ≠ [], absloc(events((h | l) | false), rs(l), p(l)), allReadsOKInd(∅, λ l. true, h), noPendingW(t, p), FO(t) ∈ p(l), ¬ t ∈ rs(l), ¬ FO(t) ∈ fowl ⊦ |
⊦ noPendingW(t, p) ↔ (∀ l. p(l) |W | t = [])
p(l) = FO(t) ' + fowl, ((h | l) | t) | false ≠ [], absloc(events((h | l) | false), rs(l), p(l)), allReadsOKInd(∅, λ l. true, h), FO(t) ∈ p(l), ¬ t ∈ rs(l), ¬ FO(t) ∈ fowl, ∀ l. p(l) |W | t = [] ⊦
Used terms: t, p
| ⊦ noPendingW(t, p) ↔ (∀ l. p(l) |W | t = []) |
| p(l) = FO(t) ' + fowl, ((h | l) | t) | false ≠ [], absloc(events((h | l) | false), rs(l), p(l)), allReadsOKInd(∅, λ l. true, h), FO(t) ∈ p(l), ¬ t ∈ rs(l), ¬ FO(t) ∈ fowl, ∀ l. p(l) |W | t = [] ⊦ |
p(l) = FO(t) ' + fowl, p(l) |W | t = [], ((h | l) | t) | false ≠ [], absloc(events((h | l) | false), rs(l), p(l)), allReadsOKInd(∅, λ l. true, h), FO(t) ∈ p(l), ¬ t ∈ rs(l), ¬ FO(t) ∈ fowl ⊦
Used terms: l
| p(l) = FO(t) ' + fowl, p(l) |W | t = [], ((h | l) | t) | false ≠ [], absloc(events((h | l) | false), rs(l), p(l)), allReadsOKInd(∅, λ l. true, h), FO(t) ∈ p(l), ¬ t ∈ rs(l), ¬ FO(t) ∈ fowl ⊦ |
⊦ absloc(events((h | l) | false), rset, FO(t) ' + fowl) ∧ allReadsOKInd(mem, persisted, h) ∧ persisted(l) ∧ fowl |W | t = [] ∧ ¬ FO(t) ∈ fowl ∧ ¬ t ∈ rset → ((h | l) | t) | false = []
p(l) = FO(t) ' + fowl, p(l) |W | t = [], ((h | l) | t) | false ≠ [], absloc(events((h | l) | false), rs(l), p(l)), allReadsOKInd(∅, λ l. true, h), FO(t) ∈ p(l), ¬ t ∈ rs(l), ¬ FO(t) ∈ fowl ⊦ absloc(events((h | l) | false), rs(l), FO(t) ' + fowl) ∧ allReadsOKInd(∅, λ l. true, h) ∧ true ∧ fowl |W | t = [] ∧ ¬ FO(t) ∈ fowl ∧ ¬ t ∈ rs(l)
Used terms: λ l. true, fowl, ∅, l, t, rs(l), h
| ⊦ absloc(events((h | l) | false), rset, FO(t) ' + fowl) ∧ allReadsOKInd(mem, persisted, h) ∧ persisted(l) ∧ fowl |W | t = [] ∧ ¬ FO(t) ∈ fowl ∧ ¬ t ∈ rset → ((h | l) | t) | false = [] |
| p(l) = FO(t) ' + fowl, p(l) |W | t = [], ((h | l) | t) | false ≠ [], absloc(events((h | l) | false), rs(l), p(l)), allReadsOKInd(∅, λ l. true, h), FO(t) ∈ p(l), ¬ t ∈ rs(l), ¬ FO(t) ∈ fowl ⊦ absloc(events((h | l) | false), rs(l), FO(t) ' + fowl) ∧ allReadsOKInd(∅, λ l. true, h) ∧ true ∧ fowl |W | t = [] ∧ ¬ FO(t) ∈ fowl ∧ ¬ t ∈ rs(l) |
p(l) = FO(t) ' + fowl, p(l) |W | t = [], ((h | l) | t) | false ≠ [], fowl |W | t ≠ [], absloc(events((h | l) | false), rs(l), p(l)), allReadsOKInd(∅, λ l. true, h), FO(t) ∈ p(l), ¬ FO(t) ∈ fowl, ¬ t ∈ rs(l) ⊦
| p(l) = FO(t) ' + fowl, p(l) |W | t = [], ((h | l) | t) | false ≠ [], fowl |W | t ≠ [], absloc(events((h | l) | false), rs(l), p(l)), allReadsOKInd(∅, λ l. true, h), FO(t) ∈ p(l), ¬ FO(t) ∈ fowl, ¬ t ∈ rs(l) ⊦ |
Used simplifier rules: ⊦ (FO(t) ' + fowl)|W = fowl |W; (s) 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.