src/HOL/MiniML/Instance.ML
changeset 3919 c036caebfc75
parent 3842 b55686a7b22c
child 4089 96fba19bcbe2
equal deleted inserted replaced
3918:94e0fdcb7b91 3919:c036caebfc75
    64 by (REPEAT ((dtac mp 1) THEN (Fast_tac 1)));
    64 by (REPEAT ((dtac mp 1) THEN (Fast_tac 1)));
    65 by (safe_tac (!claset));
    65 by (safe_tac (!claset));
    66 by (rename_tac "S1 S2" 1);
    66 by (rename_tac "S1 S2" 1);
    67 by (res_inst_tac [("x","%x. if x:bound_tv type_scheme1 then (S1 x) else (S2 x)")] exI 1);
    67 by (res_inst_tac [("x","%x. if x:bound_tv type_scheme1 then (S1 x) else (S2 x)")] exI 1);
    68 by (safe_tac (!claset));
    68 by (safe_tac (!claset));
    69 by (asm_simp_tac (!simpset setloop (split_tac [expand_if])) 1);
    69 by (asm_simp_tac (!simpset addsplits [expand_if]) 1);
    70 by (asm_simp_tac (!simpset setloop (split_tac [expand_if])) 1);
    70 by (asm_simp_tac (!simpset addsplits [expand_if]) 1);
    71 by (strip_tac 1);
    71 by (strip_tac 1);
    72 by (dres_inst_tac [("x","x")] bspec 1);
    72 by (dres_inst_tac [("x","x")] bspec 1);
    73 by (assume_tac 1);
    73 by (assume_tac 1);
    74 by (dres_inst_tac [("x","x")] bspec 1);
    74 by (dres_inst_tac [("x","x")] bspec 1);
    75 by (Asm_simp_tac 1);
    75 by (Asm_simp_tac 1);
    80 (* lemmatas for subst_to_scheme *)
    80 (* lemmatas for subst_to_scheme *)
    81 
    81 
    82 goal thy "!!sch. new_tv n sch --> subst_to_scheme (%k. if n <= k then BVar (k - n) else FVar k) \
    82 goal thy "!!sch. new_tv n sch --> subst_to_scheme (%k. if n <= k then BVar (k - n) else FVar k) \
    83 \                                                 (bound_typ_inst (%k. TVar (k + n)) sch) = sch";
    83 \                                                 (bound_typ_inst (%k. TVar (k + n)) sch) = sch";
    84 by (type_scheme.induct_tac "sch" 1);
    84 by (type_scheme.induct_tac "sch" 1);
    85 by (simp_tac (!simpset setloop (split_tac [expand_if]) addsimps [leD]) 1);
    85 by (simp_tac (!simpset addsimps [leD] addsplits [expand_if]) 1);
    86 by (simp_tac (!simpset setloop (split_tac [expand_if]) addsimps [le_add2,diff_add_inverse2]) 1);
    86 by (simp_tac (!simpset addsimps [le_add2,diff_add_inverse2] addsplits [expand_if]) 1);
    87 by (Asm_simp_tac 1);
    87 by (Asm_simp_tac 1);
    88 qed_spec_mp "subst_to_scheme_inverse";
    88 qed_spec_mp "subst_to_scheme_inverse";
    89 
    89 
    90 goal thy "!!t t'. t = t' ==> subst_to_scheme (%k. if n <= k then BVar (k - n) else FVar k) t = \
    90 goal thy "!!t t'. t = t' ==> subst_to_scheme (%k. if n <= k then BVar (k - n) else FVar k) t = \
    91 \                            subst_to_scheme (%k. if n <= k then BVar (k - n) else FVar k) t'";
    91 \                            subst_to_scheme (%k. if n <= k then BVar (k - n) else FVar k) t'";
    94 
    94 
    95 goal thy "new_tv n sch --> \
    95 goal thy "new_tv n sch --> \
    96 \        (subst_to_scheme (%k. if n <= k then BVar (k - n) else FVar k) (bound_typ_inst S sch) = \
    96 \        (subst_to_scheme (%k. if n <= k then BVar (k - n) else FVar k) (bound_typ_inst S sch) = \
    97 \                         bound_scheme_inst ((subst_to_scheme (%k. if n <= k then BVar (k - n) else FVar k)) o S) sch)";
    97 \                         bound_scheme_inst ((subst_to_scheme (%k. if n <= k then BVar (k - n) else FVar k)) o S) sch)";
    98 by (type_scheme.induct_tac "sch" 1);
    98 by (type_scheme.induct_tac "sch" 1);
    99 by (simp_tac (!simpset setloop (split_tac [expand_if]) addsimps [leD]) 1);
    99 by (simp_tac (!simpset addsplits [expand_if] addsimps [leD]) 1);
   100 by (Asm_simp_tac 1);
   100 by (Asm_simp_tac 1);
   101 by (asm_full_simp_tac (!simpset setloop (split_tac [expand_if]) addsimps [leD]) 1);
   101 by (asm_full_simp_tac (!simpset addsplits [expand_if] addsimps [leD]) 1);
   102 val aux2 = result () RS mp;
   102 val aux2 = result () RS mp;
   103 
   103 
   104 
   104 
   105 (* lemmata for <= *)
   105 (* lemmata for <= *)
   106 
   106