src/HOL/Lambda/ListApplication.thy
author kleing
Sat, 30 Apr 2005 14:18:36 +0200
changeset 15900 d6156cb8dc2e
parent 14066 fe45b97b62ea
child 16417 9bc16273c2d4
permissions -rw-r--r--
fixed typo
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5261
ce3c25c8a694 First steps towards termination of simply typed terms.
nipkow
parents:
diff changeset
     1
(*  Title:      HOL/Lambda/ListApplication.thy
ce3c25c8a694 First steps towards termination of simply typed terms.
nipkow
parents:
diff changeset
     2
    ID:         $Id$
ce3c25c8a694 First steps towards termination of simply typed terms.
nipkow
parents:
diff changeset
     3
    Author:     Tobias Nipkow
ce3c25c8a694 First steps towards termination of simply typed terms.
nipkow
parents:
diff changeset
     4
    Copyright   1998 TU Muenchen
9811
39ffdb8cab03 HOL/Lambda: converted into new-style theory and document;
wenzelm
parents: 9771
diff changeset
     5
*)
5261
ce3c25c8a694 First steps towards termination of simply typed terms.
nipkow
parents:
diff changeset
     6
9811
39ffdb8cab03 HOL/Lambda: converted into new-style theory and document;
wenzelm
parents: 9771
diff changeset
     7
header {* Application of a term to a list of terms *}
5261
ce3c25c8a694 First steps towards termination of simply typed terms.
nipkow
parents:
diff changeset
     8
9771
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
     9
theory ListApplication = Lambda:
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    10
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    11
syntax
12011
1a3a7b3cd9bb tuned notation (degree instead of dollar);
wenzelm
parents: 11947
diff changeset
    12
  "_list_application" :: "dB => dB list => dB"    (infixl "\<degree>\<degree>" 150)
1a3a7b3cd9bb tuned notation (degree instead of dollar);
wenzelm
parents: 11947
diff changeset
    13
translations
1a3a7b3cd9bb tuned notation (degree instead of dollar);
wenzelm
parents: 11947
diff changeset
    14
  "t \<degree>\<degree> ts" == "foldl (op \<degree>) t ts"
11943
a9672446b45f tuned notation;
wenzelm
parents: 11549
diff changeset
    15
12011
1a3a7b3cd9bb tuned notation (degree instead of dollar);
wenzelm
parents: 11947
diff changeset
    16
lemma apps_eq_tail_conv [iff]: "(r \<degree>\<degree> ts = s \<degree>\<degree> ts) = (r = s)"
9771
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    17
  apply (induct_tac ts rule: rev_induct)
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    18
   apply auto
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    19
  done
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    20
13915
28ccb51bd2f3 Eliminated most occurrences of rule_format attribute.
berghofe
parents: 12011
diff changeset
    21
lemma Var_eq_apps_conv [iff]:
28ccb51bd2f3 Eliminated most occurrences of rule_format attribute.
berghofe
parents: 12011
diff changeset
    22
    "\<And>s. (Var m = s \<degree>\<degree> ss) = (Var m = s \<and> ss = [])"
28ccb51bd2f3 Eliminated most occurrences of rule_format attribute.
berghofe
parents: 12011
diff changeset
    23
  apply (induct ss)
9771
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    24
   apply auto
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    25
  done
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    26
13915
28ccb51bd2f3 Eliminated most occurrences of rule_format attribute.
berghofe
parents: 12011
diff changeset
    27
lemma Var_apps_eq_Var_apps_conv [iff]:
28ccb51bd2f3 Eliminated most occurrences of rule_format attribute.
berghofe
parents: 12011
diff changeset
    28
    "\<And>ss. (Var m \<degree>\<degree> rs = Var n \<degree>\<degree> ss) = (m = n \<and> rs = ss)"
28ccb51bd2f3 Eliminated most occurrences of rule_format attribute.
berghofe
parents: 12011
diff changeset
    29
  apply (induct rs rule: rev_induct)
9771
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    30
   apply simp
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    31
   apply blast
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    32
  apply (induct_tac ss rule: rev_induct)
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    33
   apply auto
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    34
  done
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    35
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    36
lemma App_eq_foldl_conv:
12011
1a3a7b3cd9bb tuned notation (degree instead of dollar);
wenzelm
parents: 11947
diff changeset
    37
  "(r \<degree> s = t \<degree>\<degree> ts) =
1a3a7b3cd9bb tuned notation (degree instead of dollar);
wenzelm
parents: 11947
diff changeset
    38
    (if ts = [] then r \<degree> s = t
1a3a7b3cd9bb tuned notation (degree instead of dollar);
wenzelm
parents: 11947
diff changeset
    39
    else (\<exists>ss. ts = ss @ [s] \<and> r = t \<degree>\<degree> ss))"
9771
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    40
  apply (rule_tac xs = ts in rev_exhaust)
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    41
   apply auto
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    42
  done
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    43
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    44
lemma Abs_eq_apps_conv [iff]:
12011
1a3a7b3cd9bb tuned notation (degree instead of dollar);
wenzelm
parents: 11947
diff changeset
    45
    "(Abs r = s \<degree>\<degree> ss) = (Abs r = s \<and> ss = [])"
9771
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    46
  apply (induct_tac ss rule: rev_induct)
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    47
   apply auto
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    48
  done
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    49
12011
1a3a7b3cd9bb tuned notation (degree instead of dollar);
wenzelm
parents: 11947
diff changeset
    50
lemma apps_eq_Abs_conv [iff]: "(s \<degree>\<degree> ss = Abs r) = (s = Abs r \<and> ss = [])"
9771
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    51
  apply (induct_tac ss rule: rev_induct)
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    52
   apply auto
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    53
  done
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    54
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    55
lemma Abs_apps_eq_Abs_apps_conv [iff]:
13915
28ccb51bd2f3 Eliminated most occurrences of rule_format attribute.
berghofe
parents: 12011
diff changeset
    56
    "\<And>ss. (Abs r \<degree>\<degree> rs = Abs s \<degree>\<degree> ss) = (r = s \<and> rs = ss)"
28ccb51bd2f3 Eliminated most occurrences of rule_format attribute.
berghofe
parents: 12011
diff changeset
    57
  apply (induct rs rule: rev_induct)
9771
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    58
   apply simp
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    59
   apply blast
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    60
  apply (induct_tac ss rule: rev_induct)
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    61
   apply auto
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    62
  done
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    63
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    64
lemma Abs_App_neq_Var_apps [iff]:
12011
1a3a7b3cd9bb tuned notation (degree instead of dollar);
wenzelm
parents: 11947
diff changeset
    65
    "\<forall>s t. Abs s \<degree> t ~= Var n \<degree>\<degree> ss"
9771
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    66
  apply (induct_tac ss rule: rev_induct)
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    67
   apply auto
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    68
  done
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    69
13915
28ccb51bd2f3 Eliminated most occurrences of rule_format attribute.
berghofe
parents: 12011
diff changeset
    70
lemma Var_apps_neq_Abs_apps [iff]:
28ccb51bd2f3 Eliminated most occurrences of rule_format attribute.
berghofe
parents: 12011
diff changeset
    71
    "\<And>ts. Var n \<degree>\<degree> ts ~= Abs r \<degree>\<degree> ss"
28ccb51bd2f3 Eliminated most occurrences of rule_format attribute.
berghofe
parents: 12011
diff changeset
    72
  apply (induct ss rule: rev_induct)
9771
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    73
   apply simp
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    74
  apply (induct_tac ts rule: rev_induct)
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    75
   apply auto
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    76
  done
5261
ce3c25c8a694 First steps towards termination of simply typed terms.
nipkow
parents:
diff changeset
    77
9771
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    78
lemma ex_head_tail:
12011
1a3a7b3cd9bb tuned notation (degree instead of dollar);
wenzelm
parents: 11947
diff changeset
    79
  "\<exists>ts h. t = h \<degree>\<degree> ts \<and> ((\<exists>n. h = Var n) \<or> (\<exists>u. h = Abs u))"
9771
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    80
  apply (induct_tac t)
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    81
    apply (rule_tac x = "[]" in exI)
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    82
    apply simp
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    83
   apply clarify
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    84
   apply (rename_tac ts1 ts2 h1 h2)
12011
1a3a7b3cd9bb tuned notation (degree instead of dollar);
wenzelm
parents: 11947
diff changeset
    85
   apply (rule_tac x = "ts1 @ [h2 \<degree>\<degree> ts2]" in exI)
9771
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    86
   apply simp
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    87
  apply simp
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    88
  done
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    89
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    90
lemma size_apps [simp]:
12011
1a3a7b3cd9bb tuned notation (degree instead of dollar);
wenzelm
parents: 11947
diff changeset
    91
  "size (r \<degree>\<degree> rs) = size r + foldl (op +) 0 (map size rs) + length rs"
9771
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    92
  apply (induct_tac rs rule: rev_induct)
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    93
   apply auto
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    94
  done
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    95
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    96
lemma lem0: "[| (0::nat) < k; m <= n |] ==> m < n + k"
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    97
  apply simp
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    98
  done
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
    99
14066
fe45b97b62ea Added lift_map and subst_map.
berghofe
parents: 13915
diff changeset
   100
lemma lift_map [simp]:
fe45b97b62ea Added lift_map and subst_map.
berghofe
parents: 13915
diff changeset
   101
    "\<And>t. lift (t \<degree>\<degree> ts) i = lift t i \<degree>\<degree> map (\<lambda>t. lift t i) ts"
fe45b97b62ea Added lift_map and subst_map.
berghofe
parents: 13915
diff changeset
   102
  by (induct ts) simp_all
fe45b97b62ea Added lift_map and subst_map.
berghofe
parents: 13915
diff changeset
   103
fe45b97b62ea Added lift_map and subst_map.
berghofe
parents: 13915
diff changeset
   104
lemma subst_map [simp]:
fe45b97b62ea Added lift_map and subst_map.
berghofe
parents: 13915
diff changeset
   105
    "\<And>t. subst (t \<degree>\<degree> ts) u i = subst t u i \<degree>\<degree> map (\<lambda>t. subst t u i) ts"
fe45b97b62ea Added lift_map and subst_map.
berghofe
parents: 13915
diff changeset
   106
  by (induct ts) simp_all
fe45b97b62ea Added lift_map and subst_map.
berghofe
parents: 13915
diff changeset
   107
fe45b97b62ea Added lift_map and subst_map.
berghofe
parents: 13915
diff changeset
   108
lemma app_last: "(t \<degree>\<degree> ts) \<degree> u = t \<degree>\<degree> (ts @ [u])"
fe45b97b62ea Added lift_map and subst_map.
berghofe
parents: 13915
diff changeset
   109
  by simp
fe45b97b62ea Added lift_map and subst_map.
berghofe
parents: 13915
diff changeset
   110
9811
39ffdb8cab03 HOL/Lambda: converted into new-style theory and document;
wenzelm
parents: 9771
diff changeset
   111
12011
1a3a7b3cd9bb tuned notation (degree instead of dollar);
wenzelm
parents: 11947
diff changeset
   112
text {* \medskip A customized induction schema for @{text "\<degree>\<degree>"}. *}
9771
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   113
9941
fe05af7ec816 renamed atts: rulify to rule_format, elimify to elim_format;
wenzelm
parents: 9906
diff changeset
   114
lemma lem [rule_format (no_asm)]:
12011
1a3a7b3cd9bb tuned notation (degree instead of dollar);
wenzelm
parents: 11947
diff changeset
   115
  "[| !!n ts. \<forall>t \<in> set ts. P t ==> P (Var n \<degree>\<degree> ts);
1a3a7b3cd9bb tuned notation (degree instead of dollar);
wenzelm
parents: 11947
diff changeset
   116
    !!u ts. [| P u; \<forall>t \<in> set ts. P t |] ==> P (Abs u \<degree>\<degree> ts)
9771
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   117
  |] ==> \<forall>t. size t = n --> P t"
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   118
proof -
11549
e7265e70fd7c renamed "antecedent" case to "rule_context";
wenzelm
parents: 9941
diff changeset
   119
  case rule_context
9771
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   120
  show ?thesis
9870
2374ba026fc6 less_induct -> nat_less_induct
nipkow
parents: 9811
diff changeset
   121
   apply (induct_tac n rule: nat_less_induct)
9771
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   122
   apply (rule allI)
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   123
   apply (cut_tac t = t in ex_head_tail)
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   124
   apply clarify
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   125
   apply (erule disjE)
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   126
    apply clarify
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   127
    apply (rule prems)
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   128
    apply clarify
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   129
    apply (erule allE, erule impE)
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   130
      prefer 2
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   131
      apply (erule allE, erule mp, rule refl)
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   132
     apply simp
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   133
     apply (rule lem0)
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   134
      apply force
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   135
     apply (rule elem_le_sum)
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   136
     apply force
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   137
    apply clarify
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   138
    apply (rule prems)
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   139
     apply (erule allE, erule impE)
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   140
      prefer 2
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   141
      apply (erule allE, erule mp, rule refl)
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   142
     apply simp
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   143
    apply clarify
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   144
    apply (erule allE, erule impE)
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   145
     prefer 2
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   146
     apply (erule allE, erule mp, rule refl)
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   147
    apply simp
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   148
    apply (rule le_imp_less_Suc)
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   149
    apply (rule trans_le_add1)
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   150
    apply (rule trans_le_add2)
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   151
    apply (rule elem_le_sum)
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   152
    apply force
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   153
    done
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   154
qed
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   155
9811
39ffdb8cab03 HOL/Lambda: converted into new-style theory and document;
wenzelm
parents: 9771
diff changeset
   156
theorem Apps_dB_induct:
12011
1a3a7b3cd9bb tuned notation (degree instead of dollar);
wenzelm
parents: 11947
diff changeset
   157
  "[| !!n ts. \<forall>t \<in> set ts. P t ==> P (Var n \<degree>\<degree> ts);
1a3a7b3cd9bb tuned notation (degree instead of dollar);
wenzelm
parents: 11947
diff changeset
   158
    !!u ts. [| P u; \<forall>t \<in> set ts. P t |] ==> P (Abs u \<degree>\<degree> ts)
9771
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   159
  |] ==> P t"
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   160
proof -
11549
e7265e70fd7c renamed "antecedent" case to "rule_context";
wenzelm
parents: 9941
diff changeset
   161
  case rule_context
9771
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   162
  show ?thesis
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   163
    apply (rule_tac t = t in lem)
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   164
      prefer 3
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   165
      apply (rule refl)
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   166
     apply (assumption | rule prems)+
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   167
    done
54c6a2c6e569 converted Lambda scripts;
wenzelm
parents: 9102
diff changeset
   168
qed
5261
ce3c25c8a694 First steps towards termination of simply typed terms.
nipkow
parents:
diff changeset
   169
9870
2374ba026fc6 less_induct -> nat_less_induct
nipkow
parents: 9811
diff changeset
   170
end