私の問題: 記号式の操作。
シンボリック式は、+、-、*、/、min、max などの演算子を使用して、整数の定数と変数から作成されます。より正確には、式を次のように表現します (Caml コード):
type sym_expr_t =
| PlusInf
| MinusInf
| Const of int
| Var of var_t
| Add of sym_expr_t * sym_expr_t
| Sub of sym_expr_t * sym_expr_t
| Mul of sym_expr_t * sym_expr_t
| Div of sym_expr_t * sym_expr_t
| Min of sym_expr_t * sym_expr_t
| Max of sym_expr_t * sym_expr_t
有用で効率的な計算 (例: a + b - a = 0 または a + 1 > a) を実行するには、ある種の正規形が必要であり、それを操作する必要があると思います。上記の表現はおそらくうまく機能しません。
誰かがこれにどのようにアプローチすべきか教えてもらえますか? コードは必要ありません。やり方がわかれば簡単に書けます。構築/単純化/比較のための正規形および/またはアルゴリズムの表現を提示する論文へのリンクも役立ちます。
また、これを行う Ocaml ライブラリを知っていれば教えてください。