SlideShare una empresa de Scribd logo
1 de 27
Descargar para leer sin conexión
Автоматическое
доказательство теорем
История, смежные области
Первые шаги
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)
«Было величайшим триумфом доказать чётность
суммы чётных чисел»
Первые шаги
• 1956 г. The Logic Theory Machine
Удалось доказать 38 из 52 первых теорем
Principia Mathematica
Изоморфизм Карри-Говарда
Построение конструктивного доказательства
похоже на описание вычислений 1958
• Типы – высказывания
• Программы – доказательства
• Вычисление – упрощение
(P→Q→R)→(P→Q)→P→R
(P⇒(Q⇒R))⇒((P⇒Q)⇒(P⇒R))
Лямбда исчисление
(λ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
Пример из лекций Дмитрия Сошникова
РЕФАЛ
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).
• parent (mary, ann).
• parent (pat, juli).
Prolog
• Вопросы
• ? - parent (bob, pat).
• yes
• ?-parent (bob,mary).
• no
Верификация программного
обеспечения
• Проверка типов
• Статический анализ
• Доказательство свойств
Подходы к улучшению качества
• Социальные
– Код-ревью
– Парное программирование
• Методологический
– Паттерны
– Тесты
– Версии
– Баг-треккеры
• Технологический
– Lint
• Математический
Язык описания свойств
• Если не описаны свойства то программа
всегда правильная
• Не любой язык удобно использовать в
качестве языка описания свойств
(def sort-idempotent-prop
(prop/for-all [v (gen/vector gen/int)]
(= (sort v) (sort (sort v)))))
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
Eiffel AutoTest проблемы
• Контракты очень редко описывают
тестируемую систему. Например, постусловие
должно описывать что процедура меняет и что
не должна менять. Функция вывода на экран
не должна увеличивать счётчиков,
соединяться с базой данных и так далее
• Контракты не только не полны, но и содержат
ошибки, допущенные разработчиками
Автоматическая генерация
• Предусловие должно быть выполнено, но
сильные предусловия могут не быть
достигнуты случайным генератором за
разумное время
• Кроме того, генерируемые значения
должны соответствовать критерию
адекватности теста (обеспечивать покрытие
и т. д.)
Eiffel autotest achieved
2005-2007 Начальный этап разработки системы
Например, было найдено следующее количество
различных ошибок в основных библиотеках:
• STRING - 12
• BOUNDED_STACK - 11
• HASH_TABLE - 23
• ARRAYED_SET - 27
• LINKED_LIST - 25
От языка программирования к
системе доказательств
• Как вместо того чтобы писать программы
начать писать доказательства?
• Языки программирования с зависимыми
типами (типы индексируемые значениями
другого типа)
• Логические высказывания записываются
как типы, а доказательствами являются
программы соответствующего типа
• ФП + ЗТ => АДТ
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 : Set}{n : Nat} -> Vec A (suc n) -> A
head (x :: xs) = x
(пример из Википедии)
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)).
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".
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.
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.
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.
Прогонка
Ю. А. Климов Специализатор CILPE
Coq не единственный в своём роде
• The World Championship for Automated
Theorem Proving
• http://www.cs.miami.edu/~tptp/CASC/
Таблица со страницы википедии про автоматическое доказательство теорем
Google trends
• Formal verification/code review (below)
Итоги
• Для формальной верификации требуется
помощь человека
• Случайное тестирование помогает, но
ничего не гарантирует

Más contenido relacionado

La actualidad más candente

20091025 algorithmsfornphardproblems kulikov_lecture04
20091025 algorithmsfornphardproblems kulikov_lecture0420091025 algorithmsfornphardproblems kulikov_lecture04
20091025 algorithmsfornphardproblems kulikov_lecture04Computer Science Club
 
A System of Deductive Verification of Predicate Programs
A System of Deductive Verification of Predicate ProgramsA System of Deductive Verification of Predicate Programs
A System of Deductive Verification of Predicate ProgramsIosif Itkin
 
геометрический смысл производной
геометрический смысл производнойгеометрический смысл производной
геометрический смысл производнойtkachenko_anna
 
Лекция 11: Методы разработки алгоритмов
Лекция 11: Методы разработки алгоритмовЛекция 11: Методы разработки алгоритмов
Лекция 11: Методы разработки алгоритмовMikhail Kurnosov
 
Стажировка 2016-07-08 01 Евгений Тюменцев. S.O.L.I.D.
Стажировка 2016-07-08 01 Евгений Тюменцев. S.O.L.I.D.Стажировка 2016-07-08 01 Евгений Тюменцев. S.O.L.I.D.
Стажировка 2016-07-08 01 Евгений Тюменцев. S.O.L.I.D.SmartTools
 
Лекция 13: Трудноразрешимые задачи. NP-полнота.
Лекция 13: Трудноразрешимые задачи. NP-полнота.Лекция 13: Трудноразрешимые задачи. NP-полнота.
Лекция 13: Трудноразрешимые задачи. NP-полнота.Mikhail Kurnosov
 
2013 03 21_bigdata_seminar_05
2013 03 21_bigdata_seminar_052013 03 21_bigdata_seminar_05
2013 03 21_bigdata_seminar_05Roman Brovko
 
2014.12.06 04 Евгений Тюменцев — Откуда появились s.o.l.i.d. принципы
2014.12.06 04 Евгений Тюменцев — Откуда появились s.o.l.i.d. принципы2014.12.06 04 Евгений Тюменцев — Откуда появились s.o.l.i.d. принципы
2014.12.06 04 Евгений Тюменцев — Откуда появились s.o.l.i.d. принципыHappyDev
 
Лекция 12: Методы разработки алгоритмов. Динамическое программирование. Жадны...
Лекция 12: Методы разработки алгоритмов. Динамическое программирование. Жадны...Лекция 12: Методы разработки алгоритмов. Динамическое программирование. Жадны...
Лекция 12: Методы разработки алгоритмов. Динамическое программирование. Жадны...Mikhail Kurnosov
 
паскаль. часть1
паскаль. часть1паскаль. часть1
паскаль. часть1igorm9so
 
Математическое обоснование SOLID принципов - Евгений Тюменцев Dev2Dev v2.0 30...
Математическое обоснование SOLID принципов - Евгений Тюменцев Dev2Dev v2.0 30...Математическое обоснование SOLID принципов - Евгений Тюменцев Dev2Dev v2.0 30...
Математическое обоснование SOLID принципов - Евгений Тюменцев Dev2Dev v2.0 30...Dev2Dev
 
математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...
математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...
математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...etyumentcev
 
20100930 proof complexity_hirsch_lecture03
20100930 proof complexity_hirsch_lecture0320100930 proof complexity_hirsch_lecture03
20100930 proof complexity_hirsch_lecture03Computer Science Club
 
Лекция №3 "Различные алгоритмы кластеризации"
Лекция №3 "Различные алгоритмы кластеризации"Лекция №3 "Различные алгоритмы кластеризации"
Лекция №3 "Различные алгоритмы кластеризации"Technosphere1
 
20091129 algorithmsfornphardproblems kulikov_lecture10
20091129 algorithmsfornphardproblems kulikov_lecture1020091129 algorithmsfornphardproblems kulikov_lecture10
20091129 algorithmsfornphardproblems kulikov_lecture10Computer Science Club
 
Математическое обоснование S.O.L.I.D принципов
Математическое обоснование S.O.L.I.D принциповМатематическое обоснование S.O.L.I.D принципов
Математическое обоснование S.O.L.I.D принциповetyumentcev
 
Логарифмические уранения
Логарифмические ураненияЛогарифмические уранения
Логарифмические ураненияSlava Antipov
 
L2: Задача классификации и регрессии. Метрики ошибок
L2: Задача классификации и регрессии. Метрики ошибокL2: Задача классификации и регрессии. Метрики ошибок
L2: Задача классификации и регрессии. Метрики ошибокTechnosphere1
 

La actualidad más candente (20)

20091025 algorithmsfornphardproblems kulikov_lecture04
20091025 algorithmsfornphardproblems kulikov_lecture0420091025 algorithmsfornphardproblems kulikov_lecture04
20091025 algorithmsfornphardproblems kulikov_lecture04
 
A System of Deductive Verification of Predicate Programs
A System of Deductive Verification of Predicate ProgramsA System of Deductive Verification of Predicate Programs
A System of Deductive Verification of Predicate Programs
 
геометрический смысл производной
геометрический смысл производнойгеометрический смысл производной
геометрический смысл производной
 
