Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

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

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

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

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

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

E51d363aa46f4d059d54a15e0bcd8e6f?s=128

Tech Talks @NSU

November 18, 2014
Tweet

Transcript

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

  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. Первые шаги • 1956 г. The Logic Theory Machine Удалось

    доказать 38 из 52 первых теорем Principia Mathematica
  4. Изоморфизм Карри-Говарда Построение конструктивного доказательства похоже на описание вычислений 1958

    • Типы – высказывания • Программы – доказательства • Вычисление – упрощение (P→Q→R)→(P→Q)→P→R (P⇒(Q⇒R))⇒((P⇒Q)⇒(P⇒R))
  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. РЕФАЛ Palindrom { s.1 e.2 s.1 = <Palindrom e.2> ;

    s.1 = True ; = True; e.1 = False ; } <Palindrom 'abcba'>
  7. Prolog • Факты • parent (pam, bob). • parent (tom,

    bob). • parent (tom, liz). • parent (bob, ann). • parent (bob, pat). • parent (mary, ann). • parent (pat, juli).
  8. Prolog • Вопросы • ? - parent (bob, pat). •

    yes • ?-parent (bob,mary). • no
  9. Верификация программного обеспечения • Проверка типов • Статический анализ •

    Доказательство свойств
  10. Подходы к улучшению качества • Социальные – Код-ревью – Парное

    программирование • Методологический – Паттерны – Тесты – Версии – Баг-треккеры • Технологический – Lint • Математический
  11. Язык описания свойств • Если не описаны свойства то программа

    всегда правильная • Не любой язык удобно использовать в качестве языка описания свойств (def sort-idempotent-prop (prop/for-all [v (gen/vector gen/int)] (= (sort v) (sort (sort v)))))
  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. Eiffel AutoTest проблемы • Контракты очень редко описывают тестируемую систему.

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

    могут не быть достигнуты случайным генератором за разумное время • Кроме того, генерируемые значения должны соответствовать критерию адекватности теста (обеспечивать покрытие и т. д.)
  15. Eiffel autotest achieved 2005-2007 Начальный этап разработки системы Например, было

    найдено следующее количество различных ошибок в основных библиотеках: • STRING - 12 • BOUNDED_STACK - 11 • HASH_TABLE - 23 • ARRAYED_SET - 27 • LINKED_LIST - 25
  16. От языка программирования к системе доказательств • Как вместо того

    чтобы писать программы начать писать доказательства? • Языки программирования с зависимыми типами (типы индексируемые значениями другого типа) • Логические высказывания записываются как типы, а доказательствами являются программы соответствующего типа • ФП + ЗТ => АДТ
  17. Agda data Nat : Set where zero : Nat suc

    : Nat -> Nat _+_ : Nat -> Nat -> Nat zero + m = m suc n + m = suc (n + m)
  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. 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. 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. 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. 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. 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. Прогонка Ю. А. Климов Специализатор CILPE

  25. Coq не единственный в своём роде • The World Championship

    for Automated Theorem Proving • http://www.cs.miami.edu/~tptp/CASC/ Таблица со страницы википедии про автоматическое доказательство теорем
  26. Google trends • Formal verification/code review (below)

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

    тестирование помогает, но ничего не гарантирует