root/trunk/backmath/generated_rules.d

Revision 178, 71.7 kB (checked in by BCS, 1 year ago)

added makefiles for win and linux

Line 
1 template TypeOfAdd(T, V)
2 {
3     static if( /+ (+ (/> K (-> H X)) (/> F (-> E X))) -> (/> (+ K F) (-> (/ (+ (* H K) (* E F)) (+ K F)) X)) +/
4         is(T.Op == DivA) && is(T.LHS.DefP == Defined) && is(T.RHS.Op == SubA) && is(T.RHS.LHS.DefP == Defined) && is(T.RHS.RHS.DefP == UnDefined) &&
5         is(V.Op == DivA) && is(V.LHS.DefP == Defined) && is(V.RHS.Op == SubA) && is(V.RHS.LHS.DefP == Defined) && is(V.RHS.RHS.DefP == UnDefined)
6          && is(T.RHS.RHS == V.RHS.RHS)
7         )
8         alias OpDivA!(OpAdd!(T.LHS, V.LHS), OpSubA!(OpDiv!(OpAdd!(OpMul!(T.RHS.LHS, T.LHS), OpMul!(V.RHS.LHS, V.LHS)), OpAdd!(T.LHS, V.LHS)), T.RHS.RHS)) TypeOfAdd;
9     else
10     static if( /+ (+ (/> K (-> H X)) (*> F (-> E X))) -> (/> (+ K (/ 1 F)) (-> (/ (+ (* H K) (/ E F)) (+ K (/ 1 F))) X)) +/
11         is(T.Op == DivA) && is(T.LHS.DefP == Defined) && is(T.RHS.Op == SubA) && is(T.RHS.LHS.DefP == Defined) && is(T.RHS.RHS.DefP == UnDefined) &&
12         is(V.Op == MulA) && is(V.LHS.DefP == Defined) && is(V.RHS.Op == SubA) && is(V.RHS.LHS.DefP == Defined) && is(V.RHS.RHS.DefP == UnDefined)
13          && is(T.RHS.RHS == V.RHS.RHS)
14         )
15         alias OpDivA!(OpAdd!(T.LHS, OpDiv!(Value!(1), V.LHS)), OpSubA!(OpDiv!(OpAdd!(OpMul!(T.RHS.LHS, T.LHS), OpDiv!(V.RHS.LHS, V.LHS)), OpAdd!(T.LHS, OpDiv!(Value!(1), V.LHS))), T.RHS.RHS)) TypeOfAdd;
16     else
17     static if( /+ (+ (/> K (-> H X)) (/> E X)) -> (/> (+ K E) (-> (/ (* H K) (+ K E)) X)) +/
18         is(T.Op == DivA) && is(T.LHS.DefP == Defined) && is(T.RHS.Op == SubA) && is(T.RHS.LHS.DefP == Defined) && is(T.RHS.RHS.DefP == UnDefined) &&
19         is(V.Op == DivA) && is(V.LHS.DefP == Defined) && is(V.RHS.DefP == UnDefined)
20          && is(T.RHS.RHS == V.RHS)
21         )
22         alias OpDivA!(OpAdd!(T.LHS, V.LHS), OpSubA!(OpDiv!(OpMul!(T.RHS.LHS, T.LHS), OpAdd!(T.LHS, V.LHS)), T.RHS.RHS)) TypeOfAdd;
23     else
24     static if( /+ (+ (/> K (-> H X)) (*> E X)) -> (/> (+ K (/ 1 E)) (-> (/ (* H K) (+ K (/ 1 E))) X)) +/
25         is(T.Op == DivA) && is(T.LHS.DefP == Defined) && is(T.RHS.Op == SubA) && is(T.RHS.LHS.DefP == Defined) && is(T.RHS.RHS.DefP == UnDefined) &&
26         is(V.Op == MulA) && is(V.LHS.DefP == Defined) && is(V.RHS.DefP == UnDefined)
27          && is(T.RHS.RHS == V.RHS)
28         )
29         alias OpDivA!(OpAdd!(T.LHS, OpDiv!(Value!(1), V.LHS)), OpSubA!(OpDiv!(OpMul!(T.RHS.LHS, T.LHS), OpAdd!(T.LHS, OpDiv!(Value!(1), V.LHS))), T.RHS.RHS)) TypeOfAdd;
30     else
31     static if( /+ (+ (/> A (-> B X)) C) -> (/> A (-> (+ (/ C A) B) X)) +/
32         is(T.Op == DivA) && is(T.LHS.DefP == Defined) && is(T.RHS.Op == SubA) && is(T.RHS.LHS.DefP == Defined) && is(T.RHS.RHS.DefP == UnDefined) &&
33         is(V.DefP == Defined)
34          /+ no repeats +/
35         )
36         alias OpDivA!(T.LHS, OpSubA!(OpAdd!(OpDiv!(V, T.LHS), T.RHS.LHS), T.RHS.RHS)) TypeOfAdd;
37     else
38     static if( /+ (+ (/> K (-> H X)) X) -> (/> (+ K 1) (-> (/ (* H K) (+ K 1)) X)) +/
39         is(T.Op == DivA) && is(T.LHS.DefP == Defined) && is(T.RHS.Op == SubA) && is(T.RHS.LHS.DefP == Defined) && is(T.RHS.RHS.DefP == UnDefined) &&
40         is(V.DefP == UnDefined)
41          && is(T.RHS.RHS == V)
42         )
43         alias OpDivA!(OpAdd!(T.LHS, Value!(1)), OpSubA!(OpDiv!(OpMul!(T.RHS.LHS, T.LHS), OpAdd!(T.LHS, Value!(1))), T.RHS.RHS)) TypeOfAdd;
44     else
45     static if( /+ (+ (/> K (+> H X)) (/> F (+> E X))) -> (/> (+ K F) (+> (/ (+ (* H K) (* E F)) (+ K F)) X)) +/
46         is(T.Op == DivA) && is(T.LHS.DefP == Defined) && is(T.RHS.Op == AddA) && is(T.RHS.LHS.DefP == Defined) && is(T.RHS.RHS.DefP == UnDefined) &&
47         is(V.Op == DivA) && is(V.LHS.DefP == Defined) && is(V.RHS.Op == AddA) && is(V.RHS.LHS.DefP == Defined) && is(V.RHS.RHS.DefP == UnDefined)
48          && is(T.RHS.RHS == V.RHS.RHS)
49         )
50         alias OpDivA!(OpAdd!(T.LHS, V.LHS), OpAddA!(OpDiv!(OpAdd!(OpMul!(T.RHS.LHS, T.LHS), OpMul!(V.RHS.LHS, V.LHS)), OpAdd!(T.LHS, V.LHS)), T.RHS.RHS)) TypeOfAdd;
51     else
52     static if( /+ (+ (/> K (+> H X)) (*> F (+> E X))) -> (/> (+ K (/ 1 F)) (+> (/ (+ (* H K) (/ E F)) (+ K (/ 1 F))) X)) +/
53         is(T.Op == DivA) && is(T.LHS.DefP == Defined) && is(T.RHS.Op == AddA) && is(T.RHS.LHS.DefP == Defined) && is(T.RHS.RHS.DefP == UnDefined) &&
54         is(V.Op == MulA) && is(V.LHS.DefP == Defined) && is(V.RHS.Op == AddA) && is(V.RHS.LHS.DefP == Defined) && is(V.RHS.RHS.DefP == UnDefined)
55          && is(T.RHS.RHS == V.RHS.RHS)
56         )
57         alias OpDivA!(OpAdd!(T.LHS, OpDiv!(Value!(1), V.LHS)), OpAddA!(OpDiv!(OpAdd!(OpMul!(T.RHS.LHS, T.LHS), OpDiv!(V.RHS.LHS, V.LHS)), OpAdd!(T.LHS, OpDiv!(Value!(1), V.LHS))), T.RHS.RHS)) TypeOfAdd;
58     else
59     static if( /+ (+ (/> K (+> H X)) (/> E X)) -> (/> (+ K E) (+> (/ (* H K) (+ K E)) X)) +/
60         is(T.Op == DivA) && is(T.LHS.DefP == Defined) && is(T.RHS.Op == AddA) && is(T.RHS.LHS.DefP == Defined) && is(T.RHS.RHS.DefP == UnDefined) &&
61         is(V.Op == DivA) && is(V.LHS.DefP == Defined) && is(V.RHS.DefP == UnDefined)
62          && is(T.RHS.RHS == V.RHS)
63         )
64         alias OpDivA!(OpAdd!(T.LHS, V.LHS), OpAddA!(OpDiv!(OpMul!(T.RHS.LHS, T.LHS), OpAdd!(T.LHS, V.LHS)), T.RHS.RHS)) TypeOfAdd;
65     else
66     static if( /+ (+ (/> K (+> H X)) (*> E X)) -> (/> (+ K (/ 1 E)) (+> (/ (* H K) (+ K (/ 1 E))) X)) +/
67         is(T.Op == DivA) && is(T.LHS.DefP == Defined) && is(T.RHS.Op == AddA) && is(T.RHS.LHS.DefP == Defined) && is(T.RHS.RHS.DefP == UnDefined) &&
68         is(V.Op == MulA) && is(V.LHS.DefP == Defined) && is(V.RHS.DefP == UnDefined)
69          && is(T.RHS.RHS == V.RHS)
70         )
71         alias OpDivA!(OpAdd!(T.LHS, OpDiv!(Value!(1), V.LHS)), OpAddA!(OpDiv!(OpMul!(T.RHS.LHS, T.LHS), OpAdd!(T.LHS, OpDiv!(Value!(1), V.LHS))), T.RHS.RHS)) TypeOfAdd;
72     else
73     static if( /+ (+ (/> A (+> B X)) C) -> (/> A (+> (- B (/ C A)) X)) +/
74         is(T.Op == DivA) && is(T.LHS.DefP == Defined) && is(T.RHS.Op == AddA) && is(T.RHS.LHS.DefP == Defined) && is(T.RHS.RHS.DefP == UnDefined) &&
75         is(V.DefP == Defined)
76          /+ no repeats +/
77         )
78         alias OpDivA!(T.LHS, OpAddA!(OpSub!(T.RHS.LHS, OpDiv!(V, T.LHS)), T.RHS.RHS)) TypeOfAdd;
79     else
80     static if( /+ (+ (/> K (+> H X)) X) -> (/> (+ K 1) (+> (/ (* H K) (+ K 1)) X)) +/
81         is(T.Op == DivA) && is(T.LHS.DefP == Defined) && is(T.RHS.Op == AddA) && is(T.RHS.LHS.DefP == Defined) && is(T.RHS.RHS.DefP == UnDefined) &&
82         is(V.DefP == UnDefined)
83          && is(T.RHS.RHS == V)
84         )
85         alias OpDivA!(OpAdd!(T.LHS, Value!(1)), OpAddA!(OpDiv!(OpMul!(T.RHS.LHS, T.LHS), OpAdd!(T.LHS, Value!(1))), T.RHS.RHS)) TypeOfAdd;
86     else
87     static if( /+ (+ (*> K (-> H X)) (/> F (-> E X))) -> (/> (+ (/ 1 K) F) (-> (/ (+ (* H (/ 1 K)) (* E F)) (+ (/ 1 K) F)) X)) +/
88         is(T.Op == MulA) && is(T.LHS.DefP == Defined) && is(T.RHS.Op == SubA) && is(T.RHS.LHS.DefP == Defined) && is(T.RHS.RHS.DefP == UnDefined) &&
89         is(V.Op == DivA) && is(V.LHS.DefP == Defined) && is(V.RHS.Op == SubA) && is(V.RHS.LHS.DefP == Defined) && is(V.RHS.RHS.DefP == UnDefined)
90          && is(T.RHS.RHS == V.RHS.RHS)
91         )
92         alias OpDivA!(OpAdd!(OpDiv!(Value!(1), T.LHS), V.LHS), OpSubA!(OpDiv!(OpAdd!(OpMul!(T.RHS.LHS, OpDiv!(Value!(1), T.LHS)), OpMul!(V.RHS.LHS, V.LHS)), OpAdd!(OpDiv!(Value!(1), T.LHS), V.LHS)), T.RHS.RHS)) TypeOfAdd;
93     else
94     static if( /+ (+ (*> K (-> H X)) (*> F (-> E X))) -> (/> (+ (/ 1 K) (/ 1 F))
95     (-> (/ (+ (/ E F) (/ H K)) (+ (/ 1 K) (/ 1 F))) X)) +/
96         is(T.Op == MulA) && is(T.LHS.DefP == Defined) && is(T.RHS.Op == SubA) && is(T.RHS.LHS.DefP == Defined) && is(T.RHS.RHS.DefP == UnDefined) &&
97         is(V.Op == MulA) && is(V.LHS.DefP == Defined) && is(V.RHS.Op == SubA) && is(V.RHS.LHS.DefP == Defined) && is(V.RHS.RHS.DefP == UnDefined)
98          && is(T.RHS.RHS == V.RHS.RHS)
99         )
100         alias OpDivA!(OpAdd!(OpDiv!(Value!(1), T.LHS), OpDiv!(Value!(1), V.LHS)), OpSubA!(OpDiv!(OpAdd!(OpDiv!(V.RHS.LHS, V.LHS), OpDiv!(T.RHS.LHS, T.LHS)), OpAdd!(OpDiv!(Value!(1), T.LHS), OpDiv!(Value!(1), V.LHS))), T.RHS.RHS)) TypeOfAdd;
101     else
102     static if( /+ (+ (*> K (-> H X)) (/> E X)) -> (/> (+ E (/ 1 K)) (-> (/ (/ H K) (+ E (/ 1 K))) X)) +/
103         is(T.Op == MulA) && is(T.LHS.DefP == Defined) && is(T.RHS.Op == SubA) && is(T.RHS.LHS.DefP == Defined) && is(T.RHS.RHS.DefP == UnDefined) &&
104         is(V.Op == DivA) && is(V.LHS.DefP == Defined) && is(V.RHS.DefP == UnDefined)
105          && is(T.RHS.RHS == V.RHS)
106         )
107         alias OpDivA!(OpAdd!(V.LHS, OpDiv!(Value!(1), T.LHS)), OpSubA!(OpDiv!(OpDiv!(T.RHS.LHS, T.LHS), OpAdd!(V.LHS, OpDiv!(Value!(1), T.LHS))), T.RHS.RHS)) TypeOfAdd;
108     else
109     static if( /+ (+ (*> K (-> H X)) (*> E X)) -> (/> (+ (/ 1 K) (/ 1 E)) (-> (/ (/ H K) (+ (/ 1 K) (/ 1 E))) X)) +/
110         is(T.Op == MulA) && is(T.LHS.DefP == Defined) && is(T.RHS.Op == SubA) && is(T.RHS.LHS.DefP == Defined) && is(T.RHS.RHS.DefP == UnDefined) &&
111         is(V.Op == MulA) && is(V.LHS.DefP == Defined) && is(V.RHS.DefP == UnDefined)
112          && is(T.RHS.RHS == V.RHS)
113         )
114         alias OpDivA!(OpAdd!(OpDiv!(Value!(1), T.LHS), OpDiv!(Value!(1), V.LHS)), OpSubA!(OpDiv!(OpDiv!(T.RHS.LHS, T.LHS), OpAdd!(OpDiv!(Value!(1), T.LHS), OpDiv!(Value!(1), V.LHS))), T.RHS.RHS)) TypeOfAdd;
115     else
116     static if( /+ (+ (*> K (+> H X)) (/> F (+> E X))) -> (/> (+ F (/ 1 K)) (+> (/ (+ (/ H K) (* E F)) (+ F (/ 1 K))) X)) +/
117         is(T.Op == MulA) && is(T.LHS.DefP == Defined) && is(T.RHS.Op == AddA) && is(T.RHS.LHS.DefP == Defined) && is(T.RHS.RHS.DefP == UnDefined) &&
118         is(V.Op == DivA) && is(V.LHS.DefP == Defined) && is(V.RHS.Op == AddA) && is(V.RHS.LHS.DefP == Defined) && is(V.RHS.RHS.DefP == UnDefined)
119          && is(T.RHS.RHS == V.RHS.RHS)
120         )
121         alias OpDivA!(OpAdd!(V.LHS, OpDiv!(Value!(1), T.LHS)), OpAddA!(OpDiv!(OpAdd!(OpDiv!(T.RHS.LHS, T.LHS), OpMul!(V.RHS.LHS, V.LHS)), OpAdd!(V.LHS, OpDiv!(Value!(1), T.LHS))), T.RHS.RHS)) TypeOfAdd;
122     else
123     static if( /+ (+ (*> K (+> H X)) (*> F (+> E X))) -> (/> (+ (/ 1 K) (/ 1 F))
124     (+> (/ (+ (/ H K) (/ E F)) (+ (/ 1 K) (/ 1 F))) X)) +/
125         is(T.Op == MulA) && is(T.LHS.DefP == Defined) && is(T.RHS.Op == AddA) && is(T.RHS.LHS.DefP == Defined) && is(T.RHS.RHS.DefP == UnDefined) &&
126         is(V.Op == MulA) && is(V.LHS.DefP == Defined) && is(V.RHS.Op == AddA) && is(V.RHS.LHS.DefP == Defined) && is(V.RHS.RHS.DefP == UnDefined)
127          && is(T.RHS.RHS == V.RHS.RHS)
128         )
129         alias OpDivA!(OpAdd!(OpDiv!(Value!(1), T.LHS), OpDiv!(Value!(1), V.LHS)), OpAddA!(OpDiv!(OpAdd!(OpDiv!(T.RHS.LHS, T.LHS), OpDiv!(V.RHS.LHS, V.LHS)), OpAdd!(OpDiv!(Value!(1), T.LHS), OpDiv!(Value!(1), V.LHS))), T.RHS.RHS)) TypeOfAdd;
130     else
131     static if( /+ (+ (*> K (+> H X)) (/> E X)) -> (/> (+ (/ 1 K) E) (+> (/ (/ H K) (+ (/ 1 K) E)) X)) +/
132         is(T.Op == MulA) && is(T.LHS.DefP == Defined) && is(T.RHS.Op == AddA) && is(T.RHS.LHS.DefP == Defined) && is(T.RHS.RHS.DefP == UnDefined) &&
133         is(V.Op == DivA) && is(V.LHS.DefP == Defined) && is(V.RHS.DefP == UnDefined)
134          && is(T.RHS.RHS == V.RHS)
135         )
136         alias OpDivA!(OpAdd!(OpDiv!(Value!(1), T.LHS), V.LHS), OpAddA!(OpDiv!(OpDiv!(T.RHS.LHS, T.LHS), OpAdd!(OpDiv!(Value!(1), T.LHS), V.LHS)), T.RHS.RHS)) TypeOfAdd;
137     else
138     static if( /+ (+ (*> K (+> H X)) (*> E X)) -> (/> (+ (/ 1 K) (/ 1 E)) (+> (/ (/ H K) (+ (/ 1 K) (/ 1 E))) X)) +/
139         is(T.Op == MulA) && is(T.LHS.DefP == Defined) && is(T.RHS.Op == AddA) && is(T.RHS.LHS.DefP == Defined) && is(T.RHS.RHS.DefP == UnDefined) &&
140         is(V.Op == MulA) && is(V.LHS.DefP == Defined) && is(V.RHS.DefP == UnDefined)
141          && is(T.RHS.RHS == V.RHS)
142         )
143         alias OpDivA!(OpAdd!(OpDiv!(Value!(1), T.LHS), OpDiv!(Value!(1), V.LHS)), OpAddA!(OpDiv!(OpDiv!(T.RHS.LHS, T.LHS), OpAdd!(OpDiv!(Value!(1), T.LHS), OpDiv!(Value!(1), V.LHS))), T.RHS.RHS)) TypeOfAdd;
144     else
145     static if( /+ (+ (*> A (+> B X)) C) -> (*> A (+> (- B (* C A)) X)) +/
146         is(T.Op == MulA) && is(T.LHS.DefP == Defined) && is(T.RHS.Op == AddA) && is(T.RHS.LHS.DefP == Defined) && is(T.RHS.RHS.DefP == UnDefined) &&
147         is(V.DefP == Defined)
148          /+ no repeats +/
149         )
150         alias OpMulA!(T.LHS, OpAddA!(OpSub!(T.RHS.LHS, OpMul!(V, T.LHS)), T.RHS.RHS)) TypeOfAdd;
151     else
152     static if( /+ (+ (*> K (+> H X)) X) -> (/> (+ (/ 1 K) 1) (+> (/ (/ H K) (+ (/ 1 K) 1)) X)) +/
153         is(T.Op == MulA) && is(T.LHS.DefP == Defined) && is(T.RHS.Op == AddA) && is(T.RHS.LHS.DefP == Defined) && is(T.RHS.RHS.DefP == UnDefined) &&
154         is(V.DefP == UnDefined)
155          && is(T.RHS.RHS == V)
156         )
157         alias OpDivA!(OpAdd!(OpDiv!(Value!(1), T.LHS), Value!(1)), OpAddA!(OpDiv!(OpDiv!(T.RHS.LHS, T.LHS), OpAdd!(OpDiv!(Value!(1), T.LHS), Value!(1))), T.RHS.RHS)) TypeOfAdd;
158     else
159     static if( /+ (+ (/R> H X) (/R> E X)) -> (/R> (+ H E) X) +/
160         is(T.Op == DivAR) && is(T.LHS.DefP == Defined) && is(T.RHS.DefP == UnDefined) &&
161         is(V.Op == DivAR) && is(V.LHS.DefP == Defined) && is(V.RHS.DefP == UnDefined)
162          && is(T.RHS == V.RHS)
163         )
164         alias OpDivAR!(OpAdd!(T.LHS, V.LHS), T.RHS) TypeOfAdd;
165     else
166     static if( /+ (+ (/> H X) (/> F (-> E X))) -> (/> (+ H F) (-> (/ (* E F) (+ H F)) X)) +/
167         is(T.Op == DivA) && is(T.LHS.DefP == Defined) && is(T.RHS.DefP == UnDefined) &&
168         is(V.Op == DivA) && is(V.LHS.DefP == Defined) && is(V.RHS.Op == SubA) && is(V.RHS.LHS.DefP == Defined) && is(V.RHS.RHS.DefP == UnDefined)
169          && is(T.RHS == V.RHS.RHS)
170         )
171         alias OpDivA!(OpAdd!(T.LHS, V.LHS), OpSubA!(OpDiv!(OpMul!(V.RHS.LHS, V.LHS), OpAdd!(T.LHS, V.LHS)), T.RHS)) TypeOfAdd;
172     else
173     static if( /+ (+ (/> H X) (/> F (+> E X))) -> (/> (+ H F) (+> (/ (* E F) (+ H F)) X)) +/
174         is(T.Op == DivA) && is(T.LHS.DefP == Defined) && is(T.RHS.DefP == UnDefined) &&
175         is(V.Op == DivA) && is(V.LHS.DefP == Defined) && is(V.RHS.Op == AddA) && is(V.RHS.LHS.DefP == Defined) && is(V.RHS.RHS.DefP == UnDefined)
176          && is(T.RHS == V.RHS.RHS)
177         )
178         alias OpDivA!(OpAdd!(T.LHS, V.LHS), OpAddA!(OpDiv!(OpMul!(V.RHS.LHS, V.LHS), OpAdd!(T.LHS, V.LHS)), T.RHS)) TypeOfAdd;
179     else
180     static if( /+ (+ (/> H X) (*> F (-> E X))) -> (/> (+ H (/ 1 F)) (-> (/ (/ E F) (+ H (/ 1 F))) X)) +/
181         is(T.Op == DivA) && is(T.LHS.DefP == Defined) && is(