Skip to main content

Verified Textbook Algorithms

A Biased Survey

  • Conference paper
  • First Online:

Part of the book series: Lecture Notes in Computer Science ((LNPSE,volume 12302))

Abstract

This article surveys the state of the art of verifying standard textbook algorithms. We focus largely on the classic text by Cormen et al. Both correctness and running time complexity are considered.

This is a preview of subscription content, log in via an institution.

Buying options

Chapter
USD   29.95
Price excludes VAT (USA)
  • Available as PDF
  • Read on any device
  • Instant download
  • Own it forever
eBook
USD   39.99
Price excludes VAT (USA)
  • Available as EPUB and PDF
  • Read on any device
  • Instant download
  • Own it forever
Softcover Book
USD   54.99
Price excludes VAT (USA)
  • Compact, lightweight edition
  • Dispatched in 3 to 5 business days
  • Free shipping worldwide - see info

Tax calculation will be finalised at checkout

Purchases are for personal use only

Learn about institutional subscriptions

Notes

  1. 1.

    The Fermat test is called Pseudoprime in CLRS.

References

  1. Archive of Formal Proofs. http://www.isa-afp.org

  2. Abdulaziz, M., Mehlhorn, K., Nipkow, T.: Trustworthy graph algorithms (invited talk). In: Rossmanith, P., Heggernes, P., Katoen, J. (eds.) 44th International Symposium on Mathematical Foundations of Computer Science, MFCS 2019. LIPIcs, vol. 138, pp. 1:1–1:22. Schloss Dagstuhl - Leibniz-Zentrum für Informatik (2019). https://doi.org/10.4230/LIPIcs.MFCS.2019.1

  3. Abrial, J.: The B-book - Assigning Programs to Meanings. Cambridge University Press (1996). https://doi.org/10.1017/CBO9780511624162

  4. Abrial, J.-R., Cansell, D., Méry, D.: Formal derivation of spanning trees algorithms. In: Bert, D., Bowen, J.P., King, S., Waldén, M. (eds.) ZB 2003. LNCS, vol. 2651, pp. 457–476. Springer, Heidelberg (2003). https://doi.org/10.1007/3-540-44880-2_27

    Chapter  MATH  Google Scholar 

  5. Adams, S.: Efficient sets - a balancing act. J. Funct. Program. 3(4), 553–561 (1993). https://doi.org/10.1017/S0956796800000885

    Article  Google Scholar 

  6. Affeldt, R., Cohen, C., Rouhling, D.: Formalization techniques for asymptotic reasoning in classical analysis. J. Form. Reasoning 11(1), 43–76 (2018). https://doi.org/10.6092/issn.1972-5787/8124

    Article  MathSciNet  MATH  Google Scholar 

  7. Ahrendt, W., Beckert, B., Bubel, R., Hähnle, R., Schmitt, P.H., Ulbrich, M. (eds.): Deductive Software Verification - The KeY Book - From Theory to Practice, LNCS, vol. 10001. Springer, Cham (2016), https://doi.org/10.1007/978-3-319-49812-6

  8. Akbarpour, B., Tahar, S.: A methodology for the formal verification of FFT algorithms in HOL. In: Hu, A.J., Martin, A.K. (eds.) FMCAD 2004. LNCS, vol. 3312, pp. 37–51. Springer, Heidelberg (2004). https://doi.org/10.1007/978-3-540-30494-4_4

    Chapter  MATH  Google Scholar 

  9. Allamigeon, X., Katz, R.D.: A formalization of convex polyhedra based on the simplex method. In: Ayala-Rincón, M., Muñoz, C.A. (eds.) ITP 2017. LNCS, vol. 10499, pp. 28–45. Springer, Cham (2017). https://doi.org/10.1007/978-3-319-66107-0_3

    Chapter  Google Scholar 

  10. Alstrup, S., Thorup, M., Gørtz, I.L., Rauhe, T., Zwick, U.: Union-find with constant time deletions. ACM Trans. Algorithms 11(1), 6:1–6:28 (2014). https://doi.org/10.1145/2636922

    Article  MathSciNet  MATH  Google Scholar 

  11. Andersson, A.: Improving partial rebuilding by using simple balance criteria. In: Dehne, F., Sack, J.-R., Santoro, N. (eds.) WADS 1989. LNCS, vol. 382, pp. 393–402. Springer, Heidelberg (1989). https://doi.org/10.1007/3-540-51542-9_33

    Chapter  Google Scholar 

  12. Appel, A.W.: Efficient verified red-black trees (2011). https://www.cs.princeton.edu/~appel/papers/redblack.pdf

  13. Appel, A.W.: Verified Functional Algorithms, August 2018. https://softwarefoundations.cis.upenn.edu/vfa-current/index.html

  14. Audebaud, P., Paulin-Mohring, C.: Proofs of randomized algorithms in Coq. Sci. Comput. Program. 74(8), 568–589 (2009). https://doi.org/10.1016/j.scico.2007.09.002

    Article  MathSciNet  MATH  Google Scholar 

  15. Avigad, J., Donnelly, K., Gray, D., Raff, P.: A formally verified proof of the prime number theorem. ACM Trans. Comput. Logic 9(1) (2007). https://doi.org/10.1145/1297658.1297660

  16. Ballarin, C.: Fast Fourier Transform. Archive of Formal Proofs, October 2005. http://isa-afp.org/entries/FFT.html, Formal proof development

  17. Bancerek, G., et al.: Mizar: state-of-the-art and beyond. In: Kerber, M., Carette, J., Kaliszyk, C., Rabe, F., Sorge, V. (eds.) CICM 2015. LNCS (LNAI), vol. 9150, pp. 261–279. Springer, Cham (2015). https://doi.org/10.1007/978-3-319-20615-8_17

    Chapter  Google Scholar 

  18. Barthe, G., Dupressoir, F., Grégoire, B., Kunz, C., Schmidt, B., Strub, P.-Y.: EasyCrypt: a tutorial. In: Aldini, A., Lopez, J., Martinelli, F. (eds.) FOSAD 2012-2013. LNCS, vol. 8604, pp. 146–166. Springer, Cham (2014). https://doi.org/10.1007/978-3-319-10082-1_6

    Chapter  Google Scholar 

  19. Barthe, G., Espitau, T., Gaboardi, M., Grégoire, B., Hsu, J., Strub, P.-Y.: An assertion-based program logic for probabilistic programs. In: Ahmed, A. (ed.) ESOP 2018. LNCS, vol. 10801, pp. 117–144. Springer, Cham (2018). https://doi.org/10.1007/978-3-319-89884-1_5

    Chapter  Google Scholar 

  20. Beckert, B., Schiffl, J., Schmitt, P.H., Ulbrich, M.: Proving JDK’s dual pivot quicksort correct. In: Paskevich and Wies [160], pp. 35–48, https://doi.org/10.1007/978-3-319-72308-2_3

  21. Berger, U., Miyamoto, K., Schwichtenberg, H., Seisenberger, M.: Minlog - a tool for program extraction supporting algebras and coalgebras. In: Corradini, A., Klin, B., Cîrstea, C. (eds.) CALCO 2011. LNCS, vol. 6859, pp. 393–399. Springer, Heidelberg (2011). https://doi.org/10.1007/978-3-642-22944-2_29

    Chapter  MATH  Google Scholar 

  22. Berger, U., Schwichtenberg, H., Seisenberger, M.: The Warshall algorithm and Dickson’s lemma: two examples of realistic program extraction. J. Autom. Reasoning 26(2), 205–221 (2001). https://doi.org/10.1023/A:1026748613865

    Article  MathSciNet  MATH  Google Scholar 

  23. Berghofer, S.: Program extraction in simply-typed higher order logic. In: Geuvers, H., Wiedijk, F. (eds.) TYPES 2002. LNCS, vol. 2646, pp. 21–38. Springer, Heidelberg (2003). https://doi.org/10.1007/3-540-39185-1_2

    Chapter  Google Scholar 

  24. Bertot, Y.: Formal verification of a geometry algorithm: a quest for abstract views and symmetry in coq proofs. In: Fischer, B., Uustalu, T. (eds.) ICTAC 2018. LNCS, vol. 11187, pp. 3–10. Springer, Cham (2018). https://doi.org/10.1007/978-3-030-02508-3_1

    Chapter  MATH  Google Scholar 

  25. Bertot, Y., Castéran, P.: Interactive Theorem Proving and Program Development - Coq’Art: The Calculus of Inductive Constructions. Texts in Theoretical Computer Science. An EATCS Series, Springer, Cham (2004). https://doi.org/10.1007/978-3-662-07964-5

  26. Besta, M., Stomp, F.A.: A complete mechanization of correctness of a string-preprocessing algorithm. Formal Methods Syst. Des. 27(1–2), 5–17 (2005). https://doi.org/10.1007/s10703-005-2243-0

    Article  MATH  Google Scholar 

  27. Blanchette, J.C.: Proof pearl: Mechanizing the textbook proof of Huffman’s algorithm. J. Autom. Reasoning 43(1), 1–18 (2009). https://doi.org/10.1007/s10817-009-9116-y

    Article  MathSciNet  MATH  Google Scholar 

  28. Blum, N., Mehlhorn, K.: On the average number of rebalancing operations in weight-balanced trees. Theor. Comput. Sci. 11, 303–320 (1980). https://doi.org/10.1016/0304-3975(80)90018-3

    Article  MathSciNet  MATH  Google Scholar 

  29. Bobot, F.: Topological sorting (2014). http://toccata.lri.fr/gallery/topological_sorting.en.html, formal proof development

  30. Bottesch, R., Haslbeck, M.W., Thiemann, R.: Verifying an incremental theory solver for linear arithmetic in Isabelle/HOL. In: Herzig, A., Popescu, A. (eds.) FroCoS 2019. LNCS (LNAI), vol. 11715, pp. 223–239. Springer, Cham (2019). https://doi.org/10.1007/978-3-030-29007-8_13

    Chapter  Google Scholar 

  31. Bove, A., Dybjer, P., Norell, U.: A brief overview of agda – a functional language with dependent types. In: Berghofer, S., Nipkow, T., Urban, C., Wenzel, M. (eds.) TPHOLs 2009. LNCS, vol. 5674, pp. 73–78. Springer, Heidelberg (2009). https://doi.org/10.1007/978-3-642-03359-9_6

    Chapter  Google Scholar 

  32. Boyer, R.S., Moore, J S.: Proving theorems about LISP functions. In: Nilsson, N. (ed.) International Joint Conference on Artificial Intelligence. pp. 486–493. William Kaufmann (1973) http://ijcai.org/Proceedings/73/Papers/053.pdf

  33. Boyer, R.S., Moore, J.S.: A fast string searching algorithm. Commun. ACM 20(10), 762–772 (1977). https://doi.org/10.1145/359842.359859

    Article  MATH  Google Scholar 

  34. Boyer, R.S., Moore, J.S.: A computational logic handbook, Perspectives in Computing, vol. 23. Academic Press, New York (1979)

    Google Scholar 

  35. Boyer, R.S., Strother Moore, J.: Single-threaded objects in ACL2. In: Krishnamurthi, S., Ramakrishnan, C.R. (eds.) PADL 2002. LNCS, vol. 2257, pp. 9–27. Springer, Heidelberg (2002). https://doi.org/10.1007/3-540-45587-6_3

    Chapter  Google Scholar 

  36. Brodal, G.S., Okasaki, C.: Optimal purely functional priority queues. J. Funct. Program. 6(6), 839–857 (1996). https://doi.org/10.1017/S095679680000201X

    Article  MATH  Google Scholar 

  37. Brun, C., Dufourd, J., Magaud, N.: Designing and proving correct a convex hull algorithm with hypermaps in Coq. Comput. Geom. 45(8), 436–457 (2012). https://doi.org/10.1016/j.comgeo.2010.06.006

    Article  MathSciNet  MATH  Google Scholar 

  38. Bulwahn, L., Krauss, A., Haftmann, F., Erkök, L., Matthews, J.: Imperative functional programming with Isabelle/HOL. In: Mohamed, O.A., Muñoz, C., Tahar, S. (eds.) TPHOLs 2008. LNCS, vol. 5170, pp. 134–149. Springer, Heidelberg (2008). https://doi.org/10.1007/978-3-540-71067-7_14

    Chapter  Google Scholar 

  39. Capretta, V.: Certifying the fast Fourier transform with coq. In: Boulton, R.J., Jackson, P.B. (eds.) TPHOLs 2001. LNCS, vol. 2152, pp. 154–168. Springer, Heidelberg (2001). https://doi.org/10.1007/3-540-44755-5_12

    Chapter  Google Scholar 

  40. Chan, H.L.J.: Primality testing is polynomial-time: a mechanised verification of the AKS algorithm. Ph.D. thesis, Australian National University (2019). https://openresearch-repository.anu.edu.au/bitstream/1885/177195/1/thesis.pdf

  41. Charguéraud, A.: Program verification through characteristic formulae. In: Hudak, P., Weirich, S. (eds.) Proceeding of the 15th ACM SIGPLAN International Conference on Functional Programming. ICFP 2010, pp. 321–332. ACM (2010). https://doi.org/10.1145/1863543.1863590

  42. Charguéraud, A., Pottier, F.: Machine-checked verification of the correctness and amortized complexity of an efficient union-find implementation. In: Urban, C., Zhang, X. (eds.) ITP 2015. LNCS, vol. 9236, pp. 137–153. Springer, Cham (2015). https://doi.org/10.1007/978-3-319-22102-1_9

    Chapter  Google Scholar 

  43. Charguéraud, A., Pottier, F.: Verifying the correctness and amortized complexity of a union-find implementation in separation logic with time credits. J. Autom. Reasoning 62(3), 331–365 (2019). https://doi.org/10.1007/s10817-017-9431-7

    Article  MathSciNet  MATH  Google Scholar 

  44. Chen, J.C.: Dijkstra’s shortest path algorithm. Formalized Mathematics 11(3), 237–247 (2003). http://fm.mizar.org/2003-11/pdf11-3/graphsp.pdf

    Google Scholar 

  45. Chen, R., Cohen, C., Lévy, J., Merz, S., Théry, L.: Formal proofs of Tarjan’s strongly connected components algorithm in Why3, Coq and Isabelle. In: Harrison, J., O’Leary, J., Tolmach, A. (eds.) 10th International Conference on Interactive Theorem Proving, ITP 2019. LIPIcs, vol. 141, pp. 13:1–13:19. Schloss Dagstuhl - Leibniz-Zentrum für Informatik (2019). https://doi.org/10.4230/LIPIcs.ITP.2019.13

  46. Chen, R., Lévy, J.: A semi-automatic proof of strong connectivity. In: Paskevich and Wies [160], pp. 49–65. https://doi.org/10.1007/978-3-319-72308-2_4

  47. Clochard, M.: Automatically verified implementation of data structures based on AVL trees. In: Giannakopoulou, D., Kroening, D. (eds.) VSTTE 2014. LNCS, vol. 8471, pp. 167–180. Springer, Cham (2014). https://doi.org/10.1007/978-3-319-12154-3_11

    Chapter  Google Scholar 

  48. Conchon, S., Filliâtre, J.: A persistent union-find data structure. In: Russo, C.V., Dreyer, D. (eds.) Workshop on ML, 2007. pp. 37–46. ACM (2007). https://doi.org/10.1145/1292535.1292541

  49. Cormen, T.H., Leiserson, C.E., Rivest, R.L., Stein, C.: Introduction to Algorithms, 3rd Edition. MIT Press (2009). http://mitpress.mit.edu/books/introduction-algorithms

  50. Danielsson, N.A.: Lightweight semiformal time complexity analysis for purely functional data structures. In: Necula, G.C., Wadler, P. (eds.) Proceedings of the 35th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, POPL 2008. pp. 133–144. ACM (2008). https://doi.org/10.1145/1328438.1328457

  51. Dénès, M., Mörtberg, A., Siles, V.: A refinement-based approach to computational algebra in Coq. In: Beringer, L., Felty, A. (eds.) ITP 2012. LNCS, vol. 7406, pp. 83–98. Springer, Heidelberg (2012). https://doi.org/10.1007/978-3-642-32347-8_7

    Chapter  Google Scholar 

  52. Dross, C., Moy, Y.: Auto-active proof of red-black trees in SPARK. In: Barrett, C., Davies, M., Kahsai, T. (eds.) NFM 2017. LNCS, vol. 10227, pp. 68–83. Springer, Cham (2017). https://doi.org/10.1007/978-3-319-57288-8_5

    Chapter  Google Scholar 

  53. Dufourd, J.-F., Bertot, Y.: Formal study of plane Delaunay triangulation. In: Kaufmann, M., Paulson, L.C. (eds.) ITP 2010. LNCS, vol. 6172, pp. 211–226. Springer, Heidelberg (2010). https://doi.org/10.1007/978-3-642-14052-5_16

    Chapter  Google Scholar 

  54. Eberl, M.: Fisher-yates shuffle. Archive of Formal Proofs, September 2016. http://isa-afp.org/entries/Fisher_Yates.html, Formal proof development

  55. Eberl, M.: Expected shape of random binary search trees. Archive of Formal Proofs, April 2017. http://isa-afp.org/entries/Random_BSTs.html, Formal proof development

  56. Eberl, M.: Lower bound on comparison-based sorting algorithms. Archive of Formal Proofs, March 2017. http://isa-afp.org/entries/Comparison_Sort_Lower_Bound.html, Formal proof development

  57. Eberl, M.: The median-of-medians selection algorithm. Archive of Formal Proofs, December 2017. http://isa-afp.org/entries/Median_Of_Medians_Selection.html, Formal proof development

  58. Eberl, M.: The number of comparisons in quicksort. Archive of Formal Proofs, March 2017. http://isa-afp.org/entries/Quick_Sort_Cost.html, Formal proof development

  59. Eberl, M.: Proving divide and conquer complexities in Isabelle/HOL. J. Autom. Reasoning 58(4), 483–508 (2017). https://doi.org/10.1007/s10817-016-9378-0

    Article  MathSciNet  MATH  Google Scholar 

  60. Eberl, M.: Verified real asymptotics in Isabelle/HOL. In: Proceedings of the International Symposium on Symbolic and Algebraic Computation. ISSAC 2019. ACM, New York (2019). https://doi.org/10.1145/3326229.3326240

  61. Eberl, M., Haslbeck, M.W., Nipkow, T.: Verified analysis of random binary tree structures. In: J. Automated Reasoning (2020). https://doi.org/10.1007/s10817-020-09545-0

  62. Edmonds, J.: Paths, trees, and flowers. Can. J. Math. 17, 44–467 (1965). https://doi.org/10.4153/CJM-1965-045-4

    Article  MathSciNet  MATH  Google Scholar 

  63. Ernst, G., Pfähler, J., Schellhorn, G., Haneberg, D., Reif, W.: KIV: overview and verifythis competition. Int. J. Softw. Tools Technol. Transf. 17(6), 677–694 (2015). https://doi.org/10.1007/s10009-014-0308-3

    Article  Google Scholar 

  64. Ernst, G., Schellhorn, G., Reif, W.: Verification of B\(^{\text{+ }}\) trees by integration of shape analysis and interactive theorem proving. Software Syst. Model. 14(1), 27–44 (2015). https://doi.org/10.1007/s10270-013-0320-1

    Article  Google Scholar 

  65. Esparza, J., Lammich, P., Neumann, R., Nipkow, T., Schimpf, A., Smaus, J.-G.: A fully verified executable LTL model checker. In: Sharygina, N., Veith, H. (eds.) CAV 2013. LNCS, vol. 8044, pp. 463–478. Springer, Heidelberg (2013). https://doi.org/10.1007/978-3-642-39799-8_31

    Chapter  Google Scholar 

  66. Eßmann, R., Nipkow, T., Robillard, S.: Verified approximation algorithms. In: Peltier and Sofronie-Stokkermans [163], pp. 291–306. https://doi.org/10.1007/978-3-030-51054-1_17

  67. Filliâtre, J.C.: Knuth-Morris-Pratt string searching algorithm. http://toccata.lri.fr/gallery/kmp.en.html, formal proof development

  68. Filliâtre, J.-C.: Proof of imperative programs in type theory. In: Altenkirch, T., Reus, B., Naraschewski, W. (eds.) TYPES 1998. LNCS, vol. 1657, pp. 78–92. Springer, Heidelberg (1999). https://doi.org/10.1007/3-540-48167-2_6

    Chapter  MATH  Google Scholar 

  69. Filliâtre, J.C.: Skew heaps (2014). http://toccata.lri.fr/gallery/skew_heaps.en.html, formal proof development

  70. Filliâtre, J.C.: Purely applicative heaps implemented with Braun trees (2015). http://toccata.lri.fr/gallery/braun_trees.en.html, formal proof development

  71. Filliâtre, J.C.: Binomial heaps (2016). http://toccata.lri.fr/gallery/binomial_heap.en.html, formal proof development

  72. Filliâtre, J.C., Clochard, M.: Hash tables with linear probing (2014). http://toccata.lri.fr/gallery/linear_probing.en.html, formal proof development

  73. Filliâtre, J.C., Clochard, M.: Warshall algorithm (2014), http://toccata.lri.fr/gallery/warshall_algorithm.en.html, formal proof development

  74. Filliâtre, J.-C., Letouzey, P.: Functors for proofs and programs. In: Schmidt, D. (ed.) ESOP 2004. LNCS, vol. 2986, pp. 370–384. Springer, Heidelberg (2004). https://doi.org/10.1007/978-3-540-24725-8_26

    Chapter  MATH  Google Scholar 

  75. Filliâtre, J.-C., Paskevich, A.: Why3 — where programs meet provers. In: Felleisen, M., Gardner, P. (eds.) ESOP 2013. LNCS, vol. 7792, pp. 125–128. Springer, Heidelberg (2013). https://doi.org/10.1007/978-3-642-37036-6_8

    Chapter  Google Scholar 

  76. Filliâtre, J., Paskevich, A., Stump, A.: The 2nd verified software competition: Experience report. In: Proceedings of the 1st International Workshop on Comparative Empirical Evaluation of Reasoning Systems, pp. 36–49 (2012). http://ceur-ws.org/Vol-873/papers/paper_6.pdf

  77. Fredman, M.L., Sedgewick, R., Sleator, D.D., Tarjan, R.E.: The pairing heap: a new form of self-adjusting heap. Algorithmica 1(1), 111–129 (1986). https://doi.org/10.1007/BF01840439

    Article  MathSciNet  MATH  Google Scholar 

  78. Furia, C.A., Nordio, M., Polikarpova, N., Tschannen, J.: Autoproof: auto-active functional verification of object-oriented programs. Int. J. Softw. Tools Technol. Transf. 19(6), 697–716 (2017). https://doi.org/10.1007/s10009-016-0419-0

    Article  Google Scholar 

  79. Gabow, H.N.: Path-based depth-first search for strong and biconnected components. Inf. Process. Lett. 74(3–4), 107–114 (2000). https://doi.org/10.1016/S0020-0190(00)00051-X

    Article  MathSciNet  MATH  Google Scholar 

  80. Gale, D., Shapley, L.S.: College admissions and the stability of marriage. Am. Math. Monthly 69(1), 9–15 (1962)

    Article  MathSciNet  Google Scholar 

  81. Galperin, I., Rivest, R.L.: Scapegoat trees. In: Ramachandran, V. (ed.) Proceedings of the Fourth Annual ACM/SIGACT-SIAM Symposium on Discrete Algorithms, pp. 165–174. ACM/SIAM (1993). http://dl.acm.org/citation.cfm?id=313559.313676

  82. Gamboa, R.: The correctness of the fast Fourier transform: a structured proof in ACL2. Formal Methods Syst. Des. 20(1), 91–106 (2002)

    Article  Google Scholar 

  83. Garillot, F., Gonthier, G., Mahboubi, A., Rideau, L.: Packaging mathematical structures. In: Berghofer, S., Nipkow, T., Urban, C., Wenzel, M. (eds.) TPHOLs 2009. LNCS, vol. 5674, pp. 327–342. Springer, Heidelberg (2009). https://doi.org/10.1007/978-3-642-03359-9_23

    Chapter  Google Scholar 

  84. Giry, M.: A categorical approach to probability theory. In: Banaschewski, B. (ed.) Categorical Aspects of Topology and Analysis. LNM, vol. 915, pp. 68–85. Springer, Heidelberg (1982). https://doi.org/10.1007/BFb0092872

    Chapter  Google Scholar 

  85. de Gouw, S., de Boer, F.S., Bubel, R., Hähnle, R., Rot, J., Steinhöfel, D.: Verifying OpenJDK’s sort method for generic collections. J. Autom. Reasoning 62(1), 93–126 (2019). https://doi.org/10.1007/s10817-017-9426-4

    Article  MathSciNet  MATH  Google Scholar 

  86. de Gouw, S., Rot, J., de Boer, F.S., Bubel, R., Hähnle, R.: OpenJDK’s Java.utils.Collection.sort() is broken: the good, the bad and the worst case. In: Kroening, D., Păsăreanu, C.S. (eds.) CAV 2015. LNCS, vol. 9206, pp. 273–289. Springer, Cham (2015). https://doi.org/10.1007/978-3-319-21690-4_16

    Chapter  Google Scholar 

  87. Guéneau, A., Charguéraud, A., Pottier, F.: A fistful of dollars: formalizing asymptotic complexity claims via deductive program verification. In: Ahmed, A. (ed.) ESOP 2018. LNCS, vol. 10801, pp. 533–560. Springer, Cham (2018). https://doi.org/10.1007/978-3-319-89884-1_19

    Chapter  Google Scholar 

  88. Guibas, L.J., McCreight, E.M., Plass, M.F., Roberts, J.R.: A new representation for linear lists. In: Hopcroft, J.E., Friedman, E.P., Harrison, M.A. (eds.) Proceedings of the 9th Annual ACM Symposium on Theory of Computing, pp. 49–60. ACM (1977). https://doi.org/10.1145/800105.803395

  89. Guttmann, W.: Relation-algebraic verification of Prim’s minimum spanning tree algorithm. In: Sampaio, A., Wang, F. (eds.) ICTAC 2016. LNCS, vol. 9965, pp. 51–68. Springer, Cham (2016). https://doi.org/10.1007/978-3-319-46750-4_4

    Chapter  Google Scholar 

  90. Guttmann, W.: An algebraic framework for minimum spanning tree problems. Theor. Comput. Sci. 744, 37–55 (2018). https://doi.org/10.1016/j.tcs.2018.04.012

    Article  MathSciNet  MATH  Google Scholar 

  91. Guttmann, W.: Verifying minimum spanning tree algorithms with stone relation algebras. J. Log. Algebraic Methods Program 101, 132–150 (2018). https://doi.org/10.1016/j.jlamp.2018.09.005

    Article  MathSciNet  MATH  Google Scholar 

  92. Hamid, N.A., Castleberry, C.: Formally certified stable marriages. In: Proceedings of the 48th Annual Southeast Regional Conference. ACM SE 2010. ACM (2010). https://doi.org/10.1145/1900008.1900056

  93. Haslbeck, M.W., Eberl, M.: Skip lists. Archive of Formal Proofs, January 2020. http://isa-afp.org/entries/Skip_Lists.html, Formal proof development

  94. Haslbeck, M.W., Eberl, M., Nipkow, T.: Treaps. Archive of Formal Proofs, February 2018. http://isa-afp.org/entries/Treaps.html, Formal proof development

  95. Haslbeck, M.P.L., Lammich, P.: Refinement with time – refining the run-time of algorithms in Isabelle/HOL. In: Harrison, J., O’Leary, J., Tolmach, A. (eds.) Interactive Theorem Proving, ITP 2019. LIPIcs, vol. 141, pp. 20:1–20:18. Schloss Dagstuhl - Leibniz-Zentrum für Informatik (2019). https://doi.org/10.4230/LIPIcs.ITP.2019.20

  96. Haslbeck, M.P.L., Lammich, P., Biendarra, J.: Kruskal’s algorithm for minimum spanning forest. Archive of Formal Proofs, February 2019. http://isa-afp.org/entries/Kruskal.html, Formal proof development

  97. Haslbeck, M.P.L., Lammich, P., Biendarra, J.: Kruskal’s algorithm for minimum spanning forest. Arch. Formal Proofs 2019 (2019), https://www.isa-afp.org/entries/Kruskal.html

  98. Haslbeck, M.P.L., Nipkow, T.: Verified analysis of list update algorithms. In: Lal, A., Akshay, S., Saurabh, S., Sen, S. (eds.) Foundations of Software Technology and Theoretical Computer Science, FSTTCS 2016. LIPIcs, vol. 65, pp. 49:1–49:15. Schloss Dagstuhl - Leibniz-Zentrum für Informatik (2016). https://doi.org/10.4230/LIPIcs.FSTTCS.2016.49, https://doi.org/10.4230/LIPIcs.FSTTCS.2016.49

  99. Hellauer, F., Lammich, P.: The string search algorithm by knuth, morris and pratt. Archive of Formal Proofs, December 2017. http://isa-afp.org/entries/Knuth_Morris_Pratt.html, Formal proof development

  100. Hiep, H.-D.A., Maathuis, O., Bian, J., de Boer, F.S., van Eekelen, M., de Gouw, S.: Verifying OpenJDK’s LinkedList using KeY. TACAS 2020. LNCS, vol. 12079, pp. 217–234. Springer, Cham (2020). https://doi.org/10.1007/978-3-030-45237-7_13

    Chapter  Google Scholar 

  101. Hinze, R., Paterson, R.: Finger trees: a simple general-purpose data structure. J. Funct. Program. 16(2), 197–217 (2006). https://doi.org/10.1017/S0956796805005769

    Article  MathSciNet  MATH  Google Scholar 

  102. Hirai, Y., Yamamoto, K.: Balancing weight-balanced trees. J. Funct. Program. 21(3), 287–307 (2011). https://doi.org/10.1017/S0956796811000104

    Article  MathSciNet  MATH  Google Scholar 

  103. Hoffmann, J.: Types with potential: polynomial resource bounds via automatic amortized analysis. Ph.D. thesis, Ludwig Maximilians University Munich (2011). http://edoc.ub.uni-muenchen.de/13955/

  104. Hoffmann, J., Aehlig, K., Hofmann, M.: Multivariate amortized resource analysis. ACM Trans. Program. Lang. Syst. 34(3), 14:1–14:62 (2012). https://doi.org/10.1145/2362389.2362393

  105. Hölzl, J.: Formalising semantics for expected running time of probabilistic programs. In: Blanchette, J.C., Merz, S. (eds.) ITP 2016. LNCS, vol. 9807, pp. 475–482. Springer, Cham (2016). https://doi.org/10.1007/978-3-319-43144-4_30

    Chapter  Google Scholar 

  106. Hölzl, J., Heller, A.: Three chapters of measure theory in Isabelle/HOL. In: van Eekelen, M., Geuvers, H., Schmaltz, J., Wiedijk, F. (eds.) ITP 2011. LNCS, vol. 6898, pp. 135–151. Springer, Heidelberg (2011). https://doi.org/10.1007/978-3-642-22863-6_12

    Chapter  Google Scholar 

  107. Hölzl, J., Immler, F., Huffman, B.: Type classes and filters for mathematical analysis in Isabelle/HOL. In: Blazy, S., Paulin-Mohring, C., Pichardie, D. (eds.) ITP 2013. LNCS, vol. 7998, pp. 279–294. Springer, Heidelberg (2013). https://doi.org/10.1007/978-3-642-39634-2_21

    Chapter  Google Scholar 

  108. Hoogerwoord, R.R.: A logarithmic implementation of flexible arrays. In: Bird, R.S., Morgan, C.C., Woodcock, J.C.P. (eds.) MPC 1992. LNCS, vol. 669, pp. 191–207. Springer, Heidelberg (1993). https://doi.org/10.1007/3-540-56625-2_14

    Chapter  MATH  Google Scholar 

  109. Hurd, J.: Verification of the Miller-Rabin probabilistic primality test. J. Log. Algebraic Methods Program. 56(1–2), 3–21 (2003). https://doi.org/10.1016/S1567-8326(02)00065-6

    Article  MathSciNet  MATH  Google Scholar 

  110. Kaminski, B.L., Katoen, J.-P., Matheja, C., Olmedo, F.: Weakest precondition reasoning for expected run–times of probabilistic programs. In: Thiemann, P. (ed.) ESOP 2016. LNCS, vol. 9632, pp. 364–389. Springer, Heidelberg (2016). https://doi.org/10.1007/978-3-662-49498-1_15

    Chapter  Google Scholar 

  111. Kaufmann, M., Moore, J.S., Manolios, P.: Computer-Aided Reasoning: An Approach. Kluwer Academic Publishers, Norwell (2000)

    Book  Google Scholar 

  112. Keinholz, J.: Matroids. Archive of Formal Proofs, November 2018. http://isa-afp.org/entries/Matroids.html, Formal proof development

  113. Knuth, D.E.: Optimum binary search trees. Acta Inf. 1, 14–25 (1971). https://doi.org/10.1007/BF00264289

    Article  MATH  Google Scholar 

  114. Lammich, P.: Automatic data refinement. In: Blazy, S., Paulin-Mohring, C., Pichardie, D. (eds.) ITP 2013. LNCS, vol. 7998, pp. 84–99. Springer, Heidelberg (2013). https://doi.org/10.1007/978-3-642-39634-2_9

    Chapter  Google Scholar 

  115. Lammich, P.: Verified efficient implementation of Gabow’s strongly connected component algorithm. In: Klein, G., Gamboa, R. (eds.) ITP 2014. LNCS, vol. 8558, pp. 325–340. Springer, Cham (2014). https://doi.org/10.1007/978-3-319-08970-6_21

    Chapter  Google Scholar 

  116. Lammich, P.: Refinement to Imperative/HOL. In: Urban and Zhang [191], pp. 253–269. https://doi.org/10.1007/978-3-319-22102-1_17

  117. Lammich, P.: Refinement based verification of imperative data structures. In: Avigad, J., Chlipala, A. (eds.) Proceedings of the 5th ACM SIGPLAN Conference on Certified Programs and Proofs, pp. 27–36. ACM (2016). https://doi.org/10.1145/2854065.2854067

  118. Lammich, P.: Generating verified LLVM from Isabelle/HOL. In: Harrison, J., O’Leary, J., Tolmach, A. (eds.) Interactive Theorem Proving, ITP 2019. LIPIcs, vol. 141, pp. 22:1–22:19. Schloss Dagstuhl - Leibniz-Zentrum für Informatik (2019). https://doi.org/10.4230/LIPIcs.ITP.2019.22

  119. Lammich, P.: Refinement to imperative HOL. J. Autom. Reasoning 62(4), 481–503 (2019). https://doi.org/10.1007/s10817-017-9437-1

    Article  MathSciNet  MATH  Google Scholar 

  120. Lammich, P.: Efficient verified implementation of Introsort and Pdqsort. In: Peltier, N., Sofronie-Stokkermans, V. (eds.) IJCAR 2020. LNCS (LNAI), vol. 12167, pp. 307–323. Springer, Cham (2020). https://doi.org/10.1007/978-3-030-51054-1_18

    Chapter  Google Scholar 

  121. Lammich, P., Lochbihler, A.: The Isabelle collections framework. In: Kaufmann, M., Paulson, L.C. (eds.) ITP 2010. LNCS, vol. 6172, pp. 339–354. Springer, Heidelberg (2010). https://doi.org/10.1007/978-3-642-14052-5_24

    Chapter  Google Scholar 

  122. Lammich, P., Meis, R.: A Separation Logic Framework for Imperative HOL. Archive of Formal Proofs, November 2012. http://isa-afp.org/entries/Separation_Logic_Imperative_HOL.html, Formal proof development

  123. Lammich, P., Neumann, R.: A framework for verifying depth-first search algorithms. In: Leroy, X., Tiu, A. (eds.) Proceedings of the 2015 Conference on Certified Programs and Proofs. CPP 2015, pp. 137–146. ACM (2015). https://doi.org/10.1145/2676724.2693165

  124. Lammich, P., Nipkow, T.: Proof pearl: purely functional, simple and efficient priority search trees and applications to Prim and Dijkstra. In: Harrison, J., O’Leary, J., Tolmach, A. (eds.) Interactive Theorem Proving, ITP 2019. LIPIcs, vol. 141, pp. 23:1–23:18. Schloss Dagstuhl - Leibniz-Zentrum für Informatik (2019). https://doi.org/10.4230/LIPIcs.ITP.2019.23

  125. Lammich, P., Sefidgar, S.R.: Formalizing the Edmonds-Karp algorithm. In: Blanchette, J.C., Merz, S. (eds.) ITP 2016. LNCS, vol. 9807, pp. 219–234. Springer, Cham (2016). https://doi.org/10.1007/978-3-319-43144-4_14

    Chapter  Google Scholar 

  126. Lammich, P., Sefidgar, S.R.: Formalizing network flow algorithms: a refinement approach in Isabelle/HOL. J. Autom. Reasoning 62(2), 261–280 (2019). https://doi.org/10.1007/s10817-017-9442-4

    Article  MathSciNet  MATH  Google Scholar 

  127. Lammich, P., Tuerk, T.: Applying data refinement for monadic programs to Hopcroft’s algorithm. In: Beringer, L., Felty, A. (eds.) ITP 2012. LNCS, vol. 7406, pp. 166–182. Springer, Heidelberg (2012). https://doi.org/10.1007/978-3-642-32347-8_12

    Chapter  Google Scholar 

  128. Lee, G.: Correctnesss of Ford-Fulkerson’s maximum flow algorithm. Formalized Math. 13(2), 305–314 (2005). http://fm.mizar.org/2005-13/pdf13-2/glib_005.pdf

  129. Lee, G., Rudnicki, P.: Correctness of Dijkstra’s shortest path and Prim’s minimum spanning tree algorithms. Formal. Math. 13(2), 295–304 (2005). http://fm.mizar.org/2005-13/pdf13-2/glib_004.pdf

  130. Leighton, T.: Notes on better master theorems for divide-and-conquer recurrences (MIT lecture notes) (1996), https://courses.csail.mit.edu/6.046/spring04/handouts/akrabazzi.pdf

  131. Malecha, J.G., Morrisett, G., Shinnar, A., Wisnesky, R.: Toward a verified relational database management system. In: Hermenegildo, M.V., Palsberg, J. (eds.) Proceedings of the 37th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, POPL 2010, pp. 237–248. ACM (2010). https://doi.org/10.1145/1706299.1706329

  132. Marić, F., Spasić, M., Thiemann, R.: An incremental simplex algorithm with unsatisfiable core generation. Archive of Formal Proofs, August 2018. http://isa-afp.org/entries/Simplex.html, Formal proof development

  133. McCarthy, J., Fetscher, B., New, M., Feltey, D., Findler, R.B.: A coq library for internal verification of running-times. In: Kiselyov, O., King, A. (eds.) FLOPS 2016. LNCS, vol. 9613, pp. 144–162. Springer, Cham (2016). https://doi.org/10.1007/978-3-319-29604-3_10

    Chapter  Google Scholar 

  134. Meikle, L.I., Fleuriot, J.D.: Mechanical theorem proving in computational geometry. In: Hong, H., Wang, D. (eds.) ADG 2004. LNCS (LNAI), vol. 3763, pp. 1–18. Springer, Heidelberg (2006). https://doi.org/10.1007/11615798_1

    Chapter  MATH  Google Scholar 

  135. Meis, R., Nielsen, F., Lammich, P.: Binomial heaps and skew binomial heaps. Archive of Formal Proofs, October 2010. http://isa-afp.org/entries/Binomial-Heaps.html, Formal proof development

  136. Meyer, B.: Eiffel: The Language. Prentice-Hall (1991). http://www.eiffel.com/doc/#etl

  137. Moore, J S., Martinez, M.: A mechanically checked proof of the correctness of the Boyer-Moore fast string searching algorithm. In: Broy, M., Sitou, W., Hoare, T. (eds.) Engineering Methods and Tools for Software Safety and Security, pp. 267–284. IOS Press (2009)

    Google Scholar 

  138. Moore, J.S., Zhang, Q.: Proof pearl: Dijkstra’s shortest path algorithm verified with ACL2. In: Hurd, J., Melham, T. (eds.) TPHOLs 2005. LNCS, vol. 3603, pp. 373–384. Springer, Heidelberg (2005). https://doi.org/10.1007/11541868_24

    Chapter  Google Scholar 

  139. Motwani, R., Raghavan, P.: Randomized Algorithms. Cambridge University Press, Cambridge (1995)

    Book  Google Scholar 

  140. Musser, D.R.: Introspective sorting and selection algorithms. Softw. Pract. Exp. 27(8), 983–993 (1997). https://doi.org/10.1002/(SICI)1097--024X(199708)27:8<983::AID-SPE117>3.0.CO;2-%23

  141. Nanevski, A., Morrisett, G., Shinnar, A., Govereau, P., Birkedal, L.: Ynot: dependent types for imperative programs. In: Hook, J., Thiemann, P. (eds.) Proceeding of the 13th ACM SIGPLAN International Conference on Functional Programming, ICFP 2008. pp. 229–240. ACM (2008). https://doi.org/10.1145/1411204.1411237

  142. Neumann, R.: CAVA – A Verified Model Checker. Ph.D. thesis, Technische Universität München (2017). http://nbn-resolving.de/urn/resolver.pl?urn:nbn:de:bvb:91-diss-20170616-1342881-1-9

  143. Nievergelt, J., Reingold, E.M.: Binary search trees of bounded balance. In: Fischer, P.C., Zeiger, H.P., Ullman, J.D., Rosenberg, A.L. (eds.) Proceedings of the 4th Annual ACM Symposium on Theory of Computing, pp. 137–142. ACM (1972). https://doi.org/10.1145/800152.804906

  144. Nievergelt, J., Reingold, E.M.: Binary search trees of bounded balance. SIAM J. Comput. 2(1), 33–43 (1973). https://doi.org/10.1137/0202005

    Article  MathSciNet  MATH  Google Scholar 

  145. Nipkow, T.: Amortized complexity verified. In: Urban and Zhang [191], pp. 310–324. https://doi.org/10.1007/978-3-319-22102-1_21

  146. Nipkow, T.: Automatic functional correctness proofs for functional search trees. In: Blanchette, J.C., Merz, S. (eds.) ITP 2016. LNCS, vol. 9807, pp. 307–322. Springer, Cham (2016). https://doi.org/10.1007/978-3-319-43144-4_19

    Chapter  Google Scholar 

  147. Nipkow, T.: Verified root-balanced trees. In: Chang, B.E. (ed.) Programming Languages and Systems, APLAS 2017. LNCS, vol. 10695, pp. 255–272. Springer (2017). https://doi.org/10.1007/978-3-319-71237-6_13

  148. Nipkow, T., Brinkop, H.: Amortized complexity verified. J. Autom. Reasoning 62(3), 367–391 (2019). https://doi.org/10.1007/s10817-018-9459-3

    Article  MathSciNet  MATH  Google Scholar 

  149. Nipkow, T., Dirix, S.: Weight-balanced trees. Archive of Formal Proofs, March 2018. http://isa-afp.org/entries/Weight_Balanced_Trees.html, Formal proof development

  150. Nipkow, T., Klein, G.: Concrete Semantics - With Isabelle/HOL. Springer, Cham (2014). https://doi.org/10.1007/978-3-319-10542-0, http://www.concrete-semantics.org/

  151. Nipkow, T., Paulson, L.C., Wenzel, M.: Isabelle/HOL. LNCS, vol. 2283. Springer, Heidelberg (2002). https://doi.org/10.1007/3-540-45949-9

  152. Nipkow, T., Pusch, C.: AVL trees. Archive of Formal Proofs, March 2004. http://isa-afp.org/entries/AVL-Trees.html, Formal proof development

  153. Nipkow, T., Sewell, T.: Proof pearl: Braun trees. In: Blanchette, J., Hritcu, C. (eds.) Proceedings of the 9th ACM SIGPLAN International Conference on Certified Programs and Proofs, CPP 2020, pp. 18–31. ACM (2020). https://doi.org/10.1145/3372885.3373834

  154. Nipkow, T., Somogyi, D.: Optimal binary search trees. Archive of Formal Proofs, May 2018. http://isa-afp.org/entries/Optimal_BST.html, Formal proof development

  155. Nordhoff, B., Körner, S., Lammich, P.: Finger trees. Archive of Formal Proofs, October 2010. http://isa-afp.org/entries/Finger-Trees.html, Formal proof development

  156. Nordhoff, B., Lammich, P.: Dijkstra’s shortest path algorithm. Archive of Formal Proofs, January 2012. http://isa-afp.org/entries/Dijkstra_Shortest_Path.html, Formal proof development

  157. Owre, S., Shankar, N.: A brief overview of PVS. In: Mohamed, O.A., Muñoz, C., Tahar, S. (eds.) TPHOLs 2008. LNCS, vol. 5170, pp. 22–27. Springer, Heidelberg (2008). https://doi.org/10.1007/978-3-540-71067-7_5

    Chapter  Google Scholar 

  158. Palomo-Lozano, F., Inmaculada Medina-Bulo, J.A.A.J.: Certification of matrix multiplication algorithms. In: Theorem Proving in Higher Order Logics, Supplemental Proceedings, TPHOLs 2001 (2001)

    Google Scholar 

  159. Parsert, J., Kaliszyk, C.: Linear programming. Archive of Formal Proofs, August 2019. http://isa-afp.org/entries/Linear_Programming.html, Formal proof development

  160. Paskevich, A., Wies, T. (eds.): VSTTE 2017. LNCS, vol. 10712. Springer, Cham (2017). https://doi.org/10.1007/978-3-319-72308-2

    Book  MATH  Google Scholar 

  161. Paulin-Mohring, C.: Extraction de programmes dans le Calcul des Constructions. (Program Extraction in the Calculus of Constructions). Ph.D. thesis, Paris Diderot University, France (1989). https://tel.archives-ouvertes.fr/tel-00431825

  162. Paulson, L.C.: ML for the Working Programmer, 2nd edn. Cambridge University Press, Cambridge (1996)

    Book  Google Scholar 

  163. Peltier, N., Sofronie-Stokkermans, V. (eds.): IJCAR 2020. LNCS (LNAI), vol. 12167. Springer, Cham (2020). https://doi.org/10.1007/978-3-030-51054-1

    Book  Google Scholar 

  164. Pereira, M.: Pairing heaps (2016). http://toccata.lri.fr/gallery/pairing_heap.en.html, formal proof development

  165. Petcher, A., Morrisett, G.: The foundational cryptography framework. In: Focardi, R., Myers, A. (eds.) POST 2015. LNCS, vol. 9036, pp. 53–72. Springer, Heidelberg (2015). https://doi.org/10.1007/978-3-662-46666-7_4

    Chapter  Google Scholar 

  166. Pichardie, D., Bertot, Y.: Formalizing convex hull algorithms. In: Boulton, R.J., Jackson, P.B. (eds.) TPHOLs 2001. LNCS, vol. 2152, pp. 346–361. Springer, Heidelberg (2001). https://doi.org/10.1007/3-540-44755-5_24

    Chapter  Google Scholar 

  167. Polikarpova, N., Tschannen, J., Furia, C.A.: A fully verified container library. In: Bjørner, N., de Boer, F. (eds.) FM 2015. LNCS, vol. 9109, pp. 414–434. Springer, Cham (2015). https://doi.org/10.1007/978-3-319-19249-9_26

    Chapter  Google Scholar 

  168. Polikarpova, N., Tschannen, J., Furia, C.A.: A fully verified container library. Formal Asp. Comput. 30(5), 495–523 (2018). https://doi.org/10.1007/s00165-017-0435-1

    Article  MathSciNet  Google Scholar 

  169. Pottier, F.: Depth-first search and strong connectivity in Coq. In: Journées Francophones des Langages Applicatifs (JFLA), January 2015. http://gallium.inria.fr/~fpottier/publis/fpottier-dfs-scc.pdf

  170. Pottier, F.: Verifying a hash table and its iterators in higher-order separation logic. In: ACM SIGPLAN Conference on Certified Programs and Proofs (CPP), pp. 3–16, January 2017. https://doi.org/10.1145/3018610.3018624, http://gallium.inria.fr/~fpottier/publis/fpottier-hashtable.pdf

  171. Pugh, W.: Skip lists: a probabilistic alternative to balanced trees. Commun. ACM 33(6), 668–676 (1990). https://doi.org/10.1145/78973.78977

    Article  Google Scholar 

  172. Ralston, R.: ACL2-certified AVL trees. In: Eighth International Workshop on the ACL2 Theorem Prover and Its Applications. ACL2 2009, pp. 71–74. ACM (2009). https://doi.org/10.1145/1637837.1637848

  173. Rau, M., Nipkow, T.: Verification of closest pair of points algorithms. In: Peltier and Sofronie-Stokkermans [163], pp. 341–357. https://doi.org/10.1007/978-3-030-51054-1_20

  174. Rem, M., Braun, W.: A logarithmic implementation of flexible arrays (1983). memorandum MR83/4. Eindhoven University of Technology

    Google Scholar 

  175. Sagiv, S., Reps, T.W., Wilhelm, R.: Parametric shape analysis via 3-valued logic. ACM Trans. Program. Lang. Syst. 24(3), 217–298 (2002). https://doi.org/10.1145/514188.514190

    Article  Google Scholar 

  176. Sakaguchi, K.: Program extraction for mutable arrays. In: Gallagher, J.P., Sulzmann, M. (eds.) FLOPS 2018. LNCS, vol. 10818, pp. 51–67. Springer, Cham (2018). https://doi.org/10.1007/978-3-319-90686-7_4

    Chapter  Google Scholar 

  177. Sedgewick, R., Wayne, K.: Algorithms, 4th Edition. Addison-Wesley, Upper Saddle River (2011)

    Google Scholar 

  178. Seidel, R., Aragon, C.R.: Randomized search trees. Algorithmica 16(4/5), 464–497 (1996). https://doi.org/10.1007/BF01940876

    Article  MathSciNet  MATH  Google Scholar 

  179. Sleator, D.D., Tarjan, R.E.: Self-adjusting binary search trees. J. ACM 32(3), 652–686 (1985). https://doi.org/10.1145/3828.3835

    Article  MathSciNet  MATH  Google Scholar 

  180. Sleator, D.D., Tarjan, R.E.: Self-adjusting heaps. SIAM J. Comput. 15(1), 52–69 (1986). https://doi.org/10.1137/0215004

    Article  MathSciNet  MATH  Google Scholar 

  181. Slind, K., Norrish, M.: A brief overview of HOL4. In: Mohamed, O.A., Muñoz, C., Tahar, S. (eds.) TPHOLs 2008. LNCS, vol. 5170, pp. 28–32. Springer, Heidelberg (2008). https://doi.org/10.1007/978-3-540-71067-7_6

    Chapter  Google Scholar 

  182. Sozeau, M.: Program-ing finger trees in Coq. In: Hinze, R., Ramsey, N. (eds.) Proceedings of the 12th ACM SIGPLAN International Conference on Functional Programming. ICFP 2007, pp. 13–24. ACM (2007). https://doi.org/10.1145/1291220.1291156

  183. Spasić, M., Marić, F.: Formalization of incremental simplex algorithm by stepwise refinement. In: Giannakopoulou, D., Méry, D. (eds.) FM 2012. LNCS, vol. 7436, pp. 434–449. Springer, Heidelberg (2012). https://doi.org/10.1007/978-3-642-32759-9_35

    Chapter  Google Scholar 

  184. Stucke, I.: Reasoning about cardinalities of relations with applications supported by proof assistants. In: Höfner, P., Pous, D., Struth, G. (eds.) RAMICS 2017. LNCS, vol. 10226, pp. 290–306. Springer, Cham (2017). https://doi.org/10.1007/978-3-319-57418-9_18

    Chapter  Google Scholar 

  185. Stüwe, D., Eberl, M.: Probabilistic primality testing. Archive of Formal Proofs, February 2019. http://isa-afp.org/entries/Probabilistic_Prime_Tests.html, Formal proof development

  186. Tarjan, R.E.: Depth-first search and linear graph algorithms. SIAM J. Comput. 1(2), 146–160 (1972). https://doi.org/10.1137/0201010

    Article  MathSciNet  MATH  Google Scholar 

  187. Tassarotti, J., Harper, R.: Verified tail bounds for randomized programs. In: Avigad, J., Mahboubi, A. (eds.) ITP 2018. LNCS, vol. 10895, pp. 560–578. Springer, Cham (2018). https://doi.org/10.1007/978-3-319-94821-8_33

    Chapter  Google Scholar 

  188. Tassarotti, J., Harper, R.: A separation logic for concurrent randomized programs. Proc. ACM Program. Lang. 3(POPL), 64:1–64:30 (2019). https://doi.org/10.1145/3290377

  189. Théry, L.: Formalising Huffman’s algorithm. Research report, Università degli Studi dell’Aquila (2004) https://hal.archives-ouvertes.fr/hal-02149909

  190. Toibazarov, E.: An ACL2 proof of the correctness of the preprocessing for a variant of the Boyer-Moore fast string searching algorithm. Honors thesis, Computer Science Dept., University of Texas at Austin (2013). see www.cs.utexas.edu/users/moore/publications/toibazarov-thesis.pdf

  191. Urban, C., Zhang, X. (eds.): ITP 2015. LNCS, vol. 9236. Springer, Cham (2015). https://doi.org/10.1007/978-3-319-22102-1

    Book  Google Scholar 

  192. Vafeiadis, V.: Adjustable references. In: Blazy, S., Paulin-Mohring, C., Pichardie, D. (eds.) ITP 2013. LNCS, vol. 7998, pp. 328–337. Springer, Heidelberg (2013). https://doi.org/10.1007/978-3-642-39634-2_24

    Chapter  Google Scholar 

  193. van der Weegen, E., McKinna, J.: A machine-checked proof of the average-case complexity of quicksort in Coq. In: Berardi, S., Damiani, F., de’Liguoro, U. (eds.) TYPES 2008. LNCS, vol. 5497, pp. 256–271. Springer, Heidelberg (2009). https://doi.org/10.1007/978-3-642-02444-3_16

    Chapter  Google Scholar 

  194. Wimmer, S.: Formalized timed automata. In: Blanchette, J.C., Merz, S. (eds.) ITP 2016. LNCS, vol. 9807, pp. 425–440. Springer, Cham (2016). https://doi.org/10.1007/978-3-319-43144-4_26

    Chapter  Google Scholar 

  195. Wimmer, S.: Hidden Markov models. Archive of Formal Proofs, May 2018. http://isa-afp.org/entries/Hidden_Markov_Models.html, Formal proof development

  196. Wimmer, S., Hu, S., Nipkow, T.: Verified Memoization and dynamic programming. In: Avigad, J., Mahboubi, A. (eds.) ITP 2018. LNCS, vol. 10895, pp. 579–596. Springer, Cham (2018). https://doi.org/10.1007/978-3-319-94821-8_34

    Chapter  Google Scholar 

  197. Wimmer, S., Lammich, P.: The Floyd-Warshall algorithm for shortest paths. Archive of Formal Proofs, May 2017. http://isa-afp.org/entries/Floyd_Warshall.html, Formal proof development

  198. Wimmer, S., Lammich, P.: Verified model checking of timed automata. In: Beyer, D., Huisman, M. (eds.) TACAS 2018. LNCS, vol. 10805, pp. 61–78. Springer, Cham (2018). https://doi.org/10.1007/978-3-319-89960-2_4

    Chapter  MATH  Google Scholar 

  199. Yao, F.F.: Efficient dynamic programming using quadrangle inequalities. In: Miller, R.E., Ginsburg, S., Burkhard, W.A., Lipton, R.J. (eds.) Proceedings of the 12th Annual ACM Symposium on Theory of Computing, pp. 429–435. ACM (1980). https://doi.org/10.1145/800141.804691

  200. Zhan, B.: Efficient verification of imperative programs using Auto2. In: Beyer, D., Huisman, M. (eds.) TACAS 2018. LNCS, vol. 10805, pp. 23–40. Springer, Cham (2018). https://doi.org/10.1007/978-3-319-89960-2_2

    Chapter  Google Scholar 

  201. Zhan, B., Haslbeck, M.P.L.: Verifying asymptotic time complexity of imperative programs in Isabelle. In: Galmiche, D., Schulz, S., Sebastiani, R. (eds.) IJCAR 2018. LNCS (LNAI), vol. 10900, pp. 532–548. Springer, Cham (2018). https://doi.org/10.1007/978-3-319-94205-6_35

    Chapter  Google Scholar 

