— le langage —

Langage VVL

Une syntaxe Lisp homoiconique. 775 builtins. Vingt opérateurs où le LLM devient un opérateur du langage, comme + ou ==. Le langage spécialement conçu pour piloter un serveur IA.

Testez VVL online Référence complète
— La règle d'or —

Tout est commande entre crochets

Une seule règle de syntaxe — [commande args…] — se décline partout : un calcul, une classe, un appel réseau, une requête LLM. Le code est une donnée : une liste s'évalue, ou se cite avec le backtick pour être manipulée comme un arbre syntaxique.

~ syntaxe fondamentale ~
# Prefix form [command args…] — eager evaluation, innermost first
[print [+ 1 2 3]]          # → 6

# Variables ($), assignment (=), sugared infix arithmetic (…)
$prix = 100
$ttc  = ($prix * 1.20)          # → 120.0

# Quasiquote (backtick) = literal data; unquote (,) injects a value
$n = 5
`[1 ,$n ,[+ 1 2]]            # → [1 5 3]

# String interpolation: ${ VVL expression }
$msg = "n*n = ${[* $n $n]}"     # → "n*n = 25"

# Dotted accessors, chainable
$s = "  42  "
$s.trim.int                     # → 42

# Lambda (params → $__name) + map / pmap (parallel)
$double = [lambda [x] [* $__x 2]]
[map $double `[1 2 3 4]]          # → [2 4 6 8]
[pmap $extract $documents]      # N LLM calls in parallel
— Le LLM n'est pas une API, c'est le langage —

Quatre rôles, zéro pipeline

Dans VVL, le modèle de langage n'est pas un service externe qu'on appelle : il acquiert un contrat d'interface stable, au même titre que + ou ==. Il endosse quatre rôles, sans aucun code de plomberie entre eux.

1 · opérateur

Opérateur [§ "…"]

L'opérande sémantique fait basculer le même dispatcheur du mode arithmétique au mode neuro-symbolique. Retour typé : booléen, chaîne ou concept.

 "chat"] ==  "félin"]   # → 1
 "voiture"] +  "électrique"]
# → electric car (concept)
2 · générateur

Générateur @

Une description produit une lambda VVL validée par le parser et exécutée en bac à sable (liste blanche de builtins). Le LLM réfléchit une fois, le code tourne N fois.

$fn = ($orders @  "total_amount > 1000"])
[filter $fn $orders]   # local lambda, 0 LLM
3 · objet

Objet [@ "nom"]

Un nom de concept se matérialise en objet formel (Zalta). Noyau de propriétés au bootstrap, découverte paresseuse ensuite, cache à trois niveaux → coût décroissant.

$soleil = [@ "Soleil"]
$soleil.masse_kg     # → 1.989e30
($soleil ~~ "Étoile")  # → ~0.95
4 · compilateur

Compilateur §§ / generic

§§ compile une question en français en programme VVL, l'exécute et rend le résultat. generic l'industrialise en keyword nommé, testé et persisté — réutilisable sur d'autres concepts.

[§§ "consommation BMW Série 3 diesel 2024 ?"] # → ~5.1

[generic "masse de @{Saturne} ?"]
[get-mass-kg-of-concept "Jupiter"] # reusable

Un seul modèle de langage, quatre rôles distincts, zéro pipeline d'intégration. C'est ce qui fait de VVL un langage neuro-symbolique — et non un wrapper d'API.

— Algèbre neuronale —

Les vingt opérateurs sémantiques

Activés par l'opérande [§ "…"], ce sont les mêmes opérateurs que sur les nombres — c'est le type de l'opérande qui les fait basculer. Quatre familles, plus @.

Famille Opérateurs Sortie Exemple → résultat
Comparaisons floues == != < > <= >= BOOLEAN [§ "chat"] == [§ "félin"] → 1
Algèbre conceptuelle + − * / % SEMANTIC / STRING [§ "Paris"] % [§ "pays"] → France
Logique sémantique && || ^^ ~ ? SEMANTIC / STRING $bio ? [§ "année de naissance ?"] → 1912
Appartenance (IS-A) in <| |> BOOLEAN [§ "voiture élec."] <| [§ "véhicule"] → 1
Génération de code @ LAMBDA $data @ [§ "filtrer par âge"] → lambda

