name = 'father/2' slug = 'the father-child relation' description = '''\
father(X, Y)
: X
is the father of Y
.
?- father(thomas, william). true. ?- father(aleksander, X). X = luana ; X = daniela.
Family trees are
described with predicates parent/2
, male/1
, and
female/1
.
If X
is male and X
is parent to Y
,
then X
is a father of Y
.
Did you perhaps use a semicolon (that represents logical OR) instead of a comma (logical AND)?
''', 'or_instead_of_and_two_rules': '''\Did you perhaps write two rules: one for gender and one for parenthood? Be careful: this is understood as one or the other, not as one and the other!
''', 'x_must_be_male': '''\A father is usually male.
''', 'x_must_be_parent': '''\A father is supposed to have at least one child... so he's a parent of somebody.
''', 'y_can_be_of_any_gender': '''\Y
can be of any gender.
Y
doesn't need to have children...
It seems your predicate is always "false". Did you give it the correct name, or is it perhaps misspelled?
If the name is correct, check whether something else is misspelled, perhaps there is a full stop instead of a comma or vice versa, or maybe you typed a variable name in lowercase?
It is, of course, also possible that your conditions are too restrictive, or even impossible to satisfy
(as would be, for example, the condition that X
is both a parent and a sister of Y
, or
something similarly impossible).