给定一组 n 个元素U
和一组 m 个属性P
,其中 P 的每个元素定义一个从 U 到布尔值的函数。
给定以下形式的两个复合逻辑表达式(递归定义):
p1 : true iff p1(x) is true
e1 and e2 : means e1 and e2 are both true
e1 or e2 : means e1 and e2 are not both false
not e1 : true iff e1 is false
(e1) : true iff e1
这些逻辑表达式被解析为表达式语句(解析树)。
假设对于任何 p1、p2:所有四个集合(p1 和 p2)、(p1 和非 p2)、(非 p1 和 p2)、(非 p1 和非 p2)都是非空的。
我想确定逻辑表达式 L1 是否是 L2 的子集。即对于 U 中的每个元素 x,如果 L1(x) 为真,则 L2(x) 为真。
例如:
is_subset(not not p1, p1) is true
is_subset(p1, p2) is false
is_subset(p1 and p2 and p3, (p1 and p2) or p3) is true
我想我需要以某种方式“规范化”解析树,然后比较它们。任何人都可以概述一种方法或勾勒出一个架构吗?