ภาษาที่เป็นรูปแบบ (Formal Languages) บทที่ 6 ภาษาที่เป็นรูปแบบ (Formal Languages) 12/09/47 Formal Languages
Recursive Definition นิยาม Recursive ของเซ็ท X หมายถึงวิธีการสร้างอีลีเมนท์ของเซ็ท ด้วยการทวนซ้ำ แบ่งออกเป็นองค์ประกอบคือ 2 คือ ฐานเริ่มต้น (Basis) ประกอบด้วยอีลีเมนท์ของเซ็ท X เซ็ทก่อผล (Set of Operation) ใช้สำหรับสร้างอีลีเมนท์ตัวใหม่ จากอีลีเมนท์ หรือสมาชิกที่มีอยู่ก่อน 12/09/47 Formal Languages
นิยาม 1.5.1 นิยาม Recursive ของ N (เซ็ทของเลข 0,1,2,..) สร้างจากฟังค์ชั่นคืนค่าตำแหน่งหลังของมัน (Successor) ชื่อ S i) Basis: 0 N ii) Recursive step: ถ้า n N ดังนั้น s(n) N iii) Closure: n N มันประกอบด้วยค่าเริ่มต้น 0 และเพิ่มอีลีเมนท์ของมันด้วย ด้วยเซ็ทก่อผลในขั้นตอนที่ (ii) Closure เป็นการรับรองว่า เซ็ทที่เกิดใหม่ เกิดจากฐานเริ่มต้นใน (i) และเพิ่มอีลีเมนท์ของมันด้วยเซ็ทก่อผลในขั้นตอนที่ (ii) ปกติอาจจะไม่แสดง 12/09/47 Formal Languages
บวก ลบ คูณ หาร นิยาม 1.5.1 แสดงให้เห็นการสร้างตัวเลข 0,1,2,3,… โดยการสร้างจากการนิยามแบบ Recursive หัวข้อถัดไป เราจะแสดงให้เห็นว่า เราสามารถ บวก ลบ คูณ หาร ฯลฯ จากนิยามแบบ Recursive 12/09/47 Formal Languages
นิยาม 1.5.2 นิยาม Recursive ของผลบวก m และ n ต่อไปนี้ การ Recursive ของมันกระทำบน n ดังนั้นผลบวก (sum) ตัวถัดไปของมัน จะเป็นดังนี้ Basis: ถ้า n = 0 ดังนั้น m + n = m Recursive step: m + s(n) = s(m + n) 12/09/47 Formal Languages
ตัวอย่างที่ 1.5.1 เลข 3 และ 2 เขียนได้เป็น s(s(s(0))) และ s(s(0)) ดังนั้น ผลบวกของมันสามารถคำนวณแบบ Recursive ได้ดังนี้ s(s(s(0))) + s(s(0)) = s(s(s(s(0))) + s(0)) = s(s(s(s(s(0))) + 0)) = s(s(s(s(s(0))) 12/09/47 Formal Languages
การเพิ่มของ X X0 X1 X2 …… Xn 12/09/47 Formal Languages
คณิตศาสตร์ Induction การพิสูจน์ โดยเอากรณีเฉพาะรายมาอ้าง 12/09/47 Formal Languages
กฎพื้นฐานของ คณิตศาสตร์ Induction กำหนดให้ X เป็นเซ็ทที่เกิดจากฐานเริ่มต้น Basis เป็น X0 และกำหนดให้ X0 X1 X2 … Xi … เป็นลำดับของเซ็ทที่เกิดจากการ Recursive ของเซ็ทก่อผล กำหนดให้ P เป็นนิยามคุณสมบัติอีลีเมนท์ของเซ็ท X ดังนั้นเราจะได้ อีลีเมนท์ใน X0 มีคุณสมบัติของ P ถ้า X0 X1 X2 … Xi มีคุณสมบัติของ P ดังนั้น ที่ Xi+1 ก็มีคุณสมบัติของ P ด้วย 12/09/47 Formal Languages
กฎพื้นฐานของ คณิตศาสตร์ Induction X0 X1 X2 …… Xn 12/09/47 Formal Languages
ตัวอย่าง 1.6.1 ใช้คณิตศาสตร์ Induction พิสูจน์ว่า 0+1+…+n = n(n+1)/2 โดยการใช้เครื่องหมาย Summation เราสามารถเขียนใหม่ได้เป็น n i = n(n+1)/2 i=0 12/09/47 Formal Languages
พิสูจน์ Basis: กำหนดให้ n=0 ดังนั้น n i = n(n+1)/2 i=0 จะได้ 0 จะได้ 0 i = 0 = 0(0+1)/2 12/09/47 Formal Languages
พิสูจน์ (ต่อ) Inductive Hypothesis: (ข้อสมมติโดยไม่ต้องพิสูจน์) สมมติฐานว่า k เป็นเลขตั้งแต่ 1,2,…,n เราจะได้ k i = k(k+1)/2 i=0 Inductive step: ดังนั้น เราต้องพิสูจน์ว่า n+1 i = (n+1)(n+1+1)/2 = (n+1)(n+2)/2 12/09/47 Formal Languages
พิสูจน์ (ต่อ) n+1 n i = i +(n+1) (associativity of +) i=0 i=0 = n(n+1)/2 + (n+1) (inductive hypothesis) = (n+1)(n/2+1) (distributive property) = (n+1)(n+2)/2 12/09/47 Formal Languages
ตัวอย่าง 1. 6. 2 ใช้คณิตศาสตร์ Induction พิสูจน์ว่า n ตัวอย่าง 1.6.2 ใช้คณิตศาสตร์ Induction พิสูจน์ว่า n! > 2n, ที่ n 4 Basis: n = 4. 4! = 24 > 16 = 2n Inductive hypothesis: (ข้อสมมติโดยไม่ต้องพิสูจน์) สมมติฐานว่า k! > 2k ตลอดของค่า k = 4,5,6…..,n Inductive step: ดังนั้น เราต้องพิสูจน์ว่า (n+1)! > 2n+1 12/09/47 Formal Languages
พิสูจน์ (n+1)! = n!(n+1) > 2n(n+1) (inductive hypothesis) 12/09/47 Formal Languages
ตัวอักขระ (Alphabet) ประกอบด้วย ตัวอักษร ตัวเลข และอักขระพิเศษต่างๆ เช่น A – Z, a – z, 1 – 9, ! @ # $ % ก – ฮ เป็นต้น เป็นเซ็ทที่นับจำนวนได้ (Finite Set) 12/09/47 Formal Languages
สตริง (String) สตริง (String) คือ เซ็ทของตัวอักขระเรียงต่อกัน เช่น HELLO, สวัสดี, Program, For, While, คำต่างๆ ในภาษาอังกฤษ เป็นต้น Null string ( ) สตริงที่ไม่มีอักขระ หรือ Elements ภายใน เช่น strcpy(A, “ ”) เก็บช่องว่างลง A strcpy(A, “”) เก็บ NULL ลง A หรือ ‘\0’ ในภาษา C 12/09/47 Formal Languages
ภาษา (Languages) ภาษา (Languages) คือ เซ็ทของสตริงที่เรียงต่อกัน (A set of strings over an alphabet) เช่น ประโยคต่างๆ ในภาษาอังกฤษ, Source code ของโปรแกรมในภาษาต่างๆ เช่น C C++ หรือ Pascal เป็นต้น 12/09/47 Formal Languages
นิยามที่ 2.1.1 กำหนดให้ เป็นอักขระ 1 ตัว ดังนั้น * (ซึ่งเป็นเซ็ทของสตริงที่ประกอบด้วยตัวอักขระเรียงต่อกัน) สามารถนิยามแบบ Recursive ได้ดังนี้ Basis: * Recursive step: ถ้า w * และ a ดังนั้น aw * Closure: w * ก็เฉพาะต่อเมื่อมันเริ่มจาก และอีลีเมนท์ของมันเพิ่มขึ้นตามนิยาม recursive ในข้อ 2. 12/09/47 Formal Languages
ตัวอย่างที่ 2.1.1 กำหนดให้ = {a,b,c} ดังนั้น อีลีเมนท์ของ * จะประกอบด้วย Length 0: Length 1: a b c Length 2: aa ab ac ba bb bc ca cb cc Length 3: aaa aab aac aba abb abc aca acb acc baa bab bac bba bbb bbc bca bcb bcc caa cab cac cba cbb cbc cca ccb ccc 12/09/47 Formal Languages
นิยาม 2.1.2 ภาษา (Language) ภายใต้อักขระ เป็น Subset ของ * 12/09/47 Formal Languages
นิยาม 2.1.3 กำหนดให้ , * ดังนั้นการต่อสตริง (Concatenation) ของ และ (เขียนได้เป็น ) เป็น Binary operation ของสตริงใน * ซึ่งนิยามได้ดังนี้ Basis: ถ้า Length() = 0 ดังนั้น = และ = Recursive step: กำหนดให้ เป็นสตริงที่ความยาว Length() = n > 0 ดังนั้น = ωa ที่สตริง ω ความยาว Length n – 1 และ a และ = (ω)a 12/09/47 Formal Languages
ตัวอย่าง 2.1.2 กำหนดให้ = ab , = ca และ ω = bb ดังนั้น = abca ω = cabb ()ω = abcabb (ω) = abcabb 12/09/47 Formal Languages
ทฤษฎี 2.1.4 กำหนดให้ , , ω * ดังนั้น ()ω = (ω) พิสูจน์ Basis: Length(ω) = 0 ดังนั้น ω = และ ()ω = () โดยนิยามของ Concatenation หรืออาจกล่าวใหม่ได้ว่า ()ω = () = Inductive hypothesis: (ข้อสมมติโดยไม่ต้องพิสูจน์) สมมติฐานว่า ()ω = (ω) สำหรับทุกสตริง ω ที่ Length n Inductive step: ดังนั้น เราต้องพิสูจน์ว่า ()ω = (ω) สำหรับทุกสตริง ω ที่ Length n + 1 12/09/47 Formal Languages
พิสูจน์ ()ω = ()(xa) แทน ω ด้วย xa = (()x)a) นิยาม Cocatenation = ((x)a) Inductive hypothesis = ((x)a) นิยาม Cocatenation = ((xa)) นิยาม Cocatenation = (ω) แทน xa ด้วย ω 12/09/47 Formal Languages
ข้อควรรู้ 0 เขียนใหม่ได้เป็น 1 เขียนใหม่ได้เป็น 0 เขียนใหม่ได้เป็น 1 เขียนใหม่ได้เป็น 2 เขียนใหม่ได้เป็น 3 เขียนใหม่ได้เป็น : ถ้า = ab ดังนั้น 2 = abab ซึ่งไม่ใช่ aabb เพราะมันเท่ากับ a2b2 12/09/47 Formal Languages
Substring, Prefix, และ Suffix แบบ Unformal อาจกล่าวได้ว่า เป็น Substring ของ ถ้า ปรากฏอยู่ภายใน แบบ Formal เป็น Substring ของ ถ้ามีสตริง x และ y โดยที่ = xy เป็น Prefix ของ ถ้ามีสตริง x และ y โดยที่ = xy และ x = เป็น suffix ของ ถ้ามีสตริง x และ y โดยที่ = xy และ y = 12/09/47 Formal Languages
นิยาม 2.1.5 กำหนดให้ ป็นสตริงใน * ดังนั้น ตัวกลับ (Reversal) ของ R นิยามได้ดังนี้ Basis: Length() = 0 ดังนั้น = และ R = Recursive step: ถ้า Length() = n > 0 ดังนั้น = wa สำหรับสตริง ω ที่ Length n – 1, a , และ R = aωR (ก็คือ (ωa)R = aωR) 12/09/47 Formal Languages
ทฤษฎี 2.1.6 กำหนดให้ , * ดังนั้น ()R = RR Basis: Length() = 0 ดังนั้น = และ ()R = R ในทำนองเดียวกัน RR = RR = R Inductive Hypothesis: สมมติฐาน ()R = RR ที่ทุกสตริง ของ Length n Inductive Hypothesis: เราต้องพิสูจน์ว่า ที่ทุกสตริง ของ Length n + 1 ว่า ()R = RR โดยกำหนดให้ = ωa โดยที่ ω เป็นสตริงของ Length n และ a , 12/09/47 Formal Languages