diff --git a/Graph-notes-copy2.vue b/Graph-notes-copy2.vue index b7341f9..bb8ee4c 100644 --- a/Graph-notes-copy2.vue +++ b/Graph-notes-copy2.vue @@ -1,14 +1,14 @@ -<!-- Tufts VUE 3.3.0 concept-map (Graph-notes-copy2.vue) 2016-12-30 --> +<!-- Tufts VUE 3.3.0 concept-map (Graph-notes-copy2.vue) 2017-01-05 --> <!-- Tufts VUE: http://vue.tufts.edu/ --> <!-- Do Not Remove: VUE mapping @version(1.1) jar:file:/nix/store/z92y35qgs6g3cvvh0i4f14mg5n47zvvi-vue-3.3.0/share/vue/vue.jar!/tufts/vue/resources/lw_mapping_1_1.xml --> -<!-- Do Not Remove: Saved date Fri Dec 30 22:07:05 CET 2016 by georges on platform Linux 4.4.38 in JVM 1.8.0_122-04 --> +<!-- Do Not Remove: Saved date Thu Jan 05 00:59:01 CET 2017 by georges on platform Linux 4.4.38 in JVM 1.8.0_122-04 --> <!-- Do Not Remove: Saving version @(#)VUE: built October 8 2015 at 1724 by tomadm on Linux 2.6.32-504.23.4.el6.x86_64 i386 JVM 1.7.0_21-b11(bits=32) --> <?xml version="1.0" encoding="US-ASCII"?> <LW-MAP xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="none" ID="0" label="Graph-notes-copy2.vue" created="1479309847604" x="0.0" y="0.0" width="1.4E-45" height="1.4E-45" strokeWidth="0.0" autoSized="false"> - <resource referenceCreated="1483132025205" size="204773" + <resource referenceCreated="1483574341626" size="204773" spec="/home/georges/phc/racket-packages/phc-graph/Graph-notes-copy2.vue" type="1" xsi:type="URLResource"> <title>Graph-notes-copy2.vue</title> diff --git a/test/invariant-phantom-tr-assumptions.rkt b/test/invariant-phantom-tr-assumptions.rkt new file mode 100644 index 0000000..d0d8287 --- /dev/null +++ b/test/invariant-phantom-tr-assumptions.rkt @@ -0,0 +1,42 @@ +#lang typed/racket + +(struct A ()) +(struct B A ()) +(struct C A ()) + +(: f (→ (U 'x A) Void)) +(define (f _) (void)) + +(let () + (ann f (→ (U B C) Void)) + (ann f (→ (U 'x B C) Void)) + (ann f (→ (U 'x C) Void)) + (ann f (→ (U 'x A C) Void)) + (ann f (→ (U 'x) Void)) + (ann f (→ (U) Void)) + (void)) + +;;;;;;;;;; + +;; Reverse order (BB, CC and DD are more precise invariants than AA) +(struct AA ()) +(struct BB AA ()) +(struct CC AA ()) +(struct DD AA ()) + +(define-type (Invariant X) (→ X Void)) + +(: g (→ (U (Invariant 'x) (Invariant BB) (Invariant CC)) Void)) +(define (g _) (void)) + +;; Everything works as expected +(let () + (ann g (→ (U (Invariant BB) (Invariant CC)) Void)) + (ann g (→ (U (Invariant 'x) (Invariant BB) (Invariant CC)) Void)) + (ann g (→ (U (Invariant 'x) (Invariant CC)) Void)) + (ann g (→ (U (Invariant 'x)) Void)) + (ann g (→ (U) Void)) + ;; AA works, as it should + (ann g (→ (U (Invariant 'x) (Invariant AA) (Invariant CC)) Void)) + (ann g (→ (U (Invariant 'x) (Invariant AA)) Void)) + (void)) \ No newline at end of file diff --git a/test/invariant-phantom-tr-assumptions2.rkt b/test/invariant-phantom-tr-assumptions2.rkt new file mode 100644 index 0000000..5a8d850 --- /dev/null +++ b/test/invariant-phantom-tr-assumptions2.rkt @@ -0,0 +1,69 @@ +#lang typed/racket + +(: f (→ (→ (U (Rec R (List (List 'a R) + (List 'b R))) + (Rec R (List (List 'a R) + (List 'c R)))) + Void) + Void)) +(define (f x) (void)) + +(ann f (→ (→ (U (Rec K (List (List 'a K) (List 'c K))) + (Rec W (List (List 'a W) (List 'b W)))) + Void) Void)) + +(ann f (→ (→ (U (Rec W (List (List 'a W) (List 'b W))) + (Rec K (List (List 'a K) (List 'c K)))) + Void) Void)) + +(: g (→ (→ (Rec A (Rec B (List (List 'a A) + (List 'b B)))) + Void) + Void)) +(define (g x) (void)) + +(ann g + (→ (→ (Rec B (Rec A (List (List 'a A) + (List 'b B)))) + Void) + Void)) + +(ann g + (→ (→ (Rec X (List (List 'a X) + (List 'b X))) + Void) + Void)) + +(define-type (≡ X Y) (List '≡ X Y)) + +(: h (→ (→ (∀ (X1 X2) (→ (U (≡ (List 'a 'b X1) + (List 'c 'd X1)) + (≡ (List 'e 'f X2) + (List 'g 'g X2))))) + Void) + Void)) +(define (h x) (void)) + + +(ann (λ ([x : (Rec R (Pairof 'a (Pairof 'b R)))]) (void)) + (-> (Rec R (Pairof 'a (Pairof 'b R))) Void)) + +(ann (λ ([x : (Rec R (Pairof 'a (Pairof 'b R)))]) (void)) + (-> (Pairof 'a (Rec R (Pairof 'b (Pairof 'a R)))) Void)) + +(ann (λ ([x : (Rec R (List 'a (List 'b R)))]) (void)) + (-> (List 'a (Rec R (List 'b (List 'a R)))) Void)) + +(ann (λ ([x : (Rec R (List 'a R (List 'b R)))]) (void)) + (-> (Rec R (Pairof 'a (Pairof R (Pairof (List 'b R) Null)))) Void)) + +(ann (λ ([x : (Rec R (List 'a R (List 'b R)))]) (void)) + (-> (Pairof 'a (Rec R (Pairof (Pairof 'a R) (Pairof (List 'b (Pairof 'a R)) Null)))) Void)) + +(ann (λ ([x : (Rec R (List 'a R (List 'b R)))]) (void)) + (-> (Pairof 'a (Pairof (Pairof 'a + (Rec R (Pairof (Pairof 'a R) (Pairof (List 'b (Pairof 'a R)) Null))) + ) + (Pairof (List 'b (Pairof 'a + (Rec R (Pairof (Pairof 'a R) (Pairof (List 'b (Pairof 'a R)) Null))) + )) Null))) Void)) \ No newline at end of file