Download references

Acknowledgements

We thank Andrew Appel, Gilles Barthe, Arthur Charguéraud, Cyril Cohen, Gidon Ernst, Jean-Christophe Filliâtre, Walter Guttmann, Reiner Hähnle, Peter Lammich, J Moore, Joseph Tassarotti, Laurent Théry, René Thiemann and Simon Wimmer for their help in compiling this survey and Jasmin Blanchette for nitpicking.

This research is supported by DFG Koselleck grant NI 491/16-1.

Author information

Authors and Affiliations

Authors

Editor information

Editors and Affiliations

Rights and permissions

Reprints and permissions

Copyright information

© 2020 Springer Nature Switzerland AG

About this paper

Check for updates. Verify currency and authenticity via CrossMark

Cite this paper

Nipkow, T., Eberl, M., Haslbeck, M.P.L. (2020). Verified Textbook Algorithms. In: Hung, D.V., Sokolsky, O. (eds) Automated Technology for Verification and Analysis. ATVA 2020. Lecture Notes in Computer Science(), vol 12302. Springer, Cham. https://doi.org/10.1007/978-3-030-59152-6_2

Download citation

  • DOI: https://doi.org/10.1007/978-3-030-59152-6_2

  • Published:

  • Publisher Name: Springer, Cham

  • Print ISBN: 978-3-030-59151-9

  • Online ISBN: 978-3-030-59152-6

  • eBook Packages: Computer ScienceComputer Science (R0)

Publish with us

Policies and ethics