Tại sao các chức năng tính toán liên tục?


7

Tôi đang làm việc để viết một tài liệu dễ đọc về ngữ nghĩa biểu thị của phép tính lambda. Vì vậy, tôi giới thiệu CPO, tính đơn điệu và liên tục. CPO là một tập hợp có thứ tự một phần và phần tử dưới cùng , yêu cầu là phần tử nhỏ nhất trong và sự tồn tại của giới hạn trên nhỏ nhất ( ) cho mỗi chuỗi trong . Hàm nằm giữa hai CPO , là đơn điệu, nếu với tất cả các giá trị sau:MMd0d1d2...MfMNa,bM

abf(a)f(b)

Hàm nằm giữa hai CPO , là liên tục, nếu nó đơn điệu và cho tất cả các chuỗi chúng ta cófMNd0d1d2

f(iNdi)=iNf(di).

Tôi muốn cung cấp cho độc giả của tôi một trực giác tốt về ý nghĩa của các định nghĩa này. Tuy nhiên, tôi không có cái nào tôi có thể viết ra. Sau Glynn Winskel trong cuốn sách của ông »Các Semantics chính thức của Ngôn ngữ lập trình« (1993), phải được đọc như xấp xỉ (trang 72), có nghĩa là có ít nhất càng nhiều thông tin như . Điều này dẫn đến các hàm đơn điệu phản ánh nhiều thông tin hơn về đầu vào trong nhiều thông tin hơn về đầu ra (trang 122). Điều này có phần dễ hiểu đối với tôi. Tuy nhiên, lời giải thích về tính liên tục không rõ ràng đối với tôi:ababba

Như chúng ta sẽ thấy, các hàm tính toán phải liên tục xuất phát từ ý tưởng rằng sự xuất hiện của một đơn vị thông tin trong đầu ra của hàm tính toán chỉ nên phụ thuộc vào sự hiện diện của nhiều đơn vị thông tin hữu hạn trong đầu vào.

(trang 73)

Điều này vẫn chưa rõ ràng với tôi sau khi đọc ví dụ về luồng trong phần 8.2 (trang 121 .123), hoặc câu trả lời này .

Vì vậy, câu hỏi cuối cùng của tôi là: Làm thế nào để tôi thuyết phục độc giả của mình rằng các chức năng tính toán được liên tục? Tại sao không có chức năng tính toán mà không liên tục?

Sẽ thật tuyệt nếu bạn có thể cho tôi câu trả lời / ví dụ không yêu cầu giới thiệu nghiêm ngặt về tính toán hoặc lý thuyết điểm sửa chữa, vì tôi không muốn tập trung vào những điều đó. Ngoài ra, sẽ thật tuyệt nếu không cần biết tính toán lambda và ngữ nghĩa biểu thị của nó trước, bởi vì tôi muốn (và phải) giới thiệu tính đơn điệu và liên tục trước chúng.

EDIT: Theo tính toán, ý tôi là Turing-computable. Vui lòng sửa lại cho tôi nếu tôi hiểu sai định nghĩa của Winskels về tính toán trên trang 337, vì nó không được định nghĩa rõ ràng là Turing-computable nhưng theo cách tương đương (ít nhất là trong mắt tôi).

Ngoài ra tôi muốn chỉ ra một nguồn khác mà tôi tìm thấy để cố gắng giải thích vấn đề của tôi. Nhưng tôi vẫn không hiểu ví dụ của nó, vì về cơ bản nó giống như ví dụ về luồng từ Winskel.

EDIT 2: Nó cũng sẽ là một khởi đầu tốt trong việc giúp tôi hiểu vấn đề để chỉ ra rằng mọi chức năng tính toán là đơn điệu, tức là không tồn tại chức năng tính toán không đơn điệu.

Câu trả lời:


9

Có một số cách để giải thích "hàm ý tính toán liên tục", tôi sẽ đưa ra ở đây hai cách giải thích như vậy.

Máy Turing tính toán bản đồ liên tục

Giả sử chúng ta có một máy Turing có số lượng đầu vào vô hạn có thể được ghi trên băng đầu vào. Nó ghi kết quả vào một băng đầu ra, trong đó các ô đầu ra được ghi một lần. Có băng công việc. Máy có thể chạy mãi mãi, lấp đầy các ô đầu ra. Điều này được gọi là một loại máy hai . (Đối số cho các loại máy khác sẽ tương tự nhưng đơn giản hơn.)

