프로그래밍 언어와 수학 기초는 어떤 관련이 있습니까?


30

기본적으로 저는 수학의 세 가지 기초를 알고 있습니다

  1. 이론 설정
  2. 유형 이론
  3. 카테고리 이론

그렇다면 프로그래밍 언어와 수학의 기초는 어떤 방식으로 관련되어 있습니까?

편집하다

원래 질문은 "수학 기초에 기초한 프로그래밍 언어"였습니다.

추가 된 paragarph와 함께

이론의 구현
1. Coq 의 이론 유형
2. SETL의 이론 설정
3. Haskell의 범주 이론

제안에 따라 "프로그래밍 언어와 수학의 기초는 어떻습니까?"로 변경되었습니다.

이것이 내가 묻는 질문에 대해 충분히 알지 못했지만 무언가를 배우고 싶었 기 때문에 질문 중 하나이므로 학습과 다른 사람들에게 더 가치있게 만들기 위해 질문을 수정하고 있지만 세부 사항은 남기지 않습니다. Andrej Bauer의 현재 답변 은 주제가 아닌 것 같습니다.

지금까지 모든 의견과 답변에 감사드립니다.


1
질문이나 그에 명시된 가정을 이해하는지 잘 모르겠습니다. Coq는 내가 이해하는 한 프로그래밍 언어가 아닙니다. Coq 증명에서 프로그램을 추출 할 수는 있지만 프로그래밍 언어가 아닙니다. 또한 범주 이론과 유형 이론은 밀접하게 관련되어 있으므로 우리가 이것을 분류 할 수 있는지 확실하지 않습니다. SETL에 대해 모른다. Wikipedia 의 증거 보조 목록도 참조하십시오 .
Kaveh

3
Haskell은 "범주 이론의 구현"이 아니며, 어떤 경우에도 수학의 기초는 프로그래밍 언어와 다른 목적을 제공합니다. 어떤 종류의 비교가 이루어질 수 있지만, 공식적인 관계로 강제로 비교하는 것은 좋지 않습니다.
Andrej Bauer


답변:


29

[참고 :이 단락은 이제 구식입니다.] 귀하의 질문 제목에는 의도하지 않은 가정, 즉 프로그래밍 언어가 "수학의 기초에 기반을 둔"것으로 포함되어 있습니다. 비록 두 영역이 중요한 관계를 가지고 있지만 이것은 일반적으로 그렇지 않습니다. 보다 정확한 설명은 (일부) 프로그래밍 언어가 기초 기술을 사용하여 설계되었다는 것입니다. 더 좋은 질문은 "프로그래밍 언어와 수학 기초가 어떻게 관련되어 있는가"입니다.

가장 일반적인 연결은 여러 가지 방식으로 작동하도록 프로그램 에 따라 슬로건 증명으로 구현됩니다 . 카레 - 하워드의 대응은 가장 확실한 하나입니다. 그것으로 우리는 한 번에 유형 이론, 논리 및 프로그래밍을 관련시킵니다. 그러나 Curry-Howard 통신은 모든 범용 프로그래밍 언어가 지원하는 일반적인 재귀가있을 때 (모든 유형이 거주하기 때문에) 잘 작동하지 않는다는 점을 강조해야합니다.

프로그램으로 슬로건 증명을 작동시키는 미묘한 방법은 실현 가능성 을 사용하는 것 입니다. 여기에도 증명과 프로그램이 관련되어 있지만 이제는 증명에서 프로그램으로 방향이 바뀝니다. 모든 증명이 프로그램을 제공하지만 모든 프로그램이 반드시 증명은 아닙니다.

기초 기반의 프로그래밍 언어의 주요 예입니다 AGDA 간단 하다 의존의 형태 이론의 구현입니다. 그러나 Agda는 일반적인 재귀를 지원하지 않기 때문에 범용 프로그래밍 언어가 아닙니다. Agda의 모든 함수는 총계이며 Agda에서는 구현할 수없는 계산 가능한 함수가 있습니다. 실제로 프로그래머는이를 알지 못하지만 Agda는 무한 루프와 같이 정의되지 않은 값을 허용하지 않습니다.

COQ는 것입니다 하지 프로그래밍 언어가 아니라 증거 조수. 그러나이 프로그램에는 추출 기능이있어 프로그램을 증명할 수 있습니다. 교정 보조자와 프로그래밍 언어를 서로 혼동해서는 안됩니다.

프롤로그 및 기타 논리 프로그래밍 언어는 계산이 증거 검색 이라는 아이디어에서 영감을 얻는다 는 것을 잊지 말아야합니다 . 이것은 물론 논리와 밀접한 관련이 있습니다.

Haskell은 도메인 이론을 기반으로하는 범용 프로그래밍 언어입니다 . 즉, 그 의미론은 부분 함수와 재귀를 설명해야하기 때문에 도메인 이론적입니다. Haskell 커뮤니티는 카테고리 이론에서 영감을 얻은 여러 기술을 개발했으며, 그 중 모나드 는 가장 잘 알려져 있지만 모나드 와 혼동해서는 안됩니다 . 보다 일반적으로 고급 프로그래밍 기능은 일반적으로 도메인 이론과 범주 이론의 조합으로 처리되지만 거리에있는 Haskell 프로그래머에게는 적합하지 않습니다. 하스켈 유형의 소위 "구문 범주"는 하스켈과 범주 이론이 어떻게 일치하는지에 대한 평신도의 견해입니다.

