Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Автоматическое
доказательство теорем
История, смежные области
Первые шаги
1954 г. Мартин Дэвис из Принстонского
университета реализовал алгоритм для
Арифметики Пресбургера:
1. ¬(0 = x ...
Первые шаги
• 1956 г. The Logic Theory Machine
Удалось доказать 38 из 52 первых теорем
Principia Mathematica
Изоморфизм Карри-Говарда
Построение конструктивного доказательства
похоже на описание вычислений 1958
• Типы – высказывани...
Лямбда исчисление
(λ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)
(...
РЕФАЛ
Palindrom {
s.1 e.2 s.1 = <Palindrom e.2> ;
s.1 = True ;
= True;
e.1 = False ;
}
<Palindrom 'abcba'>
Prolog
• Факты
• parent (pam, bob).
• parent (tom, bob).
• parent (tom, liz).
• parent (bob, ann).
• parent (bob, pat).
• ...
Prolog
• Вопросы
• ? - parent (bob, pat).
• yes
• ?-parent (bob,mary).
• no
Верификация программного
обеспечения
• Проверка типов
• Статический анализ
• Доказательство свойств
Подходы к улучшению качества
• Социальные
– Код-ревью
– Парное программирование
• Методологический
– Паттерны
– Тесты
– Ве...
Язык описания свойств
• Если не описаны свойства то программа
всегда правильная
• Не любой язык удобно использовать в
каче...
Eiffel
put (x: ELEMENT; key: STRING) is
-- Insert x so that it will be retrievable through key.
require
count <= capacity
...
Eiffel AutoTest проблемы
• Контракты очень редко описывают
тестируемую систему. Например, постусловие
должно описывать что...
Автоматическая генерация
• Предусловие должно быть выполнено, но
сильные предусловия могут не быть
достигнуты случайным ге...
Eiffel autotest achieved
2005-2007 Начальный этап разработки системы
Например, было найдено следующее количество
различных...
От языка программирования к
системе доказательств
• Как вместо того чтобы писать программы
начать писать доказательства?
•...
Agda
data Nat : Set where
zero : Nat
suc : Nat -> Nat
_+_ : Nat -> Nat -> Nat
zero + m = m
suc n + m = suc (n + m)
Agda
data Vec (A : Set) : Nat -> Set where
[] : Vec A zero
_::_ : {n : Nat} -> A -> Vec A n -> Vec A (suc n)
head : {A : S...
Coq Proof Assistant
Coq < Inductive even : nat -> Prop :=
Coq < | even_0 : even O
Coq < | even_SS : forall n:nat, even n -...
Coq
Coq < Fixpoint wrongplus (n m:nat) {struct n} : nat :=
Coq < match m with
Coq < | O => n
Coq < | S p => S (wrongplus n...
Coq tactics
Coq < Lemma induction_test : forall n:nat, n = n -> n <= n.
1 subgoal
============================
forall n : ...
Classical reasoning
Coq < Lemma or_commutative : A / B -> B / A.
1 subgoal
A : Prop
B : Prop
C : Prop
====================...
Coq
Coq < Section club.
Coq < Variables Scottish RedSocks WearKilt Married GoOutSunday : Prop.
Coq < Hypothesis rule1 : ~ ...
Прогонка
Ю. А. Климов Специализатор CILPE
Coq не единственный в своём роде
• The World Championship for Automated
Theorem Proving
• http://www.cs.miami.edu/~tptp/CA...
Google trends
• Formal verification/code review (below)
Итоги
• Для формальной верификации требуется
помощь человека
• Случайное тестирование помогает, но
ничего не гарантирует
Upcoming SlideShare
Loading in …5
×

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

274 views

Published on

http://techtalks.nsu.ru

18 ноября 2014. Ренат Идрисов, к.ф.-м.н., ИСИ СО РАН, рассказывает про автоматическое доказательство теорем:

«Вы наверняка слышали, что в последнее время далеко не все теоремы доказываются вручную.

Как именно работают системы автоматических доказательств и что за языки лежат в их основе? Похоже ли построение автоматических доказательств на программирование? Могу ли я доказывать свои любимые теоремы на C или C++?

В рамках лекции прозвучат ответы на эти и другие вопросы, а также будет проведен небольшой вводный инструктаж по Coq.»

Лекция прочитана в рамках проекта Tech Talks @NSU – серии открытых лекций о разработке ПО и карьере в IT, проводимых в Новосибирском государственном университете.

Подробности: http://techtalks.nsu.ru

Published in: Technology
  • Be the first to comment

  • Be the first to like this

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

  1. 1. Автоматическое доказательство теорем История, смежные области
  2. 2. Первые шаги 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) «Было величайшим триумфом доказать чётность суммы чётных чисел»
  3. 3. Первые шаги • 1956 г. The Logic Theory Machine Удалось доказать 38 из 52 первых теорем Principia Mathematica
  4. 4. Изоморфизм Карри-Говарда Построение конструктивного доказательства похоже на описание вычислений 1958 • Типы – высказывания • Программы – доказательства • Вычисление – упрощение (P→Q→R)→(P→Q)→P→R (P⇒(Q⇒R))⇒((P⇒Q)⇒(P⇒R))
  5. 5. Лямбда исчисление (λ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 Пример из лекций Дмитрия Сошникова
  6. 6. РЕФАЛ Palindrom { s.1 e.2 s.1 = <Palindrom e.2> ; s.1 = True ; = True; e.1 = False ; } <Palindrom 'abcba'>
  7. 7. Prolog • Факты • parent (pam, bob). • parent (tom, bob). • parent (tom, liz). • parent (bob, ann). • parent (bob, pat). • parent (mary, ann). • parent (pat, juli).
  8. 8. Prolog • Вопросы • ? - parent (bob, pat). • yes • ?-parent (bob,mary). • no
  9. 9. Верификация программного обеспечения • Проверка типов • Статический анализ • Доказательство свойств
  10. 10. Подходы к улучшению качества • Социальные – Код-ревью – Парное программирование • Методологический – Паттерны – Тесты – Версии – Баг-треккеры • Технологический – Lint • Математический
  11. 11. Язык описания свойств • Если не описаны свойства то программа всегда правильная • Не любой язык удобно использовать в качестве языка описания свойств (def sort-idempotent-prop (prop/for-all [v (gen/vector gen/int)] (= (sort v) (sort (sort v)))))
  12. 12. 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
  13. 13. Eiffel AutoTest проблемы • Контракты очень редко описывают тестируемую систему. Например, постусловие должно описывать что процедура меняет и что не должна менять. Функция вывода на экран не должна увеличивать счётчиков, соединяться с базой данных и так далее • Контракты не только не полны, но и содержат ошибки, допущенные разработчиками
  14. 14. Автоматическая генерация • Предусловие должно быть выполнено, но сильные предусловия могут не быть достигнуты случайным генератором за разумное время • Кроме того, генерируемые значения должны соответствовать критерию адекватности теста (обеспечивать покрытие и т. д.)
  15. 15. Eiffel autotest achieved 2005-2007 Начальный этап разработки системы Например, было найдено следующее количество различных ошибок в основных библиотеках: • STRING - 12 • BOUNDED_STACK - 11 • HASH_TABLE - 23 • ARRAYED_SET - 27 • LINKED_LIST - 25
  16. 16. От языка программирования к системе доказательств • Как вместо того чтобы писать программы начать писать доказательства? • Языки программирования с зависимыми типами (типы индексируемые значениями другого типа) • Логические высказывания записываются как типы, а доказательствами являются программы соответствующего типа • ФП + ЗТ => АДТ
  17. 17. Agda data Nat : Set where zero : Nat suc : Nat -> Nat _+_ : Nat -> Nat -> Nat zero + m = m suc n + m = suc (n + m)
  18. 18. 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 (пример из Википедии)
  19. 19. 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)).
  20. 20. 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".
  21. 21. 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.
  22. 22. 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.
  23. 23. 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.
  24. 24. Прогонка Ю. А. Климов Специализатор CILPE
  25. 25. Coq не единственный в своём роде • The World Championship for Automated Theorem Proving • http://www.cs.miami.edu/~tptp/CASC/ Таблица со страницы википедии про автоматическое доказательство теорем
  26. 26. Google trends • Formal verification/code review (below)
  27. 27. Итоги • Для формальной верификации требуется помощь человека • Случайное тестирование помогает, но ничего не гарантирует

×