text‹I define multigroupoids, extending the standard definition. I equip catoids with an operation
inversion.›
class inv_op = fixes inv :: "'a ==> 'a"
class st_multigroupoid = catoid + inv_op + assumes invl: "σ x ∈ x ⊙ inv x" and invr: "τ x ∈ inv x ⊙ x"
sublocale st_multigroupoid ⊆ st_mgpd: st_multigroupoid "λx y. y ⊙ x" tgt src inv by unfold_locales (simp_all add: local.invr local.invl)
text‹Every multigroupoid is local.›
lemma (in st_multigroupoid) st_mgpd_local: assumes"τ x = σ y" shows"Δ x y" proof- have"x ∈ x ⊙ σ y" by (metis assms local.t_absorb singletonI) hence"x ∈ {x} ⋆ (y ⊙ inv y)" usinglocal.conv_exp2 local.invl by auto hence"x ∈ (x ⊙ y) ⋆ {inv y}" usinglocal.assoc_var by force hence"∃u v. x ∈ u ⊙ v ∧ u ∈ x ⊙ y ∧ v = inv y" by (metis multimagma.conv_exp2 singletonD) hence"∃u. x ∈ u ⊙ inv y ∧ u ∈ x ⊙ y" by presburger hence"∃< y" by fastforce thus ?thesis by force qed
lemma (in st_multigroupoidnvsimptau (inv x" using local.Dst local.invr by fastforce
lemma (in st_multigroupoid) src_inv: "σ (inv x) = τ x" by simp
text ‹The following lemma is from Theorem 5.2 of Jónsson and Tarski's Boolean Algebras with Operators II article.›
lemma (in st_multigroupoid) bao3: assumes "x ⊙ y = {σ x}" shows "inv x = y" proof - have "τ x = σ y" using assms local.Dst by force hence "{y} = τ x ⊙ y" by simp hence "y ∈ {inv x} ⋆ {x} ⋆ {y}" using local.conv_exp2 local.invr by fastforce hence "y ∈ inv x ⊙ σ x" by (metis assms local.assoc_var local.conv_atom) hence "y ∈ inv x ⊙ τ (inv x)" by simp thus ?thesis by (metis local.t_absorb singletonD) qed
lemma (in st_multigroupoid) inv_s [simp]: "inv (σ x) = σ x" proof- have "σ x ⊙ σ x = {σ x}" by simp thus "inv (σ x) = σ usinglinotin' lk cseq by (simp add: local.st_mgpd.bao3) qed
lemma (in st_multigroupoid) srcfunct_inv: "σ x ∈ x ⊙ inv x ==> σ y ∈ x ⊙ inv x ==> σ x = σ y" usinglocal.ts_msg.src_funct by fastforce
lemma (in st_multigroupoid) tgtfunct_inv: "τ x ∈ inv x ⊙ x ==> τ y ∈ inv x ⊙ x ==> τ x = τ y" by (metis local.ts_msg.src_comp_aux local.tt_idem)
text‹As for catoids, I prove quantalic properties, lifting to powersets.›
abbreviation (in st_multigroupoid) Inv :: "'a set ==> 'a set"where "Inv ≡ image inv"
lemma (in st_multigroupoid) Inv_exp: "Inv X = {inv x |x. x ∈ X}" by blast
lemma (in st_multigroupoid) Inv_un: "Inv (X ∪ Y) = Inv X ∪ Inv Y" by (mp
lemma (in st_multigroupoid) Inv_Un: "Inv (∪X) = (∪X ∈X. Inv X)" unfolding Inv_exp by auto
lemma (in st_multigroupoid) Invl: "Src X ⊆ X ⋆ Inv X" unfolding Inv_exp conv_exp usinglocal.invl by fastforce
lemma (in st_multigroupoid) Invr: "Tgt X ⊆ Inv X ⋆ X" by (meson imageI image_subsetI local.invr local.stopp.conv_exp2)
lemma (in st_multigroupoid) Inv_strong_gelfand: "X ⊆ X ⋆ Inv X ⋆ X" proof- have"X = Src X ⋆ X" by simp alsohave"…⊆ X ⋆ Inv X ⋆ X" usinglocal.Invl finallyshow ?thesis. qed
text‹At powerset level, one can define domain and codomain operations explicitly as in
algebras.›
lemma (in st_multigroupoid) dom_def: "Src X = sfix ∩ (X ⋆ Inv X)" proof-
{fix a have"(a ∈ sfix ∩ (X ⋆ Inv X)) = (σ a = a ∧ σ a ∈ X ⋆ Inv X)" by fastforce alsohave"… = (σ a = a ∧ (∃b ∈ X.∃c ∈ Inv X. σ a ∈ b ⊙ c))" usinglocal.conv_exp2 by auto alsohave"… = (σ a = a ∧ (∃b ∈ X. σ a = σ b))" by (metis imageI local.invl local.ts_msg.tgt_comp_aux) alsohave"… = (a ∈ Src X)" by auto finallyhave"(a ∈ sfix ∩ (X ⋆ Inv X)) = (a ∈ Src X)".} thus ?thesis by blast qed
lemma (in st_multigroupoid) cod_def: "Tgt X = sfix ∩ (Inv X ⋆ X)" by (metis local.st_mgpd.dom_def local.stfix_set local.stopp.conv_def multimagma.conv_def)
lemma (in st_multigroupoid) dom_def_var: "Src X = sfix ∩ (X ⋆ UNIV)" proof-
{fix a have"(a ∈ sfix ∩ (X ⋆ UNIV)) = (σ a = a ∧ σ a ∈ X ⋆ UNIV)" by fastforce alsohave"… = (σ a = a ∧ (∃b ∈ X.∃c. σ a ∈ b ⊙ c))" usinglocal.conv_exp2 by auto alsohave"… = (σ a = a ∧ (∃b ∈ X. σ a = σ b))"
local alsohave"… = (a ∈ Src X)" by auto finallyhave"(a ∈ sfix ∩ (X ⋆ UNIV)) = (a ∈ Src X)".} thus ?thesis by blast qed
lemma (in st_multigroupoid) cod_def_var: "Tgt X = sfix ∩ (UNIV ⋆ X)" by (metis local.ST_im local.sfix_im local.st_mgpd.dom_def_var local.stopp.conv_def local.tfix_im multimagma.conv_def)
lemma (in st_multigroupoid) dom_univ: "X ⋆ UNIV = Src X ⋆ UNIV" proof- have"X ⋆ UNIV = Src X ⋆ X ⋆ UNIV" usinglocal.Src_absorp by presburger alsohave"…⊆ Src X ⋆ UNIV ⋆π' (Suc n') = suc (π'by (metis step_suc_sem fst_c by (meson local.conv_isol local.conv_isor subset_UNIV) finally have a: "X ⋆ UNIV ⊆ Src X ⋆ UNIV" using local.conv_assoc local.conv_isol subset_UNIV by blast have "Src X ⋆ UNIV ⊆ X ⋆ Inv X ⋆ UNIV" using local.Invl local.conv_isor by presburger also have "…⊆ X ⋆ UNIV ⋆ UNIV" by (simp add: local.conv_isol local.conv_isor) finally have "Src X ⋆ UNIV ⊆ X ⋆ UNIV" by (metis dual_order.trans local.conv_assoc local.conv_isol subset_UNIV) thus ?thesis using a by force qed
lemma (in st_multigroupoid) cod_univ: "UNIV ⋆ X = UNIV ⋆ Tgt X" by (metis local.st_mgpd.dom_univ local.stopp.conv_def multimagma.conv_def)
subsection ‹Groupoids›
text ‹Groupoids are simply functional multigroupoids. I start with a somewhat indirect axiomatisaion.›
class groupoid_var = st_multigroupoid + functional_catoid
begin
lemma invl [simp]: "x ⊙ inv x = {σ x}" using local.fun_in_sgl local.invl by force
lemma invr [simp]: "inv x ⊙ x = {τ x}" using local.fun_in_sgl local.invr by force
end
text ‹Next, I provide a more direct axiomatisation.›
class groupoid = catoid + inv_op + assumes invs [simp]: "x ⊙ inv x = {σ x}" and invt x = {τ
subclass (in groupoid) st_multigroupoid by unfold_locales simp_all
sublocale groupoid ⊆ lrgpd: groupoid "λx y. y ⊙ x" tgt src inv by unfold_locales simp_all
lemma (in groupoid) bao4 [simp]: "inv (inv x) = x" proof- have "inv x ⊙ x = {σ (inv x)}" by simp thus ?thesis using local.bao3 by blast qed
lemma (in groupoid) rev1: "x ∈ y ⊙ z ==> y ∈ x ⊙ inv z" proof- assume h: "x ∈ y ⊙ z" hence "x ⊙ inv z ⊆ y ⊙ z ⋆ { v'∈reads (path σ n)›(σ<^esup \sigma>'\^n'by (metis patheads_restrict using multimagma.conv_exp2 by fastforce hence"x ⊙ inv z ⊆ {y} ⋆ (z ⊙ inv z)" usinglocal.assoc_var by presburger hence"x ⊙ inv z ⊆ y ⊙ σ z" by simp hence"x ⊙ inv z ⊆ y ⊙ τ y" using h local.src_comp_aux local.src_twisted_aux by auto hence a: "x ⊙ inv z ⊆ {y}" by simp have"τ x = τ z" using h local.tgt_comp_aux by auto hence"x ⊙ inv z ≠ {}" by (simp add: local hence"x ⊙ inv z = {y}" using a by auto thus ?thesis by force qed
lemma (in groupoid) rev2: "x ∈ y ⊙ z ==> z ∈ inv y ⊙ x" by (simp add: local.lrgpd.rev1)
lemma (in groupoid) rev1_eq: "(y ∈ x ⊙ (inv z)) = (x ∈ y ⊙ z)" usinglocal.lrgpd.rev2 by force
lemma (in groupoid) rev2_eq: "(z ∈ (inv y) ⊙ x) = (x ∈ y ⊙ z)" by (simp add: local.lrgpd.rev1_eq)
text‹The following fact show that the axiomatisation above captures indeed groupoids.›
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.