<jupyter_start><jupyter_text>布尔代数布尔代数又叫逻辑演算,是使用数学方法研究逻辑问题的学科,他用等式表示判断,把推理看作等式的变换.这种变换的有效性不依赖人们对符号的解释,只依赖于符号的组合规律.布尔代数究是非常重要的数学分支,电子,计算机等学科都是建立在其之上.SymPy对逻辑演算也有支持,使用的是子模块`sympy.logic`下.<jupyter_code>from sympy import init_printing
init_printing(use_unicode=True)<jupyter_output><empty_output><jupyter_text>基本的布尔运算布尔代数研究的对象取值范围就是真值`true`和假值`false`,基本操作也只有4个:与`&(And)`,或`|(Or)`,非`~(Not)`,symbol对象可以直接使用对应运算符构造表达式<jupyter_code>from sympy import symbols
x, y = symbols('x,y')
y | (x & y)
x | y
~x<jupyter_output><empty_output><jupyter_text>要代入值计算布尔代数表达式只要使用`.subs`接口即可.<jupyter_code>from sympy.logic import true,false
(y & x).subs({x: true, y: true})<jupyter_output><empty_output><jupyter_text>注意Sympy下的true,false不等同于python中的True,False,要做判断需要使用`if`.千万不要使用`==`或`is`<jupyter_code>True if true else False
True if false else False
True == true
False == false
True is true
False is false<jupyter_output><empty_output><jupyter_text>扩展的布尔运算在实际使用中布尔运算常用的运算符往往是上面三个基本运算符的组合,SymPy还支持的运算符包括:运算符接口|运算符|含义---|---|---`^(Xor)`|异或|同则false,异则true`Nand`|与非门|当输入均为true ,则输出为false;若输入中至少有一个为false,则输出为true`Nor`|或非门|当输入均为false,则输出为true;若输入中至少有一个为true,则输出为false` >> (Implies)`|蕴含|相当于`！A \| B`,`<<`代表逆蕴含`Equivalent`|等价|相当于当一个为true时另一个也为true;当一个为false时另一个也为false<jupyter_code>x ^ y
from sympy.logic import Nand,Nor,Equivalent
Nand(x, y)
Nor(x, y)
x >> y
Equivalent(x,y)<jupyter_output><empty_output><jupyter_text>ITE这个方法在`sympy.logic.boolalg`下,`ITE`是一个三元运算符,含义就和python中的`xxx if xxx else ...`一样.<jupyter_code>from sympy.logic.boolalg import ITE
ITE(true | false, true & true, true ^ true)<jupyter_output><empty_output><jupyter_text>合取范式和析取范式SymPy中可以使用`to_cnf(expr, simplify=False)`将逻辑表达式转换为合取范式,使用`is_cnf(expr)`判断表达式是否符合合取范式;使用`to_dnf(expr, simplify=False)`将逻辑表达式转换为析取范式,使用`is_dnf(expr)`判断表达式是否符合析取范式.<jupyter_code>from sympy.abc import A, B, D
from sympy.logic.boolalg import to_cnf,is_cnf
expr = ~(A | B) | D
expr
expr_cnf = to_cnf(expr)
expr_cnf
is_cnf(expr)
is_cnf(expr_cnf)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.14459049544994945, 'fraction_numerical': 0.0005055611729019212, 'mean_word_length': 12.743055555555555, 'pattern_counts': {'":': 0, '<': 31, '<?xml version=': 0, '>': 33, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 1, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '7', 'dir': 'jupyter-structured-clean-dedup', 'id': '135559', 'license': 'MIT', 'n_tokens_mistral': 1149, 'n_tokens_neox': 1274, 'n_words': 93, 'path': 'src/数据分析篇/工具介绍/SymPy/符号计算/.ipynb_checkpoints/布尔代数-checkpoint.ipynb', 'repo_name': 'hsz1273327/TutorialForDataScience', 'size': '1978'}