왜 정수 대신 자연이 필요한가?


28

프로그래밍 언어 이론 및 유형 이론 (예 : J. Mitchell, 프로그래밍 언어의 기초 및 B. Pierce, 유형 및 프로그래밍 언어)에 관한 저술가들이 왜 자연수를 좋아하는지 관심이 있습니다. 단순 유형 람다 미적분학, 특히 PCF 프로그래밍 언어에 대한 설명은 일반적으로 Nat와 Bool을 기반으로합니다. 범용 산업용 PL을 사용하고 가르치는 사람들에게 자연 대신 정수를 다루는 것이 훨씬 더 자연 스럽다. PL 이론가가 nat를 선호하는 몇 가지 이유를 언급 할 수 있습니까? 그 외에도 조금 덜 복잡합니다. 근본적인 이유가 있습니까? 아니면 전통을 존중하는 것입니까?

UPD 자연의 “기초”에 대한 모든 의견들 : 나는 그 멋진 것들에 대해 잘 알고 있지만, PL 이론의 유형 이론에서 그러한 속성들을 갖는 것이 정말로 중요한 경우의 예를보고 싶어합니다. 예를 들어 널리 언급 된 유도. 기본 1 차 논리와 같이 어떤 종류의 논리 (간단히 LC를 입력 함)가있는 경우 유도 유도를 사용하지만 유도 트리 (람다로도 포함)에 유도를 사용합니다.

내 질문은 기본적으로 프로그래밍 언어에 대한 몇 가지 기본 이론을 얻고 자하는 산업계 사람들로부터 나옵니다. 그들은 자신의 프로그램에 정수를 가지고 있었지만 공부하고있는 이론 (우리의 경우에는 유형 이론)에 대한 구체적인 논증과 적용없이 nat 만 사용하여 언어를 공부하는 이유에 대해 꽤 실망했습니다.


흥미로운 질문이지만 연구 수준의 질문이 아니라고 생각합니다.
Raphael

4
그것은 아닙니다. 그러나 우리가 받아들이는 일종의 큰 그림 질문입니다.
Suresh Venkat

1
어떤 식 으로든 음이 아닌 정수 세트가 후자에는 존재하지 않는 0 값의 고유 한 특성으로 인해 자연수보다 훨씬 근본적 일 수 있는지 궁금합니다. 또한 0의 중요성을 감안할 때 디지털 컴퓨터의 기본 숫자 유형을 선택할 때 이것이 더 유효하다고 제안합니다.
Richard Cook

나는 당신의 UPD를 이해하지 못합니다 . Naturals는 정수보다 더 근본적이며 답은 이것이 왜 그런지를 보여주는 예입니다.
Radu GRIGore

재 : UPD. 왜 "업계의 사람들"이 "실망 스럽다"고 확신 할 수 없습니다. (나는 업계에서 저의 경력을 보냈습니다.) 왜 이론이 이미 익숙한 것의 명백한 확장이되어야한다고 기대해야합니까? 정수 변수와 마찬가지로 산업에서 공통적 인 특정 사안이 깊은 이론적 사안보다 "역사적 이유"에 더 많은 것이 일반적입니다.
Marc Hamann

답변:


24

짧은 대답 : 자연은 첫 번째 한계 서수입니다. 그러므로 그들은 공리 론적 집합 이론 (예를 들어, 무한의 공리가 존재한다고 주장한다)과 논리에서 중심적인 역할을하며, PL 이론가들은 논리 학자들과 근본적인 선입견을 공유하는 경향이있다. 우리는 전체 정확성, 종료 및 유사한 특성을 증명하기 위해 유도 원리에 접근하기를 원하며 자연계는 자연스럽게 잘 정돈 된 선택입니다.

그러나 유한 너비 이진 정수가 덜 멋진 객체라는 것을 암시하고 싶지 않습니다. 그것들은 p-adics를 나타내며, 숫자 이론과 조합론에서 power series 방법을 사용할 수있게합니다. 이것은 PL보다 알고리즘에서 그 중요성이 더 눈에 띄게된다는 것을 의미합니다. 왜냐하면 우리가 종료보다는 복잡성에 대해 더 많은 관심을 가지기 때문입니다.


20

Naturals는 정수보다 훨씬 더 근본적인 개념입니다.

자연에 대해 유도가 발생하며 정수는 단항 역 연산자를 추가하여 자연에서 추출 할 수 있습니다.

나는 왜 초기 프로그래밍 언어 (및 레지스터 머신) 설계자들이 정수를 기본 데이터 타입으로 부수 화하여 자연에서 쉽게 파생 할 수 있었을까요?

정수를 우아하게 처리 할 수있는 멋진 바이너리 인코딩이 있었기 때문이라고 생각합니다. ;-)

프로그래밍 방식 정수의 음수 범위를 무시하려는 빈도를 생각하고 손실 된 비트를 복구하기 위해 부호없는 정수 유형을 갖는 임펄스를 고려하십시오.


