[英]COQ definition curry howard (A -> B -> C) -> (B -> A -> C) using sets
我已經盯着臉上看了好幾個小時了:(
我需要使用coq解決一些定義,並且應該通過Curry Howard同構來實現。 我已經閱讀但仍然不知道我在做什么。 我看過其他示例並嘗試通過這些方式進行操作,但我總是會出錯。
例如,在這里我需要定義以下內容:
Variables A B C : Set.
Definition c01 : (A -> B -> C) -> (B -> A -> C) :=
這是我的嘗試:
fun g => fun p => g (snd p) (fst p).
end.
我也試過
fun f => fun b => fun a => f (b , a)
end.
最終,它只是說期望與我給出的類型不同,有時它說諸如:“預期類型為“?9 *?10”。
閱讀完我能找到的所有內容后,我真的很難抓住這一點。
請有人可以解釋一下:(
好吧,我猜您不知道如何正確讀取類型。
c01
的類型是(A -> B -> C) -> (B -> A -> C)
。 這意味着它是一個函數,它將一個函數作為參數並返回一個函數。
它采用A
和B
類型的“具有兩個參數的函數 ”( 在Haskell的意義上是“具有兩個參數的函數”,而不是Scala或Java的意義 ),它返回類型C
的值。
它必須返回帶有兩個參數的函數,類型為A
和B
( 但順序相反 ),該參數返回類型為C
的值。
那么, c01
這個函數必須做什么?
它必須具有一個函數,並將其參數顛倒的順序轉換為相同的函數。
所以:
fun f => fun b => fun a => f a b
或等效地(僅添加一些括號使其更清楚):
fun f => (fun b => fun a => f a b)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.