Suy ra các loại sàng lọc


11

Tại nơi làm việc, tôi được giao nhiệm vụ suy luận một số thông tin về ngôn ngữ động. Tôi viết lại các chuỗi các câu lệnh thành các letbiểu thức lồng nhau , như vậy:

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 }

Vì tôi bắt đầu từ thông tin loại chung và cố gắng suy luận các loại cụ thể hơn, nên lựa chọn tự nhiên là các loại sàng lọc. Ví dụ, toán tử có điều kiện trả về một tập hợp các loại nhánh đúng và sai của nó. Trong trường hợp đơn giản, nó hoạt động rất tốt.

Tôi đã gặp phải một trở ngại, tuy nhiên, khi cố gắng suy ra loại sau:

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

Được viết lại thành:

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

HM sẽ suy ra và do đó . Loại thực tế tôi muốn có thể suy ra là:f:IntIntg:(IntInt)Int

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

Tôi đã sử dụng các phụ thuộc chức năng để giải quyết loại +toán tử quá tải , vì vậy tôi cho rằng đó là một lựa chọn tự nhiên để sử dụng chúng để giải quyết loại fbên trong g. Đó là, các loại ftrong tất cả các ứng dụng của nó cùng xác định duy nhất loại g. Tuy nhiên, hóa ra, các quỹ không cho vay rất nhiều vào số lượng các loại nguồn khác nhau.

Dù sao, sự tương tác của đa hình và gõ tinh chế là vấn đề. Vì vậy, có một cách tiếp cận tốt hơn tôi đang thiếu? Tôi hiện đang tiêu hóa các loại sàng lọc của ML cho ML và sẽ đánh giá cao nhiều tài liệu hơn hoặc các gợi ý khác.

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 

Câu trả lời:


9

Bạn đã vấp phải sự thật rằng suy luận về bất biến tĩnh đối với các ngôn ngữ bậc cao là khá khó khăn trong thực tế, ngoài lý thuyết là không thể giải quyết được. Tôi không chắc câu trả lời dứt khoát cho câu hỏi của bạn là gì, nhưng lưu ý một số điều:

  • Đa hình và các loại tinh chế hoạt động kém với nhau, như bạn đã lưu ý, đặc biệt là khái niệm về hầu hết các loại chung bị mất. Hậu quả của điều này là các phân tích dựa trên các loại sàng lọc với sự hiện diện của đa hình có thể cần phải chọn giữa phân tích toàn chương trình (trái ngược với phân tích thành phần) và sử dụng phương pháp phỏng đoán để quyết định loại bạn muốn gán cho chương trình của bạn.

  • Có một mối quan hệ mạnh mẽ giữa các loại sàng lọc suy luận và:

    1. Tính toán giải thích trừu tượng chương trình của bạn

    2. Tính toán bất biến vòng lặp trong một ngôn ngữ bắt buộc.

Với ý nghĩ này, đây là một vài tài liệu tham khảo vô tổ chức về suy luận của các loại sàng lọc. Lưu ý rằng có nhiều hương vị khác nhau của các loại sàng lọc: Tôi có xu hướng quan tâm nhiều hơn đến các sàng lọc của các kiểu dữ liệu quy nạp, vì vậy danh sách này có thể bị sai lệch theo hướng đó.

  1. Bắt đầu với các tác phẩm kinh điển: Giải thích trừu tượng quan hệ về các chương trình chức năng bậc cao của Cousot & Cousot. Điều này giải thích làm thế nào để mở rộng giải thích trừu tượng cho các chương trình bậc cao hơn bằng cách sử dụng ngữ nghĩa quan hệ.

  2. Các loại chất lỏng của Rhondon, Kawaguchi và Jhala. Đây là một công việc rất phát triển, kết hợp giữa HM và một loại sàng lọc vị ngữ để suy ra các chú thích bảo mật (ví dụ kiểm tra ràng buộc mảng) cho các chương trình kiểu ML. Việc suy luận tiến hành theo 2 bước; đầu tiên là suy luận của các chú thích kiểu, hướng dẫn lựa chọn các sàng lọc để thực hiện.

  3. Có lẽ tôi cũng nên đề cập đến công việc của Fournet, Swarmy, Chen, Strub ... trên , một phần mở rộng của có vẻ giống với cách tiếp cận loại chất lỏng, nhưng với mục tiêu xác minh các giao thức và thuật toán mã hóa cho phân phối máy tính. Tôi không chắc có bao nhiêu tác phẩm được xuất bản dựa trên suy luận của các chú thích trong trường hợp này.F #FF#

  4. Có một bài báo hay của Chin và Khoo về suy luận về một loại sàng lọc cụ thể: các loại có chú thích kích thước.

  5. Các ATS ngôn ngữ lập trình là một hệ thống cho phép cải tiến khác nhau và cung cấp cơ sở vật chất cho việc viết chương trình với họ. Tuy nhiên, các chú thích có thể phức tạp tùy ý (và do đó không thể giải quyết được) và do đó có thể yêu cầu tương tác người dùng. Tôi tin rằng có một dạng suy luận cho các loại này, tuy nhiên tôi không chắc nên đề xuất bài viết nào.

  6. Cuối cùng, nhưng không kém phần quan trọng Thuật toán sản phẩm của Cartesian , bởi Ole Agesen. Mặc dù không đề cập đến các loại sàng lọc một cách rõ ràng, đây dường như là công việc gần nhất để giải quyết vấn đề mà bạn dường như có. Đừng để bị lừa khi đề cập đến đa hình tham số trong bản tóm tắt: họ tìm cách suy ra các loại bê tông , vốn chỉ là các bộ nguyên tử có thể có. Nhấn mạnh được đưa ra về hiệu quả. Tôi khuyên bạn nên đọc bài viết này trước để xem nó có giải quyết được vấn đề của bạn không.

Lưu ý bên lề: loại suy luận với sự hiện diện của các loại giao lộ có thể rất khó giải quyết: ở dạng đơn giản nhất, -terms với loại giao cắt chính xác là các thuật ngữ chuẩn hóa mạnh mẽ. Bước đi nhẹ nhàng xung quanh họ :)λ

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.