{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,3,28]],"date-time":"2025-03-28T06:34:47Z","timestamp":1743143687956,"version":"3.40.3"},"publisher-location":"Cham","reference-count":20,"publisher":"Springer Nature Switzerland","isbn-type":[{"type":"print","value":"9783031572661"},{"type":"electronic","value":"9783031572678"}],"license":[{"start":{"date-parts":[[2024,1,1]],"date-time":"2024-01-01T00:00:00Z","timestamp":1704067200000},"content-version":"tdm","delay-in-days":0,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0"},{"start":{"date-parts":[[2024,4,5]],"date-time":"2024-04-05T00:00:00Z","timestamp":1712275200000},"content-version":"vor","delay-in-days":95,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0"}],"content-domain":{"domain":["link.springer.com"],"crossmark-restriction":false},"short-container-title":[],"published-print":{"date-parts":[[2024]]},"abstract":"<jats:title>Abstract<\/jats:title><jats:p>Inlining is a crucial optimisation when compiling functional programming languages. This paper describes how we have implemented and verified function inlining and loop specialisation for PureCake, a verified compiler for a Haskell-like (purely functional, lazy) programming language. A novel aspect of our formalisation is that we justify inlining by pushing and pulling \"Image missing\"-bindings. All of our work has been mechanised in the HOL4 interactive theorem prover.<\/jats:p>","DOI":"10.1007\/978-3-031-57267-8_11","type":"book-chapter","created":{"date-parts":[[2024,4,4]],"date-time":"2024-04-04T16:02:01Z","timestamp":1712246521000},"page":"275-301","update-policy":"https:\/\/doi.org\/10.1007\/springer_crossmark_policy","source":"Crossref","is-referenced-by-count":0,"title":["Verified Inlining and Specialisation for PureCake"],"prefix":"10.1007","author":[{"ORCID":"https:\/\/orcid.org\/0000-0003-3116-0392","authenticated-orcid":false,"given":"Hrutvik","family":"Kanabar","sequence":"first","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]},{"ORCID":"https:\/\/orcid.org\/0009-0000-3878-2552","authenticated-orcid":false,"given":"Kacper","family":"Korban","sequence":"additional","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]},{"ORCID":"https:\/\/orcid.org\/0000-0002-9504-4107","authenticated-orcid":false,"given":"Magnus O.","family":"Myreen","sequence":"additional","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]}],"member":"297","published-online":{"date-parts":[[2024,4,5]]},"reference":[{"unstructured":"Abramsky, S.: The lazy $$\\lambda $$-calculus. In: Research Topics in Functional Programming. Addison Wesley (1990)","key":"11_CR1"},{"unstructured":"Anand, A., Appel, A.W., Morrisett, G., Paraskevopoulou, Z., Pollack, R., B\u00e9langer, O.S., Sozeau, M., Weaver, M.Z.: CertiCoq: A verified compiler for Coq. In: Workshop on Coq for Programming Languages (CoqPL) (2017), https:\/\/popl17.sigplan.org\/details\/main\/9\/CertiCoq-A-verified-compiler-for-Coq","key":"11_CR2"},{"unstructured":"Barendregt, H.P.: The lambda calculus - its syntax and semantics, Studies in logic and the foundations of mathematics, vol.\u00a0103. North-Holland (1985)","key":"11_CR3"},{"doi-asserted-by":"publisher","unstructured":"B\u00e9langer, O.S., Appel, A.W.: Shrink fast correctly! In: Principles and Practice of Declarative Programming (PPDP). ACM (2017). https:\/\/doi.org\/10.1145\/3131851.3131859","key":"11_CR4","DOI":"10.1145\/3131851.3131859"},{"doi-asserted-by":"publisher","unstructured":"Breitner, J.: Formally proving a compiler transformation safe. In: Symposium on Haskell. ACM (2015). https:\/\/doi.org\/10.1145\/2804302.2804312","key":"11_CR5","DOI":"10.1145\/2804302.2804312"},{"doi-asserted-by":"publisher","unstructured":"Breitner, J., Spector-Zabusky, A., Li, Y., Rizkallah, C., Wiegley, J., Weirich, S.: Ready, set, verify! Applying hs-to-coq to real-world Haskell code (experience report). Proc. ACM Program. Lang. 2(ICFP) (2018). https:\/\/doi.org\/10.1145\/3236784","key":"11_CR6","DOI":"10.1145\/3236784"},{"doi-asserted-by":"publisher","unstructured":"Howe, D.J.: Proving congruence of bisimulation in functional programming languages. Inf. Comput. 124(2) (1996). https:\/\/doi.org\/10.1006\/inco.1996.0008","key":"11_CR7","DOI":"10.1006\/inco.1996.0008"},{"doi-asserted-by":"publisher","unstructured":"Hughes, J.: Why functional programming matters. Comput. J. 32(2) (1989). https:\/\/doi.org\/10.1093\/comjnl\/32.2.98","key":"11_CR8","DOI":"10.1093\/comjnl\/32.2.98"},{"doi-asserted-by":"publisher","unstructured":"Kanabar, H., Korban, K., Myreen, M.O.: Artifact for \u201cVerified Inlining and Specialisation for PureCake\u201d (2024). https:\/\/doi.org\/10.5281\/zenodo.10456887","key":"11_CR9","DOI":"10.5281\/zenodo.10456887"},{"doi-asserted-by":"publisher","unstructured":"Kanabar, H., Vivien, S., Abrahamsson, O., Myreen, M.O., Norrish, M., \u00c5man Pohjola, J., Zanetti, R.: PureCake: A verified compiler for a lazy functional language. In: Programming Language Design and Implementation (PLDI). ACM (2023). https:\/\/doi.org\/10.1145\/3591259","key":"11_CR10","DOI":"10.1145\/3591259"},{"doi-asserted-by":"publisher","unstructured":"Krijnen, J.O.G., Chakravarty, M.M.T., Keller, G., Swierstra, W.: Translation certification for smart contracts. In: Functional and Logic Programming (FLOPS). Lecture Notes in Computer Science, vol. 13215. Springer (2022). https:\/\/doi.org\/10.1007\/978-3-030-99461-7_6","key":"11_CR11","DOI":"10.1007\/978-3-030-99461-7_6"},{"doi-asserted-by":"publisher","unstructured":"Kumar, R., Myreen, M.O., Norrish, M., Owens, S.: CakeML: a verified implementation of ML. In: Principles of Programming Languages (POPL). ACM (2014). https:\/\/doi.org\/10.1145\/2535838.2535841","key":"11_CR12","DOI":"10.1145\/2535838.2535841"},{"doi-asserted-by":"publisher","unstructured":"Leroy, X.: Formal verification of a realistic compiler. Commun. ACM 52(7) (2009). https:\/\/doi.org\/10.1145\/1538788.1538814","key":"11_CR13","DOI":"10.1145\/1538788.1538814"},{"doi-asserted-by":"publisher","unstructured":"Myreen, M.O.: The CakeML project\u2019s quest for ever stronger correctness theorems (invited paper). In: Interactive Theorem Proving (ITP). LIPIcs, vol.\u00a0193. Schloss Dagstuhl - Leibniz-Zentrum f\u00fcr Informatik (2021). https:\/\/doi.org\/10.4230\/LIPIcs.ITP.2021.1","key":"11_CR14","DOI":"10.4230\/LIPIcs.ITP.2021.1"},{"doi-asserted-by":"publisher","unstructured":"Neis, G., Hur, C., Kaiser, J., McLaughlin, C., Dreyer, D., Vafeiadis, V.: Pilsner: a compositionally verified compiler for a higher-order imperative language. In: International Conference on Functional Programming (ICFP). ACM (2015). https:\/\/doi.org\/10.1145\/2784731.2784764","key":"11_CR15","DOI":"10.1145\/2784731.2784764"},{"doi-asserted-by":"publisher","unstructured":"Paraskevopoulou, Z., Li, J.M., Appel, A.W.: Compositional optimizations for CertiCoq. Proc. ACM Program. Lang. 5(ICFP) (2021). https:\/\/doi.org\/10.1145\/3473591","key":"11_CR16","DOI":"10.1145\/3473591"},{"doi-asserted-by":"crossref","unstructured":"Peyton\u00a0Jones, S.L., Marlow, S.: Secrets of the Glasgow Haskell Compiler inliner. Journal of Functional Programming 12 (2002)","key":"11_CR17","DOI":"10.1017\/S0956796802004331"},{"doi-asserted-by":"publisher","unstructured":"Pnueli, A., Siegel, M., Singerman, E.: Translation validation. In: Tools and Algorithms for Construction and Analysis of Systems (TACAS). Lecture Notes in Computer Science, vol.\u00a01384. Springer (1998). https:\/\/doi.org\/10.1007\/BFb0054170","key":"11_CR18","DOI":"10.1007\/BFb0054170"},{"doi-asserted-by":"publisher","unstructured":"Tristan, J., Leroy, X.: Verified validation of lazy code motion. In: Programming Language Design and Implementation (PLDI). ACM (2009). https:\/\/doi.org\/10.1145\/1542476.1542512","key":"11_CR19","DOI":"10.1145\/1542476.1542512"},{"doi-asserted-by":"publisher","unstructured":"Weirich, S., Voizard, A., de\u00a0Amorim, P.H.A., Eisenberg, R.A.: A specification for dependent types in Haskell. Proc. ACM Program. Lang. 1(ICFP) (2017). https:\/\/doi.org\/10.1145\/3110275","key":"11_CR20","DOI":"10.1145\/3110275"}],"container-title":["Lecture Notes in Computer Science","Programming Languages and Systems"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/link.springer.com\/content\/pdf\/10.1007\/978-3-031-57267-8_11","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2024,4,4]],"date-time":"2024-04-04T16:04:06Z","timestamp":1712246646000},"score":1,"resource":{"primary":{"URL":"https:\/\/link.springer.com\/10.1007\/978-3-031-57267-8_11"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2024]]},"ISBN":["9783031572661","9783031572678"],"references-count":20,"URL":"https:\/\/doi.org\/10.1007\/978-3-031-57267-8_11","relation":{},"ISSN":["0302-9743","1611-3349"],"issn-type":[{"type":"print","value":"0302-9743"},{"type":"electronic","value":"1611-3349"}],"subject":[],"published":{"date-parts":[[2024]]},"assertion":[{"value":"5 April 2024","order":1,"name":"first_online","label":"First Online","group":{"name":"ChapterHistory","label":"Chapter History"}},{"value":"ESOP","order":1,"name":"conference_acronym","label":"Conference Acronym","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"European Symposium on Programming","order":2,"name":"conference_name","label":"Conference Name","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"Luxembourg City","order":3,"name":"conference_city","label":"Conference City","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"Luxembourg","order":4,"name":"conference_country","label":"Conference Country","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"2024","order":5,"name":"conference_year","label":"Conference Year","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"6 April 2024","order":7,"name":"conference_start_date","label":"Conference Start Date","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"11 April 2024","order":8,"name":"conference_end_date","label":"Conference End Date","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"33","order":9,"name":"conference_number","label":"Conference Number","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"esop2024","order":10,"name":"conference_id","label":"Conference ID","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"https:\/\/etaps.org\/2024\/conferences\/esop\/","order":11,"name":"conference_url","label":"Conference URL","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"Double-blind","order":1,"name":"type","label":"Type","group":{"name":"ConfEventPeerReviewInformation","label":"Peer Review Information (provided by the conference organizers)"}},{"value":"EasyChair","order":2,"name":"conference_management_system","label":"Conference Management System","group":{"name":"ConfEventPeerReviewInformation","label":"Peer Review Information (provided by the conference organizers)"}},{"value":"72","order":3,"name":"number_of_submissions_sent_for_review","label":"Number of Submissions Sent for Review","group":{"name":"ConfEventPeerReviewInformation","label":"Peer Review Information (provided by the conference organizers)"}},{"value":"25","order":4,"name":"number_of_full_papers_accepted","label":"Number of Full Papers Accepted","group":{"name":"ConfEventPeerReviewInformation","label":"Peer Review Information (provided by the conference organizers)"}},{"value":"1","order":5,"name":"number_of_short_papers_accepted","label":"Number of Short Papers Accepted","group":{"name":"ConfEventPeerReviewInformation","label":"Peer Review Information (provided by the conference organizers)"}},{"value":"35% - The value is computed by the equation \"Number of Full Papers Accepted \/ Number of Submissions Sent for Review * 100\" and then rounded to a whole number.","order":6,"name":"acceptance_rate_of_full_papers","label":"Acceptance Rate of Full Papers","group":{"name":"ConfEventPeerReviewInformation","label":"Peer Review Information (provided by the conference organizers)"}},{"value":"3.2","order":7,"name":"average_number_of_reviews_per_paper","label":"Average Number of Reviews per Paper","group":{"name":"ConfEventPeerReviewInformation","label":"Peer Review Information (provided by the conference organizers)"}},{"value":"8","order":8,"name":"average_number_of_papers_per_reviewer","label":"Average Number of Papers per Reviewer","group":{"name":"ConfEventPeerReviewInformation","label":"Peer Review Information (provided by the conference organizers)"}},{"value":"Yes","order":9,"name":"external_reviewers_involved","label":"External Reviewers Involved","group":{"name":"ConfEventPeerReviewInformation","label":"Peer Review Information (provided by the conference organizers)"}},{"value":"The proceedings also contain 4 artifact report that have not been part of the original submission","order":10,"name":"additional_info_on_review_process","label":"Additional Info on Review Process","group":{"name":"ConfEventPeerReviewInformation","label":"Peer Review Information (provided by the conference organizers)"}}]}}