Les logiques : notes en vrac

Auteur Message
Définitions intéressantes à rapporter, parce que assez pertinentes et « universelles ».

Sème (cnrtl.fr)
CNRTL a écrit : 
Unité minimale de signification, trait sémantique pertinent dans l'analyse du sens d'un mot. Soit l'exemple du lexème fauteuil. Les sèmes pertinents sont: « destiné à ce qu'on s'y assoie », « avec dossier », « pour une personne », « avec bras », « sur pied(s) » (B. Pottierds Trav. Ling. Litt. Strasbourgt. 2 n o1 1963, p. 14).L'unité sémantique de base est le sème, élément de signification minimal, qui n'apparaîtra comme tel qu'en relation avec un autre élément qui n'est pas lui: il n'a de fonction que différentielle et, de ce fait ne peut être saisi que dans un ensemble organique, dans le cadre d'une structure (J. Courtés, Introd. à la sémiot. narrative et discursive, 1976, p. 46).

Dans l’onglet étymologie :
CNRTL a écrit : 
Étymol. et Hist. a) 1822 « unité de signification » (Champollion, Ms. lu devant l'Ac. des Inscriptions cité ds Arch. St. n. Spr., t. 205, p. 371: Nous avons nommé sème toute combinaison de plusieurs signes simples pour exprimer une idée), attest. isolée; b) 1963 ling. (B. Pottier, Rech. sur l'analyse sém. en ling. et trad. méc., p. 8: le trait sémantique pertinent est le sème). Autonomisation de l'élém. sem- du gr. σ η μ ε ι ̃ ο ν « signe » d'apr. morphème*, phonème*; l'angl. seme est att. dès 1906 chez Charles Sanders Peirce (v. NED Suppl.2).


Le mot Anglais correspondant est seme. Cependant, avec un changement de langue, vient souvent un changement de culture, est le sens des mots peut subtilement varier, même si les échanges font qu’ils peuvent s’accorder ici et là.

Seme (merriam-webster.com)
Merriam Webster a écrit : 
1 : a linguistic sign
2 : any of the basic components of the meaning of a morpheme


La première définition y voit un signe linguistique, mais dire de quel aspect linguistique : représentation ou signification ? Décomposable ou non‑décomposable ? Dans la seconde définition, le morphème est mentionné et c’est justement une définition intéressante aussi à noter, surtout qu’elle se rapporte à l’idée de signe.

Morphème (cnrtl.fr)
CNRTL a écrit : 
1. Signe minimal de nature grammaticale. […]
2. [P. oppos. à phonème] Unité minimale de signification. Morphème lexical, grammatical; classe de morphèmes. Un morphème peut être défini comme une séquence de phonèmes, un mot une séquence de morphèmes, une phrase une séquence de mots, et un discours une séquence de phrases


Tantôt le morphème veut dire le signe, tantôt il veut dire le sens. Cependant, on peut noter que le morphe de morphème fait penser au morphe de amorphe et que alors il s’agit plus de forme que de sens et qu’il y a peut‑être une confusion courante parce que facile, entre le sens et ce qui le représente.

L’onglet étymologie dit :
CNRTL a écrit : 
«élément de formation apportant l'aspect grammatical à un élément de signification» (Vendryes, Langage, p.86). II. 1952 «plus petite unité de signification d'un énoncé» (Cantineau ds Cahiers Ferdinand de Saussure, no10, p.12). Formé sur le gr. μ ο ρ φ η ́ «forme» d'apr. phonème*. Au sens II, empr. à l'anglo-amér. morpheme, terme att. en angl. comme terme de ling. dep. 1896 et dont l'usage s'est répandu à la suite de son emploi par le linguiste amér. L. Bloomfield (Language, 1926, II, 155 ds NED Suppl.2).

Même si l’intention de dire le sens apparaît, l’intention de dire la forme, se démarque bien. Et on peut comprendre la confusion entre la forme prêtée au sens et le sens, sans vouloir s’y arrêter.

Morpheme (merriam-webster.com)
Merriam Webster a écrit : 
a distinctive collocation of phonemes (such as the free form pin or the bound form -s of pins) having no smaller meaningful parts

Cette fois, on est que dans la forme et plus dans le sens, même si la forme est étonnamment réduite à la forme sonore. La définition de seme mentionnait morpheme, mais la définition de morpheme, ne mentionne pas seme. On voit apparaître l’idée de meaningful parts. Ça fait se demander s’il n’y aurait pas une confusion entre sens et significatif, c’est à dire qui se distingue, mais sans précision du sens, seulement que c’est nécessaire pour connaître le sens.

En tout cas, morphème semble plus vouloir dire un élément de la forme (pas nécessaire écrite) et sème, un élément du sens.

L’écriture prenant beaucoup de place, au sens de importance, un autre mot maintenant.

Lexème (cnrtl.fr)
CNRTL a écrit : 
LING. Unité minimale de signification appartenant au lexique.

