Les logiques : notes en vrac

Auteur Message
Qu’un terme puisse être cyclique (c’est au moins une option autant que ça peut ne pas en être une), peut suggérer de voir un terme comme un graphe. Mais ça ne correspond pas, parce que les variables sont sémantiquement des substitutions, pas des connections. Pourtant, un terme cyclique étant infini si on applique ces substitutions, on peut difficilement le voir autrement que comme similaire à un graphe, sinon on ne peut pas le voir ou le représenter. Est‑il possible de parler d’arbre possiblement cyclique ? Ça ne correspond pas à la définition d’un arbre, qui ne peut pas contenir de cycle : Arbres couvrants (univ-lehavre.fr) [PDF]. Alors une autre possibilité est de voir les termes comme un cas particulier de graphe, des graphes non‑généraux. Un graphe connexe (*) a toujours un ou plusieurs arbres couvrants. Peut‑être que les termes sont des graphes avec un seul arbre couvrant ? (ce qui serait trivial quand ils sont non‑cycliques et sont alors seulement des arbres)

Remarque : l’ordre d’un graphe et l’ordre d’une logique sont deux idées différentes à ne pas confondre.

(*) dont tous les points sont reliés, directement ou indirectement : Les graphes (alloprof.qc.ca)


Disons qu’on a cinq points, a, b, c, d et e. On relie a à b et c et d et de même, e à b et c et d. Ce graphe aurait au moins deux arbres couvrant, un dont la racine serait a un autre dont la racine serait e. Si on représente la première partie du graphe comme un terme, on pourrait avoir « a (b c d) » (ça peut dépendre d’une convention, mais ça me semble le plus commode) on pourrait représenter la seconde partie comme « e (b c d) ». Resterait à connecter les deux termes, et ça là que ça devient impossible. Si on veut dire chacun des b, c et d dans « a (b c d) » est relié à e, et qu’on le fait avec une variable, par exemple « a (E E E) » où E est liée a e, on aura pas un graphe mais un arbre différent, « a (e e e) », parce que quand E est liée à e, ça signifie que on peut substituer E par e, pas que l’emplacement où se trouve E est connectée à e.

Note : il ne faut pas confondre liaison d’une variable et connexion dans un graphe.

Permettre que les termes, en plus de pouvoir être cycliques, puissent aussi être des graphes connexes généraux, serait‑il utile pour l’expressivité ? Et est‑ce que ce serait assez praticable ?

Si on veut représenter le graphe précédent, il faut lister toutes les connexions. Par exemple :

(a b) (a c) (a d) (e b) (e c) (e d)

Le représenter avec deux arbres non‑couvrants ressemble à ça :

a (b c d)
e (b c d)

Ils ne sont pas couvrants, parce que chacun des deux arbres manque un élément. Mais on peut les relier par superposition de leurs points commun, qui sont b, c et d, sans savoir si cette façon de faire a un nom.

Il faut moins de caractères avec la seconde écriture (celle en deux lignes) qui est aussi plus lisible. Il faut moins de caractères, parce que a et e sont factorisés et c’est aussi la factorisation qui fait que c’est plus lisible. Mais ces remarques ne valent que si le graphe est écrit en une seule fois, parce que la première écriture est plus commode pour écrire le graphe progressivement.

Le mieux serait peut‑être d’interpréter les deux termes comme un graphe connecté par superposition de leurs points en communs, ces arbres n’étant pas couvrants.

Ça peut se compliquer si on repense à un trait précédemment proposé, celui de donner un nom aux positions dans les termes, pour la raison que l’endroit où une constante apparaît, peut changer sa signification et qu’il serait commode de pouvoir le désigner et pour ça, de le représenter. Il était suggéré que ce nom par défaut, soit un index généré automatiquement. Par exemple

1:a 2:(1:b 2:c 3:d)
1:e 2:(1:b 2:c 3:d)

Là, ça peut se compliquer, parce que si en plus d’avoir un nom, les points d’un graphe ont aussi une valeur, alors il y a deux problèmes. Soit le nom de la position des constantes dans les termes, correspond au nom des points du graphe et alors les constantes ou les termes représentent leurs valeurs, mais alors il faut s’assurer que partout où apparaît le nom d’un point du graphe, sa valeur est la même. Ou alors on considère que la valeur est le nom du point du graphe, mais alors, à quoi correspond le nom des emplacements dans les termes et où représente‑t‑on les valeurs des point du graphe ?

Les graphes sont une représentation expressive, mais voir les termes comme des graphes, apparaît poser des problèmes. Après tout, les ensembles aussi, sont une représentation expressive, et il a été exclus d’en faire une expression fondamentale du langage, plutôt une idée dérivée et définie par des règles alors pourquoi pas pour les graphes aussi ? Si la décomposition d’un graphe en arbres couvrant est autant commune, c’est peut‑être que les arbres ont un avantage particulier. En tous les cas, que les termes soient des arbres ou un cas particulier de graphe limité, n’empêche pas de définir des graphes comme une interprétations de termes.

Ceci est en ayant temporairement omis une notation pressentie pour représenter les termes cycliques, directement.

