述語プログラミングは、プログラムの仕様記述と改良のための形式手法の元の名前であり、最近ではエリック・ヘーナーによって考案された実践的プログラミング理論と呼ばれています。中心となる考え方は、各仕様は、許容されるコンピュータの動作に対しては真、許容されない動作に対しては偽となる二値(ブール)式であるということです。したがって、改良とは単に含意に他なりません。これは最も単純で汎用的な形式手法であり、逐次プログラム、並列プログラム、スタンドアロンプログラム、通信プログラム、終了型プログラム、非終了型プログラム、自然時間プログラム、リアルタイムプログラム、決定論的プログラム、確率的プログラムに適用でき、時間と空間の制約も含まれます。
プログラミング言語のコマンドは、コンパイル可能な仕様の特殊なケースとみなされます。たとえば、プログラム変数が、、 そして、コマンド:=+1は仕様(二進数表現)と同等です=+1 ∧=∧=その中で、、 そして代入前のプログラム変数の値を表し、 、、 そして代入後のプログラム変数の値を表します。仕様が>我々は簡単に証明できる(:=+1) ⇒ (>)それは、:=+1 は暗示、洗練、または実装する>。
ループ証明は大幅に簡略化されます。たとえば、は整数変数であり、
その間>0を実行する:=-1 od
仕様を改良または実装する≥0 ⇒=0 を証明する
もし>0 の場合:=–1; (≥0 ⇒=0)それ以外の場合fi ⇒ (≥0 ⇒=0)
どこ = (=) は空のコマンド、つまり何も実行しないコマンドです。ループ不変条件や最小固定点は不要です。複数の中間浅い出口と深い出口を持つループも同様に動作します。この簡略化された証明形式は、プログラムコマンドと仕様を意味のある形で組み合わせることができるため可能です。
実行時間(上限、下限、正確な時間)は、時間変数を導入するだけで同じ方法で証明できます。終了性を証明するには、実行時間が有限であることを証明します。非終了性を証明するには、実行時間が無限であることを証明します。たとえば、時間変数が、そして時間は反復回数を数えることで測定され、前のwhileループの実行に時間がかかることを証明します。いつ最初は非負であり、最初は否定的であることを証明します
もし>0 の場合:=-1;:=+1; (≥0 ⇒=+) ∧ (<0 ⇒=∞)それ以外の場合fi ⇒ (≥0 ⇒=+) ∧ (<0 ⇒=∞)
どこ = (=∧=)