aboutsummaryrefslogtreecommitdiff
path: root/src/Util/Curry.v
diff options
context:
space:
mode:
authorGravatar Jason Gross <jgross@mit.edu>2017-03-31 16:15:47 -0400
committerGravatar Jason Gross <jgross@mit.edu>2017-03-31 16:15:47 -0400
commitf89309d47a1f4095430c984b4ab81c804a9263ae (patch)
tree93976d76420c956e5b1e9b2f7492dc819fa92cde /src/Util/Curry.v
parentd1ff24b6e9dcd81ec70729143d90ff3e96dea313 (diff)
Add [change_with_curried] to Curry.v
Diffstat (limited to 'src/Util/Curry.v')
-rw-r--r--src/Util/Curry.v14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/Util/Curry.v b/src/Util/Curry.v
index 0e1c0d635..fe92baa30 100644
--- a/src/Util/Curry.v
+++ b/src/Util/Curry.v
@@ -1,2 +1,16 @@
Definition curry2 {A B C} (f : A -> B -> C) (x : A * B) : C
:= let '(a, b) := x in f a b.
+
+Ltac change_with_curried f :=
+ cbv beta in f; (* work around https://coq.inria.fr/bugs/show_bug.cgi?id=5430 *)
+ lazymatch type of f with
+ | ?A -> ?B -> ?C
+ => let f' := fresh f in
+ rename f into f';
+ pose (fun (ab : A * B) => f' (fst ab) (snd ab)) as f;
+ change f' with (fun (a : A) (b : B) => f (a, b));
+ subst f';
+ cbv beta;
+ change_with_curried f
+ | _ => idtac
+ end.