Adding Axioms to COQ often makes proofs easier but also introduces some side effects. For instance, by using the classical axiom one leaves the intuitionistic realm and proofs are no longer computable. My question is, what is the downside of using the functional extensionality axiom?
相关问题
- Rewriting with John Major's equality
- Can canonical structure resolution be interleaved
- Defining recursive function over product type
- coq: elimination of forall quantifier
- How do I change a concrete variable to an existent
相关文章
- coq error when trying to use Case. Example from So
- How to switch the current goal in Coq?
- What does “Error: Universe inconsistency” mean in
- Coq - use Prop (True | False) in if … then … else
- Consistent formulations of sets in Coq?
- Different induction principles for Prop and Type
- Coq: Prop versus Set in Type(n)
- Coq can't compute a well-founded function on Z
For me, the drawbacks of using functional extensionality are more or less the same as using any other axiom in Coq: it increases the complexity of the system and how much we need to trust. Although in theory we understand fairly well the logical consequences of working with these well-known axioms (e.g., what combinations of axioms must be avoided to ensure consistency), in practice we are sometimes caught off guard. For instance, it was recently found out that the propositional extensionality axiom was inconsistent with Coq's theory in version 8.4, even though it was widely believed to be consistent. This seemingly natural axiom simply says that equivalent propositions are equal, and is adopted in many Coq developments:
In the answer linked above, Andrej Bauer suggests that this fragility could be related to these axioms not having computation rules associated with them, contrary to the rest of Coq's theory.
Besides this general remark, I've heard people say that having functional extensionality by default could be undesirable because it equates functions with very different computational behaviors (e.g., bubble sort and quick sort), and that we might want to reason about these differences. I personally don't buy this argument, since Coq already equates many values that are computed very differently, such as
0
and47^1729 - 47 mod 1729
. I am not aware of other reasons for not wanting to assume functional extensionality.