tech talks @nsu: Автоматическое доказательство теорем

27
Автоматическое доказательство теорем История, смежные области

Upload: tech-talks-nsu

Post on 19-Jan-2017

119 views

Category:

Education


9 download

TRANSCRIPT

Page 1: Tech Talks @NSU: Автоматическое доказательство теорем

Автоматическое доказательство теорем

История, смежные области

Page 2: Tech Talks @NSU: Автоматическое доказательство теорем

Первые шаги

1954 г. Мартин Дэвис из Принстонского университета реализовал алгоритм для Арифметики Пресбургера: 1. ¬(0 = x + 1) 2. x + 1 = y + 1 → x = y 3. x + 0 = x 4. (x + y) + 1 = x + (y + 1) 5. (P(0) ∧ (P(x)→P(x + 1))) → P(y) «Было величайшим триумфом доказать чётность суммы чётных чисел»

Page 3: Tech Talks @NSU: Автоматическое доказательство теорем

Первые шаги

• 1956 г. The Logic Theory Machine

Удалось доказать 38 из 52 первых теорем Principia Mathematica

Page 4: Tech Talks @NSU: Автоматическое доказательство теорем

Изоморфизм Карри-Говарда

Построение конструктивного доказательства похоже на описание вычислений 1958

• Типы – высказывания

• Программы – доказательства

• Вычисление – упрощение

(P→Q→R)→(P→Q)→P→R

(P⇒(Q⇒R))⇒((P⇒Q)⇒(P⇒R))

Page 5: Tech Talks @NSU: Автоматическое доказательство теорем

Лямбда исчисление

