📜  L-图及其在 TOC 中的含义

📅  最后修改于: 2022-05-13 01:54:10.500000             🧑  作者: Mango

L-图及其在 TOC 中的含义

先决条件——有限自动机介绍
所有编程语言都可以表示为有限自动机。 C、Paskal、Haskell、C++,它们都有特定的结构、语法,可以用一个简单的图来表示。大多数图表是 NFA 或 DFA。但是 NFA 和 DFA 确定了最简单的语言组:常规语言组 [乔姆斯基的层次结构]。这给我们留下了一个问题:所有其他类型的语言呢?答案之一是图灵机,但图灵机很难想象。这就是为什么在本文中我将告诉你一种称为 L-图的有限自动机。

为了理解 L-graphs 如何工作,我们需要知道 L-graphs 确定的语言类型。简而言之, L-图表示上下文相关类型的语言[以及上下文相关组包含的所有其他类型]。如果您不知道“上下文敏感”是什么意思,让我向您展示一个可以由 L-图而不是任何更简单类型的有限自动机表示的语言示例。

这种语言是L = \{ a^nb^nc^n | n \geqslant 1 \} .对应的 L-graph 如下所示:

如您所见,符号“|”后面的括号控制符号“a”之后的符号数量。这将我们引向所有 L-graph 都具有的两个特征:所有 L-graph 最多有两个彼此独立并且来自输入符号括号组,两个括号组必须是正确的 [字符串 from a Dyck language] 以便给定 L-graph 接受的输入符号字符串。

您可以看到,L-图只是有限自动机的一个版本,增加了几个括号组。为了帮助您了解为什么由 L-graph 确定的语言是上下文相关的,请检查上面显示的 L-graph 必须接受哪些字符串。

abc: \{\varepsilon, \varepsilon, \varepsilon\} \rightarrow \{a, (, \varepsilon} \rightarrow \{ab, (), <\} \rightarrow \{abc, (), <>\}\\* a^2b^2c^2: \{\varepsilon, \varepsilon, \varepsilon\} \rightarrow \{a, (, \varepsilon\} \rightarrow \{aa, ((, \varepsilon\} \rightarrow \{aab, ((), <\} \rightarrow \{aabb, (()), <<\} \rightarrow \{aabbc, (()), <<>\} \rightarrow \{aabbcc, (()), <<>>\}\\* a^5b^5c^5: \{\varepsilon, \varepsilon, \varepsilon\} \rightarrow \{a, (, \varepsilon\} \rightarrow \ldots \rightarrow \{aaaaa, (((((, \varepsilon\} \rightarrow \{aaaaab, (((((), <\} \rightarrow \ldots \rightarrow \{aaaaabbbbb, ((((())))), <<<<<\} \rightarrow \{aaaaabbbbbc, ((((())))), <<<<<>\} \rightarrow \ldots \rightarrow \{aaaaabbbbbccccc, ((((())))), <<<<<>>>>>\}

最后,我想添加三个其他我将在未来使用的定义。这些定义对于假设[及其未来的证明或反证]非常重要。参考——假设(语言规律)和算法(L-graph to NFA)

如果两个括号字符串都正确,我们将在 L-graph 中称为中性路径。如果中性路径 T 可以这样表示,则 T = T_1T_2T_3 , 在哪里T_1T_3是循环和T_2是一条中性路径( T_1 , T_2要么T_3可以是空的),T 称为巢。我们也可以说三个( T_1 , T_2 , T_3 ) 是一个巢或那个T_1T_3在路径 T 中形成一个巢。

( \omega , d)-L-graph G 中的核,定义为 Core(G, \omega , d), 是一组 ( \omega , d)-佳能。 ( \omega , d)-canon, 其中\omega和 d 是正整数,是一条最多包含 m 的路径, m \leqslant \omega , 中性循环和至多 k, k k \leqslant d d,可以这样表示的嵌套: T_1_1...T_1_kT_2_1T_3_1...T_3_k是路径 T 的一部分, T_i_l , 我 = 1 或 3, 1 \leqslant l \leqslant k , 是循环, 每条路径T_1_jT_2_jT_3_j是一个巢,在哪里T_2_j = T_1_(_j_-_1_)T_2_(_j_-_1_)T_3_(_j_-_1_) , 2 \leqslant j \leqslant k-1 .

最后一个定义是关于上下文无关的 L-图。如果 G 只有一个括号组,则 L-graph G 称为上下文无关(L-graph 中的所有规则都只有这两者中的一种:['symbol' | 'bracket', ?] 或 ['symbol' | ? , '括号'])。

[Dyck 语言的定义。 \Sigma_(\Sigma_)是不相交的字母。存在一个双射(第一个集合中的每个元素都匹配第二个集合中的一个且只有一个元素的函数) \phi: \Sigma_( \rightarrow \Sigma_) .然后是语法定义的语言S \rightarrow \varepsilon | aSbS , a \in \Sigma_(, b = \phi(a) ,我们将称之为 Dyck 语言。]