Skip to content

NFT - Equivalence Checking #547

Description

@koniksedy

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.

Image
Image

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    For:libraryThe issue is related to library (c++ implementation)Module:nftThe issue is related to Nondeterministic Finite Transducerstype:optimizationThis issue is related to a possible optimization of an algorithm, improving the performance of Mata.type:requiredA required implementation/change necessary in near future

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions