11 |
11 |
12 subsection {* Basis preorder *} |
12 subsection {* Basis preorder *} |
13 |
13 |
14 definition |
14 definition |
15 lower_le :: "'a pd_basis \<Rightarrow> 'a pd_basis \<Rightarrow> bool" (infix "\<le>\<flat>" 50) where |
15 lower_le :: "'a pd_basis \<Rightarrow> 'a pd_basis \<Rightarrow> bool" (infix "\<le>\<flat>" 50) where |
16 "lower_le = (\<lambda>u v. \<forall>x\<in>Rep_pd_basis u. \<exists>y\<in>Rep_pd_basis v. compact_le x y)" |
16 "lower_le = (\<lambda>u v. \<forall>x\<in>Rep_pd_basis u. \<exists>y\<in>Rep_pd_basis v. x \<sqsubseteq> y)" |
17 |
17 |
18 lemma lower_le_refl [simp]: "t \<le>\<flat> t" |
18 lemma lower_le_refl [simp]: "t \<le>\<flat> t" |
19 unfolding lower_le_def by (fast intro: compact_le_refl) |
19 unfolding lower_le_def by fast |
20 |
20 |
21 lemma lower_le_trans: "\<lbrakk>t \<le>\<flat> u; u \<le>\<flat> v\<rbrakk> \<Longrightarrow> t \<le>\<flat> v" |
21 lemma lower_le_trans: "\<lbrakk>t \<le>\<flat> u; u \<le>\<flat> v\<rbrakk> \<Longrightarrow> t \<le>\<flat> v" |
22 unfolding lower_le_def |
22 unfolding lower_le_def |
23 apply (rule ballI) |
23 apply (rule ballI) |
24 apply (drule (1) bspec, erule bexE) |
24 apply (drule (1) bspec, erule bexE) |
25 apply (drule (1) bspec, erule bexE) |
25 apply (drule (1) bspec, erule bexE) |
26 apply (erule rev_bexI) |
26 apply (erule rev_bexI) |
27 apply (erule (1) compact_le_trans) |
27 apply (erule (1) trans_less) |
28 done |
28 done |
29 |
29 |
30 interpretation lower_le: preorder [lower_le] |
30 interpretation lower_le: preorder [lower_le] |
31 by (rule preorder.intro, rule lower_le_refl, rule lower_le_trans) |
31 by (rule preorder.intro, rule lower_le_refl, rule lower_le_trans) |
32 |
32 |
33 lemma lower_le_minimal [simp]: "PDUnit compact_bot \<le>\<flat> t" |
33 lemma lower_le_minimal [simp]: "PDUnit compact_bot \<le>\<flat> t" |
34 unfolding lower_le_def Rep_PDUnit |
34 unfolding lower_le_def Rep_PDUnit |
35 by (simp, rule Rep_pd_basis_nonempty [folded ex_in_conv]) |
35 by (simp, rule Rep_pd_basis_nonempty [folded ex_in_conv]) |
36 |
36 |
37 lemma PDUnit_lower_mono: "compact_le x y \<Longrightarrow> PDUnit x \<le>\<flat> PDUnit y" |
37 lemma PDUnit_lower_mono: "x \<sqsubseteq> y \<Longrightarrow> PDUnit x \<le>\<flat> PDUnit y" |
38 unfolding lower_le_def Rep_PDUnit by fast |
38 unfolding lower_le_def Rep_PDUnit by fast |
39 |
39 |
40 lemma PDPlus_lower_mono: "\<lbrakk>s \<le>\<flat> t; u \<le>\<flat> v\<rbrakk> \<Longrightarrow> PDPlus s u \<le>\<flat> PDPlus t v" |
40 lemma PDPlus_lower_mono: "\<lbrakk>s \<le>\<flat> t; u \<le>\<flat> v\<rbrakk> \<Longrightarrow> PDPlus s u \<le>\<flat> PDPlus t v" |
41 unfolding lower_le_def Rep_PDPlus by fast |
41 unfolding lower_le_def Rep_PDPlus by fast |
42 |
42 |
43 lemma PDPlus_lower_less: "t \<le>\<flat> PDPlus t u" |
43 lemma PDPlus_lower_less: "t \<le>\<flat> PDPlus t u" |
44 unfolding lower_le_def Rep_PDPlus by (fast intro: compact_le_refl) |
44 unfolding lower_le_def Rep_PDPlus by fast |
45 |
45 |
46 lemma lower_le_PDUnit_PDUnit_iff [simp]: |
46 lemma lower_le_PDUnit_PDUnit_iff [simp]: |
47 "(PDUnit a \<le>\<flat> PDUnit b) = compact_le a b" |
47 "(PDUnit a \<le>\<flat> PDUnit b) = a \<sqsubseteq> b" |
48 unfolding lower_le_def Rep_PDUnit by fast |
48 unfolding lower_le_def Rep_PDUnit by fast |
49 |
49 |
50 lemma lower_le_PDUnit_PDPlus_iff: |
50 lemma lower_le_PDUnit_PDPlus_iff: |
51 "(PDUnit a \<le>\<flat> PDPlus t u) = (PDUnit a \<le>\<flat> t \<or> PDUnit a \<le>\<flat> u)" |
51 "(PDUnit a \<le>\<flat> PDPlus t u) = (PDUnit a \<le>\<flat> t \<or> PDUnit a \<le>\<flat> u)" |
52 unfolding lower_le_def Rep_PDPlus Rep_PDUnit by fast |
52 unfolding lower_le_def Rep_PDPlus Rep_PDUnit by fast |
54 lemma lower_le_PDPlus_iff: "(PDPlus t u \<le>\<flat> v) = (t \<le>\<flat> v \<and> u \<le>\<flat> v)" |
54 lemma lower_le_PDPlus_iff: "(PDPlus t u \<le>\<flat> v) = (t \<le>\<flat> v \<and> u \<le>\<flat> v)" |
55 unfolding lower_le_def Rep_PDPlus by fast |
55 unfolding lower_le_def Rep_PDPlus by fast |
56 |
56 |
57 lemma lower_le_induct [induct set: lower_le]: |
57 lemma lower_le_induct [induct set: lower_le]: |
58 assumes le: "t \<le>\<flat> u" |
58 assumes le: "t \<le>\<flat> u" |
59 assumes 1: "\<And>a b. compact_le a b \<Longrightarrow> P (PDUnit a) (PDUnit b)" |
59 assumes 1: "\<And>a b. a \<sqsubseteq> b \<Longrightarrow> P (PDUnit a) (PDUnit b)" |
60 assumes 2: "\<And>t u a. P (PDUnit a) t \<Longrightarrow> P (PDUnit a) (PDPlus t u)" |
60 assumes 2: "\<And>t u a. P (PDUnit a) t \<Longrightarrow> P (PDUnit a) (PDPlus t u)" |
61 assumes 3: "\<And>t u v. \<lbrakk>P t v; P u v\<rbrakk> \<Longrightarrow> P (PDPlus t u) v" |
61 assumes 3: "\<And>t u v. \<lbrakk>P t v; P u v\<rbrakk> \<Longrightarrow> P (PDPlus t u) v" |
62 shows "P t u" |
62 shows "P t u" |
63 using le |
63 using le |
64 apply (induct t arbitrary: u rule: pd_basis_induct) |
64 apply (induct t arbitrary: u rule: pd_basis_induct) |
121 apply (rule Abs_lower_pd_inverse [simplified]) |
121 apply (rule Abs_lower_pd_inverse [simplified]) |
122 apply (rule lower_le.ideal_principal) |
122 apply (rule lower_le.ideal_principal) |
123 done |
123 done |
124 |
124 |
125 interpretation lower_pd: |
125 interpretation lower_pd: |
126 bifinite_basis [lower_le lower_principal Rep_lower_pd approx_pd] |
126 bifinite_basis [lower_le approx_pd lower_principal Rep_lower_pd] |
127 apply unfold_locales |
127 apply unfold_locales |
128 apply (rule ideal_Rep_lower_pd) |
|
129 apply (rule cont_Rep_lower_pd) |
|
130 apply (rule Rep_lower_principal) |
|
131 apply (simp only: less_lower_pd_def less_set_def) |
|
132 apply (rule approx_pd_lower_le) |
128 apply (rule approx_pd_lower_le) |
133 apply (rule approx_pd_idem) |
129 apply (rule approx_pd_idem) |
134 apply (erule approx_pd_lower_mono) |
130 apply (erule approx_pd_lower_mono) |
135 apply (rule approx_pd_lower_mono1, simp) |
131 apply (rule approx_pd_lower_mono1, simp) |
136 apply (rule finite_range_approx_pd) |
132 apply (rule finite_range_approx_pd) |
137 apply (rule ex_approx_pd_eq) |
133 apply (rule ex_approx_pd_eq) |
|
134 apply (rule ideal_Rep_lower_pd) |
|
135 apply (rule cont_Rep_lower_pd) |
|
136 apply (rule Rep_lower_principal) |
|
137 apply (simp only: less_lower_pd_def less_set_def) |
138 done |
138 done |
139 |
139 |
140 lemma lower_principal_less_iff [simp]: |
140 lemma lower_principal_less_iff [simp]: |
141 "(lower_principal t \<sqsubseteq> lower_principal u) = (t \<le>\<flat> u)" |
141 "(lower_principal t \<sqsubseteq> lower_principal u) = (t \<le>\<flat> u)" |
142 unfolding less_lower_pd_def Rep_lower_principal less_set_def |
142 unfolding less_lower_pd_def Rep_lower_principal less_set_def |