# HG changeset patch # User paulson # Date 1078221955 -3600 # Node ID 0a76d4633bb6f2443e6526faf194cae59c1847e4 # Parent 9a415e68cc060d146360a5d1b4987d199e3052d7 converted Hyperreal/IntFloor to Isar script diff -r 9a415e68cc06 -r 0a76d4633bb6 src/HOL/Hyperreal/IntFloor.ML --- a/src/HOL/Hyperreal/IntFloor.ML Tue Mar 02 01:46:26 2004 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,302 +0,0 @@ -(* Title: IntFloor.ML - Author: Jacques D. Fleuriot - Copyright: 2001,2002 University of Edinburgh - Description: Floor and ceiling operations over reals -*) - -Goal "((number_of n) < real (m::int)) = (number_of n < m)"; -by Auto_tac; -by (rtac (real_of_int_less_iff RS iffD1) 1); -by (dtac (real_of_int_less_iff RS iffD2) 2); -by Auto_tac; -qed "number_of_less_real_of_int_iff"; -Addsimps [number_of_less_real_of_int_iff]; - -Goal "(real (m::int) < (number_of n)) = (m < number_of n)"; -by Auto_tac; -by (rtac (real_of_int_less_iff RS iffD1) 1); -by (dtac (real_of_int_less_iff RS iffD2) 2); -by Auto_tac; -qed "number_of_less_real_of_int_iff2"; -Addsimps [number_of_less_real_of_int_iff2]; - -Goal "((number_of n) <= real (m::int)) = (number_of n <= m)"; -by (auto_tac (claset(), simpset() addsimps [linorder_not_less RS sym])); -qed "number_of_le_real_of_int_iff"; -Addsimps [number_of_le_real_of_int_iff]; - -Goal "(real (m::int) <= (number_of n)) = (m <= number_of n)"; -by (auto_tac (claset(), simpset() addsimps [linorder_not_less RS sym])); -qed "number_of_le_real_of_int_iff2"; -Addsimps [number_of_le_real_of_int_iff2]; - -Goalw [floor_def] "floor 0 = 0"; -by (rtac Least_equality 1); -by Auto_tac; -qed "floor_zero"; -Addsimps [floor_zero]; - -Goal "floor (real (0::nat)) = 0"; -by Auto_tac; -qed "floor_real_of_nat_zero"; -Addsimps [floor_real_of_nat_zero]; - -Goalw [floor_def] "floor (real (n::nat)) = int n"; -by (rtac Least_equality 1); -by (dtac (real_of_int_real_of_nat RS ssubst) 2); -by (dtac (real_of_int_less_iff RS iffD1) 2); -by (auto_tac (claset(),simpset() addsimps [real_of_int_real_of_nat])); -qed "floor_real_of_nat"; -Addsimps [floor_real_of_nat]; - -Goalw [floor_def] "floor (- real (n::nat)) = - int n"; -by (rtac Least_equality 1); -by (dtac (real_of_int_real_of_nat RS ssubst) 2); -by (dtac (real_of_int_minus RS subst) 2); -by (dtac (real_of_int_less_iff RS iffD1) 2); -by (auto_tac (claset(),simpset() addsimps [real_of_int_real_of_nat])); -qed "floor_minus_real_of_nat"; -Addsimps [floor_minus_real_of_nat]; - -Goalw [floor_def] "floor (real (n::int)) = n"; -by (rtac Least_equality 1); -by (dtac (real_of_int_real_of_nat RS ssubst) 2); -by (dtac (real_of_int_less_iff RS iffD1) 2); -by Auto_tac; -qed "floor_real_of_int"; -Addsimps [floor_real_of_int]; - -Goalw [floor_def] "floor (- real (n::int)) = - n"; -by (rtac Least_equality 1); -by (dtac (real_of_int_minus RS subst) 2); -by (dtac (real_of_int_real_of_nat RS ssubst) 2); -by (dtac (real_of_int_less_iff RS iffD1) 2); -by Auto_tac; -qed "floor_minus_real_of_int"; -Addsimps [floor_minus_real_of_int]; - -Goal "0 <= r ==> EX (n::nat). real (n - 1) <= r & r < real (n)"; -by (cut_inst_tac [("x","r")] reals_Archimedean2 1); -by (Step_tac 1); -by (forw_inst_tac [("P","%k. r < real k"),("k","n"),("m","%x. x")] - (thm "ex_has_least_nat") 1); -by Auto_tac; -by (res_inst_tac [("x","x")] exI 1); -by (dres_inst_tac [("x","x - 1")] spec 1); -by (auto_tac (claset() addDs [ARITH_PROVE "x <= x - Suc 0 ==> x = (0::nat)"], - simpset())); -qed "reals_Archimedean6"; - -Goal "0 <= r ==> EX n. real (n) <= r & r < real (Suc n)"; -by (dtac reals_Archimedean6 1); -by Auto_tac; -qed "reals_Archimedean6a"; - -Goal "0 <= r ==> EX n. real n <= r & r < real ((n::int) + 1)"; -by (dtac reals_Archimedean6a 1); -by Auto_tac; -by (res_inst_tac [("x","int n")] exI 1); -by (auto_tac (claset(),simpset() addsimps [real_of_int_real_of_nat, - real_of_nat_Suc])); -qed "reals_Archimedean_6b_int"; - -Goal "r < 0 ==> EX n. real n <= r & r < real ((n::int) + 1)"; -by (dtac (CLAIM "r < (0::real) ==> 0 <= -r") 1); -by (dtac reals_Archimedean_6b_int 1); -by Auto_tac; -by (dtac real_le_imp_less_or_eq 1 THEN Auto_tac); -by (res_inst_tac [("x","- n - 1")] exI 1); -by (res_inst_tac [("x","- n")] exI 2); -by Auto_tac; -qed "reals_Archimedean_6c_int"; - -Goal " EX (n::int). real n <= r & r < real ((n::int) + 1)"; -by (cut_inst_tac [("r","r")] (CLAIM "0 <= r | r < (0::real)") 1); -by (blast_tac (claset() addIs [reals_Archimedean_6b_int, - reals_Archimedean_6c_int]) 1); -qed "real_lb_ub_int"; - -Goal "[| real n <= r; r < real y + 1 |] ==> n <= (y::int)"; -by (dres_inst_tac [("x","real n"),("z","real y + 1")] order_le_less_trans 1); -by (rotate_tac 1 2); -by (dtac ((CLAIM "real (1::int) = 1") RS ssubst) 2); -by (rotate_tac 1 2); -by (dres_inst_tac [("x1","y")] (real_of_int_add RS subst) 2); -by (dtac (real_of_int_less_iff RS iffD1) 2); -by Auto_tac; -val lemma_floor = result(); - -Goalw [floor_def,Least_def] "real (floor r) <= r"; -by (cut_inst_tac [("r","r")] real_lb_ub_int 1 THEN Step_tac 1); -by (rtac theI2 1); -by Auto_tac; -qed "real_of_int_floor_le"; -Addsimps [real_of_int_floor_le]; - -Goalw [floor_def,Least_def] - "x < y ==> floor x <= floor y"; -by (cut_inst_tac [("r","x")] real_lb_ub_int 1 THEN Step_tac 1); -by (cut_inst_tac [("r","y")] real_lb_ub_int 1 THEN Step_tac 1); -by (rtac theI2 1); -by (rtac theI2 3); -by Auto_tac; -by (auto_tac (claset() addIs [lemma_floor],simpset())); -by (ALLGOALS(force_tac (claset() addDs [lemma_floor],simpset()))); -qed "floor_le"; - -Goal "x <= y ==> floor x <= floor y"; -by (auto_tac (claset() addDs [real_le_imp_less_or_eq],simpset() - addsimps [floor_le])); -qed "floor_le2"; - -Goal "real na < real (x::int) + 1 ==> na <= x"; -by (auto_tac (claset() addIs [lemma_floor],simpset())); -val lemma_floor2 = result(); - -Goalw [floor_def,Least_def] - "(real (floor x) = x) = (EX (n::int). x = real n)"; -by (cut_inst_tac [("r","x")] real_lb_ub_int 1 THEN etac exE 1); -by (rtac theI2 1); -by (auto_tac (claset() addIs [lemma_floor],simpset())); -qed "real_of_int_floor_cancel"; -Addsimps [real_of_int_floor_cancel]; - -Goalw [floor_def] - "[| real n < x; x < real n + 1 |] ==> floor x = n"; -by (rtac Least_equality 1); -by (auto_tac (claset() addIs [lemma_floor],simpset())); -qed "floor_eq"; - -Goalw [floor_def] - "[| real n <= x; x < real n + 1 |] ==> floor x = n"; -by (rtac Least_equality 1); -by (auto_tac (claset() addIs [lemma_floor],simpset())); -qed "floor_eq2"; - -Goal "[| real n < x; x < real (Suc n) |] ==> nat(floor x) = n"; -by (rtac (inj_int RS injD) 1); -by (rtac (CLAIM "0 <= x ==> int (nat x) = x" RS ssubst) 1); -by (rtac floor_eq 2); -by (auto_tac (claset(),simpset() addsimps [real_of_nat_Suc, - real_of_int_real_of_nat])); -by (rtac (floor_le RSN (2,zle_trans)) 1 THEN Auto_tac); -qed "floor_eq3"; - -Goal "[| real n <= x; x < real (Suc n) |] ==> nat(floor x) = n"; -by (dtac order_le_imp_less_or_eq 1); -by (auto_tac (claset() addIs [floor_eq3],simpset())); -qed "floor_eq4"; - -Goal "floor(number_of n :: real) = (number_of n :: int)"; -by (stac (real_number_of RS sym) 1); -by (rtac floor_eq2 1); -by (rtac (CLAIM "x < x + (1::real)") 2); -by (rtac real_le_refl 1); -qed "floor_number_of_eq"; -Addsimps [floor_number_of_eq]; - -Goalw [floor_def,Least_def] "r - 1 <= real(floor r)"; -by (cut_inst_tac [("r","r")] real_lb_ub_int 1 THEN Step_tac 1); -by (rtac theI2 1); -by (auto_tac (claset() addIs [lemma_floor],simpset())); -qed "real_of_int_floor_ge_diff_one"; -Addsimps [real_of_int_floor_ge_diff_one]; - -Goal "r <= real(floor r) + 1"; -by (cut_inst_tac [("r","r")] real_of_int_floor_ge_diff_one 1); -by (auto_tac (claset(),simpset() delsimps [real_of_int_floor_ge_diff_one])); -qed "real_of_int_floor_add_one_ge"; -Addsimps [real_of_int_floor_add_one_ge]; - - -(*--------------------------------------------------------------------------------*) -(* ceiling function for positive reals *) -(*--------------------------------------------------------------------------------*) - -Goalw [ceiling_def] "ceiling 0 = 0"; -by Auto_tac; -qed "ceiling_zero"; -Addsimps [ceiling_zero]; - -Goalw [ceiling_def] "ceiling (real (n::nat)) = int n"; -by Auto_tac; -qed "ceiling_real_of_nat"; -Addsimps [ceiling_real_of_nat]; - -Goal "ceiling (real (0::nat)) = 0"; -by Auto_tac; -qed "ceiling_real_of_nat_zero"; -Addsimps [ceiling_real_of_nat_zero]; - -Goalw [ceiling_def] "ceiling (real (floor r)) = floor r"; -by Auto_tac; -qed "ceiling_floor"; -Addsimps [ceiling_floor]; - -Goalw [ceiling_def] "floor (real (ceiling r)) = ceiling r"; -by Auto_tac; -qed "floor_ceiling"; -Addsimps [floor_ceiling]; - -Goalw [ceiling_def] "r <= real (ceiling r)"; -by Auto_tac; -by (rtac (CLAIM "x <= -y ==> (y::real) <= - x") 1); -by Auto_tac; -qed "real_of_int_ceiling_ge"; -Addsimps [real_of_int_ceiling_ge]; - -Goalw [ceiling_def] "x < y ==> ceiling x <= ceiling y"; -by (auto_tac (claset() addIs [floor_le],simpset())); -qed "ceiling_le"; - -Goalw [ceiling_def] "x <= y ==> ceiling x <= ceiling y"; -by (auto_tac (claset() addIs [floor_le2],simpset())); -qed "ceiling_le2"; - -Goalw [ceiling_def] "(real (ceiling x) = x) = (EX (n::int). x = real n)"; -by Auto_tac; -by (dtac (CLAIM "- x = y ==> (x::real) = -y") 1); -by Auto_tac; -by (res_inst_tac [("x","-n")] exI 1); -by Auto_tac; -qed "real_of_int_ceiling_cancel"; -Addsimps [real_of_int_ceiling_cancel]; - -Goalw [ceiling_def] - "[| real n < x; x < real n + 1 |] ==> ceiling x = n + 1"; -by (rtac (CLAIM "x = - y ==> - (x::int) = y") 1); -by (auto_tac (claset() addIs [floor_eq],simpset())); -qed "ceiling_eq"; - -Goalw [ceiling_def] - "[| real n < x; x <= real n + 1 |] ==> ceiling x = n + 1"; -by (rtac (CLAIM "x = - y ==> - (x::int) = y") 1); -by (auto_tac (claset() addIs [floor_eq2],simpset())); -qed "ceiling_eq2"; - -Goalw [ceiling_def] "[| real n - 1 < x; x <= real n |] ==> ceiling x = n"; -by (rtac (CLAIM "x = -(y::int) ==> - x = y") 1); -by (auto_tac (claset() addIs [floor_eq2],simpset())); -qed "ceiling_eq3"; - -Goalw [ceiling_def] - "ceiling (number_of n :: real) = (number_of n :: int)"; -by (stac (real_number_of RS sym) 1); -by (rtac (CLAIM "x = - y ==> - (x::int) = y") 1); -by (rtac (floor_minus_real_of_int RS ssubst) 1); -by Auto_tac; -qed "ceiling_number_of_eq"; -Addsimps [ceiling_number_of_eq]; - -Goalw [ceiling_def] "real (ceiling r) - 1 <= r"; -by (rtac (CLAIM "-x <= -y ==> (y::real) <= x") 1); -by (auto_tac (claset(),simpset() addsimps [real_diff_def])); -qed "real_of_int_ceiling_diff_one_le"; -Addsimps [real_of_int_ceiling_diff_one_le]; - -Goal "real (ceiling r) <= r + 1"; -by (cut_inst_tac [("r","r")] real_of_int_ceiling_diff_one_le 1); -by (auto_tac (claset(),simpset() delsimps [real_of_int_ceiling_diff_one_le])); -qed "real_of_int_ceiling_le_add_one"; -Addsimps [real_of_int_ceiling_le_add_one]; - diff -r 9a415e68cc06 -r 0a76d4633bb6 src/HOL/Hyperreal/IntFloor.thy --- a/src/HOL/Hyperreal/IntFloor.thy Tue Mar 02 01:46:26 2004 +0100 +++ b/src/HOL/Hyperreal/IntFloor.thy Tue Mar 02 11:05:55 2004 +0100 @@ -1,17 +1,319 @@ (* Title: IntFloor.thy Author: Jacques D. Fleuriot Copyright: 2001,2002 University of Edinburgh - Description: Floor and ceiling operations over reals +Converted to Isar and polished by lcp *) -IntFloor = Integration + +header{*Floor and Ceiling Functions from the Reals to the Integers*} + +theory IntFloor = Integration: constdefs - - floor :: real => int + + floor :: "real => int" "floor r == (LEAST n. r < real (n + (1::int)))" - ceiling :: real => int + ceiling :: "real => int" "ceiling r == - floor (- r)" - + +syntax (xsymbols) + floor :: "real => int" ("\_\") + ceiling :: "real => int" ("\_\") + + + +lemma number_of_less_real_of_int_iff [simp]: + "((number_of n) < real (m::int)) = (number_of n < m)" +apply auto +apply (rule real_of_int_less_iff [THEN iffD1]) +apply (drule_tac [2] real_of_int_less_iff [THEN iffD2], auto) +done + +lemma number_of_less_real_of_int_iff2 [simp]: + "(real (m::int) < (number_of n)) = (m < number_of n)" +apply auto +apply (rule real_of_int_less_iff [THEN iffD1]) +apply (drule_tac [2] real_of_int_less_iff [THEN iffD2], auto) +done + +lemma number_of_le_real_of_int_iff [simp]: + "((number_of n) \ real (m::int)) = (number_of n \ m)" +by (simp add: linorder_not_less [symmetric]) + +lemma number_of_le_real_of_int_iff2 [simp]: + "(real (m::int) \ (number_of n)) = (m \ number_of n)" +by (simp add: linorder_not_less [symmetric]) + +lemma floor_zero [simp]: "floor 0 = 0" +apply (simp add: floor_def) +apply (rule Least_equality, auto) +done + +lemma floor_real_of_nat_zero [simp]: "floor (real (0::nat)) = 0" +by auto + +lemma floor_real_of_nat [simp]: "floor (real (n::nat)) = int n" +apply (simp only: floor_def) +apply (rule Least_equality) +apply (drule_tac [2] real_of_int_real_of_nat [THEN ssubst]) +apply (drule_tac [2] real_of_int_less_iff [THEN iffD1]) +apply (simp_all add: real_of_int_real_of_nat) +done + +lemma floor_minus_real_of_nat [simp]: "floor (- real (n::nat)) = - int n" +apply (simp only: floor_def) +apply (rule Least_equality) +apply (drule_tac [2] real_of_int_real_of_nat [THEN ssubst]) +apply (drule_tac [2] real_of_int_minus [THEN subst]) +apply (drule_tac [2] real_of_int_less_iff [THEN iffD1]) +apply (simp_all add: real_of_int_real_of_nat) +done + +lemma floor_real_of_int [simp]: "floor (real (n::int)) = n" +apply (simp only: floor_def) +apply (rule Least_equality) +apply (drule_tac [2] real_of_int_real_of_nat [THEN ssubst]) +apply (drule_tac [2] real_of_int_less_iff [THEN iffD1], auto) +done + +lemma floor_minus_real_of_int [simp]: "floor (- real (n::int)) = - n" +apply (simp only: floor_def) +apply (rule Least_equality) +apply (drule_tac [2] real_of_int_minus [THEN subst]) +apply (drule_tac [2] real_of_int_real_of_nat [THEN ssubst]) +apply (drule_tac [2] real_of_int_less_iff [THEN iffD1], auto) +done + +lemma reals_Archimedean6: + "0 \ r ==> \(n::nat). real (n - 1) \ r & r < real (n)" +apply (insert reals_Archimedean2 [of r], safe) +apply (frule_tac P = "%k. r < real k" and k = n and m = "%x. x" + in ex_has_least_nat, auto) +apply (rule_tac x = x in exI) +apply (case_tac x, simp) +apply (rename_tac x') +apply (drule_tac x = x' in spec, simp) +done + +lemma reals_Archimedean6a: "0 \ r ==> \n. real (n) \ r & r < real (Suc n)" +by (drule reals_Archimedean6, auto) + +lemma reals_Archimedean_6b_int: + "0 \ r ==> \n. real n \ r & r < real ((n::int) + 1)" +apply (drule reals_Archimedean6a, auto) +apply (rule_tac x = "int n" in exI) +apply (simp add: real_of_int_real_of_nat real_of_nat_Suc) +done + +lemma reals_Archimedean_6c_int: + "r < 0 ==> \n. real n \ r & r < real ((n::int) + 1)" +apply (rule reals_Archimedean_6b_int [of "-r", THEN exE], simp, auto) +apply (rename_tac n) +apply (drule real_le_imp_less_or_eq, auto) +apply (rule_tac x = "- n - 1" in exI) +apply (rule_tac [2] x = "- n" in exI, auto) +done + +lemma real_lb_ub_int: " \(n::int). real n \ r & r < real ((n::int) + 1)" +apply (case_tac "r < 0") +apply (blast intro: reals_Archimedean_6c_int) +apply (simp only: linorder_not_less) +apply (blast intro: reals_Archimedean_6b_int reals_Archimedean_6c_int) +done + +lemma lemma_floor: + assumes a1: "real m \ r" and a2: "r < real n + 1" + shows "m \ (n::int)" +proof - + have "real m < real n + 1" by (rule order_le_less_trans) + also have "... = real(n+1)" by simp + finally have "m < n+1" by (simp only: real_of_int_less_iff) + thus ?thesis by arith +qed + +lemma real_of_int_floor_le [simp]: "real (floor r) \ r" +apply (simp add: floor_def Least_def) +apply (insert real_lb_ub_int [of r], safe) +apply (rule theI2, auto) +done + +lemma floor_le: "x < y ==> floor x \ floor y" +apply (simp add: floor_def Least_def) +apply (insert real_lb_ub_int [of x]) +apply (insert real_lb_ub_int [of y], safe) +apply (rule theI2) +apply (rule_tac [3] theI2, auto) +done + +lemma floor_le2: "x \ y ==> floor x \ floor y" +by (auto dest: real_le_imp_less_or_eq simp add: floor_le) + +lemma lemma_floor2: "real na < real (x::int) + 1 ==> na \ x" +by (auto intro: lemma_floor) + +lemma real_of_int_floor_cancel [simp]: + "(real (floor x) = x) = (\n::int. x = real n)" +apply (simp add: floor_def Least_def) +apply (insert real_lb_ub_int [of x], erule exE) +apply (rule theI2) +apply (auto intro: lemma_floor) +done + +lemma floor_eq: "[| real n < x; x < real n + 1 |] ==> floor x = n" +apply (simp add: floor_def) +apply (rule Least_equality) +apply (auto intro: lemma_floor) +done + +lemma floor_eq2: "[| real n \ x; x < real n + 1 |] ==> floor x = n" +apply (simp add: floor_def) +apply (rule Least_equality) +apply (auto intro: lemma_floor) +done + +lemma floor_eq3: "[| real n < x; x < real (Suc n) |] ==> nat(floor x) = n" +apply (rule inj_int [THEN injD]) +apply (simp add: real_of_nat_Suc) +apply (simp add: real_of_nat_Suc floor_eq floor_eq [where n = "of_nat n"]) +done + +lemma floor_eq4: "[| real n \ x; x < real (Suc n) |] ==> nat(floor x) = n" +apply (drule order_le_imp_less_or_eq) +apply (auto intro: floor_eq3) +done + +lemma floor_number_of_eq [simp]: + "floor(number_of n :: real) = (number_of n :: int)" +apply (subst real_number_of [symmetric]) +apply (rule floor_real_of_int) +done + +lemma real_of_int_floor_ge_diff_one [simp]: "r - 1 \ real(floor r)" +apply (simp add: floor_def Least_def) +apply (insert real_lb_ub_int [of r], safe) +apply (rule theI2) +apply (auto intro: lemma_floor) +done + +lemma real_of_int_floor_add_one_ge [simp]: "r \ real(floor r) + 1" +apply (insert real_of_int_floor_ge_diff_one [of r]) +apply (auto simp del: real_of_int_floor_ge_diff_one) +done + + +subsection{*Ceiling Function for Positive Reals*} + +lemma ceiling_zero [simp]: "ceiling 0 = 0" +by (simp add: ceiling_def) + +lemma ceiling_real_of_nat [simp]: "ceiling (real (n::nat)) = int n" +by (simp add: ceiling_def) + +lemma ceiling_real_of_nat_zero [simp]: "ceiling (real (0::nat)) = 0" +by auto + +lemma ceiling_floor [simp]: "ceiling (real (floor r)) = floor r" +by (simp add: ceiling_def) + +lemma floor_ceiling [simp]: "floor (real (ceiling r)) = ceiling r" +by (simp add: ceiling_def) + +lemma real_of_int_ceiling_ge [simp]: "r \ real (ceiling r)" +apply (simp add: ceiling_def) +apply (subst le_minus_iff, simp) +done + +lemma ceiling_le: "x < y ==> ceiling x \ ceiling y" +by (simp add: floor_le ceiling_def) + +lemma ceiling_le2: "x \ y ==> ceiling x \ ceiling y" +by (simp add: floor_le2 ceiling_def) + +lemma real_of_int_ceiling_cancel [simp]: + "(real (ceiling x) = x) = (\n::int. x = real n)" +apply (auto simp add: ceiling_def) +apply (drule arg_cong [where f = uminus], auto) +apply (rule_tac x = "-n" in exI, auto) +done + +lemma ceiling_eq: "[| real n < x; x < real n + 1 |] ==> ceiling x = n + 1" +apply (simp add: ceiling_def) +apply (rule minus_equation_iff [THEN iffD1]) +apply (simp add: floor_eq [where n = "-(n+1)"]) +done + +lemma ceiling_eq2: "[| real n < x; x \ real n + 1 |] ==> ceiling x = n + 1" +by (simp add: ceiling_def floor_eq2 [where n = "-(n+1)"]) + +lemma ceiling_eq3: "[| real n - 1 < x; x \ real n |] ==> ceiling x = n" +by (simp add: ceiling_def floor_eq2 [where n = "-n"]) + +lemma ceiling_real_of_int [simp]: "ceiling (real (n::int)) = n" +by (simp add: ceiling_def) + +lemma ceiling_number_of_eq [simp]: + "ceiling (number_of n :: real) = (number_of n)" +apply (subst real_number_of [symmetric]) +apply (rule ceiling_real_of_int) +done + +lemma real_of_int_ceiling_diff_one_le [simp]: "real (ceiling r) - 1 \ r" +apply (rule neg_le_iff_le [THEN iffD1]) +apply (simp add: ceiling_def diff_minus) +done + +lemma real_of_int_ceiling_le_add_one [simp]: "real (ceiling r) \ r + 1" +apply (insert real_of_int_ceiling_diff_one_le [of r]) +apply (simp del: real_of_int_ceiling_diff_one_le) +done + +ML +{* +val number_of_less_real_of_int_iff = thm "number_of_less_real_of_int_iff"; +val number_of_less_real_of_int_iff2 = thm "number_of_less_real_of_int_iff2"; +val number_of_le_real_of_int_iff = thm "number_of_le_real_of_int_iff"; +val number_of_le_real_of_int_iff2 = thm "number_of_le_real_of_int_iff2"; +val floor_zero = thm "floor_zero"; +val floor_real_of_nat_zero = thm "floor_real_of_nat_zero"; +val floor_real_of_nat = thm "floor_real_of_nat"; +val floor_minus_real_of_nat = thm "floor_minus_real_of_nat"; +val floor_real_of_int = thm "floor_real_of_int"; +val floor_minus_real_of_int = thm "floor_minus_real_of_int"; +val reals_Archimedean6 = thm "reals_Archimedean6"; +val reals_Archimedean6a = thm "reals_Archimedean6a"; +val reals_Archimedean_6b_int = thm "reals_Archimedean_6b_int"; +val reals_Archimedean_6c_int = thm "reals_Archimedean_6c_int"; +val real_lb_ub_int = thm "real_lb_ub_int"; +val lemma_floor = thm "lemma_floor"; +val real_of_int_floor_le = thm "real_of_int_floor_le"; +val floor_le = thm "floor_le"; +val floor_le2 = thm "floor_le2"; +val lemma_floor2 = thm "lemma_floor2"; +val real_of_int_floor_cancel = thm "real_of_int_floor_cancel"; +val floor_eq = thm "floor_eq"; +val floor_eq2 = thm "floor_eq2"; +val floor_eq3 = thm "floor_eq3"; +val floor_eq4 = thm "floor_eq4"; +val floor_number_of_eq = thm "floor_number_of_eq"; +val real_of_int_floor_ge_diff_one = thm "real_of_int_floor_ge_diff_one"; +val real_of_int_floor_add_one_ge = thm "real_of_int_floor_add_one_ge"; +val ceiling_zero = thm "ceiling_zero"; +val ceiling_real_of_nat = thm "ceiling_real_of_nat"; +val ceiling_real_of_nat_zero = thm "ceiling_real_of_nat_zero"; +val ceiling_floor = thm "ceiling_floor"; +val floor_ceiling = thm "floor_ceiling"; +val real_of_int_ceiling_ge = thm "real_of_int_ceiling_ge"; +val ceiling_le = thm "ceiling_le"; +val ceiling_le2 = thm "ceiling_le2"; +val real_of_int_ceiling_cancel = thm "real_of_int_ceiling_cancel"; +val ceiling_eq = thm "ceiling_eq"; +val ceiling_eq2 = thm "ceiling_eq2"; +val ceiling_eq3 = thm "ceiling_eq3"; +val ceiling_real_of_int = thm "ceiling_real_of_int"; +val ceiling_number_of_eq = thm "ceiling_number_of_eq"; +val real_of_int_ceiling_diff_one_le = thm "real_of_int_ceiling_diff_one_le"; +val real_of_int_ceiling_le_add_one = thm "real_of_int_ceiling_le_add_one"; +*} + + end diff -r 9a415e68cc06 -r 0a76d4633bb6 src/HOL/IsaMakefile --- a/src/HOL/IsaMakefile Tue Mar 02 01:46:26 2004 +0100 +++ b/src/HOL/IsaMakefile Tue Mar 02 11:05:55 2004 +0100 @@ -148,8 +148,7 @@ Hyperreal/Filter.ML Hyperreal/Filter.thy Hyperreal/HSeries.thy\ Hyperreal/HTranscendental.thy Hyperreal/HyperArith.thy\ Hyperreal/HyperDef.thy Hyperreal/HyperNat.thy\ - Hyperreal/HyperPow.thy Hyperreal/Hyperreal.thy\ - Hyperreal/IntFloor.thy Hyperreal/IntFloor.ML\ + Hyperreal/HyperPow.thy Hyperreal/Hyperreal.thy Hyperreal/IntFloor.thy\ Hyperreal/Lim.ML Hyperreal/Lim.thy Hyperreal/Log.thy\ Hyperreal/MacLaurin.ML Hyperreal/MacLaurin.thy Hyperreal/NatStar.thy\ Hyperreal/NSA.thy Hyperreal/NthRoot.thy\