This PR enables transforming nondependent `let`s into `have`s in a number of contexts: the bodies of nonrecursive definitions, equation lemmas, smart unfolding definitions, and types of theorems. A motivation for this change is that when zeta reduction is disabled, `simp` can only effectively rewrite `have` expressions (e.g. `split` uses `simp` with zeta reduction disabled), and so we cache the nondependence calculations by transforming `let`s to `have`s. The transformation can be disabled using `set_option cleanup.letToHave false`. Uses `Meta.letToHave`, introduced in #8954.
12 lines
257 B
Text
12 lines
257 B
Text
def pro : Bool :=
|
|
have x := 42;
|
|
false
|
|
def f : Nat → Nat :=
|
|
fun x =>
|
|
Nat.brecOn x fun x f =>
|
|
(match (motive := (x : Nat) → Nat.below x → Nat) x with
|
|
| 0 => fun x => 1
|
|
| n.succ => fun x =>
|
|
let y := 42;
|
|
2 * x.1)
|
|
f
|