-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsatNative.cs
120 lines (100 loc) · 2.73 KB
/
satNative.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Numerics;
using Microsoft.Z3;
namespace @Z3SatLib {
public class BoolExpr
{
public Microsoft.Z3.BoolExpr expr;
public BoolExpr(Microsoft.Z3.BoolExpr s) {
expr = s;
}
public override string ToString() {
return expr.ToString();
}
}
public class IntExpr
{
public Microsoft.Z3.ArithExpr expr;
public IntExpr(Microsoft.Z3.ArithExpr s) {
expr = s;
}
public override string ToString() {
return expr.ToString();
}
}
public partial class __default {
static Microsoft.Z3.Context ctx = new Microsoft.Z3.Context();
public static void getTrueBool(out BoolExpr e) {
e = new BoolExpr(ctx.MkTrue());
}
public static BoolExpr getTrueBool() {
BoolExpr e;
getTrueBool(out e);
return e;
}
public static void and(BoolExpr f1, BoolExpr f2, out BoolExpr e) {
e = new BoolExpr(ctx.MkAnd(f1.expr, f2.expr));
}
public static BoolExpr and(BoolExpr f1, BoolExpr f2) {
BoolExpr e;
and(f1, f2, out e);
return e;
}
public static void not(BoolExpr f1, out BoolExpr e) {
e = new BoolExpr(ctx.MkNot(f1.expr));
}
public static BoolExpr not(BoolExpr f1) {
BoolExpr e;
not(f1, out e);
return e;
}
public static void boolToInt(BoolExpr b, out IntExpr e) {
e = new IntExpr((Microsoft.Z3.IntExpr)ctx.MkITE(b.expr, intConst(1).expr, intConst(0).expr));
}
public static IntExpr boolToInt(BoolExpr b) {
IntExpr e;
boolToInt(b, out e);
return e;
}
public static void intConst(BigInteger i, out IntExpr e) {
e = new IntExpr(ctx.MkInt((int)i));
}
public static IntExpr intConst(BigInteger i) {
IntExpr e;
intConst(i, out e);
return e;
}
public static void intSymbolic(BigInteger i, out IntExpr e) {
e = new IntExpr(ctx.MkIntConst("reg"+i.ToString()));
}
public static IntExpr intSymbolic(BigInteger i) {
IntExpr e;
intSymbolic(i, out e);
return e;
}
public static void add(IntExpr f1, IntExpr f2, out IntExpr e) {
e = new IntExpr(ctx.MkAdd(f1.expr, f2.expr));
}
public static IntExpr add(IntExpr f1, IntExpr f2) {
IntExpr e;
add(f1, f2, out e);
return e;
}
public static void cmp(IntExpr f1, IntExpr f2, out BoolExpr e) {
e = new BoolExpr(ctx.MkEq(f1.expr, f2.expr));
}
public static BoolExpr cmp(IntExpr f1, IntExpr f2) {
BoolExpr e;
cmp(f1, f2, out e);
return e;
}
public static bool sat(BoolExpr f1) {
Solver s = ctx.MkSolver();
s.Assert(f1.expr);
return s.Check() == Status.SATISFIABLE;
}
}
}