lemma ZFfunDom: "|dom| (ZFfun A B f) = A" by (auto simp add: ZFfun_def ZFfunDom_def Fst)
lemma ZFfunCod: "|cod| (ZFfun A B f) = B" by (auto simp add: ZFfun_def ZFfunCod_def Snd Fst)
lemma SETfun: assumes"∀ x . x |∈| A ⟶ (f x) |∈| B" shows"isZFfun (ZFfun A B f)" proof(auto simp add: isZFfun_def ZFfun_def isOpair Fst Snd
ZFfunCod_def ZFfunDom_def isFun_Lambda domain_Lambda Let_def)
{ fix x have"x |∈| Range (Lambda A f) ==> x |∈| B" apply(insert isFun_Lambda[of A f]) apply (drule fun_range_witness[of "Lambda A f" x], simp) by (auto simp add: domain_Lambda Lambda_app assms)
} thus"subset (Range (Lambda A f)) B" by (auto simp add: subset_def)
{ fix x have"x |∈| (Lambda A f) ==> x |∈| A |×| Range (Lambda A f)" by(auto simp add: CartProd Lambda_def Repl Range)
} thus"(Lambda A f) |⊆| (A |×| Range (Lambda A f))" by (auto simp add: HOLZF.subset_def) qed
lemma ZFCartProd: assumes"x |∈| A |×| B" shows"Fst x |∈| A ∧ Snd x |∈| B ∧ isOpair x" proof- from CartProd obtain a b where"a |∈| A" and"b |∈| B" and"x = Opair a b"using assms by auto thus ?thesis using assms by (auto simp add: Fst Snd isOpair_def) qed
lemma ZFfunDomainOpair: assumes"isFun f" and"x |∈| Domain f" shows"Opair x (app f x) |∈| f" proof- have"∃! y . Opair x y |∈| f"using assms by (auto simp add: unique_fun_value) thus"Opair x (app f x) |∈| f"by (auto simp add: app_def intro: theI') qed
lemma ZFFunToLambda: assumes1: "isFun f" and2: "f |⊆| (Domain f) |×| (Range f)" shows"f = Lambda (Domain f) (λx. app f x)" proof(subst Ext, rule allI, rule iffI)
{ fix x assume a: "x |∈| f"show"x |∈| Lambda (Domain f) (λx. app f x)" proof(simp add: Lambda_def Repl, rule exI[of _ "(Fst x)"], rule conjI) have b:"isOpair x ∧ Fst x |∈| Domain f"using2 a by (auto simp add: subset_def ZFCartProd) thus"Fst x |∈| Domain f" .. hence"Opair (Fst x) (app f (Fst x)) |∈| f"using1by (simp add: ZFfunDomainOpair) moreoverhave"Opair (Fst x) (Snd x) |∈| f"using a 2by (auto simp add: FstSnd subset_def b) ultimatelyhave"Snd x = (app f (Fst x))"using1by (auto simp add: isFun_def) hence"Opair (Fst x) (app f (Fst x)) = Opair (Fst x) (Snd x)"by simp alsohave"... = x"using b by (simp add: FstSnd) finallyshow"x = Opair (Fst x) (app f (Fst x))" .. qed
} moreover
{ fix x assume a: "x |∈| Lambda (Domain f) (λx. app f x)"show"x |∈| f" proof- from Lambda_def obtain a where"a |∈| Domain f ∧ x = Opair a (app f a)" using a by (auto simp add: Repl) thus ?thesis using a 1by (auto simp add: ZFfunDomainOpair) qed
} qed
lemma ZFfunApp: assumes"x |∈| A" shows"(ZFfun A B f) |@| x = f x" proof- have"(ZFfun A B f) |@| x = app (Lambda A f) x"by (simp add: ZFfun_def ZFfunApp_def Snd) alsohave"... = f x"using assms by (simp add: Lambda_app) finallyshow ?thesis . qed
lemma ZFfun_ext: assumes"∀ x . x |∈| A ⟶ f x = g x" shows"(ZFfun A B f) = (ZFfun A B g)" proof- have"Lambda A f = Lambda A g"using assms by (auto simp add: Lambda_ext) thus ?thesis by (simp add: ZFfun_def) qed
lemma ZFfunExt: assumes"|dom| f = |dom| g"and"|cod| f = |cod| g"and funf: "isZFfun f"and fung: "isZFfun g" and"∧ x . x |∈| ( |dom| f) ==> f |@| x = g |@| x" shows"f = g" proof- have1: "f = ZFfun ( |dom| f) ( |cod| f) (λx. f |@| x)"using funf by (rule ZFfun) have"g = ZFfun ( |dom| g) ( |cod| g) (λx. g |@| x)"using fung by (rule ZFfun) hence2: "g = ZFfun ( |dom| f) ( |cod| f) (λx. g |@| x)"using assms by simp have"ZFfun ( |dom| f) ( |cod| f) (λx. f |@| x) = ZFfun ( |dom| f) ( |cod| f) (λx. g |@| x)" using assms by (simp add: ZFfun_ext) thus ?thesis using12by simp qed
lemma ZFfunDomAppCod: assumes"isZFfun f" and"x |∈| |dom|f" shows"f |@| x |∈| |cod|f" proof(simp add: ZFfunApp_def) have"app (Snd f) x |∈| Range (Snd f)"using assms by (auto simp add: fun_value_in_range ) thus"app (Snd f) x |∈| |cod|f"using assms by (auto simp add: HOLZF.subset_def) qed
lemma ZFfunComp: assumes"∀ x . x |∈| A ⟶ f x |∈| B" shows"(ZFfun A B f) |o| (ZFfun B C g) = ZFfun A C (g o f)" proof (simp add: ZFfunComp_def ZFfunDom ZFfunCod)
{ fix x assume a: "x |∈| A" have"ZFfun B C g |@| (ZFfun A B f |@| x) = (g o f) x" proof- have"(ZFfun A B f |@| x) = f x"using a by (simp add: ZFfunApp) hence"ZFfun B C g |@| (ZFfun A B f |@| x) = g (f x)"using assms a by (simp add: ZFfunApp) thus ?thesis by simp qed
} thus"ZFfun A C (λx. ZFfun B C g |@| (ZFfun A B f |@| x)) = ZFfun A C (g ∘ f)" by (simp add: ZFfun_ext) qed
lemma ZFfunCompApp: assumes a:"isZFfun f"and b:"isZFfun g"and c:"|dom|g = |cod|f" shows"f |o| g = ZFfun ( |dom| f) ( |cod| g) (λ x . g |@| (f |@| x))" proof- have1: "f = ZFfun ( |dom| f) ( |cod| f) (λ x . f |@| x)"using a by (rule ZFfun) have2: "g = ZFfun ( |dom| g) ( |cod| g) (λ x . g |@| x)"using b by (rule ZFfun) have3: "∀ x . x |∈| |dom|f ⟶ (λx. f |@| x) x |∈| |cod|f"using a by (simp add: ZFfunDomAppCod) hence4: "∀ x . x |∈| |dom|f ⟶ (λx. g |@| (f |@| x)) x |∈| |cod|g" using a b c by (simp add: ZFfunDomAppCod) have"f |o| g = ZFfun ( |dom| f) ( |cod| f) (λ x . f |@| x) |o| ZFfun ( |cod| f) ( |cod| g) (λ x . g |@| x)"using12 c by simp hence"f |o| g = ZFfun ( |dom| f) ( |cod| g) (λ x . g |@| (f |@| x))" using3by (simp add: ZFfunComp comp_def) thus ?thesis using4by (simp add: SETfun) qed
lemma ZFfunCompAppZFfun: assumes"isZFfun f"and"isZFfun g"and"|dom|g = |cod|f" shows"isZFfun (f |o| g)" proof- have"f |o| g = ZFfun ( |dom| f) ( |cod| g) (λ x . g |@| (f |@| x))"using assms by (simp add: ZFfunCompApp) moreoverhave"∀ x . x |∈| |dom|f ⟶ ((λ x . g |@| (f |@| x)) x) |∈| |cod|g"using assms by (simp add: ZFfunDomAppCod) ultimatelyshow ?thesis by (simp add: SETfun) qed
lemma ZFfunCompAssoc: assumes a: "isZFfun f"and b:"isZFfun h"and c:"|cod|g = |dom|h" and d:"isZFfun g"and e:"|cod|f = |dom|g" shows"f |o| g |o| h = f |o| (g |o| h)" proof- have1: "f = ZFfun ( |dom| f) ( |cod| f) (λ x . f |@| x)"using a by (rule ZFfun) have2: "g = ZFfun ( |dom| g) ( |cod| g) (λ x . g |@| x)"using d by (rule ZFfun) have3: "h = ZFfun ( |dom| h) ( |cod| h) (λ x . h |@| x)"using b by (rule ZFfun) have4: "∀ x . x |∈| |dom|f ⟶ (λx. f |@| x) x |∈| |cod|f"using a by (simp add: ZFfunDomAppCod) have"(f |o| g) |o| h = ZFfun ( |dom| f) ( |cod| h) (λ x . h |@| (g |@| (f |@| x)))" proof- have5: "∀ x . x |∈| |dom|f ⟶ (λx. g |@| (f |@| x)) x |∈| |cod|g" using4 e d by (simp add: ZFfunDomAppCod) have"(f |o| g) |o| h = (ZFfun ( |dom| f) ( |cod| f) (λ x . f |@| x) |o| ZFfun ( |cod| f) ( |cod| g) (λ x . g |@| x)) |o| ZFfun ( |cod| g) ( |cod| h) (λ x . h |@| x)" using123 c e by (simp) thus ?thesis using45by (simp add: ZFfunComp comp_def) qed moreoverhave"f |o| (g |o| h) = ZFfun ( |dom| f) ( |cod| h) (λ x . h |@| (g |@| (f |@| x)))" proof- have5: "∀ x . x |∈| |dom|g ⟶ (λx. g |@| x) x |∈| |cod|g"using d by (simp add: ZFfunDomAppCod) have"f |o| (g |o| h) = ZFfun ( |dom| f) ( |dom| g) (λ x . f |@| x) |o| (ZFfun ( |dom| g) ( |cod| g) (λ x . g |@| x) |o| ZFfun ( |cod| g) ( |cod| h) (λ x . h |@| x))" using123 c e by (simp) thus ?thesis using4 e 5by (simp add: ZFfunComp comp_def) qed ultimatelyshow ?thesis by simp qed
lemma ZFfunCompAppDomCod: assumes"isZFfun f"and"isZFfun g"and"|dom|g = |cod|f" shows"|dom| (f |o| g) = |dom| f ∧ |cod| (f |o| g) = |cod| g" proof- have"f |o| g = ZFfun ( |dom| f) ( |cod| g) (λ x . g |@| (f |@| x))"using assms by (simp add: ZFfunCompApp) thus ?thesis by (simp add: ZFfunDom ZFfunCod) qed
lemma ZFfunIdLeft: assumes a: "isZFfun f"shows"(ZFfun ( |dom|f) ( |dom|f) (λx. x)) |o| f = f" proof- let ?g = "(ZFfun ( |dom|f) ( |dom|f) (λx. x))" have"ZFfun ( |dom| f) ( |cod| f) (λ x . f |@| x) = ?g |o| f"using a by (simp add: ZFfun_ext ZFfunApp ZFfunCompApp SETfun ZFfunCod ZFfunDom) moreoverhave"f = ZFfun ( |dom| f) ( |cod| f) (λ x . f |@| x)"using a by (rule ZFfun) ultimatelyshow ?thesis by simp qed
lemma ZFfunIdRight: assumes a: "isZFfun f"shows"f |o| (ZFfun ( |cod|f) ( |cod|f) (λx. x)) = f" proof- let ?g = "(ZFfun ( |cod|f) ( |cod|f) (λx. x))" have1: "∀ x . x |∈| |dom|f ⟶ (λx. f |@| x) x |∈| |cod|f"using a by (simp add: ZFfunDomAppCod) have"ZFfun ( |dom| f) ( |cod| f) (λ x . f |@| x) = f |o| ?g"using a 1 by (simp add: ZFfun_ext ZFfunApp ZFfunCompApp SETfun ZFfunCod ZFfunDom) moreoverhave"f = ZFfun ( |dom| f) ( |cod| f) (λ x . f |@| x)"using a by (rule ZFfun) ultimatelyshow ?thesis by simp qed
lemma SETdom: "isZFfun (ZFfun A B f) ==> dom ZFfun A B f = A" by(simp add: SET_def MakeCat_def SET'_def ZFfunDom)
lemma SETId: assumes"x |∈| X"shows"(Id SET X) |@| x = x" proof- have"X ∈ Obj SET"by (simp add: SET_def SET'_def MakeCat_def) hence"isZFfun(Id SET X)"by (simp add: SETCategory Category.CatIdInMor SETmor) moreoverhave"(Id SET X) = ZFfun X X (λx. x)"using assms by (simp add: SET_def SET'_def MakeCat_def) ultimatelyshow ?thesis using assms by (simp add: ZFfunApp) qed
lemma SETCompE[elim]: "[f ≈> g ; [isZFfun f ; isZFfun g ; |cod| f = |dom| g]==> R]==> R" by (auto simp add: SET_def SET'_def MakeCat_def)
lemma SETmapsTo: "f maps X to Y ==> isZFfun f ∧ |dom| f = X ∧ |cod| f = Y" by(auto simp add: MapsTo_def SET_def SET'_def MakeCat_def)
lemma SETComp: assumes"f ≈> g"shows"f ;; g = f |o| g" proof- have a: "f ≈> SET' g"using assms by (simp add: SET_def) have"f ;; g = f ;; SET' g"by (simp add: SET_def) alsohave"... = f ;;' g"using a by (simp add: MakeCatComp2) finallyshow ?thesis by (simp add: SET'_def) qed
lemma SETCompAt: assumes"f ≈>g"and"x |∈| |dom| f"shows"(f ;;g) |@| x = g |@| (f |@| x)" proof- have"f ;; g = f |o| g"using assms by (simp add: SETComp) alsohave"... = ZFfun ( |dom| f) ( |cod| g) (λ x . g |@| (f |@| x))"using assms by (auto simp add: ZFfunCompApp) finallyshow ?thesis using assms by (simp add: ZFfunApp) qed
lemma SETZFfun: assumes"f maps X to Y"shows"f = ZFfun X Y (λx . f |@| x)" proof- have"isZFfun f"using assms by (auto simp add: SETmor) hence"f = ZFfun ( |dom| f) ( |cod| f) (λx. f |@| x)"by (simp add: ZFfun) moreoverhave"|dom| f = X"and"|cod| f = Y"using assms by (auto simp add: SET_def SET'_def MakeCat_def) ultimatelyshow ?thesis by (simp) qed
lemma SETfunDomAppCod: assumes"f mapsX to Y"and"x |∈| X" shows"f |@| x |∈| Y" proof- have1: "isZFfun f"and"|dom| f = X"and2: "|cod| f = Y"using assms by (auto simp add: SETmapsTo) hence"x |∈| |dom| f"using assms by simp hence"f |@| x |∈| |cod| f"using1by (simp add: ZFfunDomAppCod) thus ?thesis using2by simp qed
(*Locally Small Category has an injective map from the morphisms to ZF*) record ('o,'m) LSCategory = "('o,'m) Category" +
mor2ZF :: "'m ==> ZF" (‹m2zı_› [70] 70)
definition
ZF2mor (‹z2mı_› [70] 70) where "ZF2mor C f ≡ THE m . m ∈ mor∧ m2z m = f"
definition "HOMCollection C X Y ≡ {m2z f | f . f maps X to Y}"
definition
HomSet (‹Homı _ _› [65, 65] 65) where "HomSet C X Y ≡ implode (HOMCollection C X Y)"
locale LSCategory = Category + assumes mor2ZFInj: "[x ∈ mor ; y ∈ mor ; m2z x = m2z y]==> x = y" and HOMSetIsSet: "[X ∈ obj ; Y ∈ obj]==> HOMCollection C X Y ∈ range explode" and m2zExt: "mor2ZF C ∈ extensional (Mor C)"
lemma [elim]: "[LSCategory C ; [Category C ; [x ∈ mor ; y ∈ mor ; m2z x = m2z y]==> x = y; [X ∈ obj ; Y ∈ obj]==> HOMCollection C X Y ∈ range explode]==> R]==> R" by(simp add: LSCategory_def LSCategory_axioms_def)
definition
HomFtorMap :: "('o,'m,'a) LSCategory_scheme ==> 'o ==> 'm ==> ZF" (‹Homı[_,_]› [65,65] 65) where "HomFtorMap C X g ≡ ZFfun (Hom X (dom g)) (Hom X (cod g)) (λ f . m2z ((z2m f) ;;g))"
definition
HomFtor' :: "('o,'m,'a) LSCategory_scheme ==> 'o ==> ('o,ZF,'m,ZF,(mor2ZF :: 'm ==> ZF, … :: 'a),unit) Functor" (‹HomPı[_,←-]› [65] 65) where "HomFtor' C X ≡( CatDom = C, CatCod = SET , MapM = λ g . Hom[X,g] )"
definition HomFtor (‹Homı[_,←-]› [65] 65) where"HomFtor C X ≡ MakeFtor (HomFtor' C X)"
lemma [simp]: "LSCategory C ==> Category C" by (simp add: LSCategory_def)
lemma (in LSCategory) m2zz2m: assumes"f maps X to Y"shows"(m2z f) |∈| (Hom X Y)" proof- have"X ∈ Obj C"and"Y ∈ Obj C"using assms by (simp add: MapsToObj)+ hence"HOMCollection C X Y ∈ range explode"using assms by (simp add: HOMSetIsSet) moreoverhave"(m2z f) ∈ HOMCollection C X Y"using assms by (auto simp add: HOMCollection_def) ultimatelyhave"(m2z f) |∈| implode (HOMCollection C X Y)"by (simp add: Elem_implode) thus ?thesis by (simp add: HomSet_def) qed
lemma (in LSCategory) m2zz2mInv: assumes"f ∈ mor" shows"z2m (m2z f) = f" proof- have1: "f ∈ mor ∧ m2z f = m2z f"using assms by simp moreoverhave"∃! m . m ∈ mor ∧ m2z m = (m2z f)" proof(rule ex_ex1I) show"∃ m . m ∈ mor ∧ m2z m = (m2z f)" by(rule exI[of _ f], insert 1, simp)
{ fix m y assume"m ∈ mor ∧ m2z m = (m2z f)"and"y ∈ mor ∧ m2z y = (m2z f)" thus"m = y"by(simp add: mor2ZFInj)
} qed ultimatelyshow ?thesis by(simp add: ZF2mor_def the1_equality) qed
lemma (in LSCategory) z2mm2z: assumes"X ∈ obj"and"Y ∈ obj"and"f |∈| (Hom X Y)" shows"z2m f maps X to Y ∧ m2z (z2m f) = f" proof- have1: "∃ m . m maps X to Y ∧ m2z m = f" proof- have"HOMCollection C X Y ∈ range explode"using assms by (simp add: HOMSetIsSet) moreoverhave"f |∈| implode (HOMCollection C X Y)"using assms(3) by (simp add: HomSet_def) ultimatelyhave"f ∈ HOMCollection C X Y"by (simp add: HOLZF.Elem_implode) thus ?thesis by (auto simp add: HOMCollection_def) qed have2: "∃! m . m ∈ mor ∧ m2z m = f" proof(rule ex_ex1I) show"∃ m . m ∈ mor ∧ m2z m = f" proof- from1obtain m where"m ∈ mor ∧ m2z m = f"by auto thus ?thesis by auto qed
{ fix m y assume"m ∈ mor ∧ m2z m = f"and"y ∈ mor ∧ m2z y = f" thus"m = y"by(simp add: mor2ZFInj)
} qed thus ?thesis proof- from1obtain a where3: "a maps X to Y ∧ m2z a = f"by auto have4: "a ∈ mor"using3by auto have"z2m f = a" apply (auto simp add: 3 ZF2mor_def[of _ f]) apply (rule the1_equality[of "λ m . m ∈ mor ∧ m2z m = f" a]) apply (auto simp add: 234) done thus ?thesis by (simp add: 3) qed qed
lemma HomFtorMapLemma1: assumes a: "LSCategory C"and b: "X ∈ obj"and c: "f ∈ mor"and d: "x |∈| (Hom X (dom f))" shows"(m2z((z2mx) ;; f)) |∈| (Hom X (cod f))" proof- have1: "dom f ∈ obj"and2: "cod f ∈ obj"using a c by (simp add: Category.Simps)+ have"z2m x maps X to (dom f)"using a b d 1by (auto simp add: LSCategory.z2mm2z) hence"(z2m x) ;; f maps X to (cod f)"using a c by (auto intro: Category.Ccompt) hence"(m2z ((z2m x) ;; f)) |∈| (Hom X (cod f))"using a b d 2 by (auto simp add: LSCategory.m2zz2m) thus ?thesis using c by (simp add: Category.Simps) qed
lemma HomFtorInMor': assumes"LSCategory C"and"X ∈ obj"and"f ∈ mor" shows"Hom[X,f] ∈ mor'" proof(simp add: HomFtorMap_def)
{ fix x assume"x |∈| (Hom X dom f)" hence"m2z((z2mx) ;; f) |∈| (Hom X cod f)"using assms by (blast intro: HomFtorMapLemma1)
} hence"∀ x . x |∈| (Hom X dom f) ⟶ (m2z((z2mx) ;; f)) |∈| (Hom X cod f)"by (simp) hence"isZFfun (ZFfun (Hom X dom f) (Hom X cod f) (λ x . m2z((z2mx) ;; f)))" by (simp add: SETfun) thus"ZFfun (Hom X dom f) (Hom X cod f) (λ x . m2z((z2mx) ;; f)) ∈ mor'" by (simp add: SET'_def) qed
lemma HomFtorMapsTo: "[LSCategory C ; X ∈ obj; f ∈ mor]==> Hom[X,f] maps HomX (dom f) to HomX (cod f)" by (simp add: HomFtorMor' SET_def MakeCatMapsTo)
lemma HomFtorMor: assumes"LSCategory C"and"X ∈ obj"and"f ∈ mor" shows"Hom[X,f] ∈ Mor SET"and"dom (Hom[X,f]) = HomX (dom f)" and"cod (Hom[X,f]) = HomX (cod f)" proof- have"Hom[X,f] maps HomX (dom f) to HomX (cod f)"using assms by (simp add: HomFtorMapsTo) thus"Hom[X,f] ∈ Mor SET"and"dom (Hom[X,f]) = HomX (dom f)"and"cod (Hom[X,f]) = HomX (cod f)" by auto qed
lemma HomFtorCompDef': assumes"LSCategory C"and"X ∈ obj"and"f ≈> g" shows"(Hom[X,f]) ≈>' (Hom[X,g])" proof(rule CompDefinedI) have a: "f ∈ mor"and b: "g ∈ mor"using assms(3) by auto thus"Hom[X,f] ∈ mor'"and"Hom[X,g] ∈ mor'"using assms by (simp add:HomFtorInMor')+ have"(Hom[X,f]) maps' Hom X dom f to Hom X cod f" and"(Hom[X,g]) maps' Hom X dom g to Hom X cod g"using assms a b by (simp add: HomFtorMor')+ hence"cod' (Hom[X,f]) = Hom X (cod f)" and"dom' (Hom[X,g]) = Hom X (dom g)"by auto moreoverhave"(cod f) = (dom g)"using assms(3) by auto ultimatelyshow"cod' (Hom[X,f]) = dom' (Hom[X,g])"by simp qed
lemma HomFtorDist': assumes a: "LSCategory C"and b: "X ∈ obj"and c: "f ≈> g" shows"(Hom[X,f]) ;;' (Hom[X,g]) = Hom[X,f ;; g]" proof- let ?A = "(Hom X dom f)" let ?B = "(Hom X dom g)" let ?C = "(Hom X cod g)" let ?f = "(λh. m2z((z2mh) ;; f))" let ?g = "(λf. m2z((z2mf) ;; g))" have1: "cod f = dom g"using c by auto have2: "dom (f ;; g) = dom f"and3: "cod (f ;; g) = cod g"using assms by (auto simp add: Category.MapsToMorDomCod) have"(Hom[X,f]) ;;' (Hom[X,g]) = (ZFfun ?A (Hom X cod f) ?f) |o| (ZFfun ?B ?C ?g)" by (simp add: HomFtorMap_def SET'_def) alsohave"... = (ZFfun ?A ?B ?f) |o| (ZFfun ?B ?C ?g)"using1by simp alsohave"... = ZFfun ?A ?C (?g o ?f)" proof(rule ZFfunComp, rule allI, rule impI)
{ fix h assume aa: "h |∈| ?A"show"?f h |∈| ?B" proof- have"f ∈ mor"using assms by auto hence"?f h |∈| (Hom X cod f)"using assms aa by (simp add: HomFtorMapLemma1) thus ?thesis using1by simp qed
} qed alsohave"... = ZFfun ?A ?C (λh. m2z((z2mh) ;; (f ;; g)))" proof(rule ZFfun_ext, rule allI, rule impI, simp add: comp_def)
{ fix h assume aa: "h |∈| ?A" show"m2z ((z2m (m2z((z2m h) ;; f))) ;; g) = m2z ((z2m h) ;; (f ;; g))" proof- have bb: "(z2m h) ≈> f" proof(rule CompDefinedI) show"f ∈ mor"using c by auto hence"dom f ∈ obj"using a by (simp add: Category.Cdom) hence"(z2m h) maps X to dom f"using assms aa by (simp add: LSCategory.z2mm2z) thus"(z2m h) ∈ mor"and"cod (z2m h) = dom f"by auto qed hence"(z2m h) ;; f ∈ mor"using a by (simp add: Category.MapsToMorDomCod) hence"z2m (m2z ((z2m h) ;; f)) = (z2m h) ;; f"using a by (simp add: LSCategory.m2zz2mInv) hence"m2z ((z2m (m2z((z2m h) ;; f))) ;; g) = m2z (((z2m h) ;; f) ;; g)"by simp alsohave"... = m2z ((z2m h) ;; (f ;; g))"using bb c a by (simp add: Category.Cassoc) finallyshow ?thesis . qed
} qed alsohave"... = ZFfun (Hom X dom (f ;; g)) (Hom X cod (f ;; g)) (λh. m2z((z2mh) ;; (f ;; g)))" using23by simp alsohave"... = Hom[X,f ;; g]"by (simp add: HomFtorMap_def) finallyshow ?thesis by (auto simp add: SET_def) qed
lemma HomFtorObj': assumes a: "LSCategory C" and b: "PreFunctor (HomP[X,←-])"and c: "X ∈ obj"and d: "Y ∈ obj" shows"(HomP[X,←-]) @@ Y = HomX Y" proof- let ?F = "(HomFtor' C X)" have"?F ## (id ?F Y) = Hom[X,id Y]"by (simp add: HomFtor'_def) alsohave"... = id ?F (HomX Y)"using assms by (simp add: HomFtorId HomFtor'_def) finallyhave"?F ## (id ?F Y) = id ?F (HomX Y)"by simp moreoverhave"HomX Y ∈ obj ?F"using assms by (simp add: HomFtorId HomFtor'_def SET_def SET'_def MakeCatObj) moreoverhave"Y ∈ obj ?F"using d by (simp add: HomFtor'_def) ultimatelyshow ?thesis using b by(simp add: PreFunctor.FmToFo[of ?F Y "HomX Y"]) qed
lemma HomFtorFtor': assumes a: "LSCategory C" and b: "X ∈ obj" shows"FunctorM (HomP[X,←-])" proof(intro_locales) show PF: "PreFunctor (HomP[X,←-])" proof(auto simp add: HomFtor'_def PreFunctor_def SETCategory a HomFtorDist b)
{ fix Z assume aa: "Z ∈ obj" show"∃ Y ∈ obj. Hom[X,id Z] = id Y" proof(rule_tac x="HomX Z"in Set.rev_bexI) show"Hom X Z ∈ obj"by (simp add: SET_def SET'_def MakeCatObj) show"Hom[X,id Z] = id (Hom X Z)"using assms aa by(simp add:HomFtorId) qed
} qed
{ fix f Z Y assume aa: "f mapsZ to Y" have"(HomP[X,←-]) ## f maps ((HomP[X,←-]) @@ Z) to ((HomP[X,←-]) @@ Y)" proof- have bb: "Z ∈ obj"and cc: "Y ∈ obj"using aa a by (simp add: Category.MapsToObj)+ have dd: "dom f = Z"and ee: "cod f = Y"and ff: "f ∈ mor"using aa by auto have"(HomP[X,←-]) ## f = Hom[X,f]"by (simp add: HomFtor'_def) moreoverhave"(HomP[X,←-]) @@ Z = HomX Z" and"(HomP[X,←-]) @@ Y = HomX Y"using assms bb cc PF by (simp add: HomFtorObj')+ moreoverhave"Hom[X,f] maps (HomX (dom f)) to (HomX (cod f))" using assms ff by (simp add: HomFtorMapsTo) ultimatelyshow ?thesis using dd ee by simp qed
} thus"FunctorM_axioms (HomP[X,←-])"using PF by (auto simp add: FunctorM_axioms_def HomFtor'_def) qed
lemma HomFtorFtor: assumes a: "LSCategory C" and b: "X ∈ obj" shows"Functor (Hom[X,←-])" proof- have"FunctorM (HomP[X,←-])"using assms by (rule HomFtorFtor') thus ?thesis by (simp add: HomFtor_def MakeFtor) qed
lemma HomFtorObj: assumes"LSCategory C" and"X ∈ obj"and"Y ∈ obj" shows"(Hom[X,←-]) @@ Y = HomX Y" proof- have"FunctorM (HomP[X,←-])"using assms by (simp add: HomFtorFtor') hence1: "PreFunctor (HomP[X,←-])"by (simp add: FunctorM_def) moreoverhave"CatDom (HomP[X,←-]) = C"by (simp add: HomFtor'_def) ultimatelyhave"(Hom[X,←-]) @@ Y = (HomP[X,←-]) @@ Y"using assms by (simp add: MakeFtorObj HomFtor_def) thus ?thesis using assms 1by (simp add: HomFtorObj') qed
definition
HomFtorMapContra :: "('o,'m,'a) LSCategory_scheme ==> 'm ==> 'o ==> ZF" (‹HomCı[_,_]› [65,65] 65) where "HomFtorMapContra C g X ≡ ZFfun (Hom (cod g) X) (Hom (dom g) X) (λ f . m2z (g ;;(z2m f)))"
definition
HomFtorContra' :: "('o,'m,'a) LSCategory_scheme ==> 'o ==> ('o,ZF,'m,ZF,(mor2ZF :: 'm ==> ZF, … :: 'a),unit) Functor" (‹HomPı[←-,_]› [65] 65) where "HomFtorContra' C X ≡( CatDom = (Op C), CatCod = SET , MapM = λ g . HomC[g,X] )"
definition HomFtorContra (‹Homı[←-,_]› [65] 65) where"HomFtorContra C X ≡ MakeFtor(HomFtorContra' C X)"
lemma HomFtorContraFtor: assumes"LSCategory C" and"X ∈ obj" shows"Ftor (Hom[←-,X]) : (Op C) ⟶ SET" proof(auto simp only: functor_abbrev_def) show"Functor (Hom[←-,X])" proof- have"Hom[←-,X] = Hom C[X,←-]"by (simp add: HomFtorContra) moreoverhave"LSCategory (Op C)"using assms by (simp add: LSCategory_Op) moreoverhave"X ∈ obj C"using assms by (simp add: OppositeCategory_def) ultimatelyshow ?thesis using assms by (simp add: HomFtorFtor) qed show"CatDom (Hom[←-,X]) = Op C"by(simp add: HomFtorContra_def HomFtorContra'_def MakeFtor_def) show"CatCod (Hom[←-,X]) = SET"by(simp add: HomFtorContra_def HomFtorContra'_def MakeFtor_def) qed
lemma HomFtorOpObj: assumes"LSCategory C" and"X ∈ obj"and"Y ∈ obj" shows"(Hom[←-,X]) @@ Y = HomY X" proof- have1: "X ∈ Obj (Op C)"and2: "Y ∈ Obj (Op C)"using assms by (simp add: OppositeCategory_def)+ have"(Hom[←-,X]) @@ Y = (Hom C[X,←-]) @@ Y"by (simp add: HomFtorContra) alsohave"... = (Hom C X Y)"using assms(1) 12by (simp add: LSCategory_Op HomFtorObj) alsohave"... = (HomY X)"by (simp add: Hom_Op) finallyshow ?thesis . qed
lemma HomCHomOp: "HomC[g,X] = Hom C[X,g]" apply (simp add: HomFtorContra'_def
HomFtor'_def HomFtorMapContra_def HomFtorMap_def mor2ZF_Op ZF2mor_Op Hom_Op) by (simp add: OppositeCategory_def)
lemma HomFtorContraMapsTo: assumes"LSCategory C"and"X ∈ obj"and"f ∈ mor" shows"HomC[f,X] maps Hom(cod f) X to Hom(dom f) X" proof- have"LSCategory (Op C)"using assms by(simp add: LSCategory_Op) moreoverhave"X ∈ Obj (Op C)"using assms by (simp add: OppositeCategory_def) moreoverhave"f ∈ Mor (Op C)"using assms by (simp add: OppositeCategory_def) ultimatelyhave"Hom C[X,f] maps Hom C X (dom C f) to Hom C X (cod C f)"using assms by (simp add: HomFtorMapsTo) moreoverhave"HomC[f,X] = Hom C[X,f]"by (simp add: HomCHomOp) moreoverhave"Hom C X (dom C f) = Hom(cod f) X" proof- have"Hom C X (dom C f) = Hom (dom C f) X"by (simp add: Hom_Op) thus ?thesis by (simp add: OppositeCategory_def) qed moreoverhave"Hom C X (cod C f) = Hom(dom f) X" proof- have"Hom C X (cod C f) = Hom (cod C f) X"by (simp add: Hom_Op) thus ?thesis by (simp add: OppositeCategory_def) qed ultimatelyshow ?thesis by simp qed
lemma HomFtorContraMor: assumes"LSCategory C"and"X ∈ obj"and"f ∈ mor" shows"HomC[f,X] ∈ Mor SET"and"dom (HomC[f,X]) = Hom(cod f) X" and"cod (HomC[f,X]) = Hom(dom f) X" proof- have"HomC[f,X] maps Hom(cod f) X to Hom(dom f) X"using assms by (simp add: HomFtorContraMapsTo) thus"HomC[f,X] ∈ Mor SET"and"dom (HomC[f,X]) = Hom(cod f) X" and"cod (HomC[f,X]) = Hom(dom f) X" by auto qed
lemma HomContraMor: assumes"LSCategory C"and"f ∈ Mor C" shows"(Hom[←-,X]) ## f = HomC[f,X]" by(simp add: HomFtorContra_def HomFtorContra'_def MakeFtor_def assms OppositeCategory_def)
(*This is used in the proof of the naturality of the Yoneda trans*) lemma HomCHom: assumes"LSCategory C"and"f ∈ Mor C"and"g ∈ Mor C" shows"(HomC[g,dom f]) ;; (Hom[dom g,f]) = (Hom[cod g,f]) ;; (HomC[g,cod f])" proof- have ObjDf: "dom f ∈ obj"and ObjDg: "dom g ∈ obj"using assms by (simp add: Category.Cdom)+ have ObjCg: "cod g ∈ obj"and ObjCf: "cod f ∈ obj"using assms by (simp add: Category.Ccod)+ have"(HomC[g,dom f]) ;; (Hom[dom g,f]) = (HomC[g,dom f]) |o| (Hom[dom g,f])" proof- have"(HomC[g,dom f]) ≈> (Hom[dom g,f])" proof(rule CompDefinedI) show"Hom[dom g,f] ∈ Mor SET"using assms ObjDg by (simp add: HomFtorMor) show"HomC[g,dom f] ∈ Mor SET"using assms ObjDf by (simp add: HomFtorContraMor) show"cod (HomC[g,dom f]) = dom (Hom[dom g,f])"using assms ObjDg ObjDf by (simp add: HomFtorMor HomFtorContraMor) qed thus ?thesis by(simp add: SET_def SET'_def MakeCatComp2) qed alsohave"... = ZFfun (Hom (cod g) (dom f)) (Hom (dom g) (cod f)) ((λ h . m2z ((z2m h) ;; f)) o (λ h . m2z (g ;; (z2m h))))" proof(simp add: HomFtorMapContra_def HomFtorMap_def, rule ZFfunComp, rule allI, rule impI)
{ fix x assume aa: "x |∈| (Hom (cod g) (dom f))" show"(m2z(g ;; (z2mx))) |∈| (Hom (dom g) (dom f))" proof(rule LSCategory.m2zz2m, simp_all add: assms(1) ObjDg ObjDf) have"g maps (dom g) to (cod g)"using assms by auto moreoverhave"(z2mx) maps (cod g) to (dom f)"using aa ObjCg ObjDf assms(1) by (simp add: LSCategory.z2mm2z) ultimatelyshow"g ;; (z2mx) maps (dom g) to (dom f)"using assms(1) by (simp add: Category.Ccompt) qed
} qed alsohave"... = ZFfun (Hom (cod g) (dom f)) (Hom (dom g) (cod f)) ((λ h . m2z (g ;; (z2m h))) o (λ h . m2z ((z2m h) ;; f)))" proof(rule ZFfun_ext, rule allI, rule impI)
{ fix h assume aa: "h |∈| (Hom (cod g) (dom f))" show"((λ h . m2z ((z2m h) ;; f)) o (λ h . m2z (g ;; (z2m h)))) h = ((λ h . m2z (g ;; (z2m h))) o (λ h . m2z ((z2m h) ;; f))) h" proof- have MapsTo1: "(z2m h) maps (cod g) to (dom f)"using assms(1) ObjCg ObjDf aa by (simp add: LSCategory.z2mm2z) have CompDef1: "(z2m h) ≈> f" proof(rule CompDefinedI) show"f ∈ mor"using assms by simp show"(z2m h) ∈ mor"and"cod (z2m h) = dom f"using MapsTo1 by auto qed have CompDef2: "g ≈> (z2m h)" proof(rule CompDefinedI) show"g ∈ mor"using assms by simp thus"(z2m h) ∈ mor"and"cod g = dom (z2m h)"using MapsTo1 by auto qed have c1: "(z2m h) ;; f ∈ Mor C"using assms CompDef1 by (simp add: Category.MapsToMorDomCod) have c2: "g ;; (z2m h) ∈ Mor C"using assms CompDef2 by (simp add: Category.MapsToMorDomCod) have"g ;; (z2m (m2z ((z2m h) ;; f))) = g ;; ((z2m h) ;; f)"using assms(1) c1 by (simp add: LSCategory.m2zz2mInv) alsohave"... = (g ;; (z2m h)) ;; f"using CompDef1 CompDef2 assms by (simp add: Category.Cassoc) alsohave"... = (z2m (m2z (g ;; (z2m h)))) ;; f"using assms(1) c2 by (simp add: LSCategory.m2zz2mInv) finallyhave"g ;; (z2m (m2z ((z2m h) ;; f))) = (z2m (m2z (g ;; (z2m h)))) ;; f" . thus ?thesis by simp qed
} qed alsohave"... = (Hom[cod g,f]) |o| (HomC[g,cod f])" proof(simp add: HomFtorMapContra_def HomFtorMap_def, rule ZFfunComp[THEN sym], rule allI, rule impI)
{ fix x assume aa: "x |∈| (Hom cod g dom f)" show"m2z((z2mx) ;; f) |∈| (Hom cod g cod f)" proof(rule LSCategory.m2zz2m, simp_all add: assms(1) ObjCg ObjCf) have"f maps (dom f) to (cod f)"using assms by auto moreoverhave"(z2mx) maps (cod g) to (dom f)"using aa ObjCg ObjDf assms(1) by (simp add: LSCategory.z2mm2z) ultimatelyshow"(z2mx) ;; f maps cod g to cod f"using assms(1) by (simp add: Category.Ccompt) qed
} qed alsohave"... = (Hom[cod g,f]) ;; (HomC[g,cod f])" proof- have"(Hom[cod g,f]) ≈> (HomC[g,cod f])" proof(rule CompDefinedI) show"Hom[cod g,f] ∈ Mor SET"using assms ObjCg by (simp add: HomFtorMor) show"HomC[g,cod f] ∈ Mor SET"using assms ObjCf by (simp add: HomFtorContraMor) show"cod (Hom[cod g,f]) = dom (HomC[g,cod f])"using assms ObjCg ObjCf by (simp add: HomFtorMor HomFtorContraMor) qed thus ?thesis by(simp add: SET_def SET'_def MakeCatComp2) qed finallyshow ?thesis . qed
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.