% Figure 19.1  A definition of the problem of learning predicate has_daughter.


% Learning from family relations

% Background knowledge

backliteral( parent(X,Y),  [X,Y]).  % A background literal with vars. [X,Y]

backliteral( male(X), [X]).

backliteral( female(X), [X]).

prolog_predicate( parent(_,_)).     % Goal parent(_,_) executed directly by Prolog
prolog_predicate( male(_)).
prolog_predicate( female(_)).

parent( pam, bob).
parent( tom, bob).
parent( tom, liz).
parent( bob, ann).
parent( bob, pat).
parent( pat, jim).
parent( pat, eve).

female( pam).
male( tom).
male( bob).
female( liz).
female( ann).
female( pat).
male( jim).
female( eve).

% Positive examples

ex( has_daughter(tom)).       % Tom has a daughter
ex( has_daughter(bob)).
ex( has_daughter(pat)).

% Negative examples

nex( has_daughter(pam)).      % Pam doen't have a daughter
nex( has_daughter(jim)).

start_hyp( [ [has_daughter(X)] / [X] ] ).      % Starting hypothesis
