อัลกอริทึมการผกผันของโปรแกรมสำหรับโปรแกรมลำดับสูงกว่า


10

คำว่าการผกผันของโปรแกรม มีหลายความหมาย แต่อาจเริ่มด้วยงานของ J. McCarthy ในปี 1956 การกลับมาของฟังก์ชั่นที่นิยามโดย Turing Machinesในบริบทของ AI โดยขณะนี้มีการค้นพบการเชื่อมต่อจำนวนมากระหว่างการผกผันของโปรแกรมและฟิลด์อื่น ๆ เช่นการเขียนโปรแกรมแบบย้อนกลับได้ (ทางกายภาพและตรรกะ) การประเมินผลบางส่วนการตรวจสอบการเขียนโปรแกรมแบบสองทิศทางการเขียนโปรแกรมเชิงตรรกะ

การกลับรายการคืออะไร ในการประมาณแรกมันจะเป็นแบบนี้: ให้โปรแกรมรับอาร์กิวเมนต์ประเภท Aและส่งคืนผลลัพธ์ของ type Bสร้างโปรแกรมP - 1ที่ "ตรงกันข้าม" Pอย่างใดอย่างหนึ่ง ฉันจงใจที่จะคลุมเครือที่นี่เนื่องจากแนวคิดสามารถ (และเป็น) ชี้แจงในรูปแบบต่างๆ: เช่นPจะต้องฉีด? ควร P - 1 ( )กลับมาทั้งหมดหรือเพียงบางส่วนดังกล่าวว่าP ( ) = BP:ABABP1PPP1(b)aP(a)=b?

มีวิธีทั่วไปในการแปลงโปรแกรมเช่นการใช้ diagonalisation ซึ่งชี้ให้เห็นโดย McCarthy หรือการประเมินผลบางส่วน แต่ก็มีแนวโน้มที่จะไม่ได้ผล นอกจากนี้ยังมีการทำงานมากที่สุดในการผกผันโปรแกรมฉันคุ้นเคยกับดูเหมือนจะไม่จัดการกับเต็มลำดับที่สูงกว่าการเขียนโปรแกรมภาษา (เช่น -calculi)λ

คำขออ้างอิง รัฐของศิลปะในขั้นตอนวิธีการที่ชัดเจนสำหรับการผกผันของโปรแกรมคืออะไร -calculi (ที่มีข้อ จำกัด ในสูง orderness)?λ

คำตอบ:


5

ในพื้นที่นี้มีงานไม่มากนัก แต่มีงานอะไรบ้างที่น่าสนใจทีเดียว

  1. Torben Mogensen ได้แก้ไขปัญหานี้แล้ว นี่คือเอกสารสองฉบับของเขา

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

  2. Tetsuo Yokoyama, Holger Bock Axelsen และ Robert Glück

    สิ่งนี้อธิบายถึงภาษาการเขียนโปรแกรม RFun ซึ่งจะสลับโปรแกรมที่ใช้งานได้เป็นอันดับแรก (พวกเขาได้เขียนบทความอื่นจำนวนหนึ่งในเรื่องนี้ซึ่งฉันมีปัญหาในการถือ)

  3. Stefan Bohne และ Baltasar Trancón Widemann

    นี่เป็นกระดาษที่เรียบร้อยจริงๆ! มันตั้งข้อสังเกตว่า (a) คุณสามารถสร้างหมวดหมู่ที่ morphisms เป็นฟังก์ชันที่จับคู่กับค่าผกผันของมัน (สำหรับความคิดเฉพาะของ inverse ที่คุณใช้) และ (b) หมวดหมู่นี้มีโครงสร้างที่กะทัดรัดกริช ซึ่งหมายความว่าคุณสามารถเขียนโปรแกรมที่มีวินัยเชิงเส้นประเภทขี้ขลาดเล็กน้อยแล้วอ่านการตีความไปข้างหน้าและถอยหลังจากซีแมนทิกส์

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

  4. Francesco Tiezzia, Nobuko Yoshida

    ฉันไม่ได้อ่านอันนี้ แต่เพิ่งค้นพบเมื่อ Googling สำหรับเอกสารอื่น ๆ ให้ผู้เขียนและหัวเรื่องฉันสงสัยว่านี่คือซอยของคุณ!


ขอบคุณ (2, 3, 4) ไม่ทำรายการผกผันของโปรแกรม แต่ออกแบบภาษาโปรแกรมที่โปรแกรมสามารถย้อนกลับ / กลับด้านได้ตามคำจำกัดความ นี่เป็นปัญหาที่เกี่ยวข้องอย่างใกล้ชิด แต่แตกต่างกัน ในความเป็นจริงฉันไม่ชัดเจนเลยว่าปัญหาเหล่านี้เกี่ยวข้องกันอย่างไร ฉันไม่เคยเห็น Semi-Inversion มาก่อนบางทีมันอาจจะแก้ปัญหาได้แล้วเนื่องจากการกลับกันดูเหมือนจะเป็นกรณีที่เป็นขอบของการกลับกึ่ง กระดาษแผ่นที่สองของ BTW Mogensen ขึ้นอยู่กับอันดับที่ 2 เท่านั้น
Martin Berger

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

ตอนนี้ฉันสนใจปัญหาทั่วไปที่เป็นนามธรรม ความสนใจของฉันในการกลับรายการมาจากการตรวจสอบโปรแกรม และฉันไม่สามารถหาที่ใดก็ได้ที่ใช้คำแลมบ์ดา (จาก PCF say หรือ STLC) และสลับกลับ เป็นเพราะฉันไม่ได้มองที่ถูกหรือไม่?
Martin Berger
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.