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

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

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.95**
  - 根拠あり：95 / 100、根拠なし：5
- 優先レビュー（高）
  1. **UT-OPT-042〜044（DetupleArgs）**：インターフェースのみ確認、実装詳細は.fsファイルが大きいため一部未確認
  2. **UT-OPT-093（InnerLambdasToTopLevelFuncs）**：複雑な変換ロジックのため、追加テストケースの検討が必要
  3. **UT-OPT-094〜095（TryRewriteBranchingTupleBinding）**：条件分岐が複雑で、境界ケースの網羅性に要確認

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

- E-01: `src/Compiler/Optimize/Optimizer.fsi` - 公開インターフェース定義
- E-02: `src/Compiler/Optimize/Optimizer.fs` - メイン最適化実装（約2000行確認）
- E-03: `src/Compiler/Optimize/DetupleArgs.fsi` - デタプル化インターフェース
- E-04: `src/Compiler/Optimize/DetupleArgs.fs` - デタプル化実装
- E-05: `src/Compiler/Optimize/InnerLambdasToTopLevelFuncs.fsi` - ラムダリフティングインターフェース
- E-06: `src/Compiler/Optimize/InnerLambdasToTopLevelFuncs.fs` - ラムダリフティング実装
- E-07: `src/Compiler/Optimize/LowerCalls.fsi` - 呼び出し低レベル化インターフェース
- E-08: `src/Compiler/Optimize/LowerCalls.fs` - 呼び出し低レベル化実装
- E-09: `src/Compiler/Optimize/LowerSequences.fsi` - シーケンス式低レベル化インターフェース
- E-10: `src/Compiler/Optimize/LowerSequences.fs` - シーケンス式低レベル化実装（725行）
- E-11: `src/Compiler/Optimize/LowerStateMachines.fsi` - ステートマシン低レベル化インターフェース
- E-12: `src/Compiler/Optimize/LowerStateMachines.fs` - ステートマシン低レベル化実装（925行）
- E-13: `src/Compiler/Optimize/LowerLocalMutables.fsi` - ローカル可変変数変換インターフェース
- E-14: `src/Compiler/Optimize/LowerLocalMutables.fs` - ローカル可変変数変換実装（200行）
- E-15: `src/Compiler/Optimize/LowerComputedCollections.fsi` - コレクション内包最適化インターフェース
- E-16: `src/Compiler/Optimize/LowerComputedCollections.fs` - コレクション内包最適化実装（745行）

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

### Optimizer.fs関連 (UT-OPT-001〜041, 079〜088)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | OptimizeExpr関数が式の最適化を行う | E-01, E-02 | ○ |
| C-02 | 定数畳み込みがEvalILIntrinsicで行われる | E-02 (行950-1300) | ○ |
| C-03 | mkInt32Val等の定数値生成関数が存在する | E-02 (行800-950) | ○ |
| C-04 | EvalILIntrinsicがAI_add等を処理する | E-02 (行950-1300) | ○ |
| C-05 | ゼロ除算時にUnknownValueを返す | E-02 (行970付近) | ○ |
| C-06 | AddTotalSizes, OrEffectsが存在する | E-02 (行1302-1312) | ○ |
| C-07 | CombineValueInfosが値情報を結合する | E-02 (行1318-1325) | ○ |
| C-08 | AbstractLazyModulInfoByHidingがシグネチャ隠蔽を行う | E-02 (行1328-1408) | ○ |
| C-09 | AbstractExprInfoByVarsがエスケープ解析を行う | E-02 (行1422-1484) | ○ |
| C-10 | RemapOptimizationInfoがリマップを行う | E-02 (行1488-1520) | ○ |
| C-11 | ExprHasEffect, OpHasEffectが副作用解析を行う | E-02 (行1623-1684) | ○ |
| C-12 | TryEliminateBindingがバインディング除去を行う | E-02 (行1686-1776) | ○ |
| C-13 | CombineBoolLogicがブール論理を結合する | E-02 (行1845-1869) | ○ |
| C-14 | CanExpandStructuralBindingが展開可否を判定する | E-02 (行1882-1887) | ○ |
| C-15 | ExpandStructuralBindingRawがタプルを展開する | E-02 (行1903-1920) | ○ |
| C-16 | RearrangeTupleBindingsがバインディングを再配置する | E-02 (行1932-1952) | ○ |
| C-17 | TryRewriteBranchingTupleBindingが分岐タプルを最適化する | E-02 (行1985-1999) | ○ |
| C-18 | IsMutableStructuralBindingForTupleElementが検出を行う | E-02 (行1553-1556) | ○ |
| C-19 | ValueIsUsedOrHasEffectが使用/副作用検出を行う | E-02 (行1597-1608) | ○ |
| C-20 | IlAssemblyCodeHasEffectがIL副作用を検出する | E-02 (行1613-1621) | ○ |

### DetupleArgs.fs関連 (UT-OPT-042〜044)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-21 | DetupleImplFileがデタプル化を行う | E-03, E-04 | ○ |
| C-22 | 再帰関数もデタプル化される | E-04 | △ |
| C-23 | 引数なし関数は変更されない | E-04 | △ |

### InnerLambdasToTopLevelFuncs.fs関連 (UT-OPT-045〜047, 093)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-24 | MakeTopLevelRepresentationDecisionsがリフティング判定を行う | E-05, E-06 | ○ |
| C-25 | 相互再帰ラムダもリフティングされる | E-06 | ○ |
| C-26 | ConvertToTopLevelBindingsが変換を実行する | E-06 | ○ |

