Contains a number of experiments to implement program synthesis, and thus by extension reasoning, in MeTTa.
-
synthesize-via-type-checking.metta
: experiment to implement a synthesizer from scratch attempting to use the type checker to check the validity of combinations. -
synthesize-via-superpose.metta
: experiment similar tosynthesize-via-type-checking.metta
but simplified by using superposition. It fails because the type checker is static. -
unify-via-let.metta
: experiment to demonstrate that full syntactic unification can be achieved with thelet
operator. -
unify-via-case.metta
: same asunify-via-let.metta
but it usescase
instead oflet
. -
non-determinism.metta
: experiment with non-determinism. -
synthesize-via-let.metta
: experiment to demonstrate that program synthesis can be achieved by combining unification vialet
and non-determinism. -
synthesize-via-let-test.metta
: contains a dozen+ tests of program synthesis via let. It shows that forward chaining, backward chaining, type inference and more can be accomplished with this simple technique. -
synthesize-via-case.metta
: same assynthesize-via-let.metta
but it usescase
instead oflet
. The advantage is that it ignores branches that are not fully reduced. -
synthesize-via-case-test.metta
: same assynthesize-via-let-test.metta
but it usescase
instead oflet
. -
synthesize-via-unify.metta
: same assynthesize-via-let.metta
, but it usesunify
/unify*
instead oflet
/let*
. It ignores branches that are not fully reduced, however it is slower thansynthesize-via-case.metta
. -
synthesize-via-unify-test.metta
: same assynthesize-via-let-test.metta
but it is based onunify
instead oflet
. It currently does not work due to that issue. -
self-contained-synthesize.metta
: Self-contained version ofsythesize-via-case.metta
andsynthesize-via-case-test.metta
, for demonstration purposes.