![](/img/trans.png)
[英]How to prove image equality for functions: x = y -> f x = f y in Coq?
[英]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.