วิธีที่จะรู้สึกอย่างสังหรณ์ใจว่าภาษาเป็นปกติ


9

ให้ภาษาฉันจะพูดโดยตรงอย่างไรโดยไม่ดูกฎการผลิตภาษานี้ไม่ปกติL={anbncn}

ฉันสามารถใช้เลมม่าสูบน้ำ แต่ผู้ชายบางคนบอกว่าแค่ดูไวยากรณ์ว่านี่ไม่ใช่เรื่องปกติ มันเป็นไปได้ยังไงกัน?


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

ใช่ แต่บางครั้งในการบรรยายพวกเขาเพียงทำตามข้อพิสูจน์ทางคณิตศาสตร์แบบแห้ง ๆ แต่พวกเขาไม่มีคำอธิบายแบบง่าย ๆ พร้อมตัวอย่างง่ายๆจริง ๆ
doniyor

ลืม n คุณเคยรู้สึกบ้างไหมว่าไม่ปกติ? annnann
Uday Reddy

2
การดูไวยากรณ์และการประกาศเนื่องจากไวยากรณ์ไม่ปกติภาษาที่ไม่ปกติคือความเข้าใจผิด มีไวยากรณ์ไม่ธรรมดามากมายสำหรับภาษาปกติ ระวัง! ที่กล่าวว่าการตัดสินใจว่าไวยากรณ์เป็นเรื่องปกตินั้นง่ายหรือไม่ เพียงตรวจสอบโปรดักชั่น
Raphael

คำตอบ:


11

คุณสมบัติหลักของ DFA's / NFA คือการขาดหน่วยความจำที่ไม่มีขอบเขต ถ้าคุณดูภาษาและอัลกอริธึมเท่านั้น (ซึ่งควรจะถูกแปลเป็น Finite Automaton ในภายหลัง) คุณสามารถคิดได้ว่าต้องใช้คุณสมบัตินี้นั่นคือคุณรู้สึกว่าอัลกอริทึมใด ๆ ที่รู้จักมันจะต้องจำสิ่งต่าง ๆ มากมาย (เช่นในตัวอย่างของคุณ) แล้วภาษาที่ไม่น่าจะปกติn

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

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

พวกคุณกำลังพูดถึงหน่วยความจำที่ไม่ได้ จำกัด ซึ่งคุณหมายถึงคือสาเหตุที่มันไม่ปกติ แต่ ^ nb ^ m ยังสามารถมีหน่วยความจำไม่ จำกัด หากฉันต้องการมันไม่ได้หรือไม่ สิ่งนี้ยังทำให้ฉันไม่สงบ

ปัญหาไม่ได้อยู่ที่ว่าคำจะใหญ่ขนาดไหน (โดยปกติคุณจะพบกับภาษาปกติที่ไม่มีที่สิ้นสุดเนื่องจากภาษาที่ จำกัด ทุกภาษาเป็นปกติและค่อนข้างน่าเบื่อ) แต่ DFA จำเป็นต้องจำเท่าไร
ในตัวอย่างเช่นมีไม่จำเป็นต้องจำ n algorihm เพียงต้องการให้แน่ใจว่าพวกเขาเป็นบวกและคำว่าถูกสั่งอย่างถูกต้อง นี่คือรายการที่ จำกัด และแต่ละรายการในรายการต้องการหน่วยความจำจำนวนคงที่ เปรียบเทียบสิ่งนี้กับซึ่งต้องใช้ alogrithm อย่างง่ายเพื่อจำว่าจำนวนของเท่ากับจำนวนambnm,n
anbna's นี้จะต้องมีหน่วยความจำมากมาย เมื่อฉันดูภาษาและเห็นว่าอัลกอริทึมใด ๆ ที่ฉันสามารถนึกได้ว่าต้องการความทรงจำที่ไม่ จำกัด สัญชาตญาณของฉันที่ภาษาไม่ได้เติบโตขึ้นอย่างสม่ำเสมอ หากฉันไม่สามารถหาอัลกอริทึม "อัจฉริยะ" (ที่ต้องใช้หน่วยความจำจำนวนคงที่) ในระยะเวลาที่เหมาะสม (ขึ้นอยู่กับคุณว่าเวลาเท่าไรสมเหตุสมผล) ฉันจะลองพิสูจน์ว่าภาษาไม่ปกติ
หวังว่านี่จะทำให้ชัดเจนขึ้น


