67 [[ [], [[], [(NONE, 1)], [(NONE, 1)]] ], |
67 [[ [], [[], [(NONE, 1)], [(NONE, 1)]] ], |
68 [ [[]], [[], []], [[], [(NONE, 1)], [(NONE, 1)]] ], |
68 [ [[]], [[], []], [[], [(NONE, 1)], [(NONE, 1)]] ], |
69 [ [[]], [[]], [[], []], [[], [(NONE, 1)], [(NONE, 1)]]]] *} |
69 [ [[]], [[]], [[], []], [[], [(NONE, 1)], [(NONE, 1)]]]] *} |
70 notation |
70 notation |
71 alpha_rkind ("_ \<approx>ki _" [100, 100] 100) |
71 alpha_rkind ("_ \<approx>ki _" [100, 100] 100) |
72 and alpha_rty ("_ \<approx>rty _" [100, 100] 100) |
72 and alpha_rty ("_ \<approx>ty _" [100, 100] 100) |
73 and alpha_rtrm ("_ \<approx>tr _" [100, 100] 100) |
73 and alpha_rtrm ("_ \<approx>tr _" [100, 100] 100) |
74 thm fv_rkind_fv_rty_fv_rtrm.simps alpha_rkind_alpha_rty_alpha_rtrm.intros |
74 thm fv_rkind_fv_rty_fv_rtrm.simps alpha_rkind_alpha_rty_alpha_rtrm.intros |
75 local_setup {* (fn ctxt => snd (Local_Theory.note ((@{binding alphas_inj}, []), (build_alpha_inj @{thms alpha_rkind_alpha_rty_alpha_rtrm.intros} @{thms rkind.distinct rty.distinct rtrm.distinct rkind.inject rty.inject rtrm.inject} @{thms alpha_rkind.cases alpha_rty.cases alpha_rtrm.cases} ctxt)) ctxt)) *} |
75 local_setup {* (fn ctxt => snd (Local_Theory.note ((@{binding alphas_inj}, []), (build_alpha_inj @{thms alpha_rkind_alpha_rty_alpha_rtrm.intros} @{thms rkind.distinct rty.distinct rtrm.distinct rkind.inject rty.inject rtrm.inject} @{thms alpha_rkind.cases alpha_rty.cases alpha_rtrm.cases} ctxt)) ctxt)) *} |
76 thm alphas_inj |
76 thm alphas_inj |
77 |
77 |
105 | "fv_rtrm (Var x) = {atom x}" |
105 | "fv_rtrm (Var x) = {atom x}" |
106 | "fv_rtrm (App M N) = (fv_rtrm M) \<union> (fv_rtrm N)" |
106 | "fv_rtrm (App M N) = (fv_rtrm M) \<union> (fv_rtrm N)" |
107 | "fv_rtrm (Lam A x M) = (fv_rty A) \<union> ((fv_rtrm M) - {atom x})" |
107 | "fv_rtrm (Lam A x M) = (fv_rty A) \<union> ((fv_rtrm M) - {atom x})" |
108 |
108 |
109 inductive |
109 inductive |
110 arkind :: "rkind \<Rightarrow> rkind \<Rightarrow> bool" ("_ \<approx>ki _" [100, 100] 100) |
110 alpha_rkind :: "rkind \<Rightarrow> rkind \<Rightarrow> bool" ("_ \<approx>ki _" [100, 100] 100) |
111 and arty :: "rty \<Rightarrow> rty \<Rightarrow> bool" ("_ \<approx>rty _" [100, 100] 100) |
111 and alpha_rty :: "rty \<Rightarrow> rty \<Rightarrow> bool" ("_ \<approx>ty _" [100, 100] 100) |
112 and artrm :: "rtrm \<Rightarrow> rtrm \<Rightarrow> bool" ("_ \<approx>tr _" [100, 100] 100) |
112 and alpha_rtrm :: "rtrm \<Rightarrow> rtrm \<Rightarrow> bool" ("_ \<approx>tr _" [100, 100] 100) |
113 where |
113 where |
114 a1: "(Type) \<approx>ki (Type)" |
114 a1: "(Type) \<approx>ki (Type)" |
115 | a2: "\<lbrakk>A \<approx>rty A'; \<exists>pi. (({atom a}, K) \<approx>gen arkind fv_rkind pi ({atom b}, K'))\<rbrakk> \<Longrightarrow> (KPi A a K) \<approx>ki (KPi A' b K')" |
115 | a2: "\<lbrakk>A \<approx>ty A'; \<exists>pi. (({atom a}, K) \<approx>gen alpha_rkind fv_rkind pi ({atom b}, K'))\<rbrakk> \<Longrightarrow> (KPi A a K) \<approx>ki (KPi A' b K')" |
116 | a3: "i = j \<Longrightarrow> (TConst i) \<approx>rty (TConst j)" |
116 | a3: "i = j \<Longrightarrow> (TConst i) \<approx>ty (TConst j)" |
117 | a4: "\<lbrakk>A \<approx>rty A'; M \<approx>tr M'\<rbrakk> \<Longrightarrow> (TApp A M) \<approx>rty (TApp A' M')" |
117 | a4: "\<lbrakk>A \<approx>ty A'; M \<approx>tr M'\<rbrakk> \<Longrightarrow> (TApp A M) \<approx>ty (TApp A' M')" |
118 | a5: "\<lbrakk>A \<approx>rty A'; \<exists>pi. (({atom a}, B) \<approx>gen arty fv_rty pi ({atom b}, B'))\<rbrakk> \<Longrightarrow> (TPi A a B) \<approx>rty (TPi A' b B')" |
118 | a5: "\<lbrakk>A \<approx>ty A'; \<exists>pi. (({atom a}, B) \<approx>gen alpha_rty fv_rty pi ({atom b}, B'))\<rbrakk> \<Longrightarrow> (TPi A a B) \<approx>ty (TPi A' b B')" |
119 | a6: "i = j \<Longrightarrow> (Const i) \<approx>tr (Const j)" |
119 | a6: "i = j \<Longrightarrow> (Const i) \<approx>tr (Const j)" |
120 | a7: "x = y \<Longrightarrow> (Var x) \<approx>tr (Var y)" |
120 | a7: "x = y \<Longrightarrow> (Var x) \<approx>tr (Var y)" |
121 | a8: "\<lbrakk>M \<approx>tr M'; N \<approx>tr N'\<rbrakk> \<Longrightarrow> (App M N) \<approx>tr (App M' N')" |
121 | a8: "\<lbrakk>M \<approx>tr M'; N \<approx>tr N'\<rbrakk> \<Longrightarrow> (App M N) \<approx>tr (App M' N')" |
122 | a9: "\<lbrakk>A \<approx>rty A'; \<exists>pi. (({atom a}, M) \<approx>gen artrm fv_rtrm pi ({atom b}, M'))\<rbrakk> \<Longrightarrow> (Lam A a M) \<approx>tr (Lam A' b M')" |
122 | a9: "\<lbrakk>A \<approx>ty A'; \<exists>pi. (({atom a}, M) \<approx>gen alpha_rtrm fv_rtrm pi ({atom b}, M'))\<rbrakk> \<Longrightarrow> (Lam A a M) \<approx>tr (Lam A' b M')" |
123 |
123 |
124 lemma arkind_arty_artrm_inj: |
124 lemma alpha_rkind_alpha_rty_alpha_rtrm_inj: |
125 "(Type) \<approx>ki (Type) = True" |
125 "(Type) \<approx>ki (Type) = True" |
126 "((KPi A a K) \<approx>ki (KPi A' b K')) = ((A \<approx>rty A') \<and> (\<exists>pi. ({atom a}, K) \<approx>gen arkind fv_rkind pi ({atom b}, K')))" |
126 "((KPi A a K) \<approx>ki (KPi A' b K')) = ((A \<approx>ty A') \<and> (\<exists>pi. ({atom a}, K) \<approx>gen alpha_rkind fv_rkind pi ({atom b}, K')))" |
127 "(TConst i) \<approx>rty (TConst j) = (i = j)" |
127 "(TConst i) \<approx>ty (TConst j) = (i = j)" |
128 "(TApp A M) \<approx>rty (TApp A' M') = (A \<approx>rty A' \<and> M \<approx>tr M')" |
128 "(TApp A M) \<approx>ty (TApp A' M') = (A \<approx>ty A' \<and> M \<approx>tr M')" |
129 "((TPi A a B) \<approx>rty (TPi A' b B')) = ((A \<approx>rty A') \<and> (\<exists>pi. (({atom a}, B) \<approx>gen arty fv_rty pi ({atom b}, B'))))" |
129 "((TPi A a B) \<approx>ty (TPi A' b B')) = ((A \<approx>ty A') \<and> (\<exists>pi. (({atom a}, B) \<approx>gen alpha_rty fv_rty pi ({atom b}, B'))))" |
130 "(Const i) \<approx>tr (Const j) = (i = j)" |
130 "(Const i) \<approx>tr (Const j) = (i = j)" |
131 "(Var x) \<approx>tr (Var y) = (x = y)" |
131 "(Var x) \<approx>tr (Var y) = (x = y)" |
132 "(App M N) \<approx>tr (App M' N') = (M \<approx>tr M' \<and> N \<approx>tr N')" |
132 "(App M N) \<approx>tr (App M' N') = (M \<approx>tr M' \<and> N \<approx>tr N')" |
133 "((Lam A a M) \<approx>tr (Lam A' b M')) = ((A \<approx>rty A') \<and> (\<exists>pi. (({atom a}, M) \<approx>gen artrm fv_rtrm pi ({atom b}, M'))))" |
133 "((Lam A a M) \<approx>tr (Lam A' b M')) = ((A \<approx>ty A') \<and> (\<exists>pi. (({atom a}, M) \<approx>gen alpha_rtrm fv_rtrm pi ({atom b}, M'))))" |
134 apply - |
134 apply - |
135 apply (simp add: arkind_arty_artrm.intros) |
135 apply (simp add: alpha_rkind_alpha_rty_alpha_rtrm.intros) |
136 |
136 |
137 apply rule apply (erule arkind.cases) apply simp apply blast |
137 apply rule apply (erule alpha_rkind.cases) apply simp apply blast |
138 apply (simp only: arkind_arty_artrm.intros) |
138 apply (simp only: alpha_rkind_alpha_rty_alpha_rtrm.intros) |
139 |
139 |
140 apply rule apply (erule arty.cases) apply simp apply simp apply simp |
140 apply rule apply (erule alpha_rty.cases) apply simp apply simp apply simp |
141 apply (simp only: arkind_arty_artrm.intros) |
141 apply (simp only: alpha_rkind_alpha_rty_alpha_rtrm.intros) |
142 |
142 |
143 apply rule apply (erule arty.cases) apply simp apply simp apply simp |
143 apply rule apply (erule alpha_rty.cases) apply simp apply simp apply simp |
144 apply (simp only: arkind_arty_artrm.intros) |
144 apply (simp only: alpha_rkind_alpha_rty_alpha_rtrm.intros) |
145 |
145 |
146 apply rule apply (erule arty.cases) apply simp apply simp apply blast |
146 apply rule apply (erule alpha_rty.cases) apply simp apply simp apply blast |
147 apply (simp only: arkind_arty_artrm.intros) |
147 apply (simp only: alpha_rkind_alpha_rty_alpha_rtrm.intros) |
148 |
148 |
149 apply rule apply (erule artrm.cases) apply simp apply simp apply simp apply blast |
149 apply rule apply (erule alpha_rtrm.cases) apply simp apply simp apply simp apply blast |
150 apply (simp only: arkind_arty_artrm.intros) |
150 apply (simp only: alpha_rkind_alpha_rty_alpha_rtrm.intros) |
151 |
151 |
152 apply rule apply (erule artrm.cases) apply simp apply simp apply simp apply blast |
152 apply rule apply (erule alpha_rtrm.cases) apply simp apply simp apply simp apply blast |
153 apply (simp only: arkind_arty_artrm.intros) |
153 apply (simp only: alpha_rkind_alpha_rty_alpha_rtrm.intros) |
154 |
154 |
155 apply rule apply (erule artrm.cases) apply simp apply simp apply simp apply blast |
155 apply rule apply (erule alpha_rtrm.cases) apply simp apply simp apply simp apply blast |
156 apply (simp only: arkind_arty_artrm.intros) |
156 apply (simp only: alpha_rkind_alpha_rty_alpha_rtrm.intros) |
157 |
157 |
158 apply rule apply (erule artrm.cases) apply simp apply simp apply simp apply blast |
158 apply rule apply (erule alpha_rtrm.cases) apply simp apply simp apply simp apply blast |
159 apply (simp only: arkind_arty_artrm.intros) |
159 apply (simp only: alpha_rkind_alpha_rty_alpha_rtrm.intros) |
160 done |
160 done |
161 |
161 |
162 lemma rfv_eqvt[eqvt]: |
162 lemma rfv_eqvt[eqvt]: |
163 "((pi\<bullet>fv_rkind t1) = fv_rkind (pi\<bullet>t1))" |
163 "((pi\<bullet>fv_rkind t1) = fv_rkind (pi\<bullet>t1))" |
164 "((pi\<bullet>fv_rty t2) = fv_rty (pi\<bullet>t2))" |
164 "((pi\<bullet>fv_rty t2) = fv_rty (pi\<bullet>t2))" |
189 lemma al_refl: |
189 lemma al_refl: |
190 fixes K::"rkind" |
190 fixes K::"rkind" |
191 and A::"rty" |
191 and A::"rty" |
192 and M::"rtrm" |
192 and M::"rtrm" |
193 shows "K \<approx>ki K" |
193 shows "K \<approx>ki K" |
194 and "A \<approx>rty A" |
194 and "A \<approx>ty A" |
195 and "M \<approx>tr M" |
195 and "M \<approx>tr M" |
196 apply(induct K and A and M rule: rkind_rty_rtrm.inducts) |
196 apply(induct K and A and M rule: rkind_rty_rtrm.inducts) |
197 apply(auto intro: arkind_arty_artrm.intros) |
197 apply(auto intro: alpha_rkind_alpha_rty_alpha_rtrm.intros) |
198 apply (rule a2) |
198 apply (rule alpha_rkind_alpha_rty_alpha_rtrm.intros(2)) |
199 apply auto |
199 apply auto |
200 apply(rule_tac x="0" in exI) |
200 apply(rule_tac x="0" in exI) |
201 apply(simp_all add: fresh_star_def fresh_zero_perm alpha_gen) |
201 apply(simp_all add: fresh_star_def fresh_zero_perm alpha_gen) |
202 apply (rule a5) |
202 apply (rule alpha_rkind_alpha_rty_alpha_rtrm.intros(5)) |
203 apply auto |
203 apply auto |
204 apply(rule_tac x="0" in exI) |
204 apply(rule_tac x="0" in exI) |
205 apply(simp_all add: fresh_star_def fresh_zero_perm alpha_gen) |
205 apply(simp_all add: fresh_star_def fresh_zero_perm alpha_gen) |
206 apply (rule a9) |
206 apply (rule alpha_rkind_alpha_rty_alpha_rtrm.intros(9)) |
207 apply auto |
207 apply auto |
208 apply(rule_tac x="0" in exI) |
208 apply(rule_tac x="0" in exI) |
209 apply(simp_all add: fresh_star_def fresh_zero_perm alpha_gen) |
209 apply(simp_all add: fresh_star_def fresh_zero_perm alpha_gen) |
210 done |
210 done |
211 |
211 |
212 lemma al_sym: |
212 lemma al_sym: |
213 fixes K K'::"rkind" and A A'::"rty" and M M'::"rtrm" |
213 fixes K K'::"rkind" and A A'::"rty" and M M'::"rtrm" |
214 shows "K \<approx>ki K' \<Longrightarrow> K' \<approx>ki K" |
214 shows "K \<approx>ki K' \<Longrightarrow> K' \<approx>ki K" |
215 and "A \<approx>rty A' \<Longrightarrow> A' \<approx>rty A" |
215 and "A \<approx>ty A' \<Longrightarrow> A' \<approx>ty A" |
216 and "M \<approx>tr M' \<Longrightarrow> M' \<approx>tr M" |
216 and "M \<approx>tr M' \<Longrightarrow> M' \<approx>tr M" |
217 apply(induct K K' and A A' and M M' rule: arkind_arty_artrm.inducts) |
217 apply(induct K K' and A A' and M M' rule: alpha_rkind_alpha_rty_alpha_rtrm.inducts) |
218 apply(simp_all add: arkind_arty_artrm.intros) |
218 apply(simp_all add: alpha_rkind_alpha_rty_alpha_rtrm.intros) |
219 apply (simp_all add: arkind_arty_artrm_inj) |
219 apply (simp_all add: alpha_rkind_alpha_rty_alpha_rtrm_inj) |
220 apply(erule alpha_gen_compose_sym) |
220 apply(erule alpha_gen_compose_sym) |
221 apply(erule alpha_eqvt) |
221 apply(erule alpha_eqvt) |
222 apply(erule alpha_gen_compose_sym) |
222 apply(erule alpha_gen_compose_sym) |
223 apply(erule alpha_eqvt) |
223 apply(erule alpha_eqvt) |
224 apply(erule alpha_gen_compose_sym) |
224 apply(erule alpha_gen_compose_sym) |
226 done |
226 done |
227 |
227 |
228 lemma al_trans: |
228 lemma al_trans: |
229 fixes K K' K''::"rkind" and A A' A''::"rty" and M M' M''::"rtrm" |
229 fixes K K' K''::"rkind" and A A' A''::"rty" and M M' M''::"rtrm" |
230 shows "K \<approx>ki K' \<Longrightarrow> K' \<approx>ki K'' \<Longrightarrow> K \<approx>ki K''" |
230 shows "K \<approx>ki K' \<Longrightarrow> K' \<approx>ki K'' \<Longrightarrow> K \<approx>ki K''" |
231 and "A \<approx>rty A' \<Longrightarrow> A' \<approx>rty A'' \<Longrightarrow> A \<approx>rty A''" |
231 and "A \<approx>ty A' \<Longrightarrow> A' \<approx>ty A'' \<Longrightarrow> A \<approx>ty A''" |
232 and "M \<approx>tr M' \<Longrightarrow> M' \<approx>tr M'' \<Longrightarrow> M \<approx>tr M''" |
232 and "M \<approx>tr M' \<Longrightarrow> M' \<approx>tr M'' \<Longrightarrow> M \<approx>tr M''" |
233 apply(induct K K' and A A' and M M' arbitrary: K'' and A'' and M'' rule: arkind_arty_artrm.inducts) |
233 apply(induct K K' and A A' and M M' arbitrary: K'' and A'' and M'' rule: alpha_rkind_alpha_rty_alpha_rtrm.inducts) |
234 apply(simp_all add: arkind_arty_artrm.intros) |
234 apply(simp_all add: alpha_rkind_alpha_rty_alpha_rtrm.intros) |
235 apply(erule arkind.cases) |
235 apply(erule alpha_rkind.cases) |
236 apply(simp_all add: arkind_arty_artrm.intros) |
236 apply(simp_all add: alpha_rkind_alpha_rty_alpha_rtrm.intros) |
237 apply(simp add: arkind_arty_artrm_inj) |
237 apply(simp add: alpha_rkind_alpha_rty_alpha_rtrm_inj) |
238 apply(erule alpha_gen_compose_trans) |
238 apply(erule alpha_gen_compose_trans) |
239 apply(assumption) |
239 apply(assumption) |
240 apply(erule alpha_eqvt) |
240 apply(erule alpha_eqvt) |
241 apply(rotate_tac 4) |
241 apply(rotate_tac 4) |
242 apply(erule arty.cases) |
242 apply(erule alpha_rty.cases) |
243 apply(simp_all add: arkind_arty_artrm.intros) |
243 apply(simp_all add: alpha_rkind_alpha_rty_alpha_rtrm.intros) |
244 apply(rotate_tac 3) |
244 apply(rotate_tac 3) |
245 apply(erule arty.cases) |
245 apply(erule alpha_rty.cases) |
246 apply(simp_all add: arkind_arty_artrm.intros) |
246 apply(simp_all add: alpha_rkind_alpha_rty_alpha_rtrm.intros) |
247 apply(simp add: arkind_arty_artrm_inj) |
247 apply(simp add: alpha_rkind_alpha_rty_alpha_rtrm_inj) |
248 apply(erule alpha_gen_compose_trans) |
248 apply(erule alpha_gen_compose_trans) |
249 apply(assumption) |
249 apply(assumption) |
250 apply(erule alpha_eqvt) |
250 apply(erule alpha_eqvt) |
251 apply(rotate_tac 4) |
251 apply(rotate_tac 4) |
252 apply(erule artrm.cases) |
252 apply(erule alpha_rtrm.cases) |
253 apply(simp_all add: arkind_arty_artrm.intros) |
253 apply(simp_all add: alpha_rkind_alpha_rty_alpha_rtrm.intros) |
254 apply(rotate_tac 3) |
254 apply(rotate_tac 3) |
255 apply(erule artrm.cases) |
255 apply(erule alpha_rtrm.cases) |
256 apply(simp_all add: arkind_arty_artrm.intros) |
256 apply(simp_all add: alpha_rkind_alpha_rty_alpha_rtrm.intros) |
257 apply(simp add: arkind_arty_artrm_inj) |
257 apply(simp add: alpha_rkind_alpha_rty_alpha_rtrm_inj) |
258 apply(erule alpha_gen_compose_trans) |
258 apply(erule alpha_gen_compose_trans) |
259 apply(assumption) |
259 apply(assumption) |
260 apply(erule alpha_eqvt) |
260 apply(erule alpha_eqvt) |
261 done |
261 done |
262 |
262 |
263 lemma alpha_equivps: |
263 lemma alpha_equivps: |
264 shows "equivp arkind" |
264 shows "equivp alpha_rkind" |
265 and "equivp arty" |
265 and "equivp alpha_rty" |
266 and "equivp artrm" |
266 and "equivp alpha_rtrm" |
267 apply(rule equivpI) |
267 apply(rule equivpI) |
268 unfolding reflp_def symp_def transp_def |
268 unfolding reflp_def symp_def transp_def |
269 apply(auto intro: al_refl al_sym al_trans) |
269 apply(auto intro: al_refl al_sym al_trans) |
270 apply(rule equivpI) |
270 apply(rule equivpI) |
271 unfolding reflp_def symp_def transp_def |
271 unfolding reflp_def symp_def transp_def |
345 is |
345 is |
346 "fv_rtrm" |
346 "fv_rtrm" |
347 |
347 |
348 lemma alpha_rfv: |
348 lemma alpha_rfv: |
349 shows "(t \<approx>ki s \<longrightarrow> fv_rkind t = fv_rkind s) \<and> |
349 shows "(t \<approx>ki s \<longrightarrow> fv_rkind t = fv_rkind s) \<and> |
350 (t1 \<approx>rty s1 \<longrightarrow> fv_rty t1 = fv_rty s1) \<and> |
350 (t1 \<approx>ty s1 \<longrightarrow> fv_rty t1 = fv_rty s1) \<and> |
351 (t2 \<approx>tr s2 \<longrightarrow> fv_rtrm t2 = fv_rtrm s2)" |
351 (t2 \<approx>tr s2 \<longrightarrow> fv_rtrm t2 = fv_rtrm s2)" |
352 apply(rule arkind_arty_artrm.induct) |
352 apply(rule alpha_rkind_alpha_rty_alpha_rtrm.induct) |
353 apply(simp_all add: alpha_gen) |
353 apply(simp_all add: alpha_gen) |
354 done |
354 done |
355 |
355 |
356 lemma perm_rsp[quot_respect]: |
356 lemma perm_rsp[quot_respect]: |
357 "(op = ===> arkind ===> arkind) permute permute" |
357 "(op = ===> alpha_rkind ===> alpha_rkind) permute permute" |
358 "(op = ===> arty ===> arty) permute permute" |
358 "(op = ===> alpha_rty ===> alpha_rty) permute permute" |
359 "(op = ===> artrm ===> artrm) permute permute" |
359 "(op = ===> alpha_rtrm ===> alpha_rtrm) permute permute" |
360 by (simp_all add:alpha_eqvt) |
360 by (simp_all add:alpha_eqvt) |
361 |
361 |
362 lemma tconst_rsp[quot_respect]: |
362 lemma tconst_rsp[quot_respect]: |
363 "(op = ===> arty) TConst TConst" |
363 "(op = ===> alpha_rty) TConst TConst" |
364 apply (auto intro: a1 a2 a3 a4 a5 a6 a7 a8 a9) done |
364 apply (auto intro: alpha_rkind_alpha_rty_alpha_rtrm.intros) done |
365 lemma tapp_rsp[quot_respect]: |
365 lemma tapp_rsp[quot_respect]: |
366 "(arty ===> artrm ===> arty) TApp TApp" |
366 "(alpha_rty ===> alpha_rtrm ===> alpha_rty) TApp TApp" |
367 apply (auto intro: a1 a2 a3 a4 a5 a6 a7 a8 a9) done |
367 apply (auto intro: alpha_rkind_alpha_rty_alpha_rtrm.intros) done |
368 lemma var_rsp[quot_respect]: |
368 lemma var_rsp[quot_respect]: |
369 "(op = ===> artrm) Var Var" |
369 "(op = ===> alpha_rtrm) Var Var" |
370 apply (auto intro: a1 a2 a3 a4 a5 a6 a7 a8 a9) done |
370 apply (auto intro: alpha_rkind_alpha_rty_alpha_rtrm.intros) done |
371 lemma app_rsp[quot_respect]: |
371 lemma app_rsp[quot_respect]: |
372 "(artrm ===> artrm ===> artrm) App App" |
372 "(alpha_rtrm ===> alpha_rtrm ===> alpha_rtrm) App App" |
373 apply (auto intro: a1 a2 a3 a4 a5 a6 a7 a8 a9) done |
373 apply (auto intro: alpha_rkind_alpha_rty_alpha_rtrm.intros) done |
374 lemma const_rsp[quot_respect]: |
374 lemma const_rsp[quot_respect]: |
375 "(op = ===> artrm) Const Const" |
375 "(op = ===> alpha_rtrm) Const Const" |
376 apply (auto intro: a1 a2 a3 a4 a5 a6 a7 a8 a9) done |
376 apply (auto intro: alpha_rkind_alpha_rty_alpha_rtrm.intros) done |
377 |
377 |
378 lemma kpi_rsp[quot_respect]: |
378 lemma kpi_rsp[quot_respect]: |
379 "(arty ===> op = ===> arkind ===> arkind) KPi KPi" |
379 "(alpha_rty ===> op = ===> alpha_rkind ===> alpha_rkind) KPi KPi" |
380 apply (auto intro: a1 a2 a3 a4 a5 a6 a7 a8 a9) |
380 apply (auto intro: alpha_rkind_alpha_rty_alpha_rtrm.intros) |
381 apply (rule a2) apply assumption |
381 apply (rule alpha_rkind_alpha_rty_alpha_rtrm.intros(2)) apply simp_all |
382 apply (rule_tac x="0" in exI) |
382 apply (rule_tac x="0" in exI) |
383 apply (simp add: fresh_star_def fresh_zero_perm alpha_rfv alpha_gen) |
383 apply (simp add: fresh_star_def fresh_zero_perm alpha_rfv alpha_gen) |
384 done |
384 done |
385 |
385 |
386 lemma tpi_rsp[quot_respect]: |
386 lemma tpi_rsp[quot_respect]: |
387 "(arty ===> op = ===> arty ===> arty) TPi TPi" |
387 "(alpha_rty ===> op = ===> alpha_rty ===> alpha_rty) TPi TPi" |
388 apply (auto intro: a1 a2 a3 a4 a5 a6 a7 a8 a9) |
388 apply (auto intro: alpha_rkind_alpha_rty_alpha_rtrm.intros) |
389 apply (rule a5) apply assumption |
389 apply (rule alpha_rkind_alpha_rty_alpha_rtrm.intros(5)) apply simp_all |
390 apply (rule_tac x="0" in exI) |
390 apply (rule_tac x="0" in exI) |
391 apply (simp add: fresh_star_def fresh_zero_perm alpha_rfv alpha_gen) |
391 apply (simp add: fresh_star_def fresh_zero_perm alpha_rfv alpha_gen) |
392 done |
392 done |
393 lemma lam_rsp[quot_respect]: |
393 lemma lam_rsp[quot_respect]: |
394 "(arty ===> op = ===> artrm ===> artrm) Lam Lam" |
394 "(alpha_rty ===> op = ===> alpha_rtrm ===> alpha_rtrm) Lam Lam" |
395 apply (auto intro: a1 a2 a3 a4 a5 a6 a7 a8 a9) |
395 apply (auto intro: alpha_rkind_alpha_rty_alpha_rtrm.intros) |
396 apply (rule a9) apply assumption |
396 apply (rule alpha_rkind_alpha_rty_alpha_rtrm.intros(9)) apply simp_all |
397 apply (rule_tac x="0" in exI) |
397 apply (rule_tac x="0" in exI) |
398 apply (simp add: fresh_star_def fresh_zero_perm alpha_rfv alpha_gen) |
398 apply (simp add: fresh_star_def fresh_zero_perm alpha_rfv alpha_gen) |
399 done |
399 done |
400 |
400 |
401 lemma fv_rty_rsp[quot_respect]: |
401 lemma fv_rty_rsp[quot_respect]: |
402 "(arty ===> op =) fv_rty fv_rty" |
402 "(alpha_rty ===> op =) fv_rty fv_rty" |
403 by (simp add: alpha_rfv) |
403 by (simp add: alpha_rfv) |
404 lemma fv_rkind_rsp[quot_respect]: |
404 lemma fv_rkind_rsp[quot_respect]: |
405 "(arkind ===> op =) fv_rkind fv_rkind" |
405 "(alpha_rkind ===> op =) fv_rkind fv_rkind" |
406 by (simp add: alpha_rfv) |
406 by (simp add: alpha_rfv) |
407 lemma fv_rtrm_rsp[quot_respect]: |
407 lemma fv_rtrm_rsp[quot_respect]: |
408 "(artrm ===> op =) fv_rtrm fv_rtrm" |
408 "(alpha_rtrm ===> op =) fv_rtrm fv_rtrm" |
409 by (simp add: alpha_rfv) |
409 by (simp add: alpha_rfv) |
410 |
410 |
411 thm rkind_rty_rtrm.induct |
411 thm rkind_rty_rtrm.induct |
412 lemmas RKIND_RTY_RTRM_induct = rkind_rty_rtrm.induct[quot_lifted] |
412 lemmas RKIND_RTY_RTRM_induct = rkind_rty_rtrm.induct[quot_lifted] |
413 |
413 |