the ideaExperimentation with different custom made programming languages related to theorem proving has been one of my interests for a long time. Why theorem proving? Because it seemed like a logical step towards AI. In a meanwhile, deep learning ANNs (artificial neural networks) took over the world, and it could be a good thing. Similarity between an ANN and a theorem prover is that the starting point and ending result are the same in both cases, but the process in between is different. ANN utilizes pretty obscure weighted graph connecting input and output while theorem proving (in cases I'm considering) utilizes potentially human readable set of constructive theorems that need to be combined to connect input to output.
The theorem proving is still an area of my interest, but with addition of one missing link that ANNs seem to do pretty well (or at least in some extent). ANNs use the nowdays-all-present deep learning techniques to automatically form the connections between input and output. Analogously, the link I'm trying to explore is an alternative to deep learning in a form of automated semi-axiom construction. Here, I'm making a distinction between
theorem proving and
semi-axiom construction. In theorem proving, axioms need to be manually fed into the system to be used in further automated theorem construction. In semi-axiom construction, I'm seeking for a way to automatically construct semi-axioms, with semi-axioms being both axioms or theorems.
Googling around the web about this process (in 2022) gives somewhat rare and specialized results, so the space for a progress may be opened. I believe that appropriate term for the process I'm trying to explore could be
"generalized theory synthesis". There are already some achievements on this process in a form of algorithm synthesis, and that is exactly direction I'm trying to head at, only applied also to theorems.
To finally explore the blurry cloud of theory synthesis and to see it in more focused features, the plan would be to fuse a selection of my existing languages, and present them in gradual form under the same language named Tricosm. The language should be applicable to theory synthesis, as well as to algorithm synthesis. In a simple example, from provided data:
input -> output
---------------
2 -> 4
4 -> 8
8 -> 16
16 -> 32
one of the generated theories (given that we already know how to handle integers and multiplication) would be:
input -> output
---------------
x -> 2 * x
implementationCo-rewrite takes an input file, an arbitrary metaprogram, and constructs an output file from the input file using the metaprogram. The metaprogram is actually a set of formulas similar to those in math science with the difference that the Co-rewrite formulas may transform not only math expressions, but also any kind of language expression.
It is possible to feed to Systelog a formula in a form of
f(program(input) -> output) -> program where function
program is being automatically constructed and returned by higher order function
f, provided that we know what
input -> output mappings hold.
The language goals are having minimal design, beginner friendly documentation, conveniently generating completely functional executable, multiplatform development environment, multiplatform runtime environment, and self hosting compiler.
progressIn this thread I plan to keep a log about the progress in programming the Systelog language for which I plan to be open sourced and hosted publicly on GitHub. Of course, I'd be delighted to hear any comments or to answer any questions in the same thread.
Project homepage is at :
https://github.com/contrast-zone/co-rewrite