Mục tiêu đằng sau giải thích trừu tượng trong các ngôn ngữ lập trình là gì?


9

Bây giờ tôi đang cố gắng để hiểu rõ hơn "diễn giải trừu tượng" trong các ngôn ngữ lập trình là gì. Tôi tìm thấy một chương sách hay giải thích ý tưởng mở rộng miền với một yếu tố ít cố định nhất, bốn tiên đề mang lại một điểm cố định cho một hàm liên tục, v.v. Tôi hiểu các chi tiết kỹ thuật này (mặc dù tôi không chắc chắn "diễn giải trừu tượng" chính xác đề cập đến trong toàn bộ sơ đồ này là gì).

Những gì tôi không chắc chắn là những gì thúc đẩy việc sử dụng giải thích trừu tượng? Có phải nó chỉ xác định các điểm cố định cho các chức năng tính toán? Là động lực chính đến từ việc đệ quy trong hầu hết các ngôn ngữ lập trình?

Cũng sẽ vui mừng khi có được một số tổng quan cấp cao, đủ sâu về mặt kỹ thuật cho một người có bằng về khoa học máy tính. Tôi thấy trang Wikipedia khá đáng lo ngại.


trích dẫn cuốn sách plz. diễn giải trừu tượng
vzn

Bạn có thể vui lòng đề cập đến chương sách bạn đang đọc?
Vijay D

Wikipedia không phải lúc nào cũng là nơi tốt nhất để hướng dẫn về các chủ đề kỹ thuật hơn.
Vijay D

@Vijay và vzn Đó là một điều tôi đã xem: cs.ber siêu.edu / ~ necula / cs263 / handouts / AbramskiAI.pdf
newToPL

Câu trả lời:


16

Giải thích trừu tượng là một khái niệm rất chung chung và tùy thuộc vào người bạn hỏi, bạn sẽ nhận được những giải thích khác nhau vì các khái niệm linh hoạt thừa nhận nhiều quan điểm. Quan điểm trong câu trả lời này là của tôi và tôi sẽ không cho rằng nó là chung chung.

Độ cứng tính toán như một động lực

Hãy bắt đầu với các vấn đề quyết định, giải pháp có cấu trúc như thế này:

vấn đề quyết định

Thường có NP-hard dưới ràng buộc vào thủ tục. Kiểm tra các thuộc tính ngữ nghĩa của các chương trình thậm chí là không thể giải quyết được. Chúng ta có thể làm gì?

Chúng ta hãy thực hiện hai quan sát. Đầu tiên, đôi khi chúng ta có thể giải quyết các trường hợp vấn đề cụ thể ngay cả khi chúng ta không thể giải quyết vấn đề chung. Thứ hai, các ứng dụng như tối ưu hóa trình biên dịch chấp nhận xấp xỉ trong đó một trình biên dịch loại bỏ một số nhưng không phải tất cả các nguồn không hiệu quả đều hữu ích. Để làm cho trực giác này chính xác, chúng ta phải trả lời:

  1. Nó có nghĩa chính thức để giải quyết một số, nhưng không phải tất cả các trường hợp vấn đề?
  2. Một giải pháp gần đúng cho một vấn đề quyết định là gì?

Ý tưởng diễn giải trừu tượng 1: Thay đổi báo cáo vấn đề

Đối với tôi, một cái nhìn sâu sắc về giải thích trừu tượng là thay đổi cách xây dựng vấn đề để thay vì hỏi câu trả lời Có / Không , chúng tôi yêu cầu câu trả lời Có / Không / Có thể .

có-không-có thể

Kết quả là, mọi vấn đề đều có một giải pháp thời gian không đổi, tầm thường (đầu ra Có thể ). Bây giờ chúng ta có thể chuyển sự chú ý của mình sang việc tạo ra một thủ tục không phải lúc nào cũng có thể . Để trở lại các câu hỏi ở trên, một giải pháp hoạt động cho một số trường hợp vấn đề là một giải pháp trả về Có thể về các vấn đề không thể giải quyết. Hơn nữa, Có lẽ là một xấp xỉ của Không vì chúng tôi không chắc câu trả lời là gì.

Ý tưởng này không bị hạn chế trong các vấn đề quyết định. Hãy xem xét những vấn đề liên quan đến các chương trình.

  1. Những dòng mã nào trong chương trình đã chết (sẽ không bao giờ được thực thi)?
  2. Những biến nào trong chương trình có giá trị không đổi?
  3. Những khẳng định nào trong chương trình bị vi phạm?

