ก่อนและหลังมีการตั้งค่าสำหรับไวยากรณ์ที่ไม่มีบริบทหรือไม่


14

ให้Gเป็นไวยากรณ์ที่ไม่มีบริบท สตริงของอาคารและ nonterminals ของGบอกว่าจะเป็นรูปแบบ sententialของGถ้าคุณสามารถรับมันได้โดยการใช้โปรดักชั่นของGศูนย์ครั้งหรือมากกว่าที่จะเป็นสัญลักษณ์ของการเริ่มต้นของSSให้SF(G)เป็นชุดของรูปแบบ sentential ของGG

ให้αSF(G)และปล่อยให้βเป็นย่อยของα - เราเรียกส่วนของเอสเอฟ( G ) ตอนนี้ให้βSF(G)

Before(β)={γ | δ.γβδSF(G)}

และ

After(β)={δ | γ.γβδSF(G)} }

อยู่และหลังจาก( β )ภาษาบริบทฟรีหรือไม่ เกิดอะไรขึ้นถ้าGไม่คลุมเครือ? หากGไม่มีความกำกวมเป็นBefore ( β )และAfter ( β )สามารถอธิบายได้ด้วยภาษาที่ไม่มีบริบทที่ชัดเจนหรือไม่?Before(β)After(β)GGBefore(β)After(β)

นี่คือการติดตามคำถามก่อนหน้าของฉันหลังจากความพยายามก่อนหน้าเพื่อทำให้คำถามของฉันง่ายขึ้นในการตอบล้มเหลว คำตอบเชิงลบจะทำให้คำถามที่ครอบคลุมฉันกำลังทำงานอย่างหนักเพื่อตอบ

คำตอบ:


8

ให้เราได้รับความรู้สึกและหลัง( β )ก่อน พิจารณาต้นไม้ที่มาซึ่งมีβ ; "บรรจุ" ที่นี่หมายความว่าคุณสามารถตัดทรีย่อยเพื่อให้βเป็นคำย่อยของหน้าต้นไม้ จากนั้นชุดก่อน (หลัง) คือส่วนที่มีศักยภาพทั้งหมดของส่วนต้นไม้ที่เหลือ (ขวา) ของβ :Before(β)After(β)βββ

ต้นไม้ที่มีก่อนและหลังชุด
[ แหล่งที่มา ]

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


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

ให้ไวยากรณ์ที่ไม่มีบริบท มันง่ายที่จะเห็นว่าSF ( G )ไม่มีบริบท สร้างG = ( N , T , δ , N S )เช่นนี้:G=(N,T,δ,S)SF(G)G=(N,T,δ,NS)

  • N={NAAN}
  • T=NT
  • δ={α(A)α(β)Aβδ}{NAAAN}

ด้วยสำหรับทุกt Tและα ( A ) = N Aสำหรับa Nทั้งหมด เป็นที่ชัดเจนว่าL ( G ) = SF ( G ) ; ดังนั้นการปิดคำนำหน้าที่เกี่ยวข้องPref ( SF ( G ) )และการปิดท้ายSuff ( SF ( G ) )นั้นไม่มีบริบทเช่นกัน contextα(t)=ttTα(A)=NAaNL(G)=SF(G)Pref(SF(G))Suff(SF(G))

ตอนนี้สำหรับการใด ๆมีL ( β ( N T ) * )และL ( ( N T ) * β )ภาษาปกติ เนื่องจากC F Lถูกปิดภายใต้จุดตัดและความฉลาดทางซ้าย / ขวาด้วยภาษาปกติเราได้รับβ(NT)L(β(NT))L((NT)β)CFL

Before(β)=(Pref(SF(G))  L((NT)β))/βCFL

และ

LAfter(β)=(Suff(SF(G))  L(β(NT)))βCFL


¹ ถูกปิดภายใต้ความฉลาดทางขวา (และซ้าย) ; Pref ( L ) = L / Σ และคล้ายกันสำหรับคำนำหน้าSuff Yield ปิดท้ายCFLPref(L)=L/ΣSuff


ฉันเริ่มเขียนคำตอบแล้วรู้ว่าหลักฐานของฉันเหมือนกับของคุณ ฉันได้ใส่มันด้วยวิธีนี้ (บีบอัดเพื่อให้พอดีกับที่นี่): รูปแบบไวยากรณ์โดยการเพิ่มขั้วใหม่(ก metavariable) สำหรับแต่ละไม่ใช่ขั้วและผลิตรูปแบบประโยคGนั้นเป็นคำที่รู้จักโดยGซึ่งประกอบด้วย metavariables นี่คือจุดตัดของ CFG ที่มีภาษาปกติและเป็นปกติ ชุดคำนำหน้าของ CFG คือ CFG (รับ PDA และทำให้ทุกสถานะเป็นขั้นสุดท้าย) B e f o r e ( γ ) =GA^AAA^GGเป็นอีกครั้ง CFG Before(γ)={γγβL(Prefix(G^))}
Gilles 'หยุดความชั่วร้าย'

1
@Gilles ความคิดเห็นสามข้อเกี่ยวกับเรื่องนี้: 1) รูปแบบประโยคปกติ (อย่างถูกต้อง) มีภาษา 2) "ทำให้ทุกรัฐเป็นที่สิ้นสุด" - ไม่สามารถใช้งานได้; คุณจะยอมรับคำนำหน้าของคำที่ไม่ใช่คำด้วย 3) ขั้นตอนสุดท้ายของการ "ตัด" คำต่อท้ายดูเหมือนว่าจะยุ่งยากมาก : / คุณมีหลักฐานที่เข้มงวด แต่กะทัดรัดกว่าของฉันหรือไม่?
Raphael

Gbb

9

Before(β)After(β)L คือ CF ดังนั้น:

Before(L,β)={γ | δ.γβδL}

and

After(L,β)={γ | δ.δβγL}

are CF.

Proof? For Before(L,β) construct a non-deterministic finite-state transducer Tβ that scans a string, outputting every input symbol it sees and simultaneously searches non-deterministically for β. Whenever Tβ sees the first symbol of β it forks non-deterministically and ceases outputting symbols until either it finishes seeing β or it sees sees a symbol that deviates from β, stopping in either case. If Tβ sees β in full, it accepts upon stopping, which is the only way it accepts. If it sees a deviation from β, it rejects.

The lemma can be jiggered to handle cases where β could overlap with itself (like abab -- keep looking for β even while in the midst of scanning for a prior β) or appears multiple times (actually, the original non-determinisic forking already handles that).

It's fairly clear that Tβ(L)=Before(L,β), and since the CFLs are closed under finite-state transduction, Before(L,β) is therefore CF.

A similar argument goes for After(L,β), or it could be done with string reversals from Before(L,β) , CFLs also being closed under reversal:

After(L,β)=rev(Before(rev(L),rev(β)))

Actually, now that I see the reversal argument, it would be even easier to start with After(L,β), since the transducer for that is simpler to describe and verify -- it outputs the empty string while looking for a β. When it finds β it forks non-deterministically, one fork continuing to look for further copies of β, the other fork copying all subsequent characters verbatim from input to output, accepting all the while.

What remains is to make this work for sentential forms as well as CFLs. But that is pretty straightforward, since the language of sentential forms of a CFG is itself a CFL. You can show that by replacing every non-terminal X throughout G by say X, declaring X to be a terminal, and adding all productions XX to the grammar.

I'll have to think about your question on unambiguity.

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