Лекция 11: Методы разработки алгоритмов
Лекция 11: Методы разработки алгоритмовЛекция 11: Методы разработки алгоритмов
Лекция 11: Методы разработки алгоритмов
 
Стажировка 2016-07-08 01 Евгений Тюменцев. S.O.L.I.D.
Стажировка 2016-07-08 01 Евгений Тюменцев. S.O.L.I.D.Стажировка 2016-07-08 01 Евгений Тюменцев. S.O.L.I.D.
Стажировка 2016-07-08 01 Евгений Тюменцев. S.O.L.I.D.
 
Лекция 13: Трудноразрешимые задачи. NP-полнота.
Лекция 13: Трудноразрешимые задачи. NP-полнота.Лекция 13: Трудноразрешимые задачи. NP-полнота.
Лекция 13: Трудноразрешимые задачи. NP-полнота.
 
2013 03 21_bigdata_seminar_05
2013 03 21_bigdata_seminar_052013 03 21_bigdata_seminar_05
2013 03 21_bigdata_seminar_05
 
2014.12.06 04 Евгений Тюменцев — Откуда появились s.o.l.i.d. принципы
2014.12.06 04 Евгений Тюменцев — Откуда появились s.o.l.i.d. принципы2014.12.06 04 Евгений Тюменцев — Откуда появились s.o.l.i.d. принципы
2014.12.06 04 Евгений Тюменцев — Откуда появились s.o.l.i.d. принципы
 
Лекция 12: Методы разработки алгоритмов. Динамическое программирование. Жадны...
Лекция 12: Методы разработки алгоритмов. Динамическое программирование. Жадны...Лекция 12: Методы разработки алгоритмов. Динамическое программирование. Жадны...
Лекция 12: Методы разработки алгоритмов. Динамическое программирование. Жадны...
 
паскаль. часть1
паскаль. часть1паскаль. часть1
паскаль. часть1
 
Математическое обоснование SOLID принципов - Евгений Тюменцев Dev2Dev v2.0 30...
Математическое обоснование SOLID принципов - Евгений Тюменцев Dev2Dev v2.0 30...Математическое обоснование SOLID принципов - Евгений Тюменцев Dev2Dev v2.0 30...
Математическое обоснование SOLID принципов - Евгений Тюменцев Dev2Dev v2.0 30...
 
математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...
математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...
математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...
 
23
2323
23
 
20100930 proof complexity_hirsch_lecture03
20100930 proof complexity_hirsch_lecture0320100930 proof complexity_hirsch_lecture03
20100930 proof complexity_hirsch_lecture03
 
Лекция №3 "Различные алгоритмы кластеризации"
Лекция №3 "Различные алгоритмы кластеризации"Лекция №3 "Различные алгоритмы кластеризации"
Лекция №3 "Различные алгоритмы кластеризации"
 
20091129 algorithmsfornphardproblems kulikov_lecture10
20091129 algorithmsfornphardproblems kulikov_lecture1020091129 algorithmsfornphardproblems kulikov_lecture10
20091129 algorithmsfornphardproblems kulikov_lecture10
 
Математическое обоснование S.O.L.I.D принципов
Математическое обоснование S.O.L.I.D принциповМатематическое обоснование S.O.L.I.D принципов
Математическое обоснование S.O.L.I.D принципов
 
Pri3
Pri3Pri3
Pri3
 
Логарифмические уранения
Логарифмические ураненияЛогарифмические уранения
Логарифмические уранения
 
L2: Задача классификации и регрессии. Метрики ошибок
L2: Задача классификации и регрессии. Метрики ошибокL2: Задача классификации и регрессии. Метрики ошибок
L2: Задача классификации и регрессии. Метрики ошибок
 

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

Николай Паламарчук "Functional Programming basics for PHP developers"
Николай Паламарчук "Functional Programming basics for PHP developers"Николай Паламарчук "Functional Programming basics for PHP developers"
Николай Паламарчук "Functional Programming basics for PHP developers"Fwdays
 
«QuickCheck в Python: проверка гипотез и поиск ошибок», Александр Шорин, Ramb...
«QuickCheck в Python: проверка гипотез и поиск ошибок», Александр Шорин, Ramb...«QuickCheck в Python: проверка гипотез и поиск ошибок», Александр Шорин, Ramb...
«QuickCheck в Python: проверка гипотез и поиск ошибок», Александр Шорин, Ramb...Mail.ru Group
 
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...Alexey Paznikov
 
