Những gì cấu thành ngữ nghĩa học biểu thị?


45

Trên một chủ đề khác , Andrej Bauer đã định nghĩa ngữ nghĩa học biểu thị là:

ý nghĩa của một chương trình là một chức năng của ý nghĩa của các bộ phận của nó.

Điều làm tôi băn khoăn về định nghĩa này là nó dường như không chỉ ra những gì thường được coi là ngữ nghĩa học biểu thị từ những gì thường được coi là ngữ nghĩa phi biểu tượng, cụ thể là ngữ nghĩa hoạt động cấu trúc .

Chính xác hơn, thành phần chính ở đây là tính mô đun , hoặc thành phần , về ngữ nghĩa, hoặc đặt khác nhau, thực tế là chúng được định nghĩa theo cấu trúc trừu tượng của chương trình.

Như hầu hết (tất cả?) Ngữ nghĩa chính thức hiện nay có xu hướng cấu trúc, đây có phải là định nghĩa bắt buộc?

Vì vậy, câu hỏi của tôi là: ngữ nghĩa học là gì?


4
Ý nghĩa có thể được đưa ra dưới nhiều hình thức: điều kiện trước khi đăng, hoạt động của một cỗ máy trừu tượng, một thực thể toán học, một chiến lược trò chơi. Trong tất cả các phương pháp hiện đại, những ý nghĩa này được đưa ra như là một chức năng của ý nghĩa của các bộ phận.
Ohad Kammar

1
Câu hỏi về sự tồn tại của đã khởi xướng việc nghiên cứu lý thuyết miền. Nó xuất phát từ cách tiếp cận biểu thị, nhưng không định nghĩa nó (ví dụ, ngôn ngữ trong câu hỏi thậm chí có thể không có không gian chức năng). Về tính mô đun, như tôi đã nói ở trên, về cơ bản mọi cách tiếp cận hiện đại về ngữ nghĩa đều có tính cấu tạo theo một nghĩa phù hợp. [DD]D
Ohad Kammar

10
Ok, xin vui lòng ngừng truyền bá ý kiến ​​sai lầm rằng đã khởi xướng hoặc thúc đẩy lý thuyết miền, bởi vì nó không. Dana Scott muốn lý thuyết miền là một lý thuyết toán học phù hợp với kiểu gõ -calculus. Việc nó cũng đưa ra một mô hình của -calculus chưa được xử lý là một tai nạn . Tôi biết, anh nói với tôi như vậy. bước sóng bước sóng[DD]=D λλ
Andrej Bauer

2
Cảm ơn vì sự đúng đắn của bạn. Điều tôi muốn nói là trong cuốn "Loại lý thuyết thay thế cho ISWIM" chưa được công bố của mình, ông đã chủ trương từ bỏ việc tìm kiếm , và bắt đầu tìm kiếm các mô hình cho việc gõ -calculus. Trong quá trình đó, anh phát hiện ra một giải pháp cho phương trình miền trên. Do đó, câu hỏi về sự không tồn tại của , được đặt ra là tích cực (nhưng hóa ra là tiêu cực), do đó dẫn đến lý thuyết miền bắt đầu. Tôi có bị sai ở đây không? λ D [ D [DD]=DλD[DD]D
Ohad Kammar

1
Không chắc chắn điều đó có ích gì không, nhưng cách tôi nhìn thấy ngữ nghĩa biểu thị "hiện tại" là "tổng hợp ngôn ngữ thành một số loại" - thực sự bạn có thể viết ngữ nghĩa theo các đối tượng toán học nổi tiếng mà không cần nhấn mạnh vào cấu trúc thể loại, nhưng đó là một đặc tính công bằng của các ví dụ cụ thể mà tôi đã gặp.
gasche

Câu trả lời:


30

Sự khác biệt mà cá nhân tôi đưa ra giữa ngữ nghĩa học và hoạt động là như thế này:

  • ngữ nghĩa học biểu thị là toán học và phương trình. Các chi tiết của vấn đề giảm ít hơn kết quả cuối cùng, đó là một giá trị vượt thời gian trong một số không gian toán học.
  • ngữ nghĩa hoạt động là thuật toán. Nó mở ra trong các bước cá nhân trong thời gian. Quá trình này là một phần của ý nghĩa và kết quả cuối cùng chỉ là một bước phân biệt trong quy trình đó.

Sự khác biệt đôi khi có thể khá tinh tế, và thật khó để nói nếu đó chỉ là một sự khác biệt trong phong cách, hoặc về bản chất.

Tuy nhiên, chúng ta có thể thấy cách định nghĩa thành phần của Andrej diễn ra tự nhiên hơn từ định nghĩa biểu thị và chúng ta cũng có thể dễ dàng tưởng tượng ra một ngữ nghĩa không hợp thành, không hợp thành vẫn đáp ứng định nghĩa hoạt động.


Một ví dụ điển hình về sự khác biệt giữa thuật toán và toán học là việc xử lý không biến đổi. Việc ký hiệu của một vòng lặp là dưới cùng, nhưng vì vấn đề tạm dừng, không thể chắc chắn liệu biểu thị của một chương trình tùy ý có phải là đáy hay không. Thay vào đó, trong ngữ nghĩa bước nhỏ, bạn có thể quan sát các bước giảm, nhưng lý thuyết không có giá trị "đáy". Tính không ổn định và không biến đổi sẽ chuyển sang siêu dữ liệu: điều không thể giải quyết được là liệu một chuỗi giảm có chấm dứt hay không. Tương tự như vậy, trong ngữ nghĩa bước lớn, không thể xác định được liệu có đạo hàm hay không.
Blaisorblade

23

Nếu tôi đoán Dana Scott sẽ nói gì, có lẽ anh ta sẽ nói rằng ngữ nghĩa học biểu thị là thành phần (giống như những gì tôi tuyên bố) và ý nghĩa của một chương trình phải là một đối tượng toán học thực sự, không phải là một thực thể cú pháp hay hình thức. Tất nhiên, một quan điểm như vậy đòi hỏi người ta phải phân biệt giữa thao tác chính thức của cú pháp và toán học "thực sự". Đây nhất thiết là một sự phân biệt phi toán học.

Như một suy nghĩ lại, người ta có lẽ muốn ý nghĩa là đầy đủ theo nghĩa là hai chương trình khác nhau quan sát không nhận được cùng một ý nghĩa. Tất nhiên, sự đầy đủ của loại này phụ thuộc vào những gì người ta thừa nhận là "quan sát".

Theo quan điểm này, có thể lập luận rằng ngữ nghĩa hoạt động cấu trúc không phải là ngữ nghĩa học biểu thị vì nó đánh đồng ý nghĩa của một thực thể cú pháp với một thực thể cú pháp khác (một giá trị hoặc một chuỗi giảm).


3
Thỉnh thoảng, tôi được bảo rằng các hệ thống chuyển tiếp không phải là toán học như các miền hoặc mạng hoặc đơn đặt hàng. Tôi thấy quan điểm này trở ngại. Tất cả có thể được thể hiện trong lý thuyết tập hợp ZFC.
Martin Berger

1
Xem xét chính xác làm thế nào một ngữ nghĩa nhất định có thể mô hình hóa một hiện tượng tính toán là một cách tiếp cận thú vị hơn, và thực sự phụ thuộc rất nhiều vào khái niệm quan sát đã chọn. Một trong những lợi thế chính của ngữ nghĩa hoạt động (ví dụ lý thuyết quá trình) là chính xác rằng các quan niệm tự nhiên về quan sát dễ dàng được xác định hơn nhiều so với ngữ nghĩa lý thuyết trật tự.
Martin Berger

3
@Marc: Tôi đồng ý với bạn rằng các phương thức hoạt động không mô hình hóa tính toán như một hàm. Nhưng tôi không thấy lý do tại sao điều đó làm cho các cách tiếp cận theo lý thuyết trật tự trở nên "toán học hơn". Toán học ảnh hưởng vật lý như phương trình vi phân mô hình các đánh giá của các hệ thống nhất định theo thời gian. Bản thân cách tiếp cận đầu vào-đầu ra sử dụng cấu trúc thời gian thô sơ, cụ thể là đầu ra không có sẵn trước đầu vào.
Martin Berger

2
@Martin: Các nhà toán học thường phàn nàn rằng những gì các nhà vật lý làm cũng không phải là toán học thực sự. ;-) Vật lý chỉ là một khoa học được thành lập thoải mái hơn tại thời điểm này. TCS vẫn còn tương đối là đứa trẻ mới trong khối. Tôi nghĩ rằng TCS không nên lo lắng về việc khiến mọi người theo một chuyên ngành khác (cho dù cá nhân chúng tôi thích nó đến mức nào) hạnh phúc; chúng tôi có mojo của riêng mình trên đường đi (giống như các nhà vật lý).
Marc Hamann

2
@Marc: rác tùy ý có thể được thể hiện trong ZFC, vì vậy đó không phải là một tiêu chí để dựa vào. Ngữ nghĩa trong đó "hàm" trong ngôn ngữ lập trình được hiểu là các hàm theo nghĩa toán học có ít nhất hai lợi thế. Thứ nhất, nó phù hợp với cách mọi người nghĩ về các chức năng trong ngôn ngữ lập trình. Thứ hai, các hàm là các đối tượng toán học quen thuộc nên có rất nhiều máy móc có thể sử dụng. Tất nhiên, các hệ thống chuyển tiếp cũng có công dụng của chúng.
Andrej Bauer

19

Tôi đồng ý rằng việc nhận dạng ngữ nghĩa học của A. Bauer với tính cấu thành (trong Sách về ngữ nghĩa ngôn ngữ lập trình ) không thực sự đặc trưng cho ý nghĩa của ngữ nghĩa học theo truyền thống, vì ngữ nghĩa hoạt động rõ ràng cũng như logic ngữ nghĩa chương trình (ngữ nghĩa học ngữ nghĩa) .

Tôi muốn đề xuất thuật ngữ này được hiểu rõ nhất về mặt lịch sử xã hội, khi đề cập một cách lỏng lẻo đến một truyền thống lý thuyết nhất định (bắt đầu một cách nghiêm túc khi Scott tạo ra một mô hình lý thuyết mạng của phép tính lambda chưa được xử lý) với các công cụ ưa thích nhất định (lý thuyết trật tự, định lý điểm cố định , cấu trúc liên kết, lý thuyết danh mục) và ngôn ngữ mục tiêu ưa thích (hoàn toàn là chức năng và tuần tự). Tôi tưởng tượng rằng - ngoài lợi ích trí tuệ thuần túy - ngữ nghĩa học hàm ý hầu hết được phát minh vì:

  1. Nó đã từng rất khó để lý luận về ngữ nghĩa hoạt động.

  2. Trước đây, rất khó để đưa ra ngữ nghĩa tiên đề cho các ngôn ngữ không tầm thường.

Tôi tranh luận rằng cả hai vấn đề đã được cải thiện ở mức độ đáng kể, (1), ví dụ như bằng các kỹ thuật dựa trên cơ sở bisimilation đến từ lý thuyết quá trình (có thể được xem như là một hình thức cụ thể của ngữ nghĩa hoạt động) hoặc ví dụ, Microsoft làm việc về ngữ nghĩa và chương trình hoạt động tương đương và (2) bởi sự phát triển của logic phân tách hoặc logic Hoare có nguồn gốc là các phiên bản được gõ của logic Hennessy-Milner thông qua các ngôn ngữ lập trình được nhúng trong gõ -calculi.π

Vì vậy, tóm lại, tôi cho rằng thuật ngữ "ngữ nghĩa học" đã trở nên ít chính xác hơn, và do đó ít hữu ích hơn. Nó có thể hữu ích cho cộng đồng ngữ nghĩa để hội tụ về thuật ngữ tốt hơn.


1
Để tóm tắt lại bài đăng mới nhất của tôi, một "ngữ nghĩa biểu thị" phải nói, "ý nghĩa của ký hiệu này là". Ngữ nghĩa "hoạt động" và ngữ nghĩa "tiên đề" không phải là định nghĩa ngữ nghĩa của loại này. Đó là sai lầm để làm cho chúng xuất hiện như vậy. Cũng lưu ý rằng cái được gọi là "phương pháp hoạt động" là cách tiếp cận lý luận về các chương trình. Nó không phải là ngữ nghĩa hoạt động. Cách tiếp cận hoạt động và cách tiếp cận tiên đề có thể thay thế cho các ứng dụng kỹ thuật của ngữ nghĩa học biểu thị. Nhưng họ không trở thành ngữ nghĩa học.
Uday Reddy

@Uday. Tôi không chắc đó thực sự là một sự khác biệt đáng kể. Ví dụ: nếu tôi đưa ra ngữ nghĩa của ngôn ngữ bằng cách dịch thành phần cho -calculus, tôi gán cho mỗi chương trình một quy trình. Những gì quá trình làm chỉ được đưa ra hoạt động. Với logic chương trình, bạn thường có các công thức đặc trưng (cú pháp chương trình dạng tự cảm tính toán), nắm bắt toàn bộ hành vi của một chương trình trong một cặp công thức. Làm thế nào mà không nói "ý nghĩa của ký hiệu này là"? π LLπL
Martin Berger

1
@Martin. Tại sao việc gán các quy trình theo cách thành phần không phải là biểu thị. Có thể, nếu bạn thuyết phục tất cả chúng ta rằng các quy trình là một lý thuyết nền tảng giống như lý thuyết tập hợp và người ta không nên hỏi về ngữ nghĩa của nó. Tôi đồng cảm với quan điểm rằng có thể có một ngôn ngữ nền tảng mô hình hóa các tính toán trạng thái. Có lẽ quá trình tính toán của một số hình thức sẽ được chấp nhận như một nền tảng như vậy một ngày nào đó. Nhưng tôi không nghĩ chúng ta đang ở đó.
Uday Reddy

1
@MartinBerger Đó là người duy nhất tôi từng học, nhưng tôi có một thời gian khó khăn để cung cấp một tài liệu tham khảo tốt ngay lập tức. Ví dụ: "Cuối cùng không có thẻ, được đánh giá một phần" ( citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.99.9287 ) sử dụng "nếp gấp", "đệ quy" và "đệ quy nguyên thủy" trong phần giới thiệu rõ ràng (nhưng điều này không được thảo luận nhiều trong bài báo, nó được coi là điều hiển nhiên). Viceversa, có vẻ như đây là một điểm tranh luận trong triết học, nếu Wikipedia được tin tưởng ở đây: en.wikipedia.org/wiki/Principl_of_cysisality#Critiques
Blaisorblade

