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

Add forced and promoted subgoals #114

Open
JLimperg opened this issue Feb 28, 2024 · 0 comments
Open

Add forced and promoted subgoals #114

JLimperg opened this issue Feb 28, 2024 · 0 comments

Comments

@JLimperg
Copy link
Collaborator

It sometimes happens that an Aesop rule has a premise that will always be true in practice, but Aesop can't always prove it. In such cases, it would be nice if Aesop could try to construct a proof under the assumption that the premise holds and then report the premise to the user as an additional subgoal.

I propose the following syntax and semantics for this feature:

  • A new builder option (force := [p_1, .., p_n]), applicable to forward/destruct and apply rules. The p_i are premises of the rule. For forward/destruct rules, the p_i automatically become non-immediate, so they are treated as additional subgoals which Aesop will try to prove recursively. (For apply rules, all premises are treated this way.) When Aesop fails so prove such a 'forced' goal, it nevertheless considers the goal proven and reports it to the user as an additional subgoal (if the proof is otherwise successful).
  • A new builder option (force! := [p_1, ..., p_n]). Works like force, but Aesop does not even try to prove the forced subgoals; instead it always reports them to the user (if the proof is otherwise successful).
  • A new builder option (promote := [p_1, ..., p_n]) for conditional simp rules. The p_i are again premises of the rule. When simp attempts to discharge a premise p_i, it usually runs simp on it and considers the premise proved if simp rewrites it to True. With the promote option, simp instead rewrites with the rule immediately (assuming that all other premises are successfully discharged) and leaves the p_i as additional 'promoted' subgoals for Aesop.
  • The builder options force and force! can also be applied to simp rules, with the effect that the premises are both promoted and forced.
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

No branches or pull requests

1 participant