# HG changeset patch # User Cezary Kaliszyk # Date 1269435260 -3600 # Node ID 68c8666453f721c58f54a75b94b8516a1272b6a7 # Parent e94bfef17bb8a0fdcdd7204e138468a6d76494dc Started proving strong induction. diff -r e94bfef17bb8 -r 68c8666453f7 Nominal/ExCoreHaskell.thy --- a/Nominal/ExCoreHaskell.thy Wed Mar 24 12:36:58 2010 +0100 +++ b/Nominal/ExCoreHaskell.thy Wed Mar 24 13:54:20 2010 +0100 @@ -96,14 +96,16 @@ and a05: "\char b. P3 b (TC char)" and a06: "\ty1 ty2 b. \\c. P3 c ty1; \c. P3 c ty2\ \ P3 b (TApp ty1 ty2)" and a07: "\char ty_lst b. \\c. P4 c ty_lst\ \ P3 b (TFun char ty_lst)" - and a08: "\tvar tkind ty b. \\c. P1 c tkind; \c. P3 c ty\ \ P3 b (TAll tvar tkind ty)" + and a08: "\tvar tkind ty b. \\c. P1 c tkind; \c. P3 c ty; atom tvar \ b\ + \ P3 b (TAll tvar tkind ty)" and a09: "\ty1 ty2 ty3 b. \\c. P3 c ty1; \c. P3 c ty2; \c. P3 c ty3\ \ P3 b (TEq ty1 ty2 ty3)" and a10: "\b. P4 b TsNil" and a11: "\ty ty_lst b. \\c. P3 c ty; \c. P4 c ty_lst\ \ P4 b (TsCons ty ty_lst)" and a12: "\char b. P5 b (CC char)" and a13: "\co1 co2 b. \\c. P5 c co1; \c. P5 c co2\ \ P5 b (CApp co1 co2)" and a14: "\char co_lst b. \\c. P6 c co_lst\ \ P5 b (CFun char co_lst)" - and a15: "\tvar ckind co b. \\c. P2 c ckind; \c. P5 c co\ \ P5 b (CAll tvar ckind co)" + and a15: "\tvar ckind co b. \\c. P2 c ckind; \c. P5 c co; atom tvar \ b\ + \ P5 b (CAll tvar ckind co)" and a16: "\co1 co2 co3 b. \\c. P5 c co1; \c. P5 c co2; \c. P5 c co3\ \ P5 b (CEq co1 co2 co3)" and a17: "\co b. \\c. P5 c co\ \ P5 b (CSym co)" and a18: "\co1 co2 b. \\c. P5 c co1; \c. P5 c co2\ \ P5 b (CCir co1 co2)" @@ -117,17 +119,19 @@ and a26: "\co co_lst b. \\c. P5 c co; \c. P6 c co_lst\ \ P6 b (CsCons co co_lst)" and a27: "\var b. P7 b (Var var)" and a28: "\char b. P7 b (C char)" - and a29: "\tvar tkind trm b. \\c. P1 c tkind; \c. P7 c trm\ \ P7 b (LAMT tvar tkind trm)" - and a30: "\tvar ckind trm b. \\c. P2 c ckind; \c. P7 c trm\ \ P7 b (LAMC tvar ckind trm)" + and a29: "\tvar tkind trm b. \\c. P1 c tkind; \c. P7 c trm; atom tvar \ b\ + \ P7 b (LAMT tvar tkind trm)" + and a30: "\tvar ckind trm b. \\c. P2 c ckind; \c. P7 c trm; atom tvar \ b\ + \ P7 b (LAMC tvar ckind trm)" and a31: "\trm ty b. \\c. P7 c trm; \c. P3 c ty\ \ P7 b (APP trm ty)" - and a32: "\var ty trm b. \\c. P3 c ty; \c. P7 c trm\ \ P7 b (Lam var ty trm)" + and a32: "\var ty trm b. \\c. P3 c ty; \c. P7 c trm; atom var \ b\ \ P7 b (Lam var ty trm)" and a33: "\trm1 trm2 b. \\c. P7 c trm1; \c. P7 c trm2\ \ P7 b (App trm1 trm2)" - and a34: "\var ty trm1 trm2 b. \\c. P3 c ty; \c. P7 c trm1; \c. P7 c trm2\ + and a34: "\var ty trm1 trm2 b. \\c. P3 c ty; \c. P7 c trm1; \c. P7 c trm2; atom var \ b\ \ P7 b (Let var ty trm1 trm2)" and a35: "\trm assoc_lst b. \\c. P7 c trm; \c. P8 c assoc_lst\ \ P7 b (Case trm assoc_lst)" and a36: "\trm ty b. \\c. P7 c trm; \c. P3 c ty\ \ P7 b (Cast trm ty)" and a37: "\b. P8 b ANil" - and a38: "\pat trm assoc_lst b. \\c. P9 c pat; \c. P7 c trm; \c. P8 c assoc_lst\ + and a38: "\pat trm assoc_lst b. \\c. P9 c pat; \c. P7 c trm; \c. P8 c assoc_lst; bv(pat) \* b\ \ P8 b (ACons pat trm assoc_lst)" and a39: "\char tvtk_lst tvck_lst vt_lst b. \\c. P11 c tvtk_lst; \c. P12 c tvck_lst; \c. P10 c vt_lst\ \ P9 b (K char tvtk_lst tvck_lst vt_lst)" @@ -139,7 +143,7 @@ and a44: "\b. P12 b TVCKNil" and a45: "\tvar ckind tvck_lst b. \\c. P2 c ckind; \c. P12 c tvck_lst\ \ P12 b (TVCKCons tvar ckind tvck_lst)" - shows "P1 (a :: 'a :: pt) tkind \ + shows "P1 (a :: 'a :: pt) tkind \ P2 (b :: 'b :: pt) ckind \ P3 (c :: 'c :: pt) ty \ P4 (d :: 'd :: pt) ty_lst \ @@ -154,7 +158,8 @@ proof - have a: "(\p a. P1 a (p \ tkind)) \ (\p b. P2 b (p \ ckind)) \ (\p c. P3 c (p \ ty)) \ (\p d. P4 d (p \ ty_lst)) \ (\p e. P5 e (p \ co)) \ (\p f. P6 f (p \ co_lst)) \ (\p g. P7 g (p \ trm)) \ (\p h. P8 h (p \ assoc_lst)) \ (\p i. P9 i (p \ pat)) \ (\p j. P10 j (p \ vt_lst)) \ (\p k. P11 k (p \ tvtk_lst)) \ (\p l. P12 l (p \ tvck_lst))" apply (rule tkind_ckind_ty_ty_lst_co_co_lst_trm_assoc_lst_pat_vt_lst_tvtk_lst_tvck_lst.induct) - apply (simp add: a01) + apply (tactic {* ALLGOALS (REPEAT o rtac allI) *}) + apply (tactic {* ALLGOALS (TRY o SOLVED' (simp_tac @{simpset} THEN_ALL_NEW resolve_tac @{thms assms} THEN_ALL_NEW asm_full_simp_tac @{simpset})) *}) sorry have g1: "P1 a (0 \ tkind)" using a[THEN conjunct1] by blast have g2: "P2 b (0 \ ckind)" using a[THEN conjunct2,THEN conjunct1] by blast