src/HOL/Hyperreal/StarType.thy
author huffman
Fri, 09 Sep 2005 19:34:22 +0200
changeset 17318 bc1c75855f3d
parent 17294 d7acf9f05eb2
child 17332 4910cf8c0cd2
permissions -rw-r--r--
starfun, starset, and other functions on NS types are now polymorphic; many similar theorems have been generalized and merged; (star_n X) replaces (Abs_star(starrel `` {X})); many proofs have been simplified with the transfer tactic.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
17294
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
     1
(*  Title       : HOL/Hyperreal/StarType.thy
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
     2
    ID          : $Id$
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
     3
    Author      : Jacques D. Fleuriot and Brian Huffman
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
     4
*)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
     5
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
     6
header {* Construction of Star Types Using Ultrafilters *}
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
     7
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
     8
theory StarType
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
     9
imports Filter
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    10
begin
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    11
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    12
subsection {* A Free Ultrafilter over the Naturals *}
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    13
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    14
constdefs
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    15
  FreeUltrafilterNat :: "nat set set"  ("\<U>")
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    16
    "\<U> \<equiv> SOME U. freeultrafilter U"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    17
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    18
lemma freeultrafilter_FUFNat: "freeultrafilter \<U>"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    19
 apply (unfold FreeUltrafilterNat_def)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    20
 apply (rule someI_ex)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    21
 apply (rule freeultrafilter_Ex)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    22
 apply (rule nat_infinite)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    23
done
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    24
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    25
lemmas ultrafilter_FUFNat =
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    26
  freeultrafilter_FUFNat [THEN freeultrafilter.ultrafilter]
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    27
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    28
lemmas filter_FUFNat =
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    29
  freeultrafilter_FUFNat [THEN freeultrafilter.filter]
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    30
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    31
lemmas FUFNat_empty [iff] =
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    32
  filter_FUFNat [THEN filter.empty]
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    33
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    34
lemmas FUFNat_UNIV [iff] =
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    35
  filter_FUFNat [THEN filter.UNIV]
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    36
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    37
text {* This rule takes the place of the old ultra tactic *}
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    38
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    39
lemma ultra:
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    40
  "\<lbrakk>{n. P n} \<in> \<U>; {n. P n \<longrightarrow> Q n} \<in> \<U>\<rbrakk> \<Longrightarrow> {n. Q n} \<in> \<U>"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    41
by (simp add: Collect_imp_eq
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    42
    ultrafilter_FUFNat [THEN ultrafilter.Un_iff]
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    43
    ultrafilter_FUFNat [THEN ultrafilter.Compl_iff])
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    44
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    45
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    46
subsection {* Definition of @{text star} type constructor *}
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    47
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    48
constdefs
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    49
  starrel :: "((nat \<Rightarrow> 'a) \<times> (nat \<Rightarrow> 'a)) set"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    50
    "starrel \<equiv> {(X,Y). {n. X n = Y n} \<in> \<U>}"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    51
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    52
typedef 'a star = "(UNIV :: (nat \<Rightarrow> 'a) set) // starrel"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    53
by (auto intro: quotientI)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    54
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    55
text {* Proving that @{term starrel} is an equivalence relation *}
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    56
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    57
lemma starrel_iff [iff]: "((X,Y) \<in> starrel) = ({n. X n = Y n} \<in> \<U>)"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    58
by (simp add: starrel_def)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    59
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    60
lemma equiv_starrel: "equiv UNIV starrel"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    61
proof (rule equiv.intro)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    62
  show "reflexive starrel" by (simp add: refl_def)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    63
  show "sym starrel" by (simp add: sym_def eq_commute)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    64
  show "trans starrel" by (auto intro: transI elim!: ultra)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    65
qed
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    66
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    67
lemmas equiv_starrel_iff =
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    68
  eq_equiv_class_iff [OF equiv_starrel UNIV_I UNIV_I]
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    69
  -- {* @{term "(starrel `` {x} = starrel `` {y}) = ((x,y) \<in> starrel)"} *}
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    70
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    71
lemma starrel_in_star: "starrel``{x} \<in> star"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    72
by (simp add: star_def starrel_def quotient_def, fast)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    73
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    74
lemma eq_Abs_star:
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    75
  "(\<And>x. z = Abs_star (starrel``{x}) \<Longrightarrow> P) \<Longrightarrow> P"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    76
 apply (rule_tac x=z in Abs_star_cases)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    77
 apply (unfold star_def)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    78
 apply (erule quotientE)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    79
 apply simp
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    80
done
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    81
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    82
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    83
subsection {* Constructors for type @{typ "'a star"} *}
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    84
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    85
constdefs
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    86
  star_n :: "(nat \<Rightarrow> 'a) \<Rightarrow> 'a star"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    87
  "star_n X \<equiv> Abs_star (starrel `` {X})"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    88
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    89
  star_of :: "'a \<Rightarrow> 'a star"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    90
  "star_of x \<equiv> star_n (\<lambda>n. x)"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    91
