Introduction to Applied Constructive Software Verification, sem. 2 2019

Понедельник, 19:30-22:00, Кочерга.

Дмитрий Волков, wldhx@wldhx.me (FB527CDAC1176535A4CF9B4C0E8CB6EC231EDDFE).


Изучаем математические законы за написанием надёжного софта с целью: делать лучше.

Баги. Баги баги баги баѓ̰̪̜̝͍̮ͅг̮̝͓̺̪г̫̗̣̯̟и̣̪̩ ̭̙͓̹̰ͅба̜͕̹͝г̯̬̗̝̹и̮͜ ̨̘̙͉б͘а̛̣͇̪͓аг̨̲̬͚̻̙̲и̬̝̫ ̺̗̰͟б͎̦͘а͈̼̲͓̀ͅг̺̜̼и̡. Делают жизнь программистов хуже, заставляют пользователей страдать, а когда в ракетах “Патриот” — убивают людей. Устранить! много методов: экстремальное программирование, паттерны, лучшие практики… Инженерия! не наука. Сложное, взаимосвязанное, собираемое из кусочков… математика! План: украсть всё у математиков!

Не написать тест — проверить три точки из всего пространства — а доказать теорему. Не “ну у меня вроде работает…”, а “Работает”. Сложнее; окупается для библиотек.

Конструктивная верификация — через инструменты доказательства — логических теорем. Из логики и элементов алгебры к программированию и обратно. Темы.

Формат: обычно мы будем проводить семинары по Logical Foundations. Когда какую-то тему захочется раскрыть дополнительно, я предложу другие материалы и/или расскажу лекцию. ДЗ будет объявляться после каждой встречи.

15-21/07: Летняя школа, Подмосковье

31/05-02/06: Coq!Coq!Coq!Хак!Хак!Хак!

27/05: Why3

Слайды: http://nikolai.kosmatov.free.fr/publications/tutorial_2018_09_30_secdev2018.pdf (доп. источники здесь в References).

Сам Why3: http://proval.lri.fr/submissions/boogie11.pdf.

Верифицированный микрогипервизор и общий подход: https://uberspark.org/.

Дополнительные материалы:

20/05: Fiat, FiatCrypto, FiatByteString

13/05: нет семинара

6/05: нет семинара, но есть office hours — можно прийти с вопросом

29/04

Обсудили Jitk и мою работу с верифицированным интерпретатором в ядре: посмотрели, как пользоваться CertiCoq.

22/04

Рассмотренные программные коды находятся в https://github.com/PrincetonUniversity/VST, progs/{sumarray_verif.v,sumarray.{c,v}}.

Теория: Verifiable C, http://www.cs.princeton.edu/~appel/papers/vst.pdf.

15/04: Auto, DeepWeb

DeepWeb: доклад, paper.

К следующему разу: GamePad, DeepWeb, первые 10 глав Verifiable C.

08/04: ImpParser, Extraction

Обсудили области труда: low-level (VST, Fiat/Crypto, CertiKOS, Kami), general-purpose prog (hs-to-coq), distributed sys (CRDT, Verdi), криптография (Easycrypt), ML (Reluplex, Gamepad), Why3; Coq без слёзок (ssreflect, cpdt, mathcomp).

akamaus рассказал о экспериментах в формализации матанализа.

grwlf рассказал о кокерах и спаниелях в Huawei, всем рекомендую.

К следующему разу: GamePad, полистать CPDT.

04/04 https://msk-fp-meetup.timepad.ru/event/917514/

01/04: Самосеминар: ProofObjects, IndProp, Maps, Imp

25/03: Самосеминар: ProofObjects, IndProp, Maps, Imp

18/03: Maps, Imp

https://coq.inria.fr/distrib/current/refman/user-extensions/syntax-extensions.html

ДЗ - Imp до L1461.

11/03: IndProp (cont’d), ProofObjects

Обсудили [Wadler 2015] “Propositions as types”.

ДЗ - IndProp, посмотреть Wadler, и ProofObjects.

04/03: Самосеминар: IndProp (cont’d)

25/02: IndProp

ДЗ - задачи до строки 1100 (51%).

18/02: Logic (cont’d)

Обсудили IDE для Coq, @mrkun рассказал свои решения последней (*****) задачи в Logic, посмотрели часть CIC: The terms и Conversion rules, и закончили Logic разделом Coq vs. Set Theory.

Заданные вопросы

11/02: Logic

https://stackoverflow.com/questions/41837820/agda-like-programming-in-coq-proof-general

Заданные вопросы

04/02: Tactics

Заданные вопросы

Обсуждался model checking интерфейсов по мотивам https://hillelwayne.com/post/formally-specifying-uis/.

28/01: Lists, Poly

Заданные вопросы

21/01: Basics (cont’d), Induction

К этому семинару задание - дочитать Basics, прочитать Induction, и сделать все упражнения.

Если что-то не получится или будет непонятно - сформулировать это и спросить на встрече; задание сделано, если оно зелёненькое; проверить всё до курсора - Ctrl-→ в CoqIDE. Так можно прокликивать через каждую тактику.

С собой понадобится ноутбук с CoqIDE или Proof General.

На семинаре

Обсудили средства индустриальной верификации на спектре между мейнстримом (типами / “простым” статическим анализом) и конструктивной. С одной стороны, это генеративное / property-based тестирование (QuickCheck) → фаззинг (afl (+rr?)) → контракты и статический анализ (Frama-C), с другой - средства моделирования (Alloy, TLA+).

Посмотрели слайды: HACMS, Classical analysis with Coq.

Рабочие группы

Ссылки

Генеративное тестирование

Фаззинг

Верификация с контрактами

Интересная экосистема - Why3.

Frama-C
SPIN

http://spinroot.com/spin/whatispin.html

Astree
Java

Alloy / TLA+

24/12, 14/01: Introduction, Basics

Вводный семинар. Можно не готовиться; понадобится ноутбук с CoqIDE или Proof General.

Заданные вопросы

Если что-то забыто — напишите на форум.

Инфраструктура

Форум: https://forum.kocherga.club/c/iacsv-19.

Автогрейдер

Чтобы получить доступ, напишите свой SSH-ключ и желаемый username мне на электронную почту (сверху).

Использование:

  1. Через nix или cargo установить pijul.

  2. Проверить, что ssh pijul@iacsv.kocherga.club работает. (Если нет — писать на почту или жаловаться на семинаре.)
  3. Зайти в свою директорию с Logical Foundations и закоммитить:

  4. Запушить: pijul push pijul@iacsv.kocherga.club:$MY_USERNAME/lf (список, куда вообще можно пушить, можно посмотреть через (2))

Если (4) не работает — возможно, проблема в парсинге sshconfig. Достоверно известно, что если ключ лежит в ~/.ssh/id_rsa, всё работает. Можно пожаловаться на семинаре.

…ммм, а как смотреть скор? — Мы работаем над этим.

Редактор

Я использую Emacs + Proof General, потому что без vim-кейбиндингов (CoqIDE) неудобно, и потому что он просто работает. Если вы умеете в emacs, (use-package proof-general), а если нет - см., например, этот tutorial (важны пункты <=5). Ключевое сочетание клавиш - C-C C-RET (выполнить до курсора).

Литература

Интересные доказательства / истории успеха

Tutorials

Истории