프로그래밍에 대한 범주 이론 (not)?


21

Haskell과 그 밖의 순수한 FP 언어를 배우고 나서 나는 범주 이론에 대해 읽기로 결정했습니다. 카테고리 이론을 잘 이해 한 후에는 카테고리 이론의 개념을 사용하여 프로그램 설계 에 대해 어떻게 생각할 수 있는지에 대해 생각하기 시작했습니다 .

범주 이론을 프로그램 설계 와 관련시키려는 많은 시도가 실패한 후 나는 다음과 같은 결론에 도달했다.

  • 범주 이론은 프로그래밍 언어를 설계 할 때 유용 합니다 .
  • 범주 이론은 프로그램을 디자인 할 때 사용하는 것이 아닙니다 (범주 원칙에 따라 설계된 언어를 사용할 때도 ). 예를 들어 : Haskell에서 프로그래밍 할 때는 유형, 유형 생성자, 함수, 고차 함수 등을 사용하여 범주 이론 개념이 아닌 프로그램을 설계합니다.

요약하면 아래 계층 시스템이 있습니다 (순서가 낮음에서 높음으로).

카테고리 이론-> 프로그래밍 언어-> 프로그램

특정 계층에서 직접 기본 계층 의 개념을 사용합니다 .

이 이해가 맞습니까? 그렇지 않다면 프로그램설계 할 때 카테고리 이론 개념을 직접 사용할 수 있다고 생각 되는 경우 시연되는 기사 나 블로그 게시물을 참조하십시오.

참고 : 프로그램디자인 한다는 것은 동시성, 병렬 처리, 반응, 메시지 전달 등과 같은 다양한 개념을 기반으로 프로그램디자인하는 것을 의미합니다.


1
모나드를 프로그래밍 언어 나 프로그램의 일부로 생각하십니까? 화살?
Dave Clarke

2
이것은 적어도 부분적으로 철학적 질문으로 저를 공격합니다. 하나의 정답이 있는지 확실하지 않습니다. 범주 이론 중 하나는 프로그래밍하는 동안 얻은 직관을 적용하고 다른 하나는 다른 사고 방식을 선호합니다.
Raphael

2
작성되는 대부분의 프로그램은 범주 이론에서 영감을 얻지 않은 프로그래밍 언어를 사용합니다. 내가 알 수있는 한, 일반 프로그래머는 범주 이론을 알지 못하므로 대부분의 프로그램 (운영 체제 및 브라우저 포함)은 더 높은 수학에서 영감을 얻지 못했습니다.
Yuval Filmus

1
@YuvalFilmus : 제 질문은 함수형 프로그래밍 언어를 목표로합니다
Ankur

1
일부이 질문을 참조 monoids의 CS 애플리케이션
vzn

답변:


13

물론 그것은 어떤 종류의 프로그램을 디자인하려고하는지에 달려 있습니다.

이모의 초콜릿 가게를위한 회계 프로그램을 디자인하고 있다면 카테고리 이론이 많이 사용될 것입니다.

그러나 범주 이론이 프로그램 설계에 매우 유용한 상황도 있습니다 (데이터 구조, 라이브러리 등도 의미합니다). 이러한 상황은 주로 관련된 프로그램이 수학적 특성 일 때 발생합니다.

수학적 분석에서 발생하는 정확한 실수와 다른 구조로 계산하는 프로그램을 작성하려면 , 복잡한 수학 객체 (예 : 미분 함수, 매니 폴드 등) 를 올바르게 구현하는 것이 무엇을 의미하는지에 대한 답이 필요합니다 . ). 여기에서 일부 범주 이론과 논리를 아는 데 도움이됩니다. 수학 구조의 정의를 해당 데이터 구조의 사양 및 구현으로 변환하는 체계적인 방법을 제공하기 때문입니다. 찾아야 할 유행어는 실현 가능성 이론 입니다. 그러나 이것은 하나의 예일뿐입니다.

카테고리 이론이 어떻게 유용한 지 확인하는 가장 좋은 방법은 많은 카테고리 이론 (일반적으로 수학)을 알고있는 사람들이 작성한 프로그램을 보는 것입니다. 이것의 명백한 예는 예를 들어 Martín Escardó와 그의 불가능한 기능입니다.

M. Escardó와 P. Oliva : 연속적인 게임, Tychonoff 정리 및 이중 부정 시프트가 공통 적이고 수학적으로 구조화 된 기능적 프로그래밍 2010, ACM Press에서 가지고있는 것. (동반자 Haskell 및 Agda 파일 과 함께 )

이것은 범주 이론 일뿐만 아니라 논리와 토폴로지라고 불평 할 수 있습니다. 그러한 불만은 심각하게 잘못 인도 될 것입니다. 최고의 범주 이론은 항상 다른 것들과 혼합되어 있습니다.

마지막으로, 나는 스스로 할당 한 약간의 독서에 기초한 사물의 본질에 대한 대단한 결론을 도출하지 않도록 권고합니다.


바로 내 요점입니다. 회계 소프트웨어를 설계하는 경우 유형 시스템이 설계 언어가됩니다. 수학 소프트웨어를 설계하는 경우에도 유형 시스템을 사용하여 범주 이론 개념을 나타냅니다. 기본적으로 형식 이론 또는 형식 시스템이 범주 이론보다 일반적인 추상화임을 나타냅니다.
Ankur

1
그것은 우스운 진술이다. 그런 말을하기 전에 더 많은 것을 배워야한다고 생각합니다. 아마도 당신은 existentialtype.wordpress.com/2011/03/27/the-holy-trinity로 시작할 수 있습니다
안드레이 바우어에게

나는 연구원, 박사, 과학자, 수학자 또는 카테고리 이론가가 아니므로 내 진술에 대해 화 내지 마십시오. 그들은 과학 저널이나 연구 논문에 출판되지 않을 것입니다. 나는 동전의 다른면을 이해하려고하는 프로그래머 일뿐입니다. 그건 그렇고, 링크 주셔서 감사합니다.
Ankur

1
나는 이것이 당신이하는 것처럼 결론을 도출하는데주의를 기울여야한다고 제안하는 이유를 정확하게 알고 있습니다. 당신은 단순히 그러한 결론을 내리는 데 필요한 정보를 가지고 있지 않습니다. 그리고 이것이 제가 타입 이론과 카테고리 이론의 관계에 관한 기술적 인 책이 아니라 Bob Harpher의 블로그 게시물을 언급 한 이유이기도합니다. 나는 도움을 주려고 노력하고 있지만, 전체 수학 분야의 본질에 대한 위대한 결론을 내릴 때 당신으로부터 조금 더 많은 유보를 기대할 것입니다.
안드레이 바우어

예를 들어, "유형 이론은 범주 이론보다 더 일반적인 추상화"라고 언급했습니다. 이것은 약간의 지식을 바탕으로하지 말아야 할 진술의 예입니다. 나는이 분야에서 전문적으로 일하며 심지어 그런 결론이나 반대 결론을 내릴 때 매우 신중할 것입니다.
Andrej Bauer

6

사람들은 CT를 사용하여 데이터 유형을 설명했습니다.

  1. 데이터 유형은 객체가 유한 한 (사양 언어) 유형의 시퀀스이고 화살표가 데이터 유형 작업의 투영 또는 구성 인 특정 범주에 의해 정의되었습니다. 예를 들어, 객체는 도메인이며 스택 푸시 작업의 공동 도메인입니다. 이것은 구문을 제공하지만 의미의 개념은 아직 없습니다.
  2. 다시 말해, 대수, 즉 유형의 예는 이론에서 (작은) 세트의 범주 인 Ens의 펑터입니다. 러셀의 역설을 피하기 위해 "작은"을 사용하지만 대부분 중요하지 않습니다.
  3. 범주의 폐쇄 속성은 논리 이론의 패밀리에 해당합니다. 예를 들어 이론 범주가 제품에서 닫히면 데이터 유형을 방정식으로 축약화할 수 있습니다. 풀백을 수행하여 이론 범주가 닫히면 데이터 유형을 혼 문장으로 축약화할 수 있습니다.

아무도 더 이상 이것에주의를 기울이는 것이 확실하지 않습니다. 나는 그렇게 생각할 것이다 이것 과 그 링크가 더 자세히 설명 할 .

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