2017-03-17 2 views
0

Ltac est utilisé pour automating proofs and modifying proof environment, outputting strings et defining complex notations. Peut-il également être utilisé pour des modifications «intelligentes» de l'environnement Coq? Voici deux tentatives ratées:Modification intelligente de l'environnement Coq

Variable Phy: Set. 

Fail Let pp (x:Type) := ltac: (match type of x with 
     | Set => constr: (Reset Phy) 
     | _ => idtac end). 
(*Cannot infer an internal placeholder of type "Type" in environment: x : Type*) 

Fail Ltac pp x := match type of x with 
     | Set => constr: (Reset Phy) 
     | _ => idtac end. 
(*The reference Reset was not found in the current environment.*) 

De plus, si ce n'est pas un emploi pour Ltac, peut-être il y a une autre façon?

+0

Je ne pouvais pas comprendre ce que les extraits essayaient d'accomplir; pourriez-vous élaborer? –

+0

Ils essaient de libérer la variable 'Phy' si une condition est remplie – jaam

Répondre

2

Réponse courte: Non

Même si vous réaliseriez de le faire en utilisant un certain hack, il cessera de fonctionner dans la prochaine version Coq.

La raison en est que l'interprétation des commandes ltac se produit à un niveau inférieur à celui de l'interprétation de document. Ce choix pourrait être discutable, mais c'est comme ça. Les tactiques fonctionnent dans un environnement constant et n'ont accès qu'à la preuve. Ainsi, le plus que vous pouvez faire avec ltac est de modifier la preuve actuelle.

Votre erreur se produit car Reset est en effet analysé à un niveau supérieur auquel ltac n'a pas accès. Pour la manipulation programmatique de l'environnement et des documents eux-mêmes, vous devez vous appuyer sur le code ML ou peut-être essayer un script d'outil d'interfaçage tel que SerAPI pour obtenir ce que vous voulez.

+0

" Les tactiques fonctionnent dans un environnement constant et n'ont accès qu'à la preuve "ce n'est pas totalement vrai car actuellement il y a un hack pour pouvoir ajouter des définitions à l'intérieur preuves, mais il est très probable qu'il disparaisse car il est très difficile de traiter les épreuves en parallèle. – ejgallego

+0

Par souci d'exhaustivité, pourriez-vous s'il vous plaît ajouter une référence au hack? – jaam

+0

Faites simplement 'Définition a: = 3' dans une épreuve. Cela va modifier l'environnement de la preuve. Ceci est lui-même implémenté comme plusieurs milliers de lignes de codes réparties sur toutes les sources de Coq. – ejgallego