用户: Kokic/正则表达式与矩阵

1起始的物语

Matrix-state-1.svg

字母表 上具两个状态的自动机

其箭头可写为如下正则表达式

注 1.1. 右侧的表达式是直观的, 例如 匹配如下字符串

"", "a", "abc", "abdc", "aa", "aabc", "aabdc", ...

详细来说, 即

表示匹配空或多次

表示匹配

表示匹配 , , , ( 零次或多次)

再记 , 因此得到 [1.2]

随后, 由于 , 展开计算得

注 1.2. 此处 是沿用了闭包的记号 而非指伴随矩阵.

这个过程比经典方法更自然. 不仅如此, 对于更大的方阵其中 , 这仍然正确.

Matrix-state-2.svg

矩阵作为状态间的箭头

相应的记 , 有

可以正确地求得 .

2定义

Kleene 代数的一个重要例子是所谓的正则语言集 , 固定有限字母表 , 可定义如下

空集 是正则语言 (加法单位).

只包含空字符串的集合 是正则语言 (乘法单位).

对于 , 是正则语言.

对于正则语言 , . , 是正则语言.

上不存在其它正则语言.

这里 基本就是 , 但将配对 视为字符串拼接 . 闭包 定义为满足如下性质的最小集合.

匹配空. 即 .

对拼接封闭. 即 .

现在定义 Kleene 代数 . 一言以蔽之, Kleene 代数即为半环 且有偏序结构 [2.1] 并带上 Kleene 星运算 , Kleene 星运算或曰字符闭包满足如下闭包公理

注 2.1. 依通常定义, 即 .

我们重新指出, 给定有限字母表 , 六元组 构成 Kleene 代数.

回顾 起始的物语, 其正是如下事实的冰山一角

命题 2.2. Kleene 代数上的方阵与矩阵运算连同字符闭包运算一起构成另一个 Kleene 代数.

3例子

对于 , 现在来计算 . 首先算出将其分解成

立即计算出 , , 其他部分类似. 最后可以得到