aboutsummaryrefslogtreecommitdiff
path: root/theories/ssr
diff options
context:
space:
mode:
authorCyril Cohen2020-11-23 17:55:27 +0100
committerCyril Cohen2020-11-24 17:03:31 +0100
commit5eb18289189a8a3d71086b12998e85d651970b28 (patch)
tree4e56479239e05e93b80c13ba3d8f908f98a45ed5 /theories/ssr
parent5fce39e0078935662fd6fb9b8e2ee6b0da60b3ab (diff)
Fixing [dup] and [swap]
Diffstat (limited to 'theories/ssr')
-rw-r--r--theories/ssr/ssreflect.v43
1 files changed, 16 insertions, 27 deletions
diff --git a/theories/ssr/ssreflect.v b/theories/ssr/ssreflect.v
index dc81b5cca7..db572d25d8 100644
--- a/theories/ssr/ssreflect.v
+++ b/theories/ssr/ssreflect.v
@@ -671,43 +671,32 @@ Module Export ipat.
Notation "'[' 'apply' ']'" := (ltac:(let f := fresh "_top_" in move=> f {}/f))
(at level 0, only parsing) : ssripat_scope.
-(** We try to preserve the naming by matching the names from the goal.
- We do 'move' to perform a hnf before trying to match. **)
+(* we try to preserve the naming by matching the names from the goal *)
+(* we do move to perform a hnf before trying to match *)
Notation "'[' 'swap' ']'" := (ltac:(move;
- lazymatch goal with
- | |- forall (x : _), _ => let x := fresh x in move=> x; move;
- lazymatch goal with
- | |- forall (y : _), _ => let y := fresh y in move=> y; move: y x
- | |- let y := _ in _ => let y := fresh y in move=> y; move: @y x
- | _ => let y := fresh "_top_" in move=> y; move: y x
- end
- | |- let x := _ in _ => let x := fresh x in move => x; move;
- lazymatch goal with
- | |- forall (y : _), _ => let y := fresh y in move=> y; move: y @x
- | |- let y := _ in _ => let y := fresh y in move=> y; move: @y @x
- | _ => let y := fresh "_top_" in move=> y; move: y x
- end
- | _ => let x := fresh "_top_" in let x := fresh x in move=> x; move;
- lazymatch goal with
- | |- forall (y : _), _ => let y := fresh y in move=> y; move: y @x
- | |- let y := _ in _ => let y := fresh y in move=> y; move: @y @x
- | _ => let y := fresh "_top_" in move=> y; move: y x
- end
- end))
+ let x := lazymatch goal with
+ | |- forall (x : _), _ => fresh x | |- let x := _ in _ => fresh x | _ => fresh "_top_"
+ end in intro x; move;
+ let y := lazymatch goal with
+ | |- forall (y : _), _ => fresh y | |- let y := _ in _ => fresh y | _ => fresh "_top_"
+ end in intro y; revert x; revert y))
(at level 0, only parsing) : ssripat_scope.
+
+(* we try to preserve the naming by matching the names from the goal *)
+(* we do move to perform a hnf before trying to match *)
Notation "'[' 'dup' ']'" := (ltac:(move;
lazymatch goal with
| |- forall (x : _), _ =>
- let x := fresh x in move=> x;
- let copy := fresh x in have copy := x; move: copy x
+ let x := fresh x in intro x;
+ let copy := fresh x in have copy := x; revert x; revert copy
| |- let x := _ in _ =>
- let x := fresh x in move=> x;
+ let x := fresh x in intro x;
let copy := fresh x in pose copy := x;
- do [unfold x in (value of copy)]; move: @copy @x
+ do [unfold x in (value of copy)]; revert x; revert copy
| |- _ =>
let x := fresh "_top_" in move=> x;
- let copy := fresh "_top" in have copy := x; move: copy x
+ let copy := fresh "_top" in have copy := x; revert x; revert copy
end))
(at level 0, only parsing) : ssripat_scope.