Mais l’onglet sur l’étymologie dit ça :
CNRTL a écrit : 
Étymol. et Hist. 1950 (J. Cantineau, c.r. de E. A. Nida, Morphology, the descriptive analysis of words ds B. Soc. Ling. t. 46, 2, p. 41 : si l'on répugne à employer le terme de « sémantème » qui fait trop penser à la « signification », on pourrait adopter celui de lexème, proposé par le regretté Gilbert Boris). Dér. de lex-, tiré de lexique*; suff. -ème d'apr. morphème, phonème, sémantème, etc. Att. en angl. lexeme (1940 ds NED Suppl.2).

On voit une volonté de distinguer le lexème d’unité de sens. Ça peut s’expliquer si on pense à une possible confusion entre sens et significatif et dans significatif, il y a signe, c’est ce que je veux souligner.

Qu’en disent nos ami‑es Anglophone internationaux ?

Lexeme (merriam-webster.com)
Merriam Webster a écrit : 
a meaningful linguistic unit that is an item in the vocabulary of a language

On retrouve l’ambivalent meaningful qui peut autant vouloir évoquer le sens que de la pertinence.

En espérant ne pas dire de bourde, on peut dire que le sème veut dire le sens, l’idée, tandis que le morphème et le lexème veulent dire la représentation. Reste à comprendre la distinction entre morphème et lexème. Morphème évoque la forme, lexème évoque le lexique, c’est à dire ce qui est inventorié. Peut‑être est‑ce une différence entre les deux ? Dans ce cas, morphème est plus général que lexème.

Il y a encore à dire au delà de ces définition. Une phrase d’une définition, est soulignée :
« un morphème peut être défini comme une séquence de phonèmes, un mot une séquence de morphèmes, une phrase une séquence de mots, et un discours une séquence de phrases ». Cette distinction entre les niveaux de regroupement, existe dans les langages humains, mais moins dans les langages créé pour aider à comprendre, analyser, dériver, etc. Dans le langage de ce sujet, il n’y a pas de distinction entre les degré de regroupement que peuvent former les termes. La distinctions entre requêtes, règles et termes, est différente : le langage le peut pas produire de requête ou de règle, seulement des termes, les règles, les requêtes et les termes initiaux abstraits, sont écrits par un humain, pas des produits de ce langage. Il n’y a rien dans ce langage qui corresponde à la différence entre mot, phrase, chapitre, discours, etc, tout est représenté par des conjonctions de termes, sans les distinguer par degrés de regroupement ou quelque chose du genre.

Peut‑être qu’un terme pourrait être dit un morphème. Mais on a vu que un terme a un sens potentiel, pas encore un sens, que c’est un terme avec ses variables liées dans un contexte, en conjonction avec d’autres termes, qui fait son sens. Peut‑être qu’un terme en contexte, pourrait être appelé un sème. Aussi, un sens peut être plus ou moins figée. Si un terme contient encore des variables libres, il peut toujours être précisé, même s’il a déjà été assez précisé pour avoir du sens, par exemple en vérifiant une requête. Et même s’il n’a plus ou pas de variations possibles, il peut encore répondre à d’autres requêtes que celles qu’il a déjà confirmé. C’est pour dire que même si on peut distinguer un terme comme un morphème et un terme dans un contexte, implicitement en conjonction avec d’autres (cas le plus courant), peut être appelé un sème, ça ne va pas plus loin, parce que allant plus loin, on a toujours un sème. Il n’y a que la différence entre un terme hors contexte et un terme en contexte, qui est vraiment pertinente. Au delà, est on dans l’ajout progressif de sens et seulement quand c’est nécessaire. Bref, en résumé, il n’y a rien qui ressemble à une phrase ou à une succession de phrases, excepté si on l’a défini comme étant une phrase ou une succession de phrases.

Sans s’aventurer dans une description des conséquences, qui pourraient concerner la rêverie et la philosophie, un fait est que dans le langage de ce sujet, il n’y a pas de limite au nombre de signes possibles, qu’il peut y avoir autant de signes que de sens à porter/se souvenir/transmettre, autant touffus, complexes et intriqués soient‑ils. On peut même dire que le sens de tout un discours, est représentable par un gigantesques signes, un signe qui est apparu à la suite de dérivations et de compositions à partir de signes plus petits, en conjonction avec tous les termes qui sont apparus avec lui en chemin.

Une dernière petite question : quel nom donner au plus petits signes de ce langage ? Le terme le plus proche semble être unité lexicale et le trait lexicale est approprié, parce qu’ils sont répertoriés. En tous cas pas un lexème, dans l’usage semble être constitué d’unité lexicales, justement, alors il serait difficile de les appeler des lexèmes dans créer de confusion. Les constantes pourraient être considérées comme composées d’unité lexicales que sont les lettres et autres glyphes, autant que pour mieux s’accorder avec le langage courant, on pourrait les voir comme des lexème non‑répertoriés exhaustivement, si ce n’est pas une définition inductive. Mais cette différence n’est pas très importante. Une autre qui l’est plus, et qu’il n’existe pas de mot unique pour dire unité lexicale, alors que dans ce langage, ce mot pourrait être créé ; comme un symbole ou un terme, selon ce qui serait le plus commode.


Par bonheur, les trois mots abordés s’écrivent à l’identique en français et en Anglais, si on fait abstraction des accents, et ils ont tous un pluriel régulier en Anglais et en français. Ça aurait put être pire …

Cette longue parenthèse n’était pas prévue.
Si cette phrase est vraie alors cette phrase est vraie.
— Le « paradoxe » de l’ingénu‑e
Édit du 2026-02-19 : ce message n’est pas faux, il est cohérent, mais il n’est pas sans laisser des questions, qui sont abordées dans un message plus loin.

Long retour sur une idée proposée il y a quatre ans ou un peu plus : une résolution peut être effectuée sous l’hypothèse qu’elle sera vérifiée ; ce qui n’empêchera pas la résolution de se conclure par une impossibilité s’il s’avère qu’une contradiction est rencontrée.

En pratique, ça signifie que quand on commence à vérifier une règle, on se souvient du terme qu’on est en train de vérifier, et si on le rencontre en chemin, on passe en se disant qu’on connaîtra la réponse plus tard en continuant, sûrement pas en tournant en rond à l’infini.

Une image imaginaire qui pourrait être réelle, serait par exemple avant un départ en vacances longue durée, plusieurs gens sont en cours de la vérification qu’iels n’ont rien oublié d’important avant de partir, comme éteindre toute les lumières, débrancher tous les appareils, couper le gaz, l’eau, la réserve du distributeur de croquettes des chats du quartier, etc. Pendant l’inspection, quelqu’un dit, « on doit vérifier qu’on a rien oublié avant de partir » et quelqu’un d’autre répond, « justement, c’est ce qu’on est en train de faire, on verra bien », et tout le monde continu. L’histoire ne dit pas qu’une Chamallows avait été oublié sur la table … il sera peut‑être pour la petite souris de la maison.

Ça semble sensé, mais pourtant en mettant cette idée en œuvre, une question est soudain surgit comme un clown sur ressort sortant d’une boite. Ça surprend … Ce qui suit présente des justifications pour quand‑même garder cette idée, qui est même généralisée pour dire qu’un terme peut être résolue par le constat qu’un terme équivalent a déjà été résolu. C’est le moment de souligner que deux variables libres indépendantes, sont unifiables, mais pas équivalentes, qu’elles ne deviennent équivalentes qu’après leur unification, c’est à dire pour deux variables libres, l’établissement d’une liaison entre elles.

Quand on a une règle comme celle‑ci :
a : a.

On pourrait se demander pourquoi poser cette règle alors que « a. » irait autant bien. Mais en même temps, on se demande qu’est‑ce qui pourrait l’empêcher d’être vérifiée, puisque rien dans la récursion infinie qui créerait, rien ne serait jamais rencontré pouvant aboutir à une contradiction. Le cas peut faire penser à celui des termes cyclique, mais avec une différence. Pendant l’unification, on vérifie des correspondances en comparant des constantes, des structures et en faisant des liaisons entre des variables. Chaque étape qui réussit, peut être considérée comme vraie et on s’arrête dès qu’une étape ne réussit pas. Une conjonction infinie de vraie est considérée comme réductible à vraie (ce qui semble moins étrange que pouvoir conclure le faux d’une conjonction infinie de vraie). Pendant la vérification d’une règle, on fait des unifications et on arrête si l’une d’elles ne peut pas se faire. Au lieu de suivre des variables, on suit des règles et c’est là que vient la différence qui sera dite plus loin. Excepté pour le détail distinctif pour lequel il y aura des arguments, quand on suit la définition, on pose les termes de la définition instanciées et on vérifie chacun de ces termes ; ainsi, récursivement. Si on retrouve un terme équivalent et qu’on le développe en une série de termes qui ne pourront que être équivalents à ceux du précédent développement, on va toujours retrouver une série équivalente et si cette série n’échoue pas, elle n’échouera pas plus à tous les cycles suivant, même jusqu’à l’infini. On peut alors tenter de conclure que, comme avec les termes cycliques, la conclusion après un cycle, est celle à la fin du cycle, c’est à dire vraie, parce que si une unification impossible avait été rencontrée, on ne serait même pas arrivé à la fin d’un cycle.

Le problème avec les cycles infinis dans les définitions, c’est qu’ils peuvent rendre une définition sensible à l’ordre des termes (au moins pour la méthode de résolution automatique classique), qui est sensée ne rien changé à son sens.

Par exemple avec la règle :

a : a & b.

S b n’existe pas, la règle peut ou doit échouer, selon les points de vue. Mais telle‑quelle, en la résolvant selon la méthode classique, de gauche à droite, elle entre dans une boucle infinie. Si on la pose ainsi :

a : b & a.

… on ne parvient pas à vérifier b, faute de règle correspondante, la résolution échoue et on entre même pas dans la boucle infinie. Avec la proposition sémantique faite dans ce message, le résultat est le même, mais pour la première version de la règle, quand on commence à la vérifier (disons quand on est après les deux points, « : »), on note qu’on est en train de vérifier « a », on poursuit, on rencontre « a », on passe et on continue selon le principe empirique narré plus haut. On rencontre b, qui ne peut pas être vérifié, et la vérification de « a » échoue aussi, sans entrer dans une boucle infinie ; l’ordre des termes n’a plus d’importance, même techniquement (ça n’exclut pas pour autant, les autres causes possibles de récursions infinies).

Ce principe permet donc de mieux garantir en pratique, la non‑importance de l’ordre des termes. Et la vérification sous la supposition que si elle doit réussir, elle réussira, n’empêche pas de constater qu’on ne peut pas la réussir si on ne le peut pas ; c’est comme avec l’unification.

Mais il y a une différence en comparaison de l’unification. Pendant l’unification, il n’y a qu’un seul choix possible à chaque étape. Pour résoudre une règle, on peut avoir plusieurs choix, si plusieurs alternatives existe. Ce qui est dit plus haut est sans défaut dans le cas d’une règle avec une seule alternative seulement. Supposer qu’un terme vérifié permet de conclure qu’est aussi vérifier un terme équivalent, équivaut à fixer pour le second terme, équivalent, le même choix de la règle que pendant la vérification du premier terme.

En effet, ça semble arbitraire. Pourtant, une autre question vient. Si on a ces règles :

(a X).
(a c).
(b X) : (a X) & (a X).

Remarque : la seconde règle est équivalente à « (a X) : (eq X c). »

… on peut, pour la second terme, faire un choix différent de avec le premier terme. Mais une tourmente peut alors nous saisir : comment deux termes textuellement identiques pourrait‑ils ne pas être équivalents, quand on sait que deux termes pourtant textuellement différents, peuvent être équivalents ? Plusieurs compréhensions des termes à différentes étapes de l’interprétation, se retrouve, alors elles abordées à la suite.

Que doit‑on comprendre en lisant « (a X) & (a X) » ? La conjonction d’un terme avec lui même ou un processus techniques ? C’est comme s’il y avait une incompatibilité entre l’interprétation symbolique et l’interprétation physiques. Ors, ce langage a été parfois pensée depuis le début, en invoquant la physique comme sentinelle, quand il fallait se faire une idée de la pertinence de plusieurs choix différents, pour garantir sa pertinence en pratique alors théorique aussi.

Si par exemple le langage est utilisé pour modéliser un processus technique, un mécanisme comme on en fabriquerait un dans un atelier, faire le choix proposé, risque‑t‑il de faire perdre de la pertinence à ce langage en l’empêchant de représenter des choses telles qu’elles seraient ? Dans le même temps, ce langage a aussi été pensée pour être simple (autant que possible) et lisible. Et en voyant « (a X) & (a X) », il est compréhensible de le comprendre comme équivalent à (a X), ce à quoi aboutirait justement ce qui est proposé. En même temps, quand on vérifie la règle, que le premier terme a été résolu et pas encore le second, peut‑on considérer le second comme équivalent ?

Techniquement, si on confond la mise en œuvre informatique et la sémantique, on pourrait dire que non, ce n’est pas la même chose. Mais si on préfère que ce soit la sémantique qui dit à la mise en œuvre ce qu’elle doit faire et pas le contraire, il faut un argument plus sémantique.

Symboliquement, la variable X est équivalente à la variable X, qu’elle apparaisse dans le premier ou le second terme, et ceci, même quand le second terme n’a pas encore été vérifié. Le reste du terme est identique dans ce qu’il a de constant, ici, son schéma et en effet, les deux termes sont textuellement identiques. Deux schémas identiques dans lesquels on met la même variable équivalente à elle même, au même endroit pour les deux termes, deviendraient par cela, deux termes différents ? Ça inspire de chercher où se cache la divergence qui vient soudainement de nul‑part, comme si soudainement on ne parlait plus de deux mêmes choses.

Physiquement, à quoi pourrait‑on comparer ces deux termes ? Peut‑être à un seau, qu’on peut remplir ? Pour résoudre ce terme, il y a deux règles, l’une qui laisse la variable libre, disons le seau vide, et l’autre qui remplit le seau d’eau, ce qui est irréversible, une interprétation qu’on pourrait donner à c. Le terme est un seau et X est son contenu. On a deux possibilité pour le seau, soit il est vide, soit il est rempli d’eau. Si on le pose d’abord vide, on peut le remplir, et si à la deuxième occurrence on veut y verser du vide, ça ne fera pas un seau vide, puisqu’il a été rempli. Ça ne fonctionnera pas. Si on le pose rempli et qu’on l’envisage rempli la seconde fois aussi, ça marche, il n’y a pas de contradiction.

C’est comme si par « (a X) & (a X) » on voulait tester la capacité de la règle (a X), à être en accord avec elle‑même.

Voir les deux termes pris individuellement, est temporaire, parce que la vérification d’une règle doit être celle de la conjonction de tous ses termes, et alors il faudra bien que les deux termes se mettent d’accord et finissent pas représenter la même chose. D’abord, on ne peut pas les lire comme représentant la même chose, mais au final, il doivent représenter la même chose et c’est la signification qu’on leur prête. Ne serait‑il pas plus simple de les considérer dès la début, comme représentant la même chose ? Est‑ce que cela ferait une différence ?

Remarque : la question mélange interprétation et processus, ce qui peut sembler être une question interne à une mise en œuvre, mais pourtant, ce type de processus peut concerner les humains aussi, comme quand on pose une addition sur une page au crayon à papier.

La réponse est dans la capacité des deux termes à s’accorder. Quand on résous A & B, on résous A, qui donne un contexte dans lequel on résoudra B. On peut le faire dans l’ordre qu’on veut, si on résous d’abord B, on a un contexte dans lequel on résous A et le résultat est une solution qui satisfait B et A en même temps. Ça peut d’ailleurs justifier que (a Ax) et « (a X) & (a X) » ne soit pas la même chose, parce que après avoir résolu le premier, on a un contexte égale ou plus exigeant que le précédent dans lequel on a fait la résolution et c’est dans ce second contexte qu’on va résoudre la seconde occurrence de textuellement le même terme. Si le second terme peut être résolu, c’est que le premier porte une solution assez ouverte, avec assez de variables libres, ou que le second terme porte la même solution que le premier. Si le second terme opte pour la même solution, il y aura convergence ; s’il opte pour une solution plus précise, si elle trouve sa place dans le contexte laissé par la première solution, pourquoi pas. Si par exemple pour le premier terme, a été choisi sa solution la plus restrictive, il n’y aura pas d’autre choix pour le second terme, que de prendre la même solution. On peut pressentir que rien n’empêche la version à un seul terme, de donner les mêmes solutions que la version à deux termes. En fait, oui et non. Les deux peuvent lister les mêmes solutions, mais répétées. L’idée que puissent être listées des solutions plus variées, reste à prouver, mais elles ne pourrait trouver leur place que dans une solution assez tolérante du premier terme tout‑seul et alors sa solution couvre des autres solutions aussi. C’est évident, puisqu’il doivent s’accorder, ou alors la conjonction n’est pas vérifiée.

Deux exemples pratiques parleront mieux. D’abord l’ensemble de règles déjà présenté :

#1 (a X).
#2 (a c).
#3 (b X) : (a X) & (a X).

Remarque : les #n sont des étiquettes pour se référer au règles plus brièvement.

Avec une version du langage sans la proposition discutée, la requête « (b X) ? » liste ces solutions, en indiquant les règles appliquées :

#3 #1 #1: X = Any (X est une variable libre)
#3 #1 #2: X = c
#3 #2 #1: X = c
#3 #2 #2: X = c

Rappel : Any n’est pas égale à Any, le Any de chaque variable libre est considéré différent, ce qui ne les empêche pas de pouvoir être liées par la suite, et de partager un même Any.

Il y en a quatre, pas plus et trois sur les quatre sont identiques, même si les chemins qui y mènent, ne sont pas les mêmes.

Avec une version du langage incluant l’interprétation discutée, la même requête liste ces solutions :

#3 #1 T#2: X = Any
#3 #2 T#2: X = c

Il n’y a plus que deux solutions. Les T#n représente la validation par un terme déjà validé, ce qui est discuté dans ce message. T#2 signifie, le second terme validé pendant le processus, il est équivalent à celui qu’on veut valider et le valide donc.

En y pensant, on pourrait se demander s’ils pourraient exister des cas où la liste des solutions ferait découvrir des combinaison plus variées, n’existant pas littéralement dans le texte des règles. Cette possibilité reste à prouver. Mais, et c’est mécaniquement fondé, la version avec la sémantique proposée dans ce message, ne peut que lister les cas plus libres autant que les cas les plus contraignants, ces cas seront aussi listés par la version sans cette sémantique, par exemple quand le choix pour les deux termes et le même. En dehors de ces cas, elle ne pourrait lister que des les hypothétiques cas intermédiaires dont la possibilité n’est pas certaines, mais qui, s’ils existaient, qui trouveraient nécessairement leur place dans ce qui est listée par le langage avec la nouvelle sémantique, simplement parce que les deux termes ne peuvent pas faire autrement que de s’accorder, ou alors toute la résolution de la règle échoue et il n’y a plus du tout de solution pour aucun des deux termes.

Si les termes représentent des choses dans un environnement, un système quelconque et que la conjonction représente comment ils peuvent trouver un état collectif stable entre eux, par exemple, alors la version avec la nouvelle sémantique, listera les solutions laissant la place à ces autres solutions plus particulières (si elles sont vraiment possibles).

Finalement, la version avec la nouvelle sémantique semble n’avoir que des avantage et celle sans la nouvelle sémantique, ne faire qu’exposer des artefacts. Elle est techniquement plus coûteuse, mais sémantiquement plus intuitive et confortable, ne serait que pour sa capacité à reconnaître comme valide des règles qui n’ont aucune raison de ne pas l’être (ce n’est pas parce que écrire 0123 au lieu de 123 est étrange que 0123 n’est pas équivalent à 123), excepté pour des mises en œuvres particulières. De plus, un cas où une règle en viendrait à se référer à elle‑même, pourrait survenir après la résolution d’un de ses termes, qui ne n’apparaît facilement à la lecture. Le confort sémantique est plus important. Même si ça pouvait avoir un coût, par exemple en terme de mémoire, avec des vraies choses complexes, il est prévu de donner au langage, une forme de modularité qui lui permettra de faire les choses par petits bouts et ensuite de combiner ces petits bouts, toujours sous la forme de petits bouts et ainsi de suite. Mais ça, c’est pour un avenir à une date indéterminée et ça ne sera pas discuté ici, parce que certains choix sont plus difficiles à justifier avec assez d’arguments convaincants, quand ça concerne des choix similaire à l’esthétique ou autre. Mais ce sera rapidement présenté quand‑même en reparlant d’une question déjà discutée, comme il s’agira de résoudre une question pratique qu’on peut rencontrer même avec le langage courant, le cas où il n’y a pas assez de mots lisibles pour tout représenter et où on doit choisir un même mot pour représenter des choses différentes. La modularité peut aider dans un cas comme ça, alors ce sera présenté.
Les messages des jours précédents sont laissés (y compris les deux précédents, supprimés par prudence, puis finalement repostés). Il est apparu un mystère à éclaircir …
Les questionnements précédemment annoncés …

D’abord, il y a deux choses qui semblent avoir été abordées sans assez les distinguer. Le cas d’une conjonction de termes identiques mais pas nécessairement récursifs et le cas des règles qui se réfèrent à elle‑même.

Le cas d’une conjonction de termes, ne semble pas poser de questions, même si on peut discuter la question de savoir si on préfère le comportement de l’une ou de l’autre sémantique à la résolution, par exemple si on considère qu’il est pertinent qu’une telle conjonction liste en effet des solutions dupliquées, si on peut faire une lecture de ce fait.

Pour le cas d’une règle se référant à elle‑même, a été mentionné que la résolution d’un terme suppose le choix d’une règle et que ce choix peut être variable. En effet, ça change tout, … mais finalement pas tellement.

Un exemple :

(a X) : (a X).
(a c).

(a B) ?

Remarque en longue parenthèse : ce n’est pas une erreur d’écrire (a B) au lieu de (a X) pour la requête, même si c’est souvent le choix par défaut ici. Les variables dans les règles, sont locales aux règles, et même locale à chaque règle. C’est quand par exemple la première règle est instanciée, que l’instance de sa variable X, qui aura d’ailleurs un autre nom, unique, sera créée. Ensuite, le signifiant instanciée sera unifiée avec (a B) et cette variable sera liée à B, si bien que la signifiant instancié représentera le terme de la requête et à la place du X dans la règle, il y aura une variable liée à B, et aura donc le même contenu, si B en a un, ou sera libre liée à B, sinon. Et dans ce dernier cas, si cette variable dans la règle est liée à un contenu, alors B sera lié aussi à ce contenu.

Bref, après cette longue parenthèse, on se souvient qu’on en était là :

#1 (a X) : (a X).
#2 (a c).
(a B) ?

Si pour résoudre (A B), on choisi la règle #1, on va rencontré un terme qui sera équivalent, écrit (a X) dans la règle. Si on fait à nouveau le même choix à ce moment là, qu’on choisi encore le règle #1, ce sera reparti pour le même tour et etc. C’est ce qu’il se passe avec une résolution automatique. Mais un humain ou une procédure plus élaboré, peut faire un autre choix et après avoir choisi la règle #1 pour résoudre (a B), pourrait décider de choisir la règle #2 pour (a X), de s’être aperçu que sinon ça allait tourner en rond. Et la requête est résolue, avec B = c.

Alors cette requête infinie ne l’est pas toujours, finalement. Non, pas toujours, et c’est justement parce qu’il existe un second choix possible et ce choix aurait put être fait dès le début, puisque la solution sera finalement la même qu’en ayant choisi la règle #2 pour (a B). Mais sans la sémantique proposée, on ne peut jamais obtenir la solution (a B) avec B restant libre, qu’on obtiendrait en choisissant toujours #1 pour (a X). Quand on choisi #2 pour (a X), est on dans le même cas qu’avec une conjonction (b C) & (b C) en imaginant que ces termes ne représentent pas des règles récursives. On a vu que la solution de la conjonction ne peut que être un accord entre les deux, et que l’ensemble des cas possibles, peut être obtenu avec (b C) tout‑seul. C’est la même chose avec (a X), ça se réduit à une conjonction, mais une conjonction infinie, cette fois. Alors (a X) & (a X) peu avoir X = c comme solution, qu’on retrouve comme B = c avec la requête, mais avec la requête sans la sémantique proposée précédemment, on ne peut jamais obtenir la solution B = Any. On peu au moins dire que la logique du langage est plus complète, avec cette sémantique (sa cohérence est une préoccupation aussi).

En résumé, le cas de la récursion n’a pas vraiment été oublié, il se résume à la même chose que le cas de la conjonction. Mais avec la récursion, il faut faire attention à poser le terme comme résolu (en fait, comme une hypothèse qui sera résolue plus tard), ni trop tôt, ni trop tard. Le poser avant de commencer à résoudre par la règle, ce serait trop tôt, parce dans ce cas n’importe quel terme se résoudrait sans jamais vérifier de règle et le poser trop tard, n’empêcherait pas d’entrer dans une récursion infinie. Mais c’est intéressant même sans récursion, pour prendre des raccourcis, et quand c’est un humain qui doit vérifier quelque chose, ces raccourcis sont précieux. Ce principe repose sur celui de vérifier un terme par le seul fait qu’il est équivalent à un terme déjà vérifié, ce qui est une possibilité, pas une obligation.

Comme on peut déceler la récursion, une idée pourrait être de l’interpréter comme un échec. La détection de cette récursion ne pourrait pas se reposer sur seulement la présence d’une terme équivalent dans des termes en cours de résolution, sinon ça empêcherait d’opter pour une autre solution. En tout cas, interpréter la récursion infinie comme un échec, ne semble pas pouvoir aboutir à une contradiction, même en jouant avec des permutations de termes et des manière se faire se désigner des règles entre elles. La seule différence semble être que l’interprétation proposée vérifie des solutions qui ne peuvent pas l’être autrement et cette interprétation est cohérente aussi. L’interprétation proposée me semble même plus évidemment non‑contradictoire que l’autre, même si je crois que cette autre interprétation, d’interpréter la récursion comme un échec, est cohérente aussi ; mais moins complète.

Il y a un cas perturbant à présenter.

Avec ces règles déjà vues :

(nat z).
(nat (s N)) : (nat N).
(lt N (s N)) : (nat N).
(lt N (s M)) : (lt N M).

lt signifie lower-than, c’est à dire plus-petit-que. Les règles nat représentent les entiers naturel et la règle à deux clauses, (lt A B) est vérifiée quand A est un entier naturel plus petit que B.

Par exemple (lt z (s z)) est vérifiée.

À votre avis, quelle sera la conclusion de cette requête :

(lt A A) ?

Le même A pour les deux nombres, donc ça équivaut à demander s’il existe un A qui soit plus petit que A (et aussi A qui soit à la fois plus grand que A).

La solution est …

Tadam …

A = (s A)

Un terme cyclique, qui l’eût crût ! (avec circonflexes)

C’est ce cas qui va demander des investigations, en précisant qu’il ne semble pas pouvoir aboutir à des contradictions. Même s’il semble contradictoire de trouver une solution à (lt A A), pas une une contradiction logique, qui implique nécessairement au moins deux termes, c’est contre‑intuitif, c’est différent. On pourrait croire à un bug, mais non, une petit vérification par soi‑même suffit à comprendre que en effet, la règle « (lt N (s N)) : (nat N). » à un signifiant avec lequel peut s’unifier (lt A A), si A est cyclique. Ça n’est même pas étonnant à posteriori, parce que la définition des entiers naturels est récursive. Ça n’aurait pas été le cas de certaines gens, mais cette résolution m’a surprise, parce que le cas de base est (nat z) et que la terme cyclique A = (s A), ne peut pas contenir ce z.

On pourrait penser à avoir la possibilité de restreindre la règle pour qu’elle ne s’applique qu’aux termes contenant un z. À quoi pourrait ressembler une règle pour le tester ?

(has-z z)
(has-z (s N)) : (has-z N).

Heu … ça ressemble à quelque chose, non ?

(nat z).
(nat (s N)) : (nat N).

C’est la même chose, avec seulement nat remplacé par has-z. Alors si on applique ce test à notre terme récursif, avec la sémantique précédemment proposée, il vérifiera cette règle, qui peut en fait se lire de deux manières. Est‑ce que ça a un sens au moins ? Ben, peut‑être que oui … on ne peut jamais atteindre l’infini, mais l’infini peut être représenté par un terme cyclique, et si vous voulez attendre l’origine de l’infini depuis lui‑même, quand allez vous y arriver ? Jamais. Le z est autant loin de l’infini que l’infini est loin de z. Il est inaccessible depuis z et z est inaccessible depuis l’infini, ça semble sensé. Mais pourtant, ce terme cyclique ne contient pas z. Oui, mais s’il le contenait à la place du second A dans A = (s A), alors il ne serait plus l’infini. On ne peut pas construire un terme représentant l’infini en partant du cas de base, parce qu’on y aboutira jamais.

C’est à la fois cohérent et perturbant. Perturbant, parce que inhabituel. Mais ça n’est pas tellement insensé, car comme rappelé dans le précédent long message sur les termes cyclique, l’infini (en fait il en existe plusieurs), n’est pas un nombre, l’infini des entiers naturels, n’est pas un entier naturel.

Bien qu’elle produise cette solution étrange, et c’est même la seule solution trouvée à cette requête qui a terminée une recherche exhaustive, cette règle fait pourtant bien ce qu’elle décrit, vérifier si un entier naturel est plus petit qu’un autre, et là, rien d’étrange dans les conclusions. C’est seulement avec cette requête en particulier qu’elle dit ce résultat.

C’est autant perturbant que cohérent …

Une idée de tester quelque chose est venue, mais ça prendra du temps. Ça sera révélateur, ou pas, à voir, le moment venu le dira.

En tous cas, voici maintenant un cas qui pose une question plus embêtante (ou pas). Si on écrit une seconde série de règles, disons nat2 et que au lieu de z, sont zéro est z2, alors cet infini sera commun au deux, alors que les entiers naturels qui résulteraient de ces deux règles, seraient distincts. La distinction pourrait être faite pour le terme infini, en rapportant le zéro dans le constructeur du successeur, qui serait par exemple « s z » pour nat et « s z2 » pour nat2. Ça signifie qu’il existe une autre manière de représenter les entiers naturels, qui a pour conséquence que leurs infinis ne peuvent pas se confondre. Que des entiers naturels à partir d’un zéro différent, puisse avoir la même représentation de l’infini, c’est un exemple de cas qui pose question. Qu’il existe une façon de les représenter qui fasse que leurs infinis ne se confondent plus, pose question aussi : quelle est la bonne représentation ?

Il pourrait être tentant de se dire que trop c’est trop, qu’il faut éviter ces termes cycliques et ces règles récursives qui disent « OK, ça va » après même pas une fraction de seconde au lieu de ne jamais finir. Mais ça pose une question : et si c’était au risque de se priver de précieuses réponses à certaines requêtes ? Parce que les représentation de l’infinie, elle existe en informatique, ce sont des erreurs qui font qu’une fonction récursive n’a aucune condition d’arrêt. C’est à proprement parler, une représentation de l’infinie, même si son déroulement, ou son développement comme on dirait pour un terme, n’atteindra jamais l’infini. Une fonction récursive infinie va vite épuiser la mémoire et donc forcer l’arrêt du programme, sauf si elles met en œuvre une technique appelée “ proper tail call optimization ” ou qu’elle a été mise sous la forme d’une boucle, et là, on attend combien de temps avant de conclure que c’est parti vers l’infini sans jamais y arriver ? Certains langages sérieux ont des mécanisme spécifiques pour prévoir ces cas. Mais justement, ce sont des mécanismes spécifiques, et l’idée ave ce langage, est que tout repose sur une sémantique dont tout est dérivé, pas d’y ajouter des mécanismes spécifiques étrangers à sa sémantique d’origine. Et aussi alors, qu’est‑ce qui garantirait qu’il n’y a pas autre chose qui a été perdu ?

Ça peut être intéressant, mais comme c’est inhabituel, ça va demander du temps.

Une question intéressante, sémantiquement et en pratique, est comment écrire ou permettre d’écrire, une règle qui ne puisse être vérifiée que par un terme contenant effectivement un z ? Des idées ont été envisagées, mais elle sont vagues.
Les compléments annoncés au message précédent.

D’abord il y avait une omission. À la requête « (lt N N) ? », une solution est en effet le terme cyclique N = (s N), mais aussi tous ses « successeurs », qui sont en effet équivalents.

Le test auquel il était pensé, était de voir si la division par zéro donnerait le même résultat. Ben non, … mais le résultat qui va être présenté, est intéressant quand‑même.

Pour définir la division, c’est en fait la définition de la multiplication qui a été utilisée. C’est inhabituel, ce langage, on y décrit pas des calculs, mais des relations ou des représentations des liens entres des choses. C’est tellement vrai que la définition de la multiplication, permet de vérifier des divisions, parce que c’est seulement une autre interprétation de la même relation. Pour définir la multiplication, il a fallut définir l’addition, d’une manière qui sera plus difficile à reconnaître que ce dont on peut avoir l’habitude, parce que ce n’est pas un langage de programmation avec lequel on écrirait une boucle pour décrémenter un paramètre et en incrémenter un autre en même temps. En essayant de comprendre intuitivement, on peut la comprendre, cette représentation de la relation, et la définition de la multiplication suit un principe assez similaire et reconnaissable.

Remarque : les règles pour nat sont un peu différentes de celles précédemment utilisées, mais elles sont équivalentes. La différence est que z est remplacé par (z ()), qui s’écrit aussi "z", pour une raison pratique expliquée à la fin. Cette notation a un air peu formelle, alors que pourtant elle ne l’est pas moins.

(nat "z"). -- Cas de base.
(nat (s N)) : (nat N).

(nat-add N1 "z" N1) : (nat N1). -- Cas de base.
(nat-add N1 (s N2) (s N3)) : (nat N2) & (nat-add N1 N2 N3).

(nat-mul N1 "z" "z") : (nat N1). -- Cas de base.
(nat-mul N1 (s N2) N3) : (nat N2) & (nat-mul N1 N2 X) & (nat-add X N1 N3).

Par commodité, une convention est utilisé pour représenter les entiers naturels, où par exemple "ssz" est l’équivalent de (s (s z)). Pour les curieuses‑x (par ordre alphabétique), des raisons sont données à la fin de ce message.

La requête suivante est vérifiée :

(nat-mul "ssz" "sssz" "ssssssz") ?

Elle signifie qu’on vérifie que 2 x 3 = 6.

Si on fixe les deux premiers arguments, le troisième est le produit, qui peut être fixé pour le vérifier, ou une variable, pour y retrouver le résultat. Si on fixe le deuxième et le troisième argument, le premier devient le quotient, qui peut être fixé pour le vérifier ou une variable pour y retrouver le résultat.

2 × 3 = N … N = 6
N × 3 = 6 … N = 2, c’est à dire 6 ÷ 3

Pour la division, on peut permuter les deux premiers arguments, le résultats et le même, mais le temps pour obtenir la réponse varie ou même simplement la possibilité d’avoir une réponse sans dépasser des limites de ressources, comme la profondeur de l’arbre de recherche ou le nombre d’instanciation de règles, limités, comme protection contre les récursions infinies. Ce genre d’arrêt est distinct de la réponse qui dit impossible, après une recherche qui a été jusqu’au bout des cas envisageables.

Alors, que va dire cette requête :

(nat-mul N "z" "sz") ?

Elle répond impossible, qu’elle n’existe aucune solution et c’est après une recherche exhaustive. Idem pour 2 ÷ 0, 3 ÷ 0, etc. Pas l’infini, juste impossible. Pour vérifier une idée à priori, une variable A a été fixée en liant la variable au terme cyclique (s A) et le résultat était le même, impossible.

Cette requête là, a donné un résultat intéressant :

(nat-mul N "z" "z") ?

C’est 0 ÷ 0 et la réponse énumère tous les entiers naturels à partir de z. C’est commutatif, les même solutions sont listées avec la requête pour (nat-mul "z" N "z"). Donc zéro divisé par zéro, pour cette représentation de la division et avec ce langage et sa sémantique, ça peut être n’importe quel nombre, mais aucun autre entier naturel ne peut être divisé par zéro, excepté zéro lui‑même. Comme une énumération infinie peut techniquement cacher un infini qui ne peut jamais finir par être listé, un test a été fait pour savoir si le résultat pouvait être l’infini, tel que précédemment envisagé. Et la réponse est oui. Une seule représentation de l’infini a été renvoyé, parce que ensuite un dépassement de limite a stoppé la recherche. Alors un test explicite a été fait avec le « successeur » de la représentation de l’infini, qui est un terme équivalent ainsi que tous ses « successeurs » et la réponse a été Oui. Et réciproquement, zéro divisé par l’infini, peut donner zéro ou ne pas réussir à trouver une conclusion, les deux premiers arguments ne peuvent pas être permutés.

En pratique, pour le test de la division 1 ÷ 0, c’est exactement la requête « (nat-mul N "z" "sz") ? » qui se termine et confirme que c’est impossible, tandis que la requête « (nat-mul "z" N "sz") ? » ne se termine que après avoir dépassé certaines ressources et donc sans pouvoir donner de conclusion. Avec (nat-mul A B C), la commutativité de A et B n’est pas vérifiée si C est autre que "z" et que A ou B est "z" et l’autre et libre mais si A et B sont liées à un terme constant, la résolution semble toujours impossible et là, ça resterait alors commutatif.

Que peut biens signifier que la division par zéro est immédiatement impossible au lieu de ne renvoyer aucun résultat ? Et que A et B ne puissent plus être permutées ? En tout, avec cette définition, ce n’est pas l’infini.

Je ne sais pas ce que les gens connaissant bien les domaines des mathématiques en rapport avec cette question, penseraient de ces observations, mais je suis porté à les pendre en considération, même si elles me surprennent. La conclusion de la division de zéro par zéro ne me semble pas surprenante, même si ça faisait longtemps que ne m’attendait plus à la voir revenir. C’est de pouvoir avoir la conclusion immédiate, sans délais, que 1 ÷ 0 est impossible, qui m’interroge.

Zéro ÷ N avec N ≠ zéro, donne toujours zéro et les deux premiers arguments sont commutatifs.

Ah, en marge, le détail promis plus haut. La nouvelle représentation choisie pour nat, est une conséquence d’un autre choix du langage. C’est modifiable par une option, mais par défaut, les listes utilisent () au lieu de nil pour représenter la liste vide et n’utilise pas de constructeur explicite, celui classiquement appelé cons. Par exemple, ce terme est une liste : (e1 (e2 (e3 ()))) et il est affiché comme [e1 e2 e3]. Ça va un peu plus loin, car quand tous les éléments d’une liste sont des constantes dont le nom fait exactement un caractère, alors la liste est affichée comme une chaîne de caractères, c’est à dire un fragment de texte. Par exemple (a (b (c ()))) qui pourrait être affichée comme [a b c], est finalement affichée comme "abc". Ça fait une lecture plus confortable de certains termes, et aussi l’écriture, parce qu’il est possible d’écrire comme ça s’affiche. Alors maintenant, il est plus facile de comprendre la nouvelle convention pour les entiers naturels. Si zéro est (z ()) et que son successeur est (s (z ())) et le suivant est (s (s (z ()))), etc, ça a la même structure qu’une liste se terminant à droite par un z et s’allongeant à gauche par des s. Alors par exemple, le nombre trois s’affiche et peut s’écrire comme "sssz", ce qui est plus commode que (s (s (s z))), surtout quand c’est encore plus long.
Hibou a écrit : 
(nat-add N1 "z" N1) : (nat N1). -- Cas de base.
(nat-add N1 (s N2) (s N3)) : (nat N2) & (nat-add N1 N2 N3).

(nat-mul N1 "z" "z") : (nat N1). -- Cas de base.
(nat-mul N1 (s N2) N3) : (nat N2) & (nat-mul N1 N2 X) & (nat-add X N1 N3).

Pour t’aider à lire ces formulations ou au moins à se convaincre qu’elles sont correctes, ce qui peut les rendre moins étranges, voici un accompagnement à leur compréhension. C’est utile pour avoir une idée de comment aborder les relations en général, même si ici, il s’agit en particulier d’une relation à trois termes.

Des relations à trois termes, ou plutôt quatre, si on compte le premier terme qui est le nom de la relation, représentée par une constante. C’est la présence de cette constante, qui par appariement, fait qu’on peut désigner une relation ou une autre.

D’abord, chacune des deux relations peut être lue comme ça en pensée :

(op A B C) peut être lue comme A op B = C, c’est à dire que
(nat-add A B C) peut être lue comme A + B = C et
(nat-mul A B C) peut être lue comme A × B = C.

Il faut lire les formulations en faisant attention à la position des termes. Ça ne fonctionne que si les formulations sont écrite en gardant cette convention.

Partant de là, ceci :
(nat-add N1 "z" N1) : (nat N1).
Peut se lire comme :
Si N1 est un entier naturel alors N1 + 0 = N1.
Ou en oubliant les termes rappelant la nature des variables, pour moins s’encombrer :
N1 + 0 = N1, tout‑court, c’est à dire où N1 est implicitement un entier naturel.
En résumé, (nat-add N1 "z" N1) se lit comme N1 + 0 = N1. C’est un cas de base et même l’unique cas de base de cette relation.

(nat-add N1 (s N2) (s N3)) : (nat-add N1 N2 N3) & (nat N2).
On peut ignorer le (nat 2) qui garanti la cohérence et pourrait même être à la fin de la conjonction et se concentrer sur:
(nat-add N1 (s N2) (s N3)) : (nat-add N1 N2 N3).
Qui se lit comme :
Si N1 + N2 = N3 alors N1 + (N2 + 1) = (N3 + 1).
Ça semble tellement triviale qu’on peut se demander à quoi ça sert. Le mystère est dans le +1. Ce cas est un cas d’induction et il ne peut fonctionner que si le cas de base plus haut existe. Même si la relation entre les deux n’est pas claire, il est au moins possible de se convaincre que la relation est correcte.

Ça peut être encore insuffisant pour ne pas laisser dans la brume. Un prochain message apportera d’autres nuances et résumera des généralités, mais pas maintenant, pour ne pas encombrer. Ce message et le suivant pourront être lu en passant de l’un à l’autre, à l’envie.

Pour la multiplication, c’est le même principe :
(nat-mul N1 "z" "z") : (nat N1).
Peut se lire comme :
N1 × zéro = zéro, pour quand ce cas apparaît (la règle du cas inductif et la règle du cas de base, doivent normalement être mutuellement exclusives, on ne devrait pourvoir apparier un cas, que soit à l’une, soit à l’autre, pas à l’une ou à l’autre au choix, ce qui doit être exclus par l’appariement).
Et cette règle :
(nat-mul N1 (s N2) N3) : (nat-mul N1 N2 X) & (nat-add X N1 N3) & (nat N2).
Peut se lire comme :
Si X + N1 = N3 où X = N1 × N2 alors N1 × (N2 + 1) = N3.
C’est à dire
Si (N1 × N2) + N1 = N3 alors N1 × (N2 + 1) = N3.
La règle dit simplement que la multiplication se définie avec l’addition, quand elle dit que :
N1 × (N2 + 1) = (N1 × N2) + N1.
Ajouter 1 au terme qui multiple, équivaut à ajouter une fois, le terme qu’on multiple. C’est à dire que ajouter 1 à N2, équivaut à ajouter N1 au résultat N3 ; l’addition se répète autant de fois que le dit le nombre qui multiple.
N × 1 = N.
N × 2 = N × 1 + N = N + 2.
N × 3 = N × 2 + N = N × 1 + N + N = N + N + N.
Et ainsi de suite.

Ça peut sembler étrange, parce que c’est élémentaire, mais pas scolaire, ce n’est du tout comme ça que les choses sont apprises. On apprend des opérations, tandis que là, on décrit des relations qu’on représente par des termes. C’est parce que ces termes représentent des relations, qu’il faut essayer d’avoir de l’harmonie et de la constance, dans la manière de les écrire, sinon les risque de tout mélanger arrivent rapidement.

En résumé, l’addition, c’est l’opération qui vérifie cette relation à deux règles :
Si N1 + N2 = N3 alors N1 + (N2 + 1) = (N3 + 1).
Sachant que N1 + 0 = N1, par définition.
Et la multiplication est l’opération qui vérifie cette relation à deux règles :
N1 × (N2 + 1) = N3.
Si (N1 × N2) + N1 = N3 alors N1 × (N2 + 1) = N3.
Sachant que N1 × zéro = zéro.

Mais en fait, c’est surtout une relation, pas une opération, ou plutôt c’est une relation qui définie plusieurs opérations vérifiant la même relation. Parce que d’après ces relations, on peut définir celles de la soustraction et celle de la division, qui n’en sont que des lectures différentes, sans rien définir de nouveau, seulement un alias :
Si A + B = C alors C - B = A ou encore C - A = B.
Si A × B = C alors C ÷ B = A ou encore C ÷ A = B.
Toujours sous condition qu’une résolution se conclut par une réponse, qui peut être « impossible ».

Normalement, il devrait pouvoir être possible de vérifier (alias démontrer ou prouver) que si A + B = C alors B + A = C, toujours, et de même pour la relation multiplicative.

Pourquoi définir la relation additive et la relation multiplicative, plutôt que celle de la soustraction et celle de la division ? La seule raison, c’est le naturel, ce qui est subjectif même si parfois commun, et ce serait possible, mais peut‑être moins évident à aborder. D’abord, l’addition et la multiplication sont commutatives, ce qui peut expliquer qu’elles semblent plus simples à aborder. Ensuite, la division pose une question à laquelle on ne sait pas toujours répondre quand on divise par zéro et là, on ne s’en soucie pas, mais on peut constater ce que la relation en conclue. De même pour la soustraction avec les entiers naturels (qui ne sont pas les entiers relatifs), comme on ne peut pas soustraire n’importe quel nombre à n’importe quel nombre. Pour l’addition on sait que A + B = C est toujours définie pour n’importe quel A et B, qui correspondront toujours soit au cas de base soit au cas inductif, et alors c’est la meilleure approche pour une règle qui représente une relation. De même pour la multiplication. C’est sûrement la meilleure raison qui explique que ce soient l’addition et la multiplication qui soient à l’origine de ces deux relations et lui donnent leurs noms.

Un dernier exemple pour finir ce message avant le suivant.

(nat-add A "ssz" "sssz") ? -- C’est à dire 3 - 2 = combien ?
Réponse unique : A = "sz", c’est à dire 1.

(nat-add A "sssssz" "sssz") ? -- C’est à dire 3 - 5 = combien ?
Réponse unique : Non, alias Impossible, la relation (nat-add A B C) ne peut pas être vérifiée avec B = 5 et C = 3. Car la relation (nat-add A B C), représente entre autres, tous les triplets A et B et C, vérifiant cette relation.
Une petite note pour pas l’oublier, avant le message promis dans le précédent.

Il y a un cas délicat qui peut se présenter quand on parle de cohérence. La cohérence, pour une logique, c’est de ne pas pouvoir dire une chose et son contraire, ne pas pouvoir dire qu’une chose peut exister et en même temps dire qu’elle ne peut pas exister. Mais une logique peut être cohérente en elle‑même, tout en étant sémantiquement incohérente.

Les deux cas abordés sont les termes cycliques et les règles qui rebouclent sur elles‑mêmes. On peut être mal à l’aise avec l’idée qu’une chose se définisse par elle‑même à l’infini, ou avec l’idée qu’une règle suppose hypothétiquement qu’elle est vraie. Ça peut être normal si on parle dans le langage, d’un domaine avec lequel par exemple les termes cycliques ne peuvent vraiment pas exister. Mais si c’est une erreur de le croire, alors on exclus quelque chose du possible. Si le langage considère un terme cyclique comme du faux ou de l’impossible (c’est la même chose, pour ce langage) mais que en vrai ça peut exister dans le domaine dont on parle avec le langage, alors les conclusions du langage, seront incohérentes par rapport à ce domaine. C’est à dire que le langage peut être logiquement cohérent mais sémantiquement incohérent. Et ça, ça ne dépend pas du langage, mais de ce qui est formulé avec. Ou si, ça dépend du langage, surtout de son expressivité ; plus il est vaste dans ce qu’il peut exprimer ou accepter, moins il y a de risque que ce problème se présente.

Alors une solution pourrait‑être celle‑ci : si on considère que les termes cycliques ne peuvent vraiment pas apparaître dans un domaine, au lieu de conclure vrai ou faux, possible ou impossible, quand un de ces termes apparaît, il faudrait pouvoir conclure qu’il y a une erreur dans la description. Ce serait une troisième option à ajouter. Dans ce cas là, la vérification ou la recherche de solution s’arrête, sans aucune conclusion logique ou sémantique, mais en disant que le cas ayant été rencontré, comme il n’est pas sensé exister, quelque chose ne va pas, c’est une erreur. La suite pourrait être soit d’accepter l’existence de ces cas, soit de reformuler ce qui est éventuellement incorrecte.

C’est une solution peut‑être plus prudente que de conclure le faux, même si cette possibilité là ne peut à priori pas être vraiment exclus pour tous les cas, et devrait rester une option.