Научная статья на тему 'Об объектах, описываемых алгоритмическим языком'

Об объектах, описываемых алгоритмическим языком Текст научной статьи по специальности «Математика»

CC BY
113
38
i Надоели баннеры? Вы всегда можете отключить рекламу.
Журнал
Auditorium
Область наук
Ключевые слова
ФОРМАЛЬНЫЙ ЯЗЫК / СИНТАКСИС / СЕМАНТИЧЕСКОЕ ОТОБРАЖЕНИЕ / ПЕРЕМЕННАЯ / ОБЛАСТЬ ПЕРЕМЕННЫХ / ВЫЧИСЛИТЕЛЬНАЯ ОПЕРАЦИЯ / КОМПОЗИЦИЯ ОПЕРАЦИЙ / ДЕРЕВО КОМПОЗИЦИЙ / АЛГОРИТМ / ВЫЧИСЛИТЕЛЬНЫЙ ПРОЦЕСС / formal language / syntax / semantic mapping / variable / variables domain / computational operation / composition of operations / tree of compositions / algorithm / computational process

Аннотация научной статьи по математике, автор научной работы — Фрумкин А. М.

Предлагается вариант определения алгоритма как дерева композиций, терминальные узлы которого элементарные операции. Определяется вычислительный процесс, порождаемый алгоритмом и начальными данными. Устанавливается связь между корректностью начальных данных алгоритма и успешностью завершения вычислительного процесса. Строится пример синтаксиса языка для описания алгоритмов рассматриваемого класса.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

ON THE OBJECTS DESCRIBED BY AN ALGORITHMIC LANGUAGE

It is suggested to define an algorithm as a tree of compositions which terminal nodes are the elementary operations. A computational process generated by the algorithm and the initial data is defined. A connection between the correctness of the initial data and the successful completion of the computational process is established. An example of the language syntax for the description of the considered class algorithms is created.

Текст научной работы на тему «Об объектах, описываемых алгоритмическим языком»

УДК 519.682.1

ОБ ОБЪЕКТАХ, ОПИСЫВАЕМЫХ АЛГОРИТМИЧЕСКИМ ЯЗЫКОМ

© 2014 А. М. Фрумкин

ст. науч. сотрудник каф. математического анализа и прикладной математики, канд. техн. наук, e-mail: frumkinam @mail. ru

Курский государственный университет

Предлагается вариант определения алгоритма как дерева композиций, терминальные узлы которого - элементарные операции. Определяется вычислительный процесс, порождаемый алгоритмом и начальными данными. Устанавливается связь между корректностью начальных данных алгоритма и успешностью завершения вычислительного процесса. Строится пример синтаксиса языка для описания алгоритмов рассматриваемого класса.

Ключевые слова: формальный язык, синтаксис, семантическое отображение, переменная, область переменных, вычислительная операция, композиция операций, дерево композиций, алгоритм, вычислительный процесс.

Введение

Традиционно формальный язык определяется как пара (A,L), в которой A -конечный алфавит, L - множество корректных текстов, то есть допустимых цепочек символов из алфавита A [Ахо 1978; Гинзбург 1975; Рейуорд 1988]. В то же время тексты, написанные на формальном языке, имеют семантический смысл, то есть определяют некоторые содержательные понятия. В связи с этим определение языка можно усложнить следующим образом.

Определение 1. Формальным языком назовем четверку (Q,A,L,s), в которой Q -множество объектов (или предметная область языка), описываемых языком, A -конечный алфавит, L - множество корректных текстов (строк из символов A), s:L^Q -семантическое (смысловое) отображение, которое каждому тексту ставит в соответствие описываемый объект.

Классические процедурные формальные языки (например, Алгол [Себеста 2001]) предназначались прежде всего для описания вычислительных алгоритмов. Однако предметные области языков (то есть абстрактные множества алгоритмов) в явном виде разработчиками не описывались. В частности, это связано с тем, что подобные описания оказываются достаточно громоздкими, а программисту интуитивно ясно преобразование текста в законы, определяющие вычислительный процесс.

Развитие языков, которые можно было бы назвать алгоритмическими, привело к включению в язык конструкций, не связанных с понятием алгоритма. Это операторы управления компиляцией, операторы ввода-вывода и.т.д. В связи с этим название «алгоритмический язык» стало использоваться редко, уступив место названию «язык программирования» [Орлов 2013; Пратт 2002].

Понятие алгоритма является очень широким. Большинство известных его формальных определений в узком смысле, описанных, например, в публикациях [Барендрегт 1985; Марков 1984; Трауб 1983; Успенский 1988; Хопкрофт 2002], направлено прежде всего на решение теоретических задач и не связано с разработкой достаточно широко применяемых процедурных языков программирования.

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

ФИЗИКО-МАТЕМАТИЧЕСКИЕ НАУКИ

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

Для описания динамики вычислений можно использовать классические графические блок-схемы [Bohm 1966; Peter 1958], однако они не очень удобны для описания алгоритмов, задаваемых программами, написанными на языках высокого уровня. В данной статье дается вариант определения алгоритма, который может быть использован для определения языка, содержащего основные операторы структурного программирования [Лингер 1982]. Далее показывается, как данное определение взаимосвязано с синтаксическими конструкциями языка.

В статье приняты следующие нестандартные обозначения. Значки 3 и 4 обозначают начало и конец доказательства. Значок И обозначает возникновение противоречия. Буква N обозначает множество неотрицательных целых чисел (множество натуральных чисел в смысле [Мендельсон 1971]).

1. Итерационные последовательности

Пусть M - некоторое множество, f:Dm(f)EM^M - функция, отображающая из M в M. Вообще говоря, Dm(f)^M, то есть функция f отображает множество M в себя, но не на себя. В дальнейших рассуждениях потребуются последовательности, которые определены рекуррентным соотношением xn+1=f(xn). Приведем формальный подход к определению таких последовательностей, исходя из определения функции как частного случая отношения [Новиков 2011; Фор 1966]. Для xEDm(f) определим систему множеств Sx={SENxM: (0,x)£Sa [(m,z)ESAz£Dm(f)^ (m+1,f(z))ES]}. Положим s=H(Sx) - пересечение всех множеств из системы Sx..

