Nhân chứng cho phần mềm toán học


11

Tôi, giống như nhiều người, là một người sử dụng phần mềm toán học sắc sảo như Mathematica và Maple. Tuy nhiên, tôi đã trở nên ngày càng thất vọng bởi nhiều trường hợp phần mềm như vậy chỉ đơn giản là cung cấp cho bạn câu trả lời sai mà không có cảnh báo. Điều này có thể xảy ra khi thực hiện tất cả các loại hoạt động từ tổng đơn giản đến tối ưu hóa trong số nhiều ví dụ khác.

Tôi đã tự hỏi những gì có thể được thực hiện về vấn đề nghiêm trọng này. Điều cần thiết là một số cách để cho phép người dùng xác minh tính chính xác của câu trả lời được đưa ra để họ có niềm tin vào những gì họ đang được nói. Nếu bạn nhận được một giải pháp từ một đồng nghiệp toán học, cô ấy / anh ấy có thể chỉ cần ngồi xuống và cho bạn thấy công việc của họ. Tuy nhiên, điều này là không khả thi đối với một máy tính để làm trong hầu hết các trường hợp. Thay vào đó, máy tính có thể cung cấp cho bạn một nhân chứng đơn giản và dễ kiểm tra về tính chính xác của câu trả lời của họ không? Việc kiểm tra có thể phải được thực hiện bằng máy tính nhưng hy vọng việc kiểm tra thuật toán kiểm tra sẽ dễ dàng hơn nhiều so với việc kiểm tra thuật toán để tạo ra nhân chứng ngay từ đầu. Khi nào thì điều này là khả thi và làm thế nào chính xác điều này có thể được chính thức hóa

Vì vậy, tóm lại, câu hỏi của tôi là như sau.

Về lý thuyết, phần mềm toán học có thể cung cấp một bằng chứng kiểm tra ngắn cùng với câu trả lời bạn đã yêu cầu không?

Một trường hợp tầm thường trong đó chúng ta có thể làm điều này ngay lập tức là để nhân tố số nguyên tất nhiên hoặc nhiều vấn đề hoàn chỉnh NP cổ điển (ví dụ: mạch Hamilton, v.v.).


Bạn có thể đưa ra một ví dụ trong đó câu trả lời được sản xuất là sai? Tất nhiên có thể tạo ra một bằng chứng có thể kiểm chứng được về tính chính xác của các tính toán, nhưng bằng chứng đó không dễ kiểm tra bằng tay, đơn giản vì phần mềm thường sử dụng các thuật toán không tầm thường, hiệu quả hơn các thuật toán trực quan nhất.
MCH

Tôi đã đưa ra hai ví dụ trong câu hỏi nhưng màu sắc liên kết có thể không dễ nhìn thấy. Nhấp vào "tổng" hoặc "tối ưu hóa".

1
Sắp xếp những gì mà Manuel Blum và Sampath Kannan đã làm trong dl.acm.org/citation.cfm?id=200880 ?
Andrej Bauer

Bạn có thể muốn xem qua Xác nhận thuật toán .
Pratik Deoghare

vâng, có quá nhiều hệ thống phần mềm tượng trưng được coi là "hộp đen" và đây cũng là một chiến lược của công ty để bảo vệ bí mật thương mại. (1) thử các lựa chọn thay thế nguồn mở (2) xem xét kỹ thuật phần mềm "thực hành tốt nhất" của "kiểm thử đơn vị". Tóm lại, ý tưởng sẽ là tạo ra "kiểm tra độ chính xác" của các kết quả, ví dụ bằng cách thay thế các giá trị đã biết, các thao tác khác, nghịch đảo, v.v. một "dương tính giả".
vzn

Câu trả lời:


5
  1. Khái niệm "nhân chứng" hoặc "bằng chứng có thể kiểm tra" không hoàn toàn mới: như đã đề cập trong các bình luận, hãy tìm khái niệm "chứng chỉ". Ba ví dụ xuất hiện trong tâm trí, có nhiều hơn (trong các ý kiến ​​và các nơi khác):

    • Kurt Mehlhorn đã mô tả năm 1999 một vấn đề tương tự trong các thuật toán hình học tính toán (ví dụ: các lỗi nhỏ trong tọa độ có thể gây ra lỗi lớn trong kết quả của một số thuật toán), đã giải quyết theo cách tương tự trong thư viện Leda , bằng cách nhấn mạnh rằng mỗi thuật toán tạo ra một "chứng chỉ" câu trả lời của nó ngoài câu trả lời chính nó.

    • Demaine, Lopez-Ortiz và Munro năm 2000 đã sử dụng các khái niệm chứng chỉ (họ gọi chúng là "bằng chứng") để hiển thị giới hạn dưới thích ứng về tính toán của liên kết và giao điểm (và sự khác biệt, nhưng đây là tầm thường) của các bộ sắp xếp. Đừng loại trừ công việc của họ vì họ không sử dụng chứng chỉ để bảo vệ chống lại lỗi máy tính: họ đã chỉ ra rằng mặc dù chứng chỉ có thể tuyến tính theo kích thước của trường hợp trong trường hợp xấu nhất, nhưng nó thường ngắn hơn và do đó có thể được "kiểm tra "Trong thời gian tuyến tính (được cấp quyền truy cập ngẫu nhiên vào đầu vào dưới dạng một mảng được sắp xếp hoặc Cây B), và đặc biệt là ít hơn thời gian cần thiết để tính toán một chứng chỉ như vậy.

    • Tôi đã sử dụng khái niệm chứng chỉ cho nhiều vấn đề khác kể từ khi thấy Ian Munro trình bày việc triển khai của họ tại Alenex 2001 , và đặc biệt là hoán vị (xin lỗi cho phích cắm không biết xấu hổ, một vấn đề khác đang đến), trong trường hợp chứng chỉ ngắn hơn trong trường hợp xấu nhất hoặc trung bình, tạo ra cấu trúc dữ liệu nén cho hoán vị. Ở đây một lần nữa, việc kiểm tra chứng chỉ (tức là thứ tự) mất nhiều thời gian tuyến tính, ít hơn so với tính toán nó (tức là sắp xếp).

  2. Khái niệm này không phải lúc nào cũng hữu ích cho việc kiểm tra lỗi: có những vấn đề trong đó việc kiểm tra chứng chỉ mất nhiều thời gian như sản xuất nó (hoặc đơn giản là tạo ra kết quả). Hai ví dụ xuất hiện trong đầu, một tầm thường và một phức tạp, Blum và Kannan (được đề cập trong các bình luận) đưa ra cho những người khác.

    • nn
    • Chứng chỉ cho thân lồi theo hai và ba chiều, nếu các điểm được đưa ra theo thứ tự ngẫu nhiên, sẽ lấy càng nhiều bit để mã hóa khi so sánh để tính toán [FOCS 2009] (phích cắm không biết xấu hổ khác).

Thư viện Leda là nỗ lực chung nhất (mà tôi biết) đối với việc biến các thuật toán sản xuất chứng chỉ xác định thành chuẩn mực trong thực tế. Bài báo của Blum và Kannan là nỗ lực tốt nhất tôi thấy để biến nó thành chuẩn mực trong lý thuyết, nhưng chúng cho thấy giới hạn của phương pháp này.

Hy vọng nó giúp...


Cảm ơn bạn rất thú vị. Đối với quan điểm của bạn 2. Tôi nghĩ rằng tôi đang nói về một cái gì đó hơi khác. Vấn đề không phải là lỗi trong mã mà là các thuật toán mà chúng ta biết có thể đưa ra câu trả lời sai. Ngoài ra, ở mức độ trần tục, tôi thậm chí không biết một chứng chỉ hữu ích cho nhiều hàm toán học sẽ trông như thế nào. Ví dụ, cho một tổng vô hạn hoặc, giả sử, tối thiểu hóa một hàm.

Để được rõ ràng hơn một chút. Có vẻ như rất khó để đưa ra các thuật toán có thể chứng minh chính xác cho nhiều vấn đề toán học. Tuy nhiên, chúng tôi sống với các thuật toán có thể mắc lỗi mà không cảnh báo chúng tôi (và thực tế là không chính xác) vì lý do thực tế. Hy vọng rằng nó không (khó) khó để đưa ra các trình kiểm tra tính chính xác có thể chứng minh chính xác cho cùng một bộ vấn đề.

Tôi đang đi xa chuyên môn của mình, nhưng tôi nghĩ rằng các lỗi tính toán thường được gây ra bởi các lỗi làm tròn với kết quả trung gian (rõ ràng là trường hợp trong các ví dụ thúc đẩy Leda) trên các hoạt động cơ bản (nhân, chia, v.v.) chứ không phải lỗi trong các thuật toán. Tôi có thể nghĩ rằng các hệ thống đại số như maple và matlab đã tránh được những điều đó :(
Jeremy

Đó là một câu hỏi thú vị và có lẽ ai đó ở đây biết chắc chắn .. tuy nhiên nhiều câu trả lời không chính xác mà tôi đang nói không dành cho tính toán số nên điều này ngụ ý ít nhất là prima facie rằng các vấn đề nhiều hơn bạn mô tả. Tôi không biết sự phức tạp của giới hạn tính toán / tổng vô hạn, v.v. nhưng tôi cho rằng nói chung chúng không thể truy cập được trong trường hợp xấu nhất và do đó, các phương pháp phỏng đoán đôi khi đưa ra câu trả lời sai là cần thiết / hữu ích. mathematica.stackexchange.com/questions/tagged/bugs không phải là không đủ thông tin để có được một cảm giác cho những điều mà đi sai.

CS lý thuyết có khái niệm tự kiểm tra, áp dụng cho nhiều vấn đề trong đại số tuyến tính. Một trong những ý tưởng cơ bản là đối với nhiều vấn đề, giải pháp có thể được kiểm tra (có thể có thêm một chút thông tin) dễ dàng hơn so với nó có thể được tính toán. Xem ví dụ: https://doi.org/10.1016/0022-0000(93)90044-W .
Neal Young
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.