Mephistolus just reached it's 4th Milestone

Now, it allow it's single user (me) to :
produce a Mephistolus proof and a Metamath proof in a developer friendly way

for example, the command

"( ( ; 2 6 x. ( ( ( ( 7 x. ; 8 9 ) + ∨2c ) x. ( ; ; 1 2 3 + ( ( 7 - ∨1c ) 
x. ( ! ` 5 ) ) ) ) - ; ; 2 3 8 ) ) / ; 1 4 )" // stating the expression to 
compute
.single("∨1c = 1", "∨2c = 2") // adding antecedents
.s(Engine::reduce) // the actual computation and proof process

proves that

|- ( ∨1c = 1 -> ( ∨2c = 2 -> ( ( ; 2 6 x. ( ( ( ( 7 x. ; 8 9 ) + ∨2c ) x. ( 
; ; 1 2 3 + ( ( 7 - ∨1c ) x. ( ! ` 5 ) ) ) ) - ; ; 2 3 8 ) ) / ; 1 4 ) = ( 
; ; ; ; ; ; 6 8 4 6 2 8 1 / 7 ) ) )

with a Mephistolus proof that is 2151 calls long
And it exports it to a Metamath proof that has 1845237 calls
And metamath-check-proofs it

in less than 8s (but those 8s is from a cold start with all initialisations 
happening (the parser, parsing all theorems...)


To achieve that, after a few tries, I managed to implement a Mephistolus-> 
Metamath conversion process, 
that is quite nice to use. I also had to metamath-prove the Mephistolus 
theorems I was using (obviously).
When the mephistolus theorems were close from some metamath counterpart 
(inference, deduction or implication), it was quite straightforward
And when I was ralying on Mephistolus theorem that had no equivalent in the 
mm database; I had to work some more and prove them using other proven 
Mephistolus theorems

For example, I needed this to be proven:

 val impImp  = mephistolusTheorem(aim="|- ( ( ∨1w -> ∨2w ) -> ( ∨3w -> ∨4w 
) )", hypotheses = "|- ( ∨3w -> ∨1w )", "|- ( ∨1w -> ( ∨2w -> ∨4w ) )")

fun Proofers.proveCloser() {
    // addition

    MinZinZ.add1(mmMinZinZ)
    N0pN0inN0.add1(mmN0pN0inNN0)
    NpNinN.add1(mmNpNinNN)
    ZpZinZ.add1(mmZpZinZ)

    N0pNinN.add2(mmNpN0inN_imp, 1, 0) { it.a(rotP).proveResult() }
    NexpN0inN.add1(mmNexpN0inN)
    ZsubZinZ.add1(mmAsubB_e_ZZ)
    Nsub1inN0.add2(mmAsub1_inNN0_imp)
    QdivQinQ.add2(mmQdivQinQ_imp)
    QexpN0inQ.add2(mmQexpN0inQ_imp)
    MinQinQ.add2(mmMinA_in_QQd)
    NxNinN.add01(mmNxNinN)
    N0xN0inN0.add01(mmN0xN0inN0)
    QxQinQ.add2(mmQxQinQ_imp)
    IntRangecN.add2(mmIntRangecN)
    MinCinC.add01(mmMinCinC)
    ZxZinZ.add1(mmZxZinZ)


    prove(N_N0inN) { (c, h) ->
        val (a, b) = h
        val s = A_B.mutation(c, a, b)
        NxNinN.single(c, s10, a).result
        N0pNinN.single(c, b, s.result.A).a(rotP).proveResult()
        eqIn.mutation(c, s.origin, sNN, s.result, sNN).proveOrigin()
    }

    prove(N0_NinN) { (c, h) ->
        val (a, b) = h
        when (c.size) {
            0 -> mmN0_NinN_i.call0(a, b)
            else -> {
                val s = A_B.mutation(c, a, b)
                N0xN0inN0.call(c, s10, a)
                N0pNinN.call(c, s.result.A, b)
                eqIn.mutation(c, s.origin, sNN, s.result, sNN).proveOrigin()
            }
        }
    }
}

-- 
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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/metamath/0ec24187-2e3f-4693-9056-e0f957a96032%40googlegroups.com.

Reply via email to