如何验证具有 & 符号的逻辑函数的解决方案(在逻辑包中使用)

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 (&not x2):
   A:=Logic[Satisfy](G);
                           A := {x1 = true, x2 = false}

但我不知道如何验证解决方案的简单方法(我的意思是不是在这种特定情况下,但一般来说,函数可能有数百个变量)。我的尝试是使用替换,然后使用 evalb,但它没有用:

[> G1:=subs(A,G);
   evalb(G1);
                   G1:= (true &or false) &and &not(false)
                      (true &or false) &and &not(false)

但是对于函数 F,替换起作用了(即使没有 evalb):

[> F1:=subs(A,F);
                                F1:=true

我也找不到从表达式中删除 & 符号的简单方法(以便从函数 G 构造函数 F)。

G := (x1 &or x2) &and (&not 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:-CommandPackae[Command] 相同,只有细微差别。您也可以使用 eval( F, A ) 而不是 subs( A, F )。对于它们的区别,您可以查看 Maple 帮助页面。但是这里他们给出的结果和你想要的一样。