merged
authornipkow
Thu, 18 Apr 2019 06:19:30 +0200
changeset 70181 93516cb6cd30
parent 70179 269dcea7426c (current diff)
parent 70180 5beca7396282 (diff)
child 70182 ca9dfa7ee3bd
merged
--- a/src/HOL/Order_Relation.thy	Wed Apr 17 21:53:45 2019 +0100
+++ b/src/HOL/Order_Relation.thy	Thu Apr 18 06:19:30 2019 +0200
@@ -52,6 +52,14 @@
   by (simp add: linear_order_on_def)
 
 
+lemma partial_order_on_acyclic:
+  "partial_order_on A r \<Longrightarrow> acyclic (r - Id)"
+  by (simp add: acyclic_irrefl partial_order_on_def preorder_on_def trans_diff_Id)
+
+lemma partial_order_on_well_order_on:               
+  "finite r \<Longrightarrow> partial_order_on A r \<Longrightarrow> wf (r - Id)" 
+  by (simp add: finite_acyclic_wf partial_order_on_acyclic) 
+
 lemma strict_linear_order_on_diff_Id: "linear_order_on A r \<Longrightarrow> strict_linear_order_on A (r - Id)"
   by (simp add: order_on_defs trans_diff_Id)
 
@@ -360,6 +368,23 @@
     using assms order_on_defs[of "Field r" r] total_on_def[of "Field r" r] by blast
 qed
 
+lemma finite_Partial_order_induct[consumes 3, case_names step]:
+  assumes "Partial_order r"
+    and "x \<in> Field r"
+    and "finite r"
+    and step: "\<And>x. x \<in> Field r \<Longrightarrow> (\<And>y. y \<in> aboveS r x \<Longrightarrow> P y) \<Longrightarrow> P x"
+  shows "P x"
+  using assms(2)
+proof (induct rule: wf_induct[of "r\<inverse> - Id"])
+  case 1
+  from assms(1,3) show "wf (r\<inverse> - Id)"
+    using partial_order_on_well_order_on partial_order_on_converse by blast
+next
+  case prems: (2 x)
+  show ?case
+    by (rule step) (use prems in \<open>auto simp: aboveS_def intro: FieldI2\<close>)
+qed
+
 lemma finite_Linear_order_induct[consumes 3, case_names step]:
   assumes "Linear_order r"
     and "x \<in> Field r"