-
Notifications
You must be signed in to change notification settings - Fork 63
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
Unify unit variables in heapster #1546
Conversation
…on.hs and TypedCrucible.hs
Regarding (5): Eddy says:
|
Experiencing a bug in
This is stemming from a call to This is in turn stemming from an instance of We are probably in trouble if we don't allow any unit variables to have the permission @eddywestbrook thoughts? |
Good job tracking that down! Yes, I see that assignment of a unit value to a fresh unit variable in the translation of The issue with allowing unit variables to have permissions like One idea is to add a special case to |
Is that actually sound? Is it better to add that special case to |
…dle the fact that the fresh variables it uses to instantiate evars may not have equality permissions to their instantiations; this required small tweaks to the SImpl_CastPerm rule and to how implCastStackM works
…saw-script into heapster/unify-unit-variables
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please address the small revisions I suggested in my comments. These are mostly about removing extra tracing statements that are not necessary in the debug output.
Otherwise, this is great, thanks for your hard work!
Trying to unify all unit-typed heapster variables.
We want to be able to introduce unit-typed phantom variables with opaque permissions, which can be used at the type level to indicate permission to do something even if there is no corresponding variable.
For example (from the worf project): we will define an opaque permission
watchdog_perm
and then axiomatize the following types, even though the functions take no arguments (as they work by sending messages to an external server).This PR goes about this in several parts:
ImplM
inImplication.hs
to track the first unit-typed variable we come across, and [9780c93] modifyingimplSetNameType
to correctly add permissions equating new unit-typed variables with this global type.PermCheckM
monad inTypedCrucible.hs
with the corresponding functionsetVarType
.recombine_perm
.heapster-saw/examples
.