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
[Merged by Bors] - feat(tactic/itauto): add support for [decidable p] assumptions #10744
Conversation
What's the relation now between import tactic
example (p : Prop) : p ∨ ¬ p :=
by tauto |
|
So This is a mess that needs cleaning. Will post on Zulip in a bit. |
Given the situation with exponential blowup, I've reverted the default behavior of |
Thanks for the changes! bors merge |
This allows proving theorems like the following, which use excluded middle selectively through `decidable` assumptions: ``` example (p q r : Prop) [decidable p] : (p → (q ∨ r)) → ((p → q) ∨ (p → r)) := by itauto ``` This also fixes a bug in the proof search order of the original itauto implementation causing nontermination in one of the new tests, which also makes the "big test" at the end run instantly. Also adds a `!` option to enable decidability for all propositions using classical logic. Because adding decidability instances can be expensive for proof search, they are disabled by default. You can specify specific decidable instances to add by `itauto [p, q]`, or use `itauto*` which adds all decidable atoms. (The `!` option is useless on its own, and should be combined with `*` or `[p]` options.)
Pull request successfully merged into master. Build succeeded: |
This allows proving theorems like the following, which use excluded middle selectively through `decidable` assumptions: ``` example (p q r : Prop) [decidable p] : (p → (q ∨ r)) → ((p → q) ∨ (p → r)) := by itauto ``` This also fixes a bug in the proof search order of the original itauto implementation causing nontermination in one of the new tests, which also makes the "big test" at the end run instantly. Also adds a `!` option to enable decidability for all propositions using classical logic. Because adding decidability instances can be expensive for proof search, they are disabled by default. You can specify specific decidable instances to add by `itauto [p, q]`, or use `itauto*` which adds all decidable atoms. (The `!` option is useless on its own, and should be combined with `*` or `[p]` options.)
This allows proving theorems like the following, which use excluded middle selectively through
decidable
assumptions:This also fixes a bug in the proof search order of the original itauto implementation causing nontermination in one of the new tests, which also makes the "big test" at the end run instantly.
Also adds a
!
option to enable decidability for all propositions using classical logic.Because adding decidability instances can be expensive for proof search, they are disabled by default. You can specify specific decidable instances to add by
itauto [p, q]
, or useitauto*
which adds all decidable atoms. (The!
option is useless on its own, and should be combined with*
or[p]
options.)