Turning Inductive into Equational Specifications

  • Stefan Berghofer
  • Lukas Bulwahn
  • Florian Haftmann
Part of the Lecture Notes in Computer Science book series (LNCS, volume 5674)


Inductively defined predicates are frequently used in formal specifications. Using the theorem prover Isabelle, we describe an approach to turn a class of systems of inductively defined predicates into a system of equations using data flow analysis; the translation is carried out inside the logic and resulting equations can be turned into functional program code in SML, OCaml or Haskell using the existing code generator of Isabelle. Thus we extend the scope of code generation in Isabelle from functional to functional-logic programs while leaving the trusted foundations of code generation itself intact.


Logic Programming Recursion Equation Proof Obligation Proof Assistant Mode Assignment 
These keywords were added by machine and not by the authors. This process is experimental and the keywords may be updated as the learning algorithm improves.


Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.


  1. 1.
    Berghofer, S., Nipkow, T.: Executing higher order logic. In: Callaghan, P., Luo, Z., McKinna, J., Pollack, R. (eds.) TYPES 2000. LNCS, vol. 2277, p. 24. Springer, Heidelberg (2002)CrossRefGoogle Scholar
  2. 2.
    Delahaye, D., Dubois, C., Étienne, J.F.: Extracting purely functional contents from logical inductive types. In: Schneider, K., Brandt, J. (eds.) TPHOLs 2007. LNCS, vol. 4732, pp. 70–85. Springer, Heidelberg (2007)CrossRefGoogle Scholar
  3. 3.
    Haftmann, F., Nipkow, T.: A code generator framework for Isabelle/HOL. Tech. Rep. 364/07, Department of Computer Science, University of Kaiserslautern (2007)Google Scholar
  4. 4.
    Hanus, M.: A unified computation model for functional and logic programming. In: Proc. 24th ACM Symposium on Principles of Programming Languages (POPL 1997), pp. 80–93 (1997)Google Scholar
  5. 5.
    Henrio, L., Kammüller, F.: A mechanized model of the theory of objects. In: Bonsangue, M.M., Johnsen, E.B. (eds.) FMOODS 2007. LNCS, vol. 4468, pp. 190–205. Springer, Heidelberg (2007)CrossRefGoogle Scholar
  6. 6.
    Mellish, C.S.: The automatic generation of mode declarations for prolog programs. Tech. Rep. 163, Department of Artificial Intelligence (1981)Google Scholar
  7. 7.
    Nipkow, T., von Oheimb, D., Pusch, C.: μJava: Embedding a programming language in a theorem prover. In: Bauer, F., Steinbrüggen, R. (eds.) Foundations of Secure Computation. Proc. Int. Summer School Marktoberdorf 1999, pp. 117–144. IOS Press, Amsterdam (2000)Google Scholar
  8. 8.
    Nipkow, T., Paulson, L.C., Wenzel, M.: Isabelle/HOL. LNCS, vol. 2283. Springer, Heidelberg (2002)zbMATHGoogle Scholar
  9. 9.
    Slind, K.: Reasoning about terminating functional programs. Ph.D. thesis, Institut für Informatik, TU München (1999)Google Scholar
  10. 10.
    Somogyi, Z., Henderson, F.J., Conway, T.C.: Mercury: an efficient purely declarative logic programming language. In: Proceedings of the Australian Computer Science Conference, pp. 499–512 (1995)Google Scholar
  11. 11.
    Wasserrab, D., Nipkow, T., Snelting, G., Tip, F.: An operational semantics and type safety proof for multiple inheritance in C++. In: OOPSLA 2006: Proceedings of the 21st annual ACM SIGPLAN conference on Object-oriented programming languages, systems, and applications, pp. 345–362. ACM Press, New York (2006)CrossRefGoogle Scholar

Copyright information

© Springer-Verlag Berlin Heidelberg 2009

Authors and Affiliations

  • Stefan Berghofer
    • 1
  • Lukas Bulwahn
    • 1
  • Florian Haftmann
    • 1
  1. 1.Institut für InformatikTechnische Universitüt MünchenGarchingGermany

Personalised recommendations