Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lectures / lecture12.ppt
Скачиваний:
7
Добавлен:
06.06.2015
Размер:
286.72 Кб
Скачать

05.12.12 Лекция 12

Предикатное программирование

8. Язык, технология и методы верификации других классов программ (прод.)

Класс реактивных систем (прод.)

Темпоральная логика Спецификация скелета радиус-сервера

Сеанс исходящего звонка

Свойства спецификации сеанса

Реализация скелета радиус-сервера Реализация для ненадежных каналов

Процессорная спецификация языка исчисления вычислимых предикатов

Темпоральная логика

Классическая логика (propositional logic)

Примитивная модель истины: “черно-белая”модель, не существует степени уверенности - неуверенности, высказывания статичны, неизменны во времени

Пример - некоммутативность конъюнкции, A&B ≠B&A :

•“Джону стало страшно и он убил” ? “Джон убил и ему стало страшно” •“Смит умер и его похоронили” ? “Смита похоронили и он умер” •“Джейн вышла замуж и родила ребенка” ?

“Джейн родила ребенка и вышла замуж”

Определение Модальной логики

Модальность(от лат. modus – вид, способ, наклонение) –это категория, определяющая отношение высказывания к действительности (“необходимо, чтобы А”, “возможно, что А”, “когда-нибудь в будущем будет верно, что А”и т.п.)

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

Примеры модальных операторов:

М-“возможно, что” (Мр – “возможно, что р”)

L-“необходимо, что”

(Lq – “q обязательно должно выполниться”)

F – “когда-нибудь в будущем будет верно, что...”

G - “всегда в будущем будет верно, что...”

P - “когда-то в прошлом было верно, что...” Соотношения между модальностями:

Мр ≡ ¬L¬р, Lр ≡ ¬M¬р, Fр ≡ ¬G¬р, Gр ≡ ¬F¬р

Динамически порождаемые процессы

Создание и запуск нового процесса: new <имя процесса>(<параметры вызова>)

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

сеанс внутреннего абонента

Радиус-сервер интернет-телефонии

Система интернет-телефонии (СИТ)

внутренние и внешние абоненты, удаленные узлы,

сеанс связи абонента и СИТ

сеанс исходящего звонка сеанс входящего звонка сеанс внешнего абонента

авторизация внутреннего абонента (номер + код), внешнего абонента (IP-адреса + пути к удаленному телефону)

радиус-сервер (РС), биллинговый сервер (БС)

СИТ РС БС

процесс = скелет + функциональное наполнение

скелет действия и структуры данных, от которых зависит выбор следующего состояния

Типовая схема взаимодействия

AuthNum()

AuthNumBilling()

СИТ

РС

БС

AuthNumReply(bool ответ)

AuthNumBillingReply(bool ответ)

Спецификация скелета радиус-сервера.

Множество сеансов

type ID;

// тип уникального идентификатора сеанса

class SEANCE; {

ID id;

// идентификатора данного сеанса

process сеансВходящегоЗвонка1(ID j); process сеансВходящегоЗвонка2(ID j); process сеансИсходящегоЗвонка(ID j);

} to be continued

interface множествоСеансов; {

создатьСеанс(ID j, SEANCE se); // в множество сеансов добавляется новый сеанс se с идентификатором j

cеанс(ID j: SEANCE se); // в множестве сеансов находится сеанс se, соответствующий идентификатору j

удалитьСеанс(ID j);

// из множества сеансов удаляется сеанс с идентификатором j

}

 

Главный процесс радиусСервер

process радиусСервер()

{loop: обработкаОчередногоСообщения( : #loop) }

process обработкаОчередногоСообщения( : #loop) { receive {

AuthIncoming(ID j):

создатьСеанс(j, new сеансВходящегоЗвонка1(j)) case AuthIncomingPath(ID j):

создатьСеанс(j, new сеансВходящегоЗвонка2(j)) case AuthOutgoing(ID j):

создатьСеанс(j, new сеансИсходящегоЗвонка(j))

case

Stop(ID j): сеанс(j) ! Stop( )

case

AuthNum(ID j):

сеанс(j) ! AuthNum( )

case AuthNumBillingReply(ID j, bool ответ): сеанс(j) ! AuthNumBillingReply (ответ)

……….. и т.д., всего 15 сообщений

}

#loop

}

Сеанс входящего звонка

process сеансВходящегоЗвонка1(ID id: #end) {

 

 

авторизацияВнешнегоНомера( : #path| #stop);

path:

авторизацияПутиЗвонок( : #nextcall | #stop);

nextcall:

#stop

 

stop:

БС ! StopBilling(); удалитьСеанс(id)

#end

}

 

 

process сеансВходящегоЗвонка2(ID id: #end) {

 

 

авторизацияВнешнегоНомераПути( : #call| #stop);

call:

сеансЗвонка( : #nextcall | #stop);

 

nextcall:

#stop

 

stop:

БС ! StopBilling(); удалитьСеанс(id)

#end

}

Авторизация внешнего абонента, номера и пути

process авторизацияВнешнегоНомера( : #path| #stop) {

 

авторизацияВнешнего( : #yes1| #stop);

yes1:

авторизацияНомера( : #yes2| #no| #stop);

yes2:

#path

no:

#stop

}

 

process авторизацияВнешнегоНомераПути( : #call| #stop) {

 

авторизацияВнешнего( : #yes1| #stop);

yes1:

авторизацияНомера( : #yes2| #no| #stop);

yes2:

авторизацияПути( : #yes3| #no| #stop);

yes3:

#call

no:

#stop

}

 

process авторизацияВнешнего( : #yes| #stop) { БС ! AuthIncomingBilling();

$sAuthIncoming: receive AuthIncomingBillingReply(bool ответ); СИТ ! AuthIncomingReply(ответ);

if (Stop() ответ) #stop else #yes

}

process авторизацияНомера( : #yes| #no| #stop) { БС ! AuthNumBilling();

$sAuthNumBilling: receive AuthNumBillingReply(bool ответ); СИТ ! AuthNumReply(ответ);

if (Stop()) #stop else if (ответ) #yes else #no

}

process авторизацияПути( : #yes| #no| #stop) { БС ! AuthPathBilling();

$sAuthPathBilling: receive AuthPathBillingReply(bool ответ); СИТ ! AuthPathReply(ответ);

if (Stop()) #stop else if (ответ) #yes else #no

}

Соседние файлы в папке lectures