aboutsummaryrefslogtreecommitdiff
path: root/src/racket_specs/mapping-setup.rkt
diff options
context:
space:
mode:
Diffstat (limited to 'src/racket_specs/mapping-setup.rkt')
-rw-r--r--src/racket_specs/mapping-setup.rkt47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/racket_specs/mapping-setup.rkt b/src/racket_specs/mapping-setup.rkt
new file mode 100644
index 0000000..6b6fc48
--- /dev/null
+++ b/src/racket_specs/mapping-setup.rkt
@@ -0,0 +1,47 @@
+#lang rosette
+
+(define (check-spec-len prop pre spec xs)
+ (assume (and (prop xs) (pre xs)))
+ (assert (prop (car (spec xs)))))
+
+(define (check-spec-is-empty prop pre spec xs)
+ (assume (and (prop xs) (pre xs)))
+ (assert (prop (car (spec xs)))))
+
+(define (check-spec-contains prop pre spec xs x)
+ (assume (and (prop xs) (pre xs)))
+ (assert (prop (car (spec xs x)))))
+
+(define (check-spec-insert prop pre spec xs x)
+ (assume (and (prop xs) (pre xs)))
+ (assert (prop (spec xs x))))
+
+(define (check-spec-remove prop pre spec xs x)
+ (assume (and (prop xs) (pre xs)))
+ (assert (prop (car (spec xs x)))))
+
+(define (check-spec-clear prop pre spec xs)
+ (assume (and (prop xs) (pre xs)))
+ (assert (prop (spec xs))))
+
+(define (check-not-contradict prop pre xs)
+ (assert (and (prop xs) (pre xs) (> (length xs) 1))))
+
+(define (check prop pres specs xs k v)
+ (cond
+ [(or (unsat? (solve (check-not-contradict prop (first pres) xs)))
+ (unsat? (solve (check-not-contradict prop (second pres) xs)))
+ (unsat? (solve (check-not-contradict prop (third pres) xs)))
+ (unsat? (solve (check-not-contradict prop (fourth pres) xs)))
+ (unsat? (solve (check-not-contradict prop (fifth pres) xs)))
+ (unsat? (solve (check-not-contradict prop (sixth pres) xs)))
+ ) #f]
+ [else (and (unsat? (verify (check-spec-clear prop (first pres) (first specs) xs)))
+ (unsat? (verify (check-spec-contains prop (second pres) (second specs) xs k)))
+ (unsat? (verify (check-spec-insert prop (third pres) (third specs) xs k v)))
+ (unsat? (verify (check-spec-is-empty prop (fourth pres) (fourth specs) xs)))
+ (unsat? (verify (check-spec-len prop (fifth pres) (fifth specs) xs)))
+ (unsat? (verify (check-spec-remove prop (sixth pres) (sixth specs) xs k)))
+ )]))
+
+(provide check)