doc-src/TutorialI/Inductive/Advanced.thy
author nipkow
Mon, 06 Nov 2000 11:32:23 +0100
changeset 10396 5ab08609e6c8
parent 10370 99bd3e902979
child 10426 469f19c4bf97
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10370
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
     1
(* ID:         $Id$ *)
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
     2
theory Advanced = Main:
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
     3
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
     4
datatype 'f "term" = Apply 'f "'f term list"
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
     5
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
     6
consts terms :: "'f set \<Rightarrow> 'f term set"
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
     7
inductive "terms F"
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
     8
intros
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
     9
step[intro]: "\<lbrakk>\<forall>t \<in> set term_list. t \<in> terms F;  f \<in> F\<rbrakk>
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
    10
              \<Longrightarrow> (Apply f term_list) \<in> terms F"
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
    11
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
    12
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
    13
lemma "F\<subseteq>G \<Longrightarrow> terms F \<subseteq> terms G"
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
    14
apply clarify
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
    15
apply (erule terms.induct)
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
    16
apply blast
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
    17
done
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
    18
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
    19
consts term_type :: "('f \<Rightarrow> 't list * 't) \<Rightarrow> ('f term * 't)set"
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
    20
inductive "term_type sig"
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
    21
intros
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
    22
step[intro]: "\<lbrakk>\<forall>et \<in> set term_type_list. et \<in> term_type sig; 
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
    23
               sig f = (map snd term_type_list, rtype)\<rbrakk>
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
    24
              \<Longrightarrow> (Apply f (map fst term_type_list), rtype) \<in> term_type sig"
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
    25
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
    26
consts term_type' :: "('f \<Rightarrow> 't list * 't) \<Rightarrow> ('f term * 't)set"
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
    27
inductive "term_type' sig"
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
    28
intros
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
    29
step[intro]: "\<lbrakk>term_type_list \<in> lists(term_type' sig); 
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
    30
                 sig f = (map snd term_type_list, rtype)\<rbrakk>
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
    31
              \<Longrightarrow> (Apply f (map fst term_type_list), rtype) \<in> term_type' sig"
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
    32
monos lists_mono
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
    33
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
    34
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
    35
lemma "term_type sig \<subseteq> term_type' sig"
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
    36
apply clarify
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
    37
apply (erule term_type.induct)
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
    38
apply auto
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
    39
done
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
    40
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
    41
lemma "term_type' sig \<subseteq> term_type sig"
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
    42
apply clarify
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
    43
apply (erule term_type'.induct)
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
    44
apply auto
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
    45
done
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
    46
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
    47
end
99bd3e902979 advanced induction examples
paulson
parents:
diff changeset
    48