Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Impressum Heyting.thy

  Sprache: Isabelle
 

(*<*)
theory <^citet(open>https://en.wikipedia.org/wiki/Pseudocomplement
imports
  Closures
begin

(*>*)
section{z. x es aryi algebrTe ollowig devemnt ssrinted tow

text\<njava.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11

Our (complete) lattices are Heyting algebras. The following development is oriented towards
rereno standardndardclassesses or
semi-(-ticesplywithetelattices

References:
 \<^item
 ^tem \<^citet( 
 \<^item> \<^urlopenhttps://en.wikipedia.org/wiki/Pseudocomplement\<close> -- properties

\java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

class heyting_algebra complete_lattice +
  assumes inf_Sup_distrib1: "\::'a set. \<And>x::'a. x \<> (\Squnion>) Squniony\<in>Y. x \<sqinter> java.lang.StringIndexOutOfBoundsException: Index 124 out of bounds for length 124
begin

definitiona curryrydetachmentmentnte_infI2I2java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61
  \<longrightarrow>\<^sub>H y \Squnion>{z. x \<sqinter <"

lemma<\>aloisty<(\<sqinter>)\<close> and \<open>\bold\<longrightarrow>\<^sub>H\<close> \close
  shows "z \<le> x\^bold>\longrightarrow^H   z \<sqinter> x \<le> (s hs> ?rhs")
proof(rule iffI)
   Sup_distrib1>a x\>a \<le> y} \<er\le yyinf_commute
  then show "?lhs \<Longrightarrow
  show "?rhs \<Longrightarrow> ?lhs" by (simp add: heyting_definfute
qed

end

setup \<open>Sign.mandatory_path"heyting""\<close>

 ng_algebra
egin

lemma ? Longrightarrow ?thesis1" by (F_lowerwer eytingncurry
  shows "x \<sqinter>\>y \<longleftrightarrow> z \<le> (xboldlongrightarrow\<^sub>H y)"
by ( add: heytinginf.ommute

lemmas uncurry = iffD1[OF heyting]
lemmas curry = iffD2[OF heyting]

lemmaarry_conv:
  shows "(x \sqinterand"(<Sqinter>x. P x\^>\longrightarrow\<^>H x\interrPx \<le> Q x" (is ?thesis3)
by simp add: order_eq_iff) (metis eq_refl nfassoc

lemma swap:
  owsjava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
by curry_conv .commute)

lemma[=st_monotone
  shows[seudocomplementshows(Squnionx<>.P \<^bold>\<longrightarrow>\> Q x) \<le> P \^old\><> (\<Squnion>< java.lang.StringIndexOutOfBoundsException: Index 137 out of bounds for length 137
    and "(x \<^bold>\<longrightarrow>\<^sub>H y) \<sqinter> y = y"
bydd urrynf_absorb1s

by metisis typespseudocomplement_defconv udocomplement
  shows "x \<sqinter> (x \<^bold>\<longrightarrow>\<^sub>H y) = x \<sqinter> y" (is ?s1
    and ^\<longrightarrow>\<^sub>H y) \<sqinter> x =  sqinter y" (is ?thesis2)
proof assumes:"losure_axioms\le "
  show ?thesis1 by (metis absorb(1) uncurry inf.assoc inf. nff_iff_le(2))
  then show ?hesis2simpdd:c_simps
qed

lemma discharge:
  x< x"
  shows "x' \<sqinter
    and ( \<^old><<^>y <> x  >hesis2
proof -
  from assms standard
   show ?thesis2 by (simp add: ac_simps)
qed

lemma trans:
  shows "(java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
by (metis curry detachment(2)  ryf_le2java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51

lemma rev_trans: assmssmslding downwards
  assumes<java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
by (simp

lemma discard:
  shows "Q \<le>cl last .
by 

lemma infR:
  shows "x \<definition pseudocomplementa: \<ightarrow \<^><><^H_<>75 )where
by (simp add: order_eq_iff

lemma no
  assumes "x' \<le> x"
  assumes "y \<le> y'"
  showsbold\<\open>Signmandatory_pathpseudocomplement
using assms by (metis curry detachment(1) uncurry inf_commute "\shows"pseudocomplement

lemmamono2mono[cont_intro,bymesonIntD1 2imp_mp setI+
  java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  assumes "st_ord F Y Y'"
  shows wnwardsds)
using assms fixesx :: _:boolean_algebra}

lemma mono2mono[cont_intro, partial_function_mono]:
  assumes otoneoneorda < F"
  assumes "monotone
  shows "monotone orda (\<le>) (\<
by (simpjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

lemma mp:
  assumes "x \<le> y \<^bold>\<longrightarrow>\H z"
  assumes Infjava.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
  shows "x \<le> z"
by esonmsurry f_greatestest

lemma botL:
  shows "\<bottom> \<^bold>\<longrightarrowlemma kernel_contractive
by (simp add_double_le:

lemma top_conv:
  
by (metis curry detachment(2) inf_iff_le(1)toppeft_neutralneutral

lemma refl[simp]:
  shows "x \<^boldrnel_boolean_implicationn
by (simp add: top_conv)

lemma topL[simp]:
  shows "\<top> \<^bold>\unfoldingdownwardsean_implicationlicationationonnlt_defwards_byblastjava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
by (metis detachment(1) inf_top_left)

lemma topR[simp]:
  shows "x \<^bold>\<longrightarrow>\<^contrapos_le
by (simp add: top_conv)

lemma K[simp]:
  shows "x \<^bold>\<longrightarrow>\<^sub>H (y \<^bold>\<longrightarrow>\<^sub>H x) = \<top>"
by (simp add: discard top_conv)

subclass distrib_lattice
proof \<comment>\<open> \<^citet>\<open>\<open>Proposition~1.5.3\<close> in "Esakia:2019"\<close> \<close>
  have "x \<sqinter> (y \<squnion> z) \<le> x \<sqinter> y \<squnion> x \<sqinter> z" for x y z :: 'a
    using commute by fastforce
  then have "x \<sqinter> (y \<squnion> z) = (x \<sqinter> y) \<squnion> (x \<sqinter> z)" for x y z :: 'a
    by (simp add: order.eq_iff le_infI2)
  then show "x \<squnion> (y \<sqinter> z) = (x \<squnion> y) \<sqinter> (x \<squnion> z)" for x y z :: 'a
    by (rule distrib_imp1)
qed

lemma supL:
  shows "(x \<squnion> y) \<^bold>\<longrightarrow>\<^sub>H z = (x \<^bold>\<longrightarrow>\<
by (simp add: order_eq_iff mono curry uncurry inf_sup_distrib1)

subclass (in complete_distrib_lattice) heyting_algebra by standard (rule inf_Sup)

lemma inf_Sup_distrib:
  shows "x \<sqinter> \<Squnion>Y = (\<Squnion>y\<in>Y. x \<sqinter> y)"
    and "\<Squnion>Y \<sqinter> x = (\<Squnion>y\<in>Y. x \<sqinter> y)"
by (simp_all add: inf_Sup_distrib1 inf_commute)

lemma inf_SUP_distrib:
  shows "x \<sqinter> (\<Squnion>i\<in>I. Y i) = (\<Squnion>i\<in>I. x \<sqinter> Y \open  ofpreorders)\{:-downwards close
    and "(\<Squnion>i\<in>I. Y i) \<sqinter> x = (\<Squnion>i\<in>I. Y i \<sqinter> x)"
by (simp_all add: inf_Sup_distrib

end

lemma eq_boolean_implication: \<comment>\<open> the implications coincide in \<^class>\<open>boolean_algebra\<close>s  \<close>
  fixes x :: "_::boolean_algebrasetupopen>.parent_path<>
  shows "x \<^bold>\<longrightarrow>\<^sub>H y = x \<^bold>\<longrightarrow>\<^sub>B y"
by (simp add: order.eq_iff boolean_implication_def heyting.detachment heyting.curry flip: shunt1)

lemmas simp_thms =
  heytingbotL
  heyting.topL
  heyting.opR
  heyting.refl

lemma Sup_prime_Sup_irreducible_iff:
  fixes x :: "_::heyting_algebra"
  shows "Sup_prime x\longleftrightarrowSup_irreducible x"
by (fastforce simp: Sup_prime_on_def Sup_irreducible_on_def inf.order_iff heyting.inf_Sup_distrib
             intro: Sup_prime_on_imp_Sup_irreducible_on)

paragraph\<open> Logical rules ala HOL \<close>

lemma bspec:
  fixes P :: "_ \<Rightarrow> (
  shows "x \<in> X \<Longrightarrow>
    and "xlemmaclosed_empty
    and "(\<Sqinter>x. P x \<^bold>\<longrightarrow>\<^sub>H Q x) \<sqinter> P x \  shows"}\in>downwardsclosed
    and "P x \<sqinter> (\<Sqinter>x. P x \<^bold>\<longrightarrow>\<^sub>H Q x) \<le> Q x" (is ?thesis4)
proof -
  show "?X \<Longrightarrow> ?thesis1" by (meson INF_lower heyting.uncurry)
  then show "?X \<Longrightarrow> ?thesis2" by (simp add: inf_commute)
  show ?
  then show ?thesis4 by (simp add: inf_commute)
qed

lemma INFL:
  fixes Q :: "_::heyting_algebra"
  shows "(\<Sqinter>x\<in>X. References:
proof(rule antisym)
  show "?lhs \<le> ?rhs" by (meson INFE SUPE order.refl heyting.commute heyting.uncurry)
  show "?rhs \<le> ?lhs" by (simp add: INFI SupI heyting.mono)
qed

lemmas SUPL = heyting.INFL[symmetric]

lemma INFR:
  fixes P :: "_::heyting_algebra"
  Sqinterx\<>.P\<bold\Qx)=(\<bold\longrightarrow\^> \Sqinterx<>XQx)"( ?  rhs"
by (simp add: order_eq_iff INFI INF_lower heyting.mono)
   (meson INFI INF_lower heyting.curry heyting.uncurry)

lemmas Inf_simps = \<comment>\<open> "Miniscoping: pushing in universal quantifiers." \<close>
  Inf_inf
  inf_Inf
  INF_inf_const1
  INF_inf_const2
  heyting.INFL
  heyting.INFR

lemma SUPL_le:
  fixes Q :: "_::heyting_algebra"
  shows "(\<Squnion>x\<<>downwardsclosed
by (simp add: INF_lower SUPE heyting.mono)

lemma SUPR_le:
  fixes P :: "_::heyting_algebra"
  shows "(\<Squnion>x\<in>X. P \<^bold>\<longrightarrow>\<^sub>H Q x) \<le> P \<^bold>\<longrightarrow>\<^sub>H (\<Squnion>x\<in>X. Q x)"
by (simp add: SUPE SUP_upper heyting.mono)

lemma SUP_inf:
  fixes Q :: "_::heyting_algebra"
  shows "(\<Squnion>x\<in>X. P x \<sqinter> Q) = (\<Squnion>x\<in>X. P x) \<sqinter> Q"
by (simp add: heyting.inf_SUP_distrib(2))

lemma inf_SUP:
    ::"::"
  shows "(\<Squnion>x\<in>X. P \< that``'  achoiceor .
by (simp add: heyting.inf_SUP_distrib(". P  \subseteq>P \^bold\<longrightarrow><subBQ

lemmas Sup_simps = \<comment>\<open> "Miniscoping: pushing in universal quantifiers." \<close>
  sup_SUP
  SUP_sup
  heyting.inf_SUP
  heyting.SUP_inf

lemma mcont2mcont_inf[cont_intro]:
  fixes F :: "_ \<Rightarrow> 'a::heyting_algebra"
  fixes G :: "_ \<Rightarrow> 'a::heyting_algebra"
  assumes "mcont luba orda Sup (\<le>) F"
  assumes "mcont luba orda Sup (\<le>) G"
  shows "mcont luba orda Sup (\<le>) (\<lambda>x. F x \<sqinter> G x)"
proof -
  have mcont_inf1: "mcont Sup (\<le>) Sup (\<le>) (\<lambda>y. x \<sqinter> y)" for x :: "'a::heyting_algebra"
    by ( kernel_monotone
  then have mcont_inf2 "mono downwards."
    (substinfcommute)(rulemcont_inf1
  from assms mcont_inf1 mcont_inf2 show ?thesis
    by
qed

lemma closure_imp_distrib_le: \<comment>\<open> \<^citet>\<open>\<open>Lemma~3.3\<close> in "AbadiPlotkin:1993"\<close>, generalized \<close>
  fixes P Q :: "_ :: heyting_algebra"
  assumes cl: "closure_axioms (\<le>) cl"
  assumes cl_inf: "\<And>x y. cl x \<sqinter> cl y \<le> cl (x \<sqinter> y)"
  shows "P \<^bold>\<longrightarrow>\<^sub>H Q \<le> cl P \<^bold>\<longrightarrow>\<^sub>H cl Q"
proof -
  from cl have "(P \<^bold>\<longrightarrow>\<^sub>H Q) \<sqinter> cl P \<le> cl (P \<^bold>\<longrightarrow>\<^sub>H Q) \<sqinter> cl P"
    by (metis (mono_tags) closure_axioms_def inf_mono order.refl)
  also have "\<dots> \<le> cl ((P \<^bold>\<longrightarrow>\<^sub>H Q) \<sqinter> P)"
    by (simp add: cl_inf)
  also from cl have "\<dots> \<le> cl Q"
    by (metis (mono_tags) closure_axioms_def order.refl heyting.mono heyting.uncurry)
  finally show ?thesis
    by (simp add: heyting)
qed

setup \<open>Sign.parent_path\<close>


paragraph\<open> Pseudocomplements \<close>

definition pseudocomplement :: "'a::heyting_algebra \<Rightarrow> 'a" (\<open>\<^bold>\<not>\<^sub>H _\<close> [75] 75) where
  "\<^bold>\<not>\<^sub>Hx = x \<^bold>\<longrightarrow>\<^sub>H \<bottom>"

lemma pseudocomplementI:
  shows "x \<le> \<^bold>\<not>\<^sub>Hy \<longleftrightarrow> x \<sqinter> y \<le> \<bottom>"
by (simp add: pseudocomplement_def heyting)

setup \<open>Sign.mandatory_path "pseudocomplement"\<close>

lemma monotone:
  shows "antimono pseudocomplement"
by (simp add: antimonoI heyting.mono pseudocomplement_def)

lemmas strengthen[strg] = st_monotone[OF pseudocomplement.monotone]
lemmas mono = monotoneD[OF pseudocomplement.monotone]
lemmas mono2mono[cont_intro, partial_function_mono]
   = monotone2monotone[OF pseudocomplement.monotone, simplified, of orda P for orda P]

lemma eq_boolean_negation: \<comment>\<open> the negations coincide in \<^class>\<open>boolean_algebra\<close>s  \<close>
  fixes x :: "_::{boolean_algebra,heyting_algebra}"
  shows "\<^bold>\<not>\<^sub>Hx = -x"
by (simp add: pseudocomplement_def heyting.eq_boolean_implication)

lemma heyting:
  shows "x \<^bold>\<longrightarrow>\<^sub>H \<^bold>\<not>\<^sub>Hx = \<^bold>\<not>\<^sub>Hx"
by (simp add: pseudocomplement_def order_eq_iff heyting heyting.detachment)

lemma Inf:
  shows "x \<sqinter> \<^bold>\<not>\<^sub>Hx = \<bottom>"
    and "\<^bold>\<not>\<^sub>Hx \<sqinter> x = \<bottom>"
by (simp_all add: pseudocomplement_def heyting.detachment)

lemma double_le:
  shows "x \<le> \<^bold>\<not>\<^sub>H\<^bold>\<not>\<^sub>Hx"
by (simp add: pseudocomplement_def heyting.detachment heyting.curry)

interpretation double: closure_complete_lattice_class "pseudocomplement \<circ> pseudocomplement"
by standard (simp; meson order.trans pseudocomplement.double_le pseudocomplement.mono)

lemma triple:
  shows "\<^bold>\<not>\<^sub>H\<^bold>\<not>\<^sub>H\<^bold>\<not>\<^sub>Hx = \<^bold>\<not>\<^sub>Hx"
by (simp add: order_eq_iff pseudocomplement.double_le pseudocomplement.mono)

lemma contrapos_le:
  shows "x \<^bold>\<longrightarrow>\<^sub>H y \<le> \<^bold>\<not>\<^sub>Hy \<^bold>\<longrightarrow>\<^sub>H \<^bold>\<not>\<^sub>Hx"
by (simp add: heyting.curry heyting.trans pseudocomplement_def)

lemma sup_inf: \<comment>\<open> half of de Morgan \<close>
  shows "\<^bold>\<not>\<^sub>H(x \<squnion> y) = \<^bold>\<not>\<^sub>Hx \<sqinter> \<^bold>\<not>\<^sub>Hy"
by (simp add: pseudocomplement_def heyting.supL)

lemma inf_sup_weak: \<comment>\<open> the weakened other half of de Morgan \<close>
  shows "\<^bold>\<not>\<^sub>H(x \<sqinter> y) = \<^bold>\<not>\<^sub>H\<^bold>\<not>\<^sub>H(\<^bold>\<not>\<^sub>Hx \<squnion> \<^bold>\<not>\<^sub>Hy)"
by (metis (no_types, opaque_lifting) pseudocomplement_def heyting.curry_conv heyting.supL inf_commute pseudocomplement.triple)                   

lemma fix_triv:
  assumes "x = \<^bold>\<not>\<^sub>Hx"
  shows "x = y"
using assms by (metis antisym bot.extremum inf.idem inf_le2 pseudocomplementI)

lemma double_top:
  shows "\<^bold>\<not>\<^sub>H\<^bold>\<not>\<^sub>H(x \<squnion> \<^bold>\<not>\<^sub>Hx) = \<top>"
by (metis pseudocomplement_def heyting.refl pseudocomplement.Inf(1) pseudocomplement.sup_inf)

lemma Inf_inf:
  fixes P :: "_ \<Rightarrow> (_::heyting_algebra)"
  shows "(\<Sqinter>x. P x) \<sqinter> \<^bold>\<not>\<^sub>HP x = \<bottom>"
by (simp add: pseudocomplement_def Inf_lower heyting.discharge(1))

lemma SUP_le: \<comment>\<open> half of de Morgan \<close>
  fixes P :: "_ \<Rightarrow> (_::heyting_algebra)"
  shows "(\<Squnion>x\<in>X. P x) \<le> \<^bold>\<not>\<^sub>H(\<Sqinter>x\<in>X. \<^bold>\<not>\<^sub>HP x)"
by (rule SUP_least) (meson INF_lower order.trans pseudocomplement.double_le pseudocomplement.mono)

lemma SUP_INF_le:
  fixes P :: "_ \<Rightarrow> (_::heyting_algebra)"
  shows "(\<Squnion>x\<in>X. \<^bold>\<not>\<^sub>HP x) \<le> \<^bold>\<not>\<^sub>H(\<Sqinter>x\<in>X. P x)"
by (simp add: INF_lower SUPE pseudocomplement.mono)

lemma SUP:
  fixes P :: "_ \<Rightarrow> (_::heyting_algebra)"
  shows "\<^bold>\<not>\<^sub>H(\<Squnion>x\<in>X. P x) = (\<Sqinter>x\<in>X. \<^bold>\<not>\<^sub>HP x)"
by (simp add: order.eq_iff SUP_upper le_INF_iff pseudocomplement.mono)
   (metis inf_commute pseudocomplement.SUP_le pseudocomplementI)

setup \<open>Sign.parent_path\<close>


subsection\<open> Downwards closure of preorders (downsets) \label{sec:closures-downwards} \<close>

text\<open>

A \<^emph>\<open>downset\<close> (also \<^emph>\<open>lower set\<close> and \<^emph>\<open>order ideal\<close>) is a subset of a preorder that is closed under
the order relation. (An \<^emph>\<open>ideal\<close> is a downset that is \<^const>\<open>directed\<close>.) Some results require
antisymmetry (a partial order).

References:
 \<^item> \<^citet>\<open>"Vickers:1989"\<close>, early chapters.
 \<^item> \<^url>\<open>https://en.wikipedia.org/wiki/Alexandrov_topology\<close>
 \<^item> \<^citet>\<open>\<open>\S3\<close> in "AbadiPlotkin:1991"\<close>

\<close>

setup \<open>Sign.mandatory_path "downwards"\<close>

definition cl :: "'a::preorder set \<Rightarrow> 'a set" where
  "cl P = {x |x y. y \<in> P \<and> x \<le> y}"

setup \<open>Sign.parent_path\<close>

interpretation downwards: closure_powerset_distributive downwards.cl \<comment>\<open> On preorders \<close>
proof standard
  show "(P \<subseteq> downwards.cl Q) \<longleftrightarrow> (downwards.cl P \<subseteq> downwards.cl Q)" for P Q :: "'a set"
    unfolding downwards.cl_def by (auto dest: order_trans)
  show "downwards.cl (\<Union>X) \<subseteq> \<Union> (downwards.cl ` X) \<union> downwards.cl {}" for X :: "'a set set"
    unfolding downwards.cl_def by auto
qed

interpretation downwards: closure_powerset_distributive_anti_exchange "(downwards.cl::_::order set \<Rightarrow> _)"
  \<comment>\<open> On partial orders; see \<^citet>\<open>"PfaltzSlapal:2013"\<close> \<close>
by standard (unfold downwards.cl_def; blast intro: anti_exchangeI antisym)

setup \<open>Sign.mandatory_path "downwards"\<close>

lemma cl_empty:
  shows "downwards.cl {} = {}"
unfolding downwards.cl_def by simp

lemma closed_empty[iff]:
  shows "{} \<in> downwards.closed"
using downwards.cl_def by fastforce

lemma clI[intro]:
  assumes "y \<in> P"
  assumes "x \<le> y"
  shows "x \<in> downwards.cl P"
unfolding closure.closed_def downwards.cl_def using assms by blast

lemma clE:
  assumes "x \<in> downwards.cl P"
  obtains y where "y \<in> P" and "x \<le> y"
using assms unfolding downwards.cl_def by fast

lemma closed_in:
  assumes "x \<in> P"
  assumes "y \<le> x"
  assumes "P \<in> downwards.closed"
  shows "y \<in> P"
using assms unfolding downwards.cl_def downwards.closed_def by blast

lemma order_embedding: \<comment>\<open> On preorders; see \<^citet>\<open>\<open>\S1.35\<close> in "DaveyPriestley:2002"\<close> \<close>
  fixes x :: "_::preorder"
  shows "downwards.cl {x} \<subseteq> downwards.cl {y} \<longleftrightarrow> x \<le> y"
using downwards.cl by (blast elim: downwards.clE)

text\<open>

The lattice of downsets of a set \<open>X\<close> is always a \<^class>\<open>heyting_algebra\<close>.

References:
 \<^item> \<^citet>\<open>\<open>\S7.5\<close> in "Ono:2019"\<close>; uses upsets, points to \<^citet>\<open>"Stone:1938"\<close> as the origin
 \<^item> \<^citet>\<open>\<open>\S2.2\<close> in "Esakia:2019"\<close>
 \<^item> \<^url>\<open>https://en.wikipedia.org/wiki/Intuitionistic_logic#Heyting_algebra_semantics\<close>

\<close>

definition imp :: "'a::preorder set \<Rightarrow> 'a set \<Rightarrow> 'a set" where
  "imp P Q = {\<sigma>. \<forall>\<sigma>'\<le>\<sigma>. \<sigma>' \<in> P \<longrightarrow> \<sigma>' \<in> Q}"

lemma imp_refl:
  shows "downwards.imp P P = UNIV"
by (simp add: downwards.imp_def)

lemma imp_contained:
  assumes "P \<subseteq> Q"
  shows "downwards.imp P Q = UNIV"
unfolding downwards.imp_def using assms by fast

lemma heyting_imp:
  assumes "P \<in> downwards.closed"
  shows "P \<subseteq> downwards.imp Q R \<longleftrightarrow> P \<inter> Q \<subseteq> R"
using assms unfolding downwards.imp_def downwards.closed_def by blast

lemma imp_mp':
  assumes "\<sigma> \<in> downwards.imp P Q"
  assumes "\<sigma> \<in> P"
  shows "\<sigma> \<in> Q"
using assms by (simp add: downwards.imp_def)

lemma imp_mp:
  shows "P \<inter> downwards.imp P Q \<subseteq> Q"
    and "downwards.imp P Q \<inter> P \<subseteq> Q"
by (meson IntD1 IntD2 downwards.imp_mp' subsetI)+

lemma imp_contains:
  assumes "X \<subseteq> Q"
  assumes "X \<in> downwards.closed"
  shows "X \<subseteq> downwards.imp P Q"
using assms by (auto simp: downwards.imp_def elim: downwards.closed_in)

lemma imp_downwards:
  assumes "y \<in> downwards.imp P Q"
  assumes "x \<le> y"
  shows "x \<in> downwards.imp P Q"
using assms order_trans by (force simp: downwards.imp_def)

lemma closed_imp:
  shows "downwards.imp P Q \<in> downwards.closed"
by (meson downwards.clE downwards.closedI downwards.imp_downwards)

text\<open>

The set \<open>downwards.imp P Q\<close> is the greatest downset contained in the Boolean implication
\<open>P \<^bold>\<longrightarrow>\<^sub>B Q\<close>, i.e., \<open>downwards.imp\<close> is the \<^emph>\<open>kernel\<close> of \<open>(\<^bold>\<longrightarrow>\<^sub>B)\<close> \<^citep>\<open>"Zwiers:1989"\<close>.
Note that ``kernel'' is a choice or interior function.

\<close>

lemma imp_boolean_implication_subseteq:
  shows "downwards.imp P Q \<subseteq> P \<^bold>\<longrightarrow>\<^sub>B Q"
unfolding downwards.imp_def boolean_implication.set_alt_def by blast

lemma downwards_closed_imp_greatest:
  assumes "R \<subseteq> P \<^bold>\<longrightarrow>\<^sub>B Q"
  assumes "R \<in> downwards.closed"
  shows "R \<subseteq> downwards.imp P Q"
using assms unfolding boolean_implication.set_alt_def downwards.imp_def downwards.closed_def by blast

definition kernel :: "'a::order set \<Rightarrow> 'a set" where
  "kernel X = \<Squnion>{Q \<in> downwards.closed. Q \<subseteq> X}"

lemma kernel_def2:
  shows "downwards.kernel X = {\<sigma>. \<forall>\<sigma>'\<le>\<sigma>. \<sigma>' \<in> X}" (is "?lhs = ?rhs")
proof(rule antisym)
  show "?lhs \<subseteq> ?rhs"
    unfolding downwards.kernel_def using downwards.closed_conv by blast
next
  have "x \<in> ?lhs" if "x \<in> ?rhs" for x
    unfolding downwards.kernel_def using that
    by (auto elim: downwards.clE intro: exI[where x="downwards.cl {x}"])
  then show "?rhs \<subseteq> ?lhs" by blast
qed

lemma kernel_contractive:
  shows "downwards.kernel X \<subseteq> X"
unfolding downwards.kernel_def by blast

lemma kernel_idempotent:
  shows "downwards.kernel (downwards.kernel X) = downwards.kernel X"
unfolding downwards.kernel_def by blast

lemma kernel_monotone:
  shows "mono downwards.kernel"
unfolding downwards.kernel_def by (rule monotoneI) blast

lemma closed_kernel_conv:
  shows "X \<in> downwards.closed \<longleftrightarrow> downwards.kernel X = X"
unfolding downwards.kernel_def2 downwards.closed_def by (blast elim: downwards.clE)

lemma closed_kernel:
  shows "downwards.kernel X \<in> downwards.closed"
by (simp add: downwards.closed_kernel_conv downwards.kernel_idempotent)

lemma kernel_cl:
  shows "downwards.kernel (downwards.cl X) = downwards.cl X"
using downwards.closed_kernel_conv by blast

lemma cl_kernel:
  shows "downwards.cl (downwards.kernel X) = downwards.kernel X"
by (simp flip: downwards.closed_conv add: downwards.closed_kernel)

lemma kernel_boolean_implication:
  fixes P :: "_::order"
  shows "downwards.kernel (P \<^bold>\<longrightarrow>\<^sub>B Q) = downwards.imp P Q"
unfolding downwards.kernel_def2 boolean_implication.set_alt_def downwards.imp_def by blast

setup \<open>Sign.parent_path\<close>
(*<*)


end
(*>*)

Messung V0.5 in Prozent
C=66 H=87 G=76

¤ Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.0.53Bemerkung:  ¤

*Bot Zugriff






Wurzel

Suchen



NIST Cobol Testsuite



Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

      Eigene Quellcodes
      Fremde Quellcodes
     Quellcodebibliothek
      Suchen

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge