Tarek Mokhtari
← Tous les projets

Séance piano

Une méthode d'apprentissage que j'ai inventée sur papier, au crayon, bien avant toute IA : un parcours d'arbre avec fusion binaire ascendante, pour que tout le morceau soit consolidé en blocs de plus en plus gros et joué le même nombre de fois. Formalisée, elle s'est révélée avoir une structure mathématique à elle. 12 951 cas vérifiés par script.A learning method I invented on paper, in pencil, long before any AI: a tree traversal with ascending binary merge, so the whole piece gets consolidated in ever-larger blocks and every bar is played the same number of times. Formalised, it turned out to have a mathematical structure of its own. 12,951 cases checked by script.

J'avais inventé un compteur binaire sans le savoir ; il a fallu le formaliser pour le voir.I had invented a binary counter without knowing it; it took formalising it to see it.
12 951 cas vérifiés par script · chaque mesure jouée 22 fois · 199 tests du moteur Ouvrir le lab ↗

Comment ça marche

Je l'ai inventée au crayon, sur mes partitions, avant d'en faire une app. Le morceau est découpé en cellules, les feuilles d'un arbre binaire. On les apprend dans l'ordre, et deux blocs voisins de même taille fusionnent : 1, 2, puis 1-2 ; 3, 4, 3-4, puis 1-4. Chaque étape se valide par une série sans faute : 7 fois de suite pour une mesure, 5 pour deux, 4 pour quatre, 3 au-delà. Un raté remet la série à zéro ; un passage difficile se répète donc de lui-même plus souvent, sans qu'il faille le surpondérer.

Mes bâtons sont un compteur binaire

Chaque étape finie s'écrit d'un bâton, au crayon, sur la dernière mesure du passage. Pour savoir quoi jouer ensuite, je reviens en arrière jusqu'à la première mesure qui porte au moins autant de bâtons que la dernière : autant, les deux blocs fusionnent ; plus, c'est un mur, et j'attaque une nouvelle mesure. Au bout du morceau, quand plus rien ne fusionne, le dernier bloc « monte » : il se rejoue un étage plus haut, jusqu'au mur infini placé avant la première mesure.

Formalisée, la règle s'est révélée être un compteur binaire : apprendre une mesure, c'est ajouter 1 ; fusionner, c'est la retenue. Le papier suffit donc : à tout instant, les bâtons seuls disent quels blocs sont ouverts et quelle est l'étape suivante, et deux instants n'ont jamais la même feuille. C'est démontré, puis vérifié par script sur 12 951 morceaux et découpes en sections. Et la règle tient sa promesse : chaque mesure est jouée autant que les autres, 22 fois pour un morceau de 12 mesures, chaque étage couvrant le morceau entier, découpé deux fois plus gros qu'à l'étage d'avant.

Les sections, comme des ordinaux

Un vrai morceau a des sections, séparées par des doubles barres. J'ai proposé d'appliquer la même règle aux sections elles-mêmes : la dernière mesure d'une section porte ω + n, où n joue le rôle habituel des bâtons, le mur du début vaut ω², et des sous-sections s'emboîtent comme des poupées russes. En code, il suffit de la même règle sur des tuples, comparés dans l'ordre lexicographique. Ce sont les ordinaux de Cantor : sous ω^ω, leur ordre est exactement l'ordre lexicographique de ces tuples. Le moteur de l'app l'applique tel quel, sur des couples (rang, bâtons), comme l'un des deux ordres de sections qu'il propose.

Descendre, puis remonter l'échelle

Deux ratés de suite sur un grand passage, et l'app propose de descendre. On touche la portée, on zoome jusqu'à la mesure fautive, et on la retravaille seule, sept fois. Puis on remonte l'échelle, un échelon par étage, chacun joué une seule fois (ici 3-4), avant que 1-4 reprenne, sa série à zéro. Le chemin du zoom est lui aussi écrit sur la partition : la moitié gauche d'un bloc finit à sa mesure la plus bâtonnée. Le lab s'ouvre au milieu d'une telle remontée, sur un morceau d'essai de 12 mesures.

Autour, une app de pupitre : une seule consigne à la fois, et un moteur qui ne garde pas d'état mais un journal de ce qui a été joué ; il le rejoue pour reprendre exactement là où l'on s'était arrêté, sans qu'aucune donnée quitte le téléphone.

I invented it in pencil, on my scores, before turning it into an app. The piece is cut into cells, the leaves of a binary tree. You learn them in order, and two neighbouring blocks of the same size merge: 1, 2, then 1-2; 3, 4, 3-4, then 1-4. Each step is validated by a flawless run: 7 times in a row for one bar, 5 for two, 4 for four, 3 beyond that. A slip resets the run to zero, so a hard passage gets repeated more often on its own, with no need to weight it.

My tally marks are a binary counter

Each finished step is written as one pencil mark on the last bar of the passage. To know what to play next, I go back to the first bar carrying at least as many marks as the last one: as many, the two blocks merge; more, it is a wall, and I start a new bar. At the end of the piece, when nothing merges any more, the last block “climbs”: it is played again one floor higher, up to the infinite wall placed before the first bar.