Утв. 1. Пусть n£Dm(s). Тогда s:[0..n]^M.

3 Пусть n=0. 0EDm(s), потому что (0,x)Es. Пусть (0,t)Es и t^x. Тогда множество s0=s\{(0,t)} обладает всеми свойствами множеств, принадлежащих Sx, то есть s0E^x, что противоречит определению s, И. Следовательно, s:{0}^M.

Пусть утверждение верно для любого натурального числа, не превышающего n. Далее, пусть n+1EDm(s), то есть (n+1,z)Es для некоторого zEM.

Предположим, что VyEM (n,y)^s. Положим m=max{k<n: 3yEM (k,y)Es}<n. Пусть (m,t)Es. Если t£Dm(f), то по свойству s (k+1,f(t))Es, И. Следовательно, t^Dm(f). Определим s0={(k,y)Es: k<m}. Множество s0 обладает всеми свойствами множеств, принадлежащих , то есть s0E^x. Но s0Es л (n+1,z)Es\s0, что противоречит определению s.

Следовательно, существует y: (n,y)Es. По предположению индукции s:[0..n]^M. Если y^Dm(f), то множество s1={(k,y)Es: k<n}E^x. Но s1Cs л (n+1,z)Es\s1, что противоречит определению s. Поэтому yEDm(f). Пусть z^f(y). По свойству s пара (n+1,f(y))Es. Но тогда s\{(n+1,z)}E^x, что противоречит определению s. Итак, z=f(y) -единственный возможный элемент M. Следовательно, s:[0..n+1]^M. 4

Утв. 2. Если (n,z)Es л z^Dm(f), то Dm(s)=[0..n].

3 Действительно, в этом случае множество s0={(k,y)Es: k<n}E^x, но по определению sEs0, поэтому s=s0^ Dm(s)=[0..n] 4

Утв. 3. Отношение s является функцией, причем либо s:N^M, либо найдется единственное nEN, такое, что Dm(s)=[0..n].

3 Действительно, либо V nEDm(s) snEDm(f), либо 3nEDm(s) sn^Dm(f).

В первом случае, по определению s, 0EDm(s) и

nEDm(s)^snEDm(f)^(n+1,f(sn))Es^n+1EDm(s). Следовательно, Dm(s)=N по принципу индукции.

Auditorium: электронный научный журнал Курского государственного университета. 2014. № 2

Фрумкин А. М. Об объектах, описываемых алгоритмическим языком

Во втором случае Dm(s)=[0..n] и одновременное равенство Dm(s)=[0..m] для m^n невозможно. 4

Определение 2. Если M - множество и f:Dm(f)CM^M, то для каждого x£M последовательность s(f,x), свойства которой устанавливаются утверждениями 1-3, назовем итерационной последовательностью, порожденной f и х.

С использованием итерационной последовательности n-ую степень функции f можно формально определить так: f“=((x,y): y=s(f,x,n)}.

2. Вычислительные операции и их композиции

Вычислительный процесс, описываемый алгоритмом, в определенной степени моделирует процесс вычислений на бумаге, в котором мы можем записывать данные в некоторой области листа и стирать их. Но в процессе, описываемом алгоритмом, элементы из определенного множества записываются в именованную область «листа-памяти», которая называется переменной. Элемент можно «удалить» из переменной и «записать» в переменную новый элемент. Алгоритм же определяет функциональное преобразование содержимого некоторого набора переменных.

Для формальных построений предположим, что заданы 0 - множество переменных (или имен переменных) и S - система множеств, элементы которых могут храниться в переменных (множество возможных типов переменных).

Определение 3. Пару (0,S) назовем средой определения операций. Пусть QC0 -конечное множество переменных, T:Q^S. Функцию T назовем описателем типов переменных. Пару (Q,T) назовем областью переменных. Область переменных является моделью области памяти, в которой хранятся данные, преобразуемые в процессе вычислений.

Определение 4. Определим множество

Q®T=((a,x): a£Q л x£T(a)}

и множество

Qat=(xCQ®T: Va£Q 3! t£T(a): (a,t)Gx}. Можно дать другое определение:

qaT=(x : UT(a) | VaE:Q x(a)£T(a)}.

aQ3

Qat есть множество всевозможных отображений из Q в

U T(a), обладающих

aQ3

тем свойством, что для каждого a£Q образ а содержится в T(a). Элементы QAT можно назвать состояниями области переменных или данными, хранящимися в области переменных. Если (Q,T) - область переменных и x£QAT - данные, то для каждого a£Q x(a) есть значение переменной а.

Определение 5. Будем говорить, что область переменных (A,S) включена в область переменных (Q,T), если ЛСй и Va&A S(a)=T(a).

Утв. 4. Отношение включения есть отношение частичного порядка на множестве областей переменных. 3 Условия из определения 5 можно переписать как SCT. Отношение включения есть отношение частичного порядка. 4

Определение 6. Две области переменных (A,S) и (Q,T) назовем эквивалентными, если найдется взаимно-однозначное отображение ^:Л^ Q, обладающее свойством: V а£Л S(a)=T(^(a)).

Утв. 5. Если области переменных (A,S) и (Q,T) эквивалентны и эквивалентность устанавливается биекцией ^:Л^ Q, то отношение

U=((x,y): x£AAS л yEQAT л Va£A x(a)=y(^(a)) }

является биективным отображением ЛAS на Qat, причем

(И ^ ) 1 = И^-1 .

ФИЗИКО-МАТЕМАТИЧЕСКИЕ НАУКИ

3 Для любого х£ЛЛБ набор значений у={(РД):РЕЙл t=x(,-1(P))} удовлетворяет условию УаЕЛ х(а)=х(,-1. ^(a))=y ^ (x,y)£u?. Если (х,у)Ец,, то V рЕй y(P)=y(„ 1(Р))=х(,-1(Р)), то есть y единственно. Таким образом, u, - функция.