Si la variable A est liée au terme (x A), on a un terme cyclique infini, qui pourrait être écrit sans variable comme 1:(x @1). Le 1: désigne un emplacement dans le terme et @1 dit qu’on revient au point marqué par 1: dont le nom est 1 (il y aurait une condition sur ce nom, pour les termes cycliques) et pourrait être autre chose que 1, comme abcd. Avec cette notation, on peut en plus des termes cycliques, représenter un terme par un graphe dont le terme est un arbre couvrant. Par exemple on pourrait avoir (1:x @1) qui ne serait pas un terme cyclique mais un synonyme de (x x), bien que ce ne serait pas l’usage prévu, il n’y aurait pas de raison de l’interdire, ça pourrait être commode avec des termes contenant des duplications. Le terme ne serait toujours pas un graphe, puisqu’il serait interprété comme (x x). La différence est dans l’interprétation. Dans ce cas là, les constante sont des valeurs, pas des noms et les noms des points du graphe serait ceux des positions dans le terme. Même le point qui renvoi à un autre pourrait être nommé, comme dans (1:x 2:@1). Le cas de 1:(x @1) ne serait pas plus un graphe que (1:x @1), mais serait tout de même un terme récursif à l’infini (différence d’interprétation), que n’est pas le second.

La question de vouloir connecter plusieurs termes entre eux, pourrait quand‑même encore se poser et mieux vaudrait toujours la laisser à des choses dérivées et définies par des règles, plutôt qu’en faire des éléments essentiels du langage. La notation pour les termes cyclique, elle, est nécessaire pour pouvoir écrire les termes qui peuvent être produit par la résolution, sinon la résolution peut créer des termes impossible à écrire (ou alors indirectement). Ça permet aussi de les représenter, même si ça n’est pas nécessaire pour leur représentation, comme dire « A est lié à (x A) » suffit a représenter ce terme cyclique, mais pas à l’écrire, puisque cette représentation n’est pas celle d’un terme.
À la suite du message précédent.

Quand on parle d’arbre couvrant, on parle d’un arbre qui couvre tous les points d’un graphe, mais pas tous ses chemins. Pour ça, on devrait plutôt parler d’arbre couvrant tous les chemins d’un graphe (pourrait‑on l’appeler un arbre équivalent ?), qui ne pourrait que être non‑cyclique.

Si on a par exemple ce graphe : a -> b, a -> c, b -> d, c -> d
Et si on a cet arbre : a -> b, a -> c, b -> d

L’arbre est bien couvrant, mais il n’a pas le chemin c -> d

Un arbre couvrant tous les chemins aurait une formulation textuelle similaire à celle pour le graphe, mais il y aurait deux feuilles d, au lieu d’une seule. Le terme correspondant serait par exemple « a (b (d) c (d)) » ou « (a (b d) (c d)) », selon deux conventions qui viennent spontanément.

Disons que un terme est un arbre couvrant tous les chemins d’un graphe et ce graphe peut en être une représentation, mais parfois seulement partielle. Parfois seulement partiellement, parce que dans l’exemple plus haut, la feuille en double, d, a deux positions différentes dans le terme, ce que n’exprime par une représentation graphique du graphe, qui ne distingue pas les deux positions, excepté par leur chemin complet, implicitement en commençant par un point d’entrée unique. On ne peut pas donner deux noms différents à ces deux positions, puisque la position n’apparaît qu’une seule fois, dans une vraie représentation graphique (pas comme celle plus haut, qui est textuelle), ou alors si on lui donne deux noms, ces deux noms sont ambiguës. Mais si cette position n’a pas besoin de deux noms différents, alors le graphe représente entièrement l’intention du terme, en étant éventuellement plus léger. Le terme est potentiellement plus expressif que le graphe, mais le graphe, représenté graphiquement (pas textuellement), peut être plus lisible.

Dans le cas où il y a un cycle, il ne peut pas exister d’arbre représentant tous les chemins. D’abord parce qu’ils serait infini, mais aussi parce qu’il ne distinguerait pas les étapes, si la décomposition en étapes est pertinente. En plus d’être impossible à représenter comme un arbre fini, le schéma qui produit le cycle serait perdu.

Un terme n’est donc ni un arbre, ni un graphe, mais tient des deux à la fois. En tout cas, il peut représenter un graphe (sous réserve de la notation introduite pour les terme cycliques, qui peut être utilisée pour des chemins non‑cycliques), avec une information en plus, si distinguer les positions par des noms est important.

Les termes avec cette extension, sont même plus généraux que les graphes et les arbres, puisqu’il leur ajoute des choses qu’ils ne peuvent pas exprimer.

La seule question qui resterait, serait celle des graphes avec plusieurs point d’entrée. Ce n’est pas tant un problème, comme la possibilité de récupérer un terme inclus dans un terme, n’interdit pas d’aborder le terme englobant par le point qu’on veut.

