Sự khác biệt giữa các máy Turing xác định và không xác định nằm ở chức năng chuyển tiếp. Trong máy Turing xác định chức năng chuyển tiếp là một chức năng một phần:δ
δ: Q × B → Q × B × { l e ft , r tôi gh t }
có nghĩa là đã cho một trạng thái và một biểu tượng băng bạn có một hoặc không có trạng thái, biểu tượng đầu vào bên phải và hướng để di chuyển. Tuy nhiên, trong các máy Turing không xác định, nó trông giống như (ở đây là tập hợp các tập hợp con của một tập hợp):P
δ: Q × B → P( Q × B × { l e ft , r tôight})
có nghĩa là bạn không có hoặc một vài trạng thái, biểu tượng băng để viết hoặc hướng để di chuyển đến. Điều này mang lại cho máy của bạn khả năng lựa chọn hiệu quả trong trạng thái như vậy và biểu tượng băng giữa các "nhánh" tính toán khác nhau có thể.
Trong thực tế, điều này có nghĩa là chúng ta có thể tính toán các đầu ra khác nhau cho cùng một đầu vào. Do đó, ngôn ngữ của máy Turing không xác định là tập hợp các từ mà chúng tôi tìm thấy một dẫn xuất trong các chuyển đổi được xác định. Một chạy cụ thể có thể không tìm thấy dẫn xuất như vậy nhưng điều quan trọng là nó có thể xảy ra. Vì vậy, khi bạn "đoán", bạn chỉ cần chọn một trong những nhánh tính toán có thể.
Ví dụ sử dụng
L = { ( M1, M2) : tồn tại ít nhất một từ được cả hai TM chấp nhận cùng một lúc }
Trong trường hợp này, người ta chỉ có thể "đoán" một từ và thực hiện M 1 và M 2 trên w để kiểm tra xem nếu cả hai chấp nhận, họ chấp nhận cùng một lúc. Việc đoán có thể hoạt động bằng cách giới thiệu trạng thái q với các chuyển tiếp ghi trên một số băng 0 giây và / hoặc 1 giây và thoát ra bằng cách đọc bất kỳ ký hiệu nào cho máy chung.wM1M2wq01
Thành thật mà nói, tôi không bắt gặp bất kỳ ví dụ nào về việc sử dụng sai "đoán" này nhưng kiểm tra xem mỗi lần sử dụng cụm từ này có được thực hiện chính xác hay không, sẽ giảm để xác minh rằng bạn có thể xây dựng một automata với cấu trúc này mô phỏng việc đoán.