1. 정규 문법 (Regular Grammars, RG)

정규 문법 (Regular Grammar)

정규 문법은 정규 언어를 생성하는 생성 규칙(Production Rule)의 집합이다. 변수 전개가 일어나는 방향에 따라 크게 두 가지 형태로 나뉜다

정규 문법의 두 가지 종류

  • 우선형 문법 (Right-linear Grammar):
    • 모든 생성 규칙이 또는 형태이다
    • (단, 이며 단말 기호의 문자열을 의미, 는 변수)
    • 변수가 항상 문자열의 오른쪽 끝에만 나타난다
  • 좌선형 문법 (Left-linear Grammar):
    • 모든 생성 규칙이 또는 형태이다
    • 변수가 항상 문자열의 왼쪽 끝에만 나타난다

1.1 정규 표현식 유도 예시

문법이 주어졌을 때, 반복적인 변수 대입을 통해 해당 문법이 생성하는 언어를 정규 표현식(RE)으로 표현할 수 있다

  • 우선형 예시:
    • 유도 과정:
  • 좌선형 예시:
    • 유도 과정:
    • (참고: 유도 방향이 왼쪽에서 오른쪽으로 뻗어나갑니다.)

1.2 문법과 오토마타의 상호 변환

오토마타의 상태(State)는 문법의 변수(Non-terminal)와 1:1로 대응된다

우선형 문법 DFA 변환 문법의 생성 규칙을 오토마타의 상태 전이 화살표로 바로 바꿀 수 있다

  • 규칙: 는 상태 에서 입력 를 받아 상태 로 가는 전이()가 된다
  • 예시:
    • (생성되는 RE: )

DFA 우선형 문법 변환 DFA의 그래프 구조를 그대로 생성 규칙으로 옮겨 적는다

  • 예시 언어:

  • 각 상태 를 문법 변수()로 설정하고 전이에 따라 규칙을 생성한
    • (수락 상태는 전이로 종료)

좌선형 문법 변환

우선형 문법은 “상태 입력 다음 상태” 순서로 직관적인 변환이 가능하지만, 좌선형은 최종 상태에서 거꾸로 거슬러 올라가는 역방향 구조이다. 따라서 직접 변환하기보다는, 오토마타를 뒤집은(Reverse) 뒤 우선형으로 구하고 다시 뒤집는 동치 성질을 이용해 변환하는 것이 일반적이다


2. 정규 언어의 폐쇄 성질 (Closure Properties)

정규 언어 가 있을 때, 특정 연산을 거쳐 만들어진 새로운 언어 역시 여전히 정규 언어의 범주에 속한다는 수학적 성질이다

연산 종류기호설명 및 증명 아이디어
합집합정규 표현식 로 쉽게 표현 가능
결합정규 표현식 로 표현 가능
여집합DFA의 수락 상태()와 비수락 상태()를 반전시켜 구성
교집합1. 드 모르간의 법칙() 적용
2. Product Construction ( 상태 교차 곱) 증명
차집합 와 동일하므로 정규 언어 연산의 조합임
역순오토마타의 방향을 뒤집고 시작/수락 상태를 교체하면 됨

2.1 동형 사상 (Homomorphism, )

동형 사상

언어에 속한 각각의 단일 알파벳을 특정 문자열로 통째로 치환하는 함수 에 대해, 정규 언어 의 치환 결과 집합인 역시 정규 언어이다

  • 예시 1 (집합 치환):
    • 설정:
    • 치환 함수:
    • 대상 언어:
    • 결과:
  • 예시 2 (정규 표현식 치환):
    • 설정: 치환 함수
    • 정규 표현식:
    • 결과:

2.2 우측 몫 (Right-Quotient, )

우측 몫

두 언어 에 대해, 에 속하는 문자열 중 뒷부분(접미사)이 의 패턴과 일치하는 경우, 그 뒷부분을 잘라내고 남은 앞부분들의 집합이다

  • 수식 예시:
    • 결과: (즉, RE로는 )
  • DFA 기반 증명 아이디어: 을 인식하는 DFA에서, 특정 상태 에서 출발해 에 속하는 문자열을 읽고 기존 수락 상태에 도달할 수 있다면, 그 상태 새로운 수락 상태로 바꾼. 이렇게 변형된 DFA가 인식하는 언어가 바로 가 된다

2.3 교집합 연산과 Product Construction 증명

정규 언어의 교집합()이 정규 언어임을 증명하기 위해 두 DFA를 병렬로 결합한 Product DFA를 구성한다

  • 예시 언어:

  • 증명 방법:
    • 의 상태 의 상태 를 묶어 새로운 상태 쌍 를 만든다
    • 새로운 오토마타의 수락 상태는 두 DFA가 동시에 수락 상태인 경우에만 해당한다
    • 결과적으로 교집합 만을 인식하는 새로운 DFA가 완성되므로, 교집합 역시 정규 언어임이 증명한다

3. 정규 언어의 주요 판정 문제 (Decision Problems)

특정 언어가 정규 언어의 3대 표준 표현(RE, DFA, RG) 중 하나로 주어졌을 때, 컴퓨터(알고리즘)를 통해 다음 질문들에 대한 명확한 답(Yes/No)을 유한 시간 내에 도출할 수 있다

3.1 소속 문제 (Membership Problem: ?)

질문: 임의의 문자열 가 언어 에 속하는가?

  • 판별 알고리즘: 언어 을 인식하는 DFA를 구성한 뒤, 문자열 를 입력하여 시뮬레이션합니다. 문자열을 다 읽고 난 후 최종 상태가 수락 상태이면 Yes, 아니면 No를 반환한다
  • 문자열 길이가 일 때 시간에 빠르게 판독 가능하다

3.2 공백 / 유한 / 무한 판정 (Emptiness / Finiteness)

질문: 언어 이 텅 비어있는가? 문자열 개수가 유한한가, 무한한가?

  • 공백 판정 (?):
    • DFA의 상태 그래프에서 시작 상태로부터 수락 상태로 도달할 수 있는 경로(Path)가 단 하나라도 존재하는지 확인한다(BFS, DFS 탐색 활용)
    • 경로가 아예 없다면 언어는 공집합이다
  • 무한 판정 (Infinite?):
    • 불필요한 상태(시작점에서 도달 불가, 수락점으로 도달 불가)를 다 제거한다
    • 남은 유효한 상태 전이 그래프 내에 사이클(Cycle, 루프)이 존재하는지 확인한다
    • 유효한 경로 상에 루프가 있다면 무한히 많은 문자열 생성이 가능하므로 무한(Infinite), 루프가 하나도 없다면 유한(Finite)한다

3.3 동등성 문제 (Equivalence Problem: ?)

질문: 서로 다르게 생긴 두 정규 표현식이나 오토마타 가 실제로는 완전히 같은 언어를 나타내는가?

  • 판별 알고리즘 1 (대칭 차집합 이용):
    • 두 언어의 차집합을 결합하여 다음 식 를 구성한다
    • 에 대해 위에서 배운 공백 판정(Emptiness Test)을 실행하여 결과가 (비어 있음)으로 나오면, 두 언어는 완전히 동일하다
  • 판별 알고리즘 2 (최소화 이용):
    • 두 DFA를 각각 최소화(Minimization) 알고리즘을 돌려 가장 작은 형태로 만든다
    • 최소화된 두 DFA의 구조(상태 개수와 전이 화살표)가 완전히 일치(Isomorphic)하는지 비교한다