Resterait aussi le cas de l’extraction d’un terme inclus dans un terme cyclique. Si A est liée à (b (c A)), qui serait représenté comme 1:(b (c #1)), on ne peut pas extraire le terme (c #1) on oubliant le reste, mais ça n’empêche pas d’extraire ce terme. Dans ce cas, on ne peut pas extraire (c #1) sans introduire une variable. Le cycle ne commencerait plus par (b (c …)), mais par (c …) et se poursuivrait cependant comme avec (c (b (c (b (c …))))). Dans le cas d’un terme extrait d’un terme dont le graphe a des points en double, comme le d de l’exemple précédent, on pourrait extraire (c d), sans se soucier que d existe aussi dans (b d).

Sous réserve d’autres pensées ultérieures …
Notes de vocabulaire.

Les arbres possiblement cycliques, sont appelés des arbres rationnels dans certains documents, mais d’autres parlent de graphes rationnels et même les arbres rationnels semblent souvent avoir une connotation particulière. Alors finalement c’est peut‑être de dire « terme cyclique ».

Ce qui a été appelé des séquence, qui n’est pas la même chose que les liste, est appelé agrégat dans au moins un document. Resterait à savoir si c’est courant ou pas de les appeler agrégats.
Note pointilleuse.

Quand on résout (eq A B), les deux variables sont liées. Mais comme c’est une application de la règle (eq A A), pour que ça ait un sens qui ne surprend pas, il faudrait dire que une variable est toujours liée à elle‑même, inconditionnellement, et dans ce cas là, c’est plus facile de justifier que la règle (eq A A) transmet ce fait au terme (eq A B) résolu. Se contenter de dire qu’une variable est toujours égale à elle‑même, n’a pas la même signification, surtout que l’égalité n’existe pas dans le langage, où il n’y a que des équivalences et des liaisons (en fait si, elle existe, mais en interne et en compréhension, sans être exposée comme pouvant être explicitement désignée).
Quelques points de repère dans ce sujet, parce qu’il a commencé en étant tout à fait désorganisé, d’où son titre.


(*) Une mention unique et plus ancienne, était ici : message du Vendredi 3 Avril 2015 21h29.

Les messages allant du cinquième lien au quatrième lien, étaient vraiment le plus souvent des notes en vrac, au gré des pérégrinations ou de moitiés de hasard. Ce n’est qu’à partir du message du troisième lien, qu’a été rencontrée la conviction que faire un langage accessible à tout le monde, les non‑diplômé‑es (« en dessous » des undergraduate, comme disent péjorativement les Anglophones), curieux‑ses, autodidactes (mot naturellement mixte), etc, est assez probablement réalisable, avec une lecture pour l’accompagner (autant importante que le langage lui‑même ; les deux sont indissociables).

Maintenant, la suite reprendra un cours discret car non‑publique, pendant longtemps (de toutes manières, ce sera laborieux), mais quelques notes seront rapportées ici quand‑même à des occasions, surtout si elles peuvent être des compléments à des petits bouts de chemin qui ont été trouvés, pour ne pas laisser les curieux‑ses dans une impasse ou sur des imprécisions qui pourrait laisser de l’incompréhension. Quand la suite aura vraiment assez bien aboutie, ce moment sera annoncé ici, en donnant un lien vers un site qui aura sa première page pour cette occasion (et qui l’attend depuis bien longtemps).


C’était le 685ième message de ce sujet … l’un des plus important de ce forum, avec celui sur le Jardinage et celui les Plantes Sauvages pas comestibles ou comestibles.
Un long pâté qui aura une suite. C’est un long pâté, mais il est intéressant pour trois choses. La première est de découvrir que les deux termes (c A) et (c (c (c A))) par exemple, peuvent être équivalents si A est lié à l’un ou l’autre des deux termes. C’est une surprise que nous font les termes récursifs. La seconde est de donner un exemple de toutes les étapes d’un procédure de vérification de l’unification pendant l’application d’une règle, qui vérifie cette équivalence. En marge, le tout‑début du déroulement de la procédure ne concerne d’ailleurs que l’application d’une règle (ça rappellera des souvenirs aux gens qui ont lu studieusement, sinon ce sera une occasion de rêvasser en s’interrogeant, pour les autres). La troisième est de montrer l’importance de bien définir de quoi on parle quand on parle d’égalité et de souligner la différence entre identicité, égalité et équivalence. Ce sont des choses liées entre elles.

Un message plus tard, reviendra sur les conclusions de ce message.

D’abord on pose une règle, puis on fait deux requêtes l’une après l’autre. La règle posée est bien connue dans ce sujet depuis quelques temps. Après la première requête, qui réussit, on a donné une valeur à A. Puis la seconde requête va être l’occasion d’une surprise. Pour cette raison, sa résolution est détaillée pas à pas. C’est fastidieux ou laborieux et ça montre l’intérêt qu’il y a d’utiliser quelque chose qui le fait pour nous, même si c’est tout autant important de le comprendre et d’en avoir une idée, d’où ce message. En plus, l’exemple porte sur l’unification de deux termes cycliques, ce qui est encore plus intéressant.

Le déroulement détaillé de la procédure est mis dans un élément « code », pour préserver l’indentation. En gros, quand on rencontre une parenthèse ouvrante, on entre dans un contexte imbriqué et cette imbrication est représentée pas une indentation, qui est l’équivalent vertical de la parenthèse ouvrante. Quand on rencontre une parenthèse fermante, on quitte le contexte imbriqué pour revenir au contraire englobant ; l’indentation recule. Le niveau d’indentation, reflète le niveau de parenthésage auquel on se trouve.

Code : 

(eq A A).
(eq A (c (c (c A)))) ?
(eq A (c A)) ?

Contexte après la première requête (seconde ligne):
A = (c (c (c A))).
C’est le contexte initial de la deuxième requête (troisième ligne),
dont le déroulement est écrit ci‑dessous.

Instantiation de (eq A A) en (eq A_1 A_1).
A_1 est initialement une variable libre.
Unification de (eq A_1 A_1) et (eq A (c A)).
Unification d’un tuple à trois élément et
d’un tuple à trois éléments, possible:
Entrée dans les deux tuples en même temps.
Unification de "eq" et "eq" (deux constantes): OK.
Unification de A_1 libre et A liée.
Établissement d’une liaison entre A_1 et
A, donc A_1 est maintenant liée.
On passe au second élément de chacun des deux termes.
Unification de A_1 liée et de (c A).
A_1 est liée à A, A est liée à (c (c (c A))).
A_1 remplacée par (c (c (c A))), qui est
sa valeur liée.
Unification de (c (c (c A))) et (c A)
Unification de deux tuples à deux éléments (oui!), possible:
Entrée dans les deux tuples en même temps.
Unification de "c" et "c": OK.
Unification de (c (c A)) et A.
A est remplacée par (c (c (c A))), qui
est sa valeur.
Unification de (c (c A)) et (c (c (c A))).
Unification d’un tuple à deux éléments et
d’un tuple à deux éléments, possible:
Entrée dans les deux tuples en même temps.
Unification de "c" et "c": OK.
Unification de (c A) et (c (c A)).
Unification d’une tuple à deux élément et
d’un tuple à deux éléments, possible:
Entrée dans les deux tuples en même temps.
Unification de "c" et "c": OK
Unification de A et (c A).
A est remplacée par (c (c (c A))), qui est
sa valeur.
Unification de (c A) et (c (c (c A))).
La ligne plus haut est à remarquer pour plus tard.
Unification de deux tuples à deux éléments, possible:
Entrée dans les deux tuples en même temps.
Unification de "c" et "c": OK.
Unification de A et (c (c A)).
A est remplacée par (c (c (c A))), qui est
sa valeur.
Unification de (c (c (c A))) et (c (c A)).
Unification de deux tuples à deux élément, possible:
Entrée dans les deux tuples en même temps.
Unification de "c" et "c": OK
Unification de (c (c A)) et (c A).
Unification de deux tuples à deux éléments,
possible:
Entrée dans les deux tuples en même temps.
Unification de "c" et "c": OK.
Unification de (c A) et A
A est remplacée par (c (c (c A))) qui est
sa valeur.
Unification de (c A) et (c (c (c A))).
On est déjà passée par la même étape il avait
été dit « La ligne plus haut est à remarquer pour
plus tard ». On recommencerait en boucle
indéfiniment en repassant par les mêmes
conditions. L’unification n’échoue a aucun
moment, alors on retourne depuis ce point, et
ainsi de suite (il n’y a que des parenthèses
fermantes après).
Retour.
Retour.
etc.

Sous réserve d’erreur(s), parce que on fait facilement des erreurs en le faisant « à la main », mais normalement il n’y en a pas, et la conclusion est correcte, ça c’est bien assez sûr. Évidemment, c’est bien plus fiable et confortable, de le faire‑faire par l’informatique, surtout quand il y a autant d’étapes pour quelque chose d’autant simple ; c’est comme quand on préfère utiliser une calculatrice, ce qui n’empêche pas de savoir compter.

Cette boucle infinie pendant le déroulement de la procédure, ne rencontrerait jamais aucune différence, puisqu’on on en avait pas rencontré dans les étapes précédentes, qui se répéteraient. En fait, on aurait put noter encore plus tôt qu’on était dans une boucle infinie. On était passée par l’unification de (c (c A)) et A puis après on est passée par l’unification de A et (c (c A)). La permutation ne fait pas de différence, parce que trouver ou ne pas trouver une différence entre la gauche et la droite et entre la droite et la gauche, fait faire le même constat de différence ou pas. Mais par prudence, l’exemple ne prend note d’une boucle infinie que quand on repasse exactement par là où on est déjà passés, sans permuter.

On en conclut que quand A est liée à (c (c (c A))), A peut être unifiée avec (c A). Pourtant les deux termes sont différents, les deux représentations écrites sont différentes, ils ne sont pas identiques, pourtant ils sont équivalents. Pour se rassurer, on peut poser maintenant que A = (c A), pour reprendre avec un exemple plus simple, et on peut remarquer que si on est fait le développement de (c A), on a d’abord (c (c A)) puis (c (c (c A))) et c’est bien le même terme, qui a été développé, c’est la seule différence. Tous les développements du terme (c A) sont équivalent au terme (c A) et ce serait vrai même si le terme n’était pas récursif, juste que les développements ne seraient pas infinis. Si A était liée à "b", on aurait (c b) à la place et on ne se poserait pas de question. C’est pourtant la même chose qui a été faite avec le développement partiel du terme, en remplaçant A par sa valeur, qui elle‑même contient A. Qu’un développement partiel suffise à le constater, ne falsifie pas la constat. De toutes manières, le développement complet est impossible avec les termes infinis. Aussi, un développement partiel peut suffire à constater une équivalence avec des termes qui ne sont pas infinis non‑plus.

On peut aussi se rassurer avec un message d’un autre forum (pas exactement, mais un peu pareil qu’un forum) Anglophone : Unification not commutative (github.com), qui est un rapport de bug avec Tau‑Prolog. Dans un des messages de Ghost, du 7 Mars 2019 (il y en a plusieurs), on voit ce test avec SWI‑Prolog, dont le résultat est conforme à ce qui est dit dans un document de Alain Colmerauer, l’inventeur du langage Prolog (le langage de ce sujet est différent, mais Prolog a été son inspiration d’origine et il reste fidèle aux mêmes principes et même avec des précautions supplémentaires et en le complétant aussi).

Ce test est :

Code : 

?- A = s(s(A)), B = s(B), A = B.
true

Ce qui réécrit avec la syntaxe du langage de ce sujet, correspondrait à :

Code : 

(eq A (s (s A))) & (eq B (s B)) & (eq A B) ?

Excepté que au lieu de “ true ”, la première réponse serait :
« A = B = (s A) », signifiant que la résolution a réussit (ensuite la réponse serait qu’il n’y a pas d’autres solutions).

SWI‑Prolog le dit et en accord avec Alain Colmerauer, alors il y a de quoi être rassuré‑e.

(c A) est la valeur de A, mais (c (c A)) est une autre représentation de la valeur de A, et ainsi de suite. Les deux termes ne sont pas égaux au sens de identiques, mais ils sont équivalents, autant 1 + 2 n’est pas identique à 3, mais équivalent à 3. Parfois, en parlant d’égalité, on confond les deux, parce que le sens du mot est souvent implicite, mais si c’est clairement posé, on peut parler d’égalité au sens de l’équivalence. Mais dans un langage basé sur l’écriture, où l’écriture dit tout, parler d’égalité dans ce cas là, est imprudent, comme ça peut induire en erreur. Pour cette raison, il est plus prudent de parler d’équivalence, même s’il existe aussi plusieurs formes d’équivalence, à ne pas confondre, elles non‑plus. Puis si on parle d’égalité quand il y a une différence de représentation, comment appelé le cas où deux représentations sont identiques ? C’est pour cette raison que l’égalité n’est utilisée ici, que pour dire textuellement identique (en faisant abstraction des espaces et de la mise en page).
Suite du message précédent.

D’autres justifications de conclure que deux termes infinis sont unifiés si on a trouvé aucune différence après au moins un tour complet du cycle.

On peut imaginer une conjonction infinie, de termes tous vrais, comme V & V & V & V & … comme ça jusqu’à l’infini. Ce qui est dit plus haut suggère de conclure qu cette conjonction est vraie, ce qui est noté V (pour l’occasion). Mais quelqu’un‑e pourrait objecter qu’on ne peut pas le dire, parce qu’on aura jamais fini de vérifier cette conjonction, puisqu’elle a une longueur infinie. Oui, mais il reste encore un détail troublant dans une reformulation de la même chose : une conjonction est fausse si au moins l’un de ses termes est faux. Comment une conjonction infinie de termes tous vrais, pourrait‑elle être fausse ? Elle ne peut pas conclure le faux qu’elle ne contient pas … On peut avoir l’étrange impression que c’est encore plus impossible que la présentation précédente. Si une chose semble plus impossible qu’une autre, c’est qu’il y a quelque chose caché quelque part. Disons qu’il est au moins raisonnable de conclure que considérer la conjonction comme vraie est plus facile à accepter que de la considérer comme potentiellement fausse. Ce ne serait pas seulement plus difficile à accepter, ce serait aussi contradictoire, parce que ça signifierait qu’on peut conclure le faux du vrai, ce qui serait incohérent ou inconsistent. Accepter cette conclusion, rendrait le langage incohérent, alors cette interprétation que cette conjonction infinie pourrait être fausse, ne peut pas être acceptée. Si elle ne peut pas être fausse et que ça ne serait en plus, pas acceptable (ce qui met les deux d’accord), la seule chose restant envisageable qu’elle peut au moins être vraie.

Mais alors où est le problème ? Il est peut‑être d’insister à vouloir faire le développement infini d’un terme cyclique, dont le développement est infini. Pourtant ce terme, n’est infini que sans son développement, pas dans son écriture ou sa représentation qui expose un processus constructif, même si la notation à quelque chose d’arbitraire. C’est justement ce que suggère le message précédent, c’est traiter le terme comme la chose finie qu’il est. C’est pourtant courant, comme raisonnement, au contraire d’être étrange.

Si on vous demande de faire deux parcours touristiques pour savoir s’il sont les mêmes, vous pouvez suivre le premier, du départ à l’arrivée, puis le deuxième de même, et si vous constatez que tout ce que vous avez vu en chemin pendant le second, vous l’aviez vu pendant le premier, vous pourrez conclure que les deux chemins sont les mêmes. On peut imaginer maintenant que les deux parcours bouclent sur eux‑mêmes. Comme vous regardez bien ce que vous voyez autour de vous pendant le parcours, vous allez constater que vous êtes déjà passé par là où vous passer. À la fin du deuxième tour complet, vous n’aurez en tout cas plus aucun doute. Si vous faite le deuxième parcours et qu’il fait la même boucle, qui vous en voudrait de conclure que les deux parcours sont les mêmes ? Personne ou presque ne trouverait ça stupide et au contraire. Cet analogie est imparfaite, mais je la trouve valable, parce que les différences sont interprétables et justifiables.

Ce sont plusieurs manières de formuler la même chose, sans savoir laquelle sera la plus convaincante. Dans le message précédent il y avait une explication technique (proche de l’approche pratique dans ce message) et il y avait aussi une confirmation « par des pairs ». Dans ce message, il y a une explication autant logique que sémantique et aussi une explication pratique ou pragmatique. À moins d’y trouver des erreurs ou des failles dans ces justifications, il n’y a pas de raison de refuser les termes cycliques.

Peut‑être qu’il serait plus compréhensible après ceci, de dire qu’on conclut à l’unification de deux termes, non‑pas quand on peut constater qu’ils sont égaux, mais quand on a la certitude qu’il n’y a aucune différence entre les deux. Ça semble deux manières équivalentes de dire la même chose, mais ce qui est dit plus haut peut laisser trouver une subtile différence entre les deux.

Ce qui est dit plus haut et dans le message précédent, s’applique au cas similaires, en faisant attention quand‑même à ne pas voir comme similaires des cas qui ne le sont pas.

Les termes cycliques ne semblent être une contradiction que si on ne les accepte pas. Et même en ne les acceptant pas, il faut pourtant accepter leur existence, au moins pour pouvoir les filtrer et les exclure. Il n’est pas possible de ne pas accepter leur existence, il a été tenté ici, de convaincre d’accepter leur interprétation.

Maintenant, place à l’amusement … pour les matheux‑ses … et les curieux‑ses. Attention quand‑même, c’est informel, ce qui est dit ici est à prendre avec curiosité, pas à prendre pour une démonstration.

Si A est liée à (c A), (c A) est un terme cyclique et il est équivalent à (c (c A)) et à (c (c (c A))) et ainsi de suite. Si on remplace le c par un s, on peut retrouver le schéma qui avait servi à définir les entiers naturel. On pourrait alors penser qu’il y a là peut‑être une représentation de l’infini des entiers naturels. La différence serait qu’au lieu de z on aurait A, lié au terme lui‑même. Cette différence est abordée plus loin.

Mais cette différence pourrait expliquer intuitivement ce que les mathématicien‑nes disent : l’infini n’est pas un nombre (*), il est autre chose. L’infini des entiers naturels est bien lié aux entiers naturels, mais n’en est pas un lui‑même.

(*) Personnellement, je n’y vois pas un cardinal non‑plus, parce que le cardinal des ensemble fini, est un naturel. Justifier que l’infini n’est pas un nombre parce qu’il est un cardinal, c’est une mauvaise justification.

Que (s (s (s A))) soit équivalent à (s A), pourrait signifier que l’infini multiplié par un entier naturel, reste toujours le même infini et que alors divisé cette infini par un naturel, ferait toujours le même infini aussi.

On avait vu que pour comparer deux naturels, on les réduit pas à pas et le premier qui arrive à z était le plus petit des deux. Par exemple en partant de (s (s (s z))) et (s (s z)) on arrive à (s (s z)) et (s z) puis on arrive à (s z) et z, le deuxième est arrivé à z en premier, c’est donc (s (s z)) qui est plus petit que (s (s (s z))). Peut‑être le faire avec cette infini ? On sait déjà qu’il ne contient pas de z et que donc on ne pourra jamais atteindre ce z. Mais cette procédure pas à pas suit la même démarche qu’un développement et alors on ne pourrait jamais atteindre ce z, même s’il existait, puisqu’il serait infiniment loin, donc jamais accessible. Ça pourrait justifier aucun de ces infinis ne peut être dit plus petit qu’un autre, mais la preuve serait plutôt qu’ils sont équivalents d’après le fait qu’ils peuvent être unifiés.

Justement si tous ces infini sont équivalent, peut‑être que bien que cet infini multiplié ou divisé par un naturel, reste l’infini, peut‑être que cet infini moins cet infini, est quand‑même égale à zéro et aussi que cet infini divisé par cet infini, est quand‑même égale à 1. Il faudrait demander à des spécialistes, ce qu’iels en diraient.

Qu’en est‑il de la multiplication par zéro ? On a vu que (s A) est équivalent à (s (s A)), que donc ce qu’on pourrait imaginer lire comme deux fois l’infini, est toujours égale à l’infini. Avec cette analogie, que serait zéro fois l’infini ? Ben, simplement A … et A, est justement lié à (s A), et alors équivalent à (s A) et alors, zéro fois cet infini, c’est encore cet infini, à en croire cette analogie. Ça pourrait aussi justifier de voir A comme ayant un rôle assez semblable à celui de z. Ça signifie aussi que cet infini est infini dès le départ, qu’il est instantanément infini (comme tous les termes cycliques).

Tout cette seconde partie qui s’aventure dans une analogie pour parler de l’infini des entiers naturels en math, est bien curieuse, intrigante, mais à prendre avec précaution, parce que ça n’est pas un raisonnement dans le langage qui a été présentée là, c’est une escapade songeuse.
Un retour sur les débuts, quand était discuté la manière de lire les règles. Deux manières de les voir avaient été présentées, une linguistique et l’autre, logique. La façon linguistique de les voir, est que dans la règle « A : B & C. », A est le signifiant, B & C est le signifié. La façon logique de les voir, est que dans la même règle, B & C est la prémisse, A est la conclusion, ce qui se note souvent A & B ==> A.

Après les mots trop formels, il y a des exemples plus concrets.

La vision linguistique ne pose pas trop de problèmes. Par exemple si en voit un terme inconnu pour lequel il n’existe pas de règle correspondante, on considère que le terme n’a pas de sens où qu’il manque une définition, c’est à dire une règle. Si à une conjonction on ne peut pas associer un terme, on peut dire que c’est une signification pour laquelle il n’existe pas de mot, c’est à dire de terme, et on peut toujours en poser un. Une autre idée de terminologie est proposée plus loin, normalement, elle sera encore mieux, parce qu’elle met d’accord le langage courant et la logique.

La vision logique peut plus facilement poser des problèmes. Normalement, B ==> A signifie exactement que si on a B, alors on a obligatoirement A, sinon la formule est invalide et il n’est pas permis de la poser, elle n’est pas une règle valable. Elle signifie aussi que B peut être vraie malgré que B soit fausse. C’est à dire que ayant A, on ne peut rien conclure. C’est seulement si on a B, qu’on peut conclure quelque chose.

Pourtant, d’un point de linguistique, si on a A, on sait qu’on a B, … ou pas. Si au lieu de A : B on à la fois A : B et A : C, alors si on a A, on sait qu’on a soit B soit C, … ou pas. Parce que en ayant A : B, on a oublié qu’on pouvait avoir aussi A : C, qu’est‑ce qui nous dit qu’il n’y a pas aussi un A : D ? C’est exactement pour ça que dans la logique, si on a B ==> A et qu’on a A, on ne peut rien conclure.

Pourtant si en ayant A : B, et en ayant A, on peut vouloir conclure B, ce n’est pas insensé, mais ça repose sur une supposition, qui est appelée l’hypothèse du monde clos. Cette supposition signifie qu’on considère que les règles sont exhaustive, qu’il n’existe rien en dehors des règles. Dans ce cas, si ayant A : B et A, ce qu’on peut conclure, dépend de si il y a une autre règle A : C ou autre.

Deux exemples concrets seront plus faciles à comprendre. C’est celui d’un parapluie qu’on ouvre et celui d’une casserole qui déborde.

Une casserole déborde si on y verse plus d’eau que sa contenance. Il n’y a pas des milliers de solutions à ce cas. Si on y verse trop d’eau, elle déborde, si elle déborde, c’est qu’on y a versé trop d’eau. Il y a une équivalence entre la prémisse et la conclusion.

On ouvre un parapluie quand il pleut : s’il peut, j’ouvre mon parapluie. Mais si j’ouvre mon parapluie, peut‑on en conclure qu’il pleut ? Pas nécessairement, parce qu’il peut aussi faire une ombrelle : s’il fait trop de Soleil, j’ouvre mon parapluie. Si j’ouvre mon parapluie, que peut‑on conclure ? On pourrait être tenté de dire que soit il pleut soit il fait trop de Soleil, tout en ayant quand‑même un doute, en se demandant,  mais quel usage encore pourrait‑on trouver à un parapluie ouvert ? Et en effet, il y a un cas trivial est une singularité : un parapluie qui reste toujours ouvert parce qu’il est cassé et ne peut plus se refermer. Dans ce cas, il est toujours ouvert, quelque soit les circonstance, et alors du fait qu’il soit ouvert, on ne peut absolument rien conclure.

À quel point la prémisse est‑elle ouverte ? La question semble être là.

Quand on pose une définition, on la fait en l’espérant exhaustive et on évite plutôt de passer à côté de cas possibles, surtout dans des domaines comme les mathématiques. Dans ce cas là, la prémisse peut‑être plus ou moins diverse, mais son étendue est bien déterminée. Si on pose des faits, c’est différent, on ne sait jamais si on a posé tous les faits ou si on ne va pas en découvrir des nouveaux plus tard. Dans le premier cas, on est dans l’hypothèse du monde clos, et il ne pose pas de problème. Dans le second cas, être dans l’hypothèse du monde clos, peut devenir un problème. C’est pour cette raison qu’il est proposé de permettre d’en sortir, d’une manière qui sera présentée plus loin.

Quand on va des prémisses au conclusion, on peut au pire être dans l’ignorance. Par exemple si on sait que s’il pleut on ouvre le parapluie, on ne dit pas d’erreur, on ignore seulement que s’il y a trop de Soleil, on ouvre aussi le parapluie. Quand on va de la conclusion à la prémisse, c’est là qu’on peut dire des erreurs. Si conclut que pour que la parapluie soit fermé, il suffit qu’il ne peuvent pas, on dit une chose fausse. Ça se remarque surtout quand on l’aborde sous l’aspect de la négation, mais c’est autant grave si on l’aborde sous l’aspect de la couverture des cas possible que représente la conclusion.

Si on reste seulement dans l’hypothèse du monde clos, on a certains problèmes, si on reste seulement dans l’hypothèse qu’on ne sait pas tout, on a d’autres problèmes.

C’est pourquoi il est proposé de permettre dire que certaines règles sont sous la supposition qu’on ne sait pas tout et que les autres sont sous la supposition d’être exhaustives.

Ça pourrait se noter ainsi comme « A : … . », avec trois petits points, ce qui signifierait qu’il existe des cas où on peut conclure A, sans que toutes les prémisses ne soient connues. En fait, il serait même encore plus intéressant de faire de ce « … » un terme spécial et alors on pourrait même écrire « A : B & C : … . » Disons que ça signifierait qu’on ne sait pas tout, mais qu’on en sait une partie quand‑même. Pour éviter d’avoir un point qui suit trois petits points, comme dans « … . », il serait possible de poser une règle de syntaxe disant que les trois petits point ne peuvent apparaître que à la fin de la règle et à la place du point final habituel.

Un exemple serait par exemple une règle qui dit si un fragment de texte est une lettre ou un caractère. Les alphabets du monde sont très vaste, surtout si on compte les idéogrammes et d’autres variantes. Ça fait des milliers et des milliers de caractères. On pourrait lister ceux qu’on connaît, mais pas tous :

(caractère a).
(caractère b).
(caractère c).
(caractère d).

Avec quatre règles, on sait que (caractère C) est vérifier si C est "a", par exemple. Mais si on veut vérifier (caractère z), on échouera, alors que "z" est un caractère. On pourrait le poser ainsi :

(caractère a).
(caractère b).
(caractère c).
(caractère d).
(caractère C) : …

Là, on pourrait vérifier (caractère a), mais (caractère z) ne donnerait pas de solution et dirait seulement « ne sais pas ». Mais un caractère a une longueur de 1, alors on pourrait poser :

(caractère a).
(caractère b).
(caractère c).
(caractère d).
(caractère C) : (longueur C 1) & …

Ça éviterait de douter sur un cas comme (caractère "ab") ou au lieu de la réponse « ne sais pas » on pourrait au moins avoir la réponse « non ». Mais pour (caractère z), la réponse serait toujours « ne sait pas ». Ce n’est pas inutile, puisque pour (caractère a), la réponse est toujours « oui ». C’est plus correcte, parce que au moins pour (caractère z) la réponse est « ne sait pas » au lieu de « non ».

Si les règles était celle d’une définition sur un ensemble de caractère bien défini, qui ne contient que a, b, c et d et rien d’autre, sans la règle « (caractère C) : … . » alors (caractère z) répond « non » et ce n’est pas une erreur.

Attention à ne pas interpréter « ne sais pas » comme « non » ou « oui » selon les attentes. « Ne sais pas » signifie vraiment « ne sais pas », n’exclus ni « oui » ni « non » mais n’affirme ni « oui » ni « non », et ce n’est pas non‑plus une absence de réponse ; bref, c’est « ne sais pas ».

Pour ne pas oublier une chose annoncée plus haut, une nouvelle terminologie est proposée. Avec A : B & C, au lieu de dire que B & C et la prémisse ou le signifié, il est proposé de dire que B & C est la raison. Ce mot ne trahit pas la logique, puisque on pourrait facilement dire que une raison fonde une conclusion et ce mot ne trahit pas le langage courant non‑plus, parce que on pourrait dire que une raison justifie le choix d’un mot. Le mot « raison » serait peut‑être plus facile à comprendre que « prémisse » ou « signifié », même si ces deux mots n’ont pas de raison d’être exclus. Reste encore à trouver un autre mot autant intéressant pour remplacer « signifiant » et « conclusion ».
Quand les hypothèse avaient été introduites, leur description contenait une erreur. La solution à cette erreur est la même que celle proposée dans le message précédent.

Soit deux règles :

(eq A A).
(r A A).

La seconde règle a le même sens que la première, seulement le nom n’est pas le même. On peut le vérifier avec cette requête :

(r A B) & (eq A B) ?

La réponse est qu’une solution (et même la seule solution), est A liée à B.

Mais si on fait cette requête (la notation ⟦(r A B)⟧ signifie qu’on est dans l’hypothèse où le terme (r A B) est vérifié) :

⟦(r A B)⟧ & (eq A B) ?

La réponse est Non. Pourtant (r A B) est équivalent à (eq A B). Les deux variables A et B sont des variables hypothétiques (faute de savoir comment les appeler autrement) et sont alors chacune liée à une constante spéciale, différente pour A et B. Elles ne peuvent pas s’unifier et alors (eq A B) ne peut pas être vérifié. Mais comme ces constantes représentent une valeur quelconque (mais qui vérifient (r A B)), on ne peut finalement pas dire si oui ou non elles pourraient s’unifier. Une réponse correcte serait « ne sais pas », là aussi.

Comme elles ont été présentées, les hypothèses permettent une réponse consistante quand elles permettent de conclure Oui, mais pas toujours consistante quand elle aboutissent à conclure Non, parce que parfois ce Non devrait être Ne Sais Pas.

C’était une correction à ne pas passer sous silence. Un prochain message reviendra sur la négation, puis le sujet reviendra au silence pendant bien longtemps (sauf choses vraiment très importantes), mais pas avant un autre dernier message.
Plutôt que « ne sais pas », un mot plus correcte mais un peu austère, serait « non‑décidé » ou “ undecided ”, parce que ça retranscrit mieux la conclusion, qui est non‑décidée, parce qu’elle n’a pas put l’être. Ça correspondrait bien au « je ne sais pas » dans le cas de l’hypothèse du message précédent, mais pour le cas du monde ouvert, du message encore précédent, peut‑être que « inconnu » ou “ unknown ” serait mieux. Cependant, il n’y aurait pas de justification à distinguer les deux et non‑décidé correspondrait même encore mieux à ce second cas aussi.

Disons alors Undecided / Non‑décidé (qui n’est pas indécis).