Claude Fable 5 s'avère trop couteux, or ces programmations qui sont pourtant assez savantes ne semblent pas nécessiter un niveau d'IA aussi élevé, le même travail peut être fait avec ChatGPT en choisissant le chat instantané pour un coût moindre, et probablement peut être fait de façon encore plus économique avec Kimi en choisissant le chat instantané.
Les langages algébriques multi-sortes sont la base des interpréteurs multilangages. Voir la la discussion avec ChatGPT. Néanmoins les expression avec nom d'opérateur, parenthèse et virgule correspondent à des schémas d'emboitement développés explicites et non à la notation la plus lisible par un humain. C'est là qu'intervient les syntaxes alternatives, prefixe, infixe, postfixe et delimite, qui nous permettra de configurer un véritable langage de programmation mutable.
Puis nous verrons comment introduire le mécanisme d'évaluation en comparant le langage algébrique et le langage alpha.
La première structure que nous dévoilerons à l'aide du multi-langage pur sera celle des entiers.
L'usage des chaines de caractères comme stockage de données constitue un compromis pertinent entre densité des données et lisibilité par un humain, qui même... la plus part du temps accentue la lisibilité en utilisant moins de parenthèses et de virgule. Le termes ne sert plus seulement d'instruction, il peut ainsi constituer une donnée pour un stockage suffisament dense. C'est pourquoi on s’intéresse à différentes syntaxe permettant de densifier le terme. Mais cela ne change pas l'arborescence des emboitements d'opérateurs. C'est un sucre syntaxique qui permet de condenser l'écriture, et qui va être utilisé davantage encore pour augmenter la lisibilité.
Dans un premier temps, comme la prudence nous invite à séparer les traitements, la syntaxe alternative est utilisé que pour l'entré et la sortie des termes, le terme est mémorisé en mémoire sous sa forme décompressée. Ce n'est qu'au moment de l'affichage qu'il applique la syntaxe alternative, et au moment de la saisie qu'il interprète la syntaxe altérnative pour mémoriser le terme décompressé.
Cette syntaxe alternative s'applique identiquement à tous les opérateurs de même nom cours. Cela permet plus facilement de lever les ambiguités lorsqu'un terme comprend des arguments de différents langages.
On ajoute dans le créateur Idioma un argument facultatif supplémentaire qui va indiquer les syntaxes alternatives pour chaque nom court d'opérateur concerné.
Voici les différentes syntaxes altérnatives :
Une gestion des priorités des opérateurs lève les ambiguités de la façon suivante :
Puis on ajoute une syntaxe alternative, la syntaxe délimite, pour les opérateurs d'arité variable. Cette syntaxe comprend un symbole de début et un symbole de fin non déjà utilisé ni utilisé comme nom d'opérateur dans un même langage. Exemple :
Idioma( "L=<a,b,f(...)>", "H=<c,d,f(...)>", syntaxes={ "f": ("delimite", "|", "">"), } )
Dans `L` nous avons `f(a,b,a,b) = |abab>`
Dans `H` nous avons `f(c,d,c,d) = |cdcd>`
1- Une autre syntaxe délimitée peut se différentier par seulement le délimiteur de début, le délimiteur de fin étant identique dans les deux syntaxes délimitées.
2- Juste une exception, le délimiteur de début peut correspondre au nom de l'opérateur. Exemple :
syntaxes={ "f": ("delimite", "f", ">"), "g": ("delimite", "g", ">") }
3- Juste une exception, le délimiteur de fin peut être le caractère blanc.
Le langage alpha est engendré par un unique opérateur `alpha` qui est à la fois d'arité `1` et `0`, et qui respecte les deux axiomes suivant :
Exemples de terme du langage alpha : `alpha`, `alpha(alpha)`, `alpha(alpha(alpha))`, `alpha(alpha)(alpha)`, `alpha(alpha)(alpha(alpha))`. Il convient de bien distinguer les parenthèses d'appel accolées à un terme jouant le rôle d'opérateur, des prenthèses de priorisation. Ici, il n'y a que des parenthèses d'appel.
C'est le langage utilisé pour exprimer un calcul, le terme est parcouru en profondeur d'abord et on commence par évaluer les feuilles, puis on évalue les noeuds dont tous les arguments ont été évalué, puis on fini par évaluer la racine du terme qui donne le résultat final du calcul.
Le langage alpha est identique à un magma monogène. On défini l'opérateur `"⁎(.,.)"` qui applique le premier terme sur son second terme. Et on le munit d'une syntaxe infixe. Ainsi nous avons :
`x(y) = x"*"y`
Le langage alpha est donc représenté par la structure de magma monogène suivante :
`L="<"alpha, "⁎"(".,.")">"`
Ainsi apparait deux notations, l'écriture classique est celle de l'aglèbre, et l'écriture dynamique est celle du langage alpha :
Notation classique
Algèbre libre Notation dynamique
Langage alpha `x"⁎"y` `=` `x(y)` `x"⁎"(y"⁎"z)` `=` `x(y(z))` `(x"⁎"y)"⁎"z` `=` `x(y)(z)`
On peut associer à chaque élément `a "∈" L`, l'application `(x|->a"⁎"x) in (L "→" L)`, de telle sorte que la notation dynamique `a(y) = a"⁎"y` puisse être ajouter au magma `L` sans rien modifier de la structure.
C'est le langage alpha d'arité variable. C'est le langage engendré par un unique opérateur `alpha` qui est d'arité variable, et qui respecte les deux axiomes suivants :
Le langage alpha multi-aire est plus compliqué à définir classiquement. Il nécessite de concevoir l'ensemble des séquences non vide de termes, où les séquences singleton sont identifiés au termes.
On défini l'opérateur `varphi(".,.")` qui applique son premier argument qui est un terme, sur son second terme qui est une séquence de termes. Et on défini l'opérateur de concaténation de séquences ou de termes, `µ(".,.")` que l'on munie d'une syntaxe infixe. Ainsi nous avons :
`L = "<" alpha, varphi(L,S) ">"`
`S = "<"L, µ(S,S) ">"`
Et la structure `S` obéit à l'axiome suivant `xµ(yµz)=(xµy)µz` qu'est l'associativité de `µ`, et qui fait de la structure `S` un semi-groupe.
Si on veut pouvoir appliquer un terme sur une liste vide de termes alors il faut ajouter à `S` un nouvel élément générateur qu'est la séquence vide `ø` et l'axiome `øµt=tµø=t` qu'est l'élément neutre `ø`, et qui fait de la structure `S` `=` `"<"ø, L, µ(S,S) ">"`un monoïde.
Chaque opérateur `a,f("."),g(".,.")` est en faite une application respectivement nullaire, unaire, binaire, vers l'ensemble des termes, car les opérateurs sont internes. L'évaluation du terme consiste à appliquer la racine du terme sur ses arguments sans préalablement les évaluer, et d'en retrouner l'image. Lorsque l'opérateur racine n'a pas de définition, cela consiste à retourner le terme constituant l'appel. Autrement dit, les définitions par défaut sont :
`a = (|->a)`
`f = (x|->f(x))`
`g = ((x,y)|->g(x,y))`
Exemple de définition :
`g = ((x,y)|->g(f(y),f(x))`
On définie un premier opérateur spécial, qui est unaire et de syntaxe prefixe qui force l'évaluation du terme sur lequel il est appliqué. Par exemple :
`§g(x,y) = varphi(g, (x,y))`
Voici l'outils fait par ChatGPT : automates_langages_multisortes.py
---- 31 juillet 2026 ----