Пусть y 1=U|(x1), y2=u,(x2) и х1(а)*х2(а). Тогда y1(^(a))^y2(^(a)) ^ y1^y2, то есть u, - инъективное отображение. Для любого уЕйлт набор х={(аД):аЕЛл t=y(,(a))} удовлетворяет условию y=u,(x). Следовательно, u, - взаимнооднозначное отображение,

а сам вид формулы для х показывает, что

(и^ ) 1 = и^-х.

Определение 7. Вычислительной операцией назовем тройку (Q,T,f), в которой (й,Т) - область переменных, f: Dm(f)C йлт^йлт. Другими словами, операция состоянию области переменных (й,Т), принадлежащему области определения f, ставит в соответствие новое ее состояние.

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

Расширение операции. Пусть p0=(^,T0,f0) - вычислительная операция и область переменных (й,Т) включает (й0,Т0). Для каждого хЕйлт обозначим х0={(аД):

аЕй^=х(а)}= xi„ - сужение функции х на й0 и х1={(а;1): аЕй/й0 л t=x(a)} -

|У0

сужение функции х на й/й0.

Расширением процедуры р0 на область переменных (й,Т) назовем процедуру p=(Q,T,f), в которой f={(x,y)E(^T)x(^T) : y=f0(x0)Ux1)}. Иными словами, расширение операции р0 состояние каждой переменной аЕй0 устанавливает в соответствии с операцией р0, а состояние каждой переменной аЕй/й0 не меняет.

Сужение операции. Пусть p=(Q,T,f) - операция, область переменных (й,Т) включает (й0,Т0), а Т1 есть сужение семейства Т на множество й/й0. Пусть аЕ (й/й0)лт1 - фиксированный набор значений переменных из й/й0.

Сужением операции р на область переменных (й0,Т0) при дополнении аЕ(й/й0)л^ назовем процедуру p0=(Q0,T0,f0), в которой f0={(x,y)E(Q^T0)x(Q^T0) : y = f(x U а)|^ }. Иными словами, сужение операции p на (й0,Т0) добавляет к набору

значений х Е Й0ЛТ0 набор аЕ(й/й0)л^, вычисляет значение функции f(xUa) и затем отбрасывает значения переменных из й/й0.

Условная композиция (if-композиция). Пусть p1=(Q,T,f1) и p0=(Q,T,f0) -операции, а Е й - переменная булева типа, то есть Т(а)={0,1}. Условной композицией операций p1 и p0 назовем операцию (Q,T,f), в которой f определяется формулой f^^y^^TX^T) : (x(a)=0лy=fo(x) )v( x^)=Uy=f1(x) )}.

Возможно также определение условной композицией с переменной а целого типа: T(a)=Z. В этом случае

f={(x,y)E(йлT)x(йлT) : (x(a)<0лy=f0(x) )v( x(a)>0лy=f1(x) )}.

Цикл с предусловием (while-композиция). Пусть p=(^T,f) - операция, аЕй -переменная булева типа, то есть Т(а)={0,1}. Определим M={xEDm(f): ЗпЕ№ |Т(х)](а)=0}. Для каждого хЕМ определим n(x)=min{n>0: [f^x)]^)^}. Циклической композицией с предусловием относительно операции p=(^T,f) и переменной а назовем операцию C^p^^^^g), где §:хЕМ ^ fn(x)(x). Иначе говоря, циклическая композиция с предусловием повторяет преобразование f для данных из области переменных, пока значение переменной а не станет равной нулю. Но так как f°(x)=x, то в случае х(а)=0 повторений нет. Так же как для определения условной композиции, для определения while-композиции можно использовать переменную целого типа.

Auditorium: электронный научный журнал Курского государственного университета. 2014. № 2

Фрумкин А. М. Об объектах, описываемых алгоритмическим языком

Последовательная композиция. Пусть p0(Q,T,ft), pi(Q,T,f2), ... pn=(0,T,fn) -операции. Их последовательной композицией назовем операцию p=(0,T,f), в которой

f=fnfn-1... f0.

Ссылка. Пусть (йД) и (A,S) - эквивалентные области переменных. Пусть p=(Q,T,f) - операция. Ссылкой на операцию p из области переменных (A,S) называется операция q=(A,S,g), где g={(x,y): x£AASAy=u?-1(f(u?(x)))}. В терминологии

программирования переменные из й являются формальными, а переменные из Л -фактическими.

3. Вариант определения вычислительного алгоритма

Предположим, что заданы общее множество переменных 0, система типов переменных S, набор композиций C и конечный набор операций O, которые будем считать элементарными. Пусть мы хотим определить (сконструировать) новую операцию, используя элементарные операции и последовательно строя композиции операций. Описание этой сложной композиции и назовем алгоритмом. Четверку (0,S, C, O) назовем средой определения алгоритма, или средой конструирования.

Для того чтобы дать формальное определение алгоритма, удобно описать обратный процесс декомпозиции некоторой операции. Если мы представили операцию в виде композиции, не являющейся композицией ссылки или композицией расширения операции, то изобразить композицию можно в виде дерева [Ахо 1978; Новиков 2011] высоты 1, корень которого помечен описанием композиции, а терминальные узлы (листья) - описаниями операций-элементов композиции. Далее операции-элементы, используемые в определении композиции, будем называть базовыми для данной композиции. Для условной композиции и последовательной композиции листьев в общем случае несколько, а для композиций сужения и цикла лист один. Если какой-то элемент композиции мы хотим представить как композицию еще более простых операций, то соответствующий лист мы можем превратить в узел с наследниками. Бывший лист помечается описанием композиции, а его новые наследники -описаниями операций-элементов. Таким образом, мы снова получили дерево, но уже высоты 2. Процесс декомпозиции можно продолжать и тем самым последовательно усложнять дерево. Процесс можно считать завершенным, если все описания элементов композиций в терминальных узлах превратились в ссылки на операции из набора элементарных операций.

