[Imprint][Data Privacy Statement][E-Mail]

Back to main index. View the specification. View theorem base summary, View theorem base listing, the used properties by spec, the dependency list, the symbol table,

Theorem base for Specification PLIB-preds

This is a listing of all goals defined over the current specification. Axioms are marked yellow, proved theorems green and unproved theorems blue. Click on individual names to get more information on the proof.

Name: Sequent: Type:
first-vol-write-size3 ⊦ ¬ # h < firstVolWrite(l, h) A User Theorem
allwritesOK-ind-at-most-one-write ⊦ allWritesOKInd(pending, persisted, h) → #((h |W | t) | false) ≤ 1 A User Theorem
restrict-w-l-swap ⊦ h |W | l = (h | l)|W A User Theorem
first-vol-write-split ⊦ firstVolWrite(l, h) < # h → (∃ t, v. h = h.take(firstVolWrite(l, h)) + ((W(t, l, v), false) + h.drop(firstVolWrite(l, h) + 1))) A User Theorem
allwritesOK-ind-unpersisted-one-write ⊦ ¬ persisted(l) → ¬ allWritesOKInd(pending, persisted, h1 + (W(t, l, v), true) ' + h2) A User Theorem
lastPersistedOrElse-base ⊦ [].lastPersistedOrElse(l, b) ↔ b An Axiom
allReadsOKInd-recR ⊦ allReadsOKInd(mem, persisted, (R(t, l, v), b) ' + h) ↔ v = mem(l) ∧ (b ↔ persisted(l)) ∧ allReadsOKInd(mem, persisted, h) An Axiom
restrict-l-empty ⊦ [] | l = [] A User Theorem
take-first-vol-write-no-unpersisted-writes ⊦ ((h.take(firstVolWrite(l, h)))|W | l) | false = [] A User Theorem
restrict-b-empty ⊦ [] | b = [] A User Theorem
restrict-false-false ⊦ (e, false) ' + h | false = (e, false) ' + (h | false) A User Theorem
restrict-read-W ⊦ ((W(t, l, v), b) ' + h)|R = h |R A User Theorem
allreadsOK-filter-persisted ⊦ allReadsOK(h) → allReadsOK(h | true) A User Theorem
restrict-R ⊦ h |R = h.filter(λ vpe. vpe._1.R?) An Axiom
events-one ⊦ events(vpe ') = vpe._1 ' A User Theorem
restrict-l-W-other ⊦ l ≠ l0 → (W(t, l, v), b) ' + h | l0 = h | l0 A User Theorem
restrict-l-t-swap ⊦ (h | l) | t = (h | t) | l A User Theorem
persistDependentReads-read ⊦ persistDependentReads(l, (R(t, l, v), b) ' + h) = (R(t, l, v), true) ' + persistDependentReads(l, h) An Axiom
firstVolWrite-def ⊦ firstVolWrite(l, h) = h.indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2) An Axiom
allwritesOK-filter-persisted ⊦ allWritesOK(h) → allWritesOK(h | true) A User Theorem
persistDependentReads-restrict-other-loc ⊦ l ≠ l0 → persistDependentReads(l, h) | l0 = h | l0 A User Theorem
restrict-l-append ⊦ h + h0 | l0 = (h | l0) + (h0 | l0) A User Theorem
restrict-w-b-swap ⊦ h |W | b = (h | b)|W A User Theorem
overwrite-persist-one-write ⊦ mem ⊕ (h1 + (W(t, l, v), true) ' + h2) = mem ⊕ (h1 + (W(t, l, v), false) ' + h2) A User Theorem
allReadsOK-one ⊦ allReadsOK(vpe ') ↔ vpe._1.W? ∨ vpe._2 ∧ vpe._1.v = O A User Theorem
persisted-update-same ⊦ persisted(l := b0)(l := b) = persisted(l := b) A User Theorem
restrict-write-W ⊦ ((W(t, l, v), b) ' + h)|W = (W(t, l, v), b) ' + h |W A User Theorem
restrict-true-false ⊦ (e, false) ' + h | true = h | true A User Theorem
rely-refl ⊦ rely(t, h, h) A User Theorem
lastPersistedOrElse-recW ⊦ ((W(t0, l0, v0), b0) ' + h).lastPersistedOrElse(l, b) ↔ h.lastPersistedOrElse(l, (l = l0 ⊃ b0;b)) An Axiom
persistDependentReads-otherread ⊦ l ≠ l0 → persistDependentReads(l, (R(t, l0, v), b) ' + h) = (R(t, l0, v), b) + persistDependentReads(l, h) An Axiom
hist-more-persisted-refl ⊦ h ⊑p h A User Theorem
overwrite-one-write ⊦ mem ⊕ (W(t, l, v), b) ' = mem(l := v) A User Theorem
rely-stable-write-one ⊦ rely(t, h, h0) ∧ (h | t) | false = (W(t, l, v), b) ' ∧ (h0 | t) | false ≠ [] → (h0 | t) | false = (W(t, l, v), b) ' A User Theorem
restrict-W-append ⊦ (h + h0)|W = h |W + h0 |W A User Theorem
overwrite-one-read ⊦ mem ⊕ (R(t, l, v), b) ' = mem A User Theorem
allwritesOK-one-unpersisted-write-no-persisted-after ⊦ allWritesOK(h1 + (W(t, l, v), false) ' + h2) → (h2 |W | l) | true = [] A User Theorem
allwritesOK-ind-pending-zero-write ⊦ pending(t) ∧ allWritesOKInd(pending, persisted, h) → (h |W | t) | false = [] A User Theorem
rely-stable-write-empty ⊦ rely(t, h, h0) ∧ (h | t) | false = [] → (h0 | t) | false = [] A User Theorem
restrict-t-append ⊦ h + h0 | t = (h | t) + (h0 | t) A User Theorem
overwrite-base ⊦ mem ⊕ [] = mem An Axiom
overwrite-attach-read ⊦ mem ⊕ (h + (R(t, l, v), b) ') = mem ⊕ h A User Theorem
restrict-loc ⊦ h | l = h.filter(λ vpe. vpe._1.l = l) An Axiom
allwritesOK-ind-persist-one-write⊦ allWritesOKInd(pending, persisted, h1 + (W(t, l, v), false) ' + h2) → (allWritesOKInd(pending, persisted, h1 + (W(t, l, v), true) ' + h2) ↔ persisted(l) ∧ (h1 |W | l) | false = []) A User Theorem
allwritesOK-persist-dependent-reads ⊦ allWritesOK(h1 + h2) → allWritesOK(h1 + persistDependentReads(l, h2)) A User Theorem
allReadsOK-tailread ⊦ allReadsOK((R(t1, l, v), b) ' + h) → allReadsOK(h) A User Theorem
restrict-read-one ⊦ vpe ' |R = (vpe._1.W? ⊃ [];vpe ') A User Theorem
first-vol-write-rec-write-persisted ⊦ firstVolWrite(l, (W(t, l0, v), true) ' + h) = firstVolWrite(l, h) + 1 A User Theorem
restrict-events ⊦ events(h) = h.map(λ vpe. vpe._1) An Axiom
allreadsok-ind-persist⊦ allReadsOKInd(mem, persisted, h1 + (W(t, l, v), false) ' + h2) → allReadsOKInd(mem, persisted, h1 + (W(t, l, v), true) ' + persistDependentReads(l, h2)) A User Theorem
persistDependentReads-restrict-single-W ⊦ ((h | l) | t) | false = (W(t0, l0, v0), b) ' → ((persistDependentReads(l, h) | l) | t) | false = (W(t0, l0, v0), b) ' A User Theorem
allwritesOK-ind-swap-flags-persist-one-write ⊦ allWritesOKInd(pending(t := true), persisted(l := false), h) → allWritesOKInd(pending(t := false), persisted(l := true), h) A User Theorem
first-vol-write-rec-write-unpersisted ⊦ firstVolWrite(l, (W(t, l, v), false) ' + h) = 0 A User Theorem
allreadsOK-ind-filter-persisted-upd-false ⊦ allReadsOKInd(mem(l := v), persisted(l := false), h.filter(._2)) → allReadsOKInd(mem, persisted, h.filter(._2)) A User Theorem
persistDependentReads-restrict-empty ⊦ ((h | l) | t) | false = [] → ((persistDependentReads(l, h) | l) | t) | false = [] A User Theorem
allreadsok-ind-add-read ⊦ allReadsOKInd(mem, persisted, h) → allReadsOKInd(mem, persisted, h + (R(t, l, ((mem ⊕ h))(l)), h.lastPersistedOrElse(l, persisted(l))) ') A User Theorem
allwritesOK-add-read ⊦ allWritesOK(h) → allWritesOK(h + (R(t, l, v), b) ') A User Theorem
allreadsok-ind-add-write ⊦ allReadsOKInd(mem, persisted, h) → allReadsOKInd(mem, persisted, h + (W(t, l, v), b) ') A User Theorem
allwritesOK-ind-one-unpersisted-write-no-persisted-after ⊦ allWritesOKInd(pending, persisted, h1 + (W(t, l, v), false) ' + h2) → (h2 |W | l) | true = [] A User Theorem
restrict-write-attach-R ⊦ (h + (R(t, l, v), b) ')|W = h |W A User Theorem
events-append ⊦ events(h1 + h2) = events(h1) + events(h2) A User Theorem
allwritesOK-at-most-one-write ⊦ allWritesOK(h) → #((h |W | t) | false) ≤ 1 A User Theorem
allreadsok-persist ⊦ allReadsOK(h1 + (W(t, l, v), false) ' + h2) → allReadsOK(h1 + (W(t, l, v), true) ' + persistDependentReads(l, h2)) A User Theorem
restrict-b-idem ⊦ h | b | b = h | b A User Theorem
mem-update-same ⊦ mem(l := v0)(l := v) = mem(l := v) A User Theorem
first-vol-write-size2 ⊦ firstVolWrite(l, h) = # h ↔ (h |W | l) | false = [] A User Theorem
events-empty ⊦ events([]) = [] A User Theorem
persisted-update-swap ⊦ l0 ≠ l1 → persisted(l0 := b0)(l1 := b1) = persisted(l1 := b1)(l0 := b0) A User Theorem
allReadsOK-ind-no-initial-unpersisted-read ⊦ allReadsOKInd(mem, persisted, h) ∧ persisted(l) → events((h | l) | false) ≠ R(t0, l0, v0) ' + el A User Theorem
persistDependentReads-otherwrite ⊦ l ≠ l0 → persistDependentReads(l, (W(t, l0, v), b) ' + h) = (W(t, l0, v), b) ' + persistDependentReads(l, h) An Axiom
allWritesOKInd-recR ⊦ allWritesOKInd(pending, persisted, (R(t, l, v), b) ' + h) ↔ allWritesOKInd(pending, persisted, h) An Axiom
restrict-false-true ⊦ (e, true) ' + h | false = h | false A User Theorem
hist-more-persisted-base2 ⊦ ¬ vpe ' + h ⊑p [] An Axiom
restrict-W-empty ⊦ [] |W = [] A User Theorem
overwrite-persist-dependent-reads ⊦ mem ⊕ (h1 + persistDependentReads(l, h2)) = mem ⊕ (h1 + h2) A User Theorem
allReadsOK-no-initial-unpersisted-read ⊦ allReadsOK(h) → events((h | l) | false) ≠ R(t0, l0, v0) ' + el A User Theorem
allReadsOKInd-base ⊦ allReadsOKInd(mem, persisted, []) An Axiom
persistDependentReads-restrict-same-loc ⊦ persistDependentReads(l, h) | l = persistDependentReads(l, h | l) A User Theorem
allwritesOK-one ⊦ allWritesOK(vpe ') A User Theorem
allwritesOK-ind-pending-not-in ⊦ pending(t) ∧ allWritesOKInd(pending, persisted, h) → ¬ (W(t, l, v), false) ∈ h A User Theorem
allwritesOK-persist-one-write ⊦ allWritesOK(h1 + (W(t, l, v), false) ' + h2) → (allWritesOK(h1 + (W(t, l, v), true) ' + h2) ↔ (h1 |W | l) | false = []) A User Theorem
rely-unpersisted-subset ⊦ rely(t, h0, h1) → (h1 | t) | false ⊆ (h0 | t) | false A User Theorem
hist-more-persisted-size-eq ⊦ h0 ⊑p h1 → (# h0 = # h1 ↔ true) A User Theorem
rely-attach ⊦ rely(t, h, h + (e, b) ') ↔ e.t ≠ t A User Theorem
restrict-true-false-empty ⊦ h | true | false = [] A User Theorem
hist-more-persisted-trans ⊦ h0 ⊑p h1 ∧ h1 ⊑p h2 → h0 ⊑p h2 A User Theorem
pending-update-same ⊦ pending(t := b0)(t := b) = pending(t := b) A User Theorem
restrict-w-t-swap ⊦ h |W | t = (h | t)|W A User Theorem
restrict-l-one ⊦ vpe ' | l = (vpe._1.l = l ⊃ vpe ';[]) A User Theorem
at-overwrite-mem-update-other ⊦ l ≠ l0 → ((mem(l0 := v) ⊕ h))(l) = ((mem ⊕ h))(l) A User Theorem
event-persistDependentReads ⊦ events(persistDependentReads(l, h)) = events(h) A User Theorem
first-vol-write-rec-write-other ⊦ l0 ≠ l → firstVolWrite(l, (W(t, l0, v), b) ' + h) = firstVolWrite(l, h) + 1 A User Theorem
restrict-write-one ⊦ vpe ' |W = (vpe._1.W? ⊃ vpe ';[]) A User Theorem
restrict-b-append ⊦ h + h0 | b = (h | b) + (h0 | b) A User Theorem
hist-more-persisted-append ⊦ h + h0 ⊑p h + h1 ↔ h0 ⊑p h1 A User Theorem
allReadsOKInd-recW ⊦ allReadsOKInd(mem, persisted, (W(t, l, v), b) ' + h) ↔ allReadsOKInd(mem(l := v), persisted(l := b), h) An Axiom
restrict-W ⊦ h |W = h.filter(λ vpe. vpe._1.W?) An Axiom
allreadsOK-ind-filter-persisted ⊦ allReadsOKInd(mem, persisted, h) → allReadsOKInd(mem, persisted, h.filter(._2)) A User Theorem
overwrite-persist-dependent-reads-restrict-true ⊦ mem ⊕ (h1 + (persistDependentReads(l, h2) | true)) = mem ⊕ (h1 + (h2 | true)) A User Theorem
restrict-false-attach-true ⊦ h + (e, true) ' | false = h | false A User Theorem
restrict-l-R-other ⊦ l ≠ l0 → (R(t, l, v), b) ' + h | l0 = h | l0 A User Theorem
allwritesOK-ind-persist-dependent-reads ⊦ allWritesOKInd(pending, persisted, h1 + h2) → allWritesOKInd(pending, persisted, h1 + persistDependentReads(l, h2)) A User Theorem
hist-indhPred([]), ∀ t, l, v, h. hPred(h) → hPred((W(t, l, v), true) ' + h), ∀ t, l, v, h. hPred(h) → hPred((W(t, l, v), false) ' + h), ∀ t, l, v, h. hPred(h) → hPred((R(t, l, v), true) ' + h), ∀ t, l, v, h. hPred(h) → hPred((R(t, l, v), false) ' + h) ⊦ hPred(h) A User Theorem
hist-more-persisted-base1 ⊦ [] ⊑p h ↔ h = [] An Axiom
restrict-t-one ⊦ (e, b) ' | t = (t = e.t ⊃ (e, b) ';[]) A User Theorem
restrict-vp ⊦ h | b = h.filter(λ vpe. vpe._2 ↔ b) An Axiom
restrict-l-W-same ⊦ (W(t, l, v), b) ' + h | l = (W(t, l, v), b) ' + (h | l) A User Theorem
mem-update-swap ⊦ l0 ≠ l1 → mem(l0 := v0)(l1 := v1) = mem(l1 := v1)(l0 := v0) A User Theorem
first-vol-write-head-restricted ⊦ (h |W | l) | false ≠ [] → h[firstVolWrite(l, h)] = ((h |W | l) | false).head A User Theorem
first-vol-write-rec-read ⊦ firstVolWrite(l, (R(t, l0, v), b) ' + h) = firstVolWrite(l, h) + 1 A User Theorem
overwrite-persist-one-write-restrict-true ⊦ (h2 |W | l) | true = [] → mem ⊕ (h1 + (W(t, l, v), true) ' + h2 | true) = (mem ⊕ (h1 + (W(t, l, v), false) ' + h2 | true))(l := v) A User Theorem
restrict-l-R-same ⊦ (R(t, l, v), b) ' + h | l = (R(t, l, v), b) ' + (h | l) A User Theorem
rely-def ⊦ rely(t, h0, h1) ↔ (∃ h2, h3. h1 = h2 + h3 ∧ h0 ⊑p h2 ∧ h3 | t = []) An Axiom
persistDependentReads-base ⊦ persistDependentReads(l, []) = [] An Axiom
allWritesOK-def ⊦ allWritesOK(h) ↔ allWritesOKInd(λ t. false, λ l. true, h) An Axiom
allWritesOKInd-recW⊦ allWritesOKInd(pending, persisted, (W(t, l, v), b) ' + h) ↔ ¬ pending(t) ∧ (b → persisted(l)) ∧ allWritesOKInd(pending(t := ¬ b), persisted(l := b), h) An Axiom
allReadsOK-nowrites-allpersisted ⊦ ((h | l) | false)|W = [] ∧ allReadsOK(h) → (h | l) | false = [] A User Theorem
restrict-bool-one ⊦ (e, b) ' | b0 = (b ↔ b0 ⊃ (e, b) ';[]) A User Theorem
overwrite-attach-write ⊦ mem ⊕ (h + (W(t, l, v), b) ') = (mem ⊕ h)(l := v) A User Theorem
at-overwrite-no-write ⊦ (h | l)|W = [] → ((mem ⊕ h))(l) = mem(l) A User Theorem
allReadsOK-nowrites-allpersisted-ind ⊦ ((h | l) | false)|W = [] ∧ persisted(l) ∧ allReadsOKInd(mem, persisted, h) → (h | l) | false = [] A User Theorem
allWritesOKInd-base ⊦ allWritesOKInd(pending, persisted, []) An Axiom
overwrite-rec-read ⊦ mem ⊕ ((R(t, l, v), b) ' + h) = mem ⊕ h An Axiom
restrict-read-R ⊦ ((R(t, l, v), b) ' + h)|R = (R(t, l, v), b) ' + h |R A User Theorem
allwritesOK-add-write ⊦ (h | t) | false = [] ∧ allWritesOK(h) → allWritesOK(h + (W(t, l, v), false) ') A User Theorem
hist-more-persisted-rec ⊦ vpe0 ' + h0 ⊑p vpe1 ' + h1 ↔ vpe0._1 = vpe1._1 ∧ (vpe0._2 → vpe1._2) ∧ h0 ⊑p h1 An Axiom
allreadsok-add-write ⊦ allReadsOK(h) → allReadsOK(h + (W(t, l, v), false) ') A User Theorem
pending-update-swap ⊦ t0 ≠ t1 → pending(t0 := b0)(t1 := b1) = pending(t1 := b1)(t0 := b0) A User Theorem
restrict-t-b-empty-expand-loc ⊦ (h | t) | false = [] ↔ (∀ l. ((h | l) | t) | false = []) A User Theorem
first-vol-write-size ⊦ firstVolWrite(l, h) < # h ↔ (h |W | l) | false ≠ [] A User Theorem
restrict-l-b-swap ⊦ (h | l) | b = (h | b) | l A User Theorem
lastwrite-to-update ⊦ (h2 |W | l) | true = [] → mem ⊕ (h1 + (W(t, l, v), b) ' + (h2 | true)) = (mem ⊕ (h1 + (h2 | true)))(l := v) A User Theorem
allwritesOK-ind-add-write ⊦ (h | t) | false = [] ∧ allWritesOKInd(pending, persisted, h) → (allWritesOKInd(pending, persisted, h + (W(t, l, v), false) ') ↔ ¬ pending(t)) A User Theorem
hist-more-persisted-persistDependetReads ⊦ h ⊑p persistDependentReads(l, h) A User Theorem
restrict-true-attach-true ⊦ h + (e, true) ' | true = (h | true) + (e, true) ' A User Theorem
allreadsok-ind-one ⊦ allReadsOKInd(mem, persisted, (e, b) ') ↔ e.W? ∨ e.R? ∧ e.v = mem(e.l) ∧ (b ↔ persisted(e.l)) A User Theorem
restrict-t-empty ⊦ [] | t = [] A User Theorem
allWritesOK-ind-filter-persisted-upd-true ⊦ allWritesOKInd(pending(t := true), persisted(l := false), h.filter(._2)) → allWritesOKInd(pending, persisted, h.filter(._2)) A User Theorem
persistDependentReads-nextwrite ⊦ persistDependentReads(l, (W(t, l, v), b) ' + h) = (W(t, l, v), b) ' + h An Axiom
restrict-true-true ⊦ (e, true) ' + h | true = (e, true) ' + (h | true) A User Theorem
nowrites-lastPersistedtrue ⊦ (h |W | l) | false = [] → (h.lastPersistedOrElse(l, true) ↔ true) A User Theorem
restrict-write-R ⊦ ((R(t, l, v), b) ' + h)|W = h |W A User Theorem
persist-dependent-reads-unchanged-writes ⊦ persistDependentReads(l0, h) |W = h |W A User Theorem
lastPersistedOrElse-recR ⊦ ((R(t0, l0, v0), b0) ' + h).lastPersistedOrElse(l, b) ↔ h.lastPersistedOrElse(l, b) An Axiom
restrict-t-b-swap ⊦ (h | t) | b = (h | b) | t A User Theorem
restrict-read-attach-W ⊦ (h + (W(t, l, v), b) ')|R = h |R A User Theorem
allReadsOK-def ⊦ allReadsOK(h) ↔ allReadsOKInd(∅, λ l. true, h) An Axiom
restrict-false-attach-false ⊦ h + (e, false) ' | false = (h | false) + (e, false) ' A User Theorem
allReadsOK-firstreadpersisted ⊦ ¬ allReadsOK((R(t1, l, v), false) ' + h) A User Theorem
overwrite-rec-write ⊦ mem ⊕ ((W(t, l, v), b) ' + h) = mem(l := v) ⊕ h An Axiom
restrict-true-attach-false ⊦ h + (e, false) ' | true = h | true A User Theorem
allwritesOK-ind-swap-to-non-pending ⊦ allWritesOKInd(pending(t := true), persisted, h) → allWritesOKInd(pending(t := false), persisted, h) A User Theorem
rely-persist ⊦ rely(t, h0 + (e, b) ' + h1, h0 + (e, true) ' + persistDependentReads(l, h1)) A User Theorem
allreadsok-add-read ⊦ allReadsOK(h) → allReadsOK(h + (R(t, l, ((∅ ⊕ h))(l)), h.lastPersistedOrElse(l, true)) ') A User Theorem
lastPersisted-false-ex-persisted-write ⊦ h.lastPersistedOrElse(l, false) → (∃ vpe. vpe ∈ h ∧ vpe._2 ∧ vpe._1.l = l) A User Theorem
allWritesOK-ind-filter-persisted ⊦ allWritesOKInd(pending, persisted, h) → allWritesOKInd(pending, persisted, h.filter(._2)) A User Theorem
allwritesOK-ind-one ⊦ allWritesOKInd(pending, persisted, (e, b) ') ↔ e.R? ∨ e.W? ∧ ¬ pending(e.t) ∧ (b → persisted(e.l)) A User Theorem
restrict-R-empty ⊦ [] |R = [] A User Theorem
allwritesOK-ind-add-read ⊦ allWritesOKInd(pending, persisted, h) → allWritesOKInd(pending, persisted, h + (R(t, l, v), b) ') A User Theorem
restrict-thread ⊦ h | t = h.filter(λ vpe. vpe._1.t = t) An Axiom