1
@Blaisorblade Khi tôi còn là nghiên cứu sinh, tôi đã giao tiếp với các nhà ngữ nghĩa học phi nghĩa, bởi vì tôi được cho là đang nghiên cứu về ngữ nghĩa học. Tôi luôn hỏi họ ngữ nghĩa học là gì, nếu họ có thể cho tôi một định nghĩa trừu tượng, nhưng tôi chỉ nhận được những câu trả lời lảng tránh hoặc mơ hồ như "ngữ nghĩa học là ngữ nghĩa toán học", xem thêm A. Giải thích của Bauer. Tôi không nghĩ rằng khái niệm này được xác định rõ. Tôi cũng không hiểu tại sao đòi hỏi đệ quy nguyên thủy lại đủ hạn chế, bởi vì sức mạnh của đệ quy nguyên thủy phụ thuộc vào những gì khác có sẵn: (tiếp theo)
Martin Berger

16

Tôi hài lòng với câu trả lời của Adrej, nhưng tôi muốn đi sâu hơn.

Để bắt đầu, ngữ nghĩa học biểu thị muốn nói một cái gì đó như "ý nghĩa của ký hiệu này là". Một nhà ngữ nghĩa học thực sự sẽ muốn tưởng tượng rằng các ý nghĩa là những gì tồn tại trong tâm trí của chúng ta và các ký hiệu chỉ là một cách để thể hiện những ý nghĩa đó. Yêu cầu rằng ngữ nghĩa học nên được cấu thành theo sau này. Nếu các ý nghĩa là chính và các ký hiệu phụ, thì chúng ta không có lựa chọn nào khác ngoài việc định nghĩa các ý nghĩa của các ký hiệu lớn hơn là các chức năng của ý nghĩa của các thành phần của chúng.

Nếu chúng ta chấp nhận quan điểm này thì một ngữ nghĩa biểu thị tốt cần phải nắm bắt được ý nghĩa mà chúng ta cho rằng chúng ta có trong tâm trí. Bất kỳ ngữ nghĩa thành phần nào sẽ không nhất thiết phải phù hợp với dự luật. Nếu tôi đưa ra một định nghĩa ngữ nghĩa thành phần và không ai đồng ý rằng nó nêu bất kỳ ý nghĩa nào họ có trong đầu, thì nó sẽ ít được sử dụng. Trò chơi ngữ nghĩa hiện nay là trong tình huống này. Đó là một định nghĩa thành phần và kỹ thuật khá mạnh mẽ, nhưng rất ít người đồng ý rằng nó có liên quan đến ý nghĩa của chúng trong tâm trí.

Điều đó nói rằng, bất kỳ định nghĩa thành phần có lợi thế kỹ thuật khác nhau. Chúng ta có thể sử dụng nó để xác minh các tính tương đương hoặc các thuộc tính khác bằng cách cảm ứng theo cú pháp của các thuật ngữ. Chúng ta có thể sử dụng nó để xác minh tính đúng đắn của các hệ thống bằng chứng, một lần nữa bằng cách cảm ứng theo cú pháp của các thuật ngữ. Chúng tôi có thể xác minh tính chính xác của trình biên dịch hoặc kỹ thuật phân tích chương trình (mà theo bản chất của chúng được xác định bằng cảm ứng theo cú pháp). Một định nghĩa ngữ nghĩa đầy đủ trừu tượng thậm chí còn có nhiều lợi thế kỹ thuật hơn. Bạn có thể sử dụng nó để chỉ ra rằng hai chương trình không tương đương, mà bạn không thể làm với bất kỳ ngữ nghĩa thành phần tùy ý. Một định nghĩa ngữ nghĩa hoàn toàn có thể xác định thậm chí còn tốt hơn. Ở đây, các miền ngữ nghĩa có chính xác những gì bạn có thể diễn đạt bằng ngôn ngữ lập trình (với một số điều khoản). Vì vậy, bạn có thể liệt kê các giá trị trong các miền để xem những giá trị nào có, điều này sẽ khó thực hiện với các ký hiệu cú pháp. Trên tất cả các căn cứ, ngữ nghĩa trò chơi điểm số rực rỡ.

Tuy nhiên, các định nghĩa ngữ nghĩa thành phần đã mất dần lợi thế trong những năm qua. Robin Milner và Andy Pitts đã phát triển một số kỹ thuật " lý luận vận hành ", hoạt động hoàn toàn dựa trên cú pháp nhưng sử dụng ngữ nghĩa hoạt động bất cứ khi nào cần để nói về hành vi. Những kỹ thuật lý luận hoạt động là công nghệ thấp. Không có toán học ưa thích. Không có đối tượng vô hạn. Chúng tôi có thể dạy chúng cho sinh viên đại học và bất cứ ai cũng có thể sử dụng chúng. Vì vậy, nhiều người đặt câu hỏi tại sao chúng ta cần ngữ nghĩa học hàm ý cả. (Martin Berger có lẽ ở trong trại này.)

