src/HOL/Decision_Procs/Rat_Pair.thy
changeset 60698 29e8bdc41f90
parent 60567 19c277ea65ae
child 62348 9a5f43dac883
--- a/src/HOL/Decision_Procs/Rat_Pair.thy	Thu Jul 09 00:39:49 2015 +0200
+++ b/src/HOL/Decision_Procs/Rat_Pair.thy	Thu Jul 09 00:40:57 2015 +0200
@@ -328,13 +328,7 @@
   proof cases
     case 1
     then show ?thesis
-      apply (cases "a = 0")
-      apply (simp_all add: x y Nmul_def INum_def Let_def)
-      apply (cases "b = 0")
-      apply simp_all
-      apply (cases "a' = 0")
-      apply simp_all
-      done
+      by (auto simp add: x y Nmul_def INum_def)
   next
     case neq: 2
     let ?g = "gcd (a * a') (b * b')"
@@ -347,21 +341,21 @@
   qed
 qed
 
-lemma Nneg[simp]: "INum (~\<^sub>N x) = - (INum x ::'a::field)"
+lemma Nneg[simp]: "INum (~\<^sub>N x) = - (INum x :: 'a::field)"
   by (simp add: Nneg_def split_def INum_def)
 
-lemma Nsub[simp]: "INum (x -\<^sub>N y) = INum x - (INum y:: 'a :: {field_char_0,field})"
+lemma Nsub[simp]: "INum (x -\<^sub>N y) = INum x - (INum y:: 'a::{field_char_0,field})"
   by (simp add: Nsub_def split_def)
 
-lemma Ninv[simp]: "INum (Ninv x) = (1::'a :: field) / (INum x)"
+lemma Ninv[simp]: "INum (Ninv x) = (1 :: 'a::field) / INum x"
   by (simp add: Ninv_def INum_def split_def)
 
-lemma Ndiv[simp]: "INum (x \<div>\<^sub>N y) = INum x / (INum y ::'a :: {field_char_0,field})"
+lemma Ndiv[simp]: "INum (x \<div>\<^sub>N y) = INum x / (INum y :: 'a::{field_char_0,field})"
   by (simp add: Ndiv_def)
 
 lemma Nlt0_iff[simp]:
   assumes nx: "isnormNum x"
-  shows "((INum x :: 'a::{field_char_0,linordered_field})< 0) = 0>\<^sub>N x"
+  shows "((INum x :: 'a::{field_char_0,linordered_field}) < 0) = 0>\<^sub>N x"
 proof -
   obtain a b where x: "x = (a, b)" by (cases x)
   show ?thesis
@@ -401,7 +395,7 @@
 
 lemma Ngt0_iff[simp]:
   assumes nx: "isnormNum x"
-  shows "((INum x :: 'a::{field_char_0,linordered_field})> 0) = 0<\<^sub>N x"
+  shows "((INum x :: 'a::{field_char_0,linordered_field}) > 0) = 0<\<^sub>N x"
 proof -
   obtain a b where x: "x = (a, b)" by (cases x)
   show ?thesis
@@ -421,7 +415,7 @@
 
 lemma Nge0_iff[simp]:
   assumes nx: "isnormNum x"
-  shows "((INum x :: 'a::{field_char_0,linordered_field}) \<ge> 0) = 0\<le>\<^sub>N x"
+  shows "(INum x :: 'a::{field_char_0,linordered_field}) \<ge> 0 \<longleftrightarrow> 0\<le>\<^sub>N x"
 proof -
   obtain a b where x: "x = (a, b)" by (cases x)
   show ?thesis
@@ -442,12 +436,12 @@
 lemma Nlt_iff[simp]:
   assumes nx: "isnormNum x"
     and ny: "isnormNum y"
-  shows "((INum x :: 'a::{field_char_0,linordered_field}) < INum y) = (x <\<^sub>N y)"
+  shows "((INum x :: 'a::{field_char_0,linordered_field}) < INum y) \<longleftrightarrow> x <\<^sub>N y"
 proof -
   let ?z = "0::'a"
-  have "((INum x ::'a) < INum y) = (INum (x -\<^sub>N y) < ?z)"
+  have "((INum x ::'a) < INum y) \<longleftrightarrow> INum (x -\<^sub>N y) < ?z"
     using nx ny by simp
-  also have "\<dots> = (0>\<^sub>N (x -\<^sub>N y))"
+  also have "\<dots> \<longleftrightarrow> 0>\<^sub>N (x -\<^sub>N y)"
     using Nlt0_iff[OF Nsub_normN[OF ny]] by simp
   finally show ?thesis
     by (simp add: Nlt_def)
@@ -456,11 +450,11 @@
 lemma Nle_iff[simp]:
   assumes nx: "isnormNum x"
     and ny: "isnormNum y"
-  shows "((INum x :: 'a::{field_char_0,linordered_field})\<le> INum y) = (x \<le>\<^sub>N y)"
+  shows "((INum x :: 'a::{field_char_0,linordered_field}) \<le> INum y) \<longleftrightarrow> x \<le>\<^sub>N y"
 proof -
-  have "((INum x ::'a) \<le> INum y) = (INum (x -\<^sub>N y) \<le> (0::'a))"
+  have "((INum x ::'a) \<le> INum y) \<longleftrightarrow> INum (x -\<^sub>N y) \<le> (0::'a)"
     using nx ny by simp
-  also have "\<dots> = (0\<ge>\<^sub>N (x -\<^sub>N y))"
+  also have "\<dots> \<longleftrightarrow> 0\<ge>\<^sub>N (x -\<^sub>N y)"
     using Nle0_iff[OF Nsub_normN[OF ny]] by simp
   finally show ?thesis
     by (simp add: Nle_def)
