From 2b0a6470fd516900f2c1b0fe7ee368a269e7d191 Mon Sep 17 00:00:00 2001
From: Michele Alberti <michele.alberti@cea.fr>
Date: Fri, 18 Dec 2020 18:28:48 +0100
Subject: [PATCH] Add support for properties between vars.

---
 property.ml         | 7 ++++++-
 property_parser.mly | 4 +++-
 property_syntax.mli | 3 ++-
 solver.ml           | 4 +++-
 4 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/property.ml b/property.ml
index 4414673..f677587 100644
--- a/property.ml
+++ b/property.ml
@@ -77,11 +77,16 @@ let rec repr t =
     | Float f -> Format.sprintf "float %f" f
   in
   match t with
-  | Atomic (var, cop, cst) ->
+  | Atomic_cst (var, cop, cst) ->
     let var_s = string_of_var var in
     let cop_s = string_of_cop cop in
     let cst_s = string_of_cst cst in
     Format.sprintf "%s %s %s" var_s cop_s cst_s
+  | Atomic_var (var1, cop, var2) ->
+    let var1_s = string_of_var var1 in
+    let cop_s = string_of_cop cop in
+    let var2_s = string_of_var var2 in
+    Format.sprintf "%s %s %s" var1_s cop_s var2_s
   | And (p1, p2) ->
     Format.sprintf "And (%s, %s)" (repr p1) (repr p2)
 
diff --git a/property_parser.mly b/property_parser.mly
index e10923a..6cf5926 100644
--- a/property_parser.mly
+++ b/property_parser.mly
@@ -27,7 +27,9 @@ main:
 
 property:
 | var cop cst
-    { Atomic ($1, $2, $3) }
+    { Atomic_cst ($1, $2, $3) }
+| var cop var
+    { Atomic_var ($1, $2, $3) }
 
 var:
 | i = INPUT
diff --git a/property_syntax.mli b/property_syntax.mli
index 4b4472c..c81a3ea 100644
--- a/property_syntax.mli
+++ b/property_syntax.mli
@@ -15,5 +15,6 @@ type cst =
   | Float of float
 
 type t =
-  | Atomic of var * cop * cst
+  | Atomic_cst of var * cop * cst
+  | Atomic_var of var * cop * var
   | And of t * t
diff --git a/solver.ml b/solver.ml
index 985cebc..8beda3a 100644
--- a/solver.ml
+++ b/solver.ml
@@ -33,8 +33,10 @@ let rec pp_property_marabou property =
     | Float f -> Stdlib.string_of_float f
   in
   match property with
-  | Atomic ((Input v | Output v), cop, cst) ->
+  | Atomic_cst ((Input v | Output v), cop, cst) ->
     Format.sprintf "%s %s %s" v (string_of_cop cop) (string_of_cst cst)
+  | Atomic_var ((Input v1 | Output v1), cop, (Input v2 | Output v2)) ->
+    Format.sprintf "%s %s %s" v1 (string_of_cop cop) v2
   | And (p1, p2) ->
     let s1 = pp_property_marabou p1 in
     let s2 = pp_property_marabou p2 in
-- 
GitLab