+ | `Type ->
+ (match t1 with
+ | Cic.Lambda (Cic.Name arg, s, t) ->
+ (match analyze_type [] s with
+ | `Optimize ->
+ "let " ^ ppid name ^ "__1 = function " ^ ppid arg
+ ^ " -> .< " ^ pp ~in_type:false t [Some (Cic.Name arg, Cic.Decl s)]
+ ^ " >. ;;\n"
+ ^ "let " ^ ppid name ^ "__2 = ref ([] : (unit*unit) list);;\n"
+ ^ "let " ^ ppid name ^ " = function " ^ ppid arg
+ ^ " -> (try ignore (List.assoc "^ppid arg^"(Obj.magic !"^ppid name
+ ^"__2)) with Not_found -> "^ppid name^"__2 := ("
+ ^ ppid arg^",Obj.magic (.! ("^ppid name^"__1 "^ppid arg^")))::!"
+ ^ppid name^"__2); .< List.assoc "^ppid arg^" (Obj.magic (!"
+ ^ppid name^"__2) >.\n"
+ | _ ->
+ "let " ^ ppid name ^ " =\n" ^ pp ~in_type:false t1 [] ^ "\n")
+ | _ -> "let " ^ ppid name ^ " =\n" ^ pp ~in_type:false t1 [] ^ "\n")