Repolode
NethermindEth

NethermindEth/LeanCIL

C#、F#などの.NET言語からコンパイルされた.NET CILを対象に、正当性とメモリ安全性を機械検証するLean 4フレームワーク。

スター
110
フォーク
3
未解決の Issue
21
最終コミット
16 時間前

これは何?

LeanCILは、コンパイル済み.NETアセンブリからCommon Intermediate Languageを抽出し、命令を明示的にモデル化してLean 4の証明を検証します。契約を満たすすべての入力に対する性質、ループの停止性、メモリアクセスの安全性、誤った実装に対する反例を証明できます。事前に証明したメソッド契約は、ヘルパー関数の本体を展開せずに組み合わせられます。

ワークフローにはCLIがあり、メソッドの一覧表示、メソッドとそこから到達可能な呼び出しの抽出、抽出成果物の検査、カーネルによる再実行と公理監査を伴う名前付き定理の検証を行えます。検証に成功すると、アセンブリのSHA-256にひも付けられたverified.jsonレポートが出力されます。コンシューマーパッケージを使えば、アプリケーションの仕様と証明をLeanCILに固定した別のLeanプロジェクトに置けます。

サポート対象のサブセットは、整数演算、一部の制御フロー、マネージド呼び出し、参照を含まないstruct、指定されたストレージ上の配列とspanです。浮動小数点演算、一般的なクラスの割り当て、仮想ディスパッチ、通常の再帰、例外ハンドラーはモデルの対象外です。CLRやJIT全体を完全に検証するものではありません。

主な機能

  • 01Lean 4の証明を使い、契約を満たすすべての入力に対する関数の性質を証明します。
  • 02コンパイル済みのC#、F#などの.NETアセンブリからCILを抽出し、検証します。
  • 03検査付きメモリモデルで、メモリアクセス、境界、初期化、アラインメントを検査します。
  • 04ヘルパー関数の本体を展開せずに、事前に証明したメソッド契約を組み合わせられます。
  • 05アセンブリのSHA-256ハッシュにひも付けられたverified.jsonレポートを生成します。

ユースケース

  • .NETの算術処理やバッファ処理が、すべての入力に対して正しく動作することを証明する。
  • spanを走査するループの停止性を検証し、書き込み可能な領域の外にあるメモリが変更されないことを確認する。
  • 実装が意図した仕様に違反することを示す反例を見つける。

クイックスタート

  1. 1

    チェックアウトから elan 経由で Lean 4.35.0 と .NET SDK 10.0.403 をインストールする

  2. 2

    チェックアウトから Lean プロジェクトをビルドする

    lake build
  3. 3

    Extractor をローカル NuGet パッケージとしてパックする

    dotnet pack Extractor -c Release -o artifacts/packages
  4. 4

    ローカルパッケージから leancil グローバルツールをインストールする

    dotnet tool install --global Nethermind.LeanCIL --add-source artifacts/packages --version 0.1.0

使う前に知っておきたいこと

  • サポート対象は CIL の限定的なサブセットのみです。一般的なクラスの割り当て、仮想ディスパッチ、例外ハンドラー、浮動小数点演算には対応していません。
  • Lean 4 ツールチェーンと .NET SDK の両方が必要で、特定のバージョンに固定されています。
  • バージョン 0.1.0 の初期段階のプロジェクトで、コミュニティは小規模です。

トピック

よくある質問

LeanCIL とは?
C#、F#などの.NET言語からコンパイルされた.NET CILを対象に、正当性とメモリ安全性を機械検証するLean 4フレームワーク。 LeanCILは、コンパイル済み.NETアセンブリからCommon Intermediate Languageを抽出し、命令を明示的にモデル化してLean 4の証明を検証します。契約を満たすすべての入力に対する性質、ループの停止性、メモリアクセスの安全性、誤った実装に対する反例を証明できます。事前に証明したメソッド契約は、ヘルパー関数の本体を展開せずに組み合わせられます。
LeanCIL は無料で使えますか?ライセンスは?
LeanCIL は Other ライセンスのオープンソースです。商用製品で使う前にライセンス条件を確認してください。
LeanCIL は今もメンテナンスされていますか?
活発にメンテナンス中。LeanCIL の最終コミットは 2026年11月5日 です。
LeanCIL は何に使えますか?
.NETの算術処理やバッファ処理が、すべての入力に対して正しく動作することを証明する。 spanを走査するループの停止性を検証し、書き込み可能な領域の外にあるメモリが変更されないことを確認する。 実装が意図した仕様に違反することを示す反例を見つける。
LeanCIL のインストール方法は?
チェックアウトから elan 経由で Lean 4.35.0 と .NET SDK 10.0.403 をインストールする チェックアウトから Lean プロジェクトをビルドする: lake build Extractor をローカル NuGet パッケージとしてパックする: dotnet pack Extractor -c Release -o artifacts/packages ローカルパッケージから leancil グローバルツールをインストールする: dotnet tool install --global Nethermind.LeanCIL --add-source artifacts/packages --version 0.1.0
LeanCIL はどこで入手できますか?
ソースコードとインストール手順は GitHub にあります:https://github.com/NethermindEth/LeanCIL

概要はプロジェクトの README をもとに AI が生成しています。GitHub の数値は毎日更新されます。

関連プロジェクト