Catlab.jl icon indicating copy to clipboard operation
Catlab.jl copied to clipboard

Wiring diagrams of typed morphisms

Open mehalter opened this issue 5 years ago • 0 comments

I have the theory

@theory BiproductCategory(Ob,Hom) => EpidemiologyC(Ob,Hom) begin
  spontaneous(A::Ob, B::Ob)::(A → B)
  transmission(A::Ob, B::Ob)::(A ⊗ B → B)
  exposure(A::Ob, B::Ob, C::Ob)::(A ⊗ B → C ⊗ B)
end

with the instance

@instance EpidemiologyC(PetriCospanOb, PetriCospan) begin
  @import dom, codom, compose, id, otimes, munit, braid, mcopy, mmerge, create, delete, pair, copair, proj1, proj2, coproj1, coproj2
  spontaneous(A::PetriCospanOb, B::PetriCospanOb) = PetriCospan([1], Petri.Model(1:2, [(Dict(1=>1), Dict(2=>1))]), [2])
  transmission(A::PetriCospanOb, B::PetriCospanOb) = PetriCospan([1,2], Petri.Model(1:2, [(Dict(1=>1, 2=>1), Dict(2=>2))]), [2])
  exposure(A::PetriCospanOb, B::PetriCospanOb, C::PetriCospanOb) = PetriCospan([1, 2], Petri.Model(1:3, [(Dict(1=>1, 2=>1), Dict(3=>1, 2=>1))]), [3, 2])
end

if I create a presentation on this theory

@present BasicEpi(FreeEpidemiologyC) begin
  S::Ob
  E::Ob
  I::Ob
  R::Ob
  D::Ob
end

S,E,I,R,D = generators(BasicEpi)

F(ex) = functor((PetriCospanOb, PetriCospan), ex, generators=Dict(map(x->x=>PetriCospanOb(1), generators(BasicEpi))))

doing the code

sir = transmission(S,I) ⋅ spontaneous(I,R)
F(sir)

works as intended, but using the program macro

sir = @program BasicEpi (s::S, i::I) begin
    i_2 = transmission{S,I}(s, i)
    return spontaneous{I,R}(i)
end
F(to_hom_expr(FreeEpidemiologyC, sir))

does not work

mehalter avatar Jul 15 '20 17:07 mehalter