Toán học rời rạc giống như phân đoạn này là gì được sử dụng cho các quy tắc chính thức?


18

Trong bài báo "Một kiểu dữ liệu JSON được sao chép không xung đột" , tôi đã gặp ký hiệu này để định nghĩa chính thức "quy tắc":

Một số "quy tắc" được hiển thị trong bài báo] [1

Ký hiệu này được gọi là gì? Làm thế nào để tôi đọc nó?

Ví dụ:

  • các DOCquy tắc không có bất cứ điều gì trong "tử số" của nó - tại sao không?
  • các quy tắc EXECGETdường như có hai thuật ngữ riêng biệt trên dòng, điều đó có nghĩa là gì?
  • các VARquy tắc nổi bật một chút là tốt, vì trong khi nhiều quy tắc khác sử dụng một số loại mũi tên (mà tôi sẽ làm để có nghĩa là "ngụ ý") lên hàng đầu này dường như chỉ được nói rằng x là một phần tử của một cái gì đó.
  • hầu hết mọi thứ đều bị ảnh hưởng bởi một chữ Ap,cái đầu mà văn bản mô tả là "trạng thái của bản sao p được mô tả bởi Ap, một hàm hữu hạn" - làm thế nào một người đọc hiểu biết về ký hiệu này có xu hướng "nhìn thấy" phần đó của mọi quy tắc?

Trang web này đã đề xuất một câu hỏi liên quan có một số ký hiệu trông rất giống nhau, về câu hỏi Tầm quan trọng của ⟨B, s⟩ -> B ', s'⟩ là quy tắc ban đầu trong câu hỏi này về bước nhỏ ngữ nghĩa? - điều này được gắn thẻ là ngữ nghĩa hoạt động và dường như đó là một hướng dẫn mạnh mẽ. Đó có thực sự là khuôn khổ mà theo đó tôi nên diễn giải những số liệu này? Bạn có thể dễ dàng tóm tắt điều này trong mẫu "khóa học sự cố" để ngay cả khi tôi không thể xác minh tính chính xác của bằng chứng của họ, ít nhất tôi có thể hiểu thêm một chút về những gì họ nói trong phần này không?

Câu trả lời:


25

Đây là một ký hiệu chuẩn cho một quy tắc suy luận . Các tiền đề được đặt trên một đường ngang và kết luận được đặt bên dưới đường. Do đó, nó kết thúc giống như một "phân số", nhưng với một hoặc nhiều mệnh đề logic phía trên dòng và một mệnh đề duy nhất bên dưới dòng. Nếu bạn thấy một nhãn (ví dụ: "LET" hoặc "VAR" trong ví dụ của bạn) bên cạnh nhãn đó, đó chỉ là một tên dễ đọc của con người để xác định quy tắc cụ thể.

Bạn cũng có thể thấy điều này được gọi là khấu trừ tự nhiên hoặc khấu trừ tự nhiên theo phong cách Gentzen .

Đây là một ký hiệu phổ biến trong các tài liệu ngôn ngữ lập trình. Bạn sẽ thấy nó ở khắp mọi nơi. Nó rất thuận tiện cho các loại kết luận và bằng chứng cấu trúc đệ quy phát sinh trong lĩnh vực đó.

Bạn sẽ thấy ký hiệu này được sử dụng để thể hiện các tiên đề / quy tắc. Bạn có thể nghĩ mỗi tiên đề là một mẫu có "biến meta" (ví dụ: expr ); bạn có thể thay thế từng biến meta bằng một số cú pháp từ ngôn ngữ lập trình (ví dụ: bất kỳ biểu thức nào hợp lệ trong ngôn ngữ lập trình) và bạn sẽ có được một thể hiện của quy tắc. Quy tắc suy luận hứa hẹn rằng nếu tất cả các mệnh đề nằm trên dòng là đúng (đối với một số trường hợp của mẫu, trong đó bạn luôn thay thế từng biến đổi bằng cùng một giá trị trong suốt quy tắc), thì mệnh đề bên dưới dòng cũng sẽ đúng .


2
Một cách sử dụng đáng chú ý là chỉ định suy luận kiểu Hindley-Milner: câu trả lời này cho Ngôi sao Phần nào của Milner-Hindley mà bạn không hiểu? Một cách nào đó để đọc và sử dụng bộ quy tắc đó.
DylanSp

Một điều chỉnh nhỏ: các tiền đề và kết luận là phán đoán , không phải là mệnh đề . Đề xuất là một hình thức đánh giá cụ thể. Dọc theo những dòng đó, các phán đoán là hiển nhiên , không đúng sự thật (vì khái niệm về sự thật rất khó định nghĩa và không thực sự thú vị cho ngữ nghĩa ngôn ngữ lập trình).
vườn

7

Dưới đây là một lời giải thích rất không chính thức có thể giúp những người không quen thuộc với các ký hiệu chính thức có thể đặt chân vào cửa. Nó không thay thế một định nghĩa chính thức!

Các Ấp là trạng thái của hệ thống của bạn hoặc chương trình của bạn chạy. "Trạng thái" có thể có nghĩa là rất nhiều thứ nhưng trong trường hợp này dường như bao gồm một danh sách tất cả các biến cục bộ được xác định và các giá trị của chúng. Tại sao Ap là một chức năng? Bởi vì đó là một cách thuận tiện để diễn đạt các phép gán biến: Ap (x) cho giá trị của biến x .

Bây giờ, hãy lấy quy tắc EXEC làm ví dụ. Nó định nghĩa ngữ nghĩa của việc thực thi lệnh cmd1 theo sau là lệnh cmd2 , nghĩa là, điều gì xảy ra với trạng thái Ap của hệ thống khi thực hiện cmd1 theo sau là cmd2 .

  • Trên dòng: Đây là những tiền đề. Họ nói gì: "Hãy để cmd1 là một lệnh. Nếu bạn thực thi lệnh cmd1 khi hệ thống của bạn ở trạng thái Ap , hệ thống của bạn sẽ kết thúc ở trạng thái Ap 'mới ."
  • Bên dưới dòng: Ở đây quy tắc mô tả ý nghĩa của việc thực hiện hai lệnh cmd1cmd2 tuần tự. Nó nói: "Giả sử hệ thống của bạn ở trạng thái Ap , thực thi cmd1 và sau đó cmd2 có nghĩa là thực thi cmd2 khi hệ thống của bạn ở trạng thái Ap ' " (hãy nhớ rằng Ap' là trạng thái mà bạn nhận được sau khi thực hiện cmd1 , như được định nghĩa trong cơ sở).

Các quy tắc khác mô tả ngữ nghĩa của các lệnh và biểu thức riêng lẻ. Ví dụ, quy tắc VAR mô tả ý nghĩa của việc "thực thi" một biến: Nếu x là biến cục bộ (phía trên dòng), thì việc đánh giá / thực hiện biến x có nghĩa là gì? Nó được viết bên dưới dòng: Khi chương trình của bạn ở trạng thái Ap , việc đánh giá x cung cấp cho bạn giá trị của x , tức là Ap (x) .

Tôi hy vọng điều đó sẽ giúp.


Cảm ơn, đây là một trợ giúp tuyệt vời để hiểu và chính xác những gì tôi đang tìm kiếm! Tuy nhiên, câu hỏi đầu tiên của tôi chưa được trả lời: ký hiệu này có tên, nói chung và / hoặc trong bối cảnh cụ thể này không? Tôi đoán là "ngữ nghĩa hoạt động", nhưng câu trả lời khác ở đây cho biết chúng chỉ là "quy tắc suy luận" đơn giản. Tôi đoán nếu tôi hỏi một câu hỏi gồm hai phần, tôi xứng đáng được chia câu trả lời, nhưng bây giờ tôi bị giằng xé giữa câu nào để chấp nhận :-)
natevw

1
@natevw Họ là những quy tắc suy luận. Ngữ nghĩa hoạt động chỉ là một trong nhiều điều thường được thể hiện với các quy tắc suy luận.
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.