Facts and questions in AGISystem2 are expressed exclusively through Sys2DSL, not as “free” text lines. Every fact or question is an instruction of the form @var ACTION ... inside a session or a theory file.
A fact is a Sys2DSL instruction that binds a variable to a canonical triple Subject REL Object and inserts it into the active theory.
General form:
@f1 ASSERT subject REL object
Examples of basic facts:
@f1 ASSERT Dog IS_A Animal
@f2 ASSERT Water BOILS_AT Celsius100
@f3 ASSERT Celsius100 IS_A temperature
@f4 ASSERT surgery_x REQUIRES consent
@f5 ASSERT export_data PROHIBITED_BY GDPR
Note: Properties like boiling point are expressed using specific relations (e.g., BOILS_AT) that connect subjects to value concepts (e.g., Celsius100). This keeps values as first-class concepts that can be reasoned about independently.
Conventions for tokens in the parameter list:
dog, water, export_data) is treated as a concept name;Alice, CityX) is treated as an individual or concrete instance;$ ($factList) is a reference to a variable already defined in the script.ASSERT instructions are the only ones that introduce new facts into the session theory; there is no implicit ingestion of “bare” lines. You may have multiple instructions in the same script; each @ marks the start of a new statement, even if they appear on the same line.
Questions are also Sys2DSL instructions, but instead of modifying the theory they bind a variable to a “truth object” that holds the result of reasoning. The form is:
@q1 ASK "question-text?"
question-text is a string that follows the constrained grammar. For natural language it usually ends in ?, but for canonical triples the trailing ? is optional because the ASK action already marks the statement as a question.
@q1 ASK "Is Dog an Animal?"
@q2 ASK "Is Water a Substance?"
@q3 ASK "Dog IS_A Animal"
@q4 ASK "Water BOILS_AT Celsius100"
@q5 ASK "export_data PROHIBITED_BY GDPR"
In all cases, the result is stored in the variable @qN and can be read or combined by other instructions (for example in more complex Sys2DSL programmes). There is no separate sugar mode: questions always go through @var ASK ....
Counterfactuals use a dedicated action but remain a single Sys2DSL instruction. General form:
@cfVar CF "question-text" | Fact1 ; Fact2 ; ...
Simple example (asking "what if water boiled at 50°C?"):
@cf CF "Water BOILS_AT Celsius50"
| Water BOILS_AT Celsius50
The list of assumptions after | uses the same “Subject REL Object” grammar as ASSERT, separated by ; when there are multiple facts. Internally, the engine treats these facts as a temporary theory layer for the given question, without modifying the session’s base theory.
A typical Sys2DSL script that mixes facts and questions looks like this:
@f1 ASSERT Dog IS_A Animal
@f2 ASSERT Water BOILS_AT Celsius100
@f3 ASSERT Celsius100 IS_A temperature
@q1 ASK "Is Dog an Animal?"
@q2 ASK "Water BOILS_AT Celsius100"
You can write the same instructions on a single line, for example:
@f1 ASSERT Dog IS_A Animal @q1 ASK "Is Dog an Animal?"
The interpreter splits the script at each @, builds the dependency graph between variables and executes the instructions in a topological order so that $ references are resolved correctly even if they appear “earlier” in the text.
In the new syntax, facts and questions never appear as independent lines; they are always expressed as Sys2DSL instructions of the form @var ASSERT ..., @var ASK ... or @var CF .... This guarantees a single, analyzable interaction form that is easy to compose into theory programmes.
For implementation details, see the relevant design specifications (referenced by ID):
ASSERT, ASK, CF actions.Subject REL Object triples.