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 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 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/CAFXXJSt1uSXzQN7FXotvHnT-orBBm69_XJkhKEiTau-D9d%2BxYQ%40mail.gmail.com.

Reply via email to