Bài toán halting

Một phần của tài liệu CHIẾN LƯỢC CHỨNG MINH TRONG SUY LUẬN TOÁN HỌC ĐỀ TÀI NGHIÊN CỨU KHOA HỌC Thành phố (Trang 37 - 41)

Một số bài toán tồn tại nhưng có thể chứng minh được rằng không tồn tại thuật giải để giải chúng. Những bài toán như vậy gọi là bài toán không giải được. Chứng minh đầu tiên rằng có tồn tại các bài toán không giải được là của

Alan Turing, nhà toán học, tin học vĩ đại người Anh. Bài toán mà ông chứng minh không giải được là bài toán halting.

Bây giờ chúng ta sẽ mô tả lại chứng minh một trong những định lí nổi tiếng nhất trong tin học. Chúng ta sẽ chứng minh rằng tồn tại một bài toán không thể giải được bằng cách dùng bất cứ chương trình nào. Đó là bài toán halting. Bài toán đặt ra câu hỏi, liệu có một chương trình làm được điều này không: nó lấy một chương trình máy tính và đầu vào chương trình đó làm đầu vào và xác định xem chương trình đó cuối cùng có dừng lại không khi chạy với đầu vào đó. Có được một chương trình như vậy, nếu như nó tồn tại, sẽ rất là thuận tiện. Chắc hẳn khi đó có thể kiểm tra được một chương trình bước vào vòng lặp vô hạn có trợ giúp gì cho khi viết và khi sữa lỗi các chương trình hay không. Tuy nhiên, vào năm 1936, Alan Turing đã chứng tỏ được rằng một chương trình như vậy không tồn tại.

Trước hết cần lưu ý rằng chúng ta không thể đơn giản chạy một chương trình và quan sát điều mà nó xác định là nó có dừng lại hay không với đầu vào đã cho. Nếu chương trình dừng lại thì chúng ta có câu trả lời, nhưng nếu nó vẫn tiếp tục chạy sau một khoảng thời gian cố định nào đó, thì ta không thể biết nó sẽ không bao giờ dừng lại hay là chúng ta đợi chưa đủ lâu để thấy nó kết thúc. Xét đến cùng việc thiết kế một chương trình mà nó sẽ dừng lại sau khi đã chạy cả thế kỷ là không khó.

Chúng ta sẽ mô tả chứng minh của Turing, đó là một chứng minh bằng phản chứng.

Giả sử bài toán halting có lời giải, đó là một chương trình được kí hiệu là H(P, I). Chương trình H(P, I) có hai đầu vào, một đầu vào chương trình P và một đầu vào khác là I, nó chính là đầu vào của chương trình P. H(P, I) sẽ phát ra xâu “halt” (dừng) như là đầu ra nếu H xác định được rằng P sẽ dừng khi cho I như một đầu vào. Ngược lại, nó sẽ phát ra xâu “loop forever” (lặp vĩnh viễn) như đầu ra. Chúng ta sẽ chứng minh điều này dẫn tới mâu thuẫn.

tự, xâu này có thể được phiên dịch như một dãy các bit. Điều này có nghĩa tự bản thân một chương trình có thể được dùng như dữ liệu. Do đó một chương trình có thể coi như một đầu vào của một chương trình khác hoặc là đầu vào của chính nó. Suy ra, H có thể lấy chương trình P như cả hai đầu vào của nó: đó là chương trình và đầu vào của chương trình đó. Như vậy H có thể xác định P sẽ dừng hay không khi nó được cho một bản sao của chính nó như là một đầu vào.

Để chứng tỏ không tồn tại chương trình H nào giải được bài toán halting, chúng ta xây dựng một chương trình đơn giản kí hiệu là K(P) làm việc như sau, có sử dụng đầu ra của H(P, P). Nếu đầu ra của H(P, P) là “loop forever”, mà điều này có nghĩa là sẽ lặp vĩnh viễn khi cho nó một bản sao của chính nó như là đầu vào, thì khi đó K(P) sẽ dừng lại. Còn nếu đầu ra của H(P, P) là “halt”, mà điều này có nghĩa là sẽ dừng lại khi cho nó một bản sao của chính nó như là đầu vào, thì khi đó K(P) sẽ lặp vĩnh viễn. Điều này có nghĩa là K(P) làm những cái ngược với những cái mà đầu ra của H(P, P) chỉ định.

Bây giờ giả sử chúng ta cung cấp cho K đầu vào lại chính là K. Khi đó đến đầu ra của H(K, K) là “loop forever”, thì theo định nghĩa của K, K(K) phải dừng. Ngược lại, nếu đầu ra của H(K, K) là “halt”, thì theo định nghĩa của K, K(K) phải lặp vĩnh viễn, điều này trái với cái mà H đưa ra. Như vậy, trong cả hai trường hợp chúng ta đều gặp mâu thuẫn.

Tóm lại, H không thể luôn luôn cho ta câu trả lời đúng. Do đó, không có chương trình nào có thể giải được bài toán halting.

CHƯƠNG 4: KẾT LUẬN

Chúng ta cần nắm vững một số phương pháp chứng minh quan trọng và cách sử dụng của mỗi phương pháp đó. Đằng sau các phương pháp đó là việc xây dựng chứng minh như thế nào. Đó là chiến lược chứng minh, nó bao gồm việc chúng ta lựa chọn phương pháp chứng minh nào cho thích hợp dựa trên các suy luận toán học, cùng các mối liên quan của vấn đề đó và sau đó xây dựng các bước lập luận theo phương pháp suy luận trên. Chiến lược này được áp dụng rộng rãi không chỉ trong toán học, tin học và nhiều lĩnh vực khác.

Chiến lược chứng minh trong suy luận toán học thì có thể còn rất nhiều. Đây chỉ là một phần mà tôi tìm hiểu, nghiên cứu, phân tích và tổng hợp kết hợp với kinh nghiệm của bản thân và ý kiến trao đổi của đồng nghiệp, nhằm góp cho học sinh, sinh viên biết thêm về suy luận logic, cách chứng minh trong toán học và áp dụng nó vào việc học tập, công việc của mình.

TÀI LIỆU THAM KHẢO

- Nguyễn Hữu Anh. Toán Rời Rạc. TP.HCM: NXB Giáo Dục, 1999.

- Trần Ngọc Danh. Toán Rời Rạc Nâng Cao. TP.HCM: NXB Đại Học Quốc Gia TPHCM, 2004.

- Kenneth H. Rosen. Discrete Mathematics and Its Applications. TP.HCM: NXB Giáo Dục, 2007.

Một phần của tài liệu CHIẾN LƯỢC CHỨNG MINH TRONG SUY LUẬN TOÁN HỌC ĐỀ TÀI NGHIÊN CỨU KHOA HỌC Thành phố (Trang 37 - 41)

Tải bản đầy đủ (PDF)

(41 trang)