04 динамическое программирование - основные концепции
04 динамическое программирование - основные концепции04 динамическое программирование - основные концепции
04 динамическое программирование - основные концепцииFedor Tsarev
 
Запись вспомогательный алгоритмов на языка Паскаль
Запись вспомогательный алгоритмов на языка ПаскальЗапись вспомогательный алгоритмов на языка Паскаль
Запись вспомогательный алгоритмов на языка ПаскальAndrey Dolinin
 
Программирование циклических алгоритмов
Программирование циклических алгоритмовПрограммирование циклических алгоритмов
Программирование циклических алгоритмовAndrey Dolinin
 
Презентация на тему: ЕГЭ информатика
Презентация на тему: ЕГЭ информатикаПрезентация на тему: ЕГЭ информатика
Презентация на тему: ЕГЭ информатика2berkas
 
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Yandex
 
Лекция №10 "Алгоритмические композиции. Завершение"
Лекция №10 "Алгоритмические композиции. Завершение" Лекция №10 "Алгоритмические композиции. Завершение"
Лекция №10 "Алгоритмические композиции. Завершение" Technosphere1
 
Back to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодняBack to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодняAlexander Granin
 
Исследование операций и методы оптимизации
Исследование операций и методы оптимизацииИсследование операций и методы оптимизации
Исследование операций и методы оптимизацииJakobow
 
Тренировочный вариант экзамена с решением
Тренировочный вариант экзамена с решениемТренировочный вариант экзамена с решением
Тренировочный вариант экзамена с решениемKurbatskiy Alexey
 
Методы машинного обучения в физике элементарных частиц
Методы машинного обучения в физике элементарных частицМетоды машинного обучения в физике элементарных частиц
Методы машинного обучения в физике элементарных частицAndrey Ustyuzhanin
 
чернякова г.в.
чернякова г.в.чернякова г.в.
чернякова г.в.sharikdp
 
Евгений Котельников. Зависимые типы в Haskell
Евгений Котельников. Зависимые типы в HaskellЕвгений Котельников. Зависимые типы в Haskell
Евгений Котельников. Зависимые типы в HaskellFProg
 
Языки программирования
Языки программированияЯзыки программирования
Языки программированияpaulsmirnov
 
Опыт разработки статического анализатора кода
Опыт разработки статического анализатора кодаОпыт разработки статического анализатора кода
Опыт разработки статического анализатора кодаAndrey Karpov
 
Haskell Type System with Dzmitry Ivashnev.
Haskell Type System with Dzmitry Ivashnev.Haskell Type System with Dzmitry Ivashnev.
Haskell Type System with Dzmitry Ivashnev.Sergey Tihon
 
Обработка данных в RTB: быстро, дешево и на 98% точно
Обработка данных в RTB:  быстро, дешево и на 98% точноОбработка данных в RTB:  быстро, дешево и на 98% точно
Обработка данных в RTB: быстро, дешево и на 98% точноPavel Kalaidin
 

Similar a Автоматическое доказательство теорем (20)

Николай Паламарчук "Functional Programming basics for PHP developers"
Николай Паламарчук "Functional Programming basics for PHP developers"Николай Паламарчук "Functional Programming basics for PHP developers"
Николай Паламарчук "Functional Programming basics for PHP developers"
 
«QuickCheck в Python: проверка гипотез и поиск ошибок», Александр Шорин, Ramb...
«QuickCheck в Python: проверка гипотез и поиск ошибок», Александр Шорин, Ramb...«QuickCheck в Python: проверка гипотез и поиск ошибок», Александр Шорин, Ramb...
«QuickCheck в Python: проверка гипотез и поиск ошибок», Александр Шорин, Ramb...
 
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
 
04 динамическое программирование - основные концепции
04 динамическое программирование - основные концепции04 динамическое программирование - основные концепции
04 динамическое программирование - основные концепции
 
Запись вспомогательный алгоритмов на языка Паскаль
Запись вспомогательный алгоритмов на языка ПаскальЗапись вспомогательный алгоритмов на языка Паскаль
Запись вспомогательный алгоритмов на языка Паскаль
 
Программирование циклических алгоритмов
Программирование циклических алгоритмовПрограммирование циклических алгоритмов
Программирование циклических алгоритмов
 
