SML의 함수와 범주 이론의 관계는 무엇입니까?


24

답변 에서 Andrej Bauer의 진술과 같은 생각을 따라

Haskell 커뮤니티는 카테고리 이론에서 영감을 얻은 여러 기술을 개발했으며, 그 중 모나드 는 가장 잘 알려져 있지만 모나드 와 혼동해서는 안됩니다 .

사이의 관계를 무엇입니까 SML과 분류 이론은?

Haskell 또는 OCaml과 같은 다른 언어의 펑터에 대한 세부 정보를 모르기 때문에 가치 정보가 있으면 다른 언어 섹션도 추가하십시오.


1
확실한 대답을 위해 Dave McQueen 에게 이메일을 보낼 수 있다고 생각합니다.
Gilles 'SO- 악마 그만해'

답변:


14

카테고리는 객체가 (작은) 카테고리이고 형태가 작은 카테고리 간의 펑터 인 (큰) 카테고리를 형성합니다. 이런 의미에서 범주 이론의 펑 터는 "더 큰 크기의 형태"입니다.

ML functors는 단어의 범주적인 의미에서 functors가 아닙니다. 그러나 그것들은 형식 ​​이론적 의미에서 "더 큰 크기의 함수"입니다.

일반적인 프로그래밍 언어의 구체적인 데이터 유형을 "작은"것으로 생각하십시오. 따라서 int, bool, int -> int, 등 C. 잘 구조체 우리는라는 대규모 컬렉션에 모든 데이터 유형을 수집 할 수 있습니다으로 자바의 클래스는, 작은, 작은 Type. 같은 유형의 생성자 list또는 array발 함수 TypeType. 따라서 "큰"기능입니다. ML functor는 약간 더 복잡한 큰 함수입니다. 인수로 몇 가지 작은 것을 받아들이고 몇 가지 작은 것을 반환합니다. "몇몇 작은 것들이 합쳐진다"는 ML의 구조 로 알려져 있습니다. Martin-Löf 유형 이론의 관점에서 우리는 작은 유형 의 우주 Type 를 가지고 있습니다. 큰 유형은 일반적으로 kind 라고 합니다. 그래서 우리는 :

  1. 값 유형의 소자들 (예 :이다 42 : int)
  2. 종류의 요소 Type(예 : int : Type)
  3. ML 서명은 종류 (예 : 있습니다 OrderedType)
  4. 타입 생성자 종류의 소자들 (예 :이다 list : Type -> Type)
  5. ML 철골 구조를 가지 요소를 (예 :이다 String : OrderedType)
  6. ML 펑은 가지와 기능을 (예 :이다 Map.Make : Map.OrderedType -> Make.S)

이제 ML과 카테고리 사이에 유추가 펑터에 해당하는 유추를 그릴 수 있습니다. 그러나 ML의 데이터 유형은 "모르 프리스가없는 작은 범주"와 비슷합니다. 즉, 범주보다 세트가 더 많습니다. ML과 이론 사이의 비유를 사용할 수 있습니다.

  1. 데이터 유형은 집합과 같습니다
  2. 종류는 이론 이론과 같다
  3. 펑 터는 클래스 크기 함수와 같습니다

15

표준 ML 구조는 대수 와 유사합니다 . 그것의 특징 은 비슷한 모양 의 대수 의 전체 클래스를 설명합니다 .

에프:영형아르 자형에프:에이아르 자형

이러한 아이디어의 대부분은 Burstall과 Goguen이 CLEAR ( DBLP 페이지 의 c5 및 c6 참조)라는 사양 언어를 디자인하는 일련의 논문에서 작성되었습니다 . David MacQueen은 당시 Burstall 및 Sannella와 공동으로 작업했으며 친숙했습니다 문제와 함께. 표준 ML 모듈 시스템은 이러한 아이디어를 기반으로합니다.

대부분의 사람들이 궁금하게 생각하는 것은 무엇입니까? 범주 이론적 펑터에는 객체 부분과 형태 부분이 있습니다. 표준 ML 기능이 동일합니까? 대답은 예와 아니오입니다.

  • 구조가 1 차인 경우 답의 예 부분이 적용됩니다. 그런 다음 동일한 서명의 서로 다른 구조간에 동질성이 있으며 표준 ML 펑 터는이를 자동으로이를 결과 서명의 동질성에 매핑합니다.
  • 응답의 NO 부분은 구조가 고차 연산 일 때 적용됩니다.

이것은 표준 ML이 범주 이론에서 벗어 났음을 의미합니까? 나는 그렇게 생각하지 않습니다. 오히려 표준 ML이 올바른 일을하고 있다고 생각하고 카테고리 이론은 아직 따라 잡지 않았습니다. 카테고리 이론은 아직 고차 함수를 다루는 방법을 모른다. 언젠가는 그럴 것이다.


"분류 이론은 아직 고차 함수를 다루는 방법을 모른다." 카테고리 이론이 모든 것을 기초로 할 수 있다고 생각했기 때문에 다른 질문처럼 들립니다.
Guy Coder

2
(엑스)=[엑스엑스]나는기음이자형엑스=(엑스)(엑스)
Uday Reddy 2013

나는 실제로 그것을 진짜 질문으로 만들었다 .
Guy Coder

"표준 ML 구조는 대수 와 유사하다 ". 펑터가 그보다 약간 더 일반적인 것은 아닌가? 구조가 관련되지 않은 객체 (유형, 값 및 함수)를 포함하는 것을 막는 것은 없습니다. 대수를 형성하지 않습니다.
didierc 2019

2
@didierc 대수에 대한 서명 은 하나 이상의 종류 (예 : 유형)와 하나 이상의 연산 (예 : 함수) 및 선택적으로 일부 공리 (사양과 같은)로 구성됩니다. 서명에 대한 대수 는 공리가 만족되도록 해당 종류에 대한 특정 세트와 해당 작업에 대한 특정 기능을 선택합니다. SML 시그니처와 구조는 SML이 고차 연산을 허용하지만 대수는 그렇지 않다는 점을 제외하면 정확하게 그런 것입니다.
Uday Reddy

3

제가 아는 한,이 사이 형식적인 관계 카테고리 이론과 ML에서 (SML 또는 OCaml의, 그들은 여기에 우리의 목적을 위해 충분히 가까이있어 없음).

범주 이론에서 펑 터는 객체에서 작동하는 함수입니다. 그것들은 종종 요소에서 작동하는 기능인 형태의 한 수준 위에 있습니다 (대부분의 범주에는 대수 구조가 설정된 객체와 이러한 구조 사이의 동형 화살표가 있습니다). ML functor는 핵심 언어 값에서 작동하는 기능보다 한 수준 위의 모듈에서 작동하는 기능입니다. 나는 그 유사점이 여기에서 멈춘다 고 생각합니다.

ML 펑 터는 1985 년 다형성 뉴스 레터실린 표준 ML (citeseerx) 용 모듈 개정판에서 Dave McQueen이 침례를 받았습니다 (원본은“파라 메트릭 모듈”이라는 표현을 사용했습니다. 나중에 출판물은 형용사“파라미터 화 된”을 사용하는 경향이 있습니다). 불행히도, 나는 그 종이의 사본을 찾을 수 없습니다. 그의 1986 년 논문에서 모듈 형 구조를 표현하기 위해 의존형 사용하기 (citeseerx)에서 그는 설립 된 이름을 알려줍니다.


2
펑 터는 객체의 기능 일뿐만 아니라 형태도 매핑합니다. 펑 터는 "범주 간 형태"입니다.
Andrej Bauer

@AndrejBauer 네, functors는 객체의 함수입니다. 객체의 모든 기능이 기능은 아니지만 여기서는 두 번째 고려 사항입니다.
Gilles 'SO- 악마 그만두 다'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.