# Software:Metamath

__: Formal language and associated computer program__

**Short description**Developer(s) | Norman Megill |
---|---|

Initial release | 0.07 in June 2005 |

Written in | ANSI C |

Operating system | Linux, Windows, macOS |

Type | Computer-assisted proof checking |

License | GNU General Public License (Creative Commons Public Domain Dedication for databases) |

Website | metamath |

**Metamath** is a formal language and an associated computer program (a proof assistant) for archiving and verifying mathematical proofs.^{[1]} Several databases of proved theorems have been developed using Metamath covering standard results in logic, set theory, number theory, algebra, topology and analysis, among others.^{[2]}

(As of September 2023), the set of proved theorems using Metamath includes 74^{[3]} of the 100 theorems of the "Formalizing 100 Theorems" challenge,^{[4]} making it fifth after Isabelle, HOL Light, Coq, and Lean.
There are at least 19 proof verifiers that use the Metamath format.^{[5]}
The Metamath website provides a database of formalized theorems which can be browsed interactively.^{[6]}

## Metamath language

The Metamath language is a metalanguage for formal systems. The Metamath language has no specific logic embedded in it. Instead, it can be regarded as a way to prove that inference rules (asserted as axioms or proven later) can be applied.
The largest database of proved theorems follows conventional first-order logic and ZFC set theory.^{[7]}

The Metamath language design (employed to state the definitions, axioms, inference rules and theorems) is focused on simplicity; it contains only a handful^{[clarification needed]} of keywords. Proofs are checked using an algorithm based on variable substitution. The algorithm also has optional provisos for what variables must remain distinct after a substitution is made.^{[8]}

### Language basics

The set of symbols that can be used for constructing formulas is declared using `$c`

(constant symbols) and `$v`

(variable symbols) statements; for example:

$( Declare the constant symbols we will use $) $c 0 + = -> ( ) term wff |- $. $( Declare the metavariables we will use $) $v t r s P Q $.

The grammar for formulas is specified using a combination of `$f`

(floating (variable-type)
hypotheses) and `$a`

(axiomatic assertion) statements; for example:

$( Specify properties of the metavariables $) tt $f term t $. tr $f term r $. ts $f term s $. wp $f wff P $. wq $f wff Q $. $( Define "wff" (part 1) $) weq $a wff t = r $. $( Define "wff" (part 2) $) wim $a wff ( P -> Q ) $.

Axioms and rules of inference are specified with `$a`

statements along with `${`

and `$}`

for block scoping and optional `$e`

(essential hypotheses) statements; for example:

$( State axiom a1 $) a1 $a |- ( t = r -> ( t = s -> r = s ) ) $. $( State axiom a2 $) a2 $a |- ( t + 0 ) = t $. ${ min $e |- P $. maj $e |- ( P -> Q ) $. $( Define the modus ponens inference rule $) mp $a |- Q $. $}

Using one construct, `$a`

statements, to capture syntactic rules, axiom schemas, and rules of inference is intended to provide a level of flexibility similar to higher order logical frameworks without a dependency on a complex type system.

### Proofs

Theorems (and derived rules of inference) are written with `$p`

statements; for example:

$( Prove a theorem $) th1 $p |- t = t $= $( Here is its proof: $) tt tze tpl tt weq tt tt weq tt a2 tt tze tpl tt weq tt tze tpl tt weq tt tt weq wim tt a2 tt tze tpl tt tt a1 mp mp $.

Note the inclusion of the proof in the `$p`

statement. It abbreviates the following detailed proof:

tt $f term t tze $a term 0 1,2 tpl $a term ( t + 0 ) 3,1 weq $a wff ( t + 0 ) = t 1,1 weq $a wff t = t 1 a2 $a |- ( t + 0 ) = t 1,2 tpl $a term ( t + 0 ) 7,1 weq $a wff ( t + 0 ) = t 1,2 tpl $a term ( t + 0 ) 9,1 weq $a wff ( t + 0 ) = t 1,1 weq $a wff t = t 10,11 wim $a wff ( ( t + 0 ) = t -> t = t ) 1 a2 $a |- ( t + 0 ) = t 1,2 tpl $a term ( t + 0 ) 14,1,1 a1 $a |- ( ( t + 0 ) = t -> ( ( t + 0 ) = t -> t = t ) ) 8,12,13,15 mp $a |- ( ( t + 0 ) = t -> t = t ) 4,5,6,16 mp $a |- t = t

