src/HOL/Lambda/ParRed.ML
changeset 2159 e650a3f6f600
parent 2057 4d7a4b25a11f
child 2637 e9b203f854ae
equal deleted inserted replaced
2158:77dfe65b5bb3 2159:e650a3f6f600
     9 
     9 
    10 open ParRed;
    10 open ParRed;
    11 
    11 
    12 Addsimps par_beta.intrs;
    12 Addsimps par_beta.intrs;
    13 
    13 
    14 val par_beta_cases = map (par_beta.mk_cases db.simps)
    14 val par_beta_cases = map (par_beta.mk_cases dB.simps)
    15     ["Var n => t", "Fun s => Fun t",
    15     ["Var n => t", "Abs s => Abs t",
    16      "(Fun s) @ t => u", "s @ t => u", "Fun s => t"];
    16      "(Abs s) @ t => u", "s @ t => u", "Abs s => t"];
    17 
    17 
    18 AddSIs par_beta.intrs;
    18 AddSIs par_beta.intrs;
    19 AddSEs par_beta_cases;
    19 AddSEs par_beta_cases;
    20 
    20 
    21 (*** beta <= par_beta <= beta^* ***)
    21 (*** beta <= par_beta <= beta^* ***)
    24 by (Fast_tac 1);
    24 by (Fast_tac 1);
    25 qed "par_beta_varL";
    25 qed "par_beta_varL";
    26 Addsimps [par_beta_varL];
    26 Addsimps [par_beta_varL];
    27 
    27 
    28 goal ParRed.thy "t => t";
    28 goal ParRed.thy "t => t";
    29 by (db.induct_tac "t" 1);
    29 by (dB.induct_tac "t" 1);
    30 by (ALLGOALS Asm_simp_tac);
    30 by (ALLGOALS Asm_simp_tac);
    31 qed"par_beta_refl";
    31 qed"par_beta_refl";
    32 Addsimps [par_beta_refl];
    32 Addsimps [par_beta_refl];
    33 (* AddSIs [par_beta_refl]; causes search to blow up *)
    33 (* AddSIs [par_beta_refl]; causes search to blow up *)
    34 
    34 
    48 qed "par_beta_subset_beta";
    48 qed "par_beta_subset_beta";
    49 
    49 
    50 (*** => ***)
    50 (*** => ***)
    51 
    51 
    52 goal ParRed.thy "!t' n. t => t' --> lift t n => lift t' n";
    52 goal ParRed.thy "!t' n. t => t' --> lift t n => lift t' n";
    53 by (db.induct_tac "t" 1);
    53 by (dB.induct_tac "t" 1);
    54 by (ALLGOALS(fast_tac (!claset addss (!simpset))));
    54 by (ALLGOALS(fast_tac (!claset addss (!simpset))));
    55 qed_spec_mp "par_beta_lift";
    55 qed_spec_mp "par_beta_lift";
    56 Addsimps [par_beta_lift];
    56 Addsimps [par_beta_lift];
    57 
    57 
    58 goal ParRed.thy
    58 goal ParRed.thy
    59   "!s s' t' n. s => s' --> t => t' --> t[s/n] => t'[s'/n]";
    59   "!s s' t' n. s => s' --> t => t' --> t[s/n] => t'[s'/n]";
    60 by (db.induct_tac "t" 1);
    60 by (dB.induct_tac "t" 1);
    61   by (asm_simp_tac (addsplit(!simpset)) 1);
    61   by (asm_simp_tac (addsplit(!simpset)) 1);
    62  by (strip_tac 1);
    62  by (strip_tac 1);
    63  by (eresolve_tac par_beta_cases 1);
    63  by (eresolve_tac par_beta_cases 1);
    64   by (Asm_simp_tac 1);
    64   by (Asm_simp_tac 1);
    65  by (asm_simp_tac (!simpset addsimps [subst_subst RS sym]) 1);
    65  by (asm_simp_tac (!simpset addsimps [subst_subst RS sym]) 1);
    77 
    77 
    78 
    78 
    79 (*** cd ***)
    79 (*** cd ***)
    80 
    80 
    81 goal ParRed.thy "!t. s => t --> t => cd s";
    81 goal ParRed.thy "!t. s => t --> t => cd s";
    82 by (db.induct_tac "s" 1);
    82 by (dB.induct_tac "s" 1);
    83   by (Simp_tac 1);
    83   by (Simp_tac 1);
    84  by (etac rev_mp 1);
    84  by (etac rev_mp 1);
    85  by (db.induct_tac "db1" 1);
    85  by (dB.induct_tac "dB1" 1);
    86  by (ALLGOALS(fast_tac (!claset addSIs [par_beta_subst] addss !simpset)));
    86  by (ALLGOALS(fast_tac (!claset addSIs [par_beta_subst] addss !simpset)));
    87 qed_spec_mp "par_beta_cd";
    87 qed_spec_mp "par_beta_cd";
    88 
    88 
    89 (*** Confluence (via cd) ***)
    89 (*** Confluence (via cd) ***)
    90 
    90