พยานสำหรับซอฟต์แวร์ทางคณิตศาสตร์


11

ฉันก็เหมือนกับหลาย ๆ คนที่เป็นผู้ใช้ซอฟต์แวร์ทางคณิตศาสตร์เช่น Mathematica และ Maple อย่างไรก็ตามฉันได้กลายเป็นความผิดหวังมากขึ้นโดยหลายกรณีที่ซอฟต์แวร์ดังกล่าวเพียงแค่ให้คำตอบที่ผิดโดยไม่มีการเตือน สิ่งนี้สามารถเกิดขึ้นได้เมื่อทำการดำเนินการทุกประเภทจากผลรวมอย่างง่ายไปจนถึงการปรับให้เหมาะสมระหว่างตัวอย่างอื่น ๆ อีกมากมาย

ฉันสงสัยในสิ่งที่สามารถทำได้เกี่ยวกับปัญหาร้ายแรงนี้ สิ่งที่จำเป็นคือวิธีการอนุญาตให้ผู้ใช้ตรวจสอบความถูกต้องของคำตอบที่ได้รับเพื่อให้พวกเขามีความมั่นใจในสิ่งที่พวกเขากำลังบอก หากคุณต้องการคำตอบจากเพื่อนร่วมงานคณิตศาสตร์เขา / เธออาจแค่นั่งลงและแสดงให้คุณเห็นการทำงานของพวกเขา อย่างไรก็ตามนี่เป็นไปไม่ได้ที่คอมพิวเตอร์จะทำในกรณีส่วนใหญ่ คอมพิวเตอร์ช่วยให้คุณเห็นคำตอบที่ถูกต้องและเรียบง่ายได้หรือไม่? การตรวจสอบอาจต้องใช้คอมพิวเตอร์ แต่หวังว่าการตรวจสอบอัลกอริทึมจะง่ายกว่าการตรวจสอบอัลกอริธึมเพื่อสร้างพยานตั้งแต่แรก เมื่อสิ่งนี้จะเป็นไปได้และสิ่งนี้จะเป็นกรงขังอย่างไร

ดังนั้นโดยสรุปคำถามของฉันมีดังต่อไปนี้

เป็นไปได้อย่างน้อยก็ในทางทฤษฎีสำหรับซอฟต์แวร์ทางคณิตศาสตร์ที่จะให้หลักฐานการตรวจสอบสั้น ๆ พร้อมกับคำตอบที่คุณถาม?

กรณีเล็ก ๆ น้อย ๆ ที่เราสามารถทำสิ่งนี้ได้ทันทีคือการแยกตัวประกอบของจำนวนเต็มของจำนวนเต็มหรือปัญหา NP- สมบูรณ์แบบคลาสสิก (เช่นวงจรมิลโตเนียนเป็นต้น)


คุณสามารถยกตัวอย่างที่คำตอบที่ผลิตผิดหรือไม่? แน่นอนว่ามันเป็นไปได้ที่จะสร้างหลักฐานพิสูจน์ความถูกต้องของการคำนวณ แต่การพิสูจน์ดังกล่าวไม่จำเป็นต้องตรวจสอบด้วยมือเพียงเพราะซอฟต์แวร์มักใช้อัลกอริธึมที่ไม่สำคัญซึ่งมีประสิทธิภาพมากกว่าวิธีที่ใช้งานง่ายที่สุด
Mahdi Cheraghchi

ฉันยกตัวอย่างสองคำถาม แต่สีของลิงก์อาจไม่ง่ายที่จะดู คลิกที่ "จำนวนเงิน" หรือ "การเพิ่มประสิทธิภาพ"

1
ประเภทของ Manuel Blum และ Sampath Kannan ทำในdl.acm.org/citation.cfm?id=200880อย่างไร
Andrej Bauer

คุณอาจต้องการที่จะดูที่รับรองอัลกอริทึม
Pratik Deoghare

ใช่ระบบซอฟต์แวร์เชิงสัญลักษณ์มากเกินไปถือว่าเป็น "กล่องดำ" และนี่ก็เป็นกลยุทธ์ขององค์กรเพื่อปกป้องความลับทางการค้า (1) ลองใช้ทางเลือกโอเพนซอร์ซ (2) พิจารณาวิศวกรรมซอฟต์แวร์ "แนวปฏิบัติที่ดีที่สุด" ของ "การทดสอบหน่วย" ความคิดสั้น ๆ ก็คือการสร้าง "การตรวจสอบสติ" ของผลลัพธ์เช่นโดยการแทนที่ค่าที่รู้จักการปรับเปลี่ยนอื่น ๆ ผกผัน ฯลฯ สำหรับการทดสอบที่สร้างขึ้นอย่างดีมันไม่น่าเป็นไปได้ที่ทั้งสูตรและการทดสอบจะล้มเหลวในลักษณะที่จะให้ a "false positive"
vzn

