J'essaye de définir un type pour l'ensemble des nombres naturels avec la limite supérieure donnée. MSet
de la bibliothèque standard semble être une voie à suivre. J'ai trouvé this discussion qui donne un bel exemple de la façon de définir un ensemble de nat
. Cependant je ne peux pas comprendre comment l'étendre aux types de sous-ensembles. J'ai essayé quelque chose comme ceci:Coq MSet de naturels bornés
Module OWL.
Parameter n : nat.
Definition t := {i:nat | i<n}.
Definition eq := @eq t.
Instance eq_equiv : @Equivalence t eq := eq_equivalence.
Definition lt (a b:t) := Peano.lt (proj1_sig a) (proj1_sig b).
Instance lt_strorder : @StrictOrder t lt.
...
Je vais travailler avec des ensembles avec différentes limites supérieures. Mais je ne vois pas comment instancier ce module avec un 'n' donné. Idéalement, j'aimerais pouvoir écrire quelque chose comme ceci:
Module BoundedMNatSets := MakeWithLeibniz OWL.
Definition BoundedMNatSetN (n:nat) : Type := BoundedMNatSets n.
P.S. Cette question est probablement ancrée dans ma compréhension insuffisante du système de modules Coq, et non spécifique aux Sets.
Est-ce que le module 'OWL <: OrderedType.' aide? – ejgallego
Je pense que mon problème n'est pas de commander mais de paramétrer. Je voudrais avoir un ensemble paramétré par 'n'. – krokodil
Vous aurez besoin d'utiliser un foncteur j'ai peur. – ejgallego