정규 언어의 교집합
두 정규 언어 L1, L2가 있다고 하자. 이 두 언어의 교집합 L = L1 ∩ L2도 정규 언어임을 증명해 보자.
증명의 아이디어
두 정규 언어 L1과 L2가 있고, 그 교집합 L1 ∩ L2가 다시 정규 언어임을 증명하려고 한다. L1과 L2는 정규 언어이므로 언어 L1과 L2를 인식하는 유한 오토마타 A1과 A2가 존재한다. 즉 L(A1) = L1이고 L(A2) = L2이다. 이제 언어 L1 ∩ L2를 인식하는 유한 오토마타 A를 만들면 언어 L1 ∩ L2가 정규 언어임이 증명된다.
문자열이 두 언어의 교집합에 속하려면 언어 L1에도 속하고 L2에도 속해야 한다. 즉 오토마타 A1도 오토마타 A2도 그 문자열을 수락해야 한다. 정규 언어의 합집합에서 쓴 아이디어를 그대로 쓰고, 수락 상태의 집합만 바꾸면 된다.
과정의 형식화
다음 두 오토마타가 있다.
언어 L(A1) ∩ L(A2)를 인식하는 오토마타 A = ⟨Q, Σ, δ, q, F⟩를 만든다. 이때 다음이 성립한다.
- Q = Q1 × Q2
- Σ= Σ1 ∩ Σ2
- q = ⟨q0, p0⟩
- F = F1 × F2
전이 함수 δ에 대해서는 다음 관계가 성립한다.
예
1이 짝수 개 들어 있는 모든 문자열을 수락하는 다음 오토마타 A1이 있고
0이 홀수 개 들어 있는 문자열을 수락하는 오토마타 A2가 있다고 하자.
이 두 언어의 교집합을 인식하는 오토마타를 만든다. 이 오토마타의 상태의 집합은 Q = Q1 × Q2이고, 시작 상태는 상태 ⟨q0, p0⟩이며, 수락 상태는 F1 × F2이다.
다음으로 δ(⟨q,p⟩, a) = ⟨δ1(q, a), δ2(p, a)⟩가 되도록 전이를 채운다.
이 오토마타에서는 예를 들어 상태 ⟨q0, p0⟩에서 기호 0에 대해 상태 ⟨q0,p1⟩로 가는 전이가 있다. 이는 오토마타 A1에서 상태 q0이 기호 0에 대해 다시 상태 q0으로 가고, 오토마타 A2에서 기호 0에 대해 상태 p0이 상태 p1로 간다는 뜻이다.
오토마타를 직접 시험해 보자. 이 오토마타는 110이나 00000 같은 문자열(1이 짝수 개이고 0이 홀수 개인 문자열)은 수락해야 하지만 11, 111, 1010 같은 문자열은 수락하지 않아야 한다.
참고 자료
목차: 정규 언어의 닫힘 성질, 정규 언어의 합집합, 정규 언어의 교집합, 정규 언어의 차집합, 정규 언어의 여집합, 정규 언어의 연접, 정규 언어의 클레이니 폐포