Làm thế nào để chứng minh định lý chương trình có cấu trúc?


7

Wikipedia :

Định lý chương trình có cấu trúc [...] nói rằng [...] mọi thuật toán có thể được biểu diễn chỉ bằng ba cấu trúc điều khiển. họ đang

  • Thực hiện một chương trình con, và sau đó một chương trình con khác (trình tự)
  • Thực hiện một trong hai chương trình con theo giá trị của biểu thức boolean (lựa chọn)
  • Thực hiện một chương trình con cho đến khi một biểu thức boolean là đúng (lặp)

Định lý này được phát triển trong các bài báo sau:

  • C. Böhm, "Trên một gia đình máy Turing và ngôn ngữ lập trình liên quan", ICC Bull., 3, 185 phản194, tháng 7 năm 1964.
  • C. Böhm, G. Jacopini, "Sơ đồ dòng chảy, Máy Turing và ngôn ngữ chỉ với hai quy tắc hình thành", Comm. của ACM, 9 (5): 366 bóng371,1966.

Thật không may, cái đầu tiên thực tế không có sẵn, và cái thứ hai, ngoài việc hơi khó hiểu (ít nhất là đối với tôi), đề cập đến cái đầu tiên, vì vậy tôi có vấn đề để hiểu bằng chứng. Ai giúp tôi với? Có một bài báo hay cuốn sách hiện đại trình bày bằng chứng? Cảm ơn.


CẬP NHẬT

Nói chính xác, tôi muốn hiểu phần thứ hai của bài báo CACM (phần 3). Các tác giả viết trong phần 1 như sau:

Trong phần thứ hai của bài báo (của C. Böhm), ​​một số kết quả của bài báo trước được báo cáo [8] và kết quả của phần đầu tiên của bài báo này sau đó được sử dụng để chứng minh rằng mọi máy Turing đều có thể rút gọn hoặc trong một ý nghĩa xác định tương đương với, một chương trình được viết bằng ngôn ngữ thừa nhận là quy tắc hình thành chỉ thành phần và lặp lại.

Ở đây [8] đề cập đến bản tin ICC Bulletin không có sẵn. Dễ dàng thấy rằng trích dẫn ở trên của Wikipedia đề cập đến phần thứ hai của bài báo CACM này (máy Turing đóng vai trò là một định nghĩa chính xác của các thuật toán; "thành phần" có nghĩa là trình tự; phép lặp có thể thay thế một lựa chọn).


Bạn có thể muốn đọc mục Wikipedia trên ngôn ngữ nguyên thủy P '' được mô tả trong bài báo đầu tiên.
res

1
BTW, trong bài báo đầu tiên đó, Böhm thực sự đã cung cấp một chương trình P '' rõ ràng cho mỗi tập hợp các hàm cơ bản cùng nhau phục vụ để tính toán bất kỳ hàm tính toán nào. (Trích dẫn trong "cập nhật" của bạn là đề cập đến ngôn ngữ P ''.)
res

1
@res Có, tôi có thể tìm thấy thông tin trên P '', nhưng tôi vẫn muốn đọc bản tin Bản tin ICC gốc. Martin Davis đã viết một bài đánh giá ngắn gọn về nó: "Tác giả chứng minh rằng mọi hàm đệ quy một phần có thể được tính bằng máy Turing thuộc loại đặc biệt đơn giản. Bằng chứng, sử dụng các kỹ thuật ngôn ngữ lập trình là gọn gàng và ngắn gọn." Điều này khiến tôi tò mò :)
kol

1
Nếu nó được sử dụng, đây là liên kết UCLA / SRLF WorldCat (nhấp vào mục "Thư viện toàn cầu" trên trang đó) hiển thị nhiều thư viện - bao gồm một số ở Châu Âu - có bản sao của Bản tin Trung tâm tính toán quốc tế . (Tôi tạo ra rằng bài viết trên Wikipedia về P '' sau khi tình cờ khi giấy 1964 Böhm trong thời gian nghiên cứu tại SRLF khoảng năm mười trước.)
res

@res Cảm ơn! Tôi đã gửi yêu cầu đến Dịch vụ chuyển phát tài liệu của UCLA / SRLF: library.ucla.edu/service/
kol

Câu trả lời:


10

Định lý Böhm-Jacopini về cơ bản nói rằng một chương trình dựa trên 'goto' có chức năng tương đương với một chương trình bao gồm 'while' và 'if'.

Phác thảo bằng chứng dựa trên các ghi chú bài giảng sau :

Giả sử bạn có một chương trình bao gồm một chuỗi các câu lệnh Si; tiền tố mỗi câu lệnh với một nhãnSiLi:Sivà cập nhật các câu lệnh goto hiện có để trỏ đến đúng vị trí. Khai báo một biến vị trí,l1và bọc các câu lệnh có tiền tố trong một vòng lặp while sẽ tiếp tục cho đến khi đạt được câu lệnh cuối cùng, while(lM) do S.

Áp dụng các quy tắc viết lại sau đây cho S:

  • Quy tắc Goto: Thay thế Li goto Lj với if (l=i) then lj
  • Quy tắc if-goto: Thay thế Li:if (cond) then goto Lj với if (l=i(cond)) then lj else ll+1
  • Quy tắc khác: Thay thế Li:Si với if l=i then Si,ll+1

Chương trình kết quả sau đó không có các câu lệnh goto cho thấy sự tương ứng giữa hai mô hình.

Một bằng chứng chính thức hơn được cung cấp trong tài liệu tham khảo thứ hai của bạn .

Cập nhật

Sau khi nghiên cứu bài viết chi tiết hơn, đây là cách giải thích của tôi:

Dựa trên các định nghĩa trong CACM, hãy B=D(α,{λ,R}) là lớp máy Turing được đại diện bởi ngôn ngữ Pbao gồm các sơ đồ dòng chảy. Để choB=E(α,{λ,R}) là lớp máy Turing được đại diện bởi ngôn ngữ P bao gồm sự chuyển đổi được đề cập ở trên.

Theo CACM, tác giả muốn chứng minh rằng nếu một máy Turing tồn tại trong gia đình máy Turing được mô tả bởi MB, sau đó tồn tại một máy Turing tương ứng trong họ máy Turing được mô tả bởi MB.

Phác thảo bằng chứng của tác giả: Ông làm điều này bằng cách rút ra từ mối quan hệ xuất phát MBME() (định nghĩa (5)) và sau đó thiết lập mối quan hệ ME(). Đối với mỗi thành phần củaE() anh ta vẽ một bản đồ một-một với những E(). Do đó, bằng cách thiết lập cầu nối giữaMM xuyên qua E() tác giả chứng minh MBMB.


Cảm ơn rât nhiều! Trong phần thứ hai của bài báo CACM (phần 3), các tác giả đã kết nối các kết quả này với ngôn ngữ P '' (được xác định trong bài báo Bản tin ICC) và máy Turing. Bạn có muốn viết một vài từ về kết nối này không?
kol

Họ viết "Trong phần thứ hai của bài báo [...] kết quả của phần thứ nhất [...] được sử dụng để chứng minh rằng mọi máy Turing đều có thể rút gọn thành, hoặc theo nghĩa xác định là tương đương với một chương trình được viết trong một ngôn ngữ thừa nhận là quy tắc hình thành chỉ thành phần và lặp lại. " Trích dẫn trên từ Wikipedia đề cập đến phần thứ hai này, và đây là phần của bài báo CACM mà tôi muốn hiểu.
kol
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.