Un système de numération exotique

Tout MJ qui se respecte a une dose de sadisme suffisante pour avoir une fois ou l'autre dans sa carrière voulu donner un cryptogramme à ses joueurs et les laisser mariner dedans. Il s'agit généralement de ce qui est censé être la manière d'écrire naturelle d'une race, d'une espèce, ou d'une forme d'intelligence supérieure, et dans ce cadre un écrivain peut aussi être tenté d'inventer une nouvelle façon d'écrire, voire une nouvelle langue. C'est l'un des rares domaines où la sécurité par le secret est applicable, alors on va en profiter.

Je livre ici les résultats de ma réflexion sur un système de numération exotique, c'est-à-dire une représentation des nombres qui soit radicalement différente de la nôtre, histoire d'élever un peu la difficulté de cryptanalyse par rapport à une simple substitution de symboles.

Remarque : dans toute la suite, j'utiliserai le mot « entier » dans le sens « entier naturel », sauf mention contraire explicite.

Un système de numéquoi ?

Commençons déjà par préciser le problème. Je cherche à construire une méthode pour encoder un nombre entier quelconque, de façon à pouvoir communiquer. Je vais donc appeler système de numération un algorithme (au sens général) permettant d'obtenir à partir d'un nombre entier arbitraire ce que j'appèlerai un engramme. Je vais imposer plusieurs contraintes qui me semblent raisonnables sur ce système de numération, en partant du principe que c'est censé pouvoir être vraiment utilisé par un peuple.

Positionnalité du système de numération

Il existe deux sortes de systèmes de numération : les systèmes positionnels et les systèmes non-positionels. Je ne vois pas comment construire un système qui ne soit ni positionnel ni non-positionnel, en dehors d'un hybride des deux, comme la numération romaine, mais si quelqu'un y arrive, il aura sans doute un système encore plus exotique que le mien.

Les systèmes de numération non-positionnels utilisent des symboles dont la valeur n'est pas affectée par leur position. Le système de numération de l'égypte antique en est un exemple. Le problème est que pour représenter des nombres arbitrairement grands, il faut quelque chose qui puisse grandir arbitrairement, or j'ai déjà exclu de faire grandir arbitrairement le pool de symboles indépendants. La génération de nouveaux symboles fait alors soit intervenir la position, ce qui se ramène au cas suivant, soit des symboles de bases, mais le pool de symboles reste fini, à moins d'autoriser des combinaisons infinies, comme par exemple n bâtons l'un à côté de l'autres pour désigner le nombre n. Ce système n'étant pas follement intéressant, d'autant moins qu'il pourrait être considéré comme une base 1 et englobé dans le cas suivant, je ne vois plus rien à tirer des sytèmes non-positionnels.

Les sytèmes de numération positionnels prennent en compte la position d'un symbole pour lui attribuer une valeur. Par exemple le système décimal traditionnel est positionnel, parce que le 6 n'a pas la même valeur dans 16 que dans 69. Mon système de numération exotique va donc être positionnel, tout comme le système de numération usuel, ce qui limite déjà son caractère exotique. Comme la position d'un symbole peut varier de manière arbitrairement grande, on peut l'utiliser pour couvrir tous les entiers avec un nombre de fini de symboles et de règles d'assemblage de ces symboles.

Les sytèmes de numération à bases

À ce stade, il me semble intéressant de décortiquer notre système de numération usuel, pour voir à partir d'où on peut dévier. Les seuls systèmes de numération positionnels que j'ai rencontrés utilisent une base, et notre système habituel n'est que le cas particulier où cette base vaut dix.

Un système de numération en base b utilise b symboles, de valeur 0 à b-1 et la règle de combinaison qu'un symbole seul est un nombre qui vaut la valeur du symbole considéré, et ajouter un symboles à la suite d'un nombre forme un nombre qui vaut la somme de b fois le nombre initial et de la valeur du symbole ajouté.

Cela revient à décomposer les entiers en le produit cartésien de l'ensemble fini des symboles, et de l'ensemble infini {b^n pour tout entier n} représenté par la position.

Début de la construction du nouveau système

