我的最终目标是从文件中将一组命题公式加载到Prolog中,以便推断出一些事实。假设我有一个命题公式:
p implies not(q).
在Prolog中,这将是:
not(q) :- p
Prolog似乎不喜欢规则中的not操作符。我得到以下错误:
'$record_clause'/2: No permission to redefine built-in predicate `not/1'
Use :- redefine_system_predicate(+Head) if redefinition is intended
我知道两种重写p imp
这是一个prolog程序,它定义了命题逻辑的语法。
所以我被困在寻找X是Y的一个子公式的地方。我做了下面的谓词,但是我对这个有问题。不太确定之后该做什么。我知道我需要检查X和Y是否是公式,但我不明白下一步是什么。
at(a). % Our first atom.
at(b). % Our second atom.
%fmla shows if it is a formula or not
fmla(X):- at(X). % an atom is a formula
fmla(neg(X)) :- fmla(X). % neg(F) is a formula if F is a formula
我正在开发的应用程序是某种类型的“配置器”。它是用C#编写的,我甚至写了一个规则引擎来配合它。其思想是,有一堆命题逻辑语句,用户可以进行选择。根据他们选择的内容,一些其他项目变得必需或完全不可用。
命题逻辑语句一般采用以下形式:
A => ~X
ABC => ~(X+Y)
A+B => Q
A(~(B+C)) => ~Q A <=> B
符号:
=> -- Implication
<=> -- Material Equivalence
~ -- Not
+ -- Or
Two letters side-by-side --
我在prolog上很新,所以我尝试做一个命题逻辑求解器,它可以解决这个问题:
这样做的目的是在这样的咨询中传递p,q,r,s的布尔参数(仅仅是通过例子):
solvelogic(true,true,false,true).
所以我有一个知识库:
implies(X,Y) :- (not(X);Y). %that's implies formula and it works
xor(X,Y) :- not(X=Y). %that's xor formula and it
下面是我用来分析命题逻辑语句的语法。底部是错误。我假设这是因为我想使用(和)作为语言的一部分,以便它们可以被识别,但它们是保留的吗?有没有什么办法呢?
distinguished(s).
s ---> op, vp, cp. % A formula consists of an opening phrase, variable phrase and closing phrase.
op ---> bracket.
op ---> neg, bracket. %This allows for any number of Not's before the opening
我的目标如下。有什么策略可以解决这些琐碎的目标吗? Goal forall A (x : A) P Q,
(forall y, P y /\ Q y) ->
Q x.
Proof.
intros. intuition. auto.
Abort.
(* a more complex version *)
Goal forall A (x : A) P Q R,
(forall y, R -> P y /\ Q y) ->
R ->
Q x.
Proof.
intros. intuition. auto.
Abort.
我在学习咖喱-霍华德函授。
给定命题逻辑语句:(¬p -> q) -> ((¬p -> ¬q) -> p)。
我需要在OCaml中定义一个类型(作为命题)和一个函数(作为证明)。
我想出了下一个代码,然后卡住:
type empty = | ;;
let ex58: (('p->empty) -> 'q) -> (('p->empty) -> ('q->empty)) -> 'p = fun f g -> g(f)
错误:
This expression has type (
我有以下几点:
type Name = String
data Prop
= Var Name
| F
| T
| Not Prop
| Prop :|: Prop
| Prop :&: Prop
deriving (Eq, Read)
infixr 2 :|:
类型Prop表示一个命题公式。命题变量如p和q可以用Var "p“和Var "q”表示。
F和T是假和真的常量布尔值。
不表示否定(~或)
::和:&:表示分离(/)和合并(/)
我们可以写逻辑命题:
( Var "p" :|: Var "q") :&: ( No
实际上,我并不认为“类型扩展”这一术语的正式含义是我想要的,但这是我唯一能想到的术语。
我有一个多态Haskell类型来表示命题逻辑中的术语:
data PropLogic a = Prop a | Tautology | Contradiction | And (PropLogic a) (PropLogic a)
| Or (PropLogic a) (PropLogic a) | Implies (PropLogic a) (PropLogic a)
| Not (PropLogic a)
deriving (E
我试着做以下几句:
¬ = lambda x: not x
但我得到了以下错误:
File "<stdin>", line 1
¬ = lambda x: not x
^
SyntaxError: invalid character in identifier
好的,我知道在Python中这是一个无效的句子,但是我正在寻找一个允许我使用这个语法的解决方案。
我的目标是创建一个脚本来轻松地运行命题逻辑,如果我能这样做,我就能够用糖语法做一些事情,如下所示:
¬ False
>>>True
我试图用SML结构定义命题逻辑赋值。名为变量(即字符串)到布尔值的命题逻辑映射中的赋值。
这是我的签名:
signature VALUATION =
sig
type T
val empty: T
val set: T -> string -> bool -> T
val value_of: T -> string -> bool
val variables: T -> string list
val print: T -> unit
end;
然后我定义了一个匹配的结构:
structure Valu
下面是使用moment.js进行格式化的难点。
问题是,当输入年份为YY而不是YYYY时,结果显示为00YY
例如
year :13结果中的年份为0013
代码
var now = moment("2-3-15","DD/MM/YYYY").format("MM/DD/YYYY");
$('#formatteddate').text(now);
我目前正在尝试使用Python模块为命题逻辑构建一个解析器。SLY是lex和yacc的Python实现。
文档中说:"SLY没有为构造抽象语法树提供特殊的功能,但是,这样的构造很容易自己完成。“这就是我想要做的。在他们的示例代码中,他们建议通过为树节点定义自己的数据结构并在语法规则中使用它来做到这一点。
class BinOp(Expr):
def __init__(self, op, left, right)
self.op = op
self.left = left
self.right = right
class Num