จะพิสูจน์ภาษาได้อย่างไร?


48

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

ตัวอย่างเช่นหากฉันได้รับเป็นปกติฉันจะพิสูจน์ได้อย่างไรว่าต่อไปนี้เป็นปกติเช่นกันL ′LL′

L′:={w∈L:uv=w for u∈Σ∗∖L and v∈Σ+}

ฉันสามารถวาดออโตเมติก จำกัด แบบไม่มีการกำหนดเพื่อพิสูจน์สิ่งนี้ได้หรือไม่?


1
มีการพิมพ์ผิดในคำจำกัดความของคุณโปรดแก้ไขเพื่อแก้ไข L′
— Ran G.

2
"การวาด" นั้นไม่มีข้อพิสูจน์ คุณต้องให้ NFA และพิสูจน์ว่ายอมรับภาษา
— Raphael

ผมคิดว่าคำนิยามภาษาที่ยังไม่ได้ทำให้ความรู้สึก ...
— hugomg

2
อย่างไรก็ตามภาษาเฉพาะนั้นไม่เกี่ยวข้องหากคำถามคือ "ฉันสามารถวาด NFA เพื่อพิสูจน์ว่าเป็นเรื่องปกติ" @Corium เราสามารถแก้ไขคำถามเพื่อสะท้อนคำถามทั่วไปได้มากขึ้น: "วิธีการพิสูจน์ว่าเฉพาะนั้นปกติหรือไม่" L
— Ran G.

คำตอบ:


48

ใช่หากคุณสามารถทำสิ่งใดสิ่งหนึ่งต่อไปนี้:

สำหรับภาษาแล้วเป็นปกติ มีโมเดลที่เทียบเท่ากันมากกว่าแต่มีรูปแบบทั่วไปลLL

นอกจากนี้ยังมีคุณสมบัติที่มีประโยชน์นอกโลก "การคำนวณ" ก็ปกติเช่นกันL

  • มัน จำกัด
  • คุณสามารถสร้างได้โดยการดำเนินการบางอย่างในภาษาปกติและการดำเนินการเหล่านั้นจะปิดสำหรับภาษาปกติเช่น

    • สี่แยก
    • เสริม
    • homomorphism,
    • กลับรายการ
    • ซ้ายหรือขวาฉลาด
    • การถ่ายทอดปกติ

    และอีกมากมายหรือ

  • ใช้ทฤษฎีบท Myhill – Nerodeถ้าจำนวนคลาสที่เทียบเท่าสำหรับมี จำกัดL

ในตัวอย่างที่ให้มาเรามีค่า (ค่าปกติ) บางค่าเป็นพื้นฐานและต้องการพูดบางอย่างเกี่ยวกับภาษาได้มาจากภาษานั้น ทำตามแนวทางแรก - สร้างแบบจำลองที่เหมาะสมสำหรับ - เราสามารถสรุปได้ว่าแบบใดที่เทียบเท่ากับเราต้องการ มันจะยังคงเป็นนามธรรมแน่นอนเนื่องจากไม่เป็นที่รู้จัก ในแนวทางที่สองเราสามารถใช้โดยตรงและใช้คุณสมบัติปิดไปในการสั่งซื้อที่จะมาถึงคำอธิบายสำหรับL'L ′ L ′ L L L L ′LL′L′LLLL′


4
มันก็อาจจะคุ้มค่าที่จะพิสูจน์ว่าการพิสูจน์ภาษามี จำกัด ก็เพียงพอที่จะแสดงให้เห็นว่ามันเป็นเรื่องปกติ ที่สามารถเป็นประโยชน์โดยเฉพาะอย่างยิ่งในการพิสูจน์ที่ไม่ใช่เชิงสร้างสรรค์โดยกรณี
— Patrick87

2
regexp ของที่พบในภาษาการเขียนโปรแกรมสามารถทำได้มากกว่าภาษาปกติ คุณต้อง จำกัด โครงสร้าง "แบบคลาสสิก"
— David Lewis

4
@DavidLewis: ในเว็บไซต์นี้คุณอาจสันนิษฐานได้ว่าโดย "การแสดงออกปกติ" ความคิดดั้งเดิมมีความหมาย
— Raphael