Полученное дерево является ориентированным упорядоченным помеченным (маркированным) деревом [Новиков 2011]. Каждый его нетерминальный узел описывает некоторую композицию операций, определяемых потомками данного узла. Терминальный узел определяет композицию ссылки. Информация о композиции (маркер узла) имеет разный вид для различных композиций. Возможные структуры маркеров, число и порядок наследников узлов дерева представлены в таблице 1.

Определение 8. Деревом композиций в заданной среде конструирования назовем ориентированное упорядоченное помеченное дерево со свойствами, описанными в таблице 1.

Определение 9. Пусть (йД) - область переменных, Tr - дерево композиций, n -некоторый узел этого дерева. Рассмотрим множество узлов, которые лежат на маршруте от данного узла к корню и имеют тип сужения (введения новой переменной). Переменные, определяемые в этих узлах, назовем рабочими или промежуточными переменными данного узла, а их объединение с множеством й (с соответствующим расширением функции типов) - областью переменных данного узла.

ФИЗИКО-МАТЕМАТИЧЕСКИЕ НАУКИ

Таблица 1

Элементы маркера и наследники узлов, посвященных различным композициям

Тип композиции Дополнительные информационные элементы Число наследников и их порядок

Сужение (введение новой переменной) Новая переменная, ее тип и значение Один

Условная Управляющая переменная, нумерация наследников Два наследника, упорядоченных в соответствии со значениями управляющей переменной

Циклическая с предусловием Управляющая переменная Один

Последовательная Нумерация наследников Совпадает с числом базовых операций в последовательной композиции; порядок наследников совпадает с порядком операций

Ссылка (обращение к существующей операции) Описание множества фактических переменных и соответствия между формальными переменными элементарной операции и фактическими переменными Ноль

Будем говорить, что область переменных (Q,T) согласована с деревом композиций Tr, если выполнены следующие условия:

1) все рабочие переменные каждого узла различны и не принадлежат

2) для каждого узла, помеченного управляющей переменной, эта переменная принадлежит области переменных данного узла;

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

3) для каждого терминального узла область фактических переменных ссылки, помечающей узел, включена в область переменных данного узла.

Композиция сужения операции при построении алгоритма приобретает следующий смысл. Атрибутами композиции сужения являются дополнительная область переменных и значения переменных. Таким образом, область переменных для наследника узла, посвященного композиции сужения, расширяется. Узел-наследник определяет некоторую операцию над этой расширенной областью переменных. Композиция сужения «получает» результат этой операции и «отбрасывает» данные, хранящиеся в дополнительных переменных. Однако операция усечения результата специального описания не требует, поэтому композиция сужения может быть интерпретирована также как введение дополнительных (промежуточных) переменных с заданными начальными значениями.

В данной статье рассматривается композиция сужения, определяющая только одну переменную. Несколько переменных вводятся в виде последовательности композиций сужения.

Композиция расширения используется в описании алгоритма неявно. В терминальном узле в общем случае описывается ссылка на операцию с небольшим числом переменных, меньшим, чем общее число переменных в области переменных данного узла. Однако по умолчанию это описание интерпретируется как расширение ссылки на всю область переменных, соответствующих данному терминальному узлу.

Определение 10. Алгоритмом в заданной среде конструирования назовем набор (й,Т,Тг), в котором (Й,Т) - область переменных алгоритма, Tr - дерево композиций, согласованное с областью переменных.

Auditorium: электронный научный журнал Курского государственного университета. 2014. № 2

Фрумкин А. М. Об объектах, описываемых алгоритмическим языком

Область переменных алгоритма - это область переменных, для которой определяется реализуемая алгоритмом операция. Далее узлы дерева алгоритма и переменные будем обозначать греческими буквами.

Утв. 6. Пусть (0,T,Tr) - алгоритм, 0 - некорневой узел дерева композиций, (Q0,T0) - область переменных родителя узла 0, Tr0 - поддерево, порожденное узлом 0. Тогда (00,T0,Tr0) - алгоритм.

3 Для (00,T0,Tr0) сохраняются как свойства, описанные в таблице 1, так и свойства согласованности. 4

Определение 11. Алгоритм, определенный утверждением 6, будем называть фрагментом алгоритма, определяемым некорневым узлом 0 дерева композиций или 0-фрагментом алгоритма.

4. Вычислительный процесс

Если задан алгоритм (0,T,Tr), то каждому элементу x^OAT можно поставить в соответствие последовательность, которая описывает процесс выполнения операции, задаваемой алгоритмом (или процесс вычисления значения функции, задаваемой алгоритмом). Этот процесс может интерпретироваться как некоторое движение по дереву Tr. Для его описания усложним дерево композиций.

Определение 12. Пусть (0,T,Tr) - алгоритм. Обозначим M, р, p соответственно множество узлов дерева композиций, его корень и родительскую функцию. Деревом алгоритма (0,T,Tr) или расширением дерева композиций назовем дерево, полученное из дерева композиций Tr путем добавления к множеству M еще одного элемента ш, и добавления к родительской функции p пары (р,ш). Пометки узлов дерева композиций сохраняются, а пометкой узла ш будем считать область переменных (0,T).

Новый узел будет обозначать пункт начала выполнения алгоритма и его завершения. Назовем его узлом результата. Узел результата является корневым узлом дерева алгоритма, а корень дерева композиций является его единственным наследником. Можно сказать, что мы «присоединили» корневой узел дерева композиций к узлу результата. В дальнейших рассуждениях корневой узел композиций также будем обозначать р, а узел результата - ш.

Определение 13. Состоянием алгоритма назовем набор из трех компонентов s=(y,n,x). В наборе s элементы у и п - узлы дерева, связанные условием: либо Y=p(n), либо п=Р(у). Компонент x - это данные, связанные с текущим узлом у. Если узел у не является узлом введения переменной, то x - данные области переменных у. Если узел Y - узел введения переменной, то x - данные области переменных п.

Компонент y состояния s будем рассматривать как текущий узел вычислений, п -как предыдущий узел вычислений, x - как данные, преобразуемые в текущем узле. Соответственно, для компонентов состояния s будем использовать обозначения: Y=cn(s) («current node»), n=pn(s) («previous node»), x=d(s) («data»). Область переменных, вообще говоря, меняется от узла к узлу и функция «данные» d(s), соответственно, отражает не только значения переменных, но и их состав.

