checkinv : map Esetnm tosetof Eid * map Eid to [Value] * map Rkey to
Rinf -> bool
checkinv (esm,em,rm) == dom em = dunionrng esm and forall rk insetdom rm & let mk_Rkey(-,fs,ts)=rk in let mk_Rinf(tp,r) = rm(rk) in
{fs,ts} subsetdom esm and
(tp = <ONETOMANY> => forall t1,t2 in set r & t1.tv = t2.tv => t1.fv = t2.fv) and
(tp = <MANYTOONE> => forall t1,t2 in set r & t1.fv = t2.fv =>t1.tv = t2.tv) and
(tp = <ONETOONE> => forall t1,t2 in set r & t1.fv = t2.fv <=> t1.tv = t2.tv) and forall mk_Tuple(fv,tv) inset r & fv inset esm(fs) and tv inset esm(ts)
state Ndb of
esm : map Esetnm tosetof Eid
em : map Eid to [Value]
rm : map Rkey to Rinf
inv mk_Ndb(esm,em,rm) == checkinv (esm,em,rm)
init ndb == ndb = mk_Ndb({|->},{|->},{|->}) end
operations
ADDES(es:Esetnm) extwr esm : map Esetnm tosetof Eid pre es notinsetdom esm post esm = esm~ munion {es |-> {}};
DELES(es:Esetnm) extwr esm : map Esetnm tosetof Eid rd rm : map Rkey to Rinf pre es insetdom esm and esm(es) = {} and
es notinset {rk.fs | rk insetdom rm } union {rk.ts |
rk insetdom rm} post esm = {es} <-: esm~;
ADDENT(memb : setof Esetnm, val : [Value]) eid :Eid extwr esm : map Esetnm tosetof Eid wr em : map Eid to [Value] pre memb subsetdom esm post eid notinsetdom em~ and
em = em~ munion {eid |-> val} and
esm = esm~ ++ {es |-> esm~(es) union {eid} | es inset
memb };
DELENT(eid:Eid) extwr esm : map Esetnm tosetof Eid wr em : map Eid to [Value] rd rm : map Rkey to Rinf pre eid insetdom em and forall t insetdunion{ri.r|ri insetrng rm}& t.fv <>
eid and t.tv <> eid post esm = {es |-> esm~(es) \ {eid} | es insetdom esm~} and
em = {eid} <-: em~;
ADDREL( rk:Rkey, tp:Maptp) extrd esm : map Esetnm tosetof Eid wr rm : map Rkey to Rinf pre {rk.fs,rk.ts} subsetdom esm and
rk notinsetdom rm post rm = rm~ munion {rk |-> mk_Rinf(tp,{})};
DELREL (rk:Rkey) extwr rm : map Rkey to Rinf pre rk insetdom rm and (rm(rk)).r ={} post rm ={rk} <-:rm~;
ADDTUP (fval,tval : Eid, rk:Rkey) extwr rm : map Rkey to Rinf rd esm : map Esetnm tosetof Eid rd em : map Eid to [Value] pre rk insetdom rm and let ri = mu(rm(rk),r |-> (rm(rk)).r union
{mk_Tuple(fval,tval)}) in
checkinv (esm,em,rm ++ {rk |->ri}) postlet ri =mu(rm~(rk),r |-> (rm~(rk)).r union
{mk_Tuple(fval,tval)}) in rm =rm~ ++ {rk |->ri};
DELTUP(fval,tval:Eid, rk:Rkey) extwr rm : map Rkey to Rinf pre rk insetdom rm postlet ri = mu(rm~(rk),r |-> (rm~(rk)).r \
{mk_Tuple(fval,tval)}) in
rm =rm~ ++ {rk |->ri}
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.0Bemerkung:
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.