@ DavidLew ฉันเห็นด้วยเราควรหลีกเลี่ยง "regexp" ในบริบทของทฤษฎีเพื่อหลีกเลี่ยงความสับสน
— Raphael

โปรดทราบว่าสำหรับหนึ่งในสี่กระสุนแรกคุณจะต้องมีหลักฐานแสดงว่าการเป็นตัวแทนของคุณถูกต้องแน่นอน
— Raphael

10

วิธีการเบื้องต้น

  1. ออโต จำกัด (อาจเป็น nondeterministic โดยมีการเปลี่ยนว่าง)
  2. นิพจน์ทั่วไป
  3. สมการเชิงเส้นขวา (หรือซ้าย แต่ไม่ใช่ทั้งคู่) เช่นโดยที่และเป็นปกติK LX=KX+LKL
  4. ไวยากรณ์ปกติ (ประเภท 3)
  5. การดำเนินการอนุรักษ์ภาษาปกติ (การใช้งานบูลีน, ผลิตภัณฑ์, ดาว, การสุ่ม, morphisms, ผกผันของ morphisms, การกลับรายการ ฯลฯ )
  6. ได้รับการยอมรับโดย monoid จำกัด

วิธีการทางตรรกะ (มักใช้ในการตรวจสอบอย่างเป็นทางการ)

  1. ตรรกะลำดับที่สองแบบ Monadic (ทฤษฎีบทของBüchi)
  2. ตรรกะเชิงเส้นตรง (ทฤษฎีบทของ Kamp)
  3. ทฤษฎีบทต้นไม้ของราบิน (Monadic ตรรกะลำดับที่สองกับผู้สืบทอดสองคน) ทรงพลังมาก.

วิธีการขั้นสูง

  1. บทแทรกที่ซับซ้อน ดูตัวอย่าง
    [1] J. Jaffe, บทแทรกที่จำเป็นและเพียงพอสำหรับภาษาปกติ, Sigact News - SIGACT 10 (1978) 48-49
    [2] A. Ehrenfeucht, R. Parikh, และ G. Rozenberg, บทแทรกสำหรับชุดปกติ, SIAM J. Comput 10 (1981), 536-541
    [3] S. Varricchio, สภาพปั๊มสำหรับชุดปกติ, SIAM J. Comput 26 (1997) 764-771

  2. คำสั่งซื้อเสมือน ดู
    [4] W. Bucher, A. Ehrenfeucht, D. Haussler, ตามข้อบังคับทั้งหมดที่เกิดจากความสัมพันธ์ที่ได้รับมาTheor คอมพิวเต วิทย์ 40 (1985) 131–148
    [5] M. Kunz, คำตอบปกติของความไม่เท่าเทียมกันทางภาษาและคำสั่งเสมือนจริง

  3. การสนับสนุน -rational seriesN

  4. วิธีการทางพีชคณิตตามTransductions (ดูปฏิบัติการการรักษาภาษาปกติ )


4

คำตอบของ Ran G. ให้รายการแบบจำลองที่เทียบเท่าอย่างกว้างขวางซึ่งสามารถใช้เพื่อระบุภาษาปกติ (และรายการจะดำเนินต่อไป, ออโตมาตาสองทาง, ตรรกะ MSO แต่ครอบคลุมโดยลิงก์ภายใต้ 'โมเดลที่เทียบเท่ากันมากขึ้น) ') และเมื่อราฟาเอลเน้นเราจำเป็นต้องมีข้อโต้แย้งเพื่อโน้มน้าวให้ผู้ชมเห็นว่าการเป็นตัวแทนที่เลือกนั้นถูกต้องแน่นอน

พิจารณาคำถามอีกครั้งโดยเพิ่ม "ตัวอย่างเช่น " นั่นหมายความว่าเราจะต้องให้ถูกต้องก่อสร้างที่ได้รับการใด ๆ ของรุ่นดังกล่าวข้างต้นเราสมมติระบุภาษา , ผลัดกันว่ารูปแบบเป็นหนึ่งสำหรับL'ซึ่งมักจะเป็นชนิดเดียวกันของรูปแบบ แต่ไม่จำเป็นต้องเป็น: เราสามารถเช่นเริ่มต้นด้วย FSA กำหนดสำหรับและจบลงด้วยการเป็นหนึ่งที่ nondeterminitic สำหรับL'L L ′ L L ′…LL′LL′

