실제로 사양에서 컴퓨터 프로그램을 작성하는 시스템을 만든 사람이 있습니까?


17

실제로 컴퓨터 프로그램을 생성하는 시스템 (단순한 예제가있는 종이에 대한 소프트웨어 또는 자세한 설명)을 작성한 사람이 있습니까? I 입력 그것을 나열 소수 10 미만있는 프로그램을 만들어 간단하게 정의 교수들은 그들이 할 수는 있지만 실제적으로 완전한 예를 제시하는 사람은 아무도 없다고 말합니다.Prime(x)x<10Prime(x)

1<xAs.t.1<AA<xx=A×B, with A,BN

13
다목적 프로그래밍 언어의 컴파일러와 같은 의미입니까?
Sasho Nikolov

1
안녕-cstheory에 오신 것을 환영합니다! 불행히도 귀하의 질문은 이론적 인 컴퓨터 과학에 관한 연구 수준의 질문이 아니며이 사이트에서 주제를 벗어났습니다.

실제로 이것은 현재 연구의 최상위에있는 좋은 질문이며 매우 유망합니다. 그러나 원하는 것을 정확하게 지정하는 것은 종종 어려운 일입니다. 그것을 지정한다면, 그것이 의미가 있고, 실현 가능하며, 수학적 증명이 필요한 시스템을 필요로합니다. 그 증거로부터 프로그램을 추출 할 수 있습니다. 그러나 증명 및 프로그램 추출 자동화에 대한 연구는 아직 초기 단계에 있지만 아직 초기 단계입니다. 예를 들어 Wikipedia의 Coq 에서 볼 수 있습니다 .---@ cc @LevReyzin
babou

2
귀하의 질문에 해당 하는 이 있습니다. 다른 것도 있습니다. 것입니다 하지 이해하기 간단합니다. Coq와 Isabelle (다른 시스템) 군중에는 질문이 종결되지 않은 경우 더 많은 정보와 예제를 제공 할 수있는 SE 사용자가 포함됩니다. coq example program synthesis를 웹에서 검색하여 찾았습니다.
babou

2
내가 요구하는 것을 포착하는 컴퓨터 과학 영역을 프로그램 합성 이라고 하며 활발한 연구 영역입니다.
Huck Bennett

답변:


11

프로그램 생성의 완전한 자동화에는 본질적인 한계가 있지만 (인간은 더 나을까?) 매우 유망한 연구 주제이다. 그러나이 아이디어는 많은 단계를 기계화하고 프로그램 생성의 정확성을 자동으로 확인하여 프로그램 작성을 상당히 지원하는 데 여전히 유용합니다.

이것은 컴퓨터 프로그램과 수학 증명이 매우 유사하다는 것을 보여주는 Curry-Howard 대응 (또는 동형) 이라는 논리의 결과와 밀접한 관련이 있습니다 .

아이디어는 시스템이 증명할 정리로 프로그램 사양을 취한다는 것입니다. 예를 들어, "비공식적으로": "10보다 작은 모든 소수 집합이 있습니다"와 같습니다.

그런 다음 정리를 증명하려고 시도하고 기존 시스템이 증거를 수행하고 일부 부분, 전체 증거를 자동화하고 오류가 발생하지 않도록 도와줍니다.

그런 증거로부터 처음에 지정된 소수의 원하는 목록을 실제로 계산하는 프로그램을 추출 할 수 있습니다.

과거에는 이러한 아이디어를 설명하기 위해 여러 시스템이 개발되었습니다. 잘 알려진 중 하나였다 LCF 에 의해 로빈 밀너 언어 생성, ML 그 목적으로한다. 현재 가장 진보 된 시스템 중 하나는 Coq 입니다.

완전히 해결 된 예가 있으며 그중 일부는 상당히 복잡합니다. 다음 기사 에서 일부를 찾을 수 있지만 간단한 읽기는 아니며 Logic에 대한 고급 지식이 필요합니다.


9

그 대답은 그렇습니다. 그러나 글을 쓰는 시점에, 대부분의 사소한 프로그램의 경우 사양은 프로그램처럼 작성하고 디버깅하기가 어려운 것 같습니다.

더 심각한 것은 babou의 대답은 좋지만 종속 유형의 영역을 확인하는 것이 좋습니다. Coq를 사용하는 다소 좋은 책 이 있습니다 (면책 조항 : 내 친구가 작성) Epigram, Agda 및 Idris도 있습니다. Isabelle / HOL도 체크 아웃 할 가치가 있습니다.

이것들은 모두 건축의 미적분학을 기반으로합니다. 이론적 근거를 알고 싶다면 Martin-Löf 유형 이론을 찾아보십시오. 주변에 좋은 소개가 있습니다.


나는 사양과 나머지 답변에 대해 완전히 동의하지만 나보다 더 잘 알고 있습니다. 실제 프로그래머라면 프로그램이해야 할 일을 완전히 지정하는 것이 얼마나 어려운지 알고 있습니다. 소프트웨어 엔지니어링의 주요 문제입니다. 그리고 해결 된 문제가 일반적으로 더 수학적이지만, 그것은 여기에서도 번역됩니다. 그러나 나는 너무 낙담하게 들리고 싶지 않았습니다 (특히 첫 번째 의견으로 설명 된이 질문의 역사를 감안할 때).
babou

4

여기서 접선을 시작하면 프로그램 생성기 (즉, 특정 언어로 된 것에 대한 높은 수준의 설명을 제공 한 시스템)는 영원히 존재 해 왔습니다. 많은 파서 생성기 중 하나와 마찬가지로 모든 컴파일러가 그 중 하나입니다. 예전에는 "제 3 세대 언어"라고하는 시스템으로, 높은 수준의 설명과 사용 가능한 데이터 카탈로그가 제공되는 일반적인 비즈니스 응용 프로그램의 코드 (대부분)를 생성했습니다.


1

논리 프로그래밍 ,보다 일반적으로 선언적 프로그래밍 은 제안한 것을 정확히 전제로합니다. 즉, 논리 사양에서 해당 사양을 충족하는 결과를 반환합니다.

당신이 제공하는 "10 미만의 프라임"예제를 구체적으로 다루는 것 중 하나는 Constraint Programing (제한 프로그래밍) 입니다.

그러한 시스템의 특정 (오픈 소스) 구현 을 위해 ECLiPSe 를 사용해 볼 수 있습니다 .


논리 / 제약 패러다임이 프로그램을 지정하는 것보다 답변을 지정하는 것이 더 많다고 말하는 것이 옳을까요? 물론 불완전한 사양은 프로그램이라고 말할 수 있습니다. 그러나 어떻게 든 그것이 프로그램 합성과 같은 게임인지 확실하지 않습니다. 예제가 매우 단순했기 때문에 예제에 대답하는 것은 사실입니다. 제약 조건 프로그래밍이 단순한 문제만을위한 것이라고 말하는 것은 아닙니다.
babou
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.