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

14.11.12 Лекция 9

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

7. Технология предикатного программирования (прод)

7.5. Система автоматизации доказательства PVS

Язык спецификаций PVS

Описания типов, констант, переменных, формул, утверждений, рекурсивные определения

Проверка типов (typechecking) Выражения, декларации, теории

Библиотеки теорий PVS

Prover

Основные принципы. Дерево доказательства Команды доказательства. Пример

Система правил вывода – команд prover’a

7. Технология предикатного программирования 7.5. Система автоматизации доказательства PVS

Система PVS

Платформа: SUN 4(Spark) + Solaris, PC + Redhat Linux Реаизована: на Common Lisp, Lisp Allegro

Окружение: редактор Emacs. Интерфейс с PVS реализован с помощью команд Emacs.

Спецификация для PVS: набор файлов с расширением “pvs”, каждый файл содержит набор теорий

Ассоциированные файлы: доказательство с раширением “prf”, бинарное представление с расширением “bin”, контекст

Схема работы PVS

-ввод спецификации в редакторе Emacs

-parsing

-typechecking

-proving, набор команд для интерактивного доказательства, стратегии и тактики.

Описания

типы, переменные, константы, формулы, утверждения (judgements), приведения

Описания типов

неинтерпретированные:

T: TYPE

T1, T2, T3: TYPE

- типы разные; для использования в аксиомах

// …

// подтипа: S: TYPE FROM T

s: TYPE FROM t

 

s_pred: [t -> bool]

 

 

 

s: TYPE = (s_pred)

интерпретированные:

T: TYPE = int

intfun: TYPE = [int -> int]

 

subrange(m, n: int): TYPE = { i: int | m <= i AND i <= n }

 

параметры

 

тип перечисления:

T: TYPE = { r, g, b }

• пустота – непустота типов

NONEMPTY TYPE TYPE+ CONTAINING константы проверка непустоты типа

Описания переменных

x: VAR bool

f: FORMULA (FORALL (x: int): (EXISTS (x: nat): p(x)) AND q(x))

области локализации переменной x

Описания констант

интерпретированные, неинтерпретированные

n: int

c: int = 3

f: [int -> int] = (lambda (x: int): x + 1)

g(x: int): int = x + 1 эквивалентная форма

f: [int -> [int, nat -> [int -> int]]] =

(LAMBDA (x: int): (LAMBDA (y: int), (z: nat): (LAMBDA (w: int): x * (y + w) - z)))

эквивалентно f(x: int)(y: int, z: nat)(w: int): int = x * (y + w) - z

Другая форма:

x, y, w: VAR int z: VAR nat

f(x)(y, z)(w): int = x * (y + w) – z

смешанные формы

f(x: {x: int | p(x)}): int = x + 1

эквивалентно

f(x: (p)): int = x + 1

эквивалентно

f((x: int | p(x))): int = x + 1

odd: [nat -> bool] = (LAMBDA (n: nat): EXISTS (m: nat): n = 2 * m + 1)

эквивалентная теоретико-множественная форма

odd: [nat -> bool] = {n: nat | EXISTS (m: nat): n = 2 * m + 1}

Рекурсивные определения

TCC – type consistency condition – условие совместимости типов Определяемая функция должна быть тотальной

well-founded TCC – условие правильной организации функции factorial(x: nat): RECURSIVE nat =

IF x = 0 THEN 1 ELSE x * factorial(x - 1) ENDIF MEASURE (LAMBDA (x: nat): x)

terminationTCC

мера (MEASURE) определяет функцию m(x) и порядок <

Условие m(y) < m(x) выступает как обобщение механизма доказательства по индукции

y = x - 1

factorial_TCC2: OBLIGATION

FORALL (x: nat): NOT x = 0 IMPLIES x - 1 < x

MEASURE x - более компактное определение меры

MEASURE s BY << -- мера с заданием функции порядка

Макросы

N: MACRO nat = 100

реализуется безусловная подстановка тела макроса

на место любых его вхождений

Typechecking

-- анализ семантической согласованности объектов спецификации

Теория типов PVS алгоритмически неразрешима.

Согласованость типов реализуется доказательством теорем, называемых TCCs - type-correctness conditions

Теоремы TCCs прикрепляются к внутреннему представлению спецификации в bin-файле

Статус теории: changed, parsed, typechecked, proved

fac(n: nat): RECURSIVE nat =

IF n = 0 THEN 1 ELSE n * fac(n - 1) ENDIF MEASURE n

Function fac is well-typed if

n /= 0 => n – 1 >= 0 (the argument is a nat) n /= 0 => n – 1 < n (termination).

The type checker (M-x tc) generates type correctness conditions (TCCs)

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