wyrm-math: 条件付きで健全な記号代数エンジン

wyrm-math: 条件付きで健全な記号代数エンジン

wyrm-math は、健全で操作可能な数学インターフェースを可能にします

wyrm-math は、ユーザーが項を移動させたり(等号を越えて項をドラッグしたり、累乗を展開したりするなど)、項を操作することで方程式を解く、インタラクティブな数学インターフェースを構築するために設計された、条件付きで健全な記号代数エンジンです。最終的な答えを検証する従来のソルバーとは異なり、wyrm-math は、到達可能なすべての状態が構成によって健全であることを保証します。つまり、不正な操作は設計上不可能です。

コアアーキテクチャ:構成による健全性

このエンジンは、方程式が検証されるのではなく、書き換えルールを通じてのみ変換されるという原則に基づいて動作します。これにより、ユーザーが到達するいかなる状態も数学的に妥当であることが保証されます。

条件付きの健全性と仮定

一部の代数的な操作は特定の条件下でのみ有効であるため、wyrm-math はこれらの条件を第一級の Assumptions(仮定)として扱います。これらの仮定は、数学的な整合性を維持するために方程式とともに移動します:

  • Restrictions(制限):解を失う可能性がある操作(例:変数 b で割るには b ≠ 0 という仮定が必要です)。
  • Extensions(拡張):余分な解を導入する可能性がある操作(例:両辺を二乗する)、これらは checkSolution プロセスによって解決される義務を伴います。
  • Pinned Assumptions(固定された仮定):ユーザー定義の「もしも」のシナリオ(例:x = 0 を固定する)。

厳密な算術

浮動小数点演算に伴う精度誤差を避けるため、wyrm-math はすべての算術に bigint 有理数を使用します。無理数根(√2 など)は近似値ではなく未定義の点として扱われ、「定義されている場所では真である」というエンジン全体の厳厳格な健全性契約に従います。

技術的実装

依存関係ゼロ、DOM 要件なしの純粋な TypeScript で構築されており、このエンジンは Node.js、ブラウザ、web workers、およびネイティブ webviews を含むあらゆる環境で動作するように設計されています。

式のツリーと AST

エンジンは、安定したノード ID を持つ不変の抽象構文木(AST)を使用します。N-ary の Sum および Product ノードを採用しており、減算を負の数との加算として表現することは、構造的な不変条件を維持するためにスマートコンストラクタを介して処理されます。

操作の列挙とレイアウト

エンジンの主要な機能の一つは、現在の状態において利用可能なすべての合法的な代数的アフォーダンスを特定する enumerateMoves(judgment) です。これにより、UI 開発者は、合法的な操作が実行可能な場所に正確にジェスチャーアンカー(ハンドルやドロップターゲット)を配置することができます。

スムーズなアニメーションを容易にするため、エンジンは layoutNode を提供し、これは静的なメトリックテーブルを使用して、ツリーを配置済みの ID キー付きのボックスとグリフにマッピングします。部分木の幾何学はコンテキストに依存しないため、レンダラーは書き換えの前後でノードを一致させ、それらを剛体的にアニメーションさせることができます。

機能セットとルールライブラリ

wyrm-math は、代数的な操作の幅広い範囲をカバーする約 25 個の組み込みルールを含んでいます:

  • Linear Equations(線形方程式):基本的な項の移動と、同類項の簡略化。
  • Distribution and Fractions(分配と分数):括弧の展開と分数の式の扱い。
  • Exponent Laws(指数法則):累乗と根号のルール。
  • Inequalities(不等式):負の数で掛けたり割ったりするときに不等号の向きを反転させる、符号を考慮したルール。
  • Quadratics(二次方程式):零積の性質と分岐(例:x² = 9x = 3 または x = -3 に分岐する)の扱い。

コミュニティの視点とユースケース

コミュニティの議論では、wyrm-math が代数の教育パラダイムを「解くべき問題」から「操作可能なパズル」へと転換させる可能性が強調されています。

"I appreciate how this frames algebra as a puzzle instead of a problem :)"

他の開発者は、エンジンのユーティリティを定理証明や、関数型プログラミングのための等式推論へと拡張する可能性を示唆しており、ルール適用のための視覚的なインターフェースが、手動の方程式と形式的な定理証明器との間のギャップを橋渡しできる可能性があると指摘しています。さらに、Pyodide を介して SymPy のような Python ベースのツールを現在使用している開発者は、ブラウザベースの Python の制限と、wyrm-math のようなネイティブ TypeScript 実装の潜在的な価値に言及しています。

Sources