private int GetMaxStateId(IEnumerable<TreeRule> rules)
{
HashSet<Expr> states = new HashSet<Expr>();
HashSet<Expr> botStates = new HashSet<Expr>();
int res = -1;
foreach (var rule in rules)
{
int k = tt.Z.GetNumeralInt(rule.state);
states.Add(rule.state);
if (k > res)
res = k;
for (int i=0; i < rule.Rank; i++)
foreach (var s in rule.Lookahead(i))
botStates.Add(s);
}
if (!states.IsSupersetOf(botStates))
throw new AutomataException(AutomataExceptionKind.TreeTransducer_UndefinedState);
return res;
}