Sự khác biệt giữa ngữ nghĩa hoạt động nhỏ và lớn


28

Sự khác biệt cơ bản giữa các ngữ nghĩa hoạt động nhỏ và lớn là gì?

Tôi đang có một thời gian khó khăn để nắm bắt nó là gì và động lực để có hai.


1
Bài viết Wikipedia về ngữ nghĩa hoạt động có vẻ đầy hứa hẹn ... cho đến khi người ta nhận ra rằng tổng số thông tin trong phần "ngữ nghĩa bước lớn" là "Phần này yêu cầu mở rộng. (Tháng 2 năm 2011)."
David Richerby

1
Nguồn học tập của bạn là gì? Nó chứa gì về vấn đề này? Bạn nghĩ sao? Gợi ý: ngữ nghĩa bước lớn là x = 0; while ( true ) { x = x + 1; }gì?
Raphael

@Raphael Tôi đang đọc Hiểu về tính toán . Tôi nghĩ rằng cách tiếp cận bước nhỏ là giảm biểu thức thành biểu thức con cho đến khi không thể giảm thêm nữa và sau đó đánh giá điều đó. Bước tiến lớn dường như là về việc đánh giá mọi thứ ngay lập tức nhưng tôi thực sự không có bất kỳ sự khác biệt thú vị nào giữa hai phương pháp vì cả hai dường như là về việc đào sâu các cấu trúc cấp cao hơn.
Simon Morgan

Bước lớn về việc đi sâu vào các công trình cấp cao hơn bằng cách đánh giá các công trình phụ và bước nhỏ bằng cách giảm một công trình lớn hơn, một lần nữa, vào các công trình phụ của nó.
Simon Morgan

Câu trả lời:


32

Ngữ nghĩa bước nhỏ xác định một phương pháp để đánh giá biểu thức một bước tính toán tại một thời điểm. Nói một cách chính thức, một ngữ nghĩa bước nhỏ cho một ngôn ngữ biểu thức E là một mối quan hệ →:E×E được gọi là quan hệ rút gọn. Ngữ nghĩa bước nhỏ mô tả những gì xảy ra với một biểu thức một cách chi tiết. Nó có thể cung cấp cho một tài khoản chính xác của ngay cả các chương trình không kết thúc, với một chuỗi vô hạn e0e1e2 . Một chương trình chấm dứt là một trong những ví dụ mà e0e1vchấm dứt với một giá trị e 'E , v e ' . veE,ve

Ở đầu kia của phổ là ngữ nghĩa học biểu thị . Ngữ nghĩa học biểu thị gán một ý nghĩa của người Viking cho mỗi biểu thức. Đây là một chức năng từ biểu thức đến ký hiệu: ( D được gọi là miền). Không gian của denotations có thể hoàn toàn không liên quan đến không gian cú pháp, ví dụ E có thể là biểu thức được đánh giá đối với một số và D có thể là một tập hợp các số như N hoặc R .[[]]:EDDEDNR

Ngữ nghĩa bước lớn là loại ở giữa. Một lớn bước ngữ nghĩa trên một ngôn ngữ biểu thức và một tập hợp các giá trị V là một mối quan hệ : E × V . Nó liên quan đến một biểu thức với giá trị của nó (có thể là nhiều giá trị nếu ngôn ngữ không mang tính quyết định). Thông thường, một giá trị đặc biệt được sử dụng cho các biểu thức không kết thúc.EV⇓:E×V