ซึ่งรวมถึงความเป็นไปได้ที่จะใช้การดำเนินการปิด: ในการดำเนินงานให้ชัดเจนในตัวอย่างที่เรามี *L′=(Σ∗∖L)⋅Σ∗

ดังนั้นประเด็นของฉันคือคำตอบนั้นยอดเยี่ยม แต่เราควรเพิ่ม "จากเป็นก่อสร้างเมื่อไม่สร้างภาษาเฉพาะตั้งแต่เริ่มต้นL ′LL′


1
ฉันไม่แน่ใจว่าสิ่งที่คุณได้รับ หากฉันมีโมเดลสำหรับฉันสามารถแปลงเป็นโมเดลอื่นที่เทียบเท่าได้ L′
— กราฟิลส์

@ ราฟาเอลขออภัยฉันทำจุดของฉัน คำตอบก่อนหน้านี้ดูเหมือนจะอธิบายว่าเราสามารถสร้างคำอธิบายของภาษา (เช่นหุ่นยนต์การดำเนินงาน ฯลฯ ) ฉันเห็นด้วย. อย่างไรก็ตามคำถามดูเหมือนจะเกี่ยวกับคุณสมบัติการปิดดูตัวอย่างที่กำหนด จุดนั้นฉันหายไปในคำตอบอื่น ๆ : เพื่อพิสูจน์คุณสมบัติการปิดคุณถือว่าคุณมีคำอธิบายและสร้างใหม่
— Hendrik Jan

1
โอ้นี่ ! ตอนนี้ฉันเข้าใจแล้วไม่ดี ฉันเห็นด้วยด้านนี้หายไปจากคำตอบของ Ran L′
— Raphael

1
ฉันไม่แน่ใจว่าทำไมมันหายไป (หรือสิ่งที่ขาดหายไป) สมมติว่าคุณมีปกติและคุณต้องการที่จะพิสูจน์เป็นปกติเช่นเดียวคุณสามารถเริ่มต้นด้วย 's DFA และใช้มันเพื่อสร้าง DFA สำหรับLแต่สิ่งนี้ถูกปกคลุมด้วย "สร้าง DFA สำหรับ " .. ไม่มีข้อ จำกัด ในการใช้ออโตเมติกสำหรับงานนั้น (และโดยธรรมชาติถ้าถูกกำหนดผ่านคุณจะถูกบังคับให้ใช้ออโตเมติก .. ) . เช่นเดียวกันกับ regexp การปิดไวยากรณ์ ฯลฯ L L ' L L L ' L L ' L 'L′LL′LLL′LL′L′
— Ran G.

1
โอวตกลง. ที่จริงแล้วฉันอยากจะแก้ไขคำถามและลบส่วน "ตัวอย่าง" เพื่อทำให้คำถามทั่วไปและอ้างอิงสำหรับคำถามที่คล้ายกันในอนาคต .. (:
— Ran G.

4

ในบางครั้งคุณจะพบภาษาที่ระบุว่า "สตริงทั้งหมดที่สตริงย่อย -element ทั้งหมดของตาม" โดยที่คือค่าคงที่คงที่ ในกรณีนั้นภาษาจะเป็นปกติ แนวคิดในที่นี้คือการกำหนดออโตเมติกอัน จำกัด บางแห่งซึ่งรัฐ "จดจำ" สัญลักษณ์อินพุตเพิ่งเห็นล่าสุดเช่นเดียวกับคำตอบของคำถามนี้k s k ksks<some property>kk


4

อีกวิธีหนึ่งที่ไม่ได้รับการคุ้มครองโดยคำตอบข้างต้นคือการเปลี่ยนแปลงแน่นอนหุ่นยนต์ ตัวอย่างง่ายๆให้เราแสดงว่าภาษาปกติปิดภายใต้การดำเนินการสลับแบบกำหนดไว้ดังนี้: คุณสามารถแสดงการปิดภายใต้การสับเปลี่ยนโดยใช้คุณสมบัติการปิด แต่คุณยังสามารถแสดงมันได้โดยตรงโดยใช้ DFAs สมมติว่าเป็น DFA ที่ยอมรับ (สำหรับ ) เราสร้าง DFAดังนี้:

L1S⁡L2={x1y1…xnyn∈Σ∗:x1…xn∈L1,y1…yn∈L2}
Ai=⟨Σ,Qi,Fi,δi,q0i⟩Lii=1,2⟨Σ,Q,F,δ,q0⟩
  • ชุดสถานะคือซึ่งองค์ประกอบที่สามจำได้ว่าสัญลักษณ์ต่อไปคือ (เมื่อ 1) หรือ (เมื่อ 2)Q1×Q2×{1,2}xiyi
  • สถานะเริ่มต้นคือ\q0=⟨q01,q02,1⟩
  • รัฐยอมรับเป็น\}F=F1×F2×{1}
  • ฟังก์ชันการเปลี่ยนแปลงถูกกำหนดโดยและ\δ(⟨q1,q2,1⟩,σ)=⟨δ1(q1,σ),q2,2⟩δ(⟨q1,q2,2⟩,σ)=⟨q1,δ2(q2,σ),1⟩

