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)被視為未定義點而非近似值,從而遵循引擎全域嚴格的「在兩者皆定義時為真」的健全性契約。

技術實作

該引擎使用純 TypeScript 編寫,零依賴且不需要 DOM,旨在可在任何環境中執行,包括 Node.js、瀏覽器、web workers 和原生 webviews。

表達式樹與 AST

該引擎使用具有穩定節點 ID 的不可變抽象語法樹 (AST)。它採用 N 元 SumProduct 節點,將減法表示為負數與加法的總和,並透過智慧建構子 (smart constructors) 來處理,以維持結構不變量。

操作枚舉與佈局

該引擎的主要功能之一是 enumerateMoves(judgment),它能識別當前狀態下所有合法的代數功能。這讓 UI 開發者能精確地將手勢錨點(控制點與放置目標)放置在可以執行合法操作的位置。

為了實現流暢的動畫,引擎提供了 layoutNode,它使用靜態度量表將樹映射到定位的、以 ID 為鍵的方框與字形。由於子樹幾何結構與上下文無關,渲染器可以在重寫過程中匹配節點並進行剛性動畫處理。

功能集與規則庫

wyrm-math 包含大約 25 個內建規則,涵蓋廣泛的代數運算:

  • Linear Equations:基礎項移動與同類項簡化。
  • Distribution and Fractions:展開括號與處理分數表達式。
  • Exponent Laws:冪次與根式的規則。
  • Inequalities:具備符號感知能力的規則,在乘以或除以負數時會翻轉關係。
  • Quadratic Equations:處理零乘積性質與分支(例如,x² = 9 分支為 x = 3x = -3)。

社群觀點與使用案例

社群討論強調了 wyrm-math 將代數教育範式從「待解問題」轉向「待操作拼圖」的潛力。

「我非常欣賞它將代數框架化為拼圖而非問題的方式 :)"

其他開發者建議將引擎的效用擴展到定理證明與函數式程式設計的等式推理中,並指出視覺化規則應用的介面可以彌合手動方程式與形式化定理證明器之間的差距。此外,目前使用 Python 工具(如透過 Pyodide 使用 SymPy)的開發者也指出瀏覽器端 Python 的限制,以及像 wyrm-math 這樣原生 TypeScript 實作的潛在價值。

Sources