Chopper: More fine grained dependency analysis for domain axioms#776
Conversation
|
I have a question about the axiom dependencies based on triggers: If an axiom has any trigger that does not require a specific domain function to be used, then... what are the dependencies? |
Co-authored-by: João Pereira <joaopereira.19@gmail.com>
Co-authored-by: João Pereira <joaopereira.19@gmail.com>
…all usages within quantified expression
…t/silver into fewolf_finer_chopper
|
@marcoeilers I assume you meant the axiom For the axiom |
This PR makes two changes to the chopper that I explain below:
Changes the dependency analysis for domain axioms
The PR changes how dependencies for domain axioms are defined. Before, for an axiom A, we added dependencies from all uses in A to A and from A to all uses in A. These dependencies have two issues:
The PR does the following changes:
Consider the following domain:
Previously, the dependencies were (omitting dependencies to D): A -> bar, A -> baz, bar -> A, baz -> A
With the PR the dependencies are instead: A -> bar, A -> baz, bar -> A
Makes the chopper extendable
In short, the PR changes all objects to traits. To avoid polluting the namespace, I moved the chopper into a separate package.
Changes to the code
Unfortunately, Github does not recognize that the new Chopper file is based on the previous one.
Below, I give a list of all code changes without changes to signatures (to replace objects with traits):
Edges.directUsagesmethod. The method is a non-transitive version ofEdges.usages.ast.Domaincase of theEdges.dependenciesmethod. This case implements the change to the logic as described above.