TGViewer
emacsway-log: Technical Leadership, Management, Software Architecture, DDD, Microservices, Distributed Systems, XP, Agile, etc. emacsway-log: Technical Leadership, Management, Software Architecture, DDD, Microservices, Distributed Systems, XP, Agile, etc. @emacsway_log · 3.6K subscribers
Post #1759 2.02K
emacsway-log: Technical Leadership, Management, Software Architecture, DDD, Microservices, Distributed Systems, XP, Agile, etc. Признаюсь, эксперимент меня увлёк, и, видимо, постепенно перерастает в полноценный проект. Не загадываю, но посмотрим. Сегодня сбилдил документацию: https://krew-solutions.github.io/trading-ml/ Перед этим сделал обзор статических генераторов сайтов. Хотелось…
Вы спрашивали про формальную верификацию. Сегодня добрался до нее. Теперь могу ответить. Есть несколько способов её осуществить в OCaml-приложении.

1.Gospel (синтаксис формальной спецификации встраиваемой в исходный код).

1.1. Ortac/wrapper → runtime-ассерты в сгенерированной обёртке (поймает нарушение во время исполнения). Рабочий вариант. Ortac-wrapper генерирует исполняемый код и встраивает в него утверждения (asserts). Этот assert должен реально исполниться, что предъявляет определенные требования к исходному коду.

1.2. Ortac/qcheck-stm → QCheck-тесты, проверяющие спеку на случайных сценариях (поймает нарушение при фаззинге). На практике не пробовал.

1.3. Monolith → направленный фаззинг по спеке. На практике не пробовал.

1.4. Cameleer → Why3 → статическое доказательство через SMT (поймает нарушение на уровне кода без запуска). Вот этот вариант был бы очень интересен и через единую Gospel-спецификацию позволил бы применить практически все формальные доказатели. Но запустить не удалось, т.к. требует версию Gospel, которая не поддерживает OCaml 5.2+. А посему пришлось рассмотреть следующий вариант.

2. Why3 (формальная спецификация в отдельных *.mlw файлах)

В Why3 всё иначе. Why3 ничего в рантайме не делает - он доказывает формулы на бумаге (в SMT-решателе). Поддерживает три SMT-решателя.

2.1. Z3 (Microsoft Research) - лучше покрывает bitvectors, нелинейную арифметику, quantifier instantiation с эвристиками, и часто доказывает то, что Alt-Ergo не тянет (и наоборот). На практике реализован.

2.2. Alt-Ergo (OCaml, INRIA/OCamlPro) - исторически заточен под Why3, хорошо справляется с линейной арифметикой, теориями записей, некоторыми индуктивными паттернами. Может работать и без Why3 - он понимает собственный синтаксис .ae и стандартный .smt2 (SMT-LIB). На практике реализован через Why3 спецификацию в *.mlw файлах.

2.3. CVC5 — третий популярный, полезен в тех же нишах, что Z3. На практике не пробовал.

Посмотреть можно в *.wml файлах здесь:
https://github.com/krew-solutions/trading-ml/tree/main/lib/domain

Из интересного - если код имеет side-effect, то доказатель его не станет доказывать. Доказать можно только чистую функциональную парадигму. Это обязывает следить за функциональной чистотой и изоляцией доменной логики. И это еще одна из причин, почему мой интерес сместился с OOP на FP.

Еще успел реализовать Railway Oriented Programming by Scott Wlaschin. Пока только один pipeline, посмотреть можно здесь:
https://github.com/krew-solutions/trading-ml/tree/main/lib/application
  • 🔥 6
  • 👍 2
  • ❤ 1
More from @emacsway_log
  1. Oct 16, 2026По поводу OCaml в канале уже не раз писалось, поэтому повторюсь. Развивается он компанией…
  2. Oct 15, 2026Итак, что удалось достигнуть на практике. Проект в области IoT, который разрабатывался дву…
  3. Oct 12, 2026Что такое синхронное и асинхронное взаимодействие? Вопрос, на самом деле, непростой. По RE…
  4. Oct 10, 2026Что общего между самбо (борьбой), шахматами и манипуляциями? У меня возникло несколько соо…
  5. Oct 10, 2026Кажется, я смог сформулировать суть этой книги с т.з. системной инженерии. Манипуляция - э…
  6. Oct 9, 2026Смотрю сейчас книгу "Эффективный конфликт. Как защищать интересы и управлять сложной комму…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →