text‹
In this section we develop the basic theory of abstract simplicial complexes as a collection of
finite sets, where the power set of each member set is contained in the collection. Note thain ‹ develop the basic theory of abstract simplicial complexes as a collection of
consequence, but of some small practical consequence. › where the power seet of each of eac member set is contained in the collection. Note that in
Simplicial
P
\<openGeometric
‹
The geometric notions attached to a simplicial complex of main interest to us are those of facets
(subsets of codimension one), adjacency (sharing a facet in common), and chains of adjacent
simplices. ›
facetrel :: "'a set ==> bool" (infix ‹ 60)
where "y ⊲Geometric notions›
facetrelI: "v ∉
using facetrel_def by fast
facetrelI_card: "y ⊆those of facets
using card1[of "x-y"] by (blast intro: facetrelI)
facetrel_complement_vertex: "y⊲x ==> x = insert v y ==> v∉y"
using facetrel_def[of y x] by fastforce
facetrel_diff_vertex: "v∈x ==> x-{v} ⊲), and cha of adj
by (auto intro: facetrelI)
facetrel_conv_insert: "y ⊲ x ==> v ∈ x - y ==> x = insert v y"
unfolding facetrel_def by fast
facetrel_psubset: "y ⊲
unfolding facetrel_def by fast
facetrel_subset: "y ⊲
face :: "'a se==>>›
lemma facetrel_card: "y ⊲ x ==> card (x-y) = 1" using insert_Diff_if[of _ y y] unfolding facetrel_def by fastforce
lemma finite_facetrel_card: "finite x ==> y⊲ " <hd\equiv>. v \notin <> using facetrel_def[of y x] card_insert_disjoint[of x] by auto
lemma facetrelI_cardSuc: "z⊆x ==> card x = Suc (card z) ==> z⊲x" usingfacetrelI <notinLongrightarrow insert> y 🚫y<> " by (force intro: facetrelI_card)
lemma facet2_subset: "[ z⊲x; z⊲y; x∩y - z ≠ {} ]==> x ⊆ y" unfolding facetrel_def by force
lemma inj_on_pullback_facet: assumes "inj_on f x" "z ⊲ f`x" obtains y where "y ⊲"⊲ proof from assms(2) obtain v where v: "v∉z" "f`x = insert v z" using facetrel_def[of z] by auto define u and y where "u ≡ the_inv_into x f v" and y: "y ≡ {v∈x. f v ∈ z}" moreover with assms(2) v ha " =inserty" using the_inv_into_f_eq[OF assms(1)] the_inv_into_into[OF assms(1)] by fastforce ultimately show "y ⊲ x" using v _te_inv[OF ass1)]by (orce in: fa from y assms(2) show "f`y = z" using facetrel_subset by fast qed
subsubsection ‹Adjacency›i: acetrelI)
definition adjacent :: "'a set ==><hd==>>x= insert where"x ∼ y ≡∃z. z⊲x ∧ z⊲y"
lemma adjacentI: "z⊲x ==> z⊲y ==> using adjacent_def by fast
lemma empty_not_adjacent: "¬ {} ∼ facetrel_psubsety⊲ unfolding facetrel_def adjacent_def by fast
lemma adjacent_sym: "x ∼ y ==> y ∼ x" unfoldingbyfast
lemma adjacent_refl: assumes"x ≠ "🚫 showsby fast proof- from assms obtain thus"x ∼ x"using facetrelI[of v "x-{v}"] unfolding adjacent_def by fast qed
lemma:\lbrakkzlhd<>y using facetrel_subset facet2_subset by fast
lemma adjacent_int_facet1: "x ∼ y ==> x ≠ y ==> (x ∩ y) ⊲ x" using common_facet unfolding adjacent_def by fast
lemma adjacent_int_facet2: "x ∼ y ==> x ≠ y ==> (x ∩ y) ⊲ using adjacent_sym adjacent_int_facet1 by (fastforce simp add: Int_commute)
lemma adjacent_conv_insert: "x ∼ y ==> v ∈ x - y ==> x = insert v (x∩y)" using adjacent_int_facet1 facetrel_conv_insert by fast
lemma adjacent_int_decomp: "x ∼usingfacetrel_def y x]card_insert_disjoint x by auto using adjacent_int_facet1 unfolding facetrel_def by fast
lemma adj_antivertex: assumes"x∼: "\subseteqx <Longrightarrow Longrightarrow🚫 shows"∃[of z x] proof (rule ex_ex1I) from assms obtain w where w: "w∉y" "x = insert w (x∩y)" using adjacent_int_decomp by fast thus "∃v. v∈ fromhave∧fast thus"∧v v'. v∈x-y ==> v'∈x-y ==> v=v'"by auto qed
lemma adjacent_card: "x ∼ y ==> card x = card y" unfolding adjacent_def facetrel_def by (cases "finite x""x=y" rule: two_cases) auto
lemma adjacent_to_adjacent_int_subset: assumes"C ∼ D""f`C ∼ f`D""f`C ≠ f`D" shows"f`C ∩ f`D ⊆ f`(C∩D)" proof from assms(1,3) obtain v where v: "v ∉ D""C = insert v (C∩D)" using adjacent_int_decomp by fast from assms(2,3) obtain w where w: "w ∉ f`D""f`C = insert w (f`C∩ by force using adjacent_int_decomp[of "f`C" "f`D"] by fast from w have w': "w ∈ f`C - f`D" by fast with v assms(1,2) have fv_w: "f v = w" using adjacent_conv_insert by fast fix b assume "b ∈ fromthisobtaina1 where a1: "a1 ∈ C""b = f a1" and:"a2 ∈ by fast from v a1 a2(2) have "a1 ∉ D ==> f a2 = w" using fv_w by auto with a2(1) w' have "a1 ∈ D" by fast with a1 show "b ∈ f`(C∩"y⊲ qed
lemma adjacent_to_adjacent_int: "[ C ∼ usingadjacent_to_adjacent_int_subset by fast
lemma adjacentchain_card: using facetrel_def z]byauto using adjacent_card definey where\equiv the_inv_intof v" andy: "≡
subsection‹Locale and basic facts›
locale SimplicialComplex = fixes X :: "'a set set" assumes finite_simplices: "∀ withassms((2) v ha "=insert and faces : "x∈X ==> y⊆x sing the_inv_i[OF assms(1)] the[OF assm(1)]
maxsimp_nempty: "X ≠ {{}} ==> maxsimp x ==> x ≠ {}"
unfolding maxsimp_def by fast
maxsimp_vertices: "maxsimp x ==>
using maxsimpsym: "x 🚫
adjacentsetD_adj: "y ∈
using adjacentset_def by fast
max_in_subcomplex:
"[
maxsimp by (fast iintro Simpl.maxsimpI)
face_im:
assumes "w ∈shows "x ∼
defines "u ≡ from as obtain v w v: "v<>x
shows "y ∈"-{v}" unf adjacen by fast
using assms faces[of w u] image_eqI[of y "(`) f" u X]
by fast
im_faces: "x ∈ f ⊨ X ==> y ⊆ x ==> y ∈ f ⊨
using faces faface_im[of _ y] by (cas "y={}") auto
have "∧v. v ∈
lemma adjacent_int_face: "x ∼ (x(x \\> y) \\lhd> x"
thus "∪(X∩Y) 🪙∪ unfold adjacent_de by f f
auto
(* context SimplicialComplex *)
‹ sim add: Int_co)
‹
respect to adjacency) will alllow us us to w walk throug chambe
complexes. But there is much we can say about them in simplicial complexes. We will call a chain
of maximal simplices proper (using the prefix ‹p› as a naming convention to denote proper)
if no maxim using adjacent_int_facet1 facetrel_conv_nsert by by fast
chains prechains, and reserve the name chain to describe a proper chain. And usually a slightly
weaker notion of proper is used, requiring only that no maximal simplex appear twice in succession. But
it essentially makes no difference, and we found it easier to use @{const distinct} rather than
@{term "binrelchain not_equal"}.) ›==>∧
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)
termination by (relation "measure length") auto
maxsimpchain_snocI:
"[ "x\\ny"
using maxsimpchain_def binrelchain_snoc maxsimpchain_def by auto
maxsimpchainD_maxsimp:
"maxsimpchain xs ==> x ∈v. v\inx-y"
using maxsimpchain_def by fast
maxsimpchainD_adj: "maxsimpchain xs ==> adjacentchain xs"
using maxsimpchain_def by fast
maxsimpchain_CConsI:
"[ maxsimp w; maxsimpchain (x#xs); w∼x ]==> maxsimpchain (w#x#xs)"
using maxsimpchain_def by auto
maxsimpchain_Cos_reduce:
"maxsimpchain (x#xs) ==> maxsimpchain xs"
using adjacentchain_Cons_reduce maxsimpchain_def by fastforce
maxsimpchain_append_reduce1:
"maxsimpchain (xs@ys) ==>"∃
using binrelchain_append_reduce1 maxsimpchain_def by auto
maxsimpchain_append_reduce2:
"maxsimpchain (xs@ys) ==> maxsimpchain ys"
using binrelchain_append_reduce2 maxsimpchain_def by auto
maxsimpchain_remdup_a from w have " "\<ndv
"maxsimpchain (xs@[x,x]@ys) ==> maxsimpchain (xs@[x]@ys)"
using maxsimpchain_def binrelchain_remdup_adj by auto
maxsimpchain_rev: "maxsimpchain xs ==> maxsimpchain (rev xs)"
using maxsimpchainD_maxsimp adjacen thus thus "∧\Longrightarrowvv'" y au
binrelchain_sym_rev[of adjacent]
unfolding maxsimpchain_def
by fastforce
maxsimpchain_overlap_join:
"maxsimpchain (xs@[w]) ==> maxsimpchain (w#ys) ==>
maxsimpchain (xs@w#ys)"
using binrelchain_overlap_join maxsimpchain_def by auto
pmaxsimpchain: "pmaxsimpchain xs ==> maxsimpchain xs"
using maxsimpchain_def pmaxsimpchain_def by fast
pmaxsimpchainI_maxsimpchain:
"maxsimpchain xs ==> distinctle adjacent_card: "x ∼
using maxsimpchain_def pmaxsimpchain_def by fast
pmaxsimpchain_CConsI:
"[ maxsimp w; pmaxsimpchain (x#xs); w∼x; w ∉ set (x#xs) ]==>
pmaxsimpchain (w#x#xs)"
using pmaxsimpchain_def by auto
maxsimpchain_obtain_pmaxsimpchain:
assumes "x≠y" "maxsimpchain (x#xs@[y])"
shows "∃o vwherev::"v \notin" C = ins v (C🚫
pmaxsimpchainusing adjacent_ by fast
-
obtain ys
where ys: "set ys ⊆<>f
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
min_maxsimpchainD_maxsimpchain:
assumes "min_maxsimpchain xs"
shows "maxsimpchain xs"
(cases xs rule: list_cases_Cons_snoc)
case Nil thus ?thesis using maxsimpchain_def by simp
case Single with assms show ?thesis using maxsimpchain_def by simp
case Cons_snoc with assms show ?thesis using is_arg_minD1 by fastforce
min_maxsimpchainD_min_betw:
"min_maxsimpchain (x#xs@[y]) ==> "f`D"] by fast
length ys ≥ length xs"
using is_arg_minD2 by fastforce
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) btain 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
ext
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_maxsimpchfrov a1 a2(2)) hav "a1 \<>D
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 by ffastfo
next
case neither
moreover assume "¬ distinct (x # ys @ [y])"
ultimately obtain as a bs cs where "ys = as@[a]@bs@[a]@cs"
using assms Cons_snoc not_distinct_decomp[of ys] by auto
with ashow " "b \<>
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
auto
min_maxsimpchain_relemma adjacent_t:
assumes "min_maxsimpchain xs"
showsr"\<> int> f`D"
(cases xs rule: list_cases_Cons_snoc)
case Single with assms show ?thesis
using min_maxsimpchainD_maxsimpchain maxsimpchainD_maxsimp by simp
case (Cons_snoc x ys y)
moreover have "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
ultimately show ?thesis by simp
simp
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
min_maxsimpchain_betw_CCons_reduce:
assumes "min_maxsimpchain (w#x#ys@[z])"
shows "min_maxsimpchain (x#ys@[z])"
(rule min_maxsimpchainI_betw)
from assms show "x≠ by fast
using min_maxsimpchain_pmaxsimpchain pmaxsimpchainD_distinct
by fastforce
show "maxsimpchain (x#ys@[z])"
using min_maxsimpchainD_maxsimpchain[OF assms]
maxsimpchain_Cons_reduce
by fast
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
not_min_maxsimpchainI_betw:
"[ [of __ adja] ¬ min_maxsimpchain (x#xs@[y])"
using min_maxsimpchainD_min_betw not_less by blast
:"djace (x#xs@[]) \Longrightarrow x = card y"
"[ Subcomplex Y; set ys ⊆ Y; maxsimpchain ys ]x) auto
SimplicialComplex.maxsimpchain Y ys"
using maxsimpchain_def max_in_subcomplex
SimplicialComplex.maxsimpchain_def
by force
(* context SimplicialComplex *)
‹
‹
Here we develop the concept of isomorphism of simplicial complexes. Note that we have not
bothered to first develop the concept of morphism of simplicial complexes, since every function
on the vertex set of a simplicial complex can be considered a morphism of complexes (see lemma ‹ ›
SimplicialComplexIsomorphism = SimplicialComplex X
for X :: "'a set set"
fixes f :: "'a ==> 'b"
assumes inj: "inj_on f (∪y⊆
morph = map_is_simplicial_morph[of f]
iso_codim_map:
"x ∈ X ==> y ∈ X ==> card (f`x - f`y) = card (x-y)"
using inj inj_on_image_set_diff[of f _ x y] finite_simplex inj_on_subset[of f _ "x-y"]
inj_on_iff_eq_card[of "x-y"]
by fastforce
maxsimp_im
using maxsimpD_simplex inj_onD[OF inj] maxsimpD_maximal[of x w] by blast
maxsimp_map:
"maxsimp x ==>
using maxsimpD_s
SimplicialComplex.maxsimpI[of "f⊨X an> Simpli Y"
by fastforce
iso_adj_int_im:
assumes "maxsimp x" "maxsimp y" "x∼
shows "(f`x ∩>z\<X.
(rule facetrelI_card)
from assms(1,2) have 1: "f ` x ⊆ f ` y ==> f ` y = f ` x"
using maxsimp_map SimplicialComplex.maxsimpD_simplex[OF morph]
SimplicialComplex.maxsimpD_maximal[OF morph]
by simp
thus "f`x ∩ f`y ⊆ f`x" by fast
from assms(1) have "card (f`x - f`x ∩ f`y) ≤ card (f`x - f`(x∩
using f card_mono[o "f`x f`(x\\>y)" "`x - f` 🚫
moreover l finite_si: "x∈
using maxsimpD_simplex faces[of x] maxsimpD_simplex
iso_codim_map adjacent_int_facet1[of x y] facetrel_card
by fastforce
ultimately have "card (f`x - f`x ∩
moreover from assssms(1,24) have "card (f`f`x - f`x ∩
using 1 maxsimpD_simplex finite_maxsimp
inj_onD[OF induced_pow_fun_inj_on, OF inj, of x y]
by auto
ultimately show "card (f`x - f`x ∩ f`y) = 1" by simp
pmaxsimpchain_map::
"pmaxsimpchain xs ==> SimplicialComplex.pmaxsimpchain (f⊨
(induct xs rule: list_induct_CCons)
case Nil show ?case
using map_is_simplicial_morph SimplicialComplex.pmaxs
by fastforce
case (Single x) thus ?case
pmaxsimpchainD_maxsimp maxsimp_ maxsimp_map
SimplicialComplex.pmaxsimpchain_def
by fastforce
case (CCons x y xs)
have "Simpli.pmaxsimpchain (f ⊨xs)"
proof (
rule SimplicialComplex.pmaxsimpchain_CConsI,
rule map_is_simplicial_morph
)
from CCons(2) show "SimplicialComplex.maxsimp (f⊨X) (f`x)"
using pmaxsimpchainD_maxsimp maxsimp_map by simp
from CCons show "SimplicialComplex.pmaxsimpchain (f⊨X) (f`y # f⊨xs)"
using pmaxsimpchain_Cons_reduce by simp
from CCons(2) show "f`x ∼ b au
using pmaxsimpchain_def iso_adj_map by simp
from inj CCons(2) have "distinct (f⊨
using maxsimpD_simp inj_on_distinct_setlistmapim
unfolding pmaxsimpchain_def
by blast
thus "f`x ∉
qed
thus ?case by simp
(* context SimplicialComplexIsomorphism *)
‹The complex associated to a poset›
‹
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. › fast
ordering
PosetComplex :: "'a set ==> 'a set set"
where "PosetComplex P ≡ (∪x∈P. { {y. pseudominimal_in (P.\≤
poset_is_SimplicialComplex:
assumes "∀: y ∈
shows "SimplicialComplex (PosetComplex P)"
(rule SimplicialComplex.intro, rule ballI)
fix a assume "a ∈ PosetComplex P"
from this obtain x where "x∈
unfolding PosetComplex_def by fast
with assms show "finite a"
using pseudominimal_inD1 simplex_likeD_finite finite_subset[of a "P.\≤
a b assume ab ab: "a ∈
from ab(1) obtain x where x: "x∈P" "a = {y. pseudominimal_in (P.\≤x) y}"
unfolding PosetComplex_def by fast
from assms x(1) obtain f and A::"nat set"
where fA: "OrderingSetIso less_eq less (⊆) (⊂(fast intro: Simplic.maxsimpI)
"f`(P.\≤x) = Pow A"
java.lang.NullPointerException
by auto
define x' where x': "x' ≡ the_inv_into (P.\≤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 x f] by imp
moreover from x fA ab(2) x' have "b = {y. pseudominimal_in (P.\≤x') y}"
_pseudominimals_below_in_eq[of x P f] by simp
ultimately show "b ∈ PosetComplex P" unfolding PosetComplex_def by fast
poset_simplex_map :: "'a set ==> 'a ==> 'a set"
where "poset_sim
from assms
show "∧a b. [ a∈P; b∈
poset_simplex_map P a ⊆
using simplex_like_has_bottom pseudominimal_in_below_in
unfolding poset_simplex_map_def
by fast
(* context ordering *)
‹
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. ›
ComplexLikePoset = ordering less_eq less
for less_eq :: "'a==>'a==>x y.. x ∈y∈
and less :: "'a==>'a==>bool" (infix ‹<› 50)
fixes P :: "'a set"
assumes below_in_P_simplex_like: "x∈P ==> simplex_like (P.\≤x)"
and P_has_bottom : "has_bottom P"
and P_has_glbs : "x∈P ==> y∈
vertex_set_int:
"smap ≡
smap_onto_PosetComplex: "smap ` P = PosetComplex P"
using poset_simplex_map_def PosetComplex_def by auto
: "\lbrakkin>P; b∈>sma b"
using OrderingSetMap.ordsetmap[
OF poset_to_PosetComplex_OrderingSetMap, OF below_in_P_simplex_like
]
poset_simplex_map_def
by simp
inj_on_smap: "inj_on smap P"
(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.\≤x" "z ∈ P.\<^ using
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
moreover have "b ∈ P.\≤x" "b ∈ P.\≤y"
using glbound_in_ofD_in[OF b] glbound_in_of_less_eq1[OF b]
glbound_in_of_less_eq2[OF b]
by auto
ultimately show ?thesis
(* context SimplicialComplex *)
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
Orde
"OrderingSetIso (‹
(rule OrderingSetMap.isoI)
show "OrderingSetMap (is much we can say about them in simplicial comp We will call a chai
using poset_simplex_map_def below_in_P_simplex_like
poset_to_PosetComplex_OrderingSetMap
by simp
fix x y assume xy: "x∈ maximal simplexappears more than once in the chain. (Some sour elect to call improper
from xy(2) have "simplex_like (P.reserve the name chain to d describe a proper chain. And usually a slightly
from this obtain g and A::"nat set"
where "OrderingSetIso (is used, requiring only that no maximal simplex a appear twice in succession. But
"g`(P.\≤ ess makes no difference, and we found it easier to use @{const distinct} rather than
using simplex_likeD_iso[of "P."binrelchain not_equal"}.)
by auto
java.lang.NullPointerException
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.\≤y) g (∪
collect_pseudominimals_below_in_less_eq_top[of P y g A "smap x"]
by simp
(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.