ขอบคุณพิสูจน์ทางคณิตศาสตร์นำปรีชา แต่ดูที่กฎการผลิตนี้: S -> ab | เอเอสบี นี่เป็น ^ nb ^ n ที่บอกว่าไม่เหมือนกัน แต่ a ^ mb ^ n เป็นค่าปกติด้วย m, n> = 1 ทำไมนี้ อันนี้เป็นรูปแบบเดียวกันจริงไหม ฉันไม่เข้าใจความแตกต่างระหว่างสองภาษานี้
doniyor

1
สำหรับ ^ nb ^ n คุณต้องติดตาม 2 สิ่ง: อันดับแรกจำนวนของ a เท่ากับจำนวนของ b (นี่คือส่วนที่เป็นไปไม่ได้สำหรับ DFA) และอันดับที่สองคือ 'a' ' สำหรับ ^ mb ^ n คุณไม่สนใจค่าของ m, n คุณสนใจว่ามีอย่างน้อยหนึ่ง 'a' และอย่างน้อยหนึ่ง 'b' และไม่มี 'b' ตามมาด้วย 'a' คุณต้องจำเพียง 3 อย่างเท่านั้น
Boris Trayvas

โอเคตอนนี้ฉันเข้าใจแล้ว
doniyor

ดังนั้นลำดับก็เป็นสิ่งสำคัญเช่นกันใช่ไหม เช่น aabbcc ยอมรับ แต่ไม่ใช่ aabcbc เพียงเพราะคำสั่งไม่เป็นไร ขวา?
doniyor

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

5

ฉันสามารถใช้บทแทรก

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

วิธีที่ดีในการทดสอบสัญชาตญาณของคุณคือการดูภาษาเหล่านี้:

  1. {xyyzx,y,z{a,b}+}
  2. {xyyzx,y,z{a,b}}
  3. {xyyzx,y,z{a,b,c}+}
  4. {xyyzx,y,z{a,b,c}}

ข้อไหนไม่มีบริบท


1
หากใครบางคนรู้ตัวอย่างที่ดีในทำนองเดียวกันสำหรับภาษาปกติโปรดพูดเช่นนั้น กรุณาอย่าทำให้เสียคำตอบในความคิดเห็น
ราฟาเอล

Raphael - เยี่ยมมาก! ขอบคุณสำหรับการให้ตัวอย่างและการทดสอบฉันอย่างชัดเจน
doniyor


4

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

ความฉลาดทางคือสิ่งที่คุณต้องเติมให้สมบูรณ์หลังจากอ่านไปแล้วในส่วนของอินพุต อย่างเป็นทางการยิ่งขึ้นความฉลาดทางซ้ายของภาษาL โดยสตริง xเขียน xL คือชุดของสตริง W ดังนั้น xWL. ตัวอย่างเช่นถ้าL={ann}จากนั้น aL={an-1n|n1}ในขณะที่ L=. เราสามารถเห็นได้อย่างง่ายดายว่าakL={an-kn|nk}. มีการหารจำนวนแบบฟอร์มที่ไม่ จำกัด จำนวนดังนั้นจึงตามมาทันทีL ไม่ปกติ

ถ้าเราสร้าง DFA D เพื่อตัดสินใจ L และ D จะอยู่ในสถานะ S หลังจากอ่านแล้ว aจากนั้น aL เป็นภาษาที่ตัดสินใจโดย D แก้ไขให้มีสถานะเริ่มต้น S. แนวคิดเดียวกันนี้สามารถใช้เพื่อสร้าง DFA ขั้นต่ำที่ตัดสินใจภาษาปกติจากคำจำกัดความโดยตรง


b \ L หมายถึง: ถ้าฉันแบ่ง L ด้วย b แล้วฉันจะได้เซตว่างเปล่า? เป็นเพราะฉันต้องเริ่มอ่านคำว่าเริ่มต้นจริงหรือไม่ และไม่ใช่จากด้านหลัง?
doniyor

1
L= เนื่องจากไม่มีสตริงใน L ที่ขึ้นต้นด้วย B คุณสามารถกำหนดความฉลาดทางขวา L/ในทำนองเดียวกันซึ่งสอดคล้องกับ "การอ่านจากด้านหลัง" ภาษาก็เป็นเรื่องปกติถ้ามันมีผลคูณที่ถูกต้องอันเนื่องมาจากการกลับตัวของภาษาปกติเป็นเรื่องปกติ (นี่เป็นเรื่องง่ายที่จะแสดงโดยใช้ NFAs)
James Koppel

1
นี่เป็นสไลด์ที่ดีซึ่งจะอธิบายบวกลบคูณหารและวิธีการสร้าง DFAs จากพวกเขา: cs.cmu.edu/~cdm/pdf/Minimization.pdf
เจมส์อปเพล

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