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
end
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-04-25)
¤
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.