diff options
author | Hugo Herbelin <Hugo.Herbelin@inria.fr> | 2017-08-14 01:27:04 +0200 |
---|---|---|
committer | Hugo Herbelin <Hugo.Herbelin@inria.fr> | 2018-02-20 10:03:04 +0100 |
commit | a18e87f6a929ce296f8c277b310e286151e06293 (patch) | |
tree | 703657d008ea6a21e7e230b3b27a9ce2618e0f65 /test-suite/output | |
parent | d4c2ed95fcfd64cdcc10e51e40be739d9f1c4a74 (diff) |
Allowing variables used in recursive notation to occur several times in pattern.
This allows for instance to support recursive notations of the form:
Notation "! x .. y # A #" :=
(((forall x, x=x),(forall x, x=0)), .. (((forall y, y=y),(forall y, y=0)), A) ..)
(at level 200, x binder).
Diffstat (limited to 'test-suite/output')
-rw-r--r-- | test-suite/output/Notations3.out | 10 | ||||
-rw-r--r-- | test-suite/output/Notations3.v | 25 |
2 files changed, 35 insertions, 0 deletions
diff --git a/test-suite/output/Notations3.out b/test-suite/output/Notations3.out index e114ea894..5bfdec989 100644 --- a/test-suite/output/Notations3.out +++ b/test-suite/output/Notations3.out @@ -163,3 +163,13 @@ exists_true (x : nat) (A : Type) (R : A -> A -> Prop) : Prop {{{{True, nat -> True}}, nat -> True}} : Prop * Prop * Prop +{{D 1, 2}} + : nat * nat * (nat * nat * (nat * nat)) +! a b : nat # True # + : Prop * (Prop * Prop) +!!!! a b : nat # True # + : Prop * Prop * (Prop * Prop * Prop) +@@ a b : nat # a = b # b = a # + : Prop * Prop +exists_non_null x y z t : nat , x = y /\ z = t + : Prop diff --git a/test-suite/output/Notations3.v b/test-suite/output/Notations3.v index a7fed3561..c7e32f733 100644 --- a/test-suite/output/Notations3.v +++ b/test-suite/output/Notations3.v @@ -282,3 +282,28 @@ End G. (* Allows recursive patterns for binders to be associative on the left *) Notation "!! x .. y # A #" := (.. (A,(forall x, True)) ..,(forall y, True)) (at level 200, x binder). Check !! a b : nat # True #. + +(* Examples where the recursive pattern refer several times to the recursive variable *) + +Notation "{{D x , .. , y }}" := ((x,x), .. ((y,y),(0,0)) ..). +Check {{D 1, 2 }}. + +Notation "! x .. y # A #" := + ((forall x, x=x), .. ((forall y, y=y), A) ..) + (at level 200, x binder). +Check ! a b : nat # True #. + +Notation "!!!! x .. y # A #" := + (((forall x, x=x),(forall x, x=0)), .. (((forall y, y=y),(forall y, y=0)), A) ..) + (at level 200, x binder). +Check !!!! a b : nat # True #. + +Notation "@@ x .. y # A # B #" := + ((forall x, .. (forall y, A) ..), (forall x, .. (forall y, B) ..)) + (at level 200, x binder). +Check @@ a b : nat # a=b # b=a #. + +Notation "'exists_non_null' x .. y , P" := + (ex (fun x => x <> 0 /\ .. (ex (fun y => y <> 0 /\ P)) ..)) + (at level 200, x binder). +Check exists_non_null x y z t , x=y/\z=t. |