From 61502514df0bbed75988fff50fcfb555b9317222 Mon Sep 17 00:00:00 2001
From: Aymeric Varasse <aymeric.varasse@cea.fr>
Date: Thu, 25 Apr 2024 18:36:29 +0200
Subject: [PATCH] [exps] Uniformize, rename and reorganize specs

---
 examples/mnist/check_pruning.mlw     | 40 ----------------------------
 examples/mnist/splitted_nn.mlw       | 40 ----------------------------
 examples/onnx_rewrite/comparison.mlw | 36 +++++++++++++++++++++++++
 examples/onnx_rewrite/sequencing.mlw | 36 +++++++++++++++++++++++++
 tests/check_pruning.t                |  7 -----
 tests/comparison.t                   | 10 +++++++
 tests/dune                           | 10 +++----
 tests/sequencing.t                   | 10 +++++++
 tests/splitted_nn.t                  |  7 -----
 9 files changed, 97 insertions(+), 99 deletions(-)
 delete mode 100644 examples/mnist/check_pruning.mlw
 delete mode 100644 examples/mnist/splitted_nn.mlw
 create mode 100644 examples/onnx_rewrite/comparison.mlw
 create mode 100644 examples/onnx_rewrite/sequencing.mlw
 delete mode 100644 tests/check_pruning.t
 create mode 100644 tests/comparison.t
 create mode 100644 tests/sequencing.t
 delete mode 100644 tests/splitted_nn.t

