How to define a transducer for convolution/interleaving projection? #404
hongjianjiang
started this conversation in
General
Replies: 2 comments 6 replies
|
Hi, currently, Z3-Noodler does not support parsing arbitrary transducers. The only way a transducer can be defined is trough However, we are planning to add the option to parse arbitrary transducers, probably trough the mata format. Then it would be possible to define transducers Do you have an example of a formula showing how you would use |
4 replies
|
Hi, thanks for this update. It solves my problem partially. While running my program, it returns unknown for the below fomula: The large regular expression is basically a three-state automaton, I give the graphviz format: |
2 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Hi,
I would like to ask how to define a transducer for a convolution/interleaving encoding in Z3-Noodler.
Background
In my setting, I have two strings
xandy, and I encode them using a padded convolution encoding.Intuitively, the convolution stores the two strings symbol by symbol. For example, without padding:
Here, the odd positions of the encoded string correspond to symbols from
x, and the even positions correspond to symbols fromy.I would like to define transducers or projection relations such that, given the encoded string,
Z3-Noodler can recover or check:
More generally, I want to support padded convolution. If one component is shorter, a padding symbol is used. For example, using
_as the padding symbol:The projection should ignore the padding symbol, so the result should be:
Desired Relation
Ideally, I would like to express a ternary relation such as:
where
stris the convolution encoding ofxandy.Equivalently, it would also be fine to define two projection relations:
where:
Proj1(str, x)extracts the symbols belonging to the first component and ignores padding.Proj2(str, y)extracts the symbols belonging to the second component and ignores padding.Question
How should this convolution/interleaving projection be written using Z3-Noodler's SMT-LIB transducer syntax?
For example, is the intended approach to define two recursive transducers that scan the encoded string and alternate between the first and second component?
Conceptually, I want something like:
Or is there a better way to define the ternary convolution relation directly as:
Example 1: Non-padded Case
I would like to check satisfiability of a formula like:
or, using projections:
The expected result should be:
Example 2: Padded Case
I would also like to support padding. For example, using
_as the padding symbol:or equivalently:
The expected result should also be:
What I Am Unsure About
I am not sure how to express this correctly in Z3-Noodler's transducer syntax.
In particular:
Proj1andProj2?Conv(str, x, y)directly?Thank you very much!
All reactions