# HG changeset patch # User noschinl # Date 1378457800 -7200 # Node ID 415354b68f0c8eb57689508a103cc0598d60a968 # Parent 92db671e0ac6d4393a25137ae20244e3735b9fe8 use case_of_simps diff -r 92db671e0ac6 -r 415354b68f0c src/HOL/IMP/Abs_Int2_ivl.thy --- a/src/HOL/IMP/Abs_Int2_ivl.thy Fri Sep 06 10:56:40 2013 +0200 +++ b/src/HOL/IMP/Abs_Int2_ivl.thy Fri Sep 06 10:56:40 2013 +0200 @@ -55,7 +55,7 @@ lift_definition is_empty_ivl :: "ivl \ bool" is is_empty_rep apply(auto simp: eq_ivl_def \_rep_cases is_empty_rep_def) -apply(auto simp: not_less less_eq_extended_cases split: extended.splits) +apply(auto simp: not_less less_eq_extended_case split: extended.splits) done lemma eq_ivl_iff: "eq_ivl p1 p2 = (is_empty_rep p1 & is_empty_rep p2 | p1 = p2)" diff -r 92db671e0ac6 -r 415354b68f0c src/HOL/Library/Extended.thy --- a/src/HOL/Library/Extended.thy Fri Sep 06 10:56:40 2013 +0200 +++ b/src/HOL/Library/Extended.thy Fri Sep 06 10:56:40 2013 +0200 @@ -5,14 +5,13 @@ *) theory Extended -imports Main +imports + Main + "~~/src/HOL/Library/Simps_Case_Conv" begin datatype 'a extended = Fin 'a | Pinf ("\") | Minf ("-\") -lemmas extended_cases2 = extended.exhaust[case_product extended.exhaust] -lemmas extended_cases3 = extended.exhaust[case_product extended_cases2] - instantiation extended :: (order)order begin @@ -23,31 +22,18 @@ "Minf \ _ = True" | "(_::'a extended) \ _ = False" -lemma less_eq_extended_cases: - "x \ y = (case x of Fin x \ (case y of Fin y \ x \ y | Pinf \ True | Minf \ False) - | Pinf \ y=Pinf | Minf \ True)" -by(induct x y rule: less_eq_extended.induct)(auto split: extended.split) +case_of_simps less_eq_extended_case: less_eq_extended.simps definition less_extended :: "'a extended \ 'a extended \ bool" where "((x::'a extended) < y) = (x \ y & \ x \ y)" instance -proof - case goal1 show ?case by(rule less_extended_def) -next - case goal2 show ?case by(cases x) auto -next - case goal3 thus ?case by(auto simp: less_eq_extended_cases split:extended.splits) -next - case goal4 thus ?case by(auto simp: less_eq_extended_cases split:extended.splits) -qed + by intro_classes (auto simp: less_extended_def less_eq_extended_case split: extended.splits) end instance extended :: (linorder)linorder -proof - case goal1 thus ?case by(auto simp: less_eq_extended_cases split:extended.splits) -qed + by intro_classes (auto simp: less_eq_extended_case split:extended.splits) lemma Minf_le[simp]: "Minf \ y" by(cases y) auto @@ -114,26 +100,19 @@ "Minf + Pinf = Pinf" | "Pinf + Minf = Pinf" +case_of_simps plus_case: plus_extended.simps + instance .. end + instance extended :: (ab_semigroup_add)ab_semigroup_add -proof - fix a b c :: "'a extended" - show "a + b = b + a" - by (induct a b rule: plus_extended.induct) (simp_all add: ac_simps) - show "a + b + c = a + (b + c)" - by (cases rule: extended_cases3[of a b c]) (simp_all add: ac_simps) -qed + by intro_classes (simp_all add: ac_simps plus_case split: extended.splits) instance extended :: (ordered_ab_semigroup_add)ordered_ab_semigroup_add -proof - fix a b c :: "'a extended" - assume "a \ b" then show "c + a \ c + b" - by (cases rule: extended_cases3[of a b c]) (auto simp: add_left_mono) -qed + by intro_classes (auto simp: add_left_mono plus_case split: extended.splits) instance extended :: (comm_monoid_add)comm_monoid_add proof @@ -206,16 +185,12 @@ "sup_extended Minf a = a" | "sup_extended a Minf = a" +case_of_simps inf_extended_case: inf_extended.simps +case_of_simps sup_extended_case: sup_extended.simps + instance -proof - fix x y z ::"'a extended" - show "inf x y \ x" "inf x y \ y" "\x \ y; x \ z\ \ x \ inf y z" - "x \ sup x y" "y \ sup x y" "\y \ x; z \ x\ \ sup y z \ x" "bot \ x" "x \ top" - apply (atomize (full)) - apply (cases rule: extended_cases3[of x y z]) - apply (auto simp: bot_extended_def top_extended_def) - done -qed + by (intro_classes) (auto simp: inf_extended_case sup_extended_case less_eq_extended_case + bot_extended_def top_extended_def split: extended.splits) end end