Definitions and constructions for free extensions
record Extension : {Pres : Presentation} -> Model Pres -> Setoid -> Type
MkExtension : {0 Pres : Presentation} -> {0 A : Model Pres} -> {0 X : Setoid} -> (Model : Model Pres) -> A ~> Model -> X ~> cast Model -> Extension A X
.Embed : {0 Pres : Presentation} -> {0 A : Model Pres} -> {0 X : Setoid} -> ({rec:0} : Extension A X) -> A ~> Model {rec:0}
.Model : {0 Pres : Presentation} -> {0 A : Model Pres} -> {0 X : Setoid} -> Extension A X -> Model Pres
.Var : {0 Pres : Presentation} -> {0 A : Model Pres} -> {0 X : Setoid} -> ({rec:0} : Extension A X) -> X ~> cast (Model {rec:0})
.Model : {0 Pres : Presentation} -> {0 A : Model Pres} -> {0 X : Setoid} -> Extension A X -> Model Pres
Model : {0 Pres : Presentation} -> {0 A : Model Pres} -> {0 X : Setoid} -> Extension A X -> Model Pres
.Embed : {0 Pres : Presentation} -> {0 A : Model Pres} -> {0 X : Setoid} -> ({rec:0} : Extension A X) -> A ~> Model {rec:0}
Embed : {0 Pres : Presentation} -> {0 A : Model Pres} -> {0 X : Setoid} -> ({rec:0} : Extension A X) -> A ~> Model {rec:0}
.Var : {0 Pres : Presentation} -> {0 A : Model Pres} -> {0 X : Setoid} -> ({rec:0} : Extension A X) -> X ~> cast (Model {rec:0})
Var : {0 Pres : Presentation} -> {0 A : Model Pres} -> {0 X : Setoid} -> ({rec:0} : Extension A X) -> X ~> cast (Model {rec:0})
record (~>) : {Pres : Presentation} -> {A : Model Pres} -> {X : Setoid} -> Extension A X -> Extension A X -> Type
MkExtensionMorphism : {0 Pres : Presentation} -> {0 A : Model Pres} -> {0 X : Setoid} -> {0 Extension1 : Extension A X} -> {0 Extension2 : Extension A X} -> (H : Extension1 .Model ~> Extension2 .Model) -> ((cast A ~~> Extension2 .Model) .equivalence) .relation (H . Extension1 .Embed) (Extension2 .Embed) -> ((X ~~> cast (Extension2 .Model)) .equivalence) .relation (H .H . Extension1 .Var) (Extension2 .Var) -> Extension1 ~> Extension2
.H : {0 Pres : Presentation} -> {0 A : Model Pres} -> {0 X : Setoid} -> {0 Extension1 : Extension A X} -> {0 Extension2 : Extension A X} -> Extension1 ~> Extension2 -> Extension1 .Model ~> Extension2 .Model
.PreserveEmbed : {0 Pres : Presentation} -> {0 A : Model Pres} -> {0 X : Setoid} -> {0 Extension1 : Extension A X} -> {0 Extension2 : Extension A X} -> ({rec:0} : Extension1 ~> Extension2) -> ((cast A ~~> Extension2 .Model) .equivalence) .relation (H {rec:0} . Extension1 .Embed) (Extension2 .Embed)
.PreserveVar : {0 Pres : Presentation} -> {0 A : Model Pres} -> {0 X : Setoid} -> {0 Extension1 : Extension A X} -> {0 Extension2 : Extension A X} -> ({rec:0} : Extension1 ~> Extension2) -> ((X ~~> cast (Extension2 .Model)) .equivalence) .relation ((H {rec:0}) .H . Extension1 .Var) (Extension2 .Var)
.H : {0 Pres : Presentation} -> {0 A : Model Pres} -> {0 X : Setoid} -> {0 Extension1 : Extension A X} -> {0 Extension2 : Extension A X} -> Extension1 ~> Extension2 -> Extension1 .Model ~> Extension2 .Model
H : {0 Pres : Presentation} -> {0 A : Model Pres} -> {0 X : Setoid} -> {0 Extension1 : Extension A X} -> {0 Extension2 : Extension A X} -> Extension1 ~> Extension2 -> Extension1 .Model ~> Extension2 .Model
.PreserveEmbed : {0 Pres : Presentation} -> {0 A : Model Pres} -> {0 X : Setoid} -> {0 Extension1 : Extension A X} -> {0 Extension2 : Extension A X} -> ({rec:0} : Extension1 ~> Extension2) -> ((cast A ~~> Extension2 .Model) .equivalence) .relation (H {rec:0} . Extension1 .Embed) (Extension2 .Embed)
PreserveEmbed : {0 Pres : Presentation} -> {0 A : Model Pres} -> {0 X : Setoid} -> {0 Extension1 : Extension A X} -> {0 Extension2 : Extension A X} -> ({rec:0} : Extension1 ~> Extension2) -> ((cast A ~~> Extension2 .Model) .equivalence) .relation (H {rec:0} . Extension1 .Embed) (Extension2 .Embed)
.PreserveVar : {0 Pres : Presentation} -> {0 A : Model Pres} -> {0 X : Setoid} -> {0 Extension1 : Extension A X} -> {0 Extension2 : Extension A X} -> ({rec:0} : Extension1 ~> Extension2) -> ((X ~~> cast (Extension2 .Model)) .equivalence) .relation ((H {rec:0}) .H . Extension1 .Var) (Extension2 .Var)
PreserveVar : {0 Pres : Presentation} -> {0 A : Model Pres} -> {0 X : Setoid} -> {0 Extension1 : Extension A X} -> {0 Extension2 : Extension A X} -> ({rec:0} : Extension1 ~> Extension2) -> ((X ~~> cast (Extension2 .Model)) .equivalence) .relation ((H {rec:0}) .H . Extension1 .Var) (Extension2 .Var)
Extender : Extension a x -> Type
0 ExtenderFunction : Extension a x -> Type
0 ExtenderIsHomomorphism : (frex : Extension a x) -> ExtenderFunction frex -> Type
0 ExtenderIsAlgebraHomomorphism : (frex : Extension a x) -> ExtenderFunction frex -> Type
0 ExtenderHomomorphism : Extension a x -> Type
0 ExtenderPreservesEmbedding : (frex : Extension a x) -> ExtenderHomomorphism frex -> Type
0 ExtenderPreservesVars : (frex : Extension a x) -> ExtenderHomomorphism frex -> Type
0 extenderIsUnique : (frex : Extension a x) -> Extender frex -> Type
0 Uniqueness : Extension a x -> Type
0 SinceExtenderIsUnique : (frex : Extension a x) -> (extender : Extender frex) -> extenderIsUnique frex extender -> Uniqueness frex
record Universality : {Pres : Presentation} -> {A : Model Pres} -> {X : Setoid} -> Extension A X -> Type
IsUniversal : {0 Pres : Presentation} -> {0 A : Model Pres} -> {0 X : Setoid} -> {0 Frex : Extension A X} -> Extender Frex -> Uniqueness Frex -> Universality Frex
.Exists : {0 Pres : Presentation} -> {0 A : Model Pres} -> {0 X : Setoid} -> {0 Frex : Extension A X} -> Universality Frex -> Extender Frex
.Unique : {0 Pres : Presentation} -> {0 A : Model Pres} -> {0 X : Setoid} -> {0 Frex : Extension A X} -> Universality Frex -> Uniqueness Frex
.Exists : {0 Pres : Presentation} -> {0 A : Model Pres} -> {0 X : Setoid} -> {0 Frex : Extension A X} -> Universality Frex -> Extender Frex
Exists : {0 Pres : Presentation} -> {0 A : Model Pres} -> {0 X : Setoid} -> {0 Frex : Extension A X} -> Universality Frex -> Extender Frex
.Unique : {0 Pres : Presentation} -> {0 A : Model Pres} -> {0 X : Setoid} -> {0 Frex : Extension A X} -> Universality Frex -> Uniqueness Frex
Unique : {0 Pres : Presentation} -> {0 A : Model Pres} -> {0 X : Setoid} -> {0 Frex : Extension A X} -> Universality Frex -> Uniqueness Frex
record Frex : {Pres : Presentation} -> Model Pres -> Setoid -> Type
MkFrex : {0 Pres : Presentation} -> {0 A : Model Pres} -> {0 X : Setoid} -> (Data : Extension A X) -> Universality Data -> Frex A X
.Data : {0 Pres : Presentation} -> {0 A : Model Pres} -> {0 X : Setoid} -> Frex A X -> Extension A X
.UP : {0 Pres : Presentation} -> {0 A : Model Pres} -> {0 X : Setoid} -> ({rec:0} : Frex A X) -> Universality (Data {rec:0})
.Data : {0 Pres : Presentation} -> {0 A : Model Pres} -> {0 X : Setoid} -> Frex A X -> Extension A X
Data : {0 Pres : Presentation} -> {0 A : Model Pres} -> {0 X : Setoid} -> Frex A X -> Extension A X
.UP : {0 Pres : Presentation} -> {0 A : Model Pres} -> {0 X : Setoid} -> ({rec:0} : Frex A X) -> Universality (Data {rec:0})
UP : {0 Pres : Presentation} -> {0 A : Model Pres} -> {0 X : Setoid} -> ({rec:0} : Frex A X) -> Universality (Data {rec:0})
CoproductAlgebraWithFree : (free : Free pres x) -> Coproduct a ((free .Data) .Model) -> Frex a x
CoproductsAndFreeFrex : ((a : Model pres) -> (b : Model pres) -> Coproduct a b) -> Free pres x -> (a : Model pres) -> Frex a x
Frexlet : Type