Верификация автоматных моделей методом редуцированного графа переходов

6

КОМПЬЮТЕРНЫЕ СИСТЕМЫ И ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ

УДК 004.4'242

ВЕРИФИКАЦИЯ АВТОМАТНЫХ МОДЕЛЕЙ МЕТОДОМ РЕДУЦИРОВАННОГО ГРАФА ПЕРЕХОДОВ

С.Э. Вельдер, А.А. Шалыто

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

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

В данной работе предлагается метод верификации моделей (Model checking) применительно к автоматным программам. В этом контексте исследуются особенности структуры (модели) Крипке. Причина, по которой этим вопросам уделяется внимание, заключается в преимуществах автоматных программ перед остальными в смысле верификации, так как алгоритмы верификации автоматных программ могут оперировать с моделью Крипке, заданной в явном виде, в то время как для традиционных программ процесс построения модели требует дополнительного исследования. Можно выделить следующие ключевые этапы верификации автоматных программ: преобразование автоматной модели в модель Крипке и построение требований к модели (свойства модели); собственно процесс верификации (отработки алгоритмов на полученных моделях); построение подтверждающих трасс (контрпримеров) в модели Крипке, а также представление контрпримеров, записанных в терминах модели Крипке, в виде путей в исходной автоматной модели. Алгоритмы верификации и построения контрпримеров в модели Крипке изложены в работах [1-5]. Генерация модели Крипке основана на построении редуцированного графа переходов, структура которого рассматривается в данной работе.

В этом разделе описывается метод генерации множества атомарных предложений автоматной программы и преобразования автомата с булевыми входными переменными в модель Крипке. Метод состоит в редукции полного графа переходов с внесением тесных отрицаний внутрь атомарной формулы. Приводится пример записи требований к программе. Требования выражаются в темпоральной логике CTL.

Моделью Крипке (также CTL-моделью) для данного множества атомарных предложений AP будем считать тройку M = (S,R,Label), где: - S - непустое множество состояний;

^ ^ S х S - тотальное отношение на S, называемое отношением переходов. Для него должна выполняться формула Vs е S 3s' е S | (s,s')e^ (свойство тотальности).

Оно сопоставляет каждому элементу (состоянию) s е S непустое множество его состояний-последователей.

Введение

Общие положения

- Label ^ S х AP - помечающее отношение, сопоставляющее каждому состоянию ^ е S множество атомарных предложений, истинных в Иногда можно потребовать, чтобы в модели Крипке было задано непустое множество начальных состояний So ^ S или даже одно начальное состояние 5 е S.

Построение модели Крипке по автоматной модели

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

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

Итак, опишем алгоритм построения модели Крипке для одиночного автомата в предположении, что модели Крипке для всех его вложенных автоматов уже построены. Будем пользоваться терминологией, введенной в разд. 2.2.1.1 отчета по III этапу темы [6].

В методе редукции графа переходов множество AP задается следующим образом: (уь У2, ...} U (eb e2, ...} U (xb Х2, ...} U { !xb !x2, ...} U (zb z2, ...} U {inState, inEvent, inAction} U Names.

Здесь {уь y2, ...} - множество наименований всех состояний автоматов, {eb e2, ...} - событий, {xi, x2, ...} - входных воздействий, а {zx, z2, ...} - выходных воздействий. Names - множество наименований самих автоматов, а inState, inEvent и inAction -управляющие автомарные предложения, предназначенные для того, чтобы было удобно различать позиции, построенные из состояний, событий и выходных воздействий.

Модель Крипке будем строить по частям: вначале построим те ее части, которые соответствуют состояниям автомата (при этом потребуется обработать выходные воздействия и автоматы, вложенные в эти состояния), а потом добавим туда информацию о переходах. На первом шаге положим множество S равным множеству состояний исходного автомата, и для каждого состояния s добавим в отношение Label две пометки:

(s, s) и (s, InState).

