0
我想定義一個函數,其行爲取決於它的參數是否(至少)是n位函數。一個基本的(失敗)的嘗試是Coq:通過模式匹配定義函數的參數
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
。爲什麼?如果我在匹配條款中替換y
w/type of x
是這背後的原因,勒柯克的模式匹配被設計爲僅在感應式的構造工作? – jaam
模式匹配有兩個級別。 「Gallina」模式匹配確實只適用於歸納和合作類型。您的代碼使用的「Ltac」模式更符合句法,因此它所做的不能表達爲Gallina術語(通常)。 – Ptival