-
Notifications
You must be signed in to change notification settings - Fork 129
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
HolSmt: track Z3-defined variables across proof replay
It turns out that there are multiple reasons for why keeping track of Z3-defined variables is desirable (or perhaps even needed) during proof replay. One of the issues is that when removing definitions, term unification may end up creating new definitions of this form: var1 = var2 ... where `var1` was not in the previous set of variables that we were keeping track of for removal. This would cause such definitions to be ignored when calculating the new set of definitions to remove. Another reason is that we want to avoid ending up with circular definitions such as: var1 = var2 var2 = var1 ... where `var1` and `var2` are both Z3-defined variables. To prevent this, we can orient such definitions so that `var2 = var1` is always translated into `var1 = var2` (where `var1` <= `var2`, for some definition of `<=`), i.e. we can always create them in a canonical orientation. Keeping track of Z3-defined variables also allows us to orient definitions created due to term unification (e.g. as part of `rewrite` proof rules) such that they end up as `var = x` instead of `x = var`, where `x` is a user-defined variable and `var` is a Z3-defined variable. Therefore, this commit adds code to keep track of which variables have been defined by Z3. As a side effect, it fixes the first issue mentioned above. A subsequent commit will use this functionality to orient the definitions appropriately during proof replay, which will fix the remaining two issues.
- Loading branch information
1 parent
313365a
commit 4b76320
Showing
5 changed files
with
81 additions
and
56 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters