4 module My_module = struct
8 let concl_list = [GLTVHUM_concl;DUUNHOR_concl;QXSKIIT_concl] ;;
10 let module_assum = list_mk_conj concl_list;;
14 type_vars_in_term module_assum;;
19 let my_assum = new_definition (mk_eq (`(my_assum:(N#A->bool)) x`,module_assum));;
21 let my_thm = prove_by_refinement(
22 `(my_assum ((@) UNIV)) ==> (!x y z. (x = y) ==> (y =x ))`,
29 let INTRO_THEN (axiom,concl) =
30 FIRST_X_ASSUM (MATCH_MP axom
35 INTRO_TAC (my_assum,GLTVHUM_concl);;
37 let fold_binop f = function
38 [] -> failwith "fold_binop"
40 | a::xs -> List.fold_left f a xs;;
42 let make_assumption name concls =
43 let concl = list_mk_conj concls in
44 let _ = (frees concl = []) or (failwith "make_assumption: free vars") in
45 let z = type_vars_in_term concl in
46 let ty = if (List.length z =0) then `:bool`
48 let f a b = mk_type("prod",[a;b]) in
49 let C = fold_binop f z in
50 mk_type("fun",[C;`:bool`]) in
54 mk_type("fun",[`:A`;`:B`]);;
55 mk_type("prod",[`:A`;`:B`;`:C`]);;
58 make_assumption "" [`T`];;
62 mk_type ("prod",[`:A`;`:B`]);;
67 let GLTVHUM = prove(mk_comb(`GLTVHUM_concl,