J'ai récemment assisté à un intéressant phénomène de psychologie collective. Il s'agit de mathématiques, mais je pense que ce qui s'est passé est plus général et est compréhensible en faisant abstraction des détails.

Nous avions posé un examen de logique où une question intermédiaire était (pas directement présentée comme cela) : soient a, b, c des réels, à quelle condition est-ce que ax² + bx = 0 a une solution réelle ?

À peu près tout le monde a répondu : quand b² - 4ac ≥ 0, évidemment. Sauf que ceci est inexact, il suffit de prendre a=0, b=0, c=1 pour s'en convaincre. Ce qui ne va pas, c'est que l'on applique une formule en effet bien connue (de mon temps, enseignée en 1e, il me semble), mais dans un contexte incorrect (c'est une formule qui a du sens pour les polynômes du second degré, c'est-à-dire pour a≠0). (Je discuterai en annexe de la pertinence de cet exemple.)

J'ai ensuite posé la question sur Twitter, il me semble bien que tout le monde qui a répondu s'est trompé, après avoir éventuellement cherché si ma question était piège (par exemple, est-ce que a, b, c pouvaient être des matrices, etc.). Pareil avec des collègues.

Nous avons donc un phénomène fort intéressant : face à une question largement dans leurs compétences, un très grand nombre d'individus (d'ailleurs, l'écrasante majorité) fournissent une réponse incorrecte.

Il est clair qu'ici, la raison est que tous ces individus ont suivi, à un moment dans leur vie, un cours sur le trinôme du second degré et ont ressorti la formule toute faite et bien connue en oubliant de vérifier certaines conditions de son application. Effet psychologique : quand un polynôme 2x²+3x+1 est du second degré, et donc, sauf mise en garde explicite, on aura tendance à considérer qu'un polynôme ax²+bx+c est aussi du second degré. Ça a l'air habituel d'un polynôme du second degré, donc c'en est un…

Lors d'examens précédents, nous nous étions rendu compte que des élèves que l'on ne pouvait soupçonner d'avoir copiés les uns sur les autres (physiquement éloignés lors de l'examen) rendaient la même réponse fausse. Cela veut dire qu'il y a des erreurs « naturelles », encore que je n'aime pas ce terme car il s'agit ici clairement de culture (des cours, des sujets abordés, etc. qui donnent certaines directions de pensée).

Ceci devrait nous inciter à la prudence à l'égard de deux lieux communs.

Le premier est que lorsque l'on fait développer deux logiciels censés répondre à la même fonction critique (par exemple : piloter un avion) par deux équipes différentes et sans interaction, on va avoir une faible probabilité que ces deux logiciels dysfonctionnent en même temps : ce serait en effet un extraordinaire hasard que deux équipes fassent une erreur au même endroit (par exemple, mal gérer le même événement exceptionnel). Sauf que… ce raisonnement « probabiliste » fait l'hypothèse implicite que les deux événements sont indépendants, ce qui n'est pas le cas, au vu des exemples précédents !

Le second est que demander leur avis à un très grand nombre de personnes égalise les erreurs suivant la loi des grands nombres (ou, comme disait François Bourdoncle dans une réunion publique à laquelle j'assistais, le théorème central limite). Autrement dit, l'hypothèse implicite est que chacun voit la vérité entachée d'un bruit symétrique, et qu'avec le grand nombre les erreurs dans un sens ou dans l'autre s'annulent largement. Ce n'est clairement pas le cas quand les erreurs viennent d'une cause commune, qu'elle soit culturelle ou une hypothétique tendance humaine « naturelle » à raisonner de telle ou telle façon.

Annexe : On m'a fait remarquer qu'en quelque sorte c'est chercher la petite bête, le contre-exemple artificiel, que ça n'a pas de « sens physique » que de se poser pareille question (a=0 physiquement c'est une surface infiniment fine, on ne peut pas arriver pile dessus).

Il s'agissait d'un examen de logique, pas de calcul numérique appliqué à la physique. Par ailleurs, le type de raisonnement « les contre-exemples sont de mesure nulle » est très dangereux en algorithme. Quelques exemples.

n+1 points dans un espace de dimension n sont presque toujours en position générale (ils ne sont pas dans le même hyperplan). Sauf qu'en pratique, quand on lance un algorithme géométrique, on le lance souvent sur des objets provenant d'humains, après calcul ou non, et non générés aléatoirement. Le cas qui n'arrive presque jamais a donc tendance à arriver assez souvent. S'ensuivent de vaseuses techniques de perturbations des points.

L'algorithme du tri rapide (le plus simple, sans aléa) a une complexité de calcul en moyenne très intéressante. Sauf que… si la liste est déjà quasi triée (ou quasi dans l'ordre inverse), il est très mauvais. Manque de chance, c'est un cas assez courant dans les utilisations réelles.

Si on tire au sort un problème 3SAT avec bien plus (resp. bien moins) de clauses que de variables, on a « presque toujours » (enfin, à un pouième près) un problème insatisfiable (resp. satisfiable) (on peut quantifier le « bien plus » et le « bien moins »). Très mauvais guide sur les cas qu'on veut vraiment résoudre.

J'ai passé pas mal d'énergie et de temps sur une histoire de problème géométrique dégénéré, le cas qui n'arrive « presque jamais ».

On peut donc raisonnablement dire que, sauf plus ample informé, s'il y a une situation gênante qui peut arriver en entrée d'un algorithme (par exemple d'une procédure de simplification en calcul formel), elle va se présenter un jour.

Témoin cette anecdote arrivée la semaine précédente : j'ai un problème non linéaire, un collègue me dit « facile, je n'ai qu'à le rentrer dans l'outil développé chez mes copains », il me répond « il n'y a pas de solution », je lui en exhibe une, et in fine un bug est trouvé dans une procédure de simplification.

Le cas exceptionnel va arriver et l'avion va tomber dans l'eau.