Zulip Chat Archive
Stream: lean4
Topic: unknown constant 'term.pseudo.antiquot'
Eric Wieser (Feb 13 2024 at 20:27):
Perhaps a contrived example, but the pretty printer struggles here:
import Lean
open Lean Meta
set_option trace.debug true
set_option pp.rawOnError true
#eval show MetaM _ from do
trace[debug] "{← `(`($$x + 1))}"
which gives the output
[debug] [Error pretty printing syntax: unknown constant 'term.pseudo.antiquot'. Falling back to raw printer.]
(Term.quot "`(" («term_+_» (term.pseudo.antiquot "$" [] `x._@.Qq.test._hyg.1 []) "+" (num "1")) ")")
Eric Wieser (Feb 13 2024 at 20:44):
It's not clear to me where term.pseudo.antiquot
comes from in the first place, or how to teach the pretty printer how to print it
Kyle Miller (Feb 13 2024 at 21:57):
`(`($$x + 1))
evaluates to `($x + 1)
, and the term.pseudo.antiquot
node refers to $x
. I'm not sure what the state of pretty printing antiquotations is, whether it's supposed to work or if it's not implemented.
Eric Wieser (Feb 13 2024 at 21:58):
What does pseudo
refer to here?
Kyle Miller (Feb 13 2024 at 22:04):
There are two constructors for antiquotes, docs#Lean.Syntax.mkAntiquotNode and docs#Lean.Parser.mkAntiquot, and the second mentions that pseudo indicates that the kind isn't checked in match
expression patterns (but I'm not completely sure)
Eric Wieser (Feb 13 2024 at 22:08):
I guess don't really understand what "checked" means here
Kyle Miller (Feb 13 2024 at 22:13):
If you had the pattern $x:ident + 1
, then it would want to check that x
is referring to some syntax of kind ident
, but in $x + 1
it doesn't care what syntax kind that x
has. ("It" being "what the match
expression compiles to".)
Kyle Miller (Feb 13 2024 at 22:18):
There's a separate elaborator for match
expressions for syntax patterns in Lean.Elab.Quotation, and it looks like pseudo
controls whether to insert Syntax.isOfKind
checks.
Eric Wieser (Feb 13 2024 at 22:56):
Ah, that helps a bit; in that case, this is a second pretty-printer failure (now about ident.antiquot
):
#eval show MetaM _ from do
trace[debug] "{← `(`($$x:ident + 1))}"
Eric Wieser (Feb 13 2024 at 22:58):
So maybe antiquot
printing is not implemented at all, which would explain why I couldn't find it
Last updated: May 02 2025 at 03:31 UTC