명령형 프로그래밍의 이론적 근거는 무엇입니까?


48

함수형 프로그래밍은 람다 미적분학조합 논리 에 이론적 근거가 있습니다. 통계 컴퓨팅에 관련된 누군가로서, 나는 이러한 개념이 모델링에 매우 유용하다는 것을 알게되었습니다.

명령형 프로그래밍 과 동등한 수학적 기반이 있습니까? 아니면 기계 언어의 실제 하드웨어 응용 프로그램과 그에 따른 FORTRAN의 개발에서 단순히 성장 했습니까?

답변:


27

일반적으로 수학을 사용하여 일부 X 를 연구하는 경우 먼저 X 모델이 필요하고 해당 모델에 대한 일련의 결과 이론이 개발됩니다. 나는 이론이 X에 대한 "이론적 근거"라고 할 수 있다고 생각한다 . 이제 X = computation을 설정하십시오. 있습니다 많은 "상태"를 포함하는 많은 계산 모델은. 각 모델에는 자체 "이론"이 있으며 모델간에 "번역"할 수 있습니다. 어떤 모델이 더 "기본"인지 말하기 어렵다고 생각합니다. 서로 다른 목표를 염두에두고 설계되었습니다.

튜링 기계는 계산 가능한 것을 정의하도록 설계되었습니다 . 따라서 특정 문제에 대한 알고리즘이 있는지 여부를 신경 쓰면 좋은 모델을 만듭니다. 이 모델은 알고리즘 의 효율성 이나 문제 의 경도 를 연구하기 위해 남용되기도합니다 . 적어도 당신이 다항식 / 비 다항식에만 관심이 있다면 충분히 좋다는 구실 하에서 말입니다. RAM 모델은 실제 컴퓨터에 더 가깝기 때문에 정확한 알고리즘 분석을 원할 때 더 좋습니다. 문제의 경도에 하한을 두는 것이 바람직 하지 않습니다.오늘날의 컴퓨터와 너무 유사한 모델을 사용하십시오. 다항식 / 비 다항식보다 더 정밀하면서도 다양한 컴퓨터를 포괄 할 수 있기 때문입니다. 이러한 맥락에서, 예를 들어 사용 된 셀 프로브 모델을 보았습니다.

정확성에 관심이 있다면 다른 모델이 유용합니다. 여기 (나는 상태 형 계산을위한 람다 계산법의 아날로그이다라고 말하고 싶지만) 운영 의미에서 크 누스에 의해 대중화되어 1967 플로이드의 유도 성 주장에 따라 호어에 의해 1969 년에 개발 된 공리 의미 (이 컴퓨터 프로그래밍의 예술을 , 1) 및 기타.

요약하면, 나는 당신이 계산 모델을 따른 다고 생각 합니다. 다양한 목표를 염두에두고 개발 된 많은 모델이 있으며, 대부분 상태를 가지므로 명령형 프로그래밍에 해당합니다. 무언가를 계산할 수 있는지 알고 싶다면 Turing machine을보십시오. 효율성에 관심이 있다면 RAM 모델을보십시오. 정확성에 관심이 있다면 작동 의미론과 같이 "의미"로 끝나는 모델을보십시오.

마지막으로, John Savage 의 Computation Models에 관한 큰 책이 온라인에 있다고 언급하겠습니다 . 주로 효율성에 관한 것입니다. 정확성을 위해 Floyd (1967) , Hoare (1969) , Dijkstra (1975)Plotkin (1981) 의 고전적인 논문부터 시작하는 것이 좋습니다 . 그들은 모두 꽤 시원합니다.


4
나는 오퍼레이션 시맨틱 스가 실제로 포스터가 찾고있는 것이라고 생각한다. wikipedia에 대한 좀 더 자세한 정보 : en.wikipedia.org/wiki/Operational_semantics
sclv

22

명령형 프로그램의 가장 간단한 이론적 모델은 튜링 머신 자체입니다. 이 명령에는 명령형 프로그램의 필수 구성 요소 인 무한한 수정 가능한 상태와 그에 작동하는 상태 머신이 있습니다.