Определение 14. Для заданного x^OAT назовем начальным состояние

s0=(корневой узел дерева композиций, узел результата, x)=(p^,x).

Состояние алгоритма назовем тупиковым, если текущий узел является терминальным и данные из области переменных не принадлежат области определения функции операции, соответствующей узлу. Состояние алгоритма назовем финальным, если его текущий узел является узлом результата. Состояние, которое является финальным или тупиковым, назовем завершающим. Так как узел результата не является терминальным, завершающее состояние может быть либо финальным, либо тупиковым.

ФИЗИКО-МАТЕМАТИЧЕСКИЕ НАУКИ

Для незавершающего состояния мы можем определить последующее (новое) состояние вычислительного процесса. Новый узел и новые данные определяются в соответствии со смыслом композиций, выбранных в п. 2. Компонент «предыдущий узел» для нового состояния есть компонент «текущий узел» для текущего состояния.

Функцию, которая незавершающему состоянию ставит в соответствие новое состояние, назовем динамической функцией алгоритма. Функцию, определяющую новый узел дерева композиций, назовем функцией переходов алгоритма. Функцию, определяющую новые данные в области переменных, назовем вычислительной функцией алгоритма. Динамическая функция объединяет вычислительную функцию, функцию переходов и функцию предыдущего узла (преобразующую текущий узел в предыдущий).

Функция переходов и вычислительная функция описываются столбцами 3, 4 таблицы 2 соответственно. Вычислительную функцию будем обозначать буквой «ф», функцию переходов - буквой «J», динамическую функцию - буквой G.

В таблице 2 приняты следующие обозначения. Управляющая переменная в графе описания нового состояния для каждой композиции обозначается одной и той же буквой а. Нумерация порожденных узлов текущего узла обозначена одной и той же буквой h. Данные в текущем состоянии обозначены буквой х, данные в новом состоянии - буквой хн.

Определение 15. Пусть (Q,T,Tr) - алгоритм с корневым узлом дерева композиций р и узлом результата ш и х£йЛТ. Вычислительным процессом, порожденным алгоритмом (Q,T,Tr) и исходными данными х£^т, назовем итерационную последовательность, порожденную динамической функцией алгоритма и начальным состоянием Бо=(р,ш,х). Вычислительный процесс назовем успешным, если он конечен и его конечное состояние является финальным.

Алгоритм, с одной стороны, определяет некоторую многоступенчатую композицию операций и, следовательно, некоторую функцию результирующей операции, которую будем называть функцией, реализуемой алгоритмом. С другой стороны, он для исходных данных определяет процесс вычислений. Ясно, что для корректных данных результат вычислений должен совпадать со значением функции, реализуемой алгоритмом, если таблица 2 составлена корректно. Доказательство следующей теоремы опирается на таблицу 2 и является своего рода проверкой того, как правильно мы выразили таблицей 2 свойства композиций.

Теорема. Пусть (Q,T,Tr) - алгоритм, (Q,T,f) - реализуемая данным алгоритмом операция, х£^л^ Для того чтобы х£От(Г), необходимо и достаточно, чтобы вычислительный процесс, порожденный х, был успешным. В этом случае f^x^d^F), где sF - конечное состояние процесса.

В доказательстве будет использована последовательность вспомогательных утверждений.

Утв. 7. Пусть s - вычислительный процесс алгоритма. Для того чтобы состояние sm (m>0) было финальным, необходимо и достаточно, чтобы выполнялись два условия: cn(sm-l)=p и 1^т-1)=ш.

3 Достаточность очевидна. Необходимость. Пусть сп^т)=ш. Согласно таблице 2, переход по дереву осуществляется только из соседнего узла (наследника или родителя), а у узла результата ш только один соседний узел - р. Кроме того, 1)8т-1)=сп^т)=ш. 4

Auditorium: электронный научный журнал Курского государственного университета. 2014. № 2

Фрумкин А. М. Об объектах, описываемых алгоритмическим языком

Таблица 2

Описание вычислительной функции и функции переходов алгоритма____

Текущее состояние Новое состояние

1 2 3

Тип композиции текущего узла Новый узел Новые данные

Сужения (новая переменная а со значением A) Если предыдущий узел родительский, то узел-наследник, иначе узел-родитель Если предыдущий узел родительский, то в данные включается значение новой переменной: x^xUj^A)}, иначе из данных исключается переменная а: xK_xDm(x)\ {а}

Условная с управляющей переменной а Если предыдущий узел родительский, то узел-наследник в соответствии со значением а: h(x). Если предыдущий узел - узел-наследник, то родительский узел Данные не меняются: xn=x

Циклическая с предусловием и управляющей переменной а если x*=1, то узел-наследник, иначе узел-родитель Данные не меняются: xn=x

Последовательная Если предыдущий узел родительский, то первый узел-наследник. Если предыдущий узел является не последним наследником, то следующий наследник. Если предыдущий узел является последним наследником, то родительский узел Данные не меняются: xn=x

Ссылка (обращение к существующей операции) Родительский узел Значение отображения операции ссылки, расширенное на область переменных узла

Определение 16. Состояние s назовем предфинальным, если текущий узел является корневым узлом дерева композиций, а последующий узел - узел результата: J(s)=w.

Утв. 8. Пусть Tr=(M,r,p) - ориентированное дерево, заданное множеством узлов M, корнем r и родительской функцией p:M\(r}^M. Пусть nEN, n>2 и последовательность x:[0..n]^M обладает следующими свойствами: a) xo=xn=r; б) V mE[1..n-1] xm^r; в) VmE[0..n-1] xm+1=p(xm) v xm=p(xm+1). Тогда x1=xn-1EH(r), где H(r) -множество наследников корня.

3 Если n=2, n-1=1^x1=xn-1. Последовательности длины 4, удовлетворяющей условию утверждения, не существует. Действительно, x0=p(x1) (x0 - корень). Если x1=p(x2), то либо x3=p(x2)=x1^x0, либо x2=p(x3)^x0=p3(x3)^x3, И. Следовательно

