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 |