I have completed successfully OpenCog build and now I am about to start my real project - Norm-Driven Software Development (NDSD):
1) formalization of law, norms, software industry best practices, software elements and components;
2) software generation (and maintenance) using formalized norms.
OpenCog is very appropriate for the first task (although I need yet to understand how to represent modalities (obligations, permissions) in PLN and rules), because it smoothly integrates logic/reasoning with representation of the real-world/commonsense knowledge (which is taken into account in almost any legal reasoning task).
However I am researching how to do the second task - I have only vague ideas how to do this generally or with OpenCog particularly. My idea is to create layers of repositories: one level can consist of UML style set of business classes, of view classes and services classes and another level is the syntax tree representation of the software code from which the final code can be read and sent for the compilation and production of deliverables.
I am still thinking how to do syntax tree manipulation in OpenCog and I just wanted to know are there floating some similar ideas around - not to rediscover already known things.
I am aware of MOSES and procedural knowledge representation (using Combo programs) but MOSES is program search using genetic programming and Combo is not industrial programming language.
I feel that extensive set of norms can create detailed enough specification (or put constraints on the search space) to speedup genetic search or even fully replace it.
I feel that there is need for the manipulation of procedural knowledge that is represented in the industrial programming languages because:
1) such knowledge can be reviewed and maintained by human beings (as the last resort);
2) already existing code should be included in such knowledge, maintained and the knowledge extraction from the existing code should be possible;
3) large parts of OpenCog is still written in the industrial programming language - therefore ability to work with industrial programming languages is necessary for the enabling self modification and self-understanding of the system.
Every program can be represented as abstract syntax tree and therefore I should start with enabling syntax tree manipulation in OpenCog...
Alex