Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to main content

A Preliminary Type- and Control-Flow Analysis for System F\(_\omega \)

  • Conference paper
  • First Online:
Trends in Functional Programming (TFP 2024)

Part of the book series: Lecture Notes in Computer Science ((LNCS,volume 14843))

Included in the following conference series:

  • 66 Accesses

Abstract

A type- and control-flow analysis is a program analysis that yields both type-flow information, approximating the types that may instantiate type variables, and control-flow information, approximating the values (especially \(\lambda \)- and \(\varLambda \)-expressions) that may be bound to variables. Moreover, each of the flows informs the other; control-flow establishes the types that may instantiate \(\varLambda \)-bound type variables by determining the \(\varLambda \)-expressions that flow to a type-application expression, while type-flow filters control-flow by rejecting the flow of values having static types that are incompatible (according to the type-flow information) with the static type of the receiving variable.

In previous work [1, 13, 14], we introduced a (monovariant) type- and control-flow analysis for System F (with recursion). While System F has an expressive type system and has served as a useful core calculus in which to express interesting language features, it only allows abstraction over types and does not allow abstraction over type constructors. Increasingly, researchers are looking at System F\(_\omega \), with both term- and type-level abstraction over types of arbitrary kind, as a core calculus in which to explore advanced language features. Hence, we are motivated to define a type- and control-flow analysis for System F\(_\omega \) that is able to analyze the rich structure of System F\(_\omega \) types.

In this work, we present a preliminary type- and control-flow analysis for System F\(_\omega \) (with recursion). As in previous work, we give both a specification-based formulation of the analysis, used to prove soundness of the analysis, and a flow-graph-based formulation, used to guide the implementation of an algorithm. While the macro structure of the development for System F\(_\omega \) follows that for System F, moving to System F\(_\omega \) introduces subtle challenges that have left some unanswered questions about the meta-theory. In particular, the decidability of type compatibility defined in terms of System F\(_\omega \)’s definitional type equivalence remains an open question. In order to be computable, our flow-graph-based formulation uses a restricted form of definitional type equivalence and performs a 0CFA at the type-level, yielding an analysis result that is less precise than the “best” (but as of yet, uncomputable) analysis result accepted by the specification-based formulation. Our soundness results have been formalized in the Coq proof assistant.

This work is based in part on the first author’s MS thesis [53].

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

Access this chapter

Subscribe and save

Springer+ Basic
$34.99 /Month
  • Get 10 units per month
  • Download Article/Chapter or eBook
  • 1 Unit = 1 Article or 1 Chapter
  • Cancel anytime
Subscribe now

Buy Now

Chapter
USD 29.95
Price excludes VAT (USA)
  • Available as PDF
  • Read on any device
  • Instant download
  • Own it forever
eBook
USD 109.99
Price excludes VAT (USA)
  • Available as EPUB and PDF
  • Read on any device
  • Instant download
  • Own it forever
Softcover Book
USD 129.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

Institutional subscriptions

Similar content being viewed by others

