Softanza
DémarrerEnglish
Softanza
Un paradigme

Naturel, et exécutable

Une phrase dans votre langue s'exécute, sans modèle d'IA, parce que chacun de ses mots est dans un dictionnaire que la bibliothèque possède. Ce que la bibliothèque ne connaît pas, elle le refuse, et dit pourquoi.

Un programme, trois langues

L'idée est la plus ancienne de Softanza : la pensée peut s'écrire en phrase, et la phrase peut s'exécuter. Voici un programme écrit comme un paragraphe anglais, exécuté tel quel. Un mot hors du dictionnaire n'est pas deviné ; la bibliothèque lit les mots qu'elle possède et agit sur eux.

Un programme écrit en phrases anglaises, exécuté tel quel : aucun modèle ne le lit, c'est le dictionnaire de la bibliothèque qui le lit.

Softanza
Naturally("
    Make a string with 'hello niger' inside
    Spacify it and uppercase it
    @Box it while the box@ is rounded
    Display it on the screen
    Thank you very much
")
Sortie
╭───────────────────────╮
│ H E L L O   N I G E R │
╰───────────────────────╯

exécuté le 2026-10-08 21:47 dans la bibliothèque au commit 4a184e6f0 ; tiré de base/test/natural/32_natural_code_in_english.ring(s'ouvre dans un nouvel onglet)

Le même programme en haoussa : les mots changent, les sens sont les mêmes entrées d'un seul dictionnaire.

Softanza
o1 = NaturallyIn("hausa", "
    Yi rubutu da dauke 'hello niger' a ciki
    Raba shi kuma maida shi
    @Akwati shi kuma wannan akwati@ dole zagaye
    Nuna shi a kan allo
    Na gode susai
")
Sortie
╭───────────────────────╮
│ H E L L O   N I G E R │
╰───────────────────────╯

exécuté le 2026-10-08 21:47 dans la bibliothèque au commit 4a184e6f0 ; tiré de base/test/natural/33_natural_code_in_hausa_latin_script_boko.ring(s'ouvre dans un nouvel onglet)

Français, arabe et turc, verbe en fin de phrase : chaque phrase s'exécute, et chacune redit, dans sa propre langue, ce qu'elle a compris.

Softanza
o1 = NaturallyIn("fr", "Crée une liste avec [ 5, 3, 5, 1 ] et enlève les doublons")
? @@( o1.Result() )
? o1.Understood()

o2 = NaturallyIn("ar", "أنشئ قائمة بـ [ 5, 3, 5 ] ثم أزل تكراراتها")
? @@( o2.Result() )
? o2.Understood()

o3 = NaturallyIn("tr", "[ 3, 1, 3 ] ile bir liste oluştur ve tekrarları kaldır")
? @@( o3.Result() )
Sortie
[ 5, 3, 1 ]
crée liste avec [ 5, 3, 5, 1 ] -> enlève les doublons
[ 5, 3 ]
أنشئ قائمة بـ [ 5, 3, 5 ] -> أزل التكرارات
[ 3, 1 ]

exécuté le 2026-10-08 21:47 dans la bibliothèque au commit 4a184e6f0 ; tiré de base/test/natural/multilingual_pack_narrated.ring(s'ouvre dans un nouvel onglet)

Le programme haoussa a d'autres mots et le même sens : chaque langue est un ensemble de mots rattachés aux mêmes entrées d'un seul dictionnaire, de sorte qu'une phrase dans n'importe laquelle aboutit à la même opération. Les phrases française et arabe ne traduisent pas l'anglais mot à mot, elles suivent leur propre grammaire, et la turque met son verbe à la fin. Chaque programme redit, dans sa langue, ce qu'il a compris.

Qui analyse

Il y a deux sens, et la différence est celle de qui fait la lecture.

La machine analyse

Naturally() prend un paragraphe. La bibliothèque le lit contre son dictionnaire et doit refuser ce dont elle ne peut prouver qu'elle l'a compris. L'ambiguïté est refusée à voix haute. Le public, ce sont les experts d'un domaine et les agents d'IA.

Le programmeur analyse

Une chaîne presque naturelle est du code qui se lit comme une phrase. L'humain est l'analyseur, et la chaîne est la phrase : une chaîne qui s'exécute sans se lire comme une phrase grammaticale est une erreur. Le public, ce sont les programmeurs.

L'autre sens : une chaîne qui se lit comme une phrase anglaise, où le programmeur est l'analyseur ; un nombre à qui l'on demande ses voyelles est refusé.

Softanza
# the other direction: the programmer is the parser, the chain is the sentence
? TheWordQ("niger").IsAQ([ :Lowercase, :Latin, :Word ]).WithQ().
	ALengthQ().OfQ(5).UnitQ(:Letters).AndQ().OnlyQ(2).VowelNB()

# a sentence that makes no sense is refused, not absorbed
bRefused = 0
try
    Q(5).VowelNB()
catch
    bRefused = 1
done
? bRefused
Sortie
1
1

exécuté le 2026-10-08 21:47 dans la bibliothèque au commit 4a184e6f0 ; tiré de base/test/natural/nnl_narrated.ring(s'ouvre dans un nouvel onglet)

Ce qu'elle ne connaît pas, elle le refuse

Un système qui répond à tout est un système dont on ne peut pas se fier à la réponse. La couche naturelle est un langage fermé : un mot qu'elle ne connaît pas est un littéral et jamais une supposition, un mot mal écrit est nommé avec le mot le plus proche qu'elle connaît, et un modèle de phrase dont un trou reste vide refuse de s'exécuter.

Ce qu'il ne comprend pas, il le dit : le mot mal écrit est nommé avec le mot le plus proche que tient le dictionnaire, et un mot inconnu ne se résout en rien.

Softanza
aLint = StzNaturalLintIn("fr", "Crée une chaine avec 'x' et majuscul la")
# understood entirely? no
? aLint[:understood]
# the word it does not know, and the nearest word it knows
? @@( aLint[:unresolved] )
# a word outside the dictionary means nothing, never a guess
? StzResolveSemanticInLang("fr", "zzqx") = ""
Sortie
0
[ [ "majuscul", "majuscule" ] ]
1

exécuté le 2026-10-08 21:47 dans la bibliothèque au commit 4a184e6f0 ; tiré de base/test/natural/multilingual_pack_narrated.ring(s'ouvre dans un nouvel onglet)

Une phrase à trous, plusieurs programmes ; et un trou laissé vide refuse de s'exécuter au lieu de deviner.

Softanza
cTmpl = "Create a list with {#1} and remove its duplicates"
? @@( NaturallyWith(cTmpl, [ [ 5, 3, 5 ] ]).Result() )
? @@( NaturallyWith(cTmpl, [ [ 9, 9, 4 ] ]).Result() )

# a hole left empty is refused: a template is a contract
bRefused = 0
try
    NaturallyWith("Create a string with {#1} and {#2} it", [ "x" ])
catch
    bRefused = 1
done
? bRefused
Sortie
[ 5, 3 ]
[ 9, 4 ]
1

exécuté le 2026-10-08 21:47 dans la bibliothèque au commit 4a184e6f0 ; tiré de base/test/natural/literate_templates_narrated.ring(s'ouvre dans un nouvel onglet)

La manière Softanza Une phrase dans votre langue s'exécute parce que chacun de ses mots est admis, et le refus vient avec sa raison. Le naturel est à la porte ; l'exécution se fait dans un langage fermé que l'on peut juger.

Les langues sont des données

Un paquet de langue est un bloc de données rattaché aux mêmes sens que l'anglais. Cinq paquets sont livrés : anglais, haoussa en écriture latine, français, arabe et turc. En ajouter un ne demande ni code ni chargement.

Une langue ajoutée pendant que le programme tourne, comme un bloc de données : pas de code, pas de chargement, et sa première phrase s'exécute.

Softanza
StzAddNaturalLanguage([
	:code = "sw",
	:name = "swahili",
	:script = "latin",
	:ignored_words = [ "na", "ya", "kwa", "hii" ],
	:semantic_mappings = [
		[:natural = "unda",   :semantic = "CREATE_OBJECT"],
		[:natural = "orodha", :semantic = "OBJECT_LIST"],
		[:natural = "na",     :semantic = "VALUE_INDICATOR"]
	],
	:phrases = [
		[:semantic = "METHOD_REMOVEDUPLICATES", :words = "ondoa nakala, futa nakala"]
	]
])
? StzHasLanguagePack("sw")
? @@( NaturallyIn("sw", "Unda orodha na [ 9, 4, 9 ] ondoa nakala").Result() )
Sortie
1
[ 9, 4 ]

exécuté le 2026-10-08 21:47 dans la bibliothèque au commit 4a184e6f0 ; tiré de base/test/natural/multilingual_pack_narrated.ring(s'ouvre dans un nouvel onglet)

Le haoussa en écriture ajami est nommé dans la bibliothèque et pas livré ; le zarma et le peul ne sont pas encore là. Ce sont les prochains paquets à écrire, et un paquet est une donnée.

Cinq faces

Déterminisme et souveraineté

La couche naturelle n'appelle aucun modèle d'IA et ne demande aucune clé, et la même phrase donne la même réponse n'importe quel jour. C'est la condition d'une banque ou d'un ministère, pas une option. Qu'aucune connexion réseau ne s'ouvre pendant une exécution naturelle n'est pas encore mesuré par un test dédié.

Responsabilité

Chaque phrase peut dire ce qu'elle a compris, ce qu'elle a refusé, et pourquoi. C'est ce qui la sépare du code généré par un modèle d'IA et d'un langage de commandes fixes.

Langues en données

Une langue est un bloc, ajouté à l'exécution. Un locuteur du haoussa ou de l'arabe écrit à la même bibliothèque qu'un locuteur de l'anglais.

Deux sens, une discipline

La machine qui analyse et l'humain qui analyse partagent un seul lexique : la grammaire des formes de fonction, lue comme un vocabulaire.

La porte de l'agent (conçu)

Un modèle d'IA peut proposer ; une grammaire fermée juge. Tenir un modèle d'IA à la grammaire du lexique, pour qu'il ne puisse produire que des phrases que la couche exécute, est conçu et pas construit.

D'où elle vient

  • 2020. La première diapositive du premier exposé donne la raison d'être : « exprimer la pensée dans un langage naturel exécutable ».
  • Le tournant. L'article de l'auteur sur la raison d'être de la couche naturelle pose la thèse : une phrase se modélise comme du code, sans traitement du langage et sans apprentissage automatique, à vitesse native, déterministe, le programmeur gardant la main.
  • Les trois âges. La couche a été construite en trois temps, chacun contre un mur : l'écart entre l'intention d'une personne et son exécution.
  • 2026-07-10. La revue de la bibliothèque a constaté que sur quinze exemples canoniques exécutés tels qu'écrits, quatre s'exécutaient comme les articles le disaient. La surface s'était dégradée parce qu'aucun test ne l'avait jamais verrouillée. Elle a été rénovée ce jour-là et elle est tenue depuis par des gardes-scénario.

Les trois articles qui la racontent sont publiés ici avec leur code exécuté : stzNatural, stzNatural face à l'ancienne bibliothèque naturelle et la programmation en langage presque naturel. Plusieurs de leurs blocs ne s'exécutent plus tels qu'écrits, et leurs pages le disent.

Limites

en construction Le vocabulaire est borné par les paquets, et chaque paquet couvre une partie de ce que la bibliothèque sait faire. Un programme est un objet par bloc. L'ambiguïté est refusée et pas résolue. La surface s'est dégradée une fois et elle est gardée maintenant, ce qui est une promesse sur l'avenir et pas sur le passé. Les blocs d'articles qui ne s'exécutent pas tels qu'écrits ne sont pas encore épinglés comme exemples.

Sources : les gardes-scénario multilingual_pack_narrated.ring(s'ouvre dans un nouvel onglet), nnl_narrated.ring(s'ouvre dans un nouvel onglet) et literate_templates_narrated.ring(s'ouvre dans un nouvel onglet) ; le code de la couche est dans base/natural(s'ouvre dans un nouvel onglet).