merged
authorhaftmann
Sat Aug 20 09:30:23 2011 +0200 (2011-08-20)
changeset 4432746d5e7f52ba5
parent 44320 33439faadd67
parent 44326 2b088d74beb3
child 44328 cbc6187710c9
merged
     1.1 --- a/NEWS	Fri Aug 19 19:01:00 2011 -0700
     1.2 +++ b/NEWS	Sat Aug 20 09:30:23 2011 +0200
     1.3 @@ -70,7 +70,8 @@
     1.4  generalized theorems INF_cong and SUP_cong.  New type classes for complete
     1.5  boolean algebras and complete linear orders.  Lemmas Inf_less_iff,
     1.6  less_Sup_iff, INF_less_iff, less_SUP_iff now reside in class complete_linorder.
     1.7 -Changed proposition of lemmas Inf_fun_def, Sup_fun_def, Inf_apply, Sup_apply.
     1.8 +Changed proposition of lemmas Inf_bool_def, Sup_bool_def, Inf_fun_def, Sup_fun_def,
     1.9 +Inf_apply, Sup_apply.
    1.10  Redundant lemmas Inf_singleton, Sup_singleton, Inf_binary, Sup_binary,
    1.11  INF_eq, SUP_eq, INF_UNIV_range, SUP_UNIV_range, Int_eq_Inter,
    1.12  INTER_eq_Inter_image, Inter_def, INT_eq, Un_eq_Union, UNION_eq_Union_image,
     2.1 --- a/src/HOL/Complete_Lattice.thy	Fri Aug 19 19:01:00 2011 -0700
     2.2 +++ b/src/HOL/Complete_Lattice.thy	Sat Aug 20 09:30:23 2011 +0200
     2.3 @@ -414,8 +414,7 @@
     2.4    apply (simp_all only: INF_foundation_dual SUP_foundation_dual inf_Sup sup_Inf)
     2.5    done
     2.6  
     2.7 -subclass distrib_lattice proof -- {* Question: is it sufficient to include @{class distrib_lattice}
     2.8 -  and prove @{text inf_Sup} and @{text sup_Inf} from that? *}
     2.9 +subclass distrib_lattice proof
    2.10    fix a b c
    2.11    from sup_Inf have "a \<squnion> \<Sqinter>{b, c} = (\<Sqinter>d\<in>{b, c}. a \<squnion> d)" .
    2.12    then show "a \<squnion> b \<sqinter> c = (a \<squnion> b) \<sqinter> (a \<squnion> c)" by (simp add: INF_def Inf_insert)
    2.13 @@ -556,13 +555,13 @@
    2.14  begin
    2.15  
    2.16  definition
    2.17 -  "\<Sqinter>A \<longleftrightarrow> (\<forall>x\<in>A. x)"
    2.18 +  [simp]: "\<Sqinter>A \<longleftrightarrow> False \<notin> A"
    2.19  
    2.20  definition
    2.21 -  "\<Squnion>A \<longleftrightarrow> (\<exists>x\<in>A. x)"
    2.22 +  [simp]: "\<Squnion>A \<longleftrightarrow> True \<in> A"
    2.23  
    2.24  instance proof
    2.25 -qed (auto simp add: Inf_bool_def Sup_bool_def)
    2.26 +qed (auto intro: bool_induct)
    2.27  
    2.28  end
    2.29  
    2.30 @@ -572,7 +571,7 @@
    2.31    fix A :: "'a set"
    2.32    fix P :: "'a \<Rightarrow> bool"
    2.33    show "(\<Sqinter>x\<in>A. P x) \<longleftrightarrow> (\<forall>x\<in>A. P x)"
    2.34 -    by (auto simp add: Ball_def INF_def Inf_bool_def)
    2.35 +    by (auto simp add: INF_def)
    2.36  qed
    2.37  
    2.38  lemma SUP_bool_eq [simp]:
    2.39 @@ -581,11 +580,11 @@
    2.40    fix A :: "'a set"
    2.41    fix P :: "'a \<Rightarrow> bool"
    2.42    show "(\<Squnion>x\<in>A. P x) \<longleftrightarrow> (\<exists>x\<in>A. P x)"
    2.43 -    by (auto simp add: Bex_def SUP_def Sup_bool_def)
    2.44 +    by (auto simp add: SUP_def)
    2.45  qed
    2.46  
    2.47  instance bool :: complete_boolean_algebra proof
    2.48 -qed (auto simp add: Inf_bool_def Sup_bool_def)
    2.49 +qed (auto intro: bool_induct)
    2.50  
    2.51  instantiation "fun" :: (type, complete_lattice) complete_lattice
    2.52  begin
    2.53 @@ -638,7 +637,7 @@
    2.54    have "(\<forall>Q\<in>{P. \<exists>B\<in>A. P \<longleftrightarrow> x \<in> B}. Q) \<longleftrightarrow> (\<forall>B\<in>A. x \<in> B)"
    2.55      by auto
    2.56    then show "x \<in> \<Inter>A \<longleftrightarrow> x \<in> {x. \<forall>B \<in> A. x \<in> B}"
    2.57 -    by (simp add: Inf_fun_def Inf_bool_def) (simp add: mem_def)
    2.58 +    by (simp add: Inf_fun_def) (simp add: mem_def)
    2.59  qed
    2.60  
    2.61  lemma Inter_iff [simp,no_atp]: "A \<in> \<Inter>C \<longleftrightarrow> (\<forall>X\<in>C. A \<in> X)"
    2.62 @@ -821,7 +820,7 @@
    2.63    have "(\<exists>Q\<in>{P. \<exists>B\<in>A. P \<longleftrightarrow> x \<in> B}. Q) \<longleftrightarrow> (\<exists>B\<in>A. x \<in> B)"
    2.64      by auto
    2.65    then show "x \<in> \<Union>A \<longleftrightarrow> x \<in> {x. \<exists>B\<in>A. x \<in> B}"
    2.66 -    by (simp add: Sup_fun_def Sup_bool_def) (simp add: mem_def)
    2.67 +    by (simp add: Sup_fun_def) (simp add: mem_def)
    2.68  qed
    2.69  
    2.70  lemma Union_iff [simp, no_atp]:
     3.1 --- a/src/HOL/Library/More_Set.thy	Fri Aug 19 19:01:00 2011 -0700
     3.2 +++ b/src/HOL/Library/More_Set.thy	Sat Aug 20 09:30:23 2011 +0200
     3.3 @@ -50,7 +50,7 @@
     3.4  
     3.5  lemma remove_set_compl:
     3.6    "remove x (- set xs) = - set (List.insert x xs)"
     3.7 -  by (auto simp del: mem_def simp add: remove_def List.insert_def)
     3.8 +  by (auto simp add: remove_def List.insert_def)
     3.9  
    3.10  lemma image_set:
    3.11    "image f (set xs) = set (map f xs)"
     4.1 --- a/src/HOL/Main.thy	Fri Aug 19 19:01:00 2011 -0700
     4.2 +++ b/src/HOL/Main.thy	Sat Aug 20 09:30:23 2011 +0200
     4.3 @@ -11,4 +11,17 @@
     4.4  
     4.5  text {* See further \cite{Nipkow-et-al:2002:tutorial} *}
     4.6  
     4.7 +text {* Compatibility layer -- to be dropped *}
     4.8 +
     4.9 +lemma Inf_bool_def:
    4.10 +  "Inf A \<longleftrightarrow> (\<forall>x\<in>A. x)"
    4.11 +  by (auto intro: bool_induct)
    4.12 +
    4.13 +lemma Sup_bool_def:
    4.14 +  "Sup A \<longleftrightarrow> (\<exists>x\<in>A. x)"
    4.15 +  by auto
    4.16 +
    4.17 +declare Complete_Lattice.Inf_bool_def [simp del]
    4.18 +declare Complete_Lattice.Sup_bool_def [simp del]
    4.19 +
    4.20  end
     5.1 --- a/src/HOL/Nat.thy	Fri Aug 19 19:01:00 2011 -0700
     5.2 +++ b/src/HOL/Nat.thy	Sat Aug 20 09:30:23 2011 +0200
     5.3 @@ -22,10 +22,7 @@
     5.4  
     5.5  typedecl ind
     5.6  
     5.7 -axiomatization
     5.8 -  Zero_Rep :: ind and
     5.9 -  Suc_Rep :: "ind => ind"
    5.10 -where
    5.11 +axiomatization Zero_Rep :: ind and Suc_Rep :: "ind => ind" where
    5.12    -- {* the axiom of infinity in 2 parts *}
    5.13    Suc_Rep_inject:       "Suc_Rep x = Suc_Rep y ==> x = y" and
    5.14    Suc_Rep_not_Zero_Rep: "Suc_Rep x \<noteq> Zero_Rep"
    5.15 @@ -34,10 +31,9 @@
    5.16  
    5.17  text {* Type definition *}
    5.18  
    5.19 -inductive Nat :: "ind \<Rightarrow> bool"
    5.20 -where
    5.21 -    Zero_RepI: "Nat Zero_Rep"
    5.22 -  | Suc_RepI: "Nat i \<Longrightarrow> Nat (Suc_Rep i)"
    5.23 +inductive Nat :: "ind \<Rightarrow> bool" where
    5.24 +  Zero_RepI: "Nat Zero_Rep"
    5.25 +| Suc_RepI: "Nat i \<Longrightarrow> Nat (Suc_Rep i)"
    5.26  
    5.27  typedef (open Nat) nat = "{n. Nat n}"
    5.28    using Nat.Zero_RepI by auto
    5.29 @@ -142,10 +138,9 @@
    5.30  instantiation nat :: "{minus, comm_monoid_add}"
    5.31  begin
    5.32  
    5.33 -primrec plus_nat
    5.34 -where
    5.35 +primrec plus_nat where
    5.36    add_0:      "0 + n = (n\<Colon>nat)"
    5.37 -  | add_Suc:  "Suc m + n = Suc (m + n)"
    5.38 +| add_Suc:  "Suc m + n = Suc (m + n)"
    5.39  
    5.40  lemma add_0_right [simp]: "m + 0 = (m::nat)"
    5.41    by (induct m) simp_all
    5.42 @@ -158,8 +153,7 @@
    5.43  lemma add_Suc_shift [code]: "Suc m + n = m + Suc n"
    5.44    by simp
    5.45  
    5.46 -primrec minus_nat
    5.47 -where
    5.48 +primrec minus_nat where
    5.49    diff_0 [code]: "m - 0 = (m\<Colon>nat)"
    5.50  | diff_Suc: "m - Suc n = (case m - n of 0 => 0 | Suc k => k)"
    5.51  
    5.52 @@ -188,10 +182,9 @@
    5.53  definition
    5.54    One_nat_def [simp]: "1 = Suc 0"
    5.55  
    5.56 -primrec times_nat
    5.57 -where
    5.58 +primrec times_nat where
    5.59    mult_0:     "0 * n = (0\<Colon>nat)"
    5.60 -  | mult_Suc: "Suc m * n = n + (m * n)"
    5.61 +| mult_Suc: "Suc m * n = n + (m * n)"
    5.62  
    5.63  lemma mult_0_right [simp]: "(m::nat) * 0 = 0"
    5.64    by (induct m) simp_all
    5.65 @@ -364,7 +357,7 @@
    5.66  
    5.67  primrec less_eq_nat where
    5.68    "(0\<Colon>nat) \<le> n \<longleftrightarrow> True"
    5.69 -  | "Suc m \<le> n \<longleftrightarrow> (case n of 0 \<Rightarrow> False | Suc n \<Rightarrow> m \<le> n)"
    5.70 +| "Suc m \<le> n \<longleftrightarrow> (case n of 0 \<Rightarrow> False | Suc n \<Rightarrow> m \<le> n)"
    5.71  
    5.72  declare less_eq_nat.simps [simp del]
    5.73  lemma [code]: "(0\<Colon>nat) \<le> n \<longleftrightarrow> True" by (simp add: less_eq_nat.simps)
    5.74 @@ -1200,8 +1193,8 @@
    5.75  begin
    5.76  
    5.77  primrec funpow :: "nat \<Rightarrow> ('a \<Rightarrow> 'a) \<Rightarrow> 'a \<Rightarrow> 'a" where
    5.78 -    "funpow 0 f = id"
    5.79 -  | "funpow (Suc n) f = f o funpow n f"
    5.80 +  "funpow 0 f = id"
    5.81 +| "funpow (Suc n) f = f o funpow n f"
    5.82  
    5.83  end
    5.84  
    5.85 @@ -1267,7 +1260,7 @@
    5.86  
    5.87  primrec of_nat_aux :: "('a \<Rightarrow> 'a) \<Rightarrow> nat \<Rightarrow> 'a \<Rightarrow> 'a" where
    5.88    "of_nat_aux inc 0 i = i"
    5.89 -  | "of_nat_aux inc (Suc n) i = of_nat_aux inc n (inc i)" -- {* tail recursive *}
    5.90 +| "of_nat_aux inc (Suc n) i = of_nat_aux inc n (inc i)" -- {* tail recursive *}
    5.91  
    5.92  lemma of_nat_code:
    5.93    "of_nat n = of_nat_aux (\<lambda>i. i + 1) n 0"