Beginner Prolog, How to write transtive relation?

126 Views Asked by At

let say

bigger(elephant,buffalo).

bigger(buffalo,dog).

bigger(dog,cat).

bigger(X,Y) :-

what do i write here to establish, elephant is bigger than buffalo, buffalo is bigger than dog etc?

1

There are 1 best solutions below

1
Peter Ludemann On

First, you should separate the "bigger" facts from the "bigger_transitive" relation. (There are ways of avoiding this, but things are easier if you do this.)

Second, what is the definition of "bigger_transitive" in words? Here's a schema:

  • bigger_transitive(elephant,buffalo) is true if bigger(elephant,buffalo) is true
  • bigger_transitive(elephant,dog) is true if bigger(elephant,buffalo) is true and bigger(buffalo,dog) is true

Now, generalize rule #2:

  • bigger_transitive(elephant,dog) is true if bigger(elephant,Z) is true and bigger(Z,dog) is true

And generalize it more:

  • bigger_transitive(elephant,dog) is true if bigger(elephant,Z) is true and bigger_transitive(Z,dog) is true

And generalize it fully:

  • bigger_transitive(X,Y) is true if bigger(X,Z) is true and bigger_transitive(Z,Y) is true

Then, translate this "English" into Prolog.