Главная Обратная связь

Дисциплины:

Архитектура (936)
Биология (6393)
География (744)
История (25)
Компьютеры (1497)
Кулинария (2184)
Культура (3938)
Литература (5778)
Математика (5918)
Медицина (9278)
Механика (2776)
Образование (13883)
Политика (26404)
Правоведение (321)
Психология (56518)
Религия (1833)
Социология (23400)
Спорт (2350)
Строительство (17942)
Технология (5741)
Транспорт (14634)
Физика (1043)
Философия (440)
Финансы (17336)
Химия (4931)
Экология (6055)
Экономика (9200)
Электроника (7621)


 

 

 

 



Понятие частичной и полной корректности программы, правила вывода – общий вид, правила консеквенции



Любой оператор или изменяет состояние вычислений… или анализирует и принимает решение…

Любой язык программирования включает в себя некоторое количество простых операторов и и методы объединения, композиции их в составные, структурные.

Задача: описать соотношения и правила вывода, которые позволят определить эффект воздействия простого оператора на состояние вычислений и выделить свойства составного оператора из свойств входящих в него простых операторов.

На структурной схеме нахождения div и mod определены состояния вычислений с помощью соотношений, которые должны выполняться для входных и промежуточных величин.

Фундаментальным свойством всех способов композиции является возможность объединения в одну сложную структурную схему с одним входом и одним выходом произвольного количества любых структурных схем.

Спецификация программы и правила вывода

Спецификация программы: S

{ P} S { Q } (1) -Q

Если соотношение P – истинно перед выполнением S, то после завершения выполнения S, будет истинно выражение Q. …

Если S - это программа, корректность которой мы должны установить, то необходимо доказать нотацию (1), где P – соотношение, которому должны удовлетворять входные данные, а Q – выходные.

Для задачи поиска div и nod:

 

{(x ≥ 0) ^ (y > 0)} S {(x = q * y + r) ^ (0 ≤ r < y)}

 

Соотношение (1) определяет частичную корректность программы, так как S может не завершаться, точка выхода может не достигаться. Завершаемость S необходимо доказать, тогда будет доказана полная корректность.

Проектирование должно начинаться с определения спецификации {P} S {Q}, которой должна удовлетворять проектируемая программа, при каких условиях она должна работать (предусловие P) и какие результаты должны быть получены, каким условиям должны удовлетворять выходные данные (постусловие Q).

Процесс проектирования сверху вниз определяет спецификации {Pi} Si {Qi} для компонент программы Si

Проектирование программы осуществляется одновременно с доказательством корректности этих спецификаций.

 

Представим структурную схему алгоритма поиска div и mod с учетом ее декомпозиции.

Представим блок-схему этого алгоритма с учетом его декомпозиции

x>=0, y>0 x>=0, y> 0

s1 q = 0;

r>=0 s1 r = x;

s3

x=q*y+r, 0<= r<y x=q*y+r, r>=0

x=q*y + r, r>=y

S3 r = r – y;

s2 q = q + 1;

x = q * y +r , r>=O

Правила вывода

Правила вывода – это схемы рассуждений, позволяющие доказывать свойства программ. Общий вид:

H1,H2,…Hn

H

Если над чертой истинные выражения, то и под чертой выражение будет истинным.

Первое правило консеквенции:

{P} S {R}, R Q

{P} S {Q}

Например:

{(x > 0) ^ (y > 0)} S {(z + u * Y = x * y) ^ (u = 0)},

(z + u * Y = x * y) ^ (u = 0) (z = x * y)

 

{(x > 0) ^ (y > 0)} S {(z = x * y)}

 

Второе правило консеквенции:

P R, {R} S {Q}

{P} S {Q}

Например:

 

((x = y * q + r) ^ (r > y)) (x = y * (1 + q) + (r – y),

 

{x = y * (1 + q) + (r – y)} r = r – y { x = y * (1 + q) + r}

 

{(x = y * q + r) ^ (r > y)} r = r – y { x = y * (1 + q) + r}

Правила вывода для операторов: пустого, присваивания, составного.

Правила вывода для операторов языка программирования

Правила вывода для структурных операторов



Просмотров 1144

Эта страница нарушает авторские права




allrefrs.su - 2025 год. Все права принадлежат их авторам!