Zulip Chat Archive
Stream: lean4
Topic: let rec puzzle
Eric Rodriguez (Apr 17 2024 at 15:39):
theorem test :
let rec f : Nat → Nat :=
fun n => match n with | n => n
f 0 = 0 := by
done
What's the goal state?
Mario Carneiro (Apr 17 2024 at 15:42):
Ah, you can't recurse with the main definition inside the type of the definition itself
Mario Carneiro (Apr 17 2024 at 15:42):
although I'm not sure the elaborator knows this
Mario Carneiro (Apr 17 2024 at 15:44):
i.e. this doesn't work
partial def foo : foo := foo
Joachim Breitner (Apr 17 2024 at 15:54):
Also this doesn’t work
foo := bar
where
myType := Nat
bar : myType := 42
which is unfortunate, at least once I wanted to put a large monad stack into a where M :=
.
Kyle Miller (Apr 17 2024 at 15:58):
There are some complexities here, but it would be interesting if where
blocks required explicit let
s and let rec
s before each definition. Or at least required an explicit rec
in front of a where
definition if it was meant to be a let rec
.
Kyle Miller (Apr 17 2024 at 15:59):
Like
def f := bar
where
myType := Nat
rec bar (n : myType) : myType := match n with | 0 => 0 | n + 1 => bar n
Last updated: May 02 2025 at 03:31 UTC