x2=p(xO=x0, И.

Пусть утверждение верно для любой последовательности длины не более n+1>5.

Рассмотрим последовательность длины n+2. Обозначим у (x) = max h(xk), где h

k£[0..n+1]

обозначает функцию высоты узла. Так как x0=p(x1), то y(x)>1. Если y(x)=1, то x2=p(x1)=x0, И. Поэтому y(x)>2. Пусть y(x)=h(xm), mE[0..n+1]. Так как h(xm)>2, то 1<m<n-1. Если xm=p(xm+1), то h(xm+1)=h(xm)+1>y(x), И. Следовательно, xm+1=p(xm).

ФИЗИКО-МАТЕМАТИЧЕСКИЕ НАУКИ

Аналогично xm-1=p(xm), то есть xm_i=xm+i. Отсюда следует, что если мы удалим из последовательности xm и xm+1, то оставшаяся последовательность x0,..xm-1, xm+2,,...xn будет удовлетворять всем условиям теоремы и по предположению индукции ее первый и предпоследний элемент совпадают. Так как ш-1>1, то первый элемент данной последовательности совпадает с первым элементом исходной. Так как m+1<n-1, то предпоследний элемент либо совпадает с предпоследним элементом исходной последовательности, либо (при m+1=n-1) совпадает с xm-1. Но в последнем случае xm-1=xm+1=xn-1. Следовательно, всегда x1=xn-1. Согласно принципу индукции заключение имеет место при любой длине x. 4

Утв. 9 (Лемма). Пусть (0,T,Tr) - алгоритм, s - вычислительный процесс, порожденный некоторыми данными x^OAT, и для некоторых m,n£Dm(s), n>m+2 выполнены следующие условия: а) cn(sm)=cn(sn)=p (р - корень дерева композиций); б) V kE[m+1..n-1] cn(sk)^p. Тогда cn(sm+1)=cn(sn.1)£H(p) и последовательность sm+1,..sn есть успешный вычислительный процесс для cn^+^-фрагмента алгоритма с начальными данными d(sm+1), если рассматривать р как узел результата для этого фрагмента.

3 Последовательность текущих вершин удовлетворяет условиям a), б) утверждения 8. Условие в) следует из определения функции переходов (табл. 2). Следовательно, cn(sm+1)=cn(sn-1). Обозначим 0=cn(sm+1). Тогда sm+1=(0,p,d(sm+1)), VkE[m+1,n-1] sk+1=G(sk) л cn(sk)^p, и sn=(p,0,d(sn)), то есть для рассмотренной последовательности выполнены условия успешного процесса. 4

Перейдем к доказательству теоремы.

3 Доказательство ведется индукцией по числу узлов дерева композиций. В доказательстве конкатенация последовательностей будет обозначаться квадратными скобками, так, как она обозначается в системе MatLab [Дьяконов 1999]. Корень дерева композиций будем обозначать буквой р, а узел результата -буквой ш.

Если узел один, то он является терминальным и потому помечен ссылкой, определяющей некоторое отображение g:Dm(g)COAT^OAT. Если x^Dm(g), то состояние s0=(p^,x) является тупиковым. Если x£Dm(g), то, согласно последней строке таблицы 2, so является предфинальным состоянием. Следовательно, вычислительный процесс всегда конечен и формально заключение теоремы верно.

Пусть утверждение верно для любого алгоритма с числом узлов дерева композиций, не превышающим nGN. Рассмотрим алгоритм с n+1 узлами.

Возможны четыре случая (А,Б,В,Г) в зависимости от типа композиции, которой посвящен корень дерева композиций р.

А. Композиция корневого узла - введение переменной

Необходимость. Пусть вычислительный процесс s, порожденный x^OAT, конечен, имеет длину m+2, sm - его предфинальное состояние (sm+1 - финальное), ra(s0)=cn(sm)=p. Согласно строке композиции введения переменной в таблице 2, имеем: s1=(0,p,xU{(a,a)}), где 0 - узел-наследник корня. Обозначим Q={qE[2..m-1]: cn(sq)=p}, k=min(Q). Тогда pn(sk) лежит ниже р и потому, согласно таблице 2, 1^к)=ш, то есть sk есть предфинальное состояние, но k<m. Из этого противоречия следует, что Q=0. Тогда по лемме cn(s1)=cn(sm-1)=0 и последовательность s1, s2.. sm есть успешный вычислительный процесс 0-фрагмента алгоритма, sm - финальное состояние. По предположению индукции xU{(a,a)}£Dm(g), где g - функция, реализуемая 0-фрагментом алгоритма. По определению композиции сужения отсюда следует, что x£Dm(f) и f(x)=g(xU{(a,a)})|Dm(x). Далее, по предположению индукции d(sm)=g(xU{(a,a)}) и согласно таблице 2 d(sm+1)=d(sm)P=g(xU{(a,a)})|Dm(x)=f(x).

Auditorium: электронный научный журнал Курского государственного университета. 2014. № 2

Фрумкин А. М. Об объектах, описываемых алгоритмическим языком

Достаточность. Пусть x£Dm(f). Тогда xU{(a,a)}£Dm(g). По предположению индукции вычислительный процесс для 0-фрагмента алгоритма успешен. Обозначим этот процесс через v, его финальное состояние VF=(p,0,g(xU{(a,a)})). Обозначим sF=(w, р, g(xU{(a,a)})p). Конкатенация [so v sF] есть успешный вычислительный процесс исходного алгоритма, порожденный x.

Б. Композиция корневого узла - условная

Необходимость. Пусть а - управляющая переменная условной композиции, 0=h(x„) - узел-наследник корня, соответствующий значению xa. Пусть вычислительный процесс s, порожденный x^OAT, успешен, имеет длину m+2 и sm - его предфинальное состояние, OT(s0)=cn(sm)=p. Согласно строке условной композиции в таблице 2, имеем: si=(0,p,x). По аналогии с пунктом А показываем, что последовательность si, s2.. sm есть успешный вычислительный процесс 0-фрагмента алгоритма, sm - финальное состояние. По предположению индукции x£Dm(g), где g - функция, реализуемая фрагментом алгоритма, определяемым 0. По определению условной композиции отсюда следует, что xEDm(f) и f(x)=g(x).

