arithmetic

Luna-Flow/arithmetic は Luna Flow の数値型の解析的能力を定義する。初等関数、構造化エラーを返す検査付き演算、明示的な精度と丸めモードのもとで結果がどう丸められたかを報告するコンテキスト付き演算、そして区間のような包含区間どうしの関係である。Float、Double、整数型の既定のインスタンスを提供し、コンテキストに忠実な算術と証明付き算術は、同じトレイトを実装するバックエンドに任せる。

このマニュアルはバージョン 0.5.0 と、CHANGELOG.md に記載した未リリースの MoonBit 0.10 移行を記述する。

位置付け

luna-generic は型が何であるか(Ring、Field など)を述べる。arithmetic はその型がどの解析的演算をサポートし、それがどう失敗するかを述べる。数値バックエンドがこれらのトレイトを実装し、アルゴリズムは具体的な数値型ではなくトレイトに依存する。

層例戻り値使う場面
非検査Sqrt::sqrtSelf型自身の特殊値の振る舞いで構わない
検査付きSqrtChecked::sqrt_checkedResult[Self, ArithmeticError]不正な入力を処理されるエラーにしなければならない
コンテキスト付きSqrtContextual::sqrt_contextualResult[ArithmeticOutcome[Self], ArithmeticError]精度と丸めを明示し、診断が重要である
包含区間の関係DefinitelyLt::definitely_ltBool値が点ではなく区間やボールである

パッケージ

モジュールにはソースルート src/ に一つのパッケージがあり、core として文書化される。

パッケージインポートパス内容ページ
coreLuna-Flow/arithmetic能力トレイト、ArithmeticContext、診断、エラーと証明の詳細、Float/Double/整数のインスタンスAPI、チュートリアル、設計

ブラックボックステスト(src/*_test.mbt)とホワイトボックステスト(src/certification_error_wbtest.mbt)は同じパッケージに属する。それらが何を確かめるかは検証ガイドに挙げる。

読み進め方

  • パッケージが初めての場合: はじめにを読み、続いて core チュートリアル を読む。
  • ライブラリで使う場合: core API を手元に置くこと。その表は、提供される各インスタンスが境界(NaN、ゼロ、無限大、オーバーフロー)で実際に何をするかを示す。
  • バックエンドを実装する、または貢献する場合: 契約とその数学については core 設計 を、構成についてはアーキテクチャを読み、プルリクエストを出す前に検証と規約を読む。

インストール

moon add Luna-Flow/arithmetic@0.5.0
import {
  "Luna-Flow/arithmetic" @lf_arith,
}

このパッケージは Float と Double の初等関数のために Kaida-Amethyst/math に依存する。テストでは Luna-Flow/luna-generic も使う。

ツールチェーン

コードは moon.mod と moon.pkg マニフェストを使う MoonBit moonc 0.10 以降を対象とし、wasm-gc、wasm、js、native の各バックエンドで検査される。

ガイド

  • はじめに:インストール、最初の汎用関数、最初の検査付き・コンテキスト付きの呼び出し。
  • アーキテクチャ:ソースの構成、層、エラーと状態。
  • 検証:ローカルでの確認手順、CI、テストが確かめること。
  • リポジトリの規約:Luna Flow の標準に加えてこのマニュアルに課す規則。