src/HOLCF/Universal.thy
changeset 34915 7894c7dab132
parent 33071 362f59fe5092
child 35701 0f5bf989da42
equal deleted inserted replaced
34914:e391c3de0f6b 34915:7894c7dab132
   692 apply (drule place_rank_mono, simp)
   692 apply (drule place_rank_mono, simp)
   693 done
   693 done
   694 
   694 
   695 lemma basis_emb_mono:
   695 lemma basis_emb_mono:
   696   "x \<sqsubseteq> y \<Longrightarrow> ubasis_le (basis_emb x) (basis_emb y)"
   696   "x \<sqsubseteq> y \<Longrightarrow> ubasis_le (basis_emb x) (basis_emb y)"
   697 proof (induct n \<equiv> "max (place x) (place y)" arbitrary: x y rule: less_induct)
   697 proof (induct "max (place x) (place y)" arbitrary: x y rule: less_induct)
   698   case (less n)
   698   case less
   699   hence IH:
       
   700     "\<And>(a::'a compact_basis) b.
       
   701      \<lbrakk>max (place a) (place b) < max (place x) (place y); a \<sqsubseteq> b\<rbrakk>
       
   702         \<Longrightarrow> ubasis_le (basis_emb a) (basis_emb b)"
       
   703     by simp
       
   704   show ?case proof (rule linorder_cases)
   699   show ?case proof (rule linorder_cases)
   705     assume "place x < place y"
   700     assume "place x < place y"
   706     then have "rank x < rank y"
   701     then have "rank x < rank y"
   707       using `x \<sqsubseteq> y` by (rule rank_place_mono)
   702       using `x \<sqsubseteq> y` by (rule rank_place_mono)
   708     with `place x < place y` show ?case
   703     with `place x < place y` show ?case
   709       apply (case_tac "y = compact_bot", simp)
   704       apply (case_tac "y = compact_bot", simp)
   710       apply (simp add: basis_emb.simps [of y])
   705       apply (simp add: basis_emb.simps [of y])
   711       apply (rule ubasis_le_trans [OF _ ubasis_le_lower [OF fin2]])
   706       apply (rule ubasis_le_trans [OF _ ubasis_le_lower [OF fin2]])
   712       apply (rule IH)
   707       apply (rule less)
   713        apply (simp add: less_max_iff_disj)
   708        apply (simp add: less_max_iff_disj)
   714        apply (erule place_sub_less)
   709        apply (erule place_sub_less)
   715       apply (erule rank_less_imp_below_sub [OF `x \<sqsubseteq> y`])
   710       apply (erule rank_less_imp_below_sub [OF `x \<sqsubseteq> y`])
   716       done
   711       done
   717   next
   712   next
   722     assume "place x > place y"
   717     assume "place x > place y"
   723     with `x \<sqsubseteq> y` show ?case
   718     with `x \<sqsubseteq> y` show ?case
   724       apply (case_tac "x = compact_bot", simp add: ubasis_le_minimal)
   719       apply (case_tac "x = compact_bot", simp add: ubasis_le_minimal)
   725       apply (simp add: basis_emb.simps [of x])
   720       apply (simp add: basis_emb.simps [of x])
   726       apply (rule ubasis_le_upper [OF fin2], simp)
   721       apply (rule ubasis_le_upper [OF fin2], simp)
   727       apply (rule IH)
   722       apply (rule less)
   728        apply (simp add: less_max_iff_disj)
   723        apply (simp add: less_max_iff_disj)
   729        apply (erule place_sub_less)
   724        apply (erule place_sub_less)
   730       apply (erule rev_below_trans)
   725       apply (erule rev_below_trans)
   731       apply (rule sub_below)
   726       apply (rule sub_below)
   732       done
   727       done