Proof Assistants

187 views
Skip to first unread message

Marlo Bruder

unread,
Jun 7, 2025, 4:49:40 AMJun 7
to Metamath
Hello there metamath community!

I wanted to ask you all 3 questions related to proof assistants:
  1. What proof assistant are you currently using?
  2. What are some (not so obvious) features of your proof assistant that you like and that you would like to see recreated in future proof assistants?
  3. What are some things you don't like about your proof assistant that future proof assistants should avoid?

The reason I ask these question is on one hand to create a useful thread for anyone else who might try to create a proof assistant in the future and on the other hand to gather some information for my own upcoming proof assistant called mmt1, with which I aim to create a modern remake of mmj2. This means that the core proof assistant functionality will remain (mostly) the same, while at the same time I want to add much more features that weren't possible when mmj2 was created.

As of right now the feature set includes:
  • A build in theorem explorer: You can browse any database without having to generate html pages and open them in a separate program/window.
  • A more modern editor: mmt1 uses monaco-editor, a standalone version of vscode's editor, enabling features such as multi-cursor editing and the ability to edit very large files.
  • A more modern UI: Both in style and functionality. Including a tab system, so that you can have multiple editor and theorem explorer instances open at the same time.
  • Preview unicode feature: While developing proofs you can activate a live unicode preview that will make reading your proofs easier.
  • An extended .mmp syntax: You can now also express comments, headers, constant statements, variable statements, floating hypotheses, axioms and theorems with temporary variables/floating hypotheses.
  • Add to database feature: You can add theorems, axioms, etc. to the database with the click of a single button. Together with the extended syntax this allows you to create entire metamath databases without ever touching a .mm file
  • An easier installation: Installing mmt1 will be as simple as clicking an installer. No downloading old java versions or adjusting script parameters required.

Hopefully the first version of mmt1 will be ready in about 1 to 3 months. Until then I still want to add the following:
  • Complete recreation of mmj2's unifier: As of right now mmt1 only has mmj2's original unifier (which is only able to fill in refs given an assertion and hypotheses)
  • Preview unify: It would be useful to see a preview of what triggering the unifier will do within the unicode preview
  • A more powerful search tool: Right now mmt1's search capabilities are still very limited
  • mmj2's definition checker
  • More overall polish: More settings, less hardcoded values, some nicer styling, etc.

As for the tech-stack I went with tauri 2.0 as my overarching framework, which means that most of the application is written in rust, while the ui is written using html/css/js (and displayed using the OS's webview). I also chose svelte 5 as my frontend framework to allow component based development and (as mentioned above) I went with monaco-editor as my editor.

Lastly I still had a few more questions about metamath and set.mm:
  • What does the ! at the beginning of statements do in mmj2? I think I read somewhere that it was an undocumented change. Is anyone nevertheless able to come up with an informal description of how it impacts the unifier?
  • I want to be able to syntax highlight variables without having to hardcode the colors. Right now it seems the only way I can do this would be to parse the htmlvarcolor setting, which would be pretty tedious. Would it be possible to add a varcolorcode setting to the typesetting comment, which assigns a variable colorcode to a typecode? And if not: How does mmj2 derive the colors for it's syntax highlighting? Are they hardcoded?
  • In mmt1 the table of contents is replaced by an explorer on the left side of the screen, similar to e.g. vscode's file explorer, only with headers instead of folders. This however requires that all headers are exactly one header depth below their parent header. set.mm follows this rule in with all headers but 3 in Jim Kingdom's mathbox. Would it be ok (specifically for Jim Kingdom himself) to change the header depth of those 3 headers?

I hope that asking for these changes isn't too much given that I have not yet contributed to set.mm myself.

Best regards,
Marlo Bruder



Glauco

unread,
Jun 7, 2025, 5:24:29 AMJun 7
to Metamath

Hi Marlo,

I use Yamma (a VSCode extension).

A Unicode view would be great — I’ve been thinking about how to implement it, but I haven’t figured out an effective way to display it without taking up too much video space (which is already barely enough to show long wffs).

An even cooler idea might be to allow writing .mmp files directly in Unicode, with the PA translating them to ASCII under the hood.
This would also make it possible to define "custom" symbols specific to a given .mmp file — for example, you could locally define the Unicode integral symbol to represent one of the many integrals defined in set.mm.

Thierry Arnoux

unread,
Jun 7, 2025, 8:03:04 AMJun 7
to meta...@googlegroups.com, Glauco

Hi Marlo,

First of all, congratulations on starting/announcing your project!


What proof assistant are you currently using?

I also use Yamma.


What are some (not so obvious) features of your proof assistant that you like and that you would like to see recreated in future proof assistants?

Maybe it's obvious, but I like the fact that it's integrated in the VsCode IDE.


What are some things you don't like about your proof assistant that future proof assistants should avoid?

In terms of features I'm missing, I would really like to have the "select smallest class/wff" feature I had in Emetamath. This should not be too hard, and I think this would be of great help.

The "one-click publish" feature you describe would be nice. With Yamma we have to copy-paste the MMT files, a very acceptable burden ! :)


