การรวม (วิทยาการคอมพิวเตอร์)
ในตรรกศาสตร์และวิทยาศาสตร์คอมพิวเตอร์โดยเฉพาะอย่างยิ่งในการให้เหตุผลอัตโนมัติ การ รวมกัน ( unification)เป็นกระบวนการเชิงอัลกอริทึมในการแก้สมการระหว่างนิพจน์ เชิงสัญลักษณ์ ซึ่งแต่ละนิพจน์มีรูปแบบด้านซ้าย = ด้านขวาตัวอย่างเช่น เมื่อใช้x , y , zเป็นตัวแปร และให้fเป็นฟังก์ชันที่ไม่มีการ ตีความ ชุด สมการ เดี่ยว { f (1, y ) = f ( x ,2) } เป็นปัญหาการรวมกันลำดับที่หนึ่งเชิงไวยากรณ์ ซึ่งมีการแทนที่ { x ↦ 1, y ↦ 2 } เป็นคำตอบเดียว
ข้อตกลงต่างๆ แตกต่างกันไปในเรื่องค่าที่ตัวแปรอาจมีได้และนิพจน์ใดที่ถือว่าเทียบเท่ากัน ในการรวมเชิงไวยากรณ์ลำดับที่หนึ่ง ตัวแปรจะครอบคลุมเทอมลำดับที่หนึ่งและความเทียบเท่าเป็นไปตามไวยากรณ์ การรวมแบบนี้มีคำตอบ "ที่ดีที่สุด" เพียงหนึ่งเดียว และใช้ในการเขียนโปรแกรมเชิงตรรกะและ การใช้งาน ระบบประเภท ของภาษาโปรแกรม โดยเฉพาะอย่างยิ่งใน อัลกอริธึม การอนุมานประเภทตามHindley–Milnerในการรวมลำดับที่สูงกว่า ซึ่งอาจจำกัดเฉพาะการรวมรูปแบบลำดับที่สูงกว่า เทอมอาจรวมถึงนิพจน์แลมบ์ดา และความเทียบเท่าขึ้นอยู่กับการลดเบต้า การรวมแบบนี้ใช้ในตัวช่วยพิสูจน์และการเขียนโปรแกรมเชิงตรรกะลำดับที่สูงกว่า เช่นIsabelle , TwelfและlambdaPrologสุดท้าย ในการรวมเชิงความหมายหรือ E-unification ความเท่าเทียมกันขึ้นอยู่กับความรู้พื้นฐานและตัวแปรจะครอบคลุมโดเมนที่หลากหลาย การรวมแบบนี้ใช้ในตัวแก้ปัญหา SMT อัลกอริ ธึ มการเขียนเทอมใหม่และการวิเคราะห์โปรโตคอลการเข้ารหัสลับ
คำจำกัดความอย่างเป็นทางการ
ปัญหาการรวมเป็นเซตจำกัดE ={ l ≐ r , ..., l ≐ r }ของสมการที่ต้องแก้ โดยที่l , r อยู่ในเซตนี้ของพจน์หรือนิพจน์ขึ้นอยู่กับว่านิพจน์หรือพจน์ใดที่อนุญาตให้ปรากฏในชุดสมการหรือปัญหาการรวม และนิพจน์ใดที่ถือว่าเท่ากัน จึงมีการแบ่งกรอบการรวมออกเป็นหลายแบบ หากอนุญาตให้ใช้ตัวแปรลำดับสูงกว่า นั่นคือตัวแปรที่แทนฟังก์ชันกระบวนการนี้เรียกว่าการรวมลำดับสูงกว่ามิฉะนั้น เรียกว่า การรวมลำดับแรกหากต้องการคำตอบที่ทำให้ทั้งสองข้างของแต่ละสมการเท่ากันอย่างแท้จริง กระบวนการนี้เรียกว่า การรวมเชิงไวยากรณ์ หรือการรวมแบบอิสระมิฉะนั้น เรียกว่าการรวม เชิงความ หมาย หรือการรวมเชิงสมการหรือการรวมแบบ Eหรือการรวมโมดูลทฤษฎี
ถ้าด้านขวาของแต่ละสมการปิด (ไม่มีตัวแปรอิสระ) ปัญหาจะเรียกว่าการจับคู่ (รูปแบบ) ด้านซ้าย (ที่มีตัวแปร) ของแต่ละสมการเรียกว่ารูปแบบ[ 1 ]
ข้อกำหนดเบื้องต้น
ในทางทฤษฎีแล้ว แนวทางการรวมเป็นหนึ่งเดียวตั้งอยู่บนพื้นฐานของสิ่งต่อไปนี้
- เซตอนันต์ของตัวแปรสำหรับการรวมลำดับที่สูงขึ้น การเลือกตัวแปรที่สะดวกกว่านั้นจึงเหมาะสมกว่าแยกออกจากเซตของตัวแปรที่ผูกกับเทอมแลมบ์ดา
- ชุดหนึ่งของเงื่อนไขต่างๆ เช่นนั้นสำหรับการรวมลำดับที่หนึ่งโดยทั่วไปคือเซตของพจน์อันดับแรก (พจน์ที่สร้างขึ้นจากสัญลักษณ์ตัวแปรและฟังก์ชัน) สำหรับการรวมพจน์อันดับสูงกว่าประกอบด้วยพจน์อันดับแรกและพจน์แลมบ์ดา (พจน์ที่มีตัวแปรอันดับสูงกว่าบางตัว)
- การทำแผนที่โดยกำหนดให้กับแต่ละเทอมชุดของตัวแปรอิสระที่เกิดขึ้นใน.
- ทฤษฎีหรือความสัมพันธ์สมมูลบนซึ่งบ่งชี้ว่าเงื่อนไขใดบ้างที่ถือว่าเท่าเทียมกัน สำหรับการรวม E ลำดับที่หนึ่งสะท้อนให้เห็นถึงความรู้พื้นฐานเกี่ยวกับสัญลักษณ์ฟังก์ชันบางอย่าง ตัวอย่างเช่น ถ้าถือว่าเป็นสมบัติสลับที่ได้ถ้าผลลัพธ์จากโดยการสลับอาร์กิวเมนต์ของในบางกรณี (อาจจะทุกกรณี) [หมายเหตุ 1 ]ในกรณีทั่วไปที่ไม่มีความรู้พื้นฐานเลย เฉพาะคำที่เหมือนกันตามตัวอักษรหรือตามไวยากรณ์เท่านั้นที่จะถือว่าเท่ากัน ในกรณีนี้ ≡ เรียกว่าทฤษฎีอิสระ (เพราะเป็นวัตถุอิสระ ) ทฤษฎีว่างเปล่า (เพราะเซตของประโยค สมการ หรือความรู้พื้นฐานว่างเปล่า) ทฤษฎีของฟังก์ชันที่ไม่ได้ตีความ (เพราะการรวมทำบนคำ ที่ไม่ได้ตีความ ) หรือทฤษฎีของตัวสร้าง (เพราะสัญลักษณ์ฟังก์ชันทั้งหมดสร้างคำข้อมูลขึ้นมาแทนที่จะดำเนินการกับคำเหล่านั้น) สำหรับการรวมลำดับที่สูงกว่า โดยปกติแล้วถ้าและมีค่าเทียบเท่าอัลฟา
ตัวอย่างเช่น ปัญหาการรวมลำดับที่หนึ่งทางไวยากรณ์ { y = cons (2, y ) } ไม่มีคำตอบบนเซตของ เทอม จำกัดอย่างไรก็ตาม มันมีคำตอบเดียว { y ↦ cons (2, cons (2, cons (2,...))) } บนเซตของ เทอม ต้นไม้อนันต์ ในทำนองเดียวกัน ปัญหาการรวมลำดับที่หนึ่งทางความหมาย { a ⋅ x = x ⋅ a } มีการแทนที่แต่ละแบบในรูปแบบ { x ↦ a ⋅...⋅ a } เป็นคำตอบในเซมิกรุป กล่าว คือ ถ้า (⋅) ถือว่า มีคุณสมบัติ การสลับที่ แต่ปัญหาเดียวกันนี้ เมื่อมองในกลุ่มอาเบเลียนซึ่ง (⋅) ถือว่า มีคุณสมบัติ การสลับที่ เช่นกัน การแทนที่ใดๆ ก็ตามจะเป็นคำตอบได้
ตัวอย่างหนึ่งของการรวมลำดับที่สูงกว่าคือ เซตที่มีสมาชิกเดียว { a = y ( x ) } ซึ่งเป็นปัญหาการรวมลำดับที่สองเชิงไวยากรณ์ เนื่องจากyเป็นตัวแปรฟังก์ชัน วิธีแก้ปัญหาหนึ่งคือ { x ↦ a , y ↦ ( ฟังก์ชันเอกลักษณ์ ) }; อีกวิธีหนึ่งคือ { y ↦ ( ฟังก์ชันคงที่ที่แมปแต่ละค่าไปยังa ), x ↦ (ค่าใดๆ) }
การทดแทน
การแทนที่คือการจับคู่จากตัวแปรไปสู่เทอม; สัญลักษณ์หมายถึงการแมปการแทนที่ของแต่ละตัวแปรถึงระยะเวลา, สำหรับและตัวแปรอื่นๆ ทุกตัวก็เช่นกัน;ต้องแตกต่างกันเป็นคู่ๆการนำการแทนที่นั้นไปใช้กับเทอมหนึ่งเขียนในรูปแบบสัญกรณ์แบบโพสต์ฟิกซ์ดังนี้นั่นหมายถึงการแทนที่ตัวแปรทุกตัวในทุกๆ ตำแหน่งพร้อมกันในแง่ของโดยผลลัพธ์ของการใช้การทดแทนถึงระยะเวลาหนึ่งเรียกว่าเป็นตัวอย่างของคำนั้นตัวอย่างลำดับแรกคือ การใช้การแทนที่{ x ↦ h ( a , y ), z ↦ b }กับเทอม
| ผลผลิต | |||||
การสรุปโดยทั่วไป การเฉพาะเจาะจง
หากเป็นเงื่อนไขมีอินสแตนซ์ที่เทียบเท่ากับเทอมนั่นคือ ถ้าสำหรับการทดแทนบางอย่าง, แล้วเรียกว่าทั่วไปมากกว่า, และเรียกว่ามีความพิเศษมากกว่าหรือถูกรวมเข้ากับ. ตัวอย่างเช่น,ทั่วไปกว่าถ้า ⊕ เป็นสมบัติการสลับที่ได้เนื่องจากแล้ว.
ถ้า ≡ คือความเหมือนกันทางไวยากรณ์ (literal identity) ของคำศัพท์ คำศัพท์หนึ่งอาจมีความทั่วไปและเฉพาะเจาะจงกว่าอีกคำศัพท์หนึ่งได้ก็ต่อเมื่อคำศัพท์ทั้งสองแตกต่างกันเพียงแค่ชื่อตัวแปรเท่านั้น ไม่ใช่โครงสร้างทางไวยากรณ์ คำศัพท์ดังกล่าวเรียกว่าตัวแปรหรือการเปลี่ยนชื่อของกันและกัน ตัวอย่างเช่น เป็นรูปแบบหนึ่งของ , เนื่องจาก และ อย่างไรก็ตาม,ไม่ใช่ รูปแบบ หนึ่งของ เนื่องจากไม่มีการแทนที่ใดที่จะเปลี่ยนพจน์หลังให้เป็นพจน์แรกได้ ดังนั้นพจน์หลังจึงมีความพิเศษกว่าพจน์แรกอย่างแท้จริง
สำหรับค่าใดๆ ก็ตามคำศัพท์หนึ่งอาจมีความทั่วไปและเฉพาะเจาะจงมากกว่าคำศัพท์ที่มีโครงสร้างแตกต่างกัน ตัวอย่างเช่น ถ้า ⊕ เป็นอิเดมโพเทนต์นั่นคือ ถ้า ⊕ เป็นจริงเสมอแล้วจึงใช้คำนั้นทั่วไปกว่า[ หมายเหตุ 2 ]และในทางกลับกัน[ หมายเหตุ 3 ]แม้ว่าและมีโครงสร้างที่แตกต่างกัน
การทดแทนมีความพิเศษมากกว่าหรือถูกรวมเข้ากับการทดแทนถ้าถูกรวมเข้าไว้ด้วยกันสำหรับแต่ละเทอมเรายังกล่าวอีกว่าทั่วไปกว่ากล่าวอย่างเป็นทางการมากขึ้น ให้พิจารณาเซตอนันต์ที่ไม่ว่างเปล่าของตัวแปรเสริมในลักษณะที่ไม่มีสมการในปัญหาการรวมนั้นมีตัวแปรจากจากนั้นจึงทำการแทนที่ถูกรวมเข้ากับการทดแทนอื่นหากมีการเปลี่ยนตัวโดยที่สำหรับทุกเงื่อนไข,[ 2 ] ตัวอย่าง เช่นถูกรวมเข้าไว้ด้วยกัน, โดยใช้, แต่ ไม่ได้ถูกรวมโดย, เช่นไม่ใช่ตัวอย่างของ [ 3 ]
ชุดโซลูชัน
การแทนที่ σ เป็นคำตอบของปัญหาการรวมEถ้าl σ ≡ r σสำหรับการแทนที่แบบนี้เรียกว่าตัวรวมของEตัวอย่างเช่น ถ้า ⊕ มีคุณสมบัติการสลับที่ ปัญหาการรวม { x ⊕ a ≐ a ⊕ x } จะมีคำตอบเป็น { x ↦ a }, { x ↦ a ⊕ a }, { x ↦ a ⊕ a ⊕ a } เป็นต้น ในขณะที่ปัญหา { x ⊕ a ≐ a } ไม่มีคำตอบ
สำหรับปัญหาการรวมE ที่กำหนดให้ เซตSของตัวรวมจะเรียกว่าสมบูรณ์ถ้าการแทนที่คำตอบแต่ละคำตอบถูกครอบคลุมโดยการแทนที่บางอย่างในSเซตการแทนที่ที่สมบูรณ์นั้นมีอยู่เสมอ (เช่น เซตของคำตอบทั้งหมด) แต่ในบางกรอบงาน (เช่น การรวมลำดับสูงแบบไม่จำกัด) ปัญหาในการพิจารณาว่ามีคำตอบใดอยู่หรือไม่ (กล่าวคือ เซตการแทนที่ที่สมบูรณ์นั้นไม่ว่างเปล่าหรือไม่) นั้นไม่สามารถตัดสินได้
เซตSเรียกว่าเซตขั้นต่ำหากไม่มีสมาชิกใดในเซตนั้นที่รวมสมาชิกอื่นเข้าไป ขึ้นอยู่กับกรอบงาน เซตการแทนที่ที่สมบูรณ์และขั้นต่ำอาจมีสมาชิกเป็นศูนย์ หนึ่ง จำนวนจำกัด หรือจำนวนอนันต์ หรืออาจไม่มีอยู่เลยเนื่องจากสายโซ่สมาชิกที่ซ้ำซ้อนเป็นอนันต์[ 4 ]ดังนั้น โดยทั่วไปแล้ว อัลกอริทึมการรวมจะคำนวณค่าประมาณที่จำกัดของเซตที่สมบูรณ์ ซึ่งอาจเป็นหรือไม่เป็นเซตขั้นต่ำก็ได้ แม้ว่าอัลกอริทึมส่วนใหญ่จะหลีกเลี่ยงตัวรวมที่ซ้ำซ้อนเมื่อเป็นไปได้[ 2 ]สำหรับการรวมไวยากรณ์ลำดับแรก Martelli และ Montanari [ 5 ]ได้นำเสนออัลกอริทึมที่รายงานความไม่สามารถแก้ไขได้หรือคำนวณตัวรวมตัวเดียวที่สร้างเซตการแทนที่ที่สมบูรณ์และขั้นต่ำด้วยตัวมันเอง เรียกว่าตัวรวมทั่วไปที่สุด
การรวมเชิงไวยากรณ์ของคำศัพท์ลำดับที่หนึ่ง

การรวมเชิงไวยากรณ์ของพจน์ลำดับที่หนึ่งเป็นกรอบการรวมที่ใช้กันอย่างแพร่หลายที่สุด โดยอิงจากTที่เป็นเซตของพจน์ลำดับที่หนึ่ง (เหนือเซตVของตัวแปรที่กำหนด, Cของค่าคงที่ และF ของ สัญลักษณ์ฟังก์ชัน n -ary) และ ≡ ที่เป็นความเท่าเทียมกันเชิงไวยากรณ์ในกรอบนี้ ปัญหาการรวมที่แก้ได้แต่ละปัญหา{ l ≐ r , ..., l ≐ r } มี เซตคำตอบเดี่ยวที่สมบูรณ์และเห็นได้ชัดว่าน้อยที่สุด{ σ }สมาชิกσ ของเซตนี้ เรียกว่าตัวรวมทั่วไปที่สุด ( mgu ) ของปัญหา พจน์ทางด้านซ้ายและด้านขวามือของสมการที่เป็นไปได้แต่ละสมการจะเท่ากันเชิงไวยากรณ์เมื่อใช้ mgu กล่าวคือl σ = r σ ∧ ... ∧ l σ = r σตัวรวมใดๆ ของปัญหาจะถูกรวมไว้[หมายเหตุ 4 ]โดยmgu σ mgu มีเอกลักษณ์เฉพาะตัวจนถึงรูปแบบต่างๆ: ถ้าS และS เป็นเซตคำตอบที่สมบูรณ์และน้อยที่สุดของปัญหาการรวมไวยากรณ์เดียวกันแล้วS = { σ } และS = { σ σ และσ บางอย่างและxσ เป็นรูปแบบหนึ่งของxσ สำหรับตัวแปรx แต่ละตัว ที่ปรากฏในปัญหา
ตัวอย่างเช่น ปัญหาการรวม { x ≐ z , y ≐ f ( x ) } มีตัวรวม { x ↦ z , y ↦ f ( z ) } เพราะว่า
x { x ↦ z , y ↦ f ( z ) } = z = z { x ↦ z , y ↦ f ( z ) } , และ y { x ↦ z , y ↦ f ( z ) } = เอฟ ( z ) = เอฟ ( x ) { x ↦ z , y ↦ f ( z ) } .
นี่คือตัวรวมที่ครอบคลุมที่สุด ตัวรวมอื่นๆ สำหรับปัญหาเดียวกัน ได้แก่ เช่น { x ↦ f ( x ), y ↦ f ( f ( x )), z ↦ f ( x ) }, { x ↦ f ( f ( x )), y ↦ f ( f ( f ( x ))), z ↦ f ( f ( x )) } และอื่นๆ อีกมากมาย มีตัวรวมที่คล้ายกันอยู่นับไม่ถ้วน
ตัวอย่างเช่น ปัญหาg ( x , x ) ≐ f ( y ) ไม่มีคำตอบในส่วนที่ ≡ เป็นเอกลักษณ์ตามตัวอักษร เนื่องจากหากมีการแทนที่ใดๆ ทางด้านซ้ายและด้านขวา จะยังคงรักษาgและf ที่อยู่ด้านนอกสุด ไว้ และเทอมที่มีสัญลักษณ์ฟังก์ชันที่อยู่ด้านนอกสุดต่างกันจะมีความแตกต่างกันทางไวยากรณ์
อัลกอริทึมการรวม
สัญลักษณ์จะถูกจัดเรียงโดยให้ตัวแปรอยู่ก่อนสัญลักษณ์ฟังก์ชัน เทอมจะถูกจัดเรียงตามความยาวที่เขียนเพิ่มขึ้น เทอมที่มีความยาวเท่ากันจะถูกจัดเรียงตามลำดับตัวอักษร [ 6 ] สำหรับเซตTของเทอม เส้นทางความไม่ลงรอยp ของเซตนี้ คือเส้นทางที่สั้นที่สุดตามลำดับตัวอักษรซึ่งเทอมสมาชิกสองเทอมของTแตกต่างกัน เซตความไม่ลงรอยของเซตนี้คือเซตของเทอมย่อยที่เริ่มต้นที่pอย่างเป็นทางการ: { t | : t ∈ T } [ 7 ]
อัลกอริทึม: [ 8 ]
กำหนดให้เซตTของพจน์ที่ต้องการรวมเข้าด้วยกัน ให้σเริ่มต้นเป็นการแทนที่เอกลักษณ์ ทำตลอดไป ถ้าT σเป็นเซตที่มีสมาชิกเพียงตัวเดียวให้ คืนค่าσ fi ให้Dเป็นเซตที่ไม่สอดคล้องกันของT σให้sและtเป็นสองคำที่เรียงตามลำดับตัวอักษรน้อยที่สุดในDถ้าsไม่ใช่ตัวแปร หรือsปรากฏในtให้ คืนค่า "NONUNIFIABLE" fi เสร็จแล้ว
Jacques Herbrandได้อภิปรายแนวคิดพื้นฐานของการรวมและร่างอัลกอริทึมในปี 1930 [ 9 ] [ 10 ] [ 11 ] แต่ผู้เขียนส่วนใหญ่ยกให้ John Alan Robinsonเป็นผู้คิดค้นอัลกอริทึมการรวมตัวแรก(ดูในกรอบ) [ 12 ] [ 13 ] [หมายเหตุ 5 ]อัลกอริทึมของ Robinson มีพฤติกรรมแบบเลขชี้กำลังในกรณีที่เลวร้ายที่สุดทั้งในด้านเวลาและพื้นที่[ 11 ] [ 15 ]ผู้เขียนจำนวนมากได้เสนออัลกอริทึมการรวมที่มีประสิทธิภาพมากขึ้น[ 16 ]อัลกอริทึมที่มีพฤติกรรมเชิงเส้นในกรณีที่เลวร้ายที่สุดถูกค้นพบโดยอิสระโดยMartelli & Montanari (1976)และPaterson & Wegman (1976) [หมายเหตุ 6 ] Baader & Snyder (2001)ใช้เทคนิคที่คล้ายกับ Paterson-Wegman ดังนั้นจึงเป็นเชิงเส้น[ 17 ]แต่เช่นเดียวกับอัลกอริทึมการรวมเชิงเส้นส่วนใหญ่ จะช้ากว่าเวอร์ชัน Robinson สำหรับอินพุตขนาดเล็กเนื่องจากค่าใช้จ่ายในการประมวลผลล่วงหน้าของอินพุตและการประมวลผลภายหลังของเอาต์พุต เช่น การสร้างการแสดงDAG de Champeaux (2022)ก็มีความซับซ้อนเชิงเส้นในขนาดของอินพุตเช่นกัน แต่สามารถแข่งขันกับอัลกอริทึม Robinson ได้สำหรับอินพุตขนาดเล็ก ความเร็วที่เพิ่มขึ้นได้มาจากการใช้ การแสดงแคลคูลัส เชิงวัตถุที่หลีกเลี่ยงความจำเป็นในการประมวลผลล่วงหน้าและภายหลัง แต่ทำให้วัตถุตัวแปรรับผิดชอบในการสร้างการแทนที่และการจัดการกับนามแฝง เดอ ชองโปซ์ อ้างว่าความสามารถในการเพิ่มฟังก์ชันการทำงานให้กับแคลคูลัสเชิงเงื่อนไขที่แสดงเป็นวัตถุ โปรแกรมมิ่งนั้น เปิดโอกาสให้สามารถปรับปรุงการดำเนินการตรรกะอื่นๆ ได้เช่นกัน[ 15 ]
อัลกอริทึมต่อไปนี้มักถูกนำเสนอและมีที่มาจากMartelli & Montanari (1982) [ หมายเหตุ 7 ]กำหนดให้เซตจำกัดสำหรับสมการที่เป็นไปได้หลายสมการ อัลกอริทึมจะใช้กฎในการแปลงให้เป็นชุดสมการที่เทียบเท่ากันในรูปแบบ { x ≐ u , ..., x ≐ u } โดยที่x , ..., x เป็นตัวแปรที่แตกต่างกัน และu , ..., u เป็นพจน์ที่ไม่มีx อยู่เลย ชุดสมการในรูปแบบนี้สามารถอ่านได้ว่าเป็นการแทนที่ หากไม่มีคำตอบ อัลกอริทึมจะสิ้นสุดด้วย ⊥; ผู้เขียนคนอื่นใช้ "Ω" หรือ " fail " ในกรณีนั้น การดำเนินการแทนที่ตัวแปรx ทั้งหมด ในปัญหาGด้วยพจน์tจะถูกเขียนแทนด้วยG { x ↦ t } เพื่อความง่าย สัญลักษณ์คงที่ถือเป็นสัญลักษณ์ฟังก์ชันที่มีอาร์กิวเมนต์เป็นศูนย์
ลบ สลายตัว ถ้าหรือ ขัดแย้ง แลกเปลี่ยน ถ้าและ กำจัด[หมายเหตุ 8 ] ถ้า ตรวจสอบ
การตรวจสอบที่เกิดขึ้น
ความพยายามที่จะรวมตัวแปรxกับเทอมที่มีxเป็นเทอมย่อยที่เข้มงวดx ≐ f (..., x , ...) จะนำไปสู่เทอมอนันต์เป็นคำตอบสำหรับxเนื่องจากxจะปรากฏเป็นเทอมย่อยของตัวมันเอง ในเซตของเทอมอันดับแรก (จำกัด) ตามที่กำหนดไว้ข้างต้น สมการx ≐ f (..., x , ...) ไม่มีคำตอบ ดังนั้น กฎ การกำจัดจึงสามารถใช้ได้เฉพาะเมื่อx ∉ vars ( t ) เท่านั้น เนื่องจากการตรวจสอบเพิ่มเติมนี้ ซึ่งเรียกว่าการตรวจสอบการเกิดขึ้นทำให้ขั้นตอนวิธีช้าลง จึงถูกละเว้น เช่น ในระบบ Prolog ส่วนใหญ่ จากมุมมองทางทฤษฎี การละเว้นการตรวจสอบนี้เทียบเท่ากับการแก้สมการบนต้นไม้อนันต์ ดู#การรวมเทอมอนันต์ด้านล่าง
หลักฐานการเลิกจ้าง
สำหรับการพิสูจน์การสิ้นสุดของอัลกอริทึม ให้พิจารณาสามสิ่งต่อไปนี้ โดยที่nvar จำนวนตัวแปรที่ปรากฏมากกว่าหนึ่งครั้งในชุดสมการnlhs จำนวนสัญลักษณ์ฟังก์ชันและค่าคงที่ทางด้านซ้ายของสมการที่เป็นไปได้ และคือจำนวนสมการ เมื่อใช้ กฎ eliminate nvarจะลดลง เนื่องจากxถูกกำจัดออกจากGและเก็บไว้เฉพาะใน { ≐ t }การใช้กฎอื่นใดจะไม่สามารถเพิ่มได้อีก เมื่อใช้ กฎ decompose , conflictหรือswap nlhs จะลดลง เนื่องจากอย่างน้อย ที่อยู่นอกสุดทางด้านซ้ายมือจะหายไป การใช้กฎdeleteหรือcheck ที่เหลือ จะไม่เพิ่มnlhsแต่จะลดลงneqn การใช้กฎใดๆ ก็ตามจะทำให้ค่าสามตัวนี้ลดโดยคำนึงถึงลำดับตามพจนานุกรมซึ่งเป็นไปได้เพียงจำนวนจำกัดเท่านั้น
Conor McBrideสังเกต[ 18 ]ว่า "โดยการแสดงโครงสร้างที่การรวมใช้ประโยชน์" ใน ภาษา ที่มีประเภทขึ้นอยู่กับเช่นEpigramอัลกอริทึมการรวมของ Robinsonสามารถทำให้เป็นแบบเรียกซ้ำตามจำนวนตัวแปรได้ ซึ่งในกรณีนี้การพิสูจน์การสิ้นสุดแยกต่างหากจึงไม่จำเป็น
ตัวอย่างของการรวมเชิงไวยากรณ์ของคำศัพท์ลำดับที่หนึ่ง
ตามหลักไวยากรณ์ของ Prolog สัญลักษณ์ที่ขึ้นต้นด้วยตัวอักษรพิมพ์ใหญ่คือชื่อตัวแปร สัญลักษณ์ที่ขึ้นต้นด้วยตัวอักษรพิมพ์เล็กคือสัญลักษณ์ฟังก์ชัน และเครื่องหมายจุลภาคใช้เป็นตัวดำเนินการตรรกะ "และ" สำหรับสัญลักษณ์ทางคณิตศาสตร์ x , y, zใช้เป็นตัวแปรf, gใช้เป็นสัญลักษณ์ฟังก์ชัน และa, bใช้เป็นค่าคงที่
| สัญกรณ์โปรล็อก | สัญกรณ์ทางคณิตศาสตร์ | การทดแทนแบบรวม | คำอธิบาย |
|---|---|---|---|
a = a | { a = a } | {} | สำเร็จ ( ตรรกบท ) |
a = b | { a = b } | ⊥ | aและbไม่ตรงกัน |
X = X | { x = x } | {} | สำเร็จ ( ตรรกบท ) |
a = X | { a = x } | { x ↦ a } | xถูกรวมเข้ากับค่าคงที่a |
X = Y | { x = y } | { x ↦ y } | xและyเป็นค่าที่ซ้ำกัน |
f(a,X) = f(a,b) | { f ( a , x ) = f ( a , b ) } | { x ↦ b } | สัญลักษณ์ฟังก์ชันและค่าคงที่ตรงกันxถูกรวมเข้ากับค่าคงที่b |
f(a) = g(a) | { f ( a ) = g ( a ) } | ⊥ | fและgไม่ตรงกัน |
f(X) = f(Y) | { f ( x ) = f ( y ) } | { x ↦ y } | xและyเป็นค่าที่ซ้ำกัน |
f(X) = g(Y) | { f ( x ) = g ( y ) } | ⊥ | fและgไม่ตรงกัน |
f(X) = f(Y,Z) | { f ( x ) = f ( y , z ) } | ⊥ | ล้มเหลว สัญลักษณ์ของฟังก์ชัน fมีจำนวนอาร์กิวเมนต์ต่างกัน |
f(g(X)) = f(Y) | { f ( g ( x )) = f ( y ) } | { y ↦ g ( x ) } | รวมyเข้ากับเทอม |
f(g(X),X) = f(Y,a) | { f ( g ( x ), x ) = f ( y , a ) } | { x ↦ a , y ↦ g ( a ) } | รวมxกับค่าคงที่aและyกับเทอม |
X = f(X) | { x = f ( x ) } | ควรจะเป็น ⊥ | ส่งคืนค่า ⊥ ในตรรกะลำดับที่หนึ่งและภาษา Prolog สมัยใหม่หลายภาษา (บังคับใช้โดยการตรวจสอบ occurs ) ใช้งานได้ผลดีใน Prolog แบบดั้งเดิมและใน Prolog II โดยการรวมx |
X = Y, Y = a | { x = y , y = a } | { x ↦ a , y ↦ a } | ทั้งxและyมีค่าคงที่เท่ากับa |
a = Y, X = Y | { a = y , x = y } | { x ↦ a , y ↦ a } | ตามที่กล่าวมาข้างต้น (ลำดับของสมการในชุดไม่สำคัญ) |
X = a, b = X | { x = a , b = x } | ⊥ | ล้มเหลวaและbไม่ตรงกัน ดังนั้นxจึงไม่สามารถรวมกับทั้งสองได้ |

ตัวรวมทั่วไปที่สุดของปัญหาการรวมลำดับที่หนึ่งเชิงไวยากรณ์ที่มีขนาดnอาจมีขนาด2n ตัวอย่างเช่น ปัญหามี ตัวรวม ที่ครอบคลุมที่สุด , cf. picture. เพื่อหลีกเลี่ยงความซับซ้อนของเวลาแบบเลขชี้กำลังที่เกิดจากการระเบิดดังกล่าว อัลกอริทึมการรวมขั้นสูงจึงทำงานบนกราฟแบบไม่มีวงจรทิศทาง (DAGS) แทนที่จะเป็นต้นไม้ [ 19 ]
การประยุกต์ใช้: การรวมเป็นหนึ่งเดียวในการเขียนโปรแกรมเชิงตรรกะ
แนวคิดเรื่องการรวมเป็นหนึ่งในแนวคิดหลักเบื้องหลังการเขียนโปรแกรมเชิงตรรกะโดยเฉพาะอย่างยิ่ง การรวมเป็นองค์ประกอบพื้นฐานของการแก้ปัญหาซึ่งเป็นกฎการอนุมานเพื่อกำหนดความสามารถในการทำให้สูตรเป็นจริง ในภาษาโปรล็อกสัญลักษณ์ความเท่าเทียมกัน=หมายถึงการรวมทางไวยากรณ์ลำดับที่หนึ่ง มันแสดงถึงกลไกของการผูกเนื้อหาของตัวแปร และสามารถมองได้ว่าเป็นเหมือนการกำหนดค่าเพียงครั้งเดียว
ในบทนำ:
- ตัวแปรสามารถรวมเข้ากับค่าคงที่ เทอม หรือตัวแปรอื่นได้ ซึ่งจะทำให้ตัวแปรนั้นกลายเป็นชื่อเรียกแทนของตัวแปรคงที่นั้นโดยปริยาย ในภาษาโปรล็อกสมัยใหม่หลายภาษาและในตรรกศาสตร์ลำดับที่หนึ่งตัวแปรไม่สามารถรวมเข้ากับเทอมที่มีตัวแปรนั้นอยู่ได้ นี่คือสิ่งที่เรียกว่าการตรวจสอบการเกิดขึ้น (occes check )
- ค่าคงที่สองค่าจะสามารถรวมกันได้ก็ต่อเมื่อค่าคงที่ทั้งสองนั้นเหมือนกันทุกประการ
- ในทำนองเดียวกัน เทอมหนึ่งสามารถรวมเข้ากับเทอมอื่นได้ หากสัญลักษณ์ฟังก์ชันสูงสุดและจำนวนพารามิเตอร์ของเทอมนั้นเหมือนกัน และหากพารามิเตอร์สามารถรวมเข้าด้วยกันได้พร้อมกัน โปรดทราบว่านี่เป็นพฤติกรรมแบบเรียกซ้ำ
- การดำเนินการส่วนใหญ่ รวมถึง
+,-,*,/, ไม่ได้รับการประเมินโดย=ดังนั้น ตัวอย่างเช่น1+2 = 3จึงไม่สามารถหาคำตอบได้เนื่องจากมีความแตกต่างกันทางไวยากรณ์ การใช้ข้อจำกัดทางเลขคณิตจำนวนเต็ม#=ทำให้เกิดรูปแบบหนึ่งของการรวม E ซึ่งการดำเนินการเหล่านี้ได้รับการตีความและประเมิน[ 20 ]
การประยุกต์ใช้: การอนุมานประเภท
โดยทั่วไปแล้วอัลกอริธึม การอนุมานประเภทจะใช้หลักการรวมประเภท โดยเฉพาะอย่างยิ่ง การอนุมานประเภทแบบ Hindley-Milnerซึ่งใช้ในภาษาโปรแกรมเชิงฟังก์ชันอย่าง HaskellและMLตัวอย่างเช่น เมื่อพยายามอนุมานประเภทของนิพจน์ Haskell คอมไพเลอร์จะใช้ประเภทของฟังก์ชันการสร้างลิสต์ประเภทของอาร์กิวเมนต์ตัวแรกและประเภทของอาร์กิวเมนต์ตัวที่สองตัวแปรประเภทโพลีมอร์ฟิกจะถูกรวมเข้ากับและอาร์กิวเมนต์ตัวที่สองจะถูกรวมเข้ากับไม่สามารถเป็นทั้งและในเวลาเดียวกันได้ ดังนั้นนิพจน์นี้จึงไม่มีประเภทที่ถูกต้องTrue : ['x']a -> [a] -> [a](:)BoolTrue[Char]['x']aBool[a][Char]aBoolChar
เช่นเดียวกับ Prolog สามารถกำหนดอัลกอริธึมสำหรับการอนุมานประเภทได้ดังนี้:
- ตัวแปรประเภทใดก็ได้สามารถรวมเข้ากับนิพจน์ประเภทใดก็ได้ และจะถูกกำหนดค่าให้กับนิพจน์นั้น ทฤษฎีเฉพาะอาจจำกัดกฎนี้ด้วยการตรวจสอบการเกิดขึ้น
- ค่าคงที่ประเภทสองค่าจะรวมกันได้ก็ต่อเมื่อค่าคงที่ทั้งสองนั้นเป็นประเภทเดียวกันเท่านั้น
- โครงสร้างประเภทสองแบบจะรวมกันได้ก็ต่อเมื่อเป็นการประยุกต์ใช้ตัวสร้างประเภทเดียวกัน และประเภทส่วนประกอบทั้งหมดของพวกมันรวมกันได้แบบเรียกซ้ำ
การประยุกต์ใช้: การรวมโครงสร้างคุณลักษณะ
การรวมเป็นหนึ่งเดียวถูกนำมาใช้ในสาขาวิจัยต่างๆ ของภาษาศาสตร์เชิงคำนวณ[ 21 ] [ 22 ]
การรวมตามลำดับ
ตรรกะที่เรียงลำดับตามค่าช่วยให้สามารถกำหนดประเภทหรือชนิดให้กับแต่ละเทอม และประกาศประเภท s1เป็นประเภทย่อยของประเภทโดยทั่วไปเขียนว่า⊆ ตัวอย่าง เช่น เมื่อให้เหตุผลเกี่ยวกับสิ่งมีชีวิตทางชีววิทยา การประกาศให้ประเภท dogเป็นประเภทย่อยของประเภท animal นั้นมีประโยชน์ต้องการเทอมที่มีประเภท s ใดๆ ก็สามารถใช้เทอมที่มีประเภทย่อยใดๆ ของ sแทนได้ ตัวอย่างเช่น สมมติว่ามีการประกาศฟังก์ชัน mother : animal → animalและการประกาศค่าคงที่ lassie : dogเทอม mother ( lassie ) นั้นถูกต้องและมีประเภท animalเพื่อให้ได้ข้อมูลว่าแม่ของ dog เป็น dog อีกที ก็อาจมีการประกาศ mother : dog → dog อีกครั้ง ซึ่งเรียกว่าการโอเวอร์โหลดฟังก์ชันคล้ายกับการโอเวอร์โหลดในภาษาโปรแกรม
Waltherได้เสนออัลกอริทึมการรวมสำหรับเงื่อนไขในตรรกะเรียงลำดับ โดยกำหนดให้สำหรับประเภทที่ประกาศไว้สองประเภทใดๆs , s จะต้องประกาศส่วนร่วมของพวกมันs ∩ s x และx เป็นตัวแปรประเภทs และs ตามลำดับ สมการx ≐ x จะมีคำตอบ { x = x , x = x } โดยที่x : s ∩ s [ 23 ] หลังจากรวมอัลกอริทึมนี้เข้ากับตัวพิสูจน์ทฤษฎีบทอัตโนมัติแบบอิงตามข้อความ เขาสามารถแก้ปัญหามาตรฐานได้โดยการแปลเป็นตรรกะเรียงลำดับ ซึ่ง ทำให้ ลดขนาดลงไปหนึ่งลำดับ เนื่องจากตัวบ่งชี้เอกภาคจำนวนมากกลายเป็นประเภท
Smolka ได้วางแนวทางทั่วไปของตรรกะเรียงลำดับเพื่อให้สามารถใช้โพลีมอร์ฟิซึมแบบพารามิเตอร์ได้ [ 24 ] ใน กรอบงานของเขา การประกาศการเรียงลำดับย่อยจะถูกส่งต่อไปยังนิพจน์ประเภทที่ซับซ้อน ตัวอย่างเช่น รายการเรียงลำดับแบบพารามิเตอร์( X )อาจถูกประกาศ (โดยที่Xเป็นพารามิเตอร์ประเภทเช่นเดียวกับในเทมเพลต C++ ) และจากการประกาศการเรียงลำดับย่อยint ⊆ floatความสัมพันธ์list ( int ) ⊆ list ( float ) จะถูกอนุมานโดยอัตโนมัติ ซึ่งหมายความว่าแต่ละรายการของจำนวนเต็มก็เป็นรายการของจำนวนทศนิยมด้วย
Schmidt-Schauß ได้ขยายตรรกะเรียงลำดับทั่วไปเพื่อให้สามารถประกาศเทอมได้ [ 25 ] ตัวอย่างเช่น สมมติว่ามีการประกาศซับซอร์ตeven ⊆ intและodd ⊆ intการประกาศเทอมเช่น ∀ i : int . ( i + i ) : evenอนุญาตให้ประกาศคุณสมบัติของการบวกจำนวนเต็มที่ไม่สามารถแสดงได้ด้วยการโอเวอร์โหลดแบบปกติ
การรวมพจน์อนันต์
ข้อมูลเบื้องต้นเกี่ยวกับต้นไม้อนันต์:
- B. Courcelle (1983). "คุณสมบัติพื้นฐานของต้นไม้อนันต์" . Theoret. Comput. Sci . 25 (2): 95– 169. doi : 10.1016/0304-3975(83)90059-2 .
- Michael J. Maher (กรกฎาคม 1988). "การกำหนดสัจพจน์ที่สมบูรณ์ของพีชคณิตของต้นไม้จำกัด ต้นไม้ตรรกยะ และต้นไม้อนันต์". รายงานการประชุมสัมมนาประจำปีครั้งที่ 3 ของ IEEE ว่าด้วยตรรกศาสตร์ในวิทยาการคอมพิวเตอร์ เอดินบะระหน้า348–357 .
- Joxan Jaffar; Peter J. Stuckey (1986). "ความหมายของการเขียนโปรแกรมตรรกะต้นไม้อนันต์" . วิทยาศาสตร์คอมพิวเตอร์เชิงทฤษฎี . 46 : 141– 158. doi : 10.1016/0304-3975(86)90027-7 .
อัลกอริทึมการรวม, Prolog II:
- A. Colmerauer (1982). KL Clark; S.-A. Tarnlund (บรรณาธิการ). Prolog และ Infinite Trees . Academic Press.
- Alain Colmerauer (1984). "สมการและอสมการบนต้นไม้จำกัดและต้นไม้อนันต์" ใน ICOT (บรรณาธิการ). รายงานการประชุมนานาชาติว่าด้วยระบบคอมพิวเตอร์ยุคที่ห้าหน้า85–99
การใช้งาน:
- Francis Giannesini; Jacques Cohen (1984). "การสร้างตัวแยกวิเคราะห์และการจัดการไวยากรณ์โดยใช้ต้นไม้อนันต์ของ Prolog"วารสารการเขียนโปรแกรมเชิงตรรกะ 1 ( 3): 253– 265. doi : 10.1016/0743-1066(84)90013-X .
การรวมระบบอิเล็กทรอนิกส์
การรวมสมการ ( E-unification)คือปัญหาของการหาคำตอบสำหรับชุดสมการ ที่กำหนด โดยคำนึงถึงความรู้พื้นฐานเกี่ยวกับสมการEซึ่งกำหนดไว้ในรูปของชุดความเท่าเทียม กันสากล สำหรับชุด E บางชุด ได้มีการคิดค้น อัลกอริทึมแก้สมการ(หรือที่เรียกว่าอัลกอริทึมการรวมสมการ E ) ขึ้นมาแล้ว แต่สำหรับ ชุดอื่นๆ นั้น ได้มีการพิสูจน์แล้วว่าไม่มีอัลกอริทึมดังกล่าวอยู่จริง
ตัวอย่างเช่น ถ้าaและbเป็นค่าคงที่ที่แตกต่างกันสมการไม่มีวิธีแก้ปัญหาใด ๆ ที่เกี่ยวข้องกับการรวมไวยากรณ์ อย่างแท้จริง เนื่องจากไม่ทราบข้อมูลใด ๆ เกี่ยวกับตัวดำเนินการอย่างไรก็ตามหากเนื่องจากทราบว่าการสลับที่กันได้ดังนั้นการแทนที่ { x ↦ b , y ↦ a }จะแก้สมการข้างต้นได้ เนื่องจาก
{ x ↦ b , y ↦ a } = โดยการยื่นคำร้องขอเปลี่ยนตัว = โดยสมบัติการสลับที่ของ = { x ↦ b , y ↦ a } โดยการประยุกต์ใช้การแทนที่ (แบบผกผัน)
ความรู้พื้นฐานEสามารถระบุคุณสมบัติการสลับที่ของ ได้ด้วยความเสมอภาคสากลสำหรับทุก u , v ".
ความรู้พื้นฐานเฉพาะด้านต่างๆ เช่น E
| ∀ u , v , w : | | = | | เอ | ความสัมพันธ์เชิงสมาคมของ |
| ∀ u , v : | | = | | ซี | คุณสมบัติการสลับที่ของ |
| ∀ u , v , w : | | = | | ดี | การกระจายตัวทางซ้ายของเกินไป |
| ∀ u , v , w : | | = | | ดร | การกระจายสิทธิ์ของเกินไป |
| ∀ u : | | = | คุณ | ฉัน | ภาวะไร้สมรรถภาพทางเพศของ |
| ∀ u : | | = | คุณ | เอ็นแอ | องค์ประกอบกลางด้านซ้ายnเมื่อเทียบกับ |
| ∀ u : | | = | คุณ | น.ร. | องค์ประกอบที่เป็นกลางทางขวาnเมื่อเทียบกับ |
กล่าวกันว่าการรวมทฤษฎีสามารถตัดสินได้หากมีการคิดค้นอัลกอริทึมการรวมที่สามารถยุติการทำงานได้สำหรับ ปัญหาอินพุต ใดๆและกล่าวกันว่าการรวม ทฤษฎี สามารถตัดสินได้บางส่วนหากมีการคิดค้นอัลกอริทึมการรวมที่สามารถยุติการทำงานได้สำหรับ ปัญหาอินพุต ที่สามารถแก้ไขได้แต่Hอาจค้นหาคำตอบของปัญหาอินพุตที่ไม่สามารถแก้ไขได้ต่อไปเรื่อยๆ
สามารถสรุปผลการรวมทฤษฎีได้สำหรับทฤษฎีต่อไปนี้:
- A [ 26 ]
- A , C [ 27 ]
- A , C , I [ 28 ]
- A , C , N [หมายเหตุ 9 ] [ 28 ]
- A ,ฉัน[ 29 ]
- A , N , N (โมโนอิด) [ 30 ]
- C [ 28 ]
- วงแหวนบูลีน[ 31 ] [ 32 ]
- กลุ่มอาเบเลียนแม้ว่าลายเซ็นจะถูกขยายด้วยสัญลักษณ์เพิ่มเติมตามอำเภอใจ (แต่ไม่ใช่สัจพจน์) [ 33 ]
- พีชคณิตโมดอลK4 [ 34 ]
การรวมเป็นหนึ่งเดียวสามารถตัดสินได้บางส่วนสำหรับทฤษฎีต่อไปนี้:
- A , D , D [ 35 ]
- A , C , D [หมายเหตุ 9 ] [ 36 ]
- วงแหวนสลับตำแหน่ง[ 33 ]
การปรับพารามิเตอร์ด้านเดียว
หากมีระบบการเขียนใหม่เทอมบรรจบRสำหรับEอัลกอริทึมพาราโมดูเลชันด้านเดียว[ 37 ] สามารถใช้เพื่อแจงนับโซลูชันทั้งหมดของสมการที่กำหนด
| G ∪ { f ( s ,..., s ) ≐ f ( t ,..., t ) } | ; ส. | ⇒ | G ∪ { s ≐ t , ..., s ≐ t } | ; ส. | สลายตัว | |
| G ∪ { x ≐ t } | ; ส. | ⇒ | G { x ↦ t } | ; S { x ↦ t } ∪ { x ↦ t } | ถ้าตัวแปรxไม่ปรากฏในt | กำจัด |
| G ∪ { f ( s ,..., s ) ≐ t } | ; ส. | ⇒ | G ∪ { s ≐ u , ..., s ≐ u , r ≐ t } | ; ส. | ถ้าf ( u ,..., u ) → rเป็นกฎจากR | กลายพันธุ์ |
| G ∪ { f ( s ,..., s ) ≐ y } | ; ส. | ⇒ | G ∪ { s ≐ y , ..., s ≐ y , y ≐ f ( y ,..., y ) } | ; ส. | ถ้าy ,..., y เป็นตัวแปรใหม่ | เลียนแบบ |
เริ่มต้นด้วยGซึ่งเป็นปัญหาการรวมที่ต้องแก้ไข และSเป็นการแทนที่เอกลักษณ์ กฎต่างๆ จะถูกนำมาใช้แบบไม่แน่นอนจนกว่าเซตว่างจะปรากฏเป็นG ที่แท้จริง ในกรณีนี้S ที่แท้จริง จะเป็นการแทนที่แบบรวม ขึ้นอยู่กับลำดับที่กฎการปรับพารามิเตอร์ถูกนำมาใช้ การเลือกสมการที่แท้จริงจากGและการเลือก กฎ ของ Rในmutateเส้นทางการคำนวณที่แตกต่างกันจึงเป็นไปได้ บางเส้นทางเท่านั้นที่นำไปสู่คำตอบ ในขณะที่บางเส้นทางสิ้นสุดที่G ≠ {} ซึ่งไม่มีกฎใดใช้ได้อีกต่อไป (เช่นG = { f (...) ≐ g (...) })
| 1 | แอป ( nil , z ) | → z |
| 2 | แอป ( x . y , z ) | → x . app ( y , z ) |
ตัวอย่างเช่น ระบบการเขียนใหม่ของเทอมRถูกใช้เพื่อกำหนด ตัวดำเนินการ ต่อท้ายของรายการที่สร้างจากconsและnilโดยที่cons ( x , y ) ถูกเขียนในรูปแบบอินฟิกซ์เป็นx . yเพื่อความกระชับ เช่นapp ( a . b . nil , c . d . nil ) → a . app ( b . nil , c . d . nil ) → a . b . app ( nil , c . d . nil ) → a . b . c . d . nilแสดงให้เห็นถึงการต่อกันของรายการa . b . nilและc . d . nilโดยใช้กฎการเขียนใหม่ 2, 2 และ 1 ทฤษฎีสมการEที่สอดคล้องกับRคือการปิดความสอดคล้องของRซึ่งทั้งสองอย่างถูกมองว่าเป็นความสัมพันธ์ทวิภาคบนเทอม ตัวอย่างเช่นapp ( a . b . nil , c . d . nil ) ≡ a . b . c . d . nil ≡ app ( a . b . c . d . nil , nil ) อัลกอริทึมพาราโมดูเลชันจะแจงนับคำตอบของสมการโดยสัมพันธ์กับEเมื่อป้อนตัวอย่างRเข้าไป
ตัวอย่างเส้นทางการคำนวณที่ประสบความสำเร็จสำหรับปัญหาการรวม { app ( x , app ( y , x )) ≐ a . a . nil } แสดงอยู่ด้านล่าง เพื่อหลีกเลี่ยงการชนกันของชื่อตัวแปร กฎการเขียนใหม่จะถูกเปลี่ยนชื่ออย่างสม่ำเสมอทุกครั้งก่อนใช้งานโดยกฎmutate ; v , v , ... เป็นชื่อตัวแปรที่สร้างโดยคอมพิวเตอร์เพื่อจุดประสงค์นี้ ในแต่ละบรรทัด สมการที่เลือกจากGจะถูกไฮไลต์ด้วยสีแดง ทุกครั้ง ที่ใช้กฎ mutateกฎการเขียนใหม่ที่เลือก ( 1หรือ2 ) จะถูกระบุไว้ในวงเล็บ จากบรรทัดสุดท้ายสามารถหา การแทนที่แบบรวม S = { y ↦ nil , x ↦ a . nil } ได้ ในความเป็นจริง app ( x , app ( y , x )) { y ↦ nil , x ↦ a . nil } = app ( a . nil , app ( nil , a . nil )) ≡ app ( a . nil , a . nil ) ≡ a . app ( nil , a . nil ) ≡ a . a . nilแก้ปัญหาที่กำหนดได้ เส้นทางการคำนวณที่ประสบความสำเร็จอีกเส้นทางหนึ่ง ซึ่งได้มาจากการเลือก "mutate(1), mutate(2), mutate(2), mutate(1)" นำไปสู่การแทนที่S = { y ↦ a . a . nil , x ↦ nil }; ซึ่งไม่ได้แสดงไว้ในที่นี้ ไม่มีเส้นทางอื่นใดที่นำไปสู่ความสำเร็จ
| กฎที่ใช้ | จี | เอส | |
|---|---|---|---|
| { app ( x , app ( y , x )) ≐ a . a . nil } | {} | ||
| กลายพันธุ์(2) | ⇒ | { x ≐ โวลต์ . v , แอป ( y , x ) ≐ v , v แอพ ( v , v ) ≐ กก . ไม่มี } | {} |
| สลายตัว | ⇒ | { x ≐ โวลต์ . v , แอพ ( y , x ) ≐ v , v ≐ a , แอพ ( v , v ) ≐ a ไม่มี } | {} |
| กำจัด | ⇒ | { แอป ( y , v . v ) ≐ v , v ≐ a , แอป ( v , v ) ≐ a . ไม่มี } | { x ↦ v . v } |
| กำจัด | ⇒ | { แอป ( y , a . v ) ≐ v , แอป ( v , v ) ≐ a . ไม่มี } | { x ↦ a . v } |
| กลายพันธุ์(1) | ⇒ | { y ≐ ไม่มี , a . v ≐ v , v ≐ v , แอป ( v , v ) ≐ ก . ไม่มี } | { x ↦ a . v } |
| กำจัด | ⇒ | { y ≐ ไม่มี , a . v ≐ v , แอป ( v , v ) ≐ กไม่มี } | { x ↦ a . v } |
| กำจัด | ⇒ | { ก . v ≐ v , แอป ( v , v ) ≐ กไม่มี } | { y ↦ nil , x ↦ a . v } |
| กลายพันธุ์(1) | ⇒ | { ก . ข้อ ≐ ข้อ , ข้อ ≐ ไม่มี , ข้อ ≐ ข้อ , ข้อ ≐ ก . ไม่มี } | { y ↦ nil , x ↦ a . v } |
| กำจัด | ⇒ | { ก . ข้อ ≐ ข้อ , ข้อ ≐ ไม่มี , ข้อ ≐ ก ไม่มี } | { y ↦ nil , x ↦ a . v } |
| กำจัด | ⇒ | { ก . ไม่มี ≐ โวลต์ , โวลต์ ≐ กไม่มี } | { y ↦ nil , x ↦ a . nil } |
| กำจัด | ⇒ | { a . nil ≐ a . nil } | { y ↦ nil , x ↦ a . nil } |
| สลายตัว | ⇒ | { a ≐ a , nil ≐ nil } | { y ↦ nil , x ↦ a . nil } |
| สลายตัว | ⇒ | { nil ≐ nil } | { y ↦ nil , x ↦ a . nil } |
| สลายตัว | ⇒ | {} | { y ↦ nil , x ↦ a . nil } |
การแคบลง

ถ้าRเป็นระบบการเขียนใหม่ของพจน์ลู่เข้าสำหรับEแนวทางอื่นนอกเหนือจากส่วนก่อนหน้าคือการประยุกต์ใช้ " ขั้นตอน การจำกัดขอบเขต " อย่างต่อเนื่อง ซึ่งในที่สุดจะสามารถแจงนับคำตอบทั้งหมดของสมการที่กำหนดได้ ขั้นตอนการจำกัดขอบเขต (ดูภาพประกอบ) ประกอบด้วย
- การเลือกพจน์ย่อยที่ไม่เปลี่ยนแปลงของพจน์ปัจจุบัน
- โดยการรวมไวยากรณ์เข้ากับด้านซ้ายของกฎจากRและ
- แทนที่ด้านขวามือของกฎที่สร้างขึ้นลงในเทอมที่สร้างขึ้น
ตามหลักการแล้ว ถ้าl → rเป็นสำเนาที่เปลี่ยนชื่อของกฎการเขียนใหม่จากRโดยไม่มีตัวแปรใดที่เหมือนกันกับเทอมsและเทอมย่อยs | ไม่ใช่ตัวแปรและสามารถรวมเป็นหนึ่งเดียวกับl ได้ ผ่านทางmgu σแล้วsสามารถลดทอนให้แคบลงเหลือเทอมt = sσ [ rσ ] นั่นคือเหลือเทอมsσโดยที่เทอมย่อยที่p ถูกแทนที่ด้วยrσสถานการณ์ที่sสามารถลดทอนให้แคบลงเหลือtมักจะใช้สัญลักษณ์s ↝ tโดยสัญชาตญาณแล้ว ลำดับขั้นตอนการลดทอนt ↝ t ↝ ... ↝ t สามารถคิดได้ว่าเป็นลำดับขั้นตอนการเขียนใหม่t → t → ... → t แต่เทอมเริ่มต้นt จะถูกสร้างขึ้นเรื่อยๆ ตามความจำเป็นเพื่อให้กฎแต่ละข้อที่ใช้สามารถนำไปใช้ได้
การคำนวณพาราโมดูเลชัน ตัวอย่างข้างต้นสอดคล้องกับลำดับการลดขนาดดังต่อไปนี้ ("↓" แสดงถึงการสร้างอินสแตนซ์ในที่นี้):
| แอป ( | x | แอป ( y , | x | )) | |||||||||||||
| ↓ | ↓ | x ↦ v . v | |||||||||||||||
| แอป ( | ว . ว | แอป ( y , | ว . ว | )) | → | v . app ( v , app ( | y | , v . v )) | |||||||||
| ↓ | y ↦ ไม่มี | ||||||||||||||||
| v . app ( v , app ( | ไม่มี | , v . v )) | → | เวอร์ชันแอป( | ว | , v . | ว | ) | |||||||||
| ↓ | ↓ | v ↦ ไม่มี | |||||||||||||||
| เวอร์ชันแอป( | ไม่มี | , v . | ไม่มี | ) | → | v . v . nil |
เทอมสุดท้ายv . v . nilสามารถรวมเข้ากับเทอมด้านขวาเดิมa . a . nilได้ ทางไวยากรณ์
บทพิสูจน์การจำกัดขอบเขต[ 38 ]รับประกันว่าเมื่อใดก็ตามที่อินสแตนซ์ของเทอมsสามารถเขียนใหม่เป็นเทอมtโดยระบบการเขียนเทอมใหม่แบบลู่เข้าsและtก็สามารถจำกัดขอบเขตและเขียนใหม่เป็นเทอมs ′และt ′ตามลำดับ โดยที่t ′เป็นอินสแตนซ์ของs ′
กล่าวอย่างเป็นทางการคือ เมื่อใดก็ตามที่sσ → ∗ tเป็นจริงสำหรับการแทนที่ σ บางอย่าง จะมีเทอมs ′ , t ′ อยู่ ซึ่งs ↝ ∗ s ′และt → ∗ t ′และs ′ τ = t ′สำหรับการแทนที่ τ บางอย่าง
การรวมกันในลำดับที่สูงขึ้น

แอปพลิเคชันจำนวนมากต้องการให้พิจารณาการรวมเทอมแลมบ์ดาแบบมีประเภทแทนที่จะเป็นเทอมลำดับแรก การรวมดังกล่าวมักเรียกว่าการรวมลำดับสูงการรวมลำดับสูงไม่สามารถตัดสินได้ [ 39 ] [ 40 ] [ 41 ]และปัญหาการรวมดังกล่าวไม่มีตัวรวมทั่วไปส่วนใหญ่ ตัวอย่างเช่น ปัญหาการรวม { f ( a , b , a ) ≐ d ( b , a , c ) } โดยที่ตัวแปรเดียวคือfมีคำตอบ { f ↦ λ x .λ y .λ z . d ( y , x , c ) }, { f ↦ λ x .λ y .λ z . d ( y , z , c ) }, { f ↦ λ x .λ y .λ z . d ( y , a , c ) }, { f ↦ λ x .λ y .λ z . d ( b , x , c ) }, { f ↦ λ x .λ y .λ z . d ( b , z , c ) } และ { f ↦ λ x .λ y .λ z . d ( b , a , c ) } สาขาหนึ่งของการรวมลำดับสูงที่ได้รับการศึกษาอย่างดีคือปัญหาของการรวมเทอมแลมบ์ดาที่มีประเภทง่ายๆ โมดูลัสความเท่าเทียมกันที่กำหนดโดยการแปลง αβη Gérard Huetได้นำเสนออัลกอริทึมการรวม (ก่อน) ที่สามารถตัดสินได้บางส่วน[ 42 ]ซึ่งอนุญาตให้ค้นหาพื้นที่ของตัวรวมอย่างเป็นระบบ (โดยขยายอัลกอริทึมการรวมของ Martelli-Montanari [ 5 ]ด้วยกฎสำหรับเทอมที่มีตัวแปรลำดับสูงกว่า) ซึ่งดูเหมือนว่าจะใช้งานได้ดีพอสมควรในทางปฏิบัติ Huet [ 43 ]และ Gilles Dowek [ 44 ]ได้เขียนบทความสำรวจหัวข้อนี้ไว้แล้ว
เซตย่อยหลายเซตของการรวมลำดับสูงมีพฤติกรรมที่ดี กล่าวคือ เซตย่อยเหล่านี้สามารถตัดสินได้และมีตัวรวมทั่วไปที่สุดสำหรับปัญหาที่แก้ไขได้ เซตย่อยหนึ่งดังกล่าวคือเทอมลำดับแรกที่อธิบายไว้ก่อนหน้านี้การรวมรูปแบบลำดับสูงซึ่งพัฒนาโดย Dale Miller [ 45 ]เป็นเซตย่อยอีกเซตหนึ่งเช่นกัน ภาษาการเขียนโปรแกรมตรรกะลำดับสูงλPrologและTwelfได้เปลี่ยนจากการรวมลำดับสูงแบบเต็มรูปแบบไปเป็นการใช้งานเฉพาะส่วนของรูปแบบเท่านั้น น่าประหลาดใจที่การรวมรูปแบบนั้นเพียงพอสำหรับโปรแกรมเกือบทั้งหมด หากปัญหาการรวมรูปแบบที่ไม่ใช่ปัญหาหนึ่งๆ ถูกระงับไว้จนกว่าการแทนที่ในภายหลังจะทำให้การรวมเข้าไปอยู่ในส่วนของรูปแบบ เซตย่อยของการรวมรูปแบบที่เรียกว่าการรวมฟังก์ชันในฐานะตัวสร้างก็มีพฤติกรรมที่ดีเช่นกัน[ 46 ]ตัวพิสูจน์ทฤษฎีบท Zipperposition มีอัลกอริทึมที่รวมเซตย่อยที่มีพฤติกรรมที่ดีเหล่านี้เข้ากับอัลกอริทึมการรวมลำดับสูงแบบเต็มรูปแบบ[ 2 ]
ในภาษาศาสตร์เชิงคำนวณ หนึ่งในทฤษฎีที่มีอิทธิพลมากที่สุดของการสร้างแบบวงรีคือ วงรีจะถูกแทนด้วยตัวแปรอิสระซึ่งค่าของตัวแปรเหล่านั้นจะถูกกำหนดโดยใช้การรวมลำดับที่สูงกว่า ตัวอย่างเช่น การแสดงความหมายของ "จอนชอบแมรี่และปีเตอร์ก็ชอบด้วย" คือ like( j , m ) ∧ R( p )และค่าของ R (การแสดงความหมายของวงรี) จะถูกกำหนดโดยสมการlike( j , m ) = R( j ) กระบวนการแก้สมการดังกล่าวเรียกว่าการรวมลำดับที่สูงกว่า[ 47 ]
Wayne Snyderได้ให้การวางนัยทั่วไปของการรวมลำดับที่สูงกว่าและการรวม E กล่าวคือ อัลกอริทึมในการรวมเทอมแลมบ์ดาโมดูลทฤษฎีสมการ[ 48 ]
ดูเพิ่มเติม
- การเขียนใหม่
- กฎที่ยอมรับได้
- การแทนที่แบบชัดเจนในแคลคูลัสแลมบ์ดา
- การแก้สมการทางคณิตศาสตร์
- การแยกส่วน : การแก้ความไม่สมดุลระหว่างการแสดงออกเชิงสัญลักษณ์
- การต่อต้านการรวม : การคำนวณการสรุปทั่วไปน้อยที่สุด (lgg) ของสองเทอม ซึ่งเป็นสิ่งที่ตรงกันข้ามกับการคำนวณอินสแตนซ์ทั่วไปมากที่สุด (mgu)
- แลตทิซการครอบคลุม (Subsumption lattice)คือแลตทิซที่มีการรวมเป็นหนึ่ง (meet) และการต่อต้านการรวมเป็นหนึ่ง (join)
- การจัดเรียงออนโทโลยี (ใช้การรวมเข้าด้วยกันโดยมีความเท่าเทียมกันทางความหมาย )
หมายเหตุ
- ↑เช่น a ⊕ ( b ⊕ f ( x )) ≡ a ⊕ ( f ( x ) ⊕ b ) ≡ ( b ⊕ f ( x )) ⊕ a ≡ ( f ( x ) ⊕ b ) ⊕ a
- ↑ตั้งแต่
- ↑เนื่องจาก z { z ↦ x ⊕ y } = x ⊕ y
- ↑อย่างเป็นทางการ: แต่ละ unifier τ เป็นไปตาม ∀ x : xτ = ( xσ ) ρสำหรับการทดแทนบางส่วน ρ
- ↑โรบินสันใช้การรวมไวยากรณ์ลำดับแรกเป็นส่วนประกอบพื้นฐานของขั้น ตอน การแก้ปัญหาสำหรับตรรกะลำดับแรก ซึ่งเป็นก้าวสำคัญใน เทคโนโลยี การให้เหตุผลอัตโนมัติเนื่องจากช่วยขจัดแหล่งที่มาของการระเบิดเชิงการจัดเรียง หนึ่งแหล่ง ได้แก่ การค้นหาการแทนค่าของเทอม [ 14 ]
- ↑การค้นพบอิสระระบุไว้ใน Martelli & Montanari (1982)ส่วนที่ 1 หน้า 259 สำนักพิมพ์วารสารได้รับ Paterson & Wegman (1978)ในเดือนกันยายน พ.ศ. 2519
- ↑ Alg.1, หน้า 261 กฎของพวกเขา (a)สอดคล้องกับการสลับ กฎ ที่นี่ (b)เพื่อลบ(c)เพื่อแยกส่วนและขัดแย้งและ ( d)เพื่อกำจัดและตรวจสอบ
- ↑แม้ว่ากฎจะทำให้ x ≐ tใน G คงที่ แต่ก็ไม่สามารถวนซ้ำได้ตลอดไป เนื่องจากเงื่อนไขเบื้องต้น x ∈ vars ( G ) จะถูกทำให้เป็นโมฆะโดยการนำไปใช้ครั้งแรก โดยทั่วไปแล้ว อัลกอริทึมนี้รับประกันว่าจะสิ้นสุดเสมอ ดูด้านล่าง
- 1 2ในกรณีที่มีความเท่าเทียมกัน Cความเท่าเทียมกัน N และ N จะเท่ากัน และเช่นเดียวกันสำหรับ D และ D
อ่านเพิ่มเติม
- Franz BaaderและWayne Snyder (2001). "ทฤษฎีการรวมเป็นหนึ่งเดียว"ในJohn Alan RobinsonและAndrei Voronkovบรรณาธิการ, Handbook of Automated Reasoningเล่มที่ 1 หน้า 447–533. สำนักพิมพ์ Elsevier Science Publishers.
- Gilles Dowek (2001). "Higher-order Unification and Matching" เก็บถาวรเมื่อ 2019-05-15 ที่Wayback MachineในHandbook of Automated Reasoning
- Franz Baader และTobias Nipkow (1998). การเขียนคำศัพท์ใหม่และเรื่องอื่นๆ . สำนักพิมพ์มหาวิทยาลัยเคมบริดจ์
- Franz Baader และJörg H. Siekmann (1993). "ทฤษฎีการรวมเป็นหนึ่งเดียว" ในคู่มือตรรกศาสตร์ในปัญญาประดิษฐ์และการเขียนโปรแกรมเชิงตรรกะ
- Jean-Pierre Jouannaud และClaude Kirchner (1991). "การแก้สมการในพีชคณิตนามธรรม: การสำรวจการรวมเป็นหนึ่งเดียวโดยใช้กฎเกณฑ์" ในตรรกศาสตร์เชิงคำนวณ: บทความเพื่อเป็นเกียรติแก่ Alan Robinson
- Nachum DershowitzและJean-Pierre Jouannaud , Rewrite Systems , ใน: Jan van Leeuwen (บรรณาธิการ), Handbook of Theoretical Computer Science , เล่ม B Formal Models and Semantics , Elsevier, 1990, หน้า 243–320
- Jörg H. Siekmann (1990). "ทฤษฎีการรวมเป็นหนึ่ง". ในClaude Kirchner (บรรณาธิการ) การรวมเป็นหนึ่ง . สำนักพิมพ์ Academic Press.
- เควิน ไนท์ (มีนาคม 1989). "การรวมเป็นหนึ่งเดียว: การสำรวจแบบสหวิทยาการ" (PDF) . ACM Computing Surveys . 21 (1): 93– 124. CiteSeerX 10.1.1.64.8967 . doi : 10.1145/62029.62030 . S2CID 14619034 .
- เจราร์ด ฮิวเอตและดีเร็ก ซี. ออปเพน (1980) "สมการและกฎการเขียนใหม่: แบบสำรวจ" . รายงานทางเทคนิค มหาวิทยาลัยสแตนฟอร์ด.
- Raulefs, Peter; Siekmann, Jörg; Szabó, P.; Unvericht, E. (1979). "การสำรวจสั้นๆ เกี่ยวกับสถานะของศิลปะในปัญหาการจับคู่และการรวม" ACM SIGSAM Bulletin . 13 (2): 14– 20. doi : 10.1145/1089208.1089210 . S2CID 17033087 .
- Claude Kirchner และ Hélène Kirchner. การเขียนใหม่ การแก้ปัญหา การพิสูจน์ . อยู่ระหว่างการจัดทำ