기능 코드의 정확성을 입증하는 일반적인 공식 기술은 무엇입니까?


10

논문의 일부로 작성중인 Haskell 프로그램의 일부에 대한 증거를 제공하고 싶습니다. 그러나 지금까지 좋은 참고 자료를 찾지 못했습니다.

그레이엄 허튼의 입문 책 하스켈 프로그램 ( Google 도서는 다음과 같은 프로그램에 대해 추론을위한 몇 가지 기술을 하스켈-접촉을 배우면서) 본인은 - 어떤

  • 방정식 추론
  • 겹치지 않는 패턴 사용
  • 목록 유도

13 장에 있지만 심도있는 것은 아닙니다.

Haskell 또는 기타 기능적 코드에 대한 공식적인 검증 기술에 대한 자세한 개요를 제공하는 권장 할 수있는 책이나 기사가 있습니까?

답변:


5

함수형 프로그래밍에서 결과를 입증하기위한 사실상의 방법 중 하나는 Richard Bird 그룹을 이용하는 것입니다.

특히, 당신은 방정식 추론 및 목록 유도에 대한 심층적이거나 적어도 더 포괄적 인 접근 방식을 요구하며 이는 구성 기능 프로그래밍 강의에서 제공됩니다 .

보다 일반적으로 Bird and de Moor의 "Algebra of Programming"이라는 텍스트는 최적화 및 동적 프로그래밍 문제와 같은 기능 알고리즘의 정확성을 다룹니다.


이 문제에 대한 다른 유용한 자료를 접한 경우 해당 자료를 언급하면이 게시물을 위키로 바꿀 수 있습니다.


감사합니다! 물론 더 많은 리소스를 찾으면 내 게시물에 추가해야합니다.
FK82

6

당신은 시작할 수 있습니다

논리, 컴퓨터 보조 정리 증명, Coq 증명 보조, 기능 프로그래밍, 연산 의미론, Hoare 논리 및 정적 유형 시스템의 기본 개념이 포함됩니다. 이 박람회는 고급 학부에서 박사 과정 학생 및 연구원에 이르기까지 광범위한 독자를 대상으로합니다. 수학적 성숙도가 도움이 되더라도 논리 또는 프로그래밍 언어의 특정 배경은 가정되지 않습니다.

프로그래밍 언어 이론 부분을 건너 뛰거나 생략 할 수 있으며 서문에서 IndPrinciples까지 공식적인 증거를 처리하는 방법 만 배울 수 있습니다. 이 책은 정말 잘 쓰여지고 밝아졌습니다.

그런 다음 계속 진행할 수 있습니다

이 책에서는 정렬 알고리즘, 이진 검색 트리, 균형 이진 검색 트리 및 우선 순위 대기열을 지정하고 확인하는 방법을 배우게됩니다. 이 책을 사용하기 전에 표준 학부 알고리즘 교과서에서 사용 가능한 이러한 알고리즘 및 데이터 구조에 대해 이해해야합니다. Software Foundations Volume 1 (Logic Foundations)의 모든 자료를 이해해야합니다.

경고 사항 : VFA는 아직 베타 버전입니다!


(두 번째 링크는 잘못된 위치로 연결됩니다.) 또한 Agda 에는 검증 된 기능 프로그래밍이 있습니다 . 공식적으로 프로그래밍 언어 인 Agda를 사용하지만 유니 코드를 사용하므로 수학 표기법에 더 가깝습니다.
Musa Al-hassy

고마워요 예, VFPiA를 읽었지만 맛이 없습니다.
Anton Trunov

답변 주셔서 감사합니다! 오해가 있다고 생각합니다. 알고리즘을 증명하기위한 기능 기술 (예 : 교정 지원)을 찾고 있지 않지만 기능 코드를 증명하는 기술 (예 : 주어진 알고리즘의 기능 구현을 올바르게 증명하기위한)을 찾고 있습니다. @ MusaAl-hassy 답변은 원하는 답변. 내가 그것을 놓치고 당신이 인용 한 책들이이 측면을 다룬다면, 관련 챕터를 추가 하시겠습니까?
FK82

@ FK82은 여기입니다 Theorem app_assoc : ∀ l1 l2 l3 : natlist, (l1 ++ l2) ++ l3 = l1 ++ (l2 ++ l3)로부터 나열 장. 이 예는 관심있는 것과 비슷합니까? 그들은 Coq에서 기능 프로그래밍으로 시작하지만 기능 프로그램의 속성에 대한 추론 으로 넘어갑니다 . 서문에서 IndPrinciples까지의 장은이 두 가지를 모두 다루며 프로그래밍과 추론이 서로 얽혀 있다고 말합니다.
Anton Trunov

1
@ FK82 (1) 나는 의견에 전적으로 동의한다 . (2) R. Bird의 "하스켈로 생각하기"(2015) 책을보고 싶을 수도 있습니다. 이 책에는 하스켈에 대한 수많은 추론 사례가 있습니다. (3) 또한, 같은 저자의 "기능 알고리즘 설계의 진주"(2010)가 도움이 될 수 있습니다.
Anton Trunov

5

순수한 기능적 언어에 관한 것들을 입증하기위한 훌륭한 증명 기술과 예제는 일반적으로 사양 언어일부로서 방정식으로 추론 할 수있는 순수한 기능적 언어를 포함하는 증거 보조 자라는 것이 밝혀졌습니다 .

특정 증거 보조자, 즉 Coq에서 이러한 종류의 추론에 대한 심층적 인 소개를 얻으 려면 Dependent Types사용한 Certified Programing과 같은 책을 참조하십시오 .


감사! 실제로 Haskell의 기술을 구체적으로 찾고 있습니다. 내 게시물은 모든 기능 코드를 포함하도록 편집되었지만 내 의도보다 훨씬 높습니다.
FK82

1
나는 Haskell을 구체적으로 검증하도록 설계된 시스템을 알고 있지 않지만, 1) Coq (및 Agda)의 기능적 핵심은 Haskell의 기능적 핵심 ( 기능 에 대한 제한 제외 ) 및 2) 검증 된 프로그램과 본질적으로 구분할 수 없습니다. Coq와 Agda 에서 Haskell 로 추출 할 수 있습니다 (하지만 Haskell 로의 추출은 Coq가 더 Ocaml 중심 인 Agda에서 더 잘 지원된다고 생각합니다)
cody

알아 둘만 한! 그러나 이것은 Coq 또는 Agda에서 내 프로그램 (또는 관련 부분)을 다시 작성한다는 것을 의미합니다. 제 경우에는 그것이 합리적이라고 생각하지 않습니다.
FK82

Haskell을 Isabelle로 변환 하거나 Isabelle을 사용하여 동등성직접 증명하는 매우 실험적인 "프론트 엔드"가 몇 개 있지만 성숙도에 너무 많은 주식을 보유하지는 않습니다. 코드를 다시 작성하는 것이 궁극적으로 덜 효과적이라고 생각합니다.
코디

4

프로그램 논리를 사용하는 것이 좋습니다. 타이핑 시스템보다 효과를 훨씬 잘 처리합니다.

기능적 언어에 대한 수많은 프로그램 논리가 있습니다. 이것은 효과로 흥미로워집니다. 예를 들어 로컬 상태의 고차 함수에 대한 논리 추론을 참조하십시오 .

Arthur Charguéraud의 작업은 프로그램 논리 접근 방식을 교정 보조자와 통합합니다 (예 : 이 개요 페이지 참조) .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.