17318
bc1c75855f3d starfun, starset, and other functions on NS types are now polymorphic;
huffman
parents: 17294
diff changeset
    92
theorem star_cases [case_names star_n, cases type: star]:
17294
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    93
  "(\<And>X. x = star_n X \<Longrightarrow> P) \<Longrightarrow> P"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    94
by (unfold star_n_def, rule eq_Abs_star[of x], blast)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    95
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    96
lemma all_star_eq: "(\<forall>x. P x) = (\<forall>X. P (star_n X))"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    97
by (auto, rule_tac x=x in star_cases, simp)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    98
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
    99
lemma ex_star_eq: "(\<exists>x. P x) = (\<exists>X. P (star_n X))"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   100
by (auto, rule_tac x=x in star_cases, auto)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   101
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   102
lemma star_n_eq_iff: "(star_n X = star_n Y) = ({n. X n = Y n} \<in> \<U>)"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   103
 apply (unfold star_n_def)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   104
 apply (simp add: Abs_star_inject starrel_in_star equiv_starrel_iff)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   105
done
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   106
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   107
lemma star_of_inject: "(star_of x = star_of y) = (x = y)"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   108
by (simp add: star_of_def star_n_eq_iff)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   109
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   110
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   111
subsection {* Internal functions *}
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   112
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   113
constdefs
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   114
  Ifun :: "('a \<Rightarrow> 'b) star \<Rightarrow> 'a star \<Rightarrow> 'b star" ("_ \<star> _" [300,301] 300)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   115
  "Ifun f \<equiv> \<lambda>x. Abs_star
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   116
       (\<Union>F\<in>Rep_star f. \<Union>X\<in>Rep_star x. starrel``{\<lambda>n. F n (X n)})"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   117
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   118
lemma Ifun_star_n: "star_n F \<star> star_n X = star_n (\<lambda>n. F n (X n))"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   119
 apply (unfold Ifun_def star_n_def)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   120
 apply (simp add: Abs_star_inverse starrel_in_star)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   121
 apply (rule_tac f=Abs_star in arg_cong)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   122
 apply safe
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   123
  apply (erule ultra)+
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   124
  apply simp
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   125
 apply force
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   126
done
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   127
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   128
lemma Ifun [simp]: "star_of f \<star> star_of x = star_of (f x)"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   129
by (simp only: star_of_def Ifun_star_n)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   130
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   131
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   132
subsection {* Testing lifted booleans *}
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   133
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   134
constdefs
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   135
  unstar :: "bool star \<Rightarrow> bool"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   136
  "unstar b \<equiv> b = star_of True"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   137
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   138
lemma unstar_star_n: "unstar (star_n P) = ({n. P n} \<in> \<U>)"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   139
by (simp add: unstar_def star_of_def star_n_eq_iff)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   140
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   141
lemma unstar [simp]: "unstar (star_of p) = p"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   142
by (simp add: unstar_def star_of_inject)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   143
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   144
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   145
subsection {* Internal functions and predicates *}
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   146
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   147
constdefs
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   148
  Ifun_of :: "('a \<Rightarrow> 'b) \<Rightarrow> ('a star \<Rightarrow> 'b star)"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   149
  "Ifun_of f \<equiv> Ifun (star_of f)"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   150
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   151
  Ifun2 :: "('a \<Rightarrow> 'b \<Rightarrow> 'c) star \<Rightarrow> ('a star \<Rightarrow> 'b star \<Rightarrow> 'c star)"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   152
  "Ifun2 f \<equiv> \<lambda>x y. f \<star> x \<star> y"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   153
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   154
  Ifun2_of :: "('a \<Rightarrow> 'b \<Rightarrow> 'c) \<Rightarrow> ('a star \<Rightarrow> 'b star \<Rightarrow> 'c star)"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   155
  "Ifun2_of f \<equiv> \<lambda>x y. star_of f \<star> x \<star> y"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   156
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   157
  Ipred :: "('a \<Rightarrow> bool) star \<Rightarrow> ('a star \<Rightarrow> bool)"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   158
  "Ipred P \<equiv> \<lambda>x. unstar (P \<star> x)"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   159
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   160
  Ipred_of :: "('a \<Rightarrow> bool) \<Rightarrow> ('a star \<Rightarrow> bool)"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   161
  "Ipred_of P \<equiv> \<lambda>x. unstar (star_of P \<star> x)"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   162
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   163
  Ipred2 :: "('a \<Rightarrow> 'b \<Rightarrow> bool) star \<Rightarrow> ('a star \<Rightarrow> 'b star \<Rightarrow> bool)"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   164
  "Ipred2 P \<equiv> \<lambda>x y. unstar (P \<star> x \<star> y)"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   165
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   166
  Ipred2_of :: "('a \<Rightarrow> 'b \<Rightarrow> bool) \<Rightarrow> ('a star \<Rightarrow> 'b star \<Rightarrow> bool)"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   167
  "Ipred2_of P \<equiv> \<lambda>x y. unstar (star_of P \<star> x \<star> y)"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   168
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   169
lemma Ifun_of [simp]:
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   170
  "Ifun_of f (star_of x) = star_of (f x)"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   171
