Arbres de calcul

On veut évaluer l'expression (5+1)2. Pour cela on peut la considérer, soit comme (5+1)×(5+1), soit comme la forme développée 52+2×5+1.

I/ Forme factorisée

Comme un carré est un produit, l'arbre syntaxique a pour racine le symbole * qui désigne la multiplication :

%3 r * g + r->g d + r->d x 5 g->x y 1 g->y z 5 d->z t 1 d->t

Comme on le voit ci-dessus, les expressions déjà évaluées (les nombres) sont en forme de rectangle, les cercles étant réservés aux opérations.

1) Première simplification

La première somme porte sur deux opérandes (5 et 1) et on peut la remplacer par la somme des deux opérandes, ce qui modifie la forme du sommet (c'est un nombre, pas une opération, donc on le met en rectangle) :

%3 r * g 6 r->g d + r->d z 5 d->z t 1 d->t

2) Seconde simplification

On fait pareil pour la seconde somme :

%3 r * g 6 r->g d 6 r->d

3) fin du calcul

On n'a plus qu'un produit à calculer (celui de 6 et 6) donc on effectue ce produit pour finir d'évaluer l'expression :

%3 r 36

II/ Forme développée

L'arbre de l'expression développée 52+2×5+1 est a priori un arbre ternaire puisque la somme comporte trois termes. Mais on peut le ramener à un arbre binaire avec (5*5) + (2*5+1) :

%3 r + g * r->g d + r->d e 5 g->e f 5 g->f h * d->h i 1 d->i j 2 h->j k 5 h->k

1) Première simplification

Le produit partiel le plus bas dans l'arbre est 2×5, on peut donc déjà effectuer ce calcul :

%3 r + g * r->g d + r->d e 5 g->e f 5 g->f h 10 d->h i 1 d->i

2) Seconde simplification

Ensuite on peut effectuer l'autre produit :

%3 r + g 25 r->g d + r->d h 10 d->h i 1 d->i

3) Troisième simplification

Puis une des additions :

%3 r + g 25 r->g d 11 r->d

4) Fin du calcul

Finalement en exécutant l'addition 25+11 on obtient

%3 r 36

soit le même résultat qu'avec l'autre méthode. Ceci veut dire que 52+2×5+1 = (5+1)2.

III/ Comparaison entre les méthodes

Le premier arbre de calcul nécessitait une multiplication et deux additions, le second nécessitait deux multiplications et deux additions. Comme il faut en général nettement plus de temps pour effectuer une multiplication qu'une addition, on peut se demander quel est l'intérêt de la seconde méthode.

1) Avec une racine carrée

Si au lieu de 5 on a √5 la première méthode ne peut donner qu'une valeur approchée et non exacte : le calcul de √5+1 ne donne rien d'autre qu'une valeur approchée, et ensuite on élève au carré une valeur approchée ce qui ne peut donner qu'une valeur approchée.

La seconde méthode par contre donne pour le premier produit, √5×√5 = 5 qui est exact. Le calcul se termine alors par 5+2×√5+1 = 6+2√5. Les calculatrices récentes des marques Ti, Casio, hp et Numworks font cela. On appelle cela le calcul exact. Citons cet article d'Émilie Feral :

Lorsque l’on tape un calcul, celui-ci est analysé puis stocké sous forme d’arbre.

Or, écrire l'arbre sous forme développée, permet d'obtenir la valeur exacte s'il y a des racines carrées.

Il semble donc que la calculatrice Numworks transforme les expressions en les développant pour ensuite faciliter le calcul s'il y a besoin de la valeur exacte. Mais pas toujours :

2) Avec l'infini

a) +∞

Si, au lieu de 5, on a ,

b) -∞

Si, au lieu de 5 on a -∞, par contre,

La forme développée n'est donc pas toujours la meilleure.

3) Avec une variable indéterminée

Autrefois, avec la Numworks, lorsque la variable x n'était pas affectée, le calcul de (x+1)2 donnait x2+2×x+1. Ceci a été rétabli sur le firmware tiers omega puis sur son descendant khi.

IV/ Effet de la curryfication sur les arbres

La curryfication consiste à ne pas regarder l'opération comme portant sur deux opérandes mais comme une fonction. Par exemple sur l'arbre de la multiplication 6×6 :

%3 r * g 6 r->g d 6 r->d

On regarde la partie coloriée comme un tout (une fonction à appliquer au reste de l'arbre) :

%3 r * g 6 r->g d 6 r->d

La partie coloriée (multiplier par 6 le reste de l'arbre) correspond au mot sextuple et donc la curryfication donne « le sextuple de 6 ». On peut donc dire que la curryfication aplanit les arbres de calcul, en les rendant linéaires.

Cela se voit mieux avec un parcours suffixe de l'arbre, où on peut effectuer des regroupements que la curryfication rend visibles.

Les exemples suivants sont écrits dans le langage de programmation Postscript qui est basé sur la notation polonaise inverse (lecture suffixe des expressions)

1) Définition du carré

Pour simplifier les notations par la suite, on définit une fonction carré qui élève un nombre au carré. Pour cela, on duplique (dup) le nombre puis on effectue une multiplication (mul) ce qui a bien pour effet de multiplier le nombre par lui-même, c'est-à-dire de l'élever au carré :

/aucarré { dup mul } def

2) Version factorisée

Alors (5+1)×(5+1) = (5+1)2 s'écrit ainsi en Postscript 

5 1 add aucarré

La curryfication isole une partie :

5 1 add aucarré

Il est d'ailleurs possible de nommer la partie surlignée :

/successeur { 1 add } def

Alors l'expression devient plus simple :

5 successeur aucarré

Le carré du successeur de 5 : la structure linéaire (et non arborescente) est devenue flagrante.

3) Version développée

Pour la version développée 52+2×5+1, c'est plus compliqué, ne serait-ce que parce que le nombre 5 intervient plusieurs fois (élevé au carré, puis plus tard multiplié par 2). on doit donc le dupliquer (dup), puis après avoir élevé au carré une des deux copies, échanger (exch) celles-ci pour opérer sur celui des deux 5 qui n'a pas été élevé au carré, et ensuite multiplier (mul) cette copie par 2, puis additionner (add) 1, et enfin additionner le tout :

5 dup aucarré exch 2 mul 1 add add

Mail là aussi, la curryfication aide à isoler des fonctions (d'arité 1) :

5 dup aucarré exch 2 mul 1 add add

En fait il n'y avait pas besoin d'aplanir l'arbre par une lecture suffixe, pour isoler ces fonctions :

%3 r + g * r->g d + r->d e 5 g->e f 5 g->f h * d->h i 1 d->i j 2 h->j k 5 h->k

Et là encore, les nommer permet de mieux décrire l'expression développée :

/double { 2 mul } def

/successeur { 1 add } def

L'expression devient alors

5 dup aucarré exch double successeur add

Le carré de 5, additionné avec le successeur de son double.