Brute Force Hacking of Mathematical Equations

As a small boy, I always wondered: how was Albert Einstein able to deduce the Mass-Energy Equivalence Equation? And if there had never been an Einstein, how would humanity have stumbled upon his ingenious discovery? It may have taken years, decades, or even centuries, if at all.

With the advent of the Information Age, my questions were answered: let computers do the stumbling, and let humanity reap the technological benefits. Just as brute force can be used to compromise an online password, it can also be used to hammer away at mathematical and physical constants until equations such as e = m*c^2 have been discovered.

I therefore designed the following algorithm:

An array of constants and an array of unary and binary operations are both fed into an equation generator. For the purposes of simplicity, my own program used equations in the Reverse Polish Notation (RPN) format.

Once an equation has been generated, it is fed into a calculation program, which determines the equation's value.

Once calculated, the resultant number is compared against a list of other mathematical and physical constants, to determine if there is a match within a certain margin of error. The error bounds are there to compensate for the fact that fractional values of floating point variables in computer algorithms are imprecise.

If a match is found, the equation in question is then analyzed further, to determine whether or not it is trivially true (for instance, ln(e^a)) = a).

Any equation which passes the above rigorous testing is written to a text file.

Obviously, the number of equations increases exponentially with the number of constants and operations. I have therefore only been able to do limited testing of the algorithm, using an i7 processor to examine 26 mathematical constants in exactly 24,697,255,129 3-operand equations, a process which took 77 days to fully execute. But already I have uncovered several equations I would not have otherwise known. Some examples:


(sin_rad(Twin Prime) + tanh_rad(Twin Prime)) * cbrt(Feigenbaum 2) ~= Golden Ratio {1.618033989973584e+000 ~= 1.618033988749895e+000; Twin Prime = 6.601618158468696e-001; Feigenbaum 2 = 2.502907875095893e+000}

(((Feigenbaum 2)^3)^(2^(Golden Ratio)) + tanh_rad(Golden Ratio)) / 1000 ~= Feigenbaum 1; {4.669201635717063e+000 ~= 4.669201609102990e+000; Feigenbaum 2 = 2.502907875095893e+000; Golden Ratio = 1.618033988749895e+000}

(sinh_rad(Twin Prime)^cosh_rad(Legendre)) + e^(Twin Prime) ~= Feigenbaum 2; {2.502907875713804e+00 ~= 2.502907875095893e+00; Twin Prime = 6.601618158468696e-01; Legendre = 1.083660000000000e+00}

(((Twin Prime)^3) log (cos_rad(Meissel–Mertens))) fmod tan_rad(Ramanujan–Soldner) ~= Khinchin; {2.685452003571292e+00 ~= 2.685452001119507e+00; Twin Prime = 6.601618158468696e-01; Meissel–Mertens = 2.614972128476428e-01; Ramanujan–Soldner = 1.451369234883381e+00}

((10^(Twin Prime)) log (cosh_rad(Brun))) - (Khinchin / 2) ~= Pi; {3.141592651337206e+00 ~= 3.141592653589793e+00; Twin Prime = 6.601618158468696e-01; Brun = 8.705883800000001e-01; Khinchin = 2.685452001119507e+00}


The most difficult part of the algorithm has proven to be the process of determining what constitutes a "trivially true" equation. I have as yet failed to devise a 100% reliable metric for doing so, and would call upon professional mathematicians to render assistance to that end. My algorithm is precise enough to catch ~99% of false positives though, which is enough to identify interesting equations.

In conclusion, with more powerful computing, an even larger set of both mathematical and physical constants can be examined in a relatively short time frame. I have arranged a list of 80 such constants, which would take the above program 35 years to complete given my available processing power. Using parallel computing resources, however, could markedly decrease execution to within a very short duration of time.

 

Add new comment

Restricted HTML

  • Allowed HTML tags: <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Lines and paragraphs break automatically.
  • Web page addresses and email addresses turn into links automatically.