구체화 유형 추론


11

직장에서 나는 동적 언어에 대한 몇 가지 유형 정보를 유추하는 임무를 맡았습니다. 다음 let과 같이 일련의 명령문을 중첩 된 표현식 으로 다시 작성합니다 .

return x; Z            =>  x
var x; Z               =>  let x = undefined in Z
x = y; Z               =>  let x = y in Z
if x then T else F; Z  =>  if x then { T; Z } else { F; Z }

일반적인 유형 정보에서 시작하여 더 구체적인 유형을 추론하려고 시도하기 때문에 자연스럽게 선택할 수있는 유형은 세분화 유형입니다. 예를 들어 조건부 연산자는 true 및 false 분기 유형의 합집합을 반환합니다. 간단한 경우에는 매우 잘 작동합니다.

그러나 다음 유형을 유추하려고 할 때 걸림돌이 발생했습니다.

function g(f) {
  var x;
  x = f(3);
  return f(x);
}

다음과 같이 다시 작성되었습니다.

\f.
  let x = undefined in
    let x = f 3 in
      f x

HM은 및 결과적으로 . 유추 할 수있는 실제 유형은 다음과 같습니다.f:IntIntg:(IntInt)Int

g:τ1τ2.(Intτ1τ1τ2)τ2

이미 오버로드 된 +연산자 의 유형을 확인하기 위해 기능적 종속성 을 사용하고 있으므로 fwithin 의 유형을 해결하기 위해이를 사용하는 것이 당연한 선택이라고 생각했습니다 g. 즉, f모든 애플리케이션에서 유형이 함께 유형을 고유하게 결정합니다 g. 그러나 자금 기반은 다양한 유형의 소스 유형에 적합하지 않습니다.

어쨌든 다형성과 정제 타이핑의 상호 작용은 문제가된다. 그래서 내가 누락 된 더 나은 접근법이 있습니까? 저는 현재 "ML의 정제 유형"을 소화하고 있으며 더 많은 문헌이나 다른 조언을 부탁드립니다.

programming-languages  logic  type-theory  type-inference  machine-learning  data-mining  clustering  order-theory  reference-request  information-theory  entropy  algorithms  algorithm-analysis  space-complexity  lower-bounds  formal-languages  computability  formal-grammars  context-free  parsing  complexity-theory  time-complexity  terminology  turing-machines  nondeterminism  programming-languages  semantics  operational-semantics  complexity-theory  time-complexity  complexity-theory  reference-request  turing-machines  machine-models  simulation  graphs  probability-theory  data-structures  terminology  distributed-systems  hash-tables  history  terminology  programming-languages  meta-programming  terminology  formal-grammars  compilers  algorithms  search-algorithms  formal-languages  regular-languages  complexity-theory  satisfiability  sat-solvers  factoring  algorithms  randomized-algorithms  streaming-algorithm  in-place  algorithms  numerical-analysis  regular-languages  automata  finite-automata  regular-expressions  algorithms  data-structures  efficiency  coding-theory  algorithms  graph-theory  reference-request  education  books  formal-languages  context-free  proof-techniques  algorithms  graph-theory  greedy-algorithms  matroids  complexity-theory  graph-theory  np-complete  intuition  complexity-theory  np-complete  traveling-salesman  algorithms  graphs  probabilistic-algorithms  weighted-graphs  data-structures  time-complexity  priority-queues  computability  turing-machines  automata  pushdown-automata  algorithms  graphs  binary-trees  algorithms  algorithm-analysis  spanning-trees  terminology  asymptotics  landau-notation  algorithms  graph-theory  network-flow  terminology  computability  undecidability  rice-theorem  algorithms  data-structures  computational-geometry 

답변:


9

고차원 언어에 대한 정적 불변량을 추론하는 것은 이론 상으로는 결정 불가능할뿐만 아니라 실제로는 매우 어렵다는 사실을 발견했습니다. 귀하의 질문에 대한 명확한 대답이 무엇인지 잘 모르겠지만 몇 가지 사항에 유의하십시오.

  • 다형성과 세분화 유형은 특히 가장 일반적인 유형의 개념을 잃어버린 것처럼 잘 작동하지 않습니다. 결과적으로 다형성이있는 정제 유형을 기반으로하는 분석은 전체 구성 분석 (구성 분석이 아닌)과 휴리스틱을 사용하여 프로그램에 할당 할 유형을 결정해야 할 수 있습니다.

  • 구체화 유추 유형과 다음과 같은 강력한 관계가 있습니다.

    1. 프로그램의 추상 해석 계산

    2. 명령형 언어로 계산 된 루프 불변량.

이를 염두에두고 정제 유형의 유추에 대한 몇 가지 무질서한 참조가 있습니다. 구체화 유형에는 여러 가지 풍미가 있습니다. 유도 데이터 형식의 구체화에 더 관심이있는 경향이 있으므로이 목록은 그 방향으로 치우칠 수 있습니다.

  1. Cousot & Cousot 의 고전 : 고차 주문 기능 프로그램의 관계형 추상 해석 부터 시작하십시오 . 관계형 의미론을 사용하여 추상 해석을 고차원 프로그램으로 확장하는 방법에 대해 설명합니다.

  2. Rhondon, Kawaguchi 및 Jhala의 액체 유형 . 이것은 매우 진화 된 작업으로, ML 스타일 프로그램에 대한 보안 주석 (예 : 배열 바운드 검사)을 유추하기 위해 HM과 조건 자 세분화 유형을 결합합니다. 추론은 2 단계로 진행됩니다. 첫 번째는 형식 주석의 HM 추론으로, 수행 할 구체화 선택을 안내합니다.

  3. 나는 아마도에 푸르네, Swarmy, 첸, Strub ...에 의해 작업 언급해야한다 의 확장 하지만 대한 암호화 프로토콜과 알고리즘 검증을 목표로, 액체 종류의 접근에 유사한 것 분산 컴퓨팅. 이 경우 주석 유추에 대해 얼마나 많은 출판 작품이 있는지 잘 모르겠습니다.FF#

  4. Chin 및 Khoo의 특정 유형의 세분화 유형 (크기 주석이있는 유형)을 유추하는 것에 관한 멋진 논문 이 있습니다 .

  5. ATS의 프로그래밍 언어는 다양한 개선을 허용하고 그들과 함께 프로그램을 작성하기위한 기능을 제공하는 시스템입니다. 그러나, 주석은 임의로 복잡 할 수 있고 (따라서 결정 불가능한) 사용자 상호 작용을 요구할 수있다. 이러한 유형에 대한 추론의 형식이 있다고 생각하지만 어떤 기사를 추천해야할지 모르겠습니다.

  6. 마지막 으로 Ole Agesen의 The Cartesian Product Algorithm 입니다. 구체화 유형을 명시 적으로 언급하지는 않았지만 이는 문제를 해결하는 데 가장 가까운 작업 인 것 같습니다. 초록에서 파라 메트릭 다형성에 대한 언급에 속지 마십시오. 이들은 가능한 원자 유형의 튜플 인 콘크리트 유형 을 유추하는 것으로 보입니다 . 효율성에 중점을 둡니다. 이 기사를 먼저 읽고 문제가 해결되는지 확인하십시오.

참고 사항 : 교차 유형이있는 유형 유추는 결정하기가 매우 어려울 수 있습니다. 가장 간단한 형태에서 lambda-교차 유형이있는 용어는 정확하게 정규화되는 용어입니다. 그들 주위를 부드럽게 밟아 :)λ

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