คำตอบ:


5
  1. แนวคิดของ "พยาน" หรือ "หลักฐานที่ตรวจสอบได้" นั้นไม่ใช่เรื่องใหม่ทั้งหมด: ดังที่กล่าวไว้ในความคิดเห็นแล้วมองหาแนวคิดของ "ใบรับรอง" สามตัวอย่างมาถึงใจมีมากขึ้น (ในความคิดเห็นและที่อื่น ๆ ):

    • Kurt Mehlhorn อธิบายในปี 1999 ปัญหาที่คล้ายกันในอัลกอริทึมการคำนวณทางเรขาคณิต (เช่นข้อผิดพลาดเล็กน้อยในพิกัดสามารถให้ข้อผิดพลาดใหญ่ในผลลัพธ์ของอัลกอริทึมบางส่วน), แก้ไขด้วยวิธีที่คล้ายกันในไลบรารี่Ledaโดยยืนยันว่า ของคำตอบนอกเหนือจากคำตอบเอง

    • Demaine, Lopez-Ortiz และ Munroในปี 2000 ใช้แนวคิดของใบรับรอง (พวกเขาเรียกพวกเขาว่า "พยานหลักฐาน") เพื่อแสดงขอบเขตที่ปรับลดลงในการคำนวณของสหภาพและจุดตัด (และความแตกต่าง แต่นี่เป็นเรื่องเล็กน้อย) ของชุดเรียง อย่าแยกงานของพวกเขาออกเพราะพวกเขาไม่ได้ใช้หนังสือรับรองเพื่อป้องกันข้อผิดพลาดในการคำนวณ: พวกเขาแสดงให้เห็นว่าแม้ว่าใบรับรองจะเป็นแบบเชิงเส้นตรงตามขนาดของอินสแตนซ์ในกรณีที่แย่ที่สุดก็มักจะสั้นกว่า "ในเวลาเชิงเส้นย่อย (ให้การเข้าถึงแบบสุ่มไปยังอินพุตเป็นอาร์เรย์ที่เรียงลำดับหรือ B-Tree) และโดยเฉพาะอย่างยิ่งในเวลาน้อยกว่าที่จำเป็นในการคำนวณใบรับรองดังกล่าว

    • ฉันได้ใช้แนวคิดของใบรับรองเกี่ยวกับปัญหาอื่น ๆ ตั้งแต่เห็น Ian Munro นำเสนอการดำเนินการที่Alenex 2001และโดยเฉพาะอย่างยิ่งสำหรับการเปลี่ยนแปลง (ขอโทษสำหรับปลั๊กไร้ยางอายอีกอันหนึ่งกำลังมา) ซึ่งใบรับรองสั้นที่สุด กว่าในกรณีที่แย่ที่สุดหรือโดยเฉลี่ยซึ่งให้โครงสร้างของข้อมูลที่ถูกบีบอัดสำหรับการเรียงสับเปลี่ยน ที่นี่อีกครั้งการตรวจสอบใบรับรอง (เช่นคำสั่งซื้อ) ใช้เวลาเชิงเส้นส่วนใหญ่น้อยกว่าการคำนวณ (เช่นการเรียงลำดับ)

  2. แนวคิดไม่ได้เป็นประโยชน์อย่างเต็มที่สำหรับการตรวจสอบข้อผิดพลาด: มีปัญหาในการตรวจสอบใบรับรองใช้เวลามากเท่ากับการสร้างมัน (หรือเพียงแค่สร้างผลลัพธ์) สองตัวอย่างมาถึงใจหนึ่งเรื่องไม่สำคัญและอีกเรื่องหนึ่งที่ซับซ้อนบลัมและกันนัน (กล่าวถึงในความคิดเห็น) ให้ผู้อื่น

    • nn
    • ใบรับรองสำหรับฮัลล์นูนในสองและสามมิติถ้าคะแนนได้รับในลำดับสุ่มใช้เวลามากเป็นบิตในการเข้ารหัสเป็นการเปรียบเทียบกับการคำนวณ[FOCS 2009] (ปลั๊กไร้ยางอายอื่น ๆ )

Ledaห้องสมุดเป็นความพยายามทั่วไปที่สุด (ที่ฉันรู้) ไปสู่การสร้างอัลกอริทึมการผลิตใบรับรองกำหนดขึ้นบรรทัดฐานในการปฏิบัติ บทความของ Blum และ Kannanเป็นความพยายามที่ดีที่สุดที่ฉันเห็นเพื่อให้เป็นบรรทัดฐานในเชิงทฤษฎี แต่พวกเขาแสดงขอบเขตของวิธีการนี้

หวังว่ามันจะช่วย ...


ขอบคุณที่น่าสนใจมาก ด้วยความเคารพในประเด็นของคุณ 2. ฉันคิดว่าฉันกำลังพูดถึงบางสิ่งที่แตกต่างออกไปเล็กน้อย ปัญหาไม่ใช่ข้อบกพร่องในโค้ด แต่เป็นอัลกอริทึมที่เรารู้ว่าอาจให้คำตอบที่ผิด นอกจากนี้ในระดับโลกฉันไม่รู้ด้วยซ้ำว่าใบรับรองที่มีประโยชน์สำหรับฟังก์ชันทางคณิตศาสตร์จำนวนมากจะมีหน้าตาเป็นอย่างไร ตัวอย่างเช่นผลรวมอนันต์หรือพูดการย่อขนาดของฟังก์ชัน

เพื่อความชัดเจนเล็กน้อย ดูเหมือนว่ายากมากที่จะคิดขั้นตอนวิธีที่ถูกต้องที่พิสูจน์ได้สำหรับปัญหาทางคณิตศาสตร์มากมาย อย่างไรก็ตามเราอาศัยอยู่กับอัลกอริธึมที่อาจทำให้เกิดข้อผิดพลาดโดยไม่มีการเตือนเรา (และอันที่จริงแล้วไม่ถูกต้องพิสูจน์ได้) ด้วยเหตุผลจริง ความหวังว่ามันจะไม่ยากที่จะกำหนดตัวตรวจสอบความถูกต้องที่พิสูจน์ได้อย่างถูกต้องสำหรับปัญหาชุดเดียวกัน

ฉันยังห่างไกลจากความเชี่ยวชาญของฉัน แต่ฉันคิดว่าข้อผิดพลาดในการคำนวณมักเกิดจากข้อผิดพลาดในการปัดเศษที่มีผลลัพธ์ระดับกลาง ในอัลกอริทึม ผมจะมีความคิดว่าระบบพีชคณิตเช่นเมเปิ้ลและ MATLAB หลีกเลี่ยงผู้ :(
เจเรมี

มันเป็นคำถามที่น่าสนใจและอาจมีบางคนที่นี่รู้แน่นอน .. แต่คำตอบที่ไม่ถูกต้องจำนวนมากที่ฉันกำลังพูดถึงนั้นไม่ได้ใช้สำหรับการคำนวณเชิงตัวเลขดังนั้นนี่จึงหมายถึงอย่างน้อยที่สุดว่าปัญหามีมากกว่าที่คุณอธิบาย ฉันไม่ทราบถึงความซับซ้อนของการ จำกัด การคำนวณ / ผลรวมไม่สิ้นสุด ฯลฯ แต่ฉันคิดว่าโดยทั่วไปแล้วพวกเขาจะดื้อดึงในกรณีที่เลวร้ายที่สุดและดังนั้นการวิเคราะห์พฤติกรรมซึ่งบางครั้งก็ให้คำตอบที่ผิด / จำเป็น mathematica.stackexchange.com/questions/tagged/bugsนั้นไม่ใช่เรื่องแปลกใหม่ที่จะทำความเข้าใจกับสิ่งต่าง ๆ ที่ผิดไป

ทฤษฎี CS มีแนวคิดของการทดสอบตัวเองซึ่งใช้กับปัญหามากมายในพีชคณิตเชิงเส้น หนึ่งในแนวคิดพื้นฐานคือสำหรับปัญหาต่าง ๆ วิธีแก้ปัญหาสามารถตรวจสอบได้ (อาจมีข้อมูลเพิ่มเติมเล็กน้อย) ได้ง่ายกว่าที่จะคำนวณได้ ดูเช่นhttps://doi.org/10.1016/0022-0000(93)90044-W
Neal Young
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.