또한 Haskell 프로그래밍 언어에서와 같이 프로그램을 전역 상태의 수정 된 버전을 전달하고 반환하는 모나드 연산의 구성으로 간주하여 명령형 프로그래밍을 함수형 프로그래밍에 적용 할 수 있습니다.


2
모나드를 사용하여 순전히 기능적인 언어 (예 : Haskell)로 명령형 구조를 사용한다고해서 명령형 프로그래밍의 모든 기능을 사용할 수는 없습니다. 특히, 실제로 변경 가능한 상태가없는 경우 (예를 들어, 참조가있는 많은 언어 에서처럼), 순전히 기능적인 언어로 효율적인 구현이 알려지지 않은 데이터 구조는 여전히 많이 있습니다.
Joshua Grochow

@Joshua : 왜 주 모나드가 참조의 의미를 표현하지 않는다고 생각합니까? 반대 의견이 무엇인지 이해하지 못했습니다.
Charles Stewart

상태 모나드는 기본적으로 추가 인수 (상태)를 받아들이고 추가 출력 (다음 상태)을 출력하는 함수 모음을 갖는 구문 설탕입니다. 그러나 순전히 기능적인 언어에서는 실제로 다음 상태를 얻기 위해 상태를 수정할 수 없지만 여전히 복사하고 재구성해야합니다. 순전히 기능적인 언어로 효율적으로 구현할 수없는 것으로 알려진 특정 데이터 구조가 있는지는 잘 모르겠지만 확실한 증거가 있습니다 (예 : Pippenger. Pure vs. Impure Lisp. 1997).
Joshua Grochow

6
모나드로 돌연변이의 의미론을 완벽하게 포착 할 수 있습니다 (예 : Haskell의 ST 모나드 참조). 여기서는 구현이 아니라 시맨틱을 이야기하고 있습니다.
sclv

20

요컨대, 명령형 프로그래밍은 기계 언어와 프로그래밍 실습에서 진화했다고 말할 수 있습니다. 반면 모나드 는 명령형 프로그래밍 언어 기능의 의미를 설명하기위한 적절한 의미 체계를 제공합니다. 종이 계산과 모나드 관념 모지 의해 공식적인 기초를 확립. Phil Wadler는 아이디어를 대중화하고 프로그래밍 언어 Haskell에 명령형 기능을 통합하는 핵심 방법 인 데 크게 기여했습니다. Plotkin의 최근 연구와 계산의 전력 개념은 Monads를 결정합니다 (비 제한적) 계산 개념 중 일부 (모두는 아님)가 실제로 모나드를 제공한다는 사실을 나타내는 다른 방법으로, 모나드는 매우 필수적인 방식으로 모나드가 명령 (및 기타) 계산 개념에 해당한다는 의미입니다.


8
모나드는 순전히 기능적인 세계에서 명령형 프로그래밍을 중단시키는 데 사용될 수 있지만, 람다 미적분과 많은 기능적 언어 사이의 관계와 유사한 명령형 프로그래밍의 이론적 근거를 형성한다고 주장하는 경우를 볼 수 없습니다. 모나드는 계산 클래스 (예 : 순수 계산 대 IO를 포함하는 계산 또는 변경 가능한 특정 상태 번들에 의존하는 계산)에 대한 추상화를 형성 할 때 계산을 모델링하지 않습니다.
blucz

1
모나드는 효과적인 언어에 대해 더 명확한 의미 의미를 작성하는 방법입니다.
nponeccop

15

명령형 프로그래밍 언어에 대한 엄격한 수학적 처리를 찾고 있다면 Winskel의 저서 "프로그래밍 언어의 형식적 의미론"(1993)이 그 예입니다.

이 책에서 그는 IMP라는 명령형 프로그래밍 언어를 정의하고 그에 대한 조작 적, 부정적 및 공리적 의미를 제공합니다.


14

나는이 질문에 늦게오고 있지만 그것은 매혹적인 질문입니다. 자, 여기 내 견해가 있습니다.

