Grammars เป็นวัตถุที่วนซ้ำโดยเนื้อแท้ดังนั้นคำตอบดูเหมือนชัดเจน: โดยการเหนี่ยวนำ ที่กล่าวว่าเฉพาะมักจะเป็นเรื่องยากที่จะได้รับสิทธิ ในภาคต่อฉันจะอธิบายถึงเทคนิคที่อนุญาตให้ลดการพิสูจน์ความถูกต้องตามหลักไวยากรณ์ไปยังขั้นตอนทางกลได้หากมีการประมวลผลล่วงหน้าที่สร้างสรรค์
แนวคิดพื้นฐานคือการไม่ จำกัด ตัวเองเป็นคำไวยากรณ์และภาษา มันยากที่จะเข้าใจโครงสร้างของไวยากรณ์ในลักษณะนี้ แต่เราจะโต้แย้งเกี่ยวกับชุดของประโยคที่ไวยากรณ์สามารถสร้างได้ นอกจากนี้เราจะแบ่งเป้าหมายที่พิสูจน์แล้วว่าน่ากลัวเป็นเป้าหมายขนาดเล็กจำนวนมากที่สามารถทำได้ง่ายกว่า
ให้ไวยากรณ์อย่างเป็นทางการกับอาคารผู้โดยสารไม่ , ขั้วกฎและเริ่มต้นสัญลักษณ์N เราใช้แสดงโดยชุดของประโยคที่ว่าจะได้รับจากได้รับที่เป็น\ ภาษาที่สร้างขึ้นโดยเป็น * สมมติว่าเราต้องการแสดงให้เห็นว่าสำหรับบางตัวG=(N,T,δ,S)NTδS∈Nϑ(G)Sδα∈ϑ(G)⟺S⇒∗αGL(G)=ϑ(G)∩T∗L=L(G)L⊆T∗
สถานที่จัดงาน
นี่คือวิธีที่เราจะไปเกี่ยวกับที่ เรากำหนดเพื่อให้M1,…,Mk⊆(N∪T)∗
- ϑ(G)=⋃i=1kMiและ
- T∗∩⋃i=1kMi=LL
ในขณะที่ 2. มักจะชัดเจนโดยคำจำกัดความของ , 1. ต้องมีงานที่จริงจัง ทั้งสองรายการเข้าด้วยกันอย่างชัดเจนบ่งบอกตามที่ต้องการL ( G ) = LMiL(G)=L
เพื่อความสะดวกในสัญกรณ์ขอแสดงว่าM_iM=⋃ki=1Mi
ถนนหิน
มีสองขั้นตอนหลักในการดำเนินการพิสูจน์ดังกล่าว
จะหา (ดี)อย่างไร Mi
กลยุทธ์หนึ่งคือการตรวจสอบขั้นตอนการทำงานของไวยากรณ์ผ่าน ไม่ใช่ทุกความคิดที่สอดคล้องกับแนวคิดนี้; โดยทั่วไปนี่เป็นขั้นตอนที่สร้างสรรค์ ช่วยถ้าเราสามารถกำหนดไวยากรณ์ของเราเอง; ด้วยประสบการณ์บางอย่างเราจะสามารถกำหนดแกรมม่าได้ง่ายขึ้นด้วยวิธีการนี้
วิธีการพิสูจน์ 1. ?
เช่นเดียวกับความเท่าเทียมกันที่กำหนดไว้มีสองทิศทาง
- ϑ(G)⊆M : (โครงสร้าง) เหนี่ยวนำกว่าโปรดักชั่นของGG
- M⊆ϑ(G) : โดยปกติหนึ่งเหนี่ยวนำโดยเริ่มต้นจากที่หนึ่งที่มีS SMiS
นี่เป็นสิ่งเฉพาะเจาะจงตามที่ได้รับ รายละเอียดขึ้นอยู่กับไวยากรณ์และภาษาในมือ
ตัวอย่าง
พิจารณาภาษา
L={anbncm∣n,m∈N}
และไวยากรณ์ด้วยกำหนดโดยδG=({S,A},{a,b,c},δ,S)δ
SA→Sc∣A→aAb∣ε
ที่เราต้องการที่จะแสดงให้เห็นว่า{G} ขั้นตอนของไวยากรณ์นี้ทำงานอย่างไร ดีแรกมันสร้างแล้ว nนี้ทันทีแจ้งทางเลือกของเราคือc m a n b n M iL=L(G)cmanbnMi
M0M1M2={Scm∣m∈N},={anAbncm∣m,n∈N},={anbncm∣m,n∈N}.
เนื่องจากและรายการที่ 2 ได้รับการดูแลแล้ว ต่อ 1. เราแบ่งหลักฐานออกเป็นสองส่วนตามที่ประกาศM 0 ∩ T ∗ = M 1 ∩ T ∗ = ∅M2=LM0∩T∗=M1∩T∗=∅
ϑ(G)⊆M
เราดำเนินการเหนี่ยวนำโครงสร้างตามกฎของGG
IA:เนื่องจากเรายึดได้สำเร็จS=Sc0∈M0
IH:สมมติว่ามีประโยคบางชุดที่เรารู้จักด้วยX ⊆ MX⊆ϑ(G)X⊆M
IS:ให้โดยพลการ เราต้องแสดงให้เห็นว่ารูปแบบใดก็ตามมีและสิ่งที่ถูกนำไปใช้กฎต่อไปเราจะไม่ปล่อยให้Mเราทำสิ่งนี้โดยแยกความแตกต่างของกรณีอย่างสมบูรณ์ จากสมมติฐานการเข้าเป็นสมาชิกเรารู้ว่ากรณีใดกรณีหนึ่งต่อไปนี้มีผล:α Mα∈X⊆ϑ(G)∩MαM
- w = S c m m ∈ N Mw∈M0นั่นคือสำหรับบาง\
สามารถนำกฎสองข้อมาใช้ซึ่งทั้งคู่ได้รับประโยคใน :
w=Scmm∈N
M
- Scm⇒Scm+1∈M0และ
- Scm⇒Acm=a0Ab0cm∈M1M_1
- w = a n A b n c m m , n ∈ Nw∈M1 , คือสำหรับบาง :
w=anAbncmm,n∈N
- w⇒an+1Abn+1cm∈M1และ
- w⇒anbncm∈M2M_2
- w∈M3 : เนื่องจาก , ไม่สามารถหาอนุพันธ์ได้อีกw∈T∗
เนื่องจากเราครอบคลุมทุกกรณีเรียบร้อยแล้วการเหนี่ยวนำจึงเสร็จสมบูรณ์
ϑ(G)⊇M
เราดำเนินการอย่างใดอย่างหนึ่ง (แบบง่าย) หลักฐานต่อM_iหมายเหตุวิธีการที่เราห่วงโซ่การพิสูจน์ว่า "ภายหลัง"สามารถยึดโดยใช้ "ก่อนหน้านี้" M_iMiMiMi
- M1 : เราทำการเหนี่ยวนำมากกว่ายึดในและใช้ในขั้นตอนmSc0=SS→Sc
- M2 : เราแก้ไขเป็นค่าโดยพลการและเหนี่ยวนำให้เกิดมากกว่าnเรายึดเหนี่ยวในโดยใช้โดยหลักฐานก่อนหน้านี้ ดำเนินขั้นตอนผ่านAABmnAcmS⇒∗Scm⇒AcmA→aAb
- M3 : สำหรับพลเราใช้หลักฐานอดีตเมตรm,n∈NS⇒∗anAbncm⇒anbncm
นี่เป็นการสรุปทิศทางที่สองของการพิสูจน์ข้อ 1 แล้วเราก็ทำเสร็จแล้ว
เราจะเห็นว่าเราใช้ประโยชน์อย่างหนักว่าไวยากรณ์เป็นเชิงเส้น สำหรับไวยากรณ์ที่ไม่เป็นเชิงเส้นเราต้องการมีพารามิเตอร์ตัวแปรมากกว่าหนึ่งตัว (ในการพิสูจน์) ซึ่งสามารถกลายเป็นสิ่งที่น่าเกลียด หากเราสามารถควบคุมไวยากรณ์สิ่งนี้สอนให้เราเรียบง่าย ถือว่าเป็นตัวอย่างของไวยากรณ์นี้ที่เทียบเท่ากับ :MiG
SAC→aAbC∣ε→aAb∣ε→cC∣ε
การออกกำลังกาย
ให้ไวยากรณ์สำหรับ
L={bkal(bc)manbo∣k,l,m,n,o∈N,k≠o,2l=n,m≥2}
และพิสูจน์ความถูกต้องของมัน
หากคุณมีปัญหาไวยากรณ์:
พิจารณาด้วยโปรดักชั่นG=({S,Br,Bl,A,C},{a,b,c},δ,S)
SBlBrAC→bSb∣Bl∣Br→bBl∣bA→Brb∣Ab→aAaa∣C→bcC∣bcbc
และ :Mi
M0M1M2M3M4M5={biSbi∣i∈N}={biBlbo∣o∈N,i≥o}={bkBrbi∣k∈N,i≥k}={bkaiAa2ibo∣k,o,i∈N,k≠o}={bkal(bc)iCa2lbo∣k,o,l,i∈N,k≠o}=L
สิ่งที่เกี่ยวกับไวยากรณ์ที่ไม่ใช่เชิงเส้น?
คุณลักษณะการกำหนดลักษณะของคลาสของภาษาที่ไม่มีบริบทคือภาษาDyck : โดยพื้นฐานแล้วภาษาที่ปราศจากบริบททั้งหมดสามารถแสดงเป็นจุดตัดของภาษา Dyck และภาษาปกติ น่าเสียดายที่ภาษา Dyck ไม่เชิงเส้นนั่นคือเราไม่สามารถให้ไวยากรณ์ที่เหมาะกับวิธีนี้โดยเนื้อแท้
แน่นอนว่าเรายังคงสามารถกำหนดและทำการพิสูจน์ได้ แต่มันก็ยากที่จะเหนี่ยวนำซ้อนกันมากขึ้น มีวิธีทั่วไปหนึ่งอย่างที่ฉันรู้ว่าสามารถช่วยได้บ้าง เราเปลี่ยน ansatz เพื่อแสดงว่าเราสร้างคำที่ต้องการอย่างน้อยที่สุดและสร้างจำนวนคำที่เหมาะสม (ต่อความยาว) อย่างเป็นทางการเราแสดงให้เห็นว่าMi
- ϑ(G)⊇Lและ
- |L(G)∩Tn|=|L∩Tn|สำหรับทั้งหมดn∈N
ด้วยวิธีนี้เราสามารถ จำกัด ตัวเองให้อยู่ในทิศทาง "ง่าย" จาก ansatz ดั้งเดิมและใช้ประโยชน์จากโครงสร้างในภาษาโดยไม่สนใจคุณสมบัติที่ซับซ้อนที่ไวยากรณ์อาจมี แน่นอนไม่มีอาหารกลางวันฟรี: เราได้รับงานใหม่ทั้งหมดของการนับคำสร้างสำหรับแต่ละ\ โชคดีสำหรับเรานี่เป็นคำหยั่งรู้ได้ ดูรายละเอียดที่นี่และที่นี่ ¹ คุณสามารถค้นหาตัวอย่างบางส่วนในวิทยานิพนธ์ปริญญาตรีของฉันG n∈N
สำหรับแกรมม่าที่คลุมเครือและไม่ใช้บริบทฉันกลัวว่าเราจะกลับมาอีกครั้งหนึ่งและคิดแคป
- เมื่อใช้วิธีการเฉพาะนั้นในการนับเราจะได้รับโบนัสว่าไวยากรณ์นั้นไม่คลุมเครือ ในทางกลับกันนี่ก็หมายความว่าเทคนิคจะต้องล้มเหลวสำหรับไวยากรณ์ที่กำกวมเนื่องจากเราไม่สามารถพิสูจน์ได้ 2