equal
deleted
inserted
replaced
1 (* Title: HOL/Lambda/StrongNorm.thy |
1 (* Title: HOL/Lambda/StrongNorm.thy |
2 ID: $Id$ |
|
3 Author: Stefan Berghofer |
2 Author: Stefan Berghofer |
4 Copyright 2000 TU Muenchen |
3 Copyright 2000 TU Muenchen |
5 *) |
4 *) |
6 |
5 |
7 header {* Strong normalization for simply-typed lambda calculus *} |
6 header {* Strong normalization for simply-typed lambda calculus *} |
228 have "Abs r \<degree> a \<degree>\<degree> as \<rightarrow>\<^sub>\<beta> r[a/0] \<degree>\<degree> as" |
227 have "Abs r \<degree> a \<degree>\<degree> as \<rightarrow>\<^sub>\<beta> r[a/0] \<degree>\<degree> as" |
229 by (rule apps_preserves_beta) (rule beta.beta) |
228 by (rule apps_preserves_beta) (rule beta.beta) |
230 with T have "e\<langle>i:T\<rangle> \<turnstile> r[a/0] \<degree>\<degree> as : T'" |
229 with T have "e\<langle>i:T\<rangle> \<turnstile> r[a/0] \<degree>\<degree> as : T'" |
231 by (rule subject_reduction) |
230 by (rule subject_reduction) |
232 hence "IT ((r[a/0] \<degree>\<degree> as)[u/i])" |
231 hence "IT ((r[a/0] \<degree>\<degree> as)[u/i])" |
233 using uIT uT by (rule SI1) |
232 using uIT uT by (rule SI1) |
234 thus "IT (r[lift u 0/Suc i][a[u/i]/0] \<degree>\<degree> map (\<lambda>t. t[u/i]) as)" |
233 thus "IT (r[lift u 0/Suc i][a[u/i]/0] \<degree>\<degree> map (\<lambda>t. t[u/i]) as)" |
235 by (simp del: subst_map add: subst_subst subst_map [symmetric]) |
234 by (simp del: subst_map add: subst_subst subst_map [symmetric]) |
236 from T obtain U where "e\<langle>i:T\<rangle> \<turnstile> Abs r \<degree> a : U" |
235 from T obtain U where "e\<langle>i:T\<rangle> \<turnstile> Abs r \<degree> a : U" |
237 by (rule list_app_typeE) fast |
236 by (rule list_app_typeE) fast |
238 then obtain T'' where "e\<langle>i:T\<rangle> \<turnstile> a : T''" by cases simp_all |
237 then obtain T'' where "e\<langle>i:T\<rangle> \<turnstile> a : T''" by cases simp_all |