---
generated_at: 2026-02-19 12:00:00
metrics:
  claims_total: 100
  claims_with_evidence: 95
  claims_without_evidence: 5
confidence_derived: 0.95
---

# 根拠レポート：Compiler-Checking単体テストケース一覧

## 本レポートについて

### 目的
本レポートは、生成された単体テストケース一覧の信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

### チェック方法
以下の観点でドキュメントの内容（Claim：主張）を検証しています：

1. **根拠の有無確認**：各主張に対して、ソースコード・既存設計書・要件定義書などの根拠（Evidence）が存在するか
2. **根拠との整合性**：主張の内容が根拠と矛盾していないか
3. **網羅性**：参照すべき情報源を適切にカバーしているか

### 信頼度スコアの算出
- **confidence_derived** = 根拠あり件数 / 総主張件数
- 状態「○」：根拠あり、「△」：根拠不足または要確認

### 本レポートの使い方
1. まず「サマリー」で全体の信頼度と優先レビュー項目を確認
2. 「Claims と根拠の対応」で △ の項目を重点的にレビュー
3. 「不足情報」で補完が必要な情報源を確認

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.95**
  - 根拠あり：95 / 100、根拠なし：5
- 優先レビュー（高）
  1. **UT-CHK-065〜068**：PatternMatchCompilation反例生成の内部ロジック検証
  2. **UT-CHK-076**：CombineTwoLimitsの境界条件
  3. **UT-CHK-095〜096**：UngeneralizableItemの内部キャッシュメカニズム

## 2) 参照した情報（Evidence一覧）
> ここに「実在するもの」だけ列挙。抽出フェーズで付けたIDをそのまま出す。

- E-01: `src/Compiler/Checking/TypeRelations.fs` - 型関係処理（TypeDefinitelySubsumesTypeNoCoercion, TypesFeasiblyEquivalent等）
- E-02: `src/Compiler/Checking/AccessibilityLogic.fs` - アクセシビリティロジック（IsAccessible, IsILMemberAccessible等）
- E-03: `src/Compiler/Checking/AttributeChecking.fs` - 属性チェック（CheckFSharpAttributes, AttribInfo等）
- E-04: `src/Compiler/Checking/CheckFormatStrings.fs` - フォーマット文字列解析（parseFormatStringInternal, Parse module）
- E-05: `src/Compiler/Checking/SignatureConformance.fs` - シグネチャ適合性（Checker class, checkTypars, checkVal等）
- E-06: `src/Compiler/Checking/InfoReader.fs` - 情報読み取り（InfoReader class, PropertyCollector等）
- E-07: `src/Compiler/Checking/PatternMatchCompilation.fs` - パターンマッチコンパイル（Pattern type, RefuteDiscrimSet等）
- E-08: `src/Compiler/Checking/PostInferenceChecks.fs` - 型推論後チェック（env type, Limit module, CheckEscapes等）
- E-09: `src/Compiler/Checking/MethodOverrides.fs` - メソッドオーバーライド（OverrideInfo, DispatchSlotChecking module）
- E-10: `src/Compiler/Checking/CheckBasics.fs` - 基本チェック構造（TcEnv, TcFileState, CtorInfo等）

## 3) Claims と根拠の対応（レビューの主戦場）

### TypeRelations.fs（UT-CHK-001〜010）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | TypeDefinitelySubsumesTypeNoCoercionが同一型でtrueを返す | E-01 line 64: `if ty1 === ty2 then true` | ○ |
| C-02 | 派生型が基底型を包含する判定 | E-01 line 75-77: GetSuperTypeOfType呼び出し | ○ |
| C-03 | ndeep > 100でエラー | E-01 line 61-62: `if ndeep > 100 then error(InternalError(...))` | ○ |
| C-04 | TypesFeasiblyEquivalentの等価判定 | E-01 line 91-122 | ○ |
| C-05 | 型変数を含む場合のtrue判定 | E-01 line 101-102: `TType_var _, _ -> true` | ○ |
| C-06 | obj型の参照型包含 | E-01 line 152-154: `isObjTyAnyNullness` | ○ |
| C-07 | キャッシュ機能 | E-01 line 167-172: `getTypeSubsumptionCache` | ○ |
| C-08 | ChooseTyparSolutionの解選択 | E-01 line 239-243 | ○ |
| C-09 | 解決失敗時のエラー | E-01 line 196: `errorR(Error(...))` | ○ |
| C-10 | FindUniqueFeasibleSupertypeの実装 | E-01 line 354-364 | ○ |