5
또 다른 이유 : 교회 숫자와 같은 것을 원한다면 음의 정수는 함수 반전을 나타내야합니다. 따라서이 문맥에서 정수는 계산 가능하게 형용사 함수의 미적분학에서 더 자연 스러울 것입니다.
당 Vognsen

@ Per Vognsen : 당신이 어떤 식으로 논쟁하고 있는지 확실하지 않습니다. 그러나 계산 가능한 형용사 함수는 대부분 임의의 계산 가능한 함수보다 덜 기본적이라고 말하는 것이 안전하다고 생각합니다. ;-)
Marc Hamann

숫자 계층 구조의 최상위에있는 복소수 자연수-> 정수-> 유리수-> 실수-> 복소수는 "보다"대수적인 속성을 가지기 때문에 다른 것보다 더 근본적입니다. 그것들은 과학 어디에나 있지만 수학의 "기초"에는 눈에 띄지 않습니다. 따라서 더 "기본적인"정수 또는 자연수에 대한 답은 알고리즘 또는 대수학에 따라 달라집니다.
Tegiri Nenashi

이 사이트는 TCS 사이트이므로 컴퓨터 과학에 대한 견해를 가질 수 있다고 생각합니다. ;-) 계산적으로, 그 계층은 진보적이다 : 각각의 새로운 엔트리는 문자 그대로 이전의 엔트리에 기초한다. "기본"은 일반적으로 기본에있는 무언가를 의미하기 때문에, 본성 끝은 그 제목을 부여 할 수있는 권리라고 생각합니다.
Marc Hamann

17

NZ

NZ


11

또 다른 이유는 (이미 주어진 것들과 관련이 있지만,이 답변은 새로운 정보를 추가합니다) 자연에 대한 매우 간단하고 몫이없는 구성이 있다는 것입니다. . 확장되지 않은 것은 몫이없는 정수 구성을 만드는 것이 얼마나 어려운지 입니다.

높은 보증을 원하는 곳에서 더 많은 프로그래밍을할수록 자연이 더 필요하고 정수가 미리 정의되어있어서 정말 고통 스럽습니다.


자연어의 기본 유형을 가진 언어가 있습니다.
Raphael

@Raphael : 알고 있습니다. 그러나 내가 달리 좋아하는 것은 아닙니다 (즉, Haskell과 OCaml). Agda 또는 Coq에서 '프로그래밍'을 시작할 준비가되지 않았습니다.
Jacques Carette

몫에 대한 나쁜 점은 무엇입니까?
David Harris

3
몫은 의미론에서 훌륭합니다. 실제 계산과 구체적인 표현에서 다루기가 훨씬 어렵습니다. Coq, Isabelle, Agda (일반적인 유형 이론) 등에서 그것들을 다루는 방법에 대한 수많은 논문이 있습니다. 나는 모든 공동체에서 몫이 '실제로'다루기 힘든 고통이라는 것은 모든 공동체의 민속 지식이라고 생각했습니다.
Jacques Carette 1

2
나는 이것이 무리의 가장 강력한 대답이라고 생각합니다. Naturals는 가장 간단한 사소한 유도 데이터 유형입니다. 자연수에 대한 정의를 제공하고 간단한 속성을 입증 한 후에는 목록 또는 트리와 같이 더 복잡한 유도 데이터 유형을위한 길을 개척했습니다.
코디

7

PL 이론가들이 정수 대신 자연을 선호하는 좋은 이유가 있습니까? 프로그래밍 언어 의미론에 대한 교과서에는 몇 가지가 있지만 필요한 기술적 인 이유는 없다고 생각합니다. PL 이론에서 데이터 유도가 중요한 종속 유형 시스템 이외의 다른 곳은 생각할 수 없습니다. Mike Gordon , David Schmidt , Bob TennentJohn Reynolds의 다른 교과서는 그렇지 않습니다. (그리고이 책들은 아마도 범용 산업용 PL에 관심이있는 사람들을 가르치는 데 훨씬 적합 할 것입니다!)

따라서 거기에는 필요 하지 않다는 증거가 있습니다 . 사실, 좋은 PL 이론 교과서 는 프로그래밍 언어의 기본 유형에서 파라 메트릭 이어야한다고 주장 할 것입니다 .


6

내추럴과 부울 및 그에 대한 작업은 소위 교회 숫자 (및 교회 부스라고도 함)와 같이 간단한 람다 미적분학으로 간단하게 인코딩 할 수 있습니다. 분명히 수행 할 수는 있지만 어떻게 정수를 잘 인코딩할지는 명확하지 않습니다.


나는 먼저 모든 유형의 람다 미적분학을 의미했습니다. 내가 상단 포스트에서 언급 한 책의 과정은 그것을 기반으로합니다. 나는 형식화되지 않은 람다가 오늘날 형식 이론과 PL의 이론에 그렇게 중요하지 않은 것 같아요. 아무튼 감사 해요!
Artem Pelenitsyn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.