Nous avons la logique Hoare. Pourquoi est-il toujours possible qu'un algorithme soit correct mais il n'y a aucune preuve qu'il est correct? Supposons que l'algorithme soit exprimé en C. Ensuite, nous pouvons affirmer étape par étape qu'il fait ce qu'il est censé faire.
Ma question est donc:
Donnez-moi un exemple d'algorithme qui est juste mais qui n'a pas de preuve d'exactitude.
EDIT: Je pense qu'un petit historique peut aider à clarifier où je vais. Permettez-moi de citer Scott Aaronson:
Depuis les années 1970, il y a eu des spéculations selon lesquelles P NP pourrait être indépendant (c'est-à-dire ni prouvable ni réfutable) des systèmes d'axiomes standard pour les mathématiques, tels que la théorie des ensembles de Zermelo-Fraenkel. Pour être clair, cela signifierait que soit
il n'existe pas d'algorithme en temps polynomial pour les problèmes NP-complets, mais nous ne pouvons jamais le prouver (du moins pas dans nos systèmes formels habituels), sinon
il existe un algorithme en temps polynomial pour les problèmes NP-complets , mais soit nous ne pouvons jamais prouver qu'il fonctionne, soit nous ne pouvons jamais prouver qu'il s'arrête en temps polynomial.
Je fais référence à la deuxième possibilité. Étant donné qu'Aaronson peut en toute confiance l'énumérer comme une possibilité, je pense qu'il doit y avoir un exemple existant de type 2. C'est pourquoi je pose cette question. Mais il ne semble pas qu'une réponse rapide et claire soit en vue.
la source
Réponses:
Voici un algorithme pour la fonction d'identité:
La plupart des gens soupçonnent que cet algorithme calcule la fonction d'identité, mais nous ne savons pas, et nous ne pouvons pas le prouver dans le cadre communément admis pour les mathématiques, ZFC .
la source
La plupart des algorithmes ne se sont pas révélés corrects dans la logique Hoare. La raison principale est que de telles preuves de correction sont extrêmement coûteuses en janvier 2017, probablement de plusieurs ordres de grandeur par rapport à une `` simple '' programmation. Il y a beaucoup de travail en cours pour réduire ce coût par l'automatisation, mais c'est une lutte difficile.
Une autre raison pour laquelle un algorithme pourrait ne pas avoir de preuve d'exactitude, et qui est plus pertinente dans la pratique que les phénomènes d'incomplétude mentionnés par Yuval et chi, est que nous ne savons peut-être pas ce qu'est cette spécification. Ce problème a deux dimensions.
Les clients ne savent pas ce qu'ils veulent. Il s'agit d'un problème bien connu en génie logiciel, et les ingénieurs logiciels ont développé de nombreuses approches pour y faire face.
la source
la source
Problème: Imprimez "Oui" si chaque nombre pair ≥ 4 est la somme de deux nombres premiers et "Non" s'il y a un nombre pair ≥ 4 qui n'est pas la somme de deux nombres premiers.
Algorithme: imprimer "Oui"
La plupart des gens pensent que l'algorithme est correct. Il n'y a pas de preuve connue, et il est fort possible qu'il n'y ait pas de preuve.
la source
Tout algorithme qui est correct mais nous ne savons pas combien de temps il faut pour l'exécuter peut être transformé en un algorithme qui s'arrête dans un laps de temps garanti, mais nous ne savons pas s'il est correct.
la source