module lists. type id list A -> list A -> o. type memb A -> list A -> o. type append list A -> list A -> list A -> o. id nil nil. id (X::L) (X::K) :- id L K. memb X (X::L). memb X (Y::L) :- memb X L. append nil K K. append (X::L) K (X::M) :- append L K M. type memb_and_rest A -> list A -> list A -> o. memb_and_rest X (X::L) L. memb_and_rest X (Y::K) (Y::L) :- memb_and_rest X K L.