-
Notifications
You must be signed in to change notification settings - Fork 21
Description
We need to implement a proper algorithm for equivalence checking of two NFTs. The existing implementation transforms NFT into an NFA by unwinding jump transitions. And then tests those NFAs using nfa-equivalence checking. However, there is a noticeable number of cases when this approach returns false instead of true.
The existence of a proper implementation would simplify the debugging of algorithms operating on NFT. It is impossible to debug algorithms operating and changing NFTs by only looking at their output. We need to be able to detect deviations from a correct NFT during the algorithm's execution. This is not possible with the existing equivalence checking algorithm.
Examples:
The following examples show two equivalent NFTs that are not recognized as such by the equivalence checking algorithm. Even the use of nft::remove_epsilon does not help, as it only removes epsilon transitions between zero-level states.

