src/HOL/Library/Fun_Lexorder.thy
changeset 63060 293ede07b775
parent 63040 eb4ddd18d635
child 68312 e9b5f25f6712
equal deleted inserted replaced
63059:3f577308551e 63060:293ede07b775
    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