by (simp only: Ifun_of_def Ifun)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   172
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   173
lemma Ifun2_of [simp]:
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   174
  "Ifun2_of f (star_of x) (star_of y) = star_of (f x y)"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   175
by (simp only: Ifun2_of_def Ifun)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   176
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   177
lemma Ipred_of [simp]:
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   178
  "Ipred_of P (star_of x) = P x"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   179
by (simp only: Ipred_of_def Ifun unstar)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   180
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   181
lemma Ipred2_of [simp]:
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   182
  "Ipred2_of P (star_of x) (star_of y) = P x y"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   183
by (simp only: Ipred2_of_def Ifun unstar)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   184
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   185
lemmas Ifun_defs =
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   186
  star_of_def Ifun_of_def Ifun2_def Ifun2_of_def
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   187
  Ipred_def Ipred_of_def Ipred2_def Ipred2_of_def
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   188
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   189
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   190
subsection {* Internal sets *}
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   191
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   192
constdefs
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   193
  Iset :: "'a set star \<Rightarrow> 'a star set"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   194
  "Iset A \<equiv> {x. Ipred2_of (op \<in>) x A}"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   195
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   196
  Iset_of :: "'a set \<Rightarrow> 'a star set"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   197
  "Iset_of A \<equiv> Iset (star_of A)"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   198
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   199
lemma Iset_star_n:
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   200
  "(star_n X \<in> Iset (star_n A)) = ({n. X n \<in> A n} \<in> \<U>)"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   201
