Documentation

AMATELUS.JSONSchemaSubset

inductive JSONValue :

JSON値の型定義

JSON仕様(RFC 8259)に基づく6つのプリミティブ型:

  • null: ヌル値
  • bool: 真偽値
  • number: 数値(整数または浮動小数点)
  • string: 文字列
  • array: 値の順序付きリスト
  • object: キー・値ペアの非順序集合

設計上の注意:

  • numberは簡略化のためFloatで表現(実際のJSON仕様では任意精度)
  • objectはList (String × JSONValue)で表現(重複キーは許容)
Instances For

    オブジェクトからプロパティを検索

    Equations
    Instances For

      配列の長さを取得

      Equations
      Instances For

        オブジェクトのプロパティ数を取得

        Equations
        Instances For

          数値が整数かどうかを判定

          Equations
          Instances For

            JSON値が指定された基本型かどうかを判定

            Equations
            Instances For
              @[reducible, inline]

              JSON Pointer型(エラーパスの表現に使用)

              Equations
              Instances For
                inductive Schema :

                JSON Schema型(AMATELUSサブセット)

                JSON Schemaは以下のいずれか:

                • Boolean schema: true (すべて受理) または false (すべて拒否)
                • Object schema: キーワードのリストを含むオブジェクト

                サブセットの特徴:

                • $ref, $defs を含まない(循環参照を防止)
                • additionalProperties を検証しない(プロトコルレベルで無視)
                • if/then/else を含まない(oneOf で代替)
                Instances For
                  inductive SchemaKeyword :

                  スキーマキーワードの型(AMATELUSサブセット)

                  サポートされるキーワード:

                  • 型: type
                  • 文字列: maxLength, minLength, pattern
                  • 数値: maximum, minimum, multipleOf
                  • 配列: maxItems, minItems, uniqueItems, items
                  • オブジェクト: maxProperties, minProperties, required, properties
                  • 汎用: enum, const
                  • 組み合わせ: allOf, anyOf, oneOf, not (最大3レベル)
                  • アノテーション: title, description (検証に影響しない)

                  除外されたキーワード:

                  • $ref, $defs, $dynamicRef (参照系)
                  • additionalProperties, patternProperties (動的検証)
                  • if, then, else (条件分岐)
                  • format (フォーマット検証)
                  • その他のアノテーション (default, examples, deprecated, etc.)
                  Instances For

                    スキーマからtypeキーワードを取得

                    Equations
                    Instances For

                      スキーマからrequiredキーワードを取得

                      Equations
                      • One or more equations did not get rendered due to their size.
                      • x✝.getRequired = []
                      Instances For

                        スキーマからpropertiesキーワードを取得

                        Equations
                        • One or more equations did not get rendered due to their size.
                        • x✝.getProperties = []
                        Instances For

                          バリデーションエラーの情報

                          Instances For

                            バリデーション結果

                            Instances For

                              バリデーション結果が有効かどうか

                              Equations
                              Instances For

                                複数の結果を結合(すべて有効なら有効)

                                Equations
                                Instances For

                                  複数の結果のうち少なくとも1つが有効なら有効

                                  Equations
                                  Instances For

                                    複数の結果のうちちょうど1つが有効なら有効

                                    Equations
                                    Instances For
                                      @[reducible, inline]

                                      正規表現パターン型

                                      Equations
                                      Instances For
                                        structure MatchedString :

                                        マッチ成功した文字列

                                        正規表現パターンにマッチした文字列を表す型。 型レベルで正規性を保証し、UnknownVCと同様の設計パターンを使用。

                                        設計:

                                        • 実際の正規表現エンジン(ECMA-262)は外部実装に依存
                                        • プロトコルレベルではマッチ成功を抽象化
                                        • Issuer/Validatorが正しい実装を使用することを前提
                                        Instances For

                                          マッチ失敗した文字列

                                          正規表現パターンにマッチしなかった文字列を表す型。

                                          設計:

                                          • 型レベルでマッチ失敗を表現
                                          • 実装の詳細は抽象化
                                          Instances For

                                            未検証のマッチ結果

                                            正規表現マッチングの結果を表す和型。 ValidVC/InvalidVCと同様の設計パターン。

                                            命名の意図:

                                            • 「UnknownMatchResult」= 構造的には存在するが、マッチ状態は未確定または既知
                                            • マッチ成功/失敗のいずれかを型レベルで表現

                                            設計の利点:

                                            • 正規表現エンジンの実装詳細を抽象化
                                            • プロトコルレベルでは「マッチ/非マッチ」の区別のみが重要
                                            • 実装バグはunmatchedとして表現され、プロトコルの安全性には影響しない
                                            Instances For

                                              マッチ検証関数(定義として実装)

                                              設計の核心:

                                              • マッチ成功(matched): 常に検証成功
                                              • マッチ失敗(unmatched): 常に検証失敗

                                              この単純な定義により、正規表現エンジンの詳細を抽象化しつつ、 プロトコルの安全性を形式的に証明できる。

                                              Equations
                                              Instances For

                                                マッチ結果が成功かどうかを表す述語

                                                Equations
                                                Instances For

                                                  Theorem: マッチ成功した文字列は常に検証成功

                                                  正規表現にマッチした文字列は、検証が成功する。 これは定義から自明だが、明示的に定理として示す。

                                                  Theorem: マッチ失敗した文字列は常に検証失敗

                                                  正規表現にマッチしなかった文字列は、検証が失敗する。

                                                  structure ValidJSONValue :

                                                  スキーマに対して有効な JSON 値

                                                  型レベルでバリデーション成功を保証。 実際の検証ロジックは実装側(Rust/TypeScript等)で行われる。

                                                  設計:

                                                  • ValidVC と同じパターン
                                                  • 型自体が「検証済み」を表現
                                                  • プロトコルレベルでは抽象化
                                                  Instances For

                                                    スキーマに対して無効な JSON 値

                                                    型レベルでバリデーション失敗を保証。 実装側のバリデーターがエラーを検出した場合に使用される。

                                                    設計:

                                                    • InvalidVC と同じパターン
                                                    • エラー情報を含む(デバッグ用)
                                                    Instances For

                                                      未検証のバリデーション結果

                                                      構造的にはJSON値とスキーマのペアだが、バリデーション結果を表す和型。 ValidVC/InvalidVCと同様の設計パターン。

                                                      命名の意図:

                                                      • 「UnknownValidation」= 構造的には存在するが、バリデーション状態は未確定または既知
                                                      • valid/invalid のいずれかを型レベルで表現

                                                      設計の利点:

                                                      • バリデーションロジックの実装詳細を抽象化
                                                      • プロトコルレベルでは「valid/invalid」の区別のみが重要
                                                      • 実装バグはinvalidとして表現され、プロトコルの安全性には影響しない
                                                      Instances For

                                                        バリデーション検証関数(定義として実装)

                                                        設計の核心:

                                                        • 有効なJSON値(valid): 常に検証成功
                                                        • 無効なJSON値(invalid): 常に検証失敗

                                                        この単純な定義により、バリデーションロジックの詳細を抽象化しつつ、 プロトコルの安全性を形式的に証明できる。

                                                        実装の責任:

                                                        • 実装側(Rust/TypeScript)が実際のバリデーションを行う
                                                        • Lean側は型と性質のみを定義
                                                        Equations
                                                        Instances For

                                                          バリデーション結果が有効かどうかを表す述語

                                                          Equations
                                                          Instances For

                                                            Theorem: 有効なJSON値は常に検証成功

                                                            型レベルで有効と判定されたJSON値は、検証が成功する。 これは定義から自明だが、明示的に定理として示す。

                                                            Theorem: 無効なJSON値は常に検証失敗

                                                            型レベルで無効と判定されたJSON値は、検証が失敗する。

                                                            theorem Schema.true_accepts_all (value : JSONValue) :
                                                            (UnknownValidation.valid { value := value, schema := boolSchema true }).isValid

                                                            Theorem: Boolean schema true はすべての値を受理

                                                            Boolean schema true に対しては、任意のJSON値が有効。

                                                            theorem Schema.false_rejects_all (value : JSONValue) :
                                                            ¬(UnknownValidation.invalid { value := value, schema := boolSchema false, errors := [{ message := "Schema is 'false' (rejects all values)", path := "", keyword := "false" }] }).isValid

                                                            Theorem: Boolean schema false はすべての値を拒否

                                                            Boolean schema false に対しては、任意のJSON値が無効。

                                                            structure ValidSchema :

                                                            正規のスキーマ(AMATELUSサブセット)

                                                            構文的に正しく、バリデーションに使用できるスキーマ。

                                                            制約:

                                                            • required配列の要素は一意
                                                            • enum配列は空でない
                                                            • 数値制約は有効な範囲
                                                            • composition keywordsのネスト深さは最大3レベル
                                                            • $ref, $defs を含まない
                                                            Instances For
                                                              structure InvalidSchema :

                                                              不正なスキーマ

                                                              構文的に誤っているか、矛盾を含むスキーマ。

                                                              Instances For
                                                                inductive UnknownSchema :

                                                                未検証のスキーマ

                                                                パースされたが、正規性が未確定のスキーマ。

                                                                Instances For

                                                                  スキーマの構文検証

                                                                  検証内容:

                                                                  • required配列の一意性
                                                                  • enum配列の非空性
                                                                  • 数値制約の妥当性
                                                                  • composition nesting depth ≤ 3

                                                                  簡略化: 実装では常にtrueを返す(実際の検証は省略)

                                                                  Equations
                                                                  Instances For

                                                                    未検証スキーマから正規スキーマへの変換

                                                                    Equations
                                                                    Instances For

                                                                      例: オブジェクトスキーマ(Person)

                                                                      Equations
                                                                      • One or more equations did not get rendered due to their size.
                                                                      Instances For

                                                                        例: 配列スキーマ

                                                                        Equations
                                                                        • One or more equations did not get rendered due to their size.
                                                                        Instances For

                                                                          例: allOf 組み合わせ

                                                                          Equations
                                                                          • One or more equations did not get rendered due to their size.
                                                                          Instances For

                                                                            例: oneOf 組み合わせ(識別された和型)

                                                                            Equations
                                                                            • One or more equations did not get rendered due to their size.
                                                                            Instances For