The Atelier Focal  
Home
Login
Bug tracking
The Atelier Focal

Project:

Show Task #
Task #206    Erreur de typage à Coq.
Opened by François Pessaux (francois) - 28 May 2009
Last edited by François Pessaux (francois) - 28 May 2009
Task Type Bug Report
Category Compiler
Status Unconfirmed
Assigned To François Pessaux (francois)
Operating System All
Severity High
Reported Version Current
Due in Version Undecided
Percent Complete 50% complete

Details (Initialement trouvé par Liên)

Avec le fichier joint en attachement, Coq raconte:
Error while reading ./automata_3_bug.v :
File "./automata_3_bug.v", line 485, characters 37-49
Error:
In environment
A_T : Set
...
...
The term "rf_verify_e1" has type
"forall a a1 : A_T,
Is_true (rf_is_e1 a a1) ->
Is_true (_p_P_is_in_trace (_p_P_trace _p_P_origin _p_P_present_state) a1)"
while it is expected to have type "Prop"



Comments (1)
Attachments (3)
Related Tasks (0)
Notifications (0)
Comment by François Pessaux - Thursday, 28 May 2009, 12:42pm
Ceci n'est pas à proprement parler un bug. En fait, le compilo devrait râler plutôt que de laisser passer ça et que ce soit Coq qui râle. Donc il va falloir trouver un moyen de faire lever une erreur.

L'histoire est la suivante:
property verify_e1 : all a a1 in A,
is_e1(a, a1) ->
P!is_in_trace(P!trace(P!origin, P!present_state), a1) ;

property verify_e2 : all a a2 in A,
is_e2(a, a2) ->
~(P!is_in_trace(P!trace(P!origin, P!present_state), a2)) ;

property verify_nlim : all a a1 a2 a3 in A,
(~(!verify_e1) \/ ~(!verify_e2)) ;


verify_e1 et verify_e2 sont des propriétés. Ce sont des FAITS que l'on doit prouver. Il ne peuvent donc être utilisés que pour faire DES PREUVES et non dans des ENONCES ! C'est un peu comme si on disait truc_reflexive => truc_symetric.
D'ailleurs, dans l'énoncé de verify_nlim qui est celui qui ne passe pas, on voit bien que l'on binde a a1 a2 a3 et que l'on ne s'en sert pas !
Si on autorisait ce genre de chose, la forme du truc obtenu serait quelque chose comme:
(all x in X, truc (x, x)) => (all a b in X, truc (a, b) => truc (b, a))

J'ai fait exprès de mettre a et b dans le second membre pour montrer qu'il n'y a aucun rapport entre x et a.

Ce que voulait l'utilisateur est certainement de définir des logical let pour verify_e1 et verify_e2.

Bon, maintenant, le compilo doit râler sur ce truc qui passe car le type ML d'une property est bool, donc ça passe à la trappe sans faire d'erreur d'unification.




MoSpray is Powered by Flyspray  Handled for MAMBO by CaneBlu.com


SPI © 2004-2008
Contact Webmaster
powered by Joomla designed by CM, with help of the TiTi Dev Team

UPMC INRIA CNAM CNRS
LIP6 CEDRIC