data Author = <author>(String);
data Authors = Author+;
data Editors = <editor>(String)+;


f(<bib>(x)) = <bib>(g(x));
g($) = $;
g(<book>(t. a1 :: Author. a2 :: Author. as :: Authors.x :: <publisher>(String).y :: <price>(String)) . r) = 
   <book>(t. a1. a2. <etal> ) . g(r);
g(<book>(t. a :: (Author | Author . Author) . x :: <publisher>(String).y :: <price>(String)) . r) = 
   <book>(t. a) . g(r);
g(<book>(t. e :: Editors . x :: <publisher>(String) . y::<price>(String) ) . r) =
   g(r);

