簡體   English   中英

在Coq中,如何定義像A = {x | f(x)= 0}?

[英]In Coq, how to define a set like A = {x | f(x) = 0}?

我是使用Coq的新手。 我想問是否要定義一個像A = {x | f(x) = 0} A = {x | f(x) = 0} ,我該怎么做? 我寫類似:

Definition f0 := nat->nat. 

Definition A : Set := 
  forall x, f0 x -> 0.

他們沒有按預期工作。

非常感謝。

或多或少像您寫的那樣。 首先,您必須具有一些函數f0 : nat -> nat要將其應用到該函數。 你在這里做什么

Definition f0 := nat -> nat.

是將類型nat -> nat命名為從自然到自然f0的函數。 您可能會想到以下內容:

Variable f0 : nat -> nat.

這聲明了一個變量f0 ,它屬於nat -> nat類型。 現在,我們可以使您的原始說明適應Coq代碼:

Definition A : Set := {x : nat | f0 x = 0}.

這里有兩件事要注意。 首先,您可能希望稍后將此定義應用於特定功能f0 : nat -> nat ,例如前任功能pred : nat -> nat 在這種情況下,應將代碼放在以下部分中:

Section Test.
Variable f0 : nat -> nat.
Definition A : Set := {x : nat | f0 x = 0}.
End Test.

在本節之外, A實際上是一個函數(nat -> nat) -> Set ,它接受一個函數f0 : nat -> nat的類型為{x : nat | f0 x = 0} {x : nat | f0 x = 0} 您可以像使用其他任何功能一樣使用A ,例如

Check (A pred).
(* A pred : set *)

您必須記住的第二件事是Coq中的Set與常規數學中的Set不同。 在數學中,集合{x | f(x) = 0} {x | f(x) = 0}也是自然數集的元素。 但不在Coq中。 在Coq中,您需要應用顯式投影函數proj1_sig來轉換{x : nat | f0 x = 0} {x : nat | f0 x = 0}nat

暫無
暫無

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

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