module My_module = struct

open Pack_concl;;

let concl_list = [GLTVHUM_concl;DUUNHOR_concl;QXSKIIT_concl] ;;

let module_assum = list_mk_conj concl_list;;

(*
frees module_assum;;
type_vars_in_term module_assum;;
*)

axioms();;

let my_assum =  new_definition (mk_eq (`(my_assum:(N#A->bool)) x`,module_assum));;
let my_thm = 
prove_by_refinement( `(my_assum ((@) UNIV)) ==> (!x y z. (x = y) ==> (y =x ))`,
(* {{{ proof *) [ REPEAT STRIP_TAC; ]);;
(* }}} *) let INTRO_THEN (axiom,concl) = FIRST_X_ASSUM (MATCH_MP axom ;; help "MATCH_MP";; INTRO_TAC (my_assum,GLTVHUM_concl);; let fold_binop f = function [] -> failwith "fold_binop" | [a] -> a | a::xs -> List.fold_left f a xs;; let make_assumption name concls = let concl = list_mk_conj concls in let _ = (frees concl = []) or (failwith "make_assumption: free vars") in let z = type_vars_in_term concl in let ty = if (List.length z =0) then `:bool` else let f a b = mk_type("prod",[a;b]) in let C = fold_binop f z in mk_type("fun",[C;`:bool`]) in ty;; mk_type("fun",[`:A`;`:B`]);; mk_type("prod",[`:A`;`:B`;`:C`]);; List.fold_left;; List.fold_right;; make_assumption "" [`T`];; concl_list;; help "mk_type";; dest_type `:A#B#C`;; mk_type ("prod",[`:A`;`:B`]);; help_grep"strip";; help "mk_list";; help_grep "mk";; striplist;;
let GLTVHUM = prove(mk_comb(`GLTVHUM_concl,







end;;