lemmafacet2_subset:"\<whave"<>.v\<in>x-y\<Longrightarrow>v=w"byjava.lang.StringIndexOutOfBoundsException: Index 64 out of bounds for length 64 unfoldingfacetrel_defjava.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
lemmathisa1a2 assumes"inj_onfx""za2:a2<D""b=fa2" obtainsywhere">x""f`y=z" proof fromassms(2)obtainvwherevadjacent_to_adjacent_int_subsetbyjava.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47 using[of uandy"u<>the_inv_intoxfv"dyequiv{v\<in>x.fv\<in>z}" moreoverwithsms)havex=uy" he_inv_into_f_eqthe_inv_into_intosms) byfastforce ultimatelyshow"ubcomplexY\<equiv>Y<subseteqX\<and>SimplicialComplexY" usingvf_the_inv_into_fsms]yforcecetrofacetrelIrelI fromyassms(2)show"f`y=zacetrel_subset qed
lemmaadj_antivertex: assumes"x\<sim>y"x\<noteq" shows"\<exists>!v<>java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34 proof(ruleex_ex1I) lemma_ce: usingadjacent_int_decompbyfast thusexists>v.v\<in>x-y"byauto ve<>.v\<in>x-y\<Longrightarrow>v=w"byfast Andvv'.v\<in>x-y\<Longrightarrow>v'\<in>x-y\Longrightarrow>vv"auto qed
lemmat_card<y\<Longrightarrow>cardx=cardy" unfoldingjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
lemmajacent_to_adjacent_int_subset assumeschain_append_reduce1 `inter>f`D\<subseteq>f`(C\<inter>D)" proof fromassms(1,3)obtainerevv<notin>DCnsert\<nter>)" jacent_int_decomp fromassms(2,3)obtainwwherew:"w\notin`D""f`C=insertw(f`C\<inter>f`D)" usingadjacent_int_decomp[of"f`C"Dyjava.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53 fromwhavewusingpis_arg_min_linorderI withvassms(1,2)havefv_w:"showsx" fixbassume"b) fromthisobtaina1a2 wherea1:"a1\<in>C"from)asjava.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50 anda2:" byfast rom1a22vea1<otinD\<Longrightarrow>fa2=w"usingfv_wbyauto witha2(1)w'have"a1\<intforce wbinf`(C\<inter>D)"byfast qed
lemmamap_is_simplicial_morph:"SimplicialComplexsubseteqposet_simplex_mapPb" proof show"\<forall>x\<in>f\<turnstile>X.finitex"usingfinite_simplicesbyfast show"\<And>yx<f\<turnstile>X\<Longrightarrow>y\<subseteq>x\<Longrightarrow>y>f\<turnstile>X"usingim_facesbyfast qed
text
Chains of maximal simplices
complexes. But theremplexeslchain
of maximal by if nolex reources
chains prechains, andocribe
weaker notion of properismalex
itessentiallynct
@{term ›
context SimplicialComplexjava.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14 begin
function min_maxsimpchain :: "'a set list ==> bool" where "min_maxsimpchain [] = True"
| "min_maxsimpchain [x] = maxsimp x"
| "min_maxsimpchain (x#xs@[y]) = (x≠y ∧ is_arg_min length (λzs. maxsimpchain (x#zs@[y])) xs)" by (auto, rule list_cases_Cons_snoc) terminationby (relation "measure length") auto
lemma maxsimpchain_snocI: "[ maxsimpchain (xs@[x]); maxsimp y; x∼y ]==> maxsimpchain (xs@[x,y])" using maxsimpchain_def binrelchain_snoc maxsimpchain_def by auto
lemma maxsimpchainD_maxsimp: "maxsimpchain xs ==> x ∈ set xs ==> maxsimp x" using maxsimpchain_def by fast
lemma maxsimpchainD_adj: "maxsimpchain xs ==> adjacentchain xs" using maxsimpchain_def by fast
lemma maxsimpchain_CConsI: "[ maxsimp w; maxsimpchain (x#xs); w∼x ]==> maxsimpchain (w#x#xs)" using maxsimpchain_def by auto
lemma maxsimpchain_Cons_reduce: "maxsimpchain (x#xs) ==> maxsimpchain xs" using adjacentchain_Cons_reduce maxsimpchain_def by fastforce
lemma maxsimpchain_append_reduce1: "maxsimpchain (xs@ys) ==> maxsimpchain xs" using binrelchain_append_reduce1 maxsimpchain_def by auto
lemma maxsimpchain_append_reduce2: "maxsimpchain (xs@ys) ==> maxsimpchain ys" using binrelchain_append_reduce2 maxsimpchain_def by auto
lemma maxsimpchain_remdup_adj: "maxsimpchain (xs@[x,x]@ys) ==> maxsimpchain (xs@[x]@ys)" using maxsimpchain_def binrelchain_remdup_adj by auto
lemma maxsimpchain_rev: "maxsimpchain xs ==> maxsimpchain (rev xs)" using maxsimpchainD_maxsimp adjacent_sym
binrelchain_sym_rev[of adjacent] unfolding maxsimpchain_def by fastforce
lemma maxsimpchain_overlap_join: "maxsimpchain (xs@[w]) ==> maxsimpchain (w#ys) ==> maxsimpchain (xs@w#ys)" using binrelchain_overlap_join maxsimpchain_def by auto
lemma pmaxsimpchain: "pmaxsimpchain xs ==> maxsimpchain xs" using maxsimpchain_def pmaxsimpchain_def by fast
lemma pmaxsimpchainI_maxsimpchain: "maxsimpchain xs ==> distinct xs ==> pmaxsimpchain xs" using maxsimpchain_def pmaxsimpchain_def by fast
lemma pmaxsimpchain_CConsI: "[ maxsimp w; pmaxsimpchain (x#xs); w∼x; w ∉ set (x#xs) ]==> pmaxsimpchain (w#x#xs)" using pmaxsimpchain_def by auto
lemma pmaxsimpchainD_distinct: "pmaxsimpchain xs ==> distinct xs" using pmaxsimpchain_def by fast
lemma pmaxsimpchain_Cons_reduce: "pmaxsimpchain (x#xs) ==> pmaxsimpchain xs" using maxsimpchain_Cons_reduce pmaxsimpchain pmaxsimpchainD_distinct by (fastforce intro: pmaxsimpchainI_maxsimpchain)
lemma pmaxsimpchain_append_reduce1: "pmaxsimpchain (xs@ys) ==> pmaxsimpchain xs" using maxsimpchain_append_reduce1 pmaxsimpchain pmaxsimpchainD_distinct by (fastforce intro: pmaxsimpchainI_maxsimpchain)
lemma maxsimpchain_obtain_pmaxsimpchain: assumes"x≠y""maxsimpchain (x#xs@[y])" shows"∃ys. set ys ⊆ set xs ∧ length ys ≤ length xs ∧ pmaxsimpchain (x#ys@[y])" proof- obtain ys where ys: "set ys ⊆ set xs""length ys ≤ length xs""padjacentchain (x#ys@[y])" using maxsimpchainD_adj[OF assms(2)]
adjacentchain_obtain_proper[OF assms(1)] by auto from ys(1) assms(2) have"∀a∈set (x#ys@[y]). maxsimp a" using maxsimpchainD_maxsimp by auto with ys show ?thesis unfolding pmaxsimpchain_def by auto qed
lemma min_maxsimpchainD_maxsimpchain: assumes"min_maxsimpchain xs" shows"maxsimpchain xs" proof (cases xs rule: list_cases_Cons_snoc) case Nil thus ?thesis using maxsimpchain_def by simp next case Single with assms show ?thesis using maxsimpchain_def by simp next case Cons_snoc with assms show ?thesis using is_arg_minD1 by fastforce qed
lemma min_maxsimpchainD_min_betw: "min_maxsimpchain (x#xs@[y]) ==> maxsimpchain (x#ys@[y]) ==> length ys ≥ length xs" using is_arg_minD2 by fastforce
lemma min_maxsimpchainI_betw_compare: assumes"x≠y""maxsimpchain (x#xs@[y])" "min_maxsimpchain (x#ys@[y])""length xs = length ys" shows"min_maxsimpchain (x#xs@[y])" using assms min_maxsimpchainD_min_betw min_maxsimpchainI_betw by auto
lemma min_maxsimpchain_pmaxsimpchain: assumes"min_maxsimpchain xs" shows"pmaxsimpchain xs" proof (
rule pmaxsimpchainI_maxsimpchain, rule min_maxsimpchainD_maxsimpchain,
rule assms, cases xs rule: list_cases_Cons_snoc
) case (Cons_snoc x ys y) have"¬ distinct (x#ys@[y]) ==> False" proof (cases "x∈set ys""y∈set ys" rule: two_cases) case both from both(1) obtain as bs where"ys = as@x#bs" using in_set_conv_decomp[of x ys] by fast with assms Cons_snoc show False using min_maxsimpchainD_maxsimpchain[OF assms]
maxsimpchain_append_reduce2[of "x#as"]
min_maxsimpchainD_min_betw[of x ys y] by fastforce next case one from one(1) obtain as bs where"ys = as@x#bs" using in_set_conv_decomp[of x ys] by fast with assms Cons_snoc show False using min_maxsimpchainD_maxsimpchain[OF assms]
maxsimpchain_append_reduce2[of "x#as"]
min_maxsimpchainD_min_betw[of x ys y] by fastforce next case other from other(2) obtain as bs where"ys = as@y#bs" using in_set_conv_decomp[of y ys] by fast with assms Cons_snoc show False using min_maxsimpchainD_maxsimpchain[OF assms]
maxsimpchain_append_reduce1[of "x#as@[y]"]
min_maxsimpchainD_min_betw[of x ys y] by fastforce next case neither moreoverassume"¬ distinct (x # ys @ [y])" ultimatelyobtain as a bs cs where"ys = as@[a]@bs@[a]@cs" using assms Cons_snoc not_distinct_decomp[of ys] by auto with assms Cons_snoc show False using min_maxsimpchainD_maxsimpchain[OF assms]
maxsimpchain_append_reduce1[of "x#as@[a]"]
maxsimpchain_append_reduce2[of "x#as@[a]@bs""a#cs@[y]"]
maxsimpchain_overlap_join[of "x#as" a "cs@[y]"]
min_maxsimpchainD_min_betw[of x ys y "as@a#cs"] by auto qed with Cons_snoc show"distinct xs"by fast qed auto
lemma min_maxsimpchain_rev: assumes"min_maxsimpchain xs" shows"min_maxsimpchain (rev xs)" proof (cases xs rule: list_cases_Cons_snoc) case Single with assms show ?thesis using min_maxsimpchainD_maxsimpchain maxsimpchainD_maxsimp by simp next case (Cons_snoc x ys y) moreoverhave"min_maxsimpchain (y # rev ys @ [x])" proof (rule min_maxsimpchainI_betw) from Cons_snoc assms show"y≠x" using min_maxsimpchain_pmaxsimpchain pmaxsimpchainD_distinct by auto from Cons_snoc show"maxsimpchain (y # rev ys @ [x])" using min_maxsimpchainD_maxsimpchain[OF assms] maxsimpchain_rev by fastforce from Cons_snoc assms show"∧zs. maxsimpchain (y#zs@[x]) ==> length (rev ys) ≤ length zs" using maxsimpchain_rev min_maxsimpchainD_min_betw[of x ys y] by fastforce qed ultimatelyshow ?thesis by simp qed simp
lemma min_maxsimpchain_adj: "[ maxsimp x; maxsimp y; x∼y; x≠y ]==> min_maxsimpchain [x,y]" using maxsimpchain_def min_maxsimpchainI_betw[of x y "[]"] by simp
lemma min_maxsimpchain_betw_CCons_reduce: assumes"min_maxsimpchain (w#x#ys@[z])" shows"min_maxsimpchain (x#ys@[z])" proof (rule min_maxsimpchainI_betw) from assms show"x≠z" using min_maxsimpchain_pmaxsimpchain pmaxsimpchainD_distinct by fastforce show"maxsimpchain (x#ys@[z])" using min_maxsimpchainD_maxsimpchain[OF assms]
maxsimpchain_Cons_reduce by fast next fix zs assume"maxsimpchain (x#zs@[z])" hence"maxsimpchain (w#x#zs@[z])" using min_maxsimpchainD_maxsimpchain[OF assms] maxsimpchain_def by fastforce with assms show"length ys ≤ length zs" using min_maxsimpchainD_min_betw[of w "x#ys" z "x#zs"] by simp qed
lemma not_min_maxsimpchainI_betw: "[ maxsimpchain (x#ys@[y]); length ys < length xs ]==> ¬ min_maxsimpchain (x#xs@[y])" using min_maxsimpchainD_min_betw not_less by blast
lemma maxsimpchain_in_subcomplex: "[ Subcomplex Y; set ys ⊆ Y; maxsimpchain ys ]==> SimplicialComplex.maxsimpchain Y ys" using maxsimpchain_def max_in_subcomplex
SimplicialComplex.maxsimpchain_def by force
lemmapmaxsimpchain_map: "pmaxsimpchainxs\<Longrightarrow>SimplicialComplex.pmaxsimpchain(f\<turnstile>X)(f\<Turnstile>xs)" proof(inductxsrule:list_induct_CCons) caseNilshow?case usingmap_is_simplicial_morphSimplicialComplex.pmaxsimpchain_def byfastforce next case(Singlex)thus?case usingmap_is_simplicial_morphpmaxsimpchainD_maxsimpmaxsimp_map SimplicialComplex.pmaxsimpchain_def byfastforce next case(CConsxyxs) have"SimplicialComplex.pmaxsimpchain(f\<turnstile>X)(f`x#f`y#f\<Turnstile>xs)" proof( ruleSimplicialComplex.pmaxsimpchain_CConsI, rulemap_is_simplicial_morph ) fromCCons(2)show"SimplicialComplex.maxsimp(f\<turnstile>X)(f`x)" usingpmaxsimpchainD_maxsimpmaxsimp_mapbysimp fromCConsshow"SimplicialComplex.pmaxsimpchain(f\<turnstile>X)(f`y#f\<Turnstile>xs)" usingpmaxsimpchain_Cons_reducebysimp fromCCons(2)show"f`x\<sim>f`y" usingpmaxsimpchain_defiso_adj_mapbysimp frominjCCons(2)have"distinct(f\<Turnstile>(x#y#xs))" usingmaxsimpD_simplexinj_on_distinct_setlistmapim unfoldingpmaxsimpchain_def byblast thus"f`x\<notin>set(f`y#f\<Turnstile>xs)"bysimp qed thus?casebysimp qed
end (* context SimplicialComplexIsomorphism *)
subsection‹The complex associated to a poset›
text‹
A simplicial complex is naturally a poset under the subset relation. The following develops the
reverse direction: constructing a simplicial complex from a suitable poset. ›
context ordering begin
definition PosetComplex :: "'a set ==> 'a set set" where"PosetComplex P ≡ (∪x∈P. { {y. pseudominimal_in (P.\<le>x) y} })"
lemma poset_is_SimplicialComplex: assumes"∀x∈P. simplex_like (P.\<le>x)" shows"SimplicialComplex (PosetComplex P)" proof (rule SimplicialComplex.intro, rule ballI) fix a assume"a ∈ PosetComplex P" from this obtain x where"x∈P""a = {y. pseudominimal_in (P.\<le>x) y}" unfolding PosetComplex_def by fast with assms show"finite a" using pseudominimal_inD1 simplex_likeD_finite finite_subset[of a "P.\<le>x"] by fast next fix a b assume ab: "a ∈ PosetComplex P""b⊆a" from ab(1) obtain x where x: "x∈P""a = {y. pseudominimal_in (P.\<le>x) y}" unfolding PosetComplex_def by fast from assms x(1) obtain f and A::"nat set" where fA: "OrderingSetIso less_eq less (⊆) (⊂) (P.\<le>x) f" "f`(P.\<le>x) = Pow A" using simplex_likeD_iso[of "P.\<le>x"] by auto
define x' where x': "x' ≡ the_inv_into (P.\<le>x) f (∪(f`b))" from fA x(2) ab(2) x' have x'_P: "x'∈P" using collect_pseudominimals_below_in_poset[of P x f] by simp moreoverfrom x fA ab(2) x' have"b = {y. pseudominimal_in (P.\<le>x') y}" using collect_pseudominimals_below_in_eq[of x P f] by simp ultimatelyshow"b ∈ PosetComplex P"unfolding PosetComplex_def by fast qed
definition poset_simplex_map :: "'a set ==> 'a ==> 'a set" where"poset_simplex_map P x = {y. pseudominimal_in (P.\<le>x) y}"
lemma poset_to_PosetComplex_OrderingSetMap: assumes"∧x. x∈P ==> simplex_like (P.\<le>x)" shows"OrderingSetMap (\<le>) (<) (⊆) (⊂) P (poset_simplex_map P)" proof from assms show"∧a b. [ a∈P; b∈P; a\<le>b ]==> poset_simplex_map P a ⊆ poset_simplex_map P b" using simplex_like_has_bottom pseudominimal_in_below_in unfolding poset_simplex_map_def by fast qed
end(* context ordering *)
text‹
When a poset affords a simplicial complex, there is a natural morphism of posets from the
source poset into the poset of sets in the complex, as above. However, some further assumptions
are necessary to ensure that this morphism is an isomorphism. These conditions are collected in
the following locale. ›
locale ComplexLikePoset = ordering less_eq less for less_eq :: "'a==>'a==>bool" (infix‹\≤›50) and less :: "'a==>'a==>bool" (infix‹<›50)
+ fixes P :: "'a set" assumes below_in_P_simplex_like: "x∈P ==> simplex_like (P.\<le>x)" and P_has_bottom : "has_bottom P" and P_has_glbs : "x∈P ==> y∈P ==>∃b. glbound_in_of P x y b" begin
abbreviation"smap ≡ poset_simplex_map P"
lemma smap_onto_PosetComplex: "smap ` P = PosetComplex P" using poset_simplex_map_def PosetComplex_def by auto
lemma ordsetmap_smap: "[ a∈P; b∈P; a\<le>b ]==> smap a ⊆ smap b" using OrderingSetMap.ordsetmap[
OF poset_to_PosetComplex_OrderingSetMap, OF below_in_P_simplex_like
]
poset_simplex_map_def by simp
lemma inj_on_smap: "inj_on smap P" proof (rule inj_onI) fix x y assume xy: "x∈P""y∈P""smap x = smap y" show"x = y" proof (cases "smap x = {}") case True with xy show ?thesis using poset_simplex_map_def below_in_P_simplex_like P_has_bottom
simplex_like_no_pseudominimal_in_below_in_imp_singleton[of x P]
simplex_like_no_pseudominimal_in_below_in_imp_singleton[of y P]
below_in_singleton_is_bottom[of P x] below_in_singleton_is_bottom[of P y] by auto next case False from this obtain z where"z ∈ smap x"by fast with xy(3) have z1: "z ∈ P.\<le>x""z ∈ P.\<le>y" using pseudominimal_inD1 poset_simplex_map_def by auto hence"lbound_of x y z"by (auto intro: lbound_ofI) with z1(1) obtain b where b: "glbound_in_of P x y b" using xy(1,2) P_has_glbs by fast moreoverhave"b ∈ P.\<le>x""b ∈ P.\<le>y" using glbound_in_ofD_in[OF b] glbound_in_of_less_eq1[OF b]
glbound_in_of_less_eq2[OF b] by auto ultimatelyshow ?thesis using xy below_in_P_simplex_like
pseudominimal_in_below_in_less_eq_glbound[of P x _ y b]
simplex_like_below_in_above_pseudominimal_is_top[of x P]
simplex_like_below_in_above_pseudominimal_is_top[of y P] unfolding poset_simplex_map_def by force qed qed
lemma OrderingSetIso_smap: "OrderingSetIso (\<le>) (<) (⊆) (⊂) P smap" proof (rule OrderingSetMap.isoI) show"OrderingSetMap (\<le>) (<) (⊆) (⊂) P smap" using poset_simplex_map_def below_in_P_simplex_like
poset_to_PosetComplex_OrderingSetMap by simp next fix x y assume xy: "x∈P""y∈P""smap x ⊆ smap y" from xy(2) have"simplex_like (P.\<le>y)"using below_in_P_simplex_like by fast from this obtain g and A::"nat set" where"OrderingSetIso (\<le>) (<) (⊆) (⊂) (P.\<le>y) g" "g`(P.\<le>y) = Pow A" using simplex_likeD_iso[of "P.\<le>y"] by auto with xy show"x\<le>y" using poset_simplex_map_def collect_pseudominimals_below_in_eq[of y P g]
collect_pseudominimals_below_in_poset[of P y g]
inj_onD[OF inj_on_smap, of "the_inv_into (P.\<le>y) g (∪(g ` smap x))" x]
collect_pseudominimals_below_in_less_eq_top[of P y g A "smap x"] by simp qed (rule inj_on_smap)
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.