8 3-5
8 3-58 3-5
8 3-5
 
Презентация на тему: ЕГЭ информатика
Презентация на тему: ЕГЭ информатикаПрезентация на тему: ЕГЭ информатика
Презентация на тему: ЕГЭ информатика
 
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
 
Лекция №10 "Алгоритмические композиции. Завершение"
Лекция №10 "Алгоритмические композиции. Завершение" Лекция №10 "Алгоритмические композиции. Завершение"
Лекция №10 "Алгоритмические композиции. Завершение"
 
Back to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодняBack to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодня
 
Исследование операций и методы оптимизации
Исследование операций и методы оптимизацииИсследование операций и методы оптимизации
Исследование операций и методы оптимизации
 
Тренировочный вариант экзамена с решением
Тренировочный вариант экзамена с решениемТренировочный вариант экзамена с решением
Тренировочный вариант экзамена с решением
 
Методы машинного обучения в физике элементарных частиц
Методы машинного обучения в физике элементарных частицМетоды машинного обучения в физике элементарных частиц
Методы машинного обучения в физике элементарных частиц
 
чернякова г.в.
чернякова г.в.чернякова г.в.
чернякова г.в.
 
Евгений Котельников. Зависимые типы в Haskell
Евгений Котельников. Зависимые типы в HaskellЕвгений Котельников. Зависимые типы в Haskell
Евгений Котельников. Зависимые типы в Haskell
 
Языки программирования
Языки программированияЯзыки программирования
Языки программирования
 
Опыт разработки статического анализатора кода
Опыт разработки статического анализатора кодаОпыт разработки статического анализатора кода
Опыт разработки статического анализатора кода
 
Haskell Type System with Dzmitry Ivashnev.
Haskell Type System with Dzmitry Ivashnev.Haskell Type System with Dzmitry Ivashnev.
Haskell Type System with Dzmitry Ivashnev.
 
Обработка данных в RTB: быстро, дешево и на 98% точно
Обработка данных в RTB:  быстро, дешево и на 98% точноОбработка данных в RTB:  быстро, дешево и на 98% точно
Обработка данных в RTB: быстро, дешево и на 98% точно
 

Más de Tech Talks @NSU

Tech Talks @NSU: Путь студента в IT-бизнес
Tech Talks @NSU: Путь студента в IT-бизнесTech Talks @NSU: Путь студента в IT-бизнес
Tech Talks @NSU: Путь студента в IT-бизнесTech Talks @NSU
 
Tech Talks @NSU: Стажировки в американских IT-компаниях. Как стать стажером, ...
Tech Talks @NSU: Стажировки в американских IT-компаниях. Как стать стажером, ...Tech Talks @NSU: Стажировки в американских IT-компаниях. Как стать стажером, ...
Tech Talks @NSU: Стажировки в американских IT-компаниях. Как стать стажером, ...Tech Talks @NSU
 
Tech Talks @NSU: Как живется преподавателю Computer Science у «нас» и у «них»
Tech Talks @NSU: Как живется преподавателю Computer Science у «нас» и у «них»Tech Talks @NSU: Как живется преподавателю Computer Science у «нас» и у «них»
Tech Talks @NSU: Как живется преподавателю Computer Science у «нас» и у «них»Tech Talks @NSU
 
Back to the Future: Функциональное программирование вчера и сегодня
Back to the Future: Функциональное программирование вчера и сегодняBack to the Future: Функциональное программирование вчера и сегодня
Back to the Future: Функциональное программирование вчера и сегодняTech Talks @NSU
 
Что такое Highload? Секреты высокой нагрузки
Что такое Highload? Секреты высокой нагрузкиЧто такое Highload? Секреты высокой нагрузки
Что такое Highload? Секреты высокой нагрузкиTech Talks @NSU
 
AOT-компиляция Java
AOT-компиляция JavaAOT-компиляция Java
AOT-компиляция JavaTech Talks @NSU
 
Защита от атак по сторонним каналам
Защита от атак по сторонним каналамЗащита от атак по сторонним каналам
Защита от атак по сторонним каналамTech Talks @NSU
 
Как приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMКак приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMTech Talks @NSU
 
