| 
5377
 | 
     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";
  |