HOME > 情報系学生のための数学 >正規言語の閉包性

正規言語の閉包性

正規言語がどのような演算について閉じているのか確認しましょう!

当サイトでは述語論理の記述を多用します。
一般の書籍・論文ではあまり見られない記号を使用する場合もありますので、 本サイトで使用する数学記号 を参照しながらご覧ください。

正規言語の閉包性

定理1. 正規言語の閉包性

任意の \(L,L_1,L_2\in\mathcal{REG}\) について

\begin{align} &\overline{L}\ (=\Sigma^*\setminus L)\in\mathcal{REG}\tag{1.1}\\ &L_1\cup L_2\in\mathcal{REG}\tag{1.2}\\ &L_1\cap L_2\in\mathcal{REG}\tag{1.3}\\ \end{align}

定理1の証明

補題1. 正規言語の並列定義

\begin{align} &\forall L\in\Sigma^*(L\in\mathcal{REG}\Longleftrightarrow Lを受理するDFAが存在する)\tag{2.1}\\ &\forall L\in\Sigma^*(L\in\mathcal{REG}\Longleftrightarrow Lを受理する\epsilon\mathrm{-}動作付きNFAが存在する)\tag{2.2} \end{align}

(1.1)の証明

\begin{align} &(2.1)より、任意のL\in\mathcal{REG}について\\ &Lを受理する\mathrm{DFA}\ M=(Q,\Sigma,\delta,q_0,F)が存在する。\\ &ここで\mathrm{DFA}\ M'=(Q,\Sigma,\delta,q_0,(Q\setminus F))は\overline Lを受理する。\\ &よって(2.1)より、\overline{L}\in\mathcal{REG} \end{align}

(1.2)の証明

\begin{align} &(2.2)より、任意のL_1,L_2\in\mathcal{REG}について L_1,L_2を受理する\\ &\epsilon\mathrm{-}動作付き\mathrm{NFA}\\ &M_1=(Q_1,\Sigma_1,\delta_1,q_{(1)0},F_1),\\ &M_2=(Q_2,\Sigma_2,\delta_2,q_{(2)0},F_2)が存在する。\\ \end{align} \begin{align} ここで&&Q&=Q_1\cup Q_2\cup\{q_0\}\\ &&\Sigma&=\Sigma_1\cup\Sigma_2\\ &&\delta&=\delta_1\cup\delta_2\cup \{q_0\rightarrow q_{(1)0}, \ q_0\rightarrow q_{(2)0}\}\\ &&F&=F_1\cup F_2\ としたときの\\ \end{align} \begin{align} &\epsilon\mathrm{-}動作付き\mathrm{NFA} \ M=(Q,\Sigma,\delta,q_{0},F)はL_1\cup L_2を受理する。\\ &よって(2.2)より、L_1\cup L_2\in\mathcal{REG} \end{align}