AIと共に進化する開発手法:形式手法と関数型プログラミングの可能性
https://fortee.jp/2025fp-matsuri/proposal/56b9175d-1468-4ab0-8063-180491bb16ed
https://speakerdeck.com/itohiro73/fp-matsuri-2025-formal-verification-ad-fp-with-ai
GitHub.icon デモのリポジトリ https://github.com/itohiro73/fp-matsuri-2025-formal-verification-and-fp-with-ai/tree/main/demo
AI Agent を用いた開発の問題点
物量の多さ: ガードレール がないと必要ないものもどんどん追加する
コンテキスト の理解の限界: 複雑な依存関係や暗黙的な案件を完全に把握するのは困難
品質保証の新たな課題: よしなにやってくれるが、開発・改修が数年単位で積み重なった先にどうなるかは未知
上記のような問題点を 形式手法 を用いることで軽減できる
元来、形式手法を開発プロセスに組み込むことは導入面・運用面からコストが高かった
しかし、AI Agent の台頭により、このコストを軽減することが可能に
なぜ形式手法か?
自然言語 の曖昧さを排除: AI が進むべき道筋を明確に
検証可能性: 数学的記法により自動検証が可能
完全性 の保証: すべての状態とケースを網羅的に記述可能
人間と AI との コミュニケーション 手段
形式手法の例: Alloy、TLA+
AI Agent に力を発揮させるには、形式手法 + 関数型プログラミング
形式手法: 数学的に厳密な仕様記述
関数型プログラミング: 型システム による 制約 の実装
Alloy と TLA+ は AI 駆動開発 において補完し合うツール
https://gyazo.com/2f52302c78a8d0eb211e87249eba7e77
Alloy 6 から 時相論理(線形時相論理)が導入されが、TLA+ ほどの表現力は無いのでそこは TLA+に委ねるってことなのかな?radish-miyazaki.icon
https://zenn.dev/y_taka_23/articles/alloy-mutable-fields
そもそも TLA+ は時相論理ベース
自然言語 から形式仕様に変換するステップ
1. 曖昧性 を含んだまま初期形式化
2. 形式検証による問題発見
3. 統合的な制約明確化
構造的制約(Alloy で検証済み)
動的制約(TLA+ で検証済み)
統合制約(Alloy + TLA+ で検証済み)
4. 再度自然言語に落とし込む
https://gyazo.com/e3cbbe3a7b402f74569d4671c194a83a
形式仕様から実装に落とし込むには、ADT・関数型ドメインモデリング を活用する
なぜ ADT なのか
制約を型システムに直接埋め込むことができる
組み合わせることで複雑な制約を表現できる
関数型ドメインモデリング
不可能な状態を型で表現不可能にする(無効な状態を作れないようにする)
これにより人間だけでなく、AI によるコード生成時の助けにもなる
状態遷移の制約を型レベルで表現する
プリミティブ型を避けて、ドメイン を型で表現する
制約をテストするには、プロパティベーステスト を用いると良い
高度なテストパターン
ラウンドトリップテスト
メタモルフィックテスト
不変条件 の維持
AI 駆動開発の可能性: 究極的な レフトシフト を AI の力で加速できる
https://gyazo.com/4fd51a659e7a2a6d51cc39f1a5cec400
人間が律速になってしまっている問題が更に深刻になるので、それを軽減できる
#関数型まつり_2025