

Inductive Logic Programming: Techniques and Applications (1994) [pdf] - beshrkayali
http://www-ai.ijs.si/SasoDzeroski/ILPBook/ILPbook.pdf

======
vmorgulis
About Prolog and Expert Systems, I recently discovered rule-based programming.

It is used in text mode games ([http://eblong.com/zarf/essays/rule-based-
if/index.html](http://eblong.com/zarf/essays/rule-based-if/index.html)).

~~~
beshrkayali
Haven't heard of Inform 7 before! Looks pretty interesting! Thank you for
sharing.

~~~
vmorgulis
You're welcome.

I like the properties of "flat structures" (like in state machines, pipes or
even IFTTT). They can be journalized, visualized as matrices or optimized
easily.

------
nickpsecurity
I'm sure it's an interesting book. My experience with logic programming,
though, is that functional or high-level imperative programming are just
easier to do real-world apps with. Anyone wanting to take a stab at logic
programming might want to try Mercury [1], the most practical one. A common
approach from AI days was implementing Prolog in a more complete language
where you could use either depending on benefits. Allegro CL does this [2].

[1]
[https://en.wikipedia.org/wiki/Mercury_%28programming_languag...](https://en.wikipedia.org/wiki/Mercury_%28programming_language%29)

[2] [http://franz.com/products/allegro-common-
lisp/acl_prolog.lht...](http://franz.com/products/allegro-common-
lisp/acl_prolog.lhtml)

~~~
abecedarius
This is about machine learning, only instead of inducing things like neural
network weights, it's inducing a logic program. I get the impression most of
the work in this field gets called 'program synthesis' these days, though I
haven't kept up.

~~~
nickpsecurity
Ahh, the parts I read make more sense now that you told me the goal. I did do
work in program synthesis, although we called it "automatic programming." Best
of it is in ASIC development right now. I'm keeping this just because you said
that. Might help someone working in the field who asks what resources I have
on that topic.

~~~
vmorgulis
There is "sketching". The idea is to write a partial program and use wildcards
for the parts you are not sure of. For example, you can replace values on
loops by a "%". The tool try to find the best program for a given input.

[https://bitbucket.org/gatoatigrado/sketch-
frontend/wiki/Tuto...](https://bitbucket.org/gatoatigrado/sketch-
frontend/wiki/Tutorial)

Superoptimisation is also related to program synthesis. It's a fascinating
subject.

Peter Norvig did a talk about what we can expect with that.

~~~
nickpsecurity
That's awesome stuff! Thanks for the link. I'll have to do some more research
on this stuff.

~~~
vmorgulis
I like that too :-)

About superotimisation, the most visible person is John Regehr. He works with
LLVM with his students.

[http://blog.regehr.org/archives/1246](http://blog.regehr.org/archives/1246)

~~~
nickpsecurity
I'll keep an archive of that just in case. The approach described doesn't seem
right, though. My old AI work suggested the best approach to this problem _may
be_ combination of these: patterns for common design specs and their
implementations; constraints and constraint solving techniques for narrowing
things down; heuristics for optimizations and unusual implementation
situations. You give bare-bones of the design with some declarations about
calling-convention, safety, ranges, data structures, and so on. The software
fills in the blanks.

Easier to describe than to do. Yet, there are already tool-sets that auto-
generate a lot of code and you could say functional language compilers do that
to a large degree. Could start with them and just add smarts/constraints. I'm
sure there's people doing that right now somewhere.

