```Ocaml let rec insert_post x f = function | [] -> Failwith "x cannot be inserted" | e::t -> if f e then e::x::t else y::insert_post x f t;; val insert_post: 'a -> ('a -> bool) -> 'a list -> 'a list = let rec pos_max lst = let x = 1 in match lst with | [] -> invalid_arg "post_max: empty list" | e::[] -> x | e1::e2::t -> if e2 > e1 then begin x = x + 1; e2::pos_max t; end; else e1::pos_max t;; let pos_max lst = if lst = [] then failwith "pos_max: empty list" else let rec pmr mpos cpos = function | e::[] -> mpos | mval::e::t -> if e > mval then pmr cpos (cpos + 1) (e::t) else pmr mval mpos (cpos + 1) mval::t in pmr 1 1;; val pos_max lst = 'a list -> int = ```