Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
haskell初学者模型_Haskell_Logic_Models - Fatal编程技术网

haskell初学者模型

haskell初学者模型,haskell,logic,models,Haskell,Logic,Models,嗨,我是哈斯凯尔的新手,我被这个问题困住了,这个问题给出了一个公式,它返回了这个公式的模型,模型是一个使公式为真的估值。例如,模型eg=[[(“p”,True),(“q”,True)],[(“p,True),(“q”,False)] 使用此道具定义: data Prop = Falsum -- a contradiction, or |Var Variable -- a variable,or |Not Prop -- a nega

嗨,我是哈斯凯尔的新手,我被这个问题困住了,这个问题给出了一个公式,它返回了这个公式的模型,模型是一个使公式为真的估值。例如,模型eg
=[[(“p”,True),(“q”,True)],[(“p,True),(“q”,False)]

使用此道具定义:

          data Prop = Falsum   -- a contradiction, or
         |Var Variable -- a  variable,or 
         |Not Prop -- a negation of a formula, or
         |Or Prop Prop -- a disjunction of two formulae,or
        |And Prop Prop -- a conjunction of two formulae, or 
        |Imp Prop Prop -- a conditional of two formulae
          deriving (Eq,show)
和估价:

valuations ::[Variable]->[Valuation]
valuations [] = [[]]
valuations (v:vs) = map ((v,True):) ds ++ map ((v,False):) ds 
 where ds = valuations vs 
到目前为止,我有以下代码:

models :: Prop-> Prop-> Bool
models p q = and $ valuations (p == q)

然而,它似乎不起作用,我已经在这个问题上纠缠了一段时间,所以我想知道是否有人可以帮忙?

这是我试图回答的同一个家庭作业问题。看来你对这个问题的理解有点不正确。模型的类型线应为:

型号::道具->[估价]

您试图只返回对True进行总体评估的公式

示例=和p(或q(非q))

将“示例”传递给models函数时,它将生成以下列表:

[(“p”,真),(“q”,真)],[(“p”,真),(“q”,假)]]

这是因为And语句只有在两个输入都为True时才能计算为True。And语句的第二个输入(或q(不是q))总是计算为True,因为如果其中一个输入为True,Or语句总是计算为True。在我们的示例中,情况总是如此,因为我们的Or可以是(或True(nottrue))或(或False(notfalse)),并且两者的计算结果总是True。因此,只要第一个输入的计算结果为True,那么整个And语句的计算结果将为True

赋值必须传递一个变量列表,并且您有一个函数可以执行此操作。如果只传递Var“p”,则得到[(“p”,True)],[((“p”,False)],因为这是仅有的两种可能的组合

你(我们)想要的是通过评估列表,只返回那些评估为真的。例如,如果您的列表只是Var“p”,并且您的公式不是p,那么只有第二个列表[(“p”,False)]将在您将False赋值给Not p时返回为p only求值为True,因为Not False=True

几乎忘记了,和p(或q(不是q))的所有可能组合——记住(或q(不是q)是真的

和False(False(非False))=和False True=False--[(“p”,False),(“q”,False)]] 假真(真(非真)=假真=假--[(“p”,假),(“q”,真)]] 和真(假(非假))=和真真=真--[(“p”,真),(“q”,假)]] 和True(True(nottrue)=和True=True--[(“p”,True),(“q”,True)]]


正如你所看到的,最后两行是作业问题中提到的将被返回的那一行。我只是还没有想出如何自己完成它。我可以得到完整的[估价]列表我只是不知道如何只得到真实的,而丢弃那些计算错误的。

你能详细说明你想解决什么问题吗?你到底坚持什么问题吗?什么是模型,什么样的公式?
Prop
的定义是什么。
估值
是什么?
模式的最终返回类型l
being
Bool
与您的描述不符,即模型是使命题为真的绑定列表。@bheklir我要传递的公式类型是命题逻辑类型的公式,而我坚持的部分是,您必须生成所有生成给定公式为真的值,因此凯利,问题是做一个真值表,然后过滤掉所有的假答案,我只是不知道如何做到这一点,同样的问题在最近的一个问题中已经被更完整地描述了: