It seems that importing Reals
makes tauto
start using excluded middle, and the message for tauto failing changes to mention "classical tauto". I haven't found any documentation on this "classical tauto". I'd especially like to be able to switch it off.
Same question, but I’d like docs on how to switch on. Without Reals.
It probably comes from importing the Classic* axioms, but I didn’t know tauto supported using it.
From the code, it's enough to have the core.nnpp.type
reference registered.
To turn it on, you thus only have to require Coq.Logic.Classical_Prop
I don't know how to turn it off though, maybe registering a dummy definition over the old one is enough?
Seems to be enough indeed.
So, something along the lines of Register tt as core.nnpp.type.
should turn off the classical tauto.
It's quite hackish, definitely.
En passant, it's yet another Require-bound behaviour...
I'm curious as to why you want to switch it off. My understanding is that the excluded middle follows from the axiomatization of real numbers found in the Reals
module, so once you are working with this version of the reals your setting is unavoidably classical. Are you defining terms with tauto
? Or is classical tauto
slower?
The real axiomatization is weaker than full excluded middle, though.
It's a hodgepodge of quite classical axioms, but not completely so IIRC
It was rewritten recently amongst others to clean up that matter, and from a cursory look now it only depends on LPO in Type, WEM in Type and (dependent) funext
I'm proving things that have nothing to do with Reals
, I'd rather not accidentally depend on axioms.
It was rewritten recently amongst others to clean up that matter, and from a cursory look now it only depends on LPO in Type, WEM in Type and (dependent) funext
Why does it still transitively require Classical_Prop
then?
Previous issue about this change of behavior of tauto
: https://github.com/coq/coq/issues/5444
If I'd to guess I'd say "backwards compat" although the require seems deliberate in RieamannInt and Rtopology
To be clear, the change of axioms in the lower layers of real numbers were no meant to clean them at all. The goal was to make it constructive rather than axiomatic. As a consequence, the newer axioms are actually stronger than before. In particular, functional extensionality was not needed before, and it is now. (LPO and WEM could be deduced from the old axioms. Functional extensionality could not.) So, that is kind of a regression (but that was the price to pay for constructive real numbers).
But that is the only for the lower layers. The upper layers of real analysis have not been rewritten at all. They were using the excluded middle before, and they are still using it now. For Riemann integration, this axiom is not needed (as we have proved in Coquelicot), though that is no small work to rewrite the current formalization. But for compactness, there is no real way around it. If you want a definition that looks like the traditional one ("you can extract a finite cover from any cover"), then you need excluded middle.
Last updated: Oct 13 2024 at 01:02 UTC