definition less_fun :: "('a::linorder \ 'b::linorder) \ ('a \ 'b) \ bool" where "less_fun f g \ (\k. f k < g k \ (\k' < k. f k' = g k'))"
lemma less_funI: assumes"\k. f k < g k \ (\k' < k. f k' = g k')" shows"less_fun f g" using assms by (simp add: less_fun_def)
lemma less_funE: assumes"less_fun f g" obtains k where"f k < g k"and"\k'. k' < k \ f k' = g k'" using assms unfolding less_fun_def by blast
lemma less_fun_asym: assumes"less_fun f g" shows"\ less_fun g f" proof from assms obtain k1 where k1: "f k1 < g k1""k' < k1 \ f k' = g k'"for k' by (blast elim!: less_funE) assume"less_fun g f"thenobtain k2 where k2: "g k2 < f k2""k' < k2 \ g k' = f k'"for k' by (blast elim!: less_funE) show False proof (cases k1 k2 rule: linorder_cases) case equal with k1 k2 show False by simp next case less with k2 have"g k1 = f k1"by simp with k1 show False by simp next case greater with k1 have"f k2 = g k2"by simp with k2 show False by simp qed qed
lemma less_fun_irrefl: "\ less_fun f f" proof assume"less_fun f f" thenobtain k where k: "f k < f k" by (blast elim!: less_funE) thenshow False by simp qed
lemma less_fun_trans: assumes"less_fun f g"and"less_fun g h" shows"less_fun f h" proof (rule less_funI) from‹less_fun f g›obtain k1 where k1: "f k1 < g k1""k' < k1 \ f k' = g k'"for k' by (blast elim!: less_funE) from‹less_fun g h›obtain k2 where k2: "g k2 < h k2""k' < k2 \ g k' = h k'"for k' by (blast elim!: less_funE) show"\k. f k < h k \ (\k' proof (cases k1 k2 rule: linorder_cases) case equal with k1 k2 show ?thesis by (auto simp add: exI [of _ k2]) next case less with k2 have"g k1 = h k1""\k'. k' < k1 \ g k' = h k'"by simp_all with k1 show ?thesis by (auto intro: exI [of _ k1]) next case greater with k1 have"f k2 = g k2""\k'. k' < k2 \ f k' = g k'"by simp_all with k2 show ?thesis by (auto intro: exI [of _ k2]) qed qed
lemma order_less_fun: "class.order (\f g. less_fun f g \ f = g) less_fun" by (rule order_strictI) (auto intro: less_fun_trans intro!: less_fun_irrefl less_fun_asym)
lemma less_fun_trichotomy: assumes"finite {k. f k \ g k}" shows"less_fun f g \ f = g \ less_fun g f" proof -
{ define K where"K = {k. f k \ g k}" assume"f \ g" thenobtain k' where "f k'≠ g k'" by auto thenhave [simp]: "K \ {}"by (auto simp add: K_def) with assms have [simp]: "finite K"by (simp add: K_def)
define q where"q = Min K" thenhave"q \ K"and"\k. k \ K \ k \ q"by auto thenhave"\k. \ k \ q \ k \ K"by blast thenhave *: "\k. k < q \ f k = g k"by (simp add: K_def) from‹q ∈ K›have"f q \ g q"by (simp add: K_def) thenhave"f q < g q \ f q > g q"by auto with * have"less_fun f g \ less_fun g f" by (auto intro!: less_funI)
} thenshow ?thesis by blast qed
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.