aboutsummaryrefslogtreecommitdiffstats
path: root/unit-tests/demo_lfsc_prop.v
diff options
context:
space:
mode:
Diffstat (limited to 'unit-tests/demo_lfsc_prop.v')
-rw-r--r--unit-tests/demo_lfsc_prop.v233
1 files changed, 233 insertions, 0 deletions
diff --git a/unit-tests/demo_lfsc_prop.v b/unit-tests/demo_lfsc_prop.v
new file mode 100644
index 0000000..00acfef
--- /dev/null
+++ b/unit-tests/demo_lfsc_prop.v
@@ -0,0 +1,233 @@
+(**************************************************************************)
+(* *)
+(* SMTCoq *)
+(* Copyright (C) 2011 - 2019 *)
+(* *)
+(* See file "AUTHORS" for the list of authors *)
+(* *)
+(* This file is distributed under the terms of the CeCILL-C licence *)
+(* *)
+(**************************************************************************)
+
+
+Require Import SMTCoq.
+Require Import Bool PArray Int63 List ZArith BVList Logic.
+Import ListNotations.
+Local Open Scope list_scope.
+Local Open Scope int63_scope.
+Local Open Scope Z_scope.
+Local Open Scope bv_scope.
+
+Import BVList.BITVECTOR_LIST.
+Require Import FArray.
+
+
+Section BV.
+
+ Import BVList.BITVECTOR_LIST.
+
+ Local Open Scope bv_scope.
+
+ (*
+ (** cvc4 preprocesses the entire goal *)
+ Goal forall (a b c: bitvector 4),
+ bv_mult a (bv_add b c) = bv_add (bv_mult a b) (bv_mult a c).
+ *)
+
+
+ Goal forall (a b: bitvector 8),
+ #b|1|0|0|0|0|0|0|0| = a ->
+ #b|1|0|0|0|0|0|0|0| = b -> (bv_mult a b) = #b|0|0|0|0|0|0|0|0|.
+ Proof.
+ smt.
+ Qed.
+
+(*
+
+Goal forall (a b: bitvector 32), a = b.
+Proof. smt. Fail Qed.
+
+*)
+
+
+ Goal forall (bv1 bv2 bv3 bv4: bitvector 4),
+ #b|0|0|0|0| = bv1 /\
+ #b|1|0|0|0| = bv2 /\
+ #b|1|1|0|0| = bv3 ->
+ #b|1|1|1|0| = bv4 ->
+ bv_ultP bv1 bv2 \/ bv_ultP bv3 bv1 -> bv_ultP bv1 bv3 -> bv_ultP bv1 bv4 \/ bv_ultP bv4 bv1.
+ Proof.
+ smt.
+ Qed.
+
+ Goal forall (a: bitvector 32), a = a.
+ Proof.
+ smt.
+ Qed.
+
+ Goal forall (bv1 bv2: bitvector 4),
+ bv1 = bv2 <-> bv2 = bv1.
+ Proof.
+ smt.
+ Qed.
+
+ Goal forall (bv1 bv2 bv3 bv4: bitvector 4),
+ bv1 = #b|0|0|0|0| /\
+ bv2 = #b|1|0|0|0| /\
+ bv3 = #b|1|1|0|0| ->
+ bv4 = #b|1|1|1|0| ->
+ bv_ultP bv1 bv2 \/ bv_ultP bv3 bv1 /\ bv_ultP bv3 bv4.
+ Proof.
+ smt.
+ Qed.
+
+ Goal forall (a b c: bitvector 4),
+ (c = (bv_and a b)) ->
+ ((bv_and (bv_and c a) b) = c).
+ Proof.
+ smt.
+ Qed.
+
+
+
+End BV.
+
+Section Arrays.
+ Import BVList.BITVECTOR_LIST.
+ Import FArray.
+
+ Local Open Scope farray_scope.
+ Local Open Scope bv_scope.
+
+ Goal forall (a:farray Z Z), a = a.
+ Proof.
+ smt.
+ Qed.
+
+ Goal forall (a b: farray Z Z), a = b <-> b = a.
+ Proof.
+ smt.
+ Qed.
+
+ Goal forall (a b: farray (bitvector 8) (bitvector 8)), a = b <-> b = a.
+ Proof.
+ smt.
+ Qed.
+
+ Goal forall (a b c d: farray Z Z),
+ b[0 <- 4] = c ->
+ d = b[0 <- 4][1 <- 4] /\
+ a = d[1 <- b[1]] ->
+ a = c.
+ Proof.
+ smt.
+ Qed.
+
+ Goal forall (bv1 bv2 : bitvector 4)
+ (a b c d : farray (bitvector 4) Z),
+ bv1 = #b|0|0|0|0| ->
+ bv2 = #b|1|0|0|0| ->
+ c = b[bv1 <- 4] ->
+ d = b[bv1 <- 4][bv2 <- 4] ->
+ a = d[bv2 <- b[bv2]] ->
+ a = c.
+ Proof.
+ smt.
+ Qed.
+
+ Goal forall (a b: farray Z Z)
+ (v w x y: Z)
+ (g: farray Z Z -> Z)
+ (f: Z -> Z),
+ (a[x <- v] = b) /\ a[y <- w] = b ->
+ (f x) = (f y) \/ (g a) = (g b).
+ Proof.
+ smt.
+ Qed.
+
+ Goal forall (a b: farray Z Z) i,
+ a[i <- 3][1 <- b[i <- 4][i]][2 <- 2][1] = 4.
+ Proof.
+ smt.
+ rewrite read_over_other_write; [ | easy].
+ rewrite read_over_write.
+ rewrite read_over_write; auto.
+Qed.
+
+End Arrays.
+
+Section UF.
+
+ Goal forall
+ (x y: Z)
+ (f: Z -> Z),
+ y = x -> (f x) = (f y).
+ Proof.
+ smt.
+ Qed.
+
+ Goal forall
+ (x y: Z)
+ (f: Z -> Z),
+ (f x) = (f y) -> (f y) = (f x).
+ Proof.
+ smt.
+ Qed.
+
+ Goal forall
+ (x y: Z)
+ (f: Z -> Z),
+ x + 1 = (y + 1) -> (f y) = (f x).
+ Proof.
+ smt.
+ Qed.
+
+ Goal forall
+ (x y: Z)
+ (f: Z -> Z),
+ x = (y + 1) -> (f y) = (f (x - 1)).
+ Proof.
+ smt.
+ Qed.
+
+ Goal forall (f:Z -> Z -> Z) x y z, (x = y) -> (f z x) = (f z y).
+ Proof.
+ smt.
+ Qed.
+
+ Goal forall (t: Type) (p: CompDec t) (x y: t), (x = y) <-> (x = y).
+ Proof.
+ smt.
+ Qed.
+
+End UF.
+
+
+Section LIA.
+
+ Goal forall a b, a < b -> a < (b + 10).
+ Proof.
+ smt.
+ Qed.
+
+ Goal forall (a b: Z), a = b <-> b = a.
+ Proof.
+ smt.
+ Qed.
+
+ Goal forall (a b: Z), a = a /\ b = b.
+ Proof.
+ smt.
+ Qed.
+
+ Goal forall (a b: Z), a < b -> a < (b + 1).
+ Proof.
+ smt.
+ Qed.
+
+ Goal forall (a b: Z), (a < b) -> (a + 2 < b + 3).
+ Proof.
+ smt.
+ Qed.
+
+End LIA.