This is syntactically correct - returns true when Person fulfills the criteria e.g. has a female sibling, aka a sister.
sister(Person) :-
female(Sister),
male(Father),
child(Father,Person),
child(Father,Sister),
female(Mother),
child(Mother, Person),
child(Mother, Sister).
You could use this to get all people who have a sister by doing this:
?- sister(X).
X = jana ;
X = christine ;
X = jana ;
X = christine ;
X = sabine ;
X = peter ;
false.
As you can see, a person can have more than one sister, also, actually as the predicate doesn't check if Person ans Sister are the same or not - every girl is considered to be her own sister (see the answer by @mat to solve this). And also, which didn't occur to me, guys can have sisters too...
Result provided by @Lester, so this is the real output.
To get what you want, you need to define it this way:
sisterOf(Person, Sister) :-
female(Sister),
male(Father),
child(Father,Person),
child(Father,Sister),
female(Mother),
child(Mother, Person),
child(Mother, Sister).
And run it like this:
?- sisterOf(jana,X).
X = jana ;
X = christine.
This seems weird, isn't it? But again, as we didn't check if Sister and Person are the same or not, every female is considered to be her own sister by the predicate.
Disclaimer: I have learnt prolog ~10 years ago and never used it, so I'm definitely not up to date. Also, I don't have a Prolog engine anywhere near I could access, so the initial results were the result of the Prolog interpreter hosted in my brain, and updated the answer with the real results from the comments.