Applications: Mathematical Proofs and Automated Reasoning 255 (lemmas) and goals to optimize and direct the proof search in order to be completed successfully in a reasonable amount of time and memory space This approach is known as interactive theorem proving A number of very successful systems for automated or interactive reasoning, such as ACL2, Agda, Coq, HOL, Isabelle, LEGO, Mizar, NuPRL, PVS, TPS, and Twelf have been designed and used to develop practically useful computer-aided proof assistants, while many of them can also be run in a fully automatic mode Some of these systems, such as Isabelle, can be used as generic platforms for implementing other specific deductive systems for object logics, the axioms and rules of which can be formulated within Isabelle’s metalogical language The most commonly used formal logical language for automated reasoning is first-order logic, but there are also several highly successful systems for fully automated or interactive reasoning for non-classical or higher-order logics, based on various deductive approaches such as lambda calculus, functional programming, term rewriting, resolution, and tableaux Automated and interactive theorem-proving systems have been very useful in many areas of mathematics In particular, they have been instrumental for solving several open problems in algebra, graph theory, logic, geometry, combinatorics, and calculus Some notable examples include the proofs of: the Four Color Theorem, stating that every map in a plane can be colored using at most four colors in such a way that regions sharing a common boundary not share the same color, in 1976; the non-existence of a finite projective plane of order 10, in 1989; Robbins conjecture that every “Robbins algebra” (that is, algebra satisfying certain algebraic identities) is a Boolean algebra, in 1996; and Kepler’s Conjecture (stating that the optimally dense sphere packing in a box is for cubic or hexagonal arrangements), in 1998 Most of the practically efficient systems for automated reasoning in first-order logic have their inference engines based on various refinements and improvements of resolution The currently most popular implemented systems for resolution-based automated theorem proving include E-SETHEO, Prover9 (successor of Otter, one of the first implemented systems for automated reasoning), SNARK, SPASS, Vampire Some of these are well supported and easy both to install and use online; some of the exercises ask you to make use of them 5.4.2 Logic programming and Prolog Logic programming is a declarative programming style where the idea is to describe, using a formal logic-based language, what the program is supposed to compute rather than explicitly providing the instructions of how this should be executed, typical of the imperative style of programming languages A program written in a logic programming language is therefore just a set of sentences in a formally specified logical language, expressing facts, assumptions, and conjectures or queries about the problem domain The concept of logic programming can be traced back to the late 1960s–early 1970s, just after the invention of the method of resolution with unification by J.A Robinson, when an intensive debate was underway on the topic of declarative versus procedural knowledge representation and processing in the area of artificial intelligence Currently,