The "essential" form of the proof elides syntactic details, leaving a more conventional presentation:

a2 $a |- ( t + 0 ) = t a2 $a |- ( t + 0 ) = t a1 $a |- ( ( t + 0 ) = t -> ( ( t + 0 ) = t -> t = t ) ) 2,3 mp $a |- ( ( t + 0 ) = t -> t = t ) 1,4 mp $a |- t = t

### Substitution

All Metamath proof steps use a single substitution rule, which is just the simple replacement of a variable with an expression and not the proper substitution described in works on predicate calculus. Proper substitution, in Metamath databases that support it, is a derived construct instead of one built into the Metamath language itself.

The substitution rule makes no assumption about the logic system in use and only requires that the substitutions of variables are correctly done.

Here is a detailed example of how this algorithm works. Steps 1 and 2 of the theorem `2p2e4`

in the Metamath Proof Explorer (*set.mm*) are depicted left. Let's explain how Metamath uses its substitution algorithm to check that step 2 is the logical consequence of step 1 when you use the theorem `opreq2i`

. Step 2 states that ( 2 + 2 ) = ( 2 + ( 1 + 1 ) ). It is the conclusion of the theorem `opreq2i`

. The theorem `opreq2i`

states that if *A* = *B*, then (*C F A*) = (*C F B*). This theorem would never appear under this cryptic form in a textbook but its literate formulation is banal: when two quantities are equal, one can replace one by the other in an operation. To check the proof Metamath attempts to unify (*C F A*) = (*C F B*) with ( 2 + 2 ) = ( 2 + ( 1 + 1 ) ). There is only one way to do so: unifying C with 2, F with +, A with 2 and B with ( 1 + 1 ). So now Metamath uses the premise of `opreq2i`

. This premise states that *A* = *B*. As a consequence of its previous computation, Metamath knows that A should be substituted by 2 and B by ( 1 + 1 ). The premise *A* = *B* becomes 2=( 1 + 1 ) and thus step 1 is therefore generated. In its turn step 1 is unified with `df-2`

. `df-2`

is the definition of the number `2`

and states that `2 = ( 1 + 1 )`

. Here the unification is simply a matter of constants and is straightforward (no problem of variables to substitute). So the verification is finished and these two steps of the proof of `2p2e4`

are correct.

When Metamath unifies ( 2 + 2 ) with B it has to check that the syntactical rules are respected. In fact B has the type `class`

thus Metamath has to check that ( 2 + 2 ) is also typed `class`

.

## Metamath proof checker

The Metamath program is the original program created to manipulate databases written using the Metamath language. It has a text (command line) interface and is written in C. It can read a Metamath database into memory, verify the proofs of a database, modify the database (in particular by adding proofs), and write them back out to storage.

It has a *prove* command that enables users to enter a proof, along with mechanisms to search for existing proofs.

The Metamath program can convert statements to HTML or TeX notation; for example, it can output the modus ponens axiom from set.mm as:

- [math]\displaystyle{ \vdash \varphi\quad\&\quad \vdash ( \varphi \rightarrow \psi )\quad\Rightarrow\quad \vdash \psi }[/math]

Many other programs can process Metamath databases, in particular, there are at least 19 proof verifiers for databases that use the Metamath format.^{[9]}

## Metamath databases

The Metamath website hosts several databases that store theorems derived from various axiomatic systems. Most databases (*.mm* files) have an associated interface, called an "Explorer", which allows one to navigate the statements and proofs interactively on the website, in a user-friendly way. Most databases use a Hilbert system of formal deduction though this is not a requirement.

### Metamath Proof Explorer

A proof of the Metamath Proof Explorer | |

Type of site | Online encyclopedia |
---|---|

Headquarters | USA |

