00001 #include <fstream> 00002 #include <iostream> 00003 #include <iterator> 00004 #include <list> 00005 #include <vector> 00006 00007 #include "../bb/stats.hpp" 00008 tm_stats g_counter, c_counter; 00009 00010 #include "../bb/infinite_tape.hpp" 00011 #include "../bb/long_int.hpp" 00012 #include "../bb/state.hpp" 00013 #include "../bb/turing_machine.hpp" 00014 #include "../bb/non_halt_detection.hpp" 00015 #include "../bb/non_halt_data_structures.hpp" 00016 #include "../bb/machine_storage.hpp" 00017 #include "../bb/watch.hpp" 00018 00019 int main() 00020 { 00021 /*turing_machine<unsigned short> machine(5,0); 00022 00023 machine.set_halt_state(4); 00024 00025 machine.add_write_transition(0,0,1,1); 00026 machine.add_move_transition(0,1, turing_machine<unsigned short>::left, 1); 00027 machine.add_move_transition(1,0, turing_machine<unsigned short>::left, 1); 00028 machine.add_move_transition(1,1, turing_machine<unsigned short>::right, 2); 00029 machine.add_move_transition(2,0, turing_machine<unsigned short>::right, 3); 00030 machine.add_write_transition(3,0,1,0); 00031 machine.add_write_transition(3,1,0,2); 00032 00033 if(counter(machine, 5000)) 00034 std::cout << "yes" << std::endl << std::endl; 00035 00036 turing_machine<unsigned short> machine2(6,0); 00037 00038 machine2.set_halt_state(5); 00039 00040 machine2.add_write_transition(0,0,1,1); 00041 machine2.add_write_transition(1,0,1,2); 00042 machine2.add_move_transition(1,1, turing_machine<unsigned short>::right, 1); 00043 machine2.add_move_transition(2,0, turing_machine<unsigned short>::left, 4); 00044 machine2.add_move_transition(2,1, turing_machine<unsigned short>::left, 3); 00045 machine2.add_write_transition(3,1,0,2); 00046 machine2.add_move_transition(4,0, turing_machine<unsigned short>::right, 0); 00047 machine2.add_write_transition(4,1,0,2); 00048 00049 if(counter(machine2, 5000)) 00050 std::cout << "yes" << std::endl << std::endl; 00051 00052 //machine2.printTMO(std::cout); 00053 //machine2.reverseMachine().printTMO(std::cout); 00054 00055 turing_machine<unsigned short> machine3(6,0); 00056 00057 machine3.set_halt_state(5); 00058 00059 machine3.add_write_transition(0,0,1,0); 00060 machine3.add_move_transition(0,1, turing_machine<unsigned short>::right,1); 00061 machine3.add_move_transition(1,0, turing_machine<unsigned short>::right, 2); 00062 machine3.add_write_transition(2,0,1,3); 00063 machine3.add_write_transition(2,1,0,1); 00064 machine3.add_move_transition(3,0, turing_machine<unsigned short>::left, 4); 00065 machine3.add_move_transition(3,1, turing_machine<unsigned short>::left, 3); 00066 machine3.add_move_transition(4,0, turing_machine<unsigned short>::left, 4); 00067 machine3.add_move_transition(4,1, turing_machine<unsigned short>::right, 1); 00068 00069 if(counter(machine3, 5000)) 00070 std::cout << "yes" << std::endl << std::endl; 00071 00072 turing_machine<unsigned short> machine4(6,0); 00073 00074 machine4.set_halt_state(5); 00075 00076 machine4.add_write_transition(0,0,1,0); 00077 machine4.add_move_transition(0,1, turing_machine<unsigned short>::right,1); 00078 machine4.add_move_transition(1,0, turing_machine<unsigned short>::left, 2); 00079 machine4.add_write_transition(1,1,0,3); 00080 machine4.add_write_transition(2,0,1,3); 00081 machine4.add_move_transition(2,1, turing_machine<unsigned short>::left ,2); 00082 machine4.add_move_transition(3,0, turing_machine<unsigned short>::right, 0); 00083 machine4.add_move_transition(3,1, turing_machine<unsigned short>::right, 4); 00084 machine4.add_move_transition(4,1, turing_machine<unsigned short>::right, 1); 00085 00086 if(alternateChristmasTree(machine4, 12000)) 00087 std::cout << "machine4 yes" << std::endl << std::endl;*/ 00088 00089 /*turing_machine<unsigned short> machine5(6,0); 00090 00091 machine5.set_halt_state(5); 00092 00093 machine5.add_write_transition(0,0,1,1); 00094 machine5.add_move_transition(0,1, turing_machine<unsigned short>::right,0); 00095 machine5.add_move_transition(1,0, turing_machine<unsigned short>::right, 4); 00096 machine5.add_move_transition(1,1, turing_machine<unsigned short>::right, 2); 00097 machine5.add_write_transition(2,0,1,3); 00098 machine5.add_move_transition(3,0, turing_machine<unsigned short>::left, 1); 00099 machine5.add_move_transition(3,1, turing_machine<unsigned short>::left, 4); 00100 machine5.add_move_transition(4,0, turing_machine<unsigned short>::right, 0); 00101 machine5.add_write_transition(4,1,0,3); 00102 00103 if(leaningChristmasTree(machine5, 5000)) 00104 std::cout << "machine5 yes" << std::endl << std::endl;*/ 00105 00106 /*turing_machine<unsigned short> machine6(6,0); 00107 00108 machine6.set_halt_state(5); 00109 00110 machine6.add_write_transition(0,0,1,1); 00111 machine6.add_move_transition(0,1, turing_machine<unsigned short>::left,0); 00112 machine6.add_move_transition(1,0, turing_machine<unsigned short>::right, 4); 00113 machine6.add_move_transition(1,1, turing_machine<unsigned short>::right, 2); 00114 machine6.add_move_transition(2,0, turing_machine<unsigned short>::left, 2); 00115 machine6.add_move_transition(2,1, turing_machine<unsigned short>::right, 3); 00116 machine6.add_write_transition(3,0,1,0); 00117 machine6.add_move_transition(3,1, turing_machine<unsigned short>::right, 1); 00118 machine6.add_move_transition(4,0, turing_machine<unsigned short>::left, 3); 00119 00120 if(tripleSweepChristmasTree(machine6, 20000)) 00121 std::cout << "machine6 yes" << std::endl << std::endl;*/ 00122 00123 /*turing_machine<unsigned short> machine7(6,0); 00124 00125 machine7.set_halt_state(5); 00126 00127 machine7.add_write_transition(0,0,1,1); 00128 machine7.add_move_transition(0,1, turing_machine<unsigned short>::left,1); 00129 machine7.add_write_transition(1,0,1,0); 00130 machine7.add_move_transition(1,1, turing_machine<unsigned short>::right, 2); 00131 machine7.add_move_transition(2,0, turing_machine<unsigned short>::right, 3); 00132 machine7.add_move_transition(2,1, turing_machine<unsigned short>::right, 4); 00133 machine7.add_move_transition(3,0, turing_machine<unsigned short>::right, 4); 00134 machine7.add_move_transition(4,0, turing_machine<unsigned short>::right, 1); 00135 machine7.add_write_transition(4,1,0,3); 00136 00137 if(leaningChristmasTree(machine7, 20000)) 00138 std::cout << "machine7 yes" << std::endl << std::endl;*/ 00139 00140 /*turing_machine<unsigned short> machine8(6,0); 00141 00142 machine8.set_halt_state(5); 00143 00144 machine8.add_write_transition(0,0,1,0); 00145 machine8.add_move_transition(0,1, turing_machine<unsigned short>::right,1); 00146 machine8.add_write_transition(1,0,1,2); 00147 machine8.add_move_transition(1,1, turing_machine<unsigned short>::right, 4); 00148 machine8.add_move_transition(2,0, turing_machine<unsigned short>::right, 0); 00149 machine8.add_move_transition(2,1, turing_machine<unsigned short>::left, 3); 00150 machine8.add_move_transition(3,0, turing_machine<unsigned short>::left, 2); 00151 machine8.add_write_transition(3,1,0,4); 00152 machine8.add_move_transition(4,0, turing_machine<unsigned short>::right, 1); 00153 00154 if(alternateChristmasTree(machine8, 100000)) 00155 std::cout << "machine8 yes" << std::endl << std::endl;*/ 00156 00157 /*turing_machine<unsigned short> machine8(6,0); 00158 00159 machine8.set_halt_state(5); 00160 00161 machine8.add_write_transition(0,0,1,1); 00162 machine8.add_move_transition(0,1, turing_machine<unsigned short>::right,1); 00163 machine8.add_move_transition(1,1, turing_machine<unsigned short>::right, 2); 00164 machine8.add_write_transition(2,0,1,3); 00165 machine8.add_move_transition(2,1, turing_machine<unsigned short>::right, 0); 00166 machine8.add_move_transition(3,0, turing_machine<unsigned short>::right, 0); 00167 machine8.add_move_transition(3,1, turing_machine<unsigned short>::left, 4); 00168 machine8.add_move_transition(4,0, turing_machine<unsigned short>::right, 0); 00169 machine8.add_move_transition(4,1, turing_machine<unsigned short>::left, 3); 00170 00171 if(alternateChristmasTree(machine8, 100000)) 00172 std::cout << "machine8 yes" << std::endl << std::endl;*/ 00173 00174 /*turing_machine<unsigned short> machine8(6,0); 00175 00176 machine8.set_halt_state(5); 00177 00178 machine8.add_write_transition(0,0,1,1); 00179 machine8.add_move_transition(0,1, turing_machine<unsigned short>::left,1); 00180 machine8.add_move_transition(1,0, turing_machine<unsigned short>::left,1); 00181 machine8.add_move_transition(1,1, turing_machine<unsigned short>::right, 2); 00182 machine8.add_move_transition(2,0, turing_machine<unsigned short>::right, 3); 00183 machine8.add_move_transition(2,1, turing_machine<unsigned short>::left, 4); 00184 machine8.add_write_transition(3,0,1,2); 00185 machine8.add_write_transition(3,1,0,2); 00186 machine8.add_move_transition(4,0, turing_machine<unsigned short>::right, 0); 00187 00188 if(counter(machine8, 100000)) 00189 std::cout << "machine8 yes" << std::endl << std::endl; 00190 00191 turing_machine<unsigned short> machine9(6,0); 00192 00193 machine9.set_halt_state(5); 00194 00195 machine9.add_write_transition(0,0,1,1); 00196 machine9.add_move_transition(0,1, turing_machine<unsigned short>::left,1); 00197 machine9.add_move_transition(1,0, turing_machine<unsigned short>::left,1); 00198 machine9.add_move_transition(1,1, turing_machine<unsigned short>::right, 2); 00199 machine9.add_move_transition(2,0, turing_machine<unsigned short>::right, 3); 00200 machine9.add_move_transition(2,1, turing_machine<unsigned short>::left, 0); 00201 machine9.add_move_transition(3,0, turing_machine<unsigned short>::right, 4); 00202 machine9.add_write_transition(3,1,0,2); 00203 machine9.add_write_transition(4,0,1,2); 00204 00205 if(counter(machine9, 100000)) 00206 std::cout << "machine9 yes" << std::endl << std::endl; 00207 00208 turing_machine<unsigned short> machine10(6,0); 00209 00210 machine10.set_halt_state(5); 00211 00212 machine10.add_write_transition(0,0,1,1); 00213 machine10.add_move_transition(0,1, turing_machine<unsigned short>::left,4); 00214 machine10.add_move_transition(1,0, turing_machine<unsigned short>::right,2); 00215 machine10.add_move_transition(1,1, turing_machine<unsigned short>::right, 2); 00216 machine10.add_move_transition(2,0, turing_machine<unsigned short>::right, 3); 00217 machine10.add_move_transition(3,0, turing_machine<unsigned short>::left, 4); 00218 machine10.add_write_transition(3,1,0,1); 00219 machine10.add_move_transition(4,0, turing_machine<unsigned short>::left, 0); 00220 00221 if(counter(machine10, 100000)) 00222 std::cout << "machine10 yes" << std::endl << std::endl; 00223 00224 turing_machine<unsigned short> machine10(6,0); 00225 00226 machine10.set_halt_state(5); 00227 00228 machine10.add_write_transition(0,0,1,1); 00229 machine10.add_move_transition(0,1, turing_machine<unsigned short>::right,3); 00230 machine10.add_move_transition(1,0, turing_machine<unsigned short>::right,2); 00231 machine10.add_move_transition(1,1, turing_machine<unsigned short>::right, 2); 00232 machine10.add_move_transition(2,0, turing_machine<unsigned short>::right, 3); 00233 machine10.add_move_transition(3,0, turing_machine<unsigned short>::left, 4); 00234 machine10.add_write_transition(3,1,0,1); 00235 machine10.add_move_transition(4,0, turing_machine<unsigned short>::left, 0); 00236 machine10.add_move_transition(4,1, turing_machine<unsigned short>::left, 4); 00237 00238 if(counter(machine10, 100000)) 00239 std::cout << "machine10 yes" << std::endl << std::endl; 00240 00241 turing_machine<unsigned short> machine10(6,0); 00242 00243 machine10.set_halt_state(5); 00244 00245 machine10.add_write_transition(0,0,1,1); 00246 machine10.add_move_transition(0,1, turing_machine<unsigned short>::left,2); 00247 machine10.add_move_transition(1,0, turing_machine<unsigned short>::right,3); 00248 machine10.add_move_transition(1,1, turing_machine<unsigned short>::right, 2); 00249 machine10.add_move_transition(2,0, turing_machine<unsigned short>::left, 2); 00250 machine10.add_move_transition(2,1, turing_machine<unsigned short>::right, 1); 00251 machine10.add_move_transition(3,0, turing_machine<unsigned short>::right, 4); 00252 machine10.add_write_transition(4,0,1,0); 00253 machine10.add_write_transition(4,1,0,1); 00254 00255 if(counter(machine10, 50000)) 00256 std::cout << "machine10 yes" << std::endl << std::endl; 00257 00258 /*turing_machine<unsigned short> machine10(6,0); 00259 00260 machine10.set_halt_state(5); 00261 00262 machine10.add_write_transition(0,0,1,1); 00263 machine10.add_move_transition(0,1, turing_machine<unsigned short>::left,4); 00264 machine10.add_move_transition(1,0, turing_machine<unsigned short>::left,4); 00265 machine10.add_move_transition(1,1, turing_machine<unsigned short>::right, 2); 00266 machine10.add_move_transition(2,0, turing_machine<unsigned short>::left, 3); 00267 machine10.add_write_transition(3,0,1,0); 00268 machine10.add_move_transition(3,1, turing_machine<unsigned short>::right, 3); 00269 machine10.add_move_transition(4,0, turing_machine<unsigned short>::right, 3); 00270 machine10.add_write_transition(4,1,0,1); 00271 00272 if(counter(machine10, 50000)) 00273 std::cout << "machine10 yes" << std::endl << std::endl; 00274 00275 turing_machine<unsigned short> machine10(6,0); 00276 00277 machine10.set_halt_state(5); 00278 00279 machine10.add_write_transition(0,0,1,1); 00280 machine10.add_move_transition(1,1, turing_machine<unsigned short>::right,2); 00281 machine10.add_move_transition(2,0, turing_machine<unsigned short>::right,3); 00282 machine10.add_write_transition(2,1,0,4); 00283 machine10.add_write_transition(3,0,1,4); 00284 machine10.add_move_transition(3,1, turing_machine<unsigned short>::right, 1); 00285 machine10.add_move_transition(4,0, turing_machine<unsigned short>::right, 2); 00286 machine10.add_move_transition(4,1, turing_machine<unsigned short>::left, 3); 00287 00288 if(leaningChristmasTree(machine10, 50000)) 00289 std::cout << "machine10 yes" << std::endl << std::endl; 00290 00291 turing_machine<unsigned short> machine10(6,0); 00292 00293 machine10.set_halt_state(5); 00294 00295 machine10.add_write_transition(0,0,1,1); 00296 machine10.add_write_transition(0,1,0,2); 00297 machine10.add_move_transition(1,1, turing_machine<unsigned short>::right,2); 00298 machine10.add_move_transition(2,0, turing_machine<unsigned short>::right,3); 00299 machine10.add_move_transition(2,1, turing_machine<unsigned short>::left,3); 00300 machine10.add_write_transition(3,0,1,4); 00301 machine10.add_move_transition(3,1, turing_machine<unsigned short>::right, 1); 00302 machine10.add_move_transition(4,0, turing_machine<unsigned short>::left, 0); 00303 machine10.add_move_transition(4,1, turing_machine<unsigned short>::left, 4); 00304 00305 if(leaningChristmasTree(machine10, 50000)) 00306 std::cout << "machine10 yes" << std::endl << std::endl; 00307 00308 turing_machine<unsigned short> machine8(6,0); 00309 00310 machine8.set_halt_state(5); 00311 00312 machine8.add_write_transition(0,0,1,0); 00313 machine8.add_move_transition(0,1, turing_machine<unsigned short>::right,1); 00314 machine8.add_write_transition(1,0,1,2); 00315 machine8.add_move_transition(1,1, turing_machine<unsigned short>::right, 4); 00316 machine8.add_move_transition(2,0, turing_machine<unsigned short>::right, 0); 00317 machine8.add_move_transition(2,1, turing_machine<unsigned short>::left, 3); 00318 machine8.add_move_transition(3,0, turing_machine<unsigned short>::left, 2); 00319 machine8.add_write_transition(3,1,0,4); 00320 machine8.add_move_transition(4,0, turing_machine<unsigned short>::right, 1); 00321 00322 if(multiSweepChristmasTree(machine8, 2, 100000)) 00323 //if(alternateChristmasTree(machine8, 100000)) 00324 std::cout << "machine8 yes" << std::endl << std::endl; 00325 00326 turing_machine<unsigned short> machine10(6,0); 00327 00328 machine10.set_halt_state(5); 00329 00330 machine10.add_write_transition(0,0,1,1); 00331 machine10.add_move_transition(0,1, turing_machine<unsigned short>::left,1); 00332 machine10.add_move_transition(1,0, turing_machine<unsigned short>::left,1); 00333 machine10.add_move_transition(1,1, turing_machine<unsigned short>::right, 2); 00334 machine10.add_move_transition(2,0, turing_machine<unsigned short>::right, 3); 00335 machine10.add_write_transition(3,0,1,0); 00336 machine10.add_move_transition(3,1, turing_machine<unsigned short>::left, 4); 00337 machine10.add_move_transition(4,0, turing_machine<unsigned short>::right, 4); 00338 machine10.add_write_transition(4,1,0,2); 00339 00340 if(counter(machine10, 50000)) 00341 std::cout << "machine10 yes" << std::endl << std::endl;*/ 00342 00343 turing_machine<unsigned short> machine10(6,0); 00344 00345 machine10.set_halt_state(5); 00346 00347 machine10.add_write_transition(0,0,1,1); 00348 machine10.add_move_transition(0,1, turing_machine<unsigned short>::left,3); 00349 machine10.add_move_transition(1,1, turing_machine<unsigned short>::right, 2); 00350 machine10.add_move_transition(2,0, turing_machine<unsigned short>::left, 0); 00351 machine10.add_write_transition(2,1,0,4); 00352 machine10.add_write_transition(3,0,1,4); 00353 machine10.add_move_transition(3,1, turing_machine<unsigned short>::left, 0); 00354 machine10.add_move_transition(4,0, turing_machine<unsigned short>::right, 2); 00355 machine10.add_move_transition(4,1, turing_machine<unsigned short>::right, 1); 00356 00357 if(counter(machine10, 50000)) 00358 std::cout << "machine10 yes" << std::endl << std::endl; 00359 00360 return 0; 00361 }