Вопрос
Предисловие обратите внимание, что это для назначения.Вопрос уже задан вопрос о первом вопросе.Таким образом, у нас есть тип данных:
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
принимает два генеракодицетагкода не генеракодицетагкод.Может быть, тип данных не так.Любые головы были бы здоровы
Я должен добавить, что код EVAL - это фрагмент из кода Haskell
Примечание: вдали его, чтобы не отдавать все, что
Решение
Причина, по которой ваш код не компитен, заключается в том, что брекетинг в вашем первом разделе неверно. Например, для падения это должно быть похоже Pand: ∀ {p q q: bool} → boolprop p → boolprop q → boolprop (p ∧ q)
Изменить, что и вторая часть должна компилировать. У меня было точно такая же проблема ....
Другие советы
Ну, я не знаю, если это правильно или нет, и это только для первой части Если вы принимаете в Eval на последний вопрос, я не знаю.
Но для первой части, поскольку тип подписи составляет
prop : BoolProp false
.
Я только что сделал опоры равен оператору Eval. Поскольку оператор EVAL должен быть равен BoLProp.
Так
prop = (pand (por ptrue pfalse) pfalse)
.
Может быть, это неправильно, я не знаю Но это C-C C-L и C-C C-N
и я счастлив.