Vậy tại sao chúng ta có ba khái niệm này? Tất cả các khái niệm này có thể mô hình hóa lẫn nhau, nhưng mô hình thêm một mức độ phức tạp.

  • Đưa ra một ngữ nghĩa bước nhỏ , bạn có thể xác định một ngữ nghĩa bước lớn tương ứng liên quan đến từng biểu thức với giá trị của nó (hoặc các giá trị, nếu việc giảm là không xác định): e v iff tồn tại một chuỗi e e 1vv không thể giảm thêm nữa. Lưu ý rằng nói chung, bạn không thể xây dựng lại ngữ nghĩa bước nhỏ từ ngữ nghĩa bước lớn. Ví dụ, tất cả các biểu thức không kết thúc là không thể phân biệt được theo ngữ nghĩa bước lớn.evee1vv
  • Cho một lớn bước ngữ nghĩa , bạn có thể nói rằng đó là một nhỏ bước ngữ nghĩa trên E V . Điều này không đặc biệt hữu ích.⇓:E×VEV
  • Đưa ra một ngữ nghĩa bước nhỏ , bạn có thể định nghĩa một ngữ nghĩa biểu thị tương ứng trong đó biểu thị của một biểu thức là tập hợp các chuỗi giảm bắt đầu từ nó. Điều này thỏa mãn định nghĩa chính thức, nhưng nó không đặc biệt hữu ích, bởi vì nó bổ sung một chi phí lý thuyết được thiết lập cho các đối tượng dễ lý luận hơn bằng cách nhìn trực tiếp vào cú pháp.
  • Đưa ra một ngữ nghĩa biểu thị , bạn có thể xác định ngữ nghĩa bước nhỏ bằng cách thêm tất cả các ký hiệu có thể làm giá trị trong ngôn ngữ. Điều đó đòi hỏi phải tạo ra các giá trị không phải là một phần của cú pháp mà lập trình viên có thể viết, điều đó có nghĩa là một số kết quả thú vị phải nêu ra cho tất cả các chương trình mà lập trình viên có thể viết ra chứ không phải là tất cả các chương trình. Điều này vì thế cũng không hữu ích lắm.[[]]
  • Cho một lớn bước ngữ nghĩa , bạn có thể định nghĩa một ngữ nghĩa denotational tương ứng nơi miền là tập hợp các bộ giá trị: [ . Nếu ngữ nghĩa bước lớn có tính xác định (mỗi biểu thức giảm xuống một giá trị), bạn có thể xác định ngữ nghĩa biểu thị đơn giản hơn trong đó miền là tập hợp các giá trị.[[e]]={vev}
  • Ngược lại, đưa ra một ngữ nghĩa biểu thị , Bạn có thể định nghĩa một lớn bước ngữ nghĩa E [[[]] . Một lần nữa điều này là một chút vô nghĩa.E[[]]

Nói một cách vận hành, ngữ nghĩa bước nhỏ tương ứng với việc xem xét từng thao tác được thực hiện bởi một thông dịch viên cho ngôn ngữ. Ngữ nghĩa bước lớn chỉ nhìn vào giá trị kết quả. Ngữ nghĩa học hàm ý xem xét một diễn giải toán học có thể có hoặc không có liên quan gì đến những gì xảy ra trên máy tính.

Ngữ nghĩa bước nhỏ là một trong những rõ ràng nhất. Nó rõ ràng cung cấp thông tin hữu ích về các chương trình không kết thúc. Tổng quát hơn, nó cung cấp thông tin chi tiết về hành vi của chương trình.

Ngữ nghĩa học biến đổi cấu trúc cú pháp thành các đối tượng toán học tùy ý; nó có thể diễn đạt bất cứ điều gì các nhà khoa học muốn (bạn có thể định nghĩa biểu thị của một biểu thức là tất cả các chuỗi giảm có thể có từ nó), nhưng với chi phí thêm một mức độ phức tạp. Nó được sử dụng khi chúng ta muốn trừu tượng hóa một số chi tiết như chính xác cách thức biểu thức được đánh giá.

Ngữ nghĩa bước lớn nằm ở giữa: nó trừu tượng hóa các chi tiết của đánh giá nhưng vẫn giữ nguyên bản chất cú pháp của kết quả. Thông thường các khái niệm được sử dụng khi có một tiềm ẩn ngữ nghĩa nhỏ bước, như một cách để thể hiện chính xác “ Và như e e n(e1,,en),ee1en and e,eneeenMùi. Trong các cấu trúc như vậy, trong khi các khái niệm rất khác nhau (một khái niệm cho phép chúng ta nói về các bước tính toán riêng lẻ và về các chương trình không kết thúc, thì các khái niệm khác không), các định nghĩa sẽ trông rất giống nhau, vì trong trường hợp này, các quy tắc xác định lớn bước ngữ nghĩa cơ bản của hình thức “nếu và ... và e n * vv là một giá trị thì e 1v ”.e1e2envve1v


Tôi cũng đang học điều này, nhưng tôi có một vấn đề với điều bạn nói trong câu trả lời của bạn mà tôi muốn bạn làm rõ. Bạn nói "ngữ nghĩa bước lớn là loại ở giữa." Tuy nhiên, bước nhỏ có thực sự là mô hình 'giữa' không? Xem xét các biểu thức: A: ((5 + 7) + 3) B: ((5 + 5) + 5) C: ((1 + 2) + 1) D: ((2 + 1) + 1) Biểu thị sẽ phân loại thậm chí C và D với các giá trị khác nhau (có thể là "C" và "D"), và bước lớn sẽ phân loại cả hai là "4" và cả A và B là "15" Tuy nhiên, bước nhỏ sẽ cung cấp cho bạn "(12 + 3) "và" (10 + 5) "cho A và B, và" (3 + 1) "cho C và D.
Timothy Swan

@TimothySwan Giả sử rằng bạn muốn xác định đánh giá số học thông thường, một ngữ nghĩa biểu thị sẽ không phân biệt C và D. Một ngữ nghĩa bước nhỏ sẽ xác định chuỗi giảm như . Một lớn bước ngữ nghĩa sẽ rất giống với một ngữ nghĩa denotational: ( ( 2 + 1 ) + 1 ) 3 vs [((2+1)+1)3+14((2+1)+1)3 . Các 4 trong ngữ nghĩa lớn bước là một trong cú pháp ngôn ngữ trong khi 4 trong ngữ nghĩa denotational là một từ metatheory, nhưng sự khác biệt là không thể nhìn thấy hoặc quan trọng trong ví dụ đơn giản này. [[((2+1)+1)]]=444
Gilles 'SO- ngừng trở nên xấu xa'

Vì vậy, khi bạn nói, 'ngữ nghĩa học biểu thị gán một ý nghĩa của người Hồi giáo cho mỗi biểu thức.' bạn không có nghĩa là tự xác định các biểu thức, nhưng một số ý nghĩa độc lập đánh giá? Bạn có thể cung cấp một ví dụ đơn giản cho thấy rõ sự khác biệt giữa ngữ nghĩa bước lớn và ngữ nghĩa không? Ngoài ra, vui lòng giải thích 3trong phần ((2+1)+1)⇓3tôi đoán 'biểu thị' là một giá trị cuối cùng, nhưng trong trường hợp nào thì 'bước tiến lớn' không nhất thiết phải ánh xạ trực tiếp đến điều đó? Sự khác biệt có liên quan đến bối cảnh, như (a + 1)tùy thuộc vào môi trường có chứa a?
Timothy Swan

, trong khi một bước tiến lớn ngữ nghĩa sẽ có nhiều bản án có thể chấp nhận: r một n d ( 1 .. n ) 1 r một n d ( 1 .. n ) 2 và ...Đó là một lỗi đánh máy. [[rand(1..n)]]={1,2,,n}rand(1..n)1rand(1..n)23
Gilles 'SO- ngừng trở nên xấu xa'
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.