La programmation prédictive est le nom originel d'une méthode formelle de spécification et d'amélioration de programmes , plus récemment appelée Théorie pratique de la programmation, inventée par Eric Hehner . L'idée centrale est que chaque spécification est une expression binaire ( booléenne ) vraie pour les comportements acceptables de l'ordinateur et fausse pour les comportements inacceptables. Il s'ensuit que l'amélioration se réduit à une simple implication . C'est la méthode formelle la plus simple et la plus générale, applicable aux programmes séquentiels, parallèles, autonomes, communicants, termino-terminants, non termino-terminants, en temps naturel, en temps réel, déterministes et probabilistes , et prenant en compte les contraintes de temps et d'espace.
Les commandes d'un langage de programmation sont considérées comme un cas particulier de spécification — les spécifications compilables. Par exemple, si les variables du programme sont
Les démonstrations par boucles sont grandement simplifiées. Par exemple, si
alors que
affine ou met en œuvre la spécification
si
où
Le temps d'exécution (borne supérieure, borne inférieure, temps exact) peut être démontré de la même manière, simplement en introduisant une variable de temps. Pour démontrer la terminaison, il faut prouver que le temps d'exécution est fini. Pour démontrer la non-terminaison, il faut prouver que le temps d'exécution est infini. Par exemple, si la variable de temps est
si
où