답변:
일반적으로 수학을 사용하여 일부 X 를 연구하는 경우 먼저 X 모델이 필요하고 해당 모델에 대한 일련의 결과 이론이 개발됩니다. 나는 이론이 X에 대한 "이론적 근거"라고 할 수 있다고 생각한다 . 이제 X = computation을 설정하십시오. 있습니다 많은 "상태"를 포함하는 많은 계산 모델은. 각 모델에는 자체 "이론"이 있으며 모델간에 "번역"할 수 있습니다. 어떤 모델이 더 "기본"인지 말하기 어렵다고 생각합니다. 서로 다른 목표를 염두에두고 설계되었습니다.
튜링 기계는 계산 가능한 것을 정의하도록 설계되었습니다 . 따라서 특정 문제에 대한 알고리즘이 있는지 여부를 신경 쓰면 좋은 모델을 만듭니다. 이 모델은 알고리즘 의 효율성 이나 문제 의 경도 를 연구하기 위해 남용되기도합니다 . 적어도 당신이 다항식 / 비 다항식에만 관심이 있다면 충분히 좋다는 구실 하에서 말입니다. RAM 모델은 실제 컴퓨터에 더 가깝기 때문에 정확한 알고리즘 분석을 원할 때 더 좋습니다. 문제의 경도에 하한을 두는 것이 바람직 하지 않습니다.오늘날의 컴퓨터와 너무 유사한 모델을 사용하십시오. 다항식 / 비 다항식보다 더 정밀하면서도 다양한 컴퓨터를 포괄 할 수 있기 때문입니다. 이러한 맥락에서, 예를 들어 사용 된 셀 프로브 모델을 보았습니다.
정확성에 관심이 있다면 다른 모델이 유용합니다. 여기 (나는 상태 형 계산을위한 람다 계산법의 아날로그이다라고 말하고 싶지만) 운영 의미에서 크 누스에 의해 대중화되어 1967 플로이드의 유도 성 주장에 따라 호어에 의해 1969 년에 개발 된 공리 의미 (이 컴퓨터 프로그래밍의 예술을 , 1) 및 기타.
요약하면, 나는 당신이 계산 모델을 따른 다고 생각 합니다. 다양한 목표를 염두에두고 개발 된 많은 모델이 있으며, 대부분 상태를 가지므로 명령형 프로그래밍에 해당합니다. 무언가를 계산할 수 있는지 알고 싶다면 Turing machine을보십시오. 효율성에 관심이 있다면 RAM 모델을보십시오. 정확성에 관심이 있다면 작동 의미론과 같이 "의미"로 끝나는 모델을보십시오.
마지막으로, John Savage 의 Computation Models에 관한 큰 책이 온라인에 있다고 언급하겠습니다 . 주로 효율성에 관한 것입니다. 정확성을 위해 Floyd (1967) , Hoare (1969) , Dijkstra (1975) 및 Plotkin (1981) 의 고전적인 논문부터 시작하는 것이 좋습니다 . 그들은 모두 꽤 시원합니다.
명령형 프로그램의 가장 간단한 이론적 모델은 튜링 머신 자체입니다. 이 명령에는 명령형 프로그램의 필수 구성 요소 인 무한한 수정 가능한 상태와 그에 작동하는 상태 머신이 있습니다.
또한 Haskell 프로그래밍 언어에서와 같이 프로그램을 전역 상태의 수정 된 버전을 전달하고 반환하는 모나드 연산의 구성으로 간주하여 명령형 프로그래밍을 함수형 프로그래밍에 적용 할 수 있습니다.
요컨대, 명령형 프로그래밍은 기계 언어와 프로그래밍 실습에서 진화했다고 말할 수 있습니다. 반면 모나드 는 명령형 프로그래밍 언어 기능의 의미를 설명하기위한 적절한 의미 체계를 제공합니다. 종이 계산과 모나드 관념 모지 의해 공식적인 기초를 확립. Phil Wadler는 아이디어를 대중화하고 프로그래밍 언어 Haskell에 명령형 기능을 통합하는 핵심 방법 인 데 크게 기여했습니다. Plotkin의 최근 연구와 계산의 전력 개념은 Monads를 결정합니다 (비 제한적) 계산 개념 중 일부 (모두는 아님)가 실제로 모나드를 제공한다는 사실을 나타내는 다른 방법으로, 모나드는 매우 필수적인 방식으로 모나드가 명령 (및 기타) 계산 개념에 해당한다는 의미입니다.
나는이 질문에 늦게오고 있지만 그것은 매혹적인 질문입니다. 자, 여기 내 견해가 있습니다.
저학년 때 수학의 역사와 발전에 관한 강의를하던 훌륭한 수학 교수가있었습니다. 그에 따르면 수학은 "확장"과 "통합"의 물결 속에서 발달했다. 확장 단계에서 이전에는 알려지지 않은 새로운 아이디어가 고려되고 조사되었습니다. 그런 다음 통합 단계에서 새로운 이론이 기존 지식 체계에 통합되었습니다. 그러나 그는 20 세기에 확장과 통합이 동시에 진행되고 있다고 말했다.
명령형 프로그래밍은 현재 수학의 확장 활동입니다. 이전에는 "알 수 없었습니다". (그건 전적으로 사실이되지 않을 수 있습니다. 호어 우리에게 알려줍니다 유클리드 그의 기하학의 명령형 프로그래밍과 같은 일을하고 있었다. 그러나 수학이 좋든 나쁘 든, 그것은 관심을 잃은 우리를.) 수학자는 여전히 명령형 프로그래밍에 관심이 없습니다. 그들을 위해 너무 많은 손실. 그러나 나는 모든 컴퓨터 과학을 추상적 인 의미에서 수학의 한 가지로 간주합니다. 우리는 그것을 공부하면서 그 과정에서 수학을 확장하고 있습니다.
따라서 나는 명령형 프로그래밍에 대한 사전 이론적 근거 가 있는지는 특별히 신경 쓰지 않을 것 입니다. 없는 경우 찾아서 찾아 보자. 우리가 이미 알고있는 것은 명령형 프로그래밍은 환상적으로 깊고 아름답다는 것을 알려줍니다. 함수형 프로그래밍 비교. 그러나 우리는이 모든 이론을 사람들에게 알리기 위해해야 할 일이 많습니다.
함수형 프로그래밍 언어는 관련 수학과 병행하여 발전하고 설계자는 일반적으로 수학을 크게 고려했기 때문에 함수형 프로그래밍은 수학에서 분명한 기초를 가지고 있습니다. 강력하고 직접적인 관계는 자기 실현 예언입니다.
명령형 프로그래밍은 비즈니스 및 엔지니어링 문제와 훨씬 더 밀접한 관련이있는 상당히 복잡한 역사를 가지고 있으며, 역사적으로 수학적 형식주의를 존중하는 것보다 컴파일러의 성능과 이들이 생성하는 코드에 훨씬 더 관심이있었습니다.
많은 사람들이 (전통적으로) 기능적인 용어로 명령형 프로그래밍을 설명하려고 시도했습니다. 이것은 우리가 당신이 찾고있는 것에 가장 가까이 갈 수 있지만, 이러한 시도는 항상 어색하고 지루하며 법의학입니다. CLR에 대한 진행 / 보존 증명을 읽는 것보다 얼굴에서 눈을 찢을 것이라고 확신합니다.
보통 괜찮은 교재의 끝 (예를 들어 Pierce 's Types and Programming Languages)의 끝에 가면, 명령형 언어 기능의 공식적인 모델링이 시작됩니다. 이것은 당신에게 흥미로울 수 있습니다.
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
나는 Alexandre가 말한 두 번째로 Turing 머신이 명령형 프로그래밍의 원래 이론적 근거를 제공했다고 말했다. 명령형 프로그래밍 언어의 구성이 기계 아키텍처를 반영하는 한 존 본 노이만 (John Von Neumann) 의 작업은 이론적 토대의 핵심 부분 이라고 생각합니다 .
명령형 프로그래밍과 동등한 수학적 기초가 있습니까, 아니면 기계어와 그에 따른 FORTRAN의 실제 하드웨어 응용 프로그램에서 단순히 성장 했습니까?
역사적 의미에서 "기준"을 의미한다면, "동등한 수학적 기초"는 없다고 생각합니다. 그러나 명령형 프로그래밍은 실제적인 문제에서 비롯되었지만 Hoare logic 과 같이 명령형 프로그래밍의 의미를 "유용한 모델링"으로 찾을 수있는 방식으로 포괄적으로 특성화하는 몇 가지 방법이 있습니다 .
호 아어 논리와 분리 논리를 언급하는 게시물은이 문제에 대한 올바른 게시물입니다. Hoare 논리를 사용하면 프로그램의 전체 힙 구성에 대한 속성을 상태로 지정할 수 있으며 분리 논리는보다 현대적인 관계로 "분리 연결"을 사용하여 속성에 대한 코드 세그먼트에 사전 및 사후 조건으로 상태를 지정할 수 있습니다. 힙의 나머지 부분에 대해 정량화하면서 프로그램 세그먼트가 조작하는 힙 부분.
모나드에 대한 대답은 엄격히 정확하지는 않습니다. 하스켈에서는 모나드가 단지 평가 제약의 순서를 인코딩하고 "IO 사용 가능"속성을 명시 적으로 추적 할 수있는 추상화이기 때문에 사용되기 때문입니다.
호어 / 분리 로직을 모나드로 볼 수 있으며 하버드 의 ynot 프로젝트 와 같은 여러 가지 현대 프로젝트 가 이러한 주제를 탐구 하고 있음을 지적 할 가치가 있습니다.
분리 논리에 대한 연구는 지속적이고 활발한 분야입니다.
나는이 질문에 나중에오고 있지만, 나는 그것에 똑같이 매료됩니다.
명령형 프로그래밍 이론이 함수형 프로그래밍 이론보다 덜 정착 된 것으로 간주되는 이유는 저를 회피합니다. 그것은 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.
귀하가 질문을 한 직후, McMaster University의 Mark Bender는 과제 : 과제 미적분 : 순수한 명령 적 추론 언어 (2010 9 월 8 일)를 발표했습니다. 이 논문은 람다 미적분에 해당하는 단순하고 필수적인 언어를 설명합니다.
할당 미적분은 4 개의 기본 구성, 할당
X:=t
, 시퀀스t;u
, 프로 시저 구성¡t
및 프로 시저 호출로 구성됩니다!t
. AC에 대한 세 가지 해석이 제공됩니다. 운영 의미론, 표기 의미론 및 용어 재 작성 시스템. 세 개는 동등한 것으로 표시됩니다.
Mark Bender의 논문은 지연 평가, 역 추적, 절차 구성으로 확장 된 변형을 탐색합니다. 이것은 작은 확장을 사용하여 람다 미적분의 탐사와 유사합니다.
전체적으로 논문은 OP 질문에 대한 비교적 직접적인 답변을 제공합니다.