posted on 2017-03-14, 05:00authored byStevan Quenette
Software development
is generally thought of as a “forward problem”, where increments (revisions) of
software are developed, often iteratively, to satisfy requirements. However, a
dichotomy exists between “developing efficient” programs, and “efficiently
developing” programs. To “develop efficiently”, programmers may tend to
emphasise on program correctness over program run-time efficiency. As the
complexity of the problem domain and hardware increases, managing software
complexity, and consequently correctness, becomes increasingly difficult. To
“efficiently develop efficient programs” requires the ability to change flow
control and/or architecture whilst retaining the ability to prove its
correctness. Moreover, ideally these changes are automated, without requiring a
programmer to re-introduce optimisations lost by the language constructs used
to manage complexity.
To bridge this dichotomy we propose a new notion – that
software development is actually an “inverse problem”. By considering
increments as parameters to the inverse process, software development becomes
the endeavour to answer the question “which increments best satisfy the
requirements?” Software development as an inverse process has a compelling
property – the engineering process is mathematically described, underpinned by
inverse theory and inverse methods that are well understood. Specifically we
apply a formulation of inversion to software decomposition, where the approach
to software decomposition is determined by the act of parameterisation in the
inversion process. Further, seemingly fine-grained, stakeholder-specified features
are formally mapped to both the intended modularity (one side of the dichotomy)
and for example, the intended computations (the other side of the dichotomy).
We provide this mapping within the one semantic framework, which then permits
us to automate changes, shifting a program written on one side of the dichotomy
to the other. To achieve this, we model the development process as a Bayesian
inference, seeking to discover posterior variants given application data. This
is hence a contribution towards continuum rather than a logical or empirical
approach to reasoning about programs.
This work is a treatise of mathematical foundations of
programming languages given a formal inverse framing to software development. A
new monadic minimal machine – Variational Execution, provides the basis for the
one semantic framework. A new extension to a C-based programming language –
COMputational ASpectS (COMPASS) is given as both formal semantics and as a
tool.
History
Campus location
Australia
Principal supervisor
Yuan-Fang Li
Additional supervisor 1
David Abramson
Additional supervisor 2
Heinz Schmidt
Year of Award
2017
Department, School or Centre
Information Technology (Monash University Clayton)