# HG changeset patch # User wenzelm # Date 1337775452 -7200 # Node ID e0a85be4fca0b696874689c142fc522107c514c0 # Parent e462d33ca9605153af22412eccff8a10770eba55 more explicit proof; misc tuning; diff -r e462d33ca960 -r e0a85be4fca0 src/HOL/Library/Product_ord.thy --- a/src/HOL/Library/Product_ord.thy Wed May 23 13:33:35 2012 +0200 +++ b/src/HOL/Library/Product_ord.thy Wed May 23 14:17:32 2012 +0200 @@ -22,30 +22,30 @@ end lemma [code]: - "(x1\'a\{ord, equal}, y1) \ (x2, y2) \ x1 < x2 \ x1 \ x2 \ y1 \ y2" - "(x1\'a\{ord, equal}, y1) < (x2, y2) \ x1 < x2 \ x1 \ x2 \ y1 < y2" + "(x1::'a::{ord, equal}, y1) \ (x2, y2) \ x1 < x2 \ x1 \ x2 \ y1 \ y2" + "(x1::'a::{ord, equal}, y1) < (x2, y2) \ x1 < x2 \ x1 \ x2 \ y1 < y2" unfolding prod_le_def prod_less_def by simp_all -instance prod :: (preorder, preorder) preorder proof -qed (auto simp: prod_le_def prod_less_def less_le_not_le intro: order_trans) +instance prod :: (preorder, preorder) preorder + by default (auto simp: prod_le_def prod_less_def less_le_not_le intro: order_trans) -instance prod :: (order, order) order proof -qed (auto simp add: prod_le_def) +instance prod :: (order, order) order + by default (auto simp add: prod_le_def) -instance prod :: (linorder, linorder) linorder proof -qed (auto simp: prod_le_def) +instance prod :: (linorder, linorder) linorder + by default (auto simp: prod_le_def) instantiation prod :: (linorder, linorder) distrib_lattice begin definition - inf_prod_def: "(inf \ 'a \ 'b \ _ \ _) = min" + inf_prod_def: "(inf :: 'a \ 'b \ _ \ _) = min" definition - sup_prod_def: "(sup \ 'a \ 'b \ _ \ _) = max" + sup_prod_def: "(sup :: 'a \ 'b \ _ \ _) = max" -instance proof -qed (auto simp add: inf_prod_def sup_prod_def min_max.sup_inf_distrib1) +instance + by default (auto simp add: inf_prod_def sup_prod_def min_max.sup_inf_distrib1) end @@ -55,8 +55,8 @@ definition bot_prod_def: "bot = (bot, bot)" -instance proof -qed (auto simp add: bot_prod_def prod_le_def) +instance + by default (auto simp add: bot_prod_def prod_le_def) end @@ -66,8 +66,8 @@ definition top_prod_def: "top = (top, top)" -instance proof -qed (auto simp add: top_prod_def prod_le_def) +instance + by default (auto simp add: top_prod_def prod_le_def) end @@ -86,11 +86,29 @@ proof (induct z) case (Pair a b) show "P (a, b)" - apply (induct a arbitrary: b rule: less_induct) - apply (rule less_induct [where 'a='b]) - apply (rule P) - apply (auto simp add: prod_less_eq) - done + proof (induct a arbitrary: b rule: less_induct) + case (less a\<^isub>1) note a\<^isub>1 = this + show "P (a\<^isub>1, b)" + proof (induct b rule: less_induct) + case (less b\<^isub>1) note b\<^isub>1 = this + show "P (a\<^isub>1, b\<^isub>1)" + proof (rule P) + fix p assume p: "p < (a\<^isub>1, b\<^isub>1)" + show "P p" + proof (cases "fst p < a\<^isub>1") + case True + then have "P (fst p, snd p)" by (rule a\<^isub>1) + then show ?thesis by simp + next + case False + with p have 1: "a\<^isub>1 = fst p" and 2: "snd p < b\<^isub>1" + by (simp_all add: prod_less_eq) + from 2 have "P (a\<^isub>1, snd p)" by (rule b\<^isub>1) + with 1 show ?thesis by simp + qed + qed + qed + qed qed qed