Je commence donc à poser les bases de mon nouveau système. Pour pouvoir représenter n'importe quel entier, il me faut avoir « de l'infini » quelque part, et comme j'empêche l'infini de venir de l'ensemble de symboles de base, je vais le faire venir de la position. Donc tout comme les systèmes de numération en base, je vais décomposer l'ensemble des entiers sur un ensemble infini qui sera représenté par la position.

Utiliser les puissances d'un nombre fixé comme ensemble infini est une méthode éprouvée, mais pas assez exotique à mon goût. Et un jour que j'étais à moitié en train de dormir devant un graphe à échelle logarithmique, une idée m'est venue : utiliser comme ensemble infini celui des nombres premiers.

En effet, n'importe quel nombre entier supérieur ou égal à 2 peut-être décomposé de manière unique, à l'ordre des facteurs près, en un produit de nombres premiers. À partir de là, il me suffit de considérer ma concaténation de symboles comme étant le produit des nombres entiers élevés à la puissance donnée par le symbole, le n-ième symbole étant l'exposant du n-ième nombre premier pour la relation d'ordre usuelle sur les entiers.

Premier problème et sa solution fractale

Cette idée d'utiliser les nombres premiers comme ensemble générateur présente un problème de taille, c'est que pour représenter tous les entiers, l'exposant de chaque nombre premier est un entier quelconque. Ce qui veut dire que je peux utiliser cette méthode pour représenter un entier quelconque, à condition de savoir déjà représenter un nombre entier quelconque, ce qui laisse une désagréable impression de ne pas avoir avancé.

Et pourtant, si. Qu'est-ce qui m'empêche de définir par récurrence mon système de numération ? J'ai défini par récurrence les systèmes en base, il ne doit donc pas y avoir de problème intrinsèque à la récurrence. Il faut juste faire attention à toujours arriver à un cas de base en un nombre fini d'étapes.

Donc je représente un nombre par une suite finie de nombres qui sont les exposants de la décomposition en facteurs premiers. Chacun de ces nombres est donc au pire de l'ordre du logarithme en base 2 du nombre initial. J'ai donc bien une décroissance stricte d'une étape à l'autre. Ensuite la conversion d'un nombre en une suite finie de nombres (une étape), dont chacun est soit supérieur ou égal à 2, et sera l'objet d'une étape suivante, soit 0 ou 1. Donc je n'ai besoin de symboles que pour 0 et 1, ce qui représente bien un nombre fini de symboles, et je finis toujours par aboutir à ces symboles.

Cependant, l'encodage de la position devient un peu compliqué, parce qu'il faut pouvoir différencier chaque niveau issu de chaque étape de récurrence. Ce qui veut dire qu'il faudrait être dans un espace de dimension au moins égale à la profondeur maximale de récurrence, qui peut être arbitrairement grande. Les physiciens théoriciens ont beau vouloir nous rajouter des dimensions, on est quand même limité de ce point de vue là, et au delà de la dimension 2 le papier devient difficilement utilisable ; et à moins de refaire toute la conception de l'informatique, si on veut une forme d'intelligence technologiquement décente (e.g. des extra-terrestres qui arrivent sur Terre) ça doit pouvoir rentrer dans une dimension 1.

Mais finalement, la représentation multidimensionnelle n'est pas vraiment nécessaire, il suffit de pouvoir déterminer où s'arrête un sous-symbole et où commence le suivant. Ce système de numération me semble donc parfaitement viable en dimension 1 en utilisant quatre symboles, 0, 1, ( et ).

Quelques exemples

Jusque là pour moi c'est clair, mais le lecteur ne maîtrise peut-être pas aussi bien que moi qui y pense depuis des mois, donc je vais lâcher quelques exemples, au cas où.

Premières propriétés

La première chose que l'on peut remarquer, c'est que c'est tellement plein de parenthèses que ç'en est presque lisp. En particulier, seuls 0 et 1 ne sont pas encadrés de parenthèses, donc on pourrait envisager d'ajouter un cinquième symbole, qui précèderait les symboles 0 et 1 pour indiquer qu'ils sont à prendre tels quels, et enlever la paire de parenthèses extérieure. Cela aurait en plus l'avantage d'être plus cohérent par rapport à ma description initiale (la position indiquant la puissance du nombre premier, et les parenthèses pour aller au niveau au dessus).

