= Solution
Extract the two recorded parents from every matching certificate, and use <duplicate removal> so that repeated certificates do not repeat an individual. This helper is shared by the remaining <Haskell> definitions:
``
unique :: Eq a => [a] -> [a]
unique [] = []
unique (x:xs) = x : unique [y | y <- xs, y /= x]
parents :: Database -> Person -> [Person]
parents db p = unique [q | (baby,mother,father) <- db,
baby == p, q <- [mother,father]]
``
A person need not have a certificate of their own to appear in the output: a parental field is already evidence of the relationship. The resulting <list> preserves first occurrence order, with mother before father in each certificate. Its <set> of entries is
$$
\boxed{\{m\mid(p,m,f)\in db\}\cup\{f\mid(p,m,f)\in db\}.}
$$
Back to article page