(* Title: Category theory using Isar and Locales Author:GregO'Keefe,June,July,August2003 License:LGPL
*)
section‹Yonedas Lemma›
theory Yoneda imports HomFunctors NatTrans begin
subsection‹The Sandwich Natural Transformation›
locale Yoneda = "functor" + into_set + assumes"TERM (AA :: ('o,'a,'m)category_scheme)" fixes sandwich :: "['o,'a,'o] ==> 'a set_arrow" (‹σ'(_,_')›) defines"sandwich A a ≡ (λB∈Ob. ( set_dom=Hom A B, set_func=(λf∈Hom A B. set_func (F<a> f) a), set_cod=F<o> B ))" fixes unsandwich :: "['o,'o ==> 'a set_arrow] ==> 'a" (‹σ\←'(_,_')›) defines"unsandwich A u ≡ set_func (u A) (Id A)"
lemma (in Yoneda) F_into_set: "Functor F : AA ⟶ Set" proof- from F_axioms have"Functor F : AA ⟶ BB"by intro_locales thus ?thesis by (simp only: BB_Set) qed
lemma (in Yoneda) F_comp_func: assumes1: "A ∈ Ob"and2: "B ∈ Ob"and3: "C ∈ Ob" and4: "g ∈ Hom A B"and5: "f ∈ Hom B C" shows"set_func (F<a> (f ∙ g)) = compose (F<o> A) (set_func (F<a> f)) (set_func (F<a> g))" proof- from4and5 have7: "Cod g = Dom f" and8: "g ∈ Ar" and9: "f ∈ Ar" and10: "Dom g = A" by (simp_all add: hom_def) from F_preserves_dom and8and10 have11: "set_dom (F<a> g) = F<o> A" by (simp add: preserves_dom_def BB_Set Set_def) auto from F_preserves_comp and7and8and9 have"F<a> (f ∙ g) = (F<a> f) ∙ (F<a> g)" by (simp add: preserves_comp_def) hence"set_func (F<a> (f ∙ g)) = set_func ((F<a> f) ⊙ (F<a> g))" by (simp add: BB_Set Set_def) alsohave"… = compose (F<o> A) (set_func (F<a> f)) (set_func (F<a> g))" by (simp add: set_comp_def 11) finallyshow ?thesis . qed
lemma (in Yoneda) sandwich_funcset: assumes A: "A ∈ Ob" and"a ∈ F<o> A" shows"σ(A,a) : Ob → ar Set" proof (rule funcsetI) fix B assume B: "B ∈ Ob" thus"σ(A,a) B ∈ ar Set" proof (simp add: Set_def sandwich_def set_cat_def) show"set_arrow U ( set_dom = Hom A B, set_func = λf∈Hom A B. set_func (F<a> f) a, set_cod = F<o> B)" proof (simp add: set_arrow_def, intro conjI) show"Hom A B ⊆ U"and"F<o> B ⊆ U" by (simp_all add: U_def) show"(λf∈Hom A B. set_func (F<a> f) a) ∈ Hom A B → F<o> B" proof (rule funcsetI, simp) fix f assume f: "f ∈ Hom A B" with A B have"F<a> f ∈ Hom (F<o> A) (F<o> B)" by (rule functors_preserve_homsets) hence"F<a> f ∈ ar Set" and"set_dom (F<a> f) = (F<o> A)" and"set_cod (F<a> f) = (F<o> B)" by (simp_all add: hom_def BB_Set Set_def) hence"set_func (F<a> f) : (F<o> A) → (F<o> B)" by (simp add: Set_def set_cat_def set_arrow_def) thus"set_func (F<a> f) a ∈ F<o> B" using‹a ∈ Fo A› by (rule funcset_mem) qed qed qed qed
lemma (in Yoneda) sandwich_type: assumes A: "A ∈ Ob"and B: "B ∈ Ob" and"a ∈ F<o> A" shows"σ(A,a) B ∈ hom Set (Hom A B) (F<o> B)" proof- have"σ(A,a) ∈ Ob → Ar" using A and‹a ∈ Fo A›by (rule sandwich_funcset) hence"σ(A,a) B ∈ ar Set" using B by (rule funcset_mem) thus ?thesis using B by (simp add: sandwich_def hom_def Set_def) qed
lemma (in Yoneda) sandwich_commutes: assumes AOb: "A ∈ Ob"and BOb: "B ∈ Ob"and COb: "C ∈ Ob" and aFa: "a ∈ F<o> A" and fBC: "f ∈ Hom B C" shows"(F<a> f) ⊙ (σ(A,a) B) = (σ(A,a) C) ⊙ (Hom(A,_)<a> f)" proof- from fBC have1: "f ∈ Ar"and2: "Dom f = B"and3: "Cod f = C" by (simp_all add: hom_def) from BOb have"set_dom ((F<a> f) ⊙ (σ(A,a) B)) = Hom A B" by (simp add: set_comp_def sandwich_def) alsohave"… = set_dom ((σ(A,a) C) ⊙ (Hom(A,_)<a> f))" by (simp add: set_comp_def homf_def 12) finallyhave set_dom_eq: "set_dom ((F<a> f) ⊙ (σ(A,a) B)) = set_dom ((σ(A,a) C) ⊙ (Hom(A,_)<a> f))" . from BOb COb fBC have"(F<a> f) ∈ Hom (F<o> B) (F<o> C)" by (rule functors_preserve_homsets) hence"set_cod ((F<a> f) ⊙ (σ(A,a) B)) = F<o> C" by (simp add: set_comp_def BB_Set Set_def set_cat_def hom_def) alsofrom COb have"… = set_cod ((σ(A,a) C) ⊙ (Hom(A,_)<a> f))" by (simp add: set_comp_def sandwich_def) finallyhave set_cod_eq: "set_cod ((F<a> f) ⊙ (σ(A,a) B)) = set_cod ((σ(A,a) C) ⊙ (Hom(A,_)<a> f))" . from AOb and BOb and COb and fBC and aFa have set_func_lhs: "set_func ((F<a> f) ⊙ (σ(A,a) B)) = (λg∈Hom A B. set_func (F<a> (f ∙ g)) a)" apply (simp add: set_comp_def sandwich_def compose_def) apply (rule extensionalityI, rule restrict_extensional, rule restrict_extensional) by (simp add: F_comp_func compose_def) have"(∙) : Hom B C → Hom A B → Hom A C" .. from this and fBC have opfType: "(∙) f : Hom A B → Hom A C" by (rule funcset_mem) from1and2 have"set_func ((σ(A,a) C) ⊙ (Hom(A,_)<a> f)) = (λg∈Hom A B. set_func (σ(A,a) C) (f ∙ g))" apply (simp add: set_comp_def homf_def) apply (simp add: compose_def) apply (rule extensionalityI, rule restrict_extensional, rule restrict_extensional) by auto alsofrom COb and opfType have" … = (λg∈Hom A B. set_func (F<a> (f ∙ g)) a)" apply (simp add: sandwich_def) apply (rule extensionalityI, rule restrict_extensional, rule restrict_extensional) by (simp add:Pi_def) finallyhave set_func_rhs: "set_func ((σ(A,a) C) ⊙ (Hom(A,_)<a> f)) = (λg∈Hom A B. set_func (F<a> (f ∙ g)) a)" . from set_func_lhs and set_func_rhs have "set_func ((F<a> f) ⊙ (σ(A,a) B)) = set_func ((σ(A,a) C) ⊙ (Hom(A,_)<a> f))" by simp with set_dom_eq and set_cod_eq show ?thesis by simp qed
lemma (in Yoneda) sandwich_natural: assumes"A ∈ Ob" and"a ∈ F<o> A" shows"σ(A,a) : Hom(A,_) ==> F in Func(AA,Set)" proof (intro natural_transformation.intro natural_transformation_axioms.intro two_cats.intro) show"category AA" .. show"category Set" by (simp only: Set_def)(rule set_cat_cat) show"Functor Hom(A,_) : AA ⟶ Set" by (rule homf_into_set) show"Functor F : AA ⟶ Set" by (rule F_into_set) show"∀B∈Ob. σ(A,a) B ∈ hom Set (Hom(A,_)<o> B) (F<o> B)" using assms by (auto simp add: homf_def intro: sandwich_type) show"σ(A,a) : Ob → ar Set" using assms by (rule sandwich_funcset) show"σ(A,a) ∈ extensional (Ob)" unfolding sandwich_def by (rule restrict_extensional) show"∀B∈Ob. ∀C∈Ob. ∀f∈Hom B C. comp Set (F <a> f) (σ(A,a) B) = comp Set (σ(A,a) C) (Hom(A,_)<a> f)" using assms by (auto simp add: Set_def intro: sandwich_commutes) qed
subsection‹Sandwich Components are Bijective›
lemma (in Yoneda) unsandwich_left_inverse: assumes1: "A ∈ Ob" and2: "a ∈ F<o> A" shows"σ\<leftarrow>(A,σ(A,a)) = a" proof- from1have"Id A ∈ Hom A A" .. with1 have3: "σ\<leftarrow>(A,σ(A,a)) = set_func (F<a> (Id A)) a" by (simp add: sandwich_def homf_def unsandwich_def) from F_preserves_id and1 have4: "F<a> (Id A) = id Set (F<o> A)" by (simp add: preserves_id_def BB_Set) from F_preserves_objects and1 have"F<o> A ∈ Ob" by (rule funcset_mem) hence"F<o> A ⊆ U" by (simp add: BB_Set Set_def set_cat_def) with2 have5: "set_func (id Set (F<o> A)) a = a" by (simp add: Set_def set_id_def) show ?thesis by (simp add: 345) qed
lemma (in Yoneda) unsandwich_right_inverse: assumes1: "A ∈ Ob" and2: "u : Hom(A,_) ==> F in Func(AA,Set)" shows"σ(A,σ\<leftarrow>(A,u)) = u" proof (rule extensionalityI) show"σ(A,σ\<leftarrow>(A,u)) ∈ extensional (Ob)" by (unfold sandwich_def, rule restrict_extensional) from2show"u ∈ extensional (Ob)" by (simp add: natural_transformation_def natural_transformation_axioms_def) fix B assume3: "B ∈ Ob" with1 have one: "σ(A,σ\<leftarrow>(A,u)) B = ( set_dom = Hom A B, set_func = (λf∈Hom A B. (set_func (F<a> f)) (set_func (u A) (Id A))), set_cod = F<o> B )" by (simp add: sandwich_def unsandwich_def) from1have"Hom(A,_)<o> A = Hom A A" by (simp add: homf_def) with1and2have"(u A) ∈ hom Set (Hom A A) (F<o> A)" by (simp add: natural_transformation_def natural_transformation_axioms_def,
auto) hence"set_dom (u A) = Hom A A" by (simp add: hom_def Set_def) with1have applicable: "Id A ∈ set_dom (u A)" by (simp)(rule) have two: "(λf∈Hom A B. (set_func (F<a> f)) (set_func (u A) (Id A))) = (λf∈Hom A B. (set_func ((F<a> f) ⊙ (u A)) (Id A)))" by (rule extensionalityI,
rule restrict_extensional, rule restrict_extensional,
simp add: set_comp_def compose_def applicable) from2 have"(∀X∈Ob. ∀Y∈Ob. ∀f∈Hom X Y. (F<a> f) ∙ (u X) = (u Y) ∙ (Hom(A,_)<a> f))" by (simp add: natural_transformation_def natural_transformation_axioms_def BB_Set) with1and3 have three: "(λf∈Hom A B. (set_func ((F<a> f) ⊙ (u A)) (Id A))) = (λf∈Hom A B. (set_func ((u B) ⊙ (Hom(A,_))<a> f)) (Id A))" apply (simp add: BB_Set Set_def) apply (rule extensionalityI) apply (rule restrict_extensional, rule restrict_extensional) by simp have"∀f ∈ Hom A B. set_dom (Hom(A,_)<a> f) = Hom A A" by (intro ballI, simp add: homf_def hom_def) have roolz: "∧f. f ∈ Hom A B ==> set_dom (Hom(A,_)<a> f) = Hom A A" by (simp add: homf_def hom_def) from1have rooly: "Id A ∈ Hom A A" .. have roolx: "∧f. f ∈ Hom A B ==> f ∈ Ar" by (simp add: hom_def) have roolw: "∧f. f ∈ Hom A B ==> Id A ∈ Hom A (Dom f)" proof- fix f assume"f ∈ Hom A B" hence"Dom f = A"by (simp add: hom_def) thus"Id A ∈ Hom A (Dom f)" by (simp add: rooly) qed have annoying: "∧f. f ∈ Hom A B ==> Id A = Id (Dom f)" by (simp add: hom_def) have"(λf∈Hom A B. (set_func ((u B) ⊙ (Hom(A,_))<a> f)) (Id A)) = (λf∈Hom A B. (compose (Hom A A) (set_func (u B)) (set_func (Hom(A,_)<a> f))) (Id A))" apply (rule extensionalityI) apply (rule restrict_extensional, rule restrict_extensional) by (simp add: compose_def set_comp_def roolz rooly) alsohave"… = (λf∈Hom A B. (set_func (u B) f))" apply (rule extensionalityI) apply (rule restrict_extensional, rule restrict_extensional) apply (simp add: compose_def homf_def rooly roolx roolw) apply (simp only: annoying) apply (simp add: roolx id_right) done finallyhave four: "(λf∈Hom A B. (set_func ((u B) ⊙ (Hom(A,_))<a> f)) (Id A)) = (λf∈Hom A B. (set_func (u B) f))" . from2and3 have uBhom: "u B ∈ hom Set (Hom(A,_)<o> B) (F<o> B)" by (simp add: natural_transformation_def natural_transformation_axioms_def) with3 have five: "set_dom (u B) = Hom A B" by (simp add: hom_def homf_def Set_def set_cat_def) from uBhom have six: "set_cod (u B) = F<o> B" by (simp add: hom_def homf_def Set_def set_cat_def) have seven: "restrict (set_func (u B)) (Hom A B) = set_func (u B)" apply (rule extensionalityI) apply (rule restrict_extensional) proof- from uBhom have"u B ∈ ar Set" by (simp add: hom_def) hence almost: "set_func (u B) ∈ extensional (set_dom (u B))" by (simp add: Set_def set_cat_def set_arrow_def) from almost and five show"set_func (u B) ∈ extensional (Hom A B)" by simp fix f assume"f ∈ Hom A B" thus"restrict (set_func (u B)) (Hom A B) f = set_func (u B) f" by simp qed from one and two and three and four and five and six and seven show"σ(A,σ\<leftarrow>(A,u)) B = u B" by simp qed
text‹In order to state the lemma, we must rectify a curious
from the Isabelle/HOL library. They define the idea of
on a given set, but surjectivity is only defined relative
the entire universe of the target type.›
definition
surj_on :: "['a ==> 'b, 'a set, 'b set] ==> bool"where "surj_on f A B ⟷ (∀y∈B. ∃x∈A. f(x)=y)"
definition
bij_on :: "['a ==> 'b, 'a set, 'b set] ==> bool"where "bij_on f A B ⟷ inj_on f A & surj_on f A B"
definition
equinumerous :: "['a set, 'b set] ==> bool" (infix‹≅›40) where "equinumerous A B ⟷ (∃f. bij_betw f A B)"
lemma bij_betw_eq: "bij_betw f A B ⟷ inj_on f A ∧ (∀y∈B. ∃x∈A. f(x)=y) ∧ (∀x∈A. f x ∈ B)" unfolding bij_betw_def by auto
theorem (in Yoneda) Yoneda: assumes1: "A ∈ Ob" shows"F<o> A ≅ {u. u : Hom(A,_) ==> F in Func(AA,Set)}" unfolding equinumerous_def bij_betw_eq inj_on_def proof (intro exI conjI bexI ballI impI)
― ‹Sandwich is injective› fix x and y assume2: "x ∈ F<o> A"and3: "y ∈ F<o> A" and4: "σ(A,x) = σ(A,y)" hence"σ\<leftarrow>(A,σ(A,x)) = σ\<leftarrow>(A,σ(A,y))" by simp with unsandwich_left_inverse show"x = y" by (simp add: 123) next
― ‹Sandwich covers F A› fix u assume"u ∈ {y. y : Hom(A,_) ==> F in Func (AA,Set)}" hence2: "u : Hom(A,_) ==> F in Func (AA,Set)" by simp with1show"σ(A,σ\<leftarrow>(A,u)) = u" by (rule unsandwich_right_inverse)
― ‹Sandwich is into F A›(* there is really similar reasoning elsewhere*) from1and2 have"u A ∈ hom Set (Hom A A) (F<o> A)" by (simp add: natural_transformation_def natural_transformation_axioms_def homf_def) hence"u A ∈ ar Set"and"dom Set (u A) = Hom A A"and"cod Set (u A) = F<o> A" by (simp_all add: hom_def) hence uAfuncset: "set_func (u A) : (Hom A A) → (F<o> A)" by (simp add: Set_def set_cat_def set_arrow_def) from1have"Id A ∈ Hom A A" .. with uAfuncset show"σ\<leftarrow>(A,u) ∈ F<o> A" by (simp add: unsandwich_def, rule funcset_mem) next fix x assume"x ∈ F<o> A" with1have"σ(A,x) : Hom(A,_) ==> F in Func (AA,Set)" by (rule sandwich_natural) thus"σ(A,x) ∈ {y. y : Hom(A,_) ==> F in Func (AA,Set)}" by simp qed
end
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-06-10)
¤
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.