Cá nhân tôi không có vấn đề gì với việc có nhiều công cụ trong hộp công cụ của mình. Kỹ thuật khử nhiễu có thể ghi điểm tốt hơn đối với một số vấn đề và kỹ thuật vận hành cho những người khác. Các nhà nghiên cứu phát triển lý thuyết có thể được điều chỉnh tốt hơn theo cách này hay cách khác. Khá thường xuyên, chúng ta có thể phát triển những hiểu biết trong một cách tiếp cận và chuyển những hiểu biết đó sang cách tiếp cận khác. . nghĩ rằng điều đó là có thể. "Logic tách biệt cũng đang diễn ra theo cách này. Steve Brookes đã đưa ra một bằng chứng âm thanh dài 60 trang cho Logic phân tách đồng thời bằng cách sử dụng ngữ nghĩa học biểu thị.

Các cách tiếp cận hoạt động cũng ghi điểm tuyệt vời khi các ngôn ngữ lập trình trở nên rất lạ mắt, với tất cả các loại hình thứ tự cao hơn. Chúng ta có thể không biết làm thế nào để mô hình hóa những thứ như vậy về mặt toán học. Hoặc, các mô hình toán học tiêu chuẩn có thể trở nên không nhất quán dưới sự căng thẳng của vòng lặp. (Ví dụ, xem "Đa hình không phải là lý thuyết tập hợp" của Reynold.) Các phương pháp hoạt động hoàn toàn dựa trên cú pháp có thể gọn gàng bước tất cả các vấn đề toán học này.

Một cách tiếp cận khác là trung gian giữa cách tiếp cận vận hành và biểu thị là khả năng thực hiện . Thay vì làm việc với các thuật ngữ cú pháp như trong các phương pháp hoạt động, chúng tôi thực hiện một phần biểu thị bằng cách sử dụng một số dạng đại diện toán học khác. Các đại diện này có thể không đủ điều kiện là "ý nghĩa" biểu thị thực sự nhưng ít nhất họ sẽ trừu tượng hơn một chút so với thuật ngữ cú pháp. Ví dụ, đối với phép tính lambda đa hình, trước tiên chúng ta có thể đưa ra ý nghĩa cho các thuật ngữ chưa được đánh dấu (trong một số mô hình của phép tính lambda chưa được đánh dấu) và sau đó sử dụng chúng làm đại diện ('người thực hiện') để thực hiện một số dạng "lý luận vận hành" một chút mức độ trừu tượng hơn.

Vì vậy, hãy để có một số cạnh tranh lành mạnh giữa các phương pháp tiếp cận biểu thị, hoạt động và khả năng thực hiện. Không có hại.

Mặt khác, cũng có thể có một số cạnh tranh "không lành mạnh" đang phát triển giữa các phương pháp khác nhau. Những người làm việc với một cách tiếp cận có thể được kết hợp chặt chẽ với nó đến mức họ có thể không nhìn thấy điểm của các phương pháp khác. Lý tưởng nhất là tất cả chúng ta nên nhận thức được điểm mạnh và điểm yếu của các phương pháp khác nhau và phát triển thái độ khoa học đối với chúng ngay cả khi chúng không phải là mục yêu thích cá nhân của chúng ta.


Một cách tiếp cận mang tính xây dựng để giải quyết vấn đề này có thể là tìm các bản dịch giữa các cách tiếp cận khác nhau.
Martin Berger

1
Lưu ý rằng tôi không có vấn đề với ngữ nghĩa biểu thị thông thường như là một công cụ trong hộp công cụ. Tôi chỉ tìm thấy những gợi ý ngầm hoặc rõ ràng rằng bằng cách nào đó tốt hơn là có vấn đề và thiếu biện minh mạch lạc.
Martin Berger

Tôi sẽ đưa ra các tập "Ngôn ngữ Algollike" ( eecs.qmul.ac.uk/~ohearn/Algol/algol.html ) được chỉnh sửa bởi Peter O'Hearn và Bob Tennent như một mô hình thực hành tốt. Chúng bao gồm các bài báo về "ngữ nghĩa học biểu thị thông thường" (Strachey, Reynold, Tennent, Meyer et al), cũng như ngữ nghĩa học phi nghĩa "không thông thường" (của tôi, Abramsky & McCusker, Brookes) và phương pháp hoạt động (Andy rãnh, Felleisen). Ngẫu nhiên, hai bài báo của Reynold trong các tập (Đặc tả logic và kiểm soát cú pháp can thiệp) là "tiên đề" khi chúng được viết!
Uday Reddy

1
Về cạnh tranh lành mạnh, một vấn đề chính là có rất nhiều cách tiếp cận, hình thức, nhà nghiên cứu và bài báo, thật khó để theo kịp sự phát triển. Có thể đáng để chúng ta là một cộng đồng nghiên cứu để nỗ lực lâu dài để tổng hợp và thống nhất các phương pháp tiếp cận hiện có.
Martin Berger