Un autre effet de ce parenthèsage est que toutes les combinaisons des quatre symboles de base ne sont pas des nombres corrects, il y a donc une forme de redondance. L'idée des parenthèses est la première que j'ai trouvée pour résoudre le problème, mais ce n'est pas forcément la meilleure. Par exemple, il est peut-être possible de s'en sortir avec seulement trois symboles, et faire disparaître la redondance. Il est également possible d'envisager résoudre le problème de la séparation des niveaux uniquement avec la position dans une deuxième dimension, ou bien encore plus exotique, par exemple un système du même style que les quipos avec un type de noeuds pour le 0, un autre pour le 1, et le nouage d'un autre brin pour représenter les niveaux.

Si on s'attaque à présent aux propriétés intrinsèques de ce système de numération, on voit que ce n'est pas la joie. Commençons par les opérations de base, l'addition et la soustraction. Ces opérations me semblent plutôt difficiles, et à ma connaissance ne sont pas possibles sans passer par un système de numération en base (mais il faudrait demander à un expert en théorie des nombres). Incrémentation, décrémentation, comparaison, même combat. Les opérations modulo n ne sont pas vraiment plus sympathiques.

On pourrait ce dire que c'est normal, dans la mesure où mon système de numération est moralement un logarithme d'un système de numération en base, donc l'addition c'est la lutte, mais la multiplication et l'exponentiation se passent bien. Mais en fait non, car en vrai elles se ramènent respectivement à l'addition et à la multiplication, c'est-à-dire au final à l'addition.

