It took me longer than I wanted to find the specification we wrote for the definition checker. It is in https://us.metamath.org/mpeuni/conventions.html towards the bottom (search for "additional rules for definitions"). As Mario said in this email thread it is not (at least currently) based on $j commands; it knows about various details of set.mm.

In an effort to make it a bit easier to deal with this definition checker specification I submitted https://github.com/metamath/set.mm/pull/2929 which adds a section header to the conventions page and also updates some of the text on https://us.metamath.org/mpeuni/mmset.html to link to the conventions page and clean up a few issues.

On 11/13/22 16:17, Mario Carneiro wrote:
No, there are more rules than just that. I'm sure I've posted about this on the group before but the best link I can find at the moment is https://groups.google.com/g/metamath/c/HdfvWF2WhBE/m/bqL0Q7E_BQAJ . The "definition" $j command is rarely used; it is only there to help parse a definitional axiom as preparation for running the actual definition check. Most of the time, the structure of the definition is manifest, because it is an equality of some kind (like `<->`) with the defined symbol on the left and the body of the definition on the right. Once these parts are identified, it is possible to check the definition rules; in your example the "definition" ~ancom would be rejected because the defined symbol `/\` occurs in the definition body.

On Sun, Nov 13, 2022 at 5:54 PM Zheng Fan <[email protected]> wrote:

    In the document on the $j comments, it says that "The definition
    should have a top level equality declared by the
    <code>equality</code> command with the definition on the right
    hand side," except for df-bi. Is this condition sufficient for a
    definition? For example, we have the theorem

    ancom $p |- ( ( ph /\ ps ) <-> ( ps /\ ph ) ) $= ... $.

    It also has a top level equality (<->) for wff, but it is not a
    definition for /\.

    在2022年11月13日星期日 UTC+1 02:44:32<[email protected]> 写道:

        On Sat, Nov 12, 2022 at 7:10 PM Zheng Fan
        <[email protected]> wrote:

            I haven't paid a lot of attention to the $j comments. I
            was under the impression from the official specs that
            comments are mostly ignored. Anyway, is there any specs
            about the meaning of the $j comments? And which part of
            the program (if any) is responsible for parsing the $j
            comments? And what does unambiguous 'klr 5' mean?


        It's not yet up on the website (cc: David), but
        https://github.com/metamath/set.mm/blob/develop/j-commands.html
        has some documentation on the meaning of all the $j commands.
        The purpose of the commands is to make the various
        "conventions" around metamath database naming and
        interpretation of axioms more formalized and
        machine-checkable, so it is particularly of interest to
        metamath-knife. The $j commands are ignored by metamath
        verifiers, but it still has relevant information for tools
        that want to do more than simply verify the database; in
        particular it is relevant for parsing the statements and
        identifying definitions (as distinct from axioms) and
        verifying conservativity.

        In metamath-knife, the case that handles parsing $t and $j
        commands is:
        
https://github.com/david-a-wheeler/metamath-knife/blob/614c3527fe79206e12eaa633d4c7561736cbb9fd/src/parser.rs#L747-L758
        which defers to CommandIter which does the low level parsing.
        (Parsing $t and $j commands is a bit more difficult than the
        rest of it since it has more C-like lexing rules, which allow
        you to omit spaces before `;` and such.) The parsing of $t
        comments is also described in the Metamath book, and $j
        commands use the same parser.
        .
        After parsing the broad structure of the $j command, the
        result is stashed in Segment.j_commands, and further
        interpretation is done on the fly as required by individual
        analysis passes. The most important $j command which is read
        by almost every parser that makes an attempt to read $j
        commands at all is "syntax"; this tells you the information
        that you were asking about - that theorems start with "|-" and
        "wff" is the typecode for formulas. It is parsed by the
        Grammar module at:
        
https://github.com/david-a-wheeler/metamath-knife/blob/071292ef3a10350d0dae9e409b4921f91a08ce95/src/grammar.rs#L417-L433

        The "unambiguous" command is used to signal that grammatical
        parsing is possible at all. The 'klr 5' indicates more
        specifically that a KLR parser table can be built, which is
        one way to verify that the grammar is in fact unambiguous, but
        for most purposes it suffices just to know the mere fact of
        unambiguity (which is in general undecidable), and even then
        most tools that attempt grammatical parsing ignore the
        directive and simply fail or produce odd results on ambiguous
        grammars. Metamath-knife ignores this command.

        Mario

            在2022年11月12日星期六 UTC+1 21:05:54<[email protected]> 写道:

                On Sat, Nov 12, 2022 at 1:44 PM Zheng Fan
                <[email protected]> wrote:

                    if I want to add some new functions, is it better
                    to add it to the relevant file or create a new file?


                That depends on the function. Usually a function would
                go in the file which defines the type on which the
                function is exposed, unless it is really big in which
                case you might consider separate files. Rust source
                files tend to be fairly large, they are only broken up
                by topic and there aren't any strict file limits.

                    Also, do we assume the syntax of set.mm
                    <http://set.mm> in the source code, e.g., wff
                    precedes a formula, |- precedes a theorem,


                These "conventions" are encoded in $j comments, so I
                would prefer to make use of that information when
                possible rather than hard coding them in the tool.

                    and the label of a definition begins with "df-"?


                This one is only used in linter-like behavior, but I
                believe it is hard-coded. A lot of "verify markup"'s
                behavior is hard coded to maintenance of set.mm
                <http://set.mm> specifically.

                Mario

--
            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/1cbae7e9-53bf-4c83-9e23-e2bb31c965dfn%40googlegroups.com
            
<https://groups.google.com/d/msgid/metamath/1cbae7e9-53bf-4c83-9e23-e2bb31c965dfn%40googlegroups.com?utm_medium=email&utm_source=footer>.

-- 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/c2cd90b8-fb09-40fb-8e5a-4ffbb3e1d042n%40googlegroups.com
    
<https://groups.google.com/d/msgid/metamath/c2cd90b8-fb09-40fb-8e5a-4ffbb3e1d042n%40googlegroups.com?utm_medium=email&utm_source=footer>.

--
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/CAFXXJSvQmzWbc26LzcMy0-ahtfTgHJJYFCwb9BUgEAk7rHGDWA%40mail.gmail.com <https://groups.google.com/d/msgid/metamath/CAFXXJSvQmzWbc26LzcMy0-ahtfTgHJJYFCwb9BUgEAk7rHGDWA%40mail.gmail.com?utm_medium=email&utm_source=footer>.

--
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/fd6c8bca-6d88-9cbe-c2e3-cff40c8d5b19%40panix.com.

Reply via email to