Max.thy
changeset 35 92f61f6a0fe7
child 127 38c6acf03f68
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Max.thy	Thu May 22 17:40:39 2014 +0100
@@ -0,0 +1,78 @@
+theory Max
+imports Main
+begin
+
+section {* Some generic facts about Max *}
+
+
+lemma Max_insert:
+  assumes "finite B"
+  and  "B \<noteq> {}"
+  shows "Max ({x} \<union> B) = max x (Max B)"
+using assms by (simp add: Lattices_Big.Max.insert)
+
+lemma Max_Union:
+  assumes fc: "finite C"
+  and ne: "C \<noteq> {}"
+  and fa: "\<And> A. A \<in> C \<Longrightarrow> finite A \<and> A \<noteq> {}"
+  shows "Max (\<Union>C) = Max (Max ` C)"
+using assms
+proof(induct rule: finite_induct)
+  case (insert x F)
+  assume ih: "\<lbrakk>F \<noteq> {}; \<And>A. A \<in> F \<Longrightarrow> finite A \<and> A \<noteq> {}\<rbrakk> \<Longrightarrow> Max (\<Union>F) = Max (Max ` F)"
+    and h: "\<And> A. A \<in> insert x F \<Longrightarrow> finite A \<and> A \<noteq> {}"
+  show ?case (is "?L = ?R")
+  proof(cases "F = {}")
+    case False
+    from Union_insert have "?L = Max (x \<union> (\<Union> F))" by simp
+    also have "\<dots> = max (Max x) (Max(\<Union> F))"
+    proof(rule Max_Un)
+      from h[of x] show "finite x" by auto
+    next
+      from h[of x] show "x \<noteq> {}" by auto
+    next
+      show "finite (\<Union>F)"
+        by (metis (full_types) finite_Union h insert.hyps(1) insertCI)
+    next
+      from False and h show "\<Union>F \<noteq> {}" by auto
+    qed
+    also have "\<dots> = ?R"
+    proof -
+      have "?R = Max (Max ` ({x} \<union> F))" by simp
+      also have "\<dots> = Max ({Max x} \<union> (Max ` F))" by simp
+      also have "\<dots> = max (Max x) (Max (\<Union>F))"
+      proof -
+        have "Max ({Max x} \<union> Max ` F) = max (Max {Max x}) (Max (Max ` F))"
+        proof(rule Max_Un)
+          show "finite {Max x}" by simp
+        next
+          show "{Max x} \<noteq> {}" by simp
+        next
+          from insert show "finite (Max ` F)" by auto
+        next
+          from False show "Max ` F \<noteq> {}" by auto
+        qed
+        moreover have "Max {Max x} = Max x" by simp
+        moreover have "Max (\<Union>F) = Max (Max ` F)"
+        proof(rule ih)
+          show "F \<noteq> {}" by fact
+        next
+          from h show "\<And>A. A \<in> F \<Longrightarrow> finite A \<and> A \<noteq> {}"
+            by auto
+        qed
+        ultimately show ?thesis by auto
+      qed
+      finally show ?thesis by simp
+    qed
+    finally show ?thesis by simp
+  next
+    case True
+    thus ?thesis by auto
+  qed
+next
+  case empty
+  assume "{} \<noteq> {}" show ?case by auto
+qed
+
+
+end
\ No newline at end of file