Bon, mais on doit quand même pouvoir en faire quelque chose, de ce système. Par exemple, on a la décomposition en facteurs premiers qui est donnée trivialement. Donc on a des critères sympas de divisibilité par un nombre premier, et même par un produit de nombres premiers distincts. Je pense (ou plutôt, j'espère) qu'un expert en théorie des nombres pourra trouver d'autres choses sympathiques que l'on peut faire avec ce système de numération.

Un point rigolo c'est que beaucoup de méthodes de cryptage actuelles sont basées sur la difficulté de factoriser des grands entiers, ce qui est trivial dans ce système exotique. Par contre un bête César ou XOR ont l'air monstrueux.

Mais alors, à quoi ça sert ?

Principalement, à casser la tête de ses joueurs/lecteurs, et pour ça, je pense que ça marche super-bien. Enfin, cet article publié, ça risque de marcher nettement moins bien, mais bon, je pourrais être assez vicieuse pour utiliser quand même une simple substitution d'alphabet.

Par contre, si on cherche une raison cohérente pour l'utilisation d'un tel système de numération, on risque d'avoir plus de mal. Ce système me semble être un bel exemple pour les créationnistes de « complexité irréductible ». Pour l'inventer il faut des notions de mathématiques assez poussées, que l'on risque d'avoir du mal à maîtriser sans pouvoir effectuer les opérations simples. Il me semble donc impossible qu'une quelconque forme d'intelligence puisse arriver à ça avec une évolution normale.

En revanche, on pourrait imaginer qu'un tel système soit développé par un peuple avancé mathématiquement qui prendrait la religion très au sérieux. Il faut être un dieu pour pouvoir utiliser couramment un tel système, donc c'est le système que les dieux utilisent. Genre on reste peinards avec notre système en base, et vous les dieux vous vous démerdez avec le système de numération de la mort qui tue et qui fait mourir.

Conclusion

Arrivés à ce point, la première conclusion que certains lecteurs pourraient tirer est « Rendez-moi ces dix minutes de ma vie ! », même si personnellement ce serait plutôt « Rendez-moi ces trois heures de ma vie ! » (passées à écrire ce texte)

Cependant malgré le côté pitoyable du résultat final, l'activité créatrice et la réflexion mathématique associée me semblent intéressantes, avec peut-être l'espoir de pouvoir améliorer cette idée en termes d'utilisabilité.

Commentaires

1. Le jeudi 10 juin 2010 à 12:01, par Stéphane Bortzmeyer :

Très très bien. Cela donne envie d'implémenter des opérations de conversion et et vers ce système. Il y a déjà du code existant ?

2. Le jeudi 10 juin 2010 à 21:30, par W :

J'adore ! J'avais une fois eu 1 ou 2 idées dans cette direction en rêvassant à la Conjecture de Syracuse, mais rien de sérieux. Ce qu'il faudrait savoir, c'est ce que les nombres qui ont une représentation de petite taille dans ta notation (ton système de numération) ont d'intéressant / en commun.

Il y a juste un truc que je ne trouve pas clair, en fait, c'est ton explications des systèmes de numération "à bases" (« décomposer les entiers en le produit cartésien [...] »). J'ai aussi des réserves sur l'utilisation du mot "fractale", j'aurais dit "solution récursive".

En tout cas, tu en as d'autres dans les cartons, des idées géniales qui datent d'avant ton ancien blog ?

Enfin, au sujet de ce qu'on lit sur ta page d'accueil : bravo, content pour toi.

3. Le vendredi 11 juin 2010 à 12:12, par Samuel Tardieu :

Stéphane : cela sera le cas à partir cet après-midi, car je donne ce problème (codage et décodage d'engramme) comme exercice de TD de Factor ([http://www.factorcode.org/]) aux élèves du cours de « Paradigmes et Langages Non Classiques » de Télécom.

Le sujet de TD apparaîtra à 13h30 ici : [http://www.rfc1149.net/plnc2010/2010/06/11/factor-td-1/].

4. Le vendredi 11 juin 2010 à 16:54, par Samuel Tardieu :

On peut supprimer le 1 en le remplaçant par (). En plus, ce n'est pas moins logique :)

5. Le samedi 12 juin 2010 à 12:57, par Jon :

Pour moi, 1 = 2^0 = (0) non ? On a alors pour les premiers nombres :
0
(0)
((0))
(0(0))
(((0)))
etc..

6. Le samedi 12 juin 2010 à 13:16, par Samuel Tardieu :

Jon : oui, mais on peut considérer que les engrammes bien formés ne terminent pas par un 0 avant la parenthèse fermante, c'est similaire à mettre des 0 inutiles avant un nombre décimal.

() == (0) == (0 0) == 2^0 * 3^0 * 5^0 * ...

Donc autant utiliser ().

7. Le dimanche 13 juin 2010 à 15:49, par Roman Age :

1=A, 2=B...

1 12 12 5 26 12 5 19 2 12 5 21 19

8. Le lundi 14 juin 2010 à 18:47, par Natacha :

Merci à tous pour ces commentaires, je ne m'attendais vraiment pas à ce que cet article soit aussi apprécier. Ça me fait sincèrement chaud au cœur.

Stéphane , j'avoue que ça ne m'a pas vraiment envie de faire des outils de conversion, et je n'ai jamais essayé d'en coder. Ce que j'aurais bien aimé faire avec ce système, ce sont des opérations internes, que le peuple fictif utilisant ce système aurait utilisé. Et j'avoue qu'en dehors de la décomposition en facteurs premiers, je ne vois aucune opération faisable sans conversion. J'ai surtout cherché du côté des opérations existantes, comme l'addition ou la multiplication évoquées dans l'article, mais je serais aussi contente si on m'exhibait un algorithme pour faire une opération spécialement construite sur ce système. Après tout, nos opérations usuelles sont peut-être aussi contingent que notre système en combinaisons linéaires de puissances d'une base, et un autre système de numération pourrait faire émerger d'autres opérations usuelles. Je n'ai cependant pas réussi à inventer d'opération facile dans ce système qui fasse des entiers naturels un monoïde. Quelqu'un a une idée ?

W , mon niveau en mathématique a l'air trop limité pour que j'arrive à déduire quoi que ce soit sur les nombres dont la représentation est courte dans ce système. Après l'échec de l'opération décrit ci-dessus, ça commence à faire beaucoup pour mon pauvre ego…

Effectivement, « récursive » est peut-être plus approprié que « fractale » pour qualifier cette solution. J'hésite cependant à le changer, je n'ai pour l'instant corrigé que des coquilles dans ce texte déjà ancien, et il y a un conflit entre l'intérêt d'améliorer la qualité du texte et celui de conserver la version historique. Je vais y réfléchir.

Je pensais que dans mes vieux vieux textes il n'y avait rien à sauver, et que la publication de celui-ci soit juste un gros flop parmi tant d'autres. Forte de ce succès, je vais voir s'il peut y avoir d'autres choses à republier parmi le peu (hélas) qui a survécu.

Samuel , je suis très flattée d'avoir pu servir ainsi d'inspiration. J'ai déjà dit que ça me fait très chaud au cœur, il faudrait que je varie mes expressions. C'est ce genre d'impressions qui me font oublier toutes les déceptions de l'entretien d'un site et qui me font continuer.

Samuel et Jon , c'est vrai que je pourrais me passer de 1 en autorisant les listes vides. Je trouve cependant que ça perd pas mal en lisibilité, il faudrait un autre caractère pour remplacer le zéro. Je vous avoue que ça ne m'était pas venu à l'idée toute seule, très bonne observation.

Roman Age , je ne sais pas si c'était volontaire, mais le fait qu'en HTML plusieurs espaces consécutives soient représentés de la même façon qu'une seule nuit à la lecture de ton message (auquel je ne peux malheureusement pas souscrire).

9. Le lundi 14 juin 2010 à 22:00, par un anonyme :

Chaque lettre est tout de même bien séparée, donc le fait qu'il faille séparer les mots rend juste le message à peine plus difficile à comprendre, aucune excuse. :-)

10. Le mardi 15 juin 2010 à 22:08, par _FrnchFrgg_ :

J'ai bien aimé cet article; au passage Nat j'ai souvent trouvé que tes divagations/interrogations/expériences étaient intéressantes, cet article n'est pas une exception à mon sens (et je me souviens avec nostalgie de nos soirées interminables à s'expliquer et réinventer la bio, les maths, l'algo, etc...).

Quelques remarques:

- Je ne pense pas que l'addition soit une opération qui nous semble naturelle à cause de notre système de numération; je pense plutôt que la création de la numération et du calcul répondent au départ à un besoin plus terre à terre de réguler et contrôler les échanges et le commerce par exemple; en ça il est d'autant moins probable qu'un système de numération émerge si ce genre d'opérations "de caisse-enregistreuse" n'en est pas un prérequis

- D'un autre côté, une civilisation avancée pourrait d'abord avoir utilisé une numération simple, puis ensuite avec de bien plus grandes connaissances maitriser une numération plus élaborée dans laquelle des raisonnements qui nous sont inaccessibles sont plus naturels (du moins pour des cerveaux capables d'effectuer de tête les "opérations simples")

- Imaginez un épisode de Stargate SG1 où ils trouvent le manuel d'un truc super important (réacteur au Naquada) laissé par une civilisation extraterrestre (disparue ou ayant juste déménagé, peu importe) très avancée, et dont les nombres sont écrits dans ce genre de numération (avec des jolis symboles genre ceux de la porte au lieu de ceux proposés ici). Combien de temps pensez-vous que Carter mettrait à trouver un sens à ça ? (Je sais que de toutes façons ça n'arriverait jamais dans un épisode de SG1 une numération si différente de la nôtre, déjà qu'ils ont du mal à imaginer que les extraterrestres puissent ne pas parler anglais :-) Moi je dis qu'elle ferait moins sa maligne...

11. Le mardi 15 juin 2010 à 22:26, par _FrnchFrgg_ :

Au passage, on doit pouvoir remplacer les parenthèses par des modifications de hauteur, façon "puissances", avec quelques adaptations pour pouvoir gérer les imbrications genre (((1))) != ((1))

Peut-être avec des traits horizontaux pour représenter une profondeur de plus, genre (i = peut apparaître sur plusieurs lignes pour préserver tant que possible l'alignement)

0 = x
1 = o
2 = o
2 = -
3 = xo
3 = -- (supposons que ce soit un trait continu)
4 = o
4 = -
4 = -
1980 = o o
1980 = - - oxo (ici pas continu)
1980 = ------- (ici continu)

Ça reste le même principe, mais ça fait plus "pierre de rosette", et puis j'aime bien l'idée d'utiliser encore plus de positionnel. Certes, ça ne remplit pas le cahier des charges d'une écriture linéaire, mais d'un autre côté nos équations non plus et pourtant on préfère utiliser la version 2D que la version 1D (imaginez lire directement du TeX ou du MathML...)

Je me demande si on pourrait retirer encore un symbole... Si ça se trouve, en remplaçant les espaces par des trais verticaux (qu'on relierait aux trais horizontaux en dessous), on peut réussir à encoder le 1 comme deux trais verticaux qui se suivent, et donc se retrouver avec une sorte d'hybride entre un peigne et un jeu de morpion (avec uniquement des x) qui représenterait un chiffre; ensuite remplacer les "cases" avec x par des "cases" fermées au dessus par un trait horizontal et on n'a plus qu'une grille de hauteur plus ou moins irrégulière. Je trouve ça assez joli comme idée, et ça me fait penser aux nouveaux "codes barres en carré"; ça serait compacte et une telle complexité dans le graphisme d'un nombre témoignerait manifestement d'une superiorité de l'espèce qui l'a inventé :)

12. Le mercredi 16 juin 2010 à 22:36, par Natacha :

Si je prends ton principe, comme 1 n'a pas besoin d'être un symbole dédié en le représentant par une liste vide, ça fait qu'on peut remplacer tes « o » par des petits traits horizontaux. Il n'y aurait donc plus que des traits horizontaux et des x.

En poussant un peu plus loin, on se rend compte que tu coup un trait horizontal marque un niveau de profondeur supplémentaire, et que « x » ne fait que servir de bouche-trous. On pourrait donc se passer de « x » en utilisant à la place un symbole qui marque le rang suivant dans la suite des nombres de premiers, de manière homologue au trait horizontal : le trait vertical. On aurait donc une jolie grille.

En fait je suis restée sur le concept du bouche-trous, en utilisant un trait vertical. Ainsi chaque rang est soit un trait vertical pour « 0 », soit un trait horizontal surmonté du nécessaire pour désigner un nombre, ce nécessaire pouvant ne rien être du tout pour marquer implicitement un zéro.

On obtient ainsi les représentations suivantes pour les 50 permiers entiers naturels [http://instinctive.eu/articles/exotique-1.png].

Des avis ?

13. Le mercredi 16 juin 2010 à 23:20, par W :

En fait faire de "tes" nombres un monoïde, ce n'est pas très difficile, si on n'est pas exigeant sur l'intérêt de la loi de composition interne.

Pas exemple, on peut adapter la concaténation des chaînes de caractères : (abcd).(efg) = (abcdefg), avec 1=() et 0 élément absorbant ; on a alors 1 comme élément neutre.

On peut aussi définir une relation d'ordre "lexicographico-récursive" sur le modèle de celle qu'on connaît :
(a_0 ... a_n) < (b_0 ... b_p) SSI
  n < p OU
    n = p ET (a_n < b_n OU
      a_n = b_n ET (a_{n-1} < b_{n-1} OU
        ...)).
On définit alors l'opération max, et on a un monoïde commutatif, avec 0 comme élément neutre.
Notons que l'ensemble des nombres n'est alors PAS bien fondé : pour tout x ≥ (01), il existe une infinité de y (les puissances de 2) tq y < x.

Moi, ce qui dérange mon pauvre égo, c'est que je n'ai absolument rien compris à l'idée de _FrnchFrgg_. Il faudra que je la relise à tête reposée.

Par contre et par ailleurs, comme il le fait remarquer, "un gros flop parmi tant d'autres" > nieh ?

14. Le mercredi 16 juin 2010 à 23:26, par W :

Ça y est, j'ai compris l'idée de _FrnchFrgg_, comme quoi l'état "à tête reposée" est particulièrement fluctuant.

15. Le mercredi 16 juin 2010 à 23:44, par W :

La représentation exotique-1.png est très classe, ça devient vraiment ésotérique. Par contre je pense que ce serait plus lisible si un trait vertical ne touchait pas (le cas échéant) le trait horizontal en dessous de lui.

16. Le samedi 19 juin 2010 à 23:39, par W :

Nouvelles opérations : en se basant sur une fonction booléenne f, on définit "f bit à bit" ainsi :
F(0,0) := 0
F(x,0) [x != 0] := SI f(1,0) = 1 ALORS x SINON 0
F(0,y) [y != 0] := SI f(0,1) = 1 ALORS y SINON 0
F((x1 ... xn), (y1 ... yn)) := (F(x1,y1) ... F(xn,yn))

Les opérateurs ET et OU, qui vérifient f(0,0)=0 et f(1,1)=1, s'y prêtent bien. Il semble qu'on récupère alors les bonnes propriétés de la fonction booléenne, du genre :
- ET bit à bit, ou "plus grand commun sous-nombre" : associatif et commutatif, pas d'élément neutre (0 absorbant)
- OU bit à bit, ou "plus petit commun sur-nombre" : associatif et commutatif, élément neutre 0 (monoïde)

17. Le jeudi 24 juin 2010 à 18:51, par Natacha :

Pour le trait qui touche la ligne, c'est parce que je voulais initialement faire quelque chose qui ressemblait beaucoup plus à une grille (sur l'idée de _FrnchFrgg_), et je voulais avoir des caractères connexes. Bon je me suis ensuite rendue compte que ça ne marchait pas…

… d'où mon deuxième essai [http://instinctive.eu/articles/exotique-2.png]. Le principe est exactement le même, sauf qu'au lieu d'utiliser la barre verticale comme un zéro, il s'agit bien cette fois-ci d'un séparateur de rang : on commence avec une barre verticale, puis on met l'exposant de 2, barre verticale, exposant de 3, etc.

La petite chose en plus dans ce deuxième essai, c'est le « RLE » des zéros. Même en ayant très peu utilisé la première représentation (j'ai juste fait l'image PNG), je me suis rendue compte qu'il y a énormément de zéros consécutifs. Du coup au lieu d'encoder 47 avec quatroze rangs vides suivi d'un 1, il est encodé avec l'encodage de 14 inversé et posé sous la ligne de base, suivi du 1. La représentation est ainsi nettement plus compacte : je n'ai pas eu besoin de plus de cinq cases de large, alors qu'il en aurait fallu quinze sans RLE.

La question que je me pose maintenant, c'est si cet encodage est vraiment réversible et non-ambigu. J'ai l'intuition qu'il peut y avoir un problème, mais je n'arrive pas à exhiber d'ambigüité ni à me convaincre que ça marche vraiment. Si quelqu'un pouvait m'aider à résoudre cette question, je lui en serais extrêment reconnaissante. Les pistes que j'ai trouvées jusqu'à présent sont l'importance de reconnaître la ligne de base dans un engramme ou dans un sous-engramme, et que cette ligne de base fait toute la largeur du numbre qu'elle représente, qu'il n'y a jamais simultanément de ligne horizontale au dessus et en dessous d'elle, et qu'il n'y a jamais de ligne en dessous (dans le sens direct) d'elle à droite. De plus, il n'y a jamais deux sous-engrammes consécutifs en dessus. Et je n'arrive pas à démontrer plus avant pour arriver à une conclusion.

Accessoirement, j'ai trouvé une erreur dans ma première image, si ça amuse quelqu'un de la chercher… :-)

Sinon pour le look général, j'ai tendance à préférer le premier essai au deuxième, mais je n'arrive pas à mettre le doigt sur le pourquoi. En particulier, si ce pourquoi est plus sur le côté « grille » et/ou sur le côté « RLE »…

Là il commence à y avoir du codage amusant même en restant au stade de l'encodage et du décodage. Surtout sur la deuxième version. On est loin de mes lisperies ;-)

Et si je ne suis pas très fan de ta première proposition d'opération, à base de concaténation, j'aime beaucoup ta deuxième proposition, surtout en mode OU. Maintenant il faut voir si on arrive à en faire quelque chose plus avant.

18. Le dimanche 27 juin 2010 à 15:54, par W :

Je pense que dans l'absolu il n'y a pas d'ambiguïté.
La ligne de base fait toute la largeur de l'engramme, ce qui n'est le cas d'aucune des lignes en-dessous d'elle. Elle est donc bien définie comme la plus basse ligne maximale.
Ce qui est au-dessus est assez clairement non ambigu, et ce qui est en-dessous (les sous-engrammes) est parenthésé par ce qui est au-dessus : on conclut par induction structurelle.

Cette seconde représentation semble ambigüe parce qu'il saute aux yeux qu'elle n'est pas faite pour être lue par un humain, un peu comme un code barres par exemple. Même si elle est très jolie, contrairement à la première version qui était plus lisible. Là comme ça je ne vois pas comment gagner en lisibilité tout en gardant la connexité.
Notons que dans la seconde représentation, la lecture devient dépendante de l'orientation du nombre (voir 12 et 18, par exemple), ce qui n'était pas un problème dans la première représentation.

19. Le dimanche 27 juin 2010 à 16:10, par W :

J'ai encore parlé avant de réfléchir. Il y a bien une perte d'information quand on encastre un sous-engramme dans un plus gros engramme.
Ainsi, le 11e et le 31e nombre premier (respectivement 31 et <osef>) ont des représentation assez semblables, et je crois que quand on les utilise comme sous-engrammes, la différence se réduit comme peau de chagrin. Non ?

20. Le mardi 6 juillet 2010 à 18:15, par Natacha :

En fait, même si la différence entre le 11ème et le 31ème nombre premier (respectivement 31 et 127) se réduit bien « comme une peau de chagrin », il n'y a pas encore d'ambiguïté, parce que les nombres utilisé pour le RLE sont inversé verticalement. La représentation de 127 aurait donc un trait continu tout en bas là où 31 a deux traits séparés d'une case vide.

Par contre, il suffit de faire une inversion de plus pour que les choses se passent vraiment mal : le 32ème et le 128ème nombre premier (respectivement 131 et 719) ont la même représentation, parce que la ligne la plus basse du nombre RLE se confond avec la ligne de base du nombre considéré.

Cela suffit à rendre le système inutilisable à mes yeux. J'ai derrière la tête une troisième idée, que je mettrai en application dès que j'en trouve le temps.

21. Le mardi 6 juillet 2010 à 22:51, par W :

§1-2 > C'est ce que je voulais dire.

Si tu veux savoir, j'allais te suggérer de ne pas inverser les sous-engrammes, pour éclaircir un peu les engrammes et les rendre plus lisibles. Je me suis rendu compte que ce serait (tel quel) ambigu, et, seulement après avoir validé mon premier commentaire, que ta représentation avait en fait le même problème.

22. Le samedi 31 juillet 2010 à 4:17, par Petremann Yoann :

Bonjour, j'ai actuelement 20 ans, et cela fait un peu plus de 10 ans que je voit ce que tu dit :

J'utilise un systeme de numeration non-basé et infini, ayant ses propres fonctions mathematiques, et ne pouvant faire qu'une chose ... s'elargir

Comme par hazard ce systeme de numeration est pour moi une inspiration de mes "dieux"(dont je fait parti), leur nom c'est Dei'siens ( A ma signification, Soit dieu ( parce qu'etre dieu, c'est pouvoir gerer l'immensité de notre univers, et donc de ce que notre imagination peut voir, or eux comme moi la-bas, l'imagination n'a meme plus de limite ...))

Je compte mettre un exemple de ces mathematiques sur mon site
(excusez-moi pour la pub)

23. Le vendredi 16 janvier 2015 à 20:02, par Ming WANG :

La conversion (numérotation décimale -> numérotation imaginaire de ce blog) peut être un joli exercice adressé à des collégiens, qui apprendraient la décomposition des nombres en facteurs premiers. Mais bon ... les petits la voient dans le cadre des simplification de fractions ... et cette écriture a peu de chance d'aider :)

Poster un commentaire

Mise en forme historique : pour mettre en valeur un mot ou un groupe de mot, tapez une étoile de part et d'autre, sans mettre d'espace entre l'étoile et le mot, comme ceci : *mise en valeur*. Pour insérer un lien, mettez le entre crochets, comme ceci : [http://instinctive.eu/].

Mise en forme markdown : voir le guide détaillé, en résumé c'est le Markdown traditionnel, sans HTML ni titres, mais avec les tables PHP-Markdown-Extra.

Attention : les balises HTML entrées dans les commentaires seront affichées telles quelles, et non pas interprétées.

Autour de cette page

 

Autour de cet article

  • Publié originalement le 13 décembre 2005
  • Publié originalement le 13 décembre 2005 à 1h00
  • Republié ici le 9 juin 2010 à 22h34
  • Dernière modification le 10 juin 2010 à 22h12
  • 24 commentaire(s)

Site-level navigation and features

 

Instinctive.eu

Contact

Sections

Validation

Copyright © 2008-2024 Natacha Kerensikova

Butterfly images are copyright © 2008 Shoofly