รุ่นที่มีความซับซ้อนมากขึ้นของวิธีการนี้เกี่ยวข้องกับการคาดเดา ตัวอย่างเช่นให้เราแสดงว่าภาษาปกติปิดใต้การกลับรายการนั่นคือ (ที่นี่ .) นี่เป็นหนึ่งในการดำเนินการปิดมาตรฐานและการปิดภายใต้การพลิกกลับอย่างง่ายดายดังต่อไปนี้จากการควบคุมการแสดงออกปกติ (ซึ่งอาจถือได้ว่าเป็นคู่ของการเปลี่ยนแปลงหุ่นยนต์ จำกัด นิพจน์ทั่วไป) - เพียงแค่ย้อนกลับนิพจน์ปกติ แต่คุณสามารถพิสูจน์ได้ว่าการปิดบัญชีโดยใช้ NFA สมมติว่าเป็นที่ยอมรับโดย DFA\ เราสร้าง NFA

LR={wR:w∈Σ∗}.
(w1…wn)R=wn…w1L⟨Σ,Q,F,δ,q0⟩⟨Σ,Q′,F′,δ′,q0′⟩ , ที่ไหน
  • ชุดของรัฐเป็น\}Q′=Q∪{q0′}
  • สถานะเริ่มต้นคือq'_0q0′
  • รัฐยอมรับไม่ซ้ำกันคือq_0q0
  • ฟังก์ชันการเปลี่ยนแปลงถูกกำหนดไว้ดังนี้:และสำหรับสถานะใด ๆและ ,\}δ′(q0′,ϵ)=Fq∈Qσ∈Σδ(q′,σ)={q:δ(q,σ)=q′}

(เราสามารถกำจัดหากเราอนุญาตให้เริ่มต้นหลายสถานะ) องค์ประกอบการเดาที่นี่คือสถานะสุดท้ายของคำหลังจากกลับรายการq0′


การคาดเดามักเกี่ยวข้องกับการยืนยันเช่นกัน ตัวอย่างง่ายๆอย่างหนึ่งคือการปิดภายใต้การหมุน : สมมติว่าเป็นที่ยอมรับโดย DFA\ เราสร้าง NFAซึ่งทำงานดังนี้ NFA คาดเดาแรกx) จากนั้นตรวจสอบว่าและ , ย้ายจากไปยังไม่ใช่ non-deterministically นี่สามารถทำเป็นกรงเล็บดังนี้:

