[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,
enrich
FLITPSC-preds,
Bevent
with
functions
. |WL . : List(Bevent) × L → List(Bevent) prio 8 left;
. |SF . : List(Bevent) × L → List(Bevent) prio 8 left;
. .FOWs ( . ) : List(Bevent) × T × L → List(FOW);
. ⊕ . : V × List(Bevent) → V;
. ⊕ . : (L → V) × List(Bevent) → L → V;
predicates
writersOk : (T → List(Bevent)) × (L → List(FOW)) × (L → Set(T));
pendingOk : (T → List(Bevent)) × (L → List(FOW));
noPendingW : T × (T → List(Bevent)) × (L → List(FOW));
noPending : T × (T → List(Bevent)) × (L → List(FOW));
isPropFO : Nat × L × List(Bevent);
FOFollowsW : T × List(Bevent) × (L → List(FOW)) × L;
FOFollowsW : T × List(Bevent) × List(FOW) × L;
SFTrailing : (T → List(Bevent));
. ⊒w . : List(Bevent) × List(Bevent);
. .FOs? : (T → List(Bevent));
readFOsOk : (T → List(Bevent)) × (L → Set(T));
rely : T × (L → List(FOW)) × (T → List(Bevent)) × (L → List(FOW)) × (T → List(Bevent));
rely : T × L × List(FOW) × List(Bevent) × List(FOW) × List(Bevent);
variables
be : Bevent;
bel : List(Bevent);
bq : T → List(Bevent);
rfo : T → List(Bevent);
l : L;
v : V;
mem : L → V;
t : T;
p : L → List(FOW);
pq : L → List(FOW);
writers : L → Set(T);
m : Nat;
n : Nat;
fow : FOW;
fowl : List(FOW);
axioms
overwrite-def: ((mem ⊕ bel))(l) = mem(l) ⊕ (bel |WL l);
used for: ls;
overwrite-base: v ⊕ [] = v;
used for: s, ls;
overwrite-rec-FO: v ⊕ (FO(l) ' + bel) = v ⊕ bel;
used for: s, ls;
overwrite-rec-SF: v ⊕ (SF ' + bel) = v ⊕ bel;
used for: s, ls;
overwrite-rec-W: v ⊕ (W(l, v0) ' + bel) = v0 ⊕ bel;
used for: s, ls;
isPropFO-def: isPropFO(n, l, bel) ↔ n < # bel ∧ bel[n] = FO(l) ∧ (∀ m. m < n → bel[m] ≠ SF ∧ (bel[m].W? ∨ bel[m].FO? → bel[m].l ≠ l));
BrestrictL-def: bel |WL l = bel.filter(λ be. be.W? ∧ be.l = l);
B-restrict-SF-l: bel |SF l = bel.filter(λ be. be = SF ∨ be.l = l);
used for: ls;
B-postfix-weak: bel0 ⊒w bel1 ↔ (∀ l. bel0 |SF l ⊒ bel1 |SF l);
used for: ls;
SFTrailing: SFTrailing(bq) ↔ (∀ t. bq(t) = [] ∨ ¬ SF ∈ bq(t).butlast);
used for: ls;
FOs: rfo.FOs? ↔ (∀ t. rfo(t).forall(.FO?));
used for: ls;
readFOsOk: readFOsOk(rfo, writers) ↔ rfo.FOs? ∧ (∀ t, l. t ∈ writers(l) → rfo(t) = []);
used for: ls;
pendingOk: pendingOk(bq, p) ↔ (∀ l, t. #(p(l) |W | t) + #(bq(t) |WL l) ≤ 1);
used for: ls;
noPending: noPending(t, bq, p) ↔ (∀ l. p(l) | t = [] ∧ bq(t) = []);
used for: ls;
noPendingW: noPendingW(t, bq, p) ↔ (∀ l. p(l) |W | t = [] ∧ bq(t) |WL l = []);
used for: ls;
FOFollowsW-old-def:
FOFollowsW(t, bel, p, l)
↔ (∀ n.
n < # p(l) ∧ p(l)[n].W? ∧ p(l)[n].tid = t
→ (∃ n0. n < n0 ∧ n0 < # p(l) ∧ p(l)[n0] = FO(t) ∨ bel ≠ [] ∧ bel.head = FO(l)))
∧ (bel ≠ [] → bel = SF ' ∨ bel = FO(l) ' + SF ' ∨ bel.head.W? ∧ bel.head.l = l ∧ bel.tail = FO(l) ' + SF ');
FOFollowsW-def:
FOFollowsW(t, bel, fowl, l)
↔ (∀ fowl0, fowl1, v. fowl = fowl0 + W(v, t) ' + fowl1 → FO(t) ∈ fowl1 ∨ FO(l) ∈ bel)
∧ (∀ bel0, bel1, v. bel = bel0 + W(l, v) ' + bel1 → FO(l) ∈ bel1);
writersOk:
writersOk(bq, p, writers)
↔ (∀ l, t. (t ∈ writers(l) → (∀ l0. l0 ≠ l → ¬ t ∈ writers(l0))) ∧ (¬ t ∈ writers(l) → p(l) |W | t = [] ∧ bq(t) |WL l = []));
used for: ls;
FOWs-base: [].FOWs(t, l) = [];
used for: s, ls;
FOWs-SF: (SF ' + bel).FOWs(t, l) = bel.FOWs(t, l);
used for: s, ls;
FOWs-FO: (FO(l0) ' + bel).FOWs(t, l) = (l = l0 ⊃ FO(t) ';[]) + bel.FOWs(t, l);
used for: s, ls;
FOWs-W: (W(l0, v) ' + bel).FOWs(t, l) = (l = l0 ⊃ W(v, t) ';[]) + bel.FOWs(t, l);
used for: s, ls;
rely-def: rely(t, pq, bq, pq0, bq0) ↔ (∀ l. rely(t, l, pq(l), bq(t), pq0(l), bq0(t)));
used for: ls;
rely-local-def: rely(t, l, fowl, bel, fowl0, bel0) ↔ (fowl | t) + bel.FOWs(t, l) ⊒ (fowl0 | t) + bel0.FOWs(t, l);
used for: ls;
end enrich