(λf.λx.(f (f x)) (λz.z2) 3 [f/(λz.z2)] λx.(f (f x)) 3 λx.(λz.z2)((λz.z2) x) 3 [x/3] (λz.z2)((λz.z2) x) (λz.z2)((λz.z2) 3) (λz.z2)([z/3]z2) (λz.z2) 32 [z/32] z2 (32)2 Пример из лекций Дмитрия Сошникова

Page 6: Tech Talks @NSU: Автоматическое доказательство теорем

РЕФАЛ

Palindrom {

s.1 e.2 s.1 = <Palindrom e.2> ;

s.1 = True ;

= True;

e.1 = False ;

}

<Palindrom 'abcba'>

Page 7: Tech Talks @NSU: Автоматическое доказательство теорем

Prolog

• Факты

• parent (pam, bob).

• parent (tom, bob).

• parent (tom, liz).

• parent (bob, ann).

• parent (bob, pat).

• parent (mary, ann).

• parent (pat, juli).

Page 8: Tech Talks @NSU: Автоматическое доказательство теорем

Prolog

• Вопросы

• ? - parent (bob, pat).

• yes

• ?-parent (bob,mary).

• no

Page 9: Tech Talks @NSU: Автоматическое доказательство теорем

Верификация программного обеспечения

• Проверка типов

• Статический анализ

• Доказательство свойств

Page 10: Tech Talks @NSU: Автоматическое доказательство теорем

Подходы к улучшению качества

• Социальные – Код-ревью – Парное программирование

• Методологический – Паттерны – Тесты – Версии – Баг-треккеры

• Технологический – Lint

• Математический

Page 11: Tech Talks @NSU: Автоматическое доказательство теорем

Язык описания свойств

• Если не описаны свойства то программа всегда правильная

• Не любой язык удобно использовать в качестве языка описания свойств

(def sort-idempotent-prop

(prop/for-all [v (gen/vector gen/int)]

(= (sort v) (sort (sort v)))))

Page 12: Tech Talks @NSU: Автоматическое доказательство теорем

Eiffel

put (x: ELEMENT; key: STRING) is -- Insert x so that it will be retrievable through key. require count <= capacity not key.empty do ... Some insertion algorithm ... ensure has (x) item (key) = x count = old count + 1 end

Page 13: Tech Talks @NSU: Автоматическое доказательство теорем

Eiffel AutoTest проблемы

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

• Контракты не только не полны, но и содержат ошибки, допущенные разработчиками

Page 14: Tech Talks @NSU: Автоматическое доказательство теорем

Автоматическая генерация

• Предусловие должно быть выполнено, но сильные предусловия могут не быть достигнуты случайным генератором за разумное время

• Кроме того, генерируемые значения должны соответствовать критерию адекватности теста (обеспечивать покрытие и т. д.)

Page 15: Tech Talks @NSU: Автоматическое доказательство теорем

Eiffel autotest achieved

2005-2007 Начальный этап разработки системы

Например, было найдено следующее количество различных ошибок в основных библиотеках:

• STRING - 12

• BOUNDED_STACK - 11

• HASH_TABLE - 23

• ARRAYED_SET - 27

• LINKED_LIST - 25

Page 16: Tech Talks @NSU: Автоматическое доказательство теорем

От языка программирования к системе доказательств

• Как вместо того чтобы писать программы начать писать доказательства?

• Языки программирования с зависимыми типами (типы индексируемые значениями другого типа)

• Логические высказывания записываются как типы, а доказательствами являются программы соответствующего типа

• ФП + ЗТ => АДТ

Page 17: Tech Talks @NSU: Автоматическое доказательство теорем

Agda

data Nat : Set where

zero : Nat

suc : Nat -> Nat

_+_ : Nat -> Nat -> Nat

zero + m = m

suc n + m = suc (n + m)

Page 18: Tech Talks @NSU: Автоматическое доказательство теорем

Agda

data Vec (A : Set) : Nat -> Set where

[] : Vec A zero

_::_ : {n : Nat} -> A -> Vec A n -> Vec A (suc n)

head : {A : Set}{n : Nat} -> Vec A (suc n) -> A

head (x :: xs) = x

(пример из Википедии)

Page 19: Tech Talks @NSU: Автоматическое доказательство теорем

Coq Proof Assistant

Coq < Inductive even : nat -> Prop :=

Coq < | even_0 : even O

Coq < | even_SS : forall n:nat, even n -> even (S (S n)).

Page 20: Tech Talks @NSU: Автоматическое доказательство теорем

Coq

Coq < Fixpoint wrongplus (n m:nat) {struct n} : nat := Coq < match m with Coq < | O => n Coq < | S p => S (wrongplus n p) Coq < end. Coq < Coq < Error: Recursive definition of wrongplus is ill-formed. In environment wrongplus : nat -> nat -> nat n : nat m : nat p : nat Recursive call to wrongplus has principal argument equal to "n" instead of a subterm of "n". Recursive definition is: "fun n m : nat => match m with | 0 => n | S p => S (wrongplus n p) end".

Page 21: Tech Talks @NSU: Автоматическое доказательство теорем

Coq tactics

Coq < Lemma induction_test : forall n:nat, n = n -> n <= n. 1 subgoal ============================ forall n : nat, n = n -> n <= n Coq < intros n H. 1 subgoal n : nat H : n = n ============================ n <= n Coq < induction n. 2 subgoals H : 0 = 0 ============================ 0 <= 0 subgoal 2 is: S n <= S n

Error messages: Not an inductive product Unable to find an instance for the variables ident …ident Use in this case the variant elim … with … below.

Page 22: Tech Talks @NSU: Автоматическое доказательство теорем

Classical reasoning

Coq < Lemma or_commutative : A \/ B -> B \/ A. 1 subgoal A : Prop B : Prop C : Prop ============================ A \/ B -> B \/ A Coq < tauto. Proof completed.

Page 23: Tech Talks @NSU: Автоматическое доказательство теорем

Coq

Coq < Section club. Coq < Variables Scottish RedSocks WearKilt Married GoOutSunday : Prop. Coq < Hypothesis rule1 : ~ Scottish -> RedSocks. Coq < Hypothesis rule2 : WearKilt \/ ~ RedSocks. Coq < Hypothesis rule3 : Married -> ~ GoOutSunday. Coq < Hypothesis rule4 : GoOutSunday <-> Scottish. Coq < Hypothesis rule5 : WearKilt -> Scottish /\ Married. Coq < Hypothesis rule6 : Scottish -> WearKilt. Coq < Lemma NoMember : False. 1 subgoal Coq < tauto. Proof completed.

Page 24: Tech Talks @NSU: Автоматическое доказательство теорем

Прогонка

Ю. А. Климов Специализатор CILPE

Page 25: Tech Talks @NSU: Автоматическое доказательство теорем

Coq не единственный в своём роде

• The World Championship for Automated Theorem Proving

• http://www.cs.miami.edu/~tptp/CASC/

Таблица со страницы википедии про автоматическое доказательство теорем

Page 26: Tech Talks @NSU: Автоматическое доказательство теорем

Google trends • Formal verification/code review (below)

Page 27: Tech Talks @NSU: Автоматическое доказательство теорем

Итоги

• Для формальной верификации требуется помощь человека

• Случайное тестирование помогает, но ничего не гарантирует