{(( x, y, z), ( u, v, w)) | u=y,v=y, w=z} или в более простой записи так:
{(( x, y, z) , ( y, y, z))}
Заметим, что x, y, z в левой скобке служат для обозначения определяемых в программе данных, а те же имена , стоящие в правой скобке являются именами значений определяемых данных. Приведённую выше запись нужно понимать так: после выполнения функции присваивания поле x имеет значение поля y , а поля с именами y, z не изменили своих значений. В таком контексте присваивание всегда отображает одно состояние данных в другое состояние.
Несколько примеров записи оператора присваивания в виде функционального отображения:
1) оператор присваивания задан в виде условного правила
(x ³ 0 L y ³ 0 L z ³ 0 ® x := y )
{((x, y, z), (y, y, z)) | x ³ 0 L y ³ 0 L z ³ 0}
2) оператор присваивания задан для скалярых переменных x, y, z целого типа, значения этих переменных принадлежат области натуральных чисел :
(x := y - z) = {((x, y, z), (y - z, y, z) | x ³ 0 L y ³ 0 L z ³ 0 L y -z ³ 0}
3) оператор присваивания задан c использованием других функций
(x := max(y, z))= {((x, y, z), ( max(y,z),y, z))}, где функция max определяется
max = {((y, z)(u)) | ( y ³ z L u =y )V (z ³ y L u=z)}
4) оператор присваивания над массивами с использованием индексных переменных
i, x(i+1) := x(i), i+x(i+1) можно рассматривать как функцию, изменяющую состояние поля данных, включающего по крайней мере четырёхэлементный список (i, x(1), x(2), X(3)), который содержит и индекс. Окончательное выражение для предложения присваивания может быть задано в форме условного правила
(i=1®i, x(2):= x(1),1+X(2) | i=2 ®i, x(3):= x(2),2+X(3))
( Так как x(i+1) для i>2 не определено, функция присваивания для любого начального значения i, не равного 1 или 2, является неопределённой). В этом случае функция присваивания контролирует правильность использования операции присваивания над массивами.
3.2.4 Программные функции
Любую простую программу можно рассматривать как функцию, которая отображает множество входных состояний данных, обозначаемых X в множество состояний выходных данных, в дальнейшем обозначаемых Y. Множество всех упорядоченных пар {(X,Y)} опред функциональное множество, так как отоброжение X в Y однозначно. Эту функцию будем называть программной функцией и будем обозначать [P].
Рассмотрим некоторые программные функции для программ, записанных на языке PDL. При этом для описания программных функций используются множество упорядоченных пар и операция присваивания, а также условные правила, где это необходимо:
1) [x:= x + y; y:= x - y] = {((x, y), (x + y, x))} = (x, y:= x + y, x)
2) [if x > y then x := y fi] = {((x, y), (min(x, y), y)}= (x,y:= min(x, y),y)
3) [while x< 0 do x:= x +1 od]={(x), (max ( 0, x))} = (x:= max(0, x))
4) [while x¹ 0 do x:= x +1 od]={(x, 0) | x £ 0} = (x£0 ® x:=0)
5) [do x:= x +1 until x > y od]={((x, y), (max(x + 1, y +1), y))}=
(x, y:= max(x + 1, y + 1), y)
6) [do x:= x +1 until x ¹ y od]={((x, y), (x + 1, y) | x ¹ y - 1}
È {((x, y), (y + 1, y) | x = y - 1}=
(x ¹ y - 1® x, y:= x +1, y | x = y - 1® x, y:= y +1, y)
При описании программных функций программ, заданных схемой можно использовать язык исчисления высказывания или условные правила.
Программа, состоящая из одного функционального узла (рис. 11) f={(X,Y)} имеет программную функцию [P]={(X, Y) | Y= f(X)}.
Программной функцией последовательности двух функциональных узлов (рис. 12), где g={(X, Z)}, h={(Z, Y)}, является композиция двух частных функций [P] = {(X, Y) | Y= h(g(X))} .
Программная функция схем без циклов может быть определена как объединения композиций функций, которые могут быть получены из Е - схемы. При этом необходимо описать функцию каждой ветви этой схемы. При этом, необходимые и достаточные условия выполнения данной ветви определяются композицией каждого предиката, принадлежащего этой ветки, с предшествующими функциональными узлами , а композиция всех функциональных узлов данной ветки дерева задаёт часть программной функции.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.