aboutsummaryrefslogtreecommitdiffstats
path: root/docs/language-specification.org
diff options
context:
space:
mode:
authorMarcos Magueta <maguetamarcos@gmail.com>2026-07-12 17:55:27 -0300
committerMarcos Magueta <maguetamarcos@gmail.com>2026-07-12 17:56:11 -0300
commitb4a2485afbf74e99e2147086fbca0568b7e2b7b8 (patch)
treef2f0f653c7de2d5a1b1565d0ec48c46dec580a5a /docs/language-specification.org
parentb7ab0a9d1f0275db32a526faf7cffe9d520b15c8 (diff)
downloadSOL-b4a2485afbf74e99e2147086fbca0568b7e2b7b8.tar.gz
SOL-b4a2485afbf74e99e2147086fbca0568b7e2b7b8.zip
relation references as a term kind, written #Name
Diffstat (limited to '')
-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