equal
deleted
inserted
replaced
22 |
22 |
23 lemma less_fun_asym: |
23 lemma less_fun_asym: |
24 assumes "less_fun f g" |
24 assumes "less_fun f g" |
25 shows "\<not> less_fun g f" |
25 shows "\<not> less_fun g f" |
26 proof |
26 proof |
27 from assms obtain k1 where k1: "f k1 < g k1" "\<And>k'. k' < k1 \<Longrightarrow> f k' = g k'" |
27 from assms obtain k1 where k1: "f k1 < g k1" "k' < k1 \<Longrightarrow> f k' = g k'" for k' |
28 by (blast elim!: less_funE) |
28 by (blast elim!: less_funE) |
29 assume "less_fun g f" then obtain k2 where k2: "g k2 < f k2" "\<And>k'. k' < k2 \<Longrightarrow> g k' = f k'" |
29 assume "less_fun g f" then obtain k2 where k2: "g k2 < f k2" "k' < k2 \<Longrightarrow> g k' = f k'" for k' |
30 by (blast elim!: less_funE) |
30 by (blast elim!: less_funE) |
31 show False proof (cases k1 k2 rule: linorder_cases) |
31 show False proof (cases k1 k2 rule: linorder_cases) |
32 case equal with k1 k2 show False by simp |
32 case equal with k1 k2 show False by simp |
33 next |
33 next |
34 case less with k2 have "g k1 = f k1" by simp |
34 case less with k2 have "g k1 = f k1" by simp |
50 |
50 |
51 lemma less_fun_trans: |
51 lemma less_fun_trans: |
52 assumes "less_fun f g" and "less_fun g h" |
52 assumes "less_fun f g" and "less_fun g h" |
53 shows "less_fun f h" |
53 shows "less_fun f h" |
54 proof (rule less_funI) |
54 proof (rule less_funI) |
55 from \<open>less_fun f g\<close> obtain k1 where k1: "f k1 < g k1" "\<And>k'. k' < k1 \<Longrightarrow> f k' = g k'" |
55 from \<open>less_fun f g\<close> obtain k1 where k1: "f k1 < g k1" "k' < k1 \<Longrightarrow> f k' = g k'" for k' |
56 by (blast elim!: less_funE) |
56 by (blast elim!: less_funE) |
57 from \<open>less_fun g h\<close> obtain k2 where k2: "g k2 < h k2" "\<And>k'. k' < k2 \<Longrightarrow> g k' = h k'" |
57 from \<open>less_fun g h\<close> obtain k2 where k2: "g k2 < h k2" "k' < k2 \<Longrightarrow> g k' = h k'" for k' |
58 by (blast elim!: less_funE) |
58 by (blast elim!: less_funE) |
59 show "\<exists>k. f k < h k \<and> (\<forall>k'<k. f k' = h k')" |
59 show "\<exists>k. f k < h k \<and> (\<forall>k'<k. f k' = h k')" |
60 proof (cases k1 k2 rule: linorder_cases) |
60 proof (cases k1 k2 rule: linorder_cases) |
61 case equal with k1 k2 show ?thesis by (auto simp add: exI [of _ k2]) |
61 case equal with k1 k2 show ?thesis by (auto simp add: exI [of _ k2]) |
62 next |
62 next |