前言请注意,这是一项作业。关于第一个问题,已经提出了一个问题。所以我们有数据类型:
data BoolProp : ??? where
ptrue : BoolProp true
pfalse : BoolProp false
pand : (P Q : Bool) -> (BoolProp P) -> (BoolProp Q) -> BoolProp (P ??? Q)
por : (P Q : Bool) -> (BoolProp P) -> (BoolProp Q) -> BoolProp (P ??? Q)
pnot : (P : Bool) -> BoolProp (not P)
现在我们被要求写下命题
eval (PAnd (POr PTrue PFalse) PFalse)
应返回BoolProp
false
我对如何做到这一点感到困惑。 Ptrue
会返回BoolProp true
,但数据类型por
会导致两个Bool
不是BoolProp
。也许数据类型是错误的。任何抬头都会很棒
我应该补充说,eval代码是haskell代码的片段
注意:编辑它不会放弃一切
答案 0 :(得分:5)
您的代码未编译的原因是因为第一部分中的包围不正确。 例如,对于pand,它应该是这样的 pand:∀{P Q:Bool}→BoolProp P→BoolProp Q→BoolProp(P∧Q)
改变那个,第二部分应该编译。 我有完全相同的问题......
答案 1 :(得分:0)
但是对于第一部分,因为类型签名是
prop : BoolProp false
我刚才把道具等于eval声明。 由于eval语句应该等于BoolProp。
所以
prop = (pand (por ptrue pfalse) pfalse)
也许是错的,我不知道
但它是C-c C-l
和C-c C-n
我很高兴。