doc-src/Tutorial/CodeGen/CodeGenIf.ML
changeset 15338 08519594b0e4
parent 15337 628d87767434
child 15339 a7b603bbc1e6
equal deleted inserted replaced
15337:628d87767434 15338:08519594b0e4
     1 Addsimps exec.rules;
       
     2 Addsimps [Let_def,drop_all];
       
     3 Addsplits [split_instr_case];
       
     4 
       
     5 Goal "!xs. wf xs --> wf(drop n xs)";
       
     6 by(induct_tac "n" 1);
       
     7 by(Simp_tac 1);
       
     8 by(Clarify_tac 1);
       
     9 by(exhaust_tac "xs" 1);
       
    10 by(Asm_simp_tac 1);
       
    11 by(Asm_full_simp_tac 1);
       
    12 qed_spec_mp "wf_drop";
       
    13 Addsimps [wf_drop];
       
    14 
       
    15 Goal "wf xs --> wf ys --> wf(xs@ys)";
       
    16 by(induct_tac "xs" 1);
       
    17 by(Simp_tac 1);
       
    18 by(asm_full_simp_tac (simpset() addsimps [trans_le_add1]) 1);
       
    19 qed_spec_mp "wf_append";
       
    20 Addsimps [wf_append];
       
    21 
       
    22 Goal "!vs ys. wf xs --> exec(s,vs,xs@ys) = exec(s,exec(s,vs,xs),ys)"; 
       
    23 by(res_inst_tac [("xs","xs")] length_induct 1);
       
    24 by(exhaust_tac "xs" 1);
       
    25 by(Asm_full_simp_tac 1);
       
    26 by(asm_full_simp_tac (simpset() addsimps [less_imp_diff_is_0,diff_less_Suc,le_imp_less_Suc]) 1);
       
    27 qed_spec_mp "exec_append";
       
    28 Addsimps [exec_append];
       
    29 
       
    30 Goal "wf(comp e)";
       
    31 by(induct_tac "e" 1);
       
    32 by(ALLGOALS Asm_simp_tac);
       
    33 qed "wf_comp";
       
    34 Addsimps [wf_comp];
       
    35 
       
    36 Goal "!vs. exec(s, vs, comp e) = (value s e) # vs";
       
    37 by(induct_tac "e" 1);
       
    38 by(ALLGOALS Asm_simp_tac);
       
    39 qed "exec_comp";