-
Notifications
You must be signed in to change notification settings - Fork 237
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Local mutually recursive functions diverge in tactics #2849
Comments
Hi Amos, thanks for the report. Something fishy is definitely happening here. See for instance this, that does not fail: let visit_terms () : T.Tac unit =
let rec tm (): T.Tac unit =
T.fail "fail"
and unused () : T.Tac unit =
()
in tm ()
let nothing (): unit =
assert (True) by (
visit_terms ()
) Looking into it. |
mtzguido
added a commit
that referenced
this issue
Mar 13, 2023
mtzguido
added a commit
that referenced
this issue
Mar 13, 2023
mtzguido
added a commit
that referenced
this issue
Mar 13, 2023
mtzguido
added a commit
that referenced
this issue
Mar 13, 2023
Normalizer fix for mutually recursive functions (#2849)
Should be fixed now! Turned out to be a rather scary-looking normalization bug. Thanks again for the clear report! |
That was quick! Thanks Guido |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hi,
I just noticed that using
let .. and ..
for mutually recursive functions, inside a top-level function, was causing my proof to diverge. It seems OK if I lift them up to top-level mutually recursive functions, or inline the recursion to make it a single locally-recursive definition.Here is a small example that hangs for me:
The text was updated successfully, but these errors were encountered: