Repolode
NethermindEth

NethermindEth/LeanCIL

C#, F# 등 .NET 언어로 컴파일된 .NET CIL을 대상으로 정확성과 메모리 안전성을 기계 검증하는 Lean 4 프레임워크입니다.

스타
110
포크
3
열린 이슈
21
마지막 커밋
11시간 전

어떤 프로젝트인가요?

LeanCIL은 컴파일된 .NET 어셈블리에서 Common Intermediate Language를 추출하고, 해당 명령어를 명시적으로 모델링해 Lean 4 증명을 검증합니다. 증명 대상에는 계약을 만족하는 모든 입력에 대한 속성, 루프 종료, 검사된 메모리 접근, 잘못된 구현의 반례가 포함될 수 있습니다. 이전에 증명한 메서드 계약은 헬퍼 함수의 본문을 펼치지 않고도 조합할 수 있습니다.

CLI 워크플로에서는 메서드 목록 조회, 메서드와 그 메서드에서 도달 가능한 호출의 추출, 추출 산출물 검사, 커널 재실행 및 공리 감사를 통한 지정된 정리 검증 명령을 제공합니다. 검증에 성공하면 어셈블리의 SHA-256에 연결된 verified.json 보고서를 작성합니다. 소비자 패키지를 사용하면 애플리케이션 명세와 증명을 LeanCIL에 고정된 별도 Lean 프로젝트에 둘 수 있습니다.

지원되는 부분집합에는 정수 산술, 일부 제어 흐름, 관리되는 호출, 참조가 없는 구조체, 제공된 저장소를 사용하는 배열과 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 통계는 매일 갱신됩니다.

관련 프로젝트