Điều sau đây phải rõ ràng: khi máy ghi vào một ô đầu ra, hoạt động của nó đến thời điểm đó chỉ phụ thuộc vào một phần hữu hạn của băng đầu vào, vì lý do đơn giản là trong nhiều bước tính toán, nó không thể di chuyển đầu vào qua một số điểm. Do đó, mọi băng đầu vào đồng ý với băng đã cho đến thời điểm đó sẽ khiến máy viết cùng một câu trả lời cho cùng một ô đầu ra.

Nhưng đây là một hình thức liên tục, nếu chúng ta đặt cấu trúc liên kết chính xác vào khoảng trống của băng đầu vào và đầu ra.

Đầu tiên chúng ta đặt cấu trúc liên kết vào tập của các ký hiệu có thể được ghi lên các ô băng. Đối với điều này, chúng tôi chỉ cần chọn cấu trúc liên kết rời rạc. Một băng là một chuỗi các ký hiệu vô tận, do đó, một yếu tố của , là sản phẩm của . Hãy đặt cấu trúc liên kết sản phẩm lên nó.ΣΣωΣ

Hãy nhớ lại rằng một bộ mở cơ bản trên cho cấu trúc liên kết sản phẩm có dạng , trong đó . Nghĩa là, một bộ mở cơ bản sửa một phần ban đầu của chuỗi thành các giá trị đã cho .ΣωU(a0,,an1)={αΣωi<n.αi=ai}a0,,aiΣa0,,an

Bây giờ chúng tôi có thể kiểm tra xem hàm tính bằng máy có thực sự liên tục hay không. Lấy một bộ mở cơ bản và để . Chúng tôi cần xác minh rằng đang mở. Với mục đích này, hãy xem xét bất kỳ . Nếu chúng ta tìm thấy một bộ mở cơ bản sao cho , thì chúng ta đã hoàn thành.f:ΣωΣωV=U(a0,,an1)W=f1(V)WαWWαWW

Bởi vì , chúng ta có . Do đó, trên đầu vào , máy tạo ra một băng đầu ra bắt đầu bằng . Vào thời điểm nó viết ra các ô này, nó đã kiểm tra tối đa các ô đầu tiên của đầu vào, đối với một số . Chúng tôi có thể mất và xác minh rằng . Rõ ràng là . Để chứng minh lấy bất kỳ và quan sát rằng và đồng ý trướcαWf(α)Uαa0,a1,,an1kkNW:=U(α0,,αk)αWWαWWWβWf(α)f(β)n giá trị của đầu ra. Điều này ngụ ý rằng và do đó , theo yêu cầu.f(β)VβW

Các bản đồ tính toán được liên tục dưới dạng bản đồ giữa các đại số CPOω

Trước tiên, tôi xin lưu ý rằng những gì bạn xác định thường được gọi là " CPO" ( trong tên cho biết chúng tôi chỉ yêu cầu suprema của chuỗi).ωω

Trong các kiểu dữ liệu ngữ nghĩa biểu thị tương ứng với CPO. Trên thực tế, chúng tương ứng với đại số CPO (đây có phải trong luận án của bạn không?), Đó là CPO mà các yếu tố nhỏ gọn tạo thành một cơ sở. Dưới đây là một số định nghĩa.ω ωω

Định nghĩa: Đặt là một CPO. Một yếu tố là nhỏ gọn nếu, mỗi chuỗi mà , tồn tại mà .DωdDx0x1dixijdxj

Định nghĩa: Một CPO là đại số nếu mọi là tối cao của các phần tử nhỏ gọn bên dưới nó.ωxD

Trực giác đằng sau các yếu tố nhỏ gọn là chúng chứa "thông tin hữu hạn". Một ví dụ điển hình là , tập hợp các số tự nhiên được đặt theo , trong đó các phần tử nhỏ gọn chính xác là tập con hữu hạn của (bài tập!). Một ví dụ khác: trong CPO của các hàm liên tục các phần tử nhỏ gọn là các hàm một phần bằng với ở mọi nơi, ngoại trừ rất nhiều đối số.P(N)NωNN

Để nói rằng một CPO là đại số là để nói rằng mọi yếu tố hoàn toàn được xác định bởi các thông tin hữu hạn gần đúng với nó. Có một thực tế là trong các kiểu dữ liệu ngữ nghĩa học tương ứng với các đại số CPO, trừ khi chúng ta đang làm một điều gì đó rất bất thường.ωω