Тестировщик: ожидание vs. реальность
Тестировщик: ожидание vs. реальностьТестировщик: ожидание vs. реальность
Тестировщик: ожидание vs. реальностьTech Talks @NSU
 
Гибкие методологии разработки ПО в реальном мире
 Гибкие методологии разработки ПО в реальном мире Гибкие методологии разработки ПО в реальном мире
Гибкие методологии разработки ПО в реальном миреTech Talks @NSU
 
Tech Talks @NSU: Что есть QA и как в него попасть
Tech Talks @NSU: Что есть QA и как в него попастьTech Talks @NSU: Что есть QA и как в него попасть
Tech Talks @NSU: Что есть QA и как в него попастьTech Talks @NSU
 
Tech Talks @NSU: Технологии кросс-платформенной разработки мобильных бизнес-п...
Tech Talks @NSU: Технологии кросс-платформенной разработки мобильных бизнес-п...Tech Talks @NSU: Технологии кросс-платформенной разработки мобильных бизнес-п...
Tech Talks @NSU: Технологии кросс-платформенной разработки мобильных бизнес-п...Tech Talks @NSU
 
Tech Talks @NSU: DLang: возможности языка и его применение
Tech Talks @NSU: DLang: возможности языка и его применениеTech Talks @NSU: DLang: возможности языка и его применение
Tech Talks @NSU: DLang: возможности языка и его применениеTech Talks @NSU
 
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...Tech Talks @NSU
 
Tech Talks @NSU: Что такое работа в техподдержке: тяжело ли живётся саппортеру
Tech Talks @NSU: Что такое работа в техподдержке: тяжело ли живётся саппортеруTech Talks @NSU: Что такое работа в техподдержке: тяжело ли живётся саппортеру
Tech Talks @NSU: Что такое работа в техподдержке: тяжело ли живётся саппортеруTech Talks @NSU
 
Tech Talks @NSU: Как олимпиадное программирование не испортило мою жизнь, а т...
Tech Talks @NSU: Как олимпиадное программирование не испортило мою жизнь, а т...Tech Talks @NSU: Как олимпиадное программирование не испортило мою жизнь, а т...
Tech Talks @NSU: Как олимпиадное программирование не испортило мою жизнь, а т...Tech Talks @NSU
 
Tech Talks @NSU: Организация тестирования в IT-компаниях Академгородка. Карье...
Tech Talks @NSU: Организация тестирования в IT-компаниях Академгородка. Карье...Tech Talks @NSU: Организация тестирования в IT-компаниях Академгородка. Карье...
Tech Talks @NSU: Организация тестирования в IT-компаниях Академгородка. Карье...Tech Talks @NSU
 
Tech Talks @NSU: Мир open source — мир возможностей
Tech Talks @NSU: Мир open source — мир возможностейTech Talks @NSU: Мир open source — мир возможностей
Tech Talks @NSU: Мир open source — мир возможностейTech Talks @NSU
 
Tech Talks @NSU: Методологии разработки ПО. Что на самом деле скрывается за с...
Tech Talks @NSU: Методологии разработки ПО. Что на самом деле скрывается за с...Tech Talks @NSU: Методологии разработки ПО. Что на самом деле скрывается за с...
Tech Talks @NSU: Методологии разработки ПО. Что на самом деле скрывается за с...Tech Talks @NSU
 
Тестировщик: ожидание vs. реальность
Тестировщик: ожидание vs. реальность Тестировщик: ожидание vs. реальность
Тестировщик: ожидание vs. реальность Tech Talks @NSU
 

Más de Tech Talks @NSU (20)

Tech Talks @NSU: Путь студента в IT-бизнес
Tech Talks @NSU: Путь студента в IT-бизнесTech Talks @NSU: Путь студента в IT-бизнес
Tech Talks @NSU: Путь студента в IT-бизнес
 
Tech Talks @NSU: Стажировки в американских IT-компаниях. Как стать стажером, ...
Tech Talks @NSU: Стажировки в американских IT-компаниях. Как стать стажером, ...Tech Talks @NSU: Стажировки в американских IT-компаниях. Как стать стажером, ...
Tech Talks @NSU: Стажировки в американских IT-компаниях. Как стать стажером, ...
 
Tech Talks @NSU: Как живется преподавателю Computer Science у «нас» и у «них»
Tech Talks @NSU: Как живется преподавателю Computer Science у «нас» и у «них»Tech Talks @NSU: Как живется преподавателю Computer Science у «нас» и у «них»
Tech Talks @NSU: Как живется преподавателю Computer Science у «нас» и у «них»
 
