How can I semi-automate mathematical proofs using Mathematica or other tools?

  • Context: Graduate 
  • Thread starter Thread starter jordi
  • Start date Start date
  • Tags Tags
    Proofs
Click For Summary

Discussion Overview

The discussion revolves around methods for semi-automating mathematical proofs using Mathematica or other tools. Participants explore functionalities, programming approaches, and existing packages that could facilitate this process, particularly in the context of set theory and logic.

Discussion Character

  • Exploratory
  • Technical explanation
  • Debate/contested

Main Points Raised

  • One participant seeks a method to define a function in Mathematica that can automatically apply definitions to expressions, such as transforming f[A∪B] into a corresponding set notation with hyperlinks to the original definition.
  • Another participant suggests using Module or Block functions in Mathematica to achieve similar results.
  • A participant proposes a definition for UnionToSet and discusses the challenges of representing logical statements and axioms in a way that Mathematica can automate proofs effectively.
  • There is mention of a Mathematica package called SetTheory.m, which purportedly automates proofs in set theory and logic, with a query about its applicability to other areas of mathematics.

Areas of Agreement / Disagreement

Participants express various methods and tools, but there is no consensus on a single approach or solution. Multiple competing views and techniques are presented without resolution.

Contextual Notes

Participants highlight limitations in current Mathematica functionalities and the need for a more robust representation of logical statements and axioms. The discussion reflects a dependency on definitions and unresolved mathematical steps in the proposed methods.

jordi
Messages
197
Reaction score
14
I am looking for a method to semi-automate mathematical proofs. Precisely, what I would like is that, if for example I define (sorry, I have never used latex in this forum, and I still do not know how to do it yet):

f[A] := {y|[tex]\exists[/tex]x[tex]\in[/tex]A (y=f(x))}

then, if I have

f[A[tex]\cup[/tex]B]

what I would like is to make a call to the definition above (something like F[f=f,A=A[tex]\cup[/tex]B]) and that the math editor (maybe Mathematica) just writes

f[A[tex]\cup[/tex]B] = {y|[tex]\exists[/tex]x[tex]\in[/tex]A[tex]\cup[/tex]B (y=f(x))}

where the = has a link (hyperlink) to the initial definition (ie, if I click on it, I go to the original definition).

How can I do that?

1. Is there in Mathematica functionality for that?
2. Is there a package that does that, not Mathematica?
3. If not, can I program in a programming language, using latex symbols?
 
Physics news on Phys.org
You should be able to do this by using either of the Module or Block functions in Math'ca.
 
EnumaElish said:
You should be able to do this by using either of the Module or Block functions in Math'ca.

Let us say I want to proof something very simple, eg, A U (B U C) = (A U B) U C.

If I define:

UnionToSet=Function[{A,B},body={x|x[tex]\in[/tex]A||x[tex]\in[/tex]B}]

I start the proof with:

UnionToSet[C,UnionToSet[F,G]]

that gives me:

{x|x[tex]\in[/tex]C||x[tex]\in[/tex]{x|x[tex]\in[/tex]F||x[tex]\in[/tex]G}}

Now I need to apply the axiom:

x[tex]\in[/tex]{x|P(x)} iff P(x)

I find then a problem:

In my definition of UnionToSet, the body is only a string of characters. What I would like is to be able to define an object, Set(P), which is a functional on the set of “acceptable logic statements”, that is equivalent to {x|P(x)}. This object should have methods, like Belongs(x,Set(P)), and Property(x,Set(P))=P(x).

I have googled a bit, but I cannot find anything like this. It is strange, because I think a mathematical package should have an object for defining sets, for belonging, for logic statements... and I think quite natural that mathematicians working with Mathematica would want to state their axioms and let the package to automate the proofs.

Note: for the record, the above proof should be ( means belongs to)[tex]\in[/tex]

CU(FUG)={x|x[tex]\in[/tex]C||x[tex]\in[/tex]FUG}}={x|x[tex]\in[/tex]C||x[tex]\in[/tex]{y|y[tex]\in[/tex]F||y[tex]\in[/tex]G}} = {x|x[tex]\in[/tex]C||(x[tex]\in[/tex]F||x[tex]\in[/tex]G)} = {x|(x[tex]\in[/tex]C||x[tex]\in[/tex]F)||x[tex]\in[/tex]G} = {x|x[tex]\in[/tex]{y|y[tex]\in[/tex]C||y[tex]\in[/tex]F}||x[tex]\in[/tex]G}={x|x[tex]\in[/tex]CUF||x[tex]\in[/tex]G}}=(CUF)UG.

What I would like is that every time I write “=” and I refer to it a given theorem/axiom/whatever, the program automatically applies this theorem/axiom/whatever and writes the corresponding right hand side.

CU(FUG)=Set(P = *[tex]\in[/tex]C||*[tex]\in[/tex]FUG)=Set(P = *[tex]\in[/tex]C||*[tex]\in[/tex]Set(P=**[tex]\in[/tex]F||**[tex]\in[/tex]G ))=Set(P = *[tex]\in[/tex]C||(*[tex]\in[/tex]F||*[tex]\in[/tex]G ))
=Set(P = (*[tex]\in[/tex]C||*[tex]\in[/tex]F)||*[tex]\in[/tex]G )=Set(P = (*[tex]\in[/tex]Set(P=**[tex]\in[/tex]C ||**[tex]\in[/tex]F ))||*[tex]\in[/tex]G)=Set(P = *[tex]\in[/tex]CUF||*[tex]\in[/tex]G )=(CUF)UG.
 
Last edited:
EnumaElish said:
You should be able to do this by using either of the Module or Block functions in Math'ca.

I have seen that there is a package in Mathematica called SetTheory.m. Apparently, it automates the proofs in set theory and logic. Has anybody used it? Is it possible to use it for proofs not only in set theory and logic, but in all other areas of mathematics?
 

Similar threads

  • · Replies 3 ·
Replies
3
Views
3K
  • · Replies 9 ·
Replies
9
Views
3K
  • · Replies 11 ·
Replies
11
Views
3K
  • · Replies 5 ·
Replies
5
Views
4K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 16 ·
Replies
16
Views
3K
  • · Replies 5 ·
Replies
5
Views
4K
  • · Replies 20 ·
Replies
20
Views
3K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 18 ·
Replies
18
Views
2K