2
@MartinBerger, một điểm khởi đầu mà tôi biết là bài báo "Thiết kế xây dựng cấu trúc phân cấp ngữ nghĩa" của Patrick Cousot cho thấy một phạm vi rất rộng của các mô hình ngữ nghĩa, bao gồm các hệ thống chuyển tiếp, ngữ nghĩa tiên đề, mô hình biểu thị, có thể được liên kết bằng cách sử dụng các điều chỉnh, do đó được xem như là trừu tượng khác nhau.
Vijay D

12

[Thêm một câu trả lời. Nó có thể là không tốt để chồng lên một số câu trả lời. Nhưng, này, đây là một vấn đề sâu sắc.]

Tôi nói rằng tôi đồng ý với câu trả lời của Andrej, nhưng dường như tôi không đồng ý hoàn toàn. Có một sự khác biệt.

Tôi đã nói rằng một ngữ nghĩa học biểu thị phải nói "ý nghĩa của ký hiệu này là". Điều tôi muốn nói là các ký hiệu phải được gán nghĩa, là một số dạng của các thực thể khái niệm , không phải là một số ký hiệu khác. Ngược lại, Andrej cũng yêu cầu, diễn giải Scott, rằng ý nghĩa phải là các đối tượng "toán học". Tôi không tin rằng bit toán học là cần thiết.

Ví dụ, theo quan điểm của tôi, nó sẽ hoàn toàn ổn, vì ý nghĩa của các ký hiệu là các quá trình vật lý. Sau khi tất cả các chương trình máy tính cài đặt phanh trong xe của bạn, lái máy bay, thả bom, và những gì không. Đây là các quá trình vật lý, không phải là các yếu tố trong một số không gian toán học. Bạn không thể thả một quả bom, xem nó có giết chết ai đó không, và lấy lại nếu không. Các chương trình máy tính không thể làm điều đó. Nhưng các hàm toán học có thể. (Chúng được gọi là các hoạt động "snapback".) Vì vậy, không rõ ràng rằng các hàm toán học sẽ có ý nghĩa tốt cho các chương trình máy tính.

Mặt khác, chúng tôi thực sự chưa biết cách nói về các quá trình vật lý một cách trừu tượng. Vì vậy, chúng tôi thực sự có thể sử dụng một số mô tả toán học của các quá trình để diễn đạt ý tưởng của chúng tôi. Nhưng những mô tả toán học này sẽ chỉ là "mô tả". Chúng không có nghĩa. Ý nghĩa thực sự sẽ chỉ là các quá trình vật lý mà chúng ta tưởng tượng về mặt khái niệm.

Trong bài phát biểu chấp nhận giải thưởng SIGPLAN (sẽ sớm xuất hiện trên youtube), Hoare nói rằng ACP đã sử dụng "phương pháp đại số", CSP đã sử dụng "phương pháp tiếp cận biểu thị" và CCS đã sử dụng "phương pháp hoạt động" để mô tả các quy trình. Ohad và tôi đang ngồi cùng nhau trong phiên, chúng tôi nhìn nhau và nói "điều đó thực sự thú vị". Vì vậy, có rất nhiều không gian khái niệm ở đây đang được khám phá. Tôi nghĩ rằng rất nhiều công việc sau này của Scott, trên các hệ thống lân cận và hệ thống thông tin, v.v., thực sự là một nỗ lực để giải thích các chức năng như là "quy trình" của một số hình thức. Hình học tương tác của Girard và ngữ nghĩa của các trò chơi sau này cũng là những nỗ lực để giải thích các chức năng như các quy trình. Tôi muốn nói rằng việc phát triển một lý thuyết vững chắc về các quá trình có thể là đóng góp lớn mà Khoa học Máy tính có thể tạo ra cho toán học thế kỷ 21. Tôi sẽ không chấp nhận một niềm tin rằng toán học có tất cả các câu trả lời và chúng ta nên cố gắng giảm các hiện tượng tính toán thành các khái niệm toán học để hiểu chúng.

Điều làm tôi ngạc nhiên là làm thế nào ẩn thông tin đẹp hoạt động trong các tính toán trạng thái (lập trình bắt buộc cũng như tính toán quy trình), trong khi nó vụng về và phức tạp trong các hình thức toán học / chức năng. Vâng, chúng tôi có tham số quan hệ, và nó cho phép chúng tôi khắc phục những hạn chế của hình thức toán học rất độc đáo. Nhưng nó không phù hợp với sự đơn giản và thanh lịch của lập trình mệnh lệnh. Vì vậy, tôi không tin rằng các hình thức toán học là câu trả lời đúng, mặc dù tôi sẽ thừa nhận rằng chúng là câu trả lời tốt nhất chúng ta có vào lúc này. Nhưng chúng ta nên tiếp tục tìm kiếm. Có một lý thuyết tốt đẹp về các quá trình sẽ đánh bại các toán học truyền thống.


