Definitions and constructions for free extensions
record Extension : {Pres : Presentation} -> Model Pres -> Setoid -> TypeMkExtension : {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 PresModel : {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 -> TypeMkExtensionMorphism : {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 .ModelH : {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 -> Type0 ExtenderFunction : Extension a x -> Type0 ExtenderIsHomomorphism : (frex : Extension a x) -> ExtenderFunction frex -> Type0 ExtenderIsAlgebraHomomorphism : (frex : Extension a x) -> ExtenderFunction frex -> Type0 ExtenderHomomorphism : Extension a x -> Type0 ExtenderPreservesEmbedding : (frex : Extension a x) -> ExtenderHomomorphism frex -> Type0 ExtenderPreservesVars : (frex : Extension a x) -> ExtenderHomomorphism frex -> Type0 extenderIsUnique : (frex : Extension a x) -> Extender frex -> Type0 Uniqueness : Extension a x -> Type0 SinceExtenderIsUnique : (frex : Extension a x) -> (extender : Extender frex) -> extenderIsUnique frex extender -> Uniqueness frexrecord Universality : {Pres : Presentation} -> {A : Model Pres} -> {X : Setoid} -> Extension A X -> TypeIsUniversal : {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 FrexExists : {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 FrexUnique : {0 Pres : Presentation} -> {0 A : Model Pres} -> {0 X : Setoid} -> {0 Frex : Extension A X} -> Universality Frex -> Uniqueness Frexrecord Frex : {Pres : Presentation} -> Model Pres -> Setoid -> TypeMkFrex : {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 XData : {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 xCoproductsAndFreeFrex : ((a : Model pres) -> (b : Model pres) -> Coproduct a b) -> Free pres x -> (a : Model pres) -> Frex a xFrexlet : Type