sábado, 1 de marzo de 2014

AI Planning for Program Synthesis

Nota: Este post está en inglés, ya que es mi intención compartirlo en un curso sobre Planificación que estuve realizando, como parte de su evaluación.

Since January 13th, I had the opportunity to refresh and deepen my knowledge of Artificial Intelligence Planning, with an awesome course from The University of Edinburgh, through Coursera, by professors Austin Tate and Gerhard Wickler.

Edinburgh's: Artificial Intelligence Planning
Austin Tate and Gerhard Wickler
Coursera

It is now coming to an end, haven proved to be a challenging and fun experience. I particularly enjoyed implementing my own graphplan planner, albeit without mutex verifications. Other programming assignments were actually quite easy if one used Prolog, but none the less very fun!

One of the assignments (the Creative Challenge) was to come up with some application that benefits from planning techniques, or o particular technology for planning. I decided to take the first option and attempt to make a link between planning and my own work. I am currently working on formal semantics and program verification techniques.

A plan can be viewed as a sequence (or possibly a directed acyclic graph) of steps that takes an environment in a given initial state and transforms it in a way that it ends in a given final state. A program is actually a very similar concept. A program, particularly in imperative languages, is a series of steps needed to take a given input and produce a desired output. This input and output can be expressed in terms of conditions that express what things are true at the start and end of a program respectively. This precondition and postcondition together form the specification or contract for the program.

What if you only had the contract but not the program that implements it? A POP planner could be used to take the contract and expand it into several, more simple, tasks. A plan in which all steps are known to have a direct implementation would be the desired program (one that actually implements the proposed contract). A possible way of expanding tasks into simpler subtasks could be through Morgan & Vicker's refinement calculus. This planner would actually be like an automatization of the refinement process they proposed.

And maybe we could think of a crossover in the other direction. Some planning problems, as well as programs, are limited by resources. These resources might be spatial, temporal, for energy, etc. The logic of bunched implications of O'Hearn and Pym presents a framework for specifying resource dependant reasoning. Particularly, Reynold's separation logic allows reasoning with limited resources and exclusive ownership (mainly memory, but other applications are possible). This kind of reasoning could be exported to planners in order to treat with their own resource constraints. Separation logic has a very nice frame axiom that allows local reasoning, and fits perfectly with the analogous notion of a frame in knowledge representation. I have not found any reference for such a crossover, but I think it could definitely be investigated further.

And this was my small contribution and submission to the creative challenge. Thank you very much for reading! Hope you liked it. :)

No hay comentarios:

Publicar un comentario