10

[Hy vọng, đây là câu trả lời cuối cùng của tôi cho câu hỏi này!]

Câu hỏi ban đầu của Ohad là về ngữ nghĩa học khác biệt như thế nào so với ngữ nghĩa hoạt động cấu trúc. Anh ấy nghĩ rằng cả hai đều là sáng tác. Trên thực tế, đó là không đúng sự thật. Ngữ nghĩa hoạt động cấu trúc được đưa ra như là chuỗi các bước. Mỗi bước được thể hiện thành phần (và thật đáng chú ý của Plotkin để thực hiện khám phá rằng điều này là có thể!), Nhưng toàn bộ hành vi không được xác định theo thành phần. Dưới đây là những gì Plotkin nói trong phần giới thiệu về bài viết về SOS [nhấn mạnh thêm]:

Trong ngữ nghĩa học biểu thị, người ta tuân theo một lý tưởng về thành phần, trong đó ý nghĩa của cụm từ ghép được đưa ra như là một chức năng của ý nghĩa của các bộ phận của nó. Trong trường hợp ngữ nghĩa hoạt động, người ta xem xét hành vi của cụm từ chương trình, đây chỉ là tập hợp các chuyển đổi mà nó có thể thực hiện. Hành vi này, tuy nhiên, không phải là thành phần khi được coi là một chức năng của cụm từ chương trình. Tuy nhiên, các quy tắc thực hiện theo cấu trúc, nghĩa là đệ quy nguyên thủy, theo cú pháp; ...

Thực tế là mỗi bước được thể hiện thành phần không có nghĩa là toàn bộ hành vi được thể hiện theo bố cục.

Có một bài viết hay của Carl Gunter có tên Forms of Semantic Đặc điểm kỹ thuật , trong đó các phương pháp xác định ngữ nghĩa khác nhau được so sánh và đối chiếu. Phần lớn tài liệu này cũng được sao chép trong chương đầu tiên của văn bản "Ngữ nghĩa của ngôn ngữ lập trình". Điều này hy vọng sẽ làm rõ hình ảnh.

Một từ khác về "ngữ nghĩa hoạt động". Trong những ngày đầu, thuật ngữ "hoạt động" được sử dụng để chỉ bất kỳ định nghĩa ngữ nghĩa nào đề cập đến các bước đánh giá chi tiết. Cả những người theo ngữ nghĩa học và những người đề xướng tiên đề đều xem thường ngữ nghĩa "hoạt động", liên quan đến nó như là cấp độ thấp và định hướng máy móc. Tôi nghĩ rằng điều này thực sự dựa trên niềm tin của họ rằng các mô tả cấp cao hơn là có thể. Những niềm tin này đã bị phá vỡ ngay khi họ xem xét đồng thời. Các quy trình và ngữ nghĩa đồng nghĩa của de Bakker và Zucker có những đoạn thú vị:

Chúng ta sẽ sử dụng phương pháp luận của denotational ngữ nghĩa. "Biểu thị" nên được đối chiếu ở đây với "hoạt động": Ý tưởng chính của cách tiếp cận trước đây là các biểu thức trong ngôn ngữ lập trình biểu thị các giá trị trong các miền toán học được trang bị một cấu trúc phù hợp, trong khi ở các hoạt động sau theo quy định của các cấu trúc ngôn ngữ là được mô hình hóa bằng các bước được thực hiện bởi một số máy trừu tượng phù hợp ....

Mô hình toán học chứa các khái niệm khác nhau, mặc dù theo kiểu biểu thị, đang hoạt động theo tinh thần [nhấn mạnh thêm]. Chúng bao gồm tính năng "lịch sử" của khái niệm quá trình và việc sử dụng cái gọi là động thái im lặng trong việc xử lý đồng bộ hóa và đệ quy.

Ở đây chúng ta thấy các tác giả đang vật lộn với hai khái niệm "vận hành", một khái niệm kỹ thuật - hành vi được thể hiện bằng các thao tác cú pháp, và thứ hai, khái niệm khái niệm - ở mức độ thấp và chi tiết. Khoản tín dụng chủ yếu dành cho Plotkin và Milner để phục hồi ngữ nghĩa "hoạt động", làm cho nó ở mức độ cao nhất có thể và cho thấy rằng nó có thể thanh lịch và sâu sắc.

Bất chấp tất cả những điều này, khái niệm vận hành của quá trình vẫn hoàn toàn khác với khái niệm quy trình biểu thị, sau này được phát triển bởi cả de Bakker và Hoare và các đội của họ. Và, tôi nghĩ rằng có rất nhiều điều bí ẩn và đẹp đẽ về khái niệm quá trình biểu thị vẫn còn được hiểu.


Xin lỗi về việc không trả lời yêu cầu trò chuyện. Tôi rất bận rộn trong hai tuần tới. Cảm ơn đã viết bài này! Đây là câu trả lời kỹ thuật đầu tiên trên trang tôi hiểu.
Vijay D