저학년 때 수학의 역사와 발전에 관한 강의를하던 훌륭한 수학 교수가있었습니다. 그에 따르면 수학은 "확장"과 "통합"의 물결 속에서 발달했다. 확장 단계에서 이전에는 알려지지 않은 새로운 아이디어가 고려되고 조사되었습니다. 그런 다음 통합 단계에서 새로운 이론이 기존 지식 체계에 통합되었습니다. 그러나 그는 20 세기에 확장과 통합이 동시에 진행되고 있다고 말했다.

명령형 프로그래밍은 현재 수학의 확장 활동입니다. 이전에는 "알 수 없었습니다". (그건 전적으로 사실이되지 않을 수 있습니다. 호어 우리에게 알려줍니다 유클리드 그의 기하학의 명령형 프로그래밍과 같은 일을하고 있었다. 그러나 수학이 좋든 나쁘 든, 그것은 관심을 잃은 우리를.) 수학자는 여전히 명령형 프로그래밍에 관심이 없습니다. 그들을 위해 너무 많은 손실. 그러나 나는 모든 컴퓨터 과학을 추상적 인 의미에서 수학의 한 가지로 간주합니다. 우리는 그것을 공부하면서 그 과정에서 수학을 확장하고 있습니다.

따라서 나는 명령형 프로그래밍에 대한 사전 이론적 근거 가 있는지는 특별히 신경 쓰지 않을 것 입니다. 없는 경우 찾아서 찾아 보자. 우리가 이미 알고있는 것은 명령형 프로그래밍은 환상적으로 깊고 아름답다는 것을 알려줍니다. 함수형 프로그래밍 비교. 그러나 우리는이 모든 이론을 사람들에게 알리기 위해해야 ​​할 일이 많습니다.


"기능적 프로그래밍 비교". 내가 당신과 밥 하퍼를 싸움 장으로 데려다 줄 수 있다면 당신은 큰 명령 블록을 스윙하고 그는 당신에게 폐쇄를 던지려고 노력했습니다. (PS : 아주 좋은 대답은, 나는 그것을 upvoted.)
안드레이 바우어

글쎄요, 그는 저를 피합니다. 그 :-) 무엇을 의미 모르겠어요
우다이 레디에게

11

함수형 프로그래밍 언어는 관련 수학과 병행하여 발전하고 설계자는 일반적으로 수학을 크게 고려했기 때문에 함수형 프로그래밍은 수학에서 분명한 기초를 가지고 있습니다. 강력하고 직접적인 관계는 자기 실현 예언입니다.

명령형 프로그래밍은 비즈니스 및 엔지니어링 문제와 훨씬 더 밀접한 관련이있는 상당히 복잡한 역사를 가지고 있으며, 역사적으로 수학적 형식주의를 존중하는 것보다 컴파일러의 성능과 이들이 생성하는 코드에 훨씬 더 관심이있었습니다.

많은 사람들이 (전통적으로) 기능적인 용어로 명령형 프로그래밍을 설명하려고 시도했습니다. 이것은 우리가 당신이 찾고있는 것에 가장 가까이 갈 수 있지만, 이러한 시도는 항상 어색하고 지루하며 법의학입니다. CLR에 대한 진행 / 보존 증명을 읽는 것보다 얼굴에서 눈을 찢을 것이라고 확신합니다.

