문제

내가 노력하고 함께 조각의 일반적인 그림의 상태를 공식적인 소프트웨어 확인,그리고 나는 좋은 약간의 문제입니다.에 대한 맥락에서 주로 수학을 배경입니다.나는 아주 친숙한 상태와 자동화의 원리 들여오기/내보내기 플러그인 및 증명 조수와 관련하여 증명하기 위해 사용하는 잘 형성되는 수학적 문(예:에 Coq,이사벨 린,etc.).내가 이해하는 데 문제가 무엇입은"형식적인 방법"에서 실용적인 CS 응용 프로그램.

내가 찾는 회사 등과 같은 Microsoft 및 AWS 사용 TLA+로"형식적인 방법"소프트웨어 개발에 다소니다.하지만 읽기 시작하면 웨인 실 TLA+ 책을 발견,그가 생각하는 프로그램을 정식으로 선택하면 우리는 확인 말을 정렬 알고리즘에 나열의 길이 $ 과목 1 $n$ 일정 $n$, 즉우리는 단지 검사는 유한 경우가 많고 말하는 따라서 알고리즘 작업해야 합니다.이 보이지 않는 특히 흥미로운;단지 예의 특별한 엄격한 단위 테스트입니다.특히 이것은 공식적인 증거의 정확성이 있어야 한다.

다른 한편으로,본 불평에 대한 이자벨과 Coq 할 수 있는 증명하는 일들에 대해 소프트웨어들을 증명할 수 있는 수학적 theorems.하지만 내가 볼 때로는 것이,예를 들어,Chlipala 의 인증 프로그래밍으로 의존 유형, 이 많은 참조의 추상적인 재료는 것을 희미하게 관련된 공식적으로 검증 프로그램은 없지만,예의 실제 프로그램 언어로 작성된 광범위하게 사용(예:C++,Python,Java,etc.) 또는 단지 의사 그리고"확인",그게 무슨 뜻인지는 모르겠지만요.

할 수 있는 사람을 취소하려면 나 혼란?

도움이 되었습니까?

해결책

공식적으로 입증된 프로그램은 공식적으로 입증된 프로그램에 관계 없이는 언어 있습니다.때문에 프로그램에 기록된 Coq 마 추출 를 이용 또는 메인보다는,서면에서 더 많은"enterprisy"와 같은 언어로는 C++or Java,하지 않의 더 적은 프로그램입니다.

증명 프로그램 작성에는 일반적인 프로그래밍 언어,심지어는"길"사람과 같은 특성을 나타내는 것은 어렵기 때문에 이러한 언어를 일반적으로 포함 편의를 많이 기능,어두운 모서리에 대한 성능과 인터페이스와 함께 운영 체제,그리고 풍부하고 복잡한 라이브러리입니다.를 증명하기 위해성 프로그램의,당신은 먼저 해야하는 국가 이 숙박 시설,그리고 문을 포함합의 의미는 언어로 프로그램이 작성됩니다.려고 할 때 공식화하는 언어는 처음에 설계없이 공식적인 의미는(거의 모든 그들의),당신은 매우 빠르게 치 어두운 모서리는 영어로 설명 잎 지정되지 않음 또는 그것의 모호,또는 곳에 그것은 크게 셀프 모순,또는 참조를 구현하지 않는 설명을 말하고 그의 버그로 간주고 영어보다 오히려 구현.상태의 예술의 속성을 증명하의 프로그램에서 작성에는 기존의 언어를 제한하는 프로그램의 일부 언어입니다.

무엇으로는 하위 집합은 변동성이 높습니다.문법은 너무 어렵지 않다:의미를 필요로 번역하기 위해 간단한 구문으로 표현할 수 있습니다.반사성 없는 특히 모델링하기가 어렵지만 만들 수 있습은 모델을 많이 더 어려운 이유에 대해(예를 들어,그것은 무효화 특성"과 같은 이 코드가 없는 어떤 방법을 참조하려면 이 변수에 따라서 해당 값을 변경할 수 없습"),너무 많은 프레임워크 규칙이다.운영 체제와의 상호 작용(일반적으로 라이브러리를 통해)는 문제가 있기 때문에 그들이 필요로 모델링하는 운영체제를 얻을 매우 복잡합니다.부동 소수점 연산은 어렵기 때문에 추적 근사치에서 연속적인 작업의 원인 큰 타격이다.