Notes

  1. 1.

    In a richer language, abstract values would not necessarily correspond exactly to syntactic values. For example, in a language with integer values, the abstract analogue of an integer value might be a token \(\widehat{\textsf{int}}\) or a subset of \(\{\mathsf {-},\textsf{0},\mathsf {+}\}\) (powerset sign domain) or an interval (interval domain). But, the abstract analogue of a function or type abstraction would typically be the syntax of the function or type abstraction.

  2. 2.

    This abstraction function is “shallow” in the sense that it does not abstract and join the embedded run-time environments of run-time types and run-time values.

  3. 3.

    This is a critical difference compared to our previous TCFA for System F [13]. In that work, type compatibility simply required the two type variables to expand to fully closed elaborated types that are syntactically equal.

  4. 4.

    Interestingly, the guard in the rule is not redundant. In a well-typed program, the elaborated type of v must be definitionally type equivalent to the elaborated type of \(`a_x\) and, therefore, it appears that \(\textsf{TyOf}(v)\) and must be compatible. However, suppose that this binding occurs in the body of a and that the elaborated types of v and use . If the type abstraction is never applied, then an acceptable abstract environment can have and there will be no fully-closed elaborated types to which \(\textsf{TyOf}(v)\) and expand and  will not be derivable. Thus, we indirectly achieve a weak form of reachability. This occurs with \(\textsf{t03}\) and \(\textsf{t05}\) in Table 2.

References

  1. Adsit, C., Fluet, M.: An efficient type- and control-flow analysis for System F. In: Tobin-Hochstadt, S. (ed.) IFL 2014: Proceedings of the 26nd International Symposium on Implementation and Application of Functional Languages. Association for Computing Machinery, Boston, MA, USA (2014)

    Google Scholar 

  2. Aiken, A., Murphy, B.R.: Implementing regular tree expressions. In: Hughes, J. (ed.) FPCA 1991. LNCS, vol. 523, pp. 427–447. Springer, Heidelberg (1991). https://doi.org/10.1007/3540543961_21

    Chapter  MATH  Google Scholar 

  3. Ashley, J.M., Dybvig, R.K.: A practical and flexible flow analysis for higher-order languages. ACM Trans. Program. Lang. Syst. 20(4), 845–868 (1998)

    Article  MATH  Google Scholar 

  4. Bergstrom, L., Fluet, M., Le, M., Reppy, J., Sandler, N.: Practical and effective higher-order optimizations. In: Chakravarty, M. (ed.) ICFP 2014: Proceedings of the 19th ACM SIGPLAN International Conference on Functional Programming, pp. 81–93. ACM, Gothenburg, Sweden (2014)

    Google Scholar 

  5. Cai, Y., Giarrusso, P.G., Ostermann, K.: System F-Omega with equirecursive types for datatype-generic programming. In: Majumdar, R. (ed.) POPL 2016: Proceedings of the 43rd Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, pp. 30–43. Association for Computing Machinery, St. Petersburg, FL, USA (2016)

    Google Scholar 

  6. Cejtin, H., Jagannathan, S., Weeks, S.: Flow-directed closure conversion for typed languages. In: Smolka, G. (ed.) ESOP 2000. LNCS, vol. 1782, pp. 56–71. Springer, Heidelberg (2000). https://doi.org/10.1007/3-540-46425-5_4

    Chapter  MATH  Google Scholar 

  7. Contractor, M.R., Fluet, M.: Type- and control-flow directed defunctionalization. In: Chitil, O. (ed.) IFL 2020: Proceedings of the 32nd Symposium on Implementation and Application of Functional Languages. Association for Computing Machinery, Canterbury, United Kingdom / virtual (2021)

    Google Scholar 

  8. Coq Development Team: Coq proof assistant (2024). https://doi.org/10.5281/zenodo.11551307

  9. Coq-std++ Team: Coq-std++: an extended “standard library” for Coq (2024). https://gitlab.mpi-sws.org/iris/stdpp

  10. Cousot, P., Cousot, R.: Compositional and inductive semantic definitions in fixpoint, equational, constraint, closure-condition, rule-based and game-theoretic form. In: Wolper, P. (ed.) CAV 1995. LNCS, vol. 939, pp. 293–308. Springer, Heidelberg (1995). https://doi.org/10.1007/3-540-60045-0_58

    Chapter  MATH  Google Scholar 

  11. de Bruijn, N.: Lambda calculus notation with nameless dummies, a tool for automatic formula manipulation, with application to the Church-Rosser theorem. Indagationes Mathematicae (Proceedings) 75(5), 381–392 (1972). https://doi.org/10.1016/1385-7258(72)90034-0, https://www.sciencedirect.com/science/article/pii/1385725872900340

  12. Flanagan, C., Sabry, A., Duba, B.F., Felleisen, M.: The essence of compiling with continuations. In: Cartwright, R. (ed.) PLDI 1993: Proceedings of the ACM SIGPLAN 1993 Conference on Programming Languages Design and Implementation, pp. 237–247. ACM, Albuquerque, New Mexico (1993)

    Google Scholar 

  13. Fluet, M.: A type- and control-flow analysis for System F. In: Hinze, R. (ed.) IFL 2012. LNCS, vol. 8241, pp. 122–139. Springer, Heidelberg (2013). https://doi.org/10.1007/978-3-642-41582-1_8

    Chapter  MATH  Google Scholar 

  14. Fluet, M.: A type- and control-flow analysis for System F. Tech. rep., Rochester Institute of Technology (2013). https://ritdml.rit.edu/handle/1850/15920

  15. Fluet, M.: A preliminary type- and control-flow analysis for System F\(_\omega \) (Coq mechanization) (2024). https://doi.org/10.5281/zenodo.11583328, https://www.cs.rit.edu/~mtf/research/tcfa/TFP24/coq_tcfa_sysfw.tgz

  16. Gasser, K.L.S., Nielson, F., Nielson, H.R.: Systematic realisation of control flow analyses for CML. In: Tofte, M. (ed.) ICFP 1997: Proceedings of the Second ACM SIGPLAN International Conference on Functional Programming, pp. 38–51. Association for Computing Machinery, Amsterdam, The Netherlands (1997)

    Google Scholar 

  17. Gecseg, F., Steinby, M.: Tree Automata. Akademiai Kiado, Budapest, Hungary (1984)

    MATH  Google Scholar 

  18. Girard, J.Y.: Une extension de l’interpretation de Gödel à l’analyse, et son application à l’élimination des coupures dans l’analyse et la théorie des types. In: Fenstad, J.E. (ed.) Proceedings of the 2nd Scandinavian Logic Symposium. Studies in Logic and the Foundations of Mathematics, vol. 63, pp. 63–92. Elsevier, Amsterdam, Netherlands (1971)

    Google Scholar 

  19. Harper, R.: Higher Kinds, chap. 18. In: Harper [20] (2016)

    Google Scholar 

  20. Harper, R.: Practical Foundations for Programming Languages, 2nd edn. Cambridge University Press (2016)

    Google Scholar 

  21. Harper, R.: System F of Polymorphic Types, chap. 16. In: Harper [20] (2016)

    Google Scholar 

  22. Harper, R., Morrisett, G.: Compiling polymorphism using intensional type analysis. In: Lee [27], pp. 130–141

    Google Scholar 

  23. Heintze, N., McAllester, D.: On the cubic bottleneck in subtyping and flow analysis. In: Winskel, G. (ed.) Proceedings of the 12th Annual IEEE Symposium on Logic in Computer Science (LICS 1997), pp. 342–351. Warsaw, Poland (1997)

    Google Scholar 

  24. Hoang, T., Trunov, A., Lampropoulos, L., Sergey, I.: Random testing of a higher-order blockchain language (experience report). Proc. ACM on Program. Lang. 6(ICFP) (2022). https://doi.org/10.1145/3547653

  25. Jagannathan, S., Weeks, S.: A unified treatment of flow analysis in higher-order languages. In: Lee [27], pp. 393–407

    Google Scholar 

  26. Jones, N.D.: Flow analysis of lambda expressions. In: Even, S., Kariv, O. (eds.) ICALP 1981. LNCS, vol. 115, pp. 114–128. Springer, Heidelberg (1981). https://doi.org/10.1007/3-540-10843-2_10

    Chapter  MATH  Google Scholar 

  27. Lee, P. (ed.): POPL 1995: Proceedings of the 22nd Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages. Association for Computing Machinery, San Francisco, California (1995)

    Google Scholar 

  28. Midtgaard, J.: Control-flow analysis of functional programs. ACM Comput. Surv. 44(3), 10:1–10:33 (2012)

    Google Scholar 

  29. Might, M., Shivers, O.: Environmental analysis via \(\Delta \)CFA. In: Peyton Jones, S. (ed.) POPL 2006: Proceedings of the 33rd Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, pp. 127–140. Association for Computing Machinery, Charleston, South Carolina (2006)

    Google Scholar 

  30. Mishra, P., Reddy, U.S.: Declaration-free type checking. In: Van Deusen, M.S., Galil, Z., Reid, B.K. (eds.) POPL 1885: Proceedings of the Twelfth Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, pp. 7–21. ACM, ACM, New Orleans, Louisiana (1985)

    Google Scholar 

  31. Morrisett, G., Harper, R.: Semantics of memory management for polymorphic languages. In: Gordon, A.D., Pitts, A.M. (eds.) Higher-Order Operational Techniques in Semantics, pp. 175–226. Publications of the Newton Institute, Cambridge University Press (1998)

    MATH  Google Scholar 

  32. Nielson, F., Nielson, H.R.: Infinitary control flow analysis: a collecting semantics for closure analysis. In: Jones, N.D. (ed.) POPL 1997: Proceedings of the 24th Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, pp. 332–345. Association for Computing Machinery, Paris, France (1997)

    Google Scholar 

  33. Nielson, F., Nielson, H.R.: Interprocedural control flow analysis. In: Swierstra, S.D. (ed.) ESOP 1999. LNCS, vol. 1576, pp. 20–39. Springer, Heidelberg (1999). https://doi.org/10.1007/3-540-49099-X_3

    Chapter  MATH  Google Scholar 

  34. Nielson, F., Nielson, H.R., Hankin, C.: Principles of Program Analysis. Springer-Verlag (1999). https://doi.org/10.1007/978-3-662-03811-6

  35. Nielson, H.R., Nielson, F.: Flow logics for constraint based analysis. In: Koskimies, K. (ed.) CC 1998. LNCS, vol. 1383, pp. 109–127. Springer, Heidelberg (1998). https://doi.org/10.1007/BFb0026426

    Chapter  MATH  Google Scholar 

  36. Jones, S.L.P.: Compiling Haskell by program transformation: a report from the trenches. In: Nielson, H.R. (ed.) ESOP 1996. LNCS, vol. 1058, pp. 18–44. Springer, Heidelberg (1996). https://doi.org/10.1007/3-540-61055-3_27

    Chapter  MATH  Google Scholar 

  37. Pierce, B.C.: Higher-Order Polymorphism, chap. 30. In: Pierce [38] (2002)

    Google Scholar 

  38. Pierce, B.C.: Types and Programming Languages. The MIT Press (2002)

    Google Scholar 

  39. Pierce, B.C.: Universal Types, chap. 23. In: Pierce [38] (2002)

    Google Scholar 

  40. Pottier, F.: A typed store-passing translation for general references. In: Sagiv, M. (ed.) POPL 2011: Proceedings of the 38th Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, pp. 147–158. Association for Computing Machinery, London, United Kingdom (2011)

    Google Scholar 

  41. Reppy, J., Xiao, Y.: Specialization of CML message-passing primitives. In: Felleisen, M. (ed.) POPL 2007: Proceedings of the 34th Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, pp. 315–326. Association for Computing Machinery, Nice, France (2007)

    Google Scholar 

  42. Reynolds, J.C.: Towards a theory of type structure. In: Robinet, B. (ed.) Programming Symposium. LNCS, vol. 19, pp. 408–425. Springer, Heidelberg (1974). https://doi.org/10.1007/3-540-06859-7_148

    Chapter  MATH  Google Scholar 

  43. Rossberg, A.: 1ML – core and modules united (F-ing first-class modules). In: Reppy, J. (ed.) ICFP 2015: Proceedings of the 20th ACM SIGPLAN International Conference on Functional Programming, pp. 35–47. ACM, Vancouver, BC, Canada (2015)

    Google Scholar 

  44. Rossberg, A.: 1ML - core and modules united. J. Funct. Program. 28, e22 (2018)

    Article  MathSciNet  MATH  Google Scholar 

  45. Rossberg, A., Russo, C., Dreyer, D.: F-ing modules. In: Benton, N. (ed.) TLDI 2010: Proceedings of the Fifth ACM SIGPLAN Workshop on Types in Language Design and Implementation, pp. 89–102. Madrid, Spain (2010)

    Google Scholar 

  46. Serrano, M.: Control flow analysis: a functional languages compilation paradigm. In: George, K.M., Carroll, J., Oppenheim, D. (eds.) SAC 1995: Proceedings of the 1995 ACM Symposium on Applied Computing, pp. 118–122. Association for Computing Machinery, Nashville, Tennessee (Feb 1995)

    Google Scholar 

  47. Sestoft, P.: Replacing function parameters by global variables. In: Stoy, J.E. (ed.) FPCA 1989: Proceedings of the Fourth International Conference on Functional Programming Languages and Computer Architecture, pp. 39–53. Association for Computing Machinery, London, England (1989)

    Google Scholar 

  48. Shivers, O.: Control-flow analysis in Scheme. In: Schwartz, M.D. (ed.) PLDI 1988: Proceedings of the ACM SIGPLAN 1988 Conference on Programming Languages Design and Implementation, pp. 164–174. Association for Computing Machinery, Atlanta, Georgia (1988)

    Google Scholar 

  49. Shivers, O.: Control-flow analysis of higher-order languages or taming lambda. Ph.D. thesis, School of Computer Science, Carnegie Mellon University, Pittsburgh, Pennsylvania (1991), Technical Report CMU-CS-91-145

    Google Scholar 

  50. Stone, C.A.: Type definitions. In: Pierce, B.C. (ed.) Advanced Types and Programming Languages. The MIT Press (2005)

    Google Scholar 

  51. Tarditi, D., Morrisett, G., Cheng, P., Stone, C., Harper, R., Lee, P.: TIL: a type-directed optimizing compiler for ML. In: Fischer, C. (ed.) PLDI 1996: Proceedings of the ACM SIGPLAN 1996 Conference on Programming Languages Design and Implementation, pp. 181–192. ACM, Philadelphia, Pennsylvania (1996)

    Google Scholar 

  52. Wright, A.K., Felleisen, M.: A syntactic approach to type soundness. Inf. Comput. 115(1), 38–94 (1994)

    Article  MathSciNet  MATH  Google Scholar 

  53. Wu, D.: A type- and control-flow analysis for System F\(_\omega \). Master’s thesis, Rochester Institute of Technology, Rochester, NY (2023). https://www.proquest.com/docview/2884521850

Download references

Author information

Authors and Affiliations

Authors

Corresponding author

Correspondence to Matthew Fluet .

Editor information

Editors and Affiliations

Appendices

A Language

1.1 A.1 Additional Judgments

The various judgments given in Fig. 11 relate a program P to its constituent expressions, binds, right-hand-sides, values, bound expression variables, type expressions, type binds, type values, and bound type variables.

Fig. 11.
figure 11

Constituent Judgments

B Type System

Parallel Reduction and \(\boldsymbol{\mathfrak {a}}\)-Equivalence. Although the definitional-type-equivalence judgment suffices for defining the type system and the two formulations of type- and control-flow analysis for System F\(_\omega \), the meta-theory is greatly simplified by the introduction of a parallel reduction judgment (Fig. 12), which is a directed variant of definitional type equivalence. Parallel reduction is “one-way”, in the sense that an application of a function to an argument parallel reduces to the substitution, but not vice versa. Parallel reduction also requires that an indexed type variable only parallel reduces to itself (i.e., is not “up to \(\mathfrak {a}\)-equivalence”). To formally relate definitional type equivalence and parallel reduction, we introduce an explicit \(\mathfrak {a}\)-equivalence judgment (Fig. 12). The key property is that definitional type equivalence coincides with parallel reduction to \(\mathfrak {a}\)-equivalent reducts:

figure ka
Fig. 12.
figure 12

Elaborated Type Parallel Reduction and \(\mathfrak {a}\)-Equivalence

Typing Environments and Lookups. A typing environment (Fig. 13) records the index type variables and kinds of de Bruijn indices, maps type variables to an optional elaborated type and a kind, and maps expression variables to elaborated types. A entry corresponds to an abstract type variable, brought into scope by a , while an entry corresponds to a defined type variable, brought into scope by a , where is the elaboration of . Well-formedness of a typing environment ( ) requires that each elaborated type contained within is well-kinded (with kind \({\star }\) for an x : ‘q entry and with kind for an entry) with respect to the preceding typing environment, that the elaborated types of expression variables are locally closed (because expression variables are never bound within the body of a type-level function), and that all type variables are distinct. The requirement that all type variables are distinct, which is equivalent to a requirement that no introduced type variable shadows a type variable already in scope, ensures that no type-variable capture occurs when a defined type variable (whose elaborated type makes use of abstract type variables preceding it in the typing environment) is used after the abstract type variables are rebound (possibly with different kinds). For example, in the ill-formed typing environment , the type variable  is in scope, yet it’s elaborated type would be ill-kinded with respect to that typing environment.

Fig. 13.
figure 13

Typing Environments, de Bruinj-Index Lookups, Type-Variable Lookups, and Expression-Variable Lookups for ANF System F\(_\omega \)

We have judgments (Fig. 13) for looking up de Bruijn indices ( ), type variables ( ), and expression variables ( ) in a typing environment. Looking up a de Bruijn index i in requires finding the \(i^{{th}}\) entry of from the head (right) of the typing environment. One final subtlety is that the lookup of a defined type variable fails if it would transport a locally-open elaborated type across an entry. Again, this ensures that no capture, this time of a de Bruijn index, occurs. For example, in the well-formed typing environment , the type variable is in scope, yet it’s elaborated type  would be ill-kinded with respect to that typing environment. This is not restrictive; it simply requires one to \(\texttt{tlet}\)-bind de Bruijn-index type values within the body of the innermost type-level function for which they are needed.

Typing Rules (Figures 14, 15, 16, and 17)

Fig. 14.
figure 14

Type System for ANF System F\(_\omega \) (typing environments and elaborated types)

Fig. 15.
figure 15

Type System for ANF System F\(_\omega \) (type variables, type values, type binds, and type expressions)

Fig. 16.
figure 16

Type System for ANF System F\(_\omega \) (variables, values, right-hand sides, binds, and expressions)

Fig. 17.
figure 17

Type System for ANF System F\(_\omega \) (run-time type values, run-time values, run-time environments, stacks, and states)

C Specification-Based Formulation of TCFA

1.1 C.1 Auxiliary Judgments (Fig. 18)

Fig. 18.
figure 18

Specification-Based TCFA (auxiliary judgments)

D Example Flow Analyses

Table 2. Remaining flow-analysis results for the System F\(_\omega \) program given in Fig. 2b via 0CFA, specification-based TCFA, and flow-graph-based TCFA; partial results were given in Table 1

Rights and permissions

Reprints and permissions

Copyright information

© 2025 The Author(s), under exclusive license to Springer Nature Switzerland AG

About this paper

Check for updates. Verify currency and authenticity via CrossMark

Cite this paper

Wu, D., Fluet, M. (2025). A Preliminary Type- and Control-Flow Analysis for System F\(_\omega \). In: Hemann, J., Chang, S. (eds) Trends in Functional Programming. TFP 2024. Lecture Notes in Computer Science, vol 14843. Springer, Cham. https://doi.org/10.1007/978-3-031-74558-4_8

Download citation

  • DOI: https://doi.org/10.1007/978-3-031-74558-4_8

  • Published:

  • Publisher Name: Springer, Cham

  • Print ISBN: 978-3-031-74557-7

  • Online ISBN: 978-3-031-74558-4

  • eBook Packages: Computer ScienceComputer Science (R0)

Publish with us

Policies and ethics