Далее, по предположению индукции d(sm)=g(x) и согласно таблице 2 d(sm+i)=d(sm)=g(x)=f(x).

Достаточность. Пусть x£Dm(f). Тогда x£Dm(g). По предположению индукции вычислительный процесс фрагмента алгоритма успешен. Обозначим этот процесс через v. Его финальное состояние vF=(p,0,g(x)). Обозначим sF=(w, р, g(x)). Конкатенация [s0 v sF] есть успешный вычислительный процесс исходного алгоритма, порожденный x.

В. Композиция корневого узла - цикл с предусловием

Необходимость. Пусть а - управляющая переменная, 0 - узел-наследник корня дерева композиций. Пусть вычислительный процесс s, порожденный x^OAT, конечен, имеет длину m+2 и sm - предфинальное состояние, ra(s0)=cn(sm)=p. Пусть Q={q£[0..m]: cn(sq)=p}, card(Q)=k+1. Обозначим монотонную нумерацию множества Q через y:[0..k]^Q (у0=0, Yk=m).

Рассмотрим последовательность s(y0), s(y0+1), ... s(y1). Здесь удобнее аргументы последовательности s помещать в скобки, а не представлять в виде индексов. По лемме последовательность s(y0+1), ..s(y1) есть успешный вычислительный процесс 0-фрагмента алгоритма. По предположению индукции результат

d(s(y1))=z1=g(d(s(y0)))=g(x), где g - функция, реализованная 0-фрагментом алгоритма. Если z1(a)=0, то согласно строке циклической композиции s(y1) - предфинальное состояние, то есть k=1. В противном случае рассматриваем последовательность s(y1),...s(y2) и убеждаемся в том, что z2=d(s(y2))=g(d(s(y1)))=g(z1)=g2(x). Продолжаем рассуждения, пока не доберемся до последней пары s(yk-1),...s(yk). В результате получим, что zk=d(s(yk))=d(s(m))=gk(x), причем ViE[0..k-1] ^(а)=1л zk(a)=0. Следовательно, согласно определению циклической композиции с предусловием, x£Dm(f), причем f(x)=gk(x). Далее, согласно строке циклической композиции таблицы 2, d(s(m+1))=d(s(m))=gk(x)=f(x).

Достаточность. Пусть x£Dm(f). Тогда по определению циклической композиции найдется целое m>0: V0<k<m [gk(x)](a)=1 и [gm(x)](a)=0. Если x(a)=0, то m=0 и последовательность s0=(p,w,x), s1=(w,p,x) - искомый успешный вычислительный процесс. Если m>0, то рассмотрим вычислительные процессы u0, u1, ... um-1 0-фрагмента алгоритма для начальных данных x£Dm(g), g(x)£Dm(g), ... gm_1(x)£Dm(g) соответственно. По предположению индукции все эти процессы успешны. Каждый из процессов содержит несколько элементов. Конкатенация [s0 u0, u1, ... um-1, (w,p,gm(x))] является успешным вычислительным процессом, порожденным x, для исходного

ФИЗИКО-МАТЕМАТИЧЕСКИЕ НАУКИ

алгоритма. Это следует из того, что, согласно таблице 2, переход из каждого финального состояния процесса uk осуществляется в начальное состояние процесса процесса uk+i.

Г. Композиция корневого узла - последовательная

Необходимость. Пусть узел р имеет w наследников и 0o,01,..0w-1 - их нумерация. Пусть вычислительный процесс s, порожденный x^OAT, успешен, имеет длину m+2, sm - предфинальное состояние, ra(s0)=cn(sm)=p. Пусть Q={q£[0..m]: cn(sq)=p}, card(Q)=k+1. Обозначим монотонную нумерацию множества Q через y:[0..k]^Q (у0=0, Yk=m).

Рассмотрим последовательность s(y0), s(y0+1), ... s(y1). Согласно таблице 2, J(s0)=J(p,w,x)=00=cn(s1). По лемме последовательность s(Y0+1)=s1, ..s(y1) есть успешный вычислительный процесс для 00-фрагмента алгоритма. По предположению индукции, результат d(s(Y1))=z1=g0(d(s(Y0)))=g0(x), где g0 - функция, реализованная фрагментом алгоритмом узла 00.

Далее рассматриваем последовательность s(y1),...s(y2) и убеждаемся в том, что J(s(Y1))=J(P,00,g0(x))=01=cn(s(Y1+1)), Z2=d(s(Y2))=g1(d(s(Y1)))=g1(z1)=g1g0(x), где g1 -функция, реализованная фрагментом 01-алгоритма. Продолжаем рассуждения, пока не доберемся до последней пары s(Yk-1),...s(Yk). В результате получим, что zk=d(s(Yk))=d(s(m))=gk...g1g0(x)), где gk - функция, реализованная 0к-фрагментом алгоритма. Пусть k<w-1. Тогда узел к не является последним, то есть согласно таблице 2 J(s(Yk))=0k+1^p,g. С другой стороны, k<w-1. Поэтому k=w-1; По определению последовательной композиции f=gw-1...g1g0, то есть x£Dm(f). При этом

d(sm+1)=d(sm)=d(s(Yk))=gk...g1g0(x)=f(x).

Достаточность. Пусть x£Dm(f). Тогда по определению последовательной композиции f(x)=gw-1...g1g0(x). Для к=0 рассмотрим вычислительный процесс v0, порождаемый x, для 00-фрагмента алгоритма. Для каждого k£[1..w-1] рассмотрим вычислительный процесс vk, порождаемый начальными данными gk-1...g1g0(x), для 0к-фрагмента алгоритма. Согласно предположению индукции все эти процессы успешны. Обозначим sF=(w,p,gw-1...g1g0(x)). Конкатенация [s0 v0 v1 ... vw sF] - успешный вычислительный процесс для исходного алгоритма.