### AccessibilityLogic.fs（UT-CHK-011〜020）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-11 | AccessorDomain比較 | E-02 line 50-56: CustomEquals | ○ |
| C-12 | 公開アクセスの判定 | E-02 line 61: `canAccessFromEverywhere taccess` | ○ |
| C-13 | 内部アクセスの判定 | E-02 line 64-65: `List.exists (canAccessFrom taccess) cpaths` | ○ |
| C-14 | ILメンバーpublicアクセス | E-02 line 70-71: `access = ILMemberAccess.Public` | ○ |
| C-15 | protected継承アクセス | E-02 line 80-86: `accessibleByFamily` | ○ |
| C-16 | エンティティアクセス | E-02 line 171-175: IsEntityAccessible | ○ |
| C-17 | 非アクセス可能型エラー | E-02 line 180-181: `errorR(Error(...))` | ○ |
| C-18 | valアクセス判定 | E-02 line 305-306: IsValAccessible | ○ |
| C-19 | 共用体ケースアクセス | E-02 line 312-314: IsUnionCaseAccessible | ○ |
| C-20 | レコードフィールドアクセス | E-02 line 323-325: IsRecdFieldAccessible | ○ |

### AttributeChecking.fs（UT-CHK-021〜030）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-21 | 属性引数抽出 | E-03 line 94-108: ConstructorArguments | ○ |
| C-22 | 名前付き引数抽出 | E-03 line 110-125: NamedArguments | ○ |
| C-23 | Obsolete属性検出 | E-03 line 335-362: CheckObsoleteAttributes | ○ |
| C-24 | isError=trueのObsolete | E-03 line 353-354: `ErrorD(ObsoleteDiagnostic(true,...))` | ○ |
| C-25 | CompilerMessage属性 | E-03 line 364-383: CheckCompilerMessageAttribute | ○ |
| C-26 | Obsolete存在チェック | E-03 line 469-475: CheckFSharpAttributesForObsolete | ○ |
| C-27 | IsHidden検出 | E-03 line 458-466: CheckFSharpAttributesForHidden | ○ |
| C-28 | メソッド属性チェック | E-03 line 544-570: CheckMethInfoAttributes | ○ |
| C-29 | unseenメソッド判定 | E-03 line 574-613: MethInfoIsUnseen | ○ |
| C-30 | セキュリティ属性検出 | E-03 line 655-669: IsSecurityAttribute | ○ |

### CheckFormatStrings.fs（UT-CHK-031〜040）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-31 | 整数フォーマット解析 | E-04 line 398-403: `'d' \| 'i' \| 'u'...` | ○ |
| C-32 | 文字列フォーマット解析 | E-04 line 447-452: `'s' -> ... string_ty` | ○ |
| C-33 | 浮動小数点フォーマット | E-04 line 430-433: `'f' \| 'F' \| 'e'...` | ○ |
| C-34 | 幅指定解析 | E-04 line 167-172: widthAndPrecision | ○ |
| C-35 | 精度指定解析 | E-04 line 145-150: precision | ○ |
| C-36 | 無効フォーマットエラー | E-04 line 505: `failwith (FSComp.SR.forBadFormatSpecifierGeneral(...))` | ○ |
| C-37 | %%エスケープ処理 | E-04 line 318-327: `fmt[i..(i+1)] = "%%"` | ○ |
| C-38 | 引数カウント | E-04 line 517-522: TryCountFormatStringArguments | ○ |
| C-39 | 無効フォーマットでNone | E-04 line 521: `with _ -> None` | ○ |
| C-40 | newInfo初期化 | E-04 line 46-50: newInfo関数 | ○ |

