← カタログへ戻る #098

部分評価師

プログラムを部分評価して特殊化版を生成するパズル

部分評価 (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は選ばれた枝だけ残る。これが「特殊化による加速」。可逆計算の文脈では、 残余コードも可逆性を保つ必要があるため、消せる演算と残すべき演算の見極めが鍵。