-
Notifications
You must be signed in to change notification settings - Fork 87
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
feat: make xor
semireducible
#512
Conversation
I'm supportive of making this distinction between What's the intuition behind why the new normal form is good? |
To clarify the example, this simp only applies when The problem with This is related to some core issues like leanprover/lean4#2038 |
How about we also add a Xor instance for Bool so the |
Core defines notations |
Thanks for the reference to I may be overthinking, but perhaps we should define the 3-character operations over The two character connectives are logical operations and can reduce to propositional reasoning. These should be preferred in defining predicates (e.g. for The three character connectives are data operations and will never reduce to |
Another way would be to use |
@joehendrix Gentle ping! If you find some time to come back to this PR, I have a current project that needs this. |
@fgdorais Sorry for the silence. I think with all the upstreaming going on, there's a lot of risk with creating conflicts with the next version. The other thing I'm a bit concerned with this is that the existing I'm working on an overhaul of the I should have a draft PR to Lean 4 within a day or two. Once that's in; then I think |
moved to core |
Stemmed from the discussion at #464.
Making
xor
semireducible makes it so thatxor
andbne
can have distinct simp normal forms. For example, with the changes in this PRxor (!x) (!y && x) = true
simplifies to¬(x = false ↔ y = false ∧ x = true)
instead of¬(!x) = (!y && x)
.