Back in 2010 I wrote a plugin for Eclipse : http://emetamath.tirix.org/

It basically encapsulated MMJ2 and offered some of these nice features: 

  • browsing of the database by chapters and sections,
  • syntax highlighting,
  • several editor panes, native search/replace, etc.,
  • navigation to theorem declaration using the contextual menu,
  • hover-popup with information about the symbol/theorem,
  • that "select class/wff" feature I mentioned above...

I later made a video showing those features: https://youtu.be/BsEyW3vBcsE


As for the tech-stack I went with tauri 2.0 as my overarching framework, which means that most of the application is written in rust, while the ui is written using html/css/js (and displayed using the OS's webview). I also chose svelte 5 as my frontend framework to allow component based development and (as mentioned above) I went with monaco-editor as my editor.

Are you using metamath-rs as a library or rewriting it from scratch? Is the project going to be open source?


What does the ! at the beginning of statements do in mmj2? I think I read somewhere that it was an undocumented change. Is anyone nevertheless able to come up with an informal description of how it impacts the unifier?

This is a signal to MMJ2 that it should use the more advanced "auto-transformation" on those steps.


I want to be able to syntax highlight variables without having to hardcode the colors. Right now it seems the only way I can do this would be to parse the htmlvarcolor setting, which would be pretty tedious. Would it be possible to add a varcolorcode setting to the typesetting comment, which assigns a variable colorcode to a typecode? And if not: How does mmj2 derive the colors for it's syntax highlighting? Are they hardcoded?

My solution in "Emetamath" was to add a dialog for users to choose the colors. I'm not sure how much in common you have with vscode, but you might be able to set extension-specific settings, using JSON files in the project's .vscode directory.


Good luck with your project!
_
Thierry



Jim Kingdon

unread,
Jun 8, 2025, 1:09:36 AMJun 8
to meta...@googlegroups.com

On 6/6/25 22:42, Marlo Bruder wrote:

Hello there metamath community!

I wanted to ask you all 3 questions related to proof assistants:
  1. What proof assistant are you currently using?
mmj2

  1. What are some (not so obvious) features of your proof assistant that you like and that you would like to see recreated in future proof assistants?

The screen is mostly devoted to my proof, with a minimal space taken up by navigation widgets and the like.

I can copy-paste .mmp files between set.mm and iset.mm and, insofar as the theorems being referenced are present in both, it works.

This one is kinda dumb but I'll state it anyway: the format of the generated proof differs visually (in line length) from the output of a minimized proof from the metamath-exe minimizer, which I use to notice whether I forgot to run the minimizer.

I use comments (lines starting with "*") extensively (to make notes to myself, comment out proof lines, etc).

  1. What are some things you don't like about your proof assistant that future proof assistants should avoid?

Ideally the proof assistant would be a bit better able to fill in certain things like substitutions (in fact, under some circumstances I think older versions of mmj2 were better than the one I am using now).

mmj2 has a lot of rough edges (menu items that don't work, keystrokes which can destroy your proof unless it was saved, etc). Perhaps it goes without saying that I'd prefer not to have such things but maybe the larger lesson is to focus on fixing annoyances as much as implementing more features.



Lastly I still had a few more questions about metamath and set.mm:
  • What does the ! at the beginning of statements do in mmj2? I think I read somewhere that it was an undocumented change. Is anyone nevertheless able to come up with an informal description of how it impacts the unifier?
It tells mmj2 to try to find a proof for this step. Without the "!" mmj2 will mostly leave the line alone, without proving it in terms of previous steps. I use this for example when there are steps in the proof which I know I can't prove, but which I'm not ready to comment out yet (and thus I don't want the line without ! to pick them up).

  • I want to be able to syntax highlight variables without having to hardcode the colors. Right now it seems the only way I can do this would be to parse the htmlvarcolor setting, which would be pretty tedious. Would it be possible to add a varcolorcode setting to the typesetting comment, which assigns a variable colorcode to a typecode? And if not: How does mmj2 derive the colors for it's syntax highlighting? Are they hardcoded?
Don't know about mmj2 but strikes me as sensible to add something like varcolorcode.

  • In mmt1 the table of contents is replaced by an explorer on the left side of the screen, similar to e.g. vscode's file explorer, only with headers instead of folders. This however requires that all headers are exactly one header depth below their parent header. set.mm follows this rule in with all headers but 3 in Jim Kingdom's mathbox. Would it be ok (specifically for Jim Kingdom himself) to change the header depth of those 3 headers?
Ideally we'd have a tool to enforce this which we can run on pull requests, but seems like a good idea. If I get around it I'll fix it but if you want to make a pull request to my mathbox that's fine too.

Igor Ieskov

unread,
Jun 8, 2025, 8:34:21 AMJun 8
to Metamath

Hi Marlo,

I am not really involved in creating metamath proofs. But whenever I want to create one or to just explore existing proofs, I use metamath-lamp. I guess the importance of features depends on experience. More experienced metamathematicians will value some features more, less experienced will value others. But I will list features of mm-lamp which I like and I think they will be useful for all users.

Proof editor:

Proof explorer:

You can also find out more useful features by reading Metamath-lamp Guide https://lamp-guide.metamath.org Some recently added features not mentioned in the guide, can be found in metamath-lamp-docs https://github.com/expln/metamath-lamp-docs .

If you need to know how to do one or another thing/action in mm-lamp or how something is implemented, feel free to ask me, I'll be happy to help you.

-
Igor

Marlo Bruder

unread,
Jun 10, 2025, 10:04:11 AMJun 10
to Metamath
Hi all,
much thanks for all the useful feedback.

On Saturday, June 7, 2025 at 2:03:04 PM UTC+2 Thierry Arnoux wrote:

In terms of features I'm missing, I would really like to have the "select smallest class/wff" feature I had in Emetamath. This should not be too hard, and I think this would be of great help.

 That's a great feature suggestion. It's on my do-to list!

Are you using metamath-rs as a library or rewriting it from scratch? Is the project going to be open source?

As of right now I am not using metamath-rs, since I thought that writing everything from scratch would make the project more independent (and more fun).
I'm not sure whether mmt1 will be open-source yet, mainly because I've never led an open-source project so far. It's definitely going to be source-available and MIT-licensed though. 

Best regards,
Marlo

Steven Nguyen

unread,
Jun 10, 2025, 1:26:40 PMJun 10
to meta...@googlegroups.com
1. What proof assistant are you currently using?
I use metamath.exe (and notepad, for editing the comments, pasting proofs, etc.)
I do have other proof assistants which have been useful in some
uncommon situations

2. What are some (not so obvious) features of your proof assistant
that you like and that you would like to see recreated in future proof
assistants?
I think metamath.exe is more efficient because of low dependence on
mouse movement. It's basically a CLI, after all. For example, say you
have 7 steps and
you want to fill in `eqeq1` for all of them. This is as easy as
running `a -0 eqeq1` to assign one step, then pressing "up arrow" then
"enter" for the other steps.
Similarly, if you want to fill in hypotheses `theorem.a` to
`theorem.k`, just `a -0 theorem.a`, then do "up arrow" "backspace" "b"
"enter", etc.

Although setting an unknown expression to a value is often made faster
by copying and pasting the expression instead of typing it out.

So, I would suggest keyboard commands, for jumping around unknown
steps, for searching, and for autoproving.
And maybe some kind of view at the bottom showing only the unknown
steps - in very long proofs, there might be a lot of scrolling along
solved steps.

I like metamath.exe's behaviour that when it tries to automatically
prove something (`im all`) and fails, nothing happens.
In contrast, mmj2 likes to do partial work, but it often does
oveq123d, ending up with silly unprovable unknown steps.like `+ = x.`
Alternatively, metamath-lamp explicitly lets you choose whatever
subproof or partial work it found, or cancel(do not apply any step).

3. What are some things you don't like about your proof assistant that
future proof assistants should avoid?
metamath.exe is bad at proof editing: to change one step, you often
need to reprove the whole subtree. But I don't think this will be a
problem.

A feature I would like is the ability to import partial proofs with
"?" from metamath.exe to other tools.
> --
> You received this message because you are subscribed to the Google Groups "Metamath" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to metamath+u...@googlegroups.com.
> To view this discussion visit https://groups.google.com/d/msgid/metamath/2b0367b3-aaae-4a89-ab95-89da44be60edn%40googlegroups.com.

Marlo Bruder

unread,
Aug 26, 2025, 8:09:13 AM (12 days ago) Aug 26
to Metamath
Hello everyone,

Unfortunately the development of mmt1 is taking 1 to 2 months longer than expected, so I just wanted to let you all know that you can expect the first version of mmt1 (if everything goes right) to release some time in October.

Best regards,
Marlo Bruder
Reply all
Reply to author
Forward
0 new messages