In [ ]:
using ModelingToolkit
using MacroTools
using SemanticModels
using SemanticModels.ModelTools.PetriModels
import MacroTools: postwalk
using Test
using Petri
In [ ]:
@variables S, I, R

# generated by AMIDOL, basic SIR Model
sir = Petri.Model([S, I, R],
                 [(S+I, 2I), (I,R)])
In [ ]:
@variables I, R

# rule1 = SI <- SI -> SII
si = Petri.Model([S, I, R],
                 [(S+I, 2I)])

sii = Petri.Model([S, I, I, R],
                  [(S+I,  2I ),
                   (S+I, 2I)]
                 )

rule1 = PetriModels.PetriSpan(si, si, sii)
In [ ]:
# rule2 = I <- I -> IR
i = Petri.Model([I], Tuple{Operation,Operation}[])

ir = Petri.Model([I, R], [(I, R)])

rule2 = PetriModels.PetriSpan(i, i, ir)
In [ ]:
# rule3 = IRI′R′ <- II′ -> II′R
irir = Petri.Model([I, I, R, R], [(I, R), (I, R)])

ii = Petri.Model([I, I], Tuple{Operation,Operation}[])

iir = Petri.Model([I, I, R], [(I, R), (I, R)])

rule3 = PetriModels.PetriSpan(irir, ii, iir)
In [ ]:
# Apply rules to each model in succession

siir = PetriModels.solve(PetriModels.DPOProblem(rule1, sir))

siirr = PetriModels.solve(PetriModels.DPOProblem(rule2, siir))

c = PetriModels.dropdown(irir, ii, siirr)
siir = PetriModels.solve(PetriModels.DPOProblem(rule3, c))

println(sir.Δ)
println()
println(siir.Δ)