УДК 519.767.2 Дата подачи статьи: 21.02.2014
АНАЛИЗ МОДЕЛЕЙ ПРОГРАММ НА ЯЗЫКЕ АСИНХРОННЫХ ФУНКЦИОНАЛЬНЫХ СХЕМ СРЕДСТВАМИ ТЕМПОРАЛЬНОЙ ЛОГИКИ ЛИНЕЙНОГО ВРЕМЕНИ
Ю.П. Кораблин, д.т.н., профессор; М.Л. Косакян, аспирант (Российский государственный социальный университет, ул. Вильгельма Пика, 4, г. Москва, 129256, Россия, у.р.к@таИ-ш, [email protected])
В статье описывается формальный метод анализа свойств параллельных и распределенных программ. Предложен метод верификации технических систем на выполнимость различных временных свойств, в частности, свойства безопасности (типичный пример свойства безопасности - свобода от блокировок).
Для представления моделей технических систем в работе используется язык асинхронных функциональных схем (АФС), в котором программе в качестве семантического значения сопоставляется множество вычислительных последовательностей (путей) выполнения распределенной АФС-программы. Далее семантическое значение представляется в виде системы рекурсивных уравнений. Полученная система является удобной формой представления семантических значений программ для анализа различных свойств программ.
Для верификации выполнимости временных свойств семантическое значение АФС-программы, представленное в виде системы рекурсивных уравнений, и временное свойство, представленное как формула темпоральной логики линейного времени, преобразуются в автоматы Бюхи. Затем строится композиция этих автоматов, по которой проверяется выполнимость временного свойства на исходной АФС-программе.
Предложенный в данной статье метод имеет значительное преимущество по сравнению с подобными методами, в которых существует промежуточный этап преобразования технической системы в систему Крипке с последующим представлением их в виде автомата Бюхи, тогда как в предложенном методе техническая система непосредственно представляется в виде автомата Бюхи.
Описанный в данной работе метод легко поддается автоматизации, что позволяет существенно упростить трудоемкий процесс анализа семантических значений программ.
Теоретический материал статьи подкреплен рядом примеров, в частности примером применения изложенного метода верификации для анализа выполнимости свойства безопасности (отсутствие блокировок) распределенной системы
Ключевые слова: язык асинхронных функциональных схем, система рекурсивных уравнений, верификация, временная логика, автомат Бюхи, система Крипке.
ANALYSIS OF THE PROGRAMM USE THE LANGUAGE
OF ASYNCHRONOUS FUNCTIONAL SCHEMES MODELS USING LINEAR-TIME TEMPORAL LOGIC Korablin YuP., Dr.Sc. (Engineering), Professor; Kosakyan M.L., Postgraduate Student (Russian State Social University, Vilgelma Pika St. 4, Moskow, 129256, Russian Federation, [email protected], [email protected])
Received 21.02.2014
Abstract. The article describes the formal method for analyzing properties of concurrent and distributed programs. Authors suggest a method for verifying technical systems for various temporal properties feasibility, such as a security property (a typical example of security properties is lock-freedom).
To represent models of technical systems authors use the language of asynchronous functional schemes (AFS). It includes semantic values of AFS-programs represented as the sets of computing sequences (running ways of the distributed AFS-program). Then semantic value is represented as a system of recursive equations. This system is a convenient form for representing semantic values of programs to analyze various programs' properties.
The AFS-program semantic value, represented as a system of recursive equations, and the temporal property, represented as a formula linear-time temporal logic, is converted into a Buchi automata to verify the feasibility of temporal properties. After that the composition of these automatons is constructed. The temporary property feasibility on the original AFS-program is verified according to this composition.
The proposed method has a significant advantage compared to similar methods which has an intermediate stage for transformimg a technical system into the Kripke's system and then converts it into a Buchi's automaton. And in the proposed method the technical system directly converts into a Buchi's automaton.
The proposed method can be easily automated. It allows to simplify essentially labor-intensive process of analyzing semantic values of programs.
Theoretical material of the article includes a number of examples, in particular, an example of the proposed method application for verification the feasibility of security properties (no locks) on the distributed system.
Keywords: language of asynchronous functional schemes, recursive equations system, verification, temporal logic, Buchi automata, Kripke system.
Как известно, любое нетривиальное ПО после этапа разработки содержит ошибки. Проверка современного ПО, состоящего из громадного количества строк кода, не представляется возможной. В связи с этим широко распространен подход, при
котором реальные системы представляются в виде моделей, верифицируемых при помощи специализированного ПО. Модельный подход подразумевает частичную верификацию, которая может быть направлена на проверку наиболее сущест-
венных свойств, абстрагировавшись от менее важных деталей системы. Таким образом, верификация моделей не позволяет в общем случае гарантировать отсутствие ошибок в реальной системе. По этой причине после этапа верификации модели необходим этап тестирования исходной системы в реальных условиях.
Для представления моделей технических систем авторы статьи используют язык асинхронных функциональных схем (АФС) [1], в котором программе в качестве семантического значения сопоставляется множество вычислительных последовательностей (ВП) (путей) выполнения распределенной АФС-программы. Далее семантическое значение представляется в виде системы рекурсивных уравнений [1]. Полученная система является удобной формой представления семантических значений программ для анализа различных свойств программ.
Для создания автоматизированных программных средств проверки моделей необходимы формальные методы верификации. Одним из них является метод, использующий темпоральную логику линейного времени (linear-time temporal logic - LTL) [2]. В этом методе техническая система, представленная в виде структуры Крипке [2], и отрицание проверяемого свойства преобразуются в автоматы Бюхи [2]. Далее по ним строится композиция автоматов для проверки выполнимости проверяемого свойства на технической системе.
В данной статье предложен метод, при котором системы рекурсивных уравнений, полученные из исходных АФС-программ, непосредственно представляются в виде автоматов Бюхи, что позволяет использовать описанный выше подход. Предложенный метод имеет преимущество над указанным выше методом, заключающееся в том, что нет необходимости в проведении дополнительного этапа преобразования системы рекурсивных уравнений в структуру Крипке.
Язык АФС
В языке АФС программы представляются как функции, взаимодействующие посредством интерфейса в виде каналов.
Множество АФС-программ Prog с типичным элементом pr определяется следующим образом: pr ::= NET {can} BEGIN fproc END can ::= CHAN j::type(k):type(l) | can1 ; can2 type ::= ALL | ANY fproc ::= FUN i::c | fproc1 ; fproc2
c ::= a | skip | exit | break | wait(time) | read(i, l) | write(i, k) | SEQ(c {, c}) |
PAR(c {, c}) | ALT(gc) | LOOP(ALT(gc)) gc ::= g ^ c | gc {; gc}
g ::= tt | ff | b | wait(time) | read(i, l) | write(i, k) Неформально семантические конструкции языка АФС можно описать так:
- под элементарной командой a понимается обычное присваивание;
- пустая команда skip не приводит к выполнению каких-либо действий;
- выполнение команды exit приводит к завершению функционального процесса;
- выполнение команды break приводит к завершению выполнения цикла;
- команда wait(time) задерживает выполнение функционального процесса на время, задаваемое выражением time;
- команда чтения read(i, I) осуществляет запрос на прием данных из 1-го выхода i-го канала, а команда write(i, k) - запрос на передачу данных на k-й вход i-го канала; если 1-й выход (k-й вход) канала i готов к выдаче (приему) данных, то осуществляется чтение данных из канала (запись данных в канал), после чего функциональный процесс продолжается; в противном случае выполнение функционального процесса задерживается;
- команда SEQ(c{, c}) означает последовательное выполнение команд, перечисленных внутри скобок;
- параллельная команда PAR(c{, c}) означает параллельное выполнение команд, перечисленных внутри скобок;
- защищенная команда g^c может выполняться лишь в случае истинности защиты g; значение защиты g является истинным в следующих случаях: 1) g=tt; 2) g=b, причем значение b есть истина; 3) g=wait(time) через интервал времени, задаваемый выражением time; 4) g=read(i, I) либо g=write(i, I) и соответствующий выход (вход) канала i готов к обмену; в последнем случае, если канал i не готов к обмену, выполнение защищенной команды приостанавливается;
- альтернативная команда ALT(gc{; gc}) означает выполнение одной из защищенных команд, перечисленных в скобках, для которой значения защит являются истинными;
- команда цикла LOOP(ALT(gc{; gc})) означает многократное выполнение альтернативной команды; завершение цикла осуществляется, если все защиты ALT-команды являются булевскими выражениями и ни одно из значений защит не является истинным либо при выполнении команды break;
- канал типа ALL(k):ALL(/) вначале принимает данные по всем своим k входам, после чего он становится готовым для передачи данных по всем I выходам; канал освобождается (и становится готовым для приема новых данных) после передачи данных по всем своим выходам;
- канал типа ALL(k):ANY(/) аналогичен по входу каналу типа ALL(k):ALL(/); канал освобождается после передачи данных по любому из своих выходов;
- канал типа ANY(k):ALL(/) становится готовым для передачи данных, если он принял данные по одному из входов, и освобождается после передачи данных по всем своим выходам;
- канал типа ANY(k):ANY(/) становится готовым для передачи данных, если он принял данные по одному из входов, и освобождается после передачи данных по любому из своих выходов.
Формализация семантики АФС-программ. Зададим вначале априорную семантику функциональных процессов, то есть семантику функциональных процессов без учета их взаимодействия друг с другом. Семантическая функция имеет вид где FProc - множество функ-
циональных процессов с типичным элементом фгос, БР - множество всех подмножеств ВП: Р[фшсь&рос2|= ррргос^И Рррос2|
р^Ш кх|=С и, где C:Cmd^■SP - функция, сопоставляющая командам языка АФС множества ВП:
С[а|=А СрЫр|=х С[ехй|=ЕХГГ С [Ьгеак| =ВКЕАК С^ай(йте)|=ТГМЕ СЦгеа^г, /)|=М(,. 0 С[шйе(г, к)1=ОиТ0. к) С[SEQ(cl; С2)]=С[С1]0С[С2| СЦРАЩсь С2)|=С[С1|1С[С2| С[АЬТ(сь С2)|=С[С1|+С[С2| С[гг^с|=Е[гг|ЛС[с| С[гг^С|=Е[{?|л С[с| С[гг^с|=Е[й|лс[с| С^ай(те)—с|= С^ай(йте)|л и
С[геаф', 1)—= СЦгеа^г, 1)|л С[шйе(г, 1)—с|= С^гйе(г, 1)|л С [ЬООР(АЬТ(^С))—с| = (С [[АЬТ(^с)|)+ Определим семантическую функцию для выражений Е:Ехр^БР: ЕМ=Т
Е[Ь|=В
где «о» и «Л» - операции последовательной композиции ВП.
Определение 1. ВП ср называется пустой и обозначается через е, если
1) cp=т,
2) Ср=ГЛ£.
Бесконечную последовательность вида еш обозначим через ю (зацикливание). Определение 2. ееьр, если
1) sP=s,
2) sp=spl+sp2 и е принадлежит хотя бы одному из множеств - spl или sp2,
3) sp=sp\°sp2 и е принадлежит и spь и sp2 одновременно.
Выражение sp+ есть минимальная фиксированная точка оператора F(sp), то есть sp+=цF(sp). Оператор F(sp) имеет вид: F(sp)=Xq.spoq+v, где __ {¡р, если е г sp, Гю, если е е яр,
Б-р =\ v = \
[¡р \ е, если е е sp, [А, если е г яр. В последнем определении символ А обозначает выражение, значение которого зависит от среды, где вычисляется А. Выражение А может прини-
мать одно из двух значений: т или 0. Вычисление значения А откладывается, как правило, до момента построения семантического значения всей программы целиком на основе семантических значений компонентов этой программы.
Каналам в качестве семантических значений сопоставляются множества ВП. Каналы можно рассматривать как процессы специального вида -канальные процессы.
Канал связи интерпретируется как циклический процесс, который вначале принимает данные от функциональных процессов, а затем, когда все необходимые данные от функциональных процессов (в соответствии с логикой входов этого канала) уже приняты, передает данные функциональным процессам (в соответствии с логикой выходов канала).
В отличие от функциональных процессов выход из канального процесса (завершение циклического процесса) невозможен. Завершение АФС-программы происходит при переходе всех функциональных процессов в пассивное состояние.
Семантическая функция каналов K:Can^SP (Can - множество каналов связи с типичным элементом сап) имеет вид
Щ CHAN j::typei(k) : type2(l)l=((typei(IN(j'- « ..., IN'' k))>(type2 (OUTa 1), ..., OUTa ° )))+.
Параметр type может принимать одно из двух значений: ALL или ANY.
ALL(Xb ..., X2)=X1£X21_£X„, где операция 1 определяется следующим образом: X1Y=X\Y+Y\X.
Выражение X\Y означает то же, что и X||Y, за исключением того, что первым шагом будет действие из X.
Выражение p+ есть минимальная фиксированная точка оператора F(p)=lq.poq.
Для наглядности восприятия ВП используем надстрочные индексы для значений IN (OUT), характеризующих ввод (вывод) информации в канал связи, тогда как подстрочные индексы используются для значений команд ввода (вывода) информации в функциональный процесс. Первый индекс в обоих случаях указывает номер канала, второй -номер входа (выхода) канала, по которому осуществляется ввод (вывод) информации.
Для определения взаимодействия компонентов программы зададим частично определенную функцию
если d1' = IN,. k) (IN(i'k))
C(dl', d2' ) =
Yi,
"a, k)»
и d2' = OUTa k) (OUT. k)
0 в противном случае.
Семантическую функцию для АФС-программ обозначим как P:Prog^SP. Так, например, если АФС-программа имеет вид
pr=NET can1; can2; ...; canm
BEGIN fproc1;fproc2;. ;fprocn END, то P[prl=K[canil НЩса^ЦН-НЩсаПтЦН FPprocJ ||FPproc2jl|-||FPprocJ.
Для построения системы рекурсивных уравнений, характеризующих семантическое значение программы, можно строить систему уравнений либо по выражению для PQpr], задающему семантическое значение всей программы целиком, либо на базе множества систем уравнений, характеризующих априорные семантические значения для составляющих компонентов АФС-программы, в частности для каждого функционального процесса и канала связи в отдельности.
Пример 1. Рассмотрим АФС-программу pr, моделирующую задачу производитель-потребитель: NET
CHAN1::ALL(1):ALL(1) BEGIN
FUN2 :LOOP(ALT(b ^SEQ(write(1,1);a1))) FUN3 ::LOOP(ALT(read(U)^a2)) END
Из данной АФС-программы получаем семантическое значение
F[ FUN2 : LOOP(ALT(b^SEQ(write(U);a0))J= =(BAOUTuoA0+
F[ FUN3 : LOOP(ALT(read(1,1)^a2)) 1 = (INUAA2)+
OUT
1,1 )+
F[ СБЛЫ1::ЛЬЦ1)^Ц1) 1 = (М1-
РМ=Р2!!Р31! К1= =(ВлОиТ1доЛ1)+1(ГМ1длЛ2)+1(1М1'1оОиТ1'1 )+.
Полученное семантическое значение может быть представлено системой рекурсивных уравнений [1].
Обозначая элементы семантической области метапеременными X, 7, 1, опишем свойства семантической области с помощью следующих схем аксиом:
Х1№НХ|№ Х^=Х [ Y+Y [ Х+ X | Y dl' | d2'=C(dl',d2') а1 | (а2оХ) = ( а1 | а2 ) о X, если а2 Ф т
(а1 о X) | (а2 о Y) = (а1 | а2) о (X I Y), если а1 Ф т, а2 Ф т а | (pлX) = (а | р^ (а о X) | (в л Y) = (а | р^ I Y), если аФт
X+X=X
X+Y=Y+X
X+(Y+Z)=(X+Y)+Z
(X+Y)oZ=XoZ+YoZ
(XoY>Z=Xo(YoZ)
юХ=Х
Xcx=X
Ю °X= Ю
0oX=0
X+0=X
(PAX)oY=PA(XoY) FAX=0
(Pi л X) | (p2 A Y) = (Pi | p2 ) л (X I Y)
(X+Y)| Z=(X |Z)+ (Y|Z) 0ЛX=0 т о X | Y = X | Y
X | Y = Y IX а|Х = аоX
аоX[Y = а о (XIV), если афт
(pлX) [V = рл^!^) т о X [V = X [V (X+Y)[Z = X [Z+Y[Z (X | Y)[Z = X да) (X [ Y)[Z = X [(V Е) XIV = X [ Y+Y [ X+ X | V где 0 - останов, в - тест, ю - зацикливание.
Пример 2. Представим полученное выше семантическое значение АФС-программы в виде системы рекурсивных уравнений: р1=влр2+тлр3
Р2=У1ДоР4
Р3=0
Р4=Л1оР5+уилрб Р5=Влр7+Тлр8+у1Длр9
РбгА^Р^оРю Р7=У1,1оРц
Рв=У1,1оР12
р9=влр11+тлр12+л2ор1 Р10=Л1оР1 Р11=У1,1оР13+Л2оР2 Р12=Л2оРз
Р13=Л1оР14+Л2оР4
Р14=ВлР15+ТлР16+Л2оР5
Р15=У1,1оРб+Л2оР7
Р16=Л2оР8.
Автоматы Бюхи
Семантические значения, представленные в виде системы рекурсивных уравнений, могут быть заданы с помощью автомата Бюхи [2].
Автомат Бюхи - это пятерка (5", Е, 50, 5, где Е - конечное множество символов (алфавит); 5 -множество состояний; 50£5 - множество начальных состояний (содержащее только один элемент для детерминированного случая); 5 : - от-
ношение переходов (для детерминированного автомата 5:<хЕ^-5); ^£<5 - множество финальных состояний.
Автомат Бюхи принимает слово, если при чтении этого бесконечного слова автомат проходит бесконечное количество раз хотя бы одно финальное состояние.
Пример 3. Представим полученную в примере 2 систему рекурсивных уравнений (предварительно представив уравнение Р3=0 в виде Р3=0°Р3) в виде автомата Бюхи Б\ (рис. 1). Множество на-
Yi,i
Pl2>A
4?
-A,-
B
P^A;
?*) Y1,1
|-A,
B-
A,-К P
Ai
(Pi4>- MPii
Ai Yi,i (Pis)-A,-
Yi,i
Y
i,i
A1 A1 B
^AWPio,
Yi,
{p^—yu-@
A,
Рис. 1. Автомат Бюхи В1, построенный по системе рекурсивных уравнений из примера 2
Fig. 1. Buchi automata Bj based on recursive equations system from example 2
T
T
P
T
T
чальных состояний автомата Б1 включает одно состояние Р\, выделенное на рисунке 1 штриховкой с наклоном вправо.
Описание свойств с помощью LTL-формул
Для проверки вычислимости тех или иных свойств будем описывать эти свойства в виде формул LTL [2].
Формулы LTL - это атомарный предикат р, q, ..., или формулы LTL, связанные логическими операторами V, или формулы LTL, связанные темпоральными операторами и, X.
Формально формулы LTL задаются грамматикой ф=р|-ф^ф|Хф|фиф.
Истинность формулы ф логики LTL на вычислении ст=5о, ... определяется индуктивно по формуле ф:
- о=р, если атомарный предикат р истинен в начальном состоянии вычисления о;
- о=-ф, если формула ф не истинна на о;
- о=ф^ф2=о=ф^о=ф2, если на о выполняется или ф1 , или ф2;
- о=Хф=о1 =ф, если ф выполняется на вычислении о1=51, s2, ...;
- о=ф1иф2, если когда-то в будущем состоянии вычисления о выполнится формула ф2, а до ее выполнения во всех состояниях вычисления о будет выполняться ф1 ;
- о=Fф=tmeUф=(Э к>0) стк=ф, если найдется
г к
такое к, что ф выполняется на вычислении ст =sk,
5(к+1>
- о=Gф=-F-ф=(V к>0) стк=ф, если ф выполняется на всех состояниях вычисления о.
Любая формула LTL ф на конкретном вычислении будет либо истинной, либо ложной.
Вычисление - это бесконечная последовательность состояний, которые система проходит во времени.
Обозначим через о(/) состояние 5, вычисления о, а о1 - вычисление, начиная с 5,, то есть о-5,, 5,+1, ... Тогда 5,=ф обозначает утверждение, что в состоянии выполняется формула ф, а о=ф - что на вычислении о выполняется формула ф. При этом полагается, что формула выполняется на вычислении о, если она истинна в начальном состоянии последовательности о.
Пример 4. Для проверки выполнимости свойства безопасности (типичный пример свойства безопасности - свобода от блокировок) ф-О-0 на системе рекурсивных уравнений из примера 2 построим (согласно алгоритму, представленному в [2]) автомат Б-ф (рис. 2) для формулы -ф=Р0. Обозначим через с1(ф) множество всех подформул формулы ф. Множество подформул формулы ф называется согласованным, если существует вычисление, на котором все они могут выполняться. Атомы формулы ф - это максимальные множества
согласованных формул из с/(ф), которые могут помечать состояния вычислений [2]. Атомы можно считать состояниями искомого автомата Бюхи. Таким образом, в соответствии с правилами, описанными в [2], множество состояний автомата Б-ф составляют три атома: А1={}, А2={^0} и А3={0, ^0}. Множество начальных состояний 50 состоит из двух состояний - А2 и А3, так как именно атомы А2 и А3 включают формулу ^0. Множество финальных состояний включает два состояния - А1 и А3. Финальные состояния автомата Б-ф (рис. 2) заштрихованы с наклоном влево. Таким образом, состояние А3, которое является как начальным, так и финальным, выделено на рисунке 2 двойной штриховкой. Алфавит Е автомата Б-ф состоит из двух символов - 0 и {}, где символ {} означает отсутствие символа 0, то есть если переход помечен символом {}, значит, переход выполняется по любому символу, отличному от 0. Переходы формируются в соответствии с правилами, описанными в [2].
Алгоритм проверки выполнимости LTL-формул для АФС-программ
Для проверки выполнимости LTL-формулы на системе рекурсивных уравнений будем использовать следующий алгоритм.
1. Представим модель технической системы в виде автомата Бюхи Б.
2. В соответствии с алгоритмом, описанным в [2], построим по LTL-формуле -ф контрольный автомат Бюхи Б-ф.
3. Согласно [2] построим синхронную композицию автоматов Б® Б-ф. (Так же, как для конечных автоматов, синхронная композиция автоматов Бюхи - это автомат Б-ф, стоящий рядом с Б и перехватывающий все входы и выходы автомата Б. Автомат Б-ф выступает в роли контрольного автомата, работающего совместно и синхронно с Б.) Синхронная композиция автоматов Б®Б-Ф допус-
кает пересечение языков Ь и Ь-ф, допускаемых соответственно автоматами В и В-ф. Следовательно, если язык, допускаемый автоматом В®В-<Р, не
пуст, значит, автомат В допускает ошибочное слово из языка Ь-ф.
4. Проверим композицию автоматов В®В-Ф на наличие цикла, достижимого из начального состояния и включающего финальное состояние. Если такой цикл имеется, значит, формула -ф выполняется хотя бы на одном вычислении автомата Бюхи В, следовательно, формула ф не выполняется на автомате Бюхи В.
Пример 5. Построим синхронную композицию автоматов В]®В-Ф (рис. 3) для пары начальных состояний р и А2 из автоматов В1 (см. пример 3) и В-ф (см. пример 4) соответственно. Если невыполнимость формулы ф на автомате В1®В-Ф показать не удастся, построим синхронную композицию автоматов В1®В-Ф для пары начальных состояний р и А3. Финальными состояниями автомата В1®В-ф являются такие пары состояний Рвь Ав-Ф, в которых Ав-Ф - финальное состояние автомата В-ф.
Рис. 3. Автомат Бюхи, представляющий синхронную композицию автоматов Bj 0B-f
Fig. 3. Buchi automata representing a synchronous composition of automata Bj 0В-ф
В композиции автоматов имеется цикл
(переходы, демонстрирующие наличие цикла, выделены жирной линией), достижимый из начального состояния и проходящий финальное состояние (Р3, А3). Следовательно, формула -ф выполняется хотя бы на одном вычислении автомата Вь что означает невыполнимость формулы ф на исходном автомате Вь Отсюда следует, что в исходной программе существует возможность блокировки.
В заключение отметим, что в статье показан метод верификации выполнимости различных временных свойств в технических системах, представленных в виде АФС-программ. В предложенном методе осуществляется непосредственно преобразование семантического значения АФС-про-граммы в автомат Бюхи, что, на взгляд авторов, является более естественным и понятным представлением технических систем по сравнению с их представлениями в виде структур Крипке.
Литература
1. Кораблин Ю.П. Семантика языков распределенного программирования. М.: Изд-во МЭИ, 1996. 102 с.
2. Карпов Ю.Г. Model Checking. Верификация параллельных и распределенных программных систем. СПб: БХВ-Петербург, 2010. 260 с.
3. Кораблин Ю.П., Кучугуров И.В., Косакян М.Л. Вопросы эквивалентности схем параллельных программ // Программные продукты и системы. 2011. № 4. С. 66-72.
4. Кораблин Ю.П., Косакян М.Л., Кучугуров И.В. Вопросы взаимодействия и синхронизации распределенных программ на С++ с использованием Win API // Ученые записки РГСУ. 2013. № 1. С. 104-112.
5. Кларк Э.М., Грамберг О., Пелед Д. Верификация моделей программ: Model Checking. М.: Изд-во МЦНМО, 2002. 416 с.
6. Emerson E.A. Temporal and modal logic. In: J. van Leeuwen, ed. Handbook of Theoretical Computer Science, 1990, vol. B, pp. 995-1072.
7. Giannakopoulou D., Lerda F. Efficient translation of LTL formulae into Buchi automata. NASA Ames Research Ceter, TR, 2001, 17 p.
8. Bruns G., Godefroid P. Temporal Logic Query-Checking. Proc. 16th Ann. IEEE Symp. Logic in Computer Science, 2001, pp. 898-914.
9. Alur R., Dill D., Automata for modeling real-time system LNCS. Springer-Verlag, 1990, vol. 443, pp. 322-335.
References
1. Korablin Yu.P. Semantika yazykov raspredelennogo pro-grammirovaniya [Semantics of distributed programming languages]. Moscow, MEI Publ., 1996, 102 p.
2. Karpov Yu.G. Model Checking. Verifikatsiya parallelnykh i raspredelyonnykh programmnykh sistem [Model Checking. Verification of parallel and distributed programm systems]. St. Petersburg, BHV-Peterburg Publ., 2010, 260 p.
3. Korablin Yu.P., Kuchugurov I.V., Kosakyan M.L. Issues of parallel programs schemes equivalence. Programmnye produkty i sistemy [Software & Systems]. 2011, no. 4, pp. 66-72
4. Korablin Yu.P., Kosakyan M.L., Kuchugurov I.V. Issues of interaction and synchronization of distributed programs on C++ using Win API. Uchenye zapiski RGSU [RSSU Proceedings]. 2013, no. 1, pp. 104-112.
5. Clarke E.M., Grumberg O., Peled D.A. Model Checking. The MIT Press, 1999, 314 p. (Russ. ed. Clarke E.M., Grumberg O., Peled D.A. Moscow, Moscow Center for Continuons Mathematical Education, 2002, 416 p.).
6. Emerson E.A. Temporal and modal logic. Handbook of Theoretical Computer Science (ed. J. van Leeuwen). 1990, vol. B, pp. 995-1072.
7. Giannakopoulou D., Lerda F. Efficient translation of LTL formulae into Buchi automata. NASA Ames Research Center, TR, 2001, 17 p.
8. Bruns G., Godefroid P. Temporal Logic Query-Checking.
Proc. 16th Ann. IEEE Symp. Logic in Computer Science. 2001, pp. 898-914.
9. Alur R., Dill D. Automata for modeling real-time system. LNCS. Springer-Verlag Publ., 1990, vol. 443, pp. 322-335.
b