ТЕОРИЯ ВЫЧИСЛИТЕЛЬНЫХ СИСТЕМ. Теория вычислительных процессов
Скачать 2.17 Mb.
|
Линейная форма стандартной схемы Для использования линейной формы СПП множество специальных символов расширим дополнительными символами :, goto, if, then, else. СПП в линейной форме представляет собой последовательность инструкций, которая строится следующим образом: 1.если выходная дуга начальной вершины с оператором start(х1,..., хn) ведет к вершине с меткой L, то начальной вершине соответствует инструкция: 0: start(х1,..., хn) goto L; 2.если вершина схемы S с меткой L - преобразователь с оператором присваивания х:=τ, выходная дуга которого ведет к вершине с меткой L1, то этому преобразователю соответствует инструкция: L: x:= τ goto L1; 3.если вершина с меткой L - заключительная вершина с оператором stop(τ1,...τm), то ей соответствует инструкция: L: stop(τ1,..., τm); 4.если вершина с меткой L - распознаватель с условием р(τ1,...τk), причем 1-дуга ведет к вершине с меткой L1, а 0-дуга - к вершине с меткой L0, то этому распознавателю соответствует инструкция: L: ifр(τ1,...τk) thenL1 else L0; 5.если вершина с меткой L - петля, то ей соответствует инструкция: L: loop. Обычно используется сокращенная запись (опускание меток). Полная и сокращенная линейные формы ССП (рисунок 1.3, а) приведены ниже 0:start(х) goto 1,start(х), 1:у:=а goto 2, у:=а, 2:ifр(х) then 5 else 3,2:ifр(х) then 5 else 3, 3:у:=g(x,y) goto 4,3:у:=g(x,y), 4:х:=h(x) goto 2,х:=h(x) goto 2, 5:stop(у).5:stop(у). Интерпретация стандартных схем программ ССП не является записью алгоритма, поэтому позволяет исследовать только структурные свойства программ, но не семантику вычислений. При построении «семантической» теории схем программ вводится понятие интерпретация ССП. Определим это понятие. Пусть в некотором базисе В определен класс ССП. Интерпретацией базиса В в области интерпретации D называется функция I, которая сопоставляет: 1.каждой переменной х из базиса В - некоторый элемент d = I(x) из области интерпретации D; 2.каждой константе а из базиса В - некоторый элемент d = I(а) из области интерпретации D; 3.каждому функциональному символу f(n) - всюду определенную функцию F(n) = I(f (n)); 4.каждой логической константе р(0) - один символ множества {0,1}; 5.каждому предикатному символу р(n) - всюду определенный предикатP(n)= I(p(n)). Пара (S,I) называется интерпретированной стандартной схемой (ИСС), или стандартной программой (СП). Определим понятие выполнения программы. Состоянием памяти программы (S,I) называют функцию W: XS D, которая каждой переменной x из памяти схемы S сопоставляет элемент W(x) из области интерпретации D. Значение терма τ при интерпретации I и состоянии памяти W (обозначим τI(W)) определяется следующим образом: 1) если τ = х, x – переменная, то τI(W) = W(x); 2) если τ = a, a – константа, то τI(W) = I(a); 3) если τ = f(n)(τ1, τ2..., τn), то τI(W) = I(f(n))(τ1I(W), τ2I(W),..., τnI(W)). Аналогично определяется значение теста при интерпретации I и состоянии памяти W или I(W): если = р(n)(τ1, τ2,..., τn), то I(W) = I(p(n))(τ1I(W), τ2I(W),... τnI(W)), n ≥ 0. Конфигурацией программы называют пару U = (L,W), где L - метка вершины схемы S, а W - состояние ее памяти. Выполнение программы описывается конечной или бесконечной последовательностей конфигураций, которую называют протоколом выполнения программы (ПВП). Протокол (U0, U1,..., Ui, Ui+1,...) выполнения программы (S,I) определяем следующим образом (ниже kiозначает метку вершины, а Wi - состояние памяти в i-й конфигурации протокола, Ui= (ki,Wi)): U0= (0, W0), W0– начальное состояние памяти схемы S при интерпретации I. Пусть Ui= (ki, Wi) - i-я конфигурация ПВП, а О - оператор схемы S в вершине с меткой ki. Если О - заключительный оператор stop(τ1, τ2... τn), то Ui- последняя конфигурация, так что протокол конечен. В этом случае считают, что, программа (S,I) останавливается, а последовательность значений τ1I(W), τ2I(W),..., τnI(W) объявляют результатом val(S,I) выполнения программы (S,I). В противном случае, т. е. когда О - не заключительный оператор, в протоколе имеется следующая, (i+1)-я конфигурация Ui+1 = (ki+1, Wi+1), причем а) если О - начальный оператор, а выходящая из него дуга ведет к вершине с меткой L, то ki+1 = L и Wi+1 = Wi; б) если О - оператор присваивания х:= τ, а выходящая из него дуга ведет к вершине с меткой L, то ki+1 = L, Wi+1 = Wi, Wi+1(х) = τ1(Wi); в) если О - условный оператор и I(Wi) = Δ, где Δ 0,1, а выходящая из него дуга ведет к вершине с меткой L, то ki+1 = L и Wi+1 = Wi; г) если О - оператор петли, то ki+1 = L и Wi+1 = Wi, так что протокол бесконечен. Таким образом, программа останавливается тогда и только тогда, когда протокол ее выполнения конечен. В противном случае программа зацикливается и результат ее выполнения не определен. Рассмотрим две интерпретации СПП S1 (рисунок 1.2, а). Интерпретация(S1, I1) задана так: 1.область интерпретации D1 Nat - подмножество множества Nat целых неотрицательных чисел; 2.I1(x)=4; I1(y)=0; I1(a)=1; 3.I1(g)=G, где G - функция умножения чисел, т. е. G(d1,d2)= d1*d2; 4.I1(h)=H, где H - функция вычитания единицы, т. е. H(d)= d - 1; 5.I1(p)=P1, где P1 - предикат «равно 0», т.е. P1(d)=1, если d=0. Программа (S1, I1) вычисляет 4! (рисунок 1.3, б). Интерпретация (S1, I2) задана следующим образом: 1.область интерпретации D2=V*, где V = a, b, c, V* - множество всех возможных слов в алфавите V. 2.I2(x)=abc; 3.I2(y)=, где - пустое слово; 4.I2(a)= ; 5.I2(g)=CONSTAR; 6.I2(h)=CDR; 7.I2(p)=P2, где P2 - предикат «равное », т.е. P2()=1, если =. Программа (S1, I2) преобразует слово abc в слово cba (рисунок 1.3, в). ПВП (S1, I1) и (S1, I2) конечен, результат - 24 и - cba (таблица 1.1 и 1.2). Табл. 1.1.
Табл. 1.2.
Эквивалентность, тотальность, пустота, свобода ССП S в базисе В тотальна (пуста), если для любой интерпретации I базиса В программа (S, I) останавливается (зацикливается). Стандартные схемы S1, S2 в базисе В функционально эквивалентны (S1 S2), если либо обе зацикливаются, либо обе останавливаются с одинаковым результатом, т. е. val(S1, I) val(S2, I). Примеры тотальных, пустых и эквивалентных схем S2, S3, S4, S5приведены на рисунке 1.4. Цепочкой стандартной схемы (ЦСС) называют: 1. конечный путь по вершинам схемы, ведущий от начальной вершины к заключительной; 2. бесконечный путь по вершинам, начинающийся начальной вершиной схемы. В случае, когда вершина-распознаватель (v), то дополнительно указывается верхний индекс (1 или 0), определяющий 1-дугу или 0-дугу, исходящую из вершины. Примеры цепочек схемы S1 (рисунок 1.3,а): (0, 1, 21, 5); (0, 1, 20, 3, 4, 20 3, 4, 21, 5) и т. д. Цепочкой операторов (ЦО) называется последовательность операторов, метящих вершины некоторой цепочки схемы. Например для S1: (start(х), у:=a, р1(x), stop(у)) или (start(х), у:=a, р0(x), y:=g(x, y), x:=h(x), р0(x), y:=g(x, y), x:=h(x), р0(x), y:=g(x, y), x:=h(x), …)) и т. д. Предикатные символы ЦО обозначаются так же, как вершины распознавателей в ЦСС. Пусть S - ССП в базисе В, I - некоторая его интерпретация, (0, 1, …, l2, l3,…) - последовательность меток инструкций S, выписанных в том порядке, в котором эти метки входят в конфигурации протокола выполнения программы (S, I). Ясно, что эта последовательность – цепочка схемы S. Считают, что интерпретация I подтверждает (порождает) эту цепочку. ЦСС в базисе В называют допустимой, если она подтверждается хотя бы одной интерпретацией этого базиса. Не всякая ЦСС является допустимой. В схеме S2(рисунок 1.4,а) цепочки(0, 1, 20, 5, 61, 7), (0, 1, 21, 3, 40, 7) и все другие конечные цепочки не подтверждаются ни одной интерпретацией. Свойство допустимости цепочек играет чрезвычайно важную роль в анализе ССП. В частности оно определяет те случаи, когда стандартная схема свободна. ССП свободна, если все ее цепочки допустимы. Допустимая цепочка операторов - это цепочка операторов, соответствующая допустимой цепочке схемы. В тотальной схеме все допустимые цепочки (и допустимые цепочки операторов) конечны. В пустой схеме - бесконечны. Рассмотренные свойства распространяются на все другие классы стандартных схем и образуют опорные пункты схематологии программирования. |