집합 이론 (고전적 또는 건설적)은 프로그래밍 언어의 아이디어를 덜 자극하는 것으로 보인다. 물론, 구성 집합 이론은 구성 논리를 통해 프로그래밍과 연결되어 있습니다. Alex Simpson은 직관적 도메인 이론을 프로그래밍 언어에 적용한 한 가지 중요한 응용 프로그램을 사용하여 합성 도메인 이론을 작동 시켰습니다. 그러나 이것은 상당히 진보 된 것 입니다. 이 슬라이드를 볼 수도 있습니다 . Jean-Louis Krivine은 고전 세트 이론에 대한 매우 흥미로운 실현 가능성 브랜드를 개발했습니다. 이것은 고전 세트 이론과 프로그래밍을 관련시키는 좋은 방법 인 것 같습니다.

요약하면, 프로그래밍 언어 이론은 기초 기술을 사용합니다. 우리가 계산을 기본 개념으로 생각하기 때문에 이것은 놀라운 일이 아닙니다. 그러나 프로그래밍 언어가 특정 기초에 기반을두고 있다고 말하는 것은 너무 순진합니다. 사실, 기초의 삼분법 "세트 이론-유형 이론-범주 이론"은 다양한 방식으로 수학적으로 정밀하게 만들 수있는 유용한 높은 수준의 관찰이지만, 그에 대한 필요는 없습니다. 역사적인 사고입니다.


" 계산이 증거 검색 이라는 아이디어 ." 나는이 진술에 혼동된다. 증거 검색은 계산의 한 형태이지만 모든 계산이 증거 검색 인 것은 아닙니다. 이 질문의 맥락에서 증명 검증, 유형 검사도 있습니다. 더 일반적으로 간단히 5 + 3을 추가하면됩니다. 이 진술의 의미는 무엇입니까?
user56834

6

이것은 매우 복잡한 주제이며, 많은 훌륭한, 최근 하나라고 주제에 책이 있습니다 Turings 성당, 디지털 우주의 기원 또한 로직, 수학자의 엔진 및 컴퓨터의 기원은 .

컴퓨터 언어는 수십 년 동안 발전해 왔지만 수학과 컴퓨터 과학이 밀접하게 얽혀 있음을 보여주는 두 가지 독창적 인 프로그래밍 언어가 있다고 믿습니다.

  • 중단 문제 에 관한 튜링의 1936 년 논문 . 세기 초반에 힐버트가 제안한 문제를 해결하기위한 이론적 구성, 엔츠 키둔 문제 ( Entscheidungsproblem) , 즉 수학 문제를 해결하는 자동화 된 절차!

  • 동시에 개발 된 교회의 람다 미적분 은 여전히 lispscheme 과 같은 언어로 살아남습니다.

"프로그래밍 언어"를 사용하여 수학과 컴퓨터 과학의 경계를 넘어선 두 가지 주요 인물이 있습니다.

  • Shannon이 개척 한 정보 이론 은 수학과 컴퓨터 과학의 깊은 관계를 보여줍니다

  • 수학과 컴퓨터 과학 사이를 교차하는 또 다른 주요 인물은 Von Neumann 입니다. 그는 프로그램을 메모리에 저장하는 폰 노이만 아키텍처를 발명했습니다.

훨씬 더 이른 "프로그래밍 언어":

  • 영어 "컴퓨터"는 원래 숫자에 수학 연산을 사용하는 "계산기"와 비슷한 의미를 지니고 있었고 그 의미는 오늘날의 범용 프로그래밍 개념으로 실질적으로 바뀌 었습니다. 프로그래밍 언어와 초기 계산기 사이에는 연결이 있습니다.
  • 19 세기 후반과 20 세기 초의 직조기 직조에 사용 된 펀치 카드 는 직조 패턴을위한 "프로그래밍 언어"였습니다. 펀치 카드는 1960 년대에 메인 프레임을 프로그래밍하는 데 많이 사용되었습니다. 이것들은 원래는 현대의 범용 컴퓨터가 아닌 "계산기"(수학 사용)로 여겨졌습니다.
  • BabbageAda Lovelace 는 1800 년대 중반 "계산 엔진"에서 "프로그래밍 언어"의 초창기 개념을 개발했습니다.
  • 부울 대수 는 원래 Boole에 의해 발명 된 순수한 수학적 개념이었습니다.
  • 수학적 계산을위한 고대 (millenia old) 주판 은 현대 컴퓨터의 선구자로 여겨진다. 그러나 그것을 조작하는 조작은 일종의 "프로그래밍 언어"(인간이 뒤 따름)라고 말할 수 있습니다.

그러나 현대의 프로그래밍 언어에서는 추상화가 증가하고 확장됨에 따라 수십 년 동안 수학에 대한 명확하고 직접적인 연결이 다소 줄어들었지만 항상 상당히 본질적이며 어떤 방식 으로든 강화되었습니다. 예를 들어, 엄격한 유형의 Java와 같은 언어는 수학과 연결되어 있으며 ~ 1990 년대 후반부터 주류 컴퓨터 언어 (예 : c ++, Java, Ruby 등)는 기본적으로 거의 기본적으로 많은 수학적 상위 객체를 구현하기 시작했습니다. 세트, 트리 (예 : Btree 또는 해시 맵) 등과 같은 언어

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