Trong tất cả các tình huống này, chúng ta có thể chuyển từ một giải pháp chính xác sang một giải pháp gần đúng bằng cách xem xét các giải pháp có một số điểm không chắc chắn.

  1. Một tập hợp các dòng mã đã chết là gì?
  2. Một tập hợp các biến trong chương trình có giá trị không đổi là gì?
  3. Là những gì một bộ các khẳng định trong chương trình mà không bị vi phạm?

Các bộ sản xuất không cần phải là lớn nhất. Ý tưởng này cực kỳ chung chung và áp dụng cho các vấn đề ít liên quan đến phân tích chương trình.

  1. mn[a,b]
  2. mnk
  3. Thay vì yêu cầu các bài tập thỏa mãn cho một công thức, chúng ta có thể yêu cầu một tập hợp có chứa các bài tập thỏa mãn.

Lưu ý rằng chúng tôi không chỉ thay đổi vấn đề mà còn khái quát nó một cách nghiêm ngặt bởi vì một giải pháp cho vấn đề ban đầu vẫn là một giải pháp cho vấn đề được sửa đổi. Câu hỏi lớn chưa được trả lời là: Làm thế nào chúng ta có thể tìm thấy một giải pháp gần đúng?

Ý tưởng diễn giải trừu tượng 2: Đặc tính điểm cố định của các giải pháp gốc

tsReach(s)stReach(s)

X={s}{w | v is in X and (v,w) is an edge}

nns

Các đặc tính điểm cố định là một quyết định thiết kế. Có nhiều đặc điểm khác nhau của một tập hợp các giải pháp. Mỗi người trong số họ có thể có những lợi thế khác nhau. Trong trường hợp ngôn ngữ lập trình, chúng ta có nhiều cấu trúc hơn là chỉ xử lý một biểu đồ. Các phương trình điểm cố định mà chúng ta quan tâm có thể được xác định bằng cảm ứng trên cấu trúc của chương trình đầu vào. Ý tưởng này không cụ thể cho các chương trình. Khi áp dụng giải thích trừu tượng cho các yếu tố của ngôn ngữ có cấu trúc như ngữ pháp, công thức logic, chương trình, biểu thức số học, v.v. chúng ta có thể xác định các điểm cố định bằng cách cảm ứng trên cấu trúc của một số đối tượng cú pháp.

Bằng cách đưa ra đặc tính điểm cố định này, chúng tôi cam kết một cách cụ thể của các giải pháp điện toán. Chúng tôi sẽ không thực sự tính toán điểm cố định này bởi vì nó ít nhất cũng khó như giải quyết vấn đề ban đầu, điều này đưa chúng ta đến bước tiếp theo.

Ý tưởng diễn giải trừu tượng 3: Xấp xỉ điểm cố định

FLGMMLML

LMFG

Bạn có thể tìm thấy trực giác đằng sau chuyển điểm cố định sâu sắc. Chúng ta có thể nghĩ về một điểm cố định là giới hạn của một chuỗi các yếu tố (có thể là vô hạn). Tính toán các giải pháp gần đúng tương đương với giới hạn này, điều mà chúng ta có thể làm bằng cách xấp xỉ các phần tử của chuỗi.

stst

Ý tưởng diễn giải trừu tượng 4: Thuật toán xấp xỉ điểm cố định

Tất cả mọi thứ nhìn thấy cho đến nay là một kết quả tồn tại toán học. Bước cuối cùng là tính toán gần đúng. Khi mạng gần đúng là hữu hạn (hoặc nếu điều kiện chuỗi tăng dần / giảm dần được đáp ứng), chúng ta có thể sử dụng một quy trình lặp đơn giản. Nếu mạng là vô hạn, một quy trình lặp có thể không đủ, mặc dù tính toán một điểm cố định vẫn có thể quyết định được. Trong tình huống này, nhiều kỹ thuật được sử dụng để tiếp tục gần đúng giải pháp hoặc chuyển sang một giải pháp chính xác nhanh hơn thuật toán lặp ngây thơ. Trong bối cảnh tính toán một giải pháp, bạn nghe thấy các thuật ngữ như mở rộng , thu hẹp , lặp lại chiến lược , tăng tốc , v.v.

Tóm lược

