如何验证具有 & 符号的逻辑函数的解决方案(在逻辑包中使用)
How to verify solutions for Logic functions having ampersand symbol (used in Logic package)
例如,如果我们有一个逻辑函数 F = (x1 or x2) and (not x2) 那么我们可以验证一个解决方案 [x1=true, x2=false ] 等式 F = true 这样:
[> F:=(x1 or x2) and (not x2):
subs({x1=true,x2=false},F);
true
Maple Logic包有一个很好的函数Satisfy,它可以找到一个解决方案,但是函数F(现在它被命名为G)必须使用符号 & (在 and, or, not 之前):
[> G:=(x1 &or x2) &and (¬ x2):
A:=Logic[Satisfy](G);
A := {x1 = true, x2 = false}
但我不知道如何验证解决方案的简单方法(我的意思是不是在这种特定情况下,但一般来说,函数可能有数百个变量)。我的尝试是使用替换,然后使用 evalb,但它没有用:
[> G1:=subs(A,G);
evalb(G1);
G1:= (true &or false) &and ¬(false)
(true &or false) &and ¬(false)
但是对于函数 F,替换起作用了(即使没有 evalb):
[> F1:=subs(A,F);
F1:=true
我也找不到从表达式中删除 & 符号的简单方法(以便从函数 G 构造函数 F)。
G := (x1 &or x2) &and (¬ x2):
cand := {x1=true, x2=false}:
给定以 Logic
包使用的形式分配给 G
的逻辑表达式(即名称以 &
为前缀的运算符),然后将候选解决方案分配给 cand
可以测试如下:
BG := Logic:-Export(G, form=boolean);
BG := (x1 or x2) and not x2
eval(BG, cand);
true
结合这两个步骤,
eval(Logic:-Export(G, form=boolean), cand);
true
另一个类似于@acer的解决方案,但方向相反。如果您没有使用 Logic
包中的 Satisfy
以外的任何其他东西,并且您可以在您的示例中使用 F
中的逻辑公式,那么就没有必要让您的公式保存在 Logic
的样式中,带有 & 符号操作。在@acer 的回答中不要使用 Export
,而是使用 Import
。这是它在您的示例中的工作方式。
F := (x1 or x2) and (not x2):
A := Logic:-Satisfy( Logic:-Import( F ) );
F1 := subs( A, F );
请注意 Package:-Command
与 Packae[Command]
相同,只有细微差别。您也可以使用 eval( F, A )
而不是 subs( A, F )
。对于它们的区别,您可以查看 Maple 帮助页面。但是这里他们给出的结果和你想要的一样。
例如,如果我们有一个逻辑函数 F = (x1 or x2) and (not x2) 那么我们可以验证一个解决方案 [x1=true, x2=false ] 等式 F = true 这样:
[> F:=(x1 or x2) and (not x2):
subs({x1=true,x2=false},F);
true
Maple Logic包有一个很好的函数Satisfy,它可以找到一个解决方案,但是函数F(现在它被命名为G)必须使用符号 & (在 and, or, not 之前):
[> G:=(x1 &or x2) &and (¬ x2):
A:=Logic[Satisfy](G);
A := {x1 = true, x2 = false}
但我不知道如何验证解决方案的简单方法(我的意思是不是在这种特定情况下,但一般来说,函数可能有数百个变量)。我的尝试是使用替换,然后使用 evalb,但它没有用:
[> G1:=subs(A,G);
evalb(G1);
G1:= (true &or false) &and ¬(false)
(true &or false) &and ¬(false)
但是对于函数 F,替换起作用了(即使没有 evalb):
[> F1:=subs(A,F);
F1:=true
我也找不到从表达式中删除 & 符号的简单方法(以便从函数 G 构造函数 F)。
G := (x1 &or x2) &and (¬ x2):
cand := {x1=true, x2=false}:
给定以 Logic
包使用的形式分配给 G
的逻辑表达式(即名称以 &
为前缀的运算符),然后将候选解决方案分配给 cand
可以测试如下:
BG := Logic:-Export(G, form=boolean);
BG := (x1 or x2) and not x2
eval(BG, cand);
true
结合这两个步骤,
eval(Logic:-Export(G, form=boolean), cand);
true
另一个类似于@acer的解决方案,但方向相反。如果您没有使用 Logic
包中的 Satisfy
以外的任何其他东西,并且您可以在您的示例中使用 F
中的逻辑公式,那么就没有必要让您的公式保存在 Logic
的样式中,带有 & 符号操作。在@acer 的回答中不要使用 Export
,而是使用 Import
。这是它在您的示例中的工作方式。
F := (x1 or x2) and (not x2):
A := Logic:-Satisfy( Logic:-Import( F ) );
F1 := subs( A, F );
请注意 Package:-Command
与 Packae[Command]
相同,只有细微差别。您也可以使用 eval( F, A )
而不是 subs( A, F )
。对于它们的区别,您可以查看 Maple 帮助页面。但是这里他们给出的结果和你想要的一样。