### SignatureConformance.fs（UT-CHK-041〜053）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-41 | 型パラメータ照合 | E-05 line 129-178: checkTypars | ○ |
| C-42 | 型パラメータ数不一致エラー | E-05 line 130-132: `if implTypars.Length <> sigTypars.Length` | ○ |
| C-43 | 型定義照合 | E-05 line 180-284: checkTypeDef | ○ |
| C-44 | 型名不一致エラー | E-05 line 189-191: `if implTycon.LogicalName <> sigTycon.LogicalName` | ○ |
| C-45 | 値定義照合 | E-05 line 339-375: checkVal | ○ |
| C-46 | 可変性不一致エラー | E-05 line 349: `if implVal.IsMutable <> sigVal.IsMutable` | ○ |
| C-47 | 型不一致エラー | E-05 line 371: `err denv FSComp.SR.ValueNotContainedMutabilityTypesDiffer` | ○ |
| C-48 | 共用体ケース照合 | E-05 line 395-405: checkUnionCase | ○ |
| C-49 | フィールド数不一致 | E-05 line 402: `implUnionCase.RecdFieldsArray.Length <> sigUnionCase.RecdFieldsArray.Length` | ○ |
| C-50 | フィールド照合 | E-05 line 407-435: checkField | ○ |
| C-51 | フィールド名不一致 | E-05 line 427: `if implField.rfield_id.idText <> sigField.rfield_id.idText` | ○ |
| C-52 | モジュール内容照合 | E-05 line 635-700: checkModuleOrNamespaceContents | ○ |
| C-53 | シグネチャ照合 | E-05 line 711-712: CheckSignature | ○ |

### InfoReader.fs（UT-CHK-054〜060）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-54 | メソッド情報取得 | E-06 line 57-95: GetImmediateIntrinsicMethInfosOfTypeAux | ○ |
| C-55 | 名前フィルタ機能 | E-06 line 48: `checkFilter optFilter (nm: string)` | ○ |
| C-56 | プロパティ情報取得 | E-06 line 193-234: GetImmediateIntrinsicPropInfosOfTypeAux | ○ |
| C-57 | プロパティ結合 | E-06 line 164-176: PropertyCollector.add | ○ |
| C-58 | 配列型インデクサ判定 | E-06 line 246: `isArray1DTy g ty` | ○ |
| C-59 | リスト型インデクサ判定 | E-06 line 247: `isListTy g ty` | ○ |
| C-60 | 最具体型選択 | E-06 line 257-271: GetMostSpecificItemsByType | ○ |

### PatternMatchCompilation.fs（UT-CHK-061〜069）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-61 | サブ式バインディング | E-07 line 105-128: BindSubExprOfInput | ○ |
| C-62 | サブ式取得 | E-07 line 130-132: GetSubExprOfInput | ○ |
| C-63 | パス等価性（同一） | E-07 line 149-158: pathEq | ○ |
| C-64 | パス非等価性 | E-07 line 149-158: pathEq | ○ |
| C-65 | 反例生成 | E-07 line 205-315: RefuteDiscrimSet | △ |
| C-66 | CannotRefute例外 | E-07 line 267, 305等: `raise CannotRefute` | ○ |
| C-67 | 反例結合 | E-07 line 317-357: CombineRefutations | △ |
| C-68 | カウンター例表示 | E-07 line 359-377: ShowCounterExample | ○ |
| C-69 | IL定数変換 | E-07 line 177-192: ilFieldToTastConst | ○ |

### PostInferenceChecks.fs（UT-CHK-070〜079）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-70 | 型パラメータバインド | E-08 line 107-118: BindTypar, BindTypars | ○ |
| C-71 | 値バインド | E-08 line 296-327: BindVal | ○ |
| C-72 | 未使用値警告 | E-08 line 322-325: `warning (Error(FSComp.SR.chkUnusedValue...))` | ○ |
| C-73 | リミット取得 | E-08 line 239-271: GetLimitVal | ○ |
| C-74 | Spanリミット設定 | E-08 line 249-257: `if isSpanLikeTy cenv.g m v.Type` | ○ |
| C-75 | byrefリミット取得 | E-08 line 274-290: GetLimitValByRef | ○ |
| C-76 | リミット結合 | E-08 line 152-188: CombineTwoLimits | △ |
| C-77 | byrefエスケープ検出 | E-08 line 475-500: CheckEscapes | ○ |
| C-78 | 深い型チェック | E-08 line 350-430: CheckTypeDeep | ○ |
| C-79 | byref-like型検出 | E-08 line 463-464: CheckForByrefLikeType | ○ |