Distinction fine : la projection / extrait une dimension déjà contenue dans la description ; la propriété % interroge la connaissance générale du LLM. Les résultats sémantiques se composent comme de l'arithmétique.

— Déterminisme —

Le coût de l'IA paie une fois

Comment un système probabiliste devient-il aussi fiable qu'un opérateur natif ? Par quatre garanties intégrées au moteur — pas laissées au développeur : (1) typage de sortie automatique (on ne parse jamais une chaîne), (2) cache déterministe persistant sur disque — même expression, même résultat dans toutes les sessions, coût API → 0 et tests reproductibles, (3) retry validé jusqu'à succès, (4) spécifications XML few-shot. Sans le typage il faudrait parser ; sans le cache la latence serait prohibitive ; sans le retry la moindre variation du modèle casserait le programme. C'est l'ensemble qui distingue VVL d'un simple wrapper.

— Le versant symbolique —

Du neuronal au raisonnement garanti

Le même langage embarque le versant symbolique : raisonnement déductif garanti, schémas typés et optimisation prouvée. Les concepts réifiés deviennent les opérandes de cette algèbre — c'est le pont neuro-symbolique.

Base Prolog

facts · rules · query

Une base de connaissances déductive intégrée. Les objets s'y injectent (obj-assert) ; les inférences sont garanties, pas approximées.

Système ontologique

ontology:*

Schémas typés, règles métier en cascade, et mondes possibles (fork d'ontologie) pour raisonner sous hypothèses.

Opérateurs Zalta

== ~~ · * ** · + ++ · / //

Huit opérateurs (4 opérations × 2 modes symbolique/hybride) : une véritable algèbre sur les concepts, gratuite une fois les propriétés chargées.

Relationnel miniKanren

run-all · predicate · ==

Des relations, pas des fonctions : une seule définition se résout dans tous les sens. Recherche complète par entrelacement, contraintes (distinct, CLP symbolique) et version probabiliste façon ProbLog.

Preuve & contrats

proof:auto · contract:verify

Un noyau tranche les propositions et répond proved, refuted ou unknown — jamais un « oui » plausible. Une fonction sous contrat voit require ⟹ ensure vérifié statiquement, sans l'exécuter.

Diagnostic bayésien

bfacts · diagnose

Chaque clause porte une croyance Beta, pas un booléen. Quand une observation contredit la base, le moteur calcule les conflits minimaux et classe les suspects par coût de révocation.

Solveur CP-SAT

OR-Tools · NL → modèle

VVL expose CP-SAT avec une syntaxe conceptuelle (décisions typées, contraintes dures et molles). Une intention en français devient un modèle à l'optimalité prouvée.

— Exécution —

Interprété, compilé, puis distribué

Le même code passe de l'interpréteur à une machine virtuelle native, puis à plusieurs machines — sans être réécrit. Ce qui décide n'est pas un réglage, mais une propriété vérifiable du code : sa pureté.

VM native

[compile] · .run · .coverage

Le code se compile vers une VM Rust et reste inspectable : représentation intermédiaire, bytecode, et surtout couverture — ce qui s'exécute nativement et ce qui repasse par l'hôte.

Compilation à chaud

[jit] · [vectorize]

Une lambda devenue chaude est compilée automatiquement après N appels. Le seuil se lit et se règle en une commande ; le tier vectorisant de map se bascule sans redémarrer.

Cluster de calcul

cluster:register · cluster:map

Une fonction fermée et pure est adressée par son SHA-256, puis exécutée en shards persistants sur plusieurs instances. Ce qui ne compile pas ne se distribue pas : le déterminisme est une condition, pas un espoir.

— Comparaison —

VVL face à Python + LangChain

CritèrePython + LangChainVVL
Le LLM comme opérateur du langageAppels d'API à parserNatif (20 opérateurs)
Pipeline extraction → enrichissement → décision~500 lignes~40 lignes
Code généré par LLM, validé et exécutableÀ valider soi-même@ : parser + sandbox + retry
Compilation NL → solveur de contraintesPas natifCP-SAT, optimalité prouvée
Cache sémantique persistant (coût → 0)À implémenterIntégré
Pont LLM ↔ Prolog ↔ objetTriple intégrationPremière classe
Mondes possibles (fork d'ontologie)Manuelontology:*

Un serveur IA unique, piloté par un langage dont le paradigme est conçu pour lui. C'est la différence entre intégrer l'IA et programmer avec elle.

❦ ❦ ❦