7

私は、シンボル と が任意の型の未知数になる可能性があるシンボリック操作を許可する python ライブラリに興味があります。

これは私が書きたいコードです:

>>> myexpression = symbol("foo") == "bar"
>>> print myexpression
foo == "bar"
>>> print myexpression(foo="quux")
False
>>> myexpression.or_(True)
True

またはそれの大まかな概算。実際にはそれほど賢い必要はありません。上記のようなものを取得するために、多くの追加のイントロスペクション メソッドを呼び出さなければならないことを十分に嬉しく思います (たとえば、論理トートロジーが直接単純化されていなくても)。

私の最初の本能はsympyを見ることでしたが、ライブラリはシンボリック変数が数値でなければならないという強い仮定をしているようです。そして、少なくともシーケンスとセットを操作したいと思います:

>>> myexpression = sympy.Eq(sympy.Symbol("foo"), 5)
>>> myexpression
foo == 5
>>> myexpression = sympy.Eq(sympy.Symbol("foo"), "bar")
Traceback (most recent call last):
  ...
sympy.core.sympify.SympifyError: SympifyError: 'bar'

非数値変数を理解するためにsympyを取得する方法、または同様のことができる別のライブラリはありますか?

4

3 に答える 3

1

あなたが考えている用途にどれだけ適合するかはわかりませんが、nltk(Natural Language Toolkit) には、1 次論理、型付きラムダ計算、および定理証明を含む記号操作用のモジュールがあります。このハウツーを見てください。

于 2012-03-26T16:24:41.330 に答える
0

ブール論理はSymPyにありますが、本来あるべきほど簡単には表現できません。それは間違いなくそこにあります。

In [1]: x,y,z = symbols('x y z')
In [2]: A = Eq(x,y)
In [3]: A
Out[3]: x = y

In [4]: B = Gt(y,z)
In [5]: And(A,B)
Out[5]: x = y ∧ y > z

In [6]: C = Gt(x,z)
In [7]: And(A, Or(B,C))
Out[7]: x = y ∧ (y > z ∨ x > z)

これらの式を単純化するための多くの方法を私は知りません。でも、興味があれば簡単にできるようなことです。

于 2012-02-29T14:21:42.807 に答える
0

すべてを Sympy シンボルにマッピングしていただけませんか? たとえば、最後の式: sympy.Eq(sympy.Symbol("foo"), sympy.Symbol("bar"))。それとも、セットの関係について論理的なステートメントを実際に書きたいということですか?

于 2011-09-26T06:53:35.823 に答える