44 hd(tl(get_thms List.thy "foldl.simps")) RS sym ] |
50 hd(tl(get_thms List.thy "foldl.simps")) RS sym ] |
45 @ dB.simps @ list.simps)) |
51 @ dB.simps @ list.simps)) |
46 ["Var n $$ ss : IT", "Abs t : IT", "Abs r $ s $$ ts : IT"]; |
52 ["Var n $$ ss : IT", "Abs t : IT", "Abs r $ s $$ ts : IT"]; |
47 AddSEs IT_cases; |
53 AddSEs IT_cases; |
48 |
54 |
|
55 (* Turned out to be redundant: |
49 Goal "t : termi beta ==> \ |
56 Goal "t : termi beta ==> \ |
50 \ !r rs. t = r$$rs --> r : termi beta & rs : termi(step1 beta)"; |
57 \ !r rs. t = r$$rs --> r : termi beta & rs : termi(step1 beta)"; |
51 be acc_induct 1; |
58 be acc_induct 1; |
52 by(force_tac (claset() |
59 by(force_tac (claset() |
53 addIs [apps_preserves_beta,apps_preserves_betas,accI],simpset()) 1); |
60 addIs [apps_preserves_beta,apps_preserves_betas,accI],simpset()) 1); |
75 |
82 |
76 Goal "r$s : termi beta ==> r : termi beta & s : termi beta"; |
83 Goal "r$s : termi beta ==> r : termi beta & s : termi beta"; |
77 bd lemma 1; |
84 bd lemma 1; |
78 by(Blast_tac 1); |
85 by(Blast_tac 1); |
79 qed "App_in_termi_betaD"; |
86 qed "App_in_termi_betaD"; |
80 |
87 *) |
81 |
88 |
82 Goal "r : termi beta ==> r : IT"; |
89 Goal "r : termi beta ==> r : IT"; |
83 be acc_induct 1; |
90 be acc_induct 1; |
84 by(rename_tac "r" 1); |
91 by(rename_tac "r" 1); |
85 be rev_mp 1; |
92 be thin_rl 1; |
86 be rev_mp 1; |
93 be rev_mp 1; |
87 by(Simp_tac 1); |
94 by(Simp_tac 1); |
88 by(res_inst_tac [("t","r")] Apps_dB_induct 1); |
95 by(res_inst_tac [("t","r")] Apps_dB_induct 1); |
89 by(rename_tac "n ts" 1); |
96 by(rename_tac "n ts" 1); |
90 by(Clarify_tac 1); |
97 by(Clarify_tac 1); |
91 brs IT.intrs 1; |
98 brs IT.intrs 1; |
92 by(Clarify_tac 1); |
99 by(Clarify_tac 1); |
93 by(EVERY1[dtac bspec, atac]); |
100 by(EVERY1[dtac bspec, atac]); |
94 by(EVERY[etac impE 1, etac mp 2]); |
101 be mp 1; |
95 by(Clarify_tac 1); |
102 by(Clarify_tac 1); |
96 bd converseI 1; |
103 bd converseI 1; |
97 by(EVERY1[dtac ex_step1I, atac]); |
104 by(EVERY1[dtac ex_step1I, atac]); |
98 by(Clarify_tac 1); |
105 by(Clarify_tac 1); |
99 by(rename_tac "us" 1); |
106 by(rename_tac "us" 1); |
100 by(eres_inst_tac [("x","Var n $$ us")] allE 1); |
107 by(eres_inst_tac [("x","Var n $$ us")] allE 1); |
101 by(Force_tac 1); |
108 by(Force_tac 1); |
102 bd apps_in_termi_betaD 1; |
|
103 by(asm_full_simp_tac (simpset() delsimps [step1_converse] |
|
104 addsimps [step1_converse RS sym]) 1); |
|
105 by(blast_tac (claset() addDs [lists_accI]) 1); |
|
106 by(rename_tac "u ts" 1); |
109 by(rename_tac "u ts" 1); |
107 by(exhaust_tac "ts" 1); |
110 by(exhaust_tac "ts" 1); |
108 by(Asm_full_simp_tac 1); |
111 by(Asm_full_simp_tac 1); |
109 by(Clarify_tac 1); |
112 by(blast_tac (claset() addIs IT.intrs) 1); |
110 brs IT.intrs 1; |
|
111 by(blast_tac (claset() addDs [Abs_in_termi_betaD]) 1); |
|
112 by(rename_tac "s ss" 1); |
113 by(rename_tac "s ss" 1); |
113 by(Asm_full_simp_tac 1); |
114 by(Asm_full_simp_tac 1); |
114 by(Clarify_tac 1); |
115 by(Clarify_tac 1); |
115 brs IT.intrs 1; |
116 brs IT.intrs 1; |
116 by(blast_tac (claset() addIs [apps_preserves_beta]) 1); |
117 by(blast_tac (claset() addIs [apps_preserves_beta]) 1); |
117 by(EVERY[etac impE 1, etac mp 2]); |
118 be mp 1; |
118 by(Clarify_tac 1); |
119 by(Clarify_tac 1); |
119 by(rename_tac "t" 1); |
120 by(rename_tac "t" 1); |
120 by(eres_inst_tac [("x","Abs u $ t $$ ss")] allE 1); |
121 by(eres_inst_tac [("x","Abs u $ t $$ ss")] allE 1); |
121 by(Force_tac 1); |
122 by(Force_tac 1); |
122 by(blast_tac (claset() addSDs [apps_in_termi_betaD, App_in_termi_betaD]) 1); |
|
123 qed "termi_implies_IT"; |
123 qed "termi_implies_IT"; |