lean4-htt/tests/lean/run/2243.lean
Leonardo de Moura be717f03ef
fix: missing assignment validation at closeMainGoal (#4777)
This primitive is used by the `exact` tactic. This issue allowed users
to create loops in the metavariable assignment.

closes #4773
2024-07-17 18:25:02 +00:00

35 lines
1.1 KiB
Text

import Lean
open Lean Elab Tactic in
elab "exact_false" : tactic =>
closeMainGoal `exact_false (mkConst ``Bool.false)
def f (b : Bool := by exact_false) : Nat := bif b then 1 else 0
example : f false = bif false then 1 else 0 := by rw [f]
example : f true = bif true then 1 else 0 := by rw [f]
example (b : Bool) : f b = bif b then 1 else 0 := by rw [f]
def g (x : Nat) (b : Bool := by exact_false) : Nat :=
match x with
| 0 => bif b then 1 else 0
| x+1 => g x b + 1
example : g (x+1) true = g x true + 1 := by rw [g]
example : g (x+1) false = g x false + 1 := by rw [g]
example : g (x+1) = g x false + 1 := by rw [g]
example : g (x+1) b = g x b + 1 := by rw [g]
def foo (x n : Nat) (b : Bool := by exact_false) : Nat :=
if _ : x < n then
foo (x+1) n b + 1
else
g x b
termination_by n - x
example : foo x n true = if _ : x < n then foo (x+1) n true + 1 else g x true := by
rw [foo]
example : foo x n b = if _ : x < n then foo (x+1) n b + 1 else g x b := by
rw [foo]
example : foo x n false = if _ : x < n then foo (x+1) n false + 1 else g x false := by
rw [foo]