aboutsummaryrefslogtreecommitdiff
path: root/src/Util/LockedLet.v
blob: 088e914fb14e57aa233729e2072b0c8b5c084a3c (plain)
1
2
3
4
5
6
7
8
9
(** * A version of [let] that doesn't disappear under βδζ unless you also have ι and remove opacity *)
Require Import Crypto.Util.Notations.

Definition locked_let {A} (x : A) : bool * A := (true, x).
Definition unlock_let {A} (x : A) : locked_let x = (true, x) := eq_refl.
Global Opaque locked_let.
Global Arguments locked_let : simpl never.

Notation "'llet' x := A 'in' b" := (let '(_, x) := locked_let A in b).