π ΠΠ°ΠΊ ΡΠ΅ΡΠ°ΡΡ Π°Π»Π³Π΅Π±ΡΡ Π»ΠΎΠ³ΠΈΠΊΠΈ Π½Π° ΠΠΈΡΠΎΠ½Π΅ - Π»ΡΡΡΠΈΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΡ
Π§ΡΠΎΠ±Ρ ΡΠ΅ΡΠ°ΡΡ Π°Π»Π³Π΅Π±ΡΡ Π»ΠΎΠ³ΠΈΠΊΠΈ Π½Π° Python, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ SymPy. ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ:
from sympy.logic.boolalg import Or, And, Not
from sympy.abc import A, B, C
expression = Or(And(A, B), Not(C))
result = expression.simplify()
print(result)
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ A, B, C ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ²ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠ»Π°ΡΡΠΎΠ² Or, And, Not ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ SymPy. ΠΠ°ΡΠ΅ΠΌ Π²ΡΠ·ΠΎΠ²ΠΈΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ simplify() Π΄Π»Ρ ΡΠΏΡΠΎΡΠ΅Π½ΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Π²ΡΠ²Π΅Π΄ΠΈΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ. ΠΠ΅ Π·Π°Π±ΡΠ΄ΡΡΠ΅ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΊΠ»Π°ΡΡΡ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅.
ΠΠ΅ΡΠ°Π»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ
ΠΠ°ΠΊ ΡΠ΅ΡΠ°ΡΡ Π°Π»Π³Π΅Π±ΡΡ Π»ΠΎΠ³ΠΈΠΊΠΈ Π½Π° ΠΏΠΈΡΠΎΠ½Π΅
ΠΠ»Π³Π΅Π±ΡΠ° Π»ΠΎΠ³ΠΈΠΊΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ Π²Π°ΠΆΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΡΡ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Π·Π°Π½ΠΈΠΌΠ°Π΅ΡΡΡ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΡΠΌΠΈ Ρ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ. ΠΡΠ»ΠΈ Π²Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ΅ΡΠ΅ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ Π°Π»Π³Π΅Π±ΡΡ Π»ΠΎΠ³ΠΈΠΊΠΈ Π² ΡΠ²ΠΎΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ Π½Π° ΠΏΠΈΡΠΎΠ½Π΅, Ρ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΠ» ΡΡΡ ΡΡΠ°ΡΡΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠΌΠΎΡΡ Π²Π°ΠΌ Π² ΡΡΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ΅.
1. Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ SymPy
ΠΠ΅ΡΠ²ΡΠΌ ΡΠ°Π³ΠΎΠΌ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠΈ Π°Π»Π³Π΅Π±ΡΡ Π»ΠΎΠ³ΠΈΠΊΠΈ Π½Π° ΠΏΠΈΡΠΎΠ½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ SymPy. SymPy - ΡΡΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠΈ Π΄Π»Ρ ΠΏΠΈΡΠΎΠ½Π°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΌΠΎΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΠΌΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ.
pip install sympy
2. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²
ΠΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ SymPy ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΡΠ°ΡΡ ΡΠ°Π±ΠΎΡΡ Ρ Π°Π»Π³Π΅Π±ΡΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ. Π‘Π½Π°ΡΠ°Π»Π° Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅.
from sympy import symbols
# Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠΈΠΌΠ²ΠΎΠ»Ρ
p, q = symbols('p q')
3. ΠΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π»ΠΎΠ³ΠΈΠΊΠΈ
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»Ρ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π°Π΄ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² SymPy, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ And (Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ "ΠΈ"), Or (Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ "ΠΈΠ»ΠΈ") ΠΈ Not (Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ "Π½Π΅").
from sympy.logic.boolalg import And, Or, Not
# ΠΡΠΈΠΌΠ΅Ρ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ
expr = And(p, Or(p, q))
4. Π£ΠΏΡΠΎΡΠ΅Π½ΠΈΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ
Π§Π°ΡΡΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠΏΡΠΎΡΡΠΈΡΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ Π»Π΅Π³ΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°. SymPy ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΡ simplify (), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΡΠΏΡΠΎΡΠ΅Π½ΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ.
from sympy import simplify
# Π£ΠΏΡΠΎΡΠ΅Π½ΠΈΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ
simplified_expr = simplify(expr)
5. ΠΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ
ΠΠΎΠ³Π΄Π° Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»Ρ ΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΡΠΈΡΠ»ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, Π·Π°ΠΌΠ΅Π½ΠΈΠ² ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. SymPy ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΡ subs (), ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΡΠΎΠΉ ΡΠ΅Π»ΠΈ.
# ΠΠ°ΠΌΠ΅Π½Π° ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π½Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ
expr_with_values = expr.subs([(p, True), (q, False)])
# ΠΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ
result = expr_with_values.evalf()
6. Π Π΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΉ
SymPy ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ΅ΡΠ°ΡΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ solve () Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΡΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ.
from sympy import solve
# Π Π΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ
solution = solve(expr, p)
ΠΡΠΎ ΠΎΡΠ½ΠΎΠ²Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π°Π»Π³Π΅Π±ΡΡ Π»ΠΎΠ³ΠΈΠΊΠΈ Π½Π° ΠΏΠΈΡΠΎΠ½Π΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ SymPy. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΡΡΡ ΠΎΠ±Π»Π°ΡΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ SymPy Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ. Π£ΡΠΏΠ΅Ρ ΠΎΠ² Π²Π°ΠΌ Π² ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π°Π»Π³Π΅Π±ΡΡ Π»ΠΎΠ³ΠΈΠΊΠΈ Π² Π²Π°ΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ Π½Π° ΠΏΠΈΡΠΎΠ½Π΅!