Theo tôi, giải thích trừu tượng cung cấp một cơ sở toán học cho khái niệm trừu tượng giống như cách logic toán học cung cấp một cơ sở toán học cho lý luận. Các giải pháp cho nhiều vấn đề chúng tôi quan tâm có đặc điểm là điểm cố định. Quan sát này không bị giới hạn trong các vấn đề ngôn ngữ lập trình và thậm chí là khoa học máy tính. Các giải pháp gần đúng có thể được mô tả là xấp xỉ các điểm cố định và được tính toán với các thuật toán chuyên dụng. Các đặc tính và thuật toán này sẽ khai thác cấu trúc của thể hiện vấn đề. Trong trường hợp của các chương trình, cấu trúc này được đưa ra bởi cú pháp của ngôn ngữ.

Tính toán gần đúng cho các vấn đề không có số liệu tự nhiên là một nghệ thuật liên tục được phát triển và cải tiến bởi các học viên. Giải thích trừu tượng là một lý thuyết toán học cho khoa học đằng sau nghệ thuật này.

Tài liệu tham khảo Có một số hướng dẫn tốt về giải thích trừu tượng mà bạn có thể đọc.

  1. Giới thiệu ngẫu nhiên về Giải thích trừu tượng , Patrick Cousot (Làm việc chung với Radhia Cousot), Hội thảo về Phương pháp sinh học và hình thức hệ thống (SBFM'12)
  2. Giới thiệu nhẹ nhàng về xác minh chính thức các hệ thống máy tính bằng cách giải thích trừu tượng , Patrick và Radhia Cousot, Trường hè Mark / 10dorf 2010.
  3. Bài giảng 13: Trừu tượng Phần I , Patrick Cousot, Giải thích trừu tượng, Khóa học MIT.
  4. Giới thiệu về diễn giải trừu tượng , Samson Abramsky và Chris Hankin, Giải thích trừu tượng về ngôn ngữ khai báo, 1987.
  5. Giải thích trừu tượng và ứng dụng vào các chương trình logic , Patrick và Radhia Cousot, 1992. Hai phần đầu tiên có một tổng quan chung, cấp cao với một số ví dụ.

7

Tôi đồng ý rằng thường rất khó để trích xuất ý chính từ tất cả các chi tiết đó. (Trên thực tế, vấn đề lớn của tôi với mọi cách xử lý giải thích trừu tượng mà tôi đã thấy là họ trình bày quá nhiều máy móc mà không thúc đẩy nó.)

Đây là cách tôi nghĩ về nó:

Giải thích trừu tượng là chạy các chương trình, xấp xỉ, trên các bộ đầu vào lớn cùng một lúc.

Điều này không bao gồm tất cả mọi thứ, nhưng nói chung nó giữ tốt.

Ví dụ kinh điển là đánh giá các biểu thức số học để xác định dấu hiệu của kết quả. Bạn có thể tưởng tượng một cỗ máy giả định, cực kỳ nhanh, có thể đánh giá một biểu thức trên mỗi đầu vào tích cực và trả về tập kết quả. Nếu bạn có một trong số đó, về nguyên tắc, bạn có thể xác định những thứ như "chương trình này trả về số dương khi được cung cấp số dương".

Nhưng tất nhiên bạn không thực sự có máy đó. Bạn bị mắc kẹt trong cuộc sống thực, vì vậy bạn phải làm điều tương tự một cách tượng trưng , đôi khi có thể đưa ra câu trả lời chính xác nhưng thường thất bại, hoặc xấp xỉ , theo cách luôn trả lời câu trả lời nhưng chúng có thể không chính xác. Sau này là những gì giải thích trừu tượng làm.

{neg,zero,pos}{{...,2,1},{0},{1,2,...}}

add:pos×pospos

add:pos×posposadd(a,b)abpos×neg(poszeroneg)

Khi bạn muốn chứng minh rằng giải thích trừu tượng của bạn càng chặt chẽ càng tốt, bạn sẽ muốn kết nối Galois để chính thức hóa sự tương ứng này. Chỉ cần có một đảm bảo rằng, đối với bất kỳ tập hợp cụ thể nào, tồn tại một tập hợp trừu tượng chặt chẽ nhất.

IOW, những gì bạn đã xác định là động lực cho việc giải thích trừu tượng thực sự là động lực cho bộ máy cần thiết để thực hiện giải thích trừu tượng trên các ngôn ngữ tương đương Turing. Động lực thực tế là tóm tắt hữu ích hành vi của các chương trình bằng cách chạy chúng trên nhiều đầu vào cùng một lúc.

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.