En utilisant le protocole XML, vous pouvez utiliser le Annotate stm
call, où stm
est la phrase que vous voulez imprimer. Cependant, notez que l'imprimante XML est loin d'être entièrement fonctionnelle dans les versions 8.5/8.6 et peut être supprimée. Vous pouvez voir tous les cas manquants here. Notez également qu'il ne génère aucune représentation structurée des termes à aucun niveau.
Alternativement, vous pouvez utiliser SerAPI, un addon spécialisé dans ce but particulier. En utilisant SerAPI vous pouvez obtenir une représentation complète de toute structure Coq:
$ rlwrap ./sertop.native --printer=human --prelude=/home/egallego/external/coq-v8.6/
(Control (StmAdd() "Lemma u n : n + 0 = n."))
> (Answer 0 (StmAdded 2 (...) NewTip))
(Query() (Ast 2))
> (Answer 1(ObjList
> ((CoqAst
> (VernacStartTheoremProof Lemma
> ((((((Id u))()))
> (((LocalRawAssum
> (((Name (Id n))))
> (Default Explicit)
> (CHole() IntroAnonymous())))
> (CNotation
> "_ = _"
> (((CNotation
> "_ + _"
> (((CRef
> (Ident
> (Id n)))
> ())
> (CPrim
> (Numeral (Ser_Bigint 0))))
> ()()))
> (CRef
> (Ident
> (Id n)))
> ()))
> ()()))
> ())))
> false)))))
Notez que SerAPI est un logiciel expérimental.
Pouvez-vous être plus précis sur ce qu'est votre cas d'utilisation? Vous pouvez utiliser le protocole XML (mais cela ne vous donnera pas de données sérialisées AST) ou coq-serapi. En passant, je pense que les anciennes versions de Coq avaient un support très limité pour ce plugin xml, mais je ne suis pas sûr maintenant ... – ejgallego
Notez que votre question est très spécifique sur _querying la structure XML plus riche représentant ASTs_ Si ce que vous voulez est de construire un IDE Coq, alors la réponse serait un peu différente. – ejgallego