Zulip Chat Archive
Stream: new members
Topic: Let tactic
Patrick Johnson (Nov 17 2021 at 21:25):
Documentation seems to be unclear regarding the let tactic. What does it actually do? The let tactic introduces a hypothesis of the form x : t := v. What does it exactly mean? What is the := operator here? Is it the meta-operator (like in def of something), or is it a term-level syntactic operator defined inductively (like =)? How to use such a hypothesis? Consider this example:
example
(P : ℕ → ℕ → Prop)
(h : ∀ (a b : ℕ), P a b ↔ a = b) :
(∃ (f : ℕ → Prop), f 0) ∧ (∃ (f : ℕ → Prop), ¬f 1) :=
begin
let f := λ (x : ℕ), P x 0,
split,
use f,
simp only [f],
exact (h 0 0).mpr rfl,
use f,
simp only [f],
intro h1,
exact one_ne_zero ((h 1 0).mp h1),
end
Is the simp only [f] preferred way to use such hypothesis? Why do rw and unfold fail? Is there a way to split
x : t := v
into two hypothesis
x : t
hx : x = v
Kevin Buzzard (Nov 17 2021 at 21:26):
You can use set if you want hx.
Kevin Buzzard (Nov 17 2021 at 21:27):
set f := λ (x : ℕ), P x 0 with hf,
Kyle Miller (Nov 17 2021 at 21:46):
The let tactic constructs a let ... in ... expression. Modulo some details, its effect is as if you turned
begin
let f := foo,
...
end
into
let f := foo
in begin
...
end
Kyle Miller (Nov 17 2021 at 21:47):
I'm not sure why simp only [f] works but rw f doesn't. I think it has something to do with the fact that f is only let-bound so doesn't have the "equation lemmas" that definitions get.
Kyle Miller (Nov 17 2021 at 21:50):
In the goal window, x : t := v is just how it writes a hypothesis that actually knows its value (unlike a hypothesis from an argument, or a hypothesis from have that intentionally forgets its value). It's supposed to represent the := in a let or a def.
Eric Rodriguez (Nov 17 2021 at 22:06):
simp has special code for let iirc
Last updated: May 02 2025 at 03:31 UTC