说我对命题类型Prop
:折叠设置,使新的设置
type Prop =
| P of string
| Disjunction of Prop * Prop
| Conjunction of Prop * Prop
| Negation of Prop
其中:
• A "p" representing the atom P,
• Disjunction(A "P", A "q") representing the proposition P ∨ q.
• Conjunction(A "P", A "q") representing the proposition P ∧ q.
• Negation(A "P") representing the proposition ¬P.
我应该使用公式的基于集合的表示中析取正常形式。由于结合是可交换的,缔合和(a∧a)是相当于一个方便的是表示由它的一组文字litOf(BC)碱性的混合BC。
BC被定义为:A literal是原子或原子的否定和碱性的混合是文字
这使我的功能litOf
的结合:
let litOf bc =
Set.fold (fun acc (Con(x, y)) -> Set.add (x, y) acc) Set.empty bc
我我很确定我的litOf
是错误的,并且我在(Con(x,y))
部分得到一个错误:“在这个表达式上的不完整模式,例如,'Dis(_,_)'的值可能表示cas不为0,不是被模式覆盖。“,这我也不知道是什么实际上是指在这种情况下。
任何提示我怎么能PROCEDE?
不知道我理解这里的一切,但有趣的ACC(CON(X,Y ))可能是我阅读它的一个匹配表达式,因此您错过了“匹配”(来自工会)的其余部分。 当然,这将帮助很大OM代码在这里,在“跑”的状态:[MCVE] http://stackoverflow.com/help/mcve –
工作的一个例子和测试代码在F#创建DNF可发现[这里](https://github.com/jack-pappas/fsharp-logic-examples/blob/master/FSharpx.Books.AutomatedReasoning/prop.fs#L407)。这比你提出的要详细得多,需要几天的时间来理解它,因为它还包括解析和漂亮打印。你也应该让这本书真正理解它。因此它是一个评论。有[实施例](https://github.com/jack-pappas/fsharp-logic-examples/blob/master/Examples/prop.fsx),用于与一个REPL –