簡體   English   中英

COQ定義咖喱霍華德(A-> B-> C)->(B-> A-> C)

[英]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) 這意味着它是一個函數,它將一個函數作為參數並返回一個函數。

它采用AB類型的“具有兩個參數的函數 ”( Haskell的意義上是“具有兩個參數的函數”,而不是Scala或Java的意義 ),它返回類型C的值。

它必須返回帶有兩個參數的函數,類型為AB但順序相反 ),該參數返回類型為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.

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