簡體   English   中英

Coq:通過對參數的匹配進行模式匹配來定義函數

[英]Coq: Defining a function by pattern matching on the arity of its argument

我想定義一個函數,其行為取決於它的參數是否為(至少)n位函數。 初步(失敗)嘗試是

Definition rT {y:Type}(x:y) := ltac: (match y with
 | _ -> _ -> _ => exact True
 | _ => exact False end).

Check prod: Type -> Type -> Type.
Compute rT prod. (*= False: Prop*)
Print rT. (*rT = fun (y : Type) (_ : y) => False: forall y : Type, y -> Prop*)

如您所見, rT將所有內容映射為False 為什么? 如果我在匹配type of x的match子句中替換y ,結果將保持不變

您想要的功能不能在Gallina中以您期望的類型存在。

您的函數已被接受,但是如果您打印它,則可以看到它的主體為:

rT = fun (y : Type) (_ : y) => False

Gallina無法match Type 有幾種處理n元函數的方式,您可以檢查它們的arity,但是它涉及依賴類型來靜態捕獲arity。 例如,對於統一的n元函數:

https://coq.inria.fr/library/Coq.Numbers.NaryFunctions.html

暫無
暫無

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

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