Операции (в программе)
Операции (в программе)
Абстрактные | Конкретные |
ti=fj(ti,a1, a2,... anj) t инициализир. пустое мн. {} | ti.Pj(ti,a1, a2,... anj) var t:НМЦ
|
X=i Ît (принадлежит ли i мн. t) | Рекомендуемые материалы4 lab вариант 13 9 lab вариант 13 FREE Все лабораторные работы Графика в Lazarus(статика+динамика) Лабораторная работа L36 (№7) отчет+код Вариант 36(?) объектно-ориентированное программирование t.содержит(i,x) |
t:=tÚ{i} | t.добавить(i,) |
t:=t {i} | t.удалить(i) |
Доказать, что абстрактные выражения эквивалентны конкретным:
Критерий правильности предусловия данных состоит в том, что каждая Pj моделирует соответствующую fj.
Для доказательства используем функции:
KT(P(t)) - отображает предикатное условие с абстрактными переменными в его конкретное представление в контексте типа T.
KНМЦ(h=H) º m=M Ù "k: 0£k<m : b[k]=B[k]
Надо доказать
- для инициализации {T} Q {KT(h=h0)}
- для процедур
{KT(h=H)} Pj(a1,a2, . . . ,anj){KT(h=fj(H,a1,a2, . . .,anj))}
инициализация m:=0
{T} Q {KНМЦ(h=Ø)}
{T} Q {m=0}
Q: m:=0
wp(“m:=0”,m=0) = 0=0 = T
Инвариант класса.
Какое должно быть отношение между переменными класса.
I = 0£m<160 Ù (Ni,j : i¹j Ù 0£i<m Ù 0£j<m : b[i] = b[j] = 0
{I} Qсодерж. {I Ù KНМЦ(x=iÎh)}
Само множество не меняется.
Преобразуем:
{I} Qсодерж. {I Ù x= $k: 0£k<m: b[k]=i)}
Заменим константу переменной:
Inv:
0£j£m Ù x:=$k: 0£k<j: b[k]=i
огр: m-j
охр: j¹m
j,x:=j+1,xÚb[j]=i
инициализация: j,x:=0,F
j,x:=0,F
do
j¹m ® j,x:=j+1,x Ú b[j]=i
od
Процедура добавления элемента
{I (KНМЦ(hÚ{i}))} Ù KНМЦ(h=H)}
Qдобавления
{I Ù KНМЦ(h=HÚ{i})}
{(iÎb Ù 0£m£100 Ú iÏb Ù 0£m+1£100) Ù m=M Ù b=B}
{0£m£100 Ù (iÎb Ù m£M Ù b=B Ú iÏb Ù m=M+1 Ù b[0:M-1]=B[0:M-1] Ù b[0:m-1]=i)}
Qдобавления содержит (i,x)
if
x=T ® SKIP
x=F ® m,b[m]:=m+1,i
fi
Удаление
{ I Ù KНМЦ(h=H)} Qудаления {KНМЦ(h=H {i})}
{I Ù m=M Ù b=B} Qудаления {k: 0£k<m: b[k]=i Ù (m=M Ù b=B Ú m=M-1 Ù
k: 0£k<m: (b[k]=B[k] Ú b[k]=B[M-1] Ù B[k] = i))}
Qудаления содержит (i,x);
If
x=F ® SKIP
x=T ® Sц
fi
В лекции "Воспалительные заболевания кишечника" также много полезной информации.
Inv:
0£j£m Ù k: 0£k<j: (b[j]¹i Ù (b[k]=B[k] Ú b[k]=B[M-1] Ù B[k]=i))
Если это все доказано, то соответственно доказана и правильность представления данных.
Х – абстрактная программа
Х’ – конкретная программа
Х’ получаем из Х