src/HOLCF/LowerPD.thy
changeset 26420 57a626f64875
parent 26407 562a1d615336
child 26806 40b411ec05aa
equal deleted inserted replaced
26419:945d8d7a66ec 26420:57a626f64875
    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