removed dictionary constraints
authorLuc Moreau <l.moreau@ecs.soton.ac.uk>
Fri, 08 Jun 2012 13:55:56 +0100
changeset 3246 fb00155c3f2e
parent 3245 68c76a0d2eec
child 3247 63f614d8b265
removed dictionary constraints
model/prov-constraints.html
model/working-copy/wd6-collections-constraints.html
--- a/model/prov-constraints.html	Fri Jun 08 13:38:58 2012 +0100
+++ b/model/prov-constraints.html	Fri Jun 08 13:55:56 2012 +0100
@@ -2082,125 +2082,10 @@
   
 <h4>Dictionaries and Contents</h4>
 
-<p>We model the contents of a dictionary  with a function contents that has the following signature
- Dictionary x Value -> Entity U {&#8869,?}.</p>
-
-<p>Given a dictionary <span class="name">d</span>, a value <span class="name">k</span>, contents is interpreted as follows:</p>
-<ul>
-<li>contents(d,<em>k</em>)=<em>e</em>:  there is an entry with key <em>k</em> and entity <em>e</em> in <span class="name">d</span>;
-<li>contents(d,<em>k</em>)=&#8869:  there is no entry with key <em>k</em> in <span class="name">d</span>;
-
-<li>contents(d,<em>k</em>)=?:  it is not known if there is an entry with key <em>k</em> in <span class="name">d</span>.
-</ul>
-
-<p id="contents-empty-dictionary_text">The contents of an EmptyDictionary  is defined as the empty set.</p>
-
-       <div class='inference' id="contents-empty-dictionary">
-<p>
-    For any dictionary <span class="name">d</span>, 
-<span class='conditional'>IF</span>
-<span class="name">entity(d, [prov:type='prov:EmptyDictionary'])</span>,
- <span class='conditional'>THEN</span>:</p>
-<ul>
-<li> <span class="name">contents(d,<em>k</em>)=&#8869</span> for any <em>k</em>.
-</ul>
-</div> 
-
-
-<p id="contents-unspecified-dictionary_text">By default, the contents of a dictionary is unknown.</p>
-
-       <div class='inference' id="contents-unspecified-dictionary">
-<p>
-    For any dictionary <span class="name">d</span>, 
-<span class='conditional'>IF</span>
-<span class="name">entity(d, [prov:type='prov:Dictionary'])</span>,
- <span class='conditional'>THEN</span>:</p>
-<ul>
-<li> <span class="name">contents(d,<em>k</em>)=?</span> for any <em>k</em>.
-</ul>
-</div> 
-
-<p id="contents-after-insertion_text">The contents of a dictionary after insertion is defined as follows.</p>
-    
-       <div class='inference' id="contents-after-insertion">
-<p>
-    For any dictionaries <span class="name">d1</span> and <span class="name">d2</span>, 
-<span class='conditional'>IF</span>
-<span class="name">derivedByInsertionFrom(d2, d1, {(<em>k1</em>, <em>e1</em>) ... (<em>kn</em>, <em>en</em>)})</span>,
- <span class='conditional'>THEN</span>:</p>
-<ul>
-<li> <span class="name">contents(d2,<em>k</em>)=contents(d1,<em>k</em>)</span> if <em>k</em> is not in <em>k1</em>, ..., <em>kn</em>;
-<li> <span class="name">contents(d2,<em>ki</em>)=<em>ei</em></span>  if <em>k</em> is in <em>k1</em>, ..., <em>kn</em>;
-</ul>
-</div> 
-
-
-<p id="contents-after-removal_text">The contents of a dictionary after removal is defined as follows.</p>
-    
-       <div class='inference' id="contents-after-removal">
-<p>
-    For any dictionaries <span class="name">d1</span> and <span class="name">d2</span>, 
-<span class='conditional'>IF</span>
-<span class="name">derivedByRemovalFrom(d2, d1, {<em>k1</em> ... <em>kn</em>})</span>,
- <span class='conditional'>THEN</span>:</p>
-<ul>
-<li> <span class="name">contents(d2,<em>k</em>)=contents(d1,<em>k</em>)</span> if <em>k</em> is not in <em>k1</em>, ..., <em>kn</em>;
-<li> <span class="name">contents(d2,<em>ki</em>)=&#8869</span>  if <em>k</em> is in <em>k1</em>, ..., <em>kn</em>.
-</ul>
-</div> 
-
-
-<p id="contents-after-membership_text">The contents of a dictionary after membership is defined as follows.</p>
-    
-       <div class='inference' id="contents-after-membership">
-<p>
-    For any dictionary <span class="name">d</span>, 
-<span class='conditional'>IF</span>
-<span class="name">memberOf(d, {(<em>k1</em>, <em>e1</em>) ... (<em>kn</em>, <em>en</em>)})</span>,
- <span class='conditional'>THEN</span>:</p>
-<ul>
-<li> <span class="name">contents(d,<em>k</em>)=?</span> if <em>k</em> is not in <em>k1</em>, ..., <em>kn</em>;
-<li> <span class="name">contents(d,<em>ki</em>)=<em>ei</em></span>  if <em>k</em> is in <em>k1</em>, ..., <em>kn</em>.
-</ul>
-</div> 
-
-
-
-<p id="contents-after-complete-membership_text">The contents of a dictionary after complete membership is defined as follows.</p>
-    
-       <div class='inference' id="contents-after-complete-membership">
-<p>
-    For any dictionary <span class="name">d</span>, 
-<span class='conditional'>IF</span>
-<span class="name">memberOf(d, {(<em>k1</em>, <em>e1</em>) ... (<em>kn</em>, <em>en</em>)}, true)</span>,
- <span class='conditional'>THEN</span>:</p>
-<ul>
-<li> <span class="name">contents(d,<em>k</em>)=&#8869</span> if <em>k</em> is not in <em>k1</em>, ..., <em>kn</em>;
-<li> <span class="name">contents(d,<em>ki</em>)=<em>ei</em></span>  if <em>k</em> is in <em>k1</em>, ..., <em>kn</em>.
-</ul>
-</div> 
-
-
-
-
-<p id="contents-after-complete-membership_text">Succcessfully looking up a key in a dictionary results in an entity, which is an alternate of an entity known to be in the dictionary. </p>
-    
-       <div class='inference' id="lookup-and-membership">
-<p>
-<span class='conditional'>IF</span>
-<span class="name">wasDerivedFrom(e2,d,[prov:key=<em>k</em>, prov:type='prov:Lookup'])</span>, and
-<span class="name">contents(d,<em>k</em>)=e1</em></span>
- <span class='conditional'>THEN</span>: <span class="name">alternateOf(e2,e1)</span>.
-
-</div> 
-
-
-
-
-
-
+<div class="note">
+Axiomatisation of dictionaries to be expressed here. See <a href="./working-copy/wd6-collections-constraints.html">here</a>.
+</div>
 </section>
-
  
 </section> <!-- dictionary-constraints -->
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/model/working-copy/wd6-collections-constraints.html	Fri Jun 08 13:55:56 2012 +0100
@@ -0,0 +1,417 @@
+<!DOCTYPE html
+>
+
+<html><head> 
+    <title>PROV-DM: The PROV 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 }
+     </style>
+
+    <script src="http://dev.w3.org/2009/dap/ReSpec.js/js/respec.js" class="remove"></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 src="../glossary.js" class="remove"></script>
+
+    <script class="remove">
+      function updateGlossaryRefs() {
+        $('.glossary-ref').each(function(index) {
+          var ref=$(this).attr('data-ref');
+          var span=$(this).attr('data-withspan')
+          $(this).removeAttr('data-withspan');
+          $(this).removeAttr('data-ref');
+
+          $('#'+ref+'.glossary').contents().clone().appendTo($(this));
+//          $(this).attr("prov:hadOriginalSource",glossary_hg);
+          if (span) {
+            $(this).children('dfn').replaceWith(function(){return $('<span>').addClass('dfn').append($(this).contents())});
+          }
+        });
+      }
+      $(document).ready(function(){
+        // if glossary is in a string:
+        $('#glossary_div').html(glossary_string)
+        updateGlossaryRefs();
+      });
+
+    </script>
+
+    <script class="remove"> 
+      var addExtraReferences = function() {
+          for (var k in extraReferences)
+              berjon.biblio[k] = extraReferences[k];
+      };
+      var extraReferences = {
+        "CLOCK":
+         "Lamport, L. "+
+         "<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>",
+        "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>",
+        "PROV-SEM":
+          "James Cheney "+
+          "<a href=\"http://www.w3.org/2011/prov/wiki/FormalSemanticsStrawman\"><cite>Formal Semantics Strawman</cite></a>. "+
+          "2011, Work in progress. "+
+          "URL: <a href=\"http://www.w3.org/2011/prov/wiki/FormalSemanticsStrawman\">http://www.w3.org/2011/prov/wiki/FormalSemanticsStrawman</a>",
+
+        "PROV-PRIMER":
+          "Yolanda Gil and Simon Miles (eds.) Khalid Belhajjame, Helena Deus, Daniel Garijo, Graham Klyne, Paolo Missier, Stian Soiland-Reyes, and Stephan Zednik "+
+          "<a href=\"http://www.w3.org/TR/prov-primer/\"><cite>Prov Model Primer</cite></a>. "+
+          "2011, Working Draft. "+
+          "URL: <a href=\"http://www.w3.org/TR/prov-primer/\">http://www.w3.org/TR/prov-primer/</a>",
+
+        "PROV-O":
+          "Satya Sahoo and Deborah McGuinness (eds.) Khalid Belhajjame, James Cheney, Daniel Garijo, Timothy Lebo, Stian Soiland-Reyes, and Stephan Zednik "+
+          "<a href=\"http://www.w3.org/TR/prov-o/\"><cite>Provenance Formal Model</cite></a>. "+
+          "2011, Working Draft. "+
+          "URL: <a href=\"http://www.w3.org/TR/prov-o/\">http://www.w3.org/TR/prov-o/</a>",
+
+
+        "PROV-CONSTRAINTS":
+          "James Cheney, Paolo Missier, and Luc Moreau (eds.) "+
+          "<a href=\"http://www.w3.org/TR/prov-constraints/\"><cite>Constraints of the PROV Data Model</cite></a>. "+
+          "2011, Working Draft. "+
+          "URL: <a href=\"http://www.w3.org/TR/prov-constraints/\">http://www.w3.org/TR/prov-constraints/</a>",
+
+        "PROV-N":
+          "Luc Moreau and Paolo Missier (eds.)"+
+          "<a href=\"http://www.w3.org/TR/prov-n/\"><cite>PROV-N: The Provenance Notation</cite></a>. "+
+          "2011, Working Draft. "+
+          "URL: <a href=\"http://www.w3.org/TR/prov-n/\">http://www.w3.org/TR/prov-n/</a>",
+
+        "PROV-AQ":
+          "Graham Klyne and Paul Groth (eds.) Luc Moreau, Olaf Hartig, Yogesh Simmhan, James Meyers, Timothy Lebo, Khalid Belhajjame, and Simon Miles "+
+          "<a href=\"http://www.w3.org/TR/prov-aq/\"><cite>Provenance Access and Query</cite></a>. "+
+          "2011, Working Draft. "+
+          "URL: <a href=\"http://www.w3.org/TR/prov-aq/\">http://www.w3.org/TR/prov-aq/</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-dm",
+ 
+          // if your specification has a subtitle that goes below the main
+          // formal title, define it here
+      subtitle   :  "working towards WD6 (<a href=\"diff.html\">Diffs since last release</a>)",
+
+ 
+          // if you wish the publication date to be other than today, set this
+//          publishDate:  "2012-05-03",
+ 
+          // if the specification's copyright date is a range of years, specify
+          // the start date here:
+          copyrightStart: "2011",
+ 
+          // if there is a previously published draft, uncomment this and set its YYYY-MM-DD date
+          // and its maturity status
+          previousPublishDate:  "2012-05-03",
+          previousMaturity:  "WD",
+ 
+          // if there a publicly available Editor's Draft, this is the link
+          edDraftURI:           "http://dvcs.w3.org/hg/prov/raw-file/default/model/prov-dm.html",
+ 
+          // if this is a LCWD, uncomment and set the end of its review period
+          // lcEnd: "2009-08-05",
+ 
+          // 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-dm.css"],
+ 
+          // editors, add as many as you like
+          // only "name" is required
+          editors:  [
+              { name: "Luc Moreau", url: "http://www.ecs.soton.ac.uk/~lavm/",
+                company: "University of Southampton" },
+              { name: "Paolo Missier", url: "http://www.cs.ncl.ac.uk/people/Paolo.Missier",
+                company: "Newcastle University" },
+          ],
+ 
+          // 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: "Khalid Belhajjame", url: "http://semanticweb.org/wiki/Khalid_Belhajjame",
+                company: "University of Manchester" },
+              { name: "Reza B'Far",
+                company: "Oracle Corporation" },
+              { name: "Stephen Cresswell",
+                company: "legislation.gov.uk"},
+              { name: "Yolanda Gil",
+                company: "Invited Expert", url:"http://www.isi.edu/~gil/"},
+              { name: "Paul Groth", url: "http://www.few.vu.nl/~pgroth/",
+                company: "VU University of Amsterdam" },
+              { name: "Graham Klyne",
+                company: "University of Oxford" },
+              { name: "Jim McCusker", url: "http://tw.rpi.edu/web/person/JamesMcCusker",
+                company: "Rensselaer Polytechnic Institute" },
+              { name: "Simon Miles", 
+                company: "Invited Expert", url:"http://www.inf.kcl.ac.uk/staff/simonm/" },
+              { name: "James Myers", url:"http://www.rpi.edu/research/ccni/",
+                company: "Rensselaer Polytechnic Institute"},
+              { name: "Satya Sahoo", url:"http://cci.case.edu/cci/index.php/Satya_Sahoo",
+                company: "Case Western Reserve University" },
+              { name: "Curt Tilmes", 
+                company: "National Aeronautics and Space Administration" },
+          ],
+          
+          // 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-wg",
+          
+          // 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],
+      };
+    </script> 
+  </head> 
+  <body> 
+
+    <section id="abstract">
+<p>
+PROV-DM, the PROV data model, is a data model for provenance that describes
+the entities, people and activities involved in
+producing a piece of data or thing. 
+PROV-DM distinguishes core structures, forming the essence of provenance descriptions, from
+extended structures catering for more advanced uses of provenance. 
+PROV-DM is organized in six components, respectively dealing with: 
+(1) entities and activities, and the time at which they were created, used, or ended;
+(2) agents bearing responsibility for entities that were generated and activities that happened;
+(3) derivations of entities from entities;
+(4) properties to link entities that refer to the same thing;
+(5) notion of bundle, a mechanism to support provenance of provenance;
+(6) collections forming a logical structure for its members.
+</p>
+
+<p>This document introduces the provenance concepts found in
+PROV and defines PROV-DM types and
+relations. PROV data model is domain-agnostic, but is equipped with
+extensibility points allowing domain-specific information to be included. </p>
+
+<p>Two further documents complete the specification of PROV-DM.
+First, a companion document specifies the set of constraints that
+provenance descriptions should follow.  Second, 
+a separate document describes a provenance notation for expressing 
+instances of provenance for human consumption; this notation is used in examples in
+this document. </p>
+
+    </section> 
+
+<section id="sotd">
+<h4>PROV Family of Specifications</h4>
+This document is part of the PROV family of specifications, a set of specifications defining various aspects that are necessary to achieve the vision of inter-operable
+interchange of provenance information in heterogeneous environments such as the Web.  The specifications are:
+<ul>
+<li> PROV-DM, the PROV data model for provenance (this document);</li>
+<li> PROV-CONSTRAINTS, a set of constraints applying to the PROV data model;</li>
+<li> PROV-N, a notation for provenance aimed at human consumption;</li>
+<li> PROV-O, the PROV ontology, an OWL-RL ontology allowing the mapping of PROV to RDF;</li>
+<li> PROV-AQ, the mechanisms for accessing and querying provenance; </li>
+<li> PROV-PRIMER, a primer for the PROV data model;</li>
+<li> PROV-SEM, a formal semantics for the PROV data model;</li>
+<li> PROV-XML, an XML schema for the PROV data model.</li>
+</ul>
+<h4>How to read the PROV Family of Specifications</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 OWL-RL ontology. For further details, PROV-DM and PROV-CONSTRAINTS specify the constraints applicable to the data model, and its interpretation. PROV-SEM provides a mathematical semantics.</li>
+<li>The XML community should focus on PROV-XML defining an XML schema for PROV. Further details can also be found in PROV-DM, PROV-CONSTRAINTS, and PROV-SEM.</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, PROV-N, PROV-XML offer examples of mapping to RDF, text, and XML, respectively.</li>
+</ul>
+
+
+<h4>Fourth Public Working Draft</h4>
+<p>This is the fourth public release of the PROV-DM document. Following feedback, the Working Group has decided to reorganize this document substantially, separating the data model from its contraints and the notation used to illustrate it. The PROV-DM release is synchronized with the release of the PROV-O, PROV-PRIMER, PROV-N, and PROV-CONSTRAINTS documents. We are now clarifying the entry path to the PROV family of specifications.</p>
+</section>
+
+
+
+
+<!-- <div class="buttonpanel"> 
+<form action="#"><p> 
+<input id="hide-asn" onclick="set_display_by_class('div','withAsn','none');set_display_by_class('span','withAsn','none'); set_display_by_id('hide-asn','none'); set_display_by_id('show-asn','');" type="button"
+value="Hide ASN" /> 
+<input id="show-asn" onclick="set_display_by_class('div','withAsn',''); set_display_by_class('span','withAsn','');  set_display_by_id('hide-asn',''); set_display_by_id('show-asn','none');" style="display: none"
+type="button" value="Show ASN" /> 
+</p> 
+</form> 
+</div>     
+-->
+
+
+<section id="dictionaries-and-contents">
+
+  
+<h4>Dictionaries and Contents</h4>
+
+<p>We model the contents of a dictionary  with a function contents that has the following signature
+ Dictionary x Value -> Entity U {&#8869,?}.</p>
+
+<p>Given a dictionary <span class="name">d</span>, a value <span class="name">k</span>, contents is interpreted as follows:</p>
+<ul>
+<li>contents(d,<em>k</em>)=<em>e</em>:  there is an entry with key <em>k</em> and entity <em>e</em> in <span class="name">d</span>;
+<li>contents(d,<em>k</em>)=&#8869:  there is no entry with key <em>k</em> in <span class="name">d</span>;
+
+<li>contents(d,<em>k</em>)=?:  it is not known if there is an entry with key <em>k</em> in <span class="name">d</span>.
+</ul>
+
+<p id="contents-empty-dictionary_text">The contents of an EmptyDictionary  is defined as the empty set.</p>
+
+       <div class='inference' id="contents-empty-dictionary">
+<p>
+    For any dictionary <span class="name">d</span>, 
+<span class='conditional'>IF</span>
+<span class="name">entity(d, [prov:type='prov:EmptyDictionary'])</span>,
+ <span class='conditional'>THEN</span>:</p>
+<ul>
+<li> <span class="name">contents(d,<em>k</em>)=&#8869</span> for any <em>k</em>.
+</ul>
+</div> 
+
+
+<p id="contents-unspecified-dictionary_text">By default, the contents of a dictionary is unknown.</p>
+
+       <div class='inference' id="contents-unspecified-dictionary">
+<p>
+    For any dictionary <span class="name">d</span>, 
+<span class='conditional'>IF</span>
+<span class="name">entity(d, [prov:type='prov:Dictionary'])</span>,
+ <span class='conditional'>THEN</span>:</p>
+<ul>
+<li> <span class="name">contents(d,<em>k</em>)=?</span> for any <em>k</em>.
+</ul>
+</div> 
+
+<p id="contents-after-insertion_text">The contents of a dictionary after insertion is defined as follows.</p>
+    
+       <div class='inference' id="contents-after-insertion">
+<p>
+    For any dictionaries <span class="name">d1</span> and <span class="name">d2</span>, 
+<span class='conditional'>IF</span>
+<span class="name">derivedByInsertionFrom(d2, d1, {(<em>k1</em>, <em>e1</em>) ... (<em>kn</em>, <em>en</em>)})</span>,
+ <span class='conditional'>THEN</span>:</p>
+<ul>
+<li> <span class="name">contents(d2,<em>k</em>)=contents(d1,<em>k</em>)</span> if <em>k</em> is not in <em>k1</em>, ..., <em>kn</em>;
+<li> <span class="name">contents(d2,<em>ki</em>)=<em>ei</em></span>  if <em>k</em> is in <em>k1</em>, ..., <em>kn</em>;
+</ul>
+</div> 
+
+
+<p id="contents-after-removal_text">The contents of a dictionary after removal is defined as follows.</p>
+    
+       <div class='inference' id="contents-after-removal">
+<p>
+    For any dictionaries <span class="name">d1</span> and <span class="name">d2</span>, 
+<span class='conditional'>IF</span>
+<span class="name">derivedByRemovalFrom(d2, d1, {<em>k1</em> ... <em>kn</em>})</span>,
+ <span class='conditional'>THEN</span>:</p>
+<ul>
+<li> <span class="name">contents(d2,<em>k</em>)=contents(d1,<em>k</em>)</span> if <em>k</em> is not in <em>k1</em>, ..., <em>kn</em>;
+<li> <span class="name">contents(d2,<em>ki</em>)=&#8869</span>  if <em>k</em> is in <em>k1</em>, ..., <em>kn</em>.
+</ul>
+</div> 
+
+
+<p id="contents-after-membership_text">The contents of a dictionary after membership is defined as follows.</p>
+    
+       <div class='inference' id="contents-after-membership">
+<p>
+    For any dictionary <span class="name">d</span>, 
+<span class='conditional'>IF</span>
+<span class="name">memberOf(d, {(<em>k1</em>, <em>e1</em>) ... (<em>kn</em>, <em>en</em>)})</span>,
+ <span class='conditional'>THEN</span>:</p>
+<ul>
+<li> <span class="name">contents(d,<em>k</em>)=?</span> if <em>k</em> is not in <em>k1</em>, ..., <em>kn</em>;
+<li> <span class="name">contents(d,<em>ki</em>)=<em>ei</em></span>  if <em>k</em> is in <em>k1</em>, ..., <em>kn</em>.
+</ul>
+</div> 
+
+
+
+<p id="contents-after-complete-membership_text">The contents of a dictionary after complete membership is defined as follows.</p>
+    
+       <div class='inference' id="contents-after-complete-membership">
+<p>
+    For any dictionary <span class="name">d</span>, 
+<span class='conditional'>IF</span>
+<span class="name">memberOf(d, {(<em>k1</em>, <em>e1</em>) ... (<em>kn</em>, <em>en</em>)}, true)</span>,
+ <span class='conditional'>THEN</span>:</p>
+<ul>
+<li> <span class="name">contents(d,<em>k</em>)=&#8869</span> if <em>k</em> is not in <em>k1</em>, ..., <em>kn</em>;
+<li> <span class="name">contents(d,<em>ki</em>)=<em>ei</em></span>  if <em>k</em> is in <em>k1</em>, ..., <em>kn</em>.
+</ul>
+</div> 
+
+
+
+
+<p id="contents-after-complete-membership_text">Succcessfully looking up a key in a dictionary results in an entity, which is an alternate of an entity known to be in the dictionary. </p>
+    
+       <div class='inference' id="lookup-and-membership">
+<p>
+<span class='conditional'>IF</span>
+<span class="name">wasDerivedFrom(e2,d,[prov:key=<em>k</em>, prov:type='prov:Lookup'])</span>, and
+<span class="name">contents(d,<em>k</em>)=e1</em></span>
+ <span class='conditional'>THEN</span>: <span class="name">alternateOf(e2,e1)</span>.
+
+</div> 
+
+
+
+
+
+
+</section>
+
+
+</section>
+
+
+
+<div id="glossary_div" class="remove">
+<!-- glossary loaded from glossary.js will be hooked up here,
+     class remove, will remove this element from the final output.
+-->
+</div>
+
+<section class="appendix"> 
+      <h2>Acknowledgements</h2> 
+      <p> 
+        WG membership to be listed here.
+      </p> 
+    </section> 
+
+ </body>
+</html>