Skip to content

JPYC.WF_setAllowlisted

名称・種別

  • 名称: JPYC.WF_setAllowlisted
  • 種別: theorem
  • モジュール: JpycFormalVerification.AccessControlTheorems
  • ソース: JpycFormalVerification/AccessControlTheorems.lean:96-101
  • 概要: 0/1 を書く限り setAllowlisted は WF を保つ、という補題。
  • 仕様: 対象外

型シグネチャ

lean
∀ {s : JPYC.State}, JPYC.WF s → ∀ (a : JPYC.Address) {v : JPYC.U256}, Or (Eq v 0) (Eq v 1) → JPYC.WF (s.setAllowlisted a v)

事前状態が WF を満たし、許可リスト・フラグ(allowlisted)に 0 または 1 を書き込むなら、書き込み後も WF が保たれる、という補題です。

解説

何を述べているか。 State.setAllowlisted は許可リスト・フラグの 1 点に値 v を書き込みます。v01 のいずれかなら、フラグマップが 0/1 値のままであるという WF の条件は崩れません。残りの WF 条件(他フラグ・initializedVersion)は触れていないのでそのまま保たれます。

直感。 「フラグには 0 か 1 しか書かない」というモデルの約束を、WF 保存の形で確認します。証明は共通補助 binaryFlag_update に委ね、更新点は v ∈ {0,1}、それ以外は元の WF を使います。

なぜ安全性に効くか。 blocklist_wf / unBlocklist_wf / allowlist_wf / unAllowlist_wf の土台です。ブロック・許可リスト操作が WF を壊さないことを保証し、フラグに依存する判定ロジックの前提を守ります。

図解

Lean ソースコード

lean
theorem WF_setAllowlisted {s : State} (hwf : WF s) (a : Address) {v : U256}
    (hv : v = 0 ∨ v = 1) : WF (s.setAllowlisted a v) where
  blocklistedBinary := hwf.blocklistedBinary
  allowlistedBinary := binaryFlag_update hwf.allowlistedBinary a hv
  authStateBinary := hwf.authStateBinary
  initializedVersionValid := hwf.initializedVersionValid

依存