Zulip Chat Archive
Stream: Program verification
Topic: Does `mvcgen` support recursive functions?
Alexander Bentkamp (Feb 16 2026 at 15:48):
It seems recursion is not yet supported?
import Std.Tactic.Do
open Std.Do
def loop (i : Nat) : Except String Nat := do
match i with
| 0 => pure 0
| (n + 1) => loop n
@[spec]
theorem spec (x : Nat):
⦃ ⌜ True ⌝ ⦄
loop x
⦃ ⇓ r => ⌜ True ⌝ ⦄ := by
mvcgen [loop]
-- unsolved goals
-- case vc1
-- x : Nat
-- ⊢ (wp⟦loop x⟧ (PostCond.noThrow fun r => ⌜True⌝)).down
Sebastian Graf (Feb 17 2026 at 22:07):
This is slightly hacky, but it seems to work?
import Std.Tactic.Do
open Std.Do
def loop (i : Nat) : Except String Nat := do
match i with
| 0 => pure 0
| (n + 1) => loop n
@[spec]
theorem spec (x : Nat):
⦃ ⌜ True ⌝ ⦄
loop x
⦃ ⇓ r => ⌜ True ⌝ ⦄ := by
unfold loop
mvcgen [spec]
Alexander Bentkamp (Feb 18 2026 at 07:21):
Ah, of course! That's great, thank you!
Last updated: Feb 28 2026 at 14:05 UTC