I’m rewriting a Reasoning System
using Julia. The system has many rules written in Prolog
, I want to use these existing prolog rules, because they are declarative and could make the whole system easy to debug it’s control mechanism without care much about its reasoning
process.
1 Like
In theory.
2 Likes
Sounds like a warning (or a play of words).
yeah, the reasoning system does syllogism.
It has some rules like:
# two premises, one or more conclusions.
{M --> P, S --> M} |- S --> P # deduction
{S --> M, M --> P} |- S --> P, P --> S, P <-> S # exemplification
{S --> M, P --> M} |- (&,S,P) --> M
# translate into prolog style
infer(inheritance(S,M), inheritance(M,P), inheritance(S,P)).
I’m trying to replace Julog.jl
with Metatheory.jl
in the system that I’m rewritting in Julia
.
Well, I think this might be over my head.
Experiment:
abstract type MyTerm end
struct Inheritance <: MyTerm
comps::Vector{MyTerm}
end
struct Similarity <: MyTerm
comps::Vector{MyTerm}
end
struct Word <: MyTerm
sym::Symbol
end
inheritance(a, b) = Inheritance([Word(a), Word(b)])
similarity(a, b) = Similarity([Word(a), Word(b)])
syllogism = @theory S M P begin
inheritance(S, M) + inheritance(M, P) => inheritance(S, P)
inheritance(S, M) + inheritance(M, P) => Inheritance([Word(P), Word(S)]);
inheritance(S, M) + inheritance(M, P) => Similarity([Word(S), Word(P)]);
# prolog-like
infer(inheritance(S, M), inheritance(M, P)) --> similarity(P, S);
# more rules ...
end
rewrite(:(inheritance(s, m) + inheritance(m, p)), syllogism)
Great! But it seems only rewrite once.
julia> rewrite(:(inheritance(s, m) + inheritance(m, p)), syllogism)
Inheritance(MyTerm[Word(:s), Word(:p)])
I need to learn more about Metatheory.jl
!
You might be interested in this package:
1 Like
Yes,I’m using it in current project. Thx!
1 Like