ภาควิชาวิศวกรรมคอมพิวเตอร์ มิถุนายน ๒๕๕๒ ทฤษฎีคณนา Theory of Computation ภาควิชาวิศวกรรมคอมพิวเตอร์ มิถุนายน ๒๕๕๒ Athasit Surarerks
ภาษา หน่วยของภาษา หน่วยของภาษาคอมพิวเตอร์ อักขระ letters / คำ words / ประโยค sentences / ย่อหน้า paragraphs / เรื่องราว coherent stories หน่วยของภาษาคอมพิวเตอร์ อักขระ letters / คำสำคัญ keywords / คำสั่ง commands / โปรแกรม programs / ระบบ systems
ภาษารูปนัย (Formal language) คุณสมบัติของภาษา มี กฎ กติกา ที่ชัดเจน ในการกำหนดลำดับของสัญลักษณ์ เพื่อสร้างสมาชิกในภาษา ตีความตามรูปแบบโดยไม่ต้องใช้ ความรู้อื่น ๆ ในการตีความหมาย
ภาษารูปนัย (Formal language) นิยามเบื้องต้น เซตจำกัดของอักขระ (character) เรียกว่า เซตของอักขระ (alphabet) ใช้สัญลักษณ์ ภาษา (language) หมายถึง เซตของสายอักขระ (string) ที่มีการกำหนดคุณสมบัติของ การเป็นสมาชิกที่ชัดแจ้ง สมาชิกในภาษา เรียกว่า คำ (word) สายอักขระที่ไม่มีอักขระใด ๆ เรียกว่า สายอักขระว่าง (empty string) ใช้สัญลักษณ์ ภาษาที่ไม่มีคำใด ๆ เลย เรียกว่า เซตว่าง (empty set) ใช้สัญลักษณ์
สัญลักษณ์ที่นิยม Union operation + Different operation Alphabet Empty string , Language L, Empty language
การกำหนดภาษา ตัวอย่าง บรรยายแบบแจกแจงสมาชิก { 0, 00, 000, 0000, … } บรรยายด้วยรูปแบบทั่วไป { 0n | n = 0, 1, 2, … } หมายเหตุ ยกกำลังนิยม n ใช้ในกรณี การเขียนซ้ำ n ครั้ง
การกำหนดภาษา ตัวอย่าง บังคับการเดิน ของหุ่นยนต์ 0 : ขวา 1 : ซ้าย สอบผ่าน สอบตก เข้า { 1, 010, 01110, 0111110, … } { 1 } { 01m0 | m = odd integer}
การกำหนดภาษา ตัวอย่าง หมายเหตุ ภาษานี้เรียกว่า Palindrome over กำหนดให้ = { 0, 1 } จงบรรยายภาษาของสายอักขระที่เมื่อเรียนย้อนกลับ (reverse) จะได้ผลลัพธ์ เหมือนกับสายอักขระเดิม { , 0, 1, 00, 11, 000, 010, 101, 111, … } บรรยายด้วยรูปแบบทั่วไป { x bit string | rev(x) = x } { x bit string | x-1 = x } หมายเหตุ ภาษานี้เรียกว่า Palindrome over
การกำหนดภาษา ตัวอย่าง กำหนดให้ = { 0, 1 } จงบรรยายภาษาของสายอักขระที่มีจำนวนของ 0 เท่ากับจำนวนของ 1 { , 01, 10, 0011, 0101, … } บรรยายด้วยรูปแบบทั่วไป { x bit string | n0(x) = n1(x) } หมายเหตุ นิยมใช้ ny(x) แทนฟังก์ชันการนับจำนวนของอักขระ y ในสายอักขระ x
Kleene closure นิยาม หมายเหตุ บางครั้งจะเรียกว่า Kleene star โดยใช้สัญลักษณ์เป็น *. หมายเหตุ บางครั้งจะเรียกว่า Kleene star วิธีการนี้เป็นการนำเสนอแนวทางในการบรรยายภาษาที่เป็น เซตอนันต์ ตัวอย่าง กำหนดให้ = { 0, 1 } จะได้ว่า * = { , 0, 1, 00, 01, 10, 11, 000, … } ในกรณีของ S* (เมื่อ S เป็นภาษา หรือ เซตของสายอักขระ) จะหมายถึง เซตของสายอักขระทุกรูปแบบที่เป็นไปได้จากการนำสมาชิกใน S มาเรียงต่อกันจำนวนเท่าใดก็ได้
Kleene closure ตัวอย่าง กำหนดให้ S = { 01, 10 } จงหา S* ? S* = { , 01, 10, 0101, 0110, 1001, 1010, … } หมายเหตุ การเรียงลำดับของสมาชิกเป็นแบบ lexicographic ordering
จงแสดงให้เห็นว่า ถ้า A B แล้ว A* B* เป็นความจริงหรือไม่ ? Kleene closure แบบฝึกหัด กำหนดให้ S = { 0, 1, 10 } T = { 0, 1, 01 ) U = { 0, 1 } จงแสดงให้เห็นความสัมพันธ์ของ S* T* และ U* ? จงแสดงให้เห็นว่า ถ้า A B แล้ว A* B* เป็นความจริงหรือไม่ ?
เราจะพิสูจน์ว่าเป็นความจริงได้อย่างไร Kleene closure แบบฝึกหัด กำหนดให้ S = { xx, xxxxx} จงแสดง S* ? S* = { , xx, xxxx, xxxxx, xxxxxx, xxxxxxx, … } S* = { , x2, x4, x5, x6, … } เราจะพิสูจน์ว่าเป็นความจริงได้อย่างไร
Kleene closure นิยาม S* = U Si Sn = SSn-1 เมื่อ n 1 S0 = {} หมายเหตุ Concatenation ของ AB หมายถึง { ab | aA และ bB } I Ii = 0
Kleene closure ทฤษฎีบท หมายเหตุ S** หมายถึง (S*)* กำหนดให้ S เป็นเซต จะได้ว่า S** = S* หมายเหตุ S** หมายถึง (S*)* Proof: Every words in S** is made up of factors from S*. Every words in S* is made up of factors from S. Therefore every words in S** is made up of factors from S. We can write this S** S*. In general, it is true that S S*. So S* S**. Then S*= S**.
Positive closure นิยาม S+ = U Si Sn = SSn-1 เมื่อ n 1 S0 = {} หมายเหตุ Concatenation ของ AB หมายถึง { ab | aA และ bB } I Ii = 1
? โจทย์น่าคิด แบบฝึกหัด ให้ L เป็นภาษาใด ๆ ที่นิยามบน = {0, 1} จงอธิบายความสัมพันธ์ของ L*+ และ L+*
การกำหนดภาษา ตัวอย่าง จงพิสูจน์ว่า 1000000 เป็นสมาชิกใน EVEN ด้วย การบรรยายโดยใช้ กฎการสร้าง (production rule) สามารถทำได้ดังนี้ 1. 2 เป็นสมาชิกใน EVEN 2. ถ้า x เป็นสมาชิกใน EVEN แล้ว x + 2 จะเป็นสมาชิกใน EVEN ด้วย 3. สมาชิกใน EVEN เกิดจาก ข้อ 1 และ ข้อ 2 เท่านั้น จงพิสูจน์ว่า 1000000 เป็นสมาชิกใน EVEN ด้วย
การกำหนดภาษา ตัวอย่าง จงพิสูจน์ว่า 1000000 เป็นสมาชิกใน EVEN ด้วย การบรรยายโดยใช้ กฎการสร้าง (production rule) สามารถทำได้ดังนี้ 1. 2 เป็นสมาชิกใน EVEN 2. ถ้า x และ y เป็นสมาชิกใน EVEN แล้ว x + y จะเป็นสมาชิกใน EVEN ด้วย 3. สมาชิกใน EVEN เกิดจาก ข้อ 1 และ ข้อ 2 เท่านั้น จงพิสูจน์ว่า 1000000 เป็นสมาชิกใน EVEN ด้วย
การกำหนดภาษา แบบฝึกหัด L1={ xn for n = 1, 2, 3, … } เป็นการบรรยายที่กำกวม และยากต่อการตรวจสอบความเป็นสมาชิก