10.5281/zenodo.2525351
https://zenodo.org/records/2525351
oai:zenodo.org:2525351
Divasón, Jose
Jose
Divasón
0000-0002-5173-128X
University of La Rioja, Spain
Joosten, Sebastiaan J. C.
Sebastiaan J. C.
Joosten
0000-0002-6590-6220
University of Innsbruck, Austria
Thiemann, René
René
Thiemann
0000-0002-0323-8829
University of Innsbruck, Austria
Yamada, Akihisa
Akihisa
Yamada
0000-0001-8872-2240
University of Innsbruck, Austria
A Verified Implementation of the Berlekamp–Zassenhaus Factorization Algorithm, supporting material
Zenodo
2018
Factor Bounds
Hensel Lifting
Isabelle/HOL
Local Type Definitions
Polynomial Factorization
Theorem Proving
2018-12-23
10.5281/zenodo.2525350
Creative Commons Attribution 4.0 International
This is the supporting material for the paper A Verified Implementation of the Berlekamp–Zassenhaus Factorization Algorithm by Jose Divasón, Sebastiaan Joosten, René Thiemann and Akihisa Yamada.
Abstract
We formalize the Berlekamp--Zassenhaus algorithm for factoring square-free integer polynomials in Isabelle/HOL. We further adapt an existing formalization of Yun's square-free factorization algorithm to integer polynomials, and thus provide an efficient and certified factorization algorithm for arbitrary univariate polynomials.
The algorithm first performs factorization in the prime field GF(p) and then performs computations in the ring of integers modulo pk, where both p and k are determined at runtime. Since a natural modeling of these structures via dependent types is not possible in Isabelle/HOL, we formalize the whole algorithm using locales and local type definitions.
Through experiments we verify that our algorithm factors polynomials of degree up to 500 within seconds.
Formalization
The formalization is part of the Archive of Formal Proofs for Isabelle 2018 within the entry The Factorization Algorithm of Berlekamp and Zassenhaus.
The following list documents the relationship between the paper and the formalization:
Section 1 Introduction
Theorem 1 (page 2): factorize_int_poly
Section 3 Formalizing Prime Fields
Lemma 1 (page 6): coprime_pderiv_imp_square_free
Lemma 2 (page 8): square_free_mod_imp_square_free
Lemma 3 (page 8): times_MP_Rel
Lemma 4 (page 8): degree_mult_eq
Lemma 5 (page 8): poly_mod_prime_type.degree_m_mult_eq
Lemma 6 (page 8): poly_mod_prime.degree_m_mult_eq
Lemma 7 (page 10): gcd_eucl_i
Lemma 8 (page 10): finite_field_ops_integer
Lemma 9 (page 11): finite_field_ops32
Lemma 10 (page 11): finite_field_ops64
Lemma 11 (page 11): euclidean_ring_ops_poly
Lemma 12 (page 11): poly_rel_gcd
Lemma 13 (page 12): prime_field_gen.square_free_impl(1)
Lemma 14 (page 12): poly_mod_prime.square_free_impl(1)
Section 4 Square-Free Factorization of Integer Polynomials
Theorem 2 (page 13): square_free_factorization_int
Section 5 Square-Free Polynomials in
Lemma 15 (page 14): suitable_prime_bz
Section 6 Berlekamp's Algorithm
Theorem 3 (page 18): berlekamp_monic_factorization
Lemma 17 (page 19): degree_divisor1
Lemma 17 (page 19): degree_divisor2
Theorem 4 (page 20): finite_field_factorization
Theorem 5 (page 22): finite_field_factorization_int
Section 7 Mignotte's Factor Bound
Lemma 18 (page 22): factor_bound
Lemma 19 (page 24): log_ceiling
Section 8 Hensel Lifting
Lemma 21 (page 27): hensel_1
Lemma 22 (page 27): unique_hensel_binary
Lemma 23 (page 29): hensel_lifting_unique
Section 9 Reconstructing True Factors
Theorem 6 (page 31): zassenhaus_reconstruction
Section 10 Assembled Factorization Algorithm
Theorem 7 (page 32): berlekamp_zassenhaus_factorization_irreducible
Theorem 8 (page 32): internal_int_poly_factorization_mem
Theorem 8 (page 32): internal_int_poly_factorization
Experiments
One can rerun the experiments as follows:
Download and extract the attached file.
Inspect the path of the constant binary within the file experiments/Code_Old/Mathematica.hs whether it matches your Mathematica installation. Otherwise you can deactivate the Mathematica experiments by disabling the external factorization in experiments/Experiments/run_experiment.sh.
Compile experiments/Code_Old/Main and experiments/Code_New/Main with -O2
Invoke ./experiments/Experiments/run_experiments.sh
To turn the raw data into .csv-files and generated the Mathematica-graph, change to the experiments/Experiments directory and invoke ./time_tables_to_mathematica.sh
To get the pdf-file, paste the output of the previous command into the first line of the Mathematica-file journal_plot.nb
One can also run the experiments disabling some of the optimizations by means of the files Code_New_No_{...}/Main.hs
In addition, the files Comparison.xlsx, Profiling.xlsx and Optimization_Table.xlsx contain the exact time for factoring each polynomial, the profiling results and a table comparing the results of each improvement respectively. The Isabelle file Generate_Code.thy also generates the Haskell sources.
The following table contains all the experiments of Figure 1 in the article.
Polynomial Mathematica Old New
poly_100.poly 0.478s 0.194s 0.085s
poly_101.poly 0.449s 0.209s 0.095s
poly_102.poly 0.475s 0.247s 0.145s
poly_103.poly 0.491s 0.171s 0.109s
poly_104.poly 0.479s 0.131s 0.096s
poly_105.poly 0.492s 0.276s 0.140s
poly_106.poly 0.458s 0.148s 0.097s
poly_107.poly 0.463s 0.180s 0.107s
poly_108.poly 0.472s 0.216s 0.122s
poly_109.poly 0.477s 0.154s 0.103s
poly_110.poly 0.457s 0.180s 0.119s
poly_111.poly 0.465s 0.218s 0.122s
poly_112.poly 0.487s 0.217s 0.132s
poly_113.poly 0.471s 0.130s 0.084s
poly_114.poly 0.465s 0.269s 0.120s
poly_115.poly 0.464s 0.243s 0.105s
poly_116.poly 0.457s 0.269s 0.122s
poly_117.poly 0.476s 0.333s 0.135s
poly_118.poly 0.498s 0.220s 0.082s
poly_119.poly 0.462s 0.228s 0.134s
poly_120.poly 0.449s 0.318s 0.109s
poly_121.poly 0.485s 0.271s 0.181s
poly_122.poly 0.483s 0.229s 0.108s
poly_123.poly 0.465s 0.254s 0.147s
poly_124.poly 0.495s 0.278s 0.158s
poly_125.poly 0.460s 0.378s 0.157s
poly_126.poly 0.480s 0.306s 0.168s
poly_127.poly 0.476s 0.328s 0.198s
poly_128.poly 0.492s 0.272s 0.144s
poly_129.poly 0.464s 0.421s 0.226s
poly_130.poly 0.483s 0.267s 0.132s
poly_131.poly 0.497s 0.329s 0.158s
poly_132.poly 0.471s 0.482s 0.241s
poly_133.poly 0.493s 0.448s 0.294s
poly_134.poly 0.474s 0.317s 0.172s
poly_135.poly 0.507s 0.408s 0.170s
poly_136.poly 0.502s 0.429s 0.242s
poly_137.poly 0.499s 0.279s 0.171s
poly_138.poly 0.480s 0.326s 0.195s
poly_139.poly 0.499s 0.327s 0.157s
poly_140.poly 0.481s 0.390s 0.245s
poly_141.poly 0.516s 0.412s 0.249s
poly_142.poly 0.496s 0.295s 0.192s
poly_143.poly 0.500s 0.280s 0.185s
poly_144.poly 0.525s 0.513s 0.268s
poly_145.poly 0.518s 0.424s 0.257s
poly_146.poly 0.492s 0.478s 0.209s
poly_147.poly 0.474s 0.595s 0.296s
poly_148.poly 0.483s 0.379s 0.209s
poly_149.poly 0.483s 0.542s 0.296s
poly_150.poly 0.493s 0.224s 0.131s
poly_151.poly 0.484s 0.533s 0.232s
poly_152.poly 0.537s 0.473s 0.183s
poly_153.poly 0.513s 0.500s 0.301s
poly_154.poly 0.487s 0.357s 0.183s
poly_155.poly 0.544s 0.659s 0.294s
poly_156.poly 0.497s 0.627s 0.221s
poly_157.poly 0.491s 0.706s 0.390s
poly_158.poly 0.538s 0.473s 0.208s
poly_159.poly 0.487s 0.920s 0.470s
poly_160.poly 0.544s 0.665s 0.249s
poly_161.poly 0.515s 0.605s 0.207s
poly_162.poly 0.509s 1.037s 0.384s
poly_163.poly 0.493s 0.622s 0.294s
poly_164.poly 0.498s 0.441s 0.269s
poly_165.poly 0.487s 0.889s 0.432s
poly_166.poly 0.561s 0.578s 0.299s
poly_167.poly 0.531s 0.905s 0.236s
poly_168.poly 0.504s 0.834s 0.318s
poly_169.poly 0.533s 1.177s 0.347s
poly_170.poly 0.534s 0.743s 0.271s
poly_171.poly 0.509s 0.718s 0.393s
poly_172.poly 0.590s 0.703s 0.342s
poly_173.poly 0.488s 0.828s 0.259s
poly_174.poly 0.526s 0.711s 0.346s
poly_175.poly 0.522s 0.722s 0.428s
poly_176.poly 0.559s 0.722s 0.295s
poly_177.poly 0.521s 1.151s 0.320s
poly_178.poly 0.504s 0.816s 0.333s
poly_179.poly 0.535s 1.206s 0.629s
poly_180.poly 0.495s 0.707s 0.293s
poly_181.poly 0.478s 0.948s 0.331s
poly_182.poly 0.537s 1.259s 0.435s
poly_183.poly 0.519s 0.863s 0.390s
poly_184.poly 0.550s 1.716s 0.669s
poly_185.poly 0.507s 1.166s 0.320s
poly_186.poly 0.556s 1.187s 0.508s
poly_187.poly 0.547s 1.070s 0.654s
poly_188.poly 0.529s 0.979s 0.354s
poly_189.poly 1.232s 1.565s 0.578s
poly_190.poly 0.578s 1.383s 0.407s
poly_191.poly 0.521s 1.093s 0.417s
poly_192.poly 0.510s 1.031s 0.393s
poly_193.poly 0.623s 0.886s 0.524s
poly_194.poly 0.548s 1.434s 0.562s
poly_195.poly 0.525s 1.580s 0.336s
poly_196.poly 0.567s 1.640s 0.647s
poly_197.poly 0.543s 1.223s 0.593s
poly_198.poly 0.569s 1.351s 0.732s
poly_199.poly 0.547s 1.096s 0.469s
poly_200.poly 0.507s 1.449s 0.729s
poly_201.poly 0.643s 1.653s 0.594s
poly_202.poly 0.550s 1.233s 0.361s
poly_203.poly 0.612s 1.274s 0.651s
poly_204.poly 0.538s 1.064s 0.595s
poly_205.poly 0.628s 1.539s 0.767s
poly_206.poly 0.587s 1.217s 0.486s
poly_207.poly 0.496s 1.833s 0.533s
poly_208.poly 0.565s 1.547s 0.370s
poly_209.poly 0.557s 1.796s 0.805s
poly_210.poly 0.507s 1.988s 0.504s
poly_211.poly 0.710s 1.440s 0.661s
poly_212.poly 0.567s 1.301s 0.443s
poly_213.poly 0.535s 1.277s 0.463s
poly_214.poly 0.562s 1.963s 0.769s
poly_215.poly 0.607s 1.809s 0.695s
poly_216.poly 0.556s 1.627s 0.835s
poly_217.poly 0.583s 2.044s 0.837s
poly_218.poly 0.622s 2.638s 0.571s
poly_219.poly 0.618s 1.851s 0.755s
poly_220.poly 0.549s 2.227s 0.605s
poly_221.poly 0.562s 1.441s 0.725s
poly_222.poly 0.519s 1.129s 0.595s
poly_223.poly 0.538s 2.158s 0.863s
poly_224.poly 0.542s 1.832s 0.646s
poly_225.poly 0.533s 3.330s 0.928s
poly_226.poly 0.635s 1.760s 0.953s
poly_227.poly 0.560s 1.580s 0.460s
poly_228.poly 0.609s 2.838s 1.023s
poly_229.poly 0.636s 1.961s 0.860s
poly_230.poly 0.643s 1.743s 0.459s
poly_231.poly 0.756s 2.141s 0.722s
poly_232.poly 0.553s 2.869s 1.206s
poly_233.poly 0.627s 1.933s 0.755s
poly_234.poly 0.567s 3.316s 0.435s
poly_235.poly 0.633s 2.612s 0.758s
poly_236.poly 0.542s 1.896s 0.490s
poly_237.poly 0.693s 3.163s 0.729s
poly_238.poly 0.647s 1.464s 0.699s
poly_239.poly 0.555s 1.564s 0.658s
poly_240.poly 0.567s 2.361s 0.793s
poly_241.poly 0.640s 3.208s 0.607s
poly_242.poly 0.780s 2.006s 0.876s
poly_243.poly 0.556s 2.465s 0.973s
poly_244.poly 0.694s 2.305s 1.191s
poly_245.poly 0.588s 2.651s 0.525s
poly_246.poly 0.588s 3.791s 0.973s
poly_247.poly 0.684s 3.583s 0.820s
poly_248.poly 0.626s 3.027s 1.153s
poly_249.poly 0.540s 1.997s 0.647s
poly_250.poly 0.614s 2.558s 1.139s
poly_251.poly 0.663s 2.376s 1.259s
poly_252.poly 0.655s 2.551s 0.952s
poly_253.poly 0.685s 3.436s 0.999s
poly_254.poly 0.727s 3.217s 1.133s
poly_255.poly 0.831s 2.706s 0.923s
poly_256.poly 0.730s 3.011s 1.385s
poly_257.poly 0.605s 2.808s 1.121s
poly_258.poly 0.609s 2.056s 0.825s
poly_259.poly 0.740s 3.579s 1.263s
poly_260.poly 0.655s 3.068s 1.411s
poly_261.poly 0.647s 2.959s 1.240s
poly_262.poly 0.574s 3.489s 1.158s
poly_263.poly 0.757s 3.162s 1.207s
poly_264.poly 0.710s 3.118s 1.047s
poly_265.poly 0.728s 3.967s 1.332s
poly_266.poly 0.765s 3.685s 1.115s
poly_267.poly 0.592s 4.304s 1.330s
poly_268.poly 0.717s 3.360s 1.578s
poly_269.poly 0.885s 4.903s 0.857s
poly_270.poly 0.953s 3.333s 1.233s
poly_271.poly 0.817s 3.409s 0.753s
poly_272.poly 0.776s 3.498s 1.303s
poly_273.poly 0.707s 4.628s 0.852s
poly_274.poly 0.689s 5.255s 1.282s
poly_275.poly 0.892s 5.099s 0.855s
poly_276.poly 0.567s 4.737s 1.194s
poly_277.poly 0.873s 4.736s 0.962s
poly_278.poly 0.766s 3.295s 1.257s
poly_279.poly 0.969s 2.762s 0.942s
poly_280.poly 0.732s 4.787s 0.891s
poly_281.poly 0.732s 4.608s 1.302s
poly_282.poly 0.871s 5.127s 0.782s
poly_283.poly 0.738s 3.931s 1.004s
poly_284.poly 0.857s 4.326s 1.888s
poly_285.poly 0.646s 5.082s 1.506s
poly_286.poly 0.815s 4.132s 1.396s
poly_287.poly 0.965s 4.368s 1.355s
poly_288.poly 0.746s 4.417s 1.476s
poly_289.poly 0.764s 6.243s 1.312s
poly_290.poly 0.610s 3.899s 0.984s
poly_291.poly 0.680s 5.110s 0.958s
poly_292.poly 0.717s 5.487s 0.880s
poly_293.poly 0.717s 8.597s 1.738s
poly_294.poly 0.721s 6.355s 2.375s
poly_295.poly 0.987s 3.809s 1.191s
poly_296.poly 0.876s 5.080s 2.065s
poly_297.poly 0.882s 5.162s 1.925s
poly_298.poly 1.053s 6.622s 1.675s
poly_299.poly 0.787s 4.366s 1.351s
poly_300.poly 0.878s 7.252s 1.340s
poly_301.poly 0.718s 5.359s 0.977s
poly_302.poly 1.076s 5.446s 1.446s
poly_303.poly 1.355s 3.074s 1.388s
poly_304.poly 0.710s 7.352s 1.100s
poly_305.poly 0.862s 5.038s 1.036s
poly_306.poly 0.640s 5.466s 2.315s
poly_307.poly 0.907s 6.191s 2.003s
poly_308.poly 0.825s 4.889s 1.787s
poly_309.poly 1.157s 4.730s 1.683s
poly_310.poly 1.048s 6.380s 1.899s
poly_311.poly 0.821s 5.340s 1.493s
poly_312.poly 0.734s 4.584s 1.257s
poly_313.poly 0.875s 5.126s 1.942s
poly_314.poly 1.152s 6.076s 1.132s
poly_315.poly 0.646s 8.902s 2.290s
poly_316.poly 0.864s 7.926s 1.816s
poly_317.poly 0.865s 5.540s 2.609s
poly_318.poly 1.217s 8.536s 2.028s
poly_319.poly 0.787s 6.662s 2.033s
poly_320.poly 1.368s 5.776s 1.548s
poly_321.poly 0.984s 8.860s 2.601s
poly_322.poly 0.869s 9.124s 1.810s
poly_323.poly 0.648s 6.936s 1.108s
poly_324.poly 0.937s 7.901s 1.841s
poly_325.poly 0.901s 6.507s 2.776s
poly_326.poly 0.733s 6.871s 1.727s
poly_327.poly 0.765s 8.104s 2.637s
poly_328.poly 0.885s 10.401s 2.218s
poly_329.poly 1.001s 4.122s 1.249s
poly_330.poly 0.785s 6.544s 1.827s
poly_331.poly 0.918s 9.594s 1.460s
poly_332.poly 0.843s 7.225s 3.023s
poly_333.poly 1.150s 11.494s 2.873s
poly_334.poly 0.950s 10.194s 2.355s
poly_335.poly 1.172s 8.722s 2.315s
poly_336.poly 1.027s 6.473s 1.449s
poly_337.poly 0.751s 11.346s 1.752s
poly_338.poly 0.813s 9.438s 1.968s
poly_339.poly 0.815s 7.378s 2.027s
poly_340.poly 0.664s 8.289s 1.205s
poly_341.poly 0.919s 6.848s 2.083s
poly_342.poly 1.027s 14.903s 1.691s
poly_343.poly 1.158s 9.495s 2.103s
poly_344.poly 0.812s 9.516s 3.305s
poly_345.poly 1.189s 5.334s 2.104s
poly_346.poly 1.014s 10.649s 3.294s
poly_347.poly 0.975s 8.088s 1.566s
poly_348.poly 0.877s 10.249s 2.408s
poly_349.poly 0.850s 13.374s 3.216s
poly_350.poly 1.246s 11.256s 2.747s
poly_351.poly 0.959s 8.027s 2.336s
poly_352.poly 1.013s 9.565s 2.848s
poly_353.poly 0.764s 9.335s 1.650s
poly_354.poly 1.242s 9.831s 2.840s
poly_355.poly 1.636s 7.602s 2.256s
poly_356.poly 1.080s 8.711s 3.033s
poly_357.poly 0.776s 10.423s 3.029s
poly_358.poly 0.909s 12.636s 3.057s
poly_359.poly 0.894s 15.462s 3.104s
poly_360.poly 1.062s 12.932s 3.219s
poly_361.poly 0.964s 15.856s 2.869s
poly_362.poly 0.863s 10.977s 4.597s
poly_363.poly 1.288s 21.610s 2.335s
poly_364.poly 0.895s 17.265s 1.675s
poly_365.poly 0.979s 9.957s 2.394s
poly_366.poly 1.727s 8.259s 3.021s
poly_367.poly 0.977s 10.959s 4.299s
poly_368.poly 1.248s 15.490s 3.341s
poly_369.poly 0.791s 12.137s 3.151s
poly_370.poly 0.754s 13.471s 1.879s
poly_371.poly 1.289s 12.679s 2.693s
poly_372.poly 0.856s 6.906s 1.488s
poly_373.poly 1.442s 9.346s 3.019s
poly_374.poly 0.961s 13.392s 3.527s
poly_375.poly 0.982s 9.665s 2.495s
poly_376.poly 1.431s 8.820s 2.613s
poly_377.poly 1.262s 10.092s 2.358s
poly_378.poly 1.067s 13.103s 4.017s
poly_379.poly 0.798s 11.407s 2.530s
poly_380.poly 1.381s 12.311s 2.954s
poly_381.poly 1.278s 8.984s 1.999s
poly_382.poly 0.895s 9.518s 2.817s
poly_383.poly 0.945s 13.615s 3.512s
poly_384.poly 1.031s 19.243s 3.481s
poly_385.poly 1.046s 13.784s 2.661s
poly_386.poly 1.275s 10.230s 3.170s
poly_387.poly 0.976s 13.687s 3.704s
poly_388.poly 0.733s 8.044s 1.772s
poly_389.poly 0.902s 9.925s 2.886s
poly_390.poly 0.766s 8.027s 1.704s
poly_391.poly 0.774s 19.267s 3.956s
poly_392.poly 1.368s 17.336s 2.238s
poly_393.poly 1.079s 11.014s 3.572s
poly_394.poly 0.971s 14.128s 4.558s
poly_395.poly 1.163s 12.663s 2.931s
poly_396.poly 0.984s 13.827s 2.365s
poly_397.poly 1.796s 14.465s 4.155s
poly_398.poly 0.899s 13.236s 1.938s
poly_399.poly 1.339s 20.634s 4.699s
poly_400.poly 1.162s 13.476s 1.849s
poly_401.poly 1.086s 8.101s 2.171s
poly_402.poly 1.891s 11.124s 3.086s
poly_403.poly 0.988s 11.010s 2.644s
poly_404.poly 1.051s 20.160s 2.425s
poly_405.poly 1.647s 23.650s 5.199s
poly_406.poly 1.036s 15.906s 4.767s
poly_407.poly 1.083s 16.742s 2.401s
poly_408.poly 1.177s 19.860s 3.804s
poly_409.poly 1.107s 12.738s 3.757s
poly_410.poly 1.193s 11.465s 3.740s
poly_411.poly 1.550s 16.718s 3.228s
poly_412.poly 1.252s 23.868s 4.908s
poly_413.poly 0.895s 14.672s 2.091s
poly_414.poly 1.146s 20.009s 4.559s
poly_415.poly 1.152s 30.237s 3.488s
poly_416.poly 1.262s 15.382s 3.950s
poly_417.poly 1.472s 17.767s 3.577s
poly_418.poly 1.928s 13.745s 2.527s
poly_419.poly 1.431s 18.499s 3.931s
poly_420.poly 1.035s 12.498s 4.095s
poly_421.poly 2.506s 20.517s 3.537s
poly_422.poly 1.489s 24.745s 4.400s
poly_423.poly 1.250s 22.582s 6.671s
poly_424.poly 0.972s 14.030s 2.653s
poly_425.poly 1.212s 18.464s 5.370s
poly_426.poly 0.962s 14.179s 2.795s
poly_427.poly 1.252s 19.630s 5.115s
poly_428.poly 1.220s 27.196s 6.014s
poly_429.poly 1.027s 19.862s 5.965s
poly_430.poly 1.201s 23.786s 5.561s
poly_431.poly 1.734s 18.729s 2.498s
poly_432.poly 1.238s 28.353s 4.299s
poly_433.poly 1.174s 14.652s 2.770s
poly_434.poly 1.760s 20.187s 6.655s
poly_435.poly 1.538s 11.108s 2.718s
poly_436.poly 1.594s 14.872s 3.205s
poly_437.poly 1.147s 14.635s 3.155s
poly_438.poly 1.690s 20.034s 3.980s
poly_439.poly 1.411s 25.149s 2.364s
poly_440.poly 1.163s 25.878s 4.781s
poly_441.poly 1.384s 25.170s 5.160s
poly_442.poly 0.870s 11.668s 2.323s
poly_443.poly 0.951s 33.579s 6.205s
poly_444.poly 1.065s 17.941s 2.910s
poly_445.poly 1.998s 16.430s 3.563s
poly_446.poly 1.045s 26.910s 4.228s
poly_447.poly 1.295s 29.425s 5.399s
poly_448.poly 1.661s 16.258s 2.585s
poly_449.poly 1.622s 17.693s 4.303s
poly_450.poly 1.641s 22.936s 6.282s
poly_451.poly 1.703s 22.255s 4.342s
poly_452.poly 1.430s 31.131s 4.344s
poly_453.poly 1.971s 21.473s 4.852s
poly_454.poly 1.567s 37.292s 6.394s
poly_455.poly 1.935s 30.081s 4.497s
poly_456.poly 1.516s 22.825s 6.350s
poly_457.poly 0.990s 22.727s 5.842s
poly_458.poly 2.405s 27.059s 5.239s
poly_459.poly 2.000s 29.375s 3.965s
poly_460.poly 1.269s 21.120s 4.921s
poly_461.poly 1.220s 18.023s 3.005s
poly_462.poly 1.530s 30.173s 5.349s
poly_463.poly 1.502s 35.296s 4.015s
poly_464.poly 2.152s 27.638s 4.711s
poly_465.poly 1.497s 33.634s 6.219s
poly_466.poly 1.395s 31.657s 5.550s
poly_467.poly 1.275s 28.666s 4.809s
poly_468.poly 2.117s 16.743s 3.226s
poly_469.poly 2.483s 34.383s 5.065s
poly_470.poly 2.317s 17.479s 5.529s
poly_471.poly 1.959s 22.467s 7.354s
poly_472.poly 2.504s 23.219s 3.251s
poly_473.poly 3.680s 35.369s 7.189s
poly_474.poly 1.325s 33.530s 5.067s
poly_475.poly 1.061s 26.542s 5.007s
poly_476.poly 1.638s 24.279s 3.182s
poly_477.poly 1.551s 23.888s 7.094s
poly_478.poly 1.480s 30.671s 5.880s
poly_479.poly 1.545s 30.107s 8.659s
poly_480.poly 1.674s 34.370s 7.401s
poly_481.poly 2.276s 29.611s 5.249s
poly_482.poly 2.612s 26.880s 7.500s
poly_483.poly 2.534s 19.501s 3.872s
poly_484.poly 2.033s 45.472s 5.112s
poly_485.poly 2.442s 32.935s 6.633s
poly_486.poly 1.616s 30.956s 6.961s
poly_487.poly 1.807s 28.656s 3.263s
poly_488.poly 1.165s 41.173s 5.497s
poly_489.poly 1.978s 40.021s 4.627s
poly_490.poly 1.133s 37.273s 5.103s
poly_491.poly 2.112s 36.685s 7.104s
poly_492.poly 2.086s 30.427s 7.117s
poly_493.poly 1.297s 46.938s 6.873s
poly_494.poly 1.755s 34.678s 5.329s
poly_495.poly 2.274s 31.758s 6.371s
poly_496.poly 2.010s 34.106s 9.385s
poly_497.poly 2.014s 39.699s 5.630s
poly_498.poly 1.945s 38.142s 3.470s
poly_499.poly 1.622s 38.871s 5.723s