### MethodOverrides.fs（UT-CHK-080〜090）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-80 | CanImplement取得 | E-09 line 51: `member x.CanImplement` | ○ |
| C-81 | 名前マッチング（一致） | E-09 line 226-227: IsNameMatch | ○ |
| C-82 | 名前マッチング（不一致） | E-09 line 226-227: IsNameMatch | ○ |
| C-83 | 完全一致検証 | E-09 line 318-321: IsExactMatch | ○ |
| C-84 | 部分一致検証 | E-09 line 246-252: IsSigPartialMatch | ○ |
| C-85 | スロット実装確認 | E-09 line 324-327: OverrideImplementsDispatchSlot | ○ |
| C-86 | 実装済み検出 | E-09 line 330-333: DispatchSlotIsAlreadyImplemented | ○ |
| C-87 | 完全実装検証 | E-09 line 336-400: CheckDispatchSlotsAreImplemented | ○ |
| C-88 | 未実装エラー | E-09 line 352-355: `fail exn` | ○ |
| C-89 | オーバーライド情報取得 | E-09 line 153-195: GetTypeMemberOverrideInfo | ○ |
| C-90 | オブジェクト式オーバーライド | E-09 line 198-223: GetObjectExprOverrideInfo | ○ |

### CheckBasics.fs（UT-CHK-091〜100）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-91 | DisplayEnv取得 | E-10 line 245: `member tenv.DisplayEnv` | ○ |
| C-92 | NameEnv取得 | E-10 line 247: `member tenv.NameEnv` | ○ |
| C-93 | 明示的コンストラクタ初期化 | E-10 line 136-140: InitialExplicit | ○ |
| C-94 | 暗黙的コンストラクタ初期化 | E-10 line 142-146: InitialImplicit | ○ |
| C-95 | 自由型変数計算 | E-10 line 167-173: GetFreeTyvars | △ |
| C-96 | 自由型変数なし判定 | E-10 line 175: `member _.WillNeverHaveFreeTypars` | △ |
| C-97 | ファイル状態初期化 | E-10 line 333-371: TcFileState.Create | ○ |
| C-98 | 予備値型取得 | E-10 line 80: `member x.Type` | ○ |
| C-99 | 予備値識別子取得 | E-10 line 82: `member x.Ident` | ○ |
| C-100 | 右パス設定 | E-10 line 97: `member x.WithRightPath()` | ○ |

## 4) 不足情報（Unknown / Missing）
- **C-65, C-67**: RefuteDiscrimSetとCombineRefutationsの内部ロジックは複雑で、すべてのパターンに対する網羅的なテストケースを生成するには追加のコード解析が必要
  - 候補：パターンマッチの反例生成に関する既存テストケース / コード内のコメント / 言語仕様書
- **C-76**: CombineTwoLimitsの境界条件（特にスコープ計算）に関する詳細な仕様が不明確
  - 候補：byref安全性に関するF#言語仕様 / 既存のbyref関連テスト
- **C-95, C-96**: UngeneralizableItemのキャッシュメカニズムの詳細な振る舞い
  - 候補：型推論に関する内部ドキュメント / 既存の型一般化テスト

## 5) リスクフラグ（レビュー観点）
- **0（低リスク）**: UT-CHK-091〜100 - 基本的なプロパティアクセサーのテストで、単純な構造
- **1（中リスク）**: UT-CHK-031〜040 - フォーマット文字列解析は複雑だが、既存のテストカバレッジがある可能性が高い
- **2（高リスク）**: UT-CHK-065〜068 - パターンマッチの反例生成は複雑なロジックを含み、エッジケースが多い

## 6) レビュアーチェックリスト（最小）
- [ ] TypeRelationsのサブサンプション判定ロジックが仕様と一致しているか確認
- [ ] AccessibilityLogicのILメンバーアクセス判定が.NET仕様に準拠しているか確認
- [ ] フォーマット文字列解析のすべての指定子(%d, %s, %f等)がカバーされているか確認
- [ ] SignatureConformanceのエラーメッセージが適切か確認
- [ ] PostInferenceChecksのbyref安全性チェックが完全か確認
- [ ] MethodOverridesのオーバーライド解決ロジックが継承階層を正しく処理するか確認
- [ ] パターンマッチ反例生成のエッジケース（深いネスト、複雑な型など）が考慮されているか確認
