lean4-htt/old_tests/tests/lean/run/tactic_ref.lean
2018-04-10 12:56:55 -07:00

36 lines
705 B
Text

open tactic
meta def tst1 (n : nat) : tactic nat :=
using_new_ref n $ λ r, do
v ← read_ref r,
trace v,
write_ref r (v*2),
v ← read_ref r,
trace v,
return v
example : true :=
by do
v ← tst1 10,
guard (v = 20),
constructor
meta def tst2 : tactic nat :=
do r ← using_new_ref 0 $ λ r, do {
return r
},
read_ref r -- Should produce an exception, the reference is not valid anymore
run_cmd fail_if_success $ tst2
meta def tst3 (n : nat) : tactic nat :=
using_new_ref n $ λ r,
(write_ref r (n+10) >> failed) -- The state should be restored during backtracking
<|>
(read_ref r)
example : true :=
by do
v ← tst3 10,
guard (v = 10),
constructor