Back to the Future: Функциональное программирование вчера и сегодня
Back to the Future: Функциональное программирование вчера и сегодняBack to the Future: Функциональное программирование вчера и сегодня
Back to the Future: Функциональное программирование вчера и сегодня
 
Что такое Highload? Секреты высокой нагрузки
Что такое Highload? Секреты высокой нагрузкиЧто такое Highload? Секреты высокой нагрузки
Что такое Highload? Секреты высокой нагрузки
 
AOT-компиляция Java
AOT-компиляция JavaAOT-компиляция Java
AOT-компиляция Java
 
Защита от атак по сторонним каналам
Защита от атак по сторонним каналамЗащита от атак по сторонним каналам
Защита от атак по сторонним каналам
 
Как приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMКак приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVM
 
Тестировщик: ожидание vs. реальность
Тестировщик: ожидание vs. реальностьТестировщик: ожидание vs. реальность
Тестировщик: ожидание vs. реальность
 
Гибкие методологии разработки ПО в реальном мире
 Гибкие методологии разработки ПО в реальном мире Гибкие методологии разработки ПО в реальном мире
Гибкие методологии разработки ПО в реальном мире
 
Tech Talks @NSU: Что есть QA и как в него попасть
Tech Talks @NSU: Что есть QA и как в него попастьTech Talks @NSU: Что есть QA и как в него попасть
Tech Talks @NSU: Что есть QA и как в него попасть
 
Tech Talks @NSU: Технологии кросс-платформенной разработки мобильных бизнес-п...
Tech Talks @NSU: Технологии кросс-платформенной разработки мобильных бизнес-п...Tech Talks @NSU: Технологии кросс-платформенной разработки мобильных бизнес-п...
Tech Talks @NSU: Технологии кросс-платформенной разработки мобильных бизнес-п...
 
Tech Talks @NSU: DLang: возможности языка и его применение
Tech Talks @NSU: DLang: возможности языка и его применениеTech Talks @NSU: DLang: возможности языка и его применение
Tech Talks @NSU: DLang: возможности языка и его применение
 
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...
 
Tech Talks @NSU: Что такое работа в техподдержке: тяжело ли живётся саппортеру
Tech Talks @NSU: Что такое работа в техподдержке: тяжело ли живётся саппортеруTech Talks @NSU: Что такое работа в техподдержке: тяжело ли живётся саппортеру
Tech Talks @NSU: Что такое работа в техподдержке: тяжело ли живётся саппортеру
 
Tech Talks @NSU: Как олимпиадное программирование не испортило мою жизнь, а т...
Tech Talks @NSU: Как олимпиадное программирование не испортило мою жизнь, а т...Tech Talks @NSU: Как олимпиадное программирование не испортило мою жизнь, а т...
Tech Talks @NSU: Как олимпиадное программирование не испортило мою жизнь, а т...
 
Tech Talks @NSU: Организация тестирования в IT-компаниях Академгородка. Карье...
Tech Talks @NSU: Организация тестирования в IT-компаниях Академгородка. Карье...Tech Talks @NSU: Организация тестирования в IT-компаниях Академгородка. Карье...
Tech Talks @NSU: Организация тестирования в IT-компаниях Академгородка. Карье...
 
Tech Talks @NSU: Мир open source — мир возможностей
Tech Talks @NSU: Мир open source — мир возможностейTech Talks @NSU: Мир open source — мир возможностей
Tech Talks @NSU: Мир open source — мир возможностей
 
Tech Talks @NSU: Методологии разработки ПО. Что на самом деле скрывается за с...
Tech Talks @NSU: Методологии разработки ПО. Что на самом деле скрывается за с...Tech Talks @NSU: Методологии разработки ПО. Что на самом деле скрывается за с...
Tech Talks @NSU: Методологии разработки ПО. Что на самом деле скрывается за с...
 
Тестировщик: ожидание vs. реальность
Тестировщик: ожидание vs. реальность Тестировщик: ожидание vs. реальность
Тестировщик: ожидание vs. реальность
 

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

  • 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. Итоги • Для формальной верификации требуется помощь человека • Случайное тестирование помогает, но ничего не гарантирует