阿格达,布尔命题

时间:2012-05-20 02:04:03

标签: haskell agda

前言请注意,这是一项作业。关于第一个问题,已经提出了一个问题。所以我们有数据类型:

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代码的片段

注意:编辑它不会放弃一切

2 个答案:

答案 0 :(得分:5)

您的代码未编译的原因是因为第一部分中的包围不正确。 例如,对于pand,它应该是这样的   pand:∀{P Q:Bool}→BoolProp P→BoolProp Q→BoolProp(P∧Q)

改变那个,第二部分应该编译。 我有完全相同的问题......

答案 1 :(得分:0)

好吧,如果不对,我不知道这只是第一部分 如果你在最后一个问题上考虑了eval,我不知道。

但是对于第一部分,因为类型签名是

prop : BoolProp false

我刚才把道具等于eval声明。 由于eval语句应该等于BoolProp。

所以

prop = (pand (por ptrue pfalse) pfalse)
也许是错的,我不知道 但它是C-c C-l 和C-c C-n

我很高兴。