Formalised, the rule turned out to be a binary counter: learning a bar adds 1; merging is the carry. So the paper is enough: at every moment the marks alone say which blocks are open and what the next step is, and no two moments ever share the same sheet. It is proven, then checked by script on 12,951 pieces and section layouts. And the rule keeps its promise: every bar is played as often as the others, 22 times for a 12-bar piece, each floor covering the whole piece, cut twice as large as on the floor below.

Sections as ordinals

A real piece has sections, separated by double bar lines. I suggested applying the same rule to the sections themselves: the last bar of a section carries ω + n, where n plays the usual role of the marks, the opening wall is ω², and subsections nest like Russian dolls. In code, the same rule on tuples, compared in lexicographic order, is all it takes. These are Cantor's ordinals: below ω^ω, their order is exactly the lexicographic order of those tuples. The app's engine applies it as is, on (rank, marks) pairs, as one of the two section orders it offers.

Going down, then climbing back up the ladder

Two slips in a row on a long passage, and the app offers to go down. You touch the staff, zoom down to the faulty bar, and work on it alone, seven times. Then you climb back up the ladder, one rung per floor, each played only once (here 3-4), before 1-4 resumes, its run back to zero. The zoom path is written on the score too: the left half of a block ends at its most-marked bar. The lab opens in the middle of such a climb, on a 12-bar test piece.

Around it, an app for the music stand: one instruction at a time, and an engine that keeps no state but a log of what was played; it replays the log to resume exactly where you stopped, without any data leaving the phone.

Ce que j'écris : la règle « monter » appliquée aux sections elles-mêmes, ω + n en fin de section, ω² pour le mur du début, des poupées russes, et en code la même règle sur des tuples, en ordre lexicographique.What I write: the “climb” rule applied to the sections themselves, ω + n at the end of a section, ω² for the opening wall, Russian dolls, and in code the same rule on tuples, in lexicographic order.
La réponse : ce sont les ordinaux de Cantor plutôt que les surréels de Conway, et sous ω^ω leur ordre est exactement l'ordre lexicographique de mes tuples ; reste à décider ce que vaut n.The reply: these are Cantor's ordinals rather than Conway's surreals, and below ω^ω their order is exactly the lexicographic order of my tuples; what remains is to decide what n stands for.
La preuve, dans la spécification de la méthode : mes bâtons comptent en binaire, et le papier seul dit à tout instant où l'on en est, vérifié de 1 à 64 mesures et sur 12 887 découpes en sections.The proof, in the method's specification: my tally marks count in binary, and the paper alone says at every moment where you are, checked from 1 to 64 bars and on 12,887 section layouts.
La montagne de mes bâtons, en texte brut : une colonne par étape, et, en dernière ligne, chaque mesure du morceau d'essai jouée 22 fois.The mountain of my tally marks, in plain text: one column per step, and, on the last line, every bar of the test piece played 22 times.
La même montagne dans l'app : ce qui est su se dore, et un repère dit « on en est là ».The same mountain in the app: what is learned turns gold, and a marker says “we are here”.
La feuille de l'app : mes bâtons tels que je les écris sur la partition, d'où se lit l'étape suivante.The app's sheet: my tally marks as I write them on the score, from which the next step can be read.

Ce que j'en ai tiré

Le cœur est un parcours systématique du morceau, qu'on peut écrire au crayon sur n'importe quelle partition numérotée, et que l'app ne fait que dérouler. Trois choix de conception règlent l'expérience : une seule chose à la fois (l'écran ne montre jamais l'arbre entier pendant qu'on joue) ; la mémoire est dans l'app, pas dans la tête ; compter ou ne pas compter — deux versions de l'écran ont été construites pour trancher la question, l'une comptait chaque répétition, l'autre demandait seulement « c'est su », et l'écran final mélange les deux.

Un objet connu, un chemin optimal prouvé, un compteur caché : trente ans de piano et une formation de mathématicien se sont rencontrés dans une méthode que j'utilise tous les jours.

The heart is a systematic traversal of the piece, which can be written in pencil on any numbered score, and which the app merely unrolls. Three design choices shape the experience: one thing at a time (the screen never shows the whole tree while you play); the memory is in the app, not in your head; to count or not to count — two versions of the screen were built to settle the question, one counted every repetition, the other only asked “got it”, and the final screen blends the two.

A known object, a proven optimal path, a hidden counter: thirty years of piano and a mathematician's training met in a method I use every day.

Et ensuite

199tests du moteur6passes essayées au piano12 951cas vérifiés par script6morceaux gravés par l'encrier

L'app vit encore dans mon atelier ; la prochaine étape est de la sortir dans son propre dépôt, avec l'encrier branché. Ensuite viennent cinq pianistes amateurs, puis, s'ils restent, les comptes, la synchronisation et un abonnement.

199engine tests6rounds tried at the piano12,951cases checked by script6pieces engraved by the inkwell

The app still lives in my workshop; the next step is to move it into its own repository, with the inkwell plugged in. Then come five amateur pianists, and, if they stay, accounts, sync and a subscription.