После этого для каждого состояния s необходимо выполнить следующую операцию. Пусть s содержит выходные воздействия zs[1], ..., zs[u], которые выполняются при входе в s. Добавим в модель u состояний {r1, ..., гц} и u переходов r1 ^ r2, ..., гц-1 ^ гц, гц ^ s, в отношение Label добавим пометки (rk, zs[k]), (rk, InAction) для всех к от 1 до u. При добавлении ребер в модель на следующих этапах каждую дугу, направленную в s, будем перенаправлять в r1.

Пример такого преобразования приведен на рис. 1.

( ( \

zn, InAction Y, InState ^ )

а б

Рис. 1. Состояние с выходными воздействиями до преобразования

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

Пусть в состояние y внешнего автомата вложены автоматы ay,13 ay,2, ..., AY,v (для них модели Крипке уже построены по индуктивному предположению). В модели Крипке для внешнего автомата (которая еще строится) уже присутствует позиция, соответствующая состоянию Y. Для каждого из автоматов Ay,1, Ay,2, ••, Ay,v добавим его модель Крипке к строящейся модели Крипке внешнего автомата. При добавлении требуется скопировать во внешнюю модель Крипке все состояния, переходы и пометки внутренней модели Крипке. Для каждого состояния внутренней модели Крипке создадим уникальное, соответствующее только ему, состояние внешней модели Крипке. Во внешнее отношение переходов ^ добавим переходы между теми состояниями, которые соответствовали всем переходам между состояниями внутренней модели. Аналогично поступим и с помечающим отношением Label.

После того, как внутренние модели Крипке будут скопированы во внешнюю, добавим в нее также v переходов: для каждого i от 1 до v - 1 добавим в отношение ^ переход из терминальной позиции модели Крипке для автомата AY,i в стартовую позицию модели Крипке для автомата AY,i+1, а также один переход из терминальной позиции модели Крипке для автомата AY,v в позицию, соответствующую состоянию Y. Если до этого в позицию y вели какие-либо дуги, то все они перенаправляются в стартовую позицию модели Крипке для автомата ay,1.

Пример такого преобразования приведен на рис. 2.

Рис. 2. Обработка автоматов, вложенных в состояние

Обратим внимание, что в различные состояния автомата A могут быть вложены различные «копии» одного и того же автомата B. В этом случае для каждой копии автомата создается своя модель Крипке (все эти модели изоморфны друг другу), и перенаправление дуг выполняется для нее. Размер полученной модели Крипке (число ее состояний) будет ограничен сверху произведением размеров моделей Крипке для каждого автомата в отдельности (без учета вложенных).

На данном этапе закончивается обработка состояний автомата. Поэтому перейдем к описанию того, как обрабатываются переходы.

Рассмотрим множество следующих символов: {x1, !x1; x2, !x2; x3, !x3; ...}. Можно сказать, что это множество всех литералов, составленных из входных переменных. Следует различать смысл знаков — и !. Первый из них означает выполнение операции логического отрицания, а второй интерпретируется просто как символ (часть строки !xi).

Тогда для каждого ребра r исходного автомата, ведущего из состояния p в состояние q с пометкой ei & hjm& hj[2]& hj[3] & ... hj[m] / zmb ..., ziM, где либо hj[j*] = xj[j*], либо hj[j*] = !xj[j*] (это значит, что hj[j*] есть либо входная переменная, либо ее отрицание), добавим в модель n + 1 состояние {re, r1, ..., rn}, n + 2 перехода: p ^ re, re ^ r1, r1 ^ r2, ..., rn-1 ^ rn, rn ^ q, а в отношение Label добавим пометки (re, ei),

(ге, InEvent), (гк, 21[к]), (гк, InAction) для всех к от 1 до п, а также пометки (ге, ),

(ге, ^[2]Х . ^[т]^

Пример такого преобразования отражен на рис. 3.

а

Рис. 3. Переход между состояниями до преобразования по методу редукции

и после него

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

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

Если на переходах каких-либо автоматов указаны условия на состояния других автоматов, то эти переходы следует добавлять в модель Крипке только в случае, если данные условия соблюдаются. Так как автоматы вложены друг в друга, то следует проверять условия на переходах внутренних автоматов, описывающие поведение внешних автоматов. Пример построения модели Крипке по системе взаимодействующих автоматов приведен на рис. 4.

1 InState 3 In Event ' 2 Instate ГЛ 4 Instate Г\ InEvent Г\ 5 Instate 7 InEvenl

A3, Z1 12 Instate A3, e, x ГЧ 13 In Event A3, Z2 r> 11 Instate A2, Y1 21 InEvemt A2. e, 1x to Instate A3, Z1 ' 8 Instate A3, е.* I S Instate

A3 1 InS А2 Z2 ate A3, e, * 19 In Event A2, e, !x • A3, Z1 rv 15 In&tate A3, Z1 A1,e ГЛ 17 InEvervt A3, a, x At, XI 16 Instate A3,Z2 A2, Y2 ' 1B Instate A2, Y2 - A3. Z2 20 Instate AI.X2 D

Рис. 4. Система автоматов, взаимодействующих по вложенности, с условиями на состояниях внешних автоматов и модель Крипке для этой системы

Рассмотрим пример работы этого алгоритма для системы, эмулирующей работу банкомата [6, 7]. Система состоит из двух автоматов AClient и АБе^ег, причем АБе^-

er вложен в AClient. Схема связей для соответствующей автоматной модели изображена на рис. 5, а графы переходов автоматов AServer и AClient - соответственно на рис. 6 и 7.

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

f^j seventprovider» ^¡Ц) «statennachine» 1 1 «controlledobject»

pi : client.HardwareEventProvider А,.,: .,.onfigManager ol : dient,FormPainter

У7 Еб: String = "еб" -(Карта вставлена}

Е7: String = "е7" -(Карта вытащена} С z0: void -(Выключение} Ь zl: void {Приветствие}

У Е8: String = "е8" -(Чек взят}

У7 Е9: String = "е9" -(Деньги выданы} С z2: void {Ввод pin кода}

Ol С z4: void -(Главное меню}

(j z6: void -(Вывод баланса на экран} С z7: void -(Печать баланса на чеке}

С z8: void -(Ввод суммы} С zlO: void {Выдача денег}

f^j seventprovider»

р2 : client.HumanEventProvider С zll: void {Печатать ли чек}

Е0: String = "е0" {Нажали «выключить»} El: String = "el" -(Нажали кнопку 1} С zl2: void {Печать чека по операции} С г 13: void {Возврат карты}

У7 Е2: String = "е2" -(Нажали кнопку 2}

У7 ЕЗ: String = "еЗ" -(Нажали кнопку 3}

Е4: String = "е4" -(Нажали кнопку 4}

1 1 «controlledobiect»

о2 : client,ServerQuery

о2

«eventproviders

С z3: void {Авторизация на сервере}

рЗ : client.ServerEventProvider С z5: void {Запрос баланса}

У7 ЕЮ: String = "elO" -(pin код верный} С z9: void {Запрос снятия денег}

E11: String = "el 1" -(pin код неверный}

У7 E12: String = "el2" -(Получен баланс}

У7 E13: String = "el3" -(Снятие денег прошло удачно}

Е14: String = "el4" -(Нет запрашиваемой суммы}

У7 Е15: String = "е15" -(Ошибка при работе с сервером}

«eventprovider»

р4 : callserver.ClientEventProvider «staternachine» 1 1 -scontrolledobject»

У7 Е21: String = "е21" -¡Авторизация} A,.,: ...onfigManager оЗ : callserver.ServerReply

У7 Е22: String = "е22" -(Запрос баланса}

У7 Е23: String = "е23" -(Запрос снятия денег} оЗ С zO: void {Чтение запроса}

Е24: String = "е24" -(Ответ готов} С zl: void {Авторизировать} С z2: void {Вернуть баланс}

С z3: void {Снять деньги}

С z4: void {Ответить клиенту}

Рис. 5. Схема связей автоматной модели

Рис. 6. Граф переходов автомата AClient

i^enter /оЗ.гЗ j

Рис. 7. Граф переходов автомата AServer

Рис. 8. Редукция графа переходов для модели банкомата

Проверка С7Х-формулы

Разберем построение и интерпретацию СТЬ-формул для редуцированных моде-

лей.

Рис. 9. Пример пути в модели Крипке для банкомата

СТЬ-семантика в данном методе будет немного отличаться от общепринятой: перед тем, как выполнять верификацию СТЬ-формулы, ее следует привести к определенному («каноническому») виду. Вначале в ней необходимо удалить все парные отрицания (путем замены подформул вида ——/ на /). После этого все входные воздействия, которые присутствуют в формуле без отрицания, требуется предварить двумя отрицаниями: одно из них - синтаксическое, другое - логическое (это значит, что необходимо заменить литералы вида х1 на формулы — !х1). Только после этих модификаций результирующую формулу можно верифицировать методами, предназначенными для языка СТЬ. Причина такого обращения с литералами заключается в следующем: требуется обеспечить, чтобы любая ссылка на несущественную переменную, которая упомянута в СТЬ-формуле, давала истинный результат (несущественными переменными на данном переходе называются те входные переменные исходного автомата, значение которых не проверяется на этом переходе).

Рассмотрим пример для модели банкомата. Проверим СТХ-формулу: e14 ^ —E[—o3.z0 U y10]. Она означает: если произошло событие e14, то невозможно попасть в состояние 10, минуя позицию o3.z0. Эта формула верна во всех позициях модели. Все пути из позиции e14 в состояние 10 дважды «проходят» через автомат AServer: в первый раз - попав в состояние 3, а второй - попав в состояние 9 автомата AClient. Пример такого пути (не проходящего дважды через одно состояние одного и того же экземпляра автомата) выделен на рис. 9. Позиция e14, являющаяся стартовой для данного пути, выделена на рисунке жирным шрифтом.

Рис. 10. Участок пути в автомате AClient

Таким образом, в методе редукции графа переходов была видоизменена семантика СТЬ. Рассмотренная схема преобразовывала исходную формулу, построенную для но-

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

Путь в модели Крипке для банкомата, отображенный на рис. 9, можно показать и в терминах исходной системы автоматов (рис. 10, 11).

\enter /оЗ.гЗ _/

а

._____________

^ег^ег /оЗ.гЗ у б

Рис. 11. Участок пути в автомате АБе^ег при первом прохождении (а) и при втором

прохождении

Преобразование сценария для модели Крипке в сценарий для автомата

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

При интерактивном моделировании совместно с исполнением и визуализацией автомата [8, 9] желательно автоматизировать процесс представления путей в модели Крипке путями в автомате.

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

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

Для описанного в настоящей работе метода операция переноса путей из модели Крипке в автомат выполняется однозначно. Действительно, состояния модели, содержащие атомарное предложение Y =... или вспомогательное атомарное предложение InState, однозначно преобразуются в соответствующие им состояния автомата. Путь между любыми двумя соседними состояниями всегда представляет собой «змейку» из события и выходных воздействий. Любая из этих промежуточных позиций однозначно определяет то главное состояние автомата, из которого эта «змейка» исходит. Из атомарных предложений, которыми помечены состояния «змейки», однозначно восстанавливаются события. Значения существенных входных переменных (тех, которые записаны на переходе) и список несущественных переменных определяется оттуда же (методом редукции). Последовательным проходом по полученному пути восстанавливается информация о выполнимости литералов, соответствующих выходным воздействиям, об очередности этих литералов и о том, как попасть в данное состояние.

Заключение

В работе предложен метод редукции графа переходов для представления системы автоматов структурами Крипке. Этот метод реализован программно. Программа позволяет строить трассы, которые подтверждают заданные формулы, начинающиеся с квантора существования пути (или опровергают отрицания этих формул). Рассмотренные примеры показывают, что предложенный метод позволяет убеждаться в корректности модели, находить ошибки в случае некорректных формул и ошибки в неверной модели. Ряд тестов проводился для намеренно измененной модели, чтобы продемонстрировать эффективность метода.

Литература

1. Emerson E.A., Clarke E.M. Using branching time temporal logic to synthesize synchronization skeletons // Science of Computer Programming. - 1982. - № 2. - Р. 241-266.

2. Clarke E.M., Emerson E.A. Design and Synthesis of Synchronization Skeletons Using Branching-Time Temporal Logic // Logics of Programs, Workshop. - Yorktown Heights, New York, May 1981. - LNC, 131. -Springer, 1982. - Р. 52-71.

3. Лифшиц Ю. Верификация программ и темпоральные логики. Лекция №3 курса «Современные задачи теоретической информатики». - СПбГУ ИТМО, 2005 [Электронный ресурс]. - Режим доступа: http://logic.pdmi.ras.ru/~yura/modern/03modernnote.pdf, свободный.

4. Лифшиц Ю. Символьная верификация программ. Лекция № 4 курса «Современные задачи теоретической информатики». - СПбГУ ИТМО, 2005 [Электронный ресурс].- Режим доступа: http://logic.pdmi.ras.ru/~yura/modern/04modernnote.pdf, свободный

5. Вельдер С.Э., Шалыто А.А. О верификации автоматных программ на основе метода Model Checking // Информационно-управляющие системы. - 2007. - № 3. - С. 2738.

6. Разработка технологии верификации управляющих программ со сложным поведением, построенным на основе автоматного подхода. Отчеты по НИР, выполняемая по государственному контракту № 02.514.11.4048 от 18.05.2007 [Электронный ресурс]. - Режим доступа: http://is.ifmo.ru/verification/, свободный.

7. Козлов В.А., Комалева О.А. Моделирование работы банкомата. - СПбГУ ИТМО, 2006 [Электронный ресурс]. - Режим доступа: http://is.ifmo.ru/unimod-projects/bankomat/, свободный.

8. Сайт проекта UniMod [Электронный ресурс]. - Режим доступа: http://unimod.sf.net, свободный.

9. Сайт eVelopers Corporation [Электронный ресурс]. - Режим доступа: http://www.evelopers.com, свободный.

Вельдер Сергей Эдуардович - Санкт-Петербургский государственный университет инфор-

мационных технологий, механики и оптики, магистр прикладной математики и информатики, аспирант, velder@rain.ifmo.ru

Шалыто Анатолий Абрамович - Санкт-Петербургский государственный университет информационных технологий, механики и оптики, доктор технических наук, профессор, заведующий кафедрой, shalyto@mail.ifmo.ru

УДК 004.89

СЕМАНТИЧЕСКАЯ ПАУТИНА И ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ

И.А. Бессмертный

В статье рассматривается проблема создания искусственного интеллекта, моделирующего человеческое мышление. Предлагается способ количественной оценки естественного и искусственного интеллекта и оценивается необходимый объем базы знаний. Рассматривается возможность создания глобального искусственного интеллекта путем использования в качестве базы знаний Семантической паутины - Всемирной паутины нового поколения. Анализируются проблемы практической реализации данной идеи и возможные пути решения.

Ключевые слова: искусственный интеллект, Семантическая паутина, интеллектуальный агент.

Введение

Появление машин и механизмов привело к тому, что физическая сила и выносливость перестали быть основными свойствами человека как работника. Уместно также вспомнить «Великий уравнитель» - кольт. В настоящее время мы наблюдаем, как благодаря Интернету утрачивает ценность эрудиция человека, поскольку практически любая информация может быть доставлена пользователю в считанные секунды. Однако Интернет дает только доступ к документам, оставляя человеку извлечение и интерпретацию данных. Логичным развитием Интернета является объявленный в концепции Семантической паутины (Semantic Web, СП) переход от извлечения документов к извлечению знаний, а также к их автоматической обработке [1]. База знаний, образуемая множеством семантических документов СП, вместе с интеллектуальным агентом (ИА) для извлечения знаний образуют структуру, напоминающую искусственный интеллект [2]. В статье рассматривается вопрос, может ли СП стать средой для создания глобального искусственного интеллекта (ИИ), позволяющего не только предоставлять пользователю факты, но и выполнять умозаключения и порождать новые знания.