อัลกอริทึมเพื่อทดสอบว่าภาษานั้นไม่มีบริบทหรือไม่


18

มีอัลกอริทึม / กระบวนงานที่เป็นระบบเพื่อทดสอบว่าภาษานั้นไม่มีบริบทหรือไม่?

กล่าวอีกนัยหนึ่งระบุภาษาที่ระบุในรูปแบบพีชคณิต (คิดว่าบางอย่างเช่นL={annan:nยังไม่มีข้อความ} ) ทดสอบว่าภาษานั้นไม่มีบริบทหรือไม่ ลองนึกภาพเรากำลังเขียนบริการเว็บเพื่อช่วยนักเรียนทำการบ้านทั้งหมด คุณระบุภาษาและบริการเว็บเอาท์พุท "ไม่มีบริบท" หรือ "ไม่ใช่บริบท" มีวิธีการที่ดีในการทำสิ่งนี้โดยอัตโนมัติหรือไม่?

มีเทคนิคการเรียนการสอนสำหรับการพิสูจน์ด้วยตนเองเช่นแทรกสูบน้ำแทรกอ็อกเดน, Parikh แทรกการแลกเปลี่ยนแทรกและเพิ่มเติมได้ที่นี่ อย่างไรก็ตามพวกเขาแต่ละคนต้องการข้อมูลเชิงลึกด้วยตนเองในบางจุดดังนั้นจึงไม่ชัดเจนว่าจะทำให้พวกเขากลายเป็นสิ่งที่เป็นอัลกอริทึมได้อย่างไร

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


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

L={E:S}

โดยที่คือคำศัพท์นิพจน์และSเป็นระบบของความไม่เท่าเทียมกันเชิงเส้นเหนือตัวแปรความยาวโดยมีคำจำกัดความดังต่อไปนี้:ES

  • แต่ละคือการแสดงออกของคำ (สิ่งเหล่านี้แสดงถึงตัวแปรที่สามารถเก็บคำใด ๆ ในΣ )x,Y,Z,...Σ* * * *

  • แต่ละ, B , C , ...เป็นคำที่แสดงออก (โดยปริยาย, Σ = { , B , C , ... }ดังนั้น, B , C , ...เป็นตัวแทนสัญลักษณ์เดียวในอักษรพื้นฐาน.)a,,,...Σ={a,,,...}a,,,...

  • แต่ละη , η , η , ...เป็นคำที่แสดงออกถ้าηคือความยาวตัวแปรaη,η,η,...η

  • การต่อกันของคำ - นิพจน์คือการแสดงออกของคำ

  • แต่ละเป็นตัวแปรความยาว (สิ่งเหล่านี้แสดงถึงตัวแปรที่สามารถเก็บจำนวนธรรมชาติได้)ม.,n,พี,Q,...

  • แต่ละเป็นตัวแปรความยาว (สิ่งเหล่านี้แสดงความยาวของคำที่สอดคล้องกัน)|x|,|Y|,|Z|,...

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


การเริ่มต้นด้วยภาษาที่เป็นประจำจะง่ายกว่าไหม
Yuval Filmus

@YuvalFilmus แน่นอนว่าจะเป็นเช่นนั้น! ตอนนี้คุณพูดถึงมันเป็นความคิดที่ดี คุณคิดว่าปัญหานี้เป็นไปได้สำหรับภาษาทั่วไปหรือไม่ ฉันยินดีที่จะขอคำตอบเกี่ยวกับภาษาทั่วไปหากคุณคิดว่าอาจมีค่า
DW

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

4
ผมเกรงว่าปัญหานี้น่าจะเปิดอย่างน้อยกรณีที่เฉพาะเจาะจงคือcstheory.stackexchange.com/questions/17976 อาจมีวิธีที่จะได้รับความไม่แน่นอนสำหรับปัญหาทั่วไปของคุณ แต่ฉันไม่เห็น
sdcvvc

มันจะเป็นประโยชน์ในการให้คำตัวอย่างในภาษา แนะนำการวิจัยเพิ่มเติม / ความร่วมมือในวิทยาการคอมพิวเตอร์แชท
vzn

คำตอบ:


0

ตามทฤษฏีของไรซ์เพื่อดูว่าภาษาที่ยอมรับโดยเครื่องจักรทัวริงมีคุณสมบัติที่ไม่สำคัญ (ที่นี่: ปราศจากบริบท) หรือไม่ ดังนั้นคุณจะต้อง จำกัด พลังของเครื่องจักรที่รับรู้ของคุณ (หรือคำอธิบาย) เพื่อไม่ให้ทัวริงสมบูรณ์เพื่อหวังคำตอบ

สำหรับคำอธิบายภาษาบางคำตอบนั้นไม่สำคัญ: หากเป็นการแสดงออกปกติมันเป็นเรื่องปกติจึงไม่มีบริบท หากเป็นไปตามไวยากรณ์ฟรีบริบทเหมือนกัน


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

-2

ภาษาใดก็ได้ที่เป็นที่ยอมรับโดย Push Down Automata คือ CFL นี่คือรายละเอียดแยกย่อยเพื่อตรวจสอบว่าภาษาเป็น CFL หรือไม่ ตรวจสอบว่าภาษาเป็น CFL หรือไม่


นี่ไม่ใช่อัลกอริทึม
xskxzr

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

AFAIK ยังไม่มีอัลกอริทึมที่มีโครงสร้างที่ดีสำหรับเรื่องนี้ (แก้ไขฉันถ้าฉันผิด) สิ่งที่ดีที่สุดที่เราสามารถทำได้คือการตรวจสอบกรณี
SiluPanda

-3

ลองใช้ซอฟต์แวร์ JFLAP หากคุณต้องการตรวจสอบ CFG คุณอาจขอให้นักพัฒนา JFLAP มอบรหัสหรืออัลกอริทึมให้กับซอฟต์แวร์ คุณสามารถรับ JFLAP ได้จากที่นี่http://www.jflap.org/jflaptmp/ฟรี แต่ต้องใช้ JDK หรือ JRE หรืออะไรบางอย่าง หรือบางทีคุณอาจลองใช้ซอฟต์แวร์อื่น ๆ ที่คล้ายกันและนักพัฒนาซอฟต์แวร์ของพวกเขา


1
ฉันไม่แน่ใจว่านี่ตอบคำถาม JFLAP ไม่มีคุณสมบัติที่ยอมรับภาษาในรูปแบบทางคณิตศาสตร์และบอกคุณว่าเป็นแบบไม่มีบริบทหรือไม่
Yuval Filmus

ทฤษฎีบท 2.20 ในหนังสือ Sipser ภาษาไม่มีบริบทถ้าหากว่าหุ่นยนต์แบบกดลงบางส่วนรับรู้ และคุณสามารถสร้าง PDA ใน JFLAP ได้จากไวยากรณ์
Haseeb Hassan Asif

คุณอาจถูกต้องเกี่ยวกับสัญกรณ์คณิตศาสตร์ที่ไม่สามารถใส่ใน JFLAP แต่คุณยังสามารถใส่กฎของไวยากรณ์ทั้งหมดและสามารถแปลงเป็น PDA หรือบอกว่าไม่ใช่ CFG หรือข้อผิดพลาดอื่น ๆ
Haseeb Hassan Asif

{annn:nยังไม่มีข้อความ}

2
ฉันจินตนาการว่า JFLAP สามารถแปลงไวยากรณ์ที่ไม่มีบริบทเป็นพีดีเอเทียบเท่าได้ แต่นี่ไม่ช่วยอะไรเลย
Yuval Filmus
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.