Tôi có thể nhân cơ hội này để cắm đầu vào Trường Cao học Midlands về Khoa học Máy tính Lý thuyết, nhằm giải quyết tất cả các loại vấn đề này. Nó mở cửa cho tất cả sinh viên tiến sĩ tham dự, từ bất cứ nơi nào trên thế giới.
Uday Reddy

9

Phản ứng bổ sung này là để khuếch đại điểm mà các mô hình ngữ nghĩa biểu thị được thiết kế để "giải thích" các hiện tượng tính toán. Tôi sẽ đưa ra một loạt các ví dụ từ ngữ nghĩa của các ngôn ngữ lập trình mệnh lệnh (còn gọi là ngôn ngữ "giống như Algol").

Đầu tiên là mô hình ngữ nghĩa được tạo bởi Scott và Strachey. (Cf. Gordon: Mô tả phi ngôn ngữ về ngôn ngữ lập trình - cuốn sách yêu thích mọi thời đại của tôi hoặc cuốn sách của Winskel.) Mô hình này cho thấy có một trạng thái toàn cầu , được tạo thành từ trạng thái của tất cả các vị trí được phân bổ bởi một chương trình. Mỗi lệnh được hiểu là một số loại chức năng từ các quốc gia toàn cầu đến các quốc gia toàn cầu.

Reynold nói rằng nó không mô hình hóa kỷ luật ngăn xếp của các biến cục bộ. Khi một phạm vi cục bộ được nhập, các biến của nó được phân bổ và chúng được giải phóng khi phạm vi được thoát. Về cơ bản, đây là câu hỏi, "theo nghĩa nào là các biến cục bộ cục bộ?" Làm thế nào để ngữ nghĩa nắm bắt địa phương? Để giải thích điều này, ông đã phát minh ra một mô hình thể loại functor. (Cf. Reynold: Bản chất của Algol và Tennent: Ngữ nghĩa của ngôn ngữ lập trình).

Tennent muốn mô hình hóa các nguyên tắc lý luận được xây dựng trong Logic Logic của Reynold (một phần mở rộng của Hoare Logic cho các thủ tục bậc cao hơn). Logic có các ý tưởng như tính toán giống như biểu thức (chỉ đọc), không can thiệp giữa các tính toán giống như lệnh và biểu thức, và một số nguyên tắc lý luận trừu tượng hóa dữ liệu. Ông đã tinh chỉnh mô hình thể loại functor của Reynold để tìm một mô hình mới. Mô hình này được gọi là mô hình "SASL", cũng được đề cập trong cuốn sách của Tennent.

Meyer và Sieber, và cả O'Hearn và Tennent, lưu ý rằng không có mô hình nào trong số này vẫn chiếm được địa phương của các biến cục bộ. Khi hai triển khai của một loại dữ liệu trừu tượng hoặc một lớp khác nhau về các biến cục bộ của chúng nhưng thao tác chúng theo các cách có cùng hành vi khi nhìn từ bên ngoài, chúng tương đương nhau về mặt quan sát. Các ngữ nghĩa biểu thị nên đánh đồng chúng. Để mô hình hóa điều này, O'Hearn và Tennent đã thêm tham số quan hệ vào một biến thể của mô hình thể loại functor của Reynold.

Khi tôi nhìn vào vấn đề cùng một lúc, tôi không tin vào cách tiếp cận thể loại functor. Tôi cũng nghĩ rằng đó là kỹ thuật quá mức và tin rằng phải có một mô hình đơn giản hơn. Điều này khiến tôi phát minh ra mô hình "Trạng thái toàn cầu được coi là không cần thiết", giống như mô hình theo dõi CSP, nhưng đối với ngôn ngữ bậc cao hơn. Là một phần thưởng bổ sung, mô hình này cũng nắm bắt được tính không thể đảo ngược của thay đổi trạng thái, vốn không có trong các mô hình trước đó.

Mô hình của tôi chỉ hoạt động cho một ngôn ngữ con hoạt động tốt của Algol, được gọi là Kiểm soát giao thoa . Abramsky và McCusker đã mở rộng mô hình của tôi bằng cách sử dụng các ý tưởng ngữ nghĩa trò chơi để nó có thể hoạt động cho Algol đầy đủ. Vì vậy, mô hình của họ giải thích các hiện tượng giống như tôi, nhưng đối với ngôn ngữ lớn hơn.

Trong mỗi trường hợp, chúng tôi có thể chứng minh rằng các mô hình mới nắm bắt các tương đương quan sát (hoặc các dạng công thức logic khác) thể hiện các hiện tượng tính toán được đề cập, không được xác nhận bởi các mô hình trước đó. Vì vậy, có một ý nghĩa rất chính xác trong đó các mô hình này đang "giải thích" các hiện tượng tính toán.

[Tất cả các công việc tôi đã đề cập ở đây có thể được tìm thấy trong tập "Ngôn ngữ giống như Algol": liên kếtliên kết ]

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.