Theorem: the NFA-decidable languages are closed under union:
If \(L_1 = L(N_1)\) and \(L_2 = L(N_2)\), then we can construct \(N\) such that \(L(N) = L_1 \cup L_2\).
Proof:
Alternatively: the set of transitions \(\Delta\) for \(N\) is the union \(\Delta_1 \cup \Delta_2 \cup \{s \stackrel{\emptystring}{\rightarrow} s_1, s \stackrel{\emptystring}{\rightarrow} s_2 \}\).
Theorem: the NFA-decidable languages are closed under union:
If \(L_1 = L(N_1)\) and \(L_2 = L(N_2)\), then we can construct \(N\) such that \(L(N) = L_1 \cup L_2\).
Proof:
Theorem: the NFA-decidable languages are closed under concatenation:
If \(L_1 = L(N_1)\) and \(L_2 = L(N_2)\), then we can construct \(N\) such that \(L(N) = L_1 \circ L_2\).
Proof:
Alternatively: the set of transitions \(\Delta\) for \(N\) is the union \(\Delta_1 \cup \Delta_2 \cup \setbuild{q \stackrel{\emptystring}{\rightarrow} s_2}{q \in F_1}\).
Theorem: the NFA-decidable languages are closed under concatenation:
If \(L_1 = L(N_1)\) and \(L_2 = L(N_2)\), then we can construct \(N\) such that \(L(N) = L_1 \circ L_2\).
Proof:
Theorem: the NFA-decidable languages are closed under concatenation:
If \(L_1 = L(N_1)\) and \(L_2 = L(N_2)\), then we can construct \(N\) such that \(L(N) = L_1 \circ L_2\).
Proof:
Theorem: the NFA-decidable languages are closed under Kleene star:
If \(L_1 = L(N_1)\), then we can construct \(N\) such that \(L(N) = L_1^*\).
Proof:
Let \(N_1 = (Q_1, \Sigma, \Delta_1, s_1, F_1)\) and construct
\(N = (Q, \Sigma, \Delta, s, F)\):
Alternatively: the set of transitions for \(N\) is \(\Delta_1 \cup \{s \stackrel{\emptystring}{\rightarrow} s_1 \} \cup \setbuild{q \stackrel{\emptystring}{\rightarrow} s_1}{q \in F_1}\).
Theorem: the NFA-decidable languages are closed under Kleene star:
If \(L_1 = L(N_1)\), then we can construct \(N\) such that \(L(N) = L_1^*\). (proof of \(L_1^* \subseteq L(N)\))
Clearly \(\emptystring \in L(N)\) since \(s \in F\), so we only consider non-empty strings.
To show \(L_1^* \subseteq L(N)\), let \(x \in L_1^* \setminus \emptystring\).
Then \(x = x_1 x_2 \dots x_k\), where each \(x_j \in L(N) \setminus \varepsilon\).
For each \(1 \le j \le k\), there is a computation sequence \(q_{j,0}, q_{j,1}, \dots, q_{j,m_j} \in Q\), where each \(q_{j,m_j} \in F\), and a sequence \(y_{j,0}, y_{j,1}, \dots, y_{j,m_j} \in \Sigma_\varepsilon\), where \(x_j = y_{j,0} y_{j,1} \dots y_{j,m_j}\), and for each \(0 \le i < m\), a transition \(q_{j,i} \stackrel{y_{j,i}}{\to} q_{j,i+1}\).
Then is a computation sequence showing \(N\) accepts \(x\):
\(s, \underbrace{s_1(=q_{1,0}), q_{1,1}, \dots, q_{1,m_1}}_{x_1}, \underbrace{s_1(=q_{2,0}), q_{2,1}, \dots, q_{2,m_1}}_{x_2}, \dots, \underbrace{s_1(=q_{k,0}), q_{k,1}, \dots, q_{k,m_k}}_{x_k}\).
Theorem: the NFA-decidable languages are closed under Kleene star:
If \(L_1 = L(N_1)\), then we can construct \(N\) such that \(L(N) = L_1^*\). (proof of \(L(N) \subseteq L_1^*\))