--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/semantics/constraints.pl Thu Dec 13 13:53:35 2012 +0000
@@ -0,0 +1,342 @@
+%% The rules
+%% A decl is of the form
+%% decl(Type,N,Name,Rules)
+%% where Type is Inference or Constraint
+%% N is the inf/constraint number
+%% Name is the textual name
+%% Rules is the body of the rule.
+%% A declaration body is of the form
+%% Body ::= rule(Xs,Hyps,Ys,Concls)
+%% | comment(Comment,Body)
+%% | rules([Body1,...,Bodyn])
+%% A rule(Xs,Hyps,Ys,Body) is an implication
+%% forall Xs. Hyps ==> exists Ys. Concls
+%% A comment(Comment,Body) is a body with a surrounding comment
+%% A rules(L) is a list of rules, which will be formatted as a list.
+%% Nested rules() are not guaranteed to work, but comments within list
+%% elements are OK.
+
+
+decl('Inference', 5,'communication-generation-use-inference',
+ rule([id, a_2,a_1,attrs],
+ [wasInformedBy(id, a_2,a_1,attrs)],
+ [e, gen, t_1, use, t_2],
+ [wasGeneratedBy(gen, e,a_1,t_1,[]), used(use, a_2,e,t_2,[])])).
+
+decl('Inference', 6, 'generation-use-communication-inference',
+ rule([gen, a_1, t_1, attrs_1,id_2,a_2,t_2,attrs_2],
+ [wasGeneratedBy(gen, e,a_1,t_1,attrs_1),
+ used(id_2, a_2,e,t_2,attrs_2)],
+ [id],
+ [wasInformedBy(id, a_2,a_1,[])])).
+
+decl('Inference', 7, 'entity-generation-invalidation-inference',
+ rule([gen, e, a_1, t_1, attrs_1, id_2, a_2, t_2, attrs_2],
+ [wasGeneratedBy(gen, e,a_1,t_1,attrs_1),
+ used(id_2, a_2,e,t_2,attrs_2)],
+ [id],
+ [wasInformedBy(id, a_2,a_1,[])])).
+
+decl('Inference', 8, 'activity-start-end-inference',
+ rule([a, t_1, t_2, attrs],
+ [activity(a,t_1,t_2,attrs)],
+ [start, e_1, a_1, end, a_2, e_2],
+ [wasStartedBy(start, a,e_1,a_1,t_1,[]),
+ wasEndedBy(end, a,e_2,a_2,t_2,[])])).
+
+decl('Inference', 9, 'wasStartedBy-inference',
+ rule( [id, a, e_1, a_1, t, attrs],
+ [wasStartedBy(id, a,e_1,a_1,t,attrs)],
+ [gen, t_1],
+ [wasGeneratedBy(gen, e_1,a_1,t_1,[])])).
+
+
+decl('Inference', 10, 'wasEndedBy-inference',
+ rule( [id, a, e_1, a_1, t, attrs],
+ [wasEndedBy(id, a,e_1,a_1,t,attrs)],
+ [gen, t_1],
+ [wasGeneratedBy(gen, e_1,a_1,t_1,[])])).
+
+
+decl('Inference', 11, 'derivation-generation-use-inference',
+ comment('In this inference, none of <math>a</math>, <math>gen_2</math> or <math>use_1</math> can be placeholders -',
+ rule( [id, e_2, e_1, a, gen_2, use_1, attrs],
+ [wasDerivedFrom(id, e_2,e_1,a,gen_2,use_1,attrs)],
+ [s, t_1,t_2 ],
+ [used(use_1, a,e_1,t_1,[]),
+ wasGeneratedBy(gen_2, e_2,a,t_2,[])]))).
+
+
+decl('Inference', 12, 'revision-is-alternate-inference',
+ comment('In this inference, any of <math>a</math>, <math>g</math> or <math>u</math> may be placeholders.',
+ rule( [id, e_1, e_2, a, g,u],
+ [wasDerivedFrom(id, e_2,e_1,a,g,u,['prov:type = prov:Revision'])],
+ [],
+ [alternateOf(e_2,e_1)]))).
+
+decl('Inference', 13, 'attribution-inference',
+ rule([att, e, ag, attrs],
+ [wasAttributedTo(att, e,ag,attrs)],
+ [a, t, gen, assoc, pl],
+ [wasGeneratedBy(gen, e,a,t,[]),
+ wasAssociatedWith(assoc, a,ag,pl,[])])).
+
+decl('Inference', 14, 'delegation-inference',
+ rule( [id, ag_1, ag_2, a, attrs],
+ [actedOnBehalfOf(id, ag_1, ag_2, a, attrs)],
+ [ id_1, pl_1, id_2, pl_2 ],
+ [wasAssociatedWith(id_1, a, ag_1, pl_1, []),
+ wasAssociatedWith(id_2, a, ag_2, pl_2, [])])).
+
+decl('Inference', 15, 'influence-inference',
+ rules([rule( [id, e, a, t, attrs],
+ [wasGeneratedBy(id, e,a,t,attrs)],
+ [],
+ [wasInfluencedBy(id, e, a, attrs)]),
+ rule( [id, a, e, t, attrs],
+ [used(id, a,e,t,attrs)],
+ [],
+ [wasInfluencedBy(id, a, e, attrs)]),
+ rule( [id, a_2, a_1, attrs],
+ [wasInformedBy(id, a_2,a_1,attrs)],
+ [],
+ [wasInfluencedBy(id, a_2, a_1, attrs)]),
+ rule( [id, a_2, e, a_1, t, attrs],
+ [wasStartedBy(id, a_2,e,a_1,t,attrs)],
+ [],
+ [wasInfluencedBy(id, a_2, e, attrs)]),
+ rule( [id, a_2, e, a_1, t, attrs],
+ [wasEndedBy(id, a_2,e,a_1,t,attrs)],
+ [],
+ [wasInfluencedBy(id, a_2, e, attrs)]),
+ rule( [id, e, a, t, attrs],
+ [wasInvalidatedBy(id, e,a,t,attrs)],
+ [],
+ [wasInfluencedBy(id, e, a, attrs)]),
+ rule( [id, e_2, e_1, a, g, u, attrs],
+ [wasDerivedFrom(id, e_2, e_1, a, g, u, attrs)],
+ [],
+ [wasInfluencedBy(id, e_2, e_1, attrs)]),
+ comment('In this rule, <math>a</math>, <math>g</math>, <math>u</math> may be placeholders -.',
+ rule( [id, e, ag, attrs],
+ [wasAttributedTo(id, e,ag,attrs)],
+ [],
+ [wasInfluencedBy(id, e, ag, attrs)])),
+ comment('In this rule, <math>pl</math> may be a placeholder -',
+ rule( [id, a, ag, pl, attrs],
+ [wasAssociatedWith(id, a,ag,pl,attrs)],
+ [],
+ [wasInfluencedBy(id, a, ag, attrs)])),
+ rule( [id, ag_2, ag_1, a, attrs],
+ [actedOnBehalfOf(id, ag_2,ag_1,a,attrs)],
+ [],
+ [wasInfluencedBy(id, ag_2, ag_1, attrs)])])).
+
+decl('Inference', 16, 'alternate-reflexive',
+ rule([e],
+ [entity(e)],
+ [],
+ [alternateOf(e,e)])).
+
+decl('Inference', 17, 'alternate-transitive',
+ rule([e_1, e_2, e_3],
+ [alternateOf(e_1,e_2), alternateOf(e_2,e_3)],
+ [],
+ [alternateOf(e_1,e_3)])).
+
+decl('Inference', 18, 'alternate-symmetric',
+ rule([e_1, e_2],
+ [alternateOf(e_1,e_2)],
+ [],
+ [alternateOf(e_2,e_1)])).
+
+decl('Inference', 19, 'specialization-transitive',
+ rule([e_1, e_2, e_3 ],
+ [specializationOf(e_1,e_2), specializationOf(e_2,e_3)],
+ [],
+ [specializationOf(e_1,e_3)])).
+
+decl('Inference', 20, 'specialization-alternate-inference',
+ rule([e_1, e_2],
+ [specializationOf(e_1,e_2)],
+ [],
+ [alternateOf(e_1,e_2)])).
+
+decl('Inference', 21, 'specialization-attributes-inference',
+ rule([e_1, attrs, e_2],
+ [entity(e_1, attrs), specializationOf(e_2,e_1)],
+ [],
+ [entity(e_2, attrs)])).
+
+
+decl('Constraint',56, 'membership-empty-collection',
+ rule([c,e],
+ [hasMember(c,e),'prov:EmptyCollection \\in typeOf(c)'],
+ [],
+ ['False'])).
+
+
+
+
+% rule(vars,hyps,vars,concl)
+
+emit(X,Y,Z) :- atom(X),atom_concat(Y,X,Z).
+emit(X,Y,Z) :- number(X),number_codes(X,Xc),atom_codes(X2,Xc),atom_concat(Y,X2,Z).
+
+emitListSep(_Sep,_Emit,[]) --> [].
+emitListSep(_Sep,Emit,[P]) --> call(Emit,P).
+emitListSep(Sep,Emit,[P,Q|Ps]) -->
+ call(Emit,P),
+ emit(Sep),
+ emitListSep(Sep,Emit,[Q|Ps]).
+
+
+latexPred(A) --> {atom(A)},emit(A).
+latexPred(T) -->
+ {T =.. [F|Ts], Ts \= []},
+ emit(F),
+ emit('('),
+ latexPreds(Ts),
+ emit(')').
+
+latexPreds(Ps) --> emitListSep(',', latexPred, Ps).
+
+latexConj(Ps) --> emitListSep(' \\wedge ', latexPred, Ps).
+
+latexQuantify(_Q,[]) --> [].
+latexQuantify(Q,Xs) --> {Xs \= []},
+ emit(Q),
+ emitListSep(',', emit, Xs),
+ emit('.~').
+
+latexRule(Xs,Hyps,Ys,Concls) -->
+ latexQuantify('\\forall ',Xs),
+ latexConj(Hyps),
+ emit(' \\Longrightarrow '),
+ latexQuantify('\\exists ',Ys),
+ latexConj(Concls).
+
+latexInference(Xs,Hyps,Ys,Concls) -->
+ emit('\\begin{array}[t]{l}\n'),
+ latexQuantify('\\forall ',Xs),
+ latexConj(Hyps),
+ emit('\n\\\\\n\\Longrightarrow\n\\\\\n'),
+ latexQuantify('\\exists ',Ys),
+ latexConj(Concls),
+ emit('\n\\end{array}').
+
+
+latexRules(rule(Xs,Hyps,Ys,Concls)) -->
+ emit('<math>\n'),
+% Change this to change from logical formula to inference rule format
+ latexRule(Xs,Hyps,Ys,Concls),
+ emit('\n</math>').
+
+latexRules(comment(Comment,Rules)) -->
+ emit(Comment),
+ latexRules(Rules).
+latexRules(rules(L)) -->
+ latexRuleList(L).
+
+% only handles one nesting level
+latexRuleList([]) --> [].
+latexRuleList([R|Rs]) -->
+ emit('\n#'),
+ latexRules(R),
+ latexRuleList(Rs).
+
+latexWiki(Type,Num,Name,Rules) -->
+ emit('=== '),
+ emit(Type),
+ emit(' '),
+ emit(Num),
+ emit(' ('),
+ emit(Name),
+ emit(') ===\n'),
+ latexRules(Rules),
+ emit('\n').
+
+
+
+%% HTML stuff
+
+%% Todo: Recognize subscripts and translate to <sub>
+
+emitVar(A) --> emit(A).
+
+htmlPred(A) --> {atom(A)},
+ emit(A).
+htmlPred(T) -->
+ {T =.. [F|Ts], Ts \= []},
+ emit(F),
+ emit('('),
+ htmlPreds(Ts),
+ emit(')').
+
+htmlPreds(Ps) --> emitListSep(',', htmlPred, Ps).
+
+htmlConj(Ps) --> emitListSep(' ∧ ', htmlPred, Ps).
+
+htmlQuantify(_Q,[]) --> [].
+htmlQuantify(forall,Xs) --> {Xs \= []},
+ emit('∀ '),
+ emitListSep(',', emit, Xs),
+ emit('. ').
+htmlQuantify(exists,Xs) --> {Xs \= []},
+ emit('∃ '),
+ emitListSep(',', emit, Xs),
+ emit('. ').
+
+htmlRule(Xs,Hyps,Ys,Concls) -->
+ htmlQuantify(forall,Xs),
+ htmlConj(Hyps),
+ emit(' ⟹ '),
+ htmlQuantify(exists,Ys),
+ htmlConj(Concls).
+
+
+
+htmlRules(rule(Xs,Hyps,Ys,Concls)) -->
+ emit('<span class="math">'),
+ htmlRule(Xs,Hyps,Ys,Concls),
+ emit('</span>').
+
+htmlRules(comment(Comment,Rules)) -->
+ emit(Comment),
+ htmlRules(Rules).
+htmlRules(rules(L)) -->
+ emit('<ol>'),
+ htmlRuleList(L),
+ emit('</ol>').
+
+% only handles one nesting level
+htmlRuleList([]) --> [].
+htmlRuleList([R|Rs]) -->
+ emit('<li>'),
+ htmlRules(R),
+ emit('</li>'),
+ htmlRuleList(Rs).
+
+htmlWiki('Inference',Num,Name,Rules) -->
+ emit('<div class="inference" id="'),
+ emit(Name),
+ emit('">'),
+ htmlRules(Rules),
+ emit('</div>\n').
+
+
+writeEach(_Out,[]).
+writeEach(Out,[Num|Nums]) :-
+ decl('Inference',Num,Name,Rules),
+ htmlWiki('Inference',Num,Name,Rules,'',X),
+ write(Out,X),
+ flush_output(Out),
+ writeEach(Out,Nums).
+
+main(F) :- open(F,write,Out),
+ findall(X, decl(_,X,_,_),Xs),
+ writeEach(Out,Xs),
+ close(Out).
+
+main :- findall(X, decl(_,X,_,_),Xs),
+ writeEach(user,Xs).
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/semantics/prov-sem.html Thu Dec 13 13:53:35 2012 +0000
@@ -0,0 +1,1164 @@
+<!DOCTYPE html>
+
+<html><head>
+ <title>Semantics of the Provenance Data Model</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <!--
+ === NOTA BENE ===
+ For the three scripts below, if your spec resides on dev.w3 you can check them
+ out in the same tree and use relative links so that they'll work offline,
+ -->
+<!-- PM -->
+ <style type="text/css">
+ .note { font-size:small; margin-left:50px }
+
+
+/* --- EDITORIAL NOTES --- */
+.pending {
+ padding: 1em;
+ margin: 1em 0em 0em;
+ border: 1px solid #f00;
+ background: #BFEFFF;
+}
+
+.pending::before {
+ content: "Pending Review";
+ display: block;
+ width: 150px;
+ margin: -1.5em 0 0.5em 0;
+ font-weight: bold;
+ border: 1px solid #f00;
+ background: #fff;
+ padding: 3px 1em;
+}
+
+
+
+
+.resolved {
+ padding: 1em;
+ margin: 1em 0em 0em;
+ border: 1px solid #f00;
+ background: #9BCD9B;
+}
+
+.resolved::before {
+ content: "Resolved";
+ display: block;
+ width: 150px;
+ margin: -1.5em 0 0.5em 0;
+ font-weight: bold;
+ border: 1px solid #f00;
+ background: #fff;
+ padding: 3px 1em;
+}
+
+
+.inference {
+ padding: 1em;
+ margin: 1em 0em 0em;
+ border: 1px solid #f00;
+ background: #fff;
+}
+
+
+.inference-example {
+ padding: 1em;
+ margin: 1em 0em 0em;
+ border: 1px solid #f00;
+ background: #fff;
+}
+
+/* .inference[id]::before { */
+/* content: "Inference: " attr(id); */
+/* width: 380px; /\* How can we compute the length of "Constraint: " attr(id) *\/ */
+/* } */
+
+
+/* .inference::before { */
+/* content: "Inference"; */
+/* display: block; */
+/* width: 150px; */
+/* margin: -1.5em 0 0.5em 0; */
+/* font-weight: bold; */
+/* border: 1px solid #f00; */
+/* background: #fff; */
+/* padding: 3px 1em; */
+/* } */
+
+.syntax {
+ padding: 1em;
+ margin: 1em 0em 0em;
+ border: 1px solid #f00;
+ background: #fff;
+}
+
+.syntax[id]::before {
+ content: "Syntax: " attr(id);
+ width: 380px; /* How can we compute the length of "Constraint: " attr(id) */
+}
+
+
+.syntax::before {
+ content: "Syntax";
+ display: block;
+ width: 150px;
+ margin: -1.5em 0 0.5em 0;
+ font-weight: bold;
+ border: 1px solid #f00;
+ background: #fff;
+ padding: 3px 1em;
+}
+
+.unamedconstraint {
+ padding: 1em;
+ margin: 1em 0em 0em;
+ border: 1px solid #00f;
+ background: #fff;
+}
+
+
+.unamedconstraint::before {
+ content: "Constraint";
+ display: block;
+ width: 150px;
+ margin: -1.5em 0 0.5em 0;
+ font-weight: bold;
+ border: 1px solid #00f;
+ background: #fff;
+ padding: 3px 1em;
+}
+
+
+
+.constraint {
+ padding: 1em;
+ margin: 1em 0em 0em;
+ border: 1px solid #00f;
+ background: #fff;
+}
+
+.constraint-example {
+ padding: 1em;
+ margin: 1em 0em 0em;
+ border: 1px solid #00f;
+ background: #fff;
+}
+
+/* .constraint[id]::before { */
+/* content: "Constraint: " attr(id); */
+/* width: 380px; /\* How can we compute the length of "Constraint: " attr(id) *\/ */
+/* } */
+
+
+/* .constraint::before { */
+/* content: "Constraint"; */
+/* display: block; */
+/* width: 150px; */
+/* margin: -1.5em 0 0.5em 0; */
+/* font-weight: bold; */
+/* border: 1px solid #00f; */
+/* background: #fff; */
+/* padding: 3px 1em; */
+/* } */
+
+
+
+.interpretation {
+ padding: 1em;
+ margin: 1em 0em 0em;
+ border: 1px solid #00f;
+ background: #fff;
+}
+
+.interpretation[id]::before {
+ content: "Interpretation: " attr(id);
+ width: 380px; /* How can we compute the length of "Interpretation: " attr(id) */
+}
+
+
+.interpretation::before {
+ content: "Interpretation";
+ display: block;
+ width: 150px;
+ margin: -1.5em 0 0.5em 0;
+ font-weight: bold;
+ border: 1px solid #00f;
+ background: #fff;
+ padding: 3px 1em;
+}
+
+.definition {
+ padding: 1em;
+ margin: 1em 0em 0em;
+ border: 1px solid #777;
+ background: #fff;
+}
+
+.definition-example {
+ padding: 1em;
+ margin: 1em 0em 0em;
+ border: 1px solid #777;
+ background: #fff;
+}
+
+/* .definition[id]::before { */
+/* content: "Definition: " attr(id); */
+/* width: 380px; */
+/* } */
+
+
+/* .definition::before { */
+/* content: "Definition"; */
+/* display: block; */
+/* width: 150px; */
+/* margin: -1.5em 0 0.5em 0; */
+/* font-weight: bold; */
+/* border: 1px solid #000; */
+/* background: #fff; */
+/* padding: 3px 1em; */
+/* } */
+
+
+.deprecatedconstraint {
+ padding: 1em;
+ margin: 1em 0em 0em;
+ border: 1px solid #00f;
+ background: #fff;
+}
+
+.deprecatedconstraint[id]::before {
+ content: "Deprecated: " attr(id);
+ width: 380px; /* How can we compute the length of "Deprecatedconstraint: " attr(id) */
+}
+
+
+.deprecatedconstraint::before {
+ content: "Deprecated";
+ display: block;
+ width: 150px;
+ margin: -1.5em 0 0.5em 0;
+ font-weight: bold;
+ border: 1px solid #00f;
+ background: #fff;
+ padding: 3px 1em;
+}
+
+.glossary-ref {
+ font-style: italic;
+}
+
+.dfn {
+ font-weight: bold;
+}
+
+
+.attribute {
+ font-style: italic;
+}
+
+
+.conditional {
+ color: blue;
+}
+
+.grammar {
+ margin-top: 1ex;
+ margin-bottom: 1ex;
+ padding-left: 1ex;
+ padding-right: 1ex;
+ padding-top: 1ex;
+ padding-bottom: 0.6ex;
+ border: 1px dashed #2f6fab;
+ font-size: 95%;
+}
+.nonterminal {
+ font-weight: bold;
+ font-family: sans-serif;
+ font-size: 95%;
+}
+
+.name {
+ font-family: monospace;
+}
+
+.math {
+ font-family: roman;
+ font-style:italic;
+}
+
+
+.xmpl {
+ padding: 1em;
+ margin: 1em 0em 0em;
+ border: 1px solid #f00;
+ background: #fff;
+}
+
+.xmpl::before {
+ content: "Example";
+ display: block;
+ width: 150px;
+ margin: -1.5em 0 0.5em 0;
+ font-weight: bold;
+ border: 1px solid #f00;
+ background: #fff;
+ padding: 3px 1em;
+}
+
+/*
+.anexample[count]::before {
+ content: "Example " attr(count) ;
+ font-family: sans-serif;
+ font-size: 1.6ex;
+ font-weight: bold;
+}
+
+.anexample:before {
+ content: "Example:";
+ font-family: sans-serif;
+ font-size: 1.6ex;
+ font-weight: bold;
+}
+
+*/
+
+.anexample {
+ margin-top: 1ex;
+ margin-bottom: 1ex;
+ padding-left: 1ex;
+ padding-right: 1ex;
+ padding-top: 1ex;
+ padding-bottom: 0.6ex;
+ border: 1px dashed #2f6fab;
+ background-color: #f9f9f9;
+}
+.anexample table {
+ background-color: #f9f9f9;
+}
+
+.conceptexample:before {
+ content: "Example:";
+ font-family: sans-serif;
+ font-size: 1.6ex;
+ font-weight: bold;
+}
+.conceptexample {
+ margin-top: 1ex;
+ margin-bottom: 1ex;
+ padding-left: 1ex;
+ padding-right: 1ex;
+ padding-top: 1ex;
+ padding-bottom: 0.6ex;
+ border: 1px dashed #2f6fab;
+ background-color: #f9f9f9;
+}
+
+.pnExpression {
+ font-weight: normal;
+ font-size:120%;
+ font-family: monospace;
+}
+
+
+div[class="grammar"] span[class="name"]:before {
+ content: "'";
+}
+
+div[class="grammar"] span[class="name"]:after {
+ content: "'";
+}
+
+
+div[class="grammar"] span[class="optional"]:before {
+ font-weight: normal;
+ font-size:130%;
+ font-family: monospace;
+ content: "(";
+}
+
+div[class="grammar"] span[class="optional"]:after {
+ font-weight: normal;
+ font-size:130%;
+ font-family: monospace;
+ content: ")?";
+}
+
+
+div[class="grammar"] span[class="plus"]:before {
+ font-weight: normal;
+ font-size:130%;
+ font-family: monospace;
+ content: "(";
+}
+
+div[class="grammar"] span[class="plus"]:after {
+ font-weight: normal;
+ font-size:130%;
+ font-family: monospace;
+ content: ")+";
+}
+
+
+div[class="grammar"] span[class="star"]:before {
+ font-weight: normal;
+ font-size:130%;
+ font-family: monospace;
+ content: "(";
+}
+
+div[class="grammar"] span[class="star"]:after {
+ font-weight: normal;
+ font-size:130%;
+ font-family: monospace;
+ content: ")*";
+}
+
+div[class="grammar"] span[class="choice"]:before {
+ font-weight: normal;
+ font-size:130%;
+ font-family: monospace;
+ content: "(";
+}
+
+div[class="grammar"] span[class="choice"]:after {
+ font-weight: normal;
+ font-size:130%;
+ font-family: monospace;
+ content: ")";
+}
+
+div[class="grammar"] span[class="group"]:before {
+ font-weight: normal;
+ font-size:130%;
+ font-family: monospace;
+ content: "(";
+}
+
+div[class="grammar"] span[class="group"]:after {
+ font-weight: normal;
+ font-size:130%;
+ font-family: monospace;
+ content: ")";
+}
+
+table {
+ background-color: #f9f9f9;
+}
+
+.component1-color {
+ background-color: rgba(255,42,42,0.2);
+}
+
+.component2-color {
+ background-color: rgba(0,68,170,0.2);
+}
+
+.component3-color {
+ background-color: rgba(0,170,0,0.2);
+}
+.component4-color {
+ background-color: rgba(204,255,0,0.2);
+}
+
+.component5-color {
+ background-color: rgba(11,40,40,0.2);
+}
+
+.component6-color {
+ background-color: rgba(244,105,14,0.2);
+}
+
+.interpretation-forward::before {
+ content: "Interpretation: ";
+ font-weight: bold;
+}
+
+.structural-forward::before {
+ content: "Structural constraint: ";
+ font-weight: bold;
+}
+
+
+code {
+ color: black;
+}
+
+.ruleTitle {
+ font-family: sans-serif;
+ font-size: 1.6ex;
+ font-weight: bold;
+}
+
+
+
+
+.remark {
+ padding: 1em;
+ margin: 1em 0em 0em;
+ border: 1px dashed #000;
+ background: #F0F0F0;
+}
+
+.remark::before {
+ content: "Remark";
+ display: block;
+ width: 150px;
+ margin: -1.5em 0 0.5em 0;
+ font-weight: bold;
+ border: 1px solid #000;
+ background: #fff;
+ padding: 3px 1em;
+}
+
+table.thinborder {
+ border-width: 1px;
+ border-spacing: 0px;
+ border-style: none;
+ border-color: gray;
+ border-collapse: collapse;
+}
+table.thinborder th {
+ border-width: 1px;
+ padding: 0px;
+ border-style: solid;
+ border-color: gray;
+}
+table.thinborder td {
+ border-width: 1px;
+ padding: 2px;
+ border-style: solid;
+ border-color: gray;
+}
+
+
+ </style>
+
+ <script src="http://dev.w3.org/2009/dap/ReSpec.js/js/respec.js" class="remove"></script>
+<!-- <script src="http://www.w3.org/Tools/respec/respec-w3c-common" class="remove" async></script> -->
+
+ <script src="http://www.w3.org/2007/OWL/toggles.js" class="remove"></script>
+ <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" class="remove"></script>
+
+ <script class="remove">
+
+function setColoredDiffs () {
+ $('dt').each(function(index) {
+ var content=$(this).text();
+ if (content== "Previous version:") {
+ console.log( "content " + content);
+ $(this).next().append(" ").append($('<a>').attr('href','diff-c.html').append("(colored-coded diff)"));
+ }
+ })
+}
+
+
+ function updateRules() {
+ var count=1;
+ $('.constraint,.definition,.inference').each(function(index) {
+
+ var myid=$(this).attr('id');
+ var mycount=count++;
+
+ if (myid==undefined) {
+ myid='rule_' + mycount;
+ $(this).attr('id',myid);
+ }
+
+ var myClass=$(this).attr('class');
+
+ var myTitle=capitaliseFirstLetter(myClass) + ' ' + mycount + ' (' + myid + ')';
+
+ $(this).attr('data-count', mycount)
+ .attr('data-title',myTitle).prepend($('<div>').addClass('ruleTitle')
+ .append($('<a>').addClass('internalDFN').attr('href','#'+myid).append(myTitle)));
+
+ //console.log( "rule for " + myid + " " + mycount);
+
+ });
+
+ $('.constraint-example,.definition-example,.inference-example').each(function(index) {
+
+ var myid=$(this).attr('id');
+ var mycount='NNN';
+
+ if (myid==undefined) {
+ myid='rule_' + mycount;
+ $(this).attr('id',myid);
+ }
+
+ var myClass=$(this).attr('class');
+
+ var myTitle=capitaliseFirstLetter(myClass) + ' ' + mycount + ' (' + myid + ')';
+
+ $(this).attr('data-count', mycount)
+ .attr('data-title',myTitle).prepend($('<div>').addClass('ruleTitle')
+ .append($('<a>').addClass('internalDFN').attr('href','#'+myid).append(myTitle)));
+
+ //console.log( "rule for " + myid + " " + mycount);
+
+ });
+ }
+
+ function capitaliseFirstLetter(string)
+ {
+ return string.charAt(0).toUpperCase() + string.slice(1);
+ }
+
+
+ function updateRulesRefs() {
+ $('.rule-ref').each(function(index) {
+
+ myhref=$(this).attr('href');
+
+ //console.log( "example ref for " + myhref);
+
+ mytitle=$(myhref).attr('data-title');
+
+ console.log( "rule ref for " + myhref + " " + mytitle);
+
+ $(this).children('span').replaceWith(function(){return $('<span>').append(mytitle)});
+
+ });
+
+ $('.rule-text').each(function(index) {
+
+ myhref=$(this).attr('href');
+ $(this).attr('href', myhref + '_text');
+
+ //console.log( "example ref for " + myhref);
+
+ mytitle=$(myhref).attr('data-title');
+
+ console.log( "rule ref for " + myhref + " " + mytitle);
+
+ $(this).children('span').replaceWith(function(){return $('<span>').append(mytitle)});
+
+ });
+ }
+ function updateExamples() {
+ var count=1;
+ $('.anexample').each(function(index) {
+
+ var myid=$(this).attr('id');
+ var mycount=count++;
+
+ if (myid==undefined) {
+ myid='example_' + mycount;
+ $(this).attr('id',myid);
+ }
+
+
+ $(this).attr('data-count', mycount).prepend($('<div>').addClass('anexampleTitle')
+ .append($('<a>').addClass('internalDFN').attr('href','#'+myid).append("Example " + mycount)));
+
+ //console.log( "example for " + myid + " " + mycount);
+
+ });
+ }
+
+
+ function updateExamplesRefs() {
+ $('.anexample-ref').each(function(index) {
+
+ myhref=$(this).attr('href');
+
+ //console.log( "example ref for " + myhref);
+
+ mycount=$(myhref).attr('data-count');
+
+ //console.log( "example ref for " + myhref + " " + mycount);
+
+ $(this).children('span').replaceWith(function(){return $('<span>').append("Example " + mycount)});
+
+ });
+ };
+
+
+ // function to replace figcaption since not allowed by prov rules, and not transformed by respec.js
+ function updateFigCaptions() {
+ var figureCount=1;
+
+ $('figcaption').each(function(index) {
+
+ var myid=$(this).attr('id');
+ var mycount=figureCount++;
+
+ $(this).replaceWith(function(){return $('<span>').addClass('figcaption').attr('data-count', mycount).attr('id',myid).append("Figure " + mycount)
+.append($('<sup>').append($('<a>').addClass('internalDFN').attr('href','#'+myid).append($('<span>').addClass('diamond').append(" ◊:")))).append(" ")
+.append($(this).contents())});
+ });
+ }
+
+ // function to replace figure since not allowed by prov rules, and not transformed by respec.js
+ function updateFigures() {
+ $('figure').each(function(index) {
+
+ var myid=$(this).attr('id');
+ var mystyle=$(this).attr('style');
+
+ console.log( "figure " + myid + " " + $(this).contents());
+
+ $(this).replaceWith(function(){
+ var aNewElement=$('<span>').addClass('figure').append($(this).contents());
+ if (myid) {
+ aNewElement.attr('id',myid)
+ }
+ if (mystyle) {
+ aNewElement.attr('style',mystyle)
+ }
+ return aNewElement });
+
+
+
+ // $(this).replaceWith(function(){return $('<span>').addClass('figure').attr('id',myid).attr('style',mystyle).append($(this).contents())});
+ console.log( "figure " + myid);
+ });
+ }
+
+
+ function removeDataAttributes() {
+
+
+ $('.anexample').each(function(index) {
+ $(this).removeAttr('data-count');
+ });
+
+ $('caption').each(function(index) {
+ $(this).removeAttr('data-count');
+ });
+
+ $('.figcaption').each(function(index) {
+ $(this).removeAttr('data-count');
+ });
+
+ $('.definition').each(function(index) {
+ $(this).removeAttr('data-count');
+ $(this).removeAttr('data-title');
+ });
+
+ $('.inference').each(function(index) {
+ $(this).removeAttr('data-count');
+ $(this).removeAttr('data-title');
+ });
+
+ $('.constraint').each(function(index) {
+ $(this).removeAttr('data-count');
+ $(this).removeAttr('data-title');
+ });
+
+ $('.inference-example').each(function(index) {
+ $(this).removeAttr('data-count');
+ $(this).removeAttr('data-title');
+ });
+
+ $('.constraint-example').each(function(index) {
+ $(this).removeAttr('data-count');
+ $(this).removeAttr('data-title');
+ });
+
+ $('.definition-example').each(function(index) {
+ $(this).removeAttr('data-count');
+ $(this).removeAttr('data-title');
+ });
+}
+
+ $(document).ready(function(){
+ updateRules();
+ updateRulesRefs();
+ updateFigCaptions();
+ if (typeof String.prototype.startsWith != 'function') {
+ String.prototype.startsWith = function (str) {
+ return this.indexOf(str) == 0;
+ };
+ }
+ if (typeof String.prototype.contains != 'function') {
+ String.prototype.contains = function (str) {
+ return this.indexOf(str) >= 0;
+ };
+ }
+
+
+
+ });
+</script>
+ <script src="provbib.js" class="remove"></script>
+
+ <script class="remove">
+
+
+ var addExtraReferences = function() {
+ for (var k in extraReferences)
+ berjon.biblio[k] = extraReferences[k];
+ };
+
+ var extraReferences = {
+ "CHR":
+ "Thom Frühwirth. "+
+ "<a href=\"http://constraint-handling-rules.org/\"><cite>Constraint Handling Rules</cite></a>."+
+ " Cambridge University Press "+
+ " URL: <a href=\"http://constraint-handling-rules.org/\">http://constraint-handling-rules.org/</a>",
+ "CLOCK":
+ "L. Lamport. "+
+ "<a href=\"http://research.microsoft.com/users/lamport/pubs/time-clocks.pdf\"><cite>Time, clocks, and the ordering of events in a distributed system</cite></a>."+
+ " Communications of the ACM 21 (7): 558–565. 1978. "+
+ "URL: <a href=\"http://research.microsoft.com/users/lamport/pubs/time-clocks.pdf\">http://research.microsoft.com/users/lamport/pubs/time-clocks.pdf</a> " +
+ "DOI: doi:10.1145/359545.359563.",
+ "CSP":
+ "Hoare, C. A. R. "+
+ "<a href=\"http://www.usingcsp.com/cspbook.pdf\"><cite>Communicating Sequential Processes</cite></a>."+
+ "Prentice-Hall. 1985"+
+ "URL: <a href=\"http://www.usingcsp.com/cspbook.pdf\">http://www.usingcsp.com/cspbook.pdf</a>",
+ "DBCONSTRAINTS":
+ " Ronald Fagin; Phokion G. Kolaitis; Renée J. Miller; Lucian Popa. "+
+ " <a href=\"http://dx.doi.org/10.1016/j.tcs.2004.10.033\"><cite>Data exchange: Semantics and query answering</cite></a>. Theoretical computer science 336(1):89-124 "+
+ " Elsevier "+
+ " URL: <a href=\"http://dx.doi.org/10.1016/j.tcs.2004.10.033\">http://dx.doi.org/10.1016/j.tcs.2004.10.033</a>",
+ "Logic":
+ "W. E. Johnson. "+
+ "<a href=\"http://www.ditext.com/johnson/intro-3.html\"><cite>Logic: Part III</cite></a>."+
+ "1924. "+
+ "URL: <a href=\"http://www.ditext.com/johnson/intro-3.html\">http://www.ditext.com/johnson/intro-3.html</a>",
+
+ "RDF":
+ "Graham Klyne and Jeremy J. Carroll (eds.) "+
+ "<a href=\"http://www.w3.org/TR/2004/REC-rdf-concepts-20040210/\"><cite>Resource Description Framework (RDF): Concepts and Abstract Syntax</cite></a>. "+
+ "2004, W3C Recommendation. "+
+ "URL: <a href=\"http://www.w3.org/TR/2004/REC-rdf-concepts-20040210//\">http://www.w3.org/TR/2004/REC-rdf-concepts-20040210/</a>",
+};
+ var respecConfig = {
+ // specification status (e.g. WD, LCWD, NOTE, etc.). If in doubt use ED.
+ specStatus: "ED",
+
+ // the specification's short name, as in http://www.w3.org/TR/short-name/
+ shortName: "prov-sem",
+
+ // if your specification has a subtitle that goes below the main
+ // formal title, define it here
+ //subtitle : "<a href=\"diff-c.html\">Changes</a> since Last Call Working Draft (LC)",
+
+
+
+ // if you wish the publication date to be other than today, set this
+ // publishDate: "",
+
+ // if the specification's copyright date is a range of years, specify
+ // the start date here:
+ copyrightStart: "2012",
+
+ // if there is a previously published draft, uncomment this and set its YYYY-MM-DD date
+ // and its maturity status
+
+ // if there a publicly available Editor's Draft, this is the link
+ edDraftURI: "http://dvcs.w3.org/hg/prov/raw-file/default/model/prov-sem.html",
+
+
+
+
+ // if this is a LCWD, uncomment and set the end of its review period
+
+ // if you want to have extra CSS, append them to this list
+ // it is recommended that the respec.css stylesheet be kept
+ //extraCSS: ["http://dev.w3.org/2009/dap/ReSpec.js/css/respec.css", "./extra.css"],
+
+ // editors, add as many as you like
+ // only "name" is required
+ editors: [
+ { name: "James Cheney", url:
+ "http://homepages.inf.ed.ac.uk/jcheney", company:
+ "University of Edinburgh" },
+ ],
+
+ // authors, add as many as you like.
+ // This is optional, uncomment if you have authors as well as editors.
+ // only "name" is required. Same format as editors.
+
+//authors: [] ,
+
+ // name of the WG
+ wg: "Provenance Working Group",
+
+ // URI of the public WG page
+ wgURI: "http://www.w3.org/2011/prov/",
+
+ // name (with the @w3c.org) of the public mailing to which comments are due
+ wgPublicList: "public-prov-comments",
+
+ // URI of the patent status for this WG, for Rec-track documents
+ // !!!! IMPORTANT !!!!
+ // This is important for Rec-track documents, do not copy a patent URI from a random
+ // document unless you know what you're doing. If in doubt ask your friendly neighbourhood
+ // Team Contact.
+ wgPatentURI: "http://www.w3.org/2004/01/pp-impl/46974/status",
+
+ // Add extraReferences to bibliography database
+ preProcess: [addExtraReferences, addProvReferences],
+
+ postProcess: [updateFigures, removeDataAttributes, checkLinksToW3CReports, setColoredDiffs],
+ };
+ </script>
+ </head>
+ <body>
+
+ <section id="abstract">
+<p>
+Provenance is information about entities, activities, and people
+involved in producing a piece of data or thing, which can be used to
+form assessments about its quality, reliability or
+trustworthiness. PROV-DM is the conceptual data model that forms a
+basis for the W3C provenance (PROV) family of specifications.
+</p>
+
+
+<p> This document ... TODO </p>
+<p>The PROV Document Overview describes the overall state of PROV, and should be read before other PROV documents.</p>
+</section>
+
+<section id="sotd">
+<h4>PROV Family of Documents</h4>
+This document is part of the PROV family of documents, a set of documents defining various aspects that are necessary to achieve the vision of inter-operable
+interchange of provenance information in heterogeneous environments such as the Web. These documents are:
+<ul>
+<li> <a href="http://www.w3.org/TR/2012/WD-prov-overview-20121211/">PROV-OVERVIEW</a> (Note), an overview of the PROV family of documents [[PROV-OVERVIEW]];</li>
+<li> <a href="http://www.w3.org/TR/2012/WD-prov-primer-20121211/">PROV-PRIMER</a> (Note), a primer for the PROV data model [[PROV-PRIMER]];</li>
+<li> <a href="http://www.w3.org/TR/2012/CR-prov-o-20121211/">PROV-O</a> (Recommendation), the PROV ontology, an OWL2 ontology allowing the mapping of PROV to RDF [[!PROV-O]];</li>
+<li> <a href="http://www.w3.org/TR/2012/CR-prov-dm-20121211/">PROV-DM</a> (Recommendation), the PROV data model for provenance [[!PROV-DM]];</li>
+<li> <a href="http://www.w3.org/TR/2012/CR-prov-n-20121211/">PROV-N</a> (Recommendation), a notation for provenance aimed at human consumption [[!PROV-N]];</li>
+<li> <a
+href="http://www.w3.org/TR/2012/CR-prov-constraints-20121211/">PROV-CONSTRAINTS</a>
+(Recommendation), a set of constraints applying to the PROV data model;</li>
+<li> <a href="http://www.w3.org/TR/2012/WD-prov-aq-20120619/">PROV-AQ</a> (Note), the mechanisms for accessing and querying provenance [[PROV-AQ]]; </li>
+<li> <a href="http://www.w3.org/TR/2012/WD-prov-xml-20121211/">PROV-XML</a> (Note), an XML schema for the PROV data model [[PROV-XML]].</li>
+
+</ul>
+<h4>How to read the PROV Family of Documents</h4>
+<ul>
+<li>The primer is the entry point to PROV offering an introduction to the provenance model.</li>
+<li>The Linked Data and Semantic Web community should focus on PROV-O defining PROV classes and properties specified in an OWL2 ontology. For further details, PROV-DM and PROV-CONSTRAINTS specify the constraints applicable to the data model, and its interpretation. </li>
+<li>Developers seeking to retrieve or publish provenance should focus on PROV-AQ.</li>
+<li>Readers seeking to implement other PROV serializations
+should focus on PROV-DM and PROV-CONSTRAINTS. PROV-O and PROV-N offer examples of mapping to RDF and text, respectively.</li>
+</ul>
+
+</section>
+
+
+
+
+ <section id="introduction">
+ <h2>Introduction<br>
+</h2>
+
+<p>
+Provenance is a record that describes the people, institutions, entities, and activities involved in producing, influencing, or delivering a piece of data or a thing.
+This document complements
+ the PROV-DM specification [[PROV-DM]] that defines a data model for
+ provenance on the Web. This document defines a form of validation for provenance. </p>
+
+
+
+ <section id="conventions">
+<h3>Conventions</h3>
+
+
+
+<p>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
+ NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and
+ "OPTIONAL" in this document are to be interpreted as described in
+ [[!RFC2119]].</p>
+
+<p>In this document, logical formulas contain variables written as
+ lower-case identifiers. Some of these variables are written
+ beginning with the underscore character <span
+ class="name">_</span>, by convention, to indicate that they
+ appear only once in the formula. Such variables are
+ provided merely as an aid to the reader. </p>
+
+</section>
+
+
+<section id="purpose">
+
+<h3>Purpose of this document</h3>
+
+</section>
+
+<section>
+<h4>Structure of this document</h4>
+<p>
+</p>
+
+
+
+</section>
+<section id="audience">
+<h3> Audience </h3>
+
+
+<p>This document assumes familiarity with [[PROV-DM]] and employs the
+[[PROV-N]] notation.
+</p>
+
+</section>
+</section>
+
+
+<section id="inferences">
+<h2>Inferences</h2>
+<div class="inference" id="communication-generation-use-inference"><span class="math">∀ <span class="math">id</span>,<span class="math">a_2</span>,<span class="math">a_1</span>,<span class="math">attrs</span>. wasInformedBy(id,a_2,a_1,attrs) ⟹ ∃ <span class="math">e</span>,<span class="math">gen</span>,<span class="math">t_1</span>,<span class="math">use</span>,<span class="math">t_2</span>. wasGeneratedBy(gen,e,a_1,t_1,[]) ∧ used(use,a_2,e,t_2,[])</span></div>
+<div class="inference" id="generation-use-communication-inference"><span class="math">∀ <span class="math">gen</span>,<span class="math">a_1</span>,<span class="math">t_1</span>,<span class="math">attrs_1</span>,<span class="math">id_2</span>,<span class="math">a_2</span>,<span class="math">t_2</span>,<span class="math">attrs_2</span>. wasGeneratedBy(gen,e,a_1,t_1,attrs_1) ∧ used(id_2,a_2,e,t_2,attrs_2) ⟹ ∃ <span class="math">id</span>. wasInformedBy(id,a_2,a_1,[])</span></div>
+<div class="inference" id="entity-generation-invalidation-inference"><span class="math">∀ <span class="math">gen</span>,<span class="math">e</span>,<span class="math">a_1</span>,<span class="math">t_1</span>,<span class="math">attrs_1</span>,<span class="math">id_2</span>,<span class="math">a_2</span>,<span class="math">t_2</span>,<span class="math">attrs_2</span>. wasGeneratedBy(gen,e,a_1,t_1,attrs_1) ∧ used(id_2,a_2,e,t_2,attrs_2) ⟹ ∃ <span class="math">id</span>. wasInformedBy(id,a_2,a_1,[])</span></div>
+<div class="inference" id="activity-start-end-inference"><span class="math">∀ <span class="math">a</span>,<span class="math">t_1</span>,<span class="math">t_2</span>,<span class="math">attrs</span>. activity(a,t_1,t_2,attrs) ⟹ ∃ <span class="math">start</span>,<span class="math">e_1</span>,<span class="math">a_1</span>,<span class="math">end</span>,<span class="math">a_2</span>,<span class="math">e_2</span>. wasStartedBy(start,a,e_1,a_1,t_1,[]) ∧ wasEndedBy(end,a,e_2,a_2,t_2,[])</span></div>
+<div class="inference" id="wasStartedBy-inference"><span class="math">∀ <span class="math">id</span>,<span class="math">a</span>,<span class="math">e_1</span>,<span class="math">a_1</span>,<span class="math">t</span>,<span class="math">attrs</span>. wasStartedBy(id,a,e_1,a_1,t,attrs) ⟹ ∃ <span class="math">gen</span>,<span class="math">t_1</span>. wasGeneratedBy(gen,e_1,a_1,t_1,[])</span></div>
+<div class="inference" id="wasEndedBy-inference"><span class="math">∀ <span class="math">id</span>,<span class="math">a</span>,<span class="math">e_1</span>,<span class="math">a_1</span>,<span class="math">t</span>,<span class="math">attrs</span>. wasEndedBy(id,a,e_1,a_1,t,attrs) ⟹ ∃ <span class="math">gen</span>,<span class="math">t_1</span>. wasGeneratedBy(gen,e_1,a_1,t_1,[])</span></div>
+<div class="inference" id="derivation-generation-use-inference">In this inference, none of <math>a</math>, <math>gen_2</math> or <math>use_1</math> can be placeholders -<span class="math">∀ <span class="math">id</span>,<span class="math">e_2</span>,<span class="math">e_1</span>,<span class="math">a</span>,<span class="math">gen_2</span>,<span class="math">use_1</span>,<span class="math">attrs</span>. wasDerivedFrom(id,e_2,e_1,a,gen_2,use_1,attrs) ⟹ ∃ <span class="math">s</span>,<span class="math">t_1</span>,<span class="math">t_2</span>. used(use_1,a,e_1,t_1,[]) ∧ wasGeneratedBy(gen_2,e_2,a,t_2,[])</span></div>
+<div class="inference" id="revision-is-alternate-inference">In this inference, any of <math>a</math>, <math>g</math> or <math>u</math> may be placeholders.<span class="math">∀ <span class="math">id</span>,<span class="math">e_1</span>,<span class="math">e_2</span>,<span class="math">a</span>,<span class="math">g</span>,<span class="math">u</span>. wasDerivedFrom(id,e_2,e_1,a,g,u,.(=(prov:type,prov:Revision),[])) ⟹ alternateOf(e_2,e_1)</span></div>
+<div class="inference" id="attribution-inference"><span class="math">∀ <span class="math">att</span>,<span class="math">e</span>,<span class="math">ag</span>,<span class="math">attrs</span>. wasAttributedTo(att,e,ag,attrs) ⟹ ∃ <span class="math">a</span>,<span class="math">t</span>,<span class="math">gen</span>,<span class="math">assoc</span>,<span class="math">pl</span>. wasGeneratedBy(gen,e,a,t,[]) ∧ wasAssociatedWith(assoc,a,ag,pl,[])</span></div>
+<div class="inference" id="delegation-inference"><span class="math">∀ <span class="math">id</span>,<span class="math">ag_1</span>,<span class="math">ag_2</span>,<span class="math">a</span>,<span class="math">attrs</span>. actedOnBehalfOf(id,ag_1,ag_2,a,attrs) ⟹ ∃ <span class="math">id_1</span>,<span class="math">pl_1</span>,<span class="math">id_2</span>,<span class="math">pl_2</span>. wasAssociatedWith(id_1,a,ag_1,pl_1,[]) ∧ wasAssociatedWith(id_2,a,ag_2,pl_2,[])</span></div>
+<div class="inference" id="influence-inference"><ol><li><span class="math">∀ <span class="math">id</span>,<span class="math">e</span>,<span class="math">a</span>,<span class="math">t</span>,<span class="math">attrs</span>. wasGeneratedBy(id,e,a,t,attrs) ⟹ wasInfluencedBy(id,e,a,attrs)</span></li><li><span class="math">∀ <span class="math">id</span>,<span class="math">a</span>,<span class="math">e</span>,<span class="math">t</span>,<span class="math">attrs</span>. used(id,a,e,t,attrs) ⟹ wasInfluencedBy(id,a,e,attrs)</span></li><li><span class="math">∀ <span class="math">id</span>,<span class="math">a_2</span>,<span class="math">a_1</span>,<span class="math">attrs</span>. wasInformedBy(id,a_2,a_1,attrs) ⟹ wasInfluencedBy(id,a_2,a_1,attrs)</span></li><li><span class="math">∀ <span class="math">id</span>,<span class="math">a_2</span>,<span class="math">e</span>,<span class="math">a_1</span>,<span class="math">t</span>,<span class="math">attrs</span>. wasStartedBy(id,a_2,e,a_1,t,attrs) ⟹ wasInfluencedBy(id,a_2,e,attrs)</span></li><li><span class="math">∀ <span class="math">id</span>,<span class="math">a_2</span>,<span class="math">e</span>,<span class="math">a_1</span>,<span class="math">t</span>,<span class="math">attrs</span>. wasEndedBy(id,a_2,e,a_1,t,attrs) ⟹ wasInfluencedBy(id,a_2,e,attrs)</span></li><li><span class="math">∀ <span class="math">id</span>,<span class="math">e</span>,<span class="math">a</span>,<span class="math">t</span>,<span class="math">attrs</span>. wasInvalidatedBy(id,e,a,t,attrs) ⟹ wasInfluencedBy(id,e,a,attrs)</span></li><li><span class="math">∀ <span class="math">id</span>,<span class="math">e_2</span>,<span class="math">e_1</span>,<span class="math">a</span>,<span class="math">g</span>,<span class="math">u</span>,<span class="math">attrs</span>. wasDerivedFrom(id,e_2,e_1,a,g,u,attrs) ⟹ wasInfluencedBy(id,e_2,e_1,attrs)</span></li><li>In this rule, <math>a</math>, <math>g</math>, <math>u</math> may be placeholders -.<span class="math">∀ <span class="math">id</span>,<span class="math">e</span>,<span class="math">ag</span>,<span class="math">attrs</span>. wasAttributedTo(id,e,ag,attrs) ⟹ wasInfluencedBy(id,e,ag,attrs)</span></li><li>In this rule, <math>pl</math> may be a placeholder -<span class="math">∀ <span class="math">id</span>,<span class="math">a</span>,<span class="math">ag</span>,<span class="math">pl</span>,<span class="math">attrs</span>. wasAssociatedWith(id,a,ag,pl,attrs) ⟹ wasInfluencedBy(id,a,ag,attrs)</span></li><li><span class="math">∀ <span class="math">id</span>,<span class="math">ag_2</span>,<span class="math">ag_1</span>,<span class="math">a</span>,<span class="math">attrs</span>. actedOnBehalfOf(id,ag_2,ag_1,a,attrs) ⟹ wasInfluencedBy(id,ag_2,ag_1,attrs)</span></li></ol></div>
+<div class="inference" id="alternate-reflexive"><span class="math">∀ <span class="math">e</span>. entity(e) ⟹ alternateOf(e,e)</span></div>
+<div class="inference" id="alternate-transitive"><span class="math">∀ <span class="math">e_1</span>,<span class="math">e_2</span>,<span class="math">e_3</span>. alternateOf(e_1,e_2) ∧ alternateOf(e_2,e_3) ⟹ alternateOf(e_1,e_3)</span></div>
+<div class="inference" id="alternate-symmetric"><span class="math">∀ <span class="math">e_1</span>,<span class="math">e_2</span>. alternateOf(e_1,e_2) ⟹ alternateOf(e_2,e_1)</span></div>
+<div class="inference" id="specialization-transitive"><span class="math">∀ <span class="math">e_1</span>,<span class="math">e_2</span>,<span class="math">e_3</span>. specializationOf(e_1,e_2) ∧ specializationOf(e_2,e_3) ⟹ specializationOf(e_1,e_3)</span></div>
+<div class="inference" id="specialization-alternate-inference"><span class="math">∀ <span class="math">e_1</span>,<span class="math">e_2</span>. specializationOf(e_1,e_2) ⟹ alternateOf(e_1,e_2)</span></div>
+<div class="inference" id="specialization-attributes-inference"><span class="math">∀ <span class="math">e_1</span>,<span class="math">attrs</span>,<span class="math">e_2</span>. entity(e_1,attrs) ∧ specializationOf(e_2,e_1) ⟹ entity(e_2,attrs)</span></div>
+
+
+</section>
+
+<section class="appendix">
+ <h2>Acknowledgements</h2>
+ <p>
+
+This document has been produced by the PROV Working Group, and its contents reflect extensive discussion within the Working Group as a whole. The editors extend special thanks to Ivan Herman (W3C/ERCIM), Paul Groth, Tim Lebo, Simon Miles, Stian Soiland-Reyes, for their thorough reviews.
+ </p>
+
+<p>
+Members of the PROV Working Group at the time of publication of this document were:
+
+Ilkay Altintas (Invited expert),
+Reza B'Far (Oracle Corporation),
+Khalid Belhajjame (University of Manchester),
+James Cheney (University of Edinburgh, School of Informatics),
+Sam Coppens (IBBT),
+David Corsar (University of Aberdeen, Computing Science),
+Stephen Cresswell (The National Archives),
+Tom De Nies (IBBT),
+Helena Deus (DERI Galway at the National University of Ireland, Galway, Ireland),
+Simon Dobson (Invited expert),
+Martin Doerr (Foundation for Research and Technology - Hellas(FORTH)),
+Kai Eckert (Invited expert),
+Jean-Pierre EVAIN (European Broadcasting Union, EBU-UER),
+James Frew (Invited expert),
+Irini Fundulaki (Foundation for Research and Technology - Hellas(FORTH)),
+Daniel Garijo (Universidad Politécnica de Madrid),
+Yolanda Gil (Invited expert),
+Ryan Golden (Oracle Corporation),
+Paul Groth (Vrije Universiteit),
+Olaf Hartig (Invited expert),
+David Hau (National Cancer Institute, NCI),
+Sandro Hawke (W3C/MIT),
+Jörn Hees (German Research Center for Artificial Intelligence (DFKI) Gmbh),
+Ivan Herman, (W3C/ERCIM),
+Ralph Hodgson (TopQuadrant),
+Hook Hua (Invited expert),
+Trung Dong Huynh (University of Southampton),
+Graham Klyne (University of Oxford),
+Michael Lang (Revelytix, Inc.),
+Timothy Lebo (Rensselaer Polytechnic Institute),
+James McCusker (Rensselaer Polytechnic Institute),
+Deborah McGuinness (Rensselaer Polytechnic Institute),
+Simon Miles (Invited expert),
+Paolo Missier (School of Computing Science, Newcastle university),
+Luc Moreau (University of Southampton),
+James Myers (Rensselaer Polytechnic Institute),
+Vinh Nguyen (Wright State University),
+Edoardo Pignotti (University of Aberdeen, Computing Science),
+Paulo da Silva Pinheiro (Rensselaer Polytechnic Institute),
+Carl Reed (Open Geospatial Consortium),
+Adam Retter (Invited Expert),
+Christine Runnegar (Invited expert),
+Satya Sahoo (Invited expert),
+David Schaengold (Revelytix, Inc.),
+Daniel Schutzer (FSTC, Financial Services Technology Consortium),
+Yogesh Simmhan (Invited expert),
+Stian Soiland-Reyes (University of Manchester),
+Eric Stephan (Pacific Northwest National Laboratory),
+Linda Stewart (The National Archives),
+Ed Summers (Library of Congress),
+Maria Theodoridou (Foundation for Research and Technology - Hellas(FORTH)),
+Ted Thibodeau (OpenLink Software Inc.),
+Curt Tilmes (National Aeronautics and Space Administration),
+Craig Trim (IBM Corporation),
+Stephan Zednik (Rensselaer Polytechnic Institute),
+Jun Zhao (University of Oxford),
+Yuting Zhao (University of Aberdeen, Computing Science).
+</p>
+ </section>
+
+ </body></html>
+
+<!-- LocalWords: px DM RL RDF AQ SEM SOTD Definitional wasInformedBy attrs ag
+ -->
+<!-- LocalWords: wasGeneratedBy wasStartedBy gAttr sAttr wasAttributedTo attr
+ -->
+<!-- LocalWords: wasAssociatedWith dAttrs gAttrs wasDerivedFrom uAttrs eAttrs
+ -->
+<!-- LocalWords: wasRevisionOf specializationOf wasQuotedFrom Traceability WD
+ -->
+<!-- LocalWords: tracedTo aAttr actedOnBehalfOf rAttr traceability TODO xsd
+ -->
+<!-- LocalWords: alternateOf wasEndedBy Lamport's timeline subfigure memberOf
+ -->
+<!-- LocalWords: wasStartedByAgent wasAttributedWith derivedByInsertionFrom
+ -->
+<!-- LocalWords: QName derivedByRemovalFrom EmptyCollection wasVersionOf dm
+ -->
+<!-- LocalWords: RecsWD formedness workflow ness operability CSP versa hyp YY
+ -->
+<!-- LocalWords: disambiguating lifecycle conformant minimalistic Lamport fo
+ -->
+<!-- LocalWords: reflexivity antisymmetry timelines timespan WG concl inv TBD
+ -->
+<!-- LocalWords: continuant occurrent modalities toyota womanInRedDress provn
+ -->
+<!-- LocalWords: customerInChairAt manWithGlasses customerInChair irreflexive
+ -->
+<!-- LocalWords: wasStartedByActivity antisymmetric wasInvalidatedBy stmt CHR
+ -->
+<!-- LocalWords: DBCONSTRAINTS formalisms URIs wasInfluencedBy definitional
+ -->
+<!-- LocalWords: wasInvalidated th nontermination implementability att evt
+ -->
+<!-- LocalWords: Irreflexivity mentionOf preorder equalities unsatisfiable De
+ -->
+<!-- LocalWords: Lebo subfigures pre del irreflexivity superproperty typeOf
+ -->
+<!-- LocalWords: disjointness inferrable subtyping subtype subtypes hadMember
+ -->
+<!-- LocalWords: hasMember toplevel sameAs tuple acyclicity isomorphism IRI
+ -->
+<!-- LocalWords: endBundle typeof equational acyclic invertible procedurally
+ -->
+<!-- LocalWords: implementers multi unifier ERCIM Groth Stian Soiland Ilkay
+ -->
+<!-- LocalWords: Altintas Reza B'Far Belhajjame Informatics Coppens IBBT Nies
+ -->
+<!-- LocalWords: Corsar Cresswell Deus DERI Galway satisfiable namespace Kai
+ -->
+<!-- LocalWords: endDocument Dobson Doerr Hellas Eckert EVAIN EBU UER Frew de
+ -->
+<!-- LocalWords: Irini Fundulaki Garijo Universidad Politécnica Vrije Hartig
+ -->
+<!-- LocalWords: Universiteit Hau NCI Sandro Hawke Jörn Hees DFKI Gmbh Hua da
+ -->
+<!-- LocalWords: Hodgson TopQuadrant Trung Huynh Klyne Revelytix Rensselaer
+ -->
+<!-- LocalWords: McCusker McGuinness Paolo Missier Luc Moreau Vinh Edoardo
+ -->
+<!-- LocalWords: Pignotti Paulo Pinheiro Geospatial Retter Runnegar Satya
+ -->
+<!-- LocalWords: Sahoo Schaengold Schutzer FSTC Yogesh Simmhan Theodoridou
+ -->
+<!-- LocalWords: Thibodeau OpenLink Tilmes Zednik Zhao Yuting
+ -->