如何定義一般參數N:nat,N個元素的有限集合$ A_ {0},... A_ {N-1} $? 有沒有一種優雅的方式來做到遞歸定義?有人能夠將我推薦爲關於這種結構的推理嗎?如何定義Coq中N個元素的有限集合?
1
A
回答
5
一個非常方便的解決方案是定義n
次序,'I_n
作爲記錄:
Definition ordinal n := {
val :> nat;
_ : val < n;
}.
也就是說,一對的自然數,加上一個證明,這樣的自然數小於n
,其中< : nat -> nat -> bool
。在這裏使用可計算的比較運算符是非常方便的,尤其意味着證明本身不是非常「重要的」,這正是您通常想要的。
這是math-comp使用的解決方案,它具有良好的性能,主要注入的val
,val_inj : injective val
,這意味着你可以重複使用最標準的操作在nat
與您的新的數據類型。請注意,您可能希望將添加定義爲add i j := max n.-1 (i+j)
或(i+j) %% n
。
此外,上面鏈接的庫提供了使用有限類型的一般定義,包括將它們映射到它們的基數序號。
+0
不應該是'記錄序號n'嗎? – jaam
相關問題
- 1. 如何在打字稿中定義5個元素的有限集合?
- 2. 如何在coq中定義一個有限的域
- 3. 類型包含Coq中的N個元素的所有功能
- 4. 從集合中取出n個元素
- 5. 如何在Coq中定義非空集?
- 6. 獲得集合的第n個元素
- 7. 如何從集合中返回N個連續的元素?
- 8. 如何從集合中跳過第n個元素?
- 9. 從集合中刪除N元素
- 10. 在Coq中,如何定義一個像A = {x |的集合f(x)= 0}?
- 11. coq中的遞歸函數定義,限制可能的輸入集合
- 12. 如何生成數組中所有n個元素的組合?
- 13. 如何自定義symfony2表單中的集合元素
- 14. 定義子元素集合的規則
- 15. 如何在Java中遞歸地生成N元素集合中的所有k元素子集
- 16. 集合/數論:在n個集合的k個子集中,特定元素的出現次數爲
- 17. 綁定一個ListBox到集合中的元素集合
- 18. 從Backbone的集合中刪除前n個元素
- 19. 如何在XSD中的兩個元素之間定義限制
- 20. 如何定義第一個元素不是n = 0的向量?
- 21. 如何遍歷HashSet並返回帶有限定元素的集合?
- 22. 如何將一個元素及其所有元素放入一個集合中?
- 23. 我如何找到一個集合的所有子集,正好有n個元素?
- 24. 如何訪問記錄的元素COQ
- 25. 從陣列中省略'N'個元素集合
- 26. 獲取Rafael.js的第n個元素的x座標文本元素的集合
- 27. 如何在另一個集合中獲取具有此集合的集合和一個元素的實體
- 28. 如何在Coq中證明所有n:nat,〜n <n?
- 29. 如何定義一個具有某些因素作用的元素的n元素數組
- 30. 如何在Coq語句中對給定集合進行證明
請參閱標準庫的['Fin.t'](https://coq.inria.fr/library/Coq.Vectors.Fin.html#t)獲取遞歸定義。 –
是的,我喜歡。我正在尋找更簡單的東西,沒有這麼大的依賴關係 – kakaz
什麼是大量的依賴關係?對不起,我沒跟着。它在標準庫中。如果您不想導入模塊,可以複製定義。當然,這不是一個簡單的類型,不像ejgallego的建議。 –