@@ -13,35 +13,77 @@ module INT-SIMPLIFICATION-HASKELL [symbolic, kore]
13
13
14
14
// associativity normalization
15
15
16
- rule A +Int B => B +Int A [concrete(A), symbolic(B), simplification(40)]
17
-
18
- rule A +Int (B +Int C) => (A +Int B) +Int C [symbolic(A, B), simplification(40)]
19
- rule A +Int (B -Int C) => (A +Int B) -Int C [symbolic(A, B), simplification(40)]
20
- rule A -Int (B +Int C) => (A -Int B) -Int C [symbolic(A, B), simplification(40)]
21
- rule A -Int (B -Int C) => (A -Int B) +Int C [symbolic(A, B), simplification(40)]
16
+ rule A +Int (B +Int C) => (A +Int B) +Int C [symbolic(A, B), concrete(C), simplification(40)]
17
+ rule A +Int (B -Int C) => (A +Int B) -Int C [symbolic(A, B), concrete(C), simplification(40)]
18
+ rule A -Int (B +Int C) => (A -Int B) -Int C [symbolic(A, B), concrete(C), simplification(40)]
19
+ rule A -Int (B -Int C) => (A -Int B) +Int C [symbolic(A, B), concrete(C), simplification(40)]
22
20
23
21
rule A +Int (B -Int C) => (A -Int C) +Int B [symbolic(A, C), concrete(B), simplification(40)]
24
22
rule A -Int (B -Int C) => (A +Int C) -Int B [symbolic(A, C), concrete(B), simplification(40)]
25
23
26
- rule (A +Int B) +Int C => (A +Int C) +Int B [concrete(B), symbolic(C), simplification(40)]
27
- rule (A +Int B) -Int C => (A -Int C) +Int B [concrete(B), symbolic(C), simplification(40)]
28
- rule (A -Int B) +Int C => (A +Int C) -Int B [concrete(B), symbolic(C), simplification(40)]
29
- rule (A -Int B) -Int C => (A -Int C) -Int B [concrete(B), symbolic(C), simplification(40)]
24
+ rule (A +Int B) +Int C => (A +Int C) +Int B [concrete(B), symbolic(A, C), simplification(40)]
25
+ rule (A +Int B) -Int C => (A -Int C) +Int B [concrete(B), symbolic(A, C), simplification(40)]
26
+ rule (A -Int B) +Int C => (A +Int C) -Int B [concrete(B), symbolic(A, C), simplification(40)]
27
+ rule (A -Int B) -Int C => (A -Int C) -Int B [concrete(B), symbolic(A, C), simplification(40)]
30
28
31
29
rule (A +Int B) +Int C => A +Int (B +Int C) [concrete(B, C), symbolic(A), simplification(40)]
32
30
rule (A +Int B) -Int C => A +Int (B -Int C) [concrete(B, C), symbolic(A), simplification(40)]
33
31
rule (A -Int B) +Int C => A +Int (C -Int B) [concrete(B, C), symbolic(A), simplification(40)]
34
32
rule (A -Int B) -Int C => A -Int (B +Int C) [concrete(B, C), symbolic(A), simplification(40)]
35
33
36
34
// ###########################################################################
37
- // inequality
35
+ // comparison normalization
38
36
// ###########################################################################
39
37
40
- rule A +Int B <Int C => A <Int C -Int B [concrete(B), simplification(40)]
41
- rule A <Int B +Int C => A -Int C <Int B [concrete(A, C), simplification(40)]
42
- rule A <=Int B +Int C => A -Int C <=Int B [concrete(A, C), simplification(40)]
43
- rule A -Int B <Int C => A -Int C <Int B [concrete(A, C), simplification(40)]
44
- rule A <=Int B -Int C => C <=Int B -Int A [concrete(A, B), simplification(40)]
38
+ rule A +Int B <Int C => A <Int C -Int B [concrete(B, C), symbolic(A), simplification(45)]
39
+ rule A +Int B <=Int C => A <=Int C -Int B [concrete(B, C), symbolic(A), simplification(45)]
40
+ rule A +Int B >Int C => A >Int C -Int B [concrete(B, C), symbolic(A), simplification(45)]
41
+ rule A +Int B >=Int C => A >=Int C -Int B [concrete(B, C), symbolic(A), simplification(45)]
42
+
43
+ rule A +Int B <Int C => B <Int C -Int A [concrete(A, C), symbolic(B), simplification(45)]
44
+ rule A +Int B <=Int C => B <=Int C -Int A [concrete(A, C), symbolic(B), simplification(45)]
45
+ rule A +Int B >Int C => B >Int C -Int A [concrete(A, C), symbolic(B), simplification(45)]
46
+ rule A +Int B >=Int C => B >=Int C -Int A [concrete(A, C), symbolic(B), simplification(45)]
47
+
48
+ rule A -Int B <Int C => A <Int C +Int B [concrete(B, C), symbolic(A), simplification(45)]
49
+ rule A -Int B <=Int C => A <=Int C +Int B [concrete(B, C), symbolic(A), simplification(45)]
50
+ rule A -Int B >Int C => A >Int C +Int B [concrete(B, C), symbolic(A), simplification(45)]
51
+ rule A -Int B >=Int C => A >=Int C +Int B [concrete(B, C), symbolic(A), simplification(45)]
52
+
53
+ rule A -Int B <Int C => A -Int C <Int B [concrete(A, C), symbolic(B), simplification(45)]
54
+ rule A -Int B <=Int C => A -Int C <=Int B [concrete(A, C), symbolic(B), simplification(45)]
55
+ rule A -Int B >Int C => A -Int C >Int B [concrete(A, C), symbolic(B), simplification(45)]
56
+ rule A -Int B >=Int C => A -Int C >=Int B [concrete(A, C), symbolic(B), simplification(45)]
57
+
58
+ rule A <Int B +Int C => A -Int B <Int C [concrete(A, B), symbolic(C), simplification(45)]
59
+ rule A <=Int B +Int C => A -Int B <=Int C [concrete(A, B), symbolic(C), simplification(45)]
60
+ rule A >Int B +Int C => A -Int B >Int C [concrete(A, B), symbolic(C), simplification(45)]
61
+ rule A >=Int B +Int C => A -Int B >=Int C [concrete(A, B), symbolic(C), simplification(45)]
62
+
63
+ rule A <Int B +Int C => A -Int C <Int B [concrete(A, C), symbolic(B), simplification(45)]
64
+ rule A <=Int B +Int C => A -Int C <=Int B [concrete(A, C), symbolic(B), simplification(45)]
65
+ rule A >Int B +Int C => A -Int C >Int B [concrete(A, C), symbolic(B), simplification(45)]
66
+ rule A >=Int B +Int C => A -Int C >=Int B [concrete(A, C), symbolic(B), simplification(45)]
67
+
68
+ rule A <Int B -Int C => C <Int B -Int A [concrete(A, B), symbolic(C), simplification(45)]
69
+ rule A <=Int B -Int C => C <=Int B -Int A [concrete(A, B), symbolic(C), simplification(45)]
70
+ rule A >Int B -Int C => C >Int B -Int A [concrete(A, B), symbolic(C), simplification(45)]
71
+ rule A >=Int B -Int C => C >=Int B -Int A [concrete(A, B), symbolic(C), simplification(45)]
72
+
73
+ rule A <Int B -Int C => A +Int C <Int B [concrete(A, C), symbolic(B), simplification(45)]
74
+ rule A <=Int B -Int C => A +Int C <=Int B [concrete(A, C), symbolic(B), simplification(45)]
75
+ rule A >Int B -Int C => A +Int C >Int B [concrete(A, C), symbolic(B), simplification(45)]
76
+ rule A >=Int B -Int C => A +Int C >=Int B [concrete(A, C), symbolic(B), simplification(45)]
77
+
78
+ rule A +Int B ==Int C => A ==Int C -Int B [concrete(B, C), symbolic(A), simplification(45), comm]
79
+ rule A +Int B ==Int C => B ==Int C -Int A [concrete(A, C), symbolic(B), simplification(45), comm]
80
+ rule A -Int B ==Int C => A ==Int C +Int B [concrete(B, C), symbolic(A), simplification(45), comm]
81
+ rule A -Int B ==Int C => A -Int C ==Int B [concrete(A, C), symbolic(B), simplification(45), comm]
82
+
83
+ rule { A +Int B #Equals C } => { A #Equals C -Int B } [concrete(B, C), symbolic(A), simplification(45), comm]
84
+ rule { A +Int B #Equals C } => { B #Equals C -Int A } [concrete(A, C), symbolic(B), simplification(45), comm]
85
+ rule { A -Int B #Equals C } => { A #Equals C +Int B } [concrete(B, C), symbolic(A), simplification(45), comm]
86
+ rule { A -Int B #Equals C } => { A -Int C #Equals B } [concrete(A, C), symbolic(B), simplification(45), comm]
45
87
46
88
endmodule
47
89
0 commit comments