# HG changeset patch # User wenzelm # Date 1315769735 -7200 # Node ID 6ca299d29bdd28b4e0337090845c7ff4561755a6 # Parent 19692967eb4664b51932f3cf6b55ce22c5a17441# Parent 3d853767e5f340d5125a1a36390719afb881d3fa merged diff -r 3d853767e5f3 -r 6ca299d29bdd src/HOL/Library/Saturated.thy --- a/src/HOL/Library/Saturated.thy Sun Sep 11 21:34:23 2011 +0200 +++ b/src/HOL/Library/Saturated.thy Sun Sep 11 21:35:35 2011 +0200 @@ -22,16 +22,16 @@ "m = n \ nat_of m = nat_of n" by (simp add: nat_of_inject) -lemma Abs_sa_nat_of [code abstype]: +lemma Abs_sat_nat_of [code abstype]: "Abs_sat (nat_of n) = n" by (fact nat_of_inverse) -definition Sat :: "nat \ 'a::len sat" where - "Sat n = Abs_sat (min (len_of TYPE('a)) n)" +definition Abs_sat' :: "nat \ 'a::len sat" where + "Abs_sat' n = Abs_sat (min (len_of TYPE('a)) n)" -lemma nat_of_Sat [simp]: - "nat_of (Sat n :: ('a::len) sat) = min (len_of TYPE('a)) n" - unfolding Sat_def by (rule Abs_sat_inverse) simp +lemma nat_of_Abs_sat' [simp]: + "nat_of (Abs_sat' n :: ('a::len) sat) = min (len_of TYPE('a)) n" + unfolding Abs_sat'_def by (rule Abs_sat_inverse) simp lemma nat_of_le_len_of [simp]: "nat_of (n :: ('a::len) sat) \ len_of TYPE('a)" @@ -45,9 +45,9 @@ "min (nat_of (n::('a::len) sat)) (len_of TYPE('a)) = nat_of n" by (subst min_max.inf.commute) simp -lemma Sat_nat_of [simp]: - "Sat (nat_of n) = n" - by (simp add: Sat_def nat_of_inverse) +lemma Abs_sat'_nat_of [simp]: + "Abs_sat' (nat_of n) = n" + by (simp add: Abs_sat'_def nat_of_inverse) instantiation sat :: (len) linorder begin @@ -67,10 +67,10 @@ begin definition - "0 = Sat 0" + "0 = Abs_sat' 0" definition - "1 = Sat 1" + "1 = Abs_sat' 1" lemma nat_of_zero_sat [simp, code abstract]: "nat_of 0 = 0" @@ -81,14 +81,14 @@ by (simp add: one_sat_def) definition - "x + y = Sat (nat_of x + nat_of y)" + "x + y = Abs_sat' (nat_of x + nat_of y)" lemma nat_of_plus_sat [simp, code abstract]: "nat_of (x + y) = min (nat_of x + nat_of y) (len_of TYPE('a))" by (simp add: plus_sat_def) definition - "x - y = Sat (nat_of x - nat_of y)" + "x - y = Abs_sat' (nat_of x - nat_of y)" lemma nat_of_minus_sat [simp, code abstract]: "nat_of (x - y) = nat_of x - nat_of y" @@ -98,7 +98,7 @@ qed definition - "x * y = Sat (nat_of x * nat_of y)" + "x * y = Abs_sat' (nat_of x * nat_of y)" lemma nat_of_times_sat [simp, code abstract]: "nat_of (x * y) = min (nat_of x * nat_of y) (len_of TYPE('a))" @@ -145,9 +145,16 @@ end -lemma Sat_eq_of_nat: "Sat n = of_nat n" +lemma Abs_sat'_eq_of_nat: "Abs_sat' n = of_nat n" by (rule sat_eqI, induct n, simp_all) +abbreviation Sat :: "nat \ 'a::len sat" where + "Sat \ of_nat" + +lemma nat_of_Sat [simp]: + "nat_of (Sat n :: ('a::len) sat) = min (len_of TYPE('a)) n" + by (rule nat_of_Abs_sat' [unfolded Abs_sat'_eq_of_nat]) + instantiation sat :: (len) number_semiring begin @@ -155,7 +162,7 @@ number_of_sat_def [code del]: "number_of = Sat \ nat" instance - by default (simp add: number_of_sat_def Sat_eq_of_nat) + by default (simp add: number_of_sat_def) end diff -r 3d853767e5f3 -r 6ca299d29bdd src/HOL/Nat_Numeral.thy --- a/src/HOL/Nat_Numeral.thy Sun Sep 11 21:34:23 2011 +0200 +++ b/src/HOL/Nat_Numeral.thy Sun Sep 11 21:35:35 2011 +0200 @@ -334,10 +334,10 @@ by (simp add: nat_number_of_def) lemma nat_numeral_0_eq_0 [simp, code_post]: "Numeral0 = (0::nat)" -by (simp add: nat_number_of_def) + by (rule semiring_numeral_0_eq_0) lemma nat_numeral_1_eq_1 [simp]: "Numeral1 = (1::nat)" -by (simp add: nat_number_of_def) + by (rule semiring_numeral_1_eq_1) lemma Numeral1_eq1_nat: "(1::nat) = Numeral1" @@ -354,7 +354,7 @@ (if neg (number_of v :: int) then 0 else (number_of v :: int))" unfolding nat_number_of_def number_of_is_id neg_def - by simp + by simp (* FIXME: redundant with of_nat_number_of_eq *) lemma nonneg_int_cases: fixes k :: int assumes "0 \ k" obtains n where "k = of_nat n"