部分評価師
プログラムを部分評価して特殊化版を生成するパズル
部分評価 (Partial Evaluation) — プログラム p(s, d) の 静的入力 s を先に固定し、
動的入力 d だけを残した「特殊化版 p_s(d)」を機械的に生成する技術。横山研の rev_PE プロジェクトでは
可逆プログラムにこの技術を適用し、サイズ縮小と可逆性の両立を研究している。
束縛時間解析(BTA)で各変数を S/D に分類し、定数畳み込みで残余コードを目標サイズ以下に圧縮せよ。
問題1: power(b, n)
QUEST 1 / 6
目的:
target ≤ 5命令
元のプログラム general
束縛時間解析 (BTA)
S = static (固定)
D = dynamic (実行時)
残余プログラム specialized
特殊化を実行 → を押すと残余コードが現れます。
残余サイズ
—
命令数
目標
—
≦ 命令
正当性
—
テストケース
操作
画面左の束縛時間解析(BTA)で各変数を S/D 切替 ボタンで分類する(S は静的入力、D は動的入力)。 特殊化を実行 でそのBTA結果に基づき残余プログラムを生成。採点する でサイズと ランダム動的入力での正当性を同時にチェック。
部分評価のコツ: ループ回数や条件式の真偽が静的に決まるなら、ループは展開され、 ifは選ばれた枝だけ残る。これが「特殊化による加速」。可逆計算の文脈では、 残余コードも可逆性を保つ必要があるため、消せる演算と残すべき演算の見極めが鍵。