Предикативное программирование - Predicative programming

Предикативное программирование это оригинальное имя формального метода для программы Технические характеристики и уточнение, позже названная практической теорией программирования, изобретенная Эрик Хенер. Основная идея заключается в том, что каждая спецификация представляет собой двоичный (логический ) выражение, которое верно для приемлемого поведения компьютера и ложно для недопустимого поведения. Отсюда следует, что уточнение просто значение. Это простейший формальный метод и самый общий, применяемый к последовательному, параллельному, автономному, общающемуся, завершающему, незавершающемуся, естественному времени, реальному времени, детерминированному и вероятностный программы, и включает временные и пространственные ограничения.

Команды в язык программирования считаются частным случаем спецификации - те спецификации, которые можно компилировать. Например, если программные переменные , , и , команда := +1 эквивалентно спецификации (двоичное выражение) =+1 ∧ == в котором , , и представляют значения переменных программы перед присваиванием, и , , и представляют значения переменных программы после присваивания. Если спецификация >, легко доказывается (:= +1) ⇒ (>), который говорит, что := +1 подразумевает, или уточняет, или реализует >.

Доказательства петли значительно упрощены. Например, если является целочисленной переменной, чтобы доказать, что

пока >0 делать := –1 od

уточняет или реализует спецификацию ≥0 ⇒ = 0, доказать

если >0 тогда := –1; (≥0 ⇒ =0) еще фи ⇒ (≥0 ⇒ =0)

куда = (=) - это пустая или бездействующая команда. Нет необходимости в инвариант цикла или же наименьшая фиксированная точка. Петли с множеством промежуточных неглубоких и глубоких выходов работают одинаково. Эта упрощенная форма доказательства возможна, потому что программные команды и спецификации могут быть осмысленно смешаны вместе.

Время выполнения (верхние границы, нижние границы, точное время) можно доказать таким же образом, просто введя временную переменную. Чтобы доказать прекращение, докажите, что время выполнения конечно. Чтобы доказать отсутствие прекращения действия, докажите, что время выполнения бесконечно. Например, если переменная времени , а время измеряется путем подсчета итераций, чтобы затем доказать, что выполнение предыдущего пока-цикл требует времени когда изначально неотрицателен и длится вечно, когда изначально отрицательный, докажите

если >0 тогда := –1; := +1; (≥0 ⇒ =+) ∧ (<0 ⇒ =∞) еще фи ⇒ (≥0 ⇒ =+) ∧ (<0 ⇒ =∞)

куда = (==).

Библиография

внешняя ссылка