Je suis tombé sur un problème de substitution de variables dans des formules logiques dans Sympy. Voici un exemple minimal -
from sympy import *
x, y = symbols('x y')
Nand(x, y).subs({x: Nand(x, y)}, simultaneous=True)
Cela échoue à la fois dans mon inter-opérateur local et dans le shell live sur Docs SymPy avec le message d'erreur
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/base/data/home/apps/s~sympy-live-hrd/49.400254913747479351/sympy/sympy/core/basic.py", line 889, in subs
d = Dummy(commutative=new.is_commutative)
File "/base/data/home/apps/s~sympy-live-hrd/49.400254913747479351/sympy/sympy/core/symbol.py", line 205, in __new__
cls._sanitize(assumptions, cls)
File "/base/data/home/apps/s~sympy-live-hrd/49.400254913747479351/sympy/sympy/core/symbol.py", line 65, in _sanitize
'%scommutativity must be True or False.' % whose)
ValueError: Dummy commutativity must be True or False.
D'autres formulations que j'ai essayées, comme remplacer les "Nand" par des "And", n'ont pas échoué. Le fait de définir simultaneous=False n'échoue pas non plus, mais ne donnera pas le résultat souhaité si je veux remplacer y en même temps (cf. cette question pour en savoir plus).
S'agit-il d'un bogue dans SymPy, ou est-ce que je comprends mal quelque chose ?