簡體   English   中英

如何在 Coq 中構建異構依賴對列表

[英]How to build a list of heterogeneous dependant pairs in Coq

我想能夠有依賴對一多相序列(T, f)其中T是在Setf如果函數T -> bool

Definition classif :
  seq (forall T : Set, T -> bool) :=
  [:: (fun b : bool => b); (fun n : nat => false)].

注意:我對列表使用 SSReflect 語法。 顯然上面寫的類型不是正確的。

是否可以 ?

您正在尋找依賴對,而是編寫依賴函數。 尖頭類型的類型是

{ A : Set & A }

然后你可以構建例如一對nat1

Check (existT (fun A : Set => A) nat 1) : { A : Set & A }.

有一些符號會更好,但你有它。

@ThéoWinterhalter 的答案是去這里的方法。 只需在他的答案中添加一個精確度 [我最初將其發布為評論,但這阻礙了代碼的可讀性......]:

您在這里尋找的類型是{T : Set & T -> bool} ,它是一個Σ 類型並且依賴於以下歸納:

Print sigT.

Inductive sigT (A : Type) (P : A -> Type) : Type :=
    existT : forall x : A, P x -> {x : A & P x}

為了簡化您對classif的定義,您還可以定義一個快捷方式:

From mathcomp Require Import all_ssreflect.

Set Implicit Arguments.
Definition sigma (T' : Set) f := (existT (fun A : Set => A -> bool) T' f).

Definition classif :
  seq {T : Set & T -> bool} :=
[:: sigma (fun b : bool => b); sigma (fun n : nat => false)].

暫無
暫無

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

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