Owner | Norman Megill |

Created by | Norman Megill |

Website | us |

Commercial | No |

Registration | No |

The Metamath Proof Explorer (recorded in *set.mm*) is the main and by far the largest database, with over 23,000 proofs in its main part as of July 2019. It is based on classical first-order logic and ZFC set theory (with the addition of Tarski-Grothendieck set theory when needed, for example in category theory). The database has been maintained for over thirty years (the first proofs in *set.mm* are dated September 1992). The database contains developments, among other fields, of set theory (ordinals and cardinals, recursion, equivalents of the axiom of choice, the continuum hypothesis...), the construction of the real and complex number systems, order theory, graph theory, abstract algebra, linear algebra, general topology, real and complex analysis, Hilbert spaces, number theory, and elementary geometry. This database was first created by Norman Megill, but as of 2019-10-04 there have been 48 contributors (including Norman Megill).^{[10]}

The Metamath Proof Explorer references many text books that can be used in conjunction with Metamath.^{[11]} Thus, people interested in studying mathematics can use Metamath in connection with these books and verify that the proved assertions match the literature.

### Intuitionistic Logic Explorer

This database develops mathematics from a constructive point of view, starting with the axioms of intuitionistic logic and continuing with axiom systems of constructive set theory.

### New Foundations Explorer

This database develops mathematics from Quine's New Foundations set theory.

### Higher-Order Logic Explorer

This database starts with higher-order logic and derives equivalents to axioms of first-order logic and of ZFC set theory.

### Databases without explorers

The Metamath website hosts a few other databases which are not associated with explorers but are nonetheless noteworthy. The database *peano.mm* written by Robert Solovay formalizes Peano arithmetic. The database *nat.mm*^{[12]} formalizes natural deduction. The database *miu.mm* formalizes the MU puzzle based on the formal system MIU presented in *Gödel, Escher, Bach*.

### Older explorers

The Metamath website also hosts a few older databases which are not maintained anymore, such as the "Hilbert Space Explorer", which presents theorems pertaining to Hilbert space theory which have now been merged into the Metamath Proof Explorer, and the "Quantum Logic Explorer", which develops quantum logic starting with the theory of orthomodular lattices.

## Natural deduction

Because Metamath has a very generic concept of what a proof is (namely a tree of formulas connected by inference rules) and no specific logic is embedded in the software, Metamath can be used with species of logic as different as Hilbert-style logics or sequents-based logics or even with lambda calculus.

However, Metamath provides no direct support for natural deduction systems. As noted earlier, the database *nat.mm* formalizes natural deduction. The Metamath Proof Explorer (with its database *set.mm*) instead uses a set of conventions that allow the use of natural deduction approaches within a Hilbert-style logic.

## Other works connected to Metamath

### Proof checkers

Using the design ideas implemented in Metamath, Raph Levien has implemented very small proof checker, *mmverify.py*, at only 500 lines of Python code.

Ghilbert is a similar though more elaborate language based on mmverify.py.^{[13]} Levien would like to implement a system where several people could collaborate and his work is emphasizing modularity and connection between small theories.

Using Levien’s seminal work, many other implementations of the Metamath design principles have been implemented for a broad variety of languages. Juha Arpiainen has implemented his own proof checker in Common Lisp called Bourbaki^{[14]} and Marnix Klooster has coded a proof checker in Haskell called *Hmm*.^{[15]}

Although they all use the overall Metamath approach to formal system checker coding, they also implement new concepts of their own.

### Editors

Mel O'Cat designed a system called *Mmj2*, which provides a graphic user interface for proof entry.^{[16]} The initial aim of Mel O'Cat was to allow the user to enter the proofs by simply typing the formulas and letting *Mmj2* find the appropriate inference rules to connect them. In Metamath on the contrary you may only enter the theorems names. You may not enter the formulas directly. *Mmj2* has also the possibility to enter the proof forward or backward (Metamath only allows to enter proof backward). Moreover *Mmj2* has a real grammar parser (unlike Metamath). This technical difference brings more comfort to the user. In particular Metamath sometimes hesitates between several formulas it analyzes (most of them being meaningless) and asks the user to choose. In *Mmj2* this limitation no longer exists.

There is also a project by William Hale to add a graphical user interface to Metamath called *Mmide*.^{[17]} Paul Chapman in its turn is working on a new proof browser, which has highlighting that allows you to see the referenced theorem before and after the substitution was made.

Milpgame is a proof assistant and a checker (it shows a message only something gone wrong) with a graphic user interface for the Metamath language(set.mm),written by Filip Cernatescu, it is an open source(MIT License) Java application (cross-platform application: Window,Linux,Mac OS). User can enter the demonstration(proof) in two modes : forward and backward relative to the statement to prove. Milpgame checks if a statement is well formed (has a syntactic verifier). It can save unfinished proofs without the use of dummylink theorem. The demonstration is shown as tree, the statements are shown using html definitions (defined in typesetting chapter). Milpgame is distributed as Java .jar(JRE version 6 update 24 written in NetBeans IDE).

## See also

## References

- ↑ Megill, Norman; Wheeler, David A. (2019-06-02).
*Metamath: A Computer Language for Mathematical Proofs*(Second ed.). Morrisville, North Carolina, US: Lulu Press. pp. 248. ISBN 978-0-359-70223-7. http://us.metamath.org/#book. - ↑ Megill, Norman. "What is Metamath?".
*Metamath Home Page*. http://us.metamath.org/#faq. - ↑ Metamath 100.
- ↑ "Formalizing 100 Theorems". https://www.cs.ru.nl/~freek/100/.
- ↑ Megill, Norman. "Known Metamath proof verifiers". http://us.metamath.org/other.html#verifiers. Retrieved 8 October 2022.
- ↑ "TOC of Theorem List - Metamath Proof Explorer". https://us.metamath.org/mpeuni/mmtheorems.html.
- ↑ Wiedijk, Freek. "The Seventeen Provers of the World". pp. 103–105. http://www.cs.ru.nl/~freek/comparison/comparison.pdf.
- ↑ Megill,Norman. "How Proofs Work".
*Metamath Proof Explorer Home Page*. http://us.metamath.org/mpegif/mmset.html#proofs. - ↑ Megill, Norman. "Known Metamath proof verifiers". http://us.metamath.org/other.html#verifiers. Retrieved 8 October 2022.
- ↑ Wheeler, David A.. "Metamath set.mm contributions viewed with Gource through 2019-10-04". https://www.youtube.com/watch?v=XC1g8FmFcUU.
- ↑ Megill, Norman. "Reading suggestions".
*Metamath*. http://us2.metamath.org:8888/mpegif/mmset.html#read. - ↑ Liné, Frédéric. "Natural deduction based Metamath system". Archived from the original on 2012-12-28. https://archive.today/20121228041230/http://wiki.planetmath.org/cgi-bin/wiki.pl/Natural_deduction_based_metamath_system.
- ↑ Levien,Raph. "Ghilbert". https://ghilbert-app.appspot.com.
- ↑ Arpiainen, Juha. "Presentation of Bourbaki". Archived from the original on 2012-12-28. https://archive.today/20121228115800/http://wiki.planetmath.org/cgi-bin/wiki.pl/Bourbaki_proof_checker.
- ↑ Klooster,Marnix. "Presentation of Hmm". Archived from the original on 2012-04-02. https://web.archive.org/web/20120402081636/http://wiki.planetmath.org/cgi-bin/wiki.pl/Hmm.
- ↑ O'Cat,Mel. "Presentation of mmj2". Archived from the original on December 19, 2013. https://web.archive.org/web/20131219001737/http://wiki.planetmath.org/cgi-bin/wiki.pl/mmj2.
- ↑ Hale, William. "Presentation of mmide". Archived from the original on 2012-12-28. https://archive.today/20121228044320/http://wiki.planetmath.org/cgi-bin/wiki.pl/mmide.

## External links

- Metamath: official website.
- What do mathematicians think of Metamath: opinions on Metamath.

Original source: https://en.wikipedia.org/wiki/Metamath.
Read more |