[英]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元函數:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.