@@ -508,7 +502,7 @@
   shows "normNum (normNum x) = normNum x"
   by simp
 
-lemma normNum0[simp]: "normNum (0,b) = 0\<^sub>N" "normNum (a,0) = 0\<^sub>N"
+lemma normNum0[simp]: "normNum (0, b) = 0\<^sub>N" "normNum (a, 0) = 0\<^sub>N"
   by (simp_all add: normNum_def)
 
 lemma normNum_Nadd:
@@ -520,29 +514,40 @@
   assumes "SORT_CONSTRAINT('a::{field_char_0,field})"
   shows "normNum x +\<^sub>N y = x +\<^sub>N y"
 proof -
-  have n: "isnormNum (normNum x +\<^sub>N y)" "isnormNum (x +\<^sub>N y)" by simp_all
-  have "INum (normNum x +\<^sub>N y) = INum x + (INum y :: 'a)" by simp
-  also have "\<dots> = INum (x +\<^sub>N y)" by simp
-  finally show ?thesis using isnormNum_unique[OF n] by simp
+  have n: "isnormNum (normNum x +\<^sub>N y)" "isnormNum (x +\<^sub>N y)"
+    by simp_all
+  have "INum (normNum x +\<^sub>N y) = INum x + (INum y :: 'a)"
+    by simp
+  also have "\<dots> = INum (x +\<^sub>N y)"
+    by simp
+  finally show ?thesis
+    using isnormNum_unique[OF n] by simp
 qed
 
 lemma Nadd_normNum2[simp]:
   assumes "SORT_CONSTRAINT('a::{field_char_0,field})"
   shows "x +\<^sub>N normNum y = x +\<^sub>N y"
 proof -
-  have n: "isnormNum (x +\<^sub>N normNum y)" "isnormNum (x +\<^sub>N y)" by simp_all
-  have "INum (x +\<^sub>N normNum y) = INum x + (INum y :: 'a)" by simp
-  also have "\<dots> = INum (x +\<^sub>N y)" by simp
-  finally show ?thesis using isnormNum_unique[OF n] by simp
+  have n: "isnormNum (x +\<^sub>N normNum y)" "isnormNum (x +\<^sub>N y)"
+    by simp_all
+  have "INum (x +\<^sub>N normNum y) = INum x + (INum y :: 'a)"
+    by simp
+  also have "\<dots> = INum (x +\<^sub>N y)"
+    by simp
+  finally show ?thesis
+    using isnormNum_unique[OF n] by simp
 qed
 
 lemma Nadd_assoc:
   assumes "SORT_CONSTRAINT('a::{field_char_0,field})"
   shows "x +\<^sub>N y +\<^sub>N z = x +\<^sub>N (y +\<^sub>N z)"
 proof -
-  have n: "isnormNum (x +\<^sub>N y +\<^sub>N z)" "isnormNum (x +\<^sub>N (y +\<^sub>N z))" by simp_all
-  have "INum (x +\<^sub>N y +\<^sub>N z) = (INum (x +\<^sub>N (y +\<^sub>N z)) :: 'a)" by simp
-  with isnormNum_unique[OF n] show ?thesis by simp
+  have n: "isnormNum (x +\<^sub>N y +\<^sub>N z)" "isnormNum (x +\<^sub>N (y +\<^sub>N z))"
+    by simp_all
+  have "INum (x +\<^sub>N y +\<^sub>N z) = (INum (x +\<^sub>N (y +\<^sub>N z)) :: 'a)"
+    by simp
+  with isnormNum_unique[OF n] show ?thesis
+    by simp
 qed
 
 lemma Nmul_commute: "isnormNum x \<Longrightarrow> isnormNum y \<Longrightarrow> x *\<^sub>N y = y *\<^sub>N x"
@@ -557,8 +562,10 @@
 proof -
   from nx ny nz have n: "isnormNum (x *\<^sub>N y *\<^sub>N z)" "isnormNum (x *\<^sub>N (y *\<^sub>N z))"
     by simp_all
-  have "INum (x +\<^sub>N y +\<^sub>N z) = (INum (x +\<^sub>N (y +\<^sub>N z)) :: 'a)" by simp
-  with isnormNum_unique[OF n] show ?thesis by simp
+  have "INum (x +\<^sub>N y +\<^sub>N z) = (INum (x +\<^sub>N (y +\<^sub>N z)) :: 'a)"
+    by simp
+  with isnormNum_unique[OF n] show ?thesis
+    by simp
 qed
 
 lemma Nsub0:
@@ -568,9 +575,12 @@
   shows "x -\<^sub>N y = 0\<^sub>N \<longleftrightarrow> x = y"
 proof -
   from isnormNum_unique[where 'a = 'a, OF Nsub_normN[OF y], where y="0\<^sub>N"]
-  have "(x -\<^sub>N y = 0\<^sub>N) = (INum (x -\<^sub>N y) = (INum 0\<^sub>N :: 'a)) " by simp
-  also have "\<dots> = (INum x = (INum y :: 'a))" by simp
-  also have "\<dots> = (x = y)" using x y by simp
+  have "x -\<^sub>N y = 0\<^sub>N \<longleftrightarrow> INum (x -\<^sub>N y) = (INum 0\<^sub>N :: 'a)"
+    by simp
+  also have "\<dots> \<longleftrightarrow> INum x = (INum y :: 'a)"
+    by simp
+  also have "\<dots> \<longleftrightarrow> x = y"
+    using x y by simp
   finally show ?thesis .
 qed