R(L)={yx∈Σ∗:xy∈L}.
L⟨Σ,Q,F,δ,q0⟩⟨Σ,Q′,F′,δ′,q0′⟩q=δ(q0,x)δ(q,y)∈Fδ(q0,x)=qyx
  • รัฐมี\} นอกเหนือจากสถานะเริ่มต้นรัฐที่มีที่เป็นรัฐที่เราเดาเป็นรัฐในปัจจุบันและระบุว่าเราอยู่ที่ส่วนหนึ่งของการป้อนข้อมูล (เมื่อ 1) หรือที่เป็นส่วนหนึ่งของการป้อนข้อมูล (เมื่อ 2)Q′={q0′}∪Q×Q×{1,2}q0′⟨q,qcurr,s⟩qqcurrsyx
  • สุดท้ายรัฐเป็น : เรายอมรับเมื่อ QF′={⟨q,q,2⟩:q∈Q}δ(q0,x)=q
  • การเปลี่ยนดำเนินการคาดเดาQδ′(q0′,ϵ)={⟨q,q,1⟩:q∈Q}q
  • การเปลี่ยน (สำหรับทุกและ ) จำลอง DFA ดั้งเดิมδ′(⟨q,qcurr,s⟩,σ)=⟨q,δ(qcurr,σ),s⟩q,qcurr∈Qs∈{1,2}
  • การเปลี่ยน , สำหรับทุกและ , ทำการย้ายจากส่วนไปยังส่วนที่สิ่งนี้จะได้รับอนุญาตเฉพาะเมื่อเราถึงสถานะสุดท้ายในส่วนδ′(⟨q,qf,1⟩,ϵ)=⟨q,q0,2⟩q∈Qqf∈Fyxy

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

Ek(L)={x∈Σ∗: there exists y∈L whose edit distance from x is at most k}.
⟨Σ,Q,F,δ,q0⟩L⟨Σ,Q′,F′,δ′,q0′⟩Ek(L)
  • ชุดสถานะคือซึ่งรายการที่สองนับจำนวนการเปลี่ยนแปลงที่ทำได้Q′=Q×{0,…,k}
  • สถานะเริ่มต้นคือ\q0′=⟨q0,0⟩
  • รัฐยอมรับเป็น\}F′=F×{0,…,k}
  • ทุกเรามีการเปลี่ยนซิก)q,σ,i⟨δ(q,σ),i⟩∈δ′(⟨q,i⟩,σ)
  • แทรกจะถูกจัดการโดยการเปลี่ยนสำหรับทุกเช่นที่<k⟨q,i+1⟩∈δ′(⟨q,i⟩,σ)q,σ,ii<k
  • การลบถูกจัดการโดยการเปลี่ยนสำหรับทั้งหมดอย่างที่ .⟨δ(q,σ),i+1⟩∈δ′(⟨q,i⟩,ϵ)q,σ,ii<k
  • การทดแทนคือการจับโดยการเปลี่ยนสำหรับเช่นที่<k⟨δ(q,σ),i+1⟩∈δ′(⟨q,i⟩,τ)q,σ,τ,ii<k

3

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


O (1) space คุณหมายถึงอะไร ไม่ว่าในกรณีใดก็ตามสิ่งนี้ถูกปกคลุมด้วยข้อเท็จจริงที่ว่า DFA นั้นพอเพียง มันอาจจะคุ้มค่าที่จะบันทึกความเท่าเทียมนี้อย่างชัดเจนในแง่ของการเขียนโปรแกรม
— กราฟิลส์

ใช่มันเป็นเพียงมุมมองที่แตกต่าง
— reinierpost

3

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

ด้วยนิพจน์ทั่วไปเป็นตัวแทนของภาษาเราสามารถสร้างนิพจน์ทั่วไปสำหรับซึ่งเป็นภาษาที่ตรงกันข้ามของคำทั้งหมดในซึ่งเรียกซ้ำ:rLLRL

  • ϵR=ϵ , ,\σR=σ∅R=∅
  • (r1+r2)R=(r1R+r2R) , , R(r∗)R=(rR)∗(r1r2)R=r2Rr1R

ทุกการกระทำที่เกิดขึ้นในกฎสุดท้าย R ตัวอย่างเช่นคุณสามารถตรวจสอบว่า *โครงสร้างอุปนัยกำหนดว่าภาษาของเป็นแน่นอน ( 0 ∗ 1 ∗ ) R = 1 ∗ 0 ∗ r R L R(r1r2)R=r2Rr1R(0∗1∗)R=1∗0∗rRLR

อีกตัวอย่างง่ายๆคือการปิดภายใต้โฮโมมอร์ฟิซึม ให้โฮโมมอร์ฟิซึมและนิพจน์ทั่วไปสำหรับภาษาเราสามารถรับนิพจน์ปกติสำหรับโดยแทนที่ทุกตัวอย่างของในโดย . r L h ( L ) σ r h ( σ )h:Σ→Δ∗rLh(L)σrh(σ)


0

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


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