Bây giờ chúng ta có thể giải thích tại sao mọi bản đồ tính toán được liên tục. Giả sử và là CPOS và có thể tính toán được. Giả sử , , nhỏ gọn và . Theo trực giác, điều này nói rằng "phần thông tin hữu hạn xuất hiện trong đầu ra ". Vì có thể tính toán được, nên nó phải tính toán thông tin bằng cách chỉ truy cập một lượng thông tin hữu hạn về , nghĩa là có một nhỏ gọn sao cho vàDEωf:DExDeEeef(x)ef(x)fexdDdxef(d) . Đối số này nên được so sánh với đối số máy Turing ở trên. Chúng tôi đã thành lập:

Bổ đề: Nếu có thể tính toán được và cho một số và một compact , thì có sao cho và .f:DEef(x)xDeEdDdxef(d)

Chúng ta có thể sử dụng bổ đề để chỉ ra rằng một tính toán được liên tục. Giả sử là một chuỗi trong . Vì là đơn điệu, chúng tôi đã biết rằng , nhưng chúng ta cũng cần sự bất bình đẳng . Vì là đại số, nên đủ để chỉ ra rằng, bất cứ khi nào nhỏ gọn và thì . Vì vậy, giả sử . Do bổ đề tồn tại một nhỏ gọn sao chofx0x1Dfif(xi)f(ixi)f(ixi)if(xi)EeEef(ixi)eif(xi)ef(ixi)dDdixi và . Vì nhỏ gọn nên tồn tại sao cho , do đó bằng tính đơn điệu của chúng ta có . Chúng ta xong rồi.ef(d)djdxjfef(d)f(xj)if(xi)


Định nghĩa về tính liên tục mà bạn đang sử dụng và nó giống với định nghĩa tôi đã chỉ định như thế nào? Tôi không quen thuộc với các thuật ngữ cơ bản mởcấu trúc liên kết . Tôi có thể cho rằng một cấu trúc liên kết trong trường hợp này tương tự như một đơn đặt hàng không?
dùng3389669

1
Đây là những khái niệm cơ bản trong cấu trúc liên kết, tìm kiếm chúng trong bất kỳ sách giáo khoa về cấu trúc liên kết. Tôi không hiểu lắm. Bạn đang viết một lời giải thích về khả năng tính toán và tính liên tục, nhưng bạn không quen với định nghĩa tiêu chuẩn về tính liên tục? (Người bạn đang sử dụng là một trường hợp đặc biệt.) Sẽ hữu ích nếu bạn giải thích một chút về nền tảng và động lực của mình, sau đó có lẽ tôi có thể cho bạn lời khuyên tốt hơn là "học cách đi bộ trước khi bạn chạy".
Andrej Bauer

Thành thật mà nói: Tôi là một sinh viên khoa học máy tính và tôi đang làm luận án thạc sĩ. Nhiệm vụ của tôi về cơ bản là xây dựng một ngữ nghĩa học biểu thị cho phép tính lambda (cách mà Dana Scott đã làm vào đầu những năm 70). Nguồn chính của tôi là cuốn sách »Semantik von Programmiersprachen« của Rudolf Berghammer (người Đức). Từ đó tôi có định nghĩa. Thật không may trong cuốn sách đó liên tục được thúc đẩy bằng cách sử dụng lý thuyết về các điểm cố định. Luận án của tôi chỉ nên trình bày những gì thực sự cần thiết để xây dựng miền phù hợp cho một biểu tượng. học kỳ của phép tính lambda, vì vậy tôi bỏ qua phần đó.
dùng3389669

[tiếp tục] Công việc của tôi về xây dựng và các bằng chứng đã được thực hiện (đó cũng là một khía cạnh quan trọng trong công việc của tôi để mở rộng các bằng chứng tồn tại sao cho không có lỗ hổng nào được mở). Để đưa ra luận điểm của tôi, tôi muốn thúc đẩy mọi định nghĩa bằng trực giác, để các nhà khoa học máy tính trẻ khác có thể dễ dàng đọc được. Tuy nhiên, như bạn thấy, tôi thiếu trực giác.
dùng3389669

3
Cám ơn vì đã giải thích. Điều đó làm cho rất nhiều ý nghĩa. Đầu tiên, tôi không nghĩ Dana Scott đã sử dụng CPO. Anh ấy đã sử dụng các mạng liên tục và tôi đánh giá cao các kiểu Dữ liệu của anh ấy như các mạng . Điều đó sẽ cung cấp cho bạn một số quan điểm lịch sử - hãy cẩn thận tạo nên lịch sử giả mạo! Tôi sẽ bổ sung câu trả lời của mình để thúc đẩy tính liên tục trong CPO.
Andrej Bauer
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.