簡體   English   中英

如何在Coq中定義非空集?

[英]How to define non-empty set in Coq?

在完成許多教程之后,嘗試創建我的第一個Coq定義。 想知道如何定義簡單的東西,例如字母,如果定義是:

Σ是字母,如果它是一組有限的非空符號。

得到了很多:

Require Import Coq.Lists.ListSet.

Definition alphabet := set.

但是,如何指定“必須是有限的非空集”部分?

由於您選擇要setalphabet ,因此根據定義它是有限的,因為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.

(您還可以通過使用FalseTrueProp定義后者而不是bool 。)

編輯:亞瑟(Arthur)要求進行一些澄清(此處簡化,如果想要更精確的解釋,可以拿一本關於歸納類型的真實教科書):

歸納類型可以居住在:

  • 有限數量的元素(例如bool ),
  • 無限數量的元素(例如nat
  • 根本沒有任何元素(例如False )。

但是,歸納類型的任何元素在構造上都是有限的。 例如,您可以通過構造有限數量的構造函數S來編寫任何自然數,但是您必須在某個時候使用O並“停止”術語的構造。 列表也是如此:您可以構建任意長列表,但是其長度始終是有限的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM