Skip to content

JPYC.sub?_of_le

名称・種別

  • 名称: JPYC.sub?_of_le
  • 種別: theorem
  • モジュール: JpycFormalVerification.Word
  • ソース: JpycFormalVerification/Word.lean:65-66
  • 概要: b ≤ a なら sub? は成功して通常の差を返す、という補題。
  • 仕様: 対象

型シグネチャ

lean
∀ {a b : JPYC.U256}, instLENat.le (BitVec.toNat b) (BitVec.toNat a) → Eq (JPYC.sub? a b) (Except.ok (instHSub.hSub a b))

b.toNat ≤ a.toNat(自然数として b ≤ a)ならば、sub? a b = .ok (a - b)」という定理です。

解説

何を述べているか。 引ける前提のもとでは sub? は必ず成功して差を返す、という 導入補題 です。

直感。 引き算がマイナスにならない前提(b ≤ a)なら、sub? は成功の枝に入ります。

なぜ安全性に効くか。「残高が十分なら減算が成功する」ことを示す道具で、round-trip 補題 add?_sub?_cancel などの部品になります。

図解

Lean ソースコード

lean
theorem sub?_of_le {a b : U256} (h : b.toNat ≤ a.toNat) :
    sub? a b = .ok (a - b) := by simp [sub?, h]

依存