Now solve the solved form
Propagate
Propagate
Propagate
Contradiction
OSTRICH uses proof rules to search for a solution or contradiction.
We write rules upwards
From
"Standard" rules. E.g.
Notice
The more interesting rules propagate regular constraints
Is this enough to solve
No: what do we do with
Or more precisely
For concat, we can have a rule
Given
We can push
On the condition that
Works for multiple arguments
We can support several string functions with forward propagation
What about
( )
Replace each instance of "cat" in
For fixed strings
What if the leopard is a variable?
Non-regular
We can't combine these to get a regular constraint on
because
We can combine
to get a regular constraint on
That is,
What about
We have the following constraints on
We don't get separate constraints on
Allows e.g.
A recognisable constraint is a finite-union of regular products.
In general
In general, for
We then get the backwards rule
Several functions can run backwards, even if they are not forward-able.
Capture groups handled used prioritised streaming string transducers.
Complexity ranges from polynomial to a tower of exponentials.
Forward propagation tends to be cheaper, backwards richer.
We can conclude UNSAT if we find contradictory constraints
When can we conclude SAT?
A straight-line string constraint is of the form
where
Can be generalised to "chain-free".
(For non-straight-line constraints, we also have other ways of using SAT that can assign values using a
OSTRICH currently has limited support for integer functions.
However, OSTRICH-CEA uses cost-enriched finite automata to model string/integer functions.
Future work