- let eval_trans l tree node fcs nss ps ss acc =
- List.fold_left (fun (acct, accs) ((q, phi) as trs) ->
- if StateSet.mem q accs then (acct, accs) else
- if eval_form phi tree node fcs nss ps ss then
- (acct, StateSet.add q accs)
- else
- (trs::acct, accs)
- ) ([], acc) l
+ let eval_trans cache ltrs node_info fcs nss ps ss =
+ let i = (ltrs.Ata.TransList.id :> int)
+ and j = (node_info.NodeInfo.id :> int)
+ and k = (fcs.StateSet.id :> int)
+ and l = (nss.StateSet.id :> int)
+ and m = (ps.StateSet.id :> int)
+ and n = (ss.StateSet.id :> int) in
+ let res = Cache.N6.find cache i j k l m n in
+ if res == Cache.N6.dummy cache then
+ let res =
+ Ata.TransList.fold (fun trs (acct, accs) ->
+ let q, _, phi = Ata.Transition.node trs in
+ if StateSet.mem q accs then (acct, accs) else
+ if eval_form phi node_info fcs nss ps accs then
+ (acct, StateSet.add q accs)
+ else
+ (Ata.TransList.cons trs acct, accs)
+ ) ltrs (Ata.TransList.nil, ss)
+ in
+ Cache.N6.add cache i j k l m n res; res
+ else
+ res