ABSTRACT
This paper presents some ideas concerning program manipulation and program transformation from the early days of their development. Particular emphasis will be given to program transformation techniques in the area of functional programming and constraint logic programming. We will also indicate current applications of program transformation techniques to the verification of program properties and program synthesis.
- Gregory R. Andrews. 1991. Concurrent Programming: Principles and Practice. Addison-Wesley. Google ScholarDigital Library
- Krzysztof R. Apt and Marc Bezem. 1990. Acyclic Programs. In Proceedings of the 7th International Conference on Logic Programming, Jerusalem, Israel, D.H.D. Warren and P. Szeredi (Eds.). MIT Press, 617–633. Google Scholar
- Krzysztof R. Apt and Roland N. Bol. 1994. Logic Programming and Negation: A Survey. Journal of Logic Programming, 19, 20 (1994), 9–71. Google ScholarCross Ref
- Jean-Michel Autebert, Jean Berstel, and Luc Boasson. 1997. Context-Free Languages and Pushdown Automata. In Handbook of Formal Languages, G. Rozenberg and A. Salomaa (Eds.). 1, Springer-Verlag, Berlin. 111–174. Google Scholar
- John Backus. 1978. Can Programming Be Liberated from the von Neumann Style? A Functional Style and Its Algebra of Programs. Commun. ACM, 21, 8 (1978), 613–641. Google ScholarDigital Library
- Friedrich L. Bauer and Hans Wössner. 1982. Algorithmic Language and Program Development. Textbook. Springer-Verlag. https://doi.org/10.1007/978-3-642-61807-9 Google ScholarCross Ref
- Richard S. Bird. 1984. Using Circular Programs to Eliminate Multiple Traversal of Data. Acta Informatica, 21 (1984), 239–250. https://doi.org/10.1007/BF00264249 Google ScholarDigital Library
- 1988. Proc. of the IFIP TC2 Workshop on Partial Evaluation and Mixed Computation, Gammel Avernæ s, Denmark, 18–24 October, 1987, Dines Bjørner, Andrei P. Ershov, and Neil D. Jones (Eds.). North-Holland. https://api.semanticscholar.org/CorpusID:60411574 Google Scholar
- Rod M. Burstall and J. Darlington. 1977. A Transformation System for Developing Recursive Programs. Journal of the ACM, 24, 1 (1977), January, 44–67. https://doi.org/10.1145/321992.321996 Google ScholarDigital Library
- Wei-Ngan Chin. 1993. Towards an Automated Tupling Strategy. In Proceedings of the 1993 ACM SIGPLAN Symp. on Partial Evaluation and Semantics Based Program Manipulation, PEPM ’93, Copenhagen, Denmark, P. Hudak and N. D. Jones (Eds.). ACM Press, 119–132. Google ScholarDigital Library
- Edmund M. Clarke, Jr., Orna Grumberg, and Doron A. Peled. 1999. Model Checking. MIT Press. Google ScholarDigital Library
- P. Cousot and N. Halbwachs. 1978. Automatic Discovery of Linear Restraints among Variables of a Program. In Symposium on Principles of Programming Languages, 5th POPL ’78. ACM, 84–96. https://doi.org/10.1145/512760.512770 Google ScholarDigital Library
- 1996. Partial Evaluation, International Seminar, Dagstuhl Castle, Germany, Selected Papers, Olivier Danvy, Robert Glück, and Peter Thiemann (Eds.) (Lecture Notes in Computer Science, Vol. 1110). Springer. https://doi.org/10.1007/3-540-61580-6 Google ScholarCross Ref
- John Darlington. 1981. An Experimental Program Transformation System. Artificial Intelligence, 16 (1981), 1–46. https://doi.org/10.1016/0004-3702(81)90014-X Google ScholarDigital Library
- John Darlington and Rod M. Burstall. 1976. A System which Automatically Improves Programs. Acta Informatica, 6 (1976), 41–60. https://doi.org/10.1007/BF00263742 Google ScholarDigital Library
- Emanuele De Angelis, Fabio Fioravanti, John P. Gallagher, Manuel V. Hermenegildo, Alberto Pettorossi, and Maurizio Proietti. 2022. Analysis and Transformation of Constrained Horn Clauses for Program Verification. Theory and Practice of Logic Programming, 22, 6 (2022), 974–1042. https://doi.org/10.1017/S1471068421000211 Google ScholarCross Ref
- Emanuele De Angelis, Fabio Fioravanti, Alberto Pettorossi, and Maurizio Proietti. 2014. VeriMAP: A Tool for Verifying Programs through Transformations. In Tools and Algorithms for the Construction and Analysis of Systems, TACAS ’14 (Lecture Notes in Computer Science 8413). Springer, 568–574. https://doi.org/10.1007/978-3-642-54862-8_47 Google ScholarCross Ref
- Emanuele De Angelis, Fabio Fioravanti, Alberto Pettorossi, and Maurizio Proietti. 2022. Verifying Catamorphism-Based Contracts using Constrained Horn Clauses. Theory and Practice of Logic Programming, 22, 4 (2022), 555–572. https://doi.org/10.1017/S1471068422000175 Google ScholarCross Ref
- Emanuele De Angelis, Fabio Fioravanti, Alberto Pettorossi, and Maurizio Proietti. 2023. The transformation verification system VeriCaT. https://fmlab.unich.it/verimapwebgui/ Google Scholar
- Edsger W. Dijkstra. 1982. Selected Writing on Computing: A Personal Perspective. Springer-Verlag, New York, Heidelberg, Berlin. https://doi.org/10.1007/978-1-4612-5695-3 Google ScholarCross Ref
- Fabio Fioravanti, Alberto Pettorossi, and Maurizio Proietti. 2004. Transformation Rules for Locally Stratified Constraint Logic Programs. In Program Development in Computational Logic, K.-K. Lau and M. Bruynooghe (Eds.) (Lecture Notes in Computer Science 3049). Springer-Verlag, 291–339. https://doi.org/10.1007/978-3-540-25951-0_10 Google ScholarCross Ref
- Fabio Fioravanti, Alberto Pettorossi, Maurizio Proietti, and Valerio Senni. 2013. Generalization Strategies for the Verification of Infinite State Systems. Theory and Practice of Logic Programming. Special Issue on the 25th Annual GULP Conference, 13, 2 (2013), 175–199. https://doi.org/10.1017/S1471068411000627 Google ScholarCross Ref
- Fabio Fioravanti, Alberto Pettorossi, Maurizio Proietti, and Valerio Senni. 2013. Proving Theorems by Program Transformation. Fundamenta Informaticae, 127, 1–4 (2013), 115–134. https://doi.org/10.3233/FI-2013-899 Google ScholarCross Ref
- John P. Gallagher. 1993. Tutorial on Specialisation of Logic Programs. In Proceedings of the ACM SIGPLAN Symposium on Partial Evaluation and Semantics-Based Program Manipulation, PEPM’93, Copenhagen, Denmark, David A. Schmidt (Ed.). ACM, 88–98. https://doi.org/10.1145/154630.154640 Google ScholarDigital Library
- Sergey Grebenshchikov, Nuno P. Lopes, Corneliu Popeea, and Andrey Rybalchenko. 2012. Synthesizing software verifiers from proof rules. In 33rd ACM SIGPLAN Conf. Programming Language Design and Implementation, PLDI ’12. ACM, 405–416. https://doi.org/10.1145/2345156.2254112 Google ScholarDigital Library
- Hossein Hojjat and Philipp Rümmer. 2018. The ELDARICA Horn Solver. In Formal Methods in Computer Aided Design, FMCAD ’18. IEEE, 1–7. https://doi.org/10.23919/FMCAD.2018.8603013 Google ScholarCross Ref
- John E. Hopcroft and Jeffrey D. Ullman. 1979. Introduction to Automata Theory, Languages and Computation (Second ed.). Addison-Wesley. Google ScholarDigital Library
- R. John Muir Hughes. 1986. A novel representation of lists and its application to the function “reverse”. Info. Proc. Lett., 22 (1986), 141–144. https://doi.org/10.1016/0020-0190(86)90059-1 Google ScholarDigital Library
- Jesper Jørgensen, Michael Leuschel, and Bern Martens. 1997. Conjunctive Partial Deduction in Practice. In Logic Program Synthesis and Transformation, Proceedings of LOPSTR ’96, Stockholm, Sweden, J. Gallagher (Ed.) (Lecture Notes in Computer Science 1207). Springer-Verlag, Berlin. 59–82. Google Scholar
- Anvesh Komuravelli, Arie Gurfinkel, and Sagar Chaki. 2014. SMT-Based Model Checking for Recursive Programs. In 26th CAV ’14 (Lecture Notes in Computer Science 8559). Springer, 17–34. https://doi.org/10.1007/978-3-319-08867-9_2 Google ScholarDigital Library
- Robert A. Kowalski. 1974. Predicate Logic as a Programming Language. In Proceedings IFIP ’74. North-Holland, 569–574. Google Scholar
- John W. Lloyd. 1987. Foundations of Logic Programming (second ed.). Springer-Verlag, Berlin. https://doi.org/10.1007/978-3-642-83189-8 Google ScholarCross Ref
- Rüdiger G. K. Loos and Volker Weispfenning. 1993. Applying Linear Quantifier Elimination. Comput. J., 36, 5 (1993), 450–462. https://doi.org/10.1093/comjnl/36.5.450 Google ScholarCross Ref
- MAP. 1999. The MAP transformation system. http://www.iasi.cnr.it/~proietti/system.html Also available via a WEB interface from http://www.map.uniroma2.it/mapweb Google Scholar
- Robert Paige. 1997. Future Directions in Program Transformations. SIGPLAN Not., 32, 1 (1997), Jan, 94–98. issn:0362-1340 https://doi.org/10.1145/251595.251609 Google ScholarDigital Library
- Robert Paige and Shaye Koenig. 1982. Finite Differencing of Computable Expressions. ACM Transactions on Programming Languages and Systems, 4, 3 (1982), 402–454. Google ScholarDigital Library
- Helmuth Partsch and Peter Pepper. 1976. A Family of Rules for Recursion Removal. Inf. Process. Lett., 5, 6 (1976), 174–177. https://doi.org/10.1016/0020-0190(76)90015-6 Google ScholarCross Ref
- Michael S. Paterson and Carl E. Hewitt. 1970. Comparative Schematology. In Conference on Concurrent Systems and Parallel Computation Project MAC, Woods Hole, Mass., USA. 119–127. Google Scholar
- Alberto Pettorossi. 1985. Towers of Hanoi Problems: Deriving Iterative Solutions by Program Transformation. BIT, 25 (1985), 327–334. https://doi.org/10.1007/BF01934378 Google ScholarDigital Library
- Alberto Pettorossi and Rod M. Burstall. 1982. Deriving Very Efficient Algorithms for Evaluating Linear Recurrence Relations Using the Program Transformation Technique. Acta Informatica, 18 (1982), 181–206. https://doi.org/10.1007/BF00264438 Google ScholarDigital Library
- Alberto Pettorossi and Maurizio Proietti. 1988. Importing and Exporting Information in Program Development. In Partial Evaluation and Mixed Computation, Dines Bjørner, Andrei P. Ershov, and Neil D. Jones (Eds.). North-Holland, 405–425. Google Scholar
- Alberto Pettorossi and Maurizio Proietti. 2002. The List Introduction Strategy for the Derivation of Logic Programs. Formal Aspects of Computing, 13, 3-5 (2002), 233–251. https://doi.org/10.1007/s001650200011 Google ScholarDigital Library
- Alberto Pettorossi and Maurizio Proietti. 2002. Program Derivation = Rules + Strategies. In Computational Logic: Logic Programming and Beyond (Essays in honour of Bob Kowalski, Part I ), A. Kakas and F. Sadri (Eds.). Springer-Verlag, 273–309. https://doi.org/10.1007/3-540-45628-7_12 Google ScholarCross Ref
- Alberto Pettorossi and Maurizio Proietti. 2004. Transformations of Logic Programs with Goals as Arguments. Theory Pract. Log. Program., 4, 4 (2004), 495–537. https://doi.org/10.1017/S147106840400198X Google ScholarDigital Library
- Alberto Pettorossi and Andrzej Skowron. 1989. The Lambda Abstraction Strategy for Program Derivation. Fundamenta Informaticae, XII, 4 (1989), 541–561. Available on request to the authors. Google ScholarCross Ref
- Maurizio Proietti and Alberto Pettorossi. 1991. Semantics Preserving Transformation Rules for Prolog. In 1991 ACM SIGPLAN Symposium on Partial Evaluation and Semantics Based Program Manipulation, PEPM ’91, Yale University, New Haven, Connecticut, USA. ACM Press, 274–284. Google Scholar
- Teodor C. Przymusinski. 1988. On the Declarative Semantics of Stratified Deductive Databases and Logic Programs. In Foundations of Deductive Databases and Logic Programming, Jack Minker (Ed.). Morgan Kaufmann, 193–216. https://doi.org/10.1016/B978-0-934613-40-8.50009-9 Google ScholarCross Ref
- Taisuke Sato and Hisao Tamaki. 1984. Transformational Logic Program Synthesis. In Proceedings of the International Conference on Fifth Generation Computer Systems. ICOT, 195–201. Google Scholar
- William L. Scherlis. 1981. Program Improvement by Internal Specialization. In Proc. 8th ACM Symposium on Principles of Programming Languages, Williamsburgh, Va, USA. ACM Press, 41–49. Google ScholarDigital Library
- Hisao Tamaki and Taisuke Sato. 1984. Unfold/Fold Transformation of Logic Programs. In Proceedings of the Second International Conference on Logic Programming, ICLP ’84, S.-Å. Tärnlund (Ed.). Uppsala University, Uppsala, Sweden. 127–138. Google Scholar
- Valentin F. Turchin. 1986. The Concept of a Supercompiler. ACM Trans. Program. Lang. Syst., 8, 3 (1986), 292–325. https://doi.org/10.1145/5956.5957 Google ScholarDigital Library
- S. A. Walker and H. Raymond Strong. 1973. Characterizations of Flowchartable Recursions. J. Comput. Syst. Sci., 7, 4 (1973), 404–447. https://doi.org/10.1016/S0022-0000(73)80032-7 Google ScholarDigital Library
- Mitchell Wand. 1980. Continuation-based Program Transformation Strategies. Journal of the ACM, 27, 1 (1980), 164–180. Google ScholarDigital Library
- David H. D. Warren. 1977. Implementing Prolog – Compiling Predicate Logic Programs. Department of Artificial Intelligence, University of Edinburgh, Scotland. Google Scholar
- Hong Zhu. 1994. How Powerful Are Folding / Unfolding Transformations? Journal of Functional Programming, 4, 1 (1994), 89–112. https://doi.org/10.1017/S0956796800000964 Google ScholarCross Ref
Index Terms
- A Historical Perspective on Program Transformation and Recent Developments (Invited Contribution)
Recommendations
Proving Theorems by Program Transformation
To Andrzej Skowron on His 70th BirthdayIn this paper we present an overview of the unfold/fold proof method, a method for proving theorems about programs, based on program transformation. As a metalanguage for specifying programs and program properties we adopt constraint logic programming ...
Combining Program and Data Specialization
Program and data specialization have always been studied separately, although they are both aimed at processing early computations. Program specialization encodes the result of early computations into a new program; while data specialization encodes the ...
Combinatorially efficient exploration of program transformations for automatic programming
ICCOMP'05: Proceedings of the 9th WSEAS International Conference on ComputersProgram induction, where one or more parts of a potentially huge software system are automatically synthesized, is an emerging technology that will become more and more industrially useful as more computing power becomes available, for example in the ...
Comments