Лекция 3 Регулярные множества, регулярные выражения Определение 3.1 • Пусть - некоторый алфавит. Регулярное множество в алфавите определяется рекурсивно следующим образом: • 1. пустое множество является регулярным в алфавите ; • 2. {} – регулярное множество в алфавите ; • 3. если а , то {а} – регулярное множество в алфавите ; • 4. R является регулярным множеством, если R представимо в виде 5. PQ, или PQ, или P*, где P и Q – регулярные множества в алфавите ; • 6. других регулярных множеств в алфавите нет. • Таким образом, множество в алфавите является регулярным тогда и только тогда, когда оно либо пусто, либо содержит единственную пустую цепочку, либо содержит некоторый символ этого алфавита, либо получено из регулярных множеств в данном алфавите посредством операций объединения, конкатенации или итерации, примененных к регулярным множествам. • Заметим, что из определения регулярного множества следует, что: • 1. любое конечное множество является регулярным множеством; • 2. объединение любого числа конечных множеств является также регулярным множеством; • 3. некоторое бесконечное множество является регулярным тогда и только тогда, когда оно составлено из символов некоторого алфавита с использованием операции итерации (т.е. оно содержит все возможные цепочки, которые можно построить из символов этого алфавита), либо когда это множество является объединением любого числа так построенных бесконечных множеств и любого числа конечных множеств (см также свойства регулярных выражений). • Пример 3.1. • 1. {1} – регулярное множество, • {1,2} – регулярное множество, полученное посредством выполнения операции объединения над регулярными множествами {1} и {2}, • {12} – регулярное множество, полученное посредством выполнения операции конкатенации над регулярными множествами {1} и {2}, • {1,2,12} – регулярное множество, полученное посредством выполнения операций конкатенации (над регулярными множествами {1} и {2}) и двух операций объединения • По определению язык – это множество цепочек. Таким образом, любое регулярное множество цепочек также есть язык. Задать такой язык (некоторое регулярное множество) можно задав регулярное выражение, обозначающее это регулярное множество. Определение 3.2 • Регулярные выражения в алфавите и регулярные множества, которые они обозначают, определяются рекурсивно следующим образом: • 1. - регулярное выражение, обозначающее регулярное множество , • 2. – регулярное выражение, обозначающее множество {}, • 3. если а , то а – регулярное выражение, обозначающее регулярное множество { а }, • 4. если p и q – регулярные выражения, обозначающие регулярные множества P и Q соответственно, то: • а) (p + q) – регулярное выражение, обозначающее регулярное множество PQ, • б) (pq) – регулярное выражение, обозначающее регулярное множество PQ, • в) (p)* - регулярное выражение, обозначающее P*; • 5. ничто другое не является регулярным выражением. • Пример 3.2. Приведем несколько примеров регулярных выражений и обозначаемых ими множеств: • 1) 01 обозначает множество {01} • 2) 0* обозначает множество {0}* • 3) (0+1)* обозначает множество {0,1}* • 4) (0+1)*011 обозначает множество всех цепочек, составленных из нулей и единиц и оканчивающихся цепочкой 011. • 5) (a+b)(a+b+0+1)* обозначает множество всех цепочек из {0,1,a,b}*, начинающихся с а или b • 6) (00+11)*((01+10)(00+11)*(01+10)(00+11)*)* обозначает множество всех цепочек нулей и единиц, содержащих четное число нулей и четное число единиц. • Для каждого регулярного множества можно найти, по крайней мере, одно регулярное выражение, обозначающее это множество, и для каждого регулярного выражения можно построить регулярное множество, обозначаемое этим выражением. Для каждого регулярного множества существует бесконечно много обозначающих его регулярных выражений. Определение 3.3 • Будем говорить, что два регулярных выражения равны (=), если они обозначают одно и тоже множество. Основные алгебраические свойства регулярных выражений • • • • • • 1. 2. 3. 4. 5. 6. + = , + = +=+ + ( + ) = ( + ) + = + + () = () = = = и = = ( + ) = + • • • • • • • • • • 7. ( + ) = + 8. ** = * 9. (*)* = * 10. * = * * 11. * = + * 12. * = и * = 13. (* + *)* = (**)* = ( + )* 14. ()* = ()* 15. (*)** = (+)* 16. (*)* = (+)* + и (*)* = (+)* + • Доказательство: • Пусть и обозначают множества L1 и L2 соответственно. Тогда + обозначает L1 L2, а + обозначает L2 L1. Но L1 L2 = L2 L1 по определению объединения. Следовательно, + = + (Доказать отдельные равенства самостоятельно). Задание 4 • Описать свойства цепочек, принадлежащих языку, заданному указанным регулярным выражением. Привести примеры четырех цепочек, принадлежащих данному языку. 1. 0(0+1)*(a+b) 2. 1(0+1+2)*(a+b)(1+2)* 3. (0+1+2)*(a+b)* 21 4. (1+2)+(a+b+с)(1+2)*22 5. (0+2)*(a+b)(1+2)*11 6. 33(3+4+5)*(1+2)*7 7. 7(6+7+8)*(a+b)(1+2)*6 8. (a+b)(1+2)*(6+7+8)*1 9. (1+2+3)*(1+2)5 10. (4+5)(4+5+6)*(7+8)*9 11. (6+7)*(8+9)(1+2)*8 12. (1+2+3)*(4+5+6)*(1+2) 13. (0+1)(a+b)*(3+4+5)*7 14. (3+4)*5(6+7)*9 15. 1(2+3+4)*7(5+6)*8 16. 3(4+5)*(6+7)(8+9)*1 17. (a+b)(1+2+4)*(6+7) 18. (a+b)*2(3+4)*6 • • • • • • • • • • 19. (1+2)*(4+5)(3+6)*7 20. (4+5)*(1+2)(6+7)*81 21. (3+4)*5(6+7)* 22. (5+6+7)*(a+b)(1+2)* 23. (0+2)(a+b)*(1+2)*1 24. (3+4)*(a+b)(1+2) 25. (2)*(a+b)(1+2)*3 26. 1(0)*(1+2)*12 27. 3(2)*(a+b)(4+5)* 28. 1(3+2)*4(1+2)* • • • • • • • • • • 29. (0+2)(a+b)*(1+2)* 30. (1+2)*2(1+2)*1 31. (8+7)(6+9)*(1+2)90 32. (3+2+4)*(1+5+2)*(6+7)+ 33. (1+5)(3+4)*(6+7+8)*1 34. (4+5+6)*567(76+77)*9 35. 121(21+32+41)*7(52+62)*8 36. 123(34+25)*(63+71)(18+92)*1 37. (1a+2b)(12+21+43)*(6+7) 38. (a2+b3)*2121(113+421)*611 • • • • • • • • • • • • 39. (121+211)*(4234+5546)(563+656)*7 40. (34+45)*(541+222)(226+347)*81 41. (13+64)*57(68+79)* 42. (52+62+74)*(a1+b1)(12+23)* 43. (012+221)(a+b)*(13343+24444)*14 44. (30+48)*(a+b)(111+232)+ 45. (23)*(1qqa+b322)(231+4e2)*3 46. 134(02)*(11+22)*132 47. 332(221)*(111a+2222b)(4ww+322)* 48. 1221(23+s2)*42(12+22)* 49. (0kd+2)(dsaa+bss)+(saz1+ddw2)* 50. (32q1+2xsw)*2222(1sd+2df)*12