Skip to content
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

[WIP] term annotations #437

Closed
wants to merge 15 commits into from
Closed

[WIP] term annotations #437

wants to merge 15 commits into from

Conversation

robdockins
Copy link
Contributor

Fairly major refactoring to replace the AssertionTree and related data structures with inline term annotations. This hopefully will fix performance problems, and also allow more sophisticated proof condition explanations.

This will have relatively significant client package impacts, so I'm spinning up this PR before its fully done to have CI assist with figuring out where updates need to be made.

types.  This propigates this new parameter to a variety of other types
and touches quite a few type signatures.

I beleive this patch is a purely type-level change.
This makes the argument order considerably more uniform and less confusing.
push minimial corrections into downstream packages.  This mostly
involves selecting "dummy" annotations when creating symbolic
backends.
…llvm.

Instead, a language-extension expression former `LLVM_SideConditions` has
been added that directly references the `LLVM_SafetyCondition` type.
`PartialExpr` and `AssertionClassifier` class constraints.

The LLVM memory model is now the only place where assertion trees
are used.  Next, they will instead be replaced by internal predicate
annotations.
verifying that the representation details don't leak very far.
MemModel.Generic is the only other module impacted.
is a constructor of the `Expr` datatype rather than the `App` datatype.
This has a few advantages, among them that the `App` datatype requires
fewer type parameters this way.

In addition, we lift the restriction that the annotation type be hashable
and have an equality test. Instead, we allocate a fresh nonce when
`annotateTerm` is called and use that as a proxy for the annotation.
As a result, hash-consing will not coallesce idential terms with
the same annotations.  I expect this will be an uncommon occurence.
However, it means that the equality test for identical terms will
be quick, regardless of the structure of the annotations, and avoids
propigating annoying class restrictions throughout the code.
@robdockins
Copy link
Contributor Author

I'm thinking this isn't the correct approach anymore.

@robdockins robdockins closed this Feb 13, 2020
@robdockins robdockins deleted the rwd/annotations branch February 25, 2020 22:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant