四、自动机运算
1. 一元运算
可达Ac(G)
只包含自动机G所有初始状态 x0 可达的状态,删除自动机G中所有初始状态 x0 不可达的状态及其状态转移函数及转移到该状态的转移函数
具体为Ac(G) := (Xac,E,fac,x0,Xac,m) Xac = {x ∈ X :(∃s ∈ E∗)[f(x0,s)=x]} Xac,m = Xm ∩ Xac
共和可达CoAc(G)
只包含自动机G中可达到标记状态Xm的所有状态,不论x0是否可达该状态
具体为CoAc(G):=(Xcoac,E,fcoac,x0,coac,Xm) Xcoac = {x ∈ X :(∃s ∈ E∗)[f(x, s) ∈ Xm]} x0,coac = x0 if x0 ∈ Xcoac defined otherwise
精简Trim(G)
只包含所有初始状态x0可达且能达到标记状态Xm的状态Trim(G):=CoAc[Ac(G)] = Ac[CoAc(G)]
2. 合成运算
积
只有两个自动机G1,G2同时发生该事件,在积中该事件才发生,否则不能发生
G1 × G2 := Ac(X1 × X2,E1 ∪ E2,f, Γ1(x1) ∩ Γ2(x2),Xm1 × Xm2)
f((x1,x2),e):=
(f1(x1,e),f2(x2,e)) if e ∈ Γ1(x1) ∩ Γ2(x2)
undefined otherwise
性质
1. L(G1 × G2)=L(G1) ∩L(G2)
2. Lm(G1 × G2)=Lm(G1) ∩ Lm(G2)
3. G1 × G2 = G2 × G1
4. G1 × G2 × G3 = (G1 × G2) × G3 = G1 × (G2 × G3)
并行
只要有两个自动机G1,G2中的任意一个发生该事件,在并行中该事件就会发生
G1 || G2 := Ac(X1 × X2,E1 ∪ E2,f,Γ1||2, (x01,x02),Xm1 × Xm2)
f((x1,x2),e):=
(f1(x1,e),f2(x2,e)) if e ∈ Γ1(x1) ∩ Γ2(x2)
(f1(x1,e),x2) if e ∈ Γ1(x1) \ E2
(x1,f2(x2,e)) if e ∈ Γ2(x2) \ E1
undefined otherwise
其中
性质
1.
2.
3.
4.
5. 交换律G1 || G2 = G2 || G1
6. 结合律(G1||G2)||G3 = G1||(G2||G3)
注:引入E2\E1={e : e
P−11[L(G1)] 表示在G1的每个状态上添加属于E2\E1的事件的闭环,以此来确保G2上的私有事件在G1上也可以执行
由此
P−11[L(G1)]∩P−12[L(G2)] 确保了两个自动机G的私有事件及两者的公共事件都能被执行
当E1=E2时并行运算退化为积运算
3.非确定性自动机的观察自动机
定义非确定性自动机
空转移
定义不确定状态集εR(x) 为非确定自动机中状态x经一次或多次ε 空转移后 能达到的所有状态及x本身的集合。
定义扩展后的状态转移函数如下fext(x,ε):=εR(x)
fext(x,ue):=εR[{z:z∈f(y,e)wherey∈fext(x,u)}] 构建观察自动机
构建Obs(G)=(Xobs,E,fobs,x0,obs,Xm,obs) 如下:- 定义
x0,obs:=εR(x0) 且Xobs={x0,obs} 注意到观察自动机Obs(G)的所有状态都是原非确定性自动机状态的集合,比如初始状态
x0,obs
对于每一个Obs(G)的状态B∈Xobs 和事件e∈E ,定义fobs(B,e):=εR({x∈X:(∃xe∈B)[x∈f(xe,e)]})
若对于任意xe∈B ,f(xe,e) 都未定义,则fobs(B,e) 无定义重复第二步直到所有可达部分都被建立
-
Xm,obs:={B∈Xobs:B∩Xm≠∅}
性质:
- Obs(G)是确定型自动机
- L(Obs(G))=L(G)
- Lm(Obs(G))=Lm(G)
- 定义
4.正则语言
一个语言被称为是正则的当该语言可以被一个有限状态自动机标记(识别)
正则语言L的前缀
L¯¯ ,星L∗ ,补Lc:=E∗╲L ,并,交,连接仍是正则语言
另外还可以用正则表达式描述正则语言,如下
∅ 是空集的正则表达式,ε 是空串集合{ε} 的正则表达式,e是集合{e}的正则表达式
如果r和s是正则表达式,则rs,(r+s),r∗ ,s∗ 是正则表达式
任何正则语言可以被表述为正则表达式,反之亦然。
5.最小化自动机
自动机最小化的关键在于等价状态对可以合并为一个状态。
定义两状态x,y是等价的当
对所有的输入串w,f(x,w)是标记状态当且仅当f(y,w)是标记状态
若两状态x,y不是等价的,则称x,y是可区分的。
利用填表算法找到自动机中的可区分对,其步骤为:
基础:若x是标记状态而y不是标记状态,则{x,y}是可区分的
归纳:若存在某个输入符号a,{r=f(x,a), s=f(y,a)}是已知的可区分状态对,则{x,y}是可区分状态对
若不能区分两个状态对,则其为等价状态对。
合并相互等价的状态块为一个状态,删除初始状态不可达的状态,最后得到的自动机即为最小化的自动机。
五、部分可观自动机
自动机G=(X,E,f,x0,Xm),其中
定义部分可观下的自然投影P为
P:E∗→E∗o
P(a)=a ifa∈Eo
P(a)=ε ifa∈Euo ora=ε
P(sa)=P(s)P(a) wheres∈E∗,a∈E
含不可观事件自动机的观察自动机
定义UR(x)为状态x及x经一个或多个不可观事件(
- 定义
x0,obs := UR(x0),Xobs={x0,obs} 对于G中的每个状态
B∈Xobs 及e∈Eo ,定义fobs(B,e):=UR({x∈X:(∃ee∈B)[x∈f(xe,e)]}) 重复步骤2直到Obs(G)所有可达状态被建立
-
Xm,obs:={B∈Xobs:B∩Xm≠∅}
性质:
1. Obs(G)是确定型自动机
2. L(Obs(G))=P[L(G)]
3. Lm(Obs(G))=P[Lm(G)]
诊断性
由于书本中关于诊断性的内容太过模糊,本部分内容来自Meera Sampath 1995年的论文Diagnosability of discrete-event systems
标记
标记
定义一个语言L为活语言当初始状态经该语言转移后可到达该确定型自动机的标记状态,即
L为活语言
⇔ f(x0,L)∈Xm
标记
Ψ(Efi)={saf∈L:af∈Efi}
定义一个前缀封闭的活语言L 可诊断 当
(∀i≤m)(∃ni∈N)[∀s∈Ψ(Efi)](∀t∈L/s)[||t||≥ni⇒D
诊断条件D为
w∈P−1[P(st)]⇒Efi∈w
直观的说就是语言L中任意一个与串st投影后结果相同(即看起来一样)的字符串一定包含
更具体的说就是只要看到了该串与s投影后的串相等后,若接下来再有长度大于等于