diff options
| author | ericmarin <maarin.eric@gmail.com> | 2026-03-21 11:47:40 +0100 |
|---|---|---|
| committer | ericmarin <maarin.eric@gmail.com> | 2026-03-21 12:00:16 +0100 |
| commit | e2abe9d9ec649b849cc39b516c1db1b4fa592003 (patch) | |
| tree | d74dcc2e0691bb587d2a9a695639517d3aec9256 /xor | |
| parent | af4335cf47984576e7493a0eb6569d3f6ecc31c8 (diff) | |
| download | vein-e2abe9d9ec649b849cc39b516c1db1b4fa592003.tar.gz vein-e2abe9d9ec649b849cc39b516c1db1b4fa592003.zip | |
created class
Diffstat (limited to '')
| -rw-r--r-- | xor/xor.py (renamed from xor.py) | 15 | ||||
| -rw-r--r-- | xor/xor_a.onnx | bin | 0 -> 4857 bytes | |||
| -rw-r--r-- | xor/xor_a.onnx.data | 0 | ||||
| -rw-r--r-- | xor/xor_argmax.vnnlib | 11 | ||||
| -rw-r--r-- | xor/xor_b.onnx | bin | 0 -> 4987 bytes | |||
| -rw-r--r-- | xor/xor_b.onnx.data | 0 | ||||
| -rw-r--r-- | xor/xor_epsilon.vnnlib | 12 | ||||
| -rw-r--r-- | xor/xor_strict.vnnlib | 11 |
8 files changed, 36 insertions, 13 deletions
@@ -1,7 +1,6 @@ import torch import torch.nn as nn import torch.onnx -import nneq class xor_mlp(nn.Module): def __init__(self, hidden_dim): @@ -37,15 +36,5 @@ if __name__ == "__main__": torch_net_a = train_model("Network A", 8).eval() torch_net_b = train_model("Network B", 16).eval() - onnx_net_a = torch.onnx.export(torch_net_a, (torch.randn(1, 2),), verbose=False).model_proto # type: ignore - onnx_net_b = torch.onnx.export(torch_net_b, (torch.randn(1, 2),), verbose=False).model_proto # type: ignore - - z3_net_a = nneq.net(onnx_net_a) - z3_net_b = nneq.net(onnx_net_b) - - print("") - nneq.strict_equivalence(z3_net_a, z3_net_b) - print("") - nneq.epsilon_equivalence(z3_net_a, z3_net_b, 0.1) - print("") - nneq.argmax_equivalence(z3_net_a, z3_net_b) + torch.onnx.export(torch_net_a, (torch.randn(1, 2),), "xor_a.onnx") + torch.onnx.export(torch_net_b, (torch.randn(1, 2),), "xor_b.onnx") diff --git a/xor/xor_a.onnx b/xor/xor_a.onnx Binary files differnew file mode 100644 index 0000000..9c13609 --- /dev/null +++ b/xor/xor_a.onnx diff --git a/xor/xor_a.onnx.data b/xor/xor_a.onnx.data new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/xor/xor_a.onnx.data diff --git a/xor/xor_argmax.vnnlib b/xor/xor_argmax.vnnlib new file mode 100644 index 0000000..3043d70 --- /dev/null +++ b/xor/xor_argmax.vnnlib @@ -0,0 +1,11 @@ +(declare-const X_0 Real) +(declare-const X_1 Real) +(declare-const Y_0 Real) +(declare-const Y_1 Real) + +; Discrete inputs: X must be 0 or 1 +(assert (or (= X_0 0) (= X_0 1))) +(assert (or (= X_1 0) (= X_1 1))) + +; Violation of argmax equivalence (threshold 0.5) +(assert (not (= (> Y_0 0.5) (> Y_1 0.5)))) diff --git a/xor/xor_b.onnx b/xor/xor_b.onnx Binary files differnew file mode 100644 index 0000000..fb18840 --- /dev/null +++ b/xor/xor_b.onnx diff --git a/xor/xor_b.onnx.data b/xor/xor_b.onnx.data new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/xor/xor_b.onnx.data diff --git a/xor/xor_epsilon.vnnlib b/xor/xor_epsilon.vnnlib new file mode 100644 index 0000000..d4e9bb7 --- /dev/null +++ b/xor/xor_epsilon.vnnlib @@ -0,0 +1,12 @@ +(declare-const X_0 Real) +(declare-const X_1 Real) +(declare-const Y_0 Real) +(declare-const Y_1 Real) + +; Discrete inputs: X must be 0 or 1 +(assert (or (= X_0 0) (= X_0 1))) +(assert (or (= X_1 0) (= X_1 1))) + +; Violation of epsilon equivalence (epsilon = 0.1) +(define-fun absolute ((x Real)) Real (if (>= x 0) x (- x))) +(assert (> (absolute (- Y_0 Y_1)) 0.1)) diff --git a/xor/xor_strict.vnnlib b/xor/xor_strict.vnnlib new file mode 100644 index 0000000..fcf364e --- /dev/null +++ b/xor/xor_strict.vnnlib @@ -0,0 +1,11 @@ +(declare-const X_0 Real) +(declare-const X_1 Real) +(declare-const Y_0 Real) +(declare-const Y_1 Real) + +; Discrete inputs: X must be 0 or 1 +(assert (or (= X_0 0) (= X_0 1))) +(assert (or (= X_1 0) (= X_1 1))) + +; Violation of strict equivalence: outputs are different +(assert (not (= Y_0 Y_1))) |
