3 мая 2010 · Комментарий

Без заголовка

Еще мне интересна сама постановка задачи доказательства правильности систем по аналогии доказательства правильности программ. Можно построить по аналогии с программированием. Спецификацией системы будет формальное описание требований. А реализацией - какой-то проект/план/модель будущей системы. Соответственно, нужно доказать, что реализация соответствует формальным требованиям. В (псевдо)математической нотации: Допустим, A - сигнатура модели (грубо говоря, формальное описание входов/выходов, типа A : In -> Out), Req(a) - предикат, заданный на множестве этих сигнатур. В другой форме, Req(in, out). Предикат задает требования, т.е. те сигнатуры, на которых предикат выполним, являются корректными реализациями. Соответственно, задача проверки корректности требований, состоит в том, чтобы доказать, что Exists a : A, Req(a). В другой форме Exists f : In->Out, Forall x, Req(x, f(x)). Если доказательство, конструктивное, то по нему можно извлечь и саму модель, отвечающую требованиям. Но на практике, модель нужно разрабатывать отдельно, потому как в целях удобство доказывания, модель должна иметь структуру, отличную от той, которую нужно применять в реальности (грубо говоря, экономить нужно другие ресурсы). И потом доказывать, что сия модель соответствует спецификации. Соответственно, возникают три подзадачи: 1. формальное задание сигнатуры целевой системы (тип преобразования входов в выходы) 2. построение предиката задающего требования (например, бинарный предикат на парах вход/выход) 3. построение модели целевой системы, имеющей нужную сигнатуру, и доказательство, того, что модель соответствует требованиям Все это довольно сложно и трудоемко, но на практике, даже простенькие частичные формализации часто весьма полезны для понимания требований.

К записи · К обсуждению