First order logic and prologue
2 answers
I think you only mean the following:
mammal(X) :- dog(X).
mammal(X) :- cat(X).
insect(X) :- fly(X).
That is, a mammal is what is a dog or a cat. You must explicitly indicate the categories that belong to this category of mammals. The same goes for insects.
Combining this with your first-order boolean question, the first entries mammal
will read: for each X, where X is a dog, X is also a mammal (same for cat), etc.
+4
source to share
I expanded on @ Diego Sevilla's answer to include the original question about what an animal is and added execution.
% Your original facts dog(spot). cat(nyny). fly(harry). % @ Diego Sevilla predicates mammal(X) :- dog(X). mammal(X) :- cat(X). insect(X) :- fly(X). % Defining what an animal is - either insect or (;) mammal animal(X) :- insect(X) ; mammal(X). % Running it, to get the names of all animals ?- animal(X). X = harry ; X = spot ; X = nyny.
+4
source to share