This PR adds the `nondep` field of `Expr.letE` to the C++ data model. Previously this field has been unused, and in followup PRs the elaborator will use it to encode `have` expressions (non-dependent `let`s). The kernel does not verify that `nondep` is correctly applied during typechecking. The `letE` delaborator now prints `have`s when `nondep` is true, though `have` still elaborates as `letFun` for now. Breaking change: `Expr.updateLet!` is renamed to `Expr.updateLetE!`. This PR also fixes a bug in `Expr.letFun?` and `Expr.letFunAppArgs?` when the body is not a lambda. In any case, these functions will be removed once the `Expr.letE (nondep := true)` encoding of `have` expressions is complete. |
||
|---|---|---|
| .. | ||
| abstract.cpp | ||
| abstract.h | ||
| CMakeLists.txt | ||
| declaration.cpp | ||
| declaration.h | ||
| environment.cpp | ||
| environment.h | ||
| equiv_manager.cpp | ||
| equiv_manager.h | ||
| expr.cpp | ||
| expr.h | ||
| expr_cache.cpp | ||
| expr_cache.h | ||
| expr_eq_fn.cpp | ||
| expr_eq_fn.h | ||
| expr_maps.h | ||
| expr_sets.h | ||
| find_fn.h | ||
| for_each_fn.cpp | ||
| for_each_fn.h | ||
| inductive.cpp | ||
| inductive.h | ||
| init_module.cpp | ||
| init_module.h | ||
| instantiate.cpp | ||
| instantiate.h | ||
| instantiate_mvars.cpp | ||
| kernel_exception.h | ||
| level.cpp | ||
| level.h | ||
| local_ctx.cpp | ||
| local_ctx.h | ||
| quot.cpp | ||
| quot.h | ||
| replace_fn.cpp | ||
| replace_fn.h | ||
| trace.cpp | ||
| trace.h | ||
| type_checker.cpp | ||
| type_checker.h | ||