Skip to content

NFT - Equivalence Checking #547

@koniksedy

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    For:libraryThe issue is related to library (c++ implementation)Module:nftThe issue is related to Nondeterministic Finite TransducersPriority:normalWork on this sooner rather than later.Type: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