The Fundamental Theorem of Algebra in ACL2
arxiv.org
arxiv.org
That is, I'm an economist and I regularly want to prove stuff that would be far below the level of a real mathematician. Simple problems in R or R^N with continuous functions and maybe the output will be "such and such an optimal solution is increasing in some parameter". Right now there's mathematica, which can be useful but won't really do stuff on its own - it'll rearrange an equation but I can't ask it "prove this is increasing". Or there are these high level systems for proving deep theorems. Is anyone trying to fill the gap?
Note that automated theorem provers is not the same as proof assistant. With ATPs you delegate most of the work to some proof search, whereas with proof assistants the human drives most of the work (which is more manual but lets you tackle much more complex and undecidable domains).
> Right now there's mathematica, which can be useful but won't really do stuff on its own - it'll rearrange an equation but I can't ask it "prove this is increasing".
The problem with Mathematica (and others) it is both unverified and proprietary, so if your work relies on it you are depending on a huge trusted code base not having mistakes (extremely unlikely).
I recently took an undergraduate course on real analysis, and was able to formalize quite a bit (within reason) from the class in Coq[0]. In fact, it even aided my reasoning, for instance I wasn't ensure the following inequality was true, but Coq made quick work of it.
Lemma test2 :
forall (x y z d : R),
Rabs (z - y) < d ->
Rabs (x - z) < Rabs (z - (y - d)) ->
Rabs (x - z) < Rabs (z - (y + d)) ->
Rabs (x - y) < d.
Proof. intros; split_Rabs; lra. Qed.
> Or there are these high level systems for proving deep theorems. Is anyone trying to fill the gap?There's ongoing work on computable real numbers for instance the CoRN library[1], so hope is on the horizon, for instance, a recent update to the Coq Interval package adds certified plotting, that is, the library guarantees that if a function passes through a pixel, that pixel is filled[2]. There's also the user-friendly Coquelicot[3] real analysis library up to basic differential equations (e.g. Bessel function).
> It'll rearrange an equation but I can't ask it "prove this is increasing"
For a taste, here's my proof that the cube function is increasing[4]. If I wanted to create a tactic that automatically proves a function is increasing, I would use properties of increasing functions[5] to recursively break it down into trivial subcases.
[0] https://github.com/siraben/math-3100/blob/master/analysis.v
[1] https://github.com/coq-community/corn
[2] https://coq.discourse.group/t/interval-4-2-now-with-plotting...
[3] https://hal.inria.fr/hal-00860648v1/document
[5] https://www.math24.net/increasing-decreasing-functions#h-pro...
> Is anyone trying to fill the gap?
I don't think that the state of things is likely to improve because automatic theorem proving is equivalent to the halting problem.
What you're describing is work that is best suited for computer algebra software.
What kind of axiomatic basis is being used in ACL2 and similar systems? Is the basics just modus ponens and the axioms are provided as a library? Or do the different systems have significant differences with how and what they can prove? Do the systems allow explorations in reverse maths, trying to derive stuff with as little axioms as possible?
> What kind of axiomatic basis is being used in ACL2 and similar systems?
ACL2 uses first-order logic and term rewriting, but this significantly hinders proof automation (done by ad-hoc searches).
> Or do the different systems have significant differences with how and what they can prove?
Yes. First-order logic can only quantify over individual elements of a set, second-order logic can quantify over sets, and so on. Higher-order logic is the foundation of assistants like Isabele/HOL light, which let you use classical reasoning.
Alternatively (and better from an engineering standpoint) are assistants based on type theory, such as Agda, Coq and Lean. Their kernels are just type checkers, which are relatively small programs, so theorem proving in those systems is literally just functional programming with a fancy type system (though exactly how those proofs are constructed is a UX choice).
> Do the systems allow explorations in reverse maths, trying to derive stuff with as little axioms as possible?
Yes, in Coq you can print out the axioms (on top of the type system) that a result depends on. See [4] for information on Coq's logic and what axioms you can safely add (they are necessary for certain areas of math).
[0] (Coq) https://softwarefoundations.cis.upenn.edu/
[1] (Agda) https://plfa.github.io/
[2] (Isabelle) http://concrete-semantics.org/
[3] (Lean) https://www.ma.imperial.ac.uk/~buzzard/xena/natural_number_g...
https://en.wikipedia.org/wiki/ACL2
It is a environment for formal logic and theorem proving.
I am guessing the Fundamental Theorem of Algebra is a fairly well established and uncontroversial result after 275 years!
Can anyone with familiarity of the field explain what the significance of proving this with ACL2(r) is?
i only took pure math to undergrad level, but sitting in lectures and having a particular proof explained was often fairly frustrating ("why on earth would we think of applying that particular trick there?" "where on earth did that idea come from?") from the perspective of thinking how you (or a machine) might go about methodically discovering a proof for yourself.
https://sci-hub.se/https://doi.org/10.1007/s00283-015-9572-7