我想爲給定上限的自然數集合定義一個類型。標準圖書館的MSet
似乎是一種方式。我找到了this discussion,它給出了一個很好的例子來說明如何定義一組nat
。但是我不知道如何將它擴展到子集類型。我試過這樣的事情:Coq有界自然數MSet
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.
...
我將使用具有不同上限的集合。但我不明白如何用給定的'n'來實例化這個模塊。理想情況下,我希望能夠這樣寫:
Module BoundedMNatSets := MakeWithLeibniz OWL.
Definition BoundedMNatSetN (n:nat) : Type := BoundedMNatSets n.
P.S.這個問題可能源於我對Coq模塊系統的不足理解,而不是針對集合。
是否'模塊OWL <:OrderedType.'幫助嗎? – ejgallego
我認爲我的問題不在於排序,而在於參數化。我想用'n'來設置參數。 – krokodil
您將需要使用仿函數。 – ejgallego