- •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
Алгебраические типы на примере списков
list [T: TYPE]: DATATYPE BEGIN null: null?
cons(car: T, cdr: list): cons? END list
null и cons – конструкторы, null? и cons? – распознаватели, car и cdr – поля
выражение CASES: length(s): RECURSIVE nat =
CASES s OF null: 0,
cons(x, y): length(y) + 1
ENDCASES
MEASURE reduce_nat(0, (LAMBDA (x: T), (n: nat): n + 1)) Генерируются 3 теории: list_adt, list_adt_map и list_adt_reduce.
Перечисления
Библиотеки теорий PVS
Стандартная библиотека prelude.pvs
booleans, numbers (real, rational, integer), strings, sets, including definitions and basic properties of finite and infinite sets, functions and relations, equivalences, ordinals, basic definitions and properties of bitvectors, mu calculus, LTL
booleans: THEORY BEGIN
boolean: NONEMPTY_TYPE
bool: NONEMPTY_TYPE = boolean FALSE, TRUE: bool
NOT: [bool -> bool]
AND, &, OR, IMPLIES, =>, WHEN, IFF, <=>:
[bool, bool -> bool]
END booleans
NASA Libraries
algebra: groups, monoids, rings, etc
analysis: real analysis, limits, continuity, derivatives, integrals calculus: axiomatic version of calculus
complex: complex numbers
co structures: sequences of countable length defined as coalgebra datatypes
directed graphs: circuits, maximal subtrees, paths, dags float: floating point numbers and arithmetic
graph theory: connectedness, walks, trees, Menger's Theorem ints: integer division, gcd, mod, prime factorization, min, max interval: interval bounds and numerical approximations
lnexp: logarithm, exponential and hyperbolic functions
lnexp_fnd: foundational definitions of logarithm, exponential and hyperbolic functions
NASA Libraries (cont)
orders: abstract orders, lattices, fixedpoints
reals: summations, sup, inf, sqrt over the reals, abs lemmas scott: Theories for reasoning about compiler correctness
series: power series, comparison test, ratio test, Taylor's theorem sets_aux: powersets, orders, cardinality over finite sets sigma_set: summations over countably finite sets
structures: bounded arrays, finite sequences and bags
topology: continuity, homeomorphisms, connected and compact spaces, Borel sets/functions
trig: trigonometry definitions, identities, approximations
trig_fnd: foundational development of trigonometry: proofs of trig axioms
vectors: basic properties of vectors
while: Semantics for the Programming Language "while"
Prover
--сочетание в PVS языка логики высокого уровня и мощного автоматического prover’a
--комплекс средств поддержки построения доказательств в форме, удобной для восприятия, в целях разработки, отладки, анализа и визуализации доказательств
--реализует значительно бо’льшую степень автоматизации и бо’льшую степень контроля, по сравнению с другими prover’ами
Команды доказательства могут быть скомбинированы в стратегии доказательства.
Доказательства можно редактировать запускать вновь.
Семантический анализ (Type checking) реализуется посредством автоматического доказательства Prover’ом истинности условий, называемых type correctness conditions (TCCs)
Дерево доказательства, вершина цель доказательства, дугашаг доказательства
Каждая цель секвент (sequent) состоит из посылок (antecedents) и следствий (consequents)
{-1} A1
{-2} A2
[-3] A3
………..
---------------- |
(A1 & A2 & A3 & …) (B1 B2 B3 …) |
{1} B1 |
|
[2] B2 |
|
{3} B3 |
|
……….. |
A1, A2, A3, …├ B1, B2, B3 ,… |
[-3], [2] формулы из родительского секвента, {-1}, {-2}, {1}, {3} новые формулы
Корневая вершина цель вида ├ A, где A теорема, которую нужно доказать.
Если доказано, что секвент истинный, то ветвь дерева на нем заканчивается.
Есть разные правила. Наиболее простое: если одна из посылок ложная, то секвент истинный. Задача prover’a построить полное дерево доказательства
Пусть имеется секвент A├ B & C
Команда split порождает два секвента-потомка: A├ B и A├ C
Команда правило (шаг) доказательства Применяемые команды доказательства сохраняются.
Команды могут быть введены пользователем или применяться при работе по некоторой стратегии
Некоторые команды достаточно гибкие и мощные
Логика PVS
-- исчисление секвентов Г, - последовательности формул,
A, B – отдельные формулы
Структурные правила Пропозиционные правила Правила для равенства Правила для кванторов Правила для IF