5. Пример построения синтаксиса языка

Рассмотрим возможный синтаксис простейшего языка для описания арифметических алгоритмов. Система множеств S состоит из единственного множества - множества целых чисел. Алфавит языка состоит из латинских букв арабских цифр и знаков «+» и «-«. Элементарными операциями выберем присваивание, сложение и вычитание, ссылки на которые имеют вид: «copy(y,x)», «add(y,x)» и «sub(y,x)». Во всех операциях вторая переменная не меняется, а результат записывается в первую переменную.

В условной процедуре и цикле будем использовать целые числа (логическая единица - превышение нуля). Описания типов в данном случае не нужны. Для описания грамматики введем следующие метасимволы:

: := - знак определения;

<> - границы описателя;

# - один или несколько пробелов;

$ - конец предложения.

Грамматика строится с помощью следующих предложений. вычислительная процедура (алгоритм)> ::= <обращение к процедуре> # <композиция> #end $

Auditorium: электронный научный журнал Курского государственного университета. 2014. № 2

Фрумкин А. М. Об объектах, описываемых алгоритмическим языком

<обращение к процедуре> :: = <имя> (<переменные>) $

<переменные>::=<имя> | <имя>, <переменные>$

<имя> ::=<префикс><суффикс> $

<префикс> ::=< буква> $

<суффикс>::=<буква> \<буква> <суффикс> | <цифра>1 <цифра> <суффикс> $ <цифра>::=0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 $

<буква> ::= a jb jo d je fig jh ji jj jk jl fm П О Р к Г Is t U V W X У Z I

a /в jcD E FG и I JK f /m NO p Iq R /s/tiuFIwNYZI $

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

<композиция>::= <лркомпозиция> | <^Ы1е-композиция> | Последовательная композиция >$

<лркомпозиция>:: = if # <имя> # <композиция> #end | if # <имя># <композиция> # else <композиция> #end $

НЫ1е-композиция> ::= while # <имя># <композиция> #end$

Последовательная композиция>::=<элементарная композиция>;

| <элементарная композиция>; # <композиция>$

<элементарная композиция>::= <определение переменной> | <ссылка>$

<определение переменной> ::=<имя> =<целое число>;

< целое число > :: = <знак><неотрицательное целое>

| Неотрицательное целое>$

<знак>::=+ | - $

Неотрицательное целое>:: = <цифра>|<цифра><неотрицательное целое>$ <ссылка> :: = <обращение к процедуре>

В качестве примера опишем операцию умножения. Знаком % отделены комментарии. Сначала опишем операцию умножения на неотрицательное число. mulp(y,x)

p=0; % накопитель суммы

e=1; % переменная, содержащая константу.

while y add(p,x); sub(y,e); end % цикл умножения

oopy(y,p); % установка результата

end

После того как описана процедура “mulp”, ее можно использовать как элементарную и построить общую процедуру умножения. mul(y,x)

if y mulp(y,x) % первый сомножитель положителен else % первый сомножитель неположителен p=0; % будущее произведение sub(p,y); % изменение знака mulp(p,x);

q=0; oopy(y,q); % запись нуля вy sub(y,p); % установка результата (изменение знака p) end

Рассмотренный язык примитивен. В нем нет алгебраических выражений, нельзя описывать параметры и использовать их в ссылках. Для практического применения должно быть усложнено определение алгоритма и, соответственно, усложнен язык. Тем не менее удалось показать процесс построения языка, котором первоначально в явном виде определяется множество описываемых языком алгоритмов.

ФИЗИКО-МАТЕМАТИЧЕСКИЕ НАУКИ

Библиографический список

Ахо А., Ульман Дж. Теория синтаксического анализа, перевода и компиляции. Т. 1. Синтаксический анализ. М.: Мир, 1978. 612 с.

Барендрегт X. Ламбда-исчисление. Его синтаксис и семантика: пер. с англ. М.: Мир, 1985. 606 с.

Гинзбург С. Лекции о контекстно-свободных языках // Алгебрическая теория автоматов, языков и полугрупп / под. ред. М.А. Арбиба. М.: Статистика, 1975. С. 298311.

Дьяконов В.П., Абраменкова И.В. MATLAB 5.0/5.3. Система символьной математики. М.: Нолидж, 1999. 640 с.

Лингер Р., Миллс Х., Уитт Б. Теория и практика структурного

программирования. М.: Мир, 1982. 406 с.

Марков А.А. Нагорный Н.М. Теория алгорифмов. М. Наука, 1984. 432 с. Мендельсон Э. Введение в математическую логику. М.: Наука, 1071. 320 c. Новиков Ф.А. Дискретная математика. СПб.: Питер, 2011. 384 с.

Орлов. С.А. Теория и практика языков программирования. СПб.: Питер, 2013.

688 с.

Пратт Т., Зелковиц М. Языки программирования: разработка и реализация. СПб.: Питер, 2002. 688 с.

Рейуорд-Смит В. Дж. Теория формальных языков. Вводный курс. М.: Радио и связь, 1988. 128 с.

Себеста Р. У. Основные концепции языков программирования. М.: Вильямс, 2001. 672 с.

Трауб Дж., Вожьняковский Х. Общая теория оптимальных алгоритмов. М.: Мир, 1983. 382 с.

Успенский В. А. Машина Поста. М.: Наука, 1988. 96 с.

Фор Р. Кофман А. Дени-Папен М. Современная математика. М.: Мир, 1966.

271 с.

Хопкрофт Д., Мотвани Р., Ульман Дж. Введение в теорию автоматов, языков и вычислений. М.: Вильямс, 2002. 528 с.

Bohm C., Jacopini G. Flow Diagrams, Turing Machines And Languages With Only Two Formation Rules // Communications of the ACM. 1966. Vol. 9. N 5, May,

PeterR. Graphschemata ud rekursive Funktionen // Dialectica. 1958. 12. P. 373-393.

Auditorium: электронный научный журнал Курского государственного университета. 2014. № 2

i Надоели баннеры? Вы всегда можете отключить рекламу.