L'une des principales raisons pour lesquelles je trouve la théorie de l'informatique ("ma" branche de l'informatique théorique) fascinante et intéressante à étudier est la suivante: elle nous fournit un moyen d'enquêter sur des questions philosophiques profondes (et parfois déroutantes).
Alan Turing, l'un des fondateurs de la théorie du calcul, a tenté de préciser le sens de «calcul d'une fonction» pour un être humain équipé d'un morceau de papier, en donnant une description mathématique du processus. Je ne suis pas le seul à penser qu'il a eu un très grand succès et les machines de Turing se sont révélées être un modèle précis de nombreux autres processus informatiques.
Maintenant que nous possédons une classe d’objets mathématiques décrivant des calculs, nous pouvons réellement prouver des théorèmes à leur sujet, essayant ainsi de découvrir ce qui peut être calculé et comment il peut être calculé; Il s'est immédiatement avéré que de nombreuses fonctions parfaitement légitimes ne peuvent être calculées et qu'elles peuvent être classées selon un degré d'incompatibilité (certaines fonctions sont simplement «plus non calculables» que d'autres).
Certains autres, les premiers généralement identifiés par Juris Hartmanis et Richard E. Stearns, ont essayé de décrire mathématiquement ce que cela signifie pour une fonction (resp., Un problème) d'être difficile ou facile à calculer (resp., À résoudre). Il existe plusieurs mesures de complexité selon lesquelles la dureté des problèmes peut être décrite; le plus commun est combien de temps il nous faut pour les résoudre. Alan Cobham et Jack Edmonds ont assez bien réussi à identifier une notion raisonnable de «calcul efficace».
Dans le cadre de la complexité de calcul, nous pouvons maintenant prouver des résultats compatibles avec notre notion intuitive de calcul. Mon exemple préféré est le théorème de la hiérarchie temporelle: si on nous donne plus de temps pour calculer, nous pouvons résoudre des problèmes plus difficiles.
Le problème central non résolu de la théorie de la complexité, P vs NP , consiste simplement à formaliser une autre question importante du point de vue philosophique: est-il vraiment plus difficile de résoudre un problème que de vérifier si une solution alléguée est vraiment correcte? Je crois que cette question mérite d'être posée et de répondre, indépendamment de sa signification pratique.