diff options
Diffstat (limited to 'docs/language-specification.org')
| -rw-r--r-- | docs/language-specification.org | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/docs/language-specification.org b/docs/language-specification.org index 639e8d6..602d3d4 100644 --- a/docs/language-specification.org +++ b/docs/language-specification.org @@ -60,6 +60,7 @@ The core lexical categories are: - literals (ground scalars) - records (tuple literals) - sequences (list literals) +- references (relation-denoting values, =#Name=) - blocks (membership propositions) - logical combinator messages as labels @@ -227,6 +228,31 @@ sequence of propositions (e.g. a schema's fact list) also uses =#( ... )=: it is honestly a sequence whose elements happen to be blocks. +** References + +A reference is a first-class value denoting a relation by name, +written with the Smalltalk symbol notation: + +#+BEGIN_SRC sol +#Person +#Increment +#+END_SRC + +A reference is a term, not a proposition: it names a relation as +data, resolved through the catalog of a state. It is deliberately +distinct from a string (a string is inert; a reference resolves) and +from a variable (an uppercase bare name in term position stays a +variable). Wherever a relation must appear as an argument, the +reference is the value: transition relations +(=[Insert relation: #Person ...]=), higher-order relations +(=[Map relation: #Increment ...]=), and the attributes of the +catalog relations themselves. + +Because a reference variable ranges over the catalog, which is +finite, an unbound reference is boundedly enumerable: the +higher-order restriction becomes ordinary cardinality analysis +rather than a prohibition. + ** Blocks Blocks — square brackets — delimit exactly one thing: membership |
