-1

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?

false
  • 10,264
  • 13
  • 101
  • 209
Sion12 C
  • 3
  • 3
  • Does this answer your question? [How to express a transitive relationship](https://stackoverflow.com/questions/28614903/how-to-express-a-transitive-relationship) – Joe Mar 15 '22 at 11:11

1 Answers1

3

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.

Peter Ludemann
  • 985
  • 6
  • 8