-
Notifications
You must be signed in to change notification settings - Fork 21
NFT - Equivalence Checking #547
Copy link
Copy link
Open
Labels
For:libraryThe issue is related to library (c++ implementation)The issue is related to library (c++ implementation)Module:nftThe issue is related to Nondeterministic Finite TransducersThe issue is related to Nondeterministic Finite TransducersPriority:normalWork on this sooner rather than later.Work on this sooner rather than later.Type:optimizationThis issue is related to a possible optimization of an algorithm, improving the performance of Mata.This issue is related to a possible optimization of an algorithm, improving the performance of Mata.Type:requiredA required implementation/change necessary in near futureA required implementation/change necessary in near future
Metadata
Metadata
Assignees
Labels
For:libraryThe issue is related to library (c++ implementation)The issue is related to library (c++ implementation)Module:nftThe issue is related to Nondeterministic Finite TransducersThe issue is related to Nondeterministic Finite TransducersPriority:normalWork on this sooner rather than later.Work on this sooner rather than later.Type:optimizationThis issue is related to a possible optimization of an algorithm, improving the performance of Mata.This issue is related to a possible optimization of an algorithm, improving the performance of Mata.Type:requiredA required implementation/change necessary in near futureA required implementation/change necessary in near future
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
falseinstead oftrue.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_epsilondoes not help, as it only removes epsilon transitions between zero-level states.