C 의 큰 부분 집합과 함께 공식적인 모델입니다 CompCert C 언어 CompCert.CompCert 은 공식적으로 검증 컴파일러(기록에 Coq),그래서 당신은 증명하기 위해 시설의 C 프로그램으로,당신은 또한 수를 얻는 증거의 생성된 컴퓨터 코드입니다. CompCert C 은 매우 큰 하위 집합의 C99 지만,공식화 제외한 대부분의 표준 라이브러리와 몇 가지 쿼크의 언어입니다.

을 증명하는 프로그램에서 작성(적합한 하위 집합의)실제 프로그래밍 언어,응용 프로그램을 구조화하는 방식으로 만들의 증거를 다루기 쉬워졌다.에서의 연습이 갖는 의미 작성하고 입증 프로그램에서 첫째로 높은 수준의 언어(이 없는 구현에 실제 하드웨어),이것을 사용하여 더 높은 수준 언어로 사양의 최종 프로그램입니다.종종 여러 가지 수준의 연속적인 개선 사이에 실행프로그램과 사양에 있습니다.

그것은 상당히 공통의 최종 프로그램이 작성되지 않지만,수동 추출 기계에서 더 높은 수준의 언어이다.예를 들어,쓰기 Coq 는 추출 버거나 쓰기 F* 추출한 기법을 소개합니다.하지만 반대로 접근이 가능 뿐만 아니라,예를 들어 쓰기("길")C,주석으로 속성의 기능과 다른 코드는 구획,사용 Frama-C 을 증명하는 사람들 속성(고 묵시적 제공하는 C 프로그램에는 없는 정의되지 않은 동작).

이 있을 때 공식적인 의미의 프로그래밍 언어와 표현하는 방법의 특성 프로그램을 증명하고,이러한 특성을 수학적으로 정리했습니다.일반적으로 이러한 정리를 포함하지 않는 어떤 복잡한 수학 등 미적분학(지 않으면 가져온에서 응용 프로그램에 의해 도메인 등의 움직임을 추적하는 물리적 객체),그러나 그들이 증명하는 것은 어렵기 때문에 포함한 매우 큰 공식하고 있으며,산술 문($x^n+y^n=z^n$ 은 복잡한 방정식이지만,그것을 해결하지 않은 초등학교!).그 이론적으로 불가능한 프로그램을 작성할 수 있는 증명이 아닌 사소한 의미의 재산이 모든 프로그램, 고,실질적으로 불가능한 프로그램을 작성을 증명할 수 있는 많은 흥미로운 특성의 일반적인 프로그램입니다.공식적인 확인을 포함한 조합의 파괴 문제를 충분히 작은 단계(작은 기능과 알리는 충분한 정확한 속성이 사람들의 함수)을 갖는 도구는 자동으로 증명한 사람들의 일부는 속성(예: SAT solver 에 대한 명제 논리),고 인간이 쓰기 교정 컴퓨터 그것을 할 수 없어(하지만 컴퓨터를 확인합니다 인간의 증거).증명 조수 등 Coq 및 이사벨 올해서 이 마지막 단계입니다.

공식적으로 증명하고 실제 프로그램은 엄청난 노력이 필요 훨씬 더 많은 양의 시간과 전문 지식을 보다 일반적인 소프트웨어 프로젝트입니다.그것은 거의 이루어집니다 외부 고 assurance 환경부 환경으로 높은 안전 requriements 같은 교통편(비행기,기차,그리 많지 않 자동차),때때로 환경과 높은 비용과 같은 공간거나(아주 드물게)함께 높은 보안 요구사항 등의 스마트 카드입니다.

면 우리는 확인 말을 정렬 알고리즘에 나열의 길이 우리는 단지 검사는 유한 경우가 많고 말하는 따라서 알고리즘 작업해야 합니다.

하지 않을 것이고 공식적인 증거하지 않는 한 프로그램으로 제한되었 n 항목을 입력.몰 이 책은,그러나 내가 의심되거나 당신에 뭔가 잘못.공식적으로 검사를 정렬 프로그램을 포함하는 것을 증명하는 정확성에 대한 모든 n.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 cs.stackexchange
scroll top