พิสูจน์ได้ง่ายสำหรับภาษาที่ไม่มีบริบทถูกปิดภายใต้การเปลี่ยนแปลงแบบวนรอบ


11

วงจรกะ (ที่เรียกว่าหมุนหรือผัน ) ของภาษาถูกกำหนดให้เป็น\} ตามวิกิพีเดีย (และที่นี่ ) ภาษาที่ไม่มีบริบทถูกปิดภายใต้การดำเนินการนี้โดยมีการอ้างอิงถึงเอกสารจาก Oshiba และจาก Maslov มีหลักฐานง่าย ๆ ของความจริงข้อนี้?{ y x x y L }L{yxxyL}

สำหรับภาษาทั่วไปการปิดตัวจะถูกกล่าวถึงในแบบฟอร์มนี้เป็น " พิสูจน์ว่าภาษาปกติถูกปิดภายใต้ตัวดำเนินการรอบ "

คำตอบ:


5

คุณสามารถลองใช้ pushdown ออโตมาตะได้ เมื่อได้รับการผลักอัตโนมัติหุ่นยนต์สำหรับภาษาต้นฉบับเราสร้างหนึ่งสำหรับการเปลี่ยนวงจร ออโตมาตาใหม่ทำงานในสองขั้นตอนซึ่งสอดคล้องกับและส่วนของคำว่า (โดยที่อยู่ในภาษาดั้งเดิม) ในระยะแรกเมื่อใดก็ตามที่หุ่นยนต์ต้องการที่จะปรากฏขึ้นที่ไม่ใช่เทอร์มินัลก็สามารถผลักดันที่ไม่ใช่เทอร์มินัล ; แนวคิดคือในตอนท้ายของสเตจแรกสแต็กจะมีสัญลักษณ์ที่พบในสแต็กหลังจากอ่านโดยออโตเมติกดั้งเดิม ในขั้นตอนที่สอง (สวิตช์ไม่ใช่แบบไม่กำหนดค่า) แทนการกดไม่ใช่ขั้วx y x x y A A x AyxyxxyAAxAเราได้รับอนุญาตให้ปรากฏไม่ใช่ขั้วA'หากออโตมาตาดั้งเดิมสามารถสร้างสแต็คได้เมื่ออ่านดังนั้นจะสามารถสร้างสแต็กใหม่ทั้งหมดได้ xAx

