
- •14.11.12 Лекция 9
- •7. Технология предикатного программирования 7.5. Система автоматизации доказательства PVS
- •Система PVS
- •Описания
- •• пустота – непустота типов
- •Рекурсивные определения
- •Макросы
- •Typechecking
- •Описания формул
- •Типы языка спецификаций PVS
- •Подтипы
- •Типы функций
- •p,q: pred[int]
- •Типы произведения (tuples), n-ки
- •Тип записи
- •Зависимые (dependent) типы
- •Виды выражений
- •IF-THEN-ELSE выражения
- •Операции (применения функций)
- •Связывающие (binding) выражения
- •LET и WHERE выражения
- •SET выражения
- •Выражение проекции
- •Поле записи
- •Теории
- •Пример теории
- •Алгебраические типы
- •Алгебраические типы на примере списков
- •Библиотеки теорий PVS
- •NASA Libraries
- •NASA Libraries (cont)
- •Prover
- •Дерево доказательства, вершина цель доказательства, дугашаг доказательства
- •Пусть имеется секвент A├ B & C
- •Логика PVS

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)