lean4-htt/tests/lean/run/doLetElse.lean
Eric Wieser ec39de8cae
fix: allow generalization in let (#3060)
As suggested by @kmill, removing an unnecessary `let` (possibly only
there in the first place for copy/paste reasons) seems to fix the
included test.

This makes `~q()` matching in quote4 noticeably more useful in things
like `norm_num` (as it fixes
https://github.com/leanprover-community/quote4/issues/29)

It also makes a quote4 bug slightly more visible
(https://github.com/leanprover-community/quote4/issues/30), but the bug
there already existed anyway, and isn't caused by this patch.

Fixes #3065
2024-01-23 09:02:05 +00:00

24 lines
603 B
Text

def foo (x? : Option Nat) : IO Nat := do
let some x := x? | return 0
IO.println s!"x: {x}"
return x
def testFoo (input : Option Nat) (expected : Nat) : IO Unit := do
assert! (← foo input) == expected
#eval testFoo (some 10) 10
#eval testFoo none 0
#eval testFoo (some 1) 1
def bar (x : Nat) : IO (Fin (x + 1)) := do
let 2 := x | return 0
-- the pattern match performed a substitution
let y : Fin 3 := ⟨1, by decide⟩
return y
def testBar (x : Nat) (expected : Fin (x + 1)) : IO Unit := do
assert! (← bar x) == expected
#eval testBar 1 0
#eval testBar 2 1
#eval testBar 3 0