文字列置換 L を言語 とし、Σ をそのアルファベットとする。文字列置換 、または単に置換とは 、Σ の文字を言語 (異なるアルファベットの場合もある) にマッピングする写像f のことである。例えば、文字a ∈ Σ が与えられた場合、 f ( a )= L a となる。ここでL a ⊆ Δ * はアルファベットが Δ である何らかの言語である。この写像は文字列にも拡張できる。
f (ε)=ε空文字列 εの場合、
f ( sa )= f ( s ) f ( a )文字列s ∈ L および文字a ∈ Σの場合。文字列置換は[ 1 ] のように言語全体に拡張できます。
f ( L ) = ⋃ s ∈ L f ( s ) {\displaystyle f(L)=\bigcup _{s\in L}f(s)} 正規言語は 文字列置換に関して閉じている。つまり、正規言語のアルファベットの各文字を別の正規言語の文字に置き換えても、結果は依然として正規言語である。[ 2 ] 同様に、文脈自由言語も 文字列置換に関して閉じている。[ 3 ] [ 注1 ]
簡単な例として、f uc (.) を大文字に変換する処理があり、これは例えば次のように定義できます。
f uc を文字列に拡張する場合、例えば
f uc (‹Straße›) = {‹S›} ⋅ {‹T›} ⋅ {‹R›} ⋅ {‹A›} ⋅ {‹SS›} ⋅ {‹E›} = {‹STRASSE›},f uc (‹u2›) = {‹U›} ⋅ {ε} = {‹U›}、f uc (‹Go!›) = {‹G›} ⋅ {‹O›} ⋅ {} = {}.f uc を言語に拡張する場合、例えば
f uc ({ «Straße›, ‹u2›, ‹Go!› }) = { ‹STRASSE› } ∪ { ‹U› } ∪ { } = { ‹STRASSE›, ‹U› }。
弦準同型 文字列準同型( 形式言語理論 では単に準同型 と呼ばれることが多い)とは、各文字が単一の文字列に置き換えられるような文字列置換のことである。つまり、f ( 1 ) = s {\displaystyle f(a)=s} 、 どこs {\displaystyle s} 各文字は文字列です1 {\displaystyle a} [注 2 ] [ 4 ]
文字列準同型は、自由モノイド 上のモノイド準同型 であり、空文字列と文字列連結 の二項演算を 保存する。L {\displaystyle L} セットf ( L ) {\displaystyle f(L)} は、 L {\displaystyle L} 文字列の逆準同型像 s {\displaystyle s} は次のように定義される。
f − 1 ( s ) = { w ∣ f ( w ) = s } {\displaystyle f^{-1}(s)=\{w\mid f(w)=s\}}
言語の逆準同型像L {\displaystyle L} は次のように定義される。
f − 1 ( L ) = { s ∣ f ( s ) ∈ L } {\displaystyle f^{-1}(L)=\{s\mid f(s)\in L\}}
一般的に、f ( f − 1 ( L ) ) ≠ L {\displaystyle f(f^{-1}(L))\neq L} 一方で、
f ( f − 1 ( L ) ) ⊆ L {\displaystyle f(f^{-1}(L))\subseteq L}
そして
L ⊆ f − 1 ( f ( L ) ) {\displaystyle L\subseteq f^{-1}(f(L))}
どの言語でもL {\displaystyle L} 。
正規言語のクラスは準同型写像と逆準同型写像に関して閉じている。[ 5 ] 同様に、文脈自由言語は準同型写像[ 注3 ] と逆準同型写像に関して閉じている。[ 6 ]
文字列準同型写像は、以下の条件を満たす場合にεフリー(またはeフリー)であると言われる。f ( 1 ) ≠ ε {\displaystyle f(a)\neq \varepsilon } アルファベットのすべてのa についてΣ {\displaystyle \Sigma } 単純な一文字置換暗号は 、 (εフリー)文字列準同型の例である。
上記の 置換と同様に定義することで、文字列準同型g uc の 例も得られます。g uc (‹a›) = ‹A›、...、g uc (‹0›) = ε ですが、句読点文字ではg uc は 未定義とします。 逆準同型イメージの例は次のとおりです。
g uc −1 ({ ‹SSS› }) = { ‹sss›, ‹sß›, ‹ßs› }、なぜならg uc (‹sss›) = g uc (‹sß›) = g uc (‹ßs›) = ‹SSS› であり、g uc −1 ({ ‹A›, ‹bb› }) = { ‹a› }、なぜならg uc (‹a›) = ‹A› であり、‹bb› は g uc によって到達できないからである。後者の言語では、g uc ( g uc −1 ({ ‹A›, ‹bb› })) = g uc ({ ‹a› }) = { ‹A› } ≠ { ‹A›, ‹bb› } となります。準同型写像g uc は eg ‹0› を ε に写像するため、ε フリーではありません。
各文字を単なる文字にマッピングする非常に単純な文字列準同型の例としては、EBCDICエンコードされた文字列を ASCII に変換することが挙げられます。
弦投影 s が文字列の場合、Σ {\displaystyle \Sigma } はアルファベットであり、s の文字列射影は 、 に含まれないすべての文字を削除することによって得られる文字列です。Σ {\displaystyle \Sigma } 次のように書かれています。π Σ ( s ) {\displaystyle \pi _{\Sigma }(s)\,} 右辺から文字を削除することで正式に定義されます。
π Σ ( s ) = { ε もし s = ε 空の文字列 π Σ ( t ) もし s = t 1 そして 1 ∉ Σ π Σ ( t ) 1 もし s = t 1 そして 1 ∈ Σ {\displaystyle \pi _{\Sigma }(s)={\begin{cases}\varepsilon &{\mbox{if }}s=\varepsilon {\mbox{ the empty string}}\\\pi _{\Sigma }(t)&{\mbox{if }}s=ta{\mbox{ and }}a\notin \Sigma \\\pi _{\Sigma }(t)a&{\mbox{if }}s=ta{\mbox{ and }}a\in \Sigma \end{cases}}} ここε {\displaystyle \varepsilon } は空文字列 を表します。文字列の射影は、関係代数における射影 と本質的に同じです。
文字列射影は言語の射影 に昇格されることがある。形式言語 L が与えられた場合、その射影は次のように与えられる。
π Σ ( L ) = { π Σ ( s ) | s ∈ L } {\displaystyle \pi _{\Sigma }(L)=\{\pi _{\Sigma }(s)\ \vert \ s\in L\}}
右と左の商 文字列s から文字a を 右端から切り捨てた値 とは、文字列s から文字aを切り捨てた値です。これは次のように表されます。 s / 1 {\displaystyle s/a} 文字列の右辺 にがない場合、結果は空文字列になります。したがって、次のようになります。
( s 1 ) / b = { s もし 1 = b ε もし 1 ≠ b {\displaystyle (sa)/b={\begin{cases}s&{\mbox{if }}a=b\\\varepsilon &{\mbox{if }}a\neq b\end{cases}}} 空文字列の商は次のように計算できます。
ε / 1 = ε {\displaystyle \varepsilon /a=\varepsilon } 同様に、部分集合が与えられた場合S ⊂ M {\displaystyle S\subset M} モノイドのM {\displaystyle M} 商部分集合は次のように定義できる。
S / 1 = { s ∈ M | s 1 ∈ S } {\displaystyle S/a=\{s\in M\ \vert \ sa\in S\}} 左商も 同様に定義でき、演算は文字列の左側で行われます。
ホップクロフトとウルマン(1979)は、同じアルファベット上の言語L 1 とL 2 の商 L 1 / L 2 を L 1 / L 2 = { s | ∃ t ∈ L 2 . st ∈ L 1 } と定義して いる 。[ 7 ] これ は 上記 の 定義 の 一般 化 で は ない 。 なぜなら 、 文字 列 s と異なる 文字 a 、 bに対して 、ホップ クロフトとウルマンの定義は、{ ε } ではなく{} を生成する。
単一言語L 1 と任意の言語L 2 の左商 (Hopcroft と Ullman 1979 と同様に定義される場合) は、 Brzozowski 微分 として知られています。L 2 が 正規 表現 で表されている場合、左商も正規表現で表すことができます。[ 8 ]
統語関係 部分集合の右商S ⊂ M {\displaystyle S\subset M} モノイドのM {\displaystyle M} S の右 構文関係 と呼ばれる同値関係 を定義する。それは次のように与えられる。
~ S = { ( s 、 t ) ∈ M × M | S / s = S / t } {\displaystyle \sim _{S}\;\,=\,\{(s,t)\in M\times M\ \vert \ S/s=S/t\}} 関係が明らかに有限指数(有限個の同値類を持つ)であるのは、右商の族が有限である場合、すなわち、
{ S / m | m ∈ M } {\displaystyle \{S/m\ \vert \ m\in M\}} は有限である。Mが 何らかのアルファベット上の単語のモノイドである場合、 Sは 正規言語、すなわち 有限状態オートマトン によって認識可能な言語となる。これについては、構文モノイド に関する記事でより詳しく説明されている。
権利の取り消し 文字列s から文字a を 右から削除すると は、文字列s の右端から、文字a の最初の出現箇所を削除することです。これは次のように表されます。s ÷ 1 {\displaystyle s\div a} そして再帰的に定義される
( s 1 ) ÷ b = { s もし 1 = b ( s ÷ b ) 1 もし 1 ≠ b {\displaystyle (sa)\div b={\begin{cases}s&{\mbox{if }}a=b\\(s\div b)a&{\mbox{if }}a\neq b\end{cases}}} 空文字列は常にキャンセル可能です。
ε ÷ 1 = ε {\displaystyle \varepsilon \div a=\varepsilon } 明らかに、権利の相殺と投影は可換である 。
π Σ ( s ) ÷ 1 = π Σ ( s ÷ 1 ) {\displaystyle \pi _{\Sigma }(s)\div a=\pi _{\Sigma }(s\div a)}
接頭辞 文字列の接頭辞とは、 特定の言語に関して、文字列に付加されるすべての接頭辞 の集合のことです。
序文 L ( s ) = { t | s = t u のために t 、 u ∈ アルフ ( L ) * } {\displaystyle \operatorname {Pref} _{L}(s)=\{t\ \vert \ s=tu{\mbox{ for }}t,u\in \operatorname {Alph} (L)^{*}\}} どこs ∈ L {\displaystyle s\in L} 。
言語の接頭辞 閉包は
序文 ( L ) = ⋃ s ∈ L 序文 L ( s ) = { t | s = t u ; s ∈ L ; t 、 u ∈ アルフ ( L ) * } {\displaystyle \operatorname {Pref} (L)=\bigcup _{s\in L}\operatorname {Pref} _{L}(s)=\left\{t\ \vert \ s=tu;s\in L;t,u\in \operatorname {Alph} (L)^{*}\right\}} 例: L = { 1 b c } それから 序文 ( L ) = { ε 、 1 、 1 b 、 1 b c } {\displaystyle L=\left\{abc\right\}{\mbox{ then }}\operatorname {Pref} (L)=\left\{\varepsilon ,a,ab,abc\right\}}
言語は、以下の条件を満たす場合に接頭辞閉じ言語と呼ばれます。 序文 ( L ) = L {\displaystyle \operatorname {Pref} (L)=L} 。
接頭辞閉包演算子は冪等で ある。
序文 ( 序文 ( L ) ) = 序文 ( L ) {\displaystyle \operatorname {Pref} (\operatorname {Pref} (L))=\operatorname {Pref} (L)} 接頭辞関係は 二項関係 である⊑ {\displaystyle \sqsubseteq } そのためs ⊑ t {\displaystyle s\sqsubseteq t} かつその場合に限りs ∈ 序文 L ( t ) {\displaystyle s\in \operatorname {Pref} _{L}(t)} この関係は、接頭辞順序 の具体的な例です。
注記 ↑ すべての正規言語は文脈自由言語でもあるが、前の定理は現在の定理から導かれるものではない。なぜなら、前の定理は正規言語に対してより明確な結果をもたらすからである。 ↑ 厳密に形式的には、準同型写像は、1つの文字列のみからなる言語を生成する。f ( 1 ) = { s } {\displaystyle f(a)=\{s\}} 。 ↑ これは、上記の 任意の置換の下での閉包から導かれる。
参考文献 ホップクロフト、ジョン・E.、ウルマン、ジェフリー・D. (1979).オートマタ理論、言語、計算入門 . マサチューセッツ州レディング:アディソン・ウェスリー出版. ISBN 978-0-201-02988-8 . Zbl 0426.68001 . (第3章を参照。) ↑ ホップクロフト、ウルマン(1979)、第3.2節、60ページ ↑ ホップクロフト、ウルマン (1979)、第3.2節、定理3.4、p.60 ↑ ホップクロフト、ウルマン (1979)、第6.2節、定理6.2、131ページ ↑ ホップクロフト、ウルマン(1979)、第3.2節、60-61ページ ↑ ホップクロフト、ウルマン (1979)、第3.2節、定理3.5、p.61 ↑ ホップクロフト、ウルマン (1979)、第6.2節、定理6.3、p.132 ↑ ホップクロフト、ウルマン(1979)、第3.2節、62ページ ↑ ヤヌシュ・A・ブルゾゾフスキー (1964)。 「正規表現の派生」 。 J ACM 。 11 (4): 481–494 . 土井 : 10.1145/321239.321249 。 S2CID 14126942 。