src/HOLCF/LowerPD.thy
changeset 27405 785f5dbec8f4
parent 27373 5794a0e3e26c
child 29138 661a8db7e647
child 29237 e90d9d51106b
equal deleted inserted replaced
27404:62171da527d6 27405:785f5dbec8f4
    70 apply (subst PDPlus_commute)
    70 apply (subst PDPlus_commute)
    71 apply (simp add: 2)
    71 apply (simp add: 2)
    72 apply (simp add: lower_le_PDPlus_iff 3)
    72 apply (simp add: lower_le_PDPlus_iff 3)
    73 done
    73 done
    74 
    74 
    75 lemma approx_pd_lower_chain:
    75 lemma pd_take_lower_chain:
    76   "approx_pd n t \<le>\<flat> approx_pd (Suc n) t"
    76   "pd_take n t \<le>\<flat> pd_take (Suc n) t"
    77 apply (induct t rule: pd_basis_induct)
    77 apply (induct t rule: pd_basis_induct)
    78 apply (simp add: compact_basis.take_chain)
    78 apply (simp add: compact_basis.take_chain)
    79 apply (simp add: PDPlus_lower_mono)
    79 apply (simp add: PDPlus_lower_mono)
    80 done
    80 done
    81 
    81 
    82 lemma approx_pd_lower_le: "approx_pd i t \<le>\<flat> t"
    82 lemma pd_take_lower_le: "pd_take i t \<le>\<flat> t"
    83 apply (induct t rule: pd_basis_induct)
    83 apply (induct t rule: pd_basis_induct)
    84 apply (simp add: compact_basis.take_less)
    84 apply (simp add: compact_basis.take_less)
    85 apply (simp add: PDPlus_lower_mono)
    85 apply (simp add: PDPlus_lower_mono)
    86 done
    86 done
    87 
    87 
    88 lemma approx_pd_lower_mono:
    88 lemma pd_take_lower_mono:
    89   "t \<le>\<flat> u \<Longrightarrow> approx_pd n t \<le>\<flat> approx_pd n u"
    89   "t \<le>\<flat> u \<Longrightarrow> pd_take n t \<le>\<flat> pd_take n u"
    90 apply (erule lower_le_induct)
    90 apply (erule lower_le_induct)
    91 apply (simp add: compact_basis.take_mono)
    91 apply (simp add: compact_basis.take_mono)
    92 apply (simp add: lower_le_PDUnit_PDPlus_iff)
    92 apply (simp add: lower_le_PDUnit_PDPlus_iff)
    93 apply (simp add: lower_le_PDPlus_iff)
    93 apply (simp add: lower_le_PDPlus_iff)
    94 done
    94 done
   133   "Rep_lower_pd (lower_principal t) = {u. u \<le>\<flat> t}"
   133   "Rep_lower_pd (lower_principal t) = {u. u \<le>\<flat> t}"
   134 unfolding lower_principal_def
   134 unfolding lower_principal_def
   135 by (simp add: Abs_lower_pd_inverse lower_le.ideal_principal)
   135 by (simp add: Abs_lower_pd_inverse lower_le.ideal_principal)
   136 
   136 
   137 interpretation lower_pd:
   137 interpretation lower_pd:
   138   ideal_completion [lower_le approx_pd lower_principal Rep_lower_pd]
   138   ideal_completion [lower_le pd_take lower_principal Rep_lower_pd]
   139 apply unfold_locales
   139 apply unfold_locales
   140 apply (rule approx_pd_lower_le)
   140 apply (rule pd_take_lower_le)
   141 apply (rule approx_pd_idem)
   141 apply (rule pd_take_idem)
   142 apply (erule approx_pd_lower_mono)
   142 apply (erule pd_take_lower_mono)
   143 apply (rule approx_pd_lower_chain)
   143 apply (rule pd_take_lower_chain)
   144 apply (rule finite_range_approx_pd)
   144 apply (rule finite_range_pd_take)
   145 apply (rule approx_pd_covers)
   145 apply (rule pd_take_covers)
   146 apply (rule ideal_Rep_lower_pd)
   146 apply (rule ideal_Rep_lower_pd)
   147 apply (erule Rep_lower_pd_lub)
   147 apply (erule Rep_lower_pd_lub)
   148 apply (rule Rep_lower_principal)
   148 apply (rule Rep_lower_principal)
   149 apply (simp only: sq_le_lower_pd_def)
   149 apply (simp only: sq_le_lower_pd_def)
   150 done
   150 done
   179 end
   179 end
   180 
   180 
   181 instance lower_pd :: (bifinite) bifinite ..
   181 instance lower_pd :: (bifinite) bifinite ..
   182 
   182 
   183 lemma approx_lower_principal [simp]:
   183 lemma approx_lower_principal [simp]:
   184   "approx n\<cdot>(lower_principal t) = lower_principal (approx_pd n t)"
   184   "approx n\<cdot>(lower_principal t) = lower_principal (pd_take n t)"
   185 unfolding approx_lower_pd_def
   185 unfolding approx_lower_pd_def
   186 by (rule lower_pd.completion_approx_principal)
   186 by (rule lower_pd.completion_approx_principal)
   187 
   187 
   188 lemma approx_eq_lower_principal:
   188 lemma approx_eq_lower_principal:
   189   "\<exists>t\<in>Rep_lower_pd xs. approx n\<cdot>xs = lower_principal (approx_pd n t)"
   189   "\<exists>t\<in>Rep_lower_pd xs. approx n\<cdot>xs = lower_principal (pd_take n t)"
   190 unfolding approx_lower_pd_def
   190 unfolding approx_lower_pd_def
   191 by (rule lower_pd.completion_approx_eq_principal)
   191 by (rule lower_pd.completion_approx_eq_principal)
   192 
   192 
   193 
   193 
   194 subsection {* Monadic unit and plus *}
   194 subsection {* Monadic unit and plus *}