| ⊦ abs(h, rs, p) ∧ allReadsOK(h) ∧ onePendingW(t, l0, p) ∧ FOFollowsW(t, p(l0)) ∧ isPersistFO(n, p(l)) ∧ ¬ FO(t) ∈ p(l) -p n ∧ FO(t) ∈ p(l) ∧ ¬ t ∈ rs(l) → ((h | l) | t) | false = [] |
((h | l) | t) | false ≠ [], FOFollowsW(t, p(l0)), abs(h, rs, p), allReadsOK(h), isPersistFO(n, p(l)), onePendingW(t, l0, p), FO(t) ∈ p(l), ¬ t ∈ rs(l), ¬ FO(t) ∈ p(l) -p n ⊦
| ((h | l) | t) | false ≠ [], FOFollowsW(t, p(l0)), abs(h, rs, p), allReadsOK(h), isPersistFO(n, p(l)), onePendingW(t, l0, p), FO(t) ∈ p(l), ¬ t ∈ rs(l), ¬ FO(t) ∈ p(l) -p n ⊦ |
FO(t) = p(l)[n], ((h | l) | t) | false ≠ [], FOFollowsW(t, p(l0)), abs(h, rs, p), allReadsOK(h), isPersistFO(n, p(l)), onePendingW(t, l0, p), FO(t) ∈ p(l), ¬ t ∈ rs(l), ¬ FO(t) ∈ p(l) -p n ⊦
Used simplifier rules: delpos-get-fw: ⊦ ¬ a ∈ x -p n ∧ a ∈ x → a = x[n]; (forward) from specification list-del
| FO(t) = p(l)[n], ((h | l) | t) | false ≠ [], FOFollowsW(t, p(l0)), abs(h, rs, p), allReadsOK(h), isPersistFO(n, p(l)), onePendingW(t, l0, p), FO(t) ∈ p(l), ¬ t ∈ rs(l), ¬ FO(t) ∈ p(l) -p n ⊦ |
⊦ abs(h, rs, p) ↔ (∀ l. absloc(events((h | l) | false), rs(l), p(l)))
FO(t) = p(l)[n], ((h | l) | t) | false ≠ [], FOFollowsW(t, p(l0)), allReadsOK(h), isPersistFO(n, p(l)), onePendingW(t, l0, p), FO(t) ∈ p(l), ¬ 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))) |
| FO(t) = p(l)[n], ((h | l) | t) | false ≠ [], FOFollowsW(t, p(l0)), allReadsOK(h), isPersistFO(n, p(l)), onePendingW(t, l0, p), FO(t) ∈ p(l), ¬ t ∈ rs(l), ¬ FO(t) ∈ p(l) -p n, ∀ l. absloc(events((h | l) | false), rs(l), p(l)) ⊦ |
FO(t) = p(l)[n], ((h | l) | t) | false ≠ [], FOFollowsW(t, p(l0)), absloc(events((h | l) | false), rs(l), p(l)), allReadsOK(h), isPersistFO(n, p(l)), onePendingW(t, l0, p), FO(t) ∈ p(l), ¬ t ∈ rs(l), ¬ FO(t) ∈ p(l) -p n ⊦
Used terms: l
| FO(t) = p(l)[n], ((h | l) | t) | false ≠ [], FOFollowsW(t, p(l0)), absloc(events((h | l) | false), rs(l), p(l)), allReadsOK(h), isPersistFO(n, p(l)), onePendingW(t, l0, p), FO(t) ∈ p(l), ¬ t ∈ rs(l), ¬ FO(t) ∈ p(l) -p n ⊦ |
FO(t) = p(l)[n], l = l0, ((h | l) | t) | false ≠ [], FOFollowsW(t, p(l0)), absloc(events((h | l) | false), rs(l), p(l)), allReadsOK(h), isPersistFO(n, p(l)), onePendingW(t, l0, p), FO(t) ∈ p(l), ¬ t ∈ rs(l), ¬ FO(t) ∈ p(l) -p n ⊦
FO(t) = p(l)[n], l ≠ l0, ((h | l) | t) | false ≠ [], FOFollowsW(t, p(l0)), absloc(events((h | l) | false), rs(l), p(l)), allReadsOK(h), isPersistFO(n, p(l)), onePendingW(t, l0, p), FO(t) ∈ p(l), ¬ t ∈ rs(l), ¬ FO(t) ∈ p(l) -p n ⊦
Used formulas: l = l0
| FO(t) = p(l)[n], l = l0, ((h | l) | t) | false ≠ [], FOFollowsW(t, p(l0)), absloc(events((h | l) | false), rs(l), p(l)), allReadsOK(h), isPersistFO(n, p(l)), onePendingW(t, l0, p), FO(t) ∈ p(l), ¬ t ∈ rs(l), ¬ FO(t) ∈ p(l) -p n ⊦ |
FO(t) = p(l0)[n], ((h | l0) | t) | false ≠ [], FOFollowsW(t, p(l0)), absloc(events((h | l0) | false), rs(l0), p(l0)), allReadsOK(h), isPersistFO(n, p(l0)), onePendingW(t, l0, p), FO(t) ∈ p(l0), ¬ t ∈ rs(l0), ¬ FO(t) ∈ p(l0) -p n ⊦
Used simplifier rules: delpos-get-fw: ⊦ ¬ a ∈ x -p n ∧ a ∈ x → a = x[n]; (forward) from specification list-del
| FO(t) = p(l0)[n], ((h | l0) | t) | false ≠ [], FOFollowsW(t, p(l0)), absloc(events((h | l0) | false), rs(l0), p(l0)), allReadsOK(h), isPersistFO(n, p(l0)), onePendingW(t, l0, p), FO(t) ∈ p(l0), ¬ t ∈ rs(l0), ¬ FO(t) ∈ p(l0) -p n ⊦ |
FO(t) = p(l0)[n], ((h | l0) | t) | false ≠ [], FOFollowsW(t, p(l0)), absloc(events((h | l0) | false), rs(l0), p(l0)), allReadsOK(h), isPersistFO(n, p(l0)), noPendingW(t, p), onePendingW(t, l0, p), FO(t) ∈ p(l0), ¬ t ∈ rs(l0), ¬ FO(t) ∈ p(l0) -p n ⊦
Used simplifier rules: ⊦ onePendingW(t, l, p) ∧ FOFollowsW(t, p(l)) ∧ isPersistFO(n, p(l)) ∧ ¬ FO(t) ∈ p(l) -p n ∧ FO(t) ∈ p(l) → noPendingW(t, p); (ss) Used formulas: noPendingW(t, p)
| FO(t) = p(l0)[n], ((h | l0) | t) | false ≠ [], FOFollowsW(t, p(l0)), absloc(events((h | l0) | false), rs(l0), p(l0)), allReadsOK(h), isPersistFO(n, p(l0)), noPendingW(t, p), onePendingW(t, l0, p), FO(t) ∈ p(l0), ¬ t ∈ rs(l0), ¬ FO(t) ∈ p(l0) -p n ⊦ |
⊦ allReadsOK(h) ↔ allReadsOKInd(∅, λ l. true, h)
FO(t) = p(l0)[n], ((h | l0) | t) | false ≠ [], FOFollowsW(t, p(l0)), absloc(events((h | l0) | false), rs(l0), p(l0)), allReadsOKInd(∅, λ l. true, h), isPersistFO(n, p(l0)), noPendingW(t, p), onePendingW(t, l0, p), FO(t) ∈ p(l0), ¬ t ∈ rs(l0), ¬ FO(t) ∈ p(l0) -p n ⊦
Used terms: h
| ⊦ allReadsOK(h) ↔ allReadsOKInd(∅, λ l. true, h) |
| FO(t) = p(l0)[n], ((h | l0) | t) | false ≠ [], FOFollowsW(t, p(l0)), absloc(events((h | l0) | false), rs(l0), p(l0)), allReadsOKInd(∅, λ l. true, h), isPersistFO(n, p(l0)), noPendingW(t, p), onePendingW(t, l0, p), FO(t) ∈ p(l0), ¬ t ∈ rs(l0), ¬ FO(t) ∈ p(l0) -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 = []
FO(t) = p(l0)[n], ((h | l0) | t) | false ≠ [], FOFollowsW(t, p(l0)), absloc(events((h | l0) | false), rs(l0), p(l0)), allReadsOKInd(∅, λ l. true, h), isPersistFO(n, p(l0)), noPendingW(t, p), onePendingW(t, l0, p), FO(t) ∈ p(l0), ¬ t ∈ rs(l0), ¬ FO(t) ∈ p(l0) -p n ⊦ absloc(events((h | l0) | false), rs(l0), p(l0)) ∧ allReadsOKInd(∅, λ l. true, h) ∧ true ∧ isPersistFO(n, p(l0)) ∧ (p(l0) -p n)|W | t = [] ∧ ¬ FO(t) ∈ p(l0) -p n ∧ FO(t) ∈ p(l0) ∧ ¬ t ∈ rs(l0)
Used terms: λ l. true, p(l0), ∅, l0, t, n, rs(l0), 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 = [] |
| FO(t) = p(l0)[n], ((h | l0) | t) | false ≠ [], FOFollowsW(t, p(l0)), absloc(events((h | l0) | false), rs(l0), p(l0)), allReadsOKInd(∅, λ l. true, h), isPersistFO(n, p(l0)), noPendingW(t, p), onePendingW(t, l0, p), FO(t) ∈ p(l0), ¬ t ∈ rs(l0), ¬ FO(t) ∈ p(l0) -p n ⊦ absloc(events((h | l0) | false), rs(l0), p(l0)) ∧ allReadsOKInd(∅, λ l. true, h) ∧ true ∧ isPersistFO(n, p(l0)) ∧ (p(l0) -p n)|W | t = [] ∧ ¬ FO(t) ∈ p(l0) -p n ∧ FO(t) ∈ p(l0) ∧ ¬ t ∈ rs(l0) |
FO(t) = p(l0)[n], ((h | l0) | t) | false ≠ [], p(l0) |W | t ≠ [], FOFollowsW(t, p(l0)), absloc(events((h | l0) | false), rs(l0), p(l0)), allReadsOKInd(∅, λ l. true, h), isPersistFO(n, p(l0)), noPendingW(t, p), onePendingW(t, l0, p), FO(t) ∈ p(l0), ¬ t ∈ rs(l0), ¬ FO(t) ∈ p(l0) -p n ⊦
Used simplifier rules: ⊦ isPersistFO(n, fowl) → (fowl -p n)|W = fowl |W; (s)
| FO(t) = p(l0)[n], ((h | l0) | t) | false ≠ [], p(l0) |W | t ≠ [], FOFollowsW(t, p(l0)), absloc(events((h | l0) | false), rs(l0), p(l0)), allReadsOKInd(∅, λ l. true, h), isPersistFO(n, p(l0)), noPendingW(t, p), onePendingW(t, l0, p), FO(t) ∈ p(l0), ¬ t ∈ rs(l0), ¬ FO(t) ∈ p(l0) -p n ⊦ |
⊦ noPendingW(t, p) ↔ (∀ l. p(l) |W | t = [])
FO(t) = p(l0)[n], ((h | l0) | t) | false ≠ [], p(l0) |W | t ≠ [], FOFollowsW(t, p(l0)), absloc(events((h | l0) | false), rs(l0), p(l0)), allReadsOKInd(∅, λ l. true, h), isPersistFO(n, p(l0)), onePendingW(t, l0, p), FO(t) ∈ p(l0), ¬ t ∈ rs(l0), ¬ FO(t) ∈ p(l0) -p n, ∀ l. p(l) |W | t = [] ⊦
Used terms: t, p
| ⊦ noPendingW(t, p) ↔ (∀ l. p(l) |W | t = []) |
| FO(t) = p(l0)[n], ((h | l0) | t) | false ≠ [], p(l0) |W | t ≠ [], FOFollowsW(t, p(l0)), absloc(events((h | l0) | false), rs(l0), p(l0)), allReadsOKInd(∅, λ l. true, h), isPersistFO(n, p(l0)), onePendingW(t, l0, p), FO(t) ∈ p(l0), ¬ t ∈ rs(l0), ¬ FO(t) ∈ p(l0) -p n, ∀ l. p(l) |W | t = [] ⊦ |
Used terms: l0
| FO(t) = p(l)[n], l ≠ l0, ((h | l) | t) | false ≠ [], FOFollowsW(t, p(l0)), absloc(events((h | l) | false), rs(l), p(l)), allReadsOK(h), isPersistFO(n, p(l)), onePendingW(t, l0, p), FO(t) ∈ p(l), ¬ t ∈ rs(l), ¬ FO(t) ∈ p(l) -p n ⊦ |
⊦ allReadsOK(h) ↔ allReadsOKInd(∅, λ l. true, h)
FO(t) = p(l)[n], l ≠ l0, ((h | l) | t) | false ≠ [], FOFollowsW(t, p(l0)), absloc(events((h | l) | false), rs(l), p(l)), allReadsOKInd(∅, λ l. true, h), isPersistFO(n, p(l)), onePendingW(t, l0, p), FO(t) ∈ p(l), ¬ t ∈ rs(l), ¬ FO(t) ∈ p(l) -p n ⊦
Used terms: h
| ⊦ allReadsOK(h) ↔ allReadsOKInd(∅, λ l. true, h) |
| FO(t) = p(l)[n], l ≠ l0, ((h | l) | t) | false ≠ [], FOFollowsW(t, p(l0)), absloc(events((h | l) | false), rs(l), p(l)), allReadsOKInd(∅, λ l. true, h), isPersistFO(n, p(l)), onePendingW(t, l0, p), FO(t) ∈ p(l), ¬ 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 = []
FO(t) = p(l)[n], l ≠ l0, ((h | l) | t) | false ≠ [], FOFollowsW(t, p(l0)), absloc(events((h | l) | false), rs(l), p(l)), allReadsOKInd(∅, λ l. true, h), isPersistFO(n, p(l)), onePendingW(t, l0, p), FO(t) ∈ p(l), ¬ t ∈ rs(l), ¬ FO(t) ∈ p(l) -p n ⊦ absloc(events((h | l) | false), rs(l), p(l)) ∧ allReadsOKInd(∅, λ l. true, h) ∧ true ∧ isPersistFO(n, p(l)) ∧ (p(l) -p n)|W | t = [] ∧ ¬ FO(t) ∈ p(l) -p n ∧ FO(t) ∈ p(l) ∧ ¬ t ∈ rs(l)
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 = [] |
| FO(t) = p(l)[n], l ≠ l0, ((h | l) | t) | false ≠ [], FOFollowsW(t, p(l0)), absloc(events((h | l) | false), rs(l), p(l)), allReadsOKInd(∅, λ l. true, h), isPersistFO(n, p(l)), onePendingW(t, l0, p), FO(t) ∈ p(l), ¬ t ∈ rs(l), ¬ FO(t) ∈ p(l) -p n ⊦ absloc(events((h | l) | false), rs(l), p(l)) ∧ allReadsOKInd(∅, λ l. true, h) ∧ true ∧ isPersistFO(n, p(l)) ∧ (p(l) -p n)|W | t = [] ∧ ¬ FO(t) ∈ p(l) -p n ∧ FO(t) ∈ p(l) ∧ ¬ t ∈ rs(l) |
FO(t) = p(l)[n], l ≠ l0, ((h | l) | t) | false ≠ [], p(l) |W | t ≠ [], FOFollowsW(t, p(l0)), absloc(events((h | l) | false), rs(l), p(l)), allReadsOKInd(∅, λ l. true, h), isPersistFO(n, p(l)), onePendingW(t, l0, p), FO(t) ∈ p(l), ¬ t ∈ rs(l), ¬ FO(t) ∈ p(l) -p n ⊦
Used simplifier rules: ⊦ isPersistFO(n, fowl) → (fowl -p n)|W = fowl |W; (s)
| FO(t) = p(l)[n], l ≠ l0, ((h | l) | t) | false ≠ [], p(l) |W | t ≠ [], FOFollowsW(t, p(l0)), absloc(events((h | l) | false), rs(l), p(l)), allReadsOKInd(∅, λ l. true, h), isPersistFO(n, p(l)), onePendingW(t, l0, p), FO(t) ∈ p(l), ¬ t ∈ rs(l), ¬ FO(t) ∈ p(l) -p n ⊦ |
⊦ onePendingW(t, l, p) ↔ (∀ l0. l0 ≠ l → p(l0) |W | t = [])
FO(t) = p(l)[n], l ≠ l0, ((h | l) | t) | false ≠ [], p(l) |W | t ≠ [], FOFollowsW(t, p(l0)), absloc(events((h | l) | false), rs(l), p(l)), allReadsOKInd(∅, λ l. true, h), isPersistFO(n, p(l)), FO(t) ∈ p(l), ¬ t ∈ rs(l), ¬ FO(t) ∈ p(l) -p n, ∀ l1. l1 ≠ l0 → p(l1) |W | t = [] ⊦
Used terms: t, l0, p
| ⊦ onePendingW(t, l, p) ↔ (∀ l0. l0 ≠ l → p(l0) |W | t = []) |
| FO(t) = p(l)[n], l ≠ l0, ((h | l) | t) | false ≠ [], p(l) |W | t ≠ [], FOFollowsW(t, p(l0)), absloc(events((h | l) | false), rs(l), p(l)), allReadsOKInd(∅, λ l. true, h), isPersistFO(n, p(l)), FO(t) ∈ p(l), ¬ t ∈ rs(l), ¬ FO(t) ∈ p(l) -p n, ∀ l1. l1 ≠ l0 → p(l1) |W | t = [] ⊦ |
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.