-  is_pair(+X) is semidet
 - True if X is a pair.
 
-  pair(X:A, Y:B, Z:pair(A,B)) is det
 
-  dup(X:A, Y:pair(A,A)) is det
 
-  fst(X:pair(A,B), Y:A) is det
 
-  snd(X:pair(A,B), Y:B) is det
 
-  ffst(+P:pred(A,B), X:pair(A,C), Y:pair(B,C)) is det
 
-  ffst(+P:pred(A,B,S,S), X:pair(A,C), Y:pair(B,C), S1:S, S2:S) is det
 - Apply P to first element of pair. Two versions: one for normal use and
another for use in DCG goals.
 
-  fsnd(+P:pred(B,C), X:pair(A,B), Y:pair(A,C)) is det
 
-  fsnd(+P:pred(B,C,S,S), X:pair(A,B), Y:pair(A,C), S1:S, S2:S) is det
 - Apply P to second element of pair. Two versions: one for normal use and
another for use in DCG goals.
 
-  &(+F:pred(A,B), +G:pred(A,C), X:A, Y:pair(B,C)) is det
 - Apply F and G to X and pair results.
 
-  map_select_key_value(+P:pred(A,B), K:C, Y:B, L1:list(pair(C,A)), L2:list(pair(C,A))) is nondet
 - True when L2 is L1 with an element K-X removed, and P maps X to Y.
 
-  map_select_key_default_value(+P:pred(A,B), K:C, Z:B, Y:B, L1:list(pair(C,A)), L2:list(pair(C,A))) is det
 - If key K exists in pair list L1, extract value associated with it and apply P to get Y.
Otherwise unify default Z with Y.
 
-  select_key_value(K:C, Y:B, L1:list(pair(C,A)), L2:list(pair(C,A))) is nondet
 - True when L2 is L1 with an element K-Y removed.
 
-  select_key_default_value(K:C, Z:B, Y:B, L1:list(pair(C,A)), L2:list(pair(C,A))) is det
 - If key K exists in pair list L1, extract value Y associated with it.
Otherwise unify default Z with Y.
 
Undocumented predicates
The following predicates are exported, but not or incorrectly documented.
-  ffst(Arg1, Arg2, Arg3, Arg4, Arg5)
 
-  fsnd(Arg1, Arg2, Arg3, Arg4, Arg5)