The meta-calculus
Argon ships no classifying vocabulary. There is no built-in Person, no built-in Kind, no upper ontology — only the means to declare them. A program, or a package it imports, declares the vocabulary it needs.
Three declarations form the meta-calculus:
- a metatype classifies concepts —
kind,role,phaseare metatypes a vocabulary might declare; - a metaxis declares an axis along which a metatype’s concepts vary, with named values — a
rigidityaxis with valuesanti_rigid < semi_rigid < rigid; - a metarel classifies relations, as a metatype classifies concepts.
type and rel, the introducers for a plain concept and a plain relation, are not keywords. They are declared in std::core and brought into scope with use std::core::{type, rel} or a package prelude. A program that wants the vocabulary of a foundational ontology imports the package that declares it; the language stays neutral.
The compiler never reads a vocabulary name. It does not know what kind or rigid mean. It enforces the structure the meta-calculus fixes — that a concept’s metatype is in scope, that an axis value is one the axis declares, that a relation’s endpoints carry the metatypes its metarel requires — and nothing about the names. Two metatype-level marks are the exception it acts on: abstract, which forbids direct instances, and fixed, which forbids changing an individual’s instantiation after construction. A metatype binds its axes with : — kind = { rigidity: rigid, sortality: sortal } — giving, for each axis, the value this metatype takes.