# Functional Programming and Geometry

Guy Cousineau (Jussieu, France) LFCS Theory Seminar Room 2511, JCMB, King's Buildings 3pm, Monday 19th January 1998

This talk will describe my experience in teaching functional programming to mathematics students.

Teaching programming to mathematics students can be interresting in two respects. On one hand, it may help the students assimilate some mathematical concepts by putting them to practical use in programs. On the other hand, it gives an opportunity to stress that there are strong analogies between the design of programs and the design of proofs and that abstraction is equally useful in both domains.

To make this convincing, one needs a mathematical domain where abstraction is clearly useful and a programming language in which abstraction can be reflected easily so that the distance between mathematical theory and programming is short. I use ML as a programming language and geometry as the mathematical domain, specifically isometry groups and tilings. Once it is understood that a tiling is completely described by giving its pattern, its symmetry group and the geometrical interpretation of the group generators, it is quite straightforward to produce a generic program that takes precisely these three arguments and geometrical abstraction is directly reflected in the program. Moreover, it can be shown later than the program contains more abstraction than one could think. For instance, Hyperbolic tilings can be obtained instead of Euclidean tilings, by passing different groups and different interpretations to the same program.

ML polymorphism and/or ML module facility are the key concepts than can be used to reflect geometrical abstraction.