[英]How to define non-empty set in Coq?
在完成許多教程之后,嘗試創建我的第一個Coq定義。 想知道如何定義簡單的東西,例如字母,如果定義是:
Σ是字母,如果它是一組有限的非空符號。
得到了很多:
Require Import Coq.Lists.ListSet.
Definition alphabet := set.
但是,如何指定“必須是有限的非空集”部分?
由於您選擇要set
的alphabet
,因此根據定義它是有限的,因為set
被定義為list
的實例,並且歸納類型始終是有限的。
您正在使用的ListSet
庫定義了emptyset
因此您的第一個選擇是聲明
Definition not_empty (a: alphabet) : Prop := a <> empty_set.
或者您可以依靠這樣的事實,即您的集合是表達式上的list
和模式匹配:
Definition not_empty (a: alphabet) : bool := match a with
| nil => false
| _ => true
end.
(您還可以通過使用False
和True
在Prop
定義后者而不是bool
。)
編輯:亞瑟(Arthur)要求進行一些澄清(此處簡化,如果想要更精確的解釋,可以拿一本關於歸納類型的真實教科書):
歸納類型可以居住在:
bool
), nat
) False
)。 但是,歸納類型的任何元素在構造上都是有限的。 例如,您可以通過構造有限數量的構造函數S
來編寫任何自然數,但是您必須在某個時候使用O
並“停止”術語的構造。 列表也是如此:您可以構建任意長列表,但是其長度始終是有限的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.