3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2026-08-04 13:13:35 +00:00

Expand shady-parts notes in seq_monadic (N-relative nullability, epsilon handling, STATE_CAP)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 34aa9af0-4977-411d-aaa7-7cb81cc4e9f8
This commit is contained in:
Nikolaj Bjorner 2026-07-19 12:30:30 -07:00
parent e17fba7e39
commit 9c21f9e184

View file

@ -24,7 +24,12 @@ Author:
Shady parts:
- witness extraction is buggy. It should generally rely on a choice function that takes a
- epsilon transitions appear not accounted for when computing reaching states.
If a regex R contains N by taking a set of epsilon transitions, then it is nullable relative
to N. It suggests a use for a version of nullability that is relative to N.
Deal also with when N itself has epsilon transitions to N1, .., Nk.
- witness extraction is plain wrong. It should generally rely on a choice function that takes a
Boolean expression F[(:var 0)] with a single free variable and synthesize a value for the free
variable such that the expression is true.
For character predicates we can assume that the Boolean expressions are range predicates and we can
@ -36,6 +41,15 @@ Shady parts:
Generally, dealing with epsilon state is shady. There are many equivalent ways a state can be epsilon, such
as epsilon*, or comp(.+), etc.
- I don't think there should be a special case for when N is epsilon and having N being nullptr
is uneven.
The code uses "live_states" and "reaching_states" for two cases.
- The code in test_intersect shouldn't be relying on a rewriter. Anything that can be rewritten
could be done prior.
- Remove hard-wired constants such as STATE_CAP.
--*/
#include "ast/rewriter/seq_monadic.h"