Thanks to everyone who worked on this issue. As described in that github issue, we now have a (better) working definition checker as part of the Travis build.

The definition checker means that unsound definitions are a matter of "well, we might or might have an elegant design but we at least have a way of catching mistakes or people who don't understand the system well enough" as opposed to "OMG we need to rearchitect the whole thing because how can we trust the hundreds of definitions in set.mm?".

On 9/24/19 11:54 AM, David A. Wheeler wrote:
FYI:

@wlammen recently posted an example where an unsound definition causes 
problems: https://github.com/metamath/set.mm/pull/1089
Details below if you'd like.

This is expected per the Metamath book, because definitions are just axiomatic 
($a) statements, and Metamath verifiers merely confirm that proven ($p) 
statements follow from $a statements.  There are far fewer definitions than 
proven statements, and definitions are generally far simpler than proofs.

That said, we don't *really* want unsound definitions.  mmj2 already has a 
number of checks on definitions. Thanks to Mario, mmj2 version v2.5.3 now has a 
tweaked definition checker that does a deifnitional soundness check, which 
rejects this kind of nonsense.  This version of mmj2 is now incorporated in our 
CI build, so every merged change into set.mm will be checked to prevent these 
kinds of crazy things.

A related improvement: previously mmj2's checkers were configured to exclude 
df-sbc , because it reused a constant that has already been introduced, namely 
[ A / x ] ph.  However, Norm changed it to use new constants in Jan 2017. df-sb 
is '[ y / x ] ph' and df-sbc is now '[. A / x ]. ph'. So df-sbc can be removed 
from the exception list, so that's one less thing that needs to be handled 
specially.

For more about this, see: https://github.com/metamath/set.mm/pull/1089

--- David A. Wheeler

P.S. Here's the definition that caused the problem.

   $( Declare a new symbol. $)
   $c BustVerifier $.   $( A meaningless symbol $)

   $( Extend wff definition to include BustVerifier. $)
   wbustverifier $a wff BustVerifier $.

   ${
     $d x y $.
     $( Try to bust the proof verifier using this definition.  (Contributed by
         Wolf Lammen, 9-Sep-2019.) $)
     df-bust-verifier $a |- ( BustVerifier <-> x = y ) $.
   $}

   ${
     $d x y $.
     $( A contradiction.  (Contributed by Wolf Lammen, 9-Sep-2019.) $)
     bust-verifier $p |- ( -. x = y -> F/ x x = y ) $=
       ( weq wnf wn wbustverifier df-bust-verifier bicomi nfv nfxfr a1i ) ABCZAD
       LELFAFLABGHFAIJK $.
   $}


--
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/a0108bbd-b35e-71ec-223a-6b9e0c591be7%40panix.com.

Reply via email to