แก้ไข: นี่คือรายละเอียดเพิ่มเติมบางส่วน สมมติว่าเราได้รับ PDA ที่มีตัวอักษร , ชุดของสถานะ , ชุดของการยอมรับสถานะ , ไม่ใช่เทอร์มินัล , สถานะเริ่มต้นและชุดของการเปลี่ยนที่อนุญาต แต่ละการเปลี่ยนแปลงที่อนุญาตคือแบบฟอร์มซึ่งหมายความว่าเมื่ออยู่ในสถานะเมื่ออ่าน (หรือซึ่งในกรณีนี้เป็นการเปลี่ยนผ่านฟรี) ถ้าบนสุดของสแต็กคือ (หรือซึ่งหมายถึงสแต็กว่างเปล่า) จากนั้น PDA สามารถ (เป็นรูปแบบที่ไม่ได้กำหนดไว้) ย้ายไปยังสถานะแทนที่Q F Γ Q 0 ( Q , , , Q ' , α ) Q = ε Γ = ε Q 'ΣQFΓq0(q,a,A,q,α)qaAa=ϵAΓA=ϵqAกับ *αΓ

PDA ที่ใหม่ที่มีใหม่ที่ไม่ใช่ขั้วสำหรับแต่ละ\ ทุก ๆ สองรัฐและมีสองรัฐA) สถานะเริ่มต้น (สถานะเริ่มต้นจริงถูกเลือกแบบไม่กำหนดขึ้นในหมู่พวกเขาผ่านแกมมาQ , Q 'Q แกมมา{ ε } ( Q , Q ' , 1 ) , ( Q , Q ' , 2 , )AAΓq,qQAΓ{ϵ}(q,q,1),(q,q,2,A) -transitions) เป็น ( Q , Q , 1 ) สำหรับแต่ละช่วงการเปลี่ยนภาพ ( q , a , A , q , α )มีการเปลี่ยนที่สอดคล้องกัน ( ( q ,ϵ(q,q,1)(q,a,A,q,α)และ ( ( q , q , 2 , B ) , a , A , ( q , q , 2 , B ) , α ) มีการเปลี่ยนอื่น ๆ เช่นกัน((q,q,1),a,A,(q,q,1),α)((q,q,2,B),a,A,(q,q,2,B),α)

สำหรับแต่ละช่วงการเปลี่ยนภาพมีการเปลี่ยนภาพ( ( q , q , 1 ) , a , B , ( q , q , 1 ) , B A α )ที่B แกมมา{ ε }และε ' =(q,a,A,q,α)((q,q,1),a,B,(q,q,1),BAα)BΓ{ϵ}ε สำหรับทุกรัฐสุดท้าย Q Fมีการเปลี่ยน ( ( Q , Q " , 1 ) , ε , , ( Q 0 , Q " , 2 , ε ) , )ที่แกมมา{ ε }ϵ=ϵqF((q,q,1),ϵ,A,(q0,q,2,ϵ),A)AΓ{ϵ}

สำหรับการเปลี่ยนภาพทุกครั้งมีการเปลี่ยนภาพ( ( q , q , 2 , A ) , a , B , ( q , q , 2 , A ) , B α )ที่แกมมา{ ε } สำหรับทุกการเปลี่ยนแปลง(q,a,ϵ,q,α)((q,q,2,A),a,B,(q,q,2,A),Bα)AΓ{ϵ} , มีการเปลี่ยน ( ( q , q , 2 , B ) , a , A , ( q , q , 2 , A ) , ϵ )โดยที่ B แกมมา{ ε } สำหรับการเปลี่ยนแปลงทุกครั้ง ( q , a(q,a,ϵ,q,A)((q,q,2,B),a,A,(q,q,2,A),ϵ)BΓ{ϵ}มี "ช่วงการเปลี่ยนภาพทั่วไป" ( ( q , q , 2 , C ) , a , B A , ( q , q , 2 , C ) , ϵ ) ; สิ่งเหล่านี้ถูกนำมาใช้เป็นลำดับของการเปลี่ยนผ่านสองสถานะใหม่ระดับกลาง การเปลี่ยนแปลง ( q , a , ϵ , q ,(q,a,A,q,B)((q,q,2,C),a,BA,(q,q,2,C),ϵ)กับ | α | 2ได้รับการจัดการในทำนองเดียวกัน สำหรับการเปลี่ยนภาพทุกครั้ง ( q , a , A , q , A )มีการเปลี่ยนภาพ ( ( q , q , 2 , A ) , a , B , ( q , q , 2 , A ) , B ) , ที่ B (q,a,ϵ,q,α)|α|2(q,a,A,q,A)((q,q,2,A),a,B,(q,q,2,A),B) } ช่วงการเปลี่ยนภาพ ( q , a , A , q , A α )ได้รับการจัดการในทำนองเดียวกัน ในที่สุดก็มี แต่เพียงผู้เดียวสุดท้ายรัฐและการเปลี่ยน ( ( Q , Q , 2 , ) , ε , ε , F , ε )BΓ{ϵ}(q,a,A,q,Aα)f((q,q,2,A),ϵ,ϵ,f,ϵ)

(อาจมีช่วงการเปลี่ยนภาพเล็กน้อยที่ฉันพลาดและรายละเอียดบางส่วนที่ฉันไม่ได้ดูค่อนข้างยุ่ง)

จำเรากำลังพยายามที่จะยอมรับคำที่x y ที่ได้รับการยอมรับจาก PDA เดิม รัฐ( Q , Q ' , 1 )หมายความว่าเรากำลังอยู่ในขั้นตอนที่ 1, ที่รัฐQและ PDA เดิมที่รัฐQ 'หลังจากที่ได้อ่านx รัฐ( Q , Q ' , 2 , )จะคล้ายกันที่สอดคล้องกับสุดท้าย'ที่โผล่ ที่ด่าน 1 เราได้รับอนุญาตให้ผลักA yxxy(q,q,1)qqx(q,q,2,A)AAAแทนการ popping เราทำอย่างนั้นไม่ใช่สำหรับแต่ละขั้วที่ผลิตในขณะที่การประมวลผลxแต่โผล่เท่านั้นในขณะที่การประมวลผลY ในขั้นตอนที่ 2 เราได้รับอนุญาตให้ปรากฏ'แทนการผลักดัน ถ้าเราทำเช่นนี้แล้วเราต้องจำไว้ว่าด้านบนของหุ้นมัน; นี้ใช้เฉพาะเมื่อไม่มีสิ่ง "ชั่วคราว" ในกองซึ่งจำลอง PDA เป็นเช่นเดียวกับด้านบนของสแต็คเป็นεหรือในรูปแบบB 'AxyAAAϵB

นี่คือตัวอย่างง่ายๆ พิจารณาหุ่นยนต์สำหรับที่ผลักดันสำหรับแต่ละxและปรากฏสำหรับแต่ละปี ออโตใหม่ยอมรับคำพูดของทั้งสองรูปแบบ: Y k x n Y n - kและx k Y n x n - k สำหรับคำพูดของรูปแบบครั้งแรก, ระยะที่ 1 ประกอบด้วยการผลักดันkครั้ง' , ระยะที่ 2 ประกอบด้วย popping kครั้ง'ผลักดันnxnynAxAyykxnynkxkynxnkkAkAครั้งและ popping n - kครั้ง สำหรับคำพูดของรูปแบบที่สองครั้งแรกที่เราผลักดัน kครั้งแล้วปรากฏ kครั้งดัน n - kครั้ง 'เปลี่ยนไปขั้นตอนที่ 2 และ pop n - kครั้ง'nkAnkAkAkAnkAnkA

นี่คือตัวอย่างที่มีความซับซ้อนมากขึ้นสำหรับภาษาของวงเล็บที่มีความสมดุลในประเภทต่างๆ ("()", "[]", "<>") ที่ลูกหลานของวงเล็บแต่ละประเภทจะต้องอยู่ในประเภทที่แตกต่างกัน ตัวอย่างเช่น "([] <>)" ก็โอเค แต่ "()" ผิด สำหรับแต่ละ "(" เราผลักดันถ้าด้านบนของสแต็คไม่สำหรับแต่ละ ")" เรา pop ในทำนองเดียวกันB , Cเกี่ยวข้องกับ "[]" และ "<>" นี่คือวิธีที่เรายอมรับคำว่า ">) ([()] <" เราใช้คำว่า ">)" กดC A และเปลี่ยนไปยังสเตจ 2 เราบริโภค "(" popping 'และความทรงจำด้านบนของสแต็ค เราใช้ "[()]" ผลักและ poppingA AABCCAAA ; เมื่อกด Bเราจะทราบว่า "จริง" บนสุดของสแต็กคือ Aและอนุญาตให้ใช้วงเล็บเหลี่ยม (เราจะไม่ถูกหลอกโดย ">) (() <"); เมื่อกด Aเนื่องจากด้านบนสุดของสแต็กคือ B (ซึ่งไม่ใช่ ϵหรือของรูปแบบ X ) จากนั้นเราทราบว่า Bเป็น "บนสุดของ" สแต็คที่แท้จริง "เช่นกันและอนุญาตให้ใช้เครื่องหมายวงเล็บกลมได้ ( แม้ว่าเงาบนสุดของสแต็กคือ A ) สุดท้ายเรากิน "<" และ pop C 'BABAABϵXBAC


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

ข้อเสนอแนะที่น่าสนใจมาก ขอบคุณ ฉันจะเคี้ยวเล็กน้อยเพื่อปล่อยให้มันจม
Hendrik

@usul คุณจะต้องกรอกรายละเอียดด้วยตัวเอง สวิทช์' (ในระยะแรก) ควรจะเกิดขึ้นเมื่อหุ่นยนต์ "ต้องการ" ที่จะปรากฏแต่ไม่สามารถและแทนมันดัน' คุณสามารถคิดว่ามันเป็นไปไม่ได้กำหนด AAAA
Yuval Filmus

@Yuval: ขอโทษ แต่ฉันไม่สามารถทำให้มันเกิดขึ้นได้ เมื่อฉันเข้าใจความคิดของคุณออโตมาตาใหม่จะเริ่มต้นด้วยการจำลองส่วนเปลี่ยน pops และ pushes แล้วสร้างαในกองที่หุ่นยนต์เดิมเริ่มต้นด้วยαเมื่ออ่านY Waht เป็นการเริ่มต้นดั้งเดิมด้วยการผลักดันหรือไม่? จากนั้นหุ่นยนต์ใหม่ของเราจะต้องโผล่ขึ้นมาจากสแต็กเปล่า ฉันยังคิดว่าสัญชาตญาณของคุณมีค่า แต่ดูเหมือนว่าจำเป็นต้องมีการดูแลเป็นพิเศษ yααy
Hendrik Jan

@Hendrik ฉันขอโทษ แต่ฉันไม่สามารถทำตามตัวอย่างของคุณได้ คุณคิดว่าจุดใดของหุ่นยนต์ใหม่ที่จะโผล่ขึ้นมาจากกองที่ว่างเปล่า?
Yuval Filmus

4

พิจารณารูปแบบปกติ Greibach ที่จะสร้างภาษาขยับคุณจำเป็นต้องเปลี่ยนโปรดักชั่นเพียงเพื่อS 1 ... n αและเพิ่มใหม่ที่ไม่ใช่ขั้วS 'ว่าพฤติกรรมเช่นSใช้ในการในบางกรณีการผลิตบางส่วนที่อ้างถึง .SαA1AnSA1AnαSSS


ขอบคุณ แต่นี่คือจดหมายฉบับเดียว ฉันสนใจการหมุนทั่วไปด้วยตัวอักษรจำนวนหนึ่งโดยพลการ
Hendrik Jan

3
@HendrikJan เอาล่ะถ้าไม่มีบริบทดังนั้นshift n ( L ) = shift 1 ( shift 1 ( ( L ) )ก็จะเป็นบริบทเช่นกันแน่นอนคุณสามารถสร้างไวยากรณ์ให้โดย ใช้วิธีที่ฉันแนะนำnครั้งคุณยังสามารถสร้างไวยากรณ์shift n ( L )โดยตรงโดย "ไวยากรณ์" แบนที่กำหนดตัวอย่างเช่นถ้าn = 2และไวยากรณ์มีโปรดักชั่นSshift1(L)shiftn(L)=shift1(shift1((L))nshiftn(L)n=2และ →การบีตาCคุณต้องการเพิ่มการผลิต S →การอัลฟ่าบีตาC Bและหมุนที่ แน่นอนขนาดของไวยากรณ์ของคุณอาจเติบโตอย่างรวดเร็ว SαABAβCSαβCB
Karolis Juodelė

1
สำหรับการแก้ไขคุณถูกต้อง แต่ที่นี่nได้รับการแก้ไขหรือกระโดด ตัวอย่างเช่นถ้าL = { n n | n 0 }แล้วเราได้รับ{ k n | k + = n } { k n | k + = n } nnL={anbnn0}{akbnak+=n}{bkanbk+=n}
Hendrik Jan

@HendrikJan ฉันเห็น ฉันคิดว่าผิดคำถามเกี่ยวกับการเปลี่ยนแปลงแน่นอน ฉันจะพิจารณาคำตอบของฉันอีกครั้ง ...
Karolis Juodelė

4

มันเป็นความคิดที่ดีที่จะตรวจสอบ Hopcroft และ Ullman แบบคลาสสิกเรื่องIntroduction to Automata Theory (1979) ปิดภายใต้วงจรคือการออกกำลังกาย 6.4c และมีการทำเครื่องหมาย S ** ดาวคู่หมายความว่ามันเป็นหนึ่งในปัญหาที่ยากที่สุด (ในหนังสือ) โชคดีที่ S ระบุว่าเป็นหนึ่งในปัญหาที่เลือกด้วยวิธีแก้ปัญหา

วิธีแก้ปัญหามีดังนี้ ใช้ CFG ในรูปแบบปกติของ Chomsky พิจารณาต้นไม้ที่มาและโดยทั่วไปจะเปิดคว่ำ พิจารณาเส้นทาง ในแผนผังต้นฉบับ ไปทางซ้ายต้นไม้มีผลงานx 1 , x 2 , ... , x nไปทางขวา ปี1 , ปี2 , ... , Y nหมายถึงสตริงมาเท่ากับx 1 x 2 ... x nS=X1,X2,,Xnx1,x2,,xny1,y2,,yn 1 (อันที่จริงแล้วไวยากรณ์คือ CNF เมื่อเส้นทางยังคงดำเนินต่อไปการสนับสนุนจะอยู่ทางด้านขวาและ x i ที่เกี่ยวข้องนั้นว่างเปล่า ฯลฯ )x1x2xnyny2y1xi

ต้นไม้คว่ำมีเส้นทางร่วมกับY n , ... , ปีที่ 2 ปีที่ 1ไปทางซ้ายและ x n , ... , x 2 x 1ไปทางขวา เพื่อผลที่มาหาY n ... Y 2 ปี1 x 1 x 2 ... x n ตามความจำเป็น.S,X^n,X^2,X^1yn,,y2y1xn,,x2x1yny2y1x1x2xn

รายละเอียดการก่อสร้างทั้งหมดระบุไว้ในหนังสือ

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

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