### LowerCalls.fs関連 (UT-OPT-048〜049)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-27 | LowerImplFileが呼び出し低レベル化を行う | E-07, E-08 | ○ |
| C-28 | 部分適用が最適化される | E-08 | ○ |

### LowerSequences.fs関連 (UT-OPT-050〜055, 091〜092)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-29 | ConvertSequenceExprToObjectがseq式を変換する | E-09, E-10 | ○ |
| C-30 | SeqYieldパターンがyieldを検出する | E-10 (行159-186) | ○ |
| C-31 | SeqAppendパターンがappendを検出する | E-10 (行193-221) | ○ |
| C-32 | SeqWhileパターンがwhileを検出する | E-10 (行223-244) | ○ |
| C-33 | SeqTryFinallyがtry-finallyを処理する | E-10 (行288-340) | ○ |
| C-34 | IsPossibleSequenceExprがseq式を検出する | E-10 (行68-69) | ○ |
| C-35 | RepresentBindingAsLocalがローカル表現を行う | E-10 (行100-111) | ○ |
| C-36 | RepresentBindingAsStateMachineLocalが状態変数表現を行う | E-10 (行114-137) | ○ |

### LowerStateMachines.fs関連 (UT-OPT-056〜062, 089〜090, 096〜100)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-37 | LowerStateMachineExprがステートマシンを低レベル化する | E-11, E-12 | ○ |
| C-38 | IsStateMachineExprがステートマシンを検出する | E-12 (行128-144) | ○ |
| C-39 | ConvertResumableCodeが再開可能コードを変換する | E-12 (行430-531) | ○ |
| C-40 | RepresentBindingAsStateVarが状態変数を表現する | E-12 (行72-100) | ○ |
| C-41 | RepresentBindingAsTopLevelOrLocalがローカルを表現する | E-12 (行51-57) | ○ |
| C-42 | LowerStateMachine.Applyが適用を行う | E-12 (行844-910) | ○ |
| C-43 | ConvertResumableWhileがwhileを変換する | E-12 (行622-652) | ○ |
| C-44 | ConvertResumableTryFinallyがtry-finallyを変換する | E-12 (行654-674) | ○ |
| C-45 | ConvertResumableTryWithがtry-withを変換する | E-12 (行710-757) | ○ |
| C-46 | ConvertResumableMatchがmatchを変換する | E-12 (行759-801) | ○ |
| C-47 | addPcJumpTableがジャンプテーブルを追加する | E-12 (行409-427) | ○ |

### LowerLocalMutables.fs関連 (UT-OPT-063〜067)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-48 | TransformImplFileがエスケープ可変変数を変換する | E-13, E-14 | ○ |
| C-49 | DecideEscapesがエスケープを検出する | E-14 (行25-34) | ○ |
| C-50 | TransformExprが読み書きを変換する | E-14 (行138-159) | ○ |
| C-51 | TransformBindingがバインディングを変換する | E-14 (行162-169) | ○ |

### LowerComputedCollections.fs関連 (UT-OPT-068〜078)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-52 | LowerComputedListOrArrayExprがリスト/配列内包を最適化する | E-15, E-16 | ○ |
| C-53 | mkCallCollectorAddがコレクター追加を生成する | E-16 (行51-52) | ○ |
| C-54 | mkCallCollectorCloseがクローズを生成する | E-16 (行60-61) | ○ |
| C-55 | BuildDisposableCleanupがDisposeを生成する | E-16 (行22-40) | ○ |
| C-56 | List.mkMapがList.mapインラインを生成する | E-16 (行261-302) | ○ |
| C-57 | Array.mkMapがArray.mapインラインを生成する | E-16 (行376-439) | ○ |
| C-58 | List.mkFromIntegralRangeが範囲リストを生成する | E-16 (行305-356) | ○ |
| C-59 | Array.mkFromIntegralRangeが範囲配列を生成する | E-16 (行452-535) | ○ |

## 4) 不足情報（Unknown / Missing）
- **DetupleArgs.fs の詳細実装**：インターフェースは確認したが、内部ロジックの全容は未確認
  - 候補：追加のコード解析 / 既存テストケースの確認 / ドキュメント参照
- **最適化の副作用ケース**：一部の最適化で副作用が発生する可能性のあるエッジケースが未確認
  - 候補：実行時テスト / コードレビュー / F#コンパイラの既存テストスイート確認
- **パフォーマンス関連テスト**：最適化の効果を測定するテストケースは含まれていない
  - 候補：ベンチマークテスト追加 / 性能要件の確認

## 5) リスクフラグ（レビュー観点）
- **0（低リスク）**: UT-OPT-004〜006, 016〜020, 079〜088（ヘルパー関数、明確な定義）
- **1（中リスク）**: UT-OPT-007〜015, 021〜041, 048〜078（主要最適化ロジック、複雑だが根拠あり）
- **2（高リスク）**: UT-OPT-042〜047, 089〜100（複雑な変換ロジック、追加検証推奨）

## 6) レビュアーチェックリスト（最小）
- [ ] DetupleArgs関連テストケース（UT-OPT-042〜044）の入力値と期待結果が適切か確認
- [ ] ステートマシン変換テストケース（UT-OPT-056〜062）がtask/async構文の主要パターンを網羅しているか確認
- [ ] 境界値テストケース（空リスト、null等）が各関数で適切に設定されているか確認
- [ ] 高優先度テストケースがコンパイラの核心機能をカバーしているか確認
- [ ] 異常系テストケースでエラーハンドリングが適切にテストされるか確認
