|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||||
![]() ![]() Damien GuichardInscription : juin 2007 Messages : 1 512 ![]() |
Bonjour amis COQeurs au grand cœur,
Au départ j'ai du code ocaml pour un conteneur multimap bijectif entre 2 types: Code OCaml 3.12 :
Comme j'ai la chance d'avoir éventuellement tout un week-end à perdre, j'ai décidé de passer en mode "COQ pour les nuls". Ça donne ceci pour commencer en douceur (oui oui vous pouvez cracher dessus) : Code COQ 8.1 :
Et sans surprise, en effet ça se passe mal. Soit ça ne passe pas du tout comme insert. Soit ça passe mal comme member. Code :
Code :
Il y a éventuellement (certainement) d'autres incompréhensions de ma part, merci de prendre du temps pour m'expliquer lesquelles.
__________________
Du même auteur: le cours OCaml, le dernier article publié, le projet, le blog dvp et le jeu vidéo. Avant de poser une question je lis les règles du forum. |
||||||||
|
00
|
|
|
#2 |
|
Membre Expert
![]() Inscription : avril 2007 Messages : 829 ![]() |
Ton erreur est de définir "Variable (C : Set)." puis "Hypothesis compare : C -> C -> order". Du coup C est une globale et tous les arguments passés à "compare" sont inférés de type C. Une imprudence supplémentaire est de te reposer autant sur l'inférence de types dans tes déclarations; avec un petit
Fixpoint insert A B x y (t : rev_map A B) := ... tu aurais eu un rapport d'erreur assez explicite. Bref, la solution est de retirer la constante C et de définir Hypothesis compare : forall (C : Set), C -> C -> order. PS: merci de redonner un peu de vie à ce forum. |
|
|
10
|
|
|
#3 |
![]() ![]() Damien GuichardInscription : juin 2007 Messages : 1 512 ![]() |
J'ai terminé la traduction, y compris rectangle_to_list
__________________
Du même auteur: le cours OCaml, le dernier article publié, le projet, le blog dvp et le jeu vidéo. Avant de poser une question je lis les règles du forum. |
|
00
|
|
|
#4 |
|
Membre Expert
![]() Inscription : avril 2007 Messages : 829 ![]() |
C'est bien, mais maintenant il faut prouver la correction
|
|
|
00
|
|
|
#5 | |
|
Membre chevronné
![]() Inscription : mars 2010 Messages : 281 ![]() |
Citation:
Il te faut une fonction de comparaison par type (A et B). Pour ça, il y a deux grande méthodes La méthode camleuse: un foncteur La méthode haskellienne: une typeclass C'est une question de gout. |
|
|
|
00
|
|
|
#6 | ||
|
Membre chevronné
![]() Inscription : mars 2010 Messages : 281 ![]() |
Allez tiens, une version imbitable pour le débutant, avec typeclasses et type dépendants (youhou)
Code :
|
||
|
|
00
|
|
|
#7 |
|
Membre chevronné
![]() Inscription : mars 2010 Messages : 281 ![]() |
Alors, tu en es où ?
|
|
|
00
|
|
|
#8 | ||
![]() ![]() Damien GuichardInscription : juin 2007 Messages : 1 512 ![]() |
Comme je l'ai dit, grâce à l'aide de gasche, j'ai pu terminer la traduction en COQ dans le délai que je m'étais fixé.
Citation:
Citation:
__________________
Du même auteur: le cours OCaml, le dernier article publié, le projet, le blog dvp et le jeu vidéo. Avant de poser une question je lis les règles du forum. |
||
|
00
|
|
|
#9 | |
|
Membre chevronné
![]() Inscription : mars 2010 Messages : 281 ![]() |
Citation:
Code :
Hypothesis compare : forall (C : Set), C -> C -> order. Tu as écrit la fonction donc :-D |
|
|
|
00
|
|
|
#10 |
|
Membre Expert
![]() Inscription : avril 2007 Messages : 829 ![]() |
TropMDR : j'ai proposé cet axiome dans le but de modéliser l'opérateur de comparaison polymorphe de OCaml. C'est effectivement un mauvais conseil (... et un mauvais opérateur) si le but est de tout implémenter en Coq, mais ça me semble un choix raisonnable dans une optique de spécification partielle; j'ai interprété le choix de SpiceGuid de définir la fonction de comparaison en axiome comme une optique "je me prends pas la tête sur cet aspect de l'algorithme", et dans ce cadre le choix me semble justifié.
Je suis tout à fait d'accord sur le fait que ta version avec typeclasses est meilleure (en plus elle est tout à fait lisible). Cependant, je ne suis pas convaincu qu'elle permette intrinsèquement d'avoir plus d'assurance dans les bonnes propriétés de la version l'algorithme déjà codé en OCaml, comme j'ai l'impression que c'était le but ici. |
|
|
00
|
|
|
#11 |
|
Membre chevronné
![]() Inscription : mars 2010 Messages : 281 ![]() |
Effectivement, si le but est de modéliser les fonctions de comparaison polymorphe de caml, cet axiome semble raisonnable, en l'extrayant proprement. J'étais resté dans une vision purement "coq" !
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com