aboutsummaryrefslogtreecommitdiffstats
path: root/docs/language-specification.org
diff options
context:
space:
mode:
Diffstat (limited to 'docs/language-specification.org')
-rw-r--r--docs/language-specification.org26
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