УДК 004.432.42
СЕМАНТИКА ТИПОВ ДАННЫХ ФУНКЦИОНАЛЬНО-ПОТОКОВОГО ЯЗЫКА ПАРАЛЛЕЛЬНОГО ПРОГРАММИРОВАНИЯ ПИФАГОР
Мария Сергеевна Ушакова, аспирант Тел.: 8 902 941 7077, e-mail: [email protected], Сибирский федеральный университет, Институт космических и информационных технологий http://www.sfu-kras.ru
Работа посвящена описанию семантики типов данных для функционально-потокового языка параллельного программирования Пифагор. Рассматривается два вида семантики: математическая семантика на основе неформальной теории множеств и аксиоматическая семантика.
Ключевые слова: аксиоматическая семантика типов данных, функционально-потоковое параллельное программирование, язык программирования Пифагор.
В настоящее время наблюдается тенденция к усложнению программного обеспечения и увеличению сложности его отладки и рисков в случае сбоя. В результате, стали
активно развиваться методы верификации программ, в частности формальная верификация. Под формальной верификацией понимается доказательство корректности программы, которое заключается в установлении соответствия между программой и её спецификацией, описывающей цель разработки [1]. Развитие методов формальной верификации особенно актуально для параллельного программирования. Однако методы формальной верификации достаточно трудоёмки, и их сложность существенно возрастает при верификации параллельных императивных программ.
М.С. Ушакова Альтернативным вариантом императивного подхода яв-
ляется функционально-потоковая параллельная парадигма. Модель функционально-потоковых параллельных вычислений и реализующий эту модель язык программирования Пифагор описаны в [2]. Данная модель обеспечивает формирование параллелизма программ на уровне операций, что позволяет упростить процесс верификации, так как не требует анализа возникающих в традиционных архитектурах дополнительных ресурсных конфликтов. Поэтому развитие методов формальной верификации функционально-потоковых параллельных программ является актуальным.
Одной из наиболее важных и сложных задач при формальной верификации является описание спецификации программы. Для этого требуется специальный язык спецификаций, на котором формулируются требования к программе. Целью данной работы является формализация семантики типов данных языка Пифагор, для определения языка спецификаций. Формализация семантики типов данных языка программирования позволяет однозначно определять смысл программ и язык спецификаций свойств программ.
Описание семантики встроенных функций языка Пифагор на естественном языке приведено в [2]. В языке Пифагор есть следующие типы данных: int (целый), float (действительный), bool (логический), char (символьный), func (функция), error (ошибочный), spec (спецзнаковый), signal (сигнал), datalist (список данных), parlist (параллельный список), delaylist(задержанный список). В работе рассматривается математическая и аксиоматическая семантика типов данных языка Пифагор.
1. Математическая семантика типов данных
Математический подход к семантике типов данных - это описание типов на осно-
ве неформальной теории множеств. Согласно [3] семантика всякого конкретного типа с точки зрения неформальной теории множеств - это множество значений этого типа вместе с совокупностью частичных или тотальных операций, в которых эти значения могут быть аргументами или результатами, и совокупность отношений, в которых эти значения могут участвовать. Семантика родового типа - это (частичная) функция, которая по конкретным типам строит новый тип, т.е. по множествам значений с допустимыми операциями и отношениями строит «новое» множество значений со своими операциями и отношениями, в которых могут использоваться эти «новые» значения.
Обозначим через PO множество всех типов данных языка Пифагор. Для определения математической семантики типов языка Пифагор определим множества, которые назовём «простыми (конкретными) типами», и операции на них.
1. Множество целых чисел int, элементами которого являются целые числа из Z. На этом множестве определены: унарная операция «получение противоположного элемента» -, двуместные тотальные операции «сложение» +, «вычитание» -, «умножение» х, частичная функция «деление нацело» /, двуместные отношения «равно» =, «меньше» <, «больше» >, «не больше» <, «не меньше» >. Функции и отношения имеют такой же смысл, что и в математике.
2. Множество действительных чисел float. Элементы этого множества - числа из R, с такими же операциями и отношениями, как для типа int, имеющими обычный математический смысл.
3. Булевское множество bool = {true, false}. На множестве определены бинарные операции «конъюнкция» л, «дизъюнкция» v, и унарная операция «отрицание» —i. Семантика операций такая же, как и в булевой алгебре.
4. Конечное множество символов char. На множестве определена унарная функция «получения кода символа» encode: char ^ int, которая сопоставляет каждому символу некоторое целое число. Также есть обратная функция encode 1 : int ^ char .
5. Конечное множество имён функций func, элементами которого являются имена встроенных и пользовательских функций.
6. Конечное множество констант ошибок error={BASEFUNCERROR, BOUNDERROR, INTERROR, REALERROR, ZERRODIVIDE, TYPEERROR}.
7. Конечное множество специальных знаков (разделителей) spec={+c, -c, /c, *c, <c, >c, =c, >=c, <=c, <>c, =>c, ->c, <-c, ()c, {}c, []c, |c, #c, %c, .c, .?c}. Индекс «c» введён для того, чтобы не путать константы из множества spec и идентификаторы функций.
8. Множество, содержащее один элемент signal={ •}.
9. Бесконечное множество задержанных списков delaylist - множество констант, каждая из которых соответствует допустимому подграфу программы на языке Пифагор.
10. Конечное множество констант (имён) типов type={intc, floatc, boolc, charc, funcc, errorc, signalc, datalistc, parlistc, delaylistc}. Индекс «c» введён для того, чтобы не путать имена типов с константами из type.
Кроме того, на каждом рассмотренном множестве S введено одноместное отношение «быть значением типа S» е S. Например, для типа int - одноместное отношение «быть значением типа int» е int, для типа float - е float и т.д.
На основе «простых типов» определим конкретные типы данных языка Пифагор. Введём отображение f, которое сопоставляет каждому элементу множества type одно из множеств «простого типа», с таким же именем, как и имя элемента. Тогда тип POsimple (POsimple с PO ) - это множество пар вида: < t, a >, где t е type, a е f(t) - элемент одного из множеств «простого типа», соответствующего t. Угловые скобки здесь и далее будут использоваться для обозначения кортежа. Разобьём тип POsimple на непересекающиеся подмножества, в зависимости от первого элемента пары t . Каждому подмножеству дадим имя, совпадающее с именем константы t , у которого индекс «c» заменя-
ется на «р». Каждое такое подмножество будет конкретным типом языка Пифагор: т^, Иоа^, Ьоо1р, еЬагр, Шпср, еггогр, в1§иа1р, ёе1ау11в1р, вреер.
Определим семантику родового типа «список данных» ёа1аИБ1р. Будем представлять список в виде декартова произведения конечного числа типов языка Пифагор. Определим математическую семантику «простого (родового) типа», который обозна-п
чим ёа1аИБ1 П Тг- . Значения этого типа - кортежи длины п, п е N:
I=1
ПТ = {< >: Ч е Т}, где Т с (РО).
I=1
п
Приведём примеры элементов типа data1ist П Т : пустой список < • >е э1§па1р, список с
I=1
одним элементом < / >е Т, Т с РО, список из двух целых чисел < ¿1, ¿2 >е ^р х intp, список из трёх целых чисел < ¿1, ¿2, ¿3 >е ^р х intp х intp .
п
На множестве data1ist П Т определена одноместная операции «нахождение длины
I=1
п
списка» 1еп : data1ist П Т ^ N, которая возвращает длину кортежа и формально определяется
I=1
п
с помощью Л -нотации следующим образом: Лх е data1ist П Т (п). Двуместная частичная
I=1
Г п Л
операция «выбор элемента списка» select:
datalist ^ T;-
i=1 J
x N ^ Ti, формально определяется
Лх e datalist ПT. Л j e N. (Tj).
i=1
Двуместная операция «добавление элемента в конец списка» ' n Л n +1
add: datalist ^ T;- x Tn+1 ^ datalist ^ T;- , которая формально определяется
V i=1 J i=1
n
Л < t\,tj,.,tn >e datalist ^T;-. Л t e PO.(< t\,tj,...,tn,t >) . Далее будем использовать выра-
i=1
жение «createList(a1, aj,..., an)» в качестве аббревиатуры выражения « add(add(...add(< >, aj)...,an_j),an), », которое заключается в (n — 1)-применении функ-
a_^^_J
n—1
ции add для получения списка <a^,aj,...,an > . Также определим одноместное отношение
nn «быть значением типа datalist ^ Ti » e datalist ^ T .
i=1 i =1 Родовой тип datalistp ^ PO определяется следующим образом:
n
datalistp = {< datalistc, t >:datalistc e type, t e datalist ^Ti}.
i=1
Семантика родового типа parlistp ^ PO аналогична семантике типа datalistp, за исключением того, что первый элемент пары - константа datalistc e type заменяется на
константу parlistc е type: parlistp = {< parlistc, t >:parlistc е type, t е datalist ^ Ti}.
i=1
Пусть POlist = datalistp u parlistp, тогда PO=POsimple u POlist.
Рассмотрим операции для типов языка Пифагор PO. Описание семантики встроенных функций языка Пифагор на естественном языке приведено в [2]. Отметим некоторые особенности функций языка Пифагор. Все функции языка являются тотальными и в качестве аргументов могут принимать любой элемент из PO. При этом если аргумент «корректный», то функция возвращает результат вычислений, иначе - одну из констант ошибок < errorc, e >е errorp.
Одна из возможных формализаций семантики языка приведена в [4]. По этим описаниям можно однозначно определить операции для типов языка в терминах элементов множества PO. В качестве примера рассмотрим семантику функции dup, которая создаёт список из одинаковых элементов. В качества входного значения функция принимает список из двух элементов, первый из которых - любой допустимый элемент a, а второй - целочисленная константа n. Результат - список из n копий элемента a. Для любого другого аргумента функция вернёт ошибку [2].
Формальное определение семантики функции dup:
Л p е PO. (if ((p е POx intp) л (select(p,2) > 0))
then (createList(select(p,1),...,select(p,1)) else < errorc,BESEFUNCERROR >).
s_^^_J
select( p,2)
Математическая семантика типов данных рядом достоинств [3]: преемственностью с неформальной семантикой, интерпретацией очень сложных типов, непротиворечивостью на уровне неформальной теории множеств, открытостью для дальнейших обобщений и расширений. Однако у неё есть и существенные недостатки, главный из которых - зависимость от человеческих представлений о понятии множества, которое «непереводимо» для компьютера.
2. Аксиоматическая семантика типов данных
Аксиоматический подход к семантике типов данных состоит в том, что для каждого из предопределённых (базисных) типов данных формулируется своя аксиоматическая теория первого порядка, для каждого из родовых типов формулируются свои (схемы) правил, позволяющих построить аксиоматическую теорию любого конкретного типа, построенного из базисных типов посредством родовых типов [3].
Сформулируем аксиоматические теории для каждого «простого (конкретного) типа». Для этого укажем сигнатуру, множество аксиом и правила вывода.
Все аксиоматические теории включают в себя общелогические аксиомы и правила вывода. Существуют различные эквивалентные аксиоматизации исчисления предикатов первого порядка [3; 5; 6], будем использовать аксиомы исчисления предикатов гильбертовского типа из [5].
1. Множество целых чисел int. Аксиоматическая система для целых чисел [3; 6; 7; 8], строится на основе аксиоматики натуральных чисел. Сигнатура EZ включает константный символ (нульместная функция) cn для каждого целого числа n. Функциональные и предикатные символы совпадают с операциями и отношениями множества int: - + - х/ = <>< > е int
XXXL. , , , , , , -, -, ^ 1,11 '
Аксиоматическая система для целых чисел включает в себя [3]:
1) общелогические аксиомы и правила вывода;
2) аксиомы теории с равенством [9]
Vx е int.(х = x),
Vx е int.Vy е int.((x = y) ^ (y = x)), Vx е int.Vy е int .Vz е int.(((x = y) л (y = z)) ^ (x = z)); 3) аксиомы Дж. Пеано [3, 8] Vx е int.—1(x +1 = x),
Vx е int .Vy е int.(((x +1) = (y +1) ^ (x = y)), Vx е int.(x + 0 = x),
Vx е int. Vy е int.(x + (y +1) = (x + y) +1), Vx е int.(xx 0 = 0),
Vx е int. Vy е int.(x x (y +1) = (x x y) + x),
4) аксиомы упорядочения [6] Vx е int.—(x < x),
Vx е int.Vy е int.Vz е int.(((x < y) л(y < z)) ^ (x < z)), Vx е int.Vy е int.((x = y) v (x < y) v (y < x)), Vx е int.Vy е int.(x < y — (y = (x +1)) v ((x +1) < y)), Vx е int .3y е int.(x = (y +1));
5) аксиомы для отрицательных чисел [3] Vx.((x е int) -о- (-x е int)),
Vx е int.((x = 0) v (x < 0) v (-x < 0));
7) аксиомы, определяющие -, /, >, <, > через =, +, x, <, -.
2. Аксиоматизация типа действительных чисел float. Сигнатура ZR включает все символы EZ (кроме символа е int, который заменяется на е float), а также константу cr , для каждого рационального числа r е Q . Аксиоматическая система состоит из [6]: 1) общелогических аксиом;
1) аксиом коммутативного поля;
2) аксиом упорядочения
Vx е float.Vy е float.(((x > 0) л (y > 0)) ^ (x + y > 0)), Vx е float.((x = 0) v (x > 0) v (-x > 0)), Vx е float.(—((x > 0) л (—x > 0))), Vx е float.Vy е float.(((x > 0) л (y > 0)) ^ (xx y > 0));
3) Vx е float .3y е float.((x = y2) v (-x = y2)),
Vx0 е float.Vxj е float... Vx2n е float.3x е float.(x0 + xj x x + ... + x2nx2n + x2n+1 = 0)
4) аксиом, определяющих -, /, <, >, <, > через =, +, x, <0, -.
3. Аксиоматическая семантика булевского множества bool включает в себя общелогические аксиомы, аксиомы теории с равенством и аксиому (true е bool) л (false е bool).
Аксиоматические системы для остальных «простых типов» t включают в себя общелогические аксиомы, аксиомы теории с равенством и символы одноместных отношений «быть значением типа t» е t.
Рассмотрим аксиоматическую семантику простого родового типа datalist ^ Тг- .
I=1
Если аксиоматическая семантика для всех типов Тг- построена, одноместные отноше-
правило вывода IND:
: (Р(0), <Кx) ^ (р(x +1) ; Vx е int x)
, Vn > 1;
n
n
ния е T;- аксиоматизированы, то можно задать аксиоматику типа datalist ^ Тг- .
i=1
Сигнатура Еl содержит символ =, символ c для функции конструктора и n символов 5i, ..., sn для функций выбора, функциональный символ l для функции длины
n
списка и символ одноместного отношения е datalist ^ Т . Аксиомы включают общело-
i=1
гические аксиомы, аксиомы теории равенства и аксиомы теории списков [7, 10]:
1) Аксиомы конструирования списка
c0i(x) s2( x),•••, sn(x)) = x;
2) Аксиомы выбора элемента
s1(с( x1,—, xn )) = xb s2 (с(x1, — , xn )) = x2 ,
sn (с(x1, • • •, xn )) = xn ,
3) Аксиомы отсутствия зацикливания (символ ^ является аббревиатурой отрицания формулы)
sj( x) ^ x, S2(x)* x,
sn (x) * x , s1(s1( x)) * x, s2(s2(x)) * x ,
4) Аксиома определения длины списка l (x) = n .
Рассмотрим аксиоматизация типов языка Пифагор PO. Для всех объектов типа PO, кроме общелогических аксиом и аксиом теории с равенством, введём аксиому, позволяющую связать объект PO со значением его «простого типа». Также введём одноместный функциональный символ extract и предикатный символ е PO. Аксиома будет иметь вид: V < t, a >е PO.(extract(< t,a >) = a).
Функции языка Пифагор являются тотальными и могут работать с любыми аргументами из PO. Для описания аксиоматической семантики такой функции требуется задать несколько аксиом, которые будут отражать зависимость результата от свойств аргументов. На основе семантики из [4] можно однозначно определить все аксиомы, описывающие свойства встроенных функций.
Приведём пример аксиом для функции dup.
(
n
V < t,p >е PO. (p е datalist ^Тг) л(l(p) = 2)л (s2(p) е int) л(s2(p) > 0) ^
v
i =1
l ( S2( p))
^ (dup(< t, p >) = r) л (r е datalist ^ Ti) л
i =1
(
n
V < t,p >е PO.-i (p е datalist ПT)л(l(p) = 2)л(s2(p) е int)л(s2(p) > 0) ^
v
i=1
У
^ ((dup < t, p >= r) л (r = BASEFUNCERROR)).
Аксиоматическая семантика даёт возможность «работать» со свойствами значений типов данных на чисто синтаксическом уровне.
Заключение
Автор считает, что полученная в данной работе математическая и аксиоматическая формальная семантика типов данных языка Пифагор может быть использована в качестве языка спецификаций к программе на языке Пифагор, при формальном доказательстве её корректности.
Литература
1. Непомнящий В.А., Рякин О.М. Прикладные методы верификации программ. - М.: Радио и связь, 1988. 255 с.
2. Легалов А.И. Функциональный язык для создания архитектурно-независимых параллельных программ // Вычислительные технологии. 2005. № 1 (10). С. 71-89.
3. Шилов Н.В. Основы синтаксиса, семантики, трансляции и верификации программ. -Новосибирск: Издательство СО РАН, 2009. 340 с.
4. Кропачева М.С. Формализация семантики функционально-потокового языка параллельного программирования Пифагор // Проблемы информатизации региона. ПИР-2011: материалы XII Всероссийской научно-практической конференции. - Красноярск: Сибирский федеральный университет, 2011. C. 144-148.
5. Ершов Ю.Л., Палютин Е.А. Математическая логика: учебн. Пособие для вузов. - 2-е изд., испр. и доп. - М.: Наука. Гл. ред. физ.-мат. лит., 1987. 336 с.
6. Kreisel G., Krivine J.L. Elements of Mathematical Logic. Studies in Logic and the Foundations of Mathematics. - North-Holland Publishing Company, 1967. - 221 p.
7. Manna Z., Zarba C. Combining decision procerures // LNCS. 2003. Vol. 2787. P. 453-468.
8. Enderton H.B. A Mathematical Introduction to Logic. 2nd ed., - Academic Press, 2001. 326 p.
9. Скобелев В. В. Автоматы на алгебраических структурах. Модели и методы их исследования. - Донецк: ИПММ НАН Украины, 2013. 307 с.
10. Oppen D.C. Reasoning about recursively defined data structures // Journal of the ACM. -1980. N 3. P. 403-411.
Semantics of program data types for functional data-flow parallel programming language Pifagor
Mariya Sergeevna Ushakova, Postgraduate Student
The article is devoted to formal semantics for data types offunctional data-flow parallel programming language Pifagor. Mathematical semantics based on naive (informal) set theory and axiomatic semantics are concerned.
Keywords: axiomatic semantics of program data types, functional data-flow parallel programming, Pifagor programming language.
УДК 614.88
ОПРЕДЕЛЕНИЕ ПОТРЕБНОСТИ НАСЕЛЕНИЯ В АНЕСТЕЗИОЛОГО-РЕАНИМАЦИОННЫХ ВИДАХ СКОРОЙ МЕДИЦИНСКОЙ ПОМОЩИ
Алексей Александрович Шумкин, зав. подстанции Новоильинскогорайона -
врач скорой медицинской помощи Тел.: 8 904 572 7339, e-mail: [email protected] МБЛПУ «Станция скорой медицинской помощи» г. Новокузнецка