보통 괜찮은 교재의 끝 (예를 들어 Pierce 's Types and Programming Languages)의 끝에 가면, 명령형 언어 기능의 공식적인 모델링이 시작됩니다. 이것은 당신에게 흥미로울 수 있습니다.


11

An Axiomatic Basis for Computer Programming CAR HOARE 제작

본 논문에서는 기하학 연구에서 처음 적용되고 나중에 다른 수학 분야로 확장 된 기술을 사용하여 컴퓨터 프로그래밍의 논리적 인 기초를 탐구하고자한다. 여기에는 컴퓨터 프로그램의 속성을 증명하는 데 사용할 수있는 일련의 공리와 추론 규칙이 설명됩니다. 그러한 공리와 규칙에 대한 예가 제시되고 간단한 정리에 대한 공식적인 증거가 표시됩니다. 마지막으로, 이론적이고 실용적인 중요한 장점은 이러한 주제에 따라 이루어질 수 있다고 주장합니다.

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.85.8553&rep=rep1&type=pdf


8

나는 Alexandre가 말한 두 번째로 Turing 머신이 명령형 프로그래밍의 원래 이론적 근거를 제공했다고 말했다. 명령형 프로그래밍 언어의 구성이 기계 아키텍처를 반영하는 한 존 본 노이만 (John Von Neumann) 의 작업은 이론적 토대의 핵심 부분 이라고 생각합니다 .


7

명령형 프로그래밍과 동등한 수학적 기초가 있습니까, 아니면 기계어와 그에 따른 FORTRAN의 실제 하드웨어 응용 프로그램에서 단순히 성장 했습니까?

역사적 의미에서 "기준"을 의미한다면, "동등한 수학적 기초"는 없다고 생각합니다. 그러나 명령형 프로그래밍은 실제적인 문제에서 비롯되었지만 Hoare logic 과 같이 명령형 프로그래밍의 의미를 "유용한 모델링"으로 찾을 수있는 방식으로 포괄적으로 특성화하는 몇 가지 방법이 있습니다 .


이 커뮤니티를 위키로 만들 겠다는 뜻입니까?
Suresh Venkat

예, 커뮤니티 위키로 만들려고했습니다.
jbapple

7

호 아어 논리와 분리 논리를 언급하는 게시물은이 문제에 대한 올바른 게시물입니다. Hoare 논리를 사용하면 프로그램의 전체 힙 구성에 대한 속성을 상태로 지정할 수 있으며 분리 논리는보다 현대적인 관계로 "분리 연결"을 사용하여 속성에 대한 코드 세그먼트에 사전 및 사후 조건으로 상태를 지정할 수 있습니다. 힙의 나머지 부분에 대해 정량화하면서 프로그램 세그먼트가 조작하는 힙 부분.

모나드에 대한 대답은 엄격히 정확하지는 않습니다. 하스켈에서는 모나드가 단지 평가 제약의 순서를 인코딩하고 "IO 사용 가능"속성을 명시 적으로 추적 할 수있는 추상화이기 때문에 사용되기 때문입니다.

호어 / 분리 로직을 모나드로 볼 수 있으며 하버드 의 ynot 프로젝트 와 같은 여러 가지 현대 프로젝트 가 이러한 주제를 탐구 하고 있음을 지적 할 가치가 있습니다.

분리 논리에 대한 연구는 지속적이고 활발한 분야입니다.


하스켈이 모나드 (모나드 타입 클래스)와 모나드 (모나드 타입 클래스)라는 개념을 모나드 (모나드)를 사용하여 범주 적 의미론의 설명을 구성하는보다 일반적인 접근법과 혼용한다는 사실을 혼동하는 것은 잘못 인 것 같습니다. 프로그래밍을 구조화하기위한 도구로 모나드를 채택한다고해서 프로그래밍 에 대한 추론 을 구조화하기위한 도구로 범주 형 의미론을 사용하는 것이 우리를 막을 수는 없습니다 .
sclv

나는 많은 사람들이 모나드 변압기를 통해 의미론을 탐구하기 위해 모나드를 사용했다고 믿는다. 특히, 상기 변압기의 상이한 구성들로부터 발생하는 동작들 (예를 들어, 상태 /
돌연변이 성

5

나는이 질문에 나중에오고 있지만, 나는 그것에 똑같이 매료됩니다.

명령형 프로그래밍 이론이 함수형 프로그래밍 이론보다 덜 정착 된 것으로 간주되는 이유는 저를 회피합니다. 그것은 1969 년 Scott과 de Bakker에게 단순한 명령형 언어로 재귀의 의미를 분석하면서 심각해지기 시작했을 것이다 [1]. 명령형 언어가 기능을 갖추면 이야기가 조금 더 복잡해 지지만 이는 금속에 가까워 질 때 지불하는 대가입니다. 1980 년에보다 포괄적 인 노력 중 하나를 언급하기 위해 de Bakker, de Bruin 및 Zucker는이 주제에 대한 논문을 썼다 [2]. 다른 사람들은 위에서 언급했습니다. 물론 이전의 분리 논리에 대한 이러한 참조는 배열과 상호 재귀 절차를 다루고있다.

[1] : 1969 년에 출판되지 않았지만 Jaco W. de Bakker와 Dana S. Scott으로 나타났습니다. 프로그램 이론 , 1-30 페이지. Klop et al. JW de Bakker, 25 명 자만 텍. CWI, 1989 년 암스테르담. Liber Amoricum.

[2] : Jacobus W. de Bakker, Arie de Bruin, Jeffrey Zucker : 프로그램 정확성에 대한 수학 이론. 프렌 티스 홀 1980.


1
명백한 명령형 프로그래밍은 매우 잘 이해됩니다. 사람들이 덜 정착한다고 말할 때 사람들이 의미하는 것은 구조적, 명령형 프로그래밍이 순수한 기능적 프로그래밍보다 풍부하고, 이것 또는 그 형식의 명령형 프로그래밍에서 자라는 수학적 구조가 훨씬 덜 발견되었다는 것입니다. 예를 들어, 특정 종류의 명령형 프로그램은 분리 논리를 잘 사용하는 것에 대해 추론 할 수 있습니다. 이것은 아마도 공유 형태와 관련이 있습니다. 아마도 이런 종류의 프로그램은 훌륭하고 추상적 인 수학적 특성을 가지고 있습니까?
Martin Berger

1
개인적으로 필자는 명령형 언어의 모듈화 이론이 매우 불분명하다는 것을 의미합니다. 우리는 기능적 언어에 대한 모듈성이 무엇을 의미 하는지를 알고 있습니다 : 관계형 파라 메트릭. 명령형 언어의 경우 (a) 분명히 작동하지만 (b) 좋은 증명 기술이 부족한 정보 숨기기 관용구가 많이 있습니다. 여기에 깊은 이론이 있다는 힌트가 있습니다. 예를 들어, 순차적 명령 프로그램의 모듈 식 증명을 할 때 동시성 기술이 필요합니다. 비공식적으로, 앨리어싱은 동시성과 비슷하지만 실제로 그 아이디어를 공식화하는 방법을 모르겠습니다 ...
Neel Krishnaswami

@ 카이 스레드에 오신 것을 환영합니다! Bakker 작업을 살펴본 지 오랜 시간이 지났지 만 기본적인 문제는 접근 방식이 확장되지 않았다는 것입니다. 그 이후로 명령형 프로그래밍의 진행 상황에 대한 간단한 요약을 보려면 "무엇을 의미 론적 의미론으로 구성합니까?" 스레드 링크 .
Uday Reddy

@NeelKrishnaswami. 나는 그 증거를보고 싶습니다. 그들은 당신의 웹 페이지에 있습니까? 앨리어싱은 정교한 공유 및 인터리빙을 포함한다는 점에서 동시성과 같습니다. 동시성에서는 인터리빙을 추상화하고 비결 정성 (좋은)을 가정합니다. 앨리어싱에서는 인터리빙을 처리해야합니다. 게임 시맨틱은이 강제 인터리빙의 훌륭한 예입니다. 이것이 제가 마음에 들지 않는 이유입니다.
Uday Reddy

3

귀하가 질문을 한 직후, McMaster University의 Mark Bender는 과제 : 과제 미적분 : 순수한 명령 적 추론 언어 (2010 9 월 8 일)를 발표했습니다. 이 논문은 람다 미적분에 해당하는 단순하고 필수적인 언어를 설명합니다.

할당 미적분은 4 개의 기본 구성, 할당 X:=t, 시퀀스 t;u, 프로 시저 구성 ¡t및 프로 시저 호출로 구성됩니다 !t. AC에 대한 세 가지 해석이 제공됩니다. 운영 의미론, 표기 의미론 및 용어 재 작성 시스템. 세 개는 동등한 것으로 표시됩니다.

Mark Bender의 논문은 지연 평가, 역 추적, 절차 구성으로 확장 된 변형을 탐색합니다. 이것은 작은 확장을 사용하여 람다 미적분의 탐사와 유사합니다.

전체적으로 논문은 OP 질문에 대한 비교적 직접적인 답변을 제공합니다.


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