Syntaxe de base et termes
Statut documentaire : reference — voir Maturité et preuves.
H-Logic garde la structure conceptuelle explicite. Les rôles s’écrivent entre parenthèses, les attributs entre crochets, les interfaces s’attachent avec :: et les références explicites à des termes nommés utilisent &.
Définitions et instances
define .:#Person(me)[name::#string];
#alice:#Person;
_:#Person;
x:#T est un terme typé. Une instance nommée comme #alice:#Person possède un nom conceptuel stable. _:#Person désigne une instance anonyme. Le rôle distingué me représente le support/l’identité sémantique des entités non singleton ; ce n’est pas un champ à ajouter dans les métadonnées YAML ou XML.
Rôles et attributs
define .:#worksFor(person:#Person, company:#Company, context:#Context);
define .:#Order(me)[amount::#float, status:#OrderStatus];
Les positions entre parenthèses sont des rôles structurels. Les positions entre crochets sont des attributs descriptifs. Un rôle structurel peut porter un ordre, par exemple context^2:#Context ; cette annotation appartient à la déclaration du rôle, pas aux variables quantifiées.
Commandes
Une assertion nue est une opération tell. Les formes explicites rendent l’intention plus claire :
projectBeta:#Context;
tell projectBeta:#Context;
do projectBeta:#Context;
ask .:#A(x) and .:#R(x, y) return x;
Utiliser ask ou ? pour introduire une requête. Les variables de requête sont des noms de rôles ordinaires dans l’expression ; ne pas les préfixer sous la forme ?x.
Règle de couches
YAML/XML décrivent les métadonnées applicatives, H-Logic exprime la logique conceptuelle et functionalP porte le comportement procédural lorsqu’une expression déclarative ne suffit pas. Ne pas déplacer une règle sémantique dans du code uniquement parce que du code est disponible.