diff --git a/examples/mnist/check_pruning.mlw b/examples/mnist/check_pruning.mlw
deleted file mode 100644
index 37f3fc9..0000000
--- a/examples/mnist/check_pruning.mlw
+++ /dev/null
@@ -1,40 +0,0 @@
-theory MNIST
-
-  use caisar.types.Vector
-  use ieee_float.Float64
-  use caisar.types.Float64WithBounds as Feature
-  use caisar.types.IntWithBounds as Label
-  use caisar.model.Model
-  use caisar.dataset.CSV
-  use caisar.robust.ClassRobustCSV
-  use caisar.robust.ClassRobustVector
-
-  constant model_filename: string
-  constant pruned_model_filename: string
-  constant dataset_filename: string
-
-  constant label_bounds: Label.bounds =
-    Label.{ lower = 0; upper = 9 }
-  
-  constant feature_bounds: Feature.bounds =
-    Feature.{ lower = (0.0:t); upper = (1.0:t) }
-
-  goal pruned:
-    let nn = read_model model_filename in
-    let pruned_nn = read_model pruned_model_filename in
-    let dataset = read_dataset dataset_filename in
-    let eps = (0.0100000000000000002081668171172168513294309377670288085937500000:t) in
-    let delta = (0.0100000000000000002081668171172168513294309377670288085937500000:t) in
-    CSV.forall_ dataset (fun _ e ->
-        forall perturbed_e.
-          has_length perturbed_e (length e) ->
-          FeatureVector.valid feature_bounds perturbed_e ->
-          let perturbation = perturbed_e - e in
-          ClassRobustVector.bounded_by_epsilon perturbation eps ->
-          let out = nn@@perturbed_e in
-          let pruned_out = pruned_nn@@perturbed_e in
-          .- delta .<= out[0] .- pruned_out[0] .<= delta
-     )
-
-
-end
diff --git a/examples/mnist/splitted_nn.mlw b/examples/mnist/splitted_nn.mlw
deleted file mode 100644
index 6afbfd5..0000000
--- a/examples/mnist/splitted_nn.mlw
+++ /dev/null
@@ -1,40 +0,0 @@
-theory MNIST
-
-  use caisar.types.Vector
-  use ieee_float.Float64
-  use caisar.types.Float64WithBounds as Feature
-  use caisar.types.IntWithBounds as Label
-  use caisar.model.Model
-  use caisar.dataset.CSV
-  use caisar.robust.ClassRobustCSV
-  use caisar.robust.ClassRobustVector
-
-  constant pre_model_filename: string
-  constant post_model_filename: string
-  constant dataset_filename: string
-
-  constant label_bounds: Label.bounds =
-    Label.{ lower = 0; upper = 9 }
-  
-  constant feature_bounds: Feature.bounds =
-    Feature.{ lower = (0.0:t); upper = (1.0:t) }
-
-  goal pruned:
-    let pre_nn = read_model pre_model_filename in
-    let post_nn = read_model post_model_filename in
-    let dataset = read_dataset dataset_filename in
-    let eps = (0.0100000000000000002081668171172168513294309377670288085937500000:t) in
-    CSV.forall_ dataset (fun l e ->
-        forall perturbed_e.
-          has_length perturbed_e (length e) ->
-          FeatureVector.valid feature_bounds perturbed_e ->
-          let perturbation = perturbed_e - e in
-          ClassRobustVector.bounded_by_epsilon perturbation eps ->
-          let out1 = pre_nn@@perturbed_e in
-          let out2 = post_nn@@out1 in
-          forall j. Label.valid label_bounds j -> j <> l ->
-          out2[l] .>= out2[j]
-     )
-
-
-end
diff --git a/examples/onnx_rewrite/comparison.mlw b/examples/onnx_rewrite/comparison.mlw
new file mode 100644
index 0000000..c56c3d5
--- /dev/null
+++ b/examples/onnx_rewrite/comparison.mlw
@@ -0,0 +1,36 @@
+theory COMPARISON
+
+  use ieee_float.Float64
+  use caisar.types.Float64WithBounds as Feature
+  use caisar.types.IntWithBounds as Label
+  use caisar.types.Vector
+  use caisar.model.Model
+  use caisar.dataset.CSV
+  use caisar.robust.ClassRobustCSV
+  use caisar.robust.ClassRobustVector
+
+  constant model_filename_1: string
+  constant model_filename_2: string
+  constant dataset_filename: string
+
+  constant label_bounds: Label.bounds = Label.{ lower = 0; upper = 9 }
+  constant feature_bounds: Feature.bounds = Feature.{ lower = (0.0:t); upper = (1.0:t) }
+
+  goal comparison:
+    let nn_1 = read_model model_filename_1 in
+    let nn_2 = read_model model_filename_2 in
+    let dataset = read_dataset dataset_filename in
+    let eps = (0.0100000000000000002081668171172168513294309377670288085937500000:t) in
+    let delta = (0.0100000000000000002081668171172168513294309377670288085937500000:t) in
+    CSV.forall_ dataset (fun _ e ->
+      forall perturbed_e.
+        has_length perturbed_e (length e) ->
+        FeatureVector.valid feature_bounds perturbed_e ->
+        let perturbation = perturbed_e - e in
+        ClassRobustVector.bounded_by_epsilon perturbation eps ->
+        let out_1 = nn_1@@perturbed_e in
+        let out_2 = nn_2@@perturbed_e in
+        .- delta .<= out_1[0] .- out_2[0] .<= delta
+    )
+
+end
diff --git a/examples/onnx_rewrite/sequencing.mlw b/examples/onnx_rewrite/sequencing.mlw
new file mode 100644
index 0000000..a3a03cf
--- /dev/null
+++ b/examples/onnx_rewrite/sequencing.mlw
@@ -0,0 +1,36 @@
+theory SEQUENCING
+
+  use ieee_float.Float64
+  use caisar.types.Float64WithBounds as Feature
+  use caisar.types.IntWithBounds as Label
+  use caisar.types.Vector
+  use caisar.model.Model
+  use caisar.dataset.CSV
+  use caisar.robust.ClassRobustCSV
+  use caisar.robust.ClassRobustVector
+
+  constant model_filename_1: string
+  constant model_filename_2: string
+  constant dataset_filename: string
+
+  constant label_bounds: Label.bounds = Label.{ lower = 0; upper = 9 }
+  constant feature_bounds: Feature.bounds = Feature.{ lower = (0.0:t); upper = (1.0:t) }
+
+  goal sequencing:
+    let nn_1 = read_model model_filename_1 in
+    let nn_2 = read_model model_filename_2 in
+    let dataset = read_dataset dataset_filename in
+    let eps = (0.0100000000000000002081668171172168513294309377670288085937500000:t) in
+    CSV.forall_ dataset (fun l e ->
+      forall perturbed_e.
+        has_length perturbed_e (length e) ->
+        FeatureVector.valid feature_bounds perturbed_e ->
+        let perturbation = perturbed_e - e in
+        ClassRobustVector.bounded_by_epsilon perturbation eps ->
+        let out_1 = nn_1@@perturbed_e in
+        let out_2 = nn_2@@out_1 in
+        forall j. Label.valid label_bounds j -> j <> l ->
+        out_2[l] .>= out_2[j]
+    )
+
+end
diff --git a/tests/check_pruning.t b/tests/check_pruning.t
deleted file mode 100644
index a74ec0c..0000000
--- a/tests/check_pruning.t
+++ /dev/null
@@ -1,7 +0,0 @@
-  $ . ./setup_env.sh
-
-  $ ls ../examples/
-  acasxu
-  mnist
-
-#  $ caisar verify --prover PyRAT  --ltag=StackTrace --define model_filename:nets/pruned/FNN_28x28_s42.onnx --define pruned_model_filename:nets/pruned/FNN_28x28_pruned_s42.onnx --define dataset_filename:csv/single_image.csv ../examples/mnist/check_pruning.mlw -v
diff --git a/tests/comparison.t b/tests/comparison.t
new file mode 100644
index 0000000..a901ae8
--- /dev/null
+++ b/tests/comparison.t
@@ -0,0 +1,10 @@
+  $ . ./setup_env.sh
+
+  $ ls ../examples/
+  acasxu
+  mnist
+  onnx_rewrite
+
+  $ caisar verify --prover PyRAT --define model_filename_1:../mnist/nets/pruned/FNN_28x28_s42.onnx --define model_filename_2:../mnist/nets/pruned/FNN_28x28_pruned_s42.onnx --define dataset_filename:../mnist/csv/single_image.csv ../examples/onnx_rewrite/comparison.mlw -v
+  [INFO] Verification results for theory 'COMPARISON'
+  Goal comparison: Unknown ()
diff --git a/tests/dune b/tests/dune
index 704b446..57ad5a8 100644
--- a/tests/dune
+++ b/tests/dune
@@ -1,6 +1,6 @@
 (cram
  (alias local)
- (applies_to * \ nir_to_onnx acasxu_ci arithmetic check_pruning splited_nn)
+ (applies_to * \ nir_to_onnx acasxu_ci arithmetic comparison sequencing)
  (deps
   (package caisar)
   setup_env.sh
@@ -29,13 +29,13 @@
 
  (cram
  (alias local)
- (applies_to check_pruning)
+ (applies_to comparison)
  (deps
   (package caisar)
   setup_env.sh
   (glob_files bin/*)
   filter_tmpdir.sh
-  ../examples/mnist/check_pruning.mlw
+  ../examples/onnx_rewrite/comparison.mlw
   ../examples/mnist/nets/pruned/FNN_28x28_s42.onnx
   ../examples/mnist/nets/pruned/FNN_28x28_pruned_s42.onnx
   ../examples/mnist/csv/single_image.csv
@@ -44,13 +44,13 @@
 
  (cram
  (alias local)
- (applies_to splitted_nn)
+ (applies_to sequencing)
  (deps
   (package caisar)
   setup_env.sh
   (glob_files bin/*)
   filter_tmpdir.sh
-  ../examples/mnist/splitted_nn.mlw
+  ../examples/onnx_rewrite/sequencing.mlw
   ../examples/mnist/nets/splitted/FNN_28x28_pre_s42.onnx
   ../examples/mnist/nets/splitted/FNN_28x28_post_s42.onnx
   ../examples/mnist/csv/single_image.csv
diff --git a/tests/sequencing.t b/tests/sequencing.t
new file mode 100644
index 0000000..90676de
--- /dev/null
+++ b/tests/sequencing.t
@@ -0,0 +1,10 @@
+  $ . ./setup_env.sh
+
+  $ ls ../examples/
+  acasxu
+  mnist
+  onnx_rewrite
+
+  $ caisar verify --prover PyRAT --define model_filename_1:../mnist/nets/splitted/FNN_28x28_pre_s42.onnx --define model_filename_2:../mnist/nets/splitted/FNN_28x28_post_s42.onnx --define dataset_filename:../mnist/csv/single_image.csv ../examples/onnx_rewrite/sequencing.mlw -v
+  [INFO] Verification results for theory 'SEQUENCING'
+  Goal sequencing: Unknown ()
diff --git a/tests/splitted_nn.t b/tests/splitted_nn.t
deleted file mode 100644
index 611987d..0000000
--- a/tests/splitted_nn.t
+++ /dev/null
@@ -1,7 +0,0 @@
-  $ . ./setup_env.sh
-
-  $ ls ../examples/
-  acasxu
-  mnist
-
-#  $ caisar verify --prover PyRAT  --ltag=StackTrace --define pre_model_filename:nets/splitted/FNN_28x28_pre_s42.onnx --define post_model_filename:nets/splitted/FNN_28x28_post_s42.onnx --define dataset_filename:csv/single_image.csv ../examples/mnist/splitted_nn.mlw -v
-- 
GitLab