programing

Scala의 유형 시스템은 Turing이 완료되었습니다.

javaba 2021. 1. 15. 19:11
반응형

Scala의 유형 시스템은 Turing이 완료되었습니다. 증명? 예? 혜택?


Scala의 유형 시스템이 Turing 완전하다는 주장이 있습니다. 내 질문은 다음과 같습니다.

  1. 이것에 대한 공식적인 증거가 있습니까?

  2. Scala 유형 시스템에서 간단한 계산은 어떻게 보일까요?

  3. 이것이 Scala (언어)에 어떤 이점이 있습니까? 이것이 Turing 완전한 유형 시스템이없는 언어에 비해 Scala를 어떤면에서 더 "강력하게"만들까요?

나는 이것이 일반적으로 언어 및 유형 시스템에 적용되는 것 같습니다.


Turing-complete로 알려진 SKI combinator calculus의 유형 수준 구현이 포함 된 블로그 게시물이 어딘가에 있습니다.

Turing-complete 유형 시스템은 기본적으로 Turing-complete 언어와 동일한 장점과 단점을 가지고 있습니다. 무엇이든 할 수 있지만 증명할 수있는 것은 거의 없습니다. 특히, 결국에는 실제로 무언가를 할 것이라는 것을 증명할 수 없습니다.

유형 수준 계산의 한 가지 예는 Scala 2.8의 새로운 유형 보존 컬렉션 변환기입니다. 스칼라 2.8에서, 방법은 좋아한다 map, filter등등 그들이 호출 된 것과 같은 종류의 컬렉션을 반환 보장됩니다. 그래서, 당신이 경우 , 당신은 돌아갈 하고 경우 A는 당신은 다시 얻을 .filterSet[Int]Set[Int]mapList[String]List[Whatever the return type of the anonymous function is]

이제 보시 map다시피 실제로 요소 유형을 변환 할 수 있습니다. 그렇다면 새 요소 유형을 원래 컬렉션 유형으로 표현할 수 없으면 어떻게됩니까? 예 : a BitSet는 고정 너비 정수만 포함 할 수 있습니다. 그렇다면 a가 BitSet[Short]있고 각 숫자를 문자열 표현에 매핑하면 어떻게 될까요?

someBitSet map { _.toString() }

결과는 이 될 BitSet[String],하지만 그건 불가능하다. 따라서 Scala는를 BitSet보유 할 수있는 String,이 경우 Set[String].

이 모든 계산은 컴파일 시간 동안 또는 더 정확하게는 유형 수준 함수를 사용하여 유형 검사 시간 동안 진행 됩니다. 따라서 형식이 실제로 계산되어 디자인 타임에 알려지지 않은 경우에도 형식 안전이 정적으로 보장됩니다.


Scala 유형 시스템에서 SKI 미적분을 인코딩하는 것에 대한 블로그 게시물 은 Turing 완전성을 보여줍니다.

일부 간단한 유형 수준 계산의 경우 자연수 및 덧셈 / 곱셈 을 인코딩하는 방법에 대한 몇 가지 예도 있습니다.

마지막으로 Apocalisp의 블로그에 유형 수준 프로그래밍에 대한 훌륭한 기사 시리즈가 있습니다.

참조 URL : https://stackoverflow.com/questions/4047512/the-type-system-in-scala-is-turing-complete-proof-example-benefits

반응형