УДК 519.6
DOI: 10.18101/2304-5728-2018-2-95-109
ОБ ОДНОМ ПОДХОДЕ К МОДЕЛИРОВАНИЮ ДИНАМИЧЕСКИХ СИСТЕМ
О Николаева Дарима Доржиевна
аспирант,
Бурятский государственный университет Россия, 670000, г. Улан-Удэ, ул. Смолина, 24а E-mail: darisha89@yandex.ru
О Ширапов Дашадондок Шагдарович
доктор физико-математических наук, профессор, Бурятский государственный университет Россия, 670000, г. Улан-Удэ, ул. Смолина, 24а E-mail: shir48@mail.ru
© Антонов Вячеслав Иосифович
кандидат физико-математических наук, доцент, Бурятский государственный университет Россия, 670000, г. Улан-Удэ, ул. Смолина, 24а E-mail: antonov.imi@mail.ru
При разработке комплексов компьютерных программ, моделирующих различные динамические системы, часто требуется построить математические модели той или иной предметной области. В статье для заданного языка программирования построены функции, такие, что для любой заданной программы можно построить суперпозицию функций (терм). Вычисление упомянутого терма порождает вычислительный процесс, который возникает при исполнении программы. Если программа предназначена для моделирования динамической системы, то вычисление алгебраического терма является адекватным моделированием функционирования динамической системы. Таким образом, разработана алгебраическая модель языка программирования, предназначенная для моделирования динамических систем, где вьиисление алгебраического терма порождает моделирующий процесс динамических систем. Для построения указанных функций необходимо точно описать области определения и области значений этих функций. Для построения областей определения и областей значений этих функций используются контекстно-свободные грамматики, операция отождествления. Кроме указанных средств применяются понятие многоуровневости модели, концепция косвенного именования (косвенная адресация), рекурсия, а также некоторые простые средства из теории алгоритмов и теории программирования. Таким образом, найден достаточно «широкий» по практическому охвату способ компьютерного моделирования различных динамических систем, где произвольная программа может быть представлена в виде алгебраического терма универсальной алгебры с сигнатурой из указанных функций.
Ключевые слова: динамические системы; моделирование; математическая модель языка; универсальная алгебра; контекстно-свободная грамматика; рекурсия; интерпретатор; семантика.
Введение
Для того чтобы детально исследовать динамические процессы вычислений на компьютере, необходимо удобное представление алгоритмов, областей их определения и значений с точки зрения построения новых программ или функций на основе заданных базисных функций по заданным правилам. Одной из основных задач является построение базисных функций. Тогда любая программа будет представлена в виде суперпозиции базисных функций. Для того чтобы решить указанную проблему, мы используем следующие формально точные понятия (математические примитивы): конечное множество структурно согласованных контекстно-свободных грамматик; операция отождествления; универсальная функция с\а1 (аналог интерпретатора ЛИСП) в терминах КС-грамматик; рекурсия; многоуровневость понятий, которая является естественной для формальных грамматик; формальные модели различных типов памяти: память с варьируемой структурой, с постоянной структурой и управляющая память. Данный указанный перечень математически точных понятий (примитивов) позволяет построить математическую модель языка программирования (ММЯП), которая, в свою очередь, позволяет моделировать на компьютере различные динамические системы.
1. Постановка задачи
В данной статье требуется построить модель, которая для любой заданной синтаксически правильной программы х в языке программирования общего назначения (Алгол 68, С++, Паскаль и т. д.) указывает способ представления отображения из области определения (входные данные) в область значений (выходные данные). Данное отображение индуцируется программой х в виде алгебраического терма /<е /'(О). где Т{0) — множество всех термов в языке Ь, О, — сигнатура базисных функций языка Ь . Для этого необходимо представить семантику языка программирования Ь в виде алгебраической системы (А/.О). При запуске программы х порождаются вычислительные процессы. Относительно этих вычислительных процессов в выбранных точках программы (алгебраического терма '/(О)) можно сформулировать интересуемые нас утверждения, представленные в различных видах: в виде позитивно образованных формул [1], в виде формул языка логики первой и второй ступеней алгебраической системы и т. д. Чтобы представить произвольную программу х языка Ь в виде алгебраического терма /<е /'(О). необходимо построить систему базисных функций
О. = {Ф0О),..., ФЫт, Ф0(2),..., ФЫ{т)} .
Синтаксический анализ заданной программы х дает в качестве результата суперпозицию базисных функций /< е '/ (О). В статье показано, как можно построить алгебраическую систему для заданного языка Ь. При конкретной реализации языка программирования Ь универсальность рассматриваемой модели /'(О) ограничивается множеством допустимых состояний памяти. При первом приближении это может быть обусловлено количеством выделяемых разрядов для представления чисел, количеством букв в строке (строковые данные) и т. д. Если более детально разобрать вопрос о множестве допустимых состояний памяти (ОДСП), то необходимо рассматривать представление структуры различных видов значений в памяти компьютера. Под различными видами данных подразумеваются числа (целые, вещественные, комплексные); логические значения; представления процедур и т. д. Для того чтобы формально описать структуру различных достаточно нетривиальных видов данных в указанном подходе используются многоуровневые грамматики видов и
значений. Формально можно описать ОДСП пятеркой (V,В,С1,С2,С , где V — множество переменных программы, В = {Ь М} — множество всех частичных отображений множества переменных V в М , где М — множество значений, которые индуцируются грамматиками 01,02,а . Здесь (¡^ — грамматика видов данных, (¡2 — грамматика
значений, С1 — грамматика структуры представления данных во
внутренней памяти, которая формально описывает структуру представления всех видов значений. Для представления сложных межвидовых логических отношений, помимо вышеуказанной пятерки, можно ввести функции приведения одних видов в другие. Ниже в приложении приведены некоторые примеры таких
функций: £1<1), |2', g(21), . Эти функции вводят частичный порядок на множествах ,М , которые порождаются грамматиками , (¡2 со отв етств енно.
2. Способы построения функций в терминах формальных грамматик
Для решения поставленной задачи использование КС-грамматик тесно связано с внедрением именных множеств: нетерминальные и терминальные символы образуют имена множеств, элементы которых являются словами в некоторых алфавитах. В связи с этим рассмотрим понятие имя более подробно. Понятие имя в программировании и в компьютерном моделировании играет фундаментальную роль. Если смотреть на задачу с точки зрения прагматики, то постановщик задачи имеет дело с предметно-ориентированной логикой: имена понятий, имена объектов, имена отношений между ними и т. д. С другой стороны, компьютер имеет абстрактные пронумерованные ячейки памяти, у которых номера ячеек явля-
ются их адресами, а также абстрактные машинные операции либо абстрактные операции языка программирования общего назначения, оторванные от предметной логики. Для построения модели предметной области, прежде всего, необходимо найти удачное представление элементов именного множества для максимального упрощения предметно-ориентированных операций, функций, предикатов и формул предметной области в памяти разрабатываемого приложения вместе со всеми их свойствами и отношениями (единицы измерений значений переменных). При разработке приложения разработчик всегда вынужден выполнить переход-операцию от более общих абстрактных понятий-имен к более конкретным предметно-ориентированным понятиям-именам. В связи с этим становится актуальной работа с именами, обозначающими понятия и их интерпретации: 1) операция разыменования; 2) операция именования. Для построения адекватной цифровой модели предметной области с каждым именем (объектом, понятием) взаимно-однозначно связывается неизменный адрес памяти. Таким образом, в данной работе понятие имя и его адрес отождествляются. На основании вышесказанного в работе выбран язык программирования с расширенной концепцией косвенного именования, для которого строится универсальная алгебра (М,0), являющаяся моделью семантики заданного языка.
Рассмотрим конкретно операции разыменования и именования на примере реализации семантики этих операций средствами функциональных грамматик. Для этого рассмотрим семантику языка программирования А8РЬЕ с многократной адресацией, где наиболее наглядно демонстрируется семантика именованных множеств. В [4] проводится сравнение четырех подходов к формальному описанию языков программирования на примере простого подмножества языка Алгол-68. В данной работе выбрана двухуровневая универсальная схема вида:
где М_х—множество всех переменных типа конт. С0 —КС-грамматика, задающая синтаксис языка АБРЬЕ, I) — множество текстов программ, М — множество видов, М2 — множество значений, {ФгЛ)} —
конечное множество функций (алгоритмов) на уровне видов Мх,
(2) ^ ^ {Ф/ " } — конечное множество функций (алгоритмов) на уровне значений
М2, } — конечная система преобразований видов, порождающая
(2)
частичный порядок на множестве Мх, ^ ~ } — конечная система преобразований значений, порождающая частичный порядок на множестве М2. МножестваМ_1,М1,М2 порождаются КС-грамматиками О 1,01,02 соот-
ветственно. Построение алгоритмов {Фг1)},{Фг2)},{^<1.) в терми-
нах этих грамматик является основной задачей конструктивного определения математической модели языка программирования. Внешняя грамматика аи представляет собой четверку:
во=<Гто>Гт>РоЛ>>
где \'то — множество терминальных символов, УГ]Ч0 — множество нетерминальных символов, Р — множество правил вида
А хАхАп ...х,А,х, , (Ф7(1)), (1)
I 1 /1 2 ¡2 к Л к+1 V V /
Ад — начальный символ грамматики.
*
Обозначим множество терминальных цепочек через V , а множество
* (1) сентенциональных форм через (Утд Ухо) . Алгоритм Фг для
соответствующего нетерминала А будет иметь следующий вид:
ФгХ) = {<тип > у .,< тип >Л у < тип >\
П ч о(№ о(/*»)
(2)
т+1
где г — терминальная цепочка одной из грамматик. Основную роль в
указанных алгоритмах Фг играет операция отождествления, которой можно дать следующее определение. Пусть задана КС-грамматика
СМ=(УМ,УТ,Р,8), которая порождает множество М, где
М ={х\х- слово, порожденное грамматикой (¡х/
из некоторой сентенциальной формы (¡х/ }.
Каждая функция Ф/ определена на некотором подмножестве декартовой степени множества М со значениями во множестве М. Пусть
(р,у/ — слова в алфавите Уу и Уу. (сентенциальные формы грамматики
О), где нетерминальные символы помечены индексами, которые являются формальными параметрами операции отождествления. Тогда операция отождествления синтаксически представляется в виде (<р) у/ и содержательно определяется как отображение совокупности входных формальных параметров, принадлежащих к (р, на совокупность выходных (т. е. результирующих) формальных параметров, входящих в цт . Семантически
операция отождествления (ср)у/ трактуется так: если х — фактический
*
аргумент этой операции, то строится вывод <р => х этого слова в грамматике С . Тогда нетерминальные символы слова <р получают в качест-
ве значений некоторые подслова слова х (одинаковые нетерминалы, помеченные одинаковыми символами, должны принимать одни и те же значения), слово у/ определяет результат этой операции.
В общем случае операция отождествления неоднозначна. С целью достижения однозначности введем операцию левого отождествления: самый левый нетерминал в слове (р будет получать в качестве значения минимальное по длине под слово слова х [2; 3]. Сказанное продемонстрируем на примере.
Пример 1. Пусть задана простейшая грамматика GM :
М : := AM \BM\s; А: := аА \ а ; В: := ЪВ \ Ъ .
Рассмотрим функцию /■ = (ABA)BAB ; <р = ABA, у/ = BAB . Пусть х = аЪт а . Тогда вывод <р х определит значения для А и В:
А = а" , В = Ът . Результат равен у/ =ВАВ = Ъ™аЪ™ .
Необходимо подчеркнуть важность операции отождествления (ср)у/ в процессах обобщения и конкретизации функций (функциональных понятий) совместно со следующими нижеперечисленными операциями и концептуальными элементами: КС-грамматика для описания синтаксиса и структуры данных, описание суперпозиций функций и операции eval и
quote (аналоги операций из Лиспа), описание множеств М для описания
управления данными и памятью, память для описания структуры управления последовательностью действий, рекурсия, альтернативная операция А\В, управляющая память, функции приведения, многоуровневость языка.
Пример 2. Пусть задан фрагмент программы:
начало цел v. I ; имя имя цел а ; ...
Рассмотрим на данном фрагменте, как работает система базисных функций
Q = {Ф0О),..., ФЫт, Ф0(2),..., ФЫ(т)} .
Результатом будет следующая лемма.
Лемма 1. В памяти формируется в соответствии с ОДСП следующая структура данных:
V * l#vl *неопр#/ * 1#/1 * неопр#а * 1#а1 * 2#а2 * Heonp#ío,F .
Доказательство. Предположим, что начальное состояние памяти до объявления переменных равно s со F , где F — файл ввода. При входных данных цел v для указанной базисной функции Ф6= (текст х,у) знач: (ВИД, X) г (имя ВИД, X * \ # Х \. ВИД) имеем сопоставление: (цел, v) г ( имя цел. V * 1 # vi, цел ). Для Ф5 = (знач х, текст у) знач: (ВИД 8сМ , X ) г (ВИД, MX * \ #Х\ * . ВИД) имеем сопоставление: (имя цел &MJ )
г (имя цел.МI * 1#/1 *, имя цел). Таким образом, сопоставляя каждому нетерминальному символу (формальному параметру) его фактические параметры (значения), можно вычислить остальные функции, фигурирующие в узлах синтаксического дерева разбора: Ф2,Ф6 и ФЗ . Результат последовательного вычисления указанных функций даст следующее состояние памяти:
V * l#vl *неопр#/ * 1#/1 * неопр#а * 1#а1 * 2#а2 * неопр#ю,Р ,
что и требовалось доказать.
Пусть грамматики ООО порождающие множества М,М
соответственно, имеют вид О г = (УГ .К., А ) , (¡1 = (Уп.УХ1.1].А1) ,
02 = (УГ2- У.,-,. 1\. А) . Общим и наиболее естественным требованием к построению грамматикС О О является требование об их структурной согласованности. Грамматика О. (1.(0;) = М ) называется структурно согласованной по терминальным символам {а .} = У^1' а V с грамматикой О (Ь(0.) = М.) тогда и только тогда, когда каждому
и т. сопоставлено однозначно некоторое подмножество М подслов слов множества М так, что каждому слову х = апаг...ат е (Уп ) будет соответствовать подмножество М . ,...,м множества М .
Структурная согласованность грамматик ООО требуется для
выразительного построения логики базисных функций языка. Под структурной согласованностью будем понимать логическую и смысловую связь именованных нетерминалов и терминальных строк, которые диктуют необходимость построения семантических
отображений {Ф7<1)},{Ф7<2)},{^") . Другими словами,
У,:; г-,Ух1 г-, Уу2 Ф 0, УТ; г 1 Уп г-, Уп Ф 0. Сказанное продемонстрируем на следующих грамматиках О и О 2. где О^ — грамматика видов переменных, а 02 — грамматика значений переменных языка А8РЬЕ.
Содержательно нетерминал-понятие АБСТР из грамматики О
обозначает уровень абстракции или двойственное ему понятие — уровень конкретизации.
Грамматика 01 = (Уп . Уу1.1'. ПРАВИД) — структура видов. ПРАВИД : : = ВИД | ничто; ВИД : := АВИД | АБСТР ВИД;
101
АВИД : := лот | дел; АБСТР : := е | АБСТР имя; Упорядоченность на М : gj"0 = (имя ВИД ) ВИД.
Пара структурно согласованных нетерминалов АБСТР из грамматики G и ЦЕПЬ из грамматики G2m моделирует концепцию косвенного
именования. ЦЕПЬ является конкретизацией АБСТР. G2m :
ПРАЗНАЧ : := ЗНАЧ | неопр ; ЗНАЧ : := АЗНАЧ | ЦЕПЬ АЗНАЧ;
АЗНАЧ : := ЛОГ | ЦЕЛ ; ЦЕПЬ : : = е | ЦЕПЬ ХН#ХН * ; ЦЕЛ : := IIIIII | неопр ; ЛОГ : := истина | ложь | неопр ; Н : := s | Ц | ЦЦ | ЦЕЛ ; Ц : := 0 | 1 | 2 . . . | 9 . Упорядоченность на М_х:
g 2) = ( конт t , знач х)знач : (М#ХН * РМтcoF, ХН) Р.
Из представленных грамматик видно, что существует квазиизоморфизм, т. е. некоторое подобие изоморфизма, а именно:
ПРАВИД -> ПРАЗНАЧ ; ВИД -> ЗНАЧ; АВИД -> АЗНАЧ; АБСТР -> ЦЕПЬ; имя Н #ХН * ;
лог —> ЛОГ : : = истина | ложь | неопр ; цел —> ЦЕЛ : : = IIIIII .
Из вышесказанного видно, что грамматика G2m является продолжением грамматики G : терминальные символы грамматики Gl находят дальнейшую конкретизацию. Грамматику G2m назовем продолжением грамматики G по терминалам имя, лог, цел.
Для улучшения читабельности семантической функции присваивания Ф7(1) и Ф7(2) (верхние индексы (1) и (2) указывают, что данные функции рассматриваются на уровне видов и значений соответственно, однако, возможно, индексы будут опускаться, если это не будет приводить к путанице) необходимо преобразовать в сторону упрощения грамматику ^ а)
G2 , используя идею косвенного именования: громоздкий нетерминал
ЦЕПЬ заменим на ХН для упрощения алгоритмической обработки и понимания сложноструктурированной информации, которая находится в сжатом виде в списке. Для этого достаточно иметь имя ХН (head-list) вышеупомянутого списка. Семантические смыслы нетерминалов ЦЕПЬ и Н неразрывно связаны: ЦЕПЬ является списком; нетерминалы Хи Н вместе являются начальным адресом отрезка списка ЦЕПЬ в момент исполнения функций Ф5,Ф6,Ф7; ХН есть ячейка, содержащая ссылочный адрес на следующий элемент списка. Конкретное значение есть список, однако для однозначного задания значения достаточно указать на-
чальный адрес списка ХН . В связи с этим выполним преобразование,
^ (!) г^
которое упрощает грамматики (т2 в грамматику (т2:
ПРАЗНАЧ : := ЗНАЧ ; ЗНАЧ : := ЦЕЛ | ЛОГ | ХН | неопр | е ; ЦЕЛ : := ЦЦЦ ; ЛОГ : := истина | ложь ;
Я : := ЦЕЛ ; Ц : := 0 | 1 | 2 | 3 ... | 9 ; X : := <бкв> | X <бкв> .
Принципиальным является то, что семантическая нагрузка на ХН увеличивается, так как в данном случае ХН является значением и одновременно косвенным именем всей сложной цепи, представляющей собой
сложноструктурированное значение. При этом описание функций
(2) (2) (2) ^ Ф5 " ,Ф6 " ,Ф1 ' на уровне значений значительно упростится. Данный
прием косвенного именования через ХН дает нам гибкий инструмент для управления областями видимости объектов при многоуровневом моделировании.
При статическом объявлении переменных в блоке программы для каждой переменной отводятся фиксированные места в памяти, например, если объявлена переменная имя цел V, то в памяти образуется структурированный список следующего вида:
Рис. 1. Структура переменной в памяти
Адрес А1 отождествлен с переменной X и указывает или именует место в памяти следующего элемента списка. В данном случае А1 (при Н = 1 ) является адресом второго элемента списка (у\,А2). Адрес А2 (при Н = 2) является адресом третьего элемента списка. Данный алгоритм обрабатывает объявления переменных и формирует ОДСП. ОДСП имеет ограничения, продиктованные структурой представления переменных внутри памяти. В качестве примера ограничения ОДСП можно сформулировать следующую лемму. Пусть т0 принадлежит набору элементарных типов (цел, вещ, компл. литера, проц. лог}.
Лемма 2. Если переменная X в программе объявлена в виде
п
«имя т0Х», то в соответствии с алгоритмической моделью О = {ФО'",..., ФЫ'", ФО'2',..., ФЫ<п"} формируется список вида
X * 1#Х1 * 2#...#ХН * т0, где Н = л + 1.
Доказательство проводится методом математической индукции в соот-
(2) (2) (2)
ветствии с алгоритмами (Ф2 ' . Ф5 ' ,Ф6 ' ,/•), которые приведены в разделе 3.
Рассмотрим операции приведения данных от одного вида к другому. Операция привидения формально описывает логистику типов данных для упрощения построения алгоритмов над типами данных. Для этого рассмотрим пример в виде фрагмента программы на А8РЬЕ: начало {к0} имя2 цел I ; цел V ; {К1} I := 2 ; V := 15 ; {к2} I := V {к3} конец.
В фигурных скобках мы расставили точки для комментариев.
{к0}: в данной точке состояние памяти будет следующим £ со Р, где £ —
пустая память.
{К1}: состояние памяти согласно леммам 1, 2 будет:
I * 1#/1 * 2#/2 * 3#/3 * неопр#у * Ыу\ * неопр# {к2}: I * 1#/1 * 2#/2 * 3#/3 * 2#у * 1#у1 * 15#
{к3}: в данной точке типы заданных аргументов для операции присваивания отличаются.
На начальном этапе рассматривается данный вопрос на уровне видов. В данной операции участвуют на уровне видов следующие функции: операция присваивания Ф7(1) = (знач х,у) знач: ( имя ВИД, ВИД) имя ВИД и операция преобразования видов £1<1) = (имя ВИД) ВИД. На вход Ф7(1) первый фактический аргумент I имеет тип имя2 цел, а второй фактический аргумент V имеет тип цел. Однако формальные аргументы функции
Ф7(1) имеют типы: первый аргумент имя ВИД, а второй аргумент ВИД. Непосредственное сопоставление фактических аргументов к формальным не удается: у первого аргумента одно лишнее имя. В таком случае система автоматически однократно вызывает вспомогательную функцию
£1<1) = (имя ВИД) ВИД и преобразует первый аргумент к виду имя цел. И
(2)
при этом когда на уровне значений запускается функция Ф7 , то она автоматически аналогично однократно вызовет для первого аргумента вспомогательную функцию на уровне значений
Я® = (конт г, знач х) знач : (М#ХН * РМтсор, ХН) Р.
Если бы переменная I имела вид «имя цел I», то в таком случае вспомогательная функция на уровне видов ^^ = (имя ВИД) ВИД встраивалась бы в текущую суперпозицию на вход операции присваивания автоматически (п — 1) раз, и соответственно на уровне значений функция
£22) = (конт t, знач х) знач : (М#ХН * РМтсоР, ХН) Р вызывалась бы автоматически (п - 1) раз. Другими словами, вычисление на уровне видов дополняет суперпозицию базисных функций необходимым количеством вспомогательных функций для преобразования видов, чтобы на уровне значений мы получили изоморфную суперпозицию базисных функций, являющуюся моделью программы.
Если обозначить за х текст программы, ^ — суперпозицию базисных функций на уровне видов, 1\ — суперпозицию базисных функций на уровне значений, } и } — функции преобразования видов, то схему работы построенной модели можно представить следующим образом
Рис. 2. Схема работы построенной модели
Готовая для исполнения программа порождает процесс моделирования динамической системы.
3. Алгебраическая модель языка программирования
Используя вышеописанное, построим полное формальное определение синтаксиса и семантики языка А8РЬЕ.
Грамматика О = (УТ , Ух , Р , Е) — модель памяти типа конт.
1. Е::= МсоР; М — внутренняя память, 1< — входной и выходной файлы;
2. М: := ВИДХ#М | X * ЗНАЧ#М | е ;
3. /•': := В§В;
4. В: := В * ЗНАЧ | е ;
Начальное состояние памяти: Е =е со В § е , где В — файл ввода.
Г^ ={со, §, *,#,£,X,ВИД,ЗНАЧ}, Г^ ={Е,М,Е,В}.
Грамматика С0 = (¥то, К.;о ,Р0,< программа >) — синтаксис. < прогрсшма> : : = начало <описания> ; <операторы> конец Ф\ <описат1Я> : := <огтсание> ; Ф2 | <описат1Я> <описание> ; ФЗ <операторы> : := <оператор> ; Ф0 | <операторы> <оператор> ; Ф4 <огтсание> : := <огтсание> , X Ф5 | ВИД X Ф6 <оператор> : := <оператор присваивания> Ф0 | <условнъш> ФО
<цикл> Ф0 | <условнъш> Ф0 | <ееод-еыеод> ФО <оператор присваивания> : := <идент> := <еыражение> Ф1 <условнъш> : : если <еыражение> то <операторы> все Ф8 если <еыражение> то <операторы> иначе <операторы> все Ф9 <цикл> : := пока <еыражение> цикл <операторы> конец Ф10 <ееод-еыеод> : := ввод X Ф11 | вывод <выражение> Ф12 <выражение> : := <множителъ> Ф0 | <выражение> + <множителъ> Ф13
<множителъ> : := <первичное> Ф0 \<множителъ> *<первичное> Ф14 <первичное> : := <идент> Ф0 | <константа> Ф15 \
(<выражение>) Ф0 | (<сравнение>) Ф0 <сравнение> : := <выражение> = <выражение> Ф16 \
<выражение> Ф <выражение> Ф\1 X : := <идент> Ф18 <константа> : := ЛОГ | ЦЕЛ <идент> : := <буква> | <идент> <буква> <буква> : := а \ б \ е \ г... \ я .
Функции Ф/ (/ = 1, ...,18) на уровне видов:
Ф0 = ( знач х) знач: (ПРАВИД) ПРАВИД
Ф1 = ( конт t, знач х, у) конт: (М со Р, е, ПРАВИД) £ со Р
Ф2 = ( конт г1, знач х) конт: (Р,М) ФЪ(Р,е,М)
ФЗ = ( конт ¿,значх, у) конт: ((М ВИД Х#Р, е,ВИД0) Х#Мт) 1| (£,е,ВИДХ#М) Ф3(имя ВИДХ#Р,е,М) I (Е,е, е) знач ( е )) Ф4 = ( знач х,у ) знач: (ПРАВИД, ПРАВИД(1)) ПРАВИД(1) Ф5 = ( знач х. текст у) знач: (ВИДХ#М,Х(1))ВИДХ#МВИДХ(1) # Ф6 = (текст х. у ) знач: (ВИД.X) имя ВИДХ# Ф7 = (знач х, у) знач: ( имя ВИД, ВИД) имя ВИД Ф8 = (знач х, у) знач : (лот ПРАВИД) ничто
Ф9 = (знач х,у) знач: ( (лот, ПРАВИД, ПРАВИД) ПРАВИД | (лот, ПРАВИД, ПРАВИД(1)) ничто) ) Ф10 = Ф8; Ф11 = Ф12 = Ф0
Ф13 = (знач х, у ) знач: ((цел, цел) цел | (лот, лот) лот) Ф14 = Ф13; Ф15 = (текст х) знач: ((ЦЕЛ) дел | (ЛОГ) лот ) Ф16 = (знач х. у) знач: (( ВИД,ВИД) лот); Ф17 = Ф16 Ф18= (конт t . текст х) знач:(М ВИД Х#Р, Х)ВИД
Функции Фi (/ = 1, ...,18) на уровне значений: Ф0 = ( знач х) знач: (ПРАЗНАЧ) ПРАЗНАЧ Ф1 = ( конт ^, знач х, у) конт: (М со Р, е, ЗНАЧ) е со Р Ф2 = (знач х) знач: ( ВИД &М) М
ФЗ = ( конт . знач х. у) конт. функ: (М со Р,Мт ,ВИД &Мт)
ММтМ(2)со знач (е ) Ф4 = ( знач х.у) знач: (ПРАЗНАЧ, ПРАЗНАЧ(1)) ПРАЗНАЧ(1) Ф5 = ( значат . текст у) знач: (ВИД &М ,X) г (ВИД,МХ * 1#Х1*, ВИД)
Ф6 = (текст х. у ) знач: (ВИД, X) г ( имя ВИД. Х*1#Х1*,ВИД) г = ((ВИД,ЛОТ/ , имя ВИД(1) )
г (ВИД,ЛОТ/ * еуа1(Н + \)#Хеуа1(Н + 1)*,ВИД0))
| (ВИД,ЛОЯ,ВИД(1))ВИД &МХН *неопр#) Ф1 = ( конт г, знач х,у) конт: (МХН* ЗНАЧ
ХН , ЗНАЧ0)) МХН * ЗНАЧ0) #Мтсо ^ Ф8 = (знач х, функ у) знач : ((истина, у) у ) | (ложь, у) е ) Ф9 = ( знач х, функ у, г) знач : ((истина, у, г) у ) | (ложь, у, г) г); Ф10 = (функ х. у ) знач: (х,у) г^х,х,у)
Гх = ( знач х. функ у. г ) знач: (( истина, у. г ) /4 (г, гх (у. у. г)) | (ложь. У, г,) е;
Ф12 = (контг. значх) конт: (.МсоВ § £(1),ЗНАЧ) Мсо В § Вт * ЗНАЧ Ф13.1= (знач х,у) знач: (ЦЕЛ, ЦЕЛ(1)) еуа! (ЦЕЛ+ЦЕЛ(1)) Ф13.2 = (знач х,у) знач: ((истина, ЛОГ) истина | (ложь, истина) истина | (ложь, ложь) ложь)
Ф14.1= (знач х. у ) знач: (ЦЕЛ, ЦЕЛ(1)) еуа! (ЦЕЛ*ЦЕЛ(1)) Ф14.2 = ( знач х. у) знач: ( (ложь. ЛОГ) ложь | ( ЛОГ, ложь) ложь
| (истина, истина) истина)
Ф15 = (текст х) знач: (ЗНАЧ) ЗНАЧ;
Ф16= (( знач х. у ) знач: (НЕЛ. ЦЕЛ) истина | (ЦЕЛ, ЦЕЛ®) ложь) Ф17 = (( знач х, у) знач: (ЦЕЛ, ЦЕЛ) ложь (ЦЕЛ, ЦЕЛ®) истина
| (ЛОГ, ЛОГ) ложь (ЛОГ+ЛОГ(1)) истина) Ф18 = ( конт г. текст х) знач: (МХ * ЗНАЧ §М0)ю^,Х) ЗНАЧ.
Заключение
В данной работе разработан подход к компьютерному моделированию динамических систем. Для этого был построен класс функций, являющийся алгебро-логической моделью языка программирования общего назначения. Тогда любая компьютерная программа, предназначенная для моделирования динамической системы, порождает моделирующий процесс. При данном подходе указанная программа представляется в виде алгебраического выражения (терма) универсальной алгебры, являющейся семантикой языка программирования. Имея терм для моделирования динамической системы, можно сформулировать и математически корректно доказать те или иные теоремы о процессах моделирования.
Литература
1. Интеллектное управление динамическими системами / С. Н. Васильев [и др.]. М.: Физико-математическая литература, 2000. 352 с.
2. Семантика языков программирования: пер. с англ. / под ред. В. М. Курочки на. М.: Мир, 1980. 395 с.
3. Тузов В. А. Математическая модель языка. JL: Изд-во ЛГУ, 1984. 176 с.
4. Тузов В. А. Подход к построению универсальной схемы языка. Синтаксис // Программирование. 1980. № 5. С. 17-25.
ON A CERTAIN APPROACH ТО MODELING DYNAMIC SYSTEMS
Darima D. Nikolaeva
Research Assistant,
Buryat State University
24a Smolina St., Ulan-Ude 670000, Russia
E-mail: darisha89@yandex.ru
Dashadondok Sh. Shirapov
Dr. Sci. (Phys. and Math.), Prof.,
Buryat State University
24a Smolina St., Ulan-Ude 670000, Russia
E-mail: shir48@mail.ru
Vyacheslav I. Antonov
Cand. Sci (Phys. and Math.), A/Prof.,
Buryat State University
24a Smolina St., Ulan-Ude 670000, Russia
E-mail: antonov.imi@mail.ru
When developing complexes of computer programs modeling various dynamic systems, it is often required to build mathematical models of a particular subject area. In the article we constructed such functions that it is possible to construct a superposition of functions (term) for any given programming language. Calculating the above term generates a computational process that occurs when the program is executed. If the program is designed to model a dynamic system, then the calculation of the algebraic term is an adequate simulation for the dynamic system functioning. Thus, an algebraic model of a programming language is developed for modeling of dynamic systems, where calculation of algebraic terms generates modeling process of dynamical systems. To construct these functions, it is necessary to accurately describe the domain of definition and the range of values of these functions. To construct domains of definition and ranges of values for these functions we used context-free grammars, and identification operation. In addition to these tools, the concept of a multi-level model, the concept of indirect naming (indirect addressing), recursion, and also some simple tools from the theory of algorithms and programming theory are used. Thus, a method of computer modeling of various dynamic systems, where an arbitrary program can be represented as an algebraic term of a universal algebra with a signature from the indicated functions, is found to be sufficiently broad in practical coverage.
Keywords: dynamic systems; modeling; mathematical model of language; universal algebra; context-free grammar; recursion; interpreter; semantics.
108
References
1. Vasil'ev S. N., Zherlov A. K., Fedosov E. A., Fedunov B. E. Intellektnoe uprav-lenie dinamicheskimi sistemami [Intelligent Control of Dynamic Systems]. Moscow: Fiziko-matematicheskaya literatura Publ., 2000. 352 p.
2. Semantika yazykov programmirovaniya [Semantics of Programming Languages]. Moscow: Mir Publ., 1980. 395 p. (Transí, from English)
3. Tuzov V. A. Matematicheskaya model' yazyka [Mathematical Model of Language]. Leningrad: Leningrad State University, 1984. 176 p.
4. Tuzov V. A. Podkhod k postroeniyu universal'noi skhemy yazyka. Sintaksis. Pro-grammirovanie [Approach to Construction of a Universal Language Scheme. Syntax. Programming], 1980. No. 5. Pp. 17-25.