オートマトンが決定論的であるかどうかを返すモジュールを数学で作りたい。同じ状態で始まり、同じシンボルを読み取る2つの遷移がある場合、または空の遷移が存在する場合、オートマトンは決定論的ではないと考えています。
このコードをデバッグしたいのですが、できません:
isDeterministic[au_] := Module[{a, s},
For[i = 1, i <= Length[au[[3]]],
a = au[[3]][[i]][[1]];
s = au[[3]][[i]][[2]];
If[s == {}, Return[False]];
For[j = i, j <= Length[au[[3]]],
If[a == au[[3]][[j]][[1]] && s == au[[3]][[j]][[2]],
Return[False]];
j++;
];
i++;
];
Return[True];
]
A = {{1, 2},
{a, b},
{{1, a, 2}, {2, b, 1}},
1,
{2}
}
isDeterministic[A]
Aはオートマトンで、最初の要素は状態のリスト、2番目はアルファベット、3番目は遷移、4番目は初期状態、5番目は最終状態のリストです。
主な問題は、関数をAに適用すると、関数が終了しないことです。
編集:解決済み
これが最終的なコードです。
isDeterministic[au_] :=
Module[{a, s, lambda},
For[i = 1, i <= Length[au[[3]]], i++, a = au[[3]][[i]][[1]];
s = au[[3]][[i]][[2]];
If[s == lambda, Return[False]];
For[j = i + 1, j <= Length[au[[3]]], j++,
If[a == au[[3]][[j]][[1]] && s == au[[3]][[j]][[2]],
Return[False]]]];
True]
A = {{1, 2},
{a, b},
{{2, b, 1}, {1, a, 2}},
1,
{2}
}
isDeterministic[A]
True