เป็นไปได้ไหมที่จะคำนวณว่าทั้งสองฟังก์ชั่นมีความเท่าเทียมกันหรือไม่?


9

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

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

ฉันควรดูความหมายเชิง Denotational หรือไม่เกี่ยวข้อง?

ฉันสนใจพอยน์เตอร์เพื่อทำการวิจัยในพื้นที่นี้และคำต่างๆที่ใช้อธิบายเรื่องที่อาจช่วยในการค้นหาวรรณกรรมของฉัน

คำตอบ:


8

ใช่. หากคุณสามารถตรวจสอบว่าพวกเขาเหมือนกันแล้วคอมพิวเตอร์จึงสามารถ

ต่อไปนี้เป็นข้อกำหนดโดยย่อสำหรับการจัดเรียงจำนวนเต็มใน Coq:

Inductive natlist : Type :=
| nil : natlist
| cons : nat → natlist → natlist.

Fixpoint is_sorted (l : natlist ) : bool :=
    match l with
    |  nil => true
    |  (cons x nil) => true
    |  (cons x (cons y r)) => if x <= y then is_sorted (cons y r) else false
    end.

...

Theorem sort_spec : forall l, is_sorted (sort_list l).

ข้อมูลจำเพาะสามารถเข้ารหัสโดยตรงในการประกาศการจัดเรียงโดยใช้ชนิดที่อ้างอิง

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

ในโลกวิศวกรรมซอฟต์แวร์การค้นหาฟังก์ชันที่เทียบเท่ากันที่เรียกว่าการตรวจจับการเลียนแบบความหมาย

เดฟคลาร์กยังให้คำตอบที่ดีสำหรับคำถามนี้ใน CS StackExchange: /cs/2059/how-do-you-check-if-two-algorithms-return-the-sult-sult-sult-sult-sult-sult-same-result เผื่อใดอินพุต

ทั้งหมดนี้ตกอยู่ภายใต้ร่มของวิธีการทางการและการเขียนโปรแกรมภาษา ความหมายเชิง Denotational เป็นเทคนิคหนึ่งระดับสำหรับการสร้างแบบจำลองความหมาย แต่พวกเขาไม่ชอบที่จะใช้งานได้ยากเมื่อเทียบกับความหมายเชิงปฏิบัติการ


ขอบคุณสำหรับคำตอบ! นี่คือสิ่งที่ฉันกำลังค้นหา
Matthijs Steen

4
ฉันไม่เห็นด้วยอย่างยิ่งกับกฎหมายที่ความหมายเชิง Denotational มี "หลุดพ้นจากความโปรดปราน" ขึ้นอยู่กับว่าคุณถามใครเป็นส่วนใหญ่
Andrej Bauer

5

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

การตรวจสอบสามารถดำเนินการได้หลายรูปแบบเช่นเหตุผลใน ZFC set-theory โดยใช้ความหมายของการปฏิบัติการ อย่างไรก็ตามนั่นจะเจ็บปวด หากความหมายเชิง Denotational มีอยู่ก็สามารถนำมาใช้ได้เช่นกัน แต่ความหมายเชิง Denotational ที่ดีนั้นมีอยู่เพียงสองสามภาษา โดยทั่วไปจะใช้ logics ของโปรแกรมเช่นตรรกะของ Hoareเพื่อแสดงความเท่าเทียมกันของโปรแกรม เพื่อให้สามารถทำเช่นนี้ได้ Hoare logics สำหรับภาษาที่มีฟังก์ชั่นมักจะต้องใช้ความจริงที่ระบุว่าf=gxα.f(x)=g(x)สมมติว่า f และ g ฟังก์ชั่นของประเภท αβ (รายละเอียดของสัจพจน์ที่แตกต่างกันกับรายละเอียดของวิธีการที่เลือกไว้เพื่อ Hoare logics)


ขอบคุณสำหรับคำตอบ. ฉันจะตรวจสอบตรรกะของ Hoare ความหมายเชิง Denotational ยากที่จะนิยามเมื่อเปรียบเทียบกับตรรกะของ Hoare หรือมันเหมาะสมน้อยกว่าสำหรับภาษาส่วนใหญ่หรือไม่? ความเสมอภาคในมิติไม่สามารถตัดสินใจได้โดยทั่วไปเนื่องจากปัญหาการหยุดชะงักหรือไม่? ถ้าฟังก์ชั่นต้องหยุดอยู่เสมอเช่นในภาษาที่ใช้งานได้ทั้งหมดมันจะไม่สามารถตัดสินใจได้โดยทั่วไปหรือ หรือมีเหตุผลอื่นที่ทำให้ไม่สามารถตัดสินใจโดยทั่วไปได้หรือไม่?
Matthijs Steen

@ Matthijs Steen: ความหมายเชิง Denotational ที่ดีสำหรับภาษาโปรแกรมที่มีคุณสมบัติที่น่าสนใจนั้นยากที่จะเข้าใจ ตรงกันข้ามกับตรรกะของ Hoare ที่เกิดขึ้นในช่วงสิบปีที่ผ่านมาและเราสามารถสร้างมันขึ้นมาสำหรับภาษาโปรแกรมใดก็ได้ในตอนนี้ ความเท่าเทียมกันในมิติไม่สามารถอธิบายได้เพราะ (ทำให้ง่ายขึ้นเล็กน้อย) มิฉะนั้นคุณสามารถตรวจสอบว่าโปรแกรมใด ๆP เทียบเท่ากับบริบท 0โปรแกรมยุติการทำงานเสมอซึ่งเป็นตัวแปรของปัญหาการหยุดทำงาน หากคุณโยนเงื่อนไขความละเอียดที่เพียงพอให้กับภาษาในที่สุดคุณก็จะพบกับสิ่งที่ ... (ต่อ)
Martin Berger

... มีความเท่าเทียมกันทางบริบทที่แน่นอน แต่ทราบว่าอาร์ Loader แสดงให้เห็นว่าแม้ PCF finitary มีความเท่าเทียมกันในบริบทที่ไม่สามารถอธิบายได้
Martin Berger

-2

คำตอบอย่างรวดเร็ว (ฉันยอมรับว่าฉันไม่ได้ใช้เวลามาก ... ) ทฤษฎีบทข้าวบอกว่าสำหรับคำถามที่ไม่สำคัญก็ไม่สามารถบอกได้ว่าฟังก์ชั่นที่คำนวณโดยโปรแกรมจะมีคุณสมบัติหรือไม่ ดังนั้นคำถามที่นี่ไม่สามารถตัดสินใจได้


1
มันไม่ได้ระบุว่า "... สำหรับคุณสมบัติที่ไม่สำคัญของฟังก์ชั่นบางส่วน ... " ดังนั้นมันจะไม่สามารถตัดสินใจได้สำหรับฟังก์ชั่นทั้งหมดหรือไม่?
Matthijs Steen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.