Les mathématiques sont comparables à un jeu de construction où chaque étape peut être validé par un procédé mécanique. Et la construction constituant l'invention, il est inutile de s'éfforcer à inventer ce qui l'est déja si ce n'est par d'autres voies pour dévoiler des analogies et accroitre l'intéropérabilités. Cela a pour conséquence une autre façon collective de travailler, basée non pas sur la concurrence mais sur la juxtaposition des constructions à un édifice commun. Chaque construction, aussi savante soit-elle, pouvant être appréhendée étape par étape, sans connaissance préalable, est de faite, rendu à la propriété de tous. Elle ne peut faire l'objet d'une rétention d'information, la construction une fois achevée étant le véhicule même de la connaissance exacte.
L'objet de cet essai est de construire en même temps une mathématique et les algorithmes permettant d'atteindre les objets qu'elle définit, de fonder les mathématiques par les algorithmes et de l'expérimenter en implémentant ces algorithmes de façon efficace.
Vous vous demandez sans doute pourquoi vouloir implémenter les algorithmes, et de façons efficaces. Ce n'est pas pour des raisons utilitaires mais plutôt pour concrétiser et démocratiser la création mathématique en la rendant palpable, fonctionnelle et transmissible à l'infini par simple duplication. Il nous faut stimuler le désire de création, sans lequel aucun travail intellectuel, aucune recherche saine ne pourrait avancer.
On ne peut pas construire une mathématique à partir de rien. L'opportunité de telle structure ou de telle propriété est décidée par l'ensemble des connaissances, conscientes ou non, que nous possédons sur la pensé et sur le monde. Si nous construisions un édifice en faisant table rase du présent et du passé. Cet édifice serait un jeu inopportun, ou finirait par être opportun, mais pour des raisons portées par les connaissances subliminales collectives, dont nous n'avons pas conscience, et que nous ne serions pas capables d'ignorer. Somme toute, un travail à l'aveugle, pour produire une sorte d'oracle, ou une technicité… qui ne saurait être émancipatrice. Libérer la pensé reste un des buts essentiels des mathématiques.
La première connaissance qui nous paraît nécessaire est le langage formel et la logique formelle. Car tout problème soumis à notre analyse se ramène à des problèmes élémentaires transcrits dans un langage simple et obéissant à une logique triviale. Sur ces deux points, les fondements des mathématiques coïncident avec ceux de l'informatique.
Avant même de concevoir toute structure algébrique, il est nécessaire de construire l'algèbre de Bool d'un point de vu constructif, de construire les langages formels, et de construire l'anneau des entiers, une composante difficilement contournable des langages formels. Pour l'algèbre de Bool, plusieurs structures permettent de résoudre les équations booléennes, tel que `(Z"/"2Z,+,**)[x_0,x_1,x_2,…]`, l'anneau des polynômes à plusieurs variables booléennes, ainsi que la structure composée des parties de `{x_0,x_1,x_2,…}` et des deux opérations que sont l'union (`"et"`) et l'intersection (`"ou"`). Nous avons quelques connaissances sur ces structures, et elles sont à la base de notre mathématique. Construire l'algèbre de Bool de façon constructive signifit donner des algorithmes efficaces résolvant les équations dans cette algèbre. Construire les langages formels de façon constructive consiste à donner les algorithmes efficaces de reconnaissance du langage formel qui sont utilisés dans les compilateurs par exemple. Construire l'anneau des entiers de façon constructive signifit, donner des algorithmes efficaces résolvant les équations dans cet anneau.
L'efficacité influe sur l'opportunité des structures. Elle comprend deux parties, l'une indépendante de la technologie qu'est la complexité de l'algorithme, l'autre indépendante de l'algorithme qu'est la puissance de calcule que peut nous accorder la technologie actuelle.
La construction sera informatique. Cela permet de mettre en œuvre les algorithmes immédiatement et de rendre les mathématiques moins ingrates. Aussi, un des buts recherchés sera d'établir des normes de programmation. Chaque avancé significative étant nécessairement collective. Cela nécessite un langage commun, des signes communs, qui peuvent être considérés comme une norme. L'avantage d'adopter une norme est d'en démocratiser son évolution par son usage.
Cette construction se traduira par la création d'un nouveau langage de programmation et de structure de données, ainsi qu'une nouvelle façon de les implémenter.
Comment consolider et formaliser par l'intermédiaire d'un langage commun, l'ensemble des connaissances mathématiques sans introduire des cloisonnements réducteurs ? En effet ce qui caractérise une connaissance mathématique est son haut degré d'interopérabilité. Et comment implémenter un tel langage de façon efficace ? Car la pertinence d'un langage informatique tient en grande partie dans l'efficacité de son implémentation. Les circonstances actuelles plaident en faveur de l'apparition de tels langages, de la même façon que les langages Java et XML se sont développés. L'enjeu est qu'ils soient basés sur des normes publiques non-propriétaires pour en assurer leur démocratisation.
Pour mettre en oeuvre un nouveau langage, il nous faut programmer dans un premier temps, un interpréteur dans un langage proche de la machine, et il nous faut programmer les opérations informatiques jugées fondamentales.
Mais un préalable est nécessaire si nous voulons appliquer notre adage et faire de notre essai une construction achevée, appréhendable étape par étape sans connaissance préalable. Il nous faux décrire ce qu'est un ordinateur, ce qu'est une mémoire, ce qu'est un processeur, ce que fait le système d'exploitation UNIX, ce qu'est un processus, et ce qu'est un programme. Et cela nous sera utile pour mieux apprehender quels sont les opérations informatiques fondamentales que nous devrons préalablement programmer. Voir le chapitre 20-L'ordinateur.
Puis il nous faut connaître les bases de la programmation objet en C++. Voir le chapitre 21- La programmation en C++.
Puis il nous faut prendre du recul et reposer les questions premières sur la construction informatique. Voir le chapitre 22- Structure informatique par le bas.
Chapitre suivant : 2- Philosophie et construction |