src/HOL/Lambda/InductTermi.thy
changeset 11946 adef41692ab0
parent 11639 4213422388c4
child 12011 1a3a7b3cd9bb
equal deleted inserted replaced
11945:1b540afebf4d 11946:adef41692ab0
    17 consts
    17 consts
    18   IT :: "dB set"
    18   IT :: "dB set"
    19 
    19 
    20 inductive IT
    20 inductive IT
    21   intros
    21   intros
    22     Var: "rs : lists IT ==> Var n $$ rs : IT"
    22     Var [intro]: "rs : lists IT ==> Var n $$ rs : IT"
    23     Lambda: "r : IT ==> Abs r : IT"
    23     Lambda [intro]: "r : IT ==> Abs r : IT"
    24     Beta: "[| (r[s/0]) $$ ss : IT; s : IT |] ==> (Abs r $ s) $$ ss : IT"
    24     Beta [intro]: "(r[s/0]) $$ ss : IT ==> s : IT ==> (Abs r $ s) $$ ss : IT"
    25 
    25 
    26 
    26 
    27 subsection {* Every term in IT terminates *}
    27 subsection {* Every term in IT terminates *}
    28 
    28 
    29 lemma double_induction_lemma [rule_format]:
    29 lemma double_induction_lemma [rule_format]:
    63 
    63 
    64 subsection {* Every terminating term is in IT *}
    64 subsection {* Every terminating term is in IT *}
    65 
    65 
    66 declare Var_apps_neq_Abs_apps [THEN not_sym, simp]
    66 declare Var_apps_neq_Abs_apps [THEN not_sym, simp]
    67 
    67 
    68 lemma [simp, THEN not_sym, simp]: "Var n $$ ss ~= Abs r $ s $$ ts"
    68 lemma [simp, THEN not_sym, simp]: "Var n $$ ss \<noteq> Abs r $ s $$ ts"
    69   apply (simp add: foldl_Cons [symmetric] del: foldl_Cons)
    69   apply (simp add: foldl_Cons [symmetric] del: foldl_Cons)
    70   done
    70   done
    71 
    71 
    72 lemma [simp]:
    72 lemma [simp]:
    73   "(Abs r $ s $$ ss = Abs r' $ s' $$ ss') = (r = r' \<and> s = s' \<and> ss = ss')"
    73   "(Abs r $ s $$ ss = Abs r' $ s' $$ ss') = (r = r' \<and> s = s' \<and> ss = ss')"
    99    apply (erule_tac x = "Var n $$ us" in allE)
    99    apply (erule_tac x = "Var n $$ us" in allE)
   100    apply force
   100    apply force
   101    apply (rename_tac u ts)
   101    apply (rename_tac u ts)
   102    apply (case_tac ts)
   102    apply (case_tac ts)
   103     apply simp
   103     apply simp
   104     apply (blast intro: IT.intros)
   104     apply blast
   105    apply (rename_tac s ss)
   105    apply (rename_tac s ss)
   106    apply simp
   106    apply simp
   107    apply clarify
   107    apply clarify
   108    apply (rule IT.intros)
   108    apply (rule IT.intros)
   109     apply (blast intro: apps_preserves_beta)
   109     apply (blast intro: apps_preserves_beta)