by (simp add: Iset_def Ipred2_of_def star_of_def Ifun_star_n unstar_star_n)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   202
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   203
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   204
subsection {* Class constants *}
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   205
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   206
instance star :: (ord) ord ..
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   207
instance star :: (zero) zero ..
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   208
instance star :: (one) one ..
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   209
instance star :: (plus) plus ..
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   210
instance star :: (times) times ..
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   211
instance star :: (minus) minus ..
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   212
instance star :: (inverse) inverse ..
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   213
instance star :: (number) number ..
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   214
instance star :: ("Divides.div") "Divides.div" ..
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   215
instance star :: (power) power ..
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   216
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   217
defs (overloaded)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   218
  star_zero_def:    "0 \<equiv> star_of 0"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   219
  star_one_def:     "1 \<equiv> star_of 1"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   220
  star_number_def:  "number_of b \<equiv> star_of (number_of b)"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   221
  star_add_def:     "(op +) \<equiv> Ifun2_of (op +)"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   222
  star_diff_def:    "(op -) \<equiv> Ifun2_of (op -)"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   223
  star_minus_def:   "uminus \<equiv> Ifun_of uminus"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   224
  star_mult_def:    "(op *) \<equiv> Ifun2_of (op *)"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   225
  star_divide_def:  "(op /) \<equiv> Ifun2_of (op /)"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   226
  star_inverse_def: "inverse \<equiv> Ifun_of inverse"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   227
  star_le_def:      "(op \<le>) \<equiv> Ipred2_of (op \<le>)"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   228
  star_less_def:    "(op <) \<equiv> Ipred2_of (op <)"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   229
  star_abs_def:     "abs \<equiv> Ifun_of abs"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   230
  star_div_def:     "(op div) \<equiv> Ifun2_of (op div)"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   231
  star_mod_def:     "(op mod) \<equiv> Ifun2_of (op mod)"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   232
  star_power_def:   "(op ^) \<equiv> \<lambda>x n. Ifun_of (\<lambda>x. x ^ n) x"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   233
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   234
lemmas star_class_defs =
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   235
  star_zero_def     star_one_def      star_number_def
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   236
  star_add_def      star_diff_def     star_minus_def
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   237
  star_mult_def     star_divide_def   star_inverse_def
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   238
  star_le_def       star_less_def     star_abs_def
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   239
  star_div_def      star_mod_def      star_power_def
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   240
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   241
text {* @{term star_of} preserves class operations *}
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   242
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   243
lemma star_of_add: "star_of (x + y) = star_of x + star_of y"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   244
by (simp add: star_add_def)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   245
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   246
lemma star_of_diff: "star_of (x - y) = star_of x - star_of y"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   247
by (simp add: star_diff_def)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   248
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   249
lemma star_of_minus: "star_of (-x) = - star_of x"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   250
by (simp add: star_minus_def)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   251
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   252
lemma star_of_mult: "star_of (x * y) = star_of x * star_of y"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   253
by (simp add: star_mult_def)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   254
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   255
lemma star_of_divide: "star_of (x / y) = star_of x / star_of y"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   256
by (simp add: star_divide_def)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   257
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   258
lemma star_of_inverse: "star_of (inverse x) = inverse (star_of x)"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   259
by (simp add: star_inverse_def)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   260
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   261
lemma star_of_div: "star_of (x div y) = star_of x div star_of y"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   262
by (simp add: star_div_def)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   263
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   264
lemma star_of_mod: "star_of (x mod y) = star_of x mod star_of y"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   265
by (simp add: star_mod_def)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   266
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   267
lemma star_of_power: "star_of (x ^ n) = star_of x ^ n"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   268
by (simp add: star_power_def)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   269
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   270
lemma star_of_abs: "star_of (abs x) = abs (star_of x)"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   271
by (simp add: star_abs_def)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   272
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   273
text {* @{term star_of} preserves numerals *}
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   274
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   275
lemma star_of_zero: "star_of 0 = 0"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   276
by (simp add: star_zero_def)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   277
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   278
lemma star_of_one: "star_of 1 = 1"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   279
by (simp add: star_one_def)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   280
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   281
lemma star_of_number_of: "star_of (number_of x) = number_of x"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   282
by (simp add: star_number_def)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   283
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   284
text {* @{term star_of} preserves orderings *}
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   285
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   286
lemma star_of_less: "(star_of x < star_of y) = (x < y)"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   287
by (simp add: star_less_def)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   288
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   289
lemma star_of_le: "(star_of x \<le> star_of y) = (x \<le> y)"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   290
by (simp add: star_le_def)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   291
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   292
lemma star_of_eq: "(star_of x = star_of y) = (x = y)"
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   293
by (rule star_of_inject)
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   294
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   295
text{*As above, for 0*}
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   296
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   297
lemmas star_of_0_less = star_of_less [of 0, simplified star_of_zero]
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   298
lemmas star_of_0_le   = star_of_le   [of 0, simplified star_of_zero]
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   299
lemmas star_of_0_eq   = star_of_eq   [of 0, simplified star_of_zero]
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   300
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   301
lemmas star_of_less_0 = star_of_less [of _ 0, simplified star_of_zero]
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   302
lemmas star_of_le_0   = star_of_le   [of _ 0, simplified star_of_zero]
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   303
lemmas star_of_eq_0   = star_of_eq   [of _ 0, simplified star_of_zero]
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   304
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   305
text{*As above, for 1*}
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   306
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   307
lemmas star_of_1_less = star_of_less [of 1, simplified star_of_one]
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   308
lemmas star_of_1_le   = star_of_le   [of 1, simplified star_of_one]
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   309
lemmas star_of_1_eq   = star_of_eq   [of 1, simplified star_of_one]
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   310
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   311
lemmas star_of_less_1 = star_of_less [of _ 1, simplified star_of_one]
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   312
lemmas star_of_le_1   = star_of_le   [of _ 1, simplified star_of_one]
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   313
lemmas star_of_eq_1   = star_of_eq   [of _ 1, simplified star_of_one]
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   314
17318
bc1c75855f3d starfun, starset, and other functions on NS types are now polymorphic;
huffman
parents: 17294
diff changeset
   315
text{*As above, for numerals*}
bc1c75855f3d starfun, starset, and other functions on NS types are now polymorphic;
huffman
parents: 17294
diff changeset
   316
bc1c75855f3d starfun, starset, and other functions on NS types are now polymorphic;
huffman
parents: 17294
diff changeset
   317
lemmas star_of_number_less =
bc1c75855f3d starfun, starset, and other functions on NS types are now polymorphic;
huffman
parents: 17294
diff changeset
   318
  star_of_less [of "number_of b", simplified star_of_number_of, standard]
bc1c75855f3d starfun, starset, and other functions on NS types are now polymorphic;
huffman
parents: 17294
diff changeset
   319
lemmas star_of_number_le   =
bc1c75855f3d starfun, starset, and other functions on NS types are now polymorphic;
huffman
parents: 17294
diff changeset
   320
  star_of_le   [of "number_of b", simplified star_of_number_of, standard]
bc1c75855f3d starfun, starset, and other functions on NS types are now polymorphic;
huffman
parents: 17294
diff changeset
   321
lemmas star_of_number_eq   =
bc1c75855f3d starfun, starset, and other functions on NS types are now polymorphic;
huffman
parents: 17294
diff changeset
   322
  star_of_eq   [of "number_of b", simplified star_of_number_of, standard]
bc1c75855f3d starfun, starset, and other functions on NS types are now polymorphic;
huffman
parents: 17294
diff changeset
   323
bc1c75855f3d starfun, starset, and other functions on NS types are now polymorphic;
huffman
parents: 17294
diff changeset
   324
lemmas star_of_less_number =
bc1c75855f3d starfun, starset, and other functions on NS types are now polymorphic;
huffman
parents: 17294
diff changeset
   325
  star_of_less [of _ "number_of b", simplified star_of_number_of, standard]
bc1c75855f3d starfun, starset, and other functions on NS types are now polymorphic;
huffman
parents: 17294
diff changeset
   326
lemmas star_of_le_number   =
bc1c75855f3d starfun, starset, and other functions on NS types are now polymorphic;
huffman
parents: 17294
diff changeset
   327
  star_of_le   [of _ "number_of b", simplified star_of_number_of, standard]
bc1c75855f3d starfun, starset, and other functions on NS types are now polymorphic;
huffman
parents: 17294
diff changeset
   328
lemmas star_of_eq_number   =
bc1c75855f3d starfun, starset, and other functions on NS types are now polymorphic;
huffman
parents: 17294
diff changeset
   329
  star_of_eq   [of _ "number_of b", simplified star_of_number_of, standard]
bc1c75855f3d starfun, starset, and other functions on NS types are now polymorphic;
huffman
parents: 17294
diff changeset
   330
17294
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   331
lemmas star_of_simps =
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   332
  star_of_add     star_of_diff    star_of_minus
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   333
  star_of_mult    star_of_divide  star_of_inverse
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   334
  star_of_div     star_of_mod
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   335
  star_of_power   star_of_abs
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   336
  star_of_zero    star_of_one     star_of_number_of
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   337
  star_of_less    star_of_le      star_of_eq
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   338
  star_of_0_less  star_of_0_le    star_of_0_eq
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   339
  star_of_less_0  star_of_le_0    star_of_eq_0
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   340
  star_of_1_less  star_of_1_le    star_of_1_eq
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   341
  star_of_less_1  star_of_le_1    star_of_eq_1
17318
bc1c75855f3d starfun, starset, and other functions on NS types are now polymorphic;
huffman
parents: 17294
diff changeset
   342
  star_of_number_less star_of_number_le star_of_number_eq
bc1c75855f3d starfun, starset, and other functions on NS types are now polymorphic;
huffman
parents: 17294
diff changeset
   343
  star_of_less_number star_of_le_number star_of_eq_number
17294
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   344
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   345
declare star_of_simps [simp]
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   346
d7acf9f05eb2 generic nonstandard type constructor
huffman
parents:
diff changeset
   347
end