mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-24 03:52:50 -06:00
refactor Morphisms.gf and InitialAndTerminal.gf
This commit is contained in:
@@ -1,35 +1,44 @@
|
|||||||
abstract InitialAndTerminal = Morphisms ** {
|
abstract InitialAndTerminal = Morphisms ** {
|
||||||
|
|
||||||
cat Initial (c : Category) ;
|
cat Initial ({c} : Category) (El c) ;
|
||||||
data initial : ({c} : Category)
|
data initial : ({c} : Category)
|
||||||
-> (x : El c)
|
-> (x : El c)
|
||||||
-> ((y : El c) -> Arrow x y)
|
-> ((y : El c) -> Arrow x y)
|
||||||
-> Initial c ;
|
-> Initial x ;
|
||||||
|
|
||||||
fun initEl : ({c} : Category)
|
fun initAr : ({c} : Category)
|
||||||
-> Initial c
|
-> ({x} : El c)
|
||||||
-> El c ;
|
-> Initial x
|
||||||
def initEl {c} (initial {c} x f) = x ;
|
-> (y : El c)
|
||||||
|
-> Arrow x y ;
|
||||||
|
def initAr {c} {x} (initial {c} x f) y = f y ;
|
||||||
|
|
||||||
fun initials2iso : ({c} : Category)
|
fun initials2iso : ({c} : Category)
|
||||||
-> ({x,y} : Initial c)
|
-> ({x,y} : El c)
|
||||||
-> Iso (initEl x) (initEl y) ;
|
-> (ix : Initial x)
|
||||||
|
-> (iy : Initial y)
|
||||||
|
-> Iso (initAr ix y) (initAr iy x) ;
|
||||||
-- def initials2iso = .. ;
|
-- def initials2iso = .. ;
|
||||||
|
|
||||||
cat Terminal (c : Category) ;
|
|
||||||
|
cat Terminal ({c} : Category) (El c) ;
|
||||||
data terminal : ({c} : Category)
|
data terminal : ({c} : Category)
|
||||||
-> (y : El c)
|
-> (y : El c)
|
||||||
-> ((x : El c) -> Arrow x y)
|
-> ((x : El c) -> Arrow x y)
|
||||||
-> Terminal c ;
|
-> Terminal y ;
|
||||||
|
|
||||||
fun termEl : ({c} : Category)
|
fun terminalAr : ({c} : Category)
|
||||||
-> Terminal c
|
-> (x : El c)
|
||||||
-> El c ;
|
-> ({y} : El c)
|
||||||
def termEl {c} (terminal {c} x f) = x ;
|
-> Terminal y
|
||||||
|
-> Arrow x y ;
|
||||||
|
def terminalAr {c} x {y} (terminal {c} y f) = f x ;
|
||||||
|
|
||||||
fun terminals2iso : ({c} : Category)
|
fun terminals2iso : ({c} : Category)
|
||||||
-> ({x,y} : Terminal c)
|
-> ({x,y} : El c)
|
||||||
-> Iso (termEl x) (termEl y) ;
|
-> (tx : Terminal x)
|
||||||
|
-> (ty : Terminal y)
|
||||||
|
-> Iso (terminalAr x ty) (terminalAr y tx) ;
|
||||||
-- def terminals2iso = .. ;
|
-- def terminals2iso = .. ;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
abstract Morphisms = Categories ** {
|
abstract Morphisms = Categories ** {
|
||||||
|
|
||||||
cat Iso ({c} : Category) (x,y : El c) ;
|
cat Iso ({c} : Category) ({x,y} : El c) (Arrow x y) (Arrow y x) ;
|
||||||
|
|
||||||
data iso : ({c} : Category)
|
data iso : ({c} : Category)
|
||||||
-> ({x,y} : El c)
|
-> ({x,y} : El c)
|
||||||
@@ -8,12 +8,23 @@ data iso : ({c} : Category)
|
|||||||
-> (g : Arrow y x)
|
-> (g : Arrow y x)
|
||||||
-> (EqAr (comp f g) (id y))
|
-> (EqAr (comp f g) (id y))
|
||||||
-> (EqAr (comp g f) (id x))
|
-> (EqAr (comp g f) (id x))
|
||||||
-> Iso x y ;
|
-> Iso f g ;
|
||||||
|
|
||||||
|
fun isoOp : ({c} : Category)
|
||||||
|
-> ({x,y} : El c)
|
||||||
|
-> ({f} : Arrow x y)
|
||||||
|
-> ({g} : Arrow y x)
|
||||||
|
-> Iso f g
|
||||||
|
-> Iso (opAr g) (opAr f) ;
|
||||||
|
def isoOp {c} {x} {y} {f} {g} (iso {c} {x} {y} f g id_fg id_gf) =
|
||||||
|
iso {Op c} (opAr g) (opAr f) (eqOp id_fg) (eqOp id_gf) ;
|
||||||
|
|
||||||
fun iso2mono : ({c} : Category)
|
fun iso2mono : ({c} : Category)
|
||||||
-> ({x,y} : El c)
|
-> ({x,y} : El c)
|
||||||
-> (Iso x y -> Mono x y) ;
|
-> ({f} : Arrow x y)
|
||||||
def iso2mono {c} {x} {y} (iso {c} {x} {y} f g id_fg id_gf) =
|
-> ({g} : Arrow y x)
|
||||||
|
-> (Iso f g -> Mono f) ;
|
||||||
|
def iso2mono {c} {x} {y} {f} {g} (iso {c} {x} {y} f g id_fg id_gf) =
|
||||||
mono f (\h,m,eq_fh_fm ->
|
mono f (\h,m,eq_fh_fm ->
|
||||||
eqSym (eqTran (eqIdR m) -- h = m
|
eqSym (eqTran (eqIdR m) -- h = m
|
||||||
(eqTran (eqCompR id_gf m) -- id . m = h
|
(eqTran (eqCompR id_gf m) -- id . m = h
|
||||||
@@ -26,8 +37,10 @@ def iso2mono {c} {x} {y} (iso {c} {x} {y} f g id_fg id_gf) =
|
|||||||
|
|
||||||
fun iso2epi : ({c} : Category)
|
fun iso2epi : ({c} : Category)
|
||||||
-> ({x,y} : El c)
|
-> ({x,y} : El c)
|
||||||
-> (Iso x y -> Epi x y) ;
|
-> ({f} : Arrow x y)
|
||||||
def iso2epi {c} {x} {y} (iso {c} {x} {y} f g id_fg id_gf) =
|
-> ({g} : Arrow y x)
|
||||||
|
-> (Iso f g -> Epi f) ;
|
||||||
|
def iso2epi {c} {x} {y} {f} {g} (iso {c} {x} {y} f g id_fg id_gf) =
|
||||||
epi {c} {x} {y} f (\{z},h,m,eq_hf_mf ->
|
epi {c} {x} {y} f (\{z},h,m,eq_hf_mf ->
|
||||||
eqSym (eqTran (eqIdL m) -- h = m
|
eqSym (eqTran (eqIdL m) -- h = m
|
||||||
(eqTran (eqCompL m id_fg) -- m . id = h
|
(eqTran (eqCompL m id_fg) -- m . id = h
|
||||||
@@ -38,21 +51,21 @@ def iso2epi {c} {x} {y} (iso {c} {x} {y} f g id_fg id_gf) =
|
|||||||
(eqCompR eq_hf_mf g))))))))) ; -- (h . f) . g = (m . f) . g
|
(eqCompR eq_hf_mf g))))))))) ; -- (h . f) . g = (m . f) . g
|
||||||
-- h . f = m . f
|
-- h . f = m . f
|
||||||
|
|
||||||
cat Mono ({c} : Category) (x,y : El c) ;
|
cat Mono ({c} : Category) ({x,y} : El c) (Arrow x y) ;
|
||||||
|
|
||||||
data mono : ({c} : Category)
|
data mono : ({c} : Category)
|
||||||
-> ({x,y} : El c)
|
-> ({x,y} : El c)
|
||||||
-> (f : Arrow x y)
|
-> (f : Arrow x y)
|
||||||
-> (({z} : El c) -> (h,m : Arrow z x) -> EqAr (comp f h) (comp f m) -> EqAr h m)
|
-> (({z} : El c) -> (h,m : Arrow z x) -> EqAr (comp f h) (comp f m) -> EqAr h m)
|
||||||
-> Mono x y ;
|
-> Mono f ;
|
||||||
|
|
||||||
|
|
||||||
cat Epi ({c} : Category) (x,y : El c) ;
|
cat Epi ({c} : Category) ({x,y} : El c) (Arrow x y) ;
|
||||||
|
|
||||||
data epi : ({c} : Category)
|
data epi : ({c} : Category)
|
||||||
-> ({x,y} : El c)
|
-> ({x,y} : El c)
|
||||||
-> (f : Arrow x y)
|
-> (f : Arrow x y)
|
||||||
-> (({z} : El c) -> (h,m : Arrow y z) -> EqAr (comp h f) (comp m f) -> EqAr h m)
|
-> (({z} : El c) -> (h,m : Arrow y z) -> EqAr (comp h f) (comp m f) -> EqAr h m)
|
||||||
-> Epi x y ;
|
-> Epi f ;
|
||||||
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user