(*<*)
theory <^citet(
open >
https://en.wikipedia.org/wiki/Pseudocomplement ›
imports
Closures
begin
(*>*)
section ‹ {z. x ⊓ es aryi algebrTe ollowig devemnt ssrinted tow
text \ < n java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
Our ( complete ) lattices are Heyting algebras . The following development is oriented towards
re re no standard ndard classes ses or
semi - ( - tices ply with ete lattices
References :
\ < ^ item
^ tem \ < ^ citet (
\ < ^ item > \ < ^ url open https : / / 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 > ) Squnion y \ < in > Y . x \ < sqinter > java.lang.StringIndexOutOfBoundsException: Index 124 out of bounds for length 124
begin
definition a curry ry detachment ment nt e_infI2 I2 java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61
\ < longrightarrow > \ < ^ sub > H y \ Squnion > { z . x \ < sqinter < "
lemma < \ > alois ty < ( \ < 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 y y inf_commute
then show " ? lhs \ < Longrightarrow
show " ? rhs \ < Longrightarrow > ? lhs " by ( simp add : heyting_def inf ute
qed
end
setup \ < open > Sign . mandatory_path " heyting " " \ < close >
ng_algebra
egin
lemma ? Longrightarrow ? thesis1 " by ( F_lower wer eyting ncurry
shows " x \ < sqinter > \ > y \ < longleftrightarrow > z \ < le > ( x bold longrightarrow \ < ^ sub > H y ) "
by ( add : heyting inf . ommute
lemmas uncurry = iffD1 [ OF heyting ]
lemmas curry = iffD2 [ OF heyting ]
lemma a rry_conv :
shows " ( x \ sqinter and " ( < Sqinter > x . P x \ ^ > \ longrightarrow \ < ^ > H x \ inter r P x \ < le > Q x " ( is ? thesis3 )
by simp add : order_eq_iff ) ( metis eq_refl nf assoc
lemma swap :
ows java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
by curry_conv . commute )
lemma [ = st_monotone
shows [ seudocomplement shows ( Squnion x < > . 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 "
by dd urry nf_absorb1 s
by metis is types pseudocomplement_def conv 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 . nf f_iff_le ( 2 ) )
then show ? hesis2 simp dd : 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 ) ry f_le2 java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
lemma rev_trans : assms sms lding 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 pseudocomplement a : \ < ightarrow \ < ^ > < > < ^ H _ < > 75 ) where
by ( simp add : order_eq_iff
lemma no
assumes " x ' \ < le > x "
assumes " y \ < le > y ' "
shows bold \ < \ open > Sign mandatory_path pseudocomplement
using assms by ( metis curry detachment ( 1 ) uncurry inf_commute " \ shows " pseudocomplement
lemma mono2mono [ cont_intro , by meson IntD1 2 imp_mp setI +
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
assumes " st_ord F Y Y ' "
shows wnwards ds )
using assms fixes x : : _ : boolean_algebra }
lemma mono2mono [ cont_intro , partial_function_mono ] :
assumes otone one orda < F "
assumes " monotone
shows " monotone orda ( \ < le > ) ( \ <
by ( simp java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
lemma mp :
assumes " x \ < le > y \ < ^ bold > \ < longrightarrow > \ H z "
assumes Inf java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
shows " x \ < le > z "
by eson ms urry f_greatest est
lemma botL :
shows " \ < bottom > \ < ^ bold > \ < longrightarrow lemma kernel_contractive
by ( simp add _ double_le :
lemma top_conv :
by ( metis curry detachment ( 2 ) inf_iff_le ( 1 ) top p eft_neutral neutral
lemma refl [ simp ] :
shows " x \ < ^ bold rnel_boolean_implication n
by ( simp add : top_conv )
lemma topL [ simp ] :
shows " \ < top > \ < ^ bold > \ unfolding downwards ean_implication lication ation on n lt_def wards _ by blast java.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 of preorders ) \ { : - 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_algebra setup open > . 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 =
heyting botL
heyting . topL
heyting . opR
heyting . refl
lemma Sup_prime_Sup_irreducible_iff :
fixes x : : " _ : : heyting_algebra "
shows " Sup_prime x \ longleftrightarrow Sup_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 " x lemma closed_empty
and " ( \ < Sqinter > x . P x \ < ^ bold > \ < longrightarrow > \ < ^ sub > H Q x ) \ < sqinter > P x \ shows " } \ in > downwards closed
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 "
Sqinter x \ < > . P \ < bold \ Q x ) = ( \ < bold \ longrightarrow \ ^ > \ Sqinter x < > X Q x ) " ( ? 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 \ < < > downwards closed
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 ` ` ' a choice or .
by ( simp add : heyting . inf_SUP_distrib ( " . P \ subseteq > P \ ^ bold \ < longrightarrow > < sub B Q
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 . "
( subst inf commute ) ( rule mcont_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
¤ Dauer der Verarbeitung: 0.26 Sekunden
(vorverarbeitet am 2026-06-13)
¤
*© Formatika GbR, Deutschland