From 2d984eb4d3aa89d6e34d9cfaab7b7c21be70520d Mon Sep 17 00:00:00 2001 From: Angeline Aguinaldo Date: Wed, 3 Jan 2024 15:47:27 -0500 Subject: [PATCH 1/7] modify documentation to work with literate and documenter --- docs/Project.toml | 3 + docs/{src => literate}/full_demo.jl | 238 +- .../game_of_life.jl} | 145 +- docs/literate/lotka_volterra.jl | 515 +++ docs/literate/mesh.jl | 207 + docs/{src => literate}/petri_to_abm.jl | 47 +- docs/literate/ptg_simple.jl | 121 + docs/make.jl | 73 +- docs/src/Dynamic Tracing.ipynb | 4071 ----------------- docs/src/GameOfLife.ipynb | 2416 ---------- docs/src/PetriToABM.ipynb | 355 -- docs/src/api.md | 9 + docs/src/generated/full_demo.ipynb | 1447 ++++++ docs/src/generated/full_demo.md | 559 +++ docs/src/generated/game_of_life.ipynb | 439 ++ docs/src/generated/game_of_life.md | 242 + docs/src/generated/lotka_volterra.ipynb | 1248 +++++ docs/src/generated/lotka_volterra.md | 577 +++ docs/src/generated/mesh.md | 218 + docs/src/generated/petri_to_abm.md | 110 + docs/src/generated/ptg_simple.ipynb | 876 ++++ docs/src/generated/ptg_simple.md | 169 + docs/src/index.md | 181 +- docs/src/lotka_volterra.jl | 419 -- docs/src/mesh.jl | 184 - 25 files changed, 7246 insertions(+), 7623 deletions(-) rename docs/{src => literate}/full_demo.jl (70%) rename docs/{src/GameOfLife.jl => literate/game_of_life.jl} (57%) create mode 100644 docs/literate/lotka_volterra.jl create mode 100644 docs/literate/mesh.jl rename docs/{src => literate}/petri_to_abm.jl (66%) create mode 100644 docs/literate/ptg_simple.jl delete mode 100644 docs/src/Dynamic Tracing.ipynb delete mode 100644 docs/src/GameOfLife.ipynb delete mode 100644 docs/src/PetriToABM.ipynb create mode 100644 docs/src/api.md create mode 100644 docs/src/generated/full_demo.ipynb create mode 100644 docs/src/generated/full_demo.md create mode 100644 docs/src/generated/game_of_life.ipynb create mode 100644 docs/src/generated/game_of_life.md create mode 100644 docs/src/generated/lotka_volterra.ipynb create mode 100644 docs/src/generated/lotka_volterra.md create mode 100644 docs/src/generated/mesh.md create mode 100644 docs/src/generated/petri_to_abm.md create mode 100644 docs/src/generated/ptg_simple.ipynb create mode 100644 docs/src/generated/ptg_simple.md delete mode 100644 docs/src/lotka_volterra.jl delete mode 100644 docs/src/mesh.jl diff --git a/docs/Project.toml b/docs/Project.toml index 92a2d60..d0a9ca9 100644 --- a/docs/Project.toml +++ b/docs/Project.toml @@ -1,10 +1,13 @@ [deps] ACSets = "227ef7b5-1206-438b-ac65-934d6da304b8" +AlgebraicPetri = "4f99eebe-17bf-4e98-b6a1-2c4f205a959b" AlgebraicRewriting = "725a01d3-f174-5bbd-84e1-b9417bad95d9" CairoMakie = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0" Catlab = "134e5e36-593f-5add-ad60-77f754baafbe" +CombinatorialSpaces = "b1c52339-7909-45ad-8b6a-6e388f7c67f2" Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4" GeometryBasics = "5c1252a2-5f33-56bf-86c9-59e7332b4326" +Literate = "98b081ad-f1c9-55d3-8b20-4c87d4299306" LiveServer = "16fef848-5104-11e9-1b77-fb7a48bbb589" Luxor = "ae8d54c2-7ccd-5906-9d76-62fc9837b5bc" PrettyTables = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d" diff --git a/docs/src/full_demo.jl b/docs/literate/full_demo.jl similarity index 70% rename from docs/src/full_demo.jl rename to docs/literate/full_demo.jl index 06c66c4..a5b8a05 100644 --- a/docs/src/full_demo.jl +++ b/docs/literate/full_demo.jl @@ -1,5 +1,5 @@ using AlgebraicRewriting -using Catlab, Catlab.CategoricalAlgebra, Catlab.Graphics, Catlab.Graphs, Catlab.Programs +using Catlab, Catlab.CategoricalAlgebra, Catlab.Graphics, Catlab.Graphs, Catlab.Programs, Catlab.Theories import AlgebraicPetri using Test @@ -37,11 +37,12 @@ that is not available, your options are to a SVG file and can be viewed in a browser. The Julia pipe syntax |> allows you to easily append " |> to_svg " to a line with a visualization. """ -to_svg(G, filename="tmp.svg") = open(filename, "w") do io +to_svg(G, filename="tmp.svg") = + open(filename, "w") do io show(io, "image/svg+xml", G) -end + end - to_graphviz(path_graph(Graph, 3)) # |> to_svg +to_graphviz(path_graph(Graph, 3)) # |> to_svg ########## # 1. DPO # @@ -50,10 +51,15 @@ end """ We construct a rule by providing a span, L ← I → R """ - -L = path_graph(Graph, 2) # • → • + +L = path_graph(Graph, 2) # • → • I = Graph(1) # • -R = @acset Graph begin V=1; E=1; src=1; tgt=1 end # •↺ +R = @acset Graph begin + V = 1 + E = 1 + src = 1 + tgt = 1 +end # •↺ l = CSetTransformation(I, L; V=[1]) # graph homomorphism data r = CSetTransformation(I, R; V=[1]) @@ -70,7 +76,12 @@ to_graphviz(res; node_labels=true) # Note that C-Sets are morally regarded up to isomorphism - in particular, # limits and colimits may modify the orderings of edges/vertices -expected = @acset Graph begin V=4; E=4; src=[1,2,3,4]; tgt=[2,3,4,4] end +expected = @acset Graph begin + V = 4 + E = 4 + src = [1, 2, 3, 4] + tgt = [2, 3, 4, 4] +end @test is_isomorphic(expected, res) """ @@ -81,11 +92,20 @@ convenient. Assigning temporary names to the C-Set elements can also be helpful. yG = yoneda_cache(Graph, clear=true); # compute representables rule2 = Rule(@migration(SchRulel, SchGraph, begin - L => @join begin e::E end - K => @join begin v::V end - R => @join begin eᵣ::E; src(eᵣ)==tgt(eᵣ) end - l => begin v => src(e) end - end), yG) + L => @join begin + e::E + end + K => @join begin + v::V + end + R => @join begin + eᵣ::E + src(eᵣ) == tgt(eᵣ) + end + l => begin + v => src(e) + end + end), yG) """We can rewrite without a match (and let it pick an arbitrary match)""" @@ -105,7 +125,7 @@ rule_spo = Rule{:SPO}(l, r) # (same data as before) @test length(get_matches(rule_spo, G)) == 4 # there are now four matches res = rewrite(rule_spo, G) to_graphviz(res) -@test is_isomorphic(res, path_graph(Graph,3) ⊕ R) +@test is_isomorphic(res, path_graph(Graph, 3) ⊕ R) # note that ⊕ and ⊗ are shorthand for (co)products # Julia lets you easily write unicode symbols via "\" followed by a LaTeX name @@ -125,7 +145,7 @@ We can use automated homomorphism search to reduce the tedium of specifying data manually. In this case, there is a unique option """ -l = homomorphism(I,L) +l = homomorphism(I, L) """ There are many constraints we can put on the search, such as being monic. @@ -140,7 +160,7 @@ G = star_graph(Graph, 6) # a 5-pointed star to_graphviz(G; prog="neato") # changing "prog" can sometimes make it look better m = CSetTransformation(Graph(1), G; V=[6]) # point at the center -res = rewrite_match(rule_sqpo, m) +res = rewrite_match(rule_sqpo, m) to_graphviz(res; prog="neato") ############ @@ -155,14 +175,17 @@ the L' type graph to determine how it is rewritten. L = Graph(1) K = Graph(2) -l = homomorphism(K,L) +l = homomorphism(K, L) r = id(K) # We allow edges into and out of the matched vertex as well as edges # between the vertices incident to the matched vertex -L′ = @acset Graph begin V=3; E=6; - src=[1,1,1,2,3,3]; tgt=[1,2,3,3,3,1] -end +L′ = @acset Graph begin + V = 3 + E = 6 + src = [1, 1, 1, 2, 3, 3] + tgt = [1, 2, 3, 3, 3, 1] +end tl = CSetTransformation(L, L′; V=[2]) # 2 is the matched vertex to_graphviz(L′; node_labels=true) @@ -170,21 +193,29 @@ to_graphviz(L′; node_labels=true) # old ones to the new ones) and the matched vertex is duplicated. The new copy # of the matched vertex points at the new ones. It does not have any inneighbors. -K′ = @acset Graph begin V=5; E=9; - src=[1,1,1,2,3,3,3,4,5]; tgt=[1,2,3,3,3,1,5,5,5] +K′ = @acset Graph begin + V = 5 + E = 9 + src = [1, 1, 1, 2, 3, 3, 3, 4, 5] + tgt = [1, 2, 3, 3, 3, 1, 5, 5, 5] end -tk = CSetTransformation(K,K′; V=[2,4]) +tk = CSetTransformation(K, K′; V=[2, 4]) to_graphviz(K′; node_labels=true) -l′ = homomorphism(K′,L′; initial=(V=[1,2,3,2,3],)) +l′ = homomorphism(K′, L′; initial=(V=[1, 2, 3, 2, 3],)) -prule = PBPORule(l,r,tl,tk,l′) +prule = PBPORule(l, r, tl, tk, l′) # Apply to an example vertex (#3) with two inneighbors and one outneighbor. -G = @acset Graph begin V=4; E=5; src=[1,1,2,3,4]; tgt=[2,3,3,4,4] end +G = @acset Graph begin + V = 4 + E = 5 + src = [1, 1, 2, 3, 4] + tgt = [2, 3, 3, 4, 4] +end to_graphviz(G; node_labels=true) -m = get_match(prule, G; initial=(V=[3],)=>Dict()) +m = get_match(prule, G; initial=(V=[3],) => Dict()) res = rewrite_match(prule, m) # V1 is copied to V2. Outneighbor V5 (w/ loop) is copied to V6, creating an edge @@ -205,27 +236,38 @@ category of (whole-grain) Petri nets, with States and Transitions. """ -function graph_slice(s::Slice) - h = s.slice - V, E = collect.([h[:V], h[:E]]) - g = dom(h) - (S,T), (I,O) = [[findall(==(i),X) for i in 1:2] for X in [V,E]] - nS,nT,nI,nO = length.([S,T,I,O]) - findS, findT = [x->findfirst(==(x), X) for X in [S,T]] - AlgebraicPetri.Graph(@acset AlgebraicPetri.PetriNet begin - S=nS; T=nT; I=nI; O=nO - is=findS.(g[I,:src]); it=findT.(g[I, :tgt]) - ot=findT.(g[O,:src]); os=findS.(g[O, :tgt]) end) +function graph_slice(s::Slice) + h = s.slice + V, E = collect.([h[:V], h[:E]]) + g = dom(h) + (S, T), (I, O) = [[findall(==(i), X) for i in 1:2] for X in [V, E]] + nS, nT, nI, nO = length.([S, T, I, O]) + findS, findT = [x -> findfirst(==(x), X) for X in [S, T]] + to_graphviz(@acset AlgebraicPetri.PetriNet begin + S = nS + T = nT + I = nI + O = nO + is = findS.(g[I, :src]) + it = findT.(g[I, :tgt]) + ot = findT.(g[O, :src]) + os = findS.(g[O, :tgt]) + end) end; """ this is the graph we are slicing over """ -two = @acset Graph begin V=2; E=2; src=[1,2]; tgt=[2,1] end +two = @acset Graph begin + V = 2 + E = 2 + src = [1, 2] + tgt = [2, 1] +end """ Define a rule which deletes a [T] -> S edge""" L_ = path_graph(Graph, 2) -L = Slice(ACSetTransformation(L_, two, V=[2,1], E=[2])) # [T] ⟶ (S) +L = Slice(ACSetTransformation(L_, two, V=[2, 1], E=[2])) # [T] ⟶ (S) graph_slice(L) I_ = Graph(1) @@ -238,7 +280,7 @@ R = Slice(ACSetTransformation(R_, two, V=[2, 1])) # [T] (S) rule = Rule(homomorphism(I, L), homomorphism(I, R)) G_ = path_graph(Graph, 3) -G = Slice(ACSetTransformation(G_, two, V=[1,2,1], E=[1,2])) # (S) ⟶ [T] ⟶ (S) +G = Slice(ACSetTransformation(G_, two, V=[1, 2, 1], E=[1, 2])) # (S) ⟶ [T] ⟶ (S) graph_slice(G) res = rewrite(rule, G) # (S) ⟶ [T] (S) @@ -268,23 +310,35 @@ constructors AppCond and LiftCond to make these directly. Every vertex with a loop also has a map to the vertex marked by the bottom map. """ -t = terminal(Graph)|>apex -looparr = @acset_colim yG begin (e1,e2)::E; - src(e1)==tgt(e1); src(e1)==src(e2) +t = terminal(Graph) |> apex +looparr = @acset_colim yG begin + (e1, e2)::E + src(e1) == tgt(e1) + src(e1) == src(e2) end v = homomorphism(t, looparr) -loop_csp = @acset Graph begin V=3;E=4; src=[1,3,1,3]; tgt=[1,3,2,2] end +loop_csp = @acset Graph begin + V = 3 + E = 4 + src = [1, 3, 1, 3] + tgt = [1, 3, 2, 2] +end b = homomorphism(looparr, loop_csp; monic=true) constr = LiftCond(v, b) -@test !apply_constraint(constr,homomorphism(t, loop_csp)) -@test apply_constraint(constr,b) +@test !apply_constraint(constr, homomorphism(t, loop_csp)) +@test apply_constraint(constr, b) """We can combining constraints with logical combinators""" # match vertex iff it has 2 or 3 self loops -one,two,three,four,five =[@acset(Graph, begin V=1; E=n; src=1; tgt=1 end) for n in 1:5] +one, two, three, four, five = [@acset(Graph, begin + V = 1 + E = n + src = 1 + tgt = 1 +end) for n in 1:5] c2 = AppCond(homomorphism(Graph(1), two); monic=true) # PAC c3 = AppCond(homomorphism(Graph(1), four), false; monic=true) # NAC @@ -312,22 +366,40 @@ value (or another variable). """ yWG = yoneda_cache(WeightedGraph{Int}; clear=true); -L = @acset_colim yWG begin (e1,e2)::E - src(e1)==src(e2); tgt(e1)==tgt(e2) +L = @acset_colim yWG begin + (e1, e2)::E + src(e1) == src(e2) + tgt(e1) == tgt(e2) end I = WeightedGraph{Int}(2) -R = @acset WeightedGraph{Int} begin V=2; E=1; Weight=1; src=1; tgt=2; - weight=[AttrVar(1)] end - -l = homomorphism(I,L; monic=true) -r = homomorphism(I,R; monic=true) -rule = Rule(l, r; monic=[:E], expr=Dict(:Weight=>[xs->xs[1]+xs[2]])) +R = @acset WeightedGraph{Int} begin + V = 2 + E = 1 + Weight = 1 + src = 1 + tgt = 2 + weight = [AttrVar(1)] +end -G = @acset WeightedGraph{Int} begin V=1; E=3; src=1; tgt=1; - weight=[10,20,100] end +l = homomorphism(I, L; monic=true) +r = homomorphism(I, R; monic=true) +rule = Rule(l, r; monic=[:E], expr=Dict(:Weight => [xs -> xs[1] + xs[2]])) + +G = @acset WeightedGraph{Int} begin + V = 1 + E = 3 + src = 1 + tgt = 1 + weight = [10, 20, 100] +end -@test rewrite(rule, G) == @acset WeightedGraph{Int} begin - V=1; E=2; src=1; tgt=1; weight=[30, 100] end +@test rewrite(rule, G) == @acset WeightedGraph{Int} begin + V = 1 + E = 2 + src = 1 + tgt = 1 + weight = [30, 100] +end ###################### # 8. Graph processes # @@ -341,7 +413,7 @@ via analyzing the colimit of all the partial maps induced by the rewrites. using AlgebraicRewriting.Processes: RWStep, find_deps -G0,G1,G2,G3 = Graph.([0,1,2,3]) +G0, G1, G2, G3 = Graph.([0, 1, 2, 3]) # Delete a node Rule1 = Span(create(G1), id(G0)); # Merge two nodes @@ -349,45 +421,49 @@ Rule2 = Span(id(G2), homomorphism(G2, G1)); # Add a node Rule3 = Span(id(G0), create(G1)) -R1,R2,R3 = [Rule(l,r) for (l,r) in [Rule1,Rule2,Rule3]] +R1, R2, R3 = [Rule(l, r) for (l, r) in [Rule1, Rule2, Rule3]] ### Trajectory # step 1: add node #3 to G2 M1 = create(G2) CM1 = ACSetTransformation(G1, G3; V=[3]) -Pmap1 = Span(id(G2), ACSetTransformation(G2, G3; V=[1,2])) +Pmap1 = Span(id(G2), ACSetTransformation(G2, G3; V=[1, 2])) RS1 = RWStep(Rule3, Pmap1, M1, CM1) # Step 2: merge node 2 and 3 to yield a G2 -M2 = ACSetTransformation(G2, G3; V=[2,3]) +M2 = ACSetTransformation(G2, G3; V=[2, 3]) CM2 = ACSetTransformation(G1, G2; V=[2]) -Pmap2 = Span(id(G3), ACSetTransformation(G3, G2; V=[1,2,2])) +Pmap2 = Span(id(G3), ACSetTransformation(G3, G2; V=[1, 2, 2])) RS2 = RWStep(Rule2, Pmap2, M2, CM2) # Step 3: delete vertex 1 M3 = ACSetTransformation(G1, G2; V=[1]) CM3 = create(G1) -Pmap3 = Span(ACSetTransformation(G1,G2; V=[2]), id(G1)) +Pmap3 = Span(ACSetTransformation(G1, G2; V=[2]), id(G1)) RS3 = RWStep(Rule1, Pmap3, M3, CM3) - steps = [RS1, RS2, RS3] -g = find_deps(steps) -to_graphviz(g; node_labels=true) - -expected = @acset Graph begin V=3; E=1; src=1; tgt=2 end -@test expected == g - -# Interface that just uses rules and match morphisms: -# The matches needed to be updated to reflect the particular isomorph that DPO -# rewriting produces when applying the rule. -σ₂ = ACSetTransformation(G2,G2;V=[2,1]) -σ₃ = ACSetTransformation(G3,G3;V=[3,1,2]) - -g′ = find_deps([R3=>M1, R2=>M2⋅σ₃, R1=>M3⋅σ₂]) -@test g′ == g +# g = find_deps(steps) +# to_graphviz(g; node_labels=true) + +# expected = @acset Graph begin +# V = 3 +# E = 1 +# src = 1 +# tgt = 2 +# end +# @test expected == g + +# # Interface that just uses rules and match morphisms: +# # The matches needed to be updated to reflect the particular isomorph that DPO +# # rewriting produces when applying the rule. +# σ₂ = ACSetTransformation(G2, G2; V=[2, 1]) +# σ₃ = ACSetTransformation(G3, G3; V=[3, 1, 2]) + +# g′ = find_deps([R3 => M1, R2 => M2 ⋅ σ₃, R1 => M3 ⋅ σ₂]) +# @test g′ == g ################################### # 10. General purpose programming # diff --git a/docs/src/GameOfLife.jl b/docs/literate/game_of_life.jl similarity index 57% rename from docs/src/GameOfLife.jl rename to docs/literate/game_of_life.jl index 9e49d4a..fd9528a 100644 --- a/docs/src/GameOfLife.jl +++ b/docs/literate/game_of_life.jl @@ -1,5 +1,3 @@ -module GameOfLife - using AlgebraicRewriting using Catlab, Catlab.Graphs, Catlab.CategoricalAlgebra, Catlab.Theories import Catlab.Graphics: to_graphviz @@ -26,21 +24,21 @@ life status with the "next" life status at the end of each timestep. `curr` and `next` pick out subsets of V which are marked as currently alive or to be alive in the next timestep. """ -@present SchLife <: SchSymmetricGraph begin - (Curr, Next)::Ob - curr::Hom(Curr,V) - next::Hom(Next,V) -end -@present SchLifeCoords <: SchLife begin - Coords::AttrType +@present SchLife <: SchSymmetricGraph begin + (Curr, Next)::Ob + curr::Hom(Curr, V) + next::Hom(Next, V) +end +@present SchLifeCoords <: SchLife begin + Coords::AttrType coords::Attr(V, Coords) end @acset_type Life(SchLife) <: AbstractSymmetricGraph @acset_type AbsLifeCoords(SchLifeCoords) <: AbstractSymmetricGraph const LifeCoords = AbsLifeCoords{Tuple{Int,Int}} F = Migrate( - Dict(x=>x for x in Symbol.(generators(SchLife,:Ob))), - Dict(x=>x for x in Symbol.(generators(SchLife,:Hom))), LifeCoords; delta=false) + Dict(x => x for x in Symbol.(generators(SchLife, :Ob))), + Dict(x => x for x in Symbol.(generators(SchLife, :Hom))), LifeCoords; delta=false) # Helper ######## @@ -51,56 +49,68 @@ function view_life(f::ACSetTransformation, pth=tempname()) view_life(codom(f), pth; star=isempty(v) ? nothing : only(v)) end function view_life(X::Life, pth=tempname(); star=nothing) - pg = PropertyGraph{Any}(; prog = "neato", graph = Dict(), - node = Dict(:shape => "circle", :style=>"filled", :margin => "0"), - edge = Dict(:dir=>"none",:minlen=>"1")) - add_vertices!(pg, nparts(X,:V)) + pg = PropertyGraph{Any}(; prog="neato", graph=Dict(), + node=Dict(:shape => "circle", :style => "filled", :margin => "0"), + edge=Dict(:dir => "none", :minlen => "1")) + add_vertices!(pg, nparts(X, :V)) for v in vertices(X) - set_vprop!(pg, v, :fillcolor, isempty(incident(X,v,:curr)) ? "red" : "green") - if !isempty(incident(X,v,:next)) + set_vprop!(pg, v, :fillcolor, isempty(incident(X, v, :curr)) ? "red" : "green") + if !isempty(incident(X, v, :next)) set_vprop!(pg, v, :penwidth, "4.0") end set_vprop!(pg, v, :label, star == v ? "*" : "") end - for e in filter(e->X[e,:inv] > e, edges(X)) - add_edge!(pg, X[e,:src], X[e,:tgt]) + for e in filter(e -> X[e, :inv] > e, edges(X)) + add_edge!(pg, X[e, :src], X[e, :tgt]) end G = to_graphviz(pg) - open(pth, "w") do io - show(io,"image/svg+xml",G) + open(pth, "w") do io + show(io, "image/svg+xml", G) end G end function view_life(X::LifeCoords, pth=tempname(); star=nothing) - n = Int(sqrt(nparts(X,:V))) - coords = Dict([(i,j)=>findfirst(==((i,j)), X[:coords]) - for (i,j) in Iterators.product(1:n,1:n)]) - mat = pretty_table(String, reduce(hcat,map(1:n) do i - map(1:n) do j - c, x = [!isempty(incident(X, coords[(i,j)],x)) for x in [:curr, :next]] - res = c ? (x ? "O" : "o") : (x ? "X" : "x") - return res * ((star == coords[(i,j)]) ? "." : "") - end - end); show_header=false, tf=tf_markdown) - open(pth, "w") do io write(io, mat) end + n = Int(sqrt(nparts(X, :V))) + coords = Dict([(i, j) => findfirst(==((i, j)), X[:coords]) + for (i, j) in Iterators.product(1:n, 1:n)]) + mat = pretty_table(String, reduce(hcat, map(1:n) do i + map(1:n) do j + c, x = [!isempty(incident(X, coords[(i, j)], x)) for x in [:curr, :next]] + res = c ? (x ? "O" : "o") : (x ? "X" : "x") + return res * ((star == coords[(i, j)]) ? "." : "") + end + end); show_header=false, tf=tf_markdown) + open(pth, "w") do io + write(io, mat) + end return mat end # Constructions for Life ACSets / maps between them -Next() = @acset Life begin V=1; Next=1; next=1 end -Curr() = @acset Life begin V=1; Curr=1; curr=1 end +Next() = @acset Life begin + V = 1 + Next = 1 + next = 1 +end +Curr() = @acset Life begin + V = 1 + Curr = 1 + curr = 1 +end to_next() = homomorphism(Life(1), Next()) to_curr() = homomorphism(Life(1), Curr()) """Construct a cell connected to n living neighbors""" function living_neighbors(n::Int; alive=false) X = Life(1) - if alive add_part!(X, :Curr, curr=1) end + if alive + add_part!(X, :Curr, curr=1) + end for _ in 1:n v = add_part!(X, :V) - add_part!(X,:Curr,curr=v) + add_part!(X, :Curr, curr=v) add_edge!(X, v, 1) - end + end return X end @@ -111,24 +121,34 @@ function make_grid(curr::AbstractMatrix, next=nothing) X, coords = LifeCoords(), Dict() for i in 1:n for j in 1:n - coords[i=>j] = add_vertex!(X; coords=(i,j)) - if Bool(curr[i,j]) add_part!(X, :Curr, curr=coords[i=>j]) end - if !isnothing(next) && Bool(next[i,j]) - add_part!(X, :Curr, curr=coords[i=>j]) + coords[i=>j] = add_vertex!(X; coords=(i, j)) + if Bool(curr[i, j]) + add_part!(X, :Curr, curr=coords[i=>j]) + end + if !isnothing(next) && Bool(next[i, j]) + add_part!(X, :Curr, curr=coords[i=>j]) end end end for i in 1:n for j in 1:n - if i < n add_edge!(X, coords[i=>j], coords[i+1=>j]) end - if j < n add_edge!(X,coords[i=>j], coords[i=>j+1]) end - if i < n && j < n add_edge!(X,coords[i=>j], coords[i+1=>j+1]) end - if i < n && j > 1 add_edge!(X,coords[i=>j], coords[i+1=>j-1]) end + if i < n + add_edge!(X, coords[i=>j], coords[i+1=>j]) + end + if j < n + add_edge!(X, coords[i=>j], coords[i=>j+1]) + end + if i < n && j < n + add_edge!(X, coords[i=>j], coords[i+1=>j+1]) + end + if i < n && j > 1 + add_edge!(X, coords[i=>j], coords[i+1=>j-1]) + end end end - return X + return X end -make_grid(n::Int, random=false) = make_grid((random ? rand : zeros)(Bool, (n,n))) +make_grid(n::Int, random=false) = make_grid((random ? rand : zeros)(Bool, (n, n))) # Rules ####### @@ -139,12 +159,18 @@ BirthP1 = living_neighbors(3) # must have 3 neighbors BirthN1 = living_neighbors(4) # forbid the cell to have 4 neighbors BirthN2 = Curr() # forbid the cell to be alive (i.e. it's currently dead) BP1, BN1, BN2 = homomorphism.(Ref(Life(1)), [BirthP1, BirthN1, BirthN2]) -bac = [AppCond(BP1; monic=true), AppCond.([BN1,BN2], false; monic=true)...] +bac = [AppCond(BP1; monic=true), AppCond.([BN1, BN2], false; monic=true)...] Birth = Rule(id(Life(1)), to_next(); ac=bac) # A living cell stays alive iff 2 or 3 living neighbors #------------------------------------------------------ -PersistR = @acset Life begin V=1; Curr=1; Next=1; curr=1; next=1 end +PersistR = @acset Life begin + V = 1 + Curr = 1 + Next = 1 + curr = 1 + next = 1 +end PersistP1 = living_neighbors(2; alive=true) PersistN1 = living_neighbors(4; alive=true) DR, DP1, DN1 = homomorphism.(Ref(Curr()), [PersistR, PersistP1, PersistN1]) @@ -153,31 +179,28 @@ Persist = Rule(id(Curr()), DR; ac=pac) ClearCurr = Rule(to_curr(), id(Life(1))) # remove "Curr" status ClearNext = Rule(to_next(), id(Life(1))) # remove "Next" status -CopyNext = Rule(to_next(), to_curr()) # Copy "Next" to "Curr" +CopyNext = Rule(to_next(), to_curr()) # Copy "Next" to "Curr" -rules = [:Birth=>Birth, :Persist=>Persist, :ClearCurr=>ClearCurr, - :ClearNext=>ClearNext, :CopyNext=>CopyNext] +rules = [:Birth => Birth, :Persist => Persist, :ClearCurr => ClearCurr, + :ClearNext => ClearNext, :CopyNext => CopyNext] # Schedule ########## # All rules have interface of a single distinguished cell. # Never distinguish control flow of successful vs unsuccessful application -rBirth, rPersist, rClearCurr, rClearNext, rCopyNext = - [tryrule(RuleApp(n, r, Life(1))) for (n,r) in rules] +rBirth, rPersist, rClearCurr, rClearNext, rCopyNext = + [tryrule(RuleApp(n, r, Life(1))) for (n, r) in rules] update_next = agent(rBirth ⋅ rPersist, Life(1); n=:Cell) next_step = agent(compose(rClearCurr, rCopyNext, rClearNext), Life(1); n=:Cell) life(n::Int) = for_schedule(update_next ⋅ next_step, n) |> F const L = life(1) -G = make_grid([1 0 1 0 1; 0 1 0 1 0 ; 0 1 0 1 0 ; 1 0 1 0 1; 1 0 1 0 1]) +G = make_grid([1 0 1 0 1; 0 1 0 1 0; 0 1 0 1 0; 1 0 1 0 1; 1 0 1 0 1]) -res, = apply_schedule(L, G; steps=1000); -traj = last(res).edge.o.val; +res, = apply_schedule(L, G; steps=1000) +traj = last(res).edge.o.val -view_life(i,traj) = view_life(traj.steps[i].world) +view_life(i, traj) = view_life(traj.steps[i].world) # view_traj(L, res, view_life; agent=true) - - -end # module diff --git a/docs/literate/lotka_volterra.jl b/docs/literate/lotka_volterra.jl new file mode 100644 index 0000000..de377f2 --- /dev/null +++ b/docs/literate/lotka_volterra.jl @@ -0,0 +1,515 @@ +using Catlab, Catlab.Theories, Catlab.CategoricalAlgebra, Catlab.Graphs, + Catlab.Graphics, Catlab.WiringDiagrams, Catlab.Programs +using AlgebraicRewriting +using Random, Test, StructEquality +using Luxor + +Random.seed!(123); + +using Catlab.Graphics.Graphviz: Attributes, Statement, Node +using Catlab.Graphics.Graphviz + +import Catlab.CategoricalAlgebra: left, right + +function right(s::Symbol) + if s == :N + return :E + elseif s == :S + return :W + elseif s == :E + return :S + elseif s == :W + return :N + end +end +function left(s::Symbol) + if s == :N + return :W + elseif s == :S + return :E + elseif s == :E + return :N + elseif s == :W + return :S + end +end + +""" +Grass = 0 means alive grass, whereas grass > 0 represent a counter of time until +the grass is alive. + +Sheeps and wolves have position and direction, so we assign each an *edge*. We +assume a convention where the location of the something is the edge SOURCE. + +Dir is an attribute which can take values :N, :E, :W, and :S. +""" +@present TheoryLV <: SchGraph begin + (Sheep, Wolf)::Ob + sheep_loc::Hom(Sheep, V) + wolf_loc::Hom(Wolf, V) + + (Dir, Eng)::AttrType + grass_eng::Attr(V, Eng) + sheep_eng::Attr(Sheep, Eng) + wolf_eng::Attr(Wolf, Eng) + sheep_dir::Attr(Sheep, Dir) + wolf_dir::Attr(Wolf, Dir) + dir::Attr(E, Dir) +end + +@present TheoryLV′ <: TheoryLV begin + Coord::AttrType + coord::Attr(V, Coord) +end + +to_graphviz(TheoryLV; prog="dot") + +@acset_type LV_Generic(TheoryLV) <: HasGraph +const LV = LV_Generic{Symbol,Int} + +@acset_type LV′_Generic(TheoryLV′) <: HasGraph +const LV′ = LV′_Generic{Symbol,Int,Tuple{Int,Int}} + +F = Migrate( + Dict(:Sheep => :Wolf, :Wolf => :Sheep), + Dict([:sheep_loc => :wolf_loc, :wolf_loc => :sheep_loc, + :sheep_eng => :wolf_eng, :wolf_eng => :sheep_eng, :grass_eng => :grass_eng, + :sheep_dir => :wolf_dir, :wolf_dir => :sheep_dir,]), LV) +F2 = Migrate( + Dict(x => x for x in Symbol.(TheoryLV.generators[:Ob])), + Dict(x => x for x in Symbol.(TheoryLV.generators[:Hom])), LV′; delta=false) + +""" +Create a nxn grid with periodic boundary conditions. Edges in each cardinal +direction originate at every point + + +(i,j+1) -> (i+1,j+1) -> ... + ↑ ↑ +(i,j) -> (i+1,j) -> ... + +""" +function create_grid(n::Int) + lv = LV′() + coords = Dict() + for i in 0:n-1 + for j in 0:n-1 + coords[i=>j] = add_part!(lv, :V; grass_eng=max(0, rand(-30:30)), coord=(i, j)) + end + end + for i in 0:n-1 + for j in 0:n-1 + add_part!(lv, :E; src=coords[i=>j], tgt=coords[mod(i + 1, n)=>j], dir=:E) + add_part!(lv, :E; src=coords[i=>j], tgt=coords[mod(i - 1, n)=>j], dir=:W) + add_part!(lv, :E; src=coords[i=>j], tgt=coords[i=>mod(j + 1, n)], dir=:N) + add_part!(lv, :E; src=coords[i=>j], tgt=coords[i=>mod(j - 1, n)], dir=:S) + end + end + return lv +end + +g = create_grid(2) + + +""" +`n` is the length of the grid. +`sheep` and `wolves` are the fraction of spaces that are +populated with that animal +""" +function initialize(n::Int, sheep::Float64, wolves::Float64)::LV′ + grid = create_grid(n) + args = [(sheep, :Sheep, :sheep_loc, :sheep_eng, :sheep_dir), + (wolves, :Wolf, :wolf_loc, :wolf_eng, :wolf_dir)] + for (n_, name, loc, eng, d) in args + for _ in 1:round(Int, n_ * n^2) + dic = Dict([eng => 5, loc => rand(vertices(grid)), + d => rand([:N, :E, :S, :W])]) + add_part!(grid, name; dic...) + end + end + return grid +end + + +supscript_d = Dict([ + '1' => '¹', '2' => '²', '3' => '³', '4' => '⁴', '5' => '⁵', '6' => '⁶', '7' => '⁷', '8' => '⁸', + '9' => '⁹', '0' => '⁰', 'x' => 'ˣ', 'y' => 'ʸ', 'z' => 'ᶻ', 'a' => 'ᵃ', 'b' => 'ᵇ', 'c' => 'ᶜ', + 'd' => 'ᵈ']) +supscript(x::String) = join([get(supscript_d, c, c) for c in x]) + +"""Visualize a LV""" +function view_LV(p::ACSetTransformation, pth=tempname(); name="G", title="") + if nparts(dom(p), :Wolf) == 1 + star = :Wolf => p[:Wolf](1) + elseif nparts(dom(p), :Sheep) == 1 + star = :Sheep => p[:Sheep](1) + elseif nparts(dom(p), :V) == 1 + star = :V => p[:V](1) + else + star = nothing + end + view_LV(codom(p), pth; name=name, title=title, star=star) +end +function view_LV(p::LV′, pth=tempname(); name="G", title="", star=nothing) + pstr = ["$(i),$(j)!" for (i, j) in p[:coord]] + stmts = Statement[] + for s in 1:nv(p) + st = (star == (:V => s)) ? "*" : "" + gv = p[s, :grass_eng] + col = gv == 0 ? "lightgreen" : "tan" + push!(stmts, Node("v$s", Attributes( + :label => gv == 0 ? "" : string(gv) * st, + :shape => "circle", + :color => col, :pos => pstr[s]))) + end + d = Dict([:E => (1, 0), :N => (0, 1), :S => (0, -1), :W => (-1, 0),]) + + args = [(:true, :Wolf, :wolf_loc, :wolf_eng, :wolf_dir), + (false, :Sheep, :sheep_loc, :sheep_eng, :sheep_dir)] + + for (is_wolf, prt, loc, eng, dr) in args + for w in parts(p, prt) + st = (star == ((is_wolf ? :Wolf : :Sheep) => w)) ? "*" : "" + e = only(incident(p, p[w, loc], :src) ∩ incident(p, p[w, dr], :dir)) + s = src(p, e) + dx, dy = d[p[e, :dir]] + (sx, sy) = p[s, :coord] + + L, R = 0.25, 0.1 + wx = sx + L * dx + R * rand() + wy = sy + L * dy + R * rand() + ID = "$(is_wolf ? :w : :s)$w" + append!(stmts, [Node(ID, Attributes( + :label => "$w" * supscript("$(p[w,eng])") * st, + :shape => "square", :width => "0.3px", :height => "0.3px", :fixedsize => "true", + :pos => "$(wx),$(wy)!", :color => is_wolf ? "red" : "lightblue"))]) + end + end + + g = Graphviz.Digraph(name, Statement[stmts...]; prog="neato", + graph_attrs=Attributes(:label => title, :labelloc => "t"), + node_attrs=Attributes(:shape => "plain", :style => "filled")) + open(pth, "w") do io + show(io, "image/svg+xml", g) + end +end + +i1 = initialize(2, 0.5, 0.5) +# view_LV(i1) + +# RULES +####### +yLV = yoneda_cache(LV; clear=true); +yLV = yoneda_cache(LV; clear=false); + +# Empty agent type +I = LV() +# Generic sheep agent +S = @acset_colim yLV begin + s::Sheep +end +# Generic wolf agent +W = F(S) +# Generic grass agent +G = @acset_colim yLV begin + v::V +end + +N = Names(Dict("W" => W, "S" => S, "G" => G, "" => I)) +# Rotating +#--------- + +rl = Rule(id(S), id(S); expr=(Dir=[xs -> left(only(xs))],)) +rr = Rule(id(S), id(S); expr=(Dir=[xs -> right(only(xs))],)) + +sheep_rotate_l = tryrule(RuleApp(:turn_left, rl, S)) +sheep_rotate_r = tryrule(RuleApp(:turn_right, rr, S)) + +# we can imagine executing these rules in sequence or in parallel +seq_sched = (sheep_rotate_l ⋅ sheep_rotate_r) +# view_sched(seq_sched; names=N) +par_sched = (sheep_rotate_l ⊗ sheep_rotate_r) +# view_sched(par_sched; names=N) + + + +begin + ex = @acset_colim yLV begin + e::E + s::Sheep + sheep_loc(s) == src(e) + sheep_dir(s) == :N + end + expected = copy(ex) + expected[:sheep_dir] = :W + @test is_isomorphic(rewrite(rl, ex), expected) +end + +# Moving forward +#--------------- +s_fwd_l = @acset_colim yLV begin + e::E + s::Sheep + sheep_loc(s) == src(e) +end +s_fwd_i = @acset_colim yLV begin + e::E +end +s_fwd_r = @acset_colim yLV begin + e::E + s::Sheep + sheep_loc(s) == tgt(e) +end +s_n = @acset_colim yLV begin + e::E + s::Sheep + sheep_loc(s) == src(e) + sheep_eng(s) == 0 +end + +sheep_fwd_rule = Rule( + homomorphism(s_fwd_i, s_fwd_l; monic=true), + homomorphism(s_fwd_i, s_fwd_r; monic=true), + ac=[AppCond(homomorphism(s_fwd_l, s_n), false)], + expr=(Eng=Dict(3 => vs -> vs[3] - 1), Dir=Dict(2 => vs -> vs[2])) +) + +sheep_fwd = tryrule(RuleApp(:move_fwd, sheep_fwd_rule, + homomorphism(S, s_fwd_l), homomorphism(S, s_fwd_r))) + + +sheep_fwd_rule.L |> codom + +begin # test + ex = @acset_colim yLV begin + (e1, e2)::E + s::Sheep + sheep_loc(s) == tgt(e1) + tgt(e1) == src(e2) + sheep_dir(s) == :N + sheep_eng(s) == 10 + end + expected = @acset_colim yLV begin + (e1, e2)::E + s::Sheep + sheep_loc(s) == tgt(e2) + tgt(e1) == src(e2) + sheep_dir(s) == :N + sheep_eng(s) == 9 + end + @test is_isomorphic(expected, rewrite(sheep_fwd_rule, ex)) +end + +# Eat grass + 4eng +#----------------- +# Grass is at 0 - meaning it's ready to be eaten +s_eat_pac = @acset_colim yLV begin + s::Sheep + grass_eng(sheep_loc(s)) == 0 +end + +se_rule = Rule(id(S), id(S); expr=(Eng=[vs -> vs[1] + 4, vs -> 30],), + ac=[AppCond(homomorphism(S, s_eat_pac))]) +sheep_eat = tryrule(RuleApp(:Sheep_eat, se_rule, S)) + +begin # test + ex = @acset_colim yLV begin + s::Sheep + e::E + sheep_loc(s) == tgt(e) + sheep_eng(s) == 3 + grass_eng(tgt(e)) == 0 + grass_eng(src(e)) == 10 + end + expected = @acset_colim yLV begin + s::Sheep + e::E + sheep_loc(s) == tgt(e) + sheep_eng(s) == 7 + grass_eng(tgt(e)) == 30 + grass_eng(src(e)) == 10 + end + + @test is_isomorphic(expected, rewrite(se_rule, ex)) +end + +# Eat sheep + 20 eng +#------------------- + +w_eat_l = @acset_colim yLV begin + s::Sheep + w::Wolf + sheep_loc(s) == wolf_loc(w) +end + +we_rule = Rule(homomorphism(W, w_eat_l), id(W); expr=(Eng=[vs -> vs[3] + 20, vs -> vs[1]],)) +wolf_eat = tryrule(RuleApp(:Wolf_eat, we_rule, W)) + +begin # test + ex = @acset LV begin + Sheep = 1 + Wolf = 1 + V = 3 + E = 2 + src = [1, 2] + tgt = [2, 3] + sheep_loc = 2 + sheep_eng = [3] + grass_eng = [9, 10, 11] + dir = fill(:N, 2) + sheep_dir = [:N] + wolf_loc = [2] + wolf_eng = [16] + wolf_dir = [:S] + end + expected = @acset LV begin + Wolf = 1 + V = 3 + E = 2 + src = [1, 2] + tgt = [2, 3] + grass_eng = [9, 10, 11] + dir = fill(:N, 2) + sheep_dir = [:N] + wolf_loc = [2] + wolf_eng = [36] + wolf_dir = [:S] + end + @test is_isomorphic(rewrite(we_rule, ex), expected) +end + +# Die if 0 eng +#------------- +s_die_l = @acset_colim yLV begin + s::Sheep + sheep_eng(s) == 0 +end + +sheep_die_rule = Rule(homomorphism(G, s_die_l), id(G)) +sheep_starve = (RuleApp(:starve, sheep_die_rule, + homomorphism(S, s_die_l), create(G)) + ⋅ + (id([I]) ⊗ Weaken(create(S))) ⋅ merge_wires(I)) + +begin # test + ex = s_die_l ⊕ W + expected = G ⊕ W + @test is_isomorphic(rewrite(sheep_die_rule, ex), expected) +end + +# reproduction +#------------- + +s_reprod_r = @acset_colim yLV begin + (x, y)::Sheep + sheep_loc(x) == sheep_loc(y) +end + +sheep_reprod_rule = Rule( + homomorphism(G, S), + homomorphism(G, s_reprod_r); + expr=(Dir=[vs -> vs[1], vs -> vs[1]], Eng=[vs -> vs[2], + fill(vs -> round(Int, vs[1] / 2, RoundUp), 2)...],) +) + +sheep_reprod = RuleApp(:reproduce, sheep_reprod_rule, + id(S), homomorphism(S, s_reprod_r)) |> tryrule + +begin # test + ex = @acset_colim yLV begin + s::Sheep + w::Wolf + sheep_eng(s) == 10 + end + expected = @acset_colim yLV begin + (s1, s2)::Sheep + w::Wolf + sheep_loc(s1) == sheep_loc(s2) + sheep_eng(s1) == 5 + sheep_eng(s2) == 5 + end + @test is_isomorphic(rewrite(sheep_reprod_rule, ex), expected) +end + +# Grass increment +#---------------- + +g_inc_n = deepcopy(G) +set_subpart!(g_inc_n, 1, :grass_eng, 0); +rem_part!(g_inc_n, :Eng, 1) + +g_inc_rule = Rule(id(G), id(G); + ac=[AppCond(homomorphism(G, g_inc_n), false)], + expr=(Eng=[vs -> only(vs) - 1],)) +g_inc = RuleApp(:GrassIncrements, g_inc_rule, G) |> tryrule + + +begin # test + ex = @acset LV begin + Sheep = 1 + V = 3 + E = 2 + src = [1, 2] + tgt = [2, 3] + sheep_loc = 2 + sheep_eng = [3] + grass_eng = [1, 10, 2] + dir = fill(:N, 2) + sheep_dir = [:N] + end + expected = @acset LV begin + Sheep = 1 + V = 3 + E = 2 + src = [1, 2] + tgt = [2, 3] + sheep_loc = 2 + sheep_eng = [3] + grass_eng = [0, 10, 2] + dir = fill(:N, 2) + sheep_dir = [:N] + end + @test is_isomorphic(rewrite(g_inc_rule, ex), expected) +end + +# Scheduling Rules +################## + +# Stuff that happens once per sheep +#---------------------------------- + +# 25% chance of left turn, 25% chance of right turn, 50% stay in same direction +general = mk_sched((;), (init=:S,), N, ( + turn=const_cond([1.0, 2.0, 1.0], S; name=:turn), + maybe=const_cond([0.1, 0.9], S; name=:reprod), + lft=sheep_rotate_l, + rght=sheep_rotate_r, + fwd=sheep_fwd, + repro=sheep_reprod, + starve=sheep_starve), + quote + out_l, out_str, out_r = turn(init) + moved = fwd([lft(out_l), out_str, rght(out_r)]) + out_repro, out_no_repro = maybe(moved) + return starve([repro(out_repro), out_no_repro]) + end) + +sheep = sheep_eat ⋅ general # once per sheep +wolf = wolf_eat ⋅ F(general) # once per wolf + +# Do all sheep, then all wolves, then all daily operations +cycle = (agent(sheep; n=:sheep, ret=I) + ⋅ + agent(wolf; n=:wolves, ret=I) + ⋅ + agent(g_inc; n=:grass)) + +# wrap in a while loop +overall = while_schedule(cycle, curr -> nparts(curr, :Wolf) >= 0) |> F2 +# view_sched(overall; names=F2(N)) +X = initialize(3, 0.25, 0.25) +res, = apply_schedule(overall, X; steps=50); + +# Run this lines to view the trajectory +# view_traj(overall, res, view_LV; agent=true, names=F2(N)) + diff --git a/docs/literate/mesh.jl b/docs/literate/mesh.jl new file mode 100644 index 0000000..fcddcd3 --- /dev/null +++ b/docs/literate/mesh.jl @@ -0,0 +1,207 @@ +using Catlab, Catlab.Graphs, Catlab.CategoricalAlgebra +using CairoMakie, GeometryBasics +using Base.Iterators +using CombinatorialSpaces +import AlgebraicPetri +using CombinatorialSpaces.SimplicialSets: get_edge! + +""" +Suppose we want to perform rewriting on a mesh with triangles defined over +certain triples of edges. +""" + +@present ThSemisimplicialSet <: SchGraph begin + T::Ob + (d1, d2, d3)::Hom(T, E) + compose(d1, src) == compose(d2, src) + compose(d1, tgt) == compose(d3, tgt) + compose(d2, tgt) == compose(d3, src) +end +@acset_type SSet(ThSemisimplicialSet) + +quadrangle = @acset SSet begin + T = 2 + E = 5 + V = 4 + d1 = [1, 1] + d2 = [2, 3] + d3 = [4, 5] + src = [1, 1, 1, 2, 3] + tgt = [4, 2, 3, 4, 4] +end + +function plot_sset(ss::SSet, points::Vector, + tri_colors::Union{Nothing,Vector}=nothing) + dflt = collect(take(cycle([:blue, :red, :green, :purple, :pink, :yellow, + :grey, :orange, :brown, :cyan]), + nparts(ss, :T))) + tri_colors = isnothing(tri_colors) ? dflt : tri_colors + + lengthscale = 0.8 # Validate inputs + dim = length(points[1]) + length(points) == nparts(ss, :V) || error("# of points") + if dim == 2 + points = [(p1, p2, 0.0) for (p1, p2) in points] + elseif dim != 3 + error("dim $dim") + end + tri_colors = tri_colors[1:nparts(ss, :T)] + + s = EmbeddedDeltaSet2D{Bool,Point{3,Float64}}() # convert SSet to EmbeddedDeltaSet2D + + edge_colors = [:black for _ in nparts(ss, :E)] + add_vertices!(s, length(points), point=points) + for (src, tgt) in zip(ss[:src], ss[:tgt]) + get_edge!(s, src, tgt) + end + + for t in parts(ss, :T) + glue_sorted_triangle!(s, ss[t, [:d1, :src]], + ss[t, [:d3, :src]], + ss[t, [:d1, :tgt]]) + end + + m = GeometryBasics.Mesh(s) # split mesh into component triangles + x = faces(m) + m_points = m.position[vcat([[t[1], t[2], t[3]] for t in x]...)] + m_faces = TriangleFace{Int}[[((t - 1) * 3) .+ (1, 2, 3) for t in 1:length(x)]...] + new_m = GeometryBasics.Mesh(Point{3,Float64}[m_points...], m_faces) + if ntriangles(s) == 0 + fig, ax, ob = arrows((s[s[:∂v0], :point] * (0.5 + lengthscale / 2) + .+ + s[s[:∂v1], :point] * (0.5 - lengthscale / 2)), + (s[s[:∂v1], :point] .- s[s[:∂v0], :point]), + lengthscale=lengthscale, arrowsize=0.05, shininess=0.0, + color=edge_colors, diffuse=[0.0, 0.0, 0.0]) + else + fig, ax, ob = mesh(new_m, color=vcat([[v, v, v] for v in tri_colors]...)) + arrows!((s[s[:∂v0], :point] * (0.5 + lengthscale / 2) + .+ + s[s[:∂v1], :point] * (0.5 - lengthscale / 2)), + (s[s[:∂v1], :point] .- s[s[:∂v0], :point]), + lengthscale=lengthscale, arrowsize=0.05, shininess=0.0, + color=edge_colors, diffuse=[0.0, 0.0, 0.0]) + end + if dim == 2 + spines!(ax) + hidedecorations!(ax) + ax.aspect = AxisAspect(1.0) # Remove this line if 3D embedding + end + fig +end + + +quad_coords = [(0, 1, 0), (1, 1, 0), (0, 0, 0), (1, 0, 0)] +plot_sset(quadrangle, quad_coords) + + + +L = quadrangle +I = @acset SSet begin + E = 4 + V = 4 + src = [1, 1, 2, 3] + tgt = [2, 3, 4, 4] +end +quad_coords = [(0, 1, 0), (1, 1, 0), (0, 0, 0), (1, 0, 0)] +plot_sset(I, quad_coords) + + +""" +Our replacement pattern will add two triangles and an edge, but now the edge +is perpendicular to where it was before. +""" + +R = @acset SSet begin + T = 2 + E = 5 + V = 4 + d1 = [2, 3] + d2 = [1, 5] + d3 = [5, 4] + src = [1, 1, 2, 3, 2] + tgt = [2, 3, 4, 4, 3] +end +quad_coords = [(0, 1, 0), (1, 1, 0), (0, 0, 0), (1, 0, 0)] +plot_sset(R, quad_coords) + + +""" +Again we create a rewrite rule by relating the `I` to `L` and `R`. +""" + +r = Rule(hom(I, R; monic=true), + hom(I, L; monic=true); + monic=true) + + +""" +We can construct a mesh to test this rewrite on by gluing together two +quadrilaterals (via a *pushout* along a common edge). +""" + +edge = @acset SSet begin + E = 1 + V = 2 + src = [1] + tgt = [2] +end +edge_left = hom(edge, L; initial=Dict([:V => [1, 3]])) +edge_right = hom(edge, L; initial=Dict([:V => [2, 4]])) +G = pushout(edge_left, edge_right) |> apex +six_coords = vcat(quad_coords, [(-1.0, 1.0, 0.0), (-1.0, 0.0, 0.0),]) +plot_sset(G, six_coords) + +""" +We then can perform the rewrite in larger contexts than just the pattern, such +as a mesh with two quadrilaterals. +""" +res = rewrite(r, G) + + + +""" +### Single pushout rewriting +Implicit deletion works like a cascading delete: if you delete a vertex +(for example), then you implicitly delete an edge which refers to that vertex +(and a triangle that refers to that edge, and so on). Here we delete a triangle +and a vertex explicitly, but implicitly the deleted vertex +""" + +Tri = @acset SSet begin + T = 1 + E = 3 + V = 3 + d1 = [1] + d2 = [2] + d3 = [3] + src = [1, 1, 2] + tgt = [3, 2, 3] +end +L = Tri +r = Rule{:SPO}(homomorphisms(edge, L)[2], id(edge)) +m = homomorphism(L, quadrangle) +# can_pushout_complement(r.L, m) == false +rewrite_match(r, m) + +""" +Sesqui pushout rewriting + +Here our rewrite rule takes a vertex and duplicates it. +""" +L = @acset SSet begin + V = 1 +end +I = @acset SSet begin + V = 2 +end +r = Rule{:SqPO}(homomorphism(I, L), id(I)) + +""" +With sesqui-pushout semantics, when we apply this to the vertex of a triangle, +this will create two triangles. +""" +G = Tri +m = CSetTransformation(L, G, V=[1]); +nparts(sesqui_pushout_rewrite(l, r, m), :T) == 4 || error("We get 4 'triangles' when we ignore equations") +rewrite_match(r, m; pres=ThSemisimplicialSet) # pass in the equations diff --git a/docs/src/petri_to_abm.jl b/docs/literate/petri_to_abm.jl similarity index 66% rename from docs/src/petri_to_abm.jl rename to docs/literate/petri_to_abm.jl index 77a4d24..3859244 100644 --- a/docs/src/petri_to_abm.jl +++ b/docs/literate/petri_to_abm.jl @@ -6,12 +6,12 @@ semantics, by converting each transition into a rewrite rule. using AlgebraicPetri using AlgebraicRewriting -using Catlab.Present, Catlab.Theories, Catlab.CategoricalAlgebra +using Catlab, Catlab.Theories, Catlab.CategoricalAlgebra const hom = homomorphism -sir_petri = LabelledPetriNet([:S,:I,:R], - :inf=>((:S,:I)=>(:I,:I)), - :rec=>(:I=>:R)) +sir_petri = LabelledPetriNet([:S, :I, :R], + :inf => ((:S, :I) => (:I, :I)), + :rec => (:I => :R)) """ The states of a Petri net induce a discrete schema for a C-Set @@ -19,7 +19,8 @@ The states of a Petri net induce a discrete schema for a C-Set function petri_to_cset_type(p::LabelledPetriNet, name::Symbol=:Discrete)::Type pres = Presentation(FreeSchema) [add_generator!(pres, Ob(FreeSchema, l)) for l in p[:sname]] - return AnonACSet(pres) + macro_call_expr = Expr(:macrocall, Symbol("@acset_type"), name, pres) + return eval(macro_call_expr) end SIR = petri_to_cset_type(sir_petri) @@ -29,9 +30,9 @@ The rewrite rule matches for the inputs to the transition, deletes them, and adds the outputs to the transition. """ function transition_to_rw_rule(p::LabelledPetriNet, t::Int) - Rule(map([(:it,:is), (:ot,:os)]) do (getIO, getState) + Rule(map([(:it, :is), (:ot, :os)]) do (getIO, getState) cset = petri_to_cset_type(p)() - [add_part!(cset, x) for x in p[incident(p, 1, getIO), [getState,:sname]]] + [add_part!(cset, x) for x in p[incident(p, 1, getIO), [getState, :sname]]] return create(cset) # interface I is an empty C-Set end...) end @@ -52,25 +53,28 @@ loc(s::Symbol) = Symbol("$(s)_loc") function petri_to_cset_type_gr(p::LabelledPetriNet, name::Symbol=:PGraph)::Type pres = copy(SchGraph) - isempty(p[:sname] ∩ [:V,:E] ) || error("V and E are reserved") + isempty(p[:sname] ∩ [:V, :E]) || error("V and E are reserved") for l in p[:sname] add_generator!(pres, Hom(loc(l), - add_generator!(pres, Ob(FreeSchema, l)), - pres.generators[:Ob][1])) + add_generator!(pres, Ob(FreeSchema, l)), + pres.generators[:Ob][1])) end - return AnonACSet(pres) + macro_call_expr = Expr(:macrocall, Symbol("@acset_type"), name, pres) + return eval(macro_call_expr) end SIR_gr = petri_to_cset_type_gr(sir_petri) """Each transition requires all tokens to be on the same vertex""" function transition_to_rw_rule_gr(p::LabelledPetriNet, t::Int) - V = @acset petri_to_cset_type_gr(p) begin V=1 end - Rule(map([(:it,:is), (:ot,:os)]) do (getIO, getState) + V = @acset petri_to_cset_type_gr(p) begin + V = 1 + end + Rule(map([(:it, :is), (:ot, :os)]) do (getIO, getState) cset = deepcopy(V) - [add_part!(cset, x; Dict(loc(x)=>1)...) - for x in p[incident(p, t, getIO), [getState,:sname]]] - return hom(V,cset) # interface I is an empty C-Set + [add_part!(cset, x; Dict(loc(x) => 1)...) + for x in p[incident(p, t, getIO), [getState, :sname]]] + return hom(V, cset) # interface I is an empty C-Set end...) end rw = transition_to_rw_rule_gr(sir_petri, 1) @@ -80,12 +84,17 @@ codom(rw.R) # Two I's on a vertex """Now each token type needs a rewrite rule to move""" function state_to_rw_rule_gr(p::LabelledPetriNet, s::Int) - E = @acset petri_to_cset_type_gr(p) begin V=2;E=1;src=1;tgt=2 end + E = @acset petri_to_cset_type_gr(p) begin + V = 2 + E = 1 + src = 1 + tgt = 2 + end x = p[s, :sname] Rule(map(1:2) do i cset = deepcopy(E) - add_part!(cset, x; Dict(loc(x)=>i)...) - return hom(E,cset) + add_part!(cset, x; Dict(loc(x) => i)...) + return hom(E, cset) end...) end diff --git a/docs/literate/ptg_simple.jl b/docs/literate/ptg_simple.jl new file mode 100644 index 0000000..7bca786 --- /dev/null +++ b/docs/literate/ptg_simple.jl @@ -0,0 +1,121 @@ +using Pkg +cd("/Users/aguinam1/Documents/Git/aaguinal.github.io/assets/slides/aaai-symposiumtalk-2023/julia") # use this environment to avoid `constructor` error +Pkg.activate(".") +Pkg.instantiate() +using PrettyTables + +using Catlab +using AlgebraicRewriting + +############################### SCHEMA ############################### +# Create an ontology by defining a finite presentation of a freely generated category using @present macro + +# About the world: The Bread World Ontology has the types Thing, BreadLoaf, Countertop, and Stool. The Breadloaf, Countertop, and Stool types have morphisms to Thing that represent is-a relationships. The InOn type can be used to encode a set relation (as opposed to a function) that was two morphisms going to Thing. One morphism points out the LHS of the relation and the other morphism point out the RHS of the relation. + +@present OntBreadWorld(FreeSchema) begin + Thing::Ob + BreadLoaf::Ob + Countertop::Ob + Stool::Ob + + BreadLoafIsThing::Hom(BreadLoaf, Thing) # is-a + CountertopIsThing::Hom(Countertop, Thing) # is-a + StoolIsThing::Hom(Stool, Thing) # is-a + + InOn::Ob + inOn_l::Hom(InOn, Thing) + inOn_r::Hom(InOn, Thing) +end + +# Visualize the ontology +to_graphviz(OntBreadWorld) + +# Make the ontology an acset type +@acset_type BreadWorld(OntBreadWorld) + +############################### RULE ############################### +# Construct rule by defining a span in the category of ACSets + +# Use the @acset macro to define an ACSet functor. The LHS refers to a type (or object) in our ontology and the RHS defines the set assignment using FinFunctions. For this, you need to completely specify the ACSet functor, i.e. every object and morphism in the index category must be specified. + +# About the rule: This rule moves a breadloaf from a countertop to a stool. + +# Left ACSet +L = @acset BreadWorld begin + Thing = 3 + BreadLoaf = 1 + Countertop = 1 + Stool = 1 + + BreadLoafIsThing = [1] + CountertopIsThing = [2] + StoolIsThing = [3] + + InOn = 1 + inOn_l = [1] + inOn_r = [2] # breadloaf is on the countertop +end + +# Middle/Keep ACSet +# The Thing, Breadloaf, Countertop, and Stool types should be held constant. The InOn type will change because we are changing the underlying set function. +K = @acset BreadWorld begin + Thing = 3 + BreadLoaf = 1 + Countertop = 1 + Stool = 1 +end + +# Right ACSet +R = @acset BreadWorld begin + Thing = 3 + BreadLoaf = 1 + Countertop = 1 + Stool = 1 + + BreadLoafIsThing = [1] + CountertopIsThing = [2] + StoolIsThing = [3] + + InOn = 1 + inOn_l = [1] + inOn_r = [3] # breadloaf is on the stool +end + +# Left leg of span +l = ACSetTransformation(K, L, Thing=[1, 2, 3], BreadLoaf=[1], Countertop=[1], Stool=[1]) + +# Right leg of span +r = ACSetTransformation(K, R, Thing=[1, 2, 3], BreadLoaf=[1], Countertop=[1], Stool=[1]) + +# Use AlgebraicRewriting.Rule wrapper to add a rule interface +moveBreadRule = Rule(l, r) + +############################### WORLD STATE ############################### +# Define a world state using the @acset macro. This is the ACSet way of specifying an ACSet. For this, you need to completely specify the ACSet functor, i.e. every object and morphism in the index category must be specified. The ACSets must be specified in terms of FinFunctions. + +# About the world state: In this world state, there are two countertops, one stool, and one breadloaf. All of these amount to four things. The breadloaf is on the first countertop. + +state = @acset BreadWorld begin + Thing = 4 + BreadLoaf = 1 + Countertop = 2 + Stool = 1 + + BreadLoafIsThing = [1] + CountertopIsThing = [2, 3] # there are two countertops + StoolIsThing = [4] + + InOn = 1 + inOn_l = [1] # breadloaf is on the countertop 1 + inOn_r = [2] +end + +############################### APPLY RULE ############################### +# Use the AlgebraicRewriting.get_matches(::Rule{T}, ::ACSet) utility function to find matches between the rule and the state. +matches = get_matches(moveBreadRule, state) + +# Take the first match +match = matches[1] + +# Compute the new world state after rewriting +new_state = rewrite_match(moveBreadRule, match) \ No newline at end of file diff --git a/docs/make.jl b/docs/make.jl index 9ff2e6c..fab4a8f 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -1,25 +1,68 @@ using Documenter +using Literate + +const literate_dir = joinpath(@__DIR__, "literate") +const generated_dir = joinpath(@__DIR__, "src", "generated") + +@info "Loading AlgebraicRewriting" using AlgebraicRewriting -# Set Literate.jl config if not being compiled on recognized service. -config = Dict{String,String}() -if !(haskey(ENV, "GITHUB_ACTIONS") || haskey(ENV, "GITLAB_CI")) - config["nbviewer_root_url"] = "https://nbviewer.jupyter.org/github/AlgebraicJulia/AlgebraicRewriting.jl/blob/gh-pages/dev" - config["repo_root_url"] = "https://github.com/AlgebraicJulia/AlgebraicRewriting.jl/blob/main/docs" +const no_literate = "--no-literate" in ARGS +if !no_literate + @info "Building Literate.jl docs" + + # Set Literate.jl config if not being compiled on recognized service. + config = Dict{String,String}() + if !(haskey(ENV, "GITHUB_ACTIONS") || haskey(ENV, "GITLAB_CI")) + config["nbviewer_root_url"] = "https://nbviewer.jupyter.org/github/AlgebraicJulia/AlgebraicRewriting.jl/blob/gh-pages/dev" + config["repo_root_url"] = "https://github.com/AlgebraicJulia/AlgebraicRewriting.jl/blob/main/docs" + end + + for (root, dirs, files) in walkdir(literate_dir) + out_dir = joinpath(generated_dir, relpath(root, literate_dir)) + for file in files + f, l = splitext(file) + if l == ".jl" && !startswith(f, "_") + Literate.markdown(joinpath(root, file), out_dir; + config=config, documenter=true, credit=false) + Literate.notebook(joinpath(root, file), out_dir; + execute=true, documenter=true, credit=false) + end + end + end end +@info "Building Documenter.jl docs" makedocs( - sitename = "AlgebraicRewriting", - format = Documenter.HTML(), - modules = [AlgebraicRewriting], - warnonly = true + modules=[AlgebraicRewriting], + format=Documenter.HTML( + size_threshold=300000, # in bytes + size_threshold_warn=150000 # in bytes + ), + sitename="AlgebraicRewriting.jl", + doctest=false, + checkdocs=:none, + warnonly=true, + pages=Any[ + "AlgebraicRewriting.jl"=>"index.md", + # "Examples"=>Any[ + # "generated/full_demo.md", + # "generated/game_of_life.md", + # "generated/lotka_volterra.md", + # "generated/mesh.md", + # "generated/petri_to_abm.md", + # "generated/ptg_simple.md" + # ], + "Library Reference"=>"api.md", + ] ) - @info "Deploying docs" deploydocs( - target = "build", - repo = "github.com/AlgebraicJulia/AlgebraicRewriting.jl.git", - branch = "gh-pages", - devbranch = "main" -) \ No newline at end of file + target="build", + repo="github.com/AlgebraicJulia/AlgebraicRewriting.jl.git", + branch="gh-pages", + devbranch="main" +) + +@info "Done!" \ No newline at end of file diff --git a/docs/src/Dynamic Tracing.ipynb b/docs/src/Dynamic Tracing.ipynb deleted file mode 100644 index f1aba69..0000000 --- a/docs/src/Dynamic Tracing.ipynb +++ /dev/null @@ -1,4071 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Traced Dynamic Categories - Brown and Spivak\n", - "This notebook accompanies the paper \"Traced Dynamic Categories\".\n", - "\n", - "There are two demos, an agent-based model (using the Maybe monad) and \n", - "a probabalistic graphical program using the Dist monad.\n", - "\n", - "## Lotka Volterra model\n", - "\n", - "\n", - "Our goal is to construct a program which performs a simulation akin to the \n", - "Netlogo model [Wolf Sheep Predation](http://ccl.northwestern.edu/netlogo/models/WolfSheepPredation).\n", - "\n", - "\n", - "### Setup \n", - "\n", - "The first step in working with ACSets is to pick a schema. We will model the \n", - "state of the world with the following schema:\n", - "\n", - "\"schema\"\n", - "\n", - "Sheep and Wolves both have energy, direction, and a position. Edges also have directions.\n", - "Whether or not a vertex has grass growing on it is also indicated with an \"Energy\", \n", - "the meaning of which is that when `grass_eng=0` there is grass present, and when \n", - "`grass_eng=n` there are `n` timesteps left until the grass grows back." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\u001b[32m\u001b[1m Activating\u001b[22m\u001b[39m project at `~/code/AlgebraicRewriting.jl/docs`\n" - ] - }, - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "n1\n", - "\n", - "V\n", - "\n", - "\n", - "\n", - "n6\n", - "\n", - "Eng\n", - "\n", - "\n", - "\n", - "n1->n6\n", - "\n", - "\n", - "grass_eng\n", - "\n", - "\n", - "\n", - "n2\n", - "\n", - "E\n", - "\n", - "\n", - "\n", - "n2->n1\n", - "\n", - "\n", - "src\n", - "\n", - "\n", - "\n", - "n2->n1\n", - "\n", - "\n", - "tgt\n", - "\n", - "\n", - "\n", - "n5\n", - "\n", - "Dir\n", - "\n", - "\n", - "\n", - "n2->n5\n", - "\n", - "\n", - "dir\n", - "\n", - "\n", - "\n", - "n3\n", - "\n", - "Sheep\n", - "\n", - "\n", - "\n", - "n3->n1\n", - "\n", - "\n", - "sheep_loc\n", - "\n", - "\n", - "\n", - "n3->n5\n", - "\n", - "\n", - "sheep_dir\n", - "\n", - "\n", - "\n", - "n3->n6\n", - "\n", - "\n", - "sheep_eng\n", - "\n", - "\n", - "\n", - "n4\n", - "\n", - "Wolf\n", - "\n", - "\n", - "\n", - "n4->n1\n", - "\n", - "\n", - "wolf_loc\n", - "\n", - "\n", - "\n", - "n4->n5\n", - "\n", - "\n", - "wolf_dir\n", - "\n", - "\n", - "\n", - "n4->n6\n", - "\n", - "\n", - "wolf_eng\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"V\")), Catlab.Graphics.Graphviz.Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"E\")), Catlab.Graphics.Graphviz.Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"Sheep\")), Catlab.Graphics.Graphviz.Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"Wolf\")), Catlab.Graphics.Graphviz.Node(\"n5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:shape => \"point\", :xlabel => \"Dir\")), Catlab.Graphics.Graphviz.Node(\"n6\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:shape => \"point\", :xlabel => \"Eng\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"src\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"tgt\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"sheep_loc\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"wolf_loc\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"grass_eng\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"sheep_eng\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"wolf_eng\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"sheep_dir\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"wolf_dir\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"dir\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:margin => \"0\", :shape => \"ellipse\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "using Pkg; \n", - "Pkg.activate(\"..\")\n", - "using Revise, Random, Test, StructEquality\n", - "using Catlab, Catlab.CategoricalAlgebra, Catlab.Graphs, Catlab.Graphics, Catlab.Programs\n", - "Random.seed!(124);\n", - "\n", - "@present SchLV <: SchGraph begin\n", - " (Sheep,Wolf)::Ob\n", - " sheep_loc::Hom(Sheep, V)\n", - " wolf_loc::Hom(Wolf, V)\n", - "\n", - " (Dir,Eng)::AttrType\n", - " grass_eng::Attr(V, Eng)\n", - " sheep_eng::Attr(Sheep, Eng)\n", - " wolf_eng::Attr(Wolf, Eng)\n", - " sheep_dir::Attr(Sheep, Dir)\n", - " wolf_dir::Attr(Wolf, Dir)\n", - " dir::Attr(E, Dir)\n", - "end;\n", - "to_graphviz(SchLV; prog=\"dot\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We also want an extension of this schema which includes coordinates on the vertices, for visualization." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "@present SchLV′ <: SchLV begin\n", - " Coord::AttrType \n", - " coord::Attr(V,Coord)\n", - "end;" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "ACSet schemas also require concrete Julia types for the schema's AttrTypes. We can use the standard integer for `Eng`, and the symbol type for `Dir` though we need to define `left` and `right`." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "import Catlab.CategoricalAlgebra: left, right\n", - "\n", - "function right(s::Symbol) \n", - " if s == :N return :E\n", - " elseif s == :S return :W \n", - " elseif s == :E return :S \n", - " elseif s == :W return :N \n", - " end\n", - "end\n", - "function left(s::Symbol) \n", - " if s == :N return :W\n", - " elseif s == :S return :E \n", - " elseif s == :E return :N \n", - " elseif s == :W return :S \n", - " end\n", - "end\n", - "\n", - "\n", - "\n", - "@acset_type LV_Generic(SchLV) <: HasGraph\n", - "const LV = LV_Generic{Symbol, Int}\n", - "\n", - "@acset_type LV′_Generic(SchLV′) <: HasGraph\n", - "const LV′ = LV′_Generic{Symbol, Int, Tuple{Int,Int}};" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "There are some relationships between these schemas which we can codify with \n", - "functors. Furthermore, we can use these functors to perform useful data \n", - "migration! For example, there is an endofunctor on `SchLV` that swaps wolf-things\n", - "and sheep-things via $\\Delta$ migration." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "using AlgebraicRewriting\n", - "Swap = Migrate(\n", - " Dict(:Sheep=>:Wolf, :Wolf=>:Sheep), \n", - " Dict([:sheep_loc=>:wolf_loc, :wolf_loc=>:sheep_loc,\n", - " :sheep_eng=>:wolf_eng, :wolf_eng=>:sheep_eng,:grass_eng =>:grass_eng,\n", - " :sheep_dir=>:wolf_dir, :wolf_dir=>:sheep_dir,]), LV);" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "There is also a functor $SchLV \\hookrightarrow SchLV\\_with\\_coordinates$ which \n", - "will be used for $\\Sigma$ migration." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "Coords = Migrate(\n", - " Dict(x=>x for x in Symbol.(SchLV.generators[:Ob])), \n", - " Dict(x=>x for x in Symbol.(SchLV.generators[:Hom])), \n", - " LV′; delta=false);" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We now write a function which initializes a n x n grid to serve as our initial simulation input. " - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "LV′ with elements V = 1:4, E = 1:16, Sheep = 1:2, Wolf = 1:2, Dir = 1:0, Eng = 1:0, Coord = 1:0\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Vgrass_engcoord
118(0, 0)
20(0, 1)
30(1, 0)
48(1, 1)
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Esrctgtdir
113E
213W
312N
412S
524E
624W
721N
821S
931E
1031W
1134N
1234S
1342E
1442W
1543N
1643S
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Sheepsheep_locsheep_engsheep_dir
125E
225W
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Wolfwolf_locwolf_engwolf_dir
135S
215E
\n", - "
\n" - ], - "text/plain": [ - "LV′ with elements V = 1:4, E = 1:16, Sheep = 1:2, Wolf = 1:2, Dir = 1:0, Eng = 1:0, Coord = 1:0\n", - "┌───┬───────────┬────────┐\n", - "│\u001b[1m V \u001b[0m│\u001b[1m grass_eng \u001b[0m│\u001b[1m coord \u001b[0m│\n", - "├───┼───────────┼────────┤\n", - "│ 1 │ 18 │ (0, 0) │\n", - "│ 2 │ 0 │ (0, 1) │\n", - "│ 3 │ 0 │ (1, 0) │\n", - "│ 4 │ 8 │ (1, 1) │\n", - "└───┴───────────┴────────┘\n", - "┌────┬─────┬─────┬─────┐\n", - "│\u001b[1m E \u001b[0m│\u001b[1m src \u001b[0m│\u001b[1m tgt \u001b[0m│\u001b[1m dir \u001b[0m│\n", - "├────┼─────┼─────┼─────┤\n", - "│ 1 │ 1 │ 3 │ E │\n", - "│ 2 │ 1 │ 3 │ W │\n", - "│ 3 │ 1 │ 2 │ N │\n", - "│ 4 │ 1 │ 2 │ S │\n", - "│ 5 │ 2 │ 4 │ E │\n", - "│ 6 │ 2 │ 4 │ W │\n", - "│ 7 │ 2 │ 1 │ N │\n", - "│ 8 │ 2 │ 1 │ S │\n", - "│ 9 │ 3 │ 1 │ E │\n", - "│ 10 │ 3 │ 1 │ W │\n", - "│ 11 │ 3 │ 4 │ N │\n", - "│ 12 │ 3 │ 4 │ S │\n", - "│ 13 │ 4 │ 2 │ E │\n", - "│ 14 │ 4 │ 2 │ W │\n", - "│ 15 │ 4 │ 3 │ N │\n", - "│ 16 │ 4 │ 3 │ S │\n", - "└────┴─────┴─────┴─────┘\n", - "┌───────┬───────────┬───────────┬───────────┐\n", - "│\u001b[1m Sheep \u001b[0m│\u001b[1m sheep_loc \u001b[0m│\u001b[1m sheep_eng \u001b[0m│\u001b[1m sheep_dir \u001b[0m│\n", - "├───────┼───────────┼───────────┼───────────┤\n", - "│ 1 │ 2 │ 5 │ E │\n", - "│ 2 │ 2 │ 5 │ W │\n", - "└───────┴───────────┴───────────┴───────────┘\n", - "┌──────┬──────────┬──────────┬──────────┐\n", - "│\u001b[1m Wolf \u001b[0m│\u001b[1m wolf_loc \u001b[0m│\u001b[1m wolf_eng \u001b[0m│\u001b[1m wolf_dir \u001b[0m│\n", - "├──────┼──────────┼──────────┼──────────┤\n", - "│ 1 │ 3 │ 5 │ S │\n", - "│ 2 │ 1 │ 5 │ E │\n", - "└──────┴──────────┴──────────┴──────────┘\n" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "function create_grid(n::Int)\n", - " lv = LV′()\n", - " coords = Dict()\n", - " # Initialize grass 50% green, 50% uniformly between 0-30\n", - " for i in 0:n-1\n", - " for j in 0:n-1\n", - " coords[i=>j] = add_part!(lv, :V; grass_eng=max(0,rand(-30:30)), coord=(i,j))\n", - " end\n", - " end\n", - " for i in 0:n-1\n", - " for j in 0:n-1\n", - " add_part!(lv, :E; src=coords[i=>j], tgt=coords[mod(i+1,n)=>j], dir=:E)\n", - " add_part!(lv, :E; src=coords[i=>j], tgt=coords[mod(i-1,n)=>j], dir=:W)\n", - " add_part!(lv, :E; src=coords[i=>j], tgt=coords[i=>mod(j+1,n)], dir=:N)\n", - " add_part!(lv, :E; src=coords[i=>j], tgt=coords[i=>mod(j-1,n)], dir=:S)\n", - " end\n", - " end\n", - " return lv\n", - "end\n", - "\n", - "\"\"\"\n", - "`n` is the length of the grid.\n", - "`sheep` and `wolves` are the fraction of spaces that are \n", - "populated with that animal\n", - "\"\"\"\n", - "function initialize(n::Int, sheep::Float64, wolves::Float64)::LV′\n", - " grid = create_grid(n)\n", - " args = [(sheep, :Sheep, :sheep_loc, :sheep_eng, :sheep_dir),\n", - " (wolves, :Wolf, :wolf_loc, :wolf_eng, :wolf_dir)]\n", - " for (n_, name, loc, eng, d) in args\n", - " for _ in 1:round(Int,n_*n^2)\n", - " dic = Dict([eng => 5, loc => rand(vertices(grid)),\n", - " d => rand([:N,:E,:S,:W])])\n", - " add_part!(grid, name; dic...)\n", - " end\n", - " end\n", - " return grid\n", - "end\n", - " \n", - "X = initialize(2, 0.5,0.5)\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now we need a function to properly visualize grid-like graphs. Green dots are vertices with grass, red squares are wolves, blue squares are sheep, and their energy is indicated by an integer. The direction being faced is indicated by position on the vertex. " - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "v1\n", - "\n", - "18\n", - "\n", - "\n", - "\n", - "v2\n", - "\n", - "\n", - "\n", - "\n", - "v3\n", - "\n", - "\n", - "\n", - "\n", - "v4\n", - "\n", - "8\n", - "\n", - "\n", - "\n", - "w1\n", - "\n", - "1⁵\n", - "\n", - "\n", - "\n", - "w2\n", - "\n", - "2⁵\n", - "\n", - "\n", - "\n", - "s1\n", - "\n", - "1⁵\n", - "\n", - "\n", - "\n", - "s2\n", - "\n", - "2⁵\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"neato\", Statement[Node(\"v1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"18\", :shape => \"circle\", :color => \"tan\", :pos => \"0,0!\")), Node(\"v2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :shape => \"circle\", :color => \"lightgreen\", :pos => \"0,1!\")), Node(\"v3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :shape => \"circle\", :color => \"lightgreen\", :pos => \"1,0!\")), Node(\"v4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"8\", :shape => \"circle\", :color => \"tan\", :pos => \"1,1!\")), Node(\"w1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"1⁵\", :shape => \"square\", :width => \"0.3px\", :height => \"0.3px\", :fixedsize => \"true\", :pos => \"1.004717280319715,-0.22614937799807883!\", :color => \"red\")), Node(\"w2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"2⁵\", :shape => \"square\", :width => \"0.3px\", :height => \"0.3px\", :fixedsize => \"true\", :pos => \"0.29707389327506667,0.09319626070648325!\", :color => \"red\")), Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"1⁵\", :shape => \"square\", :width => \"0.3px\", :height => \"0.3px\", :fixedsize => \"true\", :pos => \"0.3119549359085878,1.0129392759183524!\", :color => \"lightblue\")), Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"2⁵\", :shape => \"square\", :width => \"0.3px\", :height => \"0.3px\", :fixedsize => \"true\", :pos => \"-0.16483578192418105,1.0675968447635291!\", :color => \"lightblue\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :labelloc => \"t\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:shape => \"plain\", :style => \"filled\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "\n", - "using Catlab.Graphics.Graphviz: Attributes, Statement, Node, Digraph\n", - "using Catlab.Graphics.Graphviz\n", - "\n", - "supscript_d = Dict([\n", - " '1'=>'¹', '2'=>'²', '3'=>'³', '4'=>'⁴', '5'=>'⁵','6'=>'⁶', '7'=>'⁷', '8'=>'⁸', \n", - " '9'=>'⁹', '0'=>'⁰', 'x'=>'ˣ', 'y'=>'ʸ','z'=>'ᶻ','a'=>'ᵃ','b'=>'ᵇ','c'=>'ᶜ',\n", - " 'd'=>'ᵈ'])\n", - "supscript(x::String) = join([get(supscript_d, c, c) for c in x])\n", - "\n", - "function view_LV(p::ACSetTransformation; name=\"G\", title=\"\")\n", - " if nparts(dom(p),:Wolf) == 1 \n", - " star = :Wolf=>p[:Wolf](1)\n", - " elseif nparts(dom(p),:Sheep) == 1 \n", - " star = :Sheep=>p[:Sheep](1)\n", - " elseif nparts(dom(p),:V) == 1 \n", - " star = :V=>p[:V](1)\n", - " else\n", - " star = nothing\n", - " end\n", - " view_LV(codom(p); name=name, title=title, star=star)\n", - "end \n", - "function view_LV(p::LV′; name=\"G\", title=\"\", star=nothing)\n", - " pstr = [\"$(i),$(j)!\" for (i,j) in p[:coord]]\n", - " stmts = Statement[]\n", - " for s in 1:nv(p)\n", - " st = (star == (:V=>s)) ? \"*\" : \"\"\n", - " gv = p[s, :grass_eng]\n", - " col = gv == 0 ? \"lightgreen\" : \"tan\"\n", - " push!(stmts,Node(\"v$s\", Attributes(\n", - " :label=>gv == 0 ? \"\" : string(gv)*st,\n", - " :shape=>\"circle\",\n", - " :color=> col, :pos=>pstr[s])))\n", - " end\n", - " d = Dict([:E=>(1,0),:N=>(0,1), :S=>(0,-1),:W=>(-1,0),])\n", - "\n", - " args = [(:true,:Wolf,:wolf_loc,:wolf_eng,:wolf_dir),\n", - " (false, :Sheep, :sheep_loc, :sheep_eng,:sheep_dir)]\n", - "\n", - " for (is_wolf, prt, loc, eng, dr) in args\n", - " for w in parts(p, prt)\n", - " st = (star == ((is_wolf ? :Wolf : :Sheep) => w)) ? \"*\" : \"\"\n", - " e = only(incident(p,p[w,loc], :src) ∩ incident(p,p[w,dr], :dir))\n", - " s = src(p,e)\n", - " dx, dy = d[p[e, :dir]]\n", - " (sx,sy) = p[s,:coord]\n", - "\n", - " L, R = 0.25, 0.1\n", - " wx = sx+L*dx+R*rand()\n", - " wy = sy+L*dy+R*rand()\n", - " ID = \"$(is_wolf ? :w : :s)$w\"\n", - " append!(stmts,[Node(ID, Attributes(\n", - " :label=>\"$w\"*supscript(\"$(p[w,eng])\")*st,\n", - " :shape=>\"square\", :width=>\"0.3px\", :height=>\"0.3px\", :fixedsize=>\"true\",\n", - " :pos=>\"$(wx),$(wy)!\",:color=> is_wolf ? \"red\" : \"lightblue\"))])\n", - " end\n", - " end\n", - "\n", - " g = Graphviz.Digraph(name, Statement[stmts...]; prog=\"neato\",\n", - " graph_attrs=Attributes(:label=>title, :labelloc=>\"t\"),\n", - " node_attrs=Attributes(:shape=>\"plain\", :style=>\"filled\"))\n", - " return g\n", - "end\n", - "\n", - "\n", - "view_LV(X)\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If we have a wolf/sheep/vertex shaped agent, we want to be able to show this \n", - "fact visually, too. \n", - "\n", - "The following example shows when a wolf is distinguished." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "v1\n", - "\n", - "18\n", - "\n", - "\n", - "\n", - "v2\n", - "\n", - "\n", - "\n", - "\n", - "v3\n", - "\n", - "\n", - "\n", - "\n", - "v4\n", - "\n", - "8\n", - "\n", - "\n", - "\n", - "w1\n", - "\n", - "1⁵*\n", - "\n", - "\n", - "\n", - "w2\n", - "\n", - "2⁵\n", - "\n", - "\n", - "\n", - "s1\n", - "\n", - "1⁵\n", - "\n", - "\n", - "\n", - "s2\n", - "\n", - "2⁵\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"neato\", Statement[Node(\"v1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"18\", :shape => \"circle\", :color => \"tan\", :pos => \"0,0!\")), Node(\"v2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :shape => \"circle\", :color => \"lightgreen\", :pos => \"0,1!\")), Node(\"v3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :shape => \"circle\", :color => \"lightgreen\", :pos => \"1,0!\")), Node(\"v4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"8\", :shape => \"circle\", :color => \"tan\", :pos => \"1,1!\")), Node(\"w1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"1⁵*\", :shape => \"square\", :width => \"0.3px\", :height => \"0.3px\", :fixedsize => \"true\", :pos => \"1.0331212011410318,-0.24545813216199175!\", :color => \"red\")), Node(\"w2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"2⁵\", :shape => \"square\", :width => \"0.3px\", :height => \"0.3px\", :fixedsize => \"true\", :pos => \"0.32479214049066474,0.07827367750897557!\", :color => \"red\")), Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"1⁵\", :shape => \"square\", :width => \"0.3px\", :height => \"0.3px\", :fixedsize => \"true\", :pos => \"0.30746907219091113,1.0489950483319568!\", :color => \"lightblue\")), Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"2⁵\", :shape => \"square\", :width => \"0.3px\", :height => \"0.3px\", :fixedsize => \"true\", :pos => \"-0.2120846526927245,1.0675905286079452!\", :color => \"lightblue\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :labelloc => \"t\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:shape => \"plain\", :style => \"filled\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "const Var = AttrVar # shorthand\n", - "Base.isless(x::Var,y::Var) = x.val < y.val\n", - "\n", - "\"\"\"Visualize a LV with a distinguished focus\"\"\"\n", - "function view_LV(p::ACSetTransformation; name=\"G\", title=\"\")\n", - " if nparts(dom(p),:Wolf) == 1 \n", - " star = :Wolf=>p[:Wolf](1)\n", - " elseif nparts(dom(p),:Sheep) == 1 \n", - " star = :Sheep=>p[:Sheep](1)\n", - " elseif nparts(dom(p),:V) == 1 \n", - " star = :V=>p[:V](1)\n", - " else\n", - " star = nothing\n", - " end\n", - " view_LV(codom(p); name=name, title=title, star=star)\n", - "end\n", - "\n", - "yLV = yoneda_cache(LV); # compute representables\n", - "\n", - "# Empty agent type\n", - "I = LV()\n", - "# Generic sheep agent\n", - "S = @acset_colim yLV begin s::Sheep end\n", - "# Generic wolf agent\n", - "W = Swap(S)\n", - "# Generic grass agent\n", - "G = @acset_colim yLV begin v::V end\n", - "\n", - "N = Dict(W=>\"W\",S=>\"S\",G=>\"G\", I=>\"\") # names for visualization\n", - "\n", - "\n", - "view_LV(homomorphism(Coords(W), X)) # a distinguished wolf " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Defining the rewrite rules \n", - "We are now ready to begin constructing rewrite rules! \n", - "\n", - "We start with rotation of Sheep. This requires no change of combinatorial data, only a function \n", - "applied to the value of the bound `Dir` variable in our generic sheep, `S`." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "v1\n", - "\n", - "\n", - "\n", - "\n", - "v2\n", - "\n", - "18\n", - "\n", - "\n", - "\n", - "v3\n", - "\n", - "\n", - "\n", - "\n", - "v4\n", - "\n", - "8\n", - "\n", - "\n", - "\n", - "w1\n", - "\n", - "1⁵\n", - "\n", - "\n", - "\n", - "w2\n", - "\n", - "2⁵\n", - "\n", - "\n", - "\n", - "s1\n", - "\n", - "1⁵\n", - "\n", - "\n", - "\n", - "s2\n", - "\n", - "2⁵\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"neato\", Statement[Node(\"v1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :shape => \"circle\", :color => \"lightgreen\", :pos => \"0,1!\")), Node(\"v2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"18\", :shape => \"circle\", :color => \"tan\", :pos => \"0,0!\")), Node(\"v3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :shape => \"circle\", :color => \"lightgreen\", :pos => \"1,0!\")), Node(\"v4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"8\", :shape => \"circle\", :color => \"tan\", :pos => \"1,1!\")), Node(\"w1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"1⁵\", :shape => \"square\", :width => \"0.3px\", :height => \"0.3px\", :fixedsize => \"true\", :pos => \"1.005154834855672,-0.18101047786750163!\", :color => \"red\")), Node(\"w2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"2⁵\", :shape => \"square\", :width => \"0.3px\", :height => \"0.3px\", :fixedsize => \"true\", :pos => \"0.3480552534673957,0.09064370766480713!\", :color => \"red\")), Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"1⁵\", :shape => \"square\", :width => \"0.3px\", :height => \"0.3px\", :fixedsize => \"true\", :pos => \"0.09120708158457794,1.2570149884051118!\", :color => \"lightblue\")), Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"2⁵\", :shape => \"square\", :width => \"0.3px\", :height => \"0.3px\", :fixedsize => \"true\", :pos => \"-0.19713556729705106,1.0243809126295262!\", :color => \"lightblue\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :labelloc => \"t\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:shape => \"plain\", :style => \"filled\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "rl = Rule(id(S),id(S); expr=(Dir=[xs->left(only(xs))],))\n", - "rr = Rule(id(S),id(S); expr=(Dir=[xs->right(only(xs))],));\n", - "\n", - "view_LV(rewrite(Coords(rl), X)) # a sheep has rotated left " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We want to wrap these rewrite rules into a primitive generator for programs, `RuleApp`. \n", - "\n", - "We want this rule to occur in the context of a sheep agent (the rule means, \"*this* sheep turns\", not \"*some arbitrary* sheep turns\"), so the `RuleApp` takes a parameter for the shape of the agent (Catlab automatically deduces the maps $S \\rightarrow L$ and $S \\rightarrow R$ for the rewrite rule because there is only one choice, which is the identity map).\n", - "\n", - "Furthermore, this isn't a rule that can conceivable fail to match, so we don't really need to distinguish between the two outgoing ports of the `RuleApp` box, so we merge them together (which is the effect of calling `tryrule` on a `RuleApp`. " - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n1\n", - "\n", - "\n", - "turn_left\n", - "\n", - "\n", - "\n", - "\n", - "n0in1:s->n1:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n1:s->n0out1:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n1:s->n0out1:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Statement[Subgraph(\"\", Statement[Node(\"n0in1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"in1\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rank => \"source\", :rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\", :shape => \"none\", :label => \"\", :width => \"0.333\", :height => \"0\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\")), Subgraph(\"\", Statement[Node(\"n0out1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"out1\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rank => \"sink\", :rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\", :shape => \"none\", :label => \"\", :width => \"0.333\", :height => \"0\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\")), Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"turn_left\", :fillcolor => \"lightblue\", :id => \"n1\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
turn_left
\"), :style => \"filled\")), Edge(NodeID[NodeID(\"n0in1\", \"s\", \"\"), NodeID(\"n1\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"S\", :id => \"e1\", :label => \"S\")), Edge(NodeID[NodeID(\"n1\", \"out1\", \"s\"), NodeID(\"n0out1\", \"n\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"S\", :id => \"e2\", :label => \"S\")), Edge(NodeID[NodeID(\"n1\", \"out2\", \"s\"), NodeID(\"n0out1\", \"n\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"S\", :id => \"e3\", :label => \"S\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\", :label => \"\", :labelloc => \"t\", :rankdir => \"TB\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\", :shape => \"none\", :width => \"0\", :height => \"0\", :margin => \"0\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:arrowsize => \"0.5\", :fontname => \"Serif\"))" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sheep_rotate_l = tryrule(RuleApp(:turn_left, rl, S))\n", - "sheep_rotate_r = tryrule(RuleApp(:turn_right, rr, S))\n", - "\n", - "view_sched(sheep_rotate_l; names=N)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now we treat sheep moving forward, which comes with an energy cost of $1$. Again we use `tryrule`. This time, we explicitly provide maps $S \\rightarrow L$ and $S\\rightarrow R$ to relate the sheep agent to the input and output of the rewrite rule." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "v1\n", - "\n", - "\n", - "\n", - "\n", - "v2\n", - "\n", - "18\n", - "\n", - "\n", - "\n", - "v3\n", - "\n", - "\n", - "\n", - "\n", - "v4\n", - "\n", - "8\n", - "\n", - "\n", - "\n", - "w1\n", - "\n", - "1⁵\n", - "\n", - "\n", - "\n", - "w2\n", - "\n", - "2⁵\n", - "\n", - "\n", - "\n", - "s1\n", - "\n", - "1⁴\n", - "\n", - "\n", - "\n", - "s2\n", - "\n", - "2⁵\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"neato\", Statement[Node(\"v1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :shape => \"circle\", :color => \"lightgreen\", :pos => \"0,0!\")), Node(\"v2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"18\", :shape => \"circle\", :color => \"tan\", :pos => \"0,1!\")), Node(\"v3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :shape => \"circle\", :color => \"lightgreen\", :pos => \"1,0!\")), Node(\"v4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"8\", :shape => \"circle\", :color => \"tan\", :pos => \"1,1!\")), Node(\"w1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"1⁵\", :shape => \"square\", :width => \"0.3px\", :height => \"0.3px\", :fixedsize => \"true\", :pos => \"1.0023939063306244,-0.22948473942415715!\", :color => \"red\")), Node(\"w2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"2⁵\", :shape => \"square\", :width => \"0.3px\", :height => \"0.3px\", :fixedsize => \"true\", :pos => \"0.34572401849694373,1.047510287916876!\", :color => \"red\")), Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"1⁴\", :shape => \"square\", :width => \"0.3px\", :height => \"0.3px\", :fixedsize => \"true\", :pos => \"0.3023318040617577,1.0004773935643292!\", :color => \"lightblue\")), Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"2⁵\", :shape => \"square\", :width => \"0.3px\", :height => \"0.3px\", :fixedsize => \"true\", :pos => \"-0.1697447624481097,0.00831525464965377!\", :color => \"lightblue\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :labelloc => \"t\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:shape => \"plain\", :style => \"filled\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s_fwd_l = @acset_colim yLV begin e::E; s::Sheep; sheep_loc(s)==src(e) end \n", - "s_fwd_i = @acset_colim yLV begin e::E end\n", - "s_fwd_r = @acset_colim yLV begin e::E; s::Sheep; sheep_loc(s)==tgt(e) end \n", - "s_n = @acset_colim yLV begin \n", - " e::E; s::Sheep; sheep_loc(s)==src(e); sheep_eng(s)==0 \n", - "end\n", - "\n", - "\n", - "sheep_fwd_rule = Rule(\n", - " homomorphism(s_fwd_i, s_fwd_l; monic=true),\n", - " homomorphism(s_fwd_i, s_fwd_r; monic=true),\n", - " ac=[AppCond(homomorphism(s_fwd_l, s_n), false)],\n", - " expr=(Eng=Dict(3=>vs->vs[3]-1), Dir=Dict(2=>vs->vs[2]))\n", - ")\n", - "\n", - "sheep_fwd = tryrule(RuleApp(:move_fwd, sheep_fwd_rule, \n", - " homomorphism(S,s_fwd_l), homomorphism(S,s_fwd_r)))\n", - "\n", - "view_LV(rewrite(Coords(sheep_fwd_rule), X))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Next we consider a sheep eating grass. Our pattern is a sheep on a vertex. A positive application \n", - "condition ensures that grass is present on the vertex for the rewrite to be \n", - "applicable. The sheep gains 4 energy units." - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "v1\n", - "\n", - "30\n", - "\n", - "\n", - "\n", - "v2\n", - "\n", - "18\n", - "\n", - "\n", - "\n", - "v3\n", - "\n", - "\n", - "\n", - "\n", - "v4\n", - "\n", - "8\n", - "\n", - "\n", - "\n", - "w1\n", - "\n", - "1⁵\n", - "\n", - "\n", - "\n", - "w2\n", - "\n", - "2⁵\n", - "\n", - "\n", - "\n", - "s1\n", - "\n", - "1⁹\n", - "\n", - "\n", - "\n", - "s2\n", - "\n", - "2⁵\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"neato\", Statement[Node(\"v1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"30\", :shape => \"circle\", :color => \"tan\", :pos => \"0,1!\")), Node(\"v2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"18\", :shape => \"circle\", :color => \"tan\", :pos => \"0,0!\")), Node(\"v3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :shape => \"circle\", :color => \"lightgreen\", :pos => \"1,0!\")), Node(\"v4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"8\", :shape => \"circle\", :color => \"tan\", :pos => \"1,1!\")), Node(\"w1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"1⁵\", :shape => \"square\", :width => \"0.3px\", :height => \"0.3px\", :fixedsize => \"true\", :pos => \"1.0770331034613136,-0.17246006906293404!\", :color => \"red\")), Node(\"w2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"2⁵\", :shape => \"square\", :width => \"0.3px\", :height => \"0.3px\", :fixedsize => \"true\", :pos => \"0.26861065009487906,0.003926390798588131!\", :color => \"red\")), Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"1⁹\", :shape => \"square\", :width => \"0.3px\", :height => \"0.3px\", :fixedsize => \"true\", :pos => \"0.31346391718833944,1.0419286835686297!\", :color => \"lightblue\")), Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"2⁵\", :shape => \"square\", :width => \"0.3px\", :height => \"0.3px\", :fixedsize => \"true\", :pos => \"-0.18505829106989813,1.0057333506931794!\", :color => \"lightblue\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :labelloc => \"t\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:shape => \"plain\", :style => \"filled\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "\n", - "\n", - "# Eat grass + 4eng\n", - "#-----------------\n", - "# Grass is at 0 - meaning it's ready to be eaten\n", - "s_eat_pac = @acset_colim yLV begin s::Sheep; grass_eng(sheep_loc(s))==0 end\n", - "\n", - "se_rule = Rule(id(S), id(S); expr=(Eng=[vs->vs[1]+4,vs->30],), \n", - " ac=[AppCond(homomorphism(S,s_eat_pac))])\n", - "sheep_eat = tryrule(RuleApp(:Sheep_eat, se_rule, S))\n", - "sheep_eat = tryrule(RuleApp(:Sheep_eat, se_rule, S))\n", - "view_LV(rewrite(Coords(se_rule), X))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now for wolves eating sheep who are on the same vertex. This gives them +20 energy. " - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "v1\n", - "\n", - "\n", - "\n", - "\n", - "v2\n", - "\n", - "18\n", - "\n", - "\n", - "\n", - "v3\n", - "\n", - "\n", - "\n", - "\n", - "v4\n", - "\n", - "8\n", - "\n", - "\n", - "\n", - "w1\n", - "\n", - "1²⁵\n", - "\n", - "\n", - "\n", - "w2\n", - "\n", - "2⁵\n", - "\n", - "\n", - "\n", - "s1\n", - "\n", - "1⁵\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"neato\", Statement[Node(\"v1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :shape => \"circle\", :color => \"lightgreen\", :pos => \"0,1!\")), Node(\"v2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"18\", :shape => \"circle\", :color => \"tan\", :pos => \"0,0!\")), Node(\"v3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :shape => \"circle\", :color => \"lightgreen\", :pos => \"1,0!\")), Node(\"v4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"8\", :shape => \"circle\", :color => \"tan\", :pos => \"1,1!\")), Node(\"w1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"1²⁵\", :shape => \"square\", :width => \"0.3px\", :height => \"0.3px\", :fixedsize => \"true\", :pos => \"0.013943393323564847,0.8336771573061394!\", :color => \"red\")), Node(\"w2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"2⁵\", :shape => \"square\", :width => \"0.3px\", :height => \"0.3px\", :fixedsize => \"true\", :pos => \"0.29458639112729784,0.04340838742990577!\", :color => \"red\")), Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"1⁵\", :shape => \"square\", :width => \"0.3px\", :height => \"0.3px\", :fixedsize => \"true\", :pos => \"-0.17733454295881787,1.0538864110887607!\", :color => \"lightblue\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :labelloc => \"t\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:shape => \"plain\", :style => \"filled\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "w_eat_l = @acset_colim yLV begin s::Sheep; w::Wolf; sheep_loc(s)==wolf_loc(w) end\n", - "\n", - "we_rule = Rule(homomorphism(W, w_eat_l), id(W); expr=(Eng=[vs->vs[3]+20,vs->vs[1]],))\n", - "wolf_eat = tryrule(RuleApp(:Wolf_eat, we_rule, W))\n", - "\n", - "wolf_eat = tryrule(RuleApp(:Wolf_eat, we_rule, W))\n", - " \n", - "X[1,:wolf_loc] = 2 # put the wolf with the sheep\n", - "view_LV(rewrite(Coords(we_rule), X))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Starvation at $0$ energy is our first example of a rewrite rule which has a different agent type for its input and output (as the current agent being focused on is removed from the model). The output agent for a successful rewrite rule is an empty agent. \n", - "\n", - "If we wish to merge together the output wires of the rule application, we get a type checking error! We have to postcompose the 'unsuccessful match' branch (which has the same agent type as the input, i.e. sheep) with a forgetful `Weaken` box in order to do this." - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n1\n", - "\n", - "\n", - "starve\n", - "\n", - "\n", - "\n", - "\n", - "n0in1:s->n1:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n1:s->n0out1:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n2\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n1:s->n2:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "n2:s->n0out1:n\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Statement[Subgraph(\"\", Statement[Node(\"n0in1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"in1\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rank => \"source\", :rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\", :shape => \"none\", :label => \"\", :width => \"0.333\", :height => \"0\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\")), Subgraph(\"\", Statement[Node(\"n0out1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"out1\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rank => \"sink\", :rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\", :shape => \"none\", :label => \"\", :width => \"0.333\", :height => \"0\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\")), Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"starve\", :fillcolor => \"lightblue\", :id => \"n1\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
starve
\"), :style => \"filled\")), Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"\", :fillcolor => \"lavender\", :id => \"n2\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
\"), :style => \"filled\")), Edge(NodeID[NodeID(\"n0in1\", \"s\", \"\"), NodeID(\"n1\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"S\", :id => \"e1\", :label => \"S\")), Edge(NodeID[NodeID(\"n1\", \"out2\", \"s\"), NodeID(\"n2\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"S\", :id => \"e2\", :label => \"S\")), Edge(NodeID[NodeID(\"n1\", \"out1\", \"s\"), NodeID(\"n0out1\", \"n\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"\", :id => \"e3\", :label => \"\")), Edge(NodeID[NodeID(\"n2\", \"out1\", \"s\"), NodeID(\"n0out1\", \"n\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"\", :id => \"e4\", :label => \"\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\", :label => \"\", :labelloc => \"t\", :rankdir => \"TB\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\", :shape => \"none\", :width => \"0\", :height => \"0\", :margin => \"0\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:arrowsize => \"0.5\", :fontname => \"Serif\"))" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "\n", - "# Die if 0 eng\n", - "#-------------\n", - "s_die_l = @acset_colim yLV begin s::Sheep; sheep_eng(s)==0 end \n", - "\n", - "sheep_die_rule = Rule(homomorphism(G, s_die_l), id(G))\n", - "sheep_starve = (RuleApp(:starve, sheep_die_rule, \n", - " homomorphism(S,s_die_l), create(G))\n", - " ⋅ (id([I]) ⊗ Weaken(create(S))) ⋅ merge_wires(I))\n", - "\n", - "view_sched(sheep_starve; names=N)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now we treat reproduction of sheep. A new sheep is created, and energy is split between the two sheep (rounding up if it is initially odd)." - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "v1\n", - "\n", - "\n", - "\n", - "\n", - "v2\n", - "\n", - "18\n", - "\n", - "\n", - "\n", - "v3\n", - "\n", - "\n", - "\n", - "\n", - "v4\n", - "\n", - "8\n", - "\n", - "\n", - "\n", - "w1\n", - "\n", - "1⁵\n", - "\n", - "\n", - "\n", - "w2\n", - "\n", - "2⁵\n", - "\n", - "\n", - "\n", - "s1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s2\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s3\n", - "\n", - "3⁵\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"neato\", Statement[Node(\"v1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :shape => \"circle\", :color => \"lightgreen\", :pos => \"0,1!\")), Node(\"v2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"18\", :shape => \"circle\", :color => \"tan\", :pos => \"0,0!\")), Node(\"v3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :shape => \"circle\", :color => \"lightgreen\", :pos => \"1,0!\")), Node(\"v4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"8\", :shape => \"circle\", :color => \"tan\", :pos => \"1,1!\")), Node(\"w1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"1⁵\", :shape => \"square\", :width => \"0.3px\", :height => \"0.3px\", :fixedsize => \"true\", :pos => \"0.04834876138622121,0.786514214153027!\", :color => \"red\")), Node(\"w2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"2⁵\", :shape => \"square\", :width => \"0.3px\", :height => \"0.3px\", :fixedsize => \"true\", :pos => \"0.2714212056247362,0.08581907500965613!\", :color => \"red\")), Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"1³\", :shape => \"square\", :width => \"0.3px\", :height => \"0.3px\", :fixedsize => \"true\", :pos => \"0.3018431565424968,1.0583978268125025!\", :color => \"lightblue\")), Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"2³\", :shape => \"square\", :width => \"0.3px\", :height => \"0.3px\", :fixedsize => \"true\", :pos => \"0.3469529062124236,1.0475733146081276!\", :color => \"lightblue\")), Node(\"s3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"3⁵\", :shape => \"square\", :width => \"0.3px\", :height => \"0.3px\", :fixedsize => \"true\", :pos => \"-0.15404604255507384,1.0027837489558682!\", :color => \"lightblue\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :labelloc => \"t\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:shape => \"plain\", :style => \"filled\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s_reprod_r = @acset_colim yLV begin (x,y)::Sheep; sheep_loc(x)==sheep_loc(y) end\n", - "\n", - "sheep_reprod_rule = Rule(\n", - " homomorphism(G, S),\n", - " homomorphism(G, s_reprod_r); \n", - " expr=(Dir=[vs->vs[1],vs->vs[1]], Eng=[vs->vs[2], \n", - " fill(vs->round(Int, vs[1]/2, RoundUp), 2)...],)\n", - " )\n", - "\n", - "\n", - "sheep_reprod = RuleApp(:reproduce, sheep_reprod_rule, \n", - " id(S), homomorphism(S, s_reprod_r)) |> tryrule\n", - "\n", - "view_LV(rewrite(Coords(sheep_reprod_rule), X))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Lastly we decrement the grass counter if it's not zero." - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "v1\n", - "\n", - "17\n", - "\n", - "\n", - "\n", - "v2\n", - "\n", - "\n", - "\n", - "\n", - "v3\n", - "\n", - "\n", - "\n", - "\n", - "v4\n", - "\n", - "8\n", - "\n", - "\n", - "\n", - "w1\n", - "\n", - "1⁵\n", - "\n", - "\n", - "\n", - "w2\n", - "\n", - "2⁵\n", - "\n", - "\n", - "\n", - "s1\n", - "\n", - "1⁵\n", - "\n", - "\n", - "\n", - "s2\n", - "\n", - "2⁵\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"neato\", Statement[Node(\"v1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"17\", :shape => \"circle\", :color => \"tan\", :pos => \"0,0!\")), Node(\"v2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :shape => \"circle\", :color => \"lightgreen\", :pos => \"0,1!\")), Node(\"v3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :shape => \"circle\", :color => \"lightgreen\", :pos => \"1,0!\")), Node(\"v4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"8\", :shape => \"circle\", :color => \"tan\", :pos => \"1,1!\")), Node(\"w1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"1⁵\", :shape => \"square\", :width => \"0.3px\", :height => \"0.3px\", :fixedsize => \"true\", :pos => \"0.041688618255363755,0.7846491344352408!\", :color => \"red\")), Node(\"w2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"2⁵\", :shape => \"square\", :width => \"0.3px\", :height => \"0.3px\", :fixedsize => \"true\", :pos => \"0.2819477884900462,0.06599169161785615!\", :color => \"red\")), Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"1⁵\", :shape => \"square\", :width => \"0.3px\", :height => \"0.3px\", :fixedsize => \"true\", :pos => \"0.3448080890756836,1.0845818082735128!\", :color => \"lightblue\")), Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"2⁵\", :shape => \"square\", :width => \"0.3px\", :height => \"0.3px\", :fixedsize => \"true\", :pos => \"-0.2297801133300373,1.0507109586669932!\", :color => \"lightblue\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :labelloc => \"t\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:shape => \"plain\", :style => \"filled\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "g_inc_n = deepcopy(G)\n", - "set_subpart!(g_inc_n,1, :grass_eng, 0); \n", - "rem_part!(g_inc_n, :Eng, 1)\n", - "\n", - "g_inc_rule = Rule(id(G), id(G);\n", - " ac=[AppCond(homomorphism(G, g_inc_n), false)],\n", - " expr=(Eng=[vs->only(vs)-1],))\n", - "g_inc = RuleApp(:GrassIncrements,g_inc_rule, G) |> tryrule\n", - "\n", - "view_LV(rewrite(Coords(g_inc_rule), X))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Assembling a program from the rules\n", - "Recognizing there is a commonality between the day in the life of a sheep and a wolf, we have only defined certain rules for sheep and will use `Swap` to turn them into wolf rules. We first assemble the common part of the day into a program and then use `Swap` on that program.\n", - "\n", - "This assembly uses the `mk_sched` function which allows for a programming-like syntax (between the `quote ... end`, below) to specify the control flow of a program." - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n1\n", - "\n", - "\n", - "turn\n", - "\n", - "\n", - "\n", - "\n", - "n0in1:s->n1:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n2\n", - "\n", - "\n", - "turn_left\n", - "\n", - "\n", - "\n", - "\n", - "n1:s->n2:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n3\n", - "\n", - "\n", - "turn_right\n", - "\n", - "\n", - "\n", - "\n", - "n1:s->n3:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n4\n", - "\n", - "\n", - "move_fwd\n", - "\n", - "\n", - "\n", - "\n", - "n1:s->n4:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n2:s->n4:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n2:s->n4:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n3:s->n4:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n3:s->n4:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n5\n", - "\n", - "\n", - "uniform\n", - "\n", - "\n", - "\n", - "\n", - "n4:s->n5:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n4:s->n5:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n6\n", - "\n", - "\n", - "reproduce\n", - "\n", - "\n", - "\n", - "\n", - "n5:s->n6:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n7\n", - "\n", - "\n", - "starve\n", - "\n", - "\n", - "\n", - "\n", - "n5:s->n7:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n6:s->n7:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n6:s->n7:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "n7:s->n0out1:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n8\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n7:s->n8:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "n8:s->n0out1:n\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Statement[Subgraph(\"\", Statement[Node(\"n0in1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"in1\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rank => \"source\", :rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\", :shape => \"none\", :label => \"\", :width => \"0.333\", :height => \"0\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\")), Subgraph(\"\", Statement[Node(\"n0out1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"out1\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rank => \"sink\", :rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\", :shape => \"none\", :label => \"\", :width => \"0.333\", :height => \"0\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\")), Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"turn\", :fillcolor => \"lightpink\", :id => \"n1\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
turn
\"), :style => \"filled\")), Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"turn_left\", :fillcolor => \"lightblue\", :id => \"n2\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
turn_left
\"), :style => \"filled\")), Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"turn_right\", :fillcolor => \"lightblue\", :id => \"n3\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
turn_right
\"), :style => \"filled\")), Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"move_fwd\", :fillcolor => \"lightblue\", :id => \"n4\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
move_fwd
\"), :style => \"filled\")), Node(\"n5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"uniform\", :fillcolor => \"lightpink\", :id => \"n5\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
uniform
\"), :style => \"filled\")), Node(\"n6\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"reproduce\", :fillcolor => \"lightblue\", :id => \"n6\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
reproduce
\"), :style => \"filled\")), Node(\"n7\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"starve\", :fillcolor => \"lightblue\", :id => \"n7\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
starve
\"), :style => \"filled\")), Node(\"n8\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"\", :fillcolor => \"lavender\", :id => \"n8\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
\"), :style => \"filled\")) … Edge(NodeID[NodeID(\"n5\", \"out1\", \"s\"), NodeID(\"n6\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"S\", :id => \"e8\", :label => \"S\")), Edge(NodeID[NodeID(\"n7\", \"out2\", \"s\"), NodeID(\"n8\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"S\", :id => \"e9\", :label => \"S\")), Edge(NodeID[NodeID(\"n4\", \"out1\", \"s\"), NodeID(\"n5\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"S\", :id => \"e10\", :label => \"S\")), Edge(NodeID[NodeID(\"n4\", \"out2\", \"s\"), NodeID(\"n5\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"S\", :id => \"e11\", :label => \"S\")), Edge(NodeID[NodeID(\"n5\", \"out2\", \"s\"), NodeID(\"n7\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"S\", :id => \"e12\", :label => \"S\")), Edge(NodeID[NodeID(\"n6\", \"out1\", \"s\"), NodeID(\"n7\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"S\", :id => \"e13\", :label => \"S\")), Edge(NodeID[NodeID(\"n1\", \"out3\", \"s\"), NodeID(\"n3\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"S\", :id => \"e14\", :label => \"S\")), Edge(NodeID[NodeID(\"n1\", \"out1\", \"s\"), NodeID(\"n2\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"S\", :id => \"e15\", :label => \"S\")), Edge(NodeID[NodeID(\"n8\", \"out1\", \"s\"), NodeID(\"n0out1\", \"n\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"\", :id => \"e16\", :label => \"\")), Edge(NodeID[NodeID(\"n7\", \"out1\", \"s\"), NodeID(\"n0out1\", \"n\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"\", :id => \"e17\", :label => \"\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\", :label => \"\", :labelloc => \"t\", :rankdir => \"TB\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\", :shape => \"none\", :width => \"0\", :height => \"0\", :margin => \"0\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:arrowsize => \"0.5\", :fontname => \"Serif\"))" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "\n", - "# Stuff that happens once per sheep \n", - "#----------------------------------\n", - "\n", - "# 25% chance of left turn, 25% chance of right turn, 50% stay in same direction\n", - "# 50% chance of reproducing\n", - "general = mk_sched((;),(init=:S,), (\n", - " S = S, I = I, G = G,\n", - " turn = const_cond([1.,2.,1.], S; name=:turn), \n", - " maybe = uniform(2, S), \n", - " lft = sheep_rotate_l, \n", - " rght = sheep_rotate_r, \n", - " fwd = sheep_fwd, \n", - " repro = sheep_reprod, \n", - " starve = sheep_starve), \n", - " quote \n", - " out_l, out_str, out_r = turn(init)\n", - " moved = fwd([lft(out_l), out_str, rght(out_r)]) \n", - " out_repro, out_no_repro = maybe(moved)\n", - " return starve([repro(out_repro), out_no_repro])\n", - "end)\n", - "view_sched(general; names=N)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The wolves and sheep differ in their eating rules, so we precompose the above common part of the day with their respective eating rules." - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n1\n", - "\n", - "\n", - "Wolf_eat\n", - "\n", - "\n", - "\n", - "\n", - "n0in1:s->n1:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n2\n", - "\n", - "\n", - "turn\n", - "\n", - "\n", - "\n", - "\n", - "n1:s->n2:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n1:s->n2:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n3\n", - "\n", - "\n", - "turn_left\n", - "\n", - "\n", - "\n", - "\n", - "n2:s->n3:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n4\n", - "\n", - "\n", - "turn_right\n", - "\n", - "\n", - "\n", - "\n", - "n2:s->n4:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n5\n", - "\n", - "\n", - "move_fwd\n", - "\n", - "\n", - "\n", - "\n", - "n2:s->n5:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n3:s->n5:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n3:s->n5:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n4:s->n5:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n4:s->n5:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n6\n", - "\n", - "\n", - "uniform\n", - "\n", - "\n", - "\n", - "\n", - "n5:s->n6:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n5:s->n6:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n7\n", - "\n", - "\n", - "reproduce\n", - "\n", - "\n", - "\n", - "\n", - "n6:s->n7:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n8\n", - "\n", - "\n", - "starve\n", - "\n", - "\n", - "\n", - "\n", - "n6:s->n8:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n7:s->n8:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n7:s->n8:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "n8:s->n0out1:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n9\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n8:s->n9:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "n9:s->n0out1:n\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Statement[Subgraph(\"\", Statement[Node(\"n0in1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"in1\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rank => \"source\", :rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\", :shape => \"none\", :label => \"\", :width => \"0.333\", :height => \"0\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\")), Subgraph(\"\", Statement[Node(\"n0out1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"out1\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rank => \"sink\", :rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\", :shape => \"none\", :label => \"\", :width => \"0.333\", :height => \"0\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\")), Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"Wolf_eat\", :fillcolor => \"lightblue\", :id => \"n1\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
Wolf_eat
\"), :style => \"filled\")), Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"turn\", :fillcolor => \"lightpink\", :id => \"n2\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
turn
\"), :style => \"filled\")), Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"turn_left\", :fillcolor => \"lightblue\", :id => \"n3\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
turn_left
\"), :style => \"filled\")), Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"turn_right\", :fillcolor => \"lightblue\", :id => \"n4\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
turn_right
\"), :style => \"filled\")), Node(\"n5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"move_fwd\", :fillcolor => \"lightblue\", :id => \"n5\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
move_fwd
\"), :style => \"filled\")), Node(\"n6\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"uniform\", :fillcolor => \"lightpink\", :id => \"n6\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
uniform
\"), :style => \"filled\")), Node(\"n7\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"reproduce\", :fillcolor => \"lightblue\", :id => \"n7\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
reproduce
\"), :style => \"filled\")), Node(\"n8\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"starve\", :fillcolor => \"lightblue\", :id => \"n8\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
starve
\"), :style => \"filled\")) … Edge(NodeID[NodeID(\"n3\", \"out2\", \"s\"), NodeID(\"n5\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"W\", :id => \"e10\", :label => \"W\")), Edge(NodeID[NodeID(\"n4\", \"out1\", \"s\"), NodeID(\"n5\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"W\", :id => \"e11\", :label => \"W\")), Edge(NodeID[NodeID(\"n4\", \"out2\", \"s\"), NodeID(\"n5\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"W\", :id => \"e12\", :label => \"W\")), Edge(NodeID[NodeID(\"n7\", \"out2\", \"s\"), NodeID(\"n8\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"W\", :id => \"e13\", :label => \"W\")), Edge(NodeID[NodeID(\"n6\", \"out1\", \"s\"), NodeID(\"n7\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"W\", :id => \"e14\", :label => \"W\")), Edge(NodeID[NodeID(\"n8\", \"out2\", \"s\"), NodeID(\"n9\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"W\", :id => \"e15\", :label => \"W\")), Edge(NodeID[NodeID(\"n5\", \"out1\", \"s\"), NodeID(\"n6\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"W\", :id => \"e16\", :label => \"W\")), Edge(NodeID[NodeID(\"n5\", \"out2\", \"s\"), NodeID(\"n6\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"W\", :id => \"e17\", :label => \"W\")), Edge(NodeID[NodeID(\"n8\", \"out1\", \"s\"), NodeID(\"n0out1\", \"n\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"\", :id => \"e18\", :label => \"\")), Edge(NodeID[NodeID(\"n9\", \"out1\", \"s\"), NodeID(\"n0out1\", \"n\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"\", :id => \"e19\", :label => \"\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\", :label => \"\", :labelloc => \"t\", :rankdir => \"TB\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\", :shape => \"none\", :width => \"0\", :height => \"0\", :margin => \"0\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:arrowsize => \"0.5\", :fontname => \"Serif\"))" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sheep = sheep_eat ⋅ general # once per sheep\n", - "wolf = wolf_eat ⋅ Swap(general) # once per wolf\n", - "\n", - "view_sched(wolf; names=N)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The `agent` function creates a `Query` box and a subschedule and connects the second outport to the second inport, effectively executing the subschedule once per agent. We have subschedules for Sheep, Wolves, and Grass, so we compose these three agent actions in series." - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n1\n", - "\n", - "\n", - "Query sheep\n", - "\n", - "\n", - "\n", - "n0in1:s->n1:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n2\n", - "\n", - "\n", - "Fail\n", - "\n", - "\n", - "\n", - "n1:s->n2:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n3\n", - "\n", - "\n", - "Sheep_eat\n", - "\n", - "\n", - "\n", - "\n", - "n1:s->n3:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n12\n", - "\n", - "\n", - "Query wolves\n", - "\n", - "\n", - "\n", - "n1:s->n12:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n4\n", - "\n", - "\n", - "turn\n", - "\n", - "\n", - "\n", - "\n", - "n3:s->n4:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n3:s->n4:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n5\n", - "\n", - "\n", - "turn_left\n", - "\n", - "\n", - "\n", - "\n", - "n4:s->n5:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n6\n", - "\n", - "\n", - "turn_right\n", - "\n", - "\n", - "\n", - "\n", - "n4:s->n6:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n7\n", - "\n", - "\n", - "move_fwd\n", - "\n", - "\n", - "\n", - "\n", - "n4:s->n7:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n5:s->n7:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n5:s->n7:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n6:s->n7:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n6:s->n7:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n8\n", - "\n", - "\n", - "uniform\n", - "\n", - "\n", - "\n", - "\n", - "n7:s->n8:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n7:s->n8:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n9\n", - "\n", - "\n", - "reproduce\n", - "\n", - "\n", - "\n", - "\n", - "n8:s->n9:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n10\n", - "\n", - "\n", - "starve\n", - "\n", - "\n", - "\n", - "\n", - "n8:s->n10:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n9:s->n10:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n9:s->n10:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "n10:s->n1:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n11\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n10:s->n11:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "n11:s->n1:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n13\n", - "\n", - "\n", - "Fail\n", - "\n", - "\n", - "\n", - "n12:s->n13:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n14\n", - "\n", - "\n", - "Wolf_eat\n", - "\n", - "\n", - "\n", - "\n", - "n12:s->n14:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n23\n", - "\n", - "\n", - "Query grass\n", - "\n", - "\n", - "\n", - "n12:s->n23:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n15\n", - "\n", - "\n", - "turn\n", - "\n", - "\n", - "\n", - "\n", - "n14:s->n15:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n14:s->n15:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n16\n", - "\n", - "\n", - "turn_left\n", - "\n", - "\n", - "\n", - "\n", - "n15:s->n16:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n17\n", - "\n", - "\n", - "turn_right\n", - "\n", - "\n", - "\n", - "\n", - "n15:s->n17:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n18\n", - "\n", - "\n", - "move_fwd\n", - "\n", - "\n", - "\n", - "\n", - "n15:s->n18:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n16:s->n18:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n16:s->n18:n\n", - "\n", - "\n", - " | W\n", - "\n", - "\n", - "\n", - "\n", - "n17:s->n18:n\n", - "\n", - "\n", - " | W\n", - "\n", - "\n", - "\n", - "\n", - "n17:s->n18:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n19\n", - "\n", - "\n", - "uniform\n", - "\n", - "\n", - "\n", - "\n", - "n18:s->n19:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n18:s->n19:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n20\n", - "\n", - "\n", - "reproduce\n", - "\n", - "\n", - "\n", - "\n", - "n19:s->n20:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n21\n", - "\n", - "\n", - "starve\n", - "\n", - "\n", - "\n", - "\n", - "n19:s->n21:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n20:s->n21:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n20:s->n21:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "n21:s->n12:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n22\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n21:s->n22:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "n22:s->n12:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n23:s->n0out1:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n24\n", - "\n", - "\n", - "Fail\n", - "\n", - "\n", - "\n", - "n23:s->n24:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n25\n", - "\n", - "\n", - "GrassIncrements\n", - "\n", - "\n", - "\n", - "\n", - "n23:s->n25:n\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "\n", - "n25:s->n23:n\n", - "\n", - "\n", - " | G\n", - "\n", - "\n", - "\n", - "\n", - "n25:s->n23:n\n", - "\n", - "\n", - " | G\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Statement[Subgraph(\"\", Statement[Node(\"n0in1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"in1\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rank => \"source\", :rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\", :shape => \"none\", :label => \"\", :width => \"0.333\", :height => \"0\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\")), Subgraph(\"\", Statement[Node(\"n0out1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"out1\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rank => \"sink\", :rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\", :shape => \"none\", :label => \"\", :width => \"0.333\", :height => \"0\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\")), Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"Query sheep\", :fillcolor => \"yellow\", :id => \"n1\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
Query sheep
\"), :style => \"filled\")), Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"Fail\", :fillcolor => \"red\", :id => \"n2\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
Fail
\"), :style => \"filled\")), Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"Sheep_eat\", :fillcolor => \"lightblue\", :id => \"n3\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
Sheep_eat
\"), :style => \"filled\")), Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"turn\", :fillcolor => \"lightpink\", :id => \"n4\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
turn
\"), :style => \"filled\")), Node(\"n5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"turn_left\", :fillcolor => \"lightblue\", :id => \"n5\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
turn_left
\"), :style => \"filled\")), Node(\"n6\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"turn_right\", :fillcolor => \"lightblue\", :id => \"n6\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
turn_right
\"), :style => \"filled\")), Node(\"n7\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"move_fwd\", :fillcolor => \"lightblue\", :id => \"n7\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
move_fwd
\"), :style => \"filled\")), Node(\"n8\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"uniform\", :fillcolor => \"lightpink\", :id => \"n8\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
uniform
\"), :style => \"filled\")) … Edge(NodeID[NodeID(\"n15\", \"out1\", \"s\"), NodeID(\"n16\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"W\", :id => \"e39\", :label => \"W\")), Edge(NodeID[NodeID(\"n19\", \"out2\", \"s\"), NodeID(\"n21\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"W\", :id => \"e40\", :label => \"W\")), Edge(NodeID[NodeID(\"n14\", \"out1\", \"s\"), NodeID(\"n15\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"W\", :id => \"e41\", :label => \"W\")), Edge(NodeID[NodeID(\"n14\", \"out2\", \"s\"), NodeID(\"n15\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"W\", :id => \"e42\", :label => \"W\")), Edge(NodeID[NodeID(\"n15\", \"out2\", \"s\"), NodeID(\"n18\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"W\", :id => \"e43\", :label => \"W\")), Edge(NodeID[NodeID(\"n25\", \"out1\", \"s\"), NodeID(\"n23\", \"in2\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \" | G\", :id => \"e44\", :label => \" | G\")), Edge(NodeID[NodeID(\"n25\", \"out2\", \"s\"), NodeID(\"n23\", \"in2\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \" | G\", :id => \"e45\", :label => \" | G\")), Edge(NodeID[NodeID(\"n12\", \"out1\", \"s\"), NodeID(\"n23\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"\", :id => \"e46\", :label => \"\")), Edge(NodeID[NodeID(\"n23\", \"out3\", \"s\"), NodeID(\"n24\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"\", :id => \"e47\", :label => \"\")), Edge(NodeID[NodeID(\"n23\", \"out1\", \"s\"), NodeID(\"n0out1\", \"n\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"\", :id => \"e48\", :label => \"\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\", :label => \"\", :labelloc => \"t\", :rankdir => \"TB\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\", :shape => \"none\", :width => \"0\", :height => \"0\", :margin => \"0\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:arrowsize => \"0.5\", :fontname => \"Serif\"))" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cycle = ( agent(sheep, S; n=:sheep, ret=I)\n", - " ⋅ agent(wolf, W; n=:wolves, ret=I)\n", - " ⋅ agent(g_inc, G; n=:grass))\n", - "view_sched(cycle; names=N)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Lastly we wrap the whole process in a `while` loop, and use the $\\Sigma$ migration of `Coords` to lift the entire program into a setting where vertices have coordinates." - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n1\n", - "\n", - "\n", - "while\n", - "\n", - "\n", - "\n", - "n0in1:s->n1:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n1:s->n0out1:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n2\n", - "\n", - "\n", - "Query sheep\n", - "\n", - "\n", - "\n", - "n1:s->n2:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n3\n", - "\n", - "\n", - "Fail\n", - "\n", - "\n", - "\n", - "n2:s->n3:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n4\n", - "\n", - "\n", - "Sheep_eat\n", - "\n", - "\n", - "\n", - "\n", - "n2:s->n4:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n13\n", - "\n", - "\n", - "Query wolves\n", - "\n", - "\n", - "\n", - "n2:s->n13:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n5\n", - "\n", - "\n", - "turn\n", - "\n", - "\n", - "\n", - "\n", - "n4:s->n5:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n4:s->n5:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n6\n", - "\n", - "\n", - "turn_left\n", - "\n", - "\n", - "\n", - "\n", - "n5:s->n6:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n7\n", - "\n", - "\n", - "turn_right\n", - "\n", - "\n", - "\n", - "\n", - "n5:s->n7:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n8\n", - "\n", - "\n", - "move_fwd\n", - "\n", - "\n", - "\n", - "\n", - "n5:s->n8:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n6:s->n8:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n6:s->n8:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n7:s->n8:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n7:s->n8:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n9\n", - "\n", - "\n", - "uniform\n", - "\n", - "\n", - "\n", - "\n", - "n8:s->n9:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n8:s->n9:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n10\n", - "\n", - "\n", - "reproduce\n", - "\n", - "\n", - "\n", - "\n", - "n9:s->n10:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n11\n", - "\n", - "\n", - "starve\n", - "\n", - "\n", - "\n", - "\n", - "n9:s->n11:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n10:s->n11:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "\n", - "n10:s->n11:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "n11:s->n2:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n12\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n11:s->n12:n\n", - "\n", - "\n", - "S\n", - "\n", - "\n", - "\n", - "n12:s->n2:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n14\n", - "\n", - "\n", - "Fail\n", - "\n", - "\n", - "\n", - "n13:s->n14:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n15\n", - "\n", - "\n", - "Wolf_eat\n", - "\n", - "\n", - "\n", - "\n", - "n13:s->n15:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n24\n", - "\n", - "\n", - "Query grass\n", - "\n", - "\n", - "\n", - "n13:s->n24:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n16\n", - "\n", - "\n", - "turn\n", - "\n", - "\n", - "\n", - "\n", - "n15:s->n16:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n15:s->n16:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n17\n", - "\n", - "\n", - "turn_left\n", - "\n", - "\n", - "\n", - "\n", - "n16:s->n17:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n18\n", - "\n", - "\n", - "turn_right\n", - "\n", - "\n", - "\n", - "\n", - "n16:s->n18:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n19\n", - "\n", - "\n", - "move_fwd\n", - "\n", - "\n", - "\n", - "\n", - "n16:s->n19:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n17:s->n19:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n17:s->n19:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n18:s->n19:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n18:s->n19:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n20\n", - "\n", - "\n", - "uniform\n", - "\n", - "\n", - "\n", - "\n", - "n19:s->n20:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n19:s->n20:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n21\n", - "\n", - "\n", - "reproduce\n", - "\n", - "\n", - "\n", - "\n", - "n20:s->n21:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n22\n", - "\n", - "\n", - "starve\n", - "\n", - "\n", - "\n", - "\n", - "n20:s->n22:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n21:s->n22:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "\n", - "n21:s->n22:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "n22:s->n13:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n23\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n22:s->n23:n\n", - "\n", - "\n", - "W\n", - "\n", - "\n", - "\n", - "n23:s->n13:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n24:s->n1:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n25\n", - "\n", - "\n", - "Fail\n", - "\n", - "\n", - "\n", - "n24:s->n25:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n26\n", - "\n", - "\n", - "GrassIncrements\n", - "\n", - "\n", - "\n", - "\n", - "n24:s->n26:n\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "\n", - "n26:s->n24:n\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "\n", - "n26:s->n24:n\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Statement[Subgraph(\"\", Statement[Node(\"n0in1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"in1\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rank => \"source\", :rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\", :shape => \"none\", :label => \"\", :width => \"0.333\", :height => \"0\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\")), Subgraph(\"\", Statement[Node(\"n0out1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"out1\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rank => \"sink\", :rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\", :shape => \"none\", :label => \"\", :width => \"0.333\", :height => \"0\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\")), Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"while\", :fillcolor => \"lightpink\", :id => \"n1\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
while
\"), :style => \"filled\")), Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"Query sheep\", :fillcolor => \"yellow\", :id => \"n2\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
Query sheep
\"), :style => \"filled\")), Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"Fail\", :fillcolor => \"red\", :id => \"n3\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
Fail
\"), :style => \"filled\")), Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"Sheep_eat\", :fillcolor => \"lightblue\", :id => \"n4\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
Sheep_eat
\"), :style => \"filled\")), Node(\"n5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"turn\", :fillcolor => \"lightpink\", :id => \"n5\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
turn
\"), :style => \"filled\")), Node(\"n6\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"turn_left\", :fillcolor => \"lightblue\", :id => \"n6\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
turn_left
\"), :style => \"filled\")), Node(\"n7\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"turn_right\", :fillcolor => \"lightblue\", :id => \"n7\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
turn_right
\"), :style => \"filled\")), Node(\"n8\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"move_fwd\", :fillcolor => \"lightblue\", :id => \"n8\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
move_fwd
\"), :style => \"filled\")) … Edge(NodeID[NodeID(\"n20\", \"out1\", \"s\"), NodeID(\"n21\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"W\", :id => \"e41\", :label => \"W\")), Edge(NodeID[NodeID(\"n13\", \"out2\", \"s\"), NodeID(\"n15\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"W\", :id => \"e42\", :label => \"W\")), Edge(NodeID[NodeID(\"n21\", \"out1\", \"s\"), NodeID(\"n22\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"W\", :id => \"e43\", :label => \"W\")), Edge(NodeID[NodeID(\"n16\", \"out3\", \"s\"), NodeID(\"n18\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"W\", :id => \"e44\", :label => \"W\")), Edge(NodeID[NodeID(\"n16\", \"out1\", \"s\"), NodeID(\"n17\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"W\", :id => \"e45\", :label => \"W\")), Edge(NodeID[NodeID(\"n20\", \"out2\", \"s\"), NodeID(\"n22\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"W\", :id => \"e46\", :label => \"W\")), Edge(NodeID[NodeID(\"n15\", \"out1\", \"s\"), NodeID(\"n16\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"W\", :id => \"e47\", :label => \"W\")), Edge(NodeID[NodeID(\"n15\", \"out2\", \"s\"), NodeID(\"n16\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"W\", :id => \"e48\", :label => \"W\")), Edge(NodeID[NodeID(\"n16\", \"out2\", \"s\"), NodeID(\"n19\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"W\", :id => \"e49\", :label => \"W\")), Edge(NodeID[NodeID(\"n1\", \"out2\", \"s\"), NodeID(\"n0out1\", \"n\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"\", :id => \"e50\", :label => \"\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\", :label => \"\", :labelloc => \"t\", :rankdir => \"TB\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\", :shape => \"none\", :width => \"0\", :height => \"0\", :margin => \"0\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:arrowsize => \"0.5\", :fontname => \"Serif\"))" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "overall = while_schedule(cycle, curr -> nparts(curr,:Wolf) >= 0) |> Coords\n", - "view_sched(overall; names=Coords(N))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now we can apply the program to `X` and view the results." - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [], - "source": [ - "res, = apply_schedule(overall, X; steps=50);" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "And view the trajectory (the arrow $\\rightarrow$ indicates that this wire has the \"before\" state, and the $\\leftarrow$ indicates that this wire has the \"after\" state)." - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Warning: node 'w1', graph 'G' size too small for label\n", - "Warning: node 'w1', graph 'G' size too small for label\n", - "Warning: node 'w1', graph 'G' size too small for label\n", - "Warning: node 'w1', graph 'G' size too small for label\n", - "Warning: node 'w1', graph 'G' size too small for label\n", - "Warning: node 'w1', graph 'G' size too small for label\n", - "Warning: node 'w1', graph 'G' size too small for label\n", - "Warning: node 'w1', graph 'G' size too small for label\n", - "Warning: node 'w1', graph 'G' size too small for label\n", - "Warning: node 'w1', graph 'G' size too small for label\n", - "Warning: node 'w1', graph 'G' size too small for label\n", - "Warning: node 'w1', graph 'G' size too small for label\n" - ] - }, - { - "data": { - "image/png": "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yIRnhSIUV06muHJy0KWIiEge0D7QIiIiIiIpMJDGPkUiIiIiIhOUVqBFRERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERE8okJugARkdHwff9TwKeCrkOy6vvGmO8HXYSIyBsJBV2AiMgo1QLzgi5Csqo26AJEREbDCroAEREREZF8ohVoERHATQ4TH+jGTQzjuUkwBjsUJRIrJ1xcjjFabxARkREK0CIyIXmuQ++BbfTs38pAVyue62JZNj4APubwLSK+7+P7DtHSasomzaZqyulES6uDLF1ERAKmAC0iE0pyuI+Obevp3rMZjMFzEkdfcz3npNcN93YS7+uma+czRGIV1M87l/KG2bkoOVDxgW4GuloZPLSP4b5O3EQcz01i2WGscJii0jqKKxsoqZlGUZlamEVkYlCAFpEJwXMd2reto2vnBjzfA89LeQzfd/FdGO7vovWF+wlvLWPaksuIVdRnoeLguE6cgy0bOdjyPE5yCHxG2lpOYLing962V8AYLDtCddNCapqXEooU57hqEZHcUYAWkYI33NfJrqfvxEkM47snX2VOheckiA8cZPtfbqduxnImzT0HY/J7Z1Dfc2nf9hSdO57Gxx/1z8o7/D7PSdK542k6dmygZtpC6uedixUKZ7NkEZFAKECLSEHrbXuV1ufvPxzy/MwO7o+EzM6dzzJwcC/Nq/4Gy87PwDjU207L03fhJodPuto8Gp7rAi5drRvp3reZ6cuuoqRmWuYKFREZB3RbuYgUrO49Lx0Oz0kyHp6P4blJhnra2P7Er47rqc4X3Xs2s+PJ20kO940pPB/Ldx3cxDC7nr6Tju1PZWRMEZHxQivQIpKXhhz3lK/3d7aw9+Un8a0wWKNfFTa+j+0MnfT19rrlxKN1J7kYtm/ZNbJLR4rdHBaGFY2VlITt1C4co86dGziw9fGjbRiZ5rkO7a+uw4kPMnn+BVmZQ0Qk1xSgRSTv+MD929sJnaTn2Ad8NwJTL0ttXDNy9eztvznpe4Zik0hEqk45zmA89VVc2xiSngfkLkAfbH0pq+H5CM9NcnD3C9jhKJPmnJ3VuUREckEBWkTykgEc/xRtGVZ6QdT4p17ZzpZc34A41HOA/ZsewTvF1n2Z5LkOHdufJlY5mbK65pzMKSKSLeqBFpGC9vKGp3jw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", - "text/plain": [ - "Cairo.CairoSurfaceBase{UInt32}(Ptr{Nothing} @0x00000002c4f470a0, 720.0, 1160.0)" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "using Luxor\n", - "view_traj(overall, res, view_LV; agent=true, names=Coords(N))\n", - "readpng(\"traj/3.png\")\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# An example with Graphs\n", - "Here is another simulation that uses more varied features and is applied to graphs." - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n1\n", - "\n", - "\n", - "uniform\n", - "\n", - "\n", - "\n", - "\n", - "n0in1:s->n1:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n1:s->n0out2:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n2\n", - "\n", - "\n", - "add_loop\n", - "\n", - "\n", - "\n", - "\n", - "n1:s->n2:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n2:s->n0out1:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n3\n", - "\n", - "\n", - "Fail\n", - "\n", - "\n", - "\n", - "\n", - "n2:s->n3:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Statement[Subgraph(\"\", Statement[Node(\"n0in1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"in1\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rank => \"source\", :rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\", :shape => \"none\", :label => \"\", :width => \"0.333\", :height => \"0\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\")), Subgraph(\"\", Statement[Node(\"n0out1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"out1\")), Node(\"n0out2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"out2\")), Edge(NodeID[NodeID(\"n0out1\", \"\", \"\"), NodeID(\"n0out2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rank => \"sink\", :rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\", :shape => \"none\", :label => \"\", :width => \"0.333\", :height => \"0\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\")), Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"uniform\", :fillcolor => \"lightpink\", :id => \"n1\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
uniform
\"), :style => \"filled\")), Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"add_loop\", :fillcolor => \"lightblue\", :id => \"n2\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
add_loop
\"), :style => \"filled\")), Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"Fail\", :fillcolor => \"red\", :id => \"n3\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
Fail
\"), :style => \"filled\")), Edge(NodeID[NodeID(\"n0in1\", \"s\", \"\"), NodeID(\"n1\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"•\", :id => \"e1\", :label => \"•\")), Edge(NodeID[NodeID(\"n2\", \"out2\", \"s\"), NodeID(\"n3\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"•\", :id => \"e2\", :label => \"•\")), Edge(NodeID[NodeID(\"n1\", \"out1\", \"s\"), NodeID(\"n2\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"•\", :id => \"e3\", :label => \"•\")), Edge(NodeID[NodeID(\"n2\", \"out1\", \"s\"), NodeID(\"n0out1\", \"n\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"•\", :id => \"e4\", :label => \"•\")), Edge(NodeID[NodeID(\"n1\", \"out2\", \"s\"), NodeID(\"n0out2\", \"n\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"•\", :id => \"e5\", :label => \"•\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\", :label => \"\", :labelloc => \"t\", :rankdir => \"TB\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\", :shape => \"none\", :width => \"0\", :height => \"0\", :margin => \"0\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:arrowsize => \"0.5\", :fontname => \"Serif\"))" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "z, g1, ar = path_graph.(Graphs.Graph,0:2)\n", - "N=Dict(z=>\"Z\",g1=>\"•\",ar=>\"•→•\")\n", - "\n", - "loop = apex(terminal(Graphs.Graph))\n", - "s_hom, t_hom = [ACSetTransformation(g1,ar; V=[i]) for i in 1:2]\n", - "\n", - "al = succeed(RuleApp(:add_loop, Rule(id(g1), homomorphism(g1,loop)), g1))\n", - "\n", - "q2 = Query(Span(t_hom,s_hom), :OutEdges, g1)\n", - "ws = Weaken(:Switch_to_src, s_hom)\n", - "wt = Weaken(:Switch_to_tgt, t_hom)\n", - "str = Strengthen(:Add_outedge, s_hom)\n", - "maybe_add_loop = uniform(2, g1) ⋅ (al ⊗ id([g1]))\n", - "\n", - "view_sched(maybe_add_loop; names=N)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n1\n", - "\n", - "\n", - "Query OutEdges\n", - "\n", - "\n", - "\n", - "\n", - "n0in1:s->n1:n\n", - "\n", - "\n", - "•→•\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n2\n", - "\n", - "\n", - "Fail\n", - "\n", - "\n", - "\n", - "\n", - "n1:s->n2:n\n", - "\n", - "\n", - "Z\n", - "\n", - "\n", - "\n", - "\n", - "n3\n", - "\n", - "\n", - "Switch_to_tgt\n", - "\n", - "\n", - "\n", - "\n", - "n1:s->n3:n\n", - "\n", - "\n", - "•→•\n", - "\n", - "\n", - "\n", - "\n", - "n7\n", - "\n", - "\n", - "Switch_to_src\n", - "\n", - "\n", - "\n", - "\n", - "n1:s->n7:n\n", - "\n", - "\n", - "•→•\n", - "\n", - "\n", - "\n", - "\n", - "n4\n", - "\n", - "\n", - "uniform\n", - "\n", - "\n", - "\n", - "\n", - "n3:s->n4:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n4:s->n1:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n5\n", - "\n", - "\n", - "add_loop\n", - "\n", - "\n", - "\n", - "\n", - "n4:s->n5:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n5:s->n1:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n6\n", - "\n", - "\n", - "Fail\n", - "\n", - "\n", - "\n", - "\n", - "n5:s->n6:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n8\n", - "\n", - "\n", - "Add_outedge\n", - "\n", - "\n", - "\n", - "\n", - "n7:s->n8:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n8:s->n0out1:n\n", - "\n", - "\n", - "•→•\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Statement[Subgraph(\"\", Statement[Node(\"n0in1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"in1\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rank => \"source\", :rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\", :shape => \"none\", :label => \"\", :width => \"0.333\", :height => \"0\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\")), Subgraph(\"\", Statement[Node(\"n0out1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"out1\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rank => \"sink\", :rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\", :shape => \"none\", :label => \"\", :width => \"0.333\", :height => \"0\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\")), Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"Query OutEdges\", :fillcolor => \"yellow\", :id => \"n1\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
Query OutEdges
\"), :style => \"filled\")), Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"Fail\", :fillcolor => \"red\", :id => \"n2\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
Fail
\"), :style => \"filled\")), Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"Switch_to_tgt\", :fillcolor => \"lavender\", :id => \"n3\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
Switch_to_tgt
\"), :style => \"filled\")), Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"uniform\", :fillcolor => \"lightpink\", :id => \"n4\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
uniform
\"), :style => \"filled\")), Node(\"n5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"add_loop\", :fillcolor => \"lightblue\", :id => \"n5\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
add_loop
\"), :style => \"filled\")), Node(\"n6\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"Fail\", :fillcolor => \"red\", :id => \"n6\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
Fail
\"), :style => \"filled\")), Node(\"n7\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"Switch_to_src\", :fillcolor => \"lavender\", :id => \"n7\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
Switch_to_src
\"), :style => \"filled\")), Node(\"n8\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"Add_outedge\", :fillcolor => \"lightgreen\", :id => \"n8\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
Add_outedge
\"), :style => \"filled\")) … Edge(NodeID[NodeID(\"n1\", \"out1\", \"s\"), NodeID(\"n7\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"•→•\", :id => \"e2\", :label => \"•→•\")), Edge(NodeID[NodeID(\"n1\", \"out2\", \"s\"), NodeID(\"n3\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"•→•\", :id => \"e3\", :label => \"•→•\")), Edge(NodeID[NodeID(\"n3\", \"out1\", \"s\"), NodeID(\"n4\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"•\", :id => \"e4\", :label => \"•\")), Edge(NodeID[NodeID(\"n5\", \"out2\", \"s\"), NodeID(\"n6\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"•\", :id => \"e5\", :label => \"•\")), Edge(NodeID[NodeID(\"n4\", \"out1\", \"s\"), NodeID(\"n5\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"•\", :id => \"e6\", :label => \"•\")), Edge(NodeID[NodeID(\"n7\", \"out1\", \"s\"), NodeID(\"n8\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"•\", :id => \"e7\", :label => \"•\")), Edge(NodeID[NodeID(\"n5\", \"out1\", \"s\"), NodeID(\"n1\", \"in2\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"•\", :id => \"e8\", :label => \"•\")), Edge(NodeID[NodeID(\"n4\", \"out2\", \"s\"), NodeID(\"n1\", \"in2\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"•\", :id => \"e9\", :label => \"•\")), Edge(NodeID[NodeID(\"n1\", \"out3\", \"s\"), NodeID(\"n2\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"Z\", :id => \"e10\", :label => \"Z\")), Edge(NodeID[NodeID(\"n8\", \"out1\", \"s\"), NodeID(\"n0out1\", \"n\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"•→•\", :id => \"e11\", :label => \"•→•\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\", :label => \"\", :labelloc => \"t\", :rankdir => \"TB\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\", :shape => \"none\", :width => \"0\", :height => \"0\", :margin => \"0\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:arrowsize => \"0.5\", :fontname => \"Serif\"))" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "\n", - "sched = mk_sched((trace_arg=:V,), (init=:A,), Dict(\n", - " :loop => maybe_add_loop, :out_edges=>q2, :weaken_src=>ws, \n", - " :weaken_tgt=>wt, :add=>str, :A=>ar,:V=>g1, :Z=>z, :fail=>Fail(z)), \n", - "quote \n", - " added_loops, out_edge, ignore = out_edges(init, trace_arg)\n", - " fail(ignore)\n", - " out_neighbor = weaken_tgt(out_edge)\n", - " trace1, trace2 = loop(out_neighbor)\n", - " out = add(weaken_src(added_loops))\n", - " return [trace1, trace2], out\n", - "end);\n", - "\n", - "\n", - "view_sched(sched; names=N)\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Thus, the overall simulation starts with a designated edge. It looks for all edges *out* of the target of the edge. For each of these, we focus on its target. We flip a coin and possibly add a loop to that vertex. After this is done, we focus on the *source* of our original edge. We simultaneously add a new vertex (and edge to that vertex) while making this new edge our focus as we exit the simulation." - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": {}, - "outputs": [], - "source": [ - "function view_graph(a)\n", - " g = codom(a)\n", - " pg = to_graphviz_property_graph(g)\n", - " for v in collect(a[:V])\n", - " set_vprops!(pg, v, Dict([ :style=>\"filled\",:color=>\"red\",:fillcolor=>\"red\"]))\n", - " end\n", - " for e in collect(a[:E])\n", - " set_eprops!(pg, e, Dict([:color=>\"red\"]))\n", - " end\n", - " return to_graphviz(pg)\n", - "end\n", - "G = @acset Graphs.Graph begin V=5; E=4; src=[1,2,2,5];tgt=[2,3,4,2] end \n", - "arr_start = homomorphism(ar, G; initial=(V=[1,2],))\n", - "res, = apply_schedule(sched, arr_start);\n", - "view_traj(sched, res, view_graph; agent=true, names=N)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "Cairo.CairoSurfaceBase{UInt32}(Ptr{Nothing} @0x00000002b7fbbec0, 330.0, 529.0)" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "readpng(\"traj/5.png\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Probabilistic simulation\n", - "This example showcases simulations in a probabilistic context.\n", - "\n", - "For simplicity, we will use a color set that consists in simple Julia types, `Int` and `String` values, rather than the graph rewriting setting.\n", - "\n", - "We define a box which probabilistically increments by two twice as likely as incrementing by one.\n", - "It has no state, which is the unit type `Nothing` in Julia.\n", - "\n", - "```\n", - " ---------\n", - " | inc |- x+1 @ 1/3\n", - "x::ℕ -| |- x+2 @ 2/3\n", - " ---------\n", - "```" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Mealy(inc_fun, PMonad(Int64, AlgebraicRewriting.Schedules.Poly.var\"#11#12\"(), AlgebraicRewriting.Schedules.Poly.joindist), nothing)" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "inc_fun(::Nothing,w::WireVal; kw...) = \n", - " MealyRes(nothing, [(p,WireVal(i,w.val+i)) for (i,p) in enumerate([1//3,2//3])])\n", - "mi = Mealy(inc_fun, Dist, nothing)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We also define a box that does have an internal (integer) state which is initially $5$ \n", - "and decrements by 1 each time the box is run.\n", - "It returns \"TIMEOUT\" if the state is zero or lower, otherwise it checks if the state $S$ is odd. If so, it prints out two messages via the second output with weights $\\frac{1}{3}$ and $\\frac{2}{3}$, otherwise it sends out the new state on the first output.\n", - "```\n", - " -----------------------\n", - "x::ℕ-| S > 0 is even|- [S-1 @ 1]\n", - " -| S::ℕ S > 0 is odd |- [\"x (or y) 1/3\" @ 1/3, \"x (or y) 2/3\" @ 2/3]\n", - " -----------------------\n", - "\n", - "```" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Mealy(some_fun, PMonad(Int64, AlgebraicRewriting.Schedules.Poly.var\"#11#12\"(), AlgebraicRewriting.Schedules.Poly.joindist), 5)" - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "function some_fun(S::Int,w::WireVal; kw...) \n", - " if S <= 0 return MealyRes(S, [(1,WireVal(2, \"TIMEOUT\"))])\n", - " elseif w.val % 2 == 0 return MealyRes(S-1,[(1,WireVal(1,w.val))])\n", - " else return MealyRes(S,[(p,WireVal(2, \"$(w.val) $p\")) for p in [1//3,2//3]])\n", - " end\n", - "end\n", - "ms = Mealy(some_fun, Dist, 5)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n1\n", - "\n", - "SomeFun\n", - "\n", - "\n", - "\n", - "\n", - "n0in1:e->n1:w\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n1:e->n0out1:w\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n2\n", - "\n", - "Inc\n", - "\n", - "\n", - "\n", - "\n", - "n1:e->n2:w\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n2:e->n1:w\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n2:e->n1:w\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Statement[Subgraph(\"\", Statement[Node(\"n0in1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"in1\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rank => \"source\", :rankdir => \"TB\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\", :shape => \"none\", :label => \"\", :width => \"0\", :height => \"0.333\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\")), Subgraph(\"\", Statement[Node(\"n0out1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"out1\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rank => \"sink\", :rankdir => \"TB\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\", :shape => \"none\", :label => \"\", :width => \"0\", :height => \"0.333\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\")), Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"SomeFun\", :fillcolor => \"white\", :id => \"n1\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n\\n\\n
SomeFun
\"), :style => \"solid\")), Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"Inc\", :fillcolor => \"white\", :id => \"n2\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n\\n\\n
Inc
\"), :style => \"solid\")), Edge(NodeID[NodeID(\"n0in1\", \"e\", \"\"), NodeID(\"n1\", \"in1\", \"w\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"N\", :id => \"e1\")), Edge(NodeID[NodeID(\"n1\", \"out1\", \"e\"), NodeID(\"n2\", \"in1\", \"w\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"N\", :id => \"e2\")), Edge(NodeID[NodeID(\"n2\", \"out1\", \"e\"), NodeID(\"n1\", \"in1\", \"w\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"N\", :id => \"e3\")), Edge(NodeID[NodeID(\"n2\", \"out2\", \"e\"), NodeID(\"n1\", \"in1\", \"w\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"N\", :id => \"e4\")), Edge(NodeID[NodeID(\"n1\", \"out2\", \"e\"), NodeID(\"n0out1\", \"w\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"S\", :id => \"e5\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\", :rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\", :shape => \"none\", :width => \"0\", :height => \"0\", :margin => \"0\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:arrowsize => \"0.5\", :fontname => \"Serif\"))" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "using Catlab.WiringDiagrams, Catlab.Graphics\n", - "\n", - "wd = WiringDiagram([:N],[:S])\n", - "b1 = add_box!(wd, Box(\"SomeFun\",[:N],[:N,:S]))\n", - "b2 = add_box!(wd, Box(\"Inc\",[:N],[:N,:N]))\n", - "i, o = [(f(wd),1) for f in [input_id, output_id]]\n", - "add_wires!(wd, Pair[i=>(b1,1), (b1,1)=>(b2,1), (b1,2)=>o, (b2,1)=>(b1,1),(b2,2)=>(b1,1)])\n", - "\n", - "to_graphviz(wd; orientation=LeftToRight)" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wd.diagram[:box_type] = Box{Mealy}\n", - "wd.diagram[:value] = [ms,mi]\n", - "res, = apply_schedule(wd, 0, Dist)\n", - "\n", - "@test sum([r[1] for r in res]) == 1\n", - "@test res[10][2].steps[end].edge.o.val == \"TIMEOUT\"" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Julia 1.9.0-rc2", - "language": "julia", - "name": "julia-1.9" - }, - "language_info": { - "file_extension": ".jl", - "mimetype": "application/julia", - "name": "julia", - "version": "1.9.0" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/docs/src/GameOfLife.ipynb b/docs/src/GameOfLife.ipynb deleted file mode 100644 index 015f362..0000000 --- a/docs/src/GameOfLife.ipynb +++ /dev/null @@ -1,2416 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "ccfc5cc1", - "metadata": {}, - "source": [ - "# Game of Life\n", - "\n", - "In this notebook we model the game of life as an agent based model using AlgebraicRewriting.\n", - "\n", - "We start with some imports:" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "1bc8eab4", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\u001b[32m\u001b[1m Activating\u001b[22m\u001b[39m project at `~/code/AlgebraicRewriting.jl/docs`\n", - "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mPrecompiling AlgebraicRewriting [725a01d3-f174-5bbd-84e1-b9417bad95d9]\n", - "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mPrecompiling AlgebraicRewritingLuxorExt [37cb9f14-6fbc-53ad-b441-168fc6dcbed6]\n" - ] - } - ], - "source": [ - "\n", - "using Pkg; Pkg.activate(\"..\")\n", - "using AlgebraicRewriting\n", - "using Catlab, Catlab.Graphs, Catlab.CategoricalAlgebra, Catlab.Theories\n", - "import Catlab.Graphics: to_graphviz\n", - "using Catlab.Graphics.Graphviz: Attributes, Statement, Node, Edge, Digraph\n", - "using PrettyTables\n", - "using Luxor\n" - ] - }, - { - "cell_type": "markdown", - "id": "e2e43997", - "metadata": {}, - "source": [ - "# Schema\n", - "\n", - "Core to the AlgebraicJulia modeling paradigm is picking a **schema** to represent the datatype one is working with. We will represent the state of the world as a database with the following schema:" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "e8ee8cf5", - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "n1\n", - "\n", - "V\n", - "\n", - "\n", - "\n", - "n2\n", - "\n", - "E\n", - "\n", - "\n", - "\n", - "n2->n1\n", - "\n", - "\n", - "src\n", - "\n", - "\n", - "\n", - "n2->n1\n", - "\n", - "\n", - "tgt\n", - "\n", - "\n", - "\n", - "n2->n2\n", - "\n", - "\n", - "inv\n", - "\n", - "\n", - "\n", - "n3\n", - "\n", - "Curr\n", - "\n", - "\n", - "\n", - "n3->n1\n", - "\n", - "\n", - "curr\n", - "\n", - "\n", - "\n", - "n4\n", - "\n", - "Next\n", - "\n", - "\n", - "\n", - "n4->n1\n", - "\n", - "\n", - "next\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"neato\", Statement[Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"V\")), Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"E\")), Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"Curr\")), Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"Next\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"src\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"tgt\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"inv\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"curr\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"next\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:margin => \"0\", :shape => \"ellipse\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "\n", - "\"\"\"\n", - "`curr` and `next` pick out subsets of V which are marked as currently alive or \n", - "to be alive in the next timestep.\n", - "\"\"\"\n", - "@present SchLife <: SchSymmetricGraph begin \n", - " (Curr, Next)::Ob \n", - " curr::Hom(Curr,V)\n", - " next::Hom(Next,V)\n", - "end\n", - "\n", - "to_graphviz(SchLife)" - ] - }, - { - "cell_type": "markdown", - "id": "b0971f14", - "metadata": {}, - "source": [ - "This says that there is a *symmetric graph* and that a subset of the vertices are distinguished as currently alive. (note, the map *into* `V` from `Curr` is mathematically tantamount to a map *out* of `V` into a `Bool` attribute - both distinguish a subset of `V`).\n", - "\n", - "Furthermore, it is helpful computationally to be able to simultaneously pick out a subset of vertices which will be alive in the *next* timestep. This graph is more general than the usual grid-based approach to the game of life, but we can extend the schema with coordinate information with the following code: " - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "2419c8c5", - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "n1\n", - "\n", - "V\n", - "\n", - "\n", - "\n", - "n5\n", - "\n", - "Coords\n", - "\n", - "\n", - "\n", - "n1->n5\n", - "\n", - "\n", - "coords\n", - "\n", - "\n", - "\n", - "n2\n", - "\n", - "E\n", - "\n", - "\n", - "\n", - "n2->n1\n", - "\n", - "\n", - "src\n", - "\n", - "\n", - "\n", - "n2->n1\n", - "\n", - "\n", - "tgt\n", - "\n", - "\n", - "\n", - "n2->n2\n", - "\n", - "\n", - "inv\n", - "\n", - "\n", - "\n", - "n3\n", - "\n", - "Curr\n", - "\n", - "\n", - "\n", - "n3->n1\n", - "\n", - "\n", - "curr\n", - "\n", - "\n", - "\n", - "n4\n", - "\n", - "Next\n", - "\n", - "\n", - "\n", - "n4->n1\n", - "\n", - "\n", - "next\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"neato\", Statement[Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"V\")), Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"E\")), Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"Curr\")), Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"Next\")), Node(\"n5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:shape => \"point\", :xlabel => \"Coords\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"src\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"tgt\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"inv\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"curr\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"next\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"coords\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:margin => \"0\", :shape => \"ellipse\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "@present SchLifeCoords <: SchLife begin \n", - " Coords::AttrType \n", - " coords::Attr(V, Coords)\n", - "end\n", - "to_graphviz(SchLifeCoords)" - ] - }, - { - "cell_type": "markdown", - "id": "bd479a63", - "metadata": {}, - "source": [ - "We then create data types based off of these schemas and define a functor which will allow us to migrate simulators on the coordinate-less schema into the schema with coordinates (since the coordinates do not play any semantic role, given there is already a connectivity graph). " - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "7efebd54", - "metadata": {}, - "outputs": [], - "source": [ - "@acset_type Life(SchLife) <: AbstractSymmetricGraph\n", - "@acset_type AbsLifeCoords(SchLifeCoords) <: AbstractSymmetricGraph\n", - "const LifeCoords = AbsLifeCoords{Tuple{Int,Int}}\n", - "\n", - "O, H = [Dict(x=>x for x in Symbol.(generators(SchLife,x))) for x in [:Ob,:Hom]]\n", - "F = Migrate(O, H, LifeCoords; delta=false); # Migrate in forward direction\n", - "F⁻¹(X::LifeCoords) = migrate(Life, X, O, H); # Migrate in reverse direction \n", - "F⁻¹(f::ACSetTransformation) = ACSetTransformation(F⁻¹(dom(f)), F⁻¹(codom(f)); V=collect(f[:V]));" - ] - }, - { - "cell_type": "markdown", - "id": "8997e8d1", - "metadata": {}, - "source": [ - "# Helper functions\n", - "Some helper functions will make it easy to succinctly express the model as well as visually see what is going on.\n", - "## Visualization" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "9cac0fdb", - "metadata": {}, - "outputs": [], - "source": [ - "function view_life(f::ACSetTransformation, pth=tempname())\n", - " v = collect(f[:V])\n", - " view_life(codom(f), pth; star=isempty(v) ? nothing : only(v))\n", - "end\n", - "function view_life(X::Life, pth=tempname(); star=nothing)\n", - " pg = PropertyGraph{Any}(; prog = \"neato\", graph = Dict(),\n", - " node = Dict(:shape => \"circle\", :style=>\"filled\", :margin => \"0\"), \n", - " edge = Dict(:dir=>\"none\",:minlen=>\"1\"))\n", - " add_vertices!(pg, nparts(X,:V))\n", - " for v in vertices(X)\n", - " set_vprop!(pg, v, :fillcolor, isempty(incident(X,v,:curr)) ? \"red\" : \"green\")\n", - " if !isempty(incident(X,v,:next))\n", - " set_vprop!(pg, v, :penwidth, \"4.0\")\n", - " end\n", - " set_vprop!(pg, v, :label, star == v ? \"*\" : \"\")\n", - " end\n", - " for e in filter(e->X[e,:inv] > e, edges(X))\n", - " add_edge!(pg, X[e,:src], X[e,:tgt])\n", - " end\n", - " G = to_graphviz(pg)\n", - " open(pth, \"w\") do io \n", - " show(io,\"image/svg+xml\",G) \n", - " end\n", - " G\n", - "end\n", - "function view_life(X::LifeCoords, pth=tempname(); star=nothing)\n", - " n = Int(sqrt(nparts(X,:V)))\n", - " coords = Dict([(i,j)=>findfirst(==((i,j)), X[:coords]) \n", - " for (i,j) in Iterators.product(1:n,1:n)])\n", - " mat = pretty_table(String, reduce(hcat,map(1:n) do i \n", - " map(1:n) do j \n", - " c, x = [!isempty(incident(X, coords[(i,j)],x)) for x in [:curr, :next]]\n", - " res = c ? (x ? \"O\" : \"o\") : (x ? \"X\" : \"x\")\n", - " return res * ((star == coords[(i,j)]) ? \".\" : \"\")\n", - " end\n", - " end); show_header=false, tf=tf_markdown)\n", - " open(pth, \"w\") do io write(io, mat) end\n", - " return mat\n", - "end;" - ] - }, - { - "cell_type": "markdown", - "id": "b132290b", - "metadata": {}, - "source": [ - "## Constructing ACSets / maps between them " - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "2e53a99d", - "metadata": {}, - "outputs": [], - "source": [ - "Next() = @acset Life begin V=1; Next=1; next=1 end\n", - "Curr() = @acset Life begin V=1; Curr=1; curr=1 end\n", - "to_next() = homomorphism(Life(1), Next())\n", - "to_curr() = homomorphism(Life(1), Curr())\n", - "\n", - "\"\"\"Construct a cell connected to n living neighbors\"\"\"\n", - "function living_neighbors(n::Int; alive=false)\n", - " X = Life(1)\n", - " if alive add_part!(X, :Curr, curr=1) end\n", - " for _ in 1:n\n", - " v = add_part!(X, :V)\n", - " add_part!(X,:Curr,curr=v)\n", - " add_edge!(X, v, 1)\n", - " end\n", - " return X\n", - "end;" - ] - }, - { - "cell_type": "markdown", - "id": "ac95ffd8", - "metadata": {}, - "source": [ - "When something is marked as currently alive, it is filled in green." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "af2d0b73", - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "n1\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"neato\", Statement[Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fillcolor => \"green\", :label => \"\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:margin => \"0\", :shape => \"circle\", :style => \"filled\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:dir => \"none\", :minlen => \"1\"))" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "view_life(Curr())" - ] - }, - { - "cell_type": "markdown", - "id": "7ca2d76e", - "metadata": {}, - "source": [ - "When something has been marked as to-be-alive in the next timestep, it has a thick border: " - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "ddd9daa8", - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "n1\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"neato\", Statement[Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fillcolor => \"red\", :label => \"\", :penwidth => \"4.0\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:margin => \"0\", :shape => \"circle\", :style => \"filled\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:dir => \"none\", :minlen => \"1\"))" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "view_life(Next())" - ] - }, - { - "cell_type": "markdown", - "id": "6bb24f11", - "metadata": {}, - "source": [ - "Therefore, something that is both alive and to-be-alive next will look like this:" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "ccd94903", - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "n1\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"neato\", Statement[Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fillcolor => \"green\", :label => \"\", :penwidth => \"4.0\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:margin => \"0\", :shape => \"circle\", :style => \"filled\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:dir => \"none\", :minlen => \"1\"))" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "view_life(@acset Life begin V=1; Next=1; Curr=1; next=1; curr=1 end)" - ] - }, - { - "cell_type": "markdown", - "id": "c4c570c0", - "metadata": {}, - "source": [ - "`living_neighbors` is helpful for rules that concern the # of living neighbors." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "72a40178", - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "n1\n", - "\n", - "\n", - "\n", - "\n", - "n2\n", - "\n", - "\n", - "\n", - "\n", - "n2->n1\n", - "\n", - "\n", - "\n", - "\n", - "n3\n", - "\n", - "\n", - "\n", - "\n", - "n3->n1\n", - "\n", - "\n", - "\n", - "\n", - "n4\n", - "\n", - "\n", - "\n", - "\n", - "n4->n1\n", - "\n", - "\n", - "\n", - "\n", - "n5\n", - "\n", - "\n", - "\n", - "\n", - "n5->n1\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"neato\", Statement[Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fillcolor => \"red\", :label => \"\")), Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fillcolor => \"green\", :label => \"\")), Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fillcolor => \"green\", :label => \"\")), Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fillcolor => \"green\", :label => \"\")), Node(\"n5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fillcolor => \"green\", :label => \"\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:margin => \"0\", :shape => \"circle\", :style => \"filled\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:dir => \"none\", :minlen => \"1\"))" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "view_life(living_neighbors(4))" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "2287df91", - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "n1\n", - "\n", - "\n", - "\n", - "\n", - "n2\n", - "\n", - "\n", - "\n", - "\n", - "n2->n1\n", - "\n", - "\n", - "\n", - "\n", - "n3\n", - "\n", - "\n", - "\n", - "\n", - "n3->n1\n", - "\n", - "\n", - "\n", - "\n", - "n4\n", - "\n", - "\n", - "\n", - "\n", - "n4->n1\n", - "\n", - "\n", - "\n", - "\n", - "n5\n", - "\n", - "\n", - "\n", - "\n", - "n5->n1\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"neato\", Statement[Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fillcolor => \"green\", :label => \"\")), Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fillcolor => \"green\", :label => \"\")), Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fillcolor => \"green\", :label => \"\")), Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fillcolor => \"green\", :label => \"\")), Node(\"n5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fillcolor => \"green\", :label => \"\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:margin => \"0\", :shape => \"circle\", :style => \"filled\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:dir => \"none\", :minlen => \"1\"))" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "view_life(living_neighbors(4; alive=true))" - ] - }, - { - "cell_type": "markdown", - "id": "0b640b21", - "metadata": {}, - "source": [ - "## Initialization of LifeCoords" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "93f13e20", - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "n1\n", - "\n", - "\n", - "\n", - "\n", - "n2\n", - "\n", - "\n", - "\n", - "\n", - "n1->n2\n", - "\n", - "\n", - "\n", - "\n", - "n6\n", - "\n", - "\n", - "\n", - "\n", - "n1->n6\n", - "\n", - "\n", - "\n", - "\n", - "n7\n", - "\n", - "\n", - "\n", - "\n", - "n1->n7\n", - "\n", - "\n", - "\n", - "\n", - "n3\n", - "\n", - "\n", - "\n", - "\n", - "n2->n3\n", - "\n", - "\n", - "\n", - "\n", - "n2->n6\n", - "\n", - "\n", - "\n", - "\n", - "n2->n7\n", - "\n", - "\n", - "\n", - "\n", - "n8\n", - "\n", - "\n", - "\n", - "\n", - "n2->n8\n", - "\n", - "\n", - "\n", - "\n", - "n4\n", - "\n", - "\n", - "\n", - "\n", - "n3->n4\n", - "\n", - "\n", - "\n", - "\n", - "n3->n7\n", - "\n", - "\n", - "\n", - "\n", - "n3->n8\n", - "\n", - "\n", - "\n", - "\n", - "n9\n", - "\n", - "\n", - "\n", - "\n", - "n3->n9\n", - "\n", - "\n", - "\n", - "\n", - "n5\n", - "\n", - "\n", - "\n", - "\n", - "n4->n5\n", - "\n", - "\n", - "\n", - "\n", - "n4->n8\n", - "\n", - "\n", - "\n", - "\n", - "n4->n9\n", - "\n", - "\n", - "\n", - "\n", - "n10\n", - "\n", - "\n", - "\n", - "\n", - "n4->n10\n", - "\n", - "\n", - "\n", - "\n", - "n5->n9\n", - "\n", - "\n", - "\n", - "\n", - "n5->n10\n", - "\n", - "\n", - "\n", - "\n", - "n6->n7\n", - "\n", - "\n", - "\n", - "\n", - "n11\n", - "\n", - "\n", - "\n", - "\n", - "n6->n11\n", - "\n", - "\n", - "\n", - "\n", - "n12\n", - "\n", - "\n", - "\n", - "\n", - "n6->n12\n", - "\n", - "\n", - "\n", - "\n", - "n7->n8\n", - "\n", - "\n", - "\n", - "\n", - "n7->n11\n", - "\n", - "\n", - "\n", - "\n", - "n7->n12\n", - "\n", - "\n", - "\n", - "\n", - "n13\n", - "\n", - "\n", - "\n", - "\n", - "n7->n13\n", - "\n", - "\n", - "\n", - "\n", - "n8->n9\n", - "\n", - "\n", - "\n", - "\n", - "n8->n12\n", - "\n", - "\n", - "\n", - "\n", - "n8->n13\n", - "\n", - "\n", - "\n", - "\n", - "n14\n", - "\n", - "\n", - "\n", - "\n", - "n8->n14\n", - "\n", - "\n", - "\n", - "\n", - "n9->n10\n", - "\n", - "\n", - "\n", - "\n", - "n9->n13\n", - "\n", - "\n", - "\n", - "\n", - "n9->n14\n", - "\n", - "\n", - "\n", - "\n", - "n15\n", - "\n", - "\n", - "\n", - "\n", - "n9->n15\n", - "\n", - "\n", - "\n", - "\n", - "n10->n14\n", - "\n", - "\n", - "\n", - "\n", - "n10->n15\n", - "\n", - "\n", - "\n", - "\n", - "n11->n12\n", - "\n", - "\n", - "\n", - "\n", - "n16\n", - "\n", - "\n", - "\n", - "\n", - "n11->n16\n", - "\n", - "\n", - "\n", - "\n", - "n17\n", - "\n", - "\n", - "\n", - "\n", - "n11->n17\n", - "\n", - "\n", - "\n", - "\n", - "n12->n13\n", - "\n", - "\n", - "\n", - "\n", - "n12->n16\n", - "\n", - "\n", - "\n", - "\n", - "n12->n17\n", - "\n", - "\n", - "\n", - "\n", - "n18\n", - "\n", - "\n", - "\n", - "\n", - "n12->n18\n", - "\n", - "\n", - "\n", - "\n", - "n13->n14\n", - "\n", - "\n", - "\n", - "\n", - "n13->n17\n", - "\n", - "\n", - "\n", - "\n", - "n13->n18\n", - "\n", - "\n", - "\n", - "\n", - "n19\n", - "\n", - "\n", - "\n", - "\n", - "n13->n19\n", - "\n", - "\n", - "\n", - "\n", - "n14->n15\n", - "\n", - "\n", - "\n", - "\n", - "n14->n18\n", - "\n", - "\n", - "\n", - "\n", - "n14->n19\n", - "\n", - "\n", - "\n", - "\n", - "n20\n", - "\n", - "\n", - "\n", - "\n", - "n14->n20\n", - "\n", - "\n", - "\n", - "\n", - "n15->n19\n", - "\n", - "\n", - "\n", - "\n", - "n15->n20\n", - "\n", - "\n", - "\n", - "\n", - "n16->n17\n", - "\n", - "\n", - "\n", - "\n", - "n21\n", - "\n", - "\n", - "\n", - "\n", - "n16->n21\n", - "\n", - "\n", - "\n", - "\n", - "n22\n", - "\n", - "\n", - "\n", - "\n", - "n16->n22\n", - "\n", - "\n", - "\n", - "\n", - "n17->n18\n", - "\n", - "\n", - "\n", - "\n", - "n17->n21\n", - "\n", - "\n", - "\n", - "\n", - "n17->n22\n", - "\n", - "\n", - "\n", - "\n", - "n23\n", - "\n", - "\n", - "\n", - "\n", - "n17->n23\n", - "\n", - "\n", - "\n", - "\n", - "n18->n19\n", - "\n", - "\n", - "\n", - "\n", - "n18->n22\n", - "\n", - "\n", - "\n", - "\n", - "n18->n23\n", - "\n", - "\n", - "\n", - "\n", - "n24\n", - "\n", - "\n", - "\n", - "\n", - "n18->n24\n", - "\n", - "\n", - "\n", - "\n", - "n19->n20\n", - "\n", - "\n", - "\n", - "\n", - "n19->n23\n", - "\n", - "\n", - "\n", - "\n", - "n19->n24\n", - "\n", - "\n", - "\n", - "\n", - "n25\n", - "\n", - "\n", - "\n", - "\n", - "n19->n25\n", - "\n", - "\n", - "\n", - "\n", - "n20->n24\n", - "\n", - "\n", - "\n", - "\n", - "n20->n25\n", - "\n", - "\n", - "\n", - "\n", - "n21->n22\n", - "\n", - "\n", - "\n", - "\n", - "n22->n23\n", - "\n", - "\n", - "\n", - "\n", - "n23->n24\n", - "\n", - "\n", - "\n", - "\n", - "n24->n25\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"neato\", Statement[Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fillcolor => \"green\", :label => \"\")), Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fillcolor => \"green\", :label => \"\")), Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fillcolor => \"red\", :label => \"\")), Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fillcolor => \"green\", :label => \"\")), Node(\"n5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fillcolor => \"green\", :label => \"\")), Node(\"n6\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fillcolor => \"red\", :label => \"\")), Node(\"n7\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fillcolor => \"red\", :label => \"\")), Node(\"n8\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fillcolor => \"red\", :label => \"\")), Node(\"n9\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fillcolor => \"green\", :label => \"\")), Node(\"n10\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fillcolor => \"red\", :label => \"\")) … Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n19\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n24\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n19\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n20\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n19\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n25\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n19\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n23\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n20\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n25\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n20\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n24\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n21\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n22\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n22\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n23\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n23\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n24\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n24\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n25\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:margin => \"0\", :shape => \"circle\", :style => \"filled\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:dir => \"none\", :minlen => \"1\"))" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "function make_grid(curr::AbstractMatrix, next=nothing)\n", - " n, m = size(curr)\n", - " n == m || error(\"Must be square\")\n", - " X, coords = LifeCoords(), Dict()\n", - " for i in 1:n\n", - " for j in 1:n\n", - " coords[i=>j] = add_vertex!(X; coords=(i,j))\n", - " if Bool(curr[i,j]) add_part!(X, :Curr, curr=coords[i=>j]) end\n", - " if !isnothing(next) && Bool(next[i,j]) \n", - " add_part!(X, :Curr, curr=coords[i=>j]) \n", - " end\n", - " end\n", - " end\n", - " for i in 1:n\n", - " for j in 1:n\n", - " if i < n add_edge!(X, coords[i=>j], coords[i+1=>j]) end \n", - " if j < n add_edge!(X,coords[i=>j], coords[i=>j+1]) end\n", - " if i < n && j < n add_edge!(X,coords[i=>j], coords[i+1=>j+1]) end\n", - " if i < n && j > 1 add_edge!(X,coords[i=>j], coords[i+1=>j-1]) end\n", - " end\n", - " end\n", - " return X \n", - "end\n", - "make_grid(n::Int, random=false) = make_grid((random ? rand : zeros)(Bool, (n,n)))\n", - "view_life(make_grid(5, true) |> F⁻¹)" - ] - }, - { - "cell_type": "markdown", - "id": "85116c64", - "metadata": {}, - "source": [ - "We default to graphviz to visualize states of the world that do not have coordinate information. When we do have coordinate information, we can visualize with ASCII, but we'll opt to not use that in this notebook." - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "5046e1ac", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "| o | x | o | o | x |\n", - "| o | x | o | o | x |\n", - "| o | x | o | o | x |\n", - "| o | o | x | o | x |\n", - "| x | x | o | o | o |\n", - "\n" - ] - } - ], - "source": [ - "make_grid(5, true) |> view_life |> println" - ] - }, - { - "cell_type": "markdown", - "id": "72dcae1f", - "metadata": {}, - "source": [ - "# Rules \n", - "The core of an ABM is the rewrite rules which define the possible transitions. \n", - "\n", - "Our first rule, `Birth` encodes: a dead cell becomes alive iff it has exactly 3 living neighbors.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "2ae04431", - "metadata": {}, - "outputs": [], - "source": [ - "BirthP1 = living_neighbors(3) # must have 3 neighbors\n", - "BirthN1 = living_neighbors(4) # forbid the cell to have 4 neighbors\n", - "BirthN2 = Curr() # forbid the cell to be alive (i.e. it's currently dead)\n", - "BP1, BN1, BN2 = homomorphism.(Ref(Life(1)), [BirthP1, BirthN1, BirthN2])\n", - "bac = [AppCond(BP1; monic=true), AppCond.([BN1,BN2], false; monic=true)...]\n", - "Birth = Rule(id(Life(1)), to_next(); ac=bac);" - ] - }, - { - "cell_type": "markdown", - "id": "92fa16dd", - "metadata": {}, - "source": [ - "Let's unpack this a bit. The essence of a rewrite rule is a span `L <- I -> R`, with the pattern `L` being what we're looking for and the replacement `R` being what we replace with. If we look at the `L` of `Birth`, we see:" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "213a8f51", - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "n1\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"neato\", Statement[Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fillcolor => \"red\", :label => \"\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:margin => \"0\", :shape => \"circle\", :style => \"filled\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:dir => \"none\", :minlen => \"1\"))" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Birth |> left |> codom |> view_life" - ] - }, - { - "cell_type": "markdown", - "id": "b0538158", - "metadata": {}, - "source": [ - "Now let's look at what this gets replaced with:" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "3b8cf795", - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "n1\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"neato\", Statement[Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fillcolor => \"red\", :label => \"\", :penwidth => \"4.0\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:margin => \"0\", :shape => \"circle\", :style => \"filled\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:dir => \"none\", :minlen => \"1\"))" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Birth |> right |> codom |> view_life" - ] - }, - { - "cell_type": "markdown", - "id": "453c470b", - "metadata": {}, - "source": [ - "Therefore, the impact of applying this rule is to add a vertex to the subset of vertices which are to-be-alive in the next timestep. However, we want to say more about when it is valid to apply the rule. We can do this by attaching positive and negative **application conditions** to the rule. Our positive application condition is that there must be at least three living neighbors:" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "5a4085de", - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "n1\n", - "\n", - "\n", - "\n", - "\n", - "n2\n", - "\n", - "\n", - "\n", - "\n", - "n2->n1\n", - "\n", - "\n", - "\n", - "\n", - "n3\n", - "\n", - "\n", - "\n", - "\n", - "n3->n1\n", - "\n", - "\n", - "\n", - "\n", - "n4\n", - "\n", - "\n", - "\n", - "\n", - "n4->n1\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"neato\", Statement[Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fillcolor => \"red\", :label => \"\")), Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fillcolor => \"green\", :label => \"\")), Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fillcolor => \"green\", :label => \"\")), Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fillcolor => \"green\", :label => \"\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:margin => \"0\", :shape => \"circle\", :style => \"filled\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:dir => \"none\", :minlen => \"1\"))" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "BirthP1 |> view_life" - ] - }, - { - "cell_type": "markdown", - "id": "4da74dcd", - "metadata": {}, - "source": [ - "A negative application is that there cannot be four living neighbors:" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "8bdd835e", - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "n1\n", - "\n", - "\n", - "\n", - "\n", - "n2\n", - "\n", - "\n", - "\n", - "\n", - "n2->n1\n", - "\n", - "\n", - "\n", - "\n", - "n3\n", - "\n", - "\n", - "\n", - "\n", - "n3->n1\n", - "\n", - "\n", - "\n", - "\n", - "n4\n", - "\n", - "\n", - "\n", - "\n", - "n4->n1\n", - "\n", - "\n", - "\n", - "\n", - "n5\n", - "\n", - "\n", - "\n", - "\n", - "n5->n1\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"neato\", Statement[Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fillcolor => \"red\", :label => \"\")), Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fillcolor => \"green\", :label => \"\")), Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fillcolor => \"green\", :label => \"\")), Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fillcolor => \"green\", :label => \"\")), Node(\"n5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fillcolor => \"green\", :label => \"\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:margin => \"0\", :shape => \"circle\", :style => \"filled\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:dir => \"none\", :minlen => \"1\"))" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "BirthN1 |> view_life" - ] - }, - { - "cell_type": "markdown", - "id": "598306f1", - "metadata": {}, - "source": [ - "We also want this rule to be applicable to only presently dead vertices. Our encoding of dead vs live vertices has the quirk that a map from a vertex could go to a living or a dead vertex. So to prevent our rule from applying to vertices which are already alive, we need another negative application to forbid this!" - ] - }, - { - "cell_type": "markdown", - "id": "7d30238e", - "metadata": {}, - "source": [ - "Our next rule `Persist` encodes: a living cell stays alive iff it has 2 or 3 living neighbors." - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "81c2321d", - "metadata": {}, - "outputs": [], - "source": [ - "PersistR = @acset Life begin V=1; Curr=1; Next=1; curr=1; next=1 end\n", - "PersistP1 = living_neighbors(2; alive=true)\n", - "PersistN1 = living_neighbors(4; alive=true)\n", - "DR, DP1, DN1 = homomorphism.(Ref(Curr()), [PersistR, PersistP1, PersistN1])\n", - "pac = [AppCond(DP1; monic=true), AppCond(DN1, false; monic=true)]\n", - "Persist = Rule(id(Curr()), DR; ac=pac);" - ] - }, - { - "cell_type": "markdown", - "id": "b6efd594", - "metadata": {}, - "source": [ - "Those are the core dynamics of the Game of Life, but at the end of each timestep our implementation needs to handle updating what is currently alive with what was marked as to-be-alive. This is handled with three simple rules which can be applied (in sequence) to each vertex:" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "d0f98728", - "metadata": {}, - "outputs": [], - "source": [ - "ClearCurr = Rule(to_curr(), id(Life(1))) # Remove \"Curr\" status\n", - "CopyNext = Rule(to_next(), to_curr()) # Copy \"Next\" to \"Curr\"\n", - "ClearNext = Rule(to_next(), id(Life(1))) # Remove \"Next\" status\n", - "\n", - "rules = [:Birth=>Birth, :Persist=>Persist, :ClearCurr=>ClearCurr,\n", - " :ClearNext=>ClearNext, :CopyNext=>CopyNext];" - ] - }, - { - "cell_type": "markdown", - "id": "85faf719", - "metadata": {}, - "source": [ - "# Schedule\n", - "\n", - "Now that our basic dynamic building blocks, the rewrite rules, have been established, we lastly need to string them together into a simulation. We first create \"boxes\" for the rewrite rules which will be put into a wiring diagram:" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "56f58b03", - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n1\n", - "\n", - "\n", - "Birth\n", - "\n", - "\n", - "\n", - "n0in1:s->n1:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n1:s->n0out1:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n1:s->n0out1:n\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Statement[Catlab.Graphics.Graphviz.Subgraph(\"\", Statement[Node(\"n0in1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"in1\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rank => \"source\", :rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\", :shape => \"none\", :label => \"\", :width => \"0.333\", :height => \"0\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\")), Catlab.Graphics.Graphviz.Subgraph(\"\", Statement[Node(\"n0out1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"out1\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rank => \"sink\", :rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\", :shape => \"none\", :label => \"\", :width => \"0.333\", :height => \"0\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\")), Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"Birth\", :fillcolor => \"lightblue\", :id => \"n1\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
Birth
\"), :style => \"filled\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n0in1\", \"s\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"\", :id => \"e1\", :label => \"\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"out1\", \"s\"), Catlab.Graphics.Graphviz.NodeID(\"n0out1\", \"n\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"\", :id => \"e2\", :label => \"\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"out2\", \"s\"), Catlab.Graphics.Graphviz.NodeID(\"n0out1\", \"n\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"\", :id => \"e3\", :label => \"\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\", :label => \"\", :labelloc => \"t\", :rankdir => \"TB\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\", :shape => \"none\", :width => \"0\", :height => \"0\", :margin => \"0\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:arrowsize => \"0.5\", :fontname => \"Serif\"))" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "rBirth, rPersist, rClearCurr, rClearNext, rCopyNext = \n", - " [tryrule(RuleApp(n, r, Life(1))) for (n,r) in rules] \n", - "\n", - "view_sched(rBirth)" - ] - }, - { - "cell_type": "markdown", - "id": "2b3101e1", - "metadata": {}, - "source": [ - "When the world-state comes in along the wire from the top, it enters the rewrite box which attempts to fire the rewrite rule. Note that, although a rewrite rule generally has two possible outputs (depending on whether or not the rule was successfully applied), for this simulation we won't distinguish these two cases, expressed by the merging of the output wires into a single control flow. This makes it very straightforward to compose the rules together in sequence:" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "b54834d2", - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n1\n", - "\n", - "\n", - "ClearCurr\n", - "\n", - "\n", - "\n", - "n0in1:s->n1:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n2\n", - "\n", - "\n", - "CopyNext\n", - "\n", - "\n", - "\n", - "n1:s->n2:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n1:s->n2:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n3\n", - "\n", - "\n", - "ClearNext\n", - "\n", - "\n", - "\n", - "n2:s->n3:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n2:s->n3:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n3:s->n0out1:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n3:s->n0out1:n\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Statement[Catlab.Graphics.Graphviz.Subgraph(\"\", Statement[Node(\"n0in1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"in1\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rank => \"source\", :rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\", :shape => \"none\", :label => \"\", :width => \"0.333\", :height => \"0\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\")), Catlab.Graphics.Graphviz.Subgraph(\"\", Statement[Node(\"n0out1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"out1\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rank => \"sink\", :rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\", :shape => \"none\", :label => \"\", :width => \"0.333\", :height => \"0\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\")), Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"ClearCurr\", :fillcolor => \"lightblue\", :id => \"n1\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
ClearCurr
\"), :style => \"filled\")), Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"CopyNext\", :fillcolor => \"lightblue\", :id => \"n2\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
CopyNext
\"), :style => \"filled\")), Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"ClearNext\", :fillcolor => \"lightblue\", :id => \"n3\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
ClearNext
\"), :style => \"filled\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n0in1\", \"s\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"\", :id => \"e1\", :label => \"\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"out1\", \"s\"), Catlab.Graphics.Graphviz.NodeID(\"n3\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"\", :id => \"e2\", :label => \"\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"out2\", \"s\"), Catlab.Graphics.Graphviz.NodeID(\"n2\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"\", :id => \"e3\", :label => \"\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"out1\", \"s\"), Catlab.Graphics.Graphviz.NodeID(\"n2\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"\", :id => \"e4\", :label => \"\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"out2\", \"s\"), Catlab.Graphics.Graphviz.NodeID(\"n3\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"\", :id => \"e5\", :label => \"\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"out2\", \"s\"), Catlab.Graphics.Graphviz.NodeID(\"n0out1\", \"n\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"\", :id => \"e6\", :label => \"\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"out1\", \"s\"), Catlab.Graphics.Graphviz.NodeID(\"n0out1\", \"n\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"\", :id => \"e7\", :label => \"\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\", :label => \"\", :labelloc => \"t\", :rankdir => \"TB\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\", :shape => \"none\", :width => \"0\", :height => \"0\", :margin => \"0\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:arrowsize => \"0.5\", :fontname => \"Serif\"))" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "view_sched(rClearCurr ⋅ rCopyNext ⋅ rClearNext)" - ] - }, - { - "cell_type": "markdown", - "id": "f176fbdd", - "metadata": {}, - "source": [ - "A subtle detail when creating the `RuleApp` rewrite rule boxes was the third argument (after the name and the rule itself) which was the *interface* of the rule. By putting `Life(1)` (which is just a vertex), we communicate that the rewrite rule is relative to a distinguished vertex. This allows us to have control over *which* vertex we are applying the rewrite rule. Yellow `Query` boxes have the semantics of executing a subroutine for each agent of a particular shape, so the following schedule will apply `Birth` and `Persist` to each vertex in order to systematically update `Next` for the entire world state." - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "00c26cde", - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n1\n", - "\n", - "\n", - "Query Cell\n", - "\n", - "\n", - "\n", - "n0in1:s->n1:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n1:s->n0out1:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n2\n", - "\n", - "\n", - "Fail\n", - "\n", - "\n", - "\n", - "n1:s->n2:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n3\n", - "\n", - "\n", - "Birth\n", - "\n", - "\n", - "\n", - "n1:s->n3:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n4\n", - "\n", - "\n", - "Persist\n", - "\n", - "\n", - "\n", - "n3:s->n4:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n3:s->n4:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n4:s->n1:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n4:s->n1:n\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Statement[Catlab.Graphics.Graphviz.Subgraph(\"\", Statement[Node(\"n0in1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"in1\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rank => \"source\", :rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\", :shape => \"none\", :label => \"\", :width => \"0.333\", :height => \"0\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\")), Catlab.Graphics.Graphviz.Subgraph(\"\", Statement[Node(\"n0out1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"out1\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rank => \"sink\", :rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\", :shape => \"none\", :label => \"\", :width => \"0.333\", :height => \"0\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\")), Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"Query Cell\", :fillcolor => \"yellow\", :id => \"n1\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
Query Cell
\"), :style => \"filled\")), Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"Fail\", :fillcolor => \"red\", :id => \"n2\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
Fail
\"), :style => \"filled\")), Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"Birth\", :fillcolor => \"lightblue\", :id => \"n3\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
Birth
\"), :style => \"filled\")), Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"Persist\", :fillcolor => \"lightblue\", :id => \"n4\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
Persist
\"), :style => \"filled\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n0in1\", \"s\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"\", :id => \"e1\", :label => \"\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"out2\", \"s\"), Catlab.Graphics.Graphviz.NodeID(\"n3\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"\", :id => \"e2\", :label => \"\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"out2\", \"s\"), Catlab.Graphics.Graphviz.NodeID(\"n4\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"\", :id => \"e3\", :label => \"\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"out1\", \"s\"), Catlab.Graphics.Graphviz.NodeID(\"n4\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"\", :id => \"e4\", :label => \"\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"out3\", \"s\"), Catlab.Graphics.Graphviz.NodeID(\"n2\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"\", :id => \"e5\", :label => \"\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n4\", \"out1\", \"s\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"in2\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"\", :id => \"e6\", :label => \"\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n4\", \"out2\", \"s\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"in2\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"\", :id => \"e7\", :label => \"\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"out1\", \"s\"), Catlab.Graphics.Graphviz.NodeID(\"n0out1\", \"n\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"\", :id => \"e8\", :label => \"\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\", :label => \"\", :labelloc => \"t\", :rankdir => \"TB\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\", :shape => \"none\", :width => \"0\", :height => \"0\", :margin => \"0\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:arrowsize => \"0.5\", :fontname => \"Serif\"))" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "update_next = agent(rBirth ⋅ rPersist, Life(1); n=:Cell)\n", - "view_sched(update_next)" - ] - }, - { - "cell_type": "markdown", - "id": "8156043e", - "metadata": {}, - "source": [ - "One enters a `Query` box in the first (leftmost) port, exits the second output port for each subobject (re-entering through the second input) - at the very end we exit through the first output port. (The third output port is only needed in rare circumstances, we don't treat it as a possibility by attaching a `Fail` block to that path).\n", - "\n", - "Our final schedule is a `for` loop wrapping two sequences of a rewrite rules which are executed for every vertex: the first sequence above (which assumes that `Curr` is correct and computes `Next`) and a second sequence (which assumes `Next` is correct and uses it to overwrite `Curr`)." - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "55e4666c", - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n1\n", - "\n", - "\n", - "for 1:10\n", - "\n", - "\n", - "\n", - "n0in1:s->n1:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n1:s->n0out1:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n2\n", - "\n", - "\n", - "Query Cell\n", - "\n", - "\n", - "\n", - "n1:s->n2:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n3\n", - "\n", - "\n", - "Fail\n", - "\n", - "\n", - "\n", - "n2:s->n3:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n4\n", - "\n", - "\n", - "Birth\n", - "\n", - "\n", - "\n", - "n2:s->n4:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n6\n", - "\n", - "\n", - "Query Cell\n", - "\n", - "\n", - "\n", - "n2:s->n6:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n5\n", - "\n", - "\n", - "Persist\n", - "\n", - "\n", - "\n", - "n4:s->n5:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n4:s->n5:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n5:s->n2:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n5:s->n2:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n6:s->n1:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n7\n", - "\n", - "\n", - "Fail\n", - "\n", - "\n", - "\n", - "n6:s->n7:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n8\n", - "\n", - "\n", - "ClearCurr\n", - "\n", - "\n", - "\n", - "n6:s->n8:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n9\n", - "\n", - "\n", - "CopyNext\n", - "\n", - "\n", - "\n", - "n8:s->n9:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n8:s->n9:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n10\n", - "\n", - "\n", - "ClearNext\n", - "\n", - "\n", - "\n", - "n9:s->n10:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n9:s->n10:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n10:s->n6:n\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n10:s->n6:n\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Statement[Catlab.Graphics.Graphviz.Subgraph(\"\", Statement[Node(\"n0in1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"in1\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rank => \"source\", :rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\", :shape => \"none\", :label => \"\", :width => \"0.333\", :height => \"0\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\")), Catlab.Graphics.Graphviz.Subgraph(\"\", Statement[Node(\"n0out1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"out1\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rank => \"sink\", :rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\", :shape => \"none\", :label => \"\", :width => \"0.333\", :height => \"0\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:style => \"invis\")), Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"for 1:10\", :fillcolor => \"lightpink\", :id => \"n1\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
for 1:10
\"), :style => \"filled\")), Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"Query Cell\", :fillcolor => \"yellow\", :id => \"n2\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
Query Cell
\"), :style => \"filled\")), Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"Fail\", :fillcolor => \"red\", :id => \"n3\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
Fail
\"), :style => \"filled\")), Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"Birth\", :fillcolor => \"lightblue\", :id => \"n4\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
Birth
\"), :style => \"filled\")), Node(\"n5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"Persist\", :fillcolor => \"lightblue\", :id => \"n5\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
Persist
\"), :style => \"filled\")), Node(\"n6\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"Query Cell\", :fillcolor => \"yellow\", :id => \"n6\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
Query Cell
\"), :style => \"filled\")), Node(\"n7\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"Fail\", :fillcolor => \"red\", :id => \"n7\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
Fail
\"), :style => \"filled\")), Node(\"n8\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"black\", :comment => \"ClearCurr\", :fillcolor => \"lightblue\", :id => \"n8\", :label => Catlab.Graphics.Graphviz.Html(\"\\n\\n\\n\\n
ClearCurr
\"), :style => \"filled\")) … Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n4\", \"out2\", \"s\"), Catlab.Graphics.Graphviz.NodeID(\"n5\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"\", :id => \"e10\", :label => \"\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n4\", \"out1\", \"s\"), Catlab.Graphics.Graphviz.NodeID(\"n5\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"\", :id => \"e11\", :label => \"\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"out3\", \"s\"), Catlab.Graphics.Graphviz.NodeID(\"n3\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"\", :id => \"e12\", :label => \"\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n5\", \"out1\", \"s\"), Catlab.Graphics.Graphviz.NodeID(\"n2\", \"in2\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"\", :id => \"e13\", :label => \"\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n5\", \"out2\", \"s\"), Catlab.Graphics.Graphviz.NodeID(\"n2\", \"in2\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"\", :id => \"e14\", :label => \"\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n6\", \"out3\", \"s\"), Catlab.Graphics.Graphviz.NodeID(\"n7\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"\", :id => \"e15\", :label => \"\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n10\", \"out2\", \"s\"), Catlab.Graphics.Graphviz.NodeID(\"n6\", \"in2\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"\", :id => \"e16\", :label => \"\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"out1\", \"s\"), Catlab.Graphics.Graphviz.NodeID(\"n6\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"\", :id => \"e17\", :label => \"\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n8\", \"out2\", \"s\"), Catlab.Graphics.Graphviz.NodeID(\"n9\", \"in1\", \"n\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"\", :id => \"e18\", :label => \"\")), Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"out1\", \"s\"), Catlab.Graphics.Graphviz.NodeID(\"n0out1\", \"n\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"\", :id => \"e19\", :label => \"\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\", :label => \"\", :labelloc => \"t\", :rankdir => \"TB\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\", :shape => \"none\", :width => \"0\", :height => \"0\", :margin => \"0\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:arrowsize => \"0.5\", :fontname => \"Serif\"))" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "next_step = agent(compose(rClearCurr, rCopyNext, rClearNext), Life(1); n=:Cell)\n", - "life(n::Int) = for_schedule(update_next ⋅ next_step, n) |> F\n", - "view_sched(life(10))" - ] - }, - { - "cell_type": "markdown", - "id": "21fc8082", - "metadata": {}, - "source": [ - "# Example\n", - "We apply the schedule (doing a single timestep) to an input and plot the trajectory." - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "0f7c3bed", - "metadata": {}, - "outputs": [], - "source": [ - "G = make_grid([1 0 1 0 1; 0 1 0 1 0 ; 0 1 0 1 0 ; 1 0 1 0 1; 1 0 1 0 1])\n", - "res, = apply_schedule(life(1), G; steps=1000);\n", - "view_traj(life(1), res, ((f,s)->view_life(F⁻¹(f),s)); agent=true);" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "83ca3c41", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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U1BQEPb29ujq6kodiiBoFJEw3tHT02PmzJn4+/sTFBSEg4MDo0ePxt/fX5J4DAwM+PHHHwkODqZ37978+OOPODk5MXPmTG7fvv3BtWvXruXrr78WR41m071796hcubLUYQiCxhEJ4z/s7OzYsGEDt2/fxtramj59+mBvb8/o0aPZunUrwcHB+RqPoaEhgwcP5vr162zevJm3b9/SuXNnqlWrxtSpUzl16hTr169n4MCB+RqXJgsICKBatWpShyEIGkcGoMjDXM70Mxk+dzaDprt//z4HDhzg3LlzXLx4kaSkJCpXrkzFihWpUKECpUuXxsrKChsbG8zNzTEwMKBo0aIULVoUAwODXNX5+vXrTz6mUCi4du0ax48fZ/fu3QQFBdG1a1fatm1LmzZtqFixYm7/q4VCnz596NKlC/3795c6FEHQGDLZu93pRMLImYiICO7fv8/Dhw959OgRT58+5fnz50RERBAbG0tSUhIJCQnEx8eTnJxMsWLFslwbER0d/cEYRfHixbOM4+3btyQmJmJsbIyhoSFyuZy3b9+io6NDmTJlqFq1Ks7OzjRo0ICqVatiY2OT5/+7NqhRowYbN26kdu3aUociCBpDJpPJNGwitWUAACAASURBVPKIVqnZ2NhgY2ODi4tLtq6PiYnJcsquubl5jneXjYqKwtHRkWvXrqGvr09CQgKxsbHcunWLkydPcvXqVY4cOYK+vj5yuZwiRYrg4uJCixYtcHV1pWbNmjmqTxukpqby6NEjnJycpA5FEDSOSBj5oFixYmop959//qFLly6UK1fug/vr1avH4MGDAeUb5OXLl9m/fz87d+7kzJkzBAUF8ddff2FqaspXX33FiBEjKFOmjFpiLGgCAwMpXbo0RkZGUociCBpHDHprME9PT4YMGfLZa/T09GjSpAlz5szh/v37+Pn50adPH4yMjJDJZJw/f55atWoxePBgAgMD8yly6dy8eZPq1atLHYYgaCSRMDSUv78/0dHR2e4WS1epUiWmTZvGgwcPWLx4ccYg/atXr3B2dub333+X/DRCdbpy5Qr169eXOgxB0EgiYWgoDw8PhgwZkuuNBnV0dGjbti07d+7k6NGjyOVyjI2N2b17N61atSIqKkrFERcM/v7+1K1bV+owBEEjiYShgZKTk9m+fbvKNhqsUaMGBw4cwMPDg5iYGOLj43F2diY0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i48//pj9+/cTFBREuXLlFLkms9lMoUKFSE9Pl/VF+Pr16zRq1IiFCxfy73//W7Z2z549S58+fTh79qxsbT4sKyuLCRMmsHHjRrZt2/bEZG+xWJg2YxrfTf8Oa3krxhpGKAvk5UspARGgPaNFc0XDRx98xMTPJuZUoo0cOZJr164RFBRU4LPJheebSBjPmYMHDzJw2EDiLfGk1UmDV8j7faIE3AT3E+44RTsxY+oMBg4c+NgX6LS0NPr06UN6ejrr1q1T9C/M27dvU79+fSIi5D/6MzQ0lI4dO7J7925q1qwpS5uHDh1i8uTJHDp0SJb2HpaamkqfPn2wWCysXbs2z6WsqampLFy0kJ8W/0R0dDQO5R1I80kDb+6dpeHEvUUtBiAR9HF6uAFFChdh2KBhvD/0fQoXLvxAm1lZWXTq1ImAgAB++OEHma9UeJ6IhPGcMJlMDBkxhE1BmzC0NNxLFAURCe773HnV91U2/baJkiVLPvDpO3fu0KFDB+rUqcO8efMUP1ktPDycIUOGEB4erkj769aty1nYV7p06QK3t379etasWcOGDRtk6N2D/vrrLzp27EijRo2YN29evv+qv3nzJgcPHuSP8D84dvwYCfEJOLo44ubqhk9RH6oEVKFenXo0a9aMihUrPrGtlJQUGjRowMiRIxk2bFi++iM8/8T95XMgMjKSpq2ackd3B9NgE8ixy7UfpPVL49SxU1StVZXdQbt5/fXXgXt/kXft2pVRo0YxduxYGYI9XUxMjGzzF7np3r07169fp127dhw9erTAd0tKrfI+evQoPXr0YMKECYwYMaJAbZUrV453332Xd999l++++46EhASmTZuWr7YKFSrEtm3baNiwIZUqVRLrMV5SokrKzt26dYvAeoHcLH0TUweZkkU2DWQ0zOBu67u0bNuSgwcPsmHDBjp06MBPP/2kWrIAeSe8H2fs2LE0adKEXr16kVnAzQqVKKldvHgx3bt3Z+XKlQVOFg+TY98rf39/1q5dS9++fbl69apMPROeJ+IOw44lJCTQuEVj4qvHk/magruxVgJDJwMdunagZLGS7NmzR7ax/rxSI2EAzJ49my5duvD++++zaNGiJz43KyuLP/74gwP79nE6OJjLly+TePcuRrMZBwcH3HU6zh49So369WnWqhWNGzfO17qU+ye3Dx06lO9KtidJSEiQpd3G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", - "text/plain": [ - "Cairo.CairoSurfaceBase{UInt32}(Ptr{Nothing} @0x00000002a7ee8670, 396.0, 1278.0)" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "readpng(\"traj/1.png\") # start by going out the right port of the for box" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "331edcc6", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "Cairo.CairoSurfaceBase{UInt32}(Ptr{Nothing} @0x00000002b1411a60, 409.0, 1308.0)" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "readpng(\"traj/2.png\") # pick our first \"agent\"" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "dffae8e9", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "Cairo.CairoSurfaceBase{UInt32}(Ptr{Nothing} @0x00000002bf263ea0, 396.0, 1263.0)" - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "readpng(\"traj/3.png\") # Birth doesn't apply b/c it's alive" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "6936aafe", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "Cairo.CairoSurfaceBase{UInt32}(Ptr{Nothing} @0x00000002a12cdc90, 423.0, 1249.0)" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "readpng(\"traj/4.png\") # Persist doesn't apply b/c only one living neighbor" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "1d2833da", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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NzfX2gK5x48fJz09/aVL+Zw7d46RI0fSqVMnFixYUOTFYIVulbjTdKVLlyYxMVHRGhISEgxu9tnj1Go1np6eTJgwQelSikSuGz2fsbExM2fOZO3atXh4eNC9e/e8pb+eZ8mSJfzzzz9aqyc8PPyFmzVGRUXxySef8Oqrr/LJJ5+wePFiCSIDVOLCqFKlSty4cUPRGq5du0blyrrayUbz9u7di42NDc2bN1e6lCKR60Yv1rFjR06fPs3QoUOZNGkSTZs25YcffuDkyZNERkYSGRnJwoULOXbsGH379tVaHf369SMoKIjly5eTkpK7HO39+/fZvHkzo0aNon79+mRkZBAaGoq7u7vW6hDaVeLCqE6dOly6dEnRGi5evEi9evUUraEoli9fzqRJk5Quo8hkZPRyJiYmjB8/nrCwMObNm0dsbCwTJ06kRYsWNG3alAMHDhAQEICt7bN7EWmKra0te/bswcfHBzs7O1QqFfXr18fb25tXXnmFK1eusGjRIhwcHF7emNBbBjeBoahcXFzIzMwkMjKS8uXL67z/a9euYWFhgb29kjvbFF5UVBQHDhzA29tb6VKKTEZG+adSqejSpYtim9PVrVuX3bt3F3jCiTAcJW5kBNClSxf27dunSN87d+406GXsV69ezdChQylVqpTSpRSZjIwMjwRR8VUiw6hnz574+/sr0refnx+9e/dWpO+iysnJYfXq1cXmjnYZGQmhP0pkGA0aNIjdu3fz8OFDnfZ78+ZNTp8+bbBhtGfPHuzt7WnWrJnSpWiESqUqVsvfCGHISmQYlStXjl69erFmzRqd9rtkyRLc3d2xsrLSab+asnz5coOfzi2E0E8lMowAPv74Y+bOnUtaWppO+ouIiMDLy8tg91WJjIzk4MGDBrOteH7IyEgI/VFiw6h58+a0aNHihTfTadKXX37J+PHjqVSpkk7607RVq1YxbNiwYjFxQQihf0rc1O7HzZo1izZt2jB48GCqVKmitX727NlDYGAgISEhWutDm3JycvD09GTr1q1Kl6JRMjISQn+U2JERQM2aNfnggw949913tbZKcXR0NOPHj2f16tUGO6rYvXs3Tk5ONG3aVOlSNErCSAj9UaLDCOCLL74gOTmZWbNmabztzMxM3njjDdzd3enatavG29cVmbgghNC2Eh9Gj3a6XLJkCQEBARpt+/3336d06dKK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DCnHzfJhZk6dic1pGzDHWXsWqI+omTNzjqxbdHJga29bsORCKUkHO3u7Qpl4JbbpcihVqhR//fUXbdq0wcPDg4yMDN4a+BbpVdNJH5X+YkteS3K7It64coP2fu0ZNmgYc76Z80jlXo1GQ//+/dFoNBw7dkzytuWmOi96HEdHR4KCgmjWrBnlypXD39/fZLal/jAnJSXRu3dvSpYsSUhISL4qHlSqVIk1W7cSERHB77/8wujVq4mIjKSenR2V09Mpo9djS/YKKN7KinCVivMGA5nW1nT38+PHYcNo0aLFE3br1q3LkiVL6N69OydPnsx36Z3CYK4+O1WqVOHdwHf5KfgndD3kbbJnedqSql5V6SPD+Zzc28wlS5dEm6LFZDXBCkMKlHIr3HvrlRIjyI522bBhA71790aLFq2/Fgp+5JMnorpA66NlxY4VhJwMYd/OfTg5OREdHY2fnx81a9Zk06ZNspSXT05Olmw7xtvbm6CgILp06YK7uzsNGzY0id34+HjJauLduHEDPz8/OnXqlFvnryB4e3szado0Jk2bRkJCAufPn2flypVcunePZvXrY2Fri0epUjQrX57Z1avna9+/d+/eXL16lZ49e3L48GHJywGZI6E4h2+++oZtdbZx58IdyVsc5BIJylNK1p9dL2m+Tw5y/32rVKnC3YS7IH3nnOcTT6F7yr0y23QPs23nNnS2OrSDTCdEudiD9k0tlxSXaNCsASdOnKBJkyZ0796dlStXytbnRKqVUQ716tVj5cqV9O7dm7t375rEplQf5n379tGiRQu++OKLR+r8vSiurq506NCBihUr0rFjR775/ntmffMNH330Eb169cqXEOUwadIkqlSpwuDBg/N95viimFOM4uLicHV0xf6QffYeptQkg/0We9b8uoby5eUp3Cb337d9i/bYRhWNCAa7KDs6tircmdwrJ0Zz583lx9U/onlbAw4SOVFAeod0bjvfpmv3rnz11VeShG4/C6nFCKB79+68//77dOnShQcm6AkkxTbd8uXLGThwIOvXr2fQINN2eYuNjS30zUehULBixQru3bvHjBkzTHRleWOuXjshISE0a9aMN998k51BO1EFqeCmhA4TwH6tPXO+mmPS3mnPQ+6/b4cOHbAJt5HN31MRYBVuRYcOHQpl5pXapjt69CiTv5qMdrA2u925xGS0y8AyxZKj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", - "text/plain": [ - "Cairo.CairoSurfaceBase{UInt32}(Ptr{Nothing} @0x00000002a84e47d0, 419.0, 1295.0)" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "readpng(\"traj/5.png\") # Switch to next agent" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "id": "b031bdf8", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "Cairo.CairoSurfaceBase{UInt32}(Ptr{Nothing} @0x00000002a0637170, 409.0, 1134.0)" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "readpng(\"traj/33.png\") # An example of Birth being applied" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "id": "e4e8c1e5", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZkAAASWCAYAAAD4y9G8AAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzdd1RUx9sH8O+yoKiAgoWiYEMRFQ1ixBobdjGW2BV7N7ElllgSxRJrYu+KmvyMsWsiEVARsYuKCiJNpArS6+6yu8/7B4f7suyCWFYIPp9zPMfb5s4t7HNn7twZERERGGOMMS3QKe0MMMYYK784yDDGGNMaDjKMMca0hoMMY4wxreEgwxhjTGs4yDDGGNMaDjKMMca0hoMMY4wxrdEt7Qywz1NWVhZkMpnGZWKxGEZGRlrPg1KphL+/P+zt7TUuVygUCAoKgqGhIaysrFSWERFSU1OF6dTUVNSvX1+r+WXsv4hLMqxUxMTEwMXFBSYmJti4cSP27duHPXv2YPHixWjXrp3W95+VlYW5c+eiV69eReavY8eOGDZsGOrXr4+JEyeiYOcYZ8+ehYmJifAvJCRE63lm7D+JGCsle/fuJQCUlZWlMn/16tWfZP83btwgc3Nzjct+/PFHevPmDREReXl5kY6ODnl6egrLZ82aRcnJyZScnEwZGRmfJL/FkUqltH///tLOBmNquCTDSo2OjvrtFxsbi6VLlwrTWVlZCAgIQE5OjjAvKioK4eHhkMlkyMzMRHh4OKKiooTl2dnZSE9PR2pqKgIDA9X2kZiYiIcPH0Iul0MkEqktVyqVcHZ2Ro0aNQAA3bt3h42NjbAPX19feHp6Yv369QgODoaBgUGRx6hUKvHgwQM8ePAAubm5KssyMzPh5+eHtLQ0te1ycnIQGBgIqVSqMv/169cgIjx9+hSZmZkA8qr1pk6dCg8PD4SHhwvrPnnyBIGBgSrnjrFPjYMMKzMUCgUWLVokTG/ZsgVbtmxBVFQUevbsiZ07dwIAkpKS0LBhQ7x48QJEhC1btgjVXv/++y9MTU2xbt06LFmyBEOHDsWCBQuENLdt24ZDhw5BR0cHe/fu1RhkdHR00LZtW5V5aWlpaN++PQAgNzcX/fr1w7lz59C2bVusXLlS4/FIJBJ06dIFOjo6ePPmDTp16iRUuT148ADfffcdZDIZunbtik6dOmH79u0AgL/++gv79+/H1atX0bx5cwQEBCAhIQG9e/fG0KFDsXjxYqxbtw6NGjVCYmIioqKiEBkZibi4OHh5eQEA5syZg6ysLLx58wZTp059r+vB2EdRyiUp9hnbv38/AaD58+fTokWLaMyYMVS7dm0iIrp+/To1b96clEolERGFhISQWCymO3fuEBGRjo4OPXnyhIiIjh8/Tra2tkK6devWpd27dxMR0fnz58nS0pKIiB4+fEgdOnQQ1nN3dxf2V5zLly/Td999pzZfoVDQ9u3bSSwWk5+fn9ry6OhoateunbCuWCymyMhIIiLq1asXubm5ERHRwYMHhfxHRETQ0KFDhaq43r1706BBg4iIaNOmTWRnZ0dyuVw4zrNnzxIR0ezZs2nq1KnCvi0sLOj58+dEROTh4fHWY2RMW7h1GSt1rq6uqFy5MgBg7dq1AICLFy+icePGQknD2toazZs3x+XLl+Ho6Fhserq6ujA2NgYAmJqaCq3ATp48iZYtWwrrGRgYaCzJFJSUlAQvLy9s2bJFbZmOjg5mz54NT09PeHt7o1WrVirLa9eujVu3bsHX1xcxMTEA8qr/gLxS28uXLwEAtra2qFSpEgDg8uXLyMnJEUokEydORLVq1YTjMjIyglgsBgCYmZkhJSVF2F/BYxk7dizatGmDH3/8Ed9//32xx8iYNnGQYWXKjz/+CCDvRzg9PV1lmYWFBRQKxXunnZCQoPaOozg5OTnYtGkTVq1aJfywa9K0aVMhEBSUlZWFYcOGYfny5Rg+fDjGjh0rLFu9ejUmTZoEGxsbBAYGYteuXQCAjIwM6OjoYOjQocK6SqWyRPktGGR++eUXfPHFF5g3bx6uXr0Kd3f3Yo+BMW3hdzKs1OT/eJKGcfOcnJxw+/ZtlUATFRUFJycnAICenp7w4js7OxtyuVzjPgqm3apVK7i7uwtpSqXSIoOWQqHAunXrsGjRIujr6wMArl+/DolEovajHxoaij59+qilceLECcTHx6Nt27bIzc2FUqkU8lOhQgWsWrUKffv2haurq1A6a9u2LS5dugQ/Pz8hnY0bN2o8voLHpqurq/Ld0dGjRzFixAg8evQIDx8+RGhoqMbjZEzbOMiwUhEfH4/r168DyKsiKtzyqm/fvpgwYQJmzpyJ5ORknDx5En369EGnTp0AAN26dcOcOXPwww8/ICgoCDExMfDy8kJcXBxiYmLw8uVLKJVK3Lp1C1lZWQgNDcWkSZPQtGlTdO3aFevXr8f//vc/JCYm4tixY2r5mz17Nvbu3QsHBwc0bNgQlpaW2LVrFypWrAhTU1MMGzYMV65cwY4dOzBr1iyYm5urpWFpaYlHjx5h3Lhx2LZtG2rXro2NGzciKSkJW7duxapVqzBx4kTMmjUL69atQ0ZGBjp06IBRo0bhq6++wsCBA+Hs7Izu3btDJBLB398fCQkJyMjIQEJCAkJDQ/Hs2TMolUo0a9YMly9fxtatWxEXF4fNmzcjICAACoUCjo6OaNCggRauImNvJyJNj5GMaVlERASSkpKE6YYNG2qscnr06BECAgJgZ2en8j5FKpXC29sbTZo0gZGREUQiEapVq4bg4GBkZGQAAOrXry+896hcuTJsbW2Rm5uLe/fuQSQSwcbGBnK5HKampir7lMvl8Pf3V8uLpaUlatWqhZcvX8Lf3x8WFhZo0aKFUNLRJD8ItGjRAmFhYahUqRIsLCzwxx9/oFKlSsjIyEBWVhZev34NmUyGX375BUSEe/fuITExEe3bt4exsTFSU1MRFhYGAMJ5yn/XZGNjg8qVK+P69eto2rQpTE1NERYWhsjISABAx44doaen9/aLwpgWcJBh7BPz8fHBb7/9hjNnzgjzMjMzcebMGbi4uJRizhj7+DjIMPaJRUREwMnJCdbW1rC1tYVYLEb9+vUxffp0fjnPyh0OMoyVArlcjoCAAABA48aNhSbMjJU3HGQYY4xpDbcu+4zFxcXBz88PcXFxAPL69PqYiAg3btwo8XceRcnNzcXNmzc/Uq7U5eTkCP17ERGCgoKEl+xF+a81CU5OTsbLly+hUChUhij4UHfu3IFEItG4TCaT4dmzZx9tX+y/iYPMZ+jRo0f46quv8PPPPyMoKAiHDh1Cx44d0bRp0w8OCAXFx8ejV69ewtfu7+vZs2fo06dPkT9mHyI0NBT79u1DhQoVkJKSAicnJ3zzzTewtbXFwIEDNX6fcvToUYwbN+6j50VbHjx4gBYtWuDChQsQi8U4e/Ysnj59+sHp5nckevfuXbVlycnJGDRoEObMmfPB+2H/cZ+8IxtWqh4/fkwGBgZ09OhRlfkpKSlkbW39wd3W79y5U2U6Nzf3g9L72OkUlJCQQGPHjiWFQkFERKtWrRL6FvPz86OKFSvSH3/8obJNWFgY9ejRg9q3b//R86NNvXr1oh07dgjTEyZMoJiYmA9Ot/B1KXj99+7dS926dfvgfbD/Ni7JfGZmz56N5s2bq3RxAuR9e/HTTz+pdAufmJiIoKAgtaf5+Ph4EBGio6OFbzEA4MyZM/jxxx8RHh4u9NElk8mE/wN5XdUDQFBQkNDvVlZWFsLDw4Vl0dHRCA8PF753AfKa+Bb8YFNTl/f5cnNz4e/vj9jY2GLPxffff48hQ4YIQw50794dlpaWAPJ6B3B0dFQZQkAul2Pfvn2YMmVKsekCeb0QPHz4EElJSUhNTYVSqURMTAzCw8ORk5OD7OxshIeH49WrVyrbpaen4/nz58I5T0pKQnh4uJBGeHg4wsPDVc6FTCZDYGAgsrOzVdJSKBR48uQJYmNjIRKJVLqdmTx5MubNm6eWbyIS9pGSkoKEhARhWiqVCtcqv9cEKjBC6IEDB7BhwwaEh4dDIpEI+8u/TsnJyW89b6z84SDzGYmLi4Ovr6/QZX1hY8aMQc2aNSGVSjF58mR4enri8ePHaNWqFa5fvw4iwurVq1G7dm3s3LkTq1atgr29Pc6dOwelUom7d+8iNzcXXl5eiI+Px8mTJ2FqaorAwECkpaVhzJgx6NatG37++WesX78eDRo0QFhYGHR0dIS+vIC8/rtat26N06dPQyqVYu/evTA3N0diYiLi4+NVurxfu3YtGjduLHzY+ebNGwwbNgwSiQTz5s1Do0aNsHjxYrVqwDdv3uDUqVPo27evMK/weUlJSRF6GACAHTt2YMaMGRrHwSnozz//xLp166Crq4v169fD2toaUqkUEokEzZs3x61btyASieDm5gYHBwdhu927d+Ovv/7C6dOn8cUXXwhBd8iQIULfZo8fP0bDhg2F4OTu7o5t27bh9u3baNGiBW7fvi1caxcXF2RmZsLX1xePHj1SCTLt2rWDl5eXWpATiURCTwc6OjrIyclBhw4dsGfPHujq6kIsFmPKlCmQyWTw8fFB3bp1cenSJUgkEjx48AASiQReXl7CA0RaWhoWLlyIXbt2oWHDhhrH92HlXGkWo9indf/+fQJAv/76a7Hrubq60vTp04Xpw4cPk6mpKaWlpVFERAQBoICAACIiWrBgAY0ePZqIiK5du0YmJiYqaVWsWJHu3btHRHld8puamlJOTg4REbVv316owtmwYQP17dtX2M7e3p4OHz5MRHnVWgAoNjaWiIg2btyo0uW9lZUVnTt3joiIli9fTjNnziQioqdPn5KOjg6lpqaqHePZs2eFIQA08fPzo1GjRgnTN2/epBMnThAR0alTp4qsLgsNDaVmzZoJQxQ8ffqUAFB2djYREZmZmZGXlxcREV25coWqV69ORES3bt2i2bNnC13829ra0vz584mI6Ouvv6Y1a9YQEVFmZiYBoJCQEEpKSqI+ffoI24wZM0YYymDo0KH0zz//CPnq2LGjMPxBvi+//FIYbqCgxMRE0tfXp9DQUCIiWrRoEQ0bNoyIiDIyMmjlypXCus2bNxeqFP/66y+ysbERlu3bt4+aNGkiVKl1796dNm3apPG8sfKLSzKfESMjIwBvb0V28eJFNGnSRJgeNGgQ4uPj4efnB13dvI67NXWlD0Ct6/yCHxfq6uqiUqVKQjcshbuqL0rhDxR1dXVRtWpVjV3eF+xCv0mTJqhYsaKQ54Li4+NRvXp1jfvLysrCH3/8gYMHDwLIq8I6efIkevTogZSUFGRlZUEulyMlJUWtg81z587B1tZWOA8VKlR46/EBwIULF5CdnQ0vLy94eXlh5cqVGDJkSLHbXL9+HVlZWcI2AwYMwOLFiyGTyXD27FnY29sL62oavbNatWqIjo5Wm1+9enV88803cHNzA5BXovv777+RlJSE48ePY9SoUcK6ha9N4etvbGwsnP/atWvjzZs3xZ8IVu5wV/+fkUaNGsHS0hIPHjwodr3C3exXrVoVVapUKVE3+28bn0Xbvv32Wzg7O2PLli3Q09PDvn37UKVKFbX1DAwMNHb7L5fLsWbNGqxYsUIIhs+fP8eFCxdw4cIFAHlBKC0tDa1bt8a5c+dgZ2cnbJ+YmKjyDqqkMjIyYGho+E5d/GdmZkImk6lsQ0SIi4uDXC5Henq6Ssedha9NTk6OMMR0YdOnT8ewYcMwYMAAtG3bFq9fv8b//vc/REZGFvtOqrSvPyt7uCTzGRGJRFizZg08PT3x77//qi2/ffs2EhMT4eTkhMuXLwvzk5OTUaFCBXz55ZfFpl+4u3kg70ePivjet+B8PT094UU/ESEnJ0ctqJUkHR0dHUyYMAETJkzArFmzMGbMGI3b2NvbC+88Cqazfv16fPvtt6hatSoAwM/PDw0bNkRYWJjwb8+ePWjVqhXCwsJUAgyQNwDZjRs3hNJi4UBWeIiC/GNs27Ytjhw5IjSkkMvl2LhxI4C881pwGyDvQaBNmza4d+8ePD09hfS3bdsGIyMj1K5dGydOnBDmS6VStQYccXFxsLGx0Xh+OnToABMTE8yfPx+jR4/GtGnT4OrqqjYsdcHrW/j6F772SqXyozaRZ/8NXJL5zIwdOxYZGRlwcXHBtGnT0LNnT2RmZuLu3bto3rw52rVrh6VLl6JPnz747bffMGnSJGzevBn79u1D1apVhe75w8LCUL16ddy/f19oCdaoUSNIpVIsWbIEAwYMgKGhISQSCW7fvg0HBwc8evQIaWlpSExMhK6uLgICAqCvrw+5XI6vvvoKS5YswaxZs2BsbAwjIyOcP38egwcPxv379wEAN2/exKBBg1S6vM/JyUFoaCiePn0KpVKJU6dOYePGjbh8+TJq1qwJMzMzTJkyBXXr1lU5D02bNkWDBg0QEhKCRo0aAQB+/vln7Ny5E4cOHQKQ10qtUaNGuHLlSonP74gRI7B9+3a0b98evXv3VguM3bp1w48//oibN2+iUqVKyMzMxKlTpzBixAgcPnwYX3zxBbp16waZTIZt27YByGv1tmLFCuTm5sLMzAyVKlXCkSNHsGbNGsyfPx/9+/dHz549AQBz586FgYEBdu3ahVGjRiExMRF16tRBZGQkTp06hYEDB6J27dpISEiAnp6eSsOGwqZPn47c3FxUqFABvXv3hrW1NQYMGCAsj46ORlxcHO7du4dhw4ahadOmiIqKEsbJ8fPzQ1hYGBISEqCvr4/AwEC8efMGUqkUFStWLPE5Zf9t3K3MZyo1NRXe3t5ISEiAhYUFunbtqlKtJJfL4ePjg/j4eHTo0AFWVlYAgIcPHwo/nAW70q9VqxYsLS0REBAAuVyOZs2aqXSXX6dOHaH+v0qVKqhSpQoSEhKEdExMTBAaGoqIiAh07twZ0dHRqFevHiQSiUqLpILpGBsbqzShtbGxwZMnT/DixQvo6ekhKysLSUlJ8Pf3V3mqz3f9+nV4eXnB1dVV7djymZubw8LCQu3cxcfHF1kKkEgk8Pb2hrm5OXR0dNCiRQtkZ2ejUqVKUCgUuHbtGurWrQtzc3NkZ2ejVq1aAPKC2u3bt5GTk4NOnToJQ1IDwN27dyESidCmTRuEh4erjA/z6NEjREVFoV27dqhZs6YwPyYmBv7+/mjVqhXS09NhbW0ttIzbvHkzTE1NiyzpAXnVcTo6OkI+EhIShLwCgL+/v1A6qlu3LmrUqIGHDx+icuXKMDc3F3pFqFq1KipWrChc7/x12eeBgwwrN968eYNOnTohKChImEdE2LNnD2bMmKFxm/3796N169YqL8k/pqdPn6oEmbLg+fPnOHv2rDDUNWPaxNVlrNwwNDSEqakp2rZti1atWkFfXx81a9YsMsAAwJQpU3D58mVkZ2erlBw+BqVSKQyj/OrVK5UWe6VFLpcjIiKCAwz7ZLgkw8qdFy9eICMjA9bW1hpH2/xUYmNjhaq+ihUrFvv+g7HyioMMY4wxreHqMlauFf7mR19fX3g3kpOTI/TsXKVKlWI/nCzYd5qhoaHwgWF4eDhkMhkaNWqk9mFienq60EQ5MTERjRo1UplnZGTEI2Gyco+/k2Hlmkwmw+bNm2FiYoIJEyYILZyAvIYC48ePx9ixY986xsro0aMxf/58+Pn5ISMjAzKZDMOGDYOzszMcHBzQvn17pKWlCetHRUWhRo0aMDExgYmJCf744w8AeR2Duru7o2bNmv+5MWkYex8cZFi5VqlSJbi6uqJ169ZISkpS+V7GysoKxsbG2Lt3r0rT3KJ06dIFTk5OMDY2xv79+7Fs2TIEBAQgKCgIERER2Lp1q7DugQMHEBwcjOTkZKSkpODnn38GALRp0wajRo0SuuVhrLzjIMPKPZFIhMWLF8PX1xcPHz4U5qenp0MkEqF27doAgIiIiCJ7FSjM3t4eLVq0AABYWlqif//+wrAAqampOHbsGDZt2gQfHx+hzzjGPkccZNhnYeDAgWjQoAE2b94szDt58qTQ2WNCQgLq168vdJX/NsUNC5CQkIBRo0bh8ePHGDhwIPr371+ift8YK484yLDPglgsxty5c3Hy5EmhxHH9+nV0794dQF6PBY8fP4ajo+M7px0XF4eMjAwhYDVu3BirV6+Gr68vrly5glu3bmHv3r0f72AY+w/hIMM+GxMmTICBgQG2b9+OkJAQ2NjYqAxA1rJly3du7aVQKPDbb7/h+PHjGocU6NatG5YsWYKrV69+cP4Z+y/iJszss2FgYIBp06Zh9+7dkMvlWLBgwQenuX79esycObPYvriaNm3KLcnYZ4tLMuyzMnv2bOTk5CAsLEx44Z8vMjKyxC/+AWDPnj0YMGCA0GItKioKz58/V+vO/v79+xg5cuSHZ56x/yAuybDPSu3atTF8+HB88803KvMTEhJQt25deHl5Ce9pinP06FEsXrxYGF1TqVRCLBbjxYsXcHZ2RnJyMhYtWoTMzExYW1ujW7duWjkexso6DjLss7N27VqYmZmpzKtVqxbu3btX4t6YHRwc1MaZMTExgVgsxrFjx3Dr1i1UqVIFXbp0KdX+0xgrbRxk2GenTp06Gue/beTPgr0CNGvWrMj1TExM0L9//yKX5+bmahz6mbHyiDvIZKwELl++jMjISFSrVg1dunRRGRzsXXh5eeH169fIzs7GsGHDuJTDyj0OMowxxrSGW5cxxhjTmncOMqmpqXj06BFevnwJhUKBnJwcZGdnayNvgszMTLx48eK9tpXJZEhJSRH+ZWVlCcvS0tKE+TKZrNh0FAoFbty48V55KEpubi6ePXuGN2/eaFyelJT0UfZT8PgzMzOF+QXPTU5Ozgfto/B5LvzvQ+4RmUwGLy+vd9pGoVAgMDAQcXFxkEgkRd4D7yMsLAx///23xnsmNDS0RM2gU1NTVfL0Id3OSKVSXL9+Hf7+/mrLJBKJ0MMBAAQEBODly5dq6ymVSty9e7fIe65gfgsrOE8qlQrrxcXFITk5ucTHUHg7TXnJzMwU1pPL5W9NMysrC0SEGzduvFPz9HwFe9Yu64gIjx49KnL5nTt3hKEt3tf7/CaVOMjEx8dj6NChcHFxgb+/Py5cuIABAwbA1tYWjx8/fucdl9SLFy/Qvn177Nmz5722T09Px7Zt22BiYoJJkyap/ME9ePAALVq0wIYNG956M718+RK9evUq8R/N29y4cQMODg6Ijo7W2IGij48PZs2a9cH7ISKcPHkS1atXh5OTEyIjI4Vl6enpWL58Obp3747Y2NgP2s/JkyfRsmVLrFixAj/99BNMTEwwefJkuLq6olevXu/94WNKSgqWLVuGHj16lPhH4vHjx2jRogVevHiBqlWrIjExEZs2bYKJiQnmzJmD6Ojo98rL8+fPMXDgQFy5cgWdO3dWG3/m+fPnaNmyZYkCxpMnT9CxY0eYm5vj6tWr79UQgIiwdetWuLi4wNDQUOiws6CFCxeq9NdmYGCAXbt2oW/fvio/0jo6OhCLxRg9ejTWr1+vlk7dunVx5MgRYTjpfG5ubiofmo4cOVIY3qB169YwNDQs0bFo2o6IsHHjRmEcHwAICQnBlStXYGVlhbt37xaZXmRkJHbs2IGKFSsiJiYGvXr1QlxcXInyAkDod27RokUl3qY0KRQKLFy4EB06dNC4XKlUwtnZudhzVhL37t2Dp6fnu21EJZCSkkKNGzemGTNmqMxXKBT09ddfk4eHR0mSeW/Tpk2j77///r23T0pKIgDk5uamtmzixImUlJRUonRyc3PfOw+FjR8/nn777bcil48ZM4Z0dXUpMjJSbVlycjL98ccfwvSrV6/o4sWLxe5v5MiRZGFhQTKZTGX+zz//TDdu3HjH3Ks7cOAA+fv7ExFRQkICAaCzZ88SEVF2dvYHXb9nz54RAFIqlSVa//vvv6dly5apzAsODiYAbz1P+c6dO0dRUVHC9J07d6h69ep0//59jetLJBKaPn06ASjxfTJjxgxq1KhRidaVy+W0Z88eYVqpVNKkSZOoV69epFAoNG7j7u5Ojo6ONGfOHLVl9evXp5s3b6rNDwoKIiMjI7X5RkZGFBERoTJv9+7ddPr0aWE6ODiYNmzYQMnJyZScnExSqbREx1bcdhERETR16lS1bZo0aUK+vr4a00tJSaFRo0apXId3+dtVKpX0+vVrGjlyJE2bNq3E20kkEjpw4ECJ1/8Y/vzzT0pMTCQioidPnlClSpWKXPdj/X4tXbq0yL8DTUpUklm7di1iY2PVnnB0dHSwfv16lSeNzMxMBAQEaKx+KWpZdnY2MjMz8erVK6FEQUQICgpCeHg4RCKRSh9TsbGxuHfvnkoxPTk5uciBp/L7oyqYRr7KlSsLIyUCwOvXrwEAwcHBSExMVFm34EiK+cLDw1VKR4XTCQgIUBmZMV9iYmKRY4pER0ejfv36sLa2xo4dO9TyMHLkSNy7dw+RkZFISUnB4MGDERAQIJRGZDIZUlNTERcXJ1TFLVmyBHFxcTh16pSQFhHh6dOn6Nixo3AsPj4+aucxISEBcrlcGK9ek+7du2t8kgbyxnQZO3YswsPDhfy8evUK4eHhKtVo8fHxkMvluHv3rkoVokgkUkszNzcXgYGBGqu+3rx5o3ZuNd0DGRkZyMrKQlJSkkp17KNHjzB+/HiEh4cL1WvDhg3DtGnT0Lp1a43HuHXrVsycOVPjsqKIxWK1vtIK3jcF/xbmzZuHc+fOITw8HEqlEkePHsXvv/+Ow4cPa7yvExIS8PjxY3Tt2lXjvmvVqqWx6qtWrVoqo3cWJSoqCjt37sSgQYOEeVu2bMH169fh5uaG3NzcYkcaLai47erWrQsiwqVLl0qUFpB3r/fv31+lLzmpVFriKluRSARTU9N3GqJBoVBg8uTJ8PLy0lgd+TZpaWnIycnBmzdvEBISonF5QECAShXt3bt3MWXKFISHhyM1NVXl70TT7xIRqfxt599rERERGmsyQkJCEBQUpFaD8O2332LGjBlqPVsUpURB5tSpU7Czs9NY9LWxsUHfvn0B5PXjtH37dkRGRqJ79+7Yt2+fsF5Ry44ePQoLCwv8+uuv6NWrFxYuXIiMjGbOnSsAACAASURBVAyMHz8ekZGRCA4OhpeXl3AC//33Xxw8eBA1a9bE119/LQS4adOmYfbs2SU6aE2ysrIwdepUODo6Yu3atVi/fj0aNmyIp0+fQqFQ4OjRozA1NcWrV68A5NXLjxw5EuHh4XBzc8NXX32FuLg4JCUlYdCgQXB2dsaPP/6I9evXo0GDBmoXUS6XQ09PT2Ne9u/fj0mTJmHmzJnYv3+/yg9paGgo4uLiEBERAV9fX7x48QIJCQkICgrCgwcP4O7uDktLS/zyyy9wdnbG+PHjAQB2dnbo0aMHtmzZIqR18+ZNdOnSBQDw008/4cyZM7C0tMRXX32FkJAQxMbGYvjw4RgwYADmz58Pe3t7jX8AAFCvXr1iz2/Dhg0xf/58/PDDDwDygqytrS2uXbuGyMhIdOvWDQMGDMAPP/yAlStXol69ekUWy69cuYJff/0V9+7dwxdffAFvb2+V5QqFoshzm+/UqVOoVasWNm7ciKVLl6J///5wdXUFADx79gypqam4ffs2wsLCcOLECaHLmQkTJuCbb77BkydPVPLTtGlTtQ8830VycjKGDBmCfv36YenSpcL9Fx0djbi4OISFhSExMRFeXl6Qy+XYsGEDbG1tsWfPHvTr1w8rV64UqtyICL/++ivmzp1b5P709PRUHg4LzgegcVlB+/fvR8+ePVV+2Jo0aQJjY2OsXLkSTZo0wYMHD0p07G/brk+fPir3bXHS09Nx5MgRDBgwAEDeufjzzz9hamqKFy9eQKFQwM/Pr8h/7+vVq1eIjIxEXFyc2ke6UVFRRe4vLi4Ox44dQ61atbBlyxYsX74cPXv2VKniXLx4MY4ePYrw8HC0b98ef/75J4C8Kr2MjAz4+voiIiJCON7169dj69at+PLLL4V1fXx8ULduXVy6dAm5ublYuHAhGjdujN9++w1r166Fra0tfHx8hDRcXFwQEhKCc+fOwdjYGHPmzBGqRU1NTaGrq1vy96QlKe7o6urSsGHDil3H09OT7O3thenAwEASi8Xk5+dX7DKFQkH6+vp07NgxksvllJWVRT/88APt3LlTWH/MmDG0aNEiIsqrOtuwYQMREd24cYOys7OJiCgmJobi4uI05i01NZUA0NGjR9WWzZ49W0jjn3/+IQMDA8rMzCQiot69e9PatWuJKK8oDICCgoKIiKhjx4507tw5IZ3hw4fToEGDiIhoz5491LBhQ6FqqlmzZnTs2DFh3fT0dLK0tBTSKkgikdDkyZOJiCgtLY0MDAxox44dKus4OzvTmjVrhGl7e3s6cuSIMN2gQQNat24dKZVKysjIEOZfvnyZAJC3t7dw7MnJyURENHjwYLp37x4REX399de0fft2IiLatm0bWVlZkVQqpfT0dI3nt7DC1WX5Fi5cSOPGjROm69SpQ3///TcREa1YsYK6dOkiLJszZw61bNmSiIgCAgKE6rL09HTq0aOHULUyZcoUlXtLIpGQjY0N3b59W2XfYWFhBID++ecfYV7VqlXp+PHjRER05MgRsrOzI6L/r17Nry6bOHEiWVtbC/fFqlWrqGbNmpSSkkKJiYm0atUqleMuabXE7NmzqUmTJsL0/v37qV69esJ906JFC6GKd+nSpTR8+HAiyqsOAkAbN24kIqLExERq2LCh8Ddy4MABevLkCRERLV68WGN12aJFi2jBggUa89WyZUvy9PRUmVe4uuyrr76iLVu2aNw+KSmJ+vTpQ82aNXv7SSjBdgEBAVSxYkWVarSiqssuX75M1atXV5mnVCpJV1eXHj58SJmZmeTk5FTkv4JVstOmTXun6rLp06fTzJkz1ebv2LGjyP0dPXqUlEolVahQgc6fP09EedWQjo6ORER0/PhxcnJyEtK6ceMG6evrU1hYGEVFRREAobr/6dOnBIASEhKIiGjZsmU0ZMgQYdvmzZsL1ewPHjwgABQfH09EROPGjRPuk6tXr5Ktra1w7mrWrEkXLlxQOaZx48bRwoULS3ReSvTFf/7L0+JcvHgRNjY2wrStrS0aN24MDw8PxMXFFbmsVatWMDIyQr169SAWi1G5cmWcOHFCiMBA3svK/Cem4cOHw9nZGQ8fPsTmzZuFqi4LC4uSHIoapVIppK2rq4sKFSqgSpUqAAAzMzOheFmwWiM5ORm+vr44cOCAMG/w4MEYP348lEoldHV1YWBgIDwVmpmZCVUTBw8eRHBwMP7++2+Vc5Lvr7/+glKpFEp6jRs3xrZt2zBjxgyVahFNVUj5qlWrhnr16kEkEsHAwECY36NHD9jZ2WHLli1o3bo1lEqlUK10+vRpvHz5EidOnMDr16+F0lPVqlVhYWGBChUqlLj6433o6empVE8MHToUO3fuVKu2uXXrFtLT04WnqB49eqBfv34AgBMnTuD+/fs4cuRIicaF0dXVFY7f1NRUrZow/xxLpVJ8+eWXwn0xf/58rF69Gjdv3sSVK1ewYMECpKSkCNunpKTA0NAQ+vr673QOirtvCucHgFAVVr16dUyZMgWHDx+Gi4sLkpKSUKdOHaSkpEAikQit6wpWIbq6uuLo0aP47rvvMG/ePNSvX19Y5uHhgUOHDsHd3V3libqg169fF9nztImJCY4dOwYLCwvEx8fD1NS0RMdf1HZVq1aFVCrFmzdv1Do1LSw+Pl7oTy5fwer2KlWqvPuL63dQ8O+yR48e2L17N2bNmvXWRjxisVjjvXjx4kU0adJEWK9Dhw4wMjLC1atX0bt3b7V9AhA+FLawsBBKJ/n7yJdflZi/TzMzM6H6TKFQIC4uDlKpFBUrVoStra3KKwUg75rExMS87XTk7askK3Xr1g3Xrl2DTCYr8odGoVCovXuwsLCAQqEodpkm8fHxGt9jAHl/WPfv38eUKVPg4OCAa9euqVwETQwMDCAWizXWyebm5r7zj0F+XWTBFmnm5uYgorfWU44cORKnTp3C8uXL8ddff6FixYoqy93d3VVaYi1ZsgRDhw7FpUuXVLoqKXxjaaqXL0wkEmHevHmYPHky1q1bh+HDhwvLVq9eDQBYtmyZynub0qKnpwdjY2O1dxaZmZnIycnB0KFDVeYTEQYOHAhdXV2sWLECJ0+e/OBhj/PPcaNGjVSqUqpUqYJatWpBJpPh/PnzOH/+PID/vy8cHR2xbNkyTJw48YP2X1R+TE1NYWhoqNIcvV69epDL5bh58yb27t0rDJKWnJwMIoKXl5dKKzBfX19cvHgRK1euVAkwAHDo0CEkJCTg+++/LzIvBgYGxbaIq169OiwsLErcuqy47SQSCUQiEUxMTN66/dvyJZPJ4ObmVuTyKVOmFPsA9zYFt125ciXMzc1x69YtPHv2TOP6Dg4OcHBwKDK9wr+dIpEI5ubmKr+dH5JfTbp27QpnZ2dMnz4d/fr1Q4cOHdQ6jZVIJGrBvCgleiezfPlyZGVlYd26dWrLoqKi4O/vDycnJ/j6+qq8P4iOjoaTk1OxyzRxcHDAiRMnhGmpVCqc1KNHjwr1h46Ojjh79iyAvB/8opohi8VitG3bFr6+virz3/ZtDGloMktEqFGjBlq2bInLly+rHE/Xrl01DlxVMJ3KlSvDxcUF6enpKtsDgKenJ+zs7IQbz8HBAd988w0cHR3x66+/Cuvp6uqq5L3wdHFGjRoFU1NTnD59WhguODExEStWrBDe30gkkmKbC8fGxhZbss3/sS2chq6uLjIyMgDkvZOSyWQqfywF179//z4GDx6slnbr1q0RGBiICxcuCPN27tyJtLQ0VKxYEUOGDIGRkZFaoMxPu6jjKjg//xrmn9PBgwfj9u3bwo9XfumgQ4cOCAsLE/7lB6Lg4GAhwKSmpqo0Gy98noo7z4XzVPAaDx8+XKVOPCYmBj179sSUKVNU8jRr1iyMHz9ebTybX375BaNGjULLli1V5kulUqEZenG1A/b29mpNggs+YEVFRaFdu3aoXLmysKyoH9ritgPy7jcrKyu1p+mi8pWQkKDxATb/ITA8PLzIfyUREhKisWFT4Ws0ceJEvHr1ComJiUXuT1NjpYLX3cnJCV5eXsLxKJVKJCQkoEuXLmr3aeF7nIhU0io8XdQ+AaBVq1ZYs2YNBgwYgLVr16oFssK1U8UqUaUaEV25coUsLS1p/PjxdPnyZbp69Spt2LCBtmzZItRjTp06lcaPHy80sV26dKmwfVHLAgMDSV9fn3777TehzvXOnTtkbGxM48aNo/Xr11Pr1q3Jzs6Onj9/ThMmTKA//viDMjMzady4cUKz2W+++Ual/rEwPz8/Mjc3p++//548PT3p9OnTNH78eHr69CkR5dU9rlu3jvT19Sk2NpbS09PJ3t6enJ2dSSqV0q1btwgAHTx4kJRKJfn5+ZGNjQ35+PhQYmIiDR8+nIKDg0mhUNDs2bOpTp06Qp197dq1aerUqSSXy4X89OvXjw4fPixMx8fH05dffkl79+5VWS8jI4PGjBlDAOjIkSOkVCpp2bJl1KxZM9q+fTulp6fThAkTqH379rR7924KCwsjc3NzWrhwIeXk5Gg8F6tXrxbq8/P3UatWLerYsSMtX76cvv76a3J0dKRr167RggULyNzcnKKjo4X127RpQ+bm5ir5zJednU1HjhwhAPTtt9/S69evhWWenp5UqVIlmjt3Lv30009kY2NDo0ePpuzsbHJ1dSULCws6d+4c/fvvv9SrVy9KSEgghUJBbm5uBEC41itWrCBdXV3q168f9e/fX+U9C1FeffGmTZuE6fT0dNq6dSsBoHnz5lFCQgKFhYWRjo4O7dq1ixQKBa1YsYL09fUpJiaGiIisrKxo/PjxQj25m5sbzZw5k0JDQ2nFihUq78Dy5b/LKfhOZvr06VShQgUKDw9XWTcoKIjatWtHBgYGdOvWLZJKpfTdd9+Rubk5JScnU1JSEllaWtLkyZNJLpfTX3/9RTVr1qQtW7bQq1evKDU1lb7++mv6559/6OnTpzRkyBChfr2gpUuXanwn06ZNG43NuTUdA5H6Oxlvb29ydnYWpv/++2+qVq0arV69mq5cuUKurq4qnwa4u7sTALX3i2/bjoho8+bNtHLlSpV5xTVh7tixIz1+/FiYfvz4MQGg7du3F9ncu7C4uDjq0qUL9e7dm1JSUoT5OTk5VKFCBRowYIDaNrt37yZLS0vaunUrvX79mmxsbCggIOCt+8p/53j48GFSKBT0ww8/kKGhoXD/f/PNNzR37lxKTU2lHTt20ObNm4ko7xOSmjVr0pQpU+iff/6h/fv3EwC6desWyWQymjhxIllYWFBiYiJFRUVRzZo16bvvviOZTEYHDx4kAPT8+XPKyckhJycnateuHWVnZ1NAQABVq1aN+vTpQy4uLrRgwQLy8fER8iuXy6lRo0ZC0+m3eae+y6RSKXx9fREeHo5q1aoJH5MV5OfnJ3yUZmdn99Zljx49Ep5krKyshPrExMREPHjwAE2aNIFCoYCVlRX09PQQHx+P6OhoxMfHo02bNkK9cGRkJMRicbF1tllZWfD29kZCQgLMzc3RuXNn4elIIpEgICAAAKCvrw9jY2PhSa1gfSWQ906pcuXKSElJgbe3N3R1ddG5c2cYGRkhIyMDwcHBAAAjIyPo6ekJX8laW1ujatWqAIBBgwahb9++mDJlipD//Ga7+ekDeXXfBes+8z/28/X1hYODA6pVq4aMjAzcu3cP7dq1w8uXL4Vm1mZmZhrPR1pamsr7GCCvivLFixdo27YtJBIJXr58CQsLC+EpXEdHR+gGPyQkBK6urjh06JBaye3NmzcqT+7GxsZo0KCBMB0YGIj4+Hh07twZERERwrLVq1fj/v37cHV1RUxMDLp06YJKlSqpnE8A+OKLLyAWi/HkyRO8fPkSbdu2VavznzJlCho2bIjFixcDyHvqKti6z8TEBBKJRKg+rV+/vtDs1NDQEI0bN0ZUVBRevXqFDh06CE9xcXFxePjwIVq0aAFLS0u18yqXy+Hv749WrVoJ28THx2PLli0YN24cmjZtKqz7+PFjlaftOnXqCB+JGhoaokKFCir3jZGREXx8fGBtbS1cU4VCgQcPHkAikcDR0VFjtW9sbCwUCoVafh0cHLBu3Tr07NlTZX5CQgIsLCwgk8lUqmCrVq2KJ0+eCAO0AXlVv5s3b4aFhQWICLdv38abN2+Ed64FyWQyeHh44OnTp1iyZIkw/23bERF69eqF48ePq1TP2Nra4sCBAxo/Prx79y5OnTolfMhZsCWgjY2NynvKovj7+wsfq+rq6qqU+B48eICDBw9i9+7dKtsoFAr4+PigWbNmqFWrFpo0aYIzZ86oXHdNAgIChL/Zgvdi1apVYW1tDSDvXeTLly/h4OCg8nogv/lxmzZthB4fxGIxrKyshHRq1KiB1NRU4XgK3mu6urowNzcXmjtbWFhAR0cHv//+O+rVq4ekpCRkZGTAw8MDf/75J4yNjeHu7g5fX1+sWbPmrecRQMlLMuzj2rRpEw0ePLjEHxiWJU+ePFFpWfcxuLq6anw6fB9ubm7UtWvXj/rx7PuKjY395B/ovU1oaCiZmpqqlDLzHTp0iDp37qw238jIiB49eqQyLzk5mZYtW6axRFuYXC6n3bt3C60ZS2rHjh1qLQUVCgVZWVkVWZIhymstWHi7j8Xd3b1EHyOWtCRT1rRv316t5euhQ4coOzubEhIS6IcfflD7qLs43AtzKSEiHD9+HCEhIZg0aVKRY5yURdnZ2Sp15h9KoVBg3LhxCAgIgIeHx3t3o1/Q2bNn8fjxY4wdO1Z4GiwNH/tcfahLly7hzp07GDFihMoTtlKpxM6dO5GTk4PJkyervWR3c3MDEcHAwECl0UVKSgr8/f2F762KolQqIZPJ3qmRTVBQEMRiMRo1aiTMu3HjBqKiopCZmYkBAwYU+22Sl5cXHB0d37nxwduU9JoGBASgYcOG79ywqLQtXLgQZ86cQadOnWBsbAwjIyMMHToUzZo1w6VLl9CrVy+1BjnF4SDDSl1ERITwYrpChQr46quvSjlHjH3eYmNjERUVBUtLy/f+PCQfBxnGGGNaw+PJMMYY0xoOMowxxrSGgwxjjDGt4SDDGGNMazjIsLf62H0jMcY+HxxkGGOMaQ0HGcYYY1rDQYYxxpjWcJBhjDGmNRxkGGOMaQ0HGcYYY1rDQYYxxpjWcJBhjDGmNRxkGGOMaQ0HGcYYY1rDQYYxxpjWcJBhjDGmNRxkGGOMaQ0HGcYYY1rDQYYxxpjWcJBhjDGmNRxkGGOMaQ0HGcYYY1rDQYYxxpjWcJBhjDGmNRxkGGOMaQ0HGcYYY1rDQYYxxpjWcJBhjDGmNRxkGGOMaQ0HGcYYY1rDQYYxxpjWcJBhjDGmNbqlnQH235Oeno4bN24gJCQEUqkU+vr6qFy5MqytreHg4AAjI6PSziJjrIwQERGVdiZY2SYSiZCeno6MjAwsWbIE58+fR5s2bdC0aVPo6+tDJpMhIyMDQUFB8Pf3R506ddCzZ0+MHDkSjo6OpZ19xlgp4pIMK9K+ffuQkpICPT09mJiYoEqVKhg0aBAiIiJQrVo1jdsoFAoEBATg3LlzGD9+PORyOSZNmoRZs2bB0NDwEx8BY6y0cUmGFcnFxQW///478m8RkUgEIsKmTZuwYMGCEqXh5+eH3377DR4eHpgzZw6+/fZbDjaMfUb4xT8r0oQJE1QCgp6eHrp06YK5c+eWOA0HBwccO3YMPj4+eP78OWxtbXHhwgVtZJcxVgZxSYYVSalUokaNGkhJSQEAWFtb49GjRzAwMHjvNG/cuIGJEyeibdu22Lp1K0xMTD5WdhljZRCXZFiRdHR0MHr0aABAxYoVce3atQ8KMADQqVMn+Pv7w8TEBI6OjggNDf0YWWWMlVEcZFixXFxcAAD79+9HnTp1PkqalStXxtatW7F06VJ07NgRt27d+ijpMsbKHq4uKwdEIlFpZ+GD3b9/H61bty7tbDDGPjIOMuWASCQCXbqutfTjU1NgWs1Ya+mL+nZG7dq1cefOnY9WWmKMlQ1cXcbeSpsBJt+sWbMwYcIE8DMPY+ULBxlWJixcuBAZGRk4fvx4aWeFMfYRcZBhZYJYLMbatWuxevVqLs0wVo5wkGFlRrdu3SASiXD//v3Szgpj7CPhIMPKlL59++LKlSulnQ3G2EfCQeYz8PtVD2w+cwJfr/oRrxLiPzi99OwsuB4/UqJ1E1JTsPFUyd+z2NnZ4fnz5++bNcZYGcNBppx7FBYC9wd3sWDwcPRv0x5KpfKD0guNjcHSIwew4tiht6777NVLzNm7HdsunC5x+iYmJkI3Noyx/z4OMuWc56MHqKKvDwCY0rs/6puZf1B61ha1MaFHnxKt27xufYzs3P2d0k9PT+dBzxgrRzjIlGMnb3jD/cEdPA4PxfqT/0NwTBQA4PbzAOz+5zyWHz2I3696gIhARLj1/Bl+dNuPR2EhGLr2J4TERr/T/mbt+hUPQ4M/KM/R0dGoXbv2B6XBGCs7eNCycmxopy64HxKEpPQ0LBo6CgDwr9897Pr7LC78tA5yhQLdl8zD4/BQLB85Du7372LHxTOwtaqL5nXrv9O+iAjp2dmQyeUflOfIyEg0btz4g9JgjJUdXJL5zPz0+yF83bYjAEBXLMaioaPw27mTUJISTvYO0NPVxdhuPfHT6PFoZFHyLl5EIhGOfb8UbZs0/aD83bx5E23atPmgNBhjZQcHmc9McHQUDCtXFqZbN7KBQqlE+OtYiHXE0BWLSy1vycnJCA8Ph4ODQ6nlgTH2cXGQ+czUMzXD88hXKvN0RDqoW8uslHL0/7y9vdGhQwfo6emVdlYYYx8JB5lyTiKTQpqbK0wv/GYU3LzckZGTDQC4/tQf43v0Rg2jqlAoFcgtwTuVXEXeOkpSbQ49Z+823A8OUpknVyigLGE3MRcvXkS/fv1KtC5j7L+Bg0w59jzqFeQKBSpVqIi7LwIBACO7dMdql8lYeHAPDnlcQkR8HHbPno/UrEzcCQqEk70Dztz0KTLYvEqIx/Wn/hjaqQtO+V5HalYmgLwX/6+Tk5ElkQjrvoiOhP/LUHRsaodL9+8gWyrRmCaQN9Szu7s7BxnGyhkeT6Yc0PZ4Mtom6tsZt27dwowZM/D48ePSzg5j7CPikgwrE9zd3dG3b9/SzgZj7CPjIMPKhH///Re9evUq7Wwwxj4yDjKsTAgJCUH79u1LOxuMsY+MgwwrE7jpMmPlEwcZVia0bt26tLPAGNMCDjKsTOCv/BkrnzjIsDLB3t6+tLPAGNMC/k6mHBCJRKWdhQ/GtyFj5ROXZMqB/PFgSvIvPT0dhoaG77TNu/4zMTFBUlJSidb18vJC586dS/sUMsa0hIPMZyY9PR0GBgZa3YeZmRliY2NLtG5AQACaNWum1fwwxkoPB5nPTGxsrNZHnrS1tUVgYGCJ1uUgw1j5xkHmMxMVFaX1INO6dWvcvHmzROs+e/aMgwxj5RgHmc/MkydPYGdnp9V99O3bF//880+JXuY/f/6cgwxj5RgHmc/Mw4cP0bJlS63uo0WLFjA0NISnp2ex68XExKBChQqoUaOGVvPDGCs9HGQ+I3K5HDdu3PgkrbnmzZsHV1fXYkszz549Q/PmzbWeF8ZY6eEg8xnx8fGBtbU1atasqfV9jRkzBlKpFG5ubkWuwy/9GSv/OMh8Ro4dO4bRo0d/kn3p6Ojg0KFDWLx4cZEDkfn7+2v9/RBjrHRxkPlMxMfH48KFC58syABA8+bNsWvXLvTr1w/Pnj1TW3737l04Ojp+svwwxj493dLOAPs0Nm/ejFGjRn2SqrKChgwZArlcDicnJxw+fBh9+vQBAKSlpSEmJga2trafND+MsU+Lg8xnIDg4GG5ubnjy5Emp7H/48OGwtLTEiBEj0LNnT6xbtw6PHz+Gg4MDdHX5FmSsPOPqsnJOLpdj/PjxWLFiBczMzEotH+3bt0dAQACqVauG5s2bY9u2bTyGDGOfAe6FuZybM2cOwsLCcPHixTLTW3NgYCC6desGqVSKWbNmYcaMGVrvhYAxVjq4JFOOrV69Gt7e3vjjjz/KTIABgKZNmwIAzp8/j8zMTLRs2RL9+/fHoUOHkJSUVMq5Y4x9TFySKYfkcjkWL16My5cvw8PDA+bm5qWdJRURERFo37690FNzZmYm/vnnH5w+fRoeHh748ssv0bt3b/To0QN2dnZlKkAyxt4NB5ly5tWrVxg1ahSMjIzw+++/o3r16qWdJTUnTpzA8ePHce7cObVlOTk58PDwgIeHBzw9PZGRkQEnJyd069YNXbp0Qf369Ushx4yx98VBppyQy+Vwc3PD0qVLsWjRIsybN6/MlgCmT5+OJk2aYO7cuW9d9+XLl7hy5QquXbsGb29v6OnpoWvXrsI/S0vLT5Bjxtj74iDzH6dUKnH8+HGsXLkSVlZW2LRpE7744ovSzlaxGjdujFOnTqFFixbvvO2LFy+EgOPt7Q0DAwM4OTnB2dkZ3bp1Q6VKlbSQY8bY++Ig8x8VHh6OY8eO4dixYzA3N4erqyu6dOlS2tl6q5iYGLRq1QqvX7/+KCWtwMBA/Pvvv/j777/h5+eHLl26YMSIERg0aBD09fU/Qo4ZYx+Cg8x/hFwux/3793Ht2jW4u7sjJCQEI0aMgIuLC1q1alXa2SuxI0eOwN3dHX/++edHTzslJQXu7u44evQo/Pz8MGLECEyZMuW9SkyMsY+Dg0wZJJFIEBgYiGfPnuHZs2fw9/fHnTt3YG1tja5du8LJyQndu3eHnp5eaWf1nY0bNw4dOnTA1KlTtbqfqKgoHD58GPv27UP79u3h6uoKGxsbre6TMaauXAWZ3NxcpKamCv/S0tKEZZmZmcjNzS1yWk9PDwYGBirpGRsbq0xXrlwZFStWFKZFIhGqVaumMS9yuRwZGRkap7OyspCSkoLU1FSkpKQgOTkZkZGRiImJQUxMDJKTk9GkSRM0b94cdnZ2sLOzTkPFRQAAIABJREFUQ7t27WBiYvIeZ6VssbS0xLVr12Btbf1J9pednY0dO3Zg8+bNGDBgADZu3FjkNWOMfXz/qSAjl8vx4sULPHv2DM+fP0dkZCSio6MRHR2NyMhISKVSVKtWTeVfPgMDA5Un/8LTubm5yMzMVNlfSkqKynR2djakUqkwTURITU3VmFddXV0YGhpqnK5cuTKMjY1RrVo1GBsbw9jYGFZWVqhduzbq1KkDMzOzMtsy7EO8ePECPXv2xKtXrz75vtPS0rB8+XKcO3cO//vf/9CxY8dPngfGPkdlOsgkJyfD29sb165dw40bNxAcHAxLS0u0aNECtra2qFu3LmrXrg1LS0tYWlrCyMiotLPMirF9+3b4+/vjwIEDpZaHf//9F+PGjcPWrVsxYsSIUssHY5+LMtcF7uvXr3H8+HEcP34cwcHB6NChA7p16wYXFxfY2dlxi6H/sPPnz+Pbb78t1Tz07t0bV69eRY8ePaCvr4+BAweWan4YK+/KTEnm0qVL2LFjB+7evYuBAwdizJgx6NSpE3cFX06kpaXBysoKsbGxqFKlSmlnBw8fPkTv3r3h4+ODJk2alHZ2GCu3Sv0X/Nq1a1i+fDnS0tKwZMkSnD59mj+oK4cuXbqEzp07l4kAAwCtWrXCmjVr4OLigrt375bLd2CMlQWl1gtzUlISBg8ejOnTp2PmzJnw9/fHqFGjOMCUUxcuXICzs3NpZ0PF5MmTIRaL8b///a+0s8JYuVUqQcbb2xv29vawtLTE06dPMWrUKOjo8KgD5VVubi48PDzQv3//0s6KCpFIhJ9//hm//vpraWdFoytXriA7O7u0s8HYB/nk1WXbt2/H+vXrcfjwYfTo0eNT756VguvXr6Nx48ZlbsiBmJgYiEQi6OnpYerUqYiIiMCZM2fUvpcqLUOGDIFEIsHUqVMRFxeHlJQUiMVi1K9fH82bN0fnzp1hZ2dX2tlkrFif9MX/5s2bsW/fPnh6esLKyupT7ZaVslmzZqFOnTpYsmRJaWdFxZ49e/Dtt99CT08POTk5MDExKTODpiUkJMDMzAz5f55isRhisRgWFhawtLREpUqVEBwcDJFIhNGjR2P69Ok8uigrkz5ZHdXJkyexbds2XL16lQPMZ0Qul+P06dNl8puUSZMmoUaNGsjJyQGAMtV79cWLF1Hw+U+hUGDJkiU4c+YMBg4cCIVCgfT0dNjb2yM0NBQtW7bE+PHjERUVVYq5ZkzdJwkyISEhmD17Ni5cuMBPW58ZDw8PNGzYsEwONqanp4dffvkFBgYG0NXVLVO9APz+++/C/3V0dLBhwwb8/PPPsLe3x/z58+Hl5YWnT5+ibdu2Qr92GRkZaNWqFVxdXSGXy0sx94z9P61XlxEROnfujGHDhmH27Nna3BUrg8aOHQtHR8cye+0VCgUaNGiAuLg4nD59usy0gKtcuTJycnJgZmaGW7duFRukFQoFLl68iO3btyMwMBBVq1aFoaEhTpw4gQYNGnzCXDOmTuslmb/++gvZ2dmYOXOmtnfFyhiJRIJLly5h6NChpZ2VIonFYmzZsgW5ubmwt7cv7ewAyHsfI5FIMG7cOMTGxr61FPh/7J13fE33G8ff2TIkyCADEVtCjKi9laJGxChBrapNq0ZLq1R/qkVrU9VGqK120aJGCGJGCImZSGSSyJZxfn+cJk1IIuOee26S83697iu5957zfT73Jvd87nc9j46ODv369ePkyZMcP34cFxcX/P39cXZ25q+//lKTagWF3JG0JyMIAo0aNWL58uXKSrIyyM6dO/Hw8ODo0aOSxVA2Ub4dd3d3/ve//ylzoQqyIGlP5sSJE+jr6ysGU0bZvn27Wib8BaH4t7Aw1bSjaTeAs2fP4uLiwogRI/D395f876GgkB1JTWbLli2MGjVKyhAKGkp4eDhnz56lf//+ckspEJUry61AOgwNDfn9999p1qwZXbt2pXfv3vj4+MgtS6GMIJnJpKenc/jwYQYMGCBVCAUNxtPTk/79++eoqaMgD2PGjGHfvn1MmzaNgIAAOnfujKurK7169cLb21tueQqlHMlMxsfHh2rVqlGlShWpQihoML/99hujR4+WW4YCYuaA/fv3IwgCxsbGfPLJJzx48IC+ffsyZMgQevbsqfRsFCRDMpO5ePEi7dq1k6p5BQ3m/PnzZGRk0KpVK7mlKAA1a9bEwMCAgICArMcMDAwYN24cgYGBfPDBB3zwwQe8++67XLlyRUalCqURyUzG19eXRo0aSdW8ggazadMmxo4dq6z80iDat2/PuXPn3nhcT08va0HAwIEDcXV1pXfv3ly/fl0GlQqlEckSZD548IARI0ZI1byChhIXF8f+/ftZvHix3FIACA2FdesgJga0tcHMDCZMAE3I1Xn6NOzeDXp64v0aNSAuDmbMgLwqXly5Aps2QdWq8MUXcOYM/PortG0LH32UdyxnZ2f8/PzyfF5fX59x48YxfPhw1q9fT8+ePenatSuLFi2ievXqRX+RCmUeyXoyT58+xc7OTqrmFTQUT09PunTpQmUNWK518SK0bCneVq2CFSvE31u1AjnnuwUBxo8XzeTTT+Gnn2DZMqhYERYuFI0mL1xcxOdDQ8X7HTrAkycQFZV/zAYNGnD79u23ajM0NMyas3FycsLFxYVp06YRExNTiFeooPAfkpnM8+fPsbCwkKp5BQ1l/fr1GpFCJjER3NzEXkuvXv893rMnTJwoPpeQII+2lSvB0xP274eaNcXHdHRgxAiYPl3Unh9mZvnfzw1HR0fu3LlTYI1GRkbMnj07a19N3bp1WbJkCcnJyQVuQ0EBJDSZpKQkpcplGePkyZMIgkD79u3llsK+feK3/ewGk0mPHvDsmXiMj4/Yq7hzB2Jj4ccfxQt9JpGRoilMngyZOSsTE2HbNtiyRRyKGz8edu2Cjz8Wh7LS0uDFC/j6a3FILDuCAN9/D926iUNer/Ppp1Chgvj7lSuwdKnY/tWrxXs/7OzsSEhI4Pnz54U6z8LCghUrVvDPP//g5eWFo6Mje/bsKZ4YhTKFZCbz6tUr9PX1pWpeQQNZs2YNU6ZM0YgJf19f8WduF/LMx3x9oXlzOHgQgoPFHkGDBuDhIT6fmCgOaU2cCN9+K5rP779DRIRoPD//DJaWYGEBffrA8eOQkQG6uuLQV1gYvO63T5+K5lerVu66q1QRTebyZfjrL/jsM7HX1bEjBAUV/f3Q0tKifv36Rd7x36BBAw4dOsQvv/zCwoUL6d69e47VagoKeSGZyQiCoBEXGwX1EBwczOnTpxk6dKjcUgBITxd/6uaytEVHJ/efkHPC3dNTnOtYtgzWr4d69cSLv709NG0KDRvCgAGwaBGUKyf2QlasEHsr4eFQvbq42CA7KSniTyOj/PV/+63Yi1qyRIxpZSX2bIqDvb09QcVxKqBTp05cu3aNnj170rp1a6ZNm0Z8fHzxhCmUatRWtEyhdLN+/Xo+/PBDjdnhX6eO+DO3Gl6Zj9Wtm38bt29D69Ywe7Z48/ISTQRE83rdwMaMEXsvx46Jw2e5+W3VqqLB3L+ff+w7d8DdXYw7dy48eADFzdBjY2NDSEhI8RoBdHV1mTZtGrdu3eLFixfUr18fT0/PYrerUDpRTEah2KSkpPDrr78yfvx4uaVk4eYGpqZvzokAnD0L5ubiMZnklovcykocsspOfnMjxsYwaZLY8wkNFXsyr2NgAEOGiEaU1/RIero4DFeY2AXBxsaG0MxlaSrA2toaT09PNm/ezOLFixkwYACRkZEqa1+hdKCYjEKx2blzJ87OztR9W9dAjZibixP1S5ZA9n2FN2/C4sXifEpmp8vSEs6dE5cGnzkjrjoLChJ7EpcuicNgfn6wc+d/Q1ZpafDq1ZtxJ08Wl0c7OeWt7YcfwM4OBg4Uh8QyiYoSlzBHRsKoUaLOX38VezULF0Lm6HNq6n/DgZn3MzLe/p7Y2tqqpCfzOp07d8bX1xcnJyecnZ2VhQEKOZBsM6ZC2WHNmjXMmzdPbhlv0Lu3OME+e7ZoCDo64pLhP/8ER8f/jvvpJ5g3T9xvMnWqeJEPDoY2beDIEfFiP3YsfPihuCQ6c7uJIIiLB7IntrC0hPffz39oq2JFuHBBXMnm6ioajrk5VKsG06aJCxDGjhVXu61bJw69ffmlOA/k5yfO8+jqwr174iZTKyvx2KAgsY28kMpkQMwc8PXXX9OjRw9GjhzJrl27WLt2rbKNQQEEiZCwaQUN4urVq0L16tWFtLQ0WeKL/2f539LSEMaORQCEmTMRMjLefk5Rb7GxCF98IV37hb1l/xzev39fqFGjRjHe7YKRmJgofPrpp4Ktra1w5MgRyeMpaDaSVcbU0tJCoqYVNIiRI0fSoEEDZs2aJUt88f+sYMdu3w6rV4O+vpiCpX17sRehCo4dE5cwh4XBd9/lPh8jB1paZH0O4+LisLa2VttqMC8vL9zd3Rk6dCjffPMNurkt9VMo9Sgmo1BkoqKiqFOnDgEBAbINixTGZDJJTBTNIDX17SvMCsrhw+I8z8cf574BVC6ymwyIOcri4+PVtoctOjqa4cOHk5CQwPbt27GxsVFLXAXNQZn4VygyGzduxNXVtcSNuxsZgYOD6gwGxHmYgwc1y2Byw8zMjNjYWLXFMzc358iRI/Tv3x8XFxf+en3JnEKpRzEZhSKRnp7Ozz//zIQJE+SWolAIKlasyIsXL9QaU0tLi2nTpvH7778zatQoli1bptb4CvKimIxCkTh48CA2Nja4uLjILUWhEMhhMpl06tQJHx8ftm3bxkcffURaWposOhTUi2IyCkVizZo1TJo0SW4ZCoVETpMBcUPomTNnePbsGb169eLly5eyaVFQD4rJKBQaf39/bt26hVv2LfMKJYIKFSrIXhvGxMSEAwcOUKtWLdq2bUtwbrl/FEoNiskoFJo1a9Ywfvx4DAwM5JYCiCuolFvut9cxMzPTiN6Djo4Oa9asYejQoXTo0IHHjx/LLUlBIhSTUSgUcXFxbN++nY/yq/WrRoRC7Ex89uwZlStXlnT3o6WlJREREZK17+TkxK1btwp1TnaMjIxIfFtVNDUyZ84cPv/8czp27MiDBw/klqMgAYrJKBQKDw8PunbtWiJLawcEBFAzsxSlRJiamkraU6hfvz5Xi5Ep08jIiAS5SoLmwUcffcTcuXPp0qWLYjSlEMVkFArFhg0bSuyE/+XLl2natKmkMSwsLIiIiJCsfXd3dzwyq6oVAU3ryWTy0UcfMW/ePMVoSiGKySgUmL///huAdu3ayaykaGzfvh1XV1dJYzg5OeGbWZZTAnr27MnDhw85depUkc43NjbWSJMBGDt2LF988QXvvvsuz549k1uOgopQTEahwKxdu1ZjyisXlj///JPk5GQ6duwoaRxnZ2du3rwpWft6enps2rSJUaNG8TyvgjT5oKk9mUzGjRvHmDFjeP/995WKm6UExWQUCkRoaChnz55l2LBhckspNFFRUUycOJHly5ej/Xo9ZBXTrFkzvL29JY3RtWtXPvzwQzp16lTob/yaOCfzOnPnzqVly5YMGjRI2bBZClBMRqFAeHh4MHDgQIyNjeWWUihevHhBz549GTZsGN27d5c8XsuWLYmIiOD+2+orF5OFCxcyZMgQ2rZti5eXV4HPMzY21niTAVi5ciV6enpK2qJSgGIyCm9FEAR+++03xowZI7eUQnHp0iWaN29Op06dWLRokVpiamtr069fP/bu3St5rDlz5rB8+XKGDBnC+PHjCQsLe+s5+vr6pKamSq6tuOjo6PD7779z9epVli5dKrcchWKgmIzCWzlz5gyGhoY0b95cbikFIiUlhW+++Ya+ffuydOlSlixZotb4I0aMYMOGDbzKrT6ziunbty9+fn4YGhri6OjIuHHjuHPnTp7H6+rqlpghKBMTEw4ePMjy5cs5c+aM3HIUiohiMgpvZdOmTYwdO1ZuGQXi8OHDNGzYkCtXrnDlyhX69eundg0tWrSgbt26/Pbbb2qJZ2Zmxo8//si9e/ews7Oje/fuODs7s2jRIvz8/HJsyNTV1S0RPZlM7Ozs2Lp1K0OHDlVWnJVQlKJlCvkSGxuLvb09gYGBGl03JjAwkE8//ZSAgAB+/PFHevbsKaueK1eu4Orqiq+vLxUrVlRr7IyMDC5cuMDu3bs5cuQIcXFxdOzYkXbt2qGlpcX27dsLNY+jCcyfP59z587x999/o6OjI7cchUKgmIxCvmzcuJG///6bXbt2yS0lV+Lj41m4cCEeHh7MmTOHKVOmoKenJ7csAD799FOePHmilvmZ/AgODub06dN4eXnh5eXFvXv3qF69OvXr16dmzZo4ODjg4OBAlSpVsLKywtzcHBMTE1k1v05GRgY9evSgRYsWLFy4UG45CoVAMRmFfOnUqRPTp0+nb9++ckt5g8uXLzNs2DBat27NkiVLqFy5styScpCSkkLLli0ZNWoUU6dOlVsOIL5nU6ZMYevWrdy9e5eHDx/y4MEDHj16RHh4OBEREURFRZGeno65uTkWFhZYWFhgaWmJqakp5cqVw9DQEB0dHUxNTQFxuE5bWxtDQ0PKlStXIB2JiYmkpKQAkJaWRlxcXNZzMTExWdeOhISErLmtuLg49u/fT4sWLbC0tMxRsiApKYnk5OSs+6+3CeJKQ11dXcqXL5+vtszXYWpqip6eHmZmZhgYGGBkZISJiQnGxsZZ74uVlRVVqlShWrVqWe+HQk505RagoLmEhoZy69Yt3nvvPbml5CAjI4PvvvuOlStXsnbtWvr37y+3pFwxMDDg4MGDdOjQAUNDQ41IKpo58V+7dm1q166d53HJyclERUURHR1NZGQkkZGRxMXFZV3M09PTsy7yjx8/JiMj440LfX5kN6TXL/wVKlTI2vBra2uble1bT08Pe3t7Nm3axNKlS6lSpUrWcZnml/11vm4mFStWzNV8XifTAGNjY0lNTeXly5ckJyeTlJREXFwcCQkJ3L9/n4sXLxIREUFYWBhPnjxBT0+PatWqUadOHRo0aICjoyMNGzakbt26JXIDs6pQTEYhT3bs2EHfvn01JqU/iBe/YcOGERUVxdWrV7G1tZVbUr5UrVqV48eP06lTJ5KSkmTv0RR0dVm5cuWws7PTyESooaGhXLlyhRUrVhTpfEtLSxUrEomOjubJkycEBATg5+fHjh07mDVrFvHx8bRp04aOHTvSt29fatSoIUl8TUUZLlPIk+bNm7N48WK6du0qtxRANJhevXpRpUoVfvvtN/T19eWWVGAeP36Mq6srjRo1Yt26dRgZGcmi486dOwwcOJDbt2/LEl8VxMbG0qhRIzw9PenQoYPcct5KaGgoXl5enDp1iv3792NnZ8fQoUMZO3ZsmRhiU5YwK+TKgwcPCAoKkjzXV0FJTU1l0KBBVKlShS1btpQogwGwt7fn/PnzaGlp0bBhQ44fPy6LjpK0TyYvzMzMWLt2LaNGjSoR+c1sbGwYNGgQ69evJyQkhOXLl3P9+nUcHBz47LPPJM3arQkoJqOQKzt27GDw4MHo6so/oioIAmPGjEEQBDw8PCTPPyYVRkZGeHh4sHbtWiZOnIibm5ukGZtzQ09Pr0Ttk8mLXr160aZNmxK30kxHR4f27duzZcsWrl+/TmpqKg0aNGDevHmyl8WWipL5aVWQnH379uHm5ia3DEBcCvzo0SN27dqV6/LkzAnoe/fuFWjDXnR0tMo1Fobu3bvj5+dH27Ztee+993Bzc+PMmTNqGV4uDT2ZTJYtW4aHhwf37t2TW0qRqFq1KitWrOD69etERkbi4ODAnDlzNKI8tipRTEbhDUJCQnj8+DFt2rSRWwozZ87kzJkzHDp0KMfqoUzWrFmTZSxz585lw4YNb20zPDycjRs3qlxrYTA0NOSTTz7hwYMHdO7cmcmTJ9OgQQOWLl0qab370mQyVlZWWXujSjJVq1Zlw4YNXLt2jRcvXlCnTh2WLFlS4JV6Go8gERI2rSAxa9asEYYPHy6rhoyMDGHq1KlC8+bNhefPn+d6zNdffy2cP38+635qaqqQkZFRoPYPHTokrF69WiVaVcX58+eFcePGCVZWVkKzZs2EhQsXChcvXhTS0tJUFiMiIkKwtLRUWXtyk5qaKjg5OQkHDx6UW4rK8PPzEwYOHChUq1ZN2LBhg5Camiq3pGKhmIzCG7z33nvC7t27ZYufmJgoDB48WGjbtq0QExOT6zE3btwQ2rVr98bjERERWb+/fPlSiI+PF6KiooS7d+++cWybNm2Ex48fq064ikhLSxP++ecfYcaMGYKzs7NQqVIloU+fPsI333wjHDt2TIiKiipy28+fPxcqVqyoQrXyc+LECcHBwUFISkqSW4pK8fb2Fjp37izUq1dP2Lx5s5Ceni63pCKhLGFWyEF8fDy2trY8ffr0rTujpSAqKgpXV1dsbGzw8PDIdYgMxAqKtWvXZubMmYCYu2z8+PE4ODiwceNG9uzZw/Dhw5k9ezZhYWGcPHmSESNG8OWXX2a1MXfuXNLT0/nuu+/U8tqKSnh4OOfPn8fHx4fLly9z9epVLCwsaN68Oc2aNcPJyYl69epRvXr1t276i4uLw9bWttSN+7u5ueHi4sLnn38utxSVc/z4cebNm0dGRgZLly6lU6dOcksqHFK5l4RNK0jI7t27hR49esgS29fXV7C3txdmz5791mGvOnXqCNu2bcvx2JQpU4SxY8dm3TczMxO2b98uCIIgbN68WWjYsGGO4zdv3iy4uLioSL36SE9PF/z9/QVPT09h+vTpwrvvvivY2dkJJiYmgouLizBixAjhu+++E/bt2yf4+/sLKSkpWecmJiYKhoaGMqqXhvv37wsWFhZCdHS03FIkISMjQ9i1a5dQo0YNwdXVVQgMDJRbUoGRf32qgkZx+PBhevfurfa4e/fuZeLEiaxcuZLBgwe/9fiwsLA3skK/vtxaV1c3KwNy5cqV31giamZmRkhISDGVqx9tbW3q1atHvXr1GD58eNbjsbGx3L17Fz8/P+7evZuVDDM4OBg7Ozvq1KlDrVq1SEtL49y5czg5Oak9Q7RU1KxZEzc3N77//nuN75kWBS0tLQYOHEjfvn1Zt24drVq1YujQoSxYsIAKFSrILS9fFJNRyMGJEyf46quv1BYvJSWFzz77jD///JMjR47g4uJSoPNMTEyyEiwWleTkZMzNzYvVhiZhZmZGixYtaNGiRY7HU1NTefToEffu3cuqLzN79mzu3LmDsbExjo6OODk50aBBA5o2bUqjRo00Yn9UYZk/fz5OTk5MmTJF49MNFRV9fX2mTZvGkCFD+PLLL3F0dGTt2rUamcA2E2UJs0IWd+/eRUdHBwcHB7XEe/LkCR07duTp06dcuXKlwAYD0KRJkzf2xAiCQEZGRq7HC7nMD4aGhlK3bt3CiS6B6OnpUadOHXr37s20adPQ19fnwoULxMTE4O3tzaeffoq1tTVeXl6MGDGCSpUq0bFjR7744gsOHjxIZGSk3C+hQFhbWzN69GgWL14stxTJsbKyYsOGDezdu5fZs2czaNAgnj9/LresXFFMRiGLU6dOqS1P2b59+2jZsiUffPAB+/btK/SwzfDhw/Hx8cm6//Lly6xv6rGxsTx8+JAXL17w8OFDMjIy8Pb2JjIyktDQ0KxzfHx8GD16tMpeU0lAEIQciwOqVavGe++9x8yZM/Hw8MDPz4/g4GA+//xzDAwMWLduHbVr16Z+/frMmDGDEydOqKWsdFGZM2cOO3bs4OHDh3JLUQstW7bk2rVrVK5cmSZNmvDXX3/JLekNlNVlClkMGDAAV1dX3N3dJYuRkpLCrFmzOHjwIDt27HhjaKegpKen079/f7Zs2YKpqWmWqQBUqlSJ5ORkEhMTAahRowaPHj0CoHz58tSpU4eYmBjc3Nw4ceJEmUrDHh8fj7W19VvT3WcnIyODGzduZA1pBgYG4ubmhru7e1a1TU1iwYIFPHr0CA8PD7mlqJVTp04xatQoxowZw5dffqk5fxepVhRI2LSCBKSnpwsWFhbC06dPJYvx6NEjoUWLFoKrq6vw4sWLYrf39OlTYdGiRQXegJlJWlqa8MUXX0j6WjWVuLg4wcTEpFhtBAcHC99//73QqFEjoW7dusLatWuF+Ph4FSksPrGxsYK5ublw//59uaWonbCwMKF169bC4MGDc6wqlBPFZBQEQRCEq1evCvXr15es/SNHjghWVlbCunXrVNpuaGio4O3tXahzzp07V2qXur6Nly9fCuXLl1dZe2fPnhX69+8vWFlZCcuWLROSk5NV1nZx+Pzzz4WJEyfKLUMWkpOThf79+wu9evXSiA2qynCZAkBWzqzVq1ervO2ff/6Z+fPns2vXLtq1a6fy9hUKzsuXL6latSqxsbEqbffu3bvMmTOHmzdvsnLlSlmWwWcnIiKCevXqcfv2baytrWXVIgdpaWkMHz6cxMRE/vjjD3R0dGTTokz8KwBw9uxZldeOSU9PZ+rUqaxatQpvb2/FYDQA4bWJf1VRr1499u/fj4eHB5988gljx44t1LyPqrGyssLd3Z2VK1fKpkFOdHV18fT0JDExkRkzZsiqRTEZBQAuX75Mq1atVNZeWloaQ4YM4f79+1y4cAF7e3uVta2guXTo0IEbN26gpaVFy5YtCQ4Olk3LrFmz2LhxY6mt0/I29PT02L17N0ePHmXPnj2y6VBMRoFHjx6hra2tsg1sgiAwevRo4uPj2bdvnyw50BRyR6qeTHZMTEzYuHEjH330EW3atMHPz0/SeHlRtWpV3n//fdasWSNLfE2gQoUKbN26lcmTJ+dYvq9OFJNR4NKlS7Rs2VJl7X3//fcEBATwxx9/YGBgoLJ2FYqPOkwmk+nTp7NkyRJ69uwpW/qeWbNmsXr16mJnhyjJNG/enLFjx8qWPFQxGQUuX77MO++8o5K2vLy8WLlqeZZsAAAgAElEQVRyJXv37qVcuXIqaVOh5DJkyBCmTp1K7969SUhIUHv8Bg0a0LhxY7Zv36722JrEnDlz+Pvvv7l+/braYysmo8Dly5eLvCkyOykpKYwbN47Vq1eX2txRJR119mQy+eyzz3B0dMxRZkGdTJs2jeXLl8sSW1MwMTFh1qxZfP/992qPrSxhLuOkpqZSqVIlQkJCMDU1LVZbP/zwAxcvXmTv3r0qUqegaqKjo6lbty5RUVFqjfv8+XOcnJw4fPgwTZs2VWtsQRBwdHRk3bp1dOjQQa2xNYnY2Fhq1KjB3bt3sbKyUltcpSdTxrl16xb29vbFNpiEhASWL1/O119/rRphCpIg1xe/SpUq8b///S+ryJw60dLSYsqUKaxYsULtsTUJMzMzXF1d2bp1q1rjKiZTxvHx8aF58+bFbmfHjh20bNmShg0bqkCVgpTIldNq2LBhBAYG4uvrq/bYH374IV5eXmUmcWZe9OvXjyNHjqg1pmIyZZxbt27h7Oxc7HZ+//13RowYoQJFClKSnp4u2+5vXV1dxo8fL0lWibdhZGTEqFGjyvRyZoDOnTtz5coVtW6UVUymjHP79m0cHR2L1cbz58+5du0aPXv2VJEqBanIyMhAW1u+j/2IESPYv39/nnV/pGTSpEls3rxZllVumoKxsTHOzs45ymRIjWIyZRxVmMyFCxdo0aKFRu2J2blzpywXMk1Hzp4MgJ2dHebm5ty8eVPtsatVq0abNm3YsWOH2mNrEo0bN1br+6+sLivDZCYRLGpFvWPHjrFz507CwsLQ09Nj8ODBdOnShSpVqqhYaeHR1dXF0NCQ1q1bc/v2bZKSkgBxKWfNmjXp3bs3EyZMKHN7eYKCgmjXrh1PnjxRe+yQkBDOnTvHb7/9hqGhIUZGRkyYMEGtOe2OHj3K/PnzuXz5stpiagrR0dEcOHCAf/75h+DgYOrWrUuPHj3o16+ftIGlSu8sYdMKKuLUqVNC27Zti3y+j4+PoKenJwCCvr6+oK+vL0RFRalQYdG4ffu2AGTd7OzshE2bNgmbNm0SJk+eLLRq1UowNjYWtLS0hHr16gl79+6VW7LaePTokWBvby9L7CdPngg6OjqCgYGBAAi6urpCQECAWjVkZGQItWrVEnx8fNQaVxNITk4WzMzMcnxmjx49KnlcZbisDFPcobImTZqgp6cHiMMwQ4YMwdzcXFXyioynp2eOFVQhISFUqFCB0aNHs2rVKi5cuEB8fDzXrl3Dzs6OQYMGYWVlxf79+2VUrR7kHC6rVq0avXv3Ji0tDRB7lbVr11arBi0tLcaMGcOGDRvUGlcTMDAw4OOPP876+2tpaall35BiMmWY4pqMjo4Obdq0AcR/4NmzZ6tKWrE4evRo1s52IyMjbty4Qf/+/d84rnHjxvz999+8fPmSjh074ubmRuPGjYs8fFgSkHvif8GCBVlzd6ouLVFQxo4dy969e7PKdZclpk2blvV7s2bNMDQ0lDymYjJlGFVM+ru6uqKtrY2Liwv169dXkbLice/ePUDMWxUdHU2jRo3yPd7IyIhdu3bx8OFDYmNjsbGxUfteAnUht8k0atSIRo0aoaOjQ69evWTRYGFhQffu3dW+KVETsLGxoUOHDmhrazNgwAC1xFRMpgxz584dGjRoUKw2unTpQkZGhmx5qV4nKiqKV69eMWnSJPz8/Ao1sV+9enUePXrEsGHD6NOnD7/88ouESuVB7tVlAF9//TXp6emy9WQAJkyYwPr162WLLyezZ88mIyODHj16qCWesrqsjPL06VOqVq0qtwyNx9PTk+HDh8stQ2X4+fkxZMgQbt26le9xcmUFUCVvu/7Uq1cPT09PlWUgVyea8Pcp6PVdV2IdChrKlStXAFDF94DwcKhcufjtaBpaWjBq1Chq166t0no7clKY4bK9d6UrchUTHUkFc0vJ2nerZ/PWY9zd3dm6dWuJNBkQl04WlXCgOB/ZwlicMlxWRrl69arK2iqNBpPJe++9R9euXWWtV69KNGG4DJDUYArKiBEj2LlzJ6mpqXJLUTvq/MgqJlNGuXbtmtwSSgSHDh3C1NSU3r17yy1FJcg98a9JVK9enTp16vDXX3/JLaVUo/y3lUHS0tLw9vaWW0aJQEtLi0OHDnHu3DmOHj0qt5xio5hMToYPH14mV5mpE+W/rQxy8eJFHBwc5JZRYmjWrBndunVj3LhxckspNorJ5MTNzY1jx46RkpIit5RSi/LfVgb566+/6Natm9wyShQbN24kNDQULy8vuaUUC8VkcmJubo6TkxOnT5+WW0qpRVldVgY5fvw4S5YsYfHixfkeFxoK69ZBTAxoa4OZGUyYANbWahKaD6dPw+7d8G9WG2rUgLg4mDED8trEfOUKbNoEVavCF1/AmTPw66/Qti189FH+8ezs7KhVqxZfffUVp06dUulrUSeZmRBURfzLWK6c+ounDwIA0NbRRU9fn+p16tOkfWf09PWzjl0yeTT9x02hdqMmb233kf9tzhzcQy0nZ9r2kjaBY9++fTlw4ADdu3eXNI7UhAO7gad5PD8bqJjHc37ALOAQEA14ACeB4yrQpXylKWM8e/aMwMDArHQweXHxIrRsKd5WrYIVK8TfW7UCOadzBAHGjxfN5NNP4aefYNkyqFgRFi4UjSYvXFzE50P/XZnboQM8eQIFLXc/aNAgLl68WKJLCKjaZExMzWj3fj/+3PIrAEOnz6aL2xBOH9jNzP7deZWcnHWsU4s2VLTMf11TdNgzAOzr1uehny/PI8JUpjUv+vXrx4EDB0r8vr7KQAdgCdAY+O7f23wgCtE88sIS6AzoAFaAE6CqijOKyZQxjhw5wnvvvZeV2DI3EhPBzU3stWTP/NGzJ0ycKD4nV92nlSvB0xP274eaNcXHdHRgxAiYPl3Unh9mZvnfz4/27dujpaWFn59f4URrEKo2GQAdXT3KGRujqy/mJKtUuQpu46cRfP8eD/z+q1vSa/gYLKzz3r9y66IXhzzExJVa2toYF+aPUwxq1apFhQoVsvaOlWQq/Psze2UnQ+AL8u7FgGhQn2W7b6pCTYrJlDH+/PPPt+aM2rdP/Laf22E9esCzZ+IxPj5ir+LOHYiNhR9/FC/0mURGiqYweTJkLuBJTIRt22DLFnEobvx42LULPv5YHMpKS4MXL+Drr8UhsewIAnz/PXTrJg55vc6nn0KFfz9lV67A0qVi+6raEmRtbY2BgUGJvhhJYTK5ER/zAi0tLcpXEC9tMdGR/Ln1V255i3Na92/dYPOShTx9EMiy6R9z4dghVs6aQqDvdQ55/JxD74Ff17Fk8mjOHd4nmd6ePXty7NgxydqXEx8gGTAH7gHLEIfDvgEy++TXEU3mLd/RioRiMmWIjIwMzp49S9euXfM9ztdX/JnbhTzzMV9faN4cDh6E4GCxR9CgAXh4iM8nJopDWhMnwrffiubz++8QESEaz88/g6UlWFhAnz5w/DhkZICurjj0FRYG7dvnjP30qWh+tWrlrrtKFdFkLl+Gv/6Czz4Te10dO0JQUIHfpjzR1dVFW1ub8PDw4jcmE1KazMPbvhzf4Ynn99+wZekiPlm2DrtadQBITkjg8OaNhD8NIiUpEb9LFziyZRMBN69hX98R2xq1cG7TkdqNmtB75H+r+G54naZp+868/+FHrJw9lbgYaTInd+nSpUTPtb3OPsRhsyXAFCBz4MENaAqMBI4BR4AkIBjRfNIk0KJM/JchfH19sbS0pPJbtuinp4s/dXP578jcLP76T8g54e7pKc51LFsm3q9XT7z4u7tD06biYwMGiDcQeyErVsDYsaIRVa8uLjbITuYqUyOj/F/nt9+CgwMsWSL2jKysxJ5NtWr5n/c2Xrx4gbGxMdHR+Y1uazZSmkxlu2o0cGlBJasqPLxzi2PbPajXtDnmVaypUs2eCuYWABgYGtG4bUe2/fgdnfoNRCv7H/o1bY7NW1G1Vl0EQcCgnCGhjx9St3EzlWtv3749gwYNIiEhAWNjY5W3r25aA90QeyrB2R5fBbgAzxB7N08Qh9PevhSj6CgmU4Y4d+4c7V/vHuRCHfHLJ8HBYu8kO8H//sfWrZt/G7dvQ+vWkFliJnupmdzMa8wYceL+2DG4fx+GDn3zmKpVRYO5fz//2HfuwJdfihP9AHPn5n98QfH398fCwqJEl2yW0mSMzSpQtVZdqtaqS5N2nRjZ0hHPH77hk2Vr3zhWW0cbLW2tnAYDaOWRFUtLSwtdPT3SJUoBY2RkROPGjblw4QLvvvuuJDHUSWUgcyfcPP7Lc1YDWAm0A6yBdDVoUYbLyhCBgYEFqh/j5gampm/OiQCcPQvm5uIxmeS2KMfKShyyyk5+cyPGxjBpktjzCQ0VezKvY2AAQ4aIRpRXXbH0dHEYrjCxC4q/vz/ly5fHTE0T0lKgrjkZXT09TMwqEPu8gEv3/kXO7MJdunTh5MmTssWXiiqIhvIKaA8M/Penut5pxWTKEAVN729uLk7UL1kC16//9/jNm7B4sTifUr68+JilJZw7Jy4NPnNGXHUWFCQOi126JA6D+fnBzp3ikBWIQ1ivXr0Zd/JkcXm0k1Pe2n74AezsYOBAcWFBJlFRYk8oMhJGjRJ1/vqr2KtZuPC/UZjU1P+GAzPvF3RF8vnz5wGwtbUt2AkaiBQmIwgCr5KTSU1JzrrvdeQAUc9C6Drgvy5pWmoqSQnxAGSkZ5CRkYGQ7c03MTMj8lkIyYkJxMW8IDkxgeREcTZByMggJTmJ5CQppqZFSoPJZM69JOXy3BPEobMAxH0xj4GXQCyQ2T/M3AGQhup6OcpwWRkiNDQU6wLupOzdW5xgnz1bNAQdHXHJ8J9/QvbO0E8/wbx54n6TqVPFi3xwMLRpA0eOiBf7sWPhww/FJdG3b4vnCYK4eCB70UpLS3j/fcilUnIWFSvChQviSjZXV9FwzM3F+ZZp08QFCGPHiqvd1q0TV659+aU4D+TnJ87z6OrCvXviJlMrK/HYoKD852xCQkIIDAykYsWKNG7cuEDvoSaiapNJePmSSyeO0qRdJ15ERrBz9TLiXjxHS0uLb7b8QX2XFgDcvnwBW4daxD6PIizoMbcuetHy3Z6cP3qQFl17oGdgQIc+A/ht8XyOb99Msw5dMa9sQ+qrV7yIDOfRHT9cOr5LcOBdnFu3Q0c37yX4ReWdd97h7t27xMfHY2JiovL2pSYM2InYU7mJOMFfL9vztYHPESf4P0LcP7MD0Wy8/z3vONAbuAh0Bw4D7xdTl1K0rAzRpk0bli5dSqtWrYDMv1H+56Sni8uAf/kFZs4UezdSjWi8fCm2/+230rRfWLS0/ivMtGLFCq5cucL+/ft5/vx5vvuMNJmTJ0+yePFiTpw4ke9xWlpaktaTkRq3ejZFuv60bduWRYsWyVq1syBoaWkVq55MseNT8KJlynBZGcLa2prg4OC3H5gNHR3YuFHc23L+PHTuLP7+NK/cFUXg2DH45BNxr4ym5qD09PTEwcGBtm3blliDAdDW1i7RGQukplWrVkqGchWjmEwZonHjxvj4FC1ZxJAhoskcOSKml1Hljv+0NHjwAIYNy33CX25OnjxJYmIi4eHhJX7lkZ6eXpks0lVQFJNRPYrJlCHef/999u3bV6xhTCMjcQ/K25YwF06XuKnzLYkIZGPZsmXMmDGDAwcO0K+ftMkapUZXV5e0NCm23JUOMk1GGepXHYrJlCEaN26MmZkZhw4dkltKieHGjRvcvHkTc3NzatWqVeLr8Cg9mfyxtrbGyMiIhw8fyi2l1KCYTBlj/vz5zJ07l1e5rSFWeIM5c+Ywd+5cduzYwfDhw+WWU2wMDQ1JfFsW0TJOy5YtuXTpktwySg2KyZQx+vTpQ82aNVm4cKHcUkoEgYGBDBo0iOPHj+OWfQdqCaVixYrExMTILUOjcXZ2xjczgZ9CsVFMpgyyYcMGtmzZIrcMjSZzAdbixYs5cOAAXbt2xdzcXF5RKqBixYq8eCFNksnSQqNGjRSTUSHKPpkyyvXr12mamalSIU8yMjJo27Ytc+bMoXfv3nLLUQkmJiaEh4fnmwhSzvQuqqKo15/g4GBatmxJSEiIihWpDk34+yj7ZBTypUmTJly6dAlra2tWrFhBeno6giDkeUtLS+OHH37I95ji3KKiojA3N5esfUEQMDU1JSYm5q3HPXz4ECsrKwICArh37x6PHj2iR48ecv/JVIalpSURERH5HlPY99bMzKxA721RbrGxsZiamhb6vKJStWpVUlJSiMyet0jDkPJzour3VzGZMsw777zDuXPn2LNnD+3atct3stPf35/169dLpuXly5eYmqqyHt+bmJqaEhsbm+8x8fHxuLm5MW/ePGrXrs3GjRsZPXo0urmlji6hWFpaqvwCamRkRIJE5VKTkpIwzF5HQg04OTlx69YttcYsrSgmU8apWbMmZ86cYdSoUQwdOpS2bdvy888/8+jRo6xjAgMDGTduHB9//LFkOgIDAyVfHlytWjWC8qlelpaWxuDBg2nevDlTpkzh1atXbN26lZEjR0qqS91YWVm9tSdTWIyNjSUzmcTERLWbjLOzMzdv3nz7gQpvRTEZBbS0tBg7diwBAQHMmDGD8+fP06ZNG3R1dTEzM6NDhw706dOHGTNmSKbh7t271FXlDs9ccHBw4MGDB7k+9/LlS95//3309fVZs2YNAPv376dhw4bUyqsUZwlFip6MlZWVZBVD5ejJODo6cufOHbXGLK0oJqOQhY6ODq6urmzevJnQ0FDS0tIICgoiNDSUOXPmoP16qUoVcurUKdq2bStZ+yDOQ13NpbDMtWvXaN26NbVr12bPnj1ZQ2MeHh6MHj1aUk1yIEVPpkaNGjl6v6okKSkJo7eVQ1UxNWvWzPMLiULhUExGIV/UUaArISGB06dP0717d0njtGrVigsXLmTdj4iIYMaMGfTs2ZM5c+awatUqdP6tJx0ZGYm3tzd9+/aVVJMcSLGMWWqTUXdPpnbt2gQGBqo1ZmlFMRkF2fnll1/o1q0blSpVkjTOO++8Q1BQEPv27WP8+PHUr1+fV69e4evry7Bhw3Icu2PHDvr06VMq6r2/joGBASkpKSpts1atWpJdlGNjYymfWSVPTdjZ2fH8+XOSknIr/6VQGBSTUZCV6OhofvjhB+bMmSNZjNDQULZs2cKYMWNITExkwoQJVK9enTt37rBq1SqsrKzeOGf37t188MEHkmmSEylMxsXFRbJULMHBwQWq6KpKtLW1sbe3V4bMVIBiMgqykZqaysiRI3F3d1fpxtCAgAA8PDwYM2YM9erVw9nZmYMHD9KyZUs2bdpE+fLlmT17NpUrV871/OjoaG7dukXnzp1VpkmTMDAwUHnuugYNGhAVFSXJ3pKnT59iZ2en8nbfRq1atbh//77a45Y2Ss/ifwVSU1N59uwZL168ICYmJtdsu/r6+pibm2Nubk6lSpXQ19eXQak4BPLhhx+ira3NN998U6y2Xr16xbFjxzh48CB//vknurq6tGvXjjZt2jB9+nQcHR1zLFpYtmwZ+/fvp38edZ4PHjxIt27dMDAwKJYuTUWKnoyWlhbNmzfH29ubPn36qLTt4OBgOnXqpNI2C4KUQ4BlCcVkSihBQUGcPXuW69evc+PGDe7fv094eDhWVlZUqlSJChUq5FrBMSUlhefPnxMdHc3z588xMDDAwsICW1tb7O3tqVatWtatevXqVK9eXaXzEqmpqWzfvp158+bRp08ffvzxxyJXmnzy5Ak//fQT27Zto0GDBvTv35/PP/+cmjVr5nveokWLmDp1Kn369Ml1k+WxY8fopanFbVSAFCYD0L17dw4fPqxyk5GrJ+Pg4MDt27fVHre0oZhMCeLmzZts3bqVI0eOEBUVRceOHWnWrBlz5syhTp062NraFnpnelxcHJGRkYSEhPD48WOCgoK4du0a+/fvJygoiMePH2NoaJjDfGxsbLC1tcXOzg5ra2vMzc0xMTF5YwVQWloacXFxBAUFcevWLU6fPs2RI0do1KgR27ZtK/KS5YiICObOncu+ffsYO3YsFy9epEaNGgU+v1u3btSqVYslS5Ywd+7cHM8JgsCZM2f44YcfiqStJKCjo0N6errK2+3fvz8tWrRg3bp1Wav0VIEcczIANjY2nDhxQu1xSxuKyWg4qampbN26lRUrVhAbG8vw4cPZsmULTZo0Ucm+lfLly1O+fHkcHBxo165drsdERUXx5MkTgoODCQoKIiQkhNu3bxMcHExYWBjR0dHEx8eTlpZG+fLl0dXVJT4+ntTUVMqXL4+trS2Ojo60adOGL774olg7+7ds2cLMmTMZPnw4AQEBRV6Rtn79epo1a0aPHj1yzAfdvXsXY2NjqlWrVmSNms6rV68kGSa1t7fH1tYWLy8vOnTooJI209PTCQkJkaUnY2NjQ2hoqNrjljYUk9FQBEFg8+bNLFiwgNq1a7Ns2TI6d+4sS/ZVCwsLLCwsaNasWb7HZfZcMs2mXLlyKtPw6tUrJk2axKVLlzh69ChNmjQpVnt2dnasXbsWNzc3Ll++jKWlJQBeXl55mm1p4dWrV0UeonwbI0aMYOPGjSozmcDAQKytrWVZSm5tba2YjApQTEYD8fPzY8KECaSlpbF9+3Zatmwpt6QCoaurS8WKFVXe7suXL+nTpw+VKlXiwoULmJiYqKRdNzc3/Pz86NatGydOnMDc3BxfX99iG5imk5qaKtmCj5EjR7Jw4UIiIiJyXRpeWHx9fXF2dlaBssJjbW1NREQEGRkZkma7KO0o75yGsWHDBrp06cLw4cM5f/58iTEYqUhKSqJv3744OjqyZ88elRlMJvPnz6dXr1507dqV6Oho/Pz8cHJyUmkMTUOq4TKAChUq4OrqysaNG1XS3s2bN2UzGT09PczMzDQ65X9JQOnJaAgpKSl8/PHHXL9+HS8vL2rXri23JNlJT09n8ODB2NnZsWrVKsm+TS5atIi0tDTeffddnjx5gqOjoyRxNIXU1FTJhssA5syZQ9u2bZk6dWqxd+r7+voyZswYFSkrPNbW1jx79izPPVUKb0fpyWgAsbGx9OjRg8TERLy9vRWD+Zd58+aRnJzMr7/+KvlwxXfffUefPn148eJFqd+AFxcXp/IeYXZq165N586dWbduXbHb8vX1pVGjRipQVTSqVKlCWFiYbPFLA4rJyMyzZ8/o1KkTjo6O7NixI9dss6pMZhgdHa2ytqTkwIEDbN++nW3btkn6rTs7bm5uVK9enQEDBrB69Wq1xJQDdRSImz9/PsuWLSMqKqrIbYSGhpKYmFio5emqpkKFCm8tdKeQP4rJyMiDBw9o3749ffr0yXM4aM2aNTx79kxlMcPDw1U2Xi4VAQEBjBs3jj179mBhYaG2uEFBQdSvX58LFy6wefNmevTowdOnT9UWX128fPlS8uza9erVY+jQocybN6/IbWTWNZKznr2pqSkvX76ULX5pQDEZmfD396d9+/bMmzePr7/+OtdjFixYQJMmTWjQoEGxYl28eDGrjkqDBg2wtrbOKsylacTHx+Pq6srixYtxcXFRa+zg4GCqVauGg4MD3t7etGnThmbNmuHh4aFWHVITGxsreU8GxP/fQ4cOceXKlSKdn2kycmJmZqb0ZIqJYjIycP/+fbp168aSJUv48MMPcz3m5s2bnDx5ktatW+d4PDExkdu3b+codfv06VMePnxIcnIyCQkJPHz4MKvM8MOHDxk0aBAPHjzIWiXz/vvvs337dp48eSLRKywagiAwevRoOnToIEuxsOw7y3V1dZk3bx4nTpxg9erVdO7cudRUSoyNjVVLnSBTU1O+/vprpk+fjiAIhT7fy8tL8kJ2b6N8+fLExcXJqqGko5iMmgkKCqJbt258+eWXb9Qwyc6aNWvo3bt3jsfWrVvH4sWLefr0Kb17985KfZKQkEDdunW5fv06IO5mz/xwBgYGEh4ezrVr13JcJDt06KCSiVlVsmTJEoKDg/nxxx9liZ9b+pKGDRty6dIl3Nzc6NSpEzNnzizxF52YmBgqVKiglliZ5RV27NhRqPMSEhK4d++eSrNzFwUzMzNluKy4CBIhYdMllujoaKFmzZrCunXr3npsnTp1hG3btmXd9/HxEWrWrCmkp6cLgiAIISEhgq6urnDq1ClBEATB1NRUuHDhgiAIgnDo0CGhatWqWecaGRkJ3t7eOdrfvHmz4OLiUuzXpCpOnDgh2NjYCMHBwbJp6NChg/DPP//k+Xx4eLgwcuRIwdbWVtiyZYuQkZGhPnEqpGbNmkJAQIDa4p0/f16wtbUVYmJiCnzO8ePHhfbt20uoqmBs2rRJGDVqlNwySjRKT0ZNpKen4+7uzoABAxg/fvxbjw8LC8sx6X3kyBFq1qyZtTjAxsaGFi1acPTo0QLFf33y1MzMjJCQkEK8AukIDg5m2LBhbNu2TZYcVZmEhoZia2ub5/NWVlb89ttvHDhwgLVr19KiRQsuXryoRoWqITIyUiW78QtK69at6dWr1xvJSPPjzJkzKktNUxyUnkzxUUxGTXz22Wekp6fz7bffFuh4ExOTHOnY09PT3/hnt7GxKXA23ddNJjk5GXNz8wKdKyUZGRmMHDmSqVOnyn5RiYqKKtBqtmbNmnH+/HkmT55M//79GTFiBBEREWpQWHxSUlJISUlRy8R/dr7//nv279+Pt7d3gY7XFJPR19dXeYG3soZiMmrgjz/+4MiRI+zcubPAKdCbNGmSY+lyly5duHbtWo4UF8HBwbz77ruAmAIjPj4eEBcHpKWlZR2nq6v7RgGz0NBQ6tatW+TXpCpWrlxJcnIys2bNklVHeno68fHxBZ4Q19LSYsSIEfj7+2NhYUHDhg1ZtWpVjvddE4mIiMDCwkLty4LNzMxYsmQJ48ePz7WYXnYSExO5efOmRqRU0tLSKtKiBYX/UExGYl6+fMn06eVjkGAAACAASURBVNP59ddfC5U8cvjw4fj4+GTd79ChA5988gnjx48nKiqKw4cP06xZM9577z0AOnfuzMyZM5k1axY3b94kOjqaw4cPA+Dk5MSyZcv4/fffs9rz8fGRZQVXdvz9/fn222/x8PBQaf2RohATE4OpqWmhMwuYmZmxfPlyTp8+nVXi2dfXVyKVxUfdQ2XZcXd3x8rKirVr1+Z73MWLF2nUqJEsmZdfRzEZFSDVZI+ETZcoJk6cKIwfP77Q56WlpQl9+vQRYmNjczzu6+srbNmyRbhy5UqOx1+9eiUcP35cePDggRATEyNERUVlPRceHi78888/QmpqqiAIgvDixQuhc+fOsk5cp6amCs2bNxc2btwom4bs3Lt3T6hTp06x29m1a5dQuXJlYfbs2UJycrIKlKmWo0ePCt26dZMtvr+/v2BpaSlERkbmeczChQuFWbNmqVFV3hw5ckTo2bOn3DJKNEpPRkKuX7/OgQMHWLx4caHP1dHRYe3ataxatSrHN6mGDRsybNiwN2q76Onp0a1bNxwcHDAzM8sx32JlZUXHjh3R1dUlPT2dH374AU9PT1l3Ui9YsIBKlSrJmvwwO8+fPy9yAbTsDBw4MGu5eJs2bXj06JEK1KkOOXsy8F8mgK+++irPYy5dukSLFi3UqCpvtLW1ycjIkFtGiUYxGQn57rvvmDVrVpH3JNja2jJ69GguXbqkMk3e3t7MmDEj31VUUnP16lU2bdqEh4eHrEaXnejoaJWYDIgLMg4ePMi4ceN455132Ldvn0raVQURERFZBdrkYv78+ezZs4fAwMA3nhMEQaNMRhkuKz6KyUjEo0eP+Oeff4o972Ftba3SCdC2bduq7GJaFBITExk6dCgrVqygSpUqsul4nZiYGJUXXBs3bhwHDhxg2rRpRerNSkFkZKTsJlOxYkWmTZvGggUL3nju/v37GBkZyfolKDuKyRQfxWQkYvny5YwbN07SlOolkS+//JIWLVowcOBAuaXkID4+XpKJ5tatW+Pj48OOHTv44osvVN5+YSnoMm2pmTZtGidOnODu3bs5Hr98+bLG9GJAXHUo96KUko5iMhKQkZHB7t27GTt2rNxSNIo7d+6wdetWli1bJreUN0hOTqZcuXKStF25cmVOnz7NyZMnmTRpkqzfjKOjozXCZExMTBg/fjwrV67M8fitW7dkq4SZG3FxccUuvFbWUUxGAi5evEiVKlWwt7eXW4pGMXnyZObPny/7cE1uJCcnY2hoKFn7FStW5Pjx41y5ciXPrNvqIDo6WiM24QJMnDiRnTt35qhx5O/vT/369WVUlRPFZIqPYjIScOjQIfr06SO3DI1i+/btxMTE8PHHH8stJVek7MlkUqFCBQ4dOsSWLVvYu3evpLHyQpNMxsrKil69euXYv+Xv71/s0haqRDGZ4qOYjAT8/fff9OjRQ24ZGkN8fDyzZs3ip59+0tjx7ZSUFAwMDCSPY2VlxZ49e5g0aRLBwcGSx3sdVS3VVhXu7u5s374dEP8GT58+pWbNmjKr+g+pS1WXBRSTUTFpaWn4+/vTuHFjuaVoDAsXLqRr1660b99ebil5oo6eTCZNmzZl6tSpTJgwQS3xshMXF6f2vGX50bVrVx4/fsz9+/cJCAigRo0aaiu3XRCUnkzxUUxGxdy9e5fq1atLOr5fkggMDMTDw4P//e9/ckvJF3WaDIgJUwMDAzl27JjaYgqCQFJSkkb9b+ro6NCnTx/+/PNPAgMDqVOnjtyScqCYTPFRTEbF+Pr60qhRI7llaAxTp05l3rx5WFtbyy0lXwRBUOvGUH19ff73v//luldEKpKSkjAwMCh0fjap6dy5M//88w/Pnj3DxsZGbjk5iImJUUsV0dKMZv23lQICAgKoV6+e3DI0ggsXLuDv71+g+jlyI0f6EFdXV54/f46Xl5da4iUmJmpE0snX6dSpE2fOnNGIbASvExwcLGuNo9KAYjIqJiwsTKN2ssvJV199xfz589HX15dbyluRY2e3trY2H330EZ6enmqJp67FDYXFysqKypUrc+/ePVnzquVGUFAQ1apVk1tGiUYxGRUTHh5O5cqV5ZYhO+fPn+fx48cMHz5cbikFQq5EiB988AF//PGHWurQaHKyR0dHRx4/fqxRJpOenk5ERITGpLgpqSgmo2IiIiI06oMiF1999RVffvklurq6ckspEHJdgO3s7LC1teXatWuSx9LR0SlwJVV1U79+fcLCwjTqsxMSEoKlpaVGrXYriSgmoyJ++eUXZs+eTXJyMocPH+aHH37Q2A+01Jw/f56goCDc3d3lllJg5DCZp0+fsmfPHqpXr87SpUsZOnRogcsTFwVdXV2Nq9wZExPDiBEjOHDgAGFhYUydOpURI0ZoxGdHGSpTDSXja2YJ4NmzZyxbtoz09HSuXbtGy5YtmTlzptyyZGHevHl89dVXJaYXA6LJqPvClpqayuDBg9HX1yc5ORkdHR1Jl3prosmYmJiwd+9eEhMTAbh58yZJSUkasWlXMRnVoPRkVMTgwYOzJlVNTEyYMmWKzIrkwcvLi9DQUIYOHSq3lEJRrlw5kpOT1RqzRo0a9OrVi1evXgFi2hkp892VL1+e5OTkrHiagK6uLqNGjcrxmKZ8OXv8+LFiMipAMRkVUadOnaycUBkZGfTr109mRfKwcuVKpk+frhHfRAuDkZFR1rdpdfLNN99kbQLt2LGjpLG0tLSwtLQkIiJC0jiFZd68eVl7lLS1tTXmC8qNGzc0KiN0SUUxGRUybNgwtLS0cHV1xcjISG45aufZs2ecPHmyRM3FZGJsbCyLyTg7O9OwYUN0dHTo2bOn5PGqVKnCs2fPJI9TGKpUqZKVr8zZ2VljPjvXrl17o8y5QuFRTEaFDBo0CEEQmDRpktxSZGH9+vW4u7trVG6sgmJkZERCQoIssRcsWEB6ejodOnSQPJa1tTVhYWGSxyksc+bMAcR0O5pAbGwsERER1K5dW24pJZ6SMzNbADSlXnzr1q1ljS9HUazU1FQ2bdrE8ePH1R5bFRgbGxfLZFTxv1erVq1inV+Qv7u9vT33798vUvvq+Hy5u7tL2hMu6Gfj2rVrNG7cWONS8JRESpXJAOy9Gypr/JioCCpYyLfW362ePLmf9uzZQ7169XB0dJQlfnFRxXBZcaw9HCjOFt6CXv6bNm3KqVOnihxHys9XUIA/1epIV7CsMJ+Na9eu0bRpU8m0lCUUm1YxchqMnKxZs6ZEDxOamJgQFxcnW3x15Yho1qwZV69eVVO0wiGlwRSW69ev06RJE7lllAoUk1EoNv7+/jx+/JjevXvLLaXIVKpUiefPn8stQ3IcHR0JDg6W1VBLAhcvXqR58+ZyyygVKCajUGx27NjBBx98UKI2X76Oubl5jlrzpRUdHR0aN27MxYsX5ZaisTx+/JiEhATq19ecnlVJRjEZhWKze/duBg8eLLeMYlFWTAagb9++/PHHH3LL0FiOHz9Ot27dNGYhUUlHMRmFYnHjxg1SUlJwcXGRW0qxMDY2JiMjg6SkJLmlSM6AAQPYv3+/RuQH00SOHz9O165d5ZZRaii54xtF4I7PRS4cO4T2v7vRrWyrkpKcRK/hY7h92ZszB/fQukcfWr6r2k1xUc9CObFnG7FRkeiXK4dReVOqVK1OBQtLnNtIvzdCSnbu3MngwYNLxbe+SpUqER0drbIiVeHAbuBpHs/PBirm8ZwfMAs4BEQDHsBJQBULxO3t7bG2tub8+fO0b9++2O35X73M9bOnyMhIR1tbBx09PWxr1KLFuz3QU1EtoT9+XoWhsQk93Ee9/eBikJiYyKlTp/jll18kjVOWKBM9GUEQ+OWbuWz6dh7vf/gRo79YyMjZ8zGtZM6u1ctIjI+nWceuPL57h0QVT4j6nPqLmf274VDfiY8XLGHU5wto1b0Xu9f+yLMnj1QaSw727NlT4ofKMlH1kFlloAOwBGgMfPfvbT4QhWgeeWEJdAZ0ACvACfBRmTKxN7N9+3aVtFW/2TtEhj7l8snjDP1kDt2HjOCG12mmv9+RmOhIlcSoXqc+1WrXfetx0WHFy2Zw9OhRWrRoQaVKlYrVjsJ/lAmTObbNgxO7f2f2mt+oUs0eAG0dHdr37k+fUeN5lSwOkRiZlFdp3LCgx/z46QQ+mDqTd7q+l/V4tdr1mPbDalKS1J/GRJX4+Pigo6NTavI7Va5cmfDwcJW2WeHfn9nrURoCX5B3LwZEg8q+913VORTGjh3Lzp07VZZixtjULKvXUsHcko/m/4/IkKec2rtDJe0369gVx3fy3+Qc6Hud3WuXFyvO3r17cXV1LVYbCjkpE8Nl+39ZS6PW7bGyrfrGc70+HIuuXu5d+ts+3gTcuEbUsxB6DR+DTQ0xv9KFY4dITkgg9nk01WrXpVnHrsTFvOD8nwewrl6D25e9MTAyIjYqktTUV3RyffObfu1GTTAyKc/ju3f4a4cnXQe5Y2PvwKk/dvL0fgDjvv4u1zabd+7GP3/s4t1B7uxcvZT3hoykvksL1b5hBeTgwYO4ubnJElsKbGxsCA2VfjOvD2AMOAD3gMOAORAMzEX85ncd+B1YCEiRycvKyoqhQ4eyevVqvv32W5W3n/rq1f/Zu++4qqv/geMv9gYVlSEiqCxx5MC9R7jN3OYeWWlm9c1RmvtHRia5cuQoR87cC/fKvUUFFVSQISCy74U7fn+QpLkY994PF87z8eCh3Pv5nPPmAvfN2ahUSrLkcgDCrl3i9sVzxEU+wr/fYCp5+ZAQE82JXVup0bAph7esx6duA+q3bc+x7ZuxLW1PxO0b9Bs3AWW2govHDpLyNJH2/YcAcGLXXxibmPAkKpLqDRpjZ1+Wn7/6FBu7UmxbvogPRnyW7y7c5ORk9u3bx/z58zX9cpRoxb4lkxQfR0LM49wWzH+Vsi+Hta3dK49fPn6Y6Ihwuo8cjUfN2kwZ8CHpKSk8DLvNipmTad2jL806f0DQN2NQKhUkxcexeXEQwRvX4uZdDXMLS8KuX8HewQnTf3bZ/a8Klavi5l2Na3+f4EnUI8wtrahcrQYHN6/Ljf3FMo2MjAm9comdq5Zw5dQxqtaoDRKOhezfv5/27du/+0I9UaFCBR4/fqyVsreR0202B/gceL6BTQ+gDjAE2A/sATLJSThzAW2e/jJhwgSWLVvGs2fPNFputlzO1l9/waZ0GVp90ItbF84Sevki3YZ/xnvNWjFlYHeeJTwh/nEk64PmcGLnVrzr1MfI2JgdK37Fzr4sTTp2xc6+HNlyOempyVw8epCQCznTrh+G3ebC4QM0bt+Fpp26EXU/jHLOLvi1fp9K3tXoPnJ0gcYI169fj7+/P2XLltXo61HSFfuWTPY/Z2eYmVvk676NC+dSu1krti1fRGZaKmaWljwKu03VGu8xNnABAHFRj8hITSE9ORlXD2+c3StTvUFjGnfoCsDR7ZvemGBeZPTC+pIXr39dmc8SnrDke2jWuTu2paXrN05ISODevXs0bNhQshg0zdnZmTt37mil7MbA+4CKnATy3AKgHhADyICH5HSn6WKtecWKFenQoQOLFi3iu+++K3R5ibExrP5hGmq1GkdXNxbsP4W1rR1Lpo7H3acG25YvIlsuw9quNOEhN6jTog22pctQv017ajRqCsCmhXPZuuQXXKp40LZXf0zMzDC3tMKhYiWi7t8FwMjQiMsnjnBs+2ZadOtJvVbv58ZQmAkov/32GwEBAYV7EYRXFPskY+/giLmlFbGPHuTrvsh7YUxYuJIyDo4A9P9yYu5ziqws9qxZQY2GTQBQqXOO7TUyMs6duQbg7FaZ84f2o1IqX3o8P/5bpqFhzv8LWp6mBAcH06pVq2J1/rmzszOHDx/WStkO5HSPAUzm333O3IH5QDPACdD1pOJp06bRoEEDhgwZQoUKFQpVlr2jE0MmTnvl8ah7YQz/diYuVT0B6D3m69znjIyMMDT6t0PlgxGjSYyL4esP2tF95Bj6fv7qrswuVT0ZNX0Oy6ZN5PDWP/nq519znytokjl27Bjp6eli6rIWFPvuMiNjE5p3+ZCrp4+T+izptdcola92StiVsefq6eO5n6tVKsJv3eDGmVNsXDiXjgOGvXaM50WtP+xLdlYWZw/ufWe9UuycXBgHDhzA399f6jA0qkKFCjoZk3EkJ6FkAc2BXv/8K0XHZ+XKlfn000/5+uuv331xAdn+53cJ4H7I9dde+/RJLJ/O/InJy9dxaPM6Dm1Z/8o18dFRNOnYlV/2HMfI2Jhfxv97Cm1Bk8zcuXP53//+J3Zd1oIS8YoO/N93OLhUJPDzESQnJuQ+nvosic2L55H8z7RVpUKBWpXTKmn9YR/WBM7k7307ibwXyrp5AVjb2nHnygXSU5JJjI3m6unjGBgYkJyYQLZcjlKpQPnCGervNW1JlyEfs2zaRO5c/ncCqlKp4MjWDYScOwPk/BLevnQeWUY6N8+dRq1SEf0gPPfaF8tUqXL+1lVmZ2vp1Xo3tVrNwYMHadeunWQxaEOFChWIinrTqpaCeT728rolng/J6ToLI2ddzAMgBUgGnn93n0+oV6C9Vs6kSZO4evUqW7duLXAZmenpyN+wkLX1h33ZuHAux3dsIepeGH/+8iOm/xxVrlKqULzw831w01pkGenUatyctr0+yv19VGRlIUtPAyA64j6Xjh3G3tGJoROno1LmXGNta0d89GOy5fJ8TZ2+ceMGFy9eZMCAAQX62oW3K/bdZQCWNrbMXr+DXauXETh2BKXLO2Jbugz2jk50HDAcK1tbbp47jbN7FRJio3mW8IQen3yBQqFg2/JF2Ds60e+LCZR3caVNz/7cv3mN33+cSZ/RX/F+n4Gc2LmVOs1bU87ZhcTYaJ5EPaK8S87Z4EMmTsOrdj02LfoZExNTSpUrh5WNHS2798LVwxuAwd9MYc3c/2Px5K/5YMRo3u87iKQnsSQnJrxUZhkHJ87/M+B54UgwTTp2xcLKWuev5/Xr17GxsaFy5crvvliPODs78/TpU2QyWe6RyIURC2wkp6VyjZwBfu8XnvcAJpEzwD+SnPUzG8hJNmf+ue8A0AU4C/iTMxOtc6Eje5mFhQWrV6+me/fuNG3aFAeH/O0JfefyBQwNDXD3qc6RvzbStGO3l8YWOw4cjiwzgz1//IadfVl6j/mailW9uHAkmGp+Dbl/8xpuXtWwsy+LU6XKbP9tMZW8fLC2s6Ntr/5ER9wnSy7Dzr4cD+7cwqZ0GS5s3YA8M4OUpKd8OjMQgCYdu3Hz/Bm2LV9Iz0/H5Tn+SZMm8e2332rkey68ykCtpX4aAwMDnXcBGRgYSH6ejNR6eDtr/XVfuHAhN27cYOnSpVqtRwoeHh7s3r0bL693L/x7kYGBQaHOkyksAwrf5Tpt2jROnDjBwYMHMXrNmJ++/3697nfj5MmTDB48mNu3b2NmZvaGO4XCKBHdZYJm/f3335Kf/qkt7u7uRETo/04MBfH9999jYmKikZlm+kChUPDFF18QEBAgEowWiSQj5Nvp06dp0qSJ1GFoRUlOMoaGhqxbt44tW7bwxx9/SB2O1s2bN49y5coVm22RiqoSMSYjaE50dDQymazQ59EXVSU5yQCULVuW3bt307JlSypWrEirVq2kDkkr7t+/z48//si5c+ekDqXYEy0ZIV9OnTpVbLvKIGdKb3h4uNRhSMrb2zv3ILpTp05JHY7GyeVy+vTpw7Rp04rd5JWiSCQZIV+K83gMgKenJ2FhYVKHIbmWLVuyefNmevTowdGjR6UOR6O++eYb3N3dGT16tNShlAgiyQj5cu7cORo1aiR1GFrj5eXFvXv3xIFeQPPmzdm8eTN9+/YtNolm2bJlHDhwQJwXo0MiyQh5plQquXnzJu+9957UoWiNhYUFDg4OPHjwQOpQioTmzZuzZcsW+vXrJ3UoGjF16lR2796Nnd2rm+IK2lHsBv57eDtLHUKxFRoairOzM9bWul8Aqkve3t7cvn2bKlWq5Os+/T8b9PWaNWvGhg0baNWqld7/fu3cuRMPDw+pwyhRilVLRq1WF+rj+fG7hS2noB9PnjyhXLlyhS5HW65evUrt2rrYH1haPj4++d6NWaqfGV183yFnjOb69et4eHgwcuTId/6eKBQKAgMDtfr1BgYGolAo3npNVlYW06dPx8XFhUuXLuHn56fV10l4VbFKMoVla2tLSkqKZPWnpKRga6vpMxA15+rVq8XmFMy38fLyIjQ0VOowipwaNWpw4cIFzMzM8PX1Zf78+aSlpb322jt37rBkyRKtxrN48eI3fp/UajX79++nTp06XLhwgbNnz1KnTh2txiO8nkgyL6hYsSIPHz6UrP6IiAhcXV0lq/9drly5UiJaMs+7y4RX2dnZsWDBAvbv38+pU6dwd3fn008/ZceOHURGRpKcnMyVK1cYMWIEH3/8sVZjGTVqFB9//HFuqzM7O5tr164RGBhI9erVmTRpEtOnT2fXrl2FPsZAKLhiNyZTGD4+Pty+fZsWLVpIUv/Nmzfx9fWVpO68uHr1arEe9H/u+c+B8Ga1atVi06ZNPHr0iC1btrBo0SJCQ0NJTk7GycmJkSNHMm5c3jepLIhvvvkGgHbt2hEdHY2JiQnu7u60bduWRYsW0bJlS63WL+RNsdogs7AWLFhASEiI1pv5bzJ48GCaNm3KyJEjJan/baKioqhXrx6xsbFSh6ITZcuW5fbt25QrV07qUIQ8UKlU4iyYIkp8V17QqlUrgoODJalbpVJx4MCBIntGy5UrV0pUn7aXl5fWjmIWNE8kmKJLfGdeUL16dbKysiRZ8X3u3DnKlSuHm5ubzuvOi5LSVfact7e3SDKCoAEiyfxHv379+P3333Ve7/Lly4v0yXwlLcmIcRlB0AyRZP5jxIgRrFq1CrlcrrM6ExIS2L59O8OHD9dZnflV0pJM9erVuXHjhtRhCILeE0nmP7y8vKhXrx7Lly/XWZ2zZ8+mf//+lC1bVmd15kdKSgrx8fHFdnv/16lZsybXrl2TOgxB0HtiCvNrzJgxg06dOjF48GBsbGy0Wtfdu3dZt24dISEhWq2nMK5cuUKNGjVK1OCqs3PO9imxsbE4OjpKHI0g6K+S866RD++99x7+/v58//33Wq1HpVIxbNgwpkyZUqSnyl67dq1ErPT/rxo1aojWjCAUkkgybxAYGMjGjRu1emhTYGAgxsbGRf5ci5KyZ9l/1apVi+vXr0sdhiDoNZFk3sDe3p4VK1bQv39/4uPjNV5+cHAwCxYsYM2aNUW+G6qkDfo/V6NGDZFkBKGQiva7m8Q6dOjAwIED6du3r0YPsQoLC2PgwIH8+eefuLi4aKxcbcjOziY0NLRIb3ejLaIlIwiFJ5LMO8yYMQOVSsWsWbM0Ut6zZ8/o1q0bAQEBNGvWTCNlatPt27dxc3PD0tJS6lB0ztfXl3v37pGVlSV1KIKgt0SSeQcjIyP+/PNPVq5cyV9//VWosuRyOR988AEdOnRg2LBhGopQu0pqVxmAmZkZbm5uYuW/IBSCSDJ54OjoyI4dOxg1ahQXL14sUBkqlYqBAwfi4ODATz/9pOEItaekzix7TqyXEYTCEUkmj9577z2WLFlCz549C7QT8bhx40hISOCPP/4o8gP9LyrJLRnISTJiXEYQCk5/3u2KgB49ejBkyBD69++fr4kAv/76K0ePHmXbtm2YmZlpMULNu379eoluyYjBf0EoHJFk8un777/HxMSE6dOn5+n6M2fOMH36dLZt24adnZ2Wo9OsR48eYWpqioODg9ShSKZmzZpcvXpV6jAEQW+JJJNPhoaGrFmzhtWrV7N///63XhsTE0OfPn1YtWqVXu77VdLHYwBcXFxQqVTExcVJHYog6CWRZAqgfPnyrFu3jmHDhvH06dPXXqNSqejVqxejR4+mQ4cOOo5QM0r6eMxzYlGmIBScSDIF1KxZM3r16sWECRNe+3xQUBAmJiaMHz9ex5FpjmjJ5KhVq5aYYSYIBSSSTCHMmjWLvXv3vvIGFBMTQ0BAACtWrMDAwECi6ApPtGRyiBlmglBwIskUgo2NDRMmTGDq1KkvPT5jxgyGDRtG5cqVJYqs8FJTU4mLi9PLsSRNEy0ZQSg4A7VardZKwQYGaKnoIkUul+Pu7s6xY8fw9PQkNjYWX19f7t69S5kyZaQOr8COHj3KlClTtLoLtb6Qy+WUKVOGpKQkTE1NpQ5HEPSKaMkUkpmZGYMGDWLlypUArFy5kl69eul1goGcqdeNGzeWOowiwczMDHd3d27fvi11KIKgd0SS0YAhQ4awfv16AH7//XdGjhwpcUSFd/bsWRo0aCB1GEWGGJcRhIIRSUYDvL29MTEx4dChQ6SlpVGnTh2pQyq08+fP07BhQ6nDKDLEuIwgFIxIMoUUGRnJnDlzkMvlDBkyBJlMxpw5c4iMjJQ6tAK7d+8eZmZmVKhQQepQigzRkhGEghFJppDS09OZNGkSjx8/5vHjxzx9+pRvv/2WzMxMqUMrsLNnz4pWzH9Uq1ZNjMkIQgGIJFNI3t7etGvX7qXH/P398fT0lCiiwhNJ5lWurq48e/aMlJQUqUMRBL0ikowGzJo1C2NjYwCMjY1fWTejb8Sg/6sMDAzw9PQkNDRU6lAEQa+IJKMBfn5+uLi4AFCxYkW9bgUkJycTFhZG3bp1pQ6lyPH29hZdZoKQTyLJaMjz1sv3338vcSSFc/LkSerXr693597ogo+PjziKWRDyyVjqADSlqOwRNnToUIYOHSppDIXZaeHo0aO0atVKg9EUHz4+Pqxdu1bqMARBrxSbJAOw9U60pPU/unsHVw9vSWPo4e1cqPuPHTvGggULNBRN8eLj4yO6ywQhn0R3mQZJnWAK69mzZ9y9e5d69epJHUqR5OHhwaNHj5DL5VKHIgh6QyQZIdfx48dp3Lix2ATyDUxMTHB1deX+/ftShyII1lxfbgAAIABJREFUekMkGSGXGI95NzHDTBDyRyQZIZdIMu/m7e0t1soIQj6IJCMAEBcXR2RkZLHY3FOb3N3defDggdRhCILeKFazy97m1oWz/L1/F4ZGRgCUr1ARuSyTTgOHY25ppfH6Tu3ZzoM7IVT2rUnj9l1yH3909w5nD+xBkZ1N3Vbt8HqvaCx63LNnD/7+/rk7Fwiv5+bmxtatW6UOQxD0RrFvyajVan6b+R0rZk+m8+CRDPt2BkMmTMW2jD2bFs4lIy1NK/U26diNu9evEvT1aG6eO537uKuHN46ubqhUykIlGLVazdO4WE2ECuQkmU6dOmmsvOLKzc1NtGQEIR+KfZLZv341hzavY8KiVTi6ugFgaGRE8y4f0nXoJ2TJtLNbsoGBAeWcXfCsXZe540YRHx2V+5xDxUqUc3YpVPnbly/i1sVzhQ0TgKysLI4cOUL79u01Ul5xVqlSJSIjI1GpVFKHIgh6odj3jWz/bTE1GzenfIWKrzzXafAIjE1ypuvGPnrA5RNHyEhNwdzSig4fDcHQyJiwq5c4vXcHrXv0Y8fKX1FkZfHhqLG4+/iyb90qHobepk7z1tRv256ncbHsWr2MNj374VLFAwNDA775ZTnje7Znzphh/N/6nZiam2NoaIiB4b/5PfpBOJePHybq/l0at+9CzcbNiIt8SPDGNSiVSroN+4SzwXuRZ2bi328QIRfOsGFBII38O2NoaEDjDl0L9RodO3aM6tWrU7Zs2UKVUxKYm5tTunRpYmJixHk7gpAHxbolkxQfR0LM49wWzH+Vsi+Hta0dMQ8jmDtuFO16D6Dnp+OIun+XgE+HoFapePoklj1rVhB69SJ9P/8fVrZ2zBjWh4y0VBq+35ETO7diZWcHQOnyDmSmp+JSxSO3Djv7soxfuJLH4ff4dcr/XokhPjqK/etW0XnwSLoO+4RZIz/i3o2rOFSshK9fI4L//AO1GiLvhuLfbxAWVtbUa9mO8hUq0qBdh0InGIDdu3eLrrJ8qFChAjExMVKHIQh6oVgnmeysLADMzC3eet1fyxZQza8hJv8sQuz56RdcPXWMsGuX8ayVM27SpENXHCpWYvjkWSiVCm6e+5vS5Rxo3aMvu39fDkDY1UvUaNjslfKr+Nbk0xmBnNj1F7tWL3vpuV2rlpKemsq25Ys4d3Afzu5VCL16CYA6LdrQpFM3vh/4Ia2698bCyvqlezW1X9vevXvp3LmzRsoqCRwdHUWSEYQ8KtZJxt7BEXNLK2IfPXjrdTEPwrGwtsn9vKxTBWzL2BP7KOKVa01MTSnn7EJmWioAXYZ8zOXjh4l5GMGl44ep38b/tXU079qDrkM/YU3gLG68MBEg8n4Y9Vq1pfvI0XQfOZqg3UfpNHB47vPdR4wm5mEEzxITXi1UA0kmJCSE7OxsqlevXuiySgpHR0diYzU36UIQirNinWSMjE1o3uVDrp4+TuqzpNdeo1QqKFehIlH3wl55rnwF19fek5yYiJuPL5AziN/w/Y5s/20RhoaGmLywRb5K+fLg8MD/fUf1Bo3585cfcx+zLW3PtdPHX7rufsi/Z8nv//N3Pp72A0unTiAtJfml6wwofJLZvXs3XbsWvsutJHFychItGUHIo2KdZCDnjd3BpSKBn48g+YXWQOqzJDYvnkdyYiJdh4ziysmjPIl6BEDUvTAcXCrhU7d+7vXx0Y8BuHTsEB61alPJ0yf3uW7DP+Pwlj+p1+rlY5gT46JfSm6GRkZ8NW/JSzPLWn/YhyNbN7Jj5a9E3Qtj79qVuXEe2rwev1bv4993EK4eXqyYNTn3Piu7UiTEPCY+OqpQW/vv3LlTjMfkk4ODg2jJCEIeFfvZZZY2tsxev4Ndq5cROHYEpcs7Ylu6DPaOTnQcMBwrW1vKlHfgu6Vr2Lx4HlVr1iY9JZnvlq15aQbYtdPHOXdoH7KMdL78afFLdVSuVoO6LdtStcZ7uY+d3rsTuzL2HNn6J2169sfarhQA1nalmLAoZyIAQK0mLfhs9k8Eb1zLpaOH6DJ0FHWatybq/l3u37yGX+v3AWjUvgvX/z7BxWMHqdeyHZ0HjSB441rKObsUeDp0ZGQkd+/epU2bNgW6v6Syt7cnKen1LWNBEF5moC7Mn8FvK9jAoFB/YRekPm2cJ5MYG8PHLevy+7lbuYnivx6H3+P6mZN0+Ejaw8og5zyZvL7uP/74I+Hh4SxZskTLURUve/fuZeHChezdu1fqUAShyCv2LZnCys7KOTtEqVC88tyRvzYS+zCCxxH3GTvnF12HVmgbN27kp59+kjoMvWNra0tKSorUYQiCXij2YzKFoVRkc+n4YWo2bsaJXX+9MnlAqVAQeT+MDz8eg5mFpURRFsz9+/eJiYmhefPmUoeid+zs7ESSEYQ8Et1lxUxeu8tmzpxJYmIiQUFBOoiqeHn48CEtWrQQe5gJQh6IlkwJtXHjRvr06SN1GHrJ0tKSjIwMqcMQBL0gkkwJdOPGDVJSUmjYsKHUoeglIyMjlEql1GEIgl4QSaYE2rhxI/369dPYtjQljUgygpB3IsmUQJs2baJ3795Sh6G3jI2NUbxmtqEgCK8qVlOYe3g7Sx1CkXf8+HFMTEyoW7donMipj0RLRhDyrti0ZNRqdaE+nu+sW9hyCvtRpkwZEhMTC1XG2/z666989tlnOvquFE9qtVp0NQpCHhWbJFNYpUqV4tmzZ1KHgaOjI9HR2pmKHR8fz6FDhxgwYIBWyi8p0tPTsbTUr3VRgiAVkWT+4eTkRGRkpNRh4OPjw61bt7RS9rJly+jRowd2/xyyJhRMRkYGVlZWUochCHpBJJl/1KtXjwsXLkgdBn5+fpw6dUrj5SoUCpYvX84nn3yi8bJLGtGSEYS8E0nmH35+fpw/f17qMOjYsSN79uzR+G4JGzduxM3Njdq1a2u03JIoPT1dtGQEIY9EkvlHy5YtOXHiBKmpqZLGUaNGDcqUKUNwcLDGylSr1fzwww9Mnjz53RcL75SamoqNjc27LxQEQSSZ58qVK0fLli3ZtGmT1KEwduxYZs6cqbHWzF9//YWlpSVt27bVSHklXXR0NE5OTlKHIQh6QSSZF4wcOZL58+dLvtDuo48+QqFQsGLFCo2U98MPP/Ddd99ppCwBYmJiRJIRhDwSSeYFHTp0oEKFCixatEjSOAwNDVm5ciXfffcdly9fLlRZu3btIisriy5dumgoOkEkGUHIO5Fk/iMoKIjZs2dz+/ZtSeOoVq0aS5cupXPnzty4caNAZSiVSiZNmkRAQIBYPKhBMTExODuL3SUEIS9EkvkPT09P5s+fj7+/v+TrZj744AOCgoJo27Yt+/bty/f9q1evxt7eno4dO2ohupLr8ePHIskIQh4Vm0PLNO2nn35i6dKlbNu2jerVq0say5kzZ+jTpw/t2rVjzpw5lC1b9p33ZGZm4uXlxcaNG2nUqJEOoiw5ypUrx40bN3B0dJQ6FEEo8kRL5g3+97//MX36dNq0acPq1aslTZiNGjUiJCSEUqVKUb16dZYsWYJcLn/rPUFBQTRs2FAkGA178uQJSqVSJBhByCORZN6if//+BAcHs2TJEho1aqSVlfh5ZWNjw9y5czlw4AA7d+7Ezc2N6dOn8+TJk1eujYmJ4eeffyYgIECCSIu3W7du4evrK3UYgqA3RJJ5h1q1anHmzBk+++wzhg4dSr169Vi9erVkm2nWqlWLvXv3cuTIEaKjo/H29qZ79+5s2LCB9PR0ACZMmMCoUaOoUqWKJDEWZ7du3aJatWpShyEIekOMyeSDSqXiwIEDLFmyhGPHjuHn50f79u1p2LAhderUkWQ/q2fPnrFjxw42btzI33//Te3atbl27Rpnz57F09NT5/EUd59++ik+Pj6MHTtW6lAEQS+IJFNAGRkZHDp0iMOHD3Pu3Dlu3ryJq6srnp6eeHh44OrqipOTE46Ojtjb22NmZoadnR3GxsYF3gU5MzMTmUz2xucTExNp27Ytzs7O3L17F2dnZ95//33atm1Ls2bNxKaOGlCzZk1WrlxJvXr1pA5FEPSCSDIakpWVRWhoKPfu3ePu3btERkYSHR1NXFwcCQkJZGdn8+zZMxQKBSkpKZiZmb3zTV8mk5GZmZn7ubm5ORYWFm+8Xi6Xk5WVhVKpxMzMDFNTU4yMjMjKykImk1G6dGmqVKlC7dq1ad68Ob6+vnh7e2Nqaqqx16E4e/bsGa6urjx9+hRj42J1qKwgaI1IMhKRy+VkZGS89Zq8JKLnEhMT8fX15cCBA9SqVYvMzEwyMjJITk4mLS2NxMREjh49yqlTp7h58ybJycmYmZkhk8nw8fGhVatWNGvWDH9/f6ytrTXxJRY7e/bsISgoiIMHD0odiiDoDZFkiolhw4ZRunRp5s6dm6frY2NjCQ4OZtu2bRw8eBAnJyfMzc159OgRbdu2ZeDAgXTt2hVDQzE35Llvv/0WU1NTpk2bJnUogqA3RJIpBk6fPk3v3r25detWgcZ7MjMzCQ4OZu3atRw6dIhatWqRlJSETCZj/PjxDB06VCQboHHjxsyYMUPsZi0I+SCSjJ5TKBT4+fkxadIkevfuXejy4uLiWLVqFUuWLKFixYrI5XIMDQ1ZtmwZNWvW1EDE+ikuLg4fHx9iY2PFGJYg5IP481TPLViwgLJly2okwQA4ODgwceJEQkND6dGjB48ePcLU1JQ2bdqwZs0ajdShj7Zv30779u1FghGEfBJJRo/FxsYSEBDAggULNF62mZkZ48aNIzQ0lLp162JsbMyECROYM2eOxuvSB9u3b6d79+5ShyEIekd0l+mxvn374uHhwcyZM7Ve14EDBxg4cCBGRkb8/PPP9OvXT+t1FhWpqam4uLgQFRUljl0WhHwSLRk9dfz4cc6dO8e3336rk/r8/f05evQoSqWSTz/9lJs3b+qk3qJg586dNGvWTCQYQSgAkWT0kFKp5IsvviAwMPCtizM1zdfXl/3796NSqRg1apTO6pXab7/9xpAhQ6QOQxD0kkgyemj58uXY2NjQo0cPndddp04dAgMDuXLlCgcOHNB5/bp2//597ty5Q7du3aQORRD0khiT0TPJycl4e3uzf/9+atWqJUkMarUaT09PbGxsuHz5siQx6Mo333yDsbGxODZBEApIJBk98/333xMVFcXKlSsljWPHjh306NGD+Ph4SpcuLWks2pKVlYWrqysnT57Ew8ND6nAEQS+JXf70SEJCAosXL+bChQuSxnH+/HmuXLmChYUFfn5+pKWl8ddff9G4cWNJ49K0LVu2UL16dZFgBKEQRJLRIwEBAfTv3x93d3dJ49i2bRs//PADAGlpaQDF7iAvtVrNDz/8QGBgoNShCIJeE91leiI+Ph5vb29CQkIkP18+OzsbKysrsrOzgZwjCF48kqA4+Ouvv5g9ezYXL17EwMBA6nAEQW+J2WV6YvHixfTq1UvyBANgYmLC119/nfvm6+XlJXFEmhcQEMDUqVNFghGEQhJJRg/I5XKWLl3KF198IXUouWbNmpV7cFfr1q0ljkaz9uzZQ3Z2Nl26dJE6FEHQeyLJ6IENGzZQq1YtfHx8pA4ll5GREd988w0AvXr1kjgazVGr1cyYMYPvvvtOtGIEQQPEwL8e+P333xk3btwrjxeVN8GiMKtMU+N/a9euRalUSrLQVRCKIzHwX8QlJCTg6elJdHQ05ubmLz1nYGDA1jvREkWW49HdO7h6eEsaQw9vZ438rGVkZODj48O6deto2rSpBiITBEF0lxVx27Zto3379q8kmKJC6gSjSf/3f/9Hy5YtRYIRBA0S3WVF3K5duxgwYIDUYRR7ERERLF26lGvXrkkdiiAUK6IlU8RdvHixSIx5FHdfffUVX375Jc7OzlKHIgjFimjJFGHx8fHI5XJcXFykDqVYW79+PWFhYfz5559ShyIIxY5IMkXYtWvXJNtpuaSIiYnhq6++Yvfu3UV23EsQ9JlIMkXYgwcPqFq1aoHvv3XhLH/v34WhkREA5StURC7LpNPA4YScP8PxnVto3KErDdt1LHSsarWak7u38SjsNlVrvEfD9zvlPvcw9DZnD+5FqVDg16odHrXqFLo+TRk5ciSfffYZ9erVkzoUQSiWxJhMEfbs2TPs7OzyfZ9area3md+xYvZkOg8eybBvZzBkwlRsy9izaeFcMtLSqNuyLQ/u3CIjNVUjsRoYGNCs0wfcuXKRn7/6jNsXz+U+V8nLh3LOLhgYGBQqwahVKp4+idNEuACsWLGC6OhoJk2apLEyBUF4mWjJFGFKpRKjf1oh+bF//WoObV7H/H0nKV+hIgCGRkY07/IhkXdDyZLlbGZpaa3ZM+sNDA1xcKmESqnkpy8+5set+7F3dALAoaIrKqWyUOVv+TWIip7eGml5PXjwgG+//ZYjR45gYmJS6PIEQXg9kWSKMEtLS6KiovJ93/bfFlOzcfPcBPOiToNHYGxi+tr7Qi6cIezqZRJiHtNp4HCc3asA8Pf+XcjS00l+moirhxd1W7Yl9VkSp/fuwKmSOyHnz2BmaUmPUWMxNDLkm/nLGd+zAz9+PpxZa7dhYmaGoaERhob/Npwfh9/jysmjRN2/S9NO3ajeoAmxjx4QvGENAF2HjeL03p0oFNn49x3EtdMn2PzrLzTt1A21SkUj/875fl2ek8lk9OzZk++++w5fX98ClyMIwruJ7rIizNHRkZiYmHzdkxQfR0LMYxxd3V77fCn7cljbvtoFd/n4YaIjwuk+cjQeNWszZcCHpKek8DDsNitmTqZ1j7406/wBQd+MQalUkBQfx+bFQQRvXIubdzXMLSxzyypdzoHx83/jYdhtlk6b+EpdcZEPObhpLZ0Hj6TToOHMGNaPiFs3cXR1w7uOHwc2/AEGBkTdv0v7foMxt7SiQbsO2Ds40si/c6ESDMCYMWPw8PBg7NixhSpHEIR3Ey2ZIqxy5crcu3cvX/dkZ2UBYGZuka/7Ni6cS+1mrdi2fBGZaamYWVrmDuKPDVwAQFzUIzJSU0hPTsbVwxtn98pUb9CYxh26vlKeR606jJr2AwsnfUmV6jVx8/63xbBj5RKy5TK2LV8EgJObO6FXL+JerTr127anftv2TPmoO+PmLsbsheQFhd+vbc2aNZw6dUry00UFoaQQSaYIq1mzJuHh4aSlpWFtbZ2ne+wdHDG3tCL20YN81RV5L4wJC1dSxiHnvJr+X/7bAlFkZbFnzQpqNGwCgEqtAsDIyDh35trrtOreh4hbN1kVMI0+n39N6bLlAYi6F0bnIR9Tv40/AN1Hjn7pvg9GfMbX3dqSnJjwaqGFyDHXrl3jf//7H0ePHsXGRrPjUYIgvJ7oLivCTExMqFu3LsePH8/zPUbGJjTv8iFXTx8n9VnSa69RKhWvPGZXxp6rp/+tR61SEX7rBjfOnGLjwrl0HDDstWM8/6VSql76fPDEqfjUrc+G+f8eY2xbxp5rp1/+mu6HXM+pV63m8Ob1DJ88i6VTx5OR9vLsN4MCZpnExES6d+/OokWLit1R0YJQlIkkU8R1796drVu35uuegf/7DgeXigR+PuKl1kDqsyQ2L55HcmIiAEqFArUqJym0/rAPawJn8ve+nUTeC2XdvACsbe24c+UC6SnJJMZGc/X0cQwMDEhOTCBbLkepVKBUvJyw4h9HkpGakvu5kZExXwctpazjv9u1tOrem4Ob1rFr9TKi7oWx54/fSPsnIQZv+IOG73eiff8hOLhUYlXA1Nz7rOzsSIh5THx0VL52XZbJZHTr1o0+ffrQs2fPfLySgiAUltG0adOmaaPg6dOno6WiSxRXV1e++OILPvnkk1dWpE+fPp0+Y75+5R4TMzNadOtJcmICfy2dz5VTxwg5/zcxDyPo0H8odmXsuXnuNPHRURiZmOBSuSq1m7VClpHB0b82cu/GVToNGkmFylVxqlSZe9evcOPc3zR+vxMqlYroiPuYmpsTF/UItVqFk6sblja2nN67g8S4GJ4lxlOhigemZjnxmllY4Fu/MdlyOS5VPHB2q0yZ8o6c2LmVK6eOU69lW2o3b03kvVAuHj1I445dMbewJEsuIzoiHAsra5wquWNqZs7J3dtwcK1EhX9mvgFsWjj3jT9rKpWK/v37U6pUKRYvXlxkzuARhJJCnCejBwYMGEDt2rX5+uuXE0pROE+mKHjbeTJffvklV65c4cCBA5iZmek4MkEQRHeZHhg/fjw//fQTqRpanV9SzJs3j+DgYLZt2yYSjCBIRCQZPVCzZk38/f0JCAiQOhS9sWXLFubNm8f+/fspXbq01OEIQoklkoyeCAgIYMWKFeJQrTzYu3cvY8aMYffu3VSs+O4ZcYIgaI9IMnrCycmJOXPmMHToUGQymdThFFnBwcEMGzaMnTt3UrNmTanDEYQSTyQZPTJkyBCqV68utkN5g4MHDzJo0CB27NhB/fr1pQ5HEATEin+9s3jxYurXr8+SJUukDqVIOXnyJAMGDGDz5s00aNBA6nAEQfiHSDJ6xtramj179tC0aVOpQylSevbsycaNG2nevLnUoQiC8AKxTkZPXbhwQXQJveD48eMiwQhCESTGZPSUn58fFy5coEKFCixatAi1Wp2vj+zsbAIDA/N9nzY+AgMDUSgU+Y5/woQJVK5cmWvXrokEIwhFlGjJ6LmIiAi6deuGm5sb8+fPx83NLc/3tWjRgkePHmk3wDyoUKECZ86cwdXVNU/XHzt2jM8//5xKlSrx+++/Y29vr+UIBUEoKNGS0XPu7u5cunSJRo0a4efnx+TJk4mOfvdWM2vWrMHf318HEb7b+++/z5o1a9553bFjx+jevTtDhw5lxowZ7N69WyQYQSjiREumGHnw4AFz585l/fr1tGvXjm7dutGiRQucnf/dATkzM5MlS5YQGBjIuXPnisRixYcPH9KoUSO++uorPv74Y2xtbQHIzs7m3LlzHD16lM2bN6NSqRgzZgyDBw/GwiJ/h7IJgiANkWSKodTUVNavX09wcDAnT57EzMwMBwcHsrOzuX//Pu3atWPu3LlUrlxZ6lBzhYeHM3HiRPbt24e9vT1KpZKnT5/i6+tLq1at6NixIy1atJA6TEEQ8kkkmWJOrVbz8OFDEhMTMTIywtPTE0tLy3ffKBGFQkFUVBRGRkaUL19ebGwpCHpOJBlBEARBa8TAvyAIgqA1IskIgiAIWiOSjCAIgqA1IskIgiAIWqPxDTKXLVtGUlISZcqUYc6cOZQuXZqPP/5Y09UIgiAIekDjs8sGDRrE2rVrUavVGBgY8NFHH+VpNbcgCIJQ/Gi8u2zo0KHY2NgAYGNjw/DhwzVdhSAIgqAnNN6SUalUlC1blqSkJEqVKkVCQgJGRkaarEIQBEHQExpvyRgaGvLRRx/ldpWJBCMIglByaWV22eDBg1Gr1QwZMkQbxQuCIAh6QmvbynTq1Ik9e/Zoo2hBEARBT2gtycTFxeHg4KCNogVBEAQ9obUkIwiCIAhixb8gCIKgNQaAaMkIgiAIWiFaMoIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgBQOpA3gbtVr9PnBA6jgEQRCKMH8DA4NgqYN4E7GtjCAIgqA1IskIgiAIWmMsdQAlXWRkJLdu3eLBgwc8e/YMADMzMxwdHfH09KR69eqYmppKHKUgCELBiCQjgTNnzrB81XJ2791NekY6Jk4mZNlmkW2ajVKlxBRTTDNMMUw0RBYv47167zFi4Ah69eqFnZ2d1OELgiDkmRj416Ht27cz4fsJRCdGk+mbidJLCWXfcZMciADrO9aoIlSMHD6SKd9Owd7eXhchC4JQ9BXpgX+RZHQgIiKCAcMGcP3+ddKapoEnBXvlk8HsrBmmoabMC5zH8GHDNR2qIAj6p0gnGTHwr2Xbt2+nZt2anDM7R9rQNPCi4KndDuT+clJ7p/LF9C/o1rMb6enpmgxXEARBo0SS0aJFvy7ioxEfkdYzDWUjpeZebUdIH5RO8MNgGrVoxNOnTzVUsCAIgmaJJKMly5YvY8K0CWQMyIAKWqjAGGSdZIRahdKsdTPS0tK0UIkgCELhiCSjBYcOHeLLiV+S3jcdSmuxIgPIap1FuHk4H/T+ALVarcXKBEEQ8k8kGQ178uQJvfr3IqNrBpTRTZ2y92WcDT3LTz//pJsKBUEQ8kgkGQ0b8+UYMn0ywU2HlRpBepd0ps2cxsOHD3VYsSAIwtuJxZgadOnSJfYG70X+sVz3lZeGrHpZjPtmHNs2bdN9/fmkUql48OABDx8+JCkpCaVSiY2NDeXLl8fT0xNra2upQxQEQQNEktGgydMnk1k/EyTaBUZRX8GBxQe4d+8eVatWlSaIt4iNjeXPdevYv3kzf1+9SlkTE9yMjLA3MMBQpSLNwIBYICwjg0oODrRu357egwbRtGlTDAyK9JIuQRDeoEj/5urTYszY2FjcPdyRjZVJlmQATI6Y8HmDz5n741zpgviP69evEzB5MgcOHqS7oSEfZGTQHHjTBjkq4BoQbGjIWisrsm1tGT99OgMHDcLExER3gQuCfhCLMUuCjRs3YuhjKGmCAciuns0f6/6QNoh/JCcnM3r4cNo3akS9vXt5JJOxIiODLrw5wUDOD2VtYIJKxY3UVJY+fsy6ceOo4+XFqVOndBO8IAgaIZKMhmzbu40M9wypw4DykJmdyd27dyUN49KlS9T19ka5fj23MjL4WqmkoKMsLYDDaWlMi4igj78/M6ZMQaVSaTJcQRC0RCQZDbl0/hK4Sh1FDoNKBpw+fVqy+vfu3UvHFi34MS6OJTIZpTRUbg/gUkYGh+fNY0CPHmRlZWmoZEEQtEUkGQ2Ij49HoVRQ4D/VNSzdLp2bt29KUve+ffsY3qsXu9LT+VALi0MdgeD0dOTBwfTr1g2lUqnxOgRB0ByRZDQgKioKM3szqcPIpS6lJiw8TOcCQY+cAAAgAElEQVT1Xr16lSG9erE9I4P6WqzHDPgzI4O0kyf56rPPtFiTIAiFJZKMBqSmpmJgVoQm6pnmDLrrUlpaGr07dWJ+RgYNdFCfKbApPZ29a9eydcsWHdQoCEJBiCQjaMTUiRNpkpREHx3un2YHrMvI4PMRI0hKStJZvYIg5J1YjKkBtra2qOVFaHNKOZQqpanh9ncLCwtj7cqVhGRm6qzO5+oDH8jlzJw8mZ8XLdJ5/fkRHx/PxYsXuXPnDo9jHvMs5RmmpqaULVWWypUr4+vrS+3atTE2Fr+WQvEhfpo1wMXFBXmiBFvJvIFBsgEyYxnr16/Hx8cHb29vLCwstFbfD1On8rlC8c6TpLVlikxG9VWrmDh1KuXLl5coiteLjIxk1epVrFq3ipjHMZhXMkdWSobcQp4zuKQAg2wDrPZbYfjEkKzELJo0b8Jnwz+jS5cuYvGpoPeK0EDCq/Rpxb9NaRvSRqQViRlm1rut6eLRBZVKxe3bt7l79y7Ozs5Uq1aNatWq4ePjk/tvYfcIS0pKorKzM+EymVZPNXiXkRYWeHz/PeMnTpQwin9FREQw/rvx7NmzB7WvGlk1Wc65Qu/qoM4EQsHmlg1maWZMnzydUR+PwsjISAdRC3qqSK/4F0lGQ1q1b8Ux22PgK3UkYLXIiqt/X83dv0ypVPLw4UPCw8MJCQnh1q1bhISEcO3aNWxsbPD19aVy5cpUq1YNX19fatasmecWwfLlyzn81VdskPjQtFPAaDc3rkVESBqHSqVi9g+z+eHHH8iql4XCTwHmBSzsMVifsMbRyJFNazdRu3ZtjcYqFBsiyRSUPiWZBQsWMHHNRDI6SbzqPw7K7yxPXFRcni6Pjo7OTTrP/71x4wZGRka5Sef5v76+vjg5Ob10f09/fz4MDqa/Nr6WfFABDubmXLt/H2dnZ0liSExMpPOHnbkZe5O0jmloahWqwXUDzI+Y81PAT3z2iZiyLbxCJJmC0qck8+TJEypVqST9BpmHTRjXZBw/BvxYqHIePXrEnTt3CAkJ4fbt29y6dYtbt25hbGyMr69vbpfbrG+/5WJqKi4air8wPrS1pe/y5fTu3VvndUdFRdG0dVNinGLIapml+XmbT8FysyVjh40lYFaAhgsX9FyRTjJi4F9DypcvT+u2rdl/ZT+qBhLtqyUD42vGfLL6k0IX5erqiqurK++///5Lj8fGxuYmnitXriDLyioSCQageloat2/eBB0nmYSEBBq3bExM1RgUjRTaqaQMZAzMYMGaBZibmzN18lTt1CMIGibWyWjQ7KmzMT9vDhJNNDM5b0KnTp2oXLmy1upwdHSkTZs2jBkzhjFjxlDZvKADDppXWaXiwe3bOq1ToVDQvkt74irGaS/BPGcJ6b3TCVwQyObNm7VblyBoiEgyGvTee+/RrVM3zE5JsMXMUzC5ZMK8H+fprMqUlBRsi9BhYrZAio4XZU6ZNoU7yXfIaqGjzTqtIf2DdIaNGiaO2hb0gugu07D5c+dzoPoB5G5yqKKjSpVgtdOK2TNm4+Kiu84rpVJJUZpYa0xOy0JXbt++zS8LfyFzZKZuRzedQVZXxrBPhnF432EdVlxwqampREREkJSURHZ2NlZWVpQtWxZ3d3ex+LSYE99dDStbtixbN2ylU49OZHyUAfZarlANFvstaFajGWM/H6vlyl5mbW1Nmg63kXmXVMDG7m3HoWnW2K/HIm8sl2RtlKKRgnPLz3H8+HFatGih+wDeQSaTsXPnTvZs2sSJ48eJT06msoUF9kZGGKtUZABPVCoey2T4urnRqmNHevTrR4MGutj5TtAl0V2mBS1btmTh3IVYbrCEp1qsSA1mh8yoqqrK1g1bMdBx15WTkxOPs7N1WufbRBkYEJeSwq5du7h3755WjwEICQnh77N/o6or0SQPI8hokMGkaZOkqf8N4uLimPDll1Swt2flyJE03bqVAwkJpGVncz0lhaNJSRxMTuZ0cjJ3U1N5lp1N0N27WC1cyOC2bfGtVInfV68muwj9XAmFU3Q61F9Dn6Ywv87y35YzbsI4MrpnQEUNF54NFnst8Db15vC+w5Qurfv19mq1GlsLC6Lk8rcep6wrQ6ysiG3aFCMjI+7cuUNMTAxVq1bF29sbb2/v3C12vLy8sLS0LFRdY74Yw9IbS1G00F333CuUYDHfgtvXblOpUiXp4iCnm/KXn3/mhxkz6K9Q8LVcXqAz/I4As6ytiS9blsV//EGzZs00HWpxVKSnMIsko2X79u2j78C+ZNTOyJl9pIlBjGiw3GWJp7Mnf5/8W6v7kr1L67p1GX/5Mu0li+BfVa2t2XnuHNWqVQMgKyuLqKiolxaa3rp1izt37mBra/vKTgeVK1fO08w8tVpN6fKlSe6fDGW0/VW9nfl+c6Z1n8aE8RMki+Hx48f069oVs9BQfk1Pp6oGyvwL+MLSksGjRzM9IEBsq/N2IskUVHFIMpCzSeKQj4dw/vp50pqmgQ8Fe+WTwOKsBab3TQkKDCIoKIgvv/ySwYMHazrkPPu/mTN5Mns2QXJpNwi9B7QoVYqop0/z1G34fKeD/261k5mZSZUqVV5KPNWqVcPb2zv3jS4kJISGbRuS9om0W+kAEAoNoxty5tgZSaoPCQmhQ4sWfJqczASFQqP970+Aj6yssG7ShD937MC8CE2XL2JEkimo4pJkntu3bx/fTP6Gh9EPkfnKUHgqoDxv/y5kAuFgE2qD6pGKMZ+NYeI3EylVqhQhISG0atWK48eP4+Pjo6Ov4mX379+nac2aRGZkSDqLZJqxMckjRzJv8eJClZOQkJDb2gkNDeXWrVuEhoYSGxuLp6cnXl5eGBoasvv+btI6FYEkkwnmC83JSM3Q+ZjcrVu3aNOoEfNSU+mrpQkg2cBQCwsS6tZl5+HDmJpKuJ1G0SWSTEEVtyTz3IULF1j5x0p27N5B0tMkzCuYk2WThcJMgQIFpkpTzDLNUMeryXqWhV9DP4YPGM6HH36IjY3NS2WtWLGCoKAgzp07V+hxhoJq7efH8IsX+UiS2kEGVLG0ZP/Zs9SoUUMrdWRkZBAaGkpoaCgrV6/kkPIQ6qZFY2adRZAF92/df2VfOW2Ki4ujfvXqBCQm0l/LMwyVQC9LS2w7d2b1xo1arUtPiSRTUMU1ybwoJiaGzp074+/vT+nSpVGpVFhZWeHg4ICXlxfVqlV75zqCQYMGYWlpyZIlS3QU9csOHTrE2O7duZ6WJklr5hdDQ460bMmOw7pZM9Ktdzd2KndCTZ1U906l/ihF8IZg/Pz8dFKfSqXCv1kzmly8yLQs3SxCzQQaWlkxdt48ho8cqZM69UiRTjJinYzEnJyciI+PZ9SoUQWeIbR48WL8/PxYt24dH32k+/ZE27ZtqVS7Nr+cOcPXOlwMCRAHzDYz49iCBTqrMyU1RWM7LGuEWc5iR135bdkyMq9fZ4qOEgyABbAhPZ0WX35Jh06dJNtpO6/S09M5e/Zsznhf6C2epjwlMyOTUnalcHFywdfHl7p160rWza1LIslITC6XEx8fX6iV+tbW1mzatIk2bdpQr149vLy8NBhh3vywYAEtGjbkfYUC7XRYvUoNDLOyYtTo0bkzynTB0NAwp/KiQo3OZl+lpKTw/fjxHExL0/luDz7AqKwsJo4dyx9btui49neTyWRs2rSJxSsWc+XiFSwqWiAvI0dW6p+d2U2ABDB8aIhVsBXqSDVGSiP69unLJyM+4b333pP6S9AKkWQkFhERQcWKFQv9JlGjRg2mTp1K7969OXfunE5n4ly6dIm+ffvSoHlzep4+zen0dJ0cxTzNxIQUT0+mzp6tg9r+VdqudE7/TRGhlqmxtbXVSV2L5s/HX6XS2R8S/zUhO5uq+/Zx9+5dPDw8JIriZdnZ2QTND2L2D7NROihJ802DLyHL5PUtPRUqUvmn5fkUVtxcwZp2a6hTsw6/BP5CnTp1dBi99okV/xILDw/X2K7Jo0ePxtfXl4k6OoJYrVbzyy+/0KFDB2bOnMmBAwfoPXo0nays0PY2lQuMjPizXDm27t+v872vvKt4Y5RcdNZtZMRkMHLkSIYMGUJAQABbt27lxo0byDU8rVylUrF43jz+l56u0XLzwxoYnp3NkvnzJYvhRefPn8ejmgfTV00nuVcyab3SoBo5rZa8KAOK5goyPs3gtNVpmrVtxqjRo5DJZNoMW6dES0Zi4eHhVKmiuZ00Fy9eTN26dWnRogXdu3fXWLn/lZCQwNChQ4mLi+PMmTO5X8PMOXOQyeU0X7GC3WlpaHodugqYamLCpvLlCT51Ks/HRGuSbzVfrPZYkUKKzut+RQqYW5oTFBREaGgoYWFhrF27ljt37vDgwQOcnJxyp157eXnh6emJp6cnFStWzPeU52PHjuGgw+7QNxmcnU3LNWsI/OWXnK5LicxfMJ9JUyeR2TYTtW8h+0+NQF1XTUa1DNYGr+VInSMc3HsQNzc3jcQqJZFkJBYeHo67u7vGyitVqhQbNmygc+fO1K5dWys/pMePH2fgwIF0796drVu3vrJ2ITAoiIqVKtFgyhQWZWTQQ0NTXB8Dg62seOLszKnTpylXrpxGys2vpk2bkv1pds64jNTzMx9A46aNadq0KU2bNn3l6f8uOt22bRvh4eFER0fj7Oz8yqLTGjVqYPeGTUb379zJBxK2Yp7zBEqr1Vy7do3atWtLEsOEbyew6PdFZAzO0OwkEAvI6JZB+Plw6jasy4nDJ/D19dVgBbonkozEwsPDX/vmUBh+fn6MHz+ePn36cPLkSY0tYFOpVAQGBhIUFMSKFSvo2LHjG68d++WXNGjcmGF9+rAqIYGA9PQC/wWcBiwyMmKumRlDRo5k7caN3LlzR7IkU7FiRezL2hP1OAqpjwW1jrCmx6c93vi8s7Pza2diyeVy7t27l5uALl26xB9//MH169cxNjZ+7XY7xw8cYK4WNx3Nj5ZZWZw4cUKSJDN1+lQWrVtE+oB00NLSNFV9FUmWSTRv05yLZy5q9A9RXRNJRmKa7i577quvvuLkyZNMmTKFOXPmFLq8uLg4Bg0aRHZ2NpcuXcrTFNIGDRpw9e5dFs2fT/tZs6ilVDIkNZWOvHt3fDVwFVhnasoaIyNat23L3z//TNWqVWnt789HH33E5cuXKVtWF1MMXjVy8EgC9gYgc5Gw71wGirsKevbsme9bzczM8PX1fe1fyZGRkYSFheV+HDt2jLCwMGIiI6muibg1oIZMxpWLF3Ve7+bNm5m7eC7pg7SXYJ5TV1eTLEumdfvWhFwJkWyxdWFJ3dh/q5KwGNPGxobHjx9rZXZQUlISderU4ZdffqFr164FLufgwYMMHTqUESNGMGXKlALNhJPJZGzZsoV1v/7K6UuXqGFuTvWsLKpkZlKKnHHSdOCxsTF3LC35OzubUqVK0XvwYAYPH07Vqi9vuzhhwgRu3LjBnj17dL6dCuQsoq3iVYXMTzLBSufVA2B80pgPyn/A5vXaP4o5MTERLxcXEorIgPRB4Md69Th44YLO6nz06BG+7/nmDO7rcJmOxW4LetbsyR8r/njTJUV6MaZIMhKKi4ujRo0aPHnyRGt1nD17lh49enD+/HkqVKiQr3sVCgWzZs1i9erVrF27VmPdepmZmfz+++8EBgbSo0sXkhMTyZbJsC5TBkdXV7y8valfvz4VK775fASFQkHLli3p3r07X3/9tUbiyq8Rn4xgbcha5G0l2Bw0AyyWWXDl7BWdrIuKiIigba1a3Nfhos+3OQ987unJudBQndXZvkt7jsqOktVUd4tQAZCD5TJLgncE06RJk9ddUaSTjOguk9D9+/c1Nn35TRo2bMhnn31G//79OXLkSJ5bIQ8ePKBfv344ODhw+fJlypTR3J72FhYWWFhY0KRJE34MCipQGcbGxvz555/4+fnRuHFjGjVqpLH48uqHWT+wyWsT8upycNRt3f/P3nmHRXF9f/gFEZBiF/vX3mKJAUEULCjRKBprEFHEEsEQI2qipmhEjYnGJHawYFRERYyKxtgQRMFKS0xEqr2jQel9fn9sQJYOOzOY/HifZx/duzv33ll258y955zP0T6nzdTJU2VLvM3KynqjLhaaQKaMhc0uX75MUHAQmTNlNjAAWpA2MI2P5n7E9eDr8o+vItV5MlWImDkypfHFF1+gra3N8uXLy/X+Q4cO0adPH2xsbDhy5IioBiaPmzdvqiyp0bJlS9zd3Zk4cSJ//y1lCdLiefLkCY3qNkLniA7IeO1Ru6FGvaf1WP2t6r628qKnp0fyG+L0B0gEahcSi5WSxcsXk2qSWmW35UI3gdsPb3P+/PmqmYAKVBuZKkQuI6Ours6ePXv4+eef8fX1LfF9aWlpODs789VXX3Hy5EmcnZ0l83eIYWQARowYwfvvv4+Dg4MIsyofgiCwbds2LC0tWbRoEWOHj0XnmI4iiUdqHoGOrw7HjxwvosgtJQ0bNiQhM5M3pSjyY+BJYiL29vasWLGCffv2ce3aNV68eCH6WE+fPuXSxUsIPapQS0gNUnqmsGHLm5GEWhHepBXw/ztu374tW3lZAwMD9uzZw6RJkwgJCSkiCx8REYGNjQ09e/YkJCQEPb2y4r9UQywjA7BmzRr69u2Lq6srTk5OovRZEs+ePWPGjBk8e/aMoKAg2rdvz7Rp03hg9YCrx6+SZpUmTvXT4ngMOgd12Ltrr+zSI5qamrRo2JC4J0/oLOvIxXNTXZ3+Fhb07dePuLg4jh07RlxcHLGxsaipqdGuXTvat29f5N/KlEM4cOAA6p3Vy5/FLxFCN4GTbifJzMz8V9XVqTYyVUhcXJysVS0HDhzIjBkzmDRpEr6+vvn+GQ8PDxYuXMgPP/zA5MmTJZ9HXllksVZxWlpaeHt75/tmpMqdOH36NB9++CGTJk3i8OHD1KypuOrUrFmTk8dOMmr8KC4evEjK+xKEt0aBzkkd9uzYw6hRo0TuvHwYm5hw+dixN8LIXNLXZ87YsYwYMaLIawkJCdy6dSv/cfnyZfbu3auUhJqX+1MwF6hVq1bF+iyPnjpKautUOU6rdHRB00CTq1evynZzKgbVRqYKkWu7rCAuLi68++67rF69mtmzZ+Po6Eh0dDSBgYGyCQ5GR0fTunXr/Iu0GLRr146NGzdibW1NaGioqCHh6enpLFq0iGPHjrFv375if+Da2tqcOHqChV8sZMvPW0gdkqpITVeVDNA6r4XWTS1mTFMUrqsqBo8axRl/f6YlV21F0BTgWno6/fv3L/b1evXqYWRkhJGRUZHXEhMT81c8cXFx/Pnnn/j4+BAbG0t8fDxt2rShXbt2dOjQIX/1ExocClMkPqlyktYsjStXrvyrjEx1CHMVkZ6eTr169UhOTpZNpj2Phw8f8vbbb6OtrY2VlRUbNmxAS0tLtvEPHjyIl5cXhw4dEr3vmTNnkpSUhJeXlyj9/fXXX0yaNIlOnTqxdetW6tWrV+Yxfn5+2H9oz0u9l6T0SYGKRY4ryAb1cHW0r2gzZuQYFs1fxJAhQ/jll19KCmOVnL///pt2zZtzJz2d4oVn5GEPcHDgQI6dOydqv+np6UoGKDY2lqioKAIvBZK1KOvNuFqGgm19W/bu2luw9Y0OYa52/FcRt2/fLnF5LiWCIPDLL7+QnZ1Neno6K1eulNXAgLj+mMJs3LiRyMhIdu7cqVI/eQrTgwYNYsGCBXh7e5fLwAAMHjyYuMg4vnP8joa/NaS2R23UrqrB8zIOzALiQPu0NrU21mJQ7iAunL6A505Punfvzo4dO7C1teX587I6kob69esz1NKSnVUoSgmwSU+PaXPmiN6vtrY2Xbt2ZdSoUcyfPx9XV1fc3NyoVb/Wm2FgAPTh3oN7VT2LClG9XVZFVMVWWXx8PPb29vz999+Eh4fj5uaGvb09x48flzVrPjIyEisrK0n61tbWxtvbm/79+9O7d+9KFTN7+vQp06ZNIyEhQUlhuiJoaWnxyexPcPrICT8/P3bt3YXvYV+SEpPQaqIFtUHQFBCyBWpm1STneQ7pL9Lp3KMzH7z/AXb77YpUSh0+fDg2NjZMmTKF48ePV4kC8ecrVjDS3x+H1FSpVVWK5SSQXL++bH6p5ORk1LTeFAsDaP1TmfVfRPVKpoqQIxGzIOfOneOdd96hQ4cOBAYG0qZNG7799ltevnzJ2rVrZZsHSLuSAejYsSPffvst1tbWpKZWzGF75MgR3n77bUxMTAgKClJZV65GjRoMGTKEfbv3Ef8wnul205k8ZDLun7uz9sO1bJm7hV3Ld3Hx1EUSXybyx9U/WPzV4hJLca9cuZLk5GS+//57leZVWXr27En/IUP4tgqimzKB+bq6rN68WTYDW6NGDXlC08tLLqL6MuWgeiVTRdy+fVsWZdU8aZht27axc+dOhg4dmv+ahoYGXl5eGBsb06dPH1my5nNzc4mJiaFjRzG84iUzffp0AgICmDt3Ltu2bSvz/WlpaXz++ef8+uuvHDp0SDK/x71793BwcKi0lpyGhgbe3t4YGRlhYmLCoEGDRJ5h2SxbswaTM2cYkZmJqYzjfqGlRdf+/YuNKJOK2rVrk5P+5iShkk6JpRjeVKpXMlWEVOrLBbl//z4WFhZcvHiRsLAwJQOTh9xZ83fv3qVhw4aS5+EAuLm5ERgYyN69e0t9X0hICD179iQhIYHr169L6liPjIxUWQqmSZMm7NmzBzs7O548eSLSzMpHWFgYVlZW9LWwwEZHh0cyjeutpsbhOnXYXsbfUmxatGhB+st0eFPsTAJ0aS/dLoAUVBsZGcjLC4mOjiY2NpbHjx9Lvl3m4+NDr169GDx4MKdPn6ZJk5LFteTMmpd6q6wgurq6eHt7M2/ePKKKEVLMc+4PHz4cFxcXPDw8JDV+mZmZPHz4UJS/+6BBg5g+fTq2trbkyCD3kvdZvffeeyxdupTjx4/j9NVXDNPVLTOeQVV8gTl6ehw7e7bcwRdiUbNmTRo3b1x20IZM6Cbo0rN7z6qeRoWo3i6TgAcPHvDrr78SEBBAWFgYt2/fLvZCMH78eHr37o2FhQUjR44UpQhXwZwOHx+fcm+ByZU1L6eRAejevTtLly7F2tqaq1evoq2tDShWeXZ2dtSoUYOwsDBatJC++lhsbCz/+9//RNtTX7ZsGUOHDmXlypV8/fXXovRZHPHx8UybNo1nz54pBUIs/PJLUlNSMF+/nhMpKUhxy7RPTY35urocOnmS7t2rpvCzxQAL9t7di9C4CmVl/kHtrlqJ+UFvKtUrGZEQBIETJ04wZMgQWrVqhZOTE97e3sTGxpZ4pxkTE4OnpyczZsygefPmjB49msDAwErPISoqij59+vDgwQPCwsIq5GPJy5pftmwZ4eHhlZ5DWdy8eZPOneXNGf/444/p2rUrixYtAuCXX36hV69eDBw4EF9fX1kMDCj+PmKqJqurq+Pp6cn27dtL1aRTBX9/f9555x3atWvHxYsXi2zxuqxcybzvv6ePjg7eIkYopgIfaWuzqH59zl6+XGW5QQBjRoxB/7Z8OnEl8gR0aupI7s8Um2ojIwJXrlzBxMQEKysrfH19yc2teDhKVlYWR48epX///gwePJgbN25U6HgPDw/Mzc2ZOnUqhw4dqtS2QsGs+cREacIk5V7J5OHq6sqxY8cYOnQoS5Ys4eTJk7i4uMgaBiy2kQFo3Lgxe/bsYerUqTx6JJ6HJDs7GxcXFyZPnsyOHTtYv359iSswRycnfjt/nuWtWjFCV5eKfXOVyQW8ga66ujwdOJB0NTUEoWpXEFZWVuQ8yoFXVToNNP/SZLr99KqdRCWoNjIqkJmZybx58zAzMyOktFKwakBtoAFQHyjjpijv7nHFihVlGqykpCTs7OxYtWoVfn5+ODs7V/AslLG2tsbCwkIy/0xUVFSVGJno6GhycnK4cOEChw4dkl1gEqQxMqDQpHN0dBTNP3P37l0GDBjA5cuXSwwYKUyvXr0Ij45msIsL79apwyg9PXyA8pZzewKsU1enm54e67p1Y9dvv3H45Ek2bdrEuHHjSK5CKRstLS1mTJ+B1jV5k5aVSIMa12vwkeNHVTeHSvIGZRkV5U2WlXn69CkjR44kuKTyr82Bt4DWQGOKer8yUfyybgM3gBKKYw4ZMoSDBw8Wq8UVFhaGjY0NpqamuLm5oasrTh3g9PR0TE1NmTNnDtOni3fn9PTpU7p27Sprxnp2djY//vgjGzZswM3NjejoaA4ePEhgYKDsSrZ9+/Zl9erVkuhO5ebmMnz4cIyNjVmxYkWl+/nll1/45JNP+Pzzz5kzZ06lknTT0tLw8vJiz+bNhPz5J71r1aJnaipts7JoiELMOBXF1z9KR4crGhrcz85m1IgRTHVyYsCAAUr92dvbo6mpyfbt2yt9Xqry+PFj2nduT+r0VKgr//iafppM6DChpBLMb7SsTLWRqQR3797F0tKS2NjYoi92BfpR8UqJ94ALQDFdGhoacvr0aRo2bAgo/D8bNmxg5cqVrF+/nokTJ1ZwsLKJjo7G3Nycs2fP0qNHD1H6DAgI4Ouvv+bChQui9FcWd+/exc7ODi0tLXbv3k2zZs0QBIExY8bQuXNnVq1aJcs88mjYsCEREREYGBhI0n98fDxGRkZs27aN9957r0LH5uUJnT59mv3794umZJ2YmEhQUBCffvopPTt2JCcjg+zMTGrp6WHQogWdevTA0NAQIyOjEiWWUlJS6NWrF0uWLMHW1laUeVWG5d8s5/sD35MyPkXegZ+CnpcecZFxJX13qo1MZXkTjcyzZ88wNzcnJiZG+YV6wCgUKxdViASOA4V2B0xMTPDz8yMnJ4eZM2dy+/ZtvLy8JM212blzJz/++CPXrl1DR0d1ERE3Nzd+//13tm7dKsLsSufgwYPMmTOHuXPnsmDBAiXfS0JCAoaGhmzYsIGRI0dKPheA58+f06FDBxISEiQd58qVK16lXZYAACAASURBVIwePZqrV6+WqBpQmLCwMCZOnEjv3r1xdXWVJIy7bt263L59u9IhyH/++SeDBw/m4sWLsqmFF+bSpUuMHjuav43/JqeXTIkzmaCzSwfX71yxn1JiWZA32shU+2QqQHZ2NmPHji1qYDoCjqhuYAA6A7OAlsrN165d4/3338fQ0JCmTZsWG+kjNtOmTcPIyEhlP08ekZGRkvtjEhMTsbOzw8XFhZMnT7Jo0aIizv169erh4eGBo6OjqM7y0oiKipIlqs7U1JS5c+diY2NDVlbpdSwL575IlSf09OlTatasqVKOS/fu3fnqq6+YNGkSmZky1rrm9ec0evRolny1BN3LusXuOIhOLugc02Hs0LGlGZg3nmojUwGWLl3KxYsXlRu7AzaAtogD6aGoX1HIhpw7d45hw4axfv162fwJrq6uXLx4EU9PT5X7kjqy7PLlyxgaGqKjo0NwcDA9e5actNavXz+cnJxkS2aUyulfHIsWLaJx48YsXry4xPfEx8czcuRI9u3bx+XLlyXdhoqJiRFl9TFnzhyaNWvGkiVLRJhV+Xj+/Hn+53TlyhU++eQTTh8/je5vuhAn4cA5UOtYLUyamvDz1p8lHEh6qo1MOfnzzz+LihK2B0YjzadYE5gAFKoW6+HhIdvdN7zOmp8/fz6RkZEq9SWVkckLtx03bhzr1q1j69at5dre+/LLL9HU1FTJUV5e5DQyampq7Ny5k4MHD+Lj41Pk9YK5L2KIgJZFTEwM7du3V7mfvPM6cOAAx48fF2FmpRMQEKD0OeUpNZiamuL7my+1T9RGPVSCH38y6HrpMvB/Azl57OS/ThCzMNVGppzMnz+f7Ozs1w11gLFIV88dQBOwRmmVlJSUxJdffinhoEXp1q0by5Ytw9ramrS0tGLfk5mZydmzZ1n8+ecMNzOjY9Om1NfVRVNDg/o6OrRu1Ij0pCTWff89x44dEy0k9fbt2wwYMIArV64QGhpaIfHEvGRGd3d3zp49K8p8SkIMzbKKUK9ePby8vJg1axa3b98GKpb7IiaxsbGi+VHytjodHBx4/PixKH0WJicnBxcXFyZOnMj27duL/Zz69OlDyOUQ2sW1Q+eIDiSJNHgE6OzUwdnGmeNHjucrVPybqTYy5eDq1atFL0JWiF/HvTjqAYOVmzw9PYuPbJOQjz76iO7du7Nw4UKl9lu3bjHHwYEWDRrgMn48NX74AadLl/jtyRPiUlNJzckhLi2NgOfP2fvqFY3d3Ng8ZQotGzViyvjxKqkLeHh4YGJigrW1NSdPnqRp06ZlH1QIAwMD9uzZg729vaRik3KuZPIwMTFh4cKF2NjYEBsbW+HcF7EQa7ssj/79+zNz5kwmTZpUqcTn0njw4AGDBg0iMDCQsLCwUqP0OnTowPXQ68wZMQcddx1qnq+piM2uDHdAb78ebf5ow2mf06xcvrJK6gVJwX/jLCRmw4YNyg3tEKd+e3npBRSIXMzJyZElQqswW7Zs4cyZM3h5efHixQtmTp5M727dqL1rF8HJyQS9esWynBxGAB1Q2EeNf/5tDQwBFuXmcvrVK2LS03n7yBHeNzdnzJAh3Llzp9zzePnyJba2tqxZsyY/AVWVomsWFhZMmzaNqVOnin7RAsUK4u7du5JvSxXHvHnzUFNTo2fPnlhbW3Pq1KlSxVKlIDY2VpTtsoIsXboUNTU11qxZI1qfv/76K7169cLCwgJfX99y3bRoa2vz3Tff8Vf4X9i2tUXbVRu9o3rwJ0UiRJXIBR5CjcAa6G/Xp/n55mxYtIHovxSpA/8lqkOYyyAxMZGmTZsqF7+aApKoAZbGH8CR10+bNWvGvXv3ZC/fHBISwujRo8lJSsImI4NlGRkUTRMtPxnATxoa/KSpycoff8Rh1qxS3+/v78/UqVMZM2YM33//vWilo3NychgyZAhDhgzJ1zgTi+joaIYNG0ZcnJSe4qLk5b6cPHmStLQ01q1bx7hx42SdAyhqsty7d4+6dcXNYnzw4AHGxsYcPnxYpVpIWVlZrFy5kl27drF3716VdNJevnzJoUOH8DrixeXAy+So5VCrSS1yNXNRr6mOkC6Qm5RL6rNUmrdqzvChw5k0YRJ9+/ZV5UbpjQ5hrlZhLgN/f39lA1MXkL7WWFG6oqg9m654+ujRI8LDw+nVq5es0zj166/USEjAOzWVviL0pwV8kZ3NuOxsrD/7jKsXLrDVwwMNDeWvZt6FYPv27bi7uzNs2DARRn9NjRo12L17N8bGxpibm4sqyFgVW2UFc1/Cw8O5efMmVlZWvPPOO7JWZH3y5Ana2tqiGxhQ1HrJq4UUFhZG/fr1K9zHnTt3mDhxIk2aNKl0HwWpW7cuM2bMYMaMGXh5ebFv3z4WLFhAcnIyqamp1KlTBwMDAzp27Pif8LeUh+rtsjI4f/68ckMXqmb9p0GxIc1y8uns2Rz+8UeuiWRgCtIRuJSSwtNjx/jAykopyCIyMhJTU1OuX7/O9evXRTcwebRo0YIdO3Zga2vLixcvROtXTiNTXO6Lrq5ufsb82LFjSwzekAKx/TGFsbKyYuTIkTg6Olb42F9++QVTU1NsbGw4cuSIygamMDdu3MDIyIh+/foxbNgwxo0bh6WlJT169Ph/Y2Cg2siUye+//67cUL4kamlorfz0jz/+kG3ob5ctw3/XLs6lpNBYojF0AJ+UFHKCgpg5eTKgcO7369ePKVOmcPjwYRo0aCDR6AqGDx/O+PHjsbe3F039Vy4jU1buy+zZs+nWrRufffaZ5HPJQ6zw5dL44YcfiIuLw93dvVzvT0tLw9nZmcWLF3Pq1CnRko0LExERwVtvvSVJ3/8mqo1MGURHRys3SCM7VT4KjV1ctUcpOH36NFu+/56TKSlIXV1cA/BKTeX68eOY9u7Npk2buHTpkmQXguJYtWoVf//9Nxs3bhSlPzmMTHlzX7Zs2YK/v3+ZJanFQszw5ZLQ0tLiwIEDfPnll1y/fr3U90ZERGBiYkJCQkJ+2W2puHHjBl27dpWs/38L1T6ZMiiiGCz1VbY0Co0dHx8v+ZAvX75kuo0N+1NTK6z5WVl0gAMpKZhcv87FsDDZtapq1qyJl5cXJiYm9O7dm969e5fruJSUFOLi4nj58iWZmZloampSt25dSXNksrOz+eabb9i2bRs7d+4sMzRZT08Pb29vLC0tMTIyklzqJiYmhvHjx0s6BijCiVevXo2trS3BwcHUqlWryHs8PDxYuHAhP/zwA5P/WSlLRUZGBvfu3ZN8FfdvoNrIlEJGRoayTpIG0iZflkWhQKqkJLEywErm64ULGZWejtwFX9sDS7KymDdzJqeCgmQeHf73v/+xefNmJk2aRGhoKHXqFL27SE5O5siRI/j6+hIYGFhqGHbfvn3p168flpaWjBkzptjSDRXl7t272NraoqenR3h4OI0bl28js3v37qxYsQJra2uuXLkiivhpSUgRvlwS06ZNw8/Pj08//RRXV9f89sTERBwdHYmOjiYwMFCWm5aoqCjatm0rezmJN5Hq7bJS0NDQUA4rFD+FomIUGl/qbO2HDx+yz9OTFenpko5TEp/k5BD7++9F9eJkYty4cQwZMoSZM2cqtcfExDBz5kyaNGnClClT2LNnT5l5Pnfv3sXT05OpU6fStGlTZsyYodJ2Z57TOi/3pbwGJg8HBwd69uzJ3LlzKz2H8hAXFyfr3fyWLVvw8/PDy8sLgODgYAwNDTEwMODSpUuyrYqr/TGvqTYypVCjRg3lu7xcyl/qTwoKBQXp60tbd3zjjz9in5uLtK72ktEAFqam8oOLSxXNANauXUtsbCzbtm0jISGBjz76iC5duuDu7k5KSuXqiqSmpvLzzz/z1ltv4eDgUKFItjyndV4JaVUSUd3c3Lh48SIeHsUWwlKZx48fU6tWrWJXgVKhp6fHvn37cHZ2ZunSpVhZWfHdd9+xfv160XKqykO1P+Y11cmYZdC5c2flO05HiohWykY0sO/1U21tbczMzGjfvj3t27enQ4cOdOjQgXbt2qn8g8rNzaV1o0ac/vtv5C+W/JoUoKW2NtH37+cXbZOb2NhYevXqhYaGRukGoQaKPCq9f/6fiyLrOwEoRejZwMCA3bt3l1lorGDui1iVUG/cuIGFhQUBAQGi33lfuHCBL7/8kiCZtzvj4+Pp378/Dx48IKwKfHqgWAXb2NjwwQcfyDFcdTLmv5kiRuYRVWdkCokvW1tbY2dnx61bt7h16xbXrl3j1q1b3Lx5Ey0tLd566y26du1K27Zt8x+dO3cu18UpODiYetnZVWpgAHQBy5o1OXnyJHZ2dlUyh8OHD5OYmFh8SHNdoAcKJ1JzivfZ/SMhQixwHYXRKcCzZ88YPnw4K1as4KuvvipyuJSVULt27cq6desYO3YswcHBoq6O5QhfLoy/vz9Tpkxh3LhxxMXFsXv3br755htZ5wDVK5mCVBuZMujduzdHjx593XAbMKqiydxSfjp48GAsLS2LfeujR4+IiIjIN0AHDx7k1q1bREREoK2tXawB6tKlS/72YIC/P4MzqnJv8DWDk5I4d/x4lRiZRYsWFS3xANAQGIhCiaGs/QB1FEXoWv5zzE3gHFAgOFAQBBYvXkx8fDzr1q3Lb4+Pj2fatGnEx8dz+fJlSfTPbG1t8fX1xdHRkX379pV9QDmRI3w5j4JRdrt27WLIkCHEx8djaGjIwIEDS/ydSEF1ZJky1UamDAYNGqTcEI3CLyPf9q6CV8D910/V1NSKzq0AzZo1o1mzZkXa88QaY2NjiYmJISYmhgsXLhATE8P9+/dp2rQp7du3J+HJE+a+IUbGCNgWGir7uCtXrixqYNSB/kA/KhdpqAa8BXQCLgIBKAV0rF+/njp16rBs2TL8/f2xt7dn7NixHDlyRNJADzc3N/r06cPPP//M9OnTRekzJiYGa2trUfoqjfv372Nra4u2tjZhYWH5AqCNGjXC09MTW1tbQkNDZRMGrY4sU6bayJSBiYkJrVu3fh09lAn8DpQvdUI8goECuzV9+vShRYsWFe5GQ0ODdu3a0a5duyI5FdnZ2dy5c4fY2FjmzZwpq9B0aXQCoh88kHXMo0ePFq3AqI2ikJwY2nU1UBirVoAXSkEdy5cv5+bNmwQFBZUr90UMtLW18fb2xtzcHENDQ1GSFOUIXz569CgODg589NFHfP3110Xk8QcMGIC9vT3Tpk3jxIkTKql1l5fqyDJlqqPLykBNTY0pU6YoN14CSi+fLi7JKIxMAeztxa/5raGhQfv27XnvvffIzMiosqiywugDmdnZstV2f/jwIdOmTVP2wdQCpiK+OGorYBpFahP5+Phw4sQJWeu+dOjQgQ0bNmBtbU1iYqJKfQmCQFxcnGTlDTIyMnB2dsbZ2ZkjR47g4uJSYv2V5cuXk5SUxNq1ayWZS2Gq/THKVBuZcjB79mzlUOZXwAUZJ+CLUuh006ZNixo+kUnLzKRoznTVoauhoayGLSHz5s0jIaGAd74GMBEkkzwwAGxR2lfIyspi2bJlEg1YMhMmTMDCwqJIblBFefz4Mbq6upKEL0dFRWFqasqDBw8IDw+nb9/S5Vo1NDTYv38/33//PVeuXBF9PoWpXskoU21kykGjRo345JNPlBsvAndkGPwvFLVkCvDll19KruJaS1OzcFpOlZKSnS1pZnoeFy9e5ODBg8qN7wL/k3jgFiiquhXAx8eHgIAAiQcuyvr164mNjWXLli2lvi8nJ4eQkBC2b9/OZ87OTP/gA6zfe48pY8fi/NFH6OvrFy2VoSIeHh6Ym5szdepUDh06RL169cp1XMuWLdm8eTOTJ09WeZVWFtUrGWWq82TKSWpqKm+99RZ379593agDTEcRaSQFD4HdKPxA/9C9e3fCwsKK1FsRG+OOHXGNicFY0lHKRxLQTEuLJBmUB0aMGMFvv/32uqEFMAN5fikCsBO497pp8ODBRUt/y0BsbCxmZmacPHkSQ0NDpdcCAgLY5erKsd9+o4WGBr1zcuiYkkIjFCHnGSiitKO1tfldS4vf09LoZ2LClI8/Zty4cZUKYEhKSsLJyYnQ0FC8vLzo0aNHpc5r1qxZJCQkcODAgUodXxYZGRnUq1ePly9fyun4f6PzZKpXMuVER0cHd3d35X3fVGAPSqGoonEf8ETJwGhra7Nnzx7JDQxA+44diZF8lPIRDejp6NC6dWuGDRvGZ599xo4dO7hy5QqvXr0SbZzbt29z4sQJ5cZ3ke9WTI0iqxk/Pz/Z1LYL0r59ezZt2sSECRPyP2NfX196v/UWH48cyTuHDnEzNZXriYlsT0lhAQqX1QfAZOATYGN6OoGvXvE0MxO7oCB2ODjQvlkztrq5kZNTSnZqIcLDwzEyMkJNTY3g4OBKGxiAdevWERUVxa5duyrdR2lUR5YVpdrIVABLS0uWLl2q3PgK+BkQ8zrwO+BBERmZTZs28fbbb4s4UMm83bcvIW/IDyUEeM/SkkuXLvHpp5/SsmVLrl27xmeffUbLli2pX78+5ubmODo6sn79es6ePcvTp08rPI6np6eys78F8tcPakGRukGenp4yT0LBBx98wHvvvcfEiROxef99Zo0Zw8KbN/kzORnn3Nxy1xXSQeHS8k1K4pfnz9m/cCGm3boRERFR5rEeHh4MGzYMFxeX/AJsqqCtrc3evXtZuHAhkZGRKvVVHNX+mKJUhzBXkCVLlvDgwQO2b9/+ujEN2A+8A1ii2DOoDC9RbA7eLPrS0qVLmTFjRiU7rjgWgwfjuHo1yBTRVRr++vpYjRiRn/tTOLGuYOLpjRs3OH78ONevXycrKys/6TTv365du9K0afGSDadOnVJueEeqMyqDnij5+06ePMmKFSuqZCqTJ09mxJAh2GVk8FdGhsrBIMbAueRkfo6OZqCJCeu3bmXipElF3vfq1StmzpzJ7du3CQoKEjUUumvXrnzzzTdYW1tz9erVYssCVJZqf0xRqn0ylSA3N5c5c+awefPmoi9qosgeNAQalbPDR0AoihVMMbsIy5cvL5qzITG5ubm0atgQ34QEpK04UjqqaJclJCRw48YNIiIi8v/966+/yMjIoG3btkoGqE2bNhgaGpKVVSA2/VMU8dNykwqsIT8vqkaNGjx//py6devKOo3z589jPWIErikpjBOpSmhB/gJG6Ogwb9kynAtU67x69Sq2traMGDGCNWvWSLb1ZGtrS8OGDdmwYYNofcqsWZbHG+2TqV7JVAJ1dXU2bdpE+/btWbRokXL+RiZw+Z9HI6AtihDVuihyLQQUK5+XwGMUMjV/Fz+OmpoaGzZsYPbs2ZKdS0moq6tja2+Pu6srP1Thamafmhr9zcwqJY5Zr149zM3NMTc3V2p/8uQJN27c4ObNm9y4cYNTp07x+++/KxuYBlSNgQHF/pIB8M+OX05ODhEREWWG6opJSEgI1lZWeKWkYCHRGN2AoNRULFxc0NHX50MHBzZs2MDq1avZvn07VlZWEo2swM3NjXfeeYfBgwczatQoUfqsXskUpXoloyLBwcF8+OGHZZZ9rShmZmb07NmTiIgIzp49W2KimZQ8ePCAnh07EpWWViWJmdlAZ11ddp06VcRQiI2Xl5ey8GRnwEbSIUvnFxS3+v+wc+dOpk6dKsvQT58+xahLF9xevmSkBCuYwsQB/XR0aP3222hra+Pp6VmsJJIUBAcHM3LkSK5evUqrVqo54Koosgze8JVMteNfRYyNjQkNDWXjxo2VknkpTIcOHfDw8CAwMJANGzagpqbGDz/8IMJMK06LFi2YOGkSSyTOySmJjTVq0L5nT8kNDMDffxdaTqpeuFI1Co1fkZozqmI/fjwzkpNlMTAA7YCdqanciojg4MGDshkYUPx+586di52dXbkj3gRB4O7du4SEhHD27Fn8/PwIDQ0lKCioOrKsGKqNjAhoaGgwe/ZsYmNj2bNnD0OGDKlQmLGWlhajRo3i0KFD3Lx5Ezs7O9TU1FBXV2f37t2sXbuWy5cvS3gGJbNizRp8tLUJlHncOOA7LS02/PyzLOMlJycrN0hbdLRsCl2nisxPIvbv28ej8HCWZMmpmwRDgTHp6SxdtEjWcQEWLlyItrZ2qcEVwcHBLF68GHNzc/T09GjdujXGxsa8++67WFpa0qtXLywtLYmKimLQoEGsWLGCGzduyHgWby7V22USkZSUxPnz59mwYQMPHjygefPmJCQkoK6uTp06dWjevDmdOnWiV69emJmZlZrN/ttvv+Hs7ExYWJgoteErQnx8PMOHD+f+X3/xR3p6ucNWVSEN6Kery7Rvv+XjOXNkGFGRPzFv3rzXDX1QXPmqCj8oaNm/++47Pv/8c0mHzM7OpmPz5ux59gwzSUcqngSgU61aXLp+XXaZ/GfPnmFoaIiHh0e+unlGRgYeHh6sW7euXOHWxWFsbMz8+fP54IMPqFGjMrLd5aJ6u+z/I/r6+owYMYKWLVsyb948fH19CQkJ4dq1a/j6+rJr1y6++OIL3n333TLlUqysrBg6dKjKelIVJTAwEENDQ/r27YvTggUM19NDWkEOhR/GRkeHrsOHy2ZggKLGWx6ZtJIpNL4cNxdeXl60SU2tEgMDUA9wyspizfLlso9tYGDAjh07mDp1Ks+fP+fw4cN07NgRBweHShsYUKyAJk6cSI8ePTh37pyIM/73UL2SkZh+/frxzTffMGDAAJX6ycjIoHfv3sydO1dyB3BeJcbVq1ezY8cOhg0bBsC8jz4icM8eTqSkYCDBuKkoDIxgasrhU6ckrZ9SGH9/fwYPHvy6oQXwoWzDF2UXSrkyjRs3pkePHnTo0IGOHTvSsWNHOnToQOvWrUVTgLAwMsI5LIzRovRWOZ4BXXR0uB8fL4tWXWGcnZ3x9vbmyZMnpb9RB6gD+YlDqSgiRstQPnJ0dGTdunViaw++0SuZ6hBmiYmOjqZjR9Urs2hpabFv3z4GDhyIqakpnTtLk73y4sULpkyZwvPnz7l06RKtW7fOf22tmxvLGzTAZO1a9qem0kfEcaOBCbq6vDNyJFs9PGQ1MEDRz/MpimVVVfxCclGEtxfgyJEjpKSk5Fc6PXv2LBERETx69IhmzZrlVzctWPG0devW5Y5KfPLkCX9GRDBc/LOpEAaAsYYGJ0+eZNy4cbKOHR0dza+//lq8gakBdEBRCbU1JYe3v0SRlnADRSXbXOWXt27dyrVr1/jtt99KTAr+r1FtZCTk1atXpKWliVaR76233srPVL527ZroSszBwcHY2NgwYsQIfHx8ir3Qf/3NNxiamjJ20iQmZmTgkpGhUiBWJrBWQ4MfNDXp9PbbOH/+uewGBhSVRFu1avVaADULhVBlW9mnAg8oUtrB1NS02IJbWVlZ3L9/P1/tICIiguPHj3Pr1q18A1Rcqe02bdoo9Xfu3DkGaGqiKYMIaVkMSUrC/8QJWY3MH3/8wZAhQ3j27JnyCzUAE6Av5cubqotCKeIdFPlvgSiSrAsE6oWHh2NmZoa/v7/STdx/lertMgm5du0aTk5OhISEiNqvra0tjRs3Fq0IU9722MqVK3FzcyvXj/v58+d8MXcuRw8fxikriw+zs6lIAPffwB51dX7U1sbIzIyftm7Nj+AJDQ1FX1/+TMjp06ezc+fO1w3vAOLk6FWM31AqUjdp0qRK6ZclJSXll9iOiYkhKioq//+5ublKW29Rf/6J4aFDfCpT2HJpXAOc2rcnJEYeida4uDjMzc2LrmCaA2NQXWX9IXAEeK7c3LFjR4KCgmjUqLzSICXyRm+XVRsZCfH09OTEiRPs27dP1H5fvnyJoaEh69at4/3331epr8TERGbMmMGdO3fw9vamTZuKlX6MjY3lp2+/5aC3N100NLBMTsYkJ4dOKH6b+iikYRJQbImFqanhp6/PlcxMhg8dyvwlSzAyMsrvb9q0adSoUQN3d3eVzqsynDlzRrkSpQYwF9CTcRJpwDqUVjK//vorI0aMEHWYFy9eEB0dTXR0NDExMZw+fBiXmzeRNse+fCQCLbS0eJWWJnm55NTUVExMTIqGGxsCVihWMmKQARymiJDuwIEDOXv2rKqRZ9VGprL8241MXs1xFxcX0fu+du0aY8aMITg4uNLJa6GhoVhbW2NpacnGjRtVSiLLyMggICCAc2fOEHDmDA8ePiQpLY3E9HR0NTWpo6NDpzZt6GZszKBhwxg8eHCxq5WUlBR69erFkiVLsLW1rfR8KkNOTg7t2rVTrhkkdyjzWSDo9dOmTZty9+5dybcQDdu1Y8etW1WmCVqY2pqaPHrxAj09aS28o6Mj27ZtU27sg6LkgthXx1wUK5o/lZtF0CZ8o41MdQizhERHR9OhQwdJ+jYxMcHJyQlbW9sK1ebIY9u2bQwbNoxVq1axdetWlbOUtbS0GDp0KKt+/JH/denCD66uvEpLQxAEkjMyeJiQgH9YGBu2bmX06NElbofp6uri7e3Np59+yu3bt1WaU0WpUaMGn376qXLjNfI1xCTnGQrNuwJ89tlnsvioklNTZV2wlYW+hobkFSyDgoKU1dQBeiCNgQHF1XY0Rfx8K1euJEamrcGqoNrISIhYkWUl8cUXX6ChocHq1avLfUxSUhI2NjZs3bqVy5cvS6IWGxMTo5Jx7d69O1988QUTJkxQFh+VgQ8//FDZGZuDQkdM6mlk/TNOgfuFli1b4ujoKPHACjRq1CBblpHKR5YgSG5c58+fr1w/qBEwEmn3d2oA41AKIsjIyGBRFSgdyEW1kZEIQRCIjY2VbCUDCqXkvXv34urqyqVLl8p8f3h4OIaGhmhqahIUFES7du0kmVdcXJzKGduffPIJzZo1K1okTmJq1apVVPo9HjhIsWUYRCEXhYEpFNi0bt06lYt0lZfaenqIV2NUNQQgKStL0gRUX19fgoODlRtHIo+ckC5FtmB9fHz466+/in37v51qIyMRjx49QkdHR/IaII0bLa2jrgAAIABJREFUN2b79u1MnDixqMhjAfIqDK5YsQIPDw9RCzUV5PHjx9SqVYs6deqo1I+amho7d+7Ey8sLX19fkWZXPhISEop+PjHAARQrDjHJBg5RxCFsY2PD2LFjRR6sZFq3a4e8m5Ml8xDQqlmTuXPnsnHjRvz8/Hj8+HGZx1UEV1dX5Ya3gP+JOkTpdIOC4ZiCIODm5ibjBOSj2shIhNRbZQUZNmwYo0ePxsHBochrycnJ2NrasnbtWoKCgrCxkVa/XtWtsoLUq1eP3bt3Y29vX3YGtgi8fPkSa2trNm7cyLVr15Si3gBFeNzPlFj/p8Ik/NNfocCmnj17yh5d19XYmOsiKQeoyp9A57Zt6d69Ozdv3mTlypX07NmT+vXrY2ZmhoODA2vXruX06dPcu3evwv2/ePGCEydOKDfKV6rnNYX0ew4cOKBc0+g/QrWRkQg5jQzA999/z61bt5QuTjdv3sTU1BQNDQ0uXrwoi+igmEYGoH///nz44YdMnTpVef9cZM6fP0+PHj1o2rQpFy9epFu3bpw4caLo3/AxsAVFBFhlnRjZwCXADUVV1AK0bduWEydOyLZNlke/gQO5IPOYJRFQsyZW48fj5OSEq6sr/v7+PH36lFu3brFhwwbMzc15+vQpmzZtwsLCglq1atG1a1esra1xcXHh4MGD3Lhxg9zc3GL7P3v2rLKvrxFUKMlLLDqikKf5hxcvXnD16tUqmIi0vBm3Lv9BxL7YloWWlhbe3t707duX3r17Ex4ezsKFC/npp59kDQWOjY0V3Zi5uLhgaWnJTz/9VDT6S0VycnJYsWIFW7duZceOHQwf/lpYxcDAgPPnzzN8+HDCw8NfH5SJItT4Cops8B4oMr3L4hVwHUWiZTGBU927d+fkyZNVIjfSp08fIrOyeAxUtdjJUW1t9hRTFbNu3boYGRkVWWG+evWK2NjYfMWDPCNz69Yt2rZtm19iO+/fgIAA5Y47SXgypZEnVfPH66aAgABZ6ifJSbWRkYjo6GjMzOTVs23fvj0rVqxgwIABNG7cmLNnz9KtWzdZ5xATE4O1tbWofaqrq+Ph4YGxsTFmZmaYmpqK0u+DBw+YNGkSGhoahIaGFptv1KRJE86fP4+DgwNeXl7KLyYD/v88DFDs6eeVbVZH4dBPRpHpfZ9SQ6GbN29OYGCgyr6syqKlpcXYMWPYs38/C0tYAcjBZYDatTE2Ni73MXXq1CnW+CQnJ3Pz5k0iIiKIiIjAw8ODiIgI7ty5o9yBagUxVaMVSkbmzz//LPGt/1aqt8skQu7tMoDIyEg2b95M3bp16d+/v+wGBqRbwbVo0QJXV1cmT54sSv7EsWPH6NWrFxYWFvj6+paa0Kqvr8/+/fvZtWtXyRIgz4AQFKnDvwDe//x76p/2EgxMgwYN2Lp1KwYGBhw8eFCFM1Kd2QsWsE5LqywhYUlZravLxwsWiNKXnp4exsbG2Nvbs3r1an799Vfi4uJo2LCQTozKqi4qUGjs/2K+TLWRkYDs7Gzu3r0rWYhwcXh6etKvXz8++eQTrl+/TkBAAD4+PrKND4oImVu3bknm+xkzZgxDhgxRqa5ORkYGzs7OzJkzh0OHDuHi4lJupWJ7e3siIyNZtGiRytpqenp6LFiwgKioKBwcHPD29ubLL7/k+vXrKvWrCm+//TbGffrgKl1xrVK5AoRoavJhMQEsYpKQkKDcUJWltguN/fz58+Lf9y+m2shIwO3bt2natKnoKsnFkZ6ejrOzM9988w3+/v7MnDkTPT099u7di6Ojo7JEisQ8evQIPT09ScUtf/rpJ6Kioti9e3eFj42OjqZPnz7cv3+fsLCwSm1n1q9fn1WrVnHv3j3c3NwwNzcvdz2XGjVqYGZmxqZNm7h79y7ff/89DRo0ABRbnatXr8bW1pa0tLQKz0ssfty6lVVaWlQ8Zks1MoGPdHVZs2mTZOH1oLjJUIrg0qBqr4JVVGZbTqp9MhIg11ZZdHQ01tbWdO/enZCQECWdp169ejF//nzs7Ow4d+6clKVf85Ej2EFbWzu/rk7v3r3LXVfHw8ODTz/9lMWLF+Ps7KzyPOrWrcusWbOYNWsWSUlJnDt3jg8++IAPP/yQhIQEMjMzqVmzJvXr18+v82JmZlZqguG0adPw8/NjwYIFbNq0SeU5VoY6depg3K8fE4OCCEhJkSU3EeBzLS1a9enDRImDVGrWrImamtrrSMUcFNmfVaXiWCjBV0tLq2rmISHVRkYC5DAyhw8fxsnJiS+++KLEi+aCBQvw8/Nj5cqVfP3115LOB+SLqKtIXZ2kpCQ+/vhjgoODOXv2LG+//bbo89HX16dly5Z06dKFzZs3q9TXli1bMDIywsfHh9Gj5a1R6efnh729Pfb29vyVnY3DpUv8nJYm+fXXXV2dX+vX55q3t8QjKYJI9PT0SEpKUjQIKBSSpd90KJ4qKLMtN9XbZRIg5cU2z6fwxRdfcPr06VLvytXV1fH09GTbtm2y1BePiYmRJRcHwMHBgW7duvH555+X+J6wsLD8iKOQkBBJDEwekZGRdOqkeixs3lbnrFmzZNvqzM7OxsXFBTs7O9zd3Vm5ciX7jx0jplMnPtbWLlzcUVR2q6uztHZtTl64QL169SQc6TWtWhUKJ3shy7DFUyix979YxKx6JVMJHj9+TEBAAH/88QdRUVE8e/aMtLQ01NXV0dfXJzIyktTUVM6cOYOZmZloiXV3795lwoQJNGvWjKtXr5ZLssbAwIAdO3YwdepUwsLC8n0AUhATE8OkSZMk678wrq6uGBoaYmFhwahRr6uLFSzCtn79eiZOnCj5XKKiokQriS3nVue9e/eYNGkS2trahIWF5Vdx1dHR4eSFC4wdOpQxf/zB7tTUcqUClZccwKVmTfbWr4//+fOy3ZyAotS2kk7YQxQFyqqCB8pPpSqrXpVUr2TKyatXr9i4cSPGxsY0a9YMW1tbVq9ejY+PD5cuXSI8PJzQ0FACAgJ48uQJu3fvZujQodSvX58xY8Zw9OjREjOQy8PRo0cxNTVl4sSJHD58uEKaaEOHDuWDDz5QKSqrPEgtCFqYunXr4uXlhaOjY768yPPnzxk1ahSenp5cvnxZFgMDCiMjxkomjwULFlC7dm1WrFghWp+F8fHxwdjYmMGDB3P69OkiZcL19fX5LSCANlOmYKiryymRxr0J9NPR4ZeWLbly/bqon1t56NOnj3JDnKzDlzp2375VoW8jLdVGpgySk5NZsmQJrVq1Ys6cORUupZyZmZm/v961a1f2799fIXmU7OxsPv/8c5ydnfHx8am00/q7777j0aNHkonw5YUvyxm2DYq6OnPmzMm/6zc0NKRNmzZcvHhR1rlERkaKeheqpqbGzz//jLu7O/7+/qL1C68jEufNm4ePj0+pYdyampqsc3PD7dAhPmnalJF6elyp5Lh3gY+1tRmgp8f4ZcvI1dAomn0vA4MHD1ZuiKWIb0QWnqOQKfoHdXV1LCwsqmAi0lJdGbMUjh8/jpOTE/fv3xe134EDB+Lu7l7mRfDevXvY2NhgYGDAzp07Vd6zjouLo0+fPvj6+orun7h//z6mpqY8fPhQ1H7LQ1ZWFp07d+bZs2d4e3szbNgwWccXBAF9fX2ePHkieiXHM2fO8OGHHxIeHi7KVmdkZCQ2NjZ06NCB7du3V2hFnJGRwc87dvDD8uXop6YyMSUFy9xcelJyleJYFIIIv9SuTWh2NrOcnJi3aBENGzYkNDSU4cOHExISQsuWLVU+t4rQpUsXIiMjXzcMBvrJOgX4DYXE0D9YWlpWVnG8ujLmv43s7Gzmz5/P+++/X6yBqYFCtPULYB8KrcQwFInd/sBWYBZQ0i5zQEAARkZGHD58uMQ5/PrrrxgbGzNq1CiOHDkiilO0Xbt2bNy4EVtbW1JTxb11k1urLY8HDx5gaWlJs2bN0NPTq5LonHv37lG/fn1JSgUPGTIEGxsb7O3tVRYI9fDwoF+/fkybNo2DBw9WuAyFlpYWHzk5Efv4MRuOH+fRzJlM/d//0NPQoGvt2gyuV4+Rderwbt26GNapQx1NTQbVr8/FceOY6e7OwxcvWLlmTX7GvZGREbNnz2bGjBmSip8Wx/Tp05UbLgNypiclAOHKTdOmTZNxAvJRvZIpRHp6OjY2Nhw9erTIawbAHGAq5fcThgCugCdFS5Goq6uzdu1a5syZk9+WnZ3NN998w65du9i/f3/R/WMRmDJlCjo6OmzZskW0Prdu3UpISEjRcrYScuzYMRwcHJg1axZff/01Z86cwdHRUfIAh8KcOXOGNWvWSFb3Jjs7m379+jF58mQ+/vjjCh+fmJjIrFmzuH79Ol5eXqLLDdWtW5cTJ06QkZFBSkoK2traNGjQgLZt25apxZabm8ugQYMYPXo0c+fOFXVepZGYmEirVq14+fLl68ZewAiZJrAPRemIf2jbti1RUVHlTuwtxBu9kqmOLitAVlYW48aNK1JrQhP4DPgKJWXuctELRcmQr1AYqII95+bm5vtY5syZw4MHD7CxsaFevXqEhYVRv379Sp5J6bi5uWFkZISXl5do9WXkXMlkZGSwcOFCjh49yqFDh/Iz99977z3GjRuHg4MDhw4dkmUuIL4/pjAaGhrs3buXPn36YGZmRs+ePct9bHBwMBMnTqRv375cu3YNHZ2KfoNL58GDB+jo6FTaYa2urs7OnTvp3bs3FhYWkoaZF6R27dosWLCAr7766nVjCNAO6CLx4FdRMjCgUBqvpIF546neLiuAo6NjEQPTCggEVlJxA1OQdii2YDdTREmCefPmsWzZMnr37o2lpSVHjx6VzMAA6OrqsnfvXpydnYsq0lYSuXJkoqKi8qVhwsPDi0jDrF69mocPH7J161bJ51JwTlJHSLVt25aNGzdibW39OpGwFARBYP369VhZWfHtt9/i4eEhuoEBiIiI4K233lKpjzZt2vDDDz/ILqnz6aefFv27HUER0iwVMUChNUf//v2ZPHmyhINWLdVG5h927drFzp07ldq6o9iqNRFxHCcUxqbg7n1ubi7Lly9n/fr1FRJsVAUjIyMWLlzIhAkTRKnGJ8dKxsPDA3Nzc+zt7Tl8+HCxfqqaNWuyd+9evv76a/74449iehEfqVcyeVhbW2NmZsb8+fNLfV98fDxWVlbs37+fq1evil56oSBiGBlQbOH26NGDL7/8UoRZlY9Xr15Rv3595d9bJoq9bSnE26JQqHMXkJKpW7cuu3btQk3tjfZcqES1kQGePHlSZD+4PeCLNAWcLIFjQEGVotzcXDZu3CirA3T+/Pk0bty4QrkYqamp/PnnnwQEBODr64ufnx+hoaHcvn2btm3bSjLPpKQk7OzsWLVqFX5+fmWGcbdr144NGzZIEuBQHHKsZPLYtGkTQUFB7Nu3r9jX/fz8eOedd+jQoQOBgYG0adNG0vncvHmTLl3E2V9yc3PjyJEjRUsjS4C/vz+Ghob079+fjRs3Kr+YBngAoSINJgAXgAMoOWZr1KjB7t27Jf8bVVMKgiAMEWRg4sSJAoqvggAIeiDcBEGQ+LG5wJh5j3379slxyvk8e/ZMaN68uXD27NliX09NTRX2798vTJ06VWjbtq2gpqZWZM55j8aNGwtjx44VXF1dhWfPnokyv9DQUKFDhw6CnZ2dkJycXKFj7ezsBEdHR1HmURKJiYmCnp6ekJubK+k4Bbl+/brQpEkT4datW/ltWVlZwtKlS4WmTZsKp0+flm0u5ubmQkBAgGj9XbhwQWjRooUQHx8vWp8FKelzWrJkSfHf6/YIzEbApZIPBwRaFO1XTU1NcHNzE+u0hsh5Xf5PIchgZCIiIgR1dXWlL4CbDAYm7zG80JevU6dOQk5OjtSnrcS5c+eEli1bKv2w7969K8yePVuoXbt2iUaltEfNmjWF8ePHCyEhIZWaU25urrBu3TqhUaNGlTa8ycnJQqdOnYT9+/dX6vjyEBwcLBgaGkrWf0msW7dOMDY2FjIyMoQ7d+4IZmZmwrvvvis8efJE1nk0aNBAtBuKPBYsWCCMHj1a1D4FQRDu3bsnmJubC5aWlsLjx4+LvL5y5crib6LUEeiGwBQElpbDsCxBYCICHYr/bWhoaAg7duwQ89SqjUxlEWQwMjNmzFD6AhiBkCOjkYkFoWahL+GRI0ekPu0iLFq0SBg+fLiQmJgofPbZZ0LNmjUrZVyKe4wfP164f/9+uecSHx8vjBgxQjA2NhZiY2NVOq/Q0FDBwMBAuH37tkr9lMSePXsEW1tbSfoujdzcXGHUqFHCmDFjBAMDA2Hp0qWy35w8fvxYaNiwoej9ZmZmCsbGxoK7u7tofR49elRo3LhxmZ/TgQMHSr+xqoVAFwQGIjAGgQn/PEYj0B+BjgholfxbaNy4cYm7BipQbWQqiyCxkUlOThb09fWVL/AyGpi8x/RCX8RRo0ZJedrFkpWVJXTr1k2oX79+6UZDHYEGCLRGoB0CbRFojEDN0g2Nvr6+4OnpWeY8zp07J7Ro0UKYM2eOkJGRIcq5/fTTT4KJiYmQmZkpSn8FWbx4sbBs2TLR+y2LtLQ0wdHRUdDQ0BDWr18v+/iCIAh+fn7CgAEDJOk7IiJCaNiwoRAVFaVSP5mZmcKiRYuEVq1aCUFBQeU6JjY2VrC0tBTtJivvYW1tXewKSgSqjUxlESQ2MocOHVL6ErRA3lVM3iOk0JdRU1Ozwv4HVXF3dxc0NDSK/4HoI9AXgakILC5hi2ApAo4IWCJgUPIP7ZNPPin2TjI7O1tYunSp0KRJE+HEiROinltubq7w/vvvC1999ZWo/QqCIIwfP17w8vISvd/SiIiIELp37y7Y2dkJp06dEpo1aybVxatUNm7cKHz00UeS9m9kZFTpm4M7d+4IpqamwujRo4UXL15U+PhDhw4JPXv2VNm49OvXT/Dz86vUOZSTaiNTWQSJjczs2bOVvgzzq8DA5D06FPpinjp1SspTV2LNmjXF70XX/WcbYEkJhqW0hx3FOjwBYcKECUJ2dnb++Pfv3xf69+8vDBo0SHj06JEk5/js2TOhRYsWgq+vr6j9du/eXfj9999F7bM0du/eLTRu3Fjw8PDIb1u8eLHw3nvvyRp8IAiC4OTkJGzYsEGy/nNzc4URI0YIS5YsqfCxv/zyi9CkSRNh3bp1Kn0uubm5gr+/vzB16lShQYMG5TYsTZo0EZycnIQrV65UeuwK8EYbmf9mimk5uXr1qtLzwSW8Tw4sUeRp5XH16lWGDh0q+bjbt29n4cKFCIKg/EIfYBBUuv5uO6AtijDQ0yiFbh44cAB9fX22bdvGsWPHcHR0zJeGkSpHqFGjRnh6emJra0tYWBiNGzdWuc/c3Fzi4uJkUTp49eoVs2bNIjo6msDAQKUxly5dysCBA1m7dm2ZOTRiEhERwdixYyXrX01NjR07dvDOO+8wePBgBgwYUOYx6enpLFq0iFOnTnHy5MkKqSOUNAcLCwssLCzIzc3l+vXrTJ06lbZt26Knp0dycjJqamro6+vTrFkzOnXqhLGxsSi5Q/8V/l8bmaioKKXnRlU0DwDDQs8Lz00KgoKCcHJyUjYwNYFxgBi5hWoodHVaotBqevX6JXd3d2JiYrhz546SNIyUDBgwAHt7e6ZNm8Zvv/2mcgLcnTt3MDAwkCSTviDXrl3D1tYWKysrdu3aVaQOvIaGBvv378fY2BgzMzN69+4t6XzyECsRszQMDAxwd3dn+vTphIeHlyqAGhkZyYQJE+jYsSPXrl0rUzetoqirq9OzZ09SUlJYtWqV5CXW/yv8v03GfPXqFYmJifnP9QDV720rT+F74bwiXFLx6tUrbG1tyc7Oft1YE5iMOAamII2B6UChBP3AwED27t0ri4HJY/ny5bx69Yr169er3JfUmf6CoJCGGT16NOvWrWP9+vVFDEweLVu2xNXVlUmTJil9r6XixYsXZGZm0rSpFOnKygwbNox3331XSUi2MHkK09OnT+fgwYOiG5g8MjIyePTokWSJx/9F/t8amcL6T2KWlq0Mhccvjz6VKixevFi5jIEaMB6FWJsU1EFhwGq9bsrNzeWzzz5TqWJoRdHQ0MDLy4tVq1YV2S6tKFJm+j979oxhw4bh4+NDcHAwI0aULQ88duxYLC0tcXBwkGROBblx4wZdu3aVfJw8fvrpJ65evYqXl5dSe1JSEpMnT2bVqlX4+/tXuqhfeYmOjqZ169b/WTFLKfh/a2RycnKUnktXRb18FP7KKq0wRCY6OrpohUwzQGpllAbA+8pNV65cKXLhkJqWLVuyefNmJk+eXO67/oyMDG7dukV4eDjh4eHcunWLiIgISYzM2bNnMTIywtTUlLNnz9K8efkL0K9bt46bN2+yZ88e0edVEDm2ygqio6OTL+qat8oPCwvDyMgIdXV1QkJC6N69u+TziIyMFE1G5/8L/2/NceECU8lVNI88Cq9b9PX1JRtr1apVyka2ATDw/9g77/iazv+Bv5NIgogtCRIjVokqCUKF2Fu1X1vEqL1XG1SN1ihqxSpqVNRoRI1SI0ZU7IiZTQiqJIiITEme3x9XIufezJtzbvzI+/W6L85zz/08n3tzzvk84zMU605KbaAO4P+uaeHChfTr10+nSQJ79OjBsWPHGD9+PNu2bdN4/9WrV+zfvx/Pffs4d+4cTyIjsShcmFJvR7CRSUn8GxfH0T//5Pzx47T98ku+/PLLPC3TpK8ltGPHDlq0aJFrGYULF2bnzp20atWKxo0bKzbTkjNnWU6xtbVl0qRJODs7M2TIEKZPn86KFSvo16+fznTIj+/9/52PdiZTsmRJjIzeJd1/Qf4amjC1Y319fR49eiR7Py9fvmTXrl3SxjbodrjRDsmV5+fnx5kzZ3SogIpVq1Zx/fp1yag/ODiYYU5OVDY358C4cbTcv5+jERFEJyUR+vo1V1++5OrLl4S+fk1scjKnXryg1f79HBw3jioWFnzdty/BwcFZ9Jox9+/fp0WLFly/fp2rV69qZWBSsbGx4ccff6R///4kJCRoLScrdD2TSWXUqFEEBgYya9YsvL29dWpgQGVkdJFx+0PiozUyBgYGVKtWLe1YALfzTx1uqR0/evSIxo0bU7x4cRo3bszAgQNZuHAhe/fuxd/fn8TERK36cXd3Jz4+/l1DaZQv0qROKUBtOf/333/XsRLvRv1Tp07Fx8eHCSNG0Lx+fSq5u3MnPp690dEMBWqS8XKqASqHja+Bva9fczc+nqp799K8fn0mjBhBVFRUBp/SxMPDg6ZNm9KnTx/27dsnS1XPUaNGUbNmTcVS5wcEBOjcyFy5coVGjRrRtWtXEhISiIyM1Gn/ULBcpg0f7XIZwGeffUZAQEDa8RmgST7p4qV2vHDhQpycnIiKiuLOnTuEhobi5+fHH3/8QWhoKEFBQZiZmWFtbU2dOnWwsbHB2tqaunXrYmFhkWk/R48elTZ8Rv4U4a6PxLIeOXIkH5RQjfonTZrEVx070ikmhoD4eLQtF1camJWUxNikJGZs3079AwfYffBgpi7FcXFxTJ8+nWPHjskS06HOL7/8gq2tLS1btqRbt26yyX316hWvXr3C0tJSNplZIYRg1apVLF68mI0bN9K1a1c8PDwYNGgQV69epUiRItkLkYGUlBRCQkIKXJdzyXtdKedtJOsxpeRv2LCBUaNGpR3bAxeV6iwL/kMVSpLeFeHRo0dZbvgmJSXx4MGDNOPj7+9PaGgot27dIjExUcP41KlTh1q1amFubs6LFy/eCRoFZG6TlCMZWIyqSNRbgoKCdH4De+zZw7ghQ9gQG0t39YDUPHIQGFG0KKu2bKF3nz6S9/z8/Ojbty8NGjRg3bp1GnuEcnH58mW++uorrly5QoUKFWSReeHCBSZPnszFi8rfLREREQwaNIgXL16wa9cuSe0VJycnSpcurVkPRiHu3btHq1atZKsmKyMd9PT0jmd/Wv7wUc9kunTpgr6+fpoL7SVUg2vlfVSk/IbUwNjZ2WXrUVSoUCGsra2xtrambdu2kveePHlCQEAAQUFBBAQEcOrUKYKCgnj69Kl0qaww+RccZIDKst5913Tr1i2dGpldO3fy7fDhHI+NpZ4C8r8AqsbG0uXrr3mTmIiTszOgiulwcXFh2bJlODk5KdDzOxo3bsyoUaPo378/J0+exMAg736UutqP8fLyYsCAAfTo0YOlS5diaChNP7Fu3Trq169Phw4dcuTinVcK9mO046M2MpaWlrRu3ZoTJ06ktf2EKjhdV8QAK9XanN8+jLTFwsICCwsLWrVqJWk/evQonTp1etdQlvydy5ZDYmRCQkIyPVVuTp06xZThwzkRG6u+PSQrnwLHY2NpNWoUpiVKsGPHDu7evYu3tzfVq1dXsOd3zJw5kzNnzrBkyRJmzJiRZ3lKe1glJyczb948NmzYwNatW+nYsWOG55UoUYLt27fTu3dvrl27JkuqoKwo2I/Rjo924z+V8ePHS453Axd02P98IDzdcfHixRk0aJAifcXExEgbMs/QoRvU+n/+/LlOuv3vv/9w7tGDXQobmFQ+AXbHxjJ8wADMzc05f/68zgwMqDwVt23bxqpVqzh//nyuPhsbG0tERAShoaE8f/6c+Ph4RWcyjx49onXr1pw9exZfX99MDUwqDg4OaamCNPLvyUzBTEY7Pnoj061bNxo0aJB2LIChqGYYSnMZWK7WNnHiREqWVCb/gIaR0Tb5pVwYSQ9fv9aNE/m4IUMYGhOjs9AgAEdgVHw8j4KCJK7zuqJixYps2bKF/v37S/fk0iGE4MKFC/z444+0b98eKysrTExMMDMzo1q1apQtW5aiRYvi6enJ0qVLWbRoEb6+vrLpeOLECZo0aUKrVq3w9PTMccqaefPm8fz5czZu3CibLhlRMJPRjo/eyOjp6eHq6ioJBAxA5ZaqZLKT/4DeSPa9sbKywsXFRbE+NR5SIAPBAAAgAElEQVRuusvmkjFqSQ0yy8slJydOnOC2tzcz37zJ/mSZ+e7NG/zOneP48fzZo+3UqRPdu3dn5MiRkvaXL1+ycOFCqlevzueff86cOXPw9PTMME5LCEFSUhJeXl7MmDEDOzs7bGxscHV1JTY2Viu9kpKSmDt3LsOGDWP37t3MnTs3V9m4CxUqxI4dO5g9ezaBgYFa6ZATCoyMdnz0RgagefPmGvme3IGxKPMcjgA6Iw3A1NPTU9TLCNDMYKvdM0E+4qSHWWXYlYt506bxQ2wsypszTYyBH2JimKPDdPzqLFmyhLt377Jp0yYSExNZtGgRlStXZubMmYSGhmol09/fn0mTJlGlShXWr1+fq1x0Dx48wNHRkWvXruHr64uDg4NWOlSvXp0ffvgBJycnrWPIsiIiIgIhBOXKlZNd9odOgZF5y4oVKzRyH60H+iHv0lkAqjRh19XaJ02apLiHTJUqVaQNutkCyRy1/vfu3cvIkSNxdXXlxIkTWj/0MuP69es8CAqil8Jr91nRC4gIC8PHxydf+jc2Nsbd3R0XFxdq167NjBkzss7fZgAURRVAW5QsnxgRERGMHj2azz//PEd/u3379tGoUSO++OIL9u/fT+nS2kYoqRg1ahSWlpbMnTs3T3IyoiCdjPZ81N5l6SlSpAiHDh2iWbNmkmUCd1RuzZtR1fHSlhRgI/AtmulrunXrxpIlS/IgPWdUr14dQ0ND3qQuFb18q4xyk6es+Vd6mDqb9Pf359ChQ/j5+REfH5/mqp0a95Ma85PbTLjbN21iYEJCviZDNQCc4+P5ffNmGjZsmC86XLx4kZiYmIwj5g1RJUqtjsrFvBRSw5KManDwEFWVvRCk/veoCu7Z2tqya9cuqTfjW1ILix08eJADBw7QpIl8IdCbNm2ifv36tGvXTsO7Mi8UbPprz0cdjJkRAQEBtG/fXmM9Wg/VrGYGUDcX8lKAv4AfgYy2SDt06MC+fft0FrXctGlTaRDd/0CRIJHseA6ki6ErUqQIL168oHDhwpLTIiMjNQJO/fz8CA0NpUKFChoBp/Xq1ct02a22pSW7/v0XeePqc88toEf58gQ/fqzzvleuXMmUKVM0PbFMUI2iGqKKn8opMagCzC4BamnSDA0N2bJlCwMGDEhrCwoKom/fvlSrVo1NmzYp4uRy7Ngxhg8fzo0bNyhVqlT2H8gBkydPxsrKSqeVR3PBex2MWWBkMuDBgwd069aNmzdvZvi+PfAVqsTFdVHdn+mJAHyAE8AeVIO+jPj6669Zv369RpCZksycOZOFCxe+a6gBKBsPmDFeSHLptG3bFk9Pzxx/PCEhgaCgoLSXv79/2v9LlSpFrVq1qFWrVtqsp2zZsrRt2pTw+Ph8XyMWgHmRIly/c0e2KPycsHHjRkaNGqVpYGxRJS3NyzgnGvgb1XpwOgwMDPDw8ODLL7/Ezc2NqVOn8v333yte92XcuHE8ffqUPXv2yCKvY8eOTJgwgc6dO8siT2YKjIy25JeRAVVeqcmTJ7Nx48Zs/e/LAaaoHh4RZJ/NuWjRohgZGREYGKh4AJk6fn5+1K2bbi6mB4wGzHSoRBLgiqS+waZNmxg6dKgs4h88eEBQUBCBgYFpmQ+ioqIodvcuXi9fytJHXmlTsiQz9uzRyNagFKdOnaJ9+/bSEg+FgO7Im+LiEqo7Nt3ef5EiRejcuXNa7r169ZSfOsfHx9O4cWOmT59O//798yyvSpUqnD59WpLW5j2iwMhoS34amVTOnj3LhAkTuH5dfas+9+jr69O3b19+/vlnVq5cSXBwMPv375dBy9zRuHFjrly58q6hLqqqmLriApK/qqmpKQ8fPlSsZC7A5s2bOT9xIpvVY4XyiVFFi9Jg+XINd2IliIiIoF69ejx58uRdoyHQH1DimekPeCAxNCVKlODOnTuULVtWgQ4z5vbt27Rt25aLFy9qOr3kgtjYWMzMzHj16lWuXKt1yHttZN7LX+x9onnz5vj6+nLgwAHatGmj1UVWrFgxhgwZwq1bt9ixYwcVKlRg3rx5hIWFsXnzZgW0zprp06dLG24D8jpyZc4rNFJOjx49WlEDAxAVFUWpfIiNyYySiYm81NGs6ttvv5UaGH1Ubm5KDcrrAGpJn6Oioli2bJlCHWZM3bp1mTp1Ks7OzhqVcNW5d+9eWozO8OHD6d27N71792bw4MGMGjWK0qVL4+Pjk62cAjQpmMnkkkePHnH48GG8vLzYt28fycnJGqWSixUrRq1atbC3t6d169Z07NgRExP1nRuVF5WjoyPnzp3TaWLIlJQU7O3tpW60psBIlPU0S0GVDfTBu6ZSpUoRFBSkePzBokWLiJo1i58ULGudG+bo6VHohx+YNWuWov1cvnyZJk2aSJd8W6FKQaA0h1BtTr7FyMiIgIAArK2tddC5ipSUFNq1a0fbtm018rb5+fmxbds29uzZk+PMysWLF6dz5844OzvTsWPH92VmUzCT+ZCwtLRk5MiRbN++HQMDA54/f05ERAR3797l3r17vHjxgujoaHx8fFi7di09evTI0MAA1KlTh1mzZuHk5PTOrVgH6Ovrs27dOukNEg3sQpqCQE4EKje7B9LmhQsX6iTAzcTEhJhcujwrSbSRkaKBt6ksWLBAamDMgeaKd6uiA5DOeSwxMVEnrvrp0dfXx83NDVdXVy5dugSoDG/Xrl359NNP+fnnn3OVuv/Vq1fs3r2bLl26UKdOHbZt25ar4NOPkQIjoyV37tyhYsWKFC9enLJly2JtbU2VKlVy7TI5fvx4zMzMWLBggUKaaiKE4Pz58xruwvwLbEP+TAApqEa116TNnTp10smeBIC5uTlP8iFnWGY8MTIiPDycGzduEBcXl/0HtCA0NJS//vpL2tgR3d31hkBradO2bdt0tkyYSsWKFVm3bh39+/dnyJAhNG3alMOHD+c5oWZQUBCDBw/m888/58aNGzJp++FRYGS0RK5MtHp6emzdupVff/2VCxeUz/8cERFBt27d2LlzJ9evX9fMcvsvsAlVcjU5iAbcgKvS5mrVquHm5ibJGackNWvWRLmsVrknUF8ff39/nJ2dKVOmDNbW1nTq1IkpU6awYcMGvLy8ePr0aZ762L59u/RBaoly+zCZURdVQOdb4uPjZXMrzg2VKlUiIiKC3377LcOZRxGgDapg6V9QBWG7oxpz/YhqCyszP9BLly5hb2/PunXrFNH9/zvvz/rB/zPkTHduZmbG2rVrGTBgANevX8fU1FQWueqcPn2agQMH8r///Y99+/ZhaGiIh4cHbdq0SVtKAOAFKkPTBGgBWiX6SkYVfXoKjRxl5ubmHDt2TKeeRnXq1CEsIYGXSFZw8oXXwJ34eM7t3p0WhPv48WNJsKmHhwehoaG8ePGCatWqZVjpNLsAXo1ZjK1CXygr9FGV2j79runQoUMMHz5cZyocPnyY3r17Z5jA0wEYA3xJ9mFCAjiPKvvHDqQrywkJCYwdO5agoCBWrFjxvuzVvBcUbPxriZOTEx07dsxzgbH0DB06FD09PTZt2iSbTFBluZ0/fz4bN25k69atdOjQQfJ+dHQ0X331FSdPntT8cGFUUeCfoQoIyo5oVN5ql1ClrVHD2tqaY8eO6bSeSiodmjRh9KVLfKnznqX8Bbg2bMiJ9G7kmfDy5Uvu3r2rkfUgKCgIMzMzDeNTt25dLCwsiIqKokyZMu+8ofRQDdOLKvnNMiEcSDfIL1GiBM+fP5elSmd2HDx4kJ49e2rsedZBlXCidYafyp4HqH5O9wzeGz58OBs2bNDZLJ33fOO/wMhoSYMGDdi0aRN2dnayyYyJicHW1pb58+fTq1cvWWSGhYXh5OSEiYkJ27Ztw8LCIsPzEhMT+eabb7Kul14KqIyqoqYpqnlwCqrUIqn5rJ6iGvJlQJkyZfDz89N5AGoqv/76K55Tp+IeHZ39yQrS18SEVkuXMnLUKK1lJCYmcvfuXQICAggODpYEnhobG1OhQgVpbJc5qqDb/EAAS5Fkmg0JCVF8oHHhwgXatGkj2fPSAyYAS9AoZ6QVHsAwIEqtfc6cOYok6syEAiOjLe+rkUlOTqZEiRI8ffo0U88xbfHx8eGLL77g6tWrOS7alBl79+5l3LhxTJ8+nQkTJuRoZHXo0CHGjRtHWFhYtufmlOLFizN37lw8PDzo0aNHvuV/ioqKolqFClyPjcUyXzSAx8CnRYoQ8uhRnrMOZ8aTJ09YtmwZS5cufdf4KdBDke5yxjbg3rvDQ4cO0aVLF8W6i4yMpEGDBpLr2ADVhGpEpp/SDn9U/hTp00fp6elx4MABunXrlsmnZOW9NjIFC4daEBoairm5uewGBqBhw4aMGDGCQYMGae39EhcXx8SJE5k5cyZ///03EydOzPHUvWvXrvj7+8viWlykSBHGjRtHYGAgkydPZvfu3SxZskS6/6NDSpQoweChQ1mig+JombHY2JhBQ4YoZmAALCwsKFOmjLRR2VjX7FHbCAsPD8/4PJkYM2aMxMDoocqCLreBAdXS2wmkq8lCCEaMGKFzT7r3kQIjowVK1jgH+P7774mOjmbNmjW5/qyfnx/29vZERkbi4+MjKS2dU4oWLcqMGTO4f/8+27dvp0OHDpruzplgYGBA48aNWbFiBffv32f16tVpMzIrKyvWrFnDgAEDiM6nJatps2bxh5ERt/Ohbz9gt5ER0+fMUbwvjd83/+xqhv0r+fc/efIku3fvlrRNQ1XtVilqAn8i9aR68uSJ4sG2/x8o8C7TAqWNTGo52SZNmtCyZUuNYmqZ4ebmhouLC8uWLcPJKe+plYsWLcqAAQMYMGAA8fHxbN26lcWLF9O9e3devnxJXFwchoaGlCxZkqpVq1KnTh2aNm2aZaxQz549OXr0KBMmTGDr1q151jG3lCtXjmmzZzNk7ly8Y2J09uxNBIaYmPDj4sWYmSmfjVRjUz2/4wXV+ldy01/9wd4ImKdYb+9wAL4H5qZr27hxI99++y2VKlXSgQbvJwVGRgsCAgJo3Vpbv5ScYW1tzcKFC+nfvz9XrlzJcibx7Nkzvv76a/777z+8vb0V2VAtXLgwRkZGtGrVCldX1zzJcnV1pVGjRuzYsUMWY5gbDh8+zNLly6n92WdM9PVlfXy8TvqdWLgwVs2bMyIPm/25QaOmjm6+ZuboqNT2P//8I4k300O1D6OrB9104HfgztvjxMREli9fzsqVK3WkwftHwXKZFig9k0ll2LBh1K5dmzlZLK94eXlha2tL1apVOXfunKIeO35+ftjY2ORZjomJCe7u7kyePJng4GAZNMueN2/eMHfuXMaOHYu7uzv7jx7Fp0oV5uogC8CPhoZcsrJi6x9/6Myt1dJSzbUhgyKYOuWF9PDo0aNs27aNS5cuybpvoZ5w9gtUHvi6whiYqdb2+++/k5ioVL6m958CI5NLUlJSCAoK0lm973Xr1rFjxw5OnTolaU9OTmbu3Ln079+fDRs24OrqipHCD0y5jAyoMuTOnDkTJycnxW/A4OBg7O3tuXnzJr6+vjg4OGBqasrfZ86wv3JlJhcurF5BWBaSgalGRuypWJG///lHsdF7RtSqVUvaoPsinO9IQhUrk45KlSpx4sQJxo8fT+XKlSlfvjytW7dm9OjRrFy5kmPHjnH//v1c5QVLTExk3759krbxMqifW/qj8vJP5fnz5xnHoH0kFLgw55J79+7RsmVLWV18s+P48eMMGzaM69evU7p0aR4+fIiTkxPGxsa4ubnl2dU5p1haWnL+/HnZ1peFEHz55ZfUqVOHn376SRaZ6mRXjfHly5f06tyZ5Js3+T0mBrnqVD4GnE1MoG5d9h49qkiZ4axITEykdOnSxKSvnzMO6dNPV9xHlX37LZUqVdK4fyIjIzVKbPv7+/P48eMMy2zXr19fI8HouXPncHBwSDuugMqtOD9G0qOB9emOp06dKnUpl5f32oW5YE8ml8g5ms8p7du358svv2TEiBE4OTkxatQoRo8ezezZs3WWviIqKopXr15hZWUlm0w9PT02b95MgwYNaN26Ne3atZNNdnR0NGPGjOHq1aucPHky02qMJUuW5Ji3Nwt/+IH6S5cyIyGB0cnJuSpzn5544BcDA34yNqZVhw7EJiYqXisnI4yMjGjWrBnHj6d79txGVTNc16i58mW0n1mqVCkcHBwkRgJUxjIkJCTN+Hh7e7Nx40YCAwMxMjKSGJ/AQGl2ujbk31JNe6RG5vz58/mkSf5TYGRyia72Y9T58ccfqV69Ov/88w8HDhygadOmOu3fz8+POnXqyL6nULZsWX7//Xf69euHr69vphkJcoOPjw/9+vWjadOm+Pj4ULRo1rlU9PX1+f6HH+jt5ITLmDEsvXCBUYmJOCclUSWHfYYB2w0MWG9sjF2TJnj/8gvW1ta0aNGCNWvWMH687hduevXqJTUyvqjS/CufzeUdccAtaVPPnjkvw2pkZISNjY3GwC4lJYWwsDCCgoLSMh0cOyZd9Gisrc4yYK92rG4APyYK9mRySUBAgM72Y9L36ejoiK2tLUIInS2PpUfJGZyjoyODBw9myJAheUq/LoTA1dWVzp07M3/+fNzc3LI1MOmpWbMm+0+c4MiFC4QPHoy9qSl1ixdnTOHCrEVVreDM29chVF5LYwsXpq6pKY1MTXkyeDCHz5/nwMmT1KxZk0KFCvH7778zf/58Wcp355ZevXpJA4ZfoVFuQXEuAAnvDsuXL6+RO08b9PX1qVq1Kh07dmTy5MmsX79e476skedetKc80vp/kZGRH21gZoGRySW6nsm4ubnRqlUrxo4dy/Hjx/n2229zVE5WbpReJvzxxx+JiorS2j06IiKCrl27smvXLi5dukSfPn201qVevXqs/vVX/nv5ErfTp0lydmaXvT0bmjdn7mefMadePTY0b87twYP5ZMkStp0+zX+RkazZtInPPvtMIsva2po1a9bQu3dvnQeglihRghEj1GLcTyF/vaDMeIEqbXE6Jk+eTCGFise9evVKclwmk/N0gR6SCgeAsgGo7zMFG/+5QAhByZIlCQsLU3wjNyoqilGjRhESEsKuXbuoUUM1LkstJ9uuXTumT5+uqA7padeuHd98840so9DMePDgAfb29vz999+5ylRw8uRJBg0aRI8ePVi6dCmGhoay6jVjxgyKFSvGzJnqzqk5Z8iQIRQqVIhff/1VRs2y57///qNmzZq8fv36XWNNoB/K3v3JwBZU9YneUr58eYKDgxWrCFq/fn1J8bAbQMY7cbqhJhCS7jg4ODjtPpaZ93rjv2AmkwsePnyIqamp4gbm0qVL2NnZYWZmxvnz5yUXpr6+Ptu2bWPFihVcyUGqeLnQhcNDpUqVWLVqFX369MnRqC8pKYm5c+fy9ddfs2PHDlxdXWU3MKBaT8/rEumaNWvw9vZm165dMmmVM8qXL68ZZxUMKOlRm1pq+19p89KlSxUtOa2eSzAmk/N0xWu1Y6XqRL3vFBiZXKD0UllKSgqurq7873//w9XVNdPYF0tLS9auXcugQYMyLMQkN5GRkcTGxlKxYkXF++rVqxcODg5Mnjw5y/PCwsJwdHTk2rVr+Pr64ujoqJhOgYGBfPLJJ3mSkRqAOmXKFO7du5f9B2SkTJkymsbXG0khMdlIAQ4DaltQ//vf/+jfv78CHb5DPSnoI0V7y5oEpKFB+vr6uS7N/qFQ4F2WjuTkZK5fv87169cJCgrixYsXvHr1ikKFClG8eHEePnyIsbEx//77r+wP3KdPnzJw4ECSkpK4cuUKFSpkHbHRs2dP9u3bh4uLi1aJNHODUp5lmbF69WoaNmzIzp07M3wweXh4MH78+FyVMNCWN2/eEBYWRrVq1fIs69NPP2XatGn06dOHc+fOKTLrSk+qG7evry+HDx/G2dlZWtL5DKrCcl2Qp7hKLLAP6RoRUL16dY1IfCVQX4ryV7zHzAkGSYBvpUqVMM7H7N/5yUdvZJKTkzl27Bjbt2/nyJEjREWplx/SxNLSkpo1a9KnTx8GDhyY51QuBw8eZMSIEYwaNSpXsS/r1q2jfv36dOzYka5du+ZJh6zQdWxQ6qi/Xbt2NG3alKpVVYXp4+LimD59OsePH+fIkSPUr19fcV3u3LmDlZWVbA+IiRMncvr0aX744Qfmz58vi8yMSO/GfeXKFYoWLcqRI0do2bKldIP8BqqIxS5AXuyoH6rdU+neO+bm5hzVUTCqeiLZfxTvMXPOqB3nNMltATpGCNFeKERSUpLYsmWLqFGjhkC1iqzVS19fX/Ts2VPcvHkz1zrEx8eLCRMmiCpVqghvb2+tvsfZs2dF+fLlxZMnT7T6fE4YP368WLFihWLyM2P58uWiUaNGIjExUdy+fVvUrVtXODs7i9evX+tMhz///FN0795dVpnh4eHC0tJSeHp6yipXCCFSUlLEypUrRbly5cTu3bs13r906ZIoW7ZsxtdzFQT9EMxCMDcHr+8R9ERQIeN7o3LlysLf31/275gZoaGhkv6NQTwHIfLh1U7tt1i2bJmSX729Dh7HHyZCISNz9epV0bBhwzwZF/VXoUKFxKRJk3L8AAwICBD169cXPXr0EC9evMjT95k2bZrsD8L0tG7dWhw/flwx+ZmRkpIiunXrJjp37izMzc3Fjh07dK7DwoULxbRp02SX6+XlJSpUqCDr4CA8PFx07txZ2Nvbi9DQ0EzPCw4OFvXq1cv8ei6KoC6CTgicEYxEMAHBCAROCNoj+ASBceb3Q82aNcW///4r23fLKZ988olEj9X5YGDCQBio/R4BAQFKfu0CI6MtQgEjs3LlSmFkZJTpzWEGoieIOSB+BeEOYufbi3USCAcQRlkYm9q1a4tbt25lqcO2bdtE2bJlxcqVK2X5TomJiaJRo0Zi48aNsshTx9zcPF8eGBEREaJDhw7CyMhIuLm56bx/IYQYOHCg2Lp1qyKyZ8yYITp16iRSUlLyLOvkyZOiYsWKYsKECSIxMTHb82NjY8WECROEgYGBrIMtY2NjMXr0aFGuXDkRHByc5++VWxYsWCDRpyqIRB0bmXFqv0mjRo2U/toFRkZbhIxGJjk5WYwePTrDG8MIxBAQ3iBScnARvQKxFUTDTG604sWLi5MnT2roEBUVJfr37y9sbGyyNUS5xd/fX5QtW1YEBgbKKvfZs2eiZMmSssrMCadPnxaWlpZiwoQJwtPTU1hZWYmIiAid69G4cWNx4cIFRWS/efNGNG3aVLi6uuZJxpw5c0T58uXFsWPHcv15X19f0bFjxzwbF319fdGrV680w7JixYq0pU5d8t9//4nChQtLdFuuQwMTgOYgVKlBSjoKjIy2CJmMTEpKihg0aFCGN0c/EA/ycFEdBFEtA7nGxsbixIkTaTpcvnxZVKtWTTg7O4uYmBg5vpYGq1evFnZ2drLe2GfOnBHNmjWTTV52pH9oHjlyJK192rRpso36c0OJEiXyvJyZFWFhYcLCwkL4+vrm+rP3798XzZo1E+3bt8/zstvVq1fFmDFjRJkyZXJlXMqXLy+mTJmisRyUutQ5c+bMPOmlDePGjZPoaAoiRAcG5g2qlY70fVepUkUXhrbAyGiLkMnIuLi4aNwcpUDsk+niigUxNIMb0NTUVPj6+oqVK1eK8uXLi4MHD8rxdTIlJSVFdOnSRcyePVs2mevWrRMjRoyQTV5WhIWFCQcHB9G2bVvx+PFjyXupo/5Vq1bpRBchhHj06JGwsLBQvJ89e/aIGjVqiFevXuX4M3v37hUWFhZi5cqVshrepKQkcfnyZbF06VJhaGgomjdvLmxtbUW1atWEnZ2daNu2rRg5cqRwdXUV169fz7Lv8PBwUbFixQxn9UoSHh4uSpcuLbkX66NagVDSyEzN4Bng4eGhi69cYGS0RchgZP766y+hp6cn+cNXAHFTgYvMFYS+2kVWtGhR4eDgIB49eiTDtZQ9T58+FeXLlxdeXl6yyBs7dmyelnNyyp9//inMzMzEnDlzRHJycobn3L17V5iZmYlr164pro8QQpw4cUK0atVKJ319/fXXYujQodmel7qXUqtWLa1mPznl4cOHonz58nmWc+zYMWFlZSWePXsmg1Y559dff9V44Ld7OyBUwsAsy8DAdOvWTVdft8DIaIvIo5GJiIjQmP6XB3FXwdGMawYX27Bhw2S6lnLG/v37hbW1tYiKisqzrJYtW0qW/eQmLi5OTJgwQVStWjVHex9//PGHqFGjhoiOjlZMp1TWrFkjRo8erXg/Qgjx+vVrUbt27Sw96Pz8/MSnn34qnJ2dFf/+J0+eFI6OjrLImjJlivjqq69kkZUTwsPDRfv27YWZmZnGvegAIlzG+z0ZxIwM7nlLS0td7iEWGBltEXk0MkOHDpX84Y1AXFbQwKS+xqhdcPr6+uLixYsyXU85Y/jw4WLIkCE5OvfNmzciJCREnDhxQuzbt0+4u7uL48ePiytXroiyZcuK//77TxEd/f39Rb169USvXr1EZGRkjj83aNAgMXz4cEV0Ss+4ceNk8wDMCbdu3RIWFhYZuh9v27ZNmJubi+3bt+tEl19++UW2wVFiYqJo3LixWL9+vSzyssLLy0tUrFhRTJs2TURFRQl7e3sNA1ARxHEZ7vMwEG0zMDCmpqbi6tWrin/XdBQYGW0ReTAyISEhGu6ZS3RgYASIOBB11C68tm3bynhNZc/r169FzZo1xR9//JHh+zdv3hTff/+9aNasWZYu3YCwtrYWQ4YMEXv37hXx8fGy6Jf60NTGNfn169eiVq1aYufOnbLokhlt27bVymMrL6xcuVLilfXy5UvRp08fYWdnJ0JCQnSmx5QpU8TixYtlkxcSEiLKlSsnbty4IZvM9KSkpIhFixYJCwsLyd8sIiJC1K9fP8PruifaLZs/BzEbhEkGMosVK6bzPShRYGS0R+TByIwaNUryx7dB5f2hCyMjQJzO4AL08S1yj1oAACAASURBVPGR8brKHh8fH2FmZiYePHgghFC5cf/xxx95CkQtXbq0mDFjhnj69KlWOqV/aOYljuLq1avCzMxM3Lt3T2sZ2WFpaSnCwsIUk58RKSkponv37mLGjBni4sWLwtraWkyYMEEkJCToVI+uXbuKffv2ySpz06ZNwsbGRsTGxsoqNyIiQnTs2FE4OjpmGM/18uVL0aZNmwyvZz0QzUGsAxGcjWHZC8IpE+MCCAsLC3H58mVZv1sOKTAy2iK0NDJxcXGiZMmSkgtgtw4NTOqrtdpFOHbsWJmvrez54YcfRLt27cTZs2ezjvLO5cvExEQsWrQoV+6Zcj80ly5dKho3bqyIi2h0dLQoVqyYzl2mhVDFJpUuXVqUKVNGHDp0SOf9CyFEzZo1hZ+fn+xy+/XrJyZMmCCbvDNnzqTFU7158ybT85KSksT333+fbfBpcVSeaG3fvpqichTK7n5o06aNYsvKOaDAyGiL0NLIeHh4SC6A8iCS8sHIHFC7EMuVK5ep55RSxMfHC0tLSw0PO42XKYLKqNKF2CCohqAcAoOsb6769euLoKCgLHVITk4WK1euFBUqVJD1oZmSkiK6du0qZs2aJZvMVC5fvixsbW1ll5sdDx8+FI6OjsLW1laYm5srmpMuM968eSMKFy4s4uLiZJcdGRkpqlatKg4cOJAnOak52tTjqbLDx8cnw30abV9mZmZi69at+TIYSUeBkdEWoaWRGTNmjORCmJwPBkagSmdRSu2i1JX7rRBCvHjxQjg4OGR8g+gjqIHgKwRTyToJ4mAE9ghMMr7RTE1NxdGjRzPU4cmTJ6J9+/aidevWiqSmUSoWw83NTTg5OckqMzsOHDggzM3N09y4v/vuu3wJQA0KChLW1taKyff29hYWFhZaXw/Pnj0TnTt3Fs2bN9cqNCAlJUX89ddfokWLFtkPvjJ5Va5cWSxbtkynyVqz4L02Mh9k0bLz56WFxfPrL2AItFJrO3funE76joiIwNHREW9vb803PwPGAk5v/59Vwb5CQBWgEzDp7b/SAoRER0fzxRdf4OHhIWk/ePAgn332GU2bNsXT0zPbGjnaUK5cObZv387gwYN59uyZbHIDAwOpVauWbPKyIiEhgYkTJzJhwgT27t3L3Llz0dfX54cffiAqKgpXV1ed6JFKSEgINWvWVEx+s2bNGDlyJE5OTqSkpOTqs1euXKFRo0ZUr16dkydPalXXSU9Pj65du3LmzBnu3LnD4sWL6dChQ5ZVO42MjLCzs+Obb77By8uLe/fuMWXKFI1qnAVo8sHVk0lJSSE4OFjS1jifdAGwB/5MdxwYGKh4n9HR0XTp0oVbt25J3ygJfAVU1lKwIaovVA/4G0gnPjExEScnJ0qWLEnz5s1xcXHhwIED7N27l2bNmmnZYc5o1aoVffv2ZdCgQRw6dEiWImaBgYH069dPBu2yJigoiL59+2Jtbc21a9ck1RMLFSrE7t27ady4MY6OjjRo0EBxfUBVi15JIwMwe/Zs2rRpw/Lly/nmm2+yPV8IwapVq1i8eDGbNm2ic+fOsuhhbW2Ni4sLLi4urF69mmvXrjF27FgiIyMBVW2jcuXKUaVKFQoV+uAelzrhg/vVwsPDJSWJywKl808d1G9VXZTeHT58OFeuXJE2VgH6AEVk6KAI0AOwBI6iWkBAZWh69OiBpaUltWvX1nhoKsmCBQto0aIF69atY+zYsXmWJ0fJ5exwc3Nj6tSpfP/990ycODHDc6ysrFi9ejW9e/fG19dXJ3XiQ0JCFC0zDqpyxNu3b6dhw4Y0b94ce3v7TM+Niopi6NChPHjwgHPnzqUVsZOboKAgGjRogJ2dnSLyP1Y+uOUySdU/8tfAAJRRO1bXT242b97MH3/8IW2sDgxAHgOTHntUM6N0E4dXr16RkJCAu7u7TmuaGxoa8vvvv/PDDz9w48aNPMlKSkri3r17ea54mhnR0dEMGDCAxYsXc+rUqUwNTCo9e/akZcuW2Z4nF7qYyYCqwuzatWtxcnIiOjo6w3N8fHyws7OjYsWKeHt7K2ZgQGVkdLVE+jHxwRmZxMREybEcpcvzgnrR3oSEBMX6ioiIwMXFRdpYHuiNcnPWekA7adPdu3fZuHGjQh1mTrVq1VizZg39+/eXzGZzy927d6lYsSKFCxeWUTsVPj4+2Nraoq+vz5UrV3JcltfV1ZWLFy+yY8cO2XVSR1dGBqBHjx44OjpmaEA3btxI586dWbRoEa6urhgZKXs3FxgZZfjglsvUN+Ji8kmPVF6rHWe1uZhX5s+fz4sXL941GAO9UN7SNgXCgKB3TbNmzcLZ2VnnG6O9e/fm8OHDTJkyhfXr12d6XlxcHJcuXcLf358Qf39iXrwgJiaGYiVK8CohAVNTU1mXzFL3FBYsWMDq1avp06dPrj5ftGhR3N3dad26NY0aNVLMCMTFxfHs2TOsrKwUkZ8Rq1atomHDhuzcuZP+/fvz6tUrhg0bRmhoKBcvXsTa2lpxHWJiYnj+/LlOv/fHwgdnZMqUkS5QPQFSyL8p279qx+r6yUVERASbNm2SNrZEN+uFekBX4D7wdqL27NkzNmzYwJQpU3SggJR169ZhZ2fH7t276du3b1p7YmIie/fuZfu6dZy9fJnPihShXmIiNePiKAYURTUoeKKvT0rRonRu1Ih4AwN69e3L4JEjtd54j4iIYPDgwTx//pxLly5pveRTt25dZs2ahZOTE+fOnVNkZB8cHIy1tTUGBgayy84MExMTduzYQadOnTA1NWXy5Mm0adOG8+fPKz57SSU4OJgaNWqgr//BLe7kOx/cL1q8eHHMzc3TjuOA0PxTB3+1Yy8vL/r27cuCBQvYv38/d+7cybUbZ0b89ttv0iWiEujWrc4U1YwmHb/88gtCCB0qoSL1oTVx4kTu379PUlISq11dqVa+PL+NHMlAb2+eJCbiHRXFurg4JgHDgP7ACGB2Sgp/vH5N6OvXnI2KoszmzXR3cKBDs2b4+PjkSpdTp07RoEEDqlevztmzZ/O8pzBu3DgqVqzInDlz8iQnM3S5VJYeW1tbWrduTY8ePZg3bx4bNmzQmYGBgqUyJfngZjKgGvE9ffo07fgsqr3v/OCM2rGLiwuVK1fGz8+PnTt34ufnR2hoKNbW1tjY2FCnTh3s7OywsbGhatWqOXbH/f3336UNTQDdDUZV2APeQJLq8M6dO1y6dIkmTZroWBGws7Pj22+/pU+fPsQ/e4bF06f8FRND/VzKqQbMTkpielISbhcu8IWjI//r14+fV6+mSJHMPSmSkpKYP38+Gzdu5LfffqN9e3mitfT09Ni6dWvaQ7ldu3bZfygX5IeRiY6OZsSIEQQHB9OsWTOduPmrU2BklOODNDKOjo6cPHky7fgvYEg+6PEESO9IrKenh5OTE+XLl6dXr15p7YmJiYSEhHD16lX8/f3ZuHEj/v7+PH/+nOrVq1OnTp00A9SwYUPKly8v6efx48fcvHnzXYMBqg15XVMEqAX4vWs6evRovhgZgOImJty9eZNVCQn0z+OMyggYJgQ9Y2MZv3Mn9qdPs9/TM8P9grCwMJycnDAxMeHatWuSmbUclCpVim3bttG3b198fX2xsLCQTXZISAjNmzeXTV52XL9+nV69etG0aVO8vb2Jjo6mQYMGtGzZklat1EOZlSMoKIguXbrorL+PiQ/SyHTq1InZs2enHR8GwgEzHevxO2mDegDq16+vYSBAFU1sY2ODjY2NpP3ly5fcvXsXPz8/rl69yokTJ7h16xaJiYkSwxMeHi4VWBGNqHydUROJkfHy8soXNebNns325cu5GB8v6yy2JLA9Lo519+/TomFD/vbyol69dxZ97969jBs3jkmTJvHtt98qtsbfokULhg4dypAhQ/j7779lCUAF1Uxm6NChssjKDjc3N1xcXFi5cmXa3lmRIkXYsmULgwYN4tq1a4rtYaoTGBiYL/uHHwPyXJkK8TYnzzFtPlunTh0CAgLSjmcAC2XSKyckoFpqSb/xv3z5ciZPnpxn2Y8fP8bPz49bt27h7+/PkSNHePz48bsTHIC2ee5GO14CK98dlilTRtZ0Lznh559+wm3BAk7GxCg6sPDQ02NSyZKcuXKFChUqMH36dI4dO8auXbt0Ep2flJREy5Yt6dGjhyzXFajS9Ny+fVv22Vd6Xr9+zciRI7l+/Tp79uzJMPBz8uTJPHjwgL179yqmRypCCIoXL86///5L8eLFFe9PATro6ekdz28lMuOD2/hPZfTo0ZLjVcADHfa/DKmBKVasGM7OzrLIrlChAu3atWPKlCls2rQJBwcH6QnlZOlGO0ogcZl+/vy51K1aYf766y/Wzp/PUYUNDEBPIZgTFUWntylfoqKi8PHx0Vn6l0KFCrFr1y4WL17MpUuX8iwvMjKSN2/eKGpgAgICaNKkCQYGBly5ciXTzAKLFi3i3r17/Prrr4rpksq///6Lqanp/1cD897zwRqZYcOGSW6WGGAUaRlQFMUfWKDWNmrUKMqWLatIfxoPceUzj2SOHqAWCqQrI/P48WOGOzmxOzaW3KdN1I7hKSm0ePGC6lZW/Pbbb4rGQWWElZUVa9euZcCAAZlGzeeUoKAgRTf93dzcaNWqFTNmzMDNzY2iRYtmeq6xsTF//PEHs2bNkqxIKIEuUgh9zHywRqZIkSIsXChdIDsCzFe43yhU8Y/p483NzMz47rvvFOszJkYt5NRQsa5yhprn6evX6iGpyjB19GiGJySgazcD17g4bp0/z5kz6r6EuqFHjx60atWK8ePHZ3nev//+y/bt2xk7dixt27alRo0amJubU7p0aapUqULfvn0JDw9n4cKFnD9/nqSkpCzl5ZS4uDiGDx/OokWLOHHiBE5OTjn6XI0aNZg3bx69e/cmPj5eFl0yosCzTFk+WCMDMGTIEBwdHSVtcwClJuCxqFJ5qcfGLF++XNE8XsbGaslrkhXrKmeoPZuUSM+ijo+PD+dPnuQ7tbRCusAE+Dk2lm/Vlmh1yapVq7h27ZqGK3tCQgJbtmyhefPmWFlZMXDgQNatW8fJkye5c+cO4eHhREZGEhYWlvaaOXMmzZo1o0KFCkycODFPLsWBgYHY29uTkJDAlStXqFu3bq4+P3z4cGxsbJgxY4bWOmRHgZFRlg/ayOjp6bFjxw7KlXu3SSGAkcAi5F06ewq0AU6rtQ8aNCjHIzdtKVGihLRB+7Rd8qDWv4Z+CrBo1iy+iYuTPQdoTukJxD58yIkTJ/Kl/8KFC7Nz506mTJlCcHAwycnJ/PLLL1hbWzN06FC8vb1zHRgbERHBqlWrsLGxoU+fPrnOIL59+3aaN2/O+PHjcXNz0zrF0Pr169m/fz+HDh3S6vPZUWBklOWD9S5Lz9mzZ+nQoQNxcXGS9u7AeiCvUQZHga+B/9TamzVrhqenZ5ZBe3IwadIkaWGrNoDuQh2kxAGLpU01a9akZs2a1KpVixo1alCzZk1q1KiBpaWlLF1GRERQ08qKhwkJ6ttBOuUXPT3Odu3KzoMH802HNWvWsH79eoyNjfH19ZVVdpEiRZgzZ062rtnx8fFMmzaNY8eOsWfPnhwnAc2Ks2fP0qdPH65evZphGEBeqFKlCqdOndJJjjSFeK+9yz7IOBl1mjdvjru7O7169ZKs7R4AvFC5N48h9/vlN4G5wL4M3rO1teXgwYOKGxhAc9PykeJdZo5a35999hl//vknoaGh+Pn54evri4eHB6GhoTx+/JgKFSqkxfxYW1unZT7IzYNk7969dC1UiGIKZrjOCX2EYIanJ/Hx8TpZIsyIEiVKEBgYSHJyJmumVoA1UAFVXrsiqIJ3E4BoVAFlYUAIqgFDOuLi4pg+fTqnT59m165dGS4BBwcH06tXL+rVq4ePj49sjhDNmzdn2LBhDB48mKNHj8oWFxQXF0d4eDiVK2tbya+A7PgoZjKp/PPPP3z11VcZejuVQLXk8SXgSOYG5w5wAtiFKl1NRgsQ7du3x8PDQycFpgBu3bolCQikMPAN+TOEOAKk86YdO3Ysa9asyfDUhIQE7ty5g7+/P6GhoWmG6Pbt2+jr66cZHWtr6zRDVKtWLY0HV+9Onfji6FEGKPi1ckqzEiWYv2+fTqPVU1myZAnTp0/XXBYzAhoCjYCcbg0mA4HAOeCx5tt169bl2LFjkpLaf/75J2PGjGHGjBmK1L5JSkrC0dGRHj16yBY4eePGDZycnLh9+7Ys8vKJgpnM+0KLFi24du0affv25cKFC5L3ooDNb1/6QCVUVYqLAYmoYgxD3v6bGQYGBhQuXJglS5bozMCA6oY3Nzd/l68tHggGlC1uqEkKkmh/gLZtM48KNTY2zjDTAcDTp08JCgoiJCSE4OBg9u/fz5IlS7h79y5mZmbUqFEjbent4uXLLJL5q2iLQ2wsFy9c0LmRWb58OdOmTdN841OgAxpu5dliANiguoZuAseR1M24ffs2bdu25ezZsxQrVgwXFxeOHj3KsWPH+Oyzz7T7EtmQWo66YcOGODg40Lhx3jPABgUFFbgvK8xHZWQAKlWqxNmzZ/nll1+YNWsWL19qmo0UVFnr7+dCbtOmTVm7di1Xr15lwIABXL58WSdLZaBycOjbt690X+YCujcyt5EU0ClRogQdOnTQSpS5uTnm5ua0aNFC0p6SkkJYWFia8fHz8+NZdDRVtNdaVj5584YzMu+FZIeHhwfffPONtNEQVfmFvD7v9d7KsAb2IIloDggIoGPHjujp6WFlZcXly5cVd/JIjQtycnKSpRx1waa/8nzQ3mWZYWBgwLhx47h37x7z5s3TeiNRT0+PFi1acOjQIc6dO0eDBg0YNmwYdevWVdTlMiO+/vpr6Tr1Q+CuDhVIQiPltJOTk+yGVl9fn6pVq9K+fXvGjRuHi4sLFsbG782FXBH47+FDnfUXGhrKsGHDpEtkxqjKbcs5oTAFBgJqg34fHx9KlSrF3r17deJFCKpy1A4ODlqn0omOjk6LASowMsrzUe3JZEZycjInTpzg8OHDHDlyhLt372bq7mlqakqTJk1o06YNPXv2pFq1ahrnvHz5kgYNGrBq1Sq6deumtPppdOnShb///vtdQ1lU/tq6CM48g8R/29DQkKCgIEVrsoNqP8rJwYGbr14p2k9OuQBMrV2b8/7q0VLK0K5dO6nbdCHACVDqZ08GdiAp0qSvr8/Fixdp1KiRQp1qEhMTg52dHXPmzKFfv34ZnvPs2TM8PT35559/uHHjBiEhIZI8esbGxujp6dG4cWM6deqUVnVULqcCHfJe78m817+mroxMenbu3Mm+ffv48ccfCQ8P5/Xr1xgZGWFqaoqVlRUVK+YsYYm3tze9evXC19dXdpfLzLh69Sr29vZSzyJb4AuFO34A/IZqnfEtY8aMYe3atQp3DP7+/vRq2hS/98TInAVmfvop/6QvvaAQHh4ekpIRAHRBtcGvJHGofP+j3jU1btyYixcv6vQBffXqVTp37sylS5eoUqVKWrunpydr167l77//5s2bN7mSWa1aNQYPHsyYMWMoXVoXZWVl4b02Mu/LKsN7w82bN6lfvz61a9fG0dGRLl260K5dO5o0aZJjAwPg4ODAiBEjGDRokCyVL3OCnZ0dAwao+Vj5oiokphTPgd1IDIy5uTnz5yudwEdF8eLFeZWZu24+EAUU18GykRCCefPmSRuro7yBAZXbc3dp0+XLlzly5IgOOn+HnZ0d33zzDc7OziQnJ3P+/Hns7e1p3749Bw4cyLWBAbh79y6zZs2iSpUqzJkzRyO2roDcU2Bk1Lh586bUHTgPzJkzhzdv3rB8+XJZ5GXH3r17OXLkiCTDAaDyuVYiED0c2IYkwl9PT49ff/1V0TQ66SlfvjwvEhNRLrNV7ggFnsXFMXfuXNzd3bl9+zaJCqS68fT0lBaq0wc6yd5N5lij4ViybNkyHSqg4ptvvsHExIQmTZrg4ODA5cuXs/2MKdmvIEdHR/Pjjz9St25dzp07J4uuHysfnXdZdshpZPT19XFzc6NRo0Y0b94ce3t7WeSqExsby4wZMzh27Bh///03RYoUoVmzZlLPOW9Uw+yuqDaG88pN4BAq/+50zJkzR6f7UAYGBlSvWBH/+/ex1VmvmXO7aFFsGzcmOTkZd3d3/Pz8CAsLo3LlytjY2FC7du20fz/55BPNvHM5ZNu2bdIGG0A39b3e0QJJoj4vLy8ePHhApUqVdKZCWFgYDx48yDRTsw2qSVcLoDaq0IRUYlB5+l9BNQY7hEb8KaGhobRs2ZIlS5bIVrPnY6NgTyYdz58/p1q1akRGRsq6trx3716mTZvGtWvXZI+fuXLlCk5OTjRp0oR169alBSp6e3vToUMHYmPVEokVB9qjuvu0+YrPUcVMBGm+NWLECDZs2KCF0LwxduhQqm/dyuQ8lliWgxrFirHvwgVJIsikpCQePHiAn58f/v7+af/6+/tTsmTJtAqnqf82aNAgyzxfb968oXTp0tLs1kNQBXbpms2oPBnf4urqyoQJE3TStZ+fH+3bt5cW7EN1WX8JTANyM6xLjZX7GVXpdHWmTp3Kzz///D46BrzXezLv3a+VHl0bmVOnTjF37lz++ecf2WUPHToUIQRbtmyRRV5KSgqrV69mwYIFrFq1Kq18bXouXLhA165dM67nUg7V+r0N2ZdqTkG1DnQd1cg1gy2m/LwB//rrL5YNGIBXPm/++wMdS5cm7NmzHP0OmRmfgIAASpQooWF86tevT7Fixbhw4QKff/75O0GmwBTy526+gOQO7d69O/v371e829DQUJo1a8aTJ1Jz8Amwkbyl7osGZgOuaGb0+O6771iwQL1aVL5TYGS0RddGZuXKldy9e5fVq1fLLjsmJoaGDRsya9Ys+vfvnydZDx48YODAgRgYGODm5palQ8KdO3fo3bs3165dy/gEPVQZQiugWm4xRrWImprmIByV91gmacEMDQ2pXbs2169fz7cRXmJiIpZlynDx9WvyM8XhNENDGDuWxStW5ElOcnIyoaGh3L59m4CAAPz8/AgICCAoKAhzc3OKFCmCf3oX6U+BHnnTXWueAr+8O6xYsSKPHimbPC86OpqGDRsSHBwsae+LqoyHXElSjwD90czysWXLFoYMGSJTL7LwXhuZgo3/dNy6dUuWjLEZYWJigru7O1OmTMl1yvT0eHh40KhRI1q2bImnp2e2Hm/Vq1fnwoULzJw5M+P1f4EqffRVVMtgf6HK+HkYVd6qEDI1MI6OjmlR1yvy+GDNC0ZGRgwfPZplOsqwkBFRwJZChRiZTeGwnGBgYECNGjX46quv+O6779ixYwe+vr5ER0fj6ekpcdcF8p5GPC+UQ5WC5i2PHz/mlcIzylGjRmkYmHHATuQzMKDyozgDGmW8x40bJzXyBWRJgZFJx40bN2Tb9M+ITz/9FBcXF/r27Ztr98ro6GhGjhzJrFmzOHLkCHPnzs0y3Xp6jI2NmT9/Prdu3WLgwIEUKpQ3f4969eqxZ88eTp8+Td26ddm1axc///wz58+fz5PcvDDp229x19fXaZKD9Cw2MqJrt26KpovX19enWrVqmoMF3TjyZYw+UPLdoRCC//5TL3ohH4cPH2bnzp2StoHAKpRZlqkH/I3UeMXGxjJixIhc1+f5WCkwMm9JTk4mMDAw15X7csvkyZMxMzPTjHHIgitXrmBnZ0dcXBw+Pj7Y2mrnR1WjRg22bdvGvXv3WLRoEba2tjk2VBYWFgwdOhQvLy+uX79Oz54905bHrKys2LRpE/369eP58+da6ZZXypUrx7RZsxhrYiJrMbqc4A9sMjRk4cqVOukvOjpa2pA/VQXeoWbzNPSTiTdv3mhkd24AbEDZdX87YJ1a27lz59ixY4eCvX44FLgwvyU4OJgKFSrIVv8iM/T09Ni8eTO2tra0bNmS1q1bZ3pu6ub+kiVLWLduHd27d8/03NxgaWnJtGnTmDZtGi9evGDx4sV4enrSsmVLXr9+TUJCAqamppQrV45atWpRr1496tTJOttmly5d6NWrF4MGDeKvv/7S+f6MEAIMDLhtYsKKhASmyFSfPjvigL4mJvy0YoXOMju8dyNotT+1UsHHO3fu5O7dd3PVQsBWdGNjnYE/gfQuDQsWLKB///45Hqh9rBQYmbfIGR+THWZmZmzevJnBgwdz7do1ypTRDHB48OABzs7OGBoacvny5VxlG8gNpUuXpnDhwnzxxRfMnTs3T7IWLVqEo6MjK1askK3eR04IDw/n66+/JiIigh3u7vTr3p1aUVF0UbjfZGBA0aLYdunC0OHDFe7tHRpu8Plbq02j/+LFiyvSjSTLODACeXOAZscKVFuVqQvdgYGBHDlyhC5dlL7S/n9TYILfcvPmTcU2/TOiQ4cO9OjRg+EZPJxSN/dbtWrF8ePHFTMwqciViTa13ocu92c8PT2xs7Ojbt26eHt74+joyAFPT4YWK4aSSU7eAEOKFCG6fn02bt+uYE+aWFio7fRnVeRIaYRm/zt37mTPnj1cv36dmJiYDD+WW27evCnxkCwEuMgiOedUQZV7ND3bdfy3//9IgZF5y82bNxUrtpQZixYt4v79+2zcuBF4t7k/e/Zsjh49mqvN/bwQGBgoW+EmXe3PxMfHM336dIYPH86OHTtYtGgRhoaqZCGNGjXiwIkTDC1RgnUK/H7PgK4mJrz8/HP2e3piZGQkex9ZoTEgeKrT7qU8Q1Xm4S3FixcnMTGR3bt3M3DgQMqWLYuVlRWtW7dm5MiRLF26lIMHDxIYGJirdDvqsTftyZ/Y02Fqx4cPH9YqR9rHRMFy2Vt0uVyWirGxMe7u7nz++eeYmpoye/ZsmjZtypUrV7KM+JaTlJQU7ty5Q40aNWST2aVLF3r27KnY/kxAQAD9+/enWrVq+Pr6Zpgt197enn98fOjTtSsnHj5kdWwscswHDwKjihTB6pNPOHf0zC0MwgAAIABJREFUaJ499bRBw/Hjvs5VyLTvZs2asWiRtE5pZGRkWqBpaGgoly9fTiu1XapUKWxsbDRKbX/yyScYGLzzjT5zRlqsqKdS3ycbPkcVUpaaY+D169f4+PjQtGnTfNLo/adgJoOq/ktkZKTitU8yomrVqrRo0YKBAwfy008/4ebmpjMDA/Dw4UNKly4tu8PDokWLiIyMZKXMHldubm60aNGCwYMH4+HhkWU69urVq3P+xg0+nTiRBkWLMsvQkGeZnp0154GOxYoxvVIlftu/nyQh+PXXX7WUljfs7e2lxeBeAv/miyqS3GVAho4spUqVSstKvmjRItzd3fHx8eHVq1d4eXkxadIkatWqxf3799mwYQOdO3emWLFi2NjY8NVXX+Hi4sLFixclMlsq+JWyQi+Dvn11XAn1/xsFMxne7cfo2iMqLCwMZ2dnjI2N6dKlC97e3vTsqdsxmlI1zg0NDdm9ezeNGzfG3t5emgZFCyIiIhg6dOj/sXfeYVFcXRx+6V2xVyyoKGBFsQULmkSj2DtYY4uxaywxny2RGFsUW4xGY1TsaGKMqLEldqXEQkewKzakLW1hvz8mIEtRyuwsmHmfhyeZ2d177q67c+aee87v8OTJEy5dupTvlZeRkRGLv/2WUePGsWzRIurt28eH+vr0jY/HmbzrGNOBG8BJXV12m5mRYGbGnMWLGTlqFAYGBlhbW9O2bVvatGlD06ZNi/TeCoqRkRGffPIJhw4denPSF0RZqhWEl6itZHR0dAqUAWlgYICNjQ02NjY5Ns8TExMJCwsjLCwMf39/NQ0+C9Bqu+3GCIWfGYSE5CLkJ5OJvJJB80WYuXHgwAFat25N9+7dOXHiBNu3b+e3337j999/l3QewcHBGms/m7E/4+rqWqT9mdOnT+Pg4EDt2rW5ePFioUJ7tWrV4oft27n79Cld16zhQOfO2JuaUt7YmPZlytCjdGkGWlrycenSNC1dGnN9fYZWr87DTz9l3dGjhD1+zNhx4zL3ferWrcu6desYOHCgxupC3sbw4cPVT9xErYmYJPyNmrhX69atRQu7mpiY0LhxY/r168fAgQPVHquFdvWwssc7suunyagjr2QQ5GSaNWsmia3Y2FgmTZqEj48Px44dy7RraWnJzp07Je+mGRISgq2trcbG7969O6dPn2bkyJEcOXKkQKvF1NRU3N3d2bJlC9u2baNLly5Fnk/p0qUZPXo0o0ePxt/fn6FDh7Lkhx+IjY0lMTERS0tLypcvj42NzTvDloMGDcLb25vp06fz008/FXluBcHFxQUbG5s38ipKBFmgAW97lYg8QnBsWdBU2rqa2jTCSkabZE/Q1sZNRklCXskg3ab/1atXMzdtr1+/nsOxOTk5MX78eEm7aYqVvvw2li1bxqtXrwq0PxMcHEyrVq24efMmN2/eFMXBZCcoKIjGjRvTvn17XFxcGDBgAB999NE7pfazsmHDBq1Uf+vp6TFv3jz1kwHALQmMpyDo22VZxTRs2JC+fftqxFxxk9bP/suUizHfzn/+00lPTycwMFCjNTJKpZJly5bRt29fVq9e/dbN/QULFkjaTVPM9OW8yNifWb58OZcvX37n83fs2EG7du0YMWIEhw4dyrVYVQyCgoKK/N4zhE+nT5+eQ7RR0wwbNixnI7zfEQRPNYUKoew9SwaFjo4O69at09jFNnvxqTbLgiBnVFLsHlHvG//5cFl4eDjly5fXWJXyvXv3GDp0KMbGxly/fp2qVau+9fm6urrs3LmTFi1aaLSbJghhiJiYGKpXr64xGxlYWVmxZcsWhgwZgq+vb66O4/Xr10yYMIHbt29z5swZjRfHBgUF5Yj3F4ZGjRpltnC4dOmSZHUzDx8+JC0tDV1d3Tcr3xRgF4JqZCWRDaYjtI/MllE2duxYOnbsKLKxN2QvRo78dyraukMOz3Ysxe+nJPOfX8losggzY3PfxcWFEydOvNPBZFC9enU2bNiAm5ubRuO9ISEh1KtXT7JwhIuLC3379mXkyJE59LfOnj1L48aNqVixIj4+PpKoLwQFBYm2HzV58mSsrKxyhrA0xIEDB3B0dKR79+45u5EmIIh6hYloMAnYB2TL1m3SpInoaerZKVOmDBUrvhHcTyTXxqyS8U+2YxsbG63Mo6Tw3q9knjx5wtmzZ7l87TL/BPzD06dPSUxIxMjECHMzc/RUelQoW4Hr16/j4OCgVgBWWGJjY5k4cSJ+fn54e3sXKsW1X79+eHt7M2XKFH7++ecizyk3NJW+/DaWLVtGx44d8fDwYNq0aSiVSpYsWcLmzZv56aef6NatmyTzUCqVREZGilqEum3bNhwcHGjfvj09e/YUbdysxMTEMGnSJHx9fTl+/Hjmvt6dO3fUiyCTAE+E/sOdyKGUXCDCEUS7otVPW1lZcfToUfWaHQ3RokULjh07lnl8BtBcukrepAHnsp1zdHTUwkxKDu+lk0lOTsbT0xOPTR6EhoRiYG1AXMU4ocGSNWCIID6VArwEo5dGfNj/Q3QSdHBzc2PGlBnUqVOnULavXLnC0KFD6dy5M9evX8fU1LTQ78PDw4MWLVqwe/fuInfTzA0pNv2zk7E/4+joiJWVFd9//z0WFhb4+fnl1OTSIBEREVSrVg1jY/E0fMuUKZOZIdiiRYt8r1zzy6VLlxg+fDidO3fGx8dH7bv17bffkpKSknMv7ypCQkAbBM36/L5dFUJH1PPkjA8hpISfOHFCslCRs7OzmpPZB0yUxLI6p4CszczLlSsnuRyVjIioVKqPVQUgPT1dtWXLFlXZSmVV5vbmKoagYgEqFuXzbwoqg44GKpPSJqr+Q/qrHj9+nG/bqampqoULF6oqV66s+v333wsy7bdy8+ZNVaVKlVQRERGijZnBwIEDVXv27BF93Pwwffp0la6ursrd3V2Vnp4uuf1ff/1V1aNHD42M/fXXX6s6dOigUiqVooyXkpKiWrhwoapKlSrv/G6tXr1aZWBgoEJwE+p/+qhogIruqBiLirlZvvsLhO8/Q1DRBhVlc3n9v3+NGzdWPXr0SJT3ll/u3Lmj0tHRyZyDDqhugUol8V/vbJ/FmDFjJP0c8uBj6a/O+ee92ZO5d+8eDq0dmP7ddF71ekX8gHioT8HeYVlI7ZhK4ueJHHlyhHp29fh5+7tDVXfv3sXZ2ZlLly7h5+eHi4tLod9HdjK6aQ4aNEh0IT5trGRiYmJwc3PjxIkTuLq65ivbTBOIuR+Tna+++goDAwO+/fbbIo8VFBRE69atuXr1ar6+W9OmTePcuXO5r8SVQDBC6GsL8B2wCFgCfI3QXnIPcBn12/V/0dPTo1OnThgaGlK+fPkivKuCY21tTbt27TKPVQjTlpJ/gN+ynctRFCuTg/fCyZw5c4ZGDo24XfY28UPjBQW7omAEKR1TSHBNYPL/JjN89HCUeTTBOnDgAG3atMHFxYXjx49rpIhy+vTpVKpUqUDdNN+FJoQx38WVK1do3rw55ubmXL9+nW3btvHy5UvWrl0r2Rwy0KST0dXVZdeuXWzatImzZ88WagyVSsXmzZszde28vb3zHU5s27Ytt2/fZvHixfnLmsxHfzdnZ2d8fHw4deoU1apVK3LvocIwc+ZMteP95Nwf0RQqYDJqpUG0atVKzfHJlEBU+QiX/frrryrTMqYqRhUgLFaQv3mozOzMVB93/1iVkpKSaTcmJkbl5uamsrOzU/3zzz8aXAkLREVFqapVq6Y6ffq0KONFRkaqatSoIcpY7+JtocR79+6pKlWqpLp06ZIkc8nA0dFRdfnyZY3a8Pb2VllZWalevHhRoNdFRUWpXFxcVI6OjqqQkJAizeHVq1cqd3d3lY2NTZ7hr7z+jI2NVYMGDVKdP38+x5g1a9ZU/fnnn0WaW0FJT09XNW/eXG2OtUD1SoIw2Xe5fD7e3t6Svv+3IIfLNMW5c+dwHeWKYqBCc80lDCGhXwLn759n8LDBqFQqrly5goODA2ZmZly/fl2Sjb+s3TTF6NMiVajs3r17ODs7c/HiRXx9fXOEe2rUqJHZf+bVq1xiNBpApVJJ8v67du3KwIEDGTFiRL5bJh8/fpzmzZtjb2/PxYsXi5weW6ZMGebNm0dISAh+fn6sXLkSGxsbKlWqpKa8ra+vT9WqVenYsSOTJ0/m0KFDPH36lL179+Lk5JRjzF9++YURI0YQFSVdMxsdHR02bNigVvR5FxiIkMOjKf4A/pftXO/evenatasGrb4/FC+9hmz866FP5PbYw4cPsW9qT2yPWGkkWVPBbI8ZnRt3xueaD1u3btXKl2zGjBncvXtXXYG3EHh4eHDnzh2NhqoOHDjAlClTmDZtGrNmzXprRfi0adO4c+dOgfXNCsPDhw9p2bIljx8/fveTi0hqairt27fHzc2NSZMm5fm8xMRE5s6dy5EjRzIVDzSFi4sL48aNy0yzTkpKKlSW3VdffYW/vz9//PGHZLVWISEhtG/fnmfPnqmd742wnSRerqDACaAfQulRBhUqVMDf31/jHWsLQBcdHZ2T2p5EXpTIlYxKpaLfkH4omiuk0/w2gIReCZw8c5KdO3dq7S5m6dKlat00cyM9PR1/f39Wr17N8OHDadmyJdbW1pQtW5YKFSpQp04dli9fjq+vL1u2bCE8PJcc1SIQGxvL8OHDWbhwId7e3syZM+edkiMrVqyQbH9Gk/sx2TEwMMDT05NvvvlGrX1wVq5fv07Tpk158uQJ/v7+Go/zBwQEYG9vn3lc2DTuxYsXExMTI9me2o4dO3BycmLOnDk5Wkf8CnyIuG11NgA9UHcwenp67Nixozg5mGJPiVzJ7Nq1i8/nf07c8DjJ3aSOvw4NHzbkxvUbWhPuCw8Pp23btpw+fVqtMv7Ro0f88MMP7Ny5k/v37xdozCZNmjBy5EhGjx5dJC2ma9eu4ebmRps2bfjhhx8K1IDt/v37tGzZksOHD2u00+C6desICQlh/fr1GrORnQMHDvDVV1/h6+ub+fmmpaWxcuVKVq1axZo1azRSC5WdhIQEKlasSGxsrCiFxw8ePKBly5ZqiuJiExcXx4QJE/D392fv3r00atSIly9f0q5dO4KCgtSeWx5YAYyg8Be3u8AUBBm47Pz444+MGzeukCNrDHklIyZKpZJZ82YR10l6BwOgaqri7ou7kvd9yUrdunVZunQprq6uJCYm8vz5cyZMmECdOnVwd3cvsIMBoafO9OnTqVmzJkuWLCEpKalAr09LS2PZsmX07t2blStXFqrDp1T7M1KuZDIYMGAA7du3Z8qUKcCbvao///wTPz8/SRwMQGBgYI7WxkXBysqKdevWMWjQII1IIPn4+ODg4ICuri7Xr1/PvKkqV64cp06dyiE/9AIYBTgghM8K8i0ORijwtCWng9HV1WX9+vXF0cEUe0rcSmbfvn2MXTCWOFct9nAIhMaRjblx7Yb25gCZF2MfHx/RL8p169Zl27Zt+Qrd3L9/n2HDhqGvry9KKGHatGlERETw22+/aWS16OzszPz583NtFaxJFAoFjo6OdOrUiYMHD+Zrr0pstm/fzunTp9m5c6eo444ePRodHR3R+uqoVCrWrl2Lu7s769evz1PI9PXr17i5uampAWTFEugCdADsACugNILzeQWEAtcRWvHkHswUehBt376d3r17F+UtaRJ5JSMmazetJa6xlpsENRBCVtpsu5qcnIyuri4nT57M1cGYAX0R6uvOICiDvAKeI4gLHge+BT4id22h8PBwOnXqxLJly946Dy8vLxwdHTPvysWIVa9YsYIXL16wbt26Io+VG9pYyQCkpKRQu3ZtNm3axA8//JCvvSqxCQwMVNuPEYu1a9dy8eJFdu/e/e4nv4Nnz57RvXt39u7dy9WrV9+qlG1pacnRo0dZtWpVrivn1wgSNJ8DHYE6CCG16ghtlPsDy8jbwbRv3x4/P7/i7GCKPSXKycTExOB7zVeo5NcmupBmm8ahw0XL8CoscXFxdO/ePdcfdF1gM/AU8EIoIHNG+HGVQfiB2SDc3X2JcAf3EKF6OnsNt1KpZO7cuUycODFHE7XExESmTp3KV199hbe3N4sWLRLtgpmhb/btt9+Krgjw+vVrEhMTJes8msHp06dp3Lgx1apVY+XKlSxcuLDAIUkxyL7pLxYZfXVmzJhBZGRkocc5deoUzZs3p2XLlly4cIHatbM3O86Jjo4OM2bMICAgAFdXV1FCgdbW1uzYsYNz585hbW1d5PH+y5QoJ3P+/HmMaxmDgbZnAsk1k/nteHaRCc2TlJREr169OH36tNp5M2AVEASMBcxzeW1eVAK+QljtTCHnl2Ljxo2ZewkgxMmbNGlCdHR0ZsxcbGrUqJHZf0bMUGBgYKCkq5jk5GTmzp3L8OHD2bRpEz/++CNTp07Fzs6OL7/8UrJ5ZKApJwOCBNLcuXMLJYGkVCpZtGgRY8aMwdPTk0WLFhXYWdSsWRNPT0+CgoKYPn16gQVXdXV1+eijj/D09CQkJIRhw4YVu66cJZFi/Qlm35NZtHgRS84tIa1jmhZn9S8JYL7FnLhoaUN3rq6u7NmzR+2cLXAQIeYsBicBVyB7yeeKFSswMDDA3d0dDw8PhgwZIpLFvJk6dSqRkZGi7c9s3bqVCxcuaKx9QlYCAwNxc3PD2tqazZs3qzVqe/36NQ4ODqxevZpevXppfC4gNKmrXLkysbGxGgvTqVQqevfuTcOGDXF3d8/Xa+7evYurqyuVKlVi69atlC1bVpS5pKWl4efnx7lz59iyZQspKSno6ekRExODiYkJFhYW1KxZE1tbW9q0aUPHjh2pUKGCKLYlpljvyZQoqX//AH/SyhQDBwNgBqnKVF69eiXaj+Jd/PjjjzkcTEvAGxBzBh8jKLx/jBBKy2D27NnY29tz9erVfIUxxGDlypV06NCB9evXM3ny5CKPFxwcrPGVjEqlYsuWLSxYsICvv/4614wkS0tL9u7dS8+ePWnWrBk1atTQ6JzgTWaZJveBMjb/HRwccHZ25sMPP3zr8zMKdufOncvUqVNFnYuenh6Ojo44Ojpy4sQJZs2aRZcuXUS1IfNuSpSTiXoWBZr/LeYbo1JGPH/+XBIn8+DBA7744gu1cw0RNvDLaMCeLcISsh1vBHlVKhVpaWmSFqJl7M+0bNkSR0dHWrdu/c7XJCUlERoaSkREBC9evCA1NRU9PT3KlSvHlStXRHFWeREVFcWnn37Ky5cvuXDhAnXr1s3zuS1btmTq1KkMHTqUs2fPipZWnBeaDJVlpUKFCuzatQtXV1f8/PyoVClnH+i4uDgmTpyIj48Px48f17g0k9RisDJvKFF7MgkJCcViPyYDHSMd4uPjJbE1a9YsNVulgMNoxsFkYAfsQD2mGhQUhIeHhwat5iRjf2bw4MF57s9ERETwzTff4OTkRKlSpWjSpAl9+vRh7NixfP7554wfP57+/ftz4cIFhgwZgoODA7Nnz+aff7I30y08hw4dokmTJjRq1Ijz58+/1cFkMGfOHIyNjUVV2M4LqZwMQIcOHRg+fDijRo3Kodvm6+tL8+bNASTR/ktOTiYqKkqS1aJMTkqUkzEyMsqXLLlUqJQqUTsr5kVQUBAHDhxQO7cKIZNM03QHsgd7VqxYgUKhkMD6G3r06EGvXr0YOXKk2kXr3LlzdOnShbp167JgwQIuXrz4zk3nDNmdFStW0KxZMxwdHTl06FCODLr8EhcXx/jx4/niiy/w8vLiu+++w8Agf3dDGW0BfvrpJ86cOVMo+/lFSicD8M033/D69evMVHSVSoWHhweffPIJX3/9daEKdgvDnTt3qFmzJvr6JSpw895QopxM2TJlC1bCq2GU8UpJfiSrV69WuwC2AD7VuNU3fItQ1JbB8+fP2bFjh4QzEFi5ciXPnz9n/fr1PHz4kAEDBuDs7MzJkyfzrXKcGz4+PvTr1w9HR0euXbtWoNdevXoVBwcHEhMTuXnzJh988EGB7VesWJGdO3cyatQoXrx4UeDX5xepnYy+vj67du3C3d2dM2fO0KNHD/bs2cOVK1cYPHiwZPMICwuTQ2VapEQ5mUYNGqHzqpgkxKVASkIKtra2WFtb07VrV6ZMmcLGjRs5deoU9+/fL9KFL4PExET279+vdm4e0v7DlQWy6wdrw8lk7M/Mnz8fGxsbDh48mPeTywD1EPRFHBH62zdAKAbK4yvk5+fHBx98wNKlS9+5qlEqlSxbtow+ffqwYsUKduzYoSadX1CcnZ0ZMmQIw4cPF+V7k53Y2Fiio6OpWVNTPTFyx9rams8++4wuXbpgZWXF+fPnJa87kZ2MdilR68dmTZphfsacOLRc8Q/wFKwbWBNyI4THjx8TGBhIREQEAQEBHD58mIiICB4/fkzVqlWxs7PD3t4ea2trrK2tadSoUa6boblx6tQpYmJiMo+rAD019JbexliEFU3GpffKlSuZ708qMqRGsn4eatQAmiBUm75N4zMRuAPcBMJQa3eoVCqZN28e169fZ/fu3bmGQyMjIxk2bBimpqb4+PiI9hksWbKEDh064OHhwbRp00QZM4OM+iAp6z6USiVLlixhy5YtdOrUCaVSme8wopiEhYXRtGlTye3KCJQoJ9OhQweUk5XCRUHLCxq9u3p0+6gbAFWrVs31QpOcnEx4eHimA/L19WXHjh3cvHkTfX19rK2tczggOzs7TExMMsc4d+6c2pj9Ac3mIOVODaAVQvt3EC74Z8+exc3NTRL7KpWKMWPGsG3btpwP1gI6IwhT5QcThNS8hgiKimeBAPWnHD58mG7duvHHH3+o/Xvs2LGDmTNn8sUXX4iuO6avr8/evXtxdHSkTZs2tGrVSrSxpQ6V3bt3D1dXV8qXL8+tW7cwNjamRYsW7NmzR5L6qqyEhYUxYMAASW3KvKFEORkrKysqV6pM5P1IzXXCzCem4ab0Wdjnrc8xMjLC3t4+1x/3w4cPCQ0NJTQ0lJCQEP766y9CQ0N59OgRNWrUoH79+tSvXz+H2rO0ko7qdOaNkwEhM0gqJzNr1qycDsYA6IoQEivsTUd5YADQFKEpSZbmIWfPnmXw4MEcOnSI6Ohoxo4dS3h4eKZEjCawsrJiw4YNDB06FF9fX0qVKiXKuFI6mYMHDzJ58mTmzp3LlClTMldP+/fv56OPPqJ169aS1VmBHC7TNiXKyQBMGDOBRfsXoagpbXaTGo/BOM24SM2lqlevTvXq1XMoAaekpGSKb4aGhvLgwQO1x7W56M9uOzQ0VBK7u3fvZtWqVeonLQA3oGDKIXlTDxgPeAJZOgofOXKEkSNHcu7cOfr27cvevXuFLEcN0q9fP06ePMnYsWPZt2+fKGMGBATw0UcfiTJWXmR09zx58iTe3t45QlSNGjVi9uzZDB48mAsXLkgSOktMTOTly5dUr15d47ZkcqdEbfwDjBs7Dp0wHUFeVUuYXTXjyy++1Eh829DQEDs7O/r06cPMmTPVRBT10W4tap1sx48eidmHMHfu3bvHZ599pn7SAqFpiFgOJoNSwMic4+7atYvZs2fj4eGhcQeTgYeHByEhIWzfvl2U8TS9kgkICKBly5aZenZ57YFMnz6dSpUqsXjxYo3NJSvh4eHUqlVL44WuMnlT4lYypUuXZvLEyaw9vhZFDy2sZu6D0VMjxo8br3FT2Qs9LdDuXUHpbMeaaFKVnalTp6rbMUBYwWhKZMHk3/E3Q9b8ki1btvDZZ59JtnFtbGyMp6cnzs7OtGrV6p1SOPHx8fj7+xMcHMyjR49QKBQolUrMzc0pVaoUr1690khNV9a+L/np7qmjo8PWrVtp1qwZzs7OdO7cWfQ5ZUUOlWmfEudkAObPm8+27dtQhCukqUjMQAlmJ83Y6LERU1NTjZvTRCprUcju4ApbvJhfLly4wG+/ZVO67or4K5jsWCA04/nlzalbt27xyy+/MGbMGA0bf4O9vT1Llixh4MCBXLt2TS0BAeDp06fs3r2bgwcPcv36dZTKt1cqV65cGXt7e3r16sWwYcOoX79oPTNevHjBqFGjiIqK4vLly9Spk32tmzsZsjPDhw/Hz8+P8uWzN5kQD1lORvuUuHAZgKmpKfs992P6hylSZjMb/WmEc0tnBg0aJIm97HUX8ahl20pO9sRhsTal8+Lbb79VP1ETYZNfCmoD2VrWL1u2jLQ0aQVax40bR+PGjZk9e3bmudDQUEaNGkWNGjWYOXMmly9ffqeDAeGm5fbt27i7u2Nra0u3bt24dOlSoeZ19uxZmjVrhrW1NRcvXsy3g8mgY8eOGq0LykBeyWifEulkQEhn/mrOV5jtN5NEBUD/ij5Vo6vi+bOn5o39i4GBgZo8fCrqqshSk70VVUpKCidOnODu3buir2ru3bvHiRMn1E92RtrU9U6orfXDw8M1Lv2SG5s2beLkyZPs27ePL7/8kkaNGrF9+/YC92zJikqlwtvbGycnJ4YOHUpUVNS7X8Sbvi9ubm5s2bIFDw+PQocQ3d3diY6OZv369YV6fX6QnYz2KZHhsgzmzZnH48eP2b53OwkDEoTOXRpA/4o+5W6X4+/Lf2v87j079evXV7vbvEn+y0HE5ma2YyMjI1atWkVoaCjPnj3DxsYmM/W6QYMG1K9fHxsbGyws3lYZmTu7d+9Wd1zVkT7rwQKhliaLhqanp6fGs7RyTMPCgiVLluDq6vrWFYsdb2pRzRB+3AkINwc3EVoMZ1+HqVQqPD09OXXqFLt27XqrNP/9+/dxc3PDxMQEPz+/AjcFy46+vj6enp60bt2adu3aaaRgUnYy2qdEOxmA9R7rKV26NB4/epDQOwHELEBPBZNTJlSJqcLfV/6WVOI+AwcHBzUncxZBtFIbZL+HnzZtGqNGjQKEVU1YWFhm4elff/3Fxo0bMwtPsxadZvx/rVq18ixmPHkyWw8mbeVuN0HNyWTopElZOX/27FnGjBmTq4NpgJB5PZB3f/UxL3ngAAAgAElEQVRjEEqBfgIuZHssKiqKrl27snHjxlz73xw6dIgJEyYwYcIEFixYIFoRqrW1NevXr2fgwIH4+fkVSZonOwkJCbx+/Vorv1uZNxQTIbDcyd4Z8214eXkxcuxIkpsmk9o2tegtAe4Km/xdnLrwy9ZfRP3yFwQvLy/69++feVwTiED6OOczoBrqItiRkZHUqlXrna+Njo4mICBATXonMDAwV9kdOzs7bG1tqV69ulr6NtPJmd4mBenAMiD5zamQkBBsbGwkMX/y5El69eql/lkgLOpWIChAFOa78DfCR+qXy2OrV6/OlLXJqH05ceIEe/bsoVmzZrm8ouiMHDkSQ0NDNm/eLNqYN27cYOjQody6dUu0MYspxboz5nvjZAAeP37MZ5M/48zfZ0h0TCS9aToUpKxBBdwH82vmmMaYsnn9Zsla4+ZFXFwclStXVpPWP4HQtVJKvgOydqRv2rQp/v7+RRozISEhs+g0ODiY4OBgQkNDCQoKUr+olka4ImqLnQhaZ/9y6NAh+vR5u9qDGPj4+ODs7JwjlX0EsB4o6m1PGoIe3WLUw2g6Ojp4enrSpEkTBg8eTNOmTdm4caNGb7QSEhJo3rw5CxcuFE125uDBg+zevZtDhw6JMl4xplg7mRIfLstK1apVOeJ1BH9/f+Z/M5/T606jX0+f+OrxQky/HDnfcSwQBQb3DTAKNaKMRRm++uIrRo0ahaGhofRvIhsWFhb06dMHT883CQfuSOtk4oHV2c4NHz68yOOamZnh4OCAg4N6ytjvv/9Oz55ZZEA1l+GaP8qj5mTCw8M1bjI6Opr+/furORgdYCUwQyQbesB8hIS9gUDGbYxKpWLkyJFYWFiwZs0ahg4dKpLFvDEzM2P37t188skntGnTJl8r5Hch78cUD94rJ5NBs2bNOHroKNHR0Rw5coTfj//O1ZNXiXoYhZ6hHgamBqSlppGakIqphSk2tja4fOSCyxqXHBe84sDMmTPZvXt3Zqrn38ABBMktKViMEC7LoHTp0pl7MZrg9etscg7aiVTmaT/H/DTApEmTuHfvntq5teRsuSAG3YGjwCe8iQqmpKRQoUIFSfu+ZHQrHTRokCiyM2FhYbRp00ak2ckUlhKbwpwfypQpw4gRIzi45yAPwh+giFfw6O4j/rn0D+G3w4l+Gc3r56+59vc1FsxfUCwdDAhOs1u3bmrnJgGPJbB9HliT7dy0adOwtLTM7emikJiYqH5C27dC2Ra0mm65ffr0aXbv3q12bgaacTAZOCOIHGQlODiYtWvXatBqTmbMmEHFihVFaUctr2SKB++1k8mOvr4+ZcuWxdramipVqkjS1VIsVq9eraab9Qxh01eTwjr3gcGob/bXrFlTrTBQE+SQP5G2/jEn2cpRNK32MG/ePLXj5gh7YppmODAs2zl3d3dJ5IMy0NHRYdu2bWzbtq3INUlytX/xQNv3iDL5pF69eixatIgvv3yz/X4ZQf3kECD2Ze8h0AX11ZKuri6bN2/W+EW2dOlsaWQJuT9PMrLZzzE/ETlz5oxaC2hdYBNFT5bML6sQQmfR/x6/evWKzZs3M3PmTIlmIMjObNu2jZEjR75TdiY1NZWAgABCQ0OJiorKTJAxNzfn9evXxU6a6b/Ie5Vd9r6Tnp6Oi4sL3t7eaudbI+zRiCVmfh3oBzzIdn7evHm4u7uLZCVvbt++TaNGjd6cKANM1bjZvNkNZOlqYGdnR7t27bC1tcXOzo769etTo4Y4laKurq7s2bMn87gv4CXKyPnna2BhlmNbW1sCAwMlngXMnj2bgIAAjh49qlaXFBcXx8GDB/lp50/4XfPDsKwhVIBkk2RSdVPR19VHL1EPw1hDUp6mYGFugUs3F8aMHPO+7tEU6+wy2cmUMGJjY3F2dsbPT73CoTxCBpgbhf9HTUbIXvoaSMn22ODBg/H09BS1E2ReJCUlUapUKXXZlC/QTgKACqEgJUtc8pdffiEpKSlHzY+1tTX29vZqdT/29vb5Vj9WKBRUqFBBLV39L6C9qG/o3bxEKOzM+h3w9/eXvIVxamoq7du3x83NjUmTJvHq1Su+XfYtm37chE5NHeJt4wWNuXd9vM9BL1QPkwATqpevzvIly+nRo4cUb0EqZCdTWGQnkzvPnj2jW7du+Pr65nisNUI9S3fy36Y5EaFX11KEQs/s9O/fH09PT0lTutu2bcvly1n6cPZGO1X/DxFK5P+lXLlyPHv2LIezjYmJITw8XM3xBAQEEBERkWvBadOmTXPUnZw6dUpNsqYWwr+HNn6kvYGs+tfLly9n1qxZks/jzp07tGnThilTprBizQpS6qWQ1DoJCpN3ogJCwPyCOc1smrFj6w5RUqWLAbKTKSyyk8mbuLg4XF1dOXr0aK6PV0G4UHREUEapzZskqQQgDEEt5U+EGHxsLmPo6Ogwffp0VqxYIckKJisLFixQzzCyRtiZlppjwJstEgYOHFigbpWpqak8ePBAzfEEBgYSHBxMqVKl1ByPr68vO3fuzHztOOBH8d5JgfgB+DzLcc+ePXO2XZAAhUJB125d8Q31RdFTIXyxi0oa6F3Vw9THlF0/71KvySqZyE6msMhO5u2oVCq+//575s+fnzPtNxcMERK18pOsValSJX788UetKR6Ehobm7HcyHnEuMvlFAXigJinz66+/ivKZpKWlERkZSVBQEEFBQQQHB3PkyBFevnyZ+ZxtCA1AtcEN1BeO9erVk6zddgbR0dF06tKJkPQQErsmip/98AhMD5my/JvlTJwwUeTBJUV2MoVFdjL5IzIyki+++ILDhw8XOZvGyMiI8ePHs3jxYo3WwuSH9u3bc/78+TcnbIC3N14UlxMIKXz/UrVqVSIjIzUWNmzZsiXXr1/PPL4ItNWIpXeTiKDknPFt0tfXJyUlRTJh0ISEBNp0aEOocSjJHyZr7koVDWZ7zVi9ZDVjx4zVkBGNU6ydzH+qTuZ9pXbt2nh5eXHjxg3GjBlTqBTbatWqMWfOHO7cuYOHh4fWHQyglq4NCBleUiU5PQGuqp+aNWuWRvelYmLU28JpU03HBPXOGUqlkoQEaXLJVSoVfQf1JVwvXLMOBqAMJAxKYNqcaZw+fVqDhv67yCuZ95CkpCTOnTvH2bNn8ff3JyQkhKioKJKThbiPqakp1apVo0GDBjg6OtK5c2dat24t+b5LfnB2dubcuXNvTpggbFaU0aDRJITy91dvTllbW3P79u0cLZDFpGbNmty/fz/z+B7St9DJSkXgeZbjZ8+eUaFCBY3b/X719yxYt4CEoQn5z14pKpFgecySkNshVKxYUSKjolGsVzKyk/kPkZKSgp6eHnp6Uv1yi05gYCAODg6ZDhIQhE4/RTNN6pTALuCu+umjR4/SvbtmO/nY2toSHByceRyE0C9GW5ihriiRkJCg8ULcBw8e0KBRAxQjFFBWo6ZyYHjakJ7Ve3Jg9wFpDRedYu1kit+tq4zGMDQ0LFEOBoTCx+XLl6uffAn8DIitU5lErg7m888/17iDAUFrLytPNW4xb2JQdzDGxsYadzAA02dPJ7VFquQOBiClXQrHTh7Dx8dHeuPvMbKTkSn2TJ48Oafc/AuEkJZYCU+P/x3vrvppJycnVq1aJZKRt5NdZytIEqu5E5ztWEdHh+HDh7Ns2TJ+//13nj4V3wVGRkZy7NgxUlumvvvJmsAQklolMW/RvHc/VybfyNplMsWeDNHE6Oho/vjjjzcPKBAkXxoCnSncPk0CgtT0NYQumFlo1KgRR44cyXfFflGxt7dXO74ATJDEck7OZztu27YtTk5OBAQEcOrUKW7evElqampmkamdnR3NmzenSZMmWFhYFMrm5p82k964gI0GRSa9WTrn157n6dOnVK5cWXsTeY+QnYxMicDAwIBDhw4xatSoHDL43EbIOrPjTeXp277Z6QjCbLeAm+TU0EFYwRw5ciRHCEuTtGvXTu34JIIAtFTimFn5I9txv379GDdunNq5jLbavr6+BAYGcuDAAW7cuIGFhYWavI6dnR0ODg7vDLdt27GN5B7Jb32OxjEA3Qa67Nu3j6lTtSmY9/4gb/zLlChUKhUrV67kq6++Utc2y4oBgvhWecACweGkIaxaXgKPEPZf8mDSpEmsXLlSrbWCFKSmplKlShW1gszDCMoNUnIXqMObhZ2Ojg5hYWHUqVMnX69//PhxprpBhgMKCRGytrI6Hnt7exo2bIiRkRF37tyhccvGKKZosnlFPgmEDq87cO7EOW3PJL8U641/2cnIlEh8fX2ZMGGCWvFiUalbty7r1q2ja9euoo1ZUCZOnMjGjRszj1ujVg8qzRyAjVmO27Zty8WLF4s0ZmpqKiEhIQQEBHDr1i0CAgK4ffs2jx49okGDBlSrVo2/nvxFXA/petfkSQKYbjIlIVbbPSbyjexkCovsZGTeRnp6Onv37uXbb78lICCg0ONYWVkxa9Ysxo4dK9n+S17cuHGDZs2aqSk3/ApIJe4TCjRGTUmH7du3M2LECI3YUygUBAUFser7Vex7uo/09unvfpEEGH9vzL2weyWlZqZYOxk5u0ymxKKrq4urqyu3bt3i/PnzjB8/Pt+qupUqVcLNzY2jR48SERHB5MmTte5gAJo0aZIjXXoq4mdr50YagjxcVgdTu3Zt3NzcNGbT1NSU5s2bk5SeRHrp4uFgAIzKG6kVxsoUHnnjX6bEo6Ojg5OTE05OTgDcv38/cx/g9evXJCYmYmRkROnSpTMVj+vVqyeZDldB+e677zhx4kTmntM9YCRCB1RN3hUuAs5lO7ds2TL09TV/mYiJjRH2z4oJOkY6kradfp+RnYzMe0eNGjWoUaOGVvdWioK9vT0zZsxg2bJlmed+AyYD69FMjHsLkL3n6SeffMKAAQM0YC0nKpWq2AXv5dbN4iCHy2RkiiFff/01LVu2VDu3ERhNrhnXRWI5Qpgs6yW1cuXK/PzzzyJbyhvL0pbqcToto0pWUapUKW1P471AdjIyMsUQQ0NDDh48iJWVldr5n4F2QLgINl4CA4A5qDsYU1NTvLy8qFSpkghW8odNbRt0Y4rP5Sj5RTI1amhTnvT9ofj8q8rIyKhhZWXF8ePHc1zsrwGNgP+hJhSdb5IQwm71gYPZHjMyMmL//v20bSttJxt7W3vMYjSheFoIEkBXpVtSMsuKPbKTkZEpxtjZ2XHx4kXq1q2rdj4JYQ+lJoIg9UnUBS2zo0Sot/kCQRBhMsJKJiuWlpYcP35cEjHQ7LRt25a0yPz0bJWAe9CidQttz+K9Qd74l5Ep5tSpU4fr168zevRoDh06pPZYPEII7WeE9tq2CE6kHEIrllcI2WnBwNtypVq0aMG+ffuwtrbWwDt4N3Xq1MHc1BxFlAKki9LliuldU/q69tXuJN4j5JWMjEwJwNLSEi8vL44cOZJjnyaDFOAGQvHmVgRR6YPAdfJ2MKampixcuJCLFy9qzcFk8OnwTzG6rUV1TIBUSA9KZ+DAgdqdx3uE7GRkZEoQPXr0ECrkV62ievXqhR6ndOnSzJ49m8jISBYtWqTRttL5ZdyYceje0NVqlpmuny7t2rejSpUq2pvEe0Yxy0xXR5aVkZHJm7S0NE6fPo2Xlxdnz54lLCzsrc+vUqUKzs7O9OzZk549e2q0lXRh6T+kP789+w1le6X0xlPA9EdT/j7xN82bN5fefuEp1rIyspORkXlPiI6OJiQkhAcPHhAXF4dSqaRMmTJUqFCBBg0alIj+KHL75UIhO5nCIjsZGZn/Ht+v/p4F6xaQMDRByF6QgkiwPGZJyO2Qkpi6XKydjLwnIyMjU6yYPm06H9h9gMkJE/UqUU3xCkyPmOK116skOphij+xkZGRkihU6Ojoc2neIuml1MTptpFlHEw2me01ZvWw1nTp10qCh/y6yk5GRkSl2mJmZ8fepv7FLtcPkdxOhD7XYPATTXaYsX7SccWPHvfv5MoVCdjIyMjLFEktLSy6evYhLAxfMtpvBY5EGTgP9i/pYHLJg3/Z9TJwwUaSBZXJDdjIyMjLFFhMTE/Z77mfTd5sofag0xt7Ghe/gpgKCwHybOR+oPuC2/21cXFzEnK5MLshORkZGptgzdOhQIkMjmdJpCmbbzbA4ZAGBQGI+XvwM9C7oYb7FHNtgW/b+uJdzf56TVZYlQk5hlpGRKVHExcXh5eXF1l1b8bnig2FZQygPyabJpOikoK+rj36yPkZxRiQ/TqaURSl6dO/B6BGjad26tbanrwmKdQqz7GRkZGRKLKmpqQQEBBAaGsrTp09JTBSWNuXKlaNmzZrY2dlRrVo1Lc9S48hOprDITkZGRkbmnRRrJyPvycjIyMjIaAwdpKmplZGRkZH5DyKvZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRktIEskCkjIyNTspEFMmVkZGRk/pvITkZGRkZGRmPoa3sC/3UePHhAYGAgd+/e5fVroXm5kZERlStXxsbGhoYNG2JoaKjlWcrIyMgUDtnJaIHLly+z5ectHD12lARFAgZVDEgplUKqYSpp6WkYYoihwhDdl7okPU+iaYumjBk2hgEDBlC6dGltT19GRkYm38gb/xLy66+/MmfBHB6/fEyifSJp9dOg/DtelAxEgnmwOemR6YwdPZb58+ZTrlw5KaYsIyNT/CnWG/+yk5GAyMhIhn46lJt3bhLvFA82FO6TjwGjK0YYhhiyesVqRn86WuypysjIlDyKtZORN/41zK+//krj5o25anSV+FHxUJ/Cu/bSkNwlmbiBcUxdPJVe/XuRkJAg5nRlZGRkREV2Mhpkww8bcBvjRnz/eNLapIn3aVeGhOEJnLx3kjYd2vDq1SuRBpaRkZERF9nJaIjNWzYzZ9EcFEMVUE0DBvQhqXsSIWYhtOvUjvj4eA0YkZGRkSkaspPRAKdOnWL63OkkDE6AMho0pAMpnVKIMI6g98DeqFQqDRqTkZGRKTiykxGZZ8+eMcB1AIqeCigrjc2kj5O4EnKFld+vlMagjIyMTD6RnYzITJo+iUTbRKgloVE9SOiRwKJvFnHv3j0JDcvIyMi8HbkYU0R8fX05dvIYyeOSpTdeBlJapDBt1jQO7z8svf0Ckp6ezt27d7l37x7R0dGkpaVhYWFBxYoVsbGxwdzcXNtTlJGREQHZyYjI/xb/j8SWiaAlFRhlSyUnNp4gPDycunXramcSb+Hp06fs8fTk+IEDXPrnH8obGFBLT49yOjropqcTr6PDUyBUoaBmpUp06tqVgcOH4+TkhI5OsS7pkpGRyYNi/cstScWYT58+pXa92iRNSdKakwEwOGPA5FaTWbV8lfYmkY2bN2+y9H//48Sff9JHV5feCgXtgbwEctKBG8BJXV12mZmRWqoUsxcvZtjw4RgYGEg3cRmZkoFcjPlfYN++feja6mrVwQCkNkxlh+cO7U7iX2JiYpg4ejRd27ShxbFj3E9KYqtCQQ/ydjAgfCmbAXPS07kVF8ePjx7hOW0aDvXrc+HCBWkmLyMjIwqykxGJw8cOo6it0PY0oCIkpiYSFham1Wn4+vrSvEED0nbvJlChYGZaGoXdZekAnI6PZ1FkJIO6dOHr+fNJT08Xc7oyMjIaQnYyIuF7zRdqaHsWAjo1dbh48aLW7B87doxuHTqwPCqKTUlJWIo0bj/AV6Hg9OrVDO3Xj5SUFJFGlpGR0RSykxGB58+fo0xTUuhbdZFJKJ3A7aDbWrHt7e3N6AED+D0hgb4aKA6tDJxMSCD55EmG9OpFWlqa6DZkZGTEQ3YyIvDw4UOMyhlpexqZqCxVhEaESm73n3/+YeSAAfyqUNBSg3aMgD0KBfHnzzPj8881aElGRqaoyE5GBOLi4tAxKkaJeobCpruUxMfHM7B7d9YqFLSSwJ4hsD8hgWO7duF18KAEFmVkZAqD7GRkRGHh3Ll8EB3NIAn100oDngoFk8eMITo6WjK7MjIy+UcuxhSBUqVKoUouRuKUyWBpKdZ2+7sJDQ1l17ZtBCQmSmYzg5ZA7+Rkvvnf//h+wwbJ7ReE58+f4+PjQ3BwMI+ePOJ17GsMDQ0pb1kea2tr7O3tadasGfr68s9S5v1B/jaLQPXq1Ul+qQUpmTzQidEhST+J3bt3Y2trS4MGDTAxMdGYve8WLmSyUvnOTtKaYn5SEg1//pm5CxdSsWJFLc0idx48eMDP23/mZ8+fefLoCcY1jUmyTCLZJFnYXFKCTqoOZsfN0H2mS8rLFD5o/wGfj/6cHj16yMWnMiWeYrSRkJOSVPFvUcaC+DHxxSLDzPyoOT3q9SA9PZ2goCDCwsKoWrUqdnZ22NnZYWtrm/nfomqERUdHY121KhFJSRrtavAuxpqYUG/BAmbPnavFWbwhMjKS2V/N5o8//kBlryLJLknoK/SuAHUiEAIWgRYYxRux+H+LGT9uPHp6ehLMWqaEUqwr/mUnIxLOXZ05V+oc2Gt7JmC2wYx/Lv2TqV+WlpbGvXv3iIiIICAggMDAQAICArhx4wYWFhbY29tjbW2NnZ0d9vb2NG7cON8rgi1btnB6xgz2arlp2gVgYq1a3IiM1Oo80tPTcf/One+Wf0dKixSUjkowLuRgj8D8b3Mq61Vm/679NGvWTNS5yrw3yE6msJQkJ7Nu3Trm7pyLoruWq/6joOKRikQ9jMrX0x8/fpzpdDL+e+vWLfT09DKdTsZ/7e3tqVKlitrr+3fpQt+TJ3HVxHspAOlAJWNjbty5Q9WqVbUyh5cvX+LS14XbT28T3y0esapQdW7qYHzGmJVLV/L5Z3LKtkwOZCdTWEqSk3n27Bk169TUvkDmaQOmfTCN5UuXF2mc+/fvExwcTEBAAEFBQQQGBhIYGIi+vj729vaZIbcl8+bhExdHdZHmXxT6lirF4C1bGDhwoOS2Hz58iFMnJ55UeUJKxxTx8zZfgekBU6Z8OoWlS5aKPLhMCadYOxl5418kKlasSKcPO3Hc/zjprbSkq5UE+jf0+Wz7Z0UeqkaNGtSoUYOPP/5Y7fzTp08zHY+/vz9JKSnFwsEANIyPJ+j2bZDYybx48YK2HdvypO4TlG2UmjFSFhTDFKzbuQ5jY2MW/m+hZuzIyIiMXCcjIu4L3TG+ZgxaSjQzuGZA9+7dsba21piNypUr07lzZyZNmsSkSZOwNi7shoP4WKenczcoSFKbSqWSrj26EmUVpTkHk4EpJAxMYMW6FRw4cECztmRkREJ2MiLStGlTenXvhdEFLUjMvAIDXwNWL18tmcnY2FhKFaNmYqWAWImLMucvmk9wTDApHSQS6zSHhN4JfDr+U7nVtkyJQA6XiczaVWs50fAEybWSoY5ERtPA7IgZ7l+7U726dMGrtLQ0ilNirT7CykIqgoKC8FjvQeLYRGl3N6tCUvMkPv3sU057n5bQcOGJi4sjMjKS6OhoUlNTMTMzo3z58tSuXVsuPn3Pkf91RaZ8+fJ47fWie7/uKNwUUE7DBlVgctyEdo3aMWXyFA0bU8fc3Jx4CWVk3kUcYFH6be3QxGXKzCkkt03WSm2Uso2Sq1uu8tdff9GhQwfpJ/AOkpKSOHLkCH/s38/ff/3F85gYrE1MKKenh356OgrgWXo6j5KSsK9VC+du3eg3ZAitWkmhfCcjJXK4TAN07NiR9avWY7rXFF5p0JAKjE4ZUTe9Ll57vdCROHRVpUoVHqWmSmrzbTzU0SEqNpbff/+d8PBwjbYBCAgI4NKVS6Q311KShx4oWin4ctGX2rGfB1FRUcyZPp1q5cqxbexYnLy8OPHiBfGpqdyMjeVsdDR/xsRwMSaGsLg4XqemsiYsDLP16xnx4YfY16zJL9u3k1qMvlcyRaP4BNRzoSSlMOfGlp+2MG3ONBR9FGAl8uCpYHLMhAaGDTjtfZoyZaSvt1epVJQyMeFhcvJb2ylLxUgzM546OaGnp0dwcDBPnjyhbt26NGjQgAYNGmRK7NSvXx9TU9Mi2Zo0dRI/3voRZQfpwnM5SAOTtSYE3QiiZs2a2psHQpjS4/vv+e7rr3FVKpmZnFyoHn5ngCXm5jwvX56NO3bQrl07saf6PlKsU5hlJ6NhvL29GTxsMIpmCiH7SIxNjMdg+rspNlVtuHT+kkZ1yd5Fp+bNme3nR1etzeANdc3NOXL1KnZ2dgCkpKTw8OFDtULTwMBAgoODKVWqVA6lA2tr63xl5qlUKspULEOMawyU1fS7ejvGx41Z1GcRc2bP0docHj16xJCePTEKCeGHhATqijDmIWCqqSkjJk5k8dKlsqzO25GdTGF5H5wMCCKJI8eN5NrNa8Q7xYMthfvko8HkigmGdwxZs2INa9asYfr06YwYMULsKeebb7/5hmfu7qxJ1q5AaDjQwdKSh69e5StsmKF0kF1qJzExkTp16qg5Hjs7Oxo0aJB5oQsICKD1h62J/0y7UjoAhEDrx625fO6yVswHBATwSYcOTIiJYY5SKWr8/RngZmaG+QcfsOe33zAuRunyxQzZyRSW98XJZODt7c2s/83i3uN7JNknobRRQkXe/q+QCESARYgF6ffTmfT5JObOmoulpSUBAQE4Ozvz119/YWtrK9G7UOfOnTs4NW7MA4VCq1kki/T1iRk7ltUbNxZpnBcvXmSudkJCQggMDCQkJISnT59iY2ND/fr10dXV5eido8R3LwZOJhGM1xujiFNIvicXGBhI5zZtWB0Xx2ANJYCkAqNMTHjRvDlHTp/G0FCLchrFF9nJFJb3zclkcP36dbbt2MZvR38j+lU0xtWMSbFIQWmkRIkSwzRDjBKNUD1XkfI6BcfWjoweOpq+fftiYWGhNtbWrVtZs2YNV69eLfI+Q2Hp5OjIaB8f3LRiHZKAOqamHL9yhUaNGmnEhkKhICQkhJCQELZt38aptFOonIpHZp3JGhPuBN7JoSunSXD1yu0AACAASURBVKKiomjZsCFLX77EVcMZhmnAAFNTSrm4sH3fPo3aKqHITqawvK9OJitPnjzBxcWFLl26UKZMGdLT0zEzM6NSpUrUr18fOzu7d9YRDB8+HFNTUzZt2iTRrNU5deoUU/r04WZ8vFZWMx66upzp2JHfTktTM9JrYC+OpB2BxpKYeyeWOyw5ufckjo6OkthLT0+nS7t2fODjw6IUaYpQE4HWZmZMWb2a0WPHSmKzBFGsnYxcJ6NlqlSpwvPnzxk/fnyhM4Q2btyIo6Mjnp6euLlJv5748MMPqdmsGR6XLzNTwmJIgCjA3ciIc+vWSWYzNi5WNIVlUTASih2l4qfNm0m8eZP5EjkYABNgb0ICHaZP55Pu3bWmtJ1fEhISuHLlirDfFxLIq9hXJCoSsSxtSfUq1bG3tad58+ZaC3NLiexktExycjLPnz8vUqW+ubk5+/fvp3PnzrRo0YL69euLOMP88d26dXRo3ZqPlUo0E7DKiQr41MyM8RMnZmaUSYGurq5gvLigQrLsq9jYWBbMns2f8fGSqz3YAuNTUpg7ZQo7Dh6U2Pq7SUpKYv/+/WzcuhF/H39MrExILptMkuW/yuwGwAvQvaeL2UkzVA9U6KXpMXjQYD4b8xlNmzbV9lvQCLKT0TKRkZFYWVkV+SLRqFEjFi5cyMCBA7l69aqkmTi+vr4MHjyYVu3b0//iRS4mJEjSinmRgQGxNjYsdHeXwNobypQuI8RvigmqJBWlSpWSxNaGtWvpkp4u2Y1EduakplLX25uwsDDq1aunpVmok5qaypq1a3D/zp20SmnE28fDdEgxyH2ll046cfy78nwFW29vZedHO3Fo7IDHCg8cHBwknL3mkSv+tUxERIRoqskTJ07E3t6euRK1IFapVHh4ePDJJ5/wzTffcOLECQZOnEh3MzM0LVO5Tk+PPRUq4HX8uOTaVw3qNEAvpvjUbSieKBg7diwjR45k6dKleHl5cevWLZJFTitPT09n4+rVfJGQIOq4BcEcGJ2ayqa1a7U2h6xcu3aNenb1WPzzYmIGxBA/IB7sEFYt+aEsKNsrUUxQcNHsIu0+bMf4ieNJSkrS5LQlRV7JaJmIiAjq1BFPSXPjxo00b96cDh060KdPH9HGzc6LFy8YNWoUUVFRXL58OfM9fLNsGUnJybTfupWj8fGIXYeeDiw0MGB/xYqcvHAh322ixcTezh6zP8yIJVZy2zmIBWNTY9asWUNISAihoaHs2rWL4OBg7t69S5UqVTJTr+vXr4+NjQ02NjZYWVkVOOX53LlzVJIwHJoXI1JT6bhzJys8PITQpZZYu24tXy78ksQPE1HZFzF+qgeq5ioUdgp2ndzFGYcz/HnsT2rVqiXKXLWJ7GS0TEREBLVr1xZtPEtLS/bu3YuLiwvNmjXTyJf0r7/+YtiwYfTp0wcvL68ctQsr1qzBqmZNWs2fzwaFgn4ipbg+AkaYmfGsalUuXLxIhQoVRBm3oDg5OZE6IVXYl9F2fuZdaOvUFicnJ5ycnHI8nL3o9PDhw0RERPD48WOqVq2ao+i0UaNGlM5DZPT4kSP01uIqJgMboIxKxY0bN2jWrJlW5jBn3hw2/LIBxQiFuEkgJqDopSDiWgTNWzfn79N/Y29vL6IB6ZGdjJaJiIjI9eJQFBwdHZk9ezaDBg3i/PnzohWwpaens2LFCtasWcPWrVvp1q1bns+dMn06rdq25dNBg/j5xQuWJiQU+g44Htigp8cqIyNGjh3Lrn37CA4O1pqTsbKyolz5cjx89BBttwU1jzSn34R+eT5etWrVXDOxkpOTCQ8Pz3RAvr6+7Nixg5s3b6Kvr5+r3M5fJ06wSoOiowWhY0oKf//9t1aczMLFC9nguYGEoQmgodK09JbpRJtG075ze3wu+4h6Iyo1spPRMmKHyzKYMWMG58+fZ/78+SxbtqzI40VFRTF8+HBSU1Px9fXNVwppq1at+CcsjA1r19J1yRKapKUxMi6ObrxbHV8F/AN4GhqyU0+PTh9+yKXvv6du3bp06tIFNzc3/Pz8KF9eihSDnIwdMZalx5aSVF2LsfMkUIYp6d+/f4FfamRkhL29fa53yQ8ePCA0NDTz79y5c4SGhvLkwQMaijFvEWiUlIS/j4/kdg8cOMCqjatIGK45B5OBqqGKmKQYOnXtRIB/gNaKrYuKthf7b+W/UIxpYWHBo0ePNJIdFB0djYODAx4eHvTs2bPQ4/z555+MGjWKMWPGMH/+/EJlwiUlJXHw4EE8f/iBi76+NDI2pmFKCnUSE7FE2CdNAB7p6xNsasql1FQsLS0ZOGIEI0aPpm5dddnFOXPmcOvWLf744w/J5VRAKKKtU78OiZ8lgpnk5gHQP69P74q9ObBb862YX758Sf3q1XlRTDak/wSWt2jBn9evS2bz/v372De1Fzb3JSzTMTlqQv/G/dmxdUdeTynWxZiyk9EiUVFRNGrUiGfPnmnMxpUrV+jXrx/Xrl2jWrVqBXqtUqlkyZIlbN++nV27dokW1ktMTOSXX35hxYoV9OvRg5iXL0lNSsK8bFkq16hB/QYNaNmyJVZWefdHUCqVdOzYkT59+jBz5kxR5lVQxnw2hl0Bu0j+UAvioAow2WyC/xV/SeqiIiMj+bBJE+5IWPT5Nq4Bk21suBoSIpnNrj26cjbpLClO0hWhApAMpptNOfnbST744IPcnlGsnYwcLtMid+7cES19OS9at27N559/jqurK2fOnMn3KuTu3bsMGTKESpUq4efnR9my4mnam5iYYGJiwgcffMDyNWsKNYa+vj579uzB0dGRtm3b0qZNG9Hml1++W/Id++vvJ7lhMlSW1rbxWWNGDh0pWeFtampqsbpYGAIpEjY2u3z5MheuXyBlrMQOBsAIEjsmMmHaBG5evym9/SIi18loETFrZN7Gl19+ibGxMV9//XW+nu/l5UWbNm0YPHgwhw8fFtXBZBAU9H/2zjssiuv7wy+IgBS72L/2FksMCKJgQYlG0ViDiCKWCIYYURM1RSNqTDQmsYMFoyIqYlQ0xoYgClZaYiJS7R0NSu/z+2MDsnTYmcHkx/s8++je3bn3zrI7Z+4953zOTZUlNVq2bIm7uzsTJ07k77+lLEFaPE+ePKFR3UboHNEBGa89ajfUqPe0Hqu/Vd3XVl709PRIfkOc/gCJQO1CYrFSsnj5YlJNUqvstlzoJnD74W3Onz9fNRNQgWojU4XIZWTU1dXZs2cPP//8M76+viW+Ly0tDWdnZ7766itOnjyJs7OzZP4OMYwMwIgRI3j//fdxcHAQYVblQxAEtm3bhqWlJYsWLWLs8LHoHNNRJPFIzSPQ8dXh+JHjRRS5paRhw4YkZGbyphRFfgw8SUzE3t6eFStWsG/fPq5du8aLFy9EH+vp06dcungJoUcVagmpQUrPFDZseTOSUCvCm7QC/n/H7du3ZSsva2BgwJ49e5g0aRIhISFFZOEjIiKwsbGhZ8+ehISEoKdXVvyXaohlZADWrFlD3759cXV1xcnJSZQ+S+LZs2fMmDGDZ8+eERQURPv27Zk2bRoPrB5w9fhV0qzSxKl+WhyPQeegDnt37ZVdekRTU5MWDRsS9+QJnWUduXhuqqvT38KCvv36ERcXx7Fjx4iLiyM2NhY1NTXatWtH+/bti/xbmXIIBw4cQL2zevmz+IvjBXAFsKp8F0I3gZNuJ8nMzPxX1dWpNjJVSFxcnKxVLQcOHMiMGTOYNGkSvr6++f4ZDw8PFi5cyA8//MDkyZMln0deWWSxVnFaWlp4e3vn+2akyp04ffo0H374IZMmTeLw4cPUrKm46tSsWZOTx04yavwoLh68SMr7EoS3RoHOSR327NjDqFGjRO68fBibmHD52LE3wshc0tdnztixjBgxoshrCQkJ3Lp1K/9x+fJl9u7dq5SEmpf7UzAXqFWrVsX6LI+eOkpq69TKTfQFEA70RWGk7gG3gQGV6EsXNA00uXr1qmw3p2JQbWSqELm2ywri4uLCu+++y+rVq5k9ezaOjo5ER0cTGBgom+BgdHQ0rVu3zr9Ii0G7du3YuHEj1tbWhIaGihoSnp6ezqJFizh27Bj79u0r9geura3NiaMnWPjFQrb8vIXUIamK1HRVyQCt81po3dRixjRF4bqqYvCoUZzx92dactVWBE0BrqWn079//2Jfr1evHkZGRhgZGRV5LTExMX/FExcXx59//omPjw+xsbHEx8fTpk0b2rVrR4cOHfJXP6HBoTClkpOtCzRAEQ4nAPcBFRL405qlceXKlX+VkakOYa4i0tPTqVevHsnJybLJtOfx8OFD3n77bbS1tbGysmLDhg1oaWnJNv7Bgwfx8vLi0KFDovc9c+ZMkpKS8PLyEqW/v/76i0mTJtGpUye2bt1KvXr1yjzGz88P+w/tean3kpQ+KVCxyHEF2aAero72FW3GjBzDovmLGDJkCL/88ktJYayS8/fff9OueXPupKdTvPCMPOwBDg4cyLFz50TtNz09XckAxcbGEhUVReClQLIWZVXuapkJXEbhr8sAsoFuQOtKTjIUbOvbsnfX3oKtb3QIc7Xjv4q4fft2ictzKREEgV9++YXs7GzS09NZuXKlrAYGxPXHFGbjxo1ERkayc+dOlfrJU5geNGgQCxYswNvbu1wGBmDw4MHERcbxneN3NPytIbU9aqN2VQ2el3FgFhAH2qe1qbWxFoNyB3Hh9AU8d3rSvXt3duzYga2tLc+fl9WRNNSvX5+hlpbsrEJRSoBNenpMmzNH9H61tbXp2rUro0aNYv78+bi6uuLm5kat+rUqfzueCmgBvVGsZHoDqqTF6cO9B/dU6EB+qrfLqoiq2CqLj4/H3t6ev//+m/DwcNzc3LC3t+f48eOyZs1HRkZiZaWCB7QUtLW18fb2pn///vTu3btSxcyePn3KtGnTSEhIUFKYrghaWlp8MvsTnD5yws/Pj117d+F72JekxCS0mmhBbRA0BYRsgZpZNcl5nkP6i3Q69+jMB+9/gN1+uyKVUocPH46NjQ1Tpkzh+PHjVaJA/PmKFYz098chNVVqVZViOQkk168vm18qOTkZNS0Vfht1AVMUNxiaQKN/HpVF65/KrP8iqlcyVYQciZgFOXfuHO+88w4dOnQgMDCQNm3a8O233/Ly5UvWrl0r2zxA2pUMQMeOHfn222+xtrYmNbViDtsjR47w9ttvY2JiQlBQkMq6cjVq1GDIkCHs272P+IfxTLebzuQhk3H/3J21H65ly9wt7Fq+i4unLpL4MpE/rv7B4q8Wl1iKe+XKlSQnJ/P999+rNK/K0rNnT/oPGcK3VRDdlAnM19Vl9ebNshnYGjVqiBOa3hAYLEI/uYjqy5SD6pVMFXH79m1ZlFXzpGG2bdvGzp07GTp0aP5rGhoaeHl5YWxsTJ8+fWTJms/NzSUmJoaOHcXwipfM9OnTCQgIYO7cuWzbtq3M96elpfH555/z66+/cujQIcn8Hvfu3cPBwaHSWnIaGhp4e3tjZGSEiYkJgwYNEnmGZbNszRpMzpxhRGYmpjKO+4WWFl379y82okwqateuTU76m5OESjollmJ4U6leyVQRUqkvF+T+/ftYWFhw8eJFwsLClAxMHnJnzd+9e5eGDRtKnocD4ObmRmBgIHv37i31fSEhIfTs2ZOEhASuX78uqWM9MjJSZSmYJk2asGfPHuzs7Hjy5IlIMysfYWFhWFlZ0dfCAhsdHR7JNK63mhqH69Rhexl/S7Fp0aIF6S/T4U2xMwnQpb10uwBSUG1kZCAvLyQ6OprY2FgeP34s+XaZj48PvXr1YvDgwZw+fZomTUoW15Iza17qrbKC6Orq4u3tzbx584gqRkgxz7k/fPhwXFxc8PDwkNT4ZWZm8vDhQ1H+7oMGDWL69OnY2tqSI4PcS95n9d5777F06VKOHz+O01dfMUxXt8x4BlXxBebo6XHs7NlyB1+IRc2aNWncvHHZQRsyoZugS8/uPat6GhWiertMAh48eMCvv/5KQEAAYWFh3L59u9gLwfjx4+nduzcWFhaMHDlSlCJcBXM6fHx8yr0FJlfWvJxGBqB79+4sXboUa2trrl69ira2NqBY5dnZ2VGjRg3CwsJo0UL66mOxsbH873//E21PfdmyZQwdOpSVK1fy9ddfi9JnccTHxzNt2jSePXumFAix8MsvSU1JwXz9ek6kpCDFLdM+NTXm6+py6ORJunevmsLPFgMs2Ht3L0LjKpSV+Qe1u2ol5ge9qVSvZERCEAROnDjBkCFDaNWqFU5OTnh7exMbG1vinWZMTAyenp7MmDGD5s2bM3r0aAIDAys9h6ioKPr06cODBw8ICwurkI8lL2t+2bJlhIeHV3oOZXHz5k06d5Y3Z/zjjz+ma9euLFq0CIBffvmFXr16MXDgQHx9fWUxMKD4+4ipmqyuro6npyfbt28vVZNOFfz9/XnnnXdo164dFy9eLLLF67JyJfO+/54+Ojp4ixihmAp8pK3Novr1OXv5cpXlBgGMGTEG/dvy6cSVyBPQqakjuT9TbKqNjAhcuXIFExMTrKys8PX1JTe34uEoWVlZHD16lP79+zN48GBu3LhRoeM9PDwwNzdn6tSpHDp0qFLbCgWz5hMTpQmTlHslk4erqyvHjh1j6NChLFmyhJMnT+Li4iJrGLDYRgagcePG7Nmzh6lTp/LokXgekuzsbFxcXJg8eTI7duxg/fr1Ja7AHJ2c+O38eZa3asUIXV0q9s1VJhfwBrrq6vJ04EDS1dQQhKpdQVhZWZHzKAdeVek00PxLk+n206t2EpWg2sioQGZmJvPmzcPMzIyQ0krBqgG1UchL1AfKuCnKu3tcsWJFmQYrKSkJOzs7Vq1ahZ+fH87OzhU8C2Wsra2xsLCQzD8TFRVVJUYmOjqanJwcLly4wKFDh2QXmARpjAwoNOkcHR1F88/cvXuXAQMGcPny5RIDRgrTq1cvwqOjGeziwrt16jBKTw8fFEnu5eEJsE5dnW56eqzr1o1dv/3G4ZMn2bRpE+PGjSO5CqVstLS0mDF9BlrX5E1aViINalyvwUeOH1XdHCpJtaxMJXn69CkjR44kuKTyr82Bt1DIRzSmqPcrE8Uv6zZwgxKzgIcMGcLBgweL1eIKCwvDxsYGU1NT3Nzc0NUVpw5weno6pqamzJkzh+nTxbtzevr0KV27dpU1Yz07O5sff/yRDRs24ObmRnR0NAcPHiQwMFB2Jdu+ffuyevVqSXSncnNzGT58OMbGxqxYsaLS/fzyyy988sknfP7558yZM6dSSbppaWl4eXmxZ/NmQv78k961atEzNZW2WVk0RKETmYri6x+lo8MVDQ3uZ2czasQIpjo5MWCAsnqkvb09mpqabN++vdLnpSqPHz+mfef2pE5PVSRYyoymnyYTOkwoqQTzGy0rU21kKsHdu3extLQkNja26ItdgX5UvFLiPeACUEyXhoaGnD59moYNGwIK/8+GDRtYuXIl69evZ+LEiRUcrGyio6MxNzfn7Nmz9OjRQ5Q+AwIC+Prrr7lw4YIo/ZXF3bt3sbOzQ0tLi927d9OsWTMEQWDMmDF07tyZVatWyTKPPBo2bEhERAQGBgaS9B8fH4+RkRHbtm3jvffeq9CxeXlCp0+fZv/+/aIpWScmJhIUFMSnn35Kz44dycnIIDszk1p6ehi0aEGnHj0wNDTEyMioRImllJQUevXqxZIlS7C1tRVlXpVh+TfL+f7A96SMT5F34Keg56VHXGRcSd+daiNTWd5EI/Ps2TPMzc2JiYlRfqEeMIrKC9/lEQkcBwrtDpiYmODn50dOTg4zZ87k9u3beHl5SZprs3PnTn788UeuXbuGjo7qIiJubm78/vvvbN26VYTZlc7BgweZM2cOc+fOZcGCBUq+l4SEBAwNDdmwYQMjR46UfC4Az58/p0OHDiQkJEg6zpUrVxg9ejRXr14tUTWgMGFhYUycOJHevXvj6uoqSRh33bp1uX37dqVDkP/8808GDx7MxYsXZVMLL8ylS5cYPXY0fxv/TU4vmRJnMkFnlw6u37liP6XEsiBvtJGp9slUgOzsbMaOHVvUwHQEHFHdwAB0BmYBLZWbr127xvvvv4+hoSFNmzYtNtJHbKZNm4aRkZHKfp48IiMjJffHJCYmYmdnh4uLCydPnmTRokVFnPv16tXDw8MDR0dHUZ3lpREVFSVLVJ2pqSlz587FxsaGrKzS61gWzn2RKk/o6dOn1KxZU6Ucl+7du/PVV18xadIkMjNlrHXN689p9OjRLPlqCbqXdYvdcRCdXNA5psPYoWNLMzBvPNVGpgIsXbqUixcvKjd2B2wAbREH0kNRv6KQDTl37hzDhg1j/fr1svkTXF1duXjxIp6enir3JXVk2eXLlzE0NERHR4fg4GB69iw5aa1fv344OTnJlswoldO/OBYtWkTjxo1ZvHhxie+Jj49n5MiR7Nu3j8uXL0u6DRUTEyPK6mPOnDk0a9aMJUuWiDCr8vH8+fP8z+nKlSt88sknnD5+Gt3fdCFOwoFzoNaxWpg0NeHnrT9LOJD0VBuZcvLnn38WFSVsD4xGmk+xJjABKFQt1sPDQ7a7b3idNT9//nwiIyNV6ksqI5MXbjtu3DjWrVvH1q1by7W99+WXX6KpqamSo7y8yGlk1NTU2LlzJwcPHsTHx6fI6wVzX8QQAS2LmJgY2rdvr3I/eed14MABjh8/LsLMSicgIEDpc8pTajA1NcX3N19qn6iNeqgEP/5k0PXSZeD/BnLy2Ml/nSBmYaqNTDmZP38+2dnZrxvqAGORrp47KKTBrVFaJSUlJfHll19KOGhRunXrxrJly7C2tiYtLa3Y92RmZnL27FkWf/45w83M6Ni0KfV1ddHU0KC+jg6tGzUiPSmJdd9/z7Fjx0QLSb19+zYDBgzgypUrhIaGVkg8MS+Z0d3dnbNnz4oyn5IQQ7OsItSrVw8vLy9mzZrF7du3gYrlvohJbGysaH6UvK1OBwcHHj9+LEqfhcnJycHFxYWJEyeyffv2Yj+nPn36EHI5hHZx7dA5ogNJIg0eATo7dXC2ceb4keP5ChX/ZqqNTDm4evVq0YuQFeLXcS+OehSRCPf09Cw+sk1CPvroI7p3787ChQuV2m/dusUcBwdaNGiAy/jx1PjhB5wuXeK3J0+IS00lNSeHuLQ0Ap4/Z++rVzR2c2PzlCm0bNSIKePHq6Qu4OHhgYmJCdbW1pw8eZKmTZuWfVAhDAwM2LNnD/b29pKKTcq5ksnDxMSEhQsXYmNjQ2xsbIVzX8RCrO2yPPr378/MmTOZNGlSpRKfS+PBgwcMGjSIwMBAwsLCSo3S69ChA9dDrzNnxBx03HWoeb6mIja7MtwBvf16tPmjDad9TrNy+coqqRckBf+Ns5CYDRs2KDe0Q5z67eWlF1AgcjEnJ0eWCK3CbNmyhTNnzuDl5cWLFy+YOXkyvbt1o/auXQQnJxP06hXLcnIYAXRAYR81/vm3NTAEWJSby+lXr4hJT+ftI0d439ycMUOGcOfOnXLP4+XLl9ja2rJmzZr8BFRViq5ZWFgwbdo0pk6dKvpFCxQriLt370q+LVUc8+bNQ01NjZ49e2Jtbc2pU6dKFUuVgtjYWFG2ywqydOlS1NTUWLNmjWh9/vrrr/Tq1QsLCwt8fX3LddOira3Nd998x1/hf2Hb1hZtV230jurBnxSJEFUiF3gINQJroL9dn+bnm7Nh0Qai/1KkDvyXqA5hLoPExESaNm2qXPxqCkiiBlgafwBHXj9t1qwZ9+7dk718c0hICKNHjyYnKQmbjAyWZWRQNE20/GQAP2lo8JOmJit//BGHWbNKfb+/vz9Tp05lzJgxfP/996KVjs7JyWHIkCEMGTIkX+NMLKKjoxk2bBhxcVJ6iouSl/ty8uRJ0tLSWLduHePGjZN1DqCoyXLv3j3q1hU3i/HBgwcYGxtz+PBhlWohZWVlsXLlSnbt2sXevXtV0kl7+fIlhw4dwuuIF5cDL5OjlkOtJrXI1cxFvaY6QrpAblIuqc9Sad6qOcOHDmfShEn07dtXlRulNzqEuVqFuQz8/f2VDUxdQPpaY0XpiqL2bLri6aNHjwgPD6dXr16yTuPUr79SIyEB79RU+orQnxbwRXY247Kzsf7sM65euMBWDw80NJS/mnkXgu3bt+Pu7s6wYcNEGP01NWrUYPfu3RgbG2Nubi6qIGNVbJUVzH0JDw/n5s2bWFlZ8c4778hakfXJkydoa2uLbmBAUeslrxZSWFgY9evXr3Afd+7cYeLEiTRp0qTSfRSkbt26zJgxgxkzZuDl5cW+fftYsGABycnJpKamUqdOHQwMDOjYseN/wt9SHqq3y8rg/Pnzyg1dqJr1nwbFhjTLyaezZ3P4xx+5JpKBKUhH4FJKCk+PHeMDKyulIIvIyEhMTU25fv06169fF93A5NGiRQt27NiBra0tL168EK1fOY1Mcbkvurq6+RnzY8eOLTF4QwrE9scUxsrKipEjR+Lo6FjhY3/55RdMTU2xsbHhyJEjKhuYwty4cQMjIyP69evHsGHDGDduHJaWlvTo0eP/jYGBaiNTJr///rtyQ/mSqKWhtfLTP/74Q7ahv122DP9duziXkkJjicbQAXxSUsgJCmLm5MmAwrnfr18/pkyZwuHDh2nQoIFEoysYPnw448ePx97eXjT1X7mMTFm5L7Nnz6Zbt2589tlnks8lD7HCl0vjhx9+IC4uDnd393K9Py0tDWdnZxYvXsypU6dESzYuTEREBG+99ZYkff+bqDYyZRAdHa3cII3sVPkoNHZx1R6l4PTp02z5/ntOpqQgdXVxDcArNZXrx49j2rs3mzZt4tKlS5JdCIpj1apV/P3332zcuFGU/uQwMuXNfdmyZQv+/v5llqQWCzHDl0tCS0uLAwcO8OWXX3L9+vVS3xsREYGJiQkJCQn5Zbel4saNG3Tt2lWy/v8tImqlngAAIABJREFUVPtkyqCIYrDUV9nSKDR2fHy85EO+fPmS6TY27E9NrbDmZ2XRAQ6kpGBy/ToXw8Jk16qqWbMmXl5emJiY0Lt3b3r37l2u41JSUoiLi+Ply5dkZmaiqalJ3bp1Jc2Ryc7O5ptvvmHbtm3s3LmzzNBkPT09vL29sbS0xMjISHKpm5iYGMaPHy/pGKAIJ169ejW2trYEBwdTq1atIu/x8PBg4cKF/PDDD0z+Z6UsFRkZGdy7d0/yVdy/gWojUwoZGRnKOkkaSJt8WRaFAqmSksTKACuZrxcuZFR6OnIXfG0PLMnKYt7MmZwKCpJ5dPjf//7H5s2bmTRpEqGhodSpU/TuIjk5mSNHjuDr60tgYGCpYdh9+/alX79+WFpaMmbMmGJLN1SUu3fvYmtri56eHuHh4TRuXL6NzO7du7NixQqsra25cuWKKOKnJSFF+HJJTJs2DT8/Pz799FNcXV3z2xMTE3F0dCQ6OprAwEBZblqioqJo27at7OUk3kSqt8tKQUNDQzmsUPwUiopRaHyps7UfPnzIPk9PVqSnSzpOSXySk0Ps778X1YuTiXHjxjFkyBBmzpyp1B4TE8PMmTNp0qQJU6ZMYc+ePWXm+dy9exdPT0+mTp1K06ZNmTFjhkrbnXlO67zcl/IamDwcHBzo2bMnc+fOrfQcykNcXJysd/NbtmzBz88PLy8vAIKDgzE0NMTAwIBLly7Jtiqu9se8ptrIlEKNGjWU7/JyKX+pPykoFBSkry9t3fGNP/6IfW4u0rraS0YDWJiayg8uLlU0A1i7di2xsbFs27aNhIQEPvroI7p06YK7uzspKZWrK5KamsrPP//MW2+9hYODQ4Ui2fKc1nklpFVJRHVzc+PixYt4eBRbCEtlHj9+TK1atYpdBUqFnp4e+/btw9nZmaVLl2JlZcV3333H+vXrRcupKg/V/pjXVCdjlkHnzp2V7zgdKSJaKRvRwL7XT7W1tTEzM6N9+/a0b9+eDh060KFDB9q1a6fyDyo3N5fWjRpx+u+/kb9Y8mtSgJba2kTfv59ftE1uYmNj6dWrFxoaGqUbhBoo8qj0/vl/Loqs7wSgFKFnAwMDdu/eXWahsYK5L2JVQr1x4wYWFhYEBASIfud94cIFvvzyS4Jk3u6Mj4+nf//+PHjwgLAq8OmBYhVsY2PDBx98IMdw1cmY/2aKGJlHVJ2RKSS+bG1tjZ2dHbdu3eLWrVtcu3aNW7ducfPmTbS0tHjrrbfo2rUrbdu2zX907ty5XBen4OBg6mVnV6mBAdAFLGvW5OTJk9jZ2VXJHA4fPkxiYmLxIc11gR4onEjNKd5n94+ECLHAdRRGpwDPnj1j+PDhrFixgq+++qrI4VJWQu3atSvr1q1j7NixBAcHi7o6liN8uTD+/v5MmTKFcePGERcXx+7du/nmm29knQNUr2QKUm1kyqB3794cPXr0dcNtwKiKJnNL+engwYOxtLQs9q2PHj0iIiIi3wAdPHiQW7duERERgba2drEGqEuXLvnbgwH+/gzOqMq9wdcMTkri3PHjVWJkFi1aVLTEA0BDYCAKJYay9gPUURSha/nPMTeBc0CB4EBBEFi8eDHx8fGsW7cuvz0+Pp5p06YRHx/P5cuXJdE/s7W1xdfXF0dHR/bt21f2AeVEjvDlPApG2e3atYshQ4YQHx+PoaEhAwcOLPF3IgXVkWXKVBuZMhg0aJByQzQKv4x827sKXgH3Xz9VU1MrOrcCNGvWjGbNmhVpzxNrjI2NJSYmhpiYGC5cuEBMTAz379+nadOmtG/fnoQnT5j7hhgZI2BbaKjs465cubKogVEH+gP9qFykoRrwFtAJuAgEoBTQsX79eurUqcOyZcvw9/fH3t6esWPHcuTIEUkDPdzc3OjTpw8///wz06dPF6XPmJgYrK2tRemrNO7fv4+trS3a2tqEhYXlC4A2atQIT09PbG1tCQ0NlU0YtDqyTJlqI1MGJiYmtG7d+nX0UCbwO1C+1AnxCAYK7Nb06dOHFi1aVLgbDQ0N2rVrR7t27YrkVGRnZ3Pnzh1iY2OZN3OmrELTpdEJiH7wQNYxjx49WrQCozaKQnJiaNfVQGGsWgFeKAV1LF++nJs3bxIUFFSu3Bcx0NbWxtvbG3NzcwwNDUVJUpQjfPno0aM4ODjw0Ucf8fXXXxeRxx8wYAD29vZMmzaNEydOqKTWXV6qI8uUqY4uKwM1NTWmTJmi3HgJKL18urgkozAyBbC3F7/mt4aGBu3bt+e9994jMyOjyqLKCqMPZGZny1bb/eHDh0ybNk3ZB1MLmIr44qitgGkUqU3k4+PDiRMnZK370qFDBzZs2IC1tTWJiYkq9SUIAnFxcZKVN8jIyMDZ2RlnZ2eOHDmCi4tLifVXli9fTlJSEmvXrpVkLoWp9scoU21kysHs2bOVQ5lfARdknIAvSqHTTZs2LWr4RCYtM5OiOdNVh66GhrIatoTMmzePhIQC3vkawESQTPLAALBFaV8hKyuLZcuWSTRgyUyYMAELC4siuUEV5fHjx+jq6koSvhwVFYWpqSkPHjwgPDycvn1Ll2vV0NBg//79fP/991y5ckX0+RSmeiWjTLWRKQeNGjXik08+UW68CNyRYfC/UNSSKcCXX34puYprLU3Nwmk5VUpKdrakmel5XLx4kYMHDyo3vgv8T+KBW6Co6lYAHx8fAgICJB64KOvXryc2NpYtW7aU+r6cnBxCQkLYvn07nzk7M/2DD7B+7z2mjB2L80cfoa+vX7RUhop4eHhgbm7O1KlTOXToEPXq1SvXcS1btmTz5s1MnjxZ5VVaWVSvZJSpzpMpJ6mpqbz11lvcvXv3daMOMB1FpJEUPAR2o/AD/UP37t0JCwsrUm9FbIw7dsQ1JgZjSUcpH0lAMy0tkmRQHhgxYgS//fbb64YWwAzk+aUIwE7g3uumwYMHFy39LQOxsbGYmZlx8uRJDA0NlV4LCAhgl6srx377jRYaGvTOyaFjSgqNUIScZ6CI0o7W1uZ3LS1+T0ujn4kJUz7+mHHjxlUqgCEpKQknJydCQ0Px8vKiR48elTqvWbNmkZCQwIEDByp1fFlkZGRQr149Xr58Kafj/43Ok6leyZQTHR0d3N3dlfd9U4E9KIWiisZ9wBMlA6Otrc2ePXskNzAA7Tt2JEbyUcpHNKCno0Pr1q0ZNmwYn332GTt27ODKlSu8evVKtHFu377NiRMnlBvfRb5bMTWKrGb8/PxkU9suSPv27dm0aRMTJkzI/4x9fX3p/dZbfDxyJO8cOsTN1FSuJyayPSWFBShcVh8Ak4FPgI3p6QS+esXTzEzsgoLY4eBA+2bN2OrmRk5OKdmphQgPD8fIyAg1NTWCg4MrbWAA1q1bR1RUFLt27ap0H6VRHVlWlGojUwEsLS1ZunSpcuMr4GdAzOvA74AHRWRkNm3axNtvvy3iQCXzdt++hLwhP5QQ4D1LSy5dusSnn35Ky5YtuXbtGp999hktW7akfv36mJub4+joyPr16zl79ixPnz6t8Dienp7Kzv4WyF8/qAVF6gZ5enrKPAkFH3zwAe+99x4TJ07E5v33mTVmDAtv3uTP5GScc3PLXVdIB4VLyzcpiV+eP2f/woWYdutGREREmcd6eHgwbNgwXFxc8guwqYK2tjZ79+5l4cKFREZGqtRXcVT7Y4pSHcJcQZYsWcKDBw/Yvn3768Y0YD/wDmCJYs+gMrxEsTl4s+hLS5cuZcaMGZXsuOJYDB6M4+rVIFNEV2n46+tjNWJEfu5P4cS6gomnN27c4Pjx41y/fp2srKz8pNO8f7t27UrTpsVLNpw6dUq54R2pzqgMeqLk7zt58iQrVqyokqlMnjyZEUOGYJeRwV8ZGSoHgxgD55KT+Tk6moEmJqzfupWJkyYVed+rV6+YOXMmt2/fJigoSNRQ6K5du/LNN99gbW3N1atXiy0LUFmq/TFFqfbJVILc3FzmzJnD5s2bi76oiSJ70BBoVM4OHwGhKFYwxewiLF++vGjOhsTk5ubSqmFDfBMSkLbiSOmool2WkJDAjRs3iIiIyP/3r7/+IiMjg7Zt2yoZoDZt2mBoaEhWVoHY9E9RxE/LTSqwhvy8qBo1avD8+XPq1q0r6zTOnz+P9YgRuKakME6kKqEF+QsYoaPDvGXLcC5QrfPq1avY2toyYsQI1qxZI9nWk62tLQ0bNmTDhg2i9SmzZlkeb7RPpnolUwnU1dXZtGkT7du3Z9GiRcr5G5nA5X8ejYC2KEJU66LItRBQrHxeAo9RyNT8Xfw4ampqbNiwgdmzZ0t2LiWhrq6Orb097q6u/FCFq5l9amr0NzOrlDhmvXr1MDc3x9zcXKn9yZMn3Lhxg5s3b3Ljxg1OnTrF77//rmxgGlA1BgYU+0sGwD87fjk5OURERJQZqismISEhWFtZ4ZWSgoVEY3QDglJTsXBxQUdfnw8dHNiwYQOrV69m+/btWFlZSTSyAjc3N9555x0GDx7MqFGjROmzeiVTlOqVjIoEBwfz4Ycflln2taKYmZnRs2dPIiIiOHv2bImJZlLy4MEDenbsSFRaWpUkZmYDnXV12XXqVBFDITZeXl7KwpOdARtJhyydX1Dc6v/Dzp07mTp1qixDP336FKMuXXB7+ZKREqxgChMH9NPRofXbb6OtrY2np2exkkhSEBwczMiRI7l69SqtWqnmgKuiyDJ4w1cy1Y5/FTE2NiY0NJSNGzdWSualMB06dMDDw4PAwEA2bNiAmpoaP/zwgwgzrTgtWrRg4qRJLJE4J6ckNtaoQfuePSU3MAB//11oOal64UrVKDR+RWrOqIr9+PHMSE6WxcAAtAN2pqZyKyKCgwcPymZgQPH7nTt3LnZ2duWOeBMEgbt37xISEsLZs2fx8/MjNDSUoKCg6siyYqg2MiKgoaHB7NmziY2NZc+ePQwZMqRCYcZaWlqMGjWKQ4cOcfPmTezs7FBTU0NdXZ3du3ezdu1aLl++LOEZlMyKNWvw0dYmUOZx44DvtLTY8PPPsoyXnJys3CBt0dGyKXSdKjI/idi/bx+PwsNZkiWnbhIMBcakp7N00SJZxwVYuHAh2trapQZXBAcHs3jxYszNzdHT06N169YYGxvz7rvvYmlpSa9evbC0tCQqKopBgwaxYsUKbty4IeNZvLlUb5dJRFJSEufPn2fDhg08ePCA5s2bk5CQgLq6OnXq1KF58+Z06tSJXr16YWZmVmo2+2+//YazszNhYWGi1IavCPHx8QwfPpz7f/3FH+np5Q5bVYU0oJ+uLtO+/ZaP58yRYURF/sS8efNeN/RBceWrKvygoGX/7rvv+PzzzyUdMjs7m47Nm7Pn2TPMJB2peBKATrVqcen6ddll8p89e4ahoSEeHh756uYZGRl4eHiwbt26coVbF4exsTHz58/ngw8+oEaNysh2l4vq7bL/j+jr6zNixAhatmzJvHnz8PX1JSQkhGvXruHr68uuXbv44osvePfdd8uUS7GysmLo0KEq60lVlMDAQAwNDenbty9OCxYwXE8PaQU5FH4YGx0dug4fLpuBAYoab3lk0kqm0Phy3Fx4eXnRJjW1SgwMQD3AKSuLNcuXyz62gYEBO3bsYOrUqTx//pzDhw/TsWNHHBwcKm1gQLECmjhxIj169ODcuXMizvjfQ/VKRmL69evHN998w4ABA1TqJyMjg969ezN37lzJHcB5lRhXr17Njh07GDZsGADzPvqIwD17OJGSgoEE46aiMDCCqSmHT52StH5KYfz9/Rk8ePDrhhbAh7INX5RdKOXKNG7cmB49etChQwc6duxIx44d6dChA61btxZNAcLCyAjnsDBGi9Jb5XgGdNHR4X58vCxadYVxdnbG29ubJ0+elP5GHaAO5CcOpaKIGC1D+cjR0ZF169aJrT34Rq9kqkOYJSY6OpqOHVWvzKKlpcW+ffsYOHAgpqamdO4sTfbKixcvmDJlCs+fP+fSpUu0bt06/7W1bm4sb9AAk7Vr2Z+aSh8Rx40GJujq8s7IkWz18JDVwABFP8+nKJZVVfELyUUR3l6AI0eOkJKSkl/p9OzZs0RERPDo0SOaNWuWX920YMXT1q1blzsq8cmTJ/wZEcFw8c+mQhgAxhoanDx5knHjxsk6dnR0NL/++mvxBqYG0AFFJdTWlBze/hJFWsINFJVsc5Vf3rp1K9euXeO3334rMSn4v0a1kZGQV69ekZaWJlpFvrfeeis/U/natWuiKzEHBwdjY2PDiBEj8PHxKfZC//U332BoasrYSZOYmJGBS0aGSoFYmcBaDQ1+0NSk09tv4/z557IbGFBUEm3VqtVrAdQsFEKVbWWfCjygSGkHU1PTYgtuZWVlcf/+/Xy1g4iICI4fP86tW7fyDVBxpbbbtGmj1N+5c+cYoKmJpgwipGUxJCkJ/xMnZDUyf/zxB0OGDOHZs2fKL9QATIC+lC9vqi4KpYh3UOS/BaJIsi4QqBceHo6ZmRn+/v5KN3H/Vaq3yyTk2rVrODk5ERISImq/tra2NG7cWLQiTHnbYytXrsTNza1cP+7nz5/zxdy5HD18GKesLD7MzqYiAdx/A3vU1flRWxsjMzN+2ro1P4InNDQUfX35MyGnT5/Ozp07Xze8A4iTo1cxfkOpSN2kSZMqpV+WlJSUX2I7JiaGqKio/P/n5uYqbb1F/fknhocO8alMYculcQ1wat+ekBh5JFrj4uIwNzcvuoJpDoxBdZX1h8AR4Llyc8eOHQkKCqJRo/JKg5TIG71dVm1kJMTT05MTJ06wb98+Uft9+fIlhoaGrFu3jvfff1+lvhITE5kxYwZ37tzB29ubNm0qVvoxNjaWn779loPe3nTR0MAyORmTnBw6ofht6qOQhklAsSUWpqaGn74+VzIzGT50KPOXLMHIyCi/v2nTplGjRg3c3d1VOq/KcObMGeVKlBrAXEBPxkmkAetQWsn8+uuvjBgxQtRhXrx4QXR0NNHR0cTExHD68GFcbt5E2hz78pEItNDS4lVamuTlklNTUzExMSkabmwIWKFYyYhBBnCYIkK6AwcO5OzZs6pGnlUbmcrybzcyeTXHXVxcRO/72rVrjBkzhuDg4Eonr4WGhmJtbY2lpSUbN25UKYksIyODgIAAzp05Q8CZMzx4+JCktDQS09PR1dSkjo4Ondq0oZuxMYOGDWPw4MHFrlZSUlLo1asXS5YswdbWttLzqQw5OTm0a9dOuWaQ3KHMZ4Gg10+bNm3K3bt3Jd9CNGzXjh23blWZJmhhamtq8ujFC/T0pLXwjo6ObNu2TbmxD4qSC2JfHXNRrGj+VG4WQZvwjTYy1SHMEhIdHU2HDh0k6dvExAQnJydsbW0rVJsjj23btjFs2DBWrVrF1q1bVc5S1tLSYujQoaz68Uf+16ULP7i68iotDUEQSM7I4GFCAv5hYWzYupXRo0eXuB2mq6uLt7c3n376Kbdv31ZpThWlRo0afPrpp8qN18jXEJOcZyg07wrw2WefyeKjSk5NlXXBVhb6GhqSV7AMCgpSVlMH6IE0BgYUV9vRFPHzrVy5khiZtgargmojIyFiRZaVxBdffIGGhgarV68u9zFJSUnY2NiwdetWLl++LIlabExMjErGtXv37nzxxRdMmDBBWXxUBj788ENlZ2wOCh0xqaeR9c84Be4XWrZsiaOjo8QDK9CoUYNsWUYqH1mCILlxnT9/vnL9oEbASKTd36kBjEMpiCAjI4NFVaB0IBfVRkYiBEEgNjZWspUMKJSS9+7di6urK5cuXSrz/eHh4RgaGqKpqUlQUBDt2rWTZF5xcXEqZ2x/8sknNGvWrGiROImpVatWUen3eOAgxZZhEIVcFAamUGDTunXrVC7SVV5q6+khXo1R1RCApKwsSRNQfX19CQ4OVm4ciTxyQroU2YL18fHhr7/+Kvbt/3aqjYxEPHr0CB0dHclrgDRu3Jjt27czceLEoiKPBcirMLhixQo8PDxELdRUkMePH1OrVi3q1KmjUj9qamrs3LkTLy8vfH19RZpd+UhISCj6+cQAB1CsOMQkGzhEEYewjY0NY8eOFXmwkmndrh3ybk6WzENAq2ZN5s6dy8aNG/Hz8+Px48dlHlcRXF1dlRveAv4n6hCl0w0KhmMKgoCbm5uME5CPaiMjEVJvlRVk2LBhjB49GgcHhyKvJScnY2try9q1awkKCsLGRlr9elW3ygpSr149du/ejb29fdkZ2CLw8uVLrK2t2bhxI9euXVOKegMU4XE/U2L9nwqT8E9/hQKbevbsKXt0XVdjY66LpBygKn8Cndu2pXv37ty8eZOVK1fSs2dP6tevj5mZGQ4ODqxdu5bTp09z7969Cvf/4sULTpw4odwoX6me1xTS7zlw4IByTaP/CNVGRiLkNDIA33//Pbdu3VK6ON28eRNTU1M0NDS4ePGiLKKDYhoZgP79+/Phhx8ydepU5f1zkTl//jw9evSgadOmXLx4kW7dunHixImif8PHwBYUEWCVdWJkA5cANxRVUQvQtm1bTpw4Ids2WR79Bg7kgsxjlkRAzZpYjR+Pk5MTrq6u+Pv78/TpU27dusWGDRswNzfn6dOnbNq0CQsLC2rVqkXXrl2xtrbGxcWFgwcPcuPGDXJzc4vt/+zZs8q+vkZQoSQvseiIQp7mH168eMHVq1erYCLS8mbcuvwHEftiWxZaWlp4e3vTt29fevfuTXh4OAsXLuSnn36SNRQ4NjZWdGPm4uKCpaUlP/30U9HoLxXJyclhxYoVbN26lR07djB8+GthFQMDA86fP8/w4cMJDw9/fVAmilDjKyiywXugyPQui1fAdRSJlsUETnXv3p2TJ09WidxInz59iMzK4jFQ1WInR7W12VNMVcy6detiZGRUZIX56tUrYmNj8xUP8ozMrVu3aNu2bX6J7bx/AwIClDvuJOHJlEaeVM0fr5sCAgJkqZ8kJ9VGRiKio6MxM5NXz7Z9+/asWLGCAQMG0LhxY86ePUu3bt1knUNMTAzW1tai9qmuro6HhwfGxsaYmZlhamoqSr8PHjxg0qRJaGhoEBoaWmy+UZMmTTh//jwODg54eXkpv5gM+P/zMECxp59XtlkdhUM/GUWm931KDYVu3rw5gYGBKvuyKouWlhZjx4xhz/79LCxhBSAHlwFq18bY2Ljcx9SpU6dY45OcnMzNmzeJiIggIiICDw8PIiIiuHPnjnIHqhXEVI1WKBmZP//8s8S3/lup3i6TCLm3ywAiIyPZvHkzdevWpX///rIbGJBuBdeiRQtcXV2ZPHmyKPkTx44do1evXlhYWODr61tqQqu+vj779+9n165dJUuAPANCUKQO/wJ4//PvqX/aSzAwDRo0YOvWrRgYGHDw4EEVzkh1Zi9YwDotrbKEhCVlta4uHy9YIEpfenp6GBsbY29vz+rVq/n111+Ji4ujYcNCOjEqq7qoQKGx/4v5MtVGRgKys7O5e/euZCHCxeHp6Um/fv345JNPuH79OgEBAfj4+Mg2PigiZG7duiWZ72fMmDEMGTJEpbo6GRkZODs7M2fOHA4dOoSLi0u5lYrt7e2JjIxk0aJFKmur6enpsWDBAqKionBwcMDb25svv/yS69evq9SvKrz99tsY9+mDq3TFtUrlChCiqcmHxQSwiElCQoJyQ1WW2i409vPnz4t/37+YaiMjAbdv36Zp06aiqyQXR3p6Os7OznzzzTf4+/szc+ZM9PT02Lt3L46OjsoSKRLz6NEj9PT0JBW3/Omnn4iKimL37t0VPjY6Opo+ffpw//59wsLCKrWdWb9+fVatWsW9e/dwc3PD3Ny83PVcatSogZmZGZs2beLu3bt8//33NGjQAFBsda5evRpbW1vS0tIqPC+x+HHrVlZpaVHxmC3VyAQ+0tVlzaZNkoXXg+ImQymCS4OqvQpWUZltOan2yUiAXFtl0dHRWFtb0717d0JCQpR0nnr16sX8+fOxs7Pj3LlzUpZ+zUeOYAdtbe38ujq9e/cud10dDw8PPv30UxYvXoyzs7PK86hbty6zZs1i1qxZJCUlce7cOT744AM+/PBDEhISyMzMpGbNmtSvXz+/zouZmVmpCYbTpk3Dz8+PBQsWsGnTJpXnWBnq1KmDcb9+TAwKIiAlRZbcRIDPtbRo1acPEyUOUqlZsyZqamqvIxVzUGR/VpWKY6EEXy0traqZh4RUGxkJkMPIHD58GCcnJ7744osSL5oLFizAz8+PlStX8vXXX0s6H5Avoq4idXWSkpL4+OOPCQ4O5uzZs7z99tuiz0dfX5+WLVvSpUsXNm/erFJfW7ZswcjICB8fH0aPlrdGpZ+fH/b29tjb2/NXdjYOly7xc1qa5Ndfd3V1fq1fn2ve3hKPpAgi0dPTIykpSdEgoFBIln7ToXiqoMy23FRvl0mAlBfbPJ/CF198wenTp0u9K1dXV8fT05Nt27bJUl88JiZGllwcAAcHB7p168bnn39e4nvCwsLyI45CQkIkMTB5REZG0qmT6rGweVuds2bNkm2rMzs7GxcXF+zs7HB3d2flypXsP3aMmE6d+Fhbu3BxR1HZra7O0tq1OXnhAvXq1ZNwpNe0alUonOyFLMMWT6HE3v9iEbPqlUwlePz4MQEBAfzxxx9ERUXx7Nkz0tLSUFdXR19fn8jISFJTUzlz5gxmZmaiJdbdvXuXCRMm0KxZM65evVouyRoDAwN27NjB1KlTCQsLy/cBSEFMTAyTJk2SrP/CuLq6YmhoiIWFBaNGva4uVrAI2/r165k4caLkc4mKihKtJLacW5337t1j0qRJaGtrExYWll/FVUdHh5MXLjB26FDG/PEHu1NTy5UKVF5yAJeaNdlbvz7+58/LdnMCilLbSjphD1EUKKsKHig/laqselVSvZIpJ69evWLjxo0YGxvTrFkzbG1tWb16NT4+Ply6dInw8HBCQ0MJCAjgyZMn7N69m6FDh1K/fn3GjBnD0aNHS8xsOQBdAAAgAElEQVRALg9Hjx7F1NSUiRMncvjw4Qppog0dOpQPPvhApais8iC1IGhh6tati5eXF46OjvnyIs+fP2fUqFF4enpy+fJlWQwMKIyMGCuZPBYsWEDt2rVZsWKFaH0WxsfHB2NjYwYPHszp06eLlAnX19fnt4AA2kyZgqGuLqdEGvcm0E9Hh19atuTK9euifm7loU+fPsoNcbIOX+rYfftWhb6NtFQbmTJITk5myZIltGrVijlz5lS4lHJmZmb+/nrXrl3Zv39/heRRsrOz+fzzz3F2dsbHx6fSTuvvvvuOR48eSSbClxe+LGfYNijq6syZMyf/rt/Q0JA2bdpw8eJFWecSGRkp6l2ompoaP//8M+7u7vj7+4vWL7yOSJw3bx4+Pj6lhnFramqyzs0Nt0OH+KRpU0bq6XGlkuPeBT7W1maAnh7jly0jV0OjaPa9DAwePFi5IZYivhFZeI5Cpugf1NXVsbCwqIKJSEt1ZcxSOH78OE5OTty/f1/UfgcOHIi7u3uZF8F79+5hY2ODgYEBO3fuVHnPOi4ujj59+uDr6yu6f+L+/fuYmpry8OFDUfstD1lZWXTu3Jlnz57h7e3NsGHDZB1fEAT09fV58uSJ6JUcz5w5w4cffkh4eLgoW52RkZHY2NjQoUMHtm/fXqEVcUZGBj/v2MEPy5ejn5rKxJQULHNz6UnJVYpjUQgi/FK7NqHZ2cxycmLeokU0bNiQ0NBQhg8fTkhICC1btlT53CpCly5diIyMfN0wGOgn6xTgNxQSQ/9gaWlZWcXx6sqY/zays7OZP38+77//frEGpgYK0dYvgH0otBLDUCR2+wNbgVlASbvMAQEBGBkZcfjw4RLn8Ouvv2JsbMyoUaM4cuSIKE7Rdu3asXHjRmxtbUlNFffWTW6ttjwePHiApaUlzZo1Q09Pr0qic+7du0f9+vUlKRU8ZMgQbGxssLe3V1kg1MPDg379+jFt2jQOHjxY4TIUWlpafOTkROzjx2w4fpxHM2cy9X//Q09Dg661azO4Xj1G1qnDu3XrYlinDnU0NRlUvz4Xx41jprs7D1+8YOWaNfkZ90ZGRsyePZsZM2ZIKn5aHNOnT1duuAzImZ6UAIQrN02bNk3GCchH9UqmEOnp6djY2HD06NEirxkAc4CplN9PGAK4Ap4ULUWirq7O2rVrmTNnTn5bdnY233zzDbt27WL//v1F949FYMqUKejo6LBlyxbR+ty6dSshISFFy9lKyLFjx3BwcGDWrFl8/fXXnDlzBkdHR8kDHApz5swZ1qxZI1ndm+zsbPr168fkyZP5+OOPK3x8YmIis2bN4vr163h5eYkuN1S3bl1OnDhBRkYGKSkpaGtr06BBA9q2bVumFltubi6DBg1i9OjRzJ07V9R5lUZiYiKtWrXi5cuXrxt7ASNkmsA+FKUj/qFt27ZERUWVO7G3EG/0SqY6uqwAWVlZjBs3rkitCU3gM+ArlJS5y0UvFCVDvkJhoAr2nJubm+9jmTNnDg8ePMDGxoZ69eoRFhZG/fr1K3kmpePm5oaRkRFeXl6i1ZeRcyWTkZHBwoULOXr0KIcOHcrP3H/vvfcYN24cDg4OHDp0SJa5gPj+mMJoaGiwd+9e+vTpg5mZGT179iz3scHBwUycOJG+ffty7do1dHQq+g0unQcPHqCjo1Nph7W6ujo7d+6kd+/eWFhYSBpmXpDatWuzYMECvvrqq9eNIUA7oIvEg19FycCAQmm8kgbmjad6u6wAjo6ORQxMKyAQWEnFDUxB2qHYgt1MESUJ5s2bx7Jly+jduzeWlpYcPXpUMgMDoKury969e3F2di6qSFtJ5MqRiYqKypeGCQ8PLyINs3r1ah4+fMjWrVsln0vBOUkdIdW2bVs2btyItbX160TCUhAEgfXr12NlZcW3336Lh4eH6AYGICIigrfeekulPtq0acMPP/wgu6TOp59+WvTvdgRFSLNUxACF1hz9+/dn8uTJEg5atVQbmX/YtWsXO3fuVGrrjmKr1kTEcZxQGJuCu/e5ubksX76c9evXV0iwURWMjIxYuHAhEyZMEKUanxwrGQ8PD8zNzbG3t+fw4cPF+qlq1qzJ3r17+frrr/njjz+K6UV8pF7J5GFtbY2ZmRnz588v9X3x8fFYWVmxf/9+rl69KnrphYKIYWRAsYXbo0cPvvzySxFmVT5evXpF/fr1lX9vmSj2tqUQb4tCoc5dQEqmbt267Nq1CzW1N9pzoRLVRgZ48uRJkf3g9oAv0hRwsgSOAQVVinJzc9m4caOsDtD58+fTuHHjCuVipKam8ueffxIQEICvry9+fn6EhoZy+/Zt2rZtK8k8k5KSsLOzY9WqVfj5+ZUZxt2uXTs2bNggSYBDccixkslj06ZNBAUFsW/fvmJf9/Pz45133qFDhw4EBgbSpk0bSedz8+ZNunQRZ3/Jzc2NI0eOFC2NLAH+/v4YGhrSv39/Nm7cqPxiGuABhIo0mABcAA6g5JitUaMGu3fvlvxvVE0pCIIwRJCBiRMnCii+CgIg6IFwEwRB4sfmAmPmPfbt2yfHKefz7NkzoXnz5sLZs2eLfT01NVXYv3+/MHXqVKFt27aCmppakTnnPRo3biyMHTtWcHV1FZ49eybK/EJDQ4UOHToIdnZ2QnJycoWOtbOzExwdHUWZR0kkJiYKenp6Qm5urqTjFOT69etCkyZNhFu3buW3ZWVlCUuXLhWaNm0qnD59Wra5mJubCwEBAaL1d+HCBaFFixZCfHy8aH0WpKTPacmSJcV/r9sjMBsBl0o+HBBoUbRfNTU1wc3NTazTGiLndfk/hSCDkYmIiBDU1dWVvgBuMhiYvMfwQl++Tp06CTk5OVKfthLnzp0TWrZsqfTDvnv3rjB79myhdu3aJRqV0h41a9YUxo8fL4SEhFRqTrm5ucK6deuERo0aVdrwJicnC506dRL2799fqePLQ3BwsGBoaChZ/yWxbt06wdjYWMjIyBDu3LkjmJmZCe+++67w5MkTWefRoEED0W4o8liwYIEwevRoUfsUBEG4d++eYG5uLlhaWgqPHz8u8vrKlSuLv4lSR6AbAlMQWFoOw7IEgYkIdCj+t6GhoSHs2LFDzFOrNjKVRZDByMyYMUPpC2AEQo6MRiYWhJqFvoRHjhyR+rSLsGjRImH48OFCYmKi8Nlnnwk1a9aslHEp7jF+/Hjh/v375Z5LfHy8MGLECMHY2FiIjY1V6bxCQ0MFAwMD4fbt2yr1UxJ79uwRbG1tJem7NHJzc4VRo0YJY8aMEQwMDISlS5fKfnPy+PFjoWHDhqL3m5mZKRgbGwvu7u6i9Xn06FGhcePGZX5OBw4cKP3GqhYCXRAYiMAYBCb88xiNQH8EOiKgVfJvoXHjxiXuGqhAtZGpLILERiY5OVnQ19dXvsDLaGDyHtMLfRFHjRol5WkXS1ZWltCtWzehfv36pRsNdQQaINAagXYItEWgMQI1Szc0+vr6gqenZ5nzOHfunNCiRQthzpw5QkZGhijn9tNPPwkmJiZCZmamKP0VZPHixcKyZctE77cs0tLSBEdHR0FDQ0NYv3697OMLgiD4+fkJAwYMkKTviIgIoWHDhkJUVJRK/WRmZgqLFi0SWrVqJQQFBZXrmNjYWMHS0lK0m6y8h7W1dbErKBGoNjKVRZDYyBw6dEjpS9ACeVcxeY+QQl9GTU3NCvsfVMXd3V3Q0NAo/geij0BfBKYisLiELYKlCDgiYImAQck/tE8++aTYO8ns7Gxh6dKlQpMmTYQTJ06Iem65ubnC+++/L3z11Vei9isIgjB+/HjBy8tL9H5LIyIiQujevbtgZ2cnnDp1SmjWrJlUF69S2bhxo/DRRx9J2r+RkVGlbw7u3LkjmJqaCqNHjxZevHhR4eMPHTok9OzZU2Xj0q9fP8HPz69S51BOqo1MZREkNjKzZ89W+jLMrwIDk/foUOiLeerUKSlPXYk1a9YUvxdd959tgCUlGJbSHnYU6/AEhAkTJgjZ2dn549+/f1/o37+/MGjQIOHRo0eSnOOzZ8+EFi1aCL6+vqL22717d+H3338Xtc/S2L17t9C4cWPBw8Mjv23x4sXCe++9J2vwgSAIgpOTk7BhwwbJ+s/NzRVGjBghLFmypMLH/vLLL0KTJk2EdevWqfS55ObmCv7+/sLUqVOFBg0alNuwNGnSRHBychKuXLlS6bErwBttZP6bKabl5OrVq0rPB5fwPjmwRJGnlcfVq1cZOnSo5ONu376dhQsXIgiC8gt9gEFQ6fq77YC2KMJAT6MUunngwAH09fXZtm0bx44dw9HRMV8aRqocoUaNGuHp6YmtrS1hYWE0btxY5T5zc3OJi4uTReng1atXzJo1i+joaAIDA5XGXLp0KQMHDmTt2rVl5tCISUREBGPHjpWsfzU1NXbs2ME777zD4MGDGTBgQJnHpKens2jRIk6dOsXJkycrpI5Q0hwsLCywsLAgNzeX69evM3XqVNq2bYuenh7Jycmoqamhr69Ps2bN6NSpE8bGxqLkDv1X+H9tZKKiopSeG1XRPAAMCz0vPDcpCAoKwsnJSdnA1ATGAWLkFqqh0NVpiUKr6dXrl9zd3YmJieHOnTtK0jBSMmDAAOzt7Zk2bRq//fabyglwd+7cwcDAQJJM+oJcu3YNW1tbrKys2LVrV5E68BoaGuzfvx9jY2PMzMzo3bu3pPPJQ6xEzNIwMDDA3d2d6dOnEx4eXqoAamRkJBMmTKBjx45cu3atTN20iqKurk7Pnj1JSUlh1apVkpdY/6/w/zYZ89WrVyQmJuY/1wNUv7etPIXvhfOKcEnFq1evsLW1JTs7+3VjTWAy4hiYgjQGpgOFEvQDAwPZu3evLAYmj+XLl/Pq1SvWr1+vcl9SZ/oLgkIaZvTo0axbt47169cXMTB5tGzZEldXVyZNmqT0vZaKFy9ekJmZSdOmUqQrKzNs2DDeffddJSHZwuQpTE+fPp2DBw+KbmDyyMjI4NGjR5IlHv8X+X9rZArrP4lZWrYyFB6/PPpUqrB48WLlMgZqwHgUYm1SUAeFAav1uik3N5fPPvtMpYqhFUVDQwMvLy9WrVpVZLu0okiZ6f/s2TOGDRuGj48PwcHBjBhRtjzw2LFjsbS0xMHBQZI5FeTGjRt07dpV8nHy+Omnn7h69SpeXl5K7UlJSUyePJlVq1bh7+9f6aJ+5SU6OprWrVv/Z8UspeD/rZHJyclRei5dFfXyUfgrq7TCEJno6OiiFTLNAKmVURoA7ys3XblypciFQ2patmzJ5s2bmTx5crnv+jMyMrh16xbh4eGEh4dz69YtIiIiJDEyZ8+excjICFNTU86ePUvz5uUvQL9u3Tpu3rzJnj17RJ9XQeTYKiuIjo5Ovqhr3io/LCwMIyMj1NXVCQkJoXv37pLPIzIyUjQZnf8v/L81x4ULTCVX0TzyKLxu0dfXl2ysVatWKRvZBsBAyYZTpgvwFhDxuunbb7/9P/bOOyyK62vALyBgwy6gggVbFGMUVDSi2Lsx+dlFLLFhbwlqjCWJGjU2bFFjiRhLEGOJxoI1YgWx0hVFjQVURKQK3O+PFWR2qcvM4qe8z7OPzt3Zc88uM3NuOYX+/fvrNElgz549OXr0KOPHj2fr1q0a77969Yp9+/bhuXcv586d40lkJOaFC1P67Qg2MimJ/+LiOPLXX5w/dox2X37Jl19+madlmvS1hLZv307Lli1zLaNw4cLs2LGD1q1b06RJE8VmWnLmLMspNjY2TJo0CScnJ4YOHcr06dNZvnw5/fv315kO+fG9/7/z0c5kSpUqhZHRu6T7L8hfQxOmdqyvr8/Dhw9l7+fly5fs3LlT2tgW3Q432iO58vz8/Dhz5owOFVCxcuVKrl27Jhn1BwcHM9zRkSpmZuwfN45W+/ZxJCKC6KQkQl+/5srLl1x5+ZLQ16+JTU7m5IsXtN63jwPjxlHV3Jyv+/UjODg4i14z5t69e7Rs2ZJr165x5coVrQxMKtbW1vz4448MGDCAhIQEreVkha5nMqk4OzsTGBjIrFmz8PLy0qmBAZWR0UXG7Q+Jj9bIGBgYUL169bRjAdzKP3W4qXb88OFDmjRpQokSJWjSpAmDBg1iwYIF7NmzB39/fxITE7Xqx93dnfj4+HcNZVC+SJM6pQG15fw//vhDx0q8G/VPnToVHx8fJowcSYsGDajs7s7t+Hj2REczDKhFxsupBqgcNr4G9rx+zZ34eKrt2UOLBg2YMHIkUVFRGXxKEw8PD5o1a0bfvn3Zu3evLFU9nZ2dqVWrlmKp8wMCAnRuZLy9vWncuDHdunUjISGByMhInfYPBctl2vDRLpcBfPbZZwQEBKQdnwGa5pMup9WOFyxYgKOjI1FRUdy+fZvQ0FD8/Pz4888/CQ0NJSgoCFNTU6ysrKhbty7W1tZYWVlRr149zM3NM+3nyJEj0obPyJ8i3A2QWNbDhw/ngxKqUf+kSZP4qlMnOsfEEBAfj7bl4soAs5KSGJuUxIxt22iwfz+7DhzI1KU4Li6O6dOnc/ToUVliOtT59ddfsbGxoVWrVnTv3l02ua9eveLVq1dYWFjIJjMrhBCsXLmSRYsWsWHDBrp164aHhweDBw/mypUrFClSJHshMpCSkkJISEiB63Iuea8r5byNZD2qlPz169fj7OycdmwHXFSqsyx4jCqUJL0rwsOHD7Pc8E1KSuL+/ftpxsff35/Q0FBu3rxJYmKihvGpW7cutWvXxszMjBcvXrwT5AxkbpOUIxlYhKpI1FuCgoJ0fgN77N7NuKFDWR8bSw/1gNQ8cgAYWbQoKzdvpk/fvpL3/Pz86NevHw0bNmTt2rUae4RycfnyZb766iu8vb2pWLGiLDIvXLjA5MmTuXhR+bslIiKCwYMH8+LFC3bu3CmpveLo6EiZMmU068EoxN27d2ndurVs1WRlpKOent6x7E/LHz7qmUzXrl3R19dPc6G9hGpwrbyPipTfkRoYW1vbbD2KChUqhJWVFVZWVrRr107y3pMnTwgICCAoKIiAgABOnjxJUFAQT58+lS6VFSb/goMMUFnWO++abt68qVMjs3PHDr4dMYJjsbHUV0D+F0C12Fi6fv01bxITcXRyAlQxHS4uLixduhRHR0cFen5HkyZNcHZ2ZsCAAZw4cQIDg7z7UepqP+b06dMMHDiQnj17smTJEgwNpekn1q5dS4MGDejYsWOOXLzzSsF+jHZ81EbGwsKCNm3acPz48bS2n1EFp+uKGGCFWpvT24eRtpibm2Nubk7r1q0l7UeOHKFz587vGsqRv3PZ8kiMTEhISKanys3JkyeZMmIEx2Nj1beHZOVT4FhsLK2dnTEpWZLt27dz584dvLy8qFGjhoI9v2PmzJmcOXOGxYsXM2PGjDzLU9rDKjk5mZ9++on169ezZcsWOnXqlOF5JUuWZNu2bfTp04erV6/KkiooKwr2Y7Tjo934T2X8+PGS413ABR32Pw8IT3dcokQJBg8erEhfMTEx0obMM3ToBrX+nz9/rpNuHz9+jFPPnuxU2MCk8gmwKzaWEQMHYmZmxvnz53VmYEDlqbh161ZWrlzJ+fPnc/XZ2NhYIiIiCA0N5fnz58THxys6k3n48CFt2rTh7Nmz+Pr6ZmpgUrG3t09LFaSRf09mCmYy2vHRG5nu3bvTsGHDtGMBDEM1w1Cay8AytbaJEydSqpQy+Qc0jIy2yS/lwkh6+Pq1bpzIxw0dyrCYGJ2FBgE4AM7x8TwMCpK4zuuKSpUqsXnzZgYMGCDdk0uHEIILFy7w448/0qFDBywtLSlWrBimpqZUr16dcuXKUbRoUTw9PVmyZAkLFy7E19dXNh2PHz9O06ZNad26NZ6enjlOWfPTTz/x/PlzNmzYIJsuGVEwk9GOj97I6Onp4erqKgkEDEDllqpkspPHQB8k+95YWlri4uKiWJ8aDzfdZXPJGLWkBpnl5ZKT48ePc8vLi5lv3mR/ssx89+YNfufOcexY/uzRdu7cmR49ejBq1ChJ+8uXL1mwYAE1atTg888/Z86cOXh6emYYpyWEICkpidOnTzNjxgxsbW2xtrbG1dWV2NhYrfRKSkpi7ty5DB8+nF27djF37txcZeMuVKgQ27dvZ/bs2QQGBmqlQ04oMDLa8dEbGYAWLVpo5HtyB8aizHM4AuiCNABTT09PUS8jQDODrXbPBPmIkx5mlWFXLn6aNo0fYmNR3pxpYgz8EBPDHB2m41dn8eLF3Llzh40bN5KYmMjChQupUqUKM2fOJDQ0VCuZ/v7+TJo0iapVq7Ju3bpc5aK7f/8+Dg4OXL16FV9fX+zt7bXSoUaNGvzwww84OjpqHUOWFREREQghKF++vOyyP3QKjMxbli9frpH7aB3QH3mXzgJQpQm7ptY+adIkxT1kqlatKm3QzRZI5qj1v2fPHkaNGoWrqyvHjx/X+qGXGdeuXeN+UBC9FV67z4reQERYGD4+PvnSv7GxMe7u7ri4uFCnTh1mzJiRdf42A6AoqgDaomT5xIiIiGD06NF8/vnnOfrb7d27l8aNG/PFF1+wb98+ypTRNkJJhbOzMxYWFsydOzdPcjKiIJ2M9nzU3mXpKVKkCAcPHqR58+aSZQJ3VG7Nm1DV8dKWFGAD8C2a6Wu6d+/O4sWL8yA9Z9SoUQNDQ0PepC4VvXyrjHKTp6z5T3qYOpv09/fn4MGD+Pn5ER8fn+aqnRr3kxrzk9tMuNs2bmRQQkK+JkM1AJzi4/lj0yYaNWqULzpcvHiRmJiYjCPmDVElSq2BysW8NFLDkoxqcPAAVZW9EKT+96gK7tnY2LBz506pN+NbUguLHThwgP3799O0qXwh0Bs3bqRBgwa0b99ew7syLxRs+mvPRx2MmREBAQF06NBBYz1aD9WsZgZQLxfyUoC/gR+BjLZIO3bsyN69e3UWtdysWTNpEN3/QJEgkex4DqSLoStSpAgvXrygcOHCktMiIyM1Ak79/PwIDQ2lYsWKGgGn9evXz3TZrY6FBTv/+w954+pzz02gZ4UKBD96pPO+V6xYwZQpUzQ9sYqhGkU1QhU/lVNiUAWYXQLU0qQZGhqyefNmBg4cmNYWFBREv379qF69Ohs3blTEyeXo0aOMGDGC69evU7p06ew/kAMmT56MpaWlTiuP5oL3OhizwMhkwP379+nevTs3btzI8H074CtUiYvrobo/0xMB+ADHgd2oBn0Z8fXXX7Nu3TqNIDMlmTlzJgsWLHjXUBNQNh4wY04jyaXTrl07PD09c/zxhIQEgoKC0l7+/v5p/y9dujS1a9emdu3aabOecuXK0a5ZM8Lj4/N9jVgAZkWKcO32bdmi8HPChg0bcHZ21jQwNqiSluZlnBMN/INqPTgdBgYGeHh48OWXX+Lm5sbUqVP5/vvvFa/7Mm7cOJ4+fcru3btlkdepUycmTJhAly5dZJEnMwVGRlvyy8iAKq/U5MmT2bBhQ7b+9+UBE1QPjwiyz+ZctGhRjIyMCAwMVDyATB0/Pz/q1Us3F9MDRgOmOlQiCXBFUt9g48aNDBs2TBbx9+/fJygoiMDAwLTMB1FRURS/c4fTL1/K0kdeaVuqFDN279bI1qAUJ0+epEOHDtISD4WAHsib4uISqjs23d5/kSJF6NKlS1ruvfr1lZ86x8fH06RJE6ZPn86AAQPyLK9q1aqcOnVKktbmPaLAyGhLfhqZVM6ePcuECRO4dk19qz736Ovr069fP3755RdWrFhBcHAw+/btk0HL3NGkSRO8vb3fNdRDVRVTV1xA8lc1MTHhwYMHipXMBdi0aRPnJ05kk3qsUD7hXLQoDZct03AnVoKIiAjq16/PkydP3jUaAgMAJZ6Z/oAHEkNTsmRJbt++Tbly5RToMGNu3bpFu3btuHjxoqbTSy6IjY3F1NSUV69e5cq1Woe810bmvfzF3idatGiBr68v+/fvp23btlpdZMWLF2fo0KHcvHmT7du3U7FiRX766SfCwsLYtGmTAlpnzfTp06UNtwB5Hbky5xUaKadHjx6tqIEBiIqKonQ+xMZkRqnERF7qaFb17bffSg2MPio3N6UG5XUBtaTPUVFRLF26VKEOM6ZevXpMnToVJycnjUq46ty9ezctRmfEiBH06dOHPn36MGTIEJydnSlTpgw+Pj7ZyilAk4KZTC55+PAhhw4d4vTp0+zdu5fk5GSNUsnFixendu3a2NnZ0aZNGzp16kSxYuo7NyovKgcHB86dO6fTxJApKSnY2dlJ3WhNgFEo62mWgiob6P13TaVLlyYoKEjx+IOFCxcSNWsWPytY1jo3zNHTo9APPzBr1ixF+7l8+TJNmzaVLvm2RpWCQGkOotqcfIuRkREBAQFYWVnpoHMVKSkptG/fnnbt2mnkbfPz82Pr1q3s3r07x5mVS5QoQZcuXXBycqJTp07vy8ymYCbzIWFhYcGoUaPYtm0bBgYGPH/+nIiICO7cucPdu3d58eIF0dHR+Pj4sGbNGnr27JmhgQGoW7cus2bNwtHR8Z1bsQ7Q19dn7dq10hskGtiJNAWBnAhUbnb3pc0LFizQSYBbsWLFiMmly7OSRBsZKRp4m8r8+fOlBsYMaKF4tyo6AumcxxITE3Xiqp8efX193NzccHV15dKlS4DK8Hbr1o1PP/2UX375JVep+1+9esWuXbvo2rUrdevWZevWrbkKPv0YKTAyWnL79m0qVapEiRIlKFeuHFZWVlStWjXXLpPjx4/H1NSU+fPnK6SpJkIIzp8/r+EuzH/AVuTPBJCCalR7VdrcuXNnnexJAJiZmfEkH3KGZcYTIyPCw8O5fv06cXFx2X9AC0JDQ/n777+ljZ3Q3V1vCLSRNm3dulVny4SpVKpUibVr1zJgwACGDh1Ks2bNOHToUJ4TagYFBTFkyBA+//xzrl+/LpO2Hx4FRkZL5MpEq6enx5YtW/jtt9+4cEH5/M8RERF0796dHTt2cO3aNc0st3Qt9/cAACAASURBVP8BG1ElV5ODaMANuCJtrl69Om5ubpKccUpSq1YtlMtqlXsC9fXx9/fHycmJsmXLYmVlRefOnZkyZQrr16/n9OnTPH36NE99bNu2TfogtUC5fZjMqIcqoPMt8fHxsrkV54bKlSsTERHB77//nuHMowjQFlWw9K+ogrDdUY25fkS1hZWZH+ilS5ews7Nj7dq1iuj+/533Z/3g/xlypjs3NTVlzZo1DBw4kGvXrmFiYiKLXHVOnTrFoEGD+N///sfevXsxNDTEw8ODtm3bpi0lAPAClaFpCrQErRJ9JaOKPj2JRo4yMzMzjh49qlNPo7p16xKWkMBLJCs4+cJr4HZ8POd27UoLwn306JEk2NTDw4PQ0FBevHhB9erVM6x0ml0Ar8YsxkahL5QV+qhKbZ9613Tw4EFGjBihMxUOHTpEnz59MkzgaQ+MAb4k+zAhAZxHlf1jO9KV5YSEBMaOHUtQUBDLly9/X/Zq3gsKNv61xNHRkU6dOuW5wFh6hg0bhp6eHhs3bpRNJqiy3M6bN48NGzawZcsWOnbsKHk/Ojqar776ihMnTmh+uDCqKPDPUAUEZUc0Km+1S6jS1qhhZWXF0aNHdVpPJZWOTZsy+tIlvtR5z1L+BlwbNeJ4ejfyTHj58iV37tzRyHoQFBSEqamphvGpV68e5ubmREVFUbZs2XfeUHqohulFlfxmmRAOpBvklyxZkufPn8tSpTM7Dhw4QK9evTT2POuiSjjRJsNPZc99VD+newbvjRgxgvXr1+tsls57vvFfYGS0pGHDhmzcuBFbW1vZZMbExGBjY8O8efPo3bu3LDLDwsJwdHSkWLFibN26FXNz8wzPS0xM5Jtvvsm6XnppoAqqipomqObBKahSi6Tms3qKasiXAWXLlsXPz0/nAaip/Pbbb3hOnYp7dHT2JytIv2LFaL1kCaOcnbWWkZiYyJ07dwgICCA4OFgSeGpsbEzFihWlsV1mqIJu8wMBLEGSaTYkJETxgcaFCxdo27atZM9LD5gALEajnJFWeADDgSi19jlz5iiSqDMTCoyMtryvRiY5OZmSJUvy9OnTTD3HtMXHx4cvvviCK1eu5LhoU2bs2bOHcePGMX36dCZMmJCjkdXBgwcZN24cYWFh2Z6bU0qUKMHcuXPx8PCgZ8+e+Zb/KSoqiuoVK3ItNhaLfNEAHgGfFilCyMOHec46nBlPnjxh6dKlLFmy5F3jp0BPRbrLGVuBu+8ODx48SNeuXRXrLjIykoYNG0quYwNUE6qRmX5KO/xR+VOkTx+lp6fH/v376d69eyafkpX32sgULBxqQWhoKGZmZrIbGIBGjRoxcuRIBg8erLX3S1xcHBMnTmTmzJn8888/TJw4McdT927duuHv7y+La3GRIkUYN24cgYGBTJ48mV27drF48WLp/o8OKVmyJEOGDWOxDoqjZcYiY2MGDx2qmIEBMDc3p2zZstJGZWNds0dtIyw8PDzj82RizJgxEgOjhyoLutwGBlRLb8eRriYLIRg5cqTOPeneRwqMjBYoWeMc4Pvvvyc6OprVq1fn+rN+fn7Y2dkRGRmJj4+PpLR0TilatCgzZszg3r17bNu2jY4dO2q6O2eCgYEBTZo0Yfny5dy7d49Vq1alzcgsLS1ZvXo1AwcOJDqflqymzZrFn0ZG3MqHvv2AXUZGTJ8zR/G+NH7f/LOrGfav5N//xIkT7Nq1S9I2DVW1W6WoBfyF1JPqyZMnigfb/n+gwLtMC5Q2MqnlZJs2bUqrVq00iqllhpubGy4uLixduhRHx7ynVi5atCgDBw5k4MCBxMfHs2XLFhYtWkSPHj14+fIlcXFxGBoaUqpUKapVq0bdunVp1qxZlrFCvXr14siRI0yYMIEtW7bkWcfcUr58eabNns3QuXPxionR2bM3ERharBg/LlqEqany2Ug1NtXzO15QrX8lN/3VH+yNgZ8U6+0d9sD3wNx0bRs2bODbb7+lcuXKOtDg/aTAyGhBQEAAbdpo65eSM6ysrFiwYAEDBgzA29s7y5nEs2fP+Prrr3n8+DFeXl6KbKgWLlwYIyMjWrdujaura55kubq60rhxY7Zv3y6LMcwNhw4dYsmyZdT57DMm+vqyLj5eJ/1OLFwYyxYtGJmHzf7coFFTRzdfM3N0VGr733//lcSb6aHah9HVg2468Adw++1xYmIiy5YtY8WKFTrS4P2jYLlMC5SeyaQyfPhw6tSpw5wslldOnz6NjY0N1apV49y5c4p67Pj5+WFtbZ1nOcWKFcPd3Z3JkycTHBwsg2bZ8+bNG+bOncvYsWNxd3dn35Ej+FStylwdZAH40dCQS5aWbPnzT525tVpYqLk2ZFAEU6e8kB4eOXKErVu3cunSJVn3LdQTzn6BygNfVxgDM9Xa/vjjDxITlcrX9P5TYGRySUpKCkFBQTqr97127Vq2b9/OyZMnJe3JycnMnTuXAQMGsH79elxdXTFS+IEpl5EBVYbcmTNn4ujoqPgNGBwcjJ2dHTdu3MDX1xd7e3tMTEz458wZ9lWpwuTChdUrCMtCMjDVyIjdlSrxz7//KjZ6z4jatWtLG3RfhPMdSahiZdJRuXJljh8/zvjx46lSpQoVKlSgTZs2jB49mhUrVnD06FHu3buXq7xgiYmJ7N27V9I2Xgb1c8sAVF7+qTx//jzjGLSPhAIX5lxy9+5dWrVqJauLb3YcO3aM4cOHc+3aNcqUKcODBw9wdHTE2NgYNze3PLs65xQLCwvOnz8v2/qyEIIvv/ySunXr8vPPP8siU53sqjG+fPmS3l26kHzjBn/ExCBXncpHgFOxYlCvHnuOHFGkzHBWJCYmUqZMGWLS188Zh/Tppyvuocq+/ZbKlStr3D+RkZEaJbb9/f159OhRhmW2GzRooJFg9Ny5c9jb26cdV0TlVpwfI+nRwLp0x1OnTpW6lMvLe+3CXLAnk0vkHM3nlA4dOvDll18ycuRIHB0dcXZ2ZvTo0cyePVtn6SuioqJ49eoVlpaWssnU09Nj06ZNNGzYkDZt2tC+fXvZZEdHRzNmzBiuXLnCiRMnMq3GWKpUKY56ebHghx9osGQJMxISGJ2cnKsy9+mJB341MOBnY2Nad+xIbGKi4rVyMsLIyIjmzZtz7Fi6Z88tVDXDdY2aK19G+5mlS5fG3t5eYiRAZSxDQkLSjI+XlxcbNmwgMDAQIyMjifEJDJRmp2tL/i3VdEBqZM6fP59PmuQ/BUYml+hqP0adH3/8kRo1avDvv/+yf/9+mjVrptP+/fz8qFu3rux7CuXKleOPP/6gf//++Pr6ZpqRIDf4+PjQv39/mjVrho+PD0WLZp1LRV9fn+9/+IE+jo64jBnDkgsXcE5MxCkpiao57DMM2GZgwDpjY2ybNsXr11+xsrKiZcuWrF69mvHjdb9w07t3b6mR8UWV5l/5bC7viANuSpt69cp5GVYjIyOsra01BnYpKSmEhYURFBSUlung6FHpokcTbXWWATu1Y3UD+DFRsCeTSwICAnS2H5O+TwcHB2xsbBBC6Gx5LD1KzuAcHBwYMmQIQ4cOzVP6dSEErq6udOnShXnz5uHm5patgUlPrVq12Hf8OIcvXCB8yBDsTEyoV6IEYwoXZg2qagVn3r4OovJaGlu4MPVMTGhsYsKTIUM4dP48+0+coFatWhQqVIg//viDefPmyVK+O7f07t1bGjD8Co1yC4pzAUh4d1ihQgWN3HnaoK+vT7Vq1ejUqROTJ09m3bp1GvdlzTz3oj0VkNb/i4yM/GgDMwuMTC7R9UzGzc2N1q1bM3bsWI4dO8a3336bo3KycqP0MuGPP/5IVFSU1u7RERERdOvWjZ07d3Lp0iX69u2rtS7169dn1W+/8fjlS9xOnSLJyYmddnasb9GCuZ99xpz69VnfogW3hgzhk8WL2XrqFI8jI1m9cSOfffaZRJaVlRWrV6+mT58+Og9ALVmyJCNHqsW4n0T+ekGZ8QJV2uJ0TJ48mUIKFY979eqV5LhsJufpAj0kFQ4AZQNQ32cKNv5zgRCCUqVKERYWpvhGblRUFM7OzoSEhLBz505q1lSNy1LLybZv357p06crqkN62rdvzzfffCPLKDQz7t+/j52dHf/880+uMhWcOHGCwYMH07NnT5YsWYKhoaGses2YMYPixYszc6a6c2rOGTp0KIUKFeK3336TUbPsefz4MbVq1eL169fvGmsB/VH27k8GNqOqT/SWChUqEBwcrFhF0AYNGkiKh10HMt6J0w21gJB0x8HBwWn3scy81xv/BTOZXPDgwQNMTEwUNzCXLl3C1tYWU1NTzp8/L7kw9fX12bp1K8uXL8c7B6ni5UIXDg+VK1dm5cqV9O3bN0ejvqSkJObOncvXX3/N9u3bcXV1ld3AgGo9Pa9LpKtXr8bLy4udO3fKpFXOqFChgmacVTCgpEdtaqnt/6TNS5YsUbTktHouwZhMztMVr9WOlaoT9b5TYGRygdJLZSkpKbi6uvK///0PV1fXTGNfLCwsWLNmDYMHD86wEJPcREZGEhsbS6VKlRTvq3fv3tjb2zN58uQszwsLC8PBwYGrV6/i6+uLg4ODYjoFBgbyySef5ElGagDqlClTuHv3bvYfkJGyZctqGl8vJIXEZCMFOASobUH973//Y8CAAQp0+A71pKAPFe0taxKQhgbp6+vnujT7h0KBd1k6kpOTuXbtGteuXSMoKIgXL17w6tUrChUqRIkSJXjw4AHGxsb8999/sj9wnz59yqBBg0hKSsLb25uKFbOO2OjVqxd79+7FxcVFq0SauUEpz7LMWLVqFY0aNWLHjh0ZPpg8PDwYP358rkoYaMubN28ICwujevXqeZb16aefMm3aNPr27cu5c+cUmXWlJ9WN29fXl0OHDuHk5CQt6XwGVWG5rshTXCUW2It0jQioUaOGRiS+EqgvRfkr3mPmBIMkwLdy5coY52P27/zkozcyycnJHD16lG3btnH48GGiotTLD2liYWFBrVq16Nu3L4MGDcpzKpcDBw4wcuRInJ2dcxX7snbtWho0aECnTp3o1q1bnnTICl3HBqWO+tu3b0+zZs2oVk1VmD4uLo7p06dz7NgxDh8+TIMGDRTX5fbt21haWsr2gJg4cSKnTp3ihx9+YN68ebLIzIj0btze3t4ULVqUw4cP06pVK+kG+XVUEYtdgbzYUT9Uu6fSvXfMzMw4oqNgVPVEsv8q3mPmnFE7zmmS2wJ0jBCig1CIpKQksXnzZlGzZk2BahVZq5e+vr7o1auXuHHjRq51iI+PFxMmTBBVq1YVXl5eWn2Ps2fPigoVKognT55o9fmcMH78eLF8+XLF5GfGsmXLROPGjUViYqK4deuWqFevnnBychKvX7/WmQ5//fWX6NGjh6wyw8PDhYWFhfD09JRVrhBCpKSkiBUrVojy5cuLXbt2abx/6dIlUa5cuYyv56oI+iOYhWBuDl7fI+iFoGLG90aVKlWEv7+/7N8xM0JDQyX9G4N4DkLkw6u92m+xdOlSJb96Bx08jj9MhEJG5sqVK6JRo0Z5Mi7qr0KFColJkybl+AEYEBAgGjRoIHr27ClevHiRp+8zbdo02R+E6WnTpo04duyYYvIzIyUlRXTv3l106dJFmJmZie3bt+tchwULFohp06bJLvf06dOiYsWKsg4OwsPDRZcuXYSdnZ0IDQ3N9Lzg4GBRv379zK/nogjqIeiMwAnBKAQTEIxE4IigA4JPEBhnfj/UqlVL/Pfff7J9t5zyySefSPRYlQ8GJgyEgdrvERAQoOTXLjAy2iIUMDIrVqwQRkZGmd4cpiB6gZgD4jcQ7iB2vL1YJ4GwB2GUhbGpU6eOuHnzZpY6bN26VZQrV06sWLFClu+UmJgoGjduLDZs2CCLPHXMzMzy5YEREREhOnbsKIyMjISbm5vO+xdCiEGDBoktW7YoInvGjBmic+fOIiUlJc+yTpw4ISpVqiQmTJggEhMTsz0/NjZWTJgwQRgYGMg62DI2NhajR48W5cuXF8HBwXn+Xrll/vz5En2qgUjUsZEZp/abNG7cWOmvXWBktEXIaGSSk5PF6NGjM7wxjEAMBeEFIiUHF9ErEFtANMrkRitRooQ4ceKEhg5RUVFiwIABwtraOltDlFv8/f1FuXLlRGBgoKxynz17JkqVKiWrzJxw6tQpYWFhISZMmCA8PT2FpaWliIiI0LkeTZo0ERcuXFBE9ps3b0SzZs2Eq6trnmTMmTNHVKhQQRw9ejTXn/f19RWdOnXKs3HR19cXvXv3TjMsy5cvT1vq1CWPHz8WhQsXlui2TIcGJgDNQahSg5R0FBgZbREyGZmUlBQxePDgDG+O/iDu5+GiOgCiegZyjY2NxfHjx9N0uHz5sqhevbpwcnISMTExcnwtDVatWiVsbW1lvbHPnDkjmjdvLpu87Ej/0Dx8+HBa+7Rp02Qb9eeGkiVL5nk5MyvCwsKEubm58PX1zfVn7927J5o3by46dOiQ52W3K1euiDFjxoiyZcvmyrhUqFBBTJkyRWM5KHWpc+bMmXnSSxvGjRsn0dEERIgODMwbVCsd6fuuWrWqLgxtgZHRFiGTkXFxcdG4OUqD2CvTxRULYlgGN6CJiYnw9fUVK1asEBUqVBAHDhyQ4+tkSkpKiujatauYPXu2bDLXrl0rRo4cKZu8rAgLCxP29vaiXbt24tGjR5L3Ukf9K1eu1IkuQgjx8OFDYW5urng/u3fvFjVr1hSvXr3K8Wf27NkjzM3NxYoVK2Q1vElJSeLy5ctiyZIlwtDQULRo0ULY2NiI6tWrC1tbW9GuXTsxatQo4erqKq5du5Zl3+Hh4aJSpUoZzuqVJDw8XJQpU0ZyLzZAtQKhpJGZmsEzwMPDQxdfucDIaIuQwcj8/fffQk9PT/KHrwjihgIXmSsIfbWLrGjRosLe3l48fPhQhmspe54+fSoqVKggTp8+LYu8sWPH5mk5J6f89ddfwtTUVMyZM0ckJydneM6dO3eEqampuHr1quL6CCHE8ePHRevWrXXS19dffy2GDRuW7Xmpeym1a9fWavaTUx48eCAqVKiQZzlHjx4VlpaW4tmzZzJolXN+++03jQd++7cDQiUMzNIMDEz37t119XULjIy2iDwamYiICI3pfwUQdxQczbhmcLENHz5cpmspZ+zbt09YWVmJqKioPMtq1aqVZNlPbuLi4sSECRNEtWrVcrT38eeff4qaNWuK6OhoxXRKZfXq1WL06NGK9yOEEK9fvxZ16tTJ0oPOz89PfPrpp8LJyUnx73/ixAnh4OAgi6wpU6aIr776ShZZOSE8PFx06NBBmJqaatyL9iDCZbzfk0HMyOCet7Cw0OUeYoGR0RaRRyMzbNgwyR/eCMRlBQ1M6muM2gWnr68vLl68KNP1lDNGjBghhg4dmqNz37x5I0JCQsTx48fF3r17hbu7uzh27Jjw9vYW5cqVE48fP1ZER39/f1G/fn3Ru3dvERkZmePPDR48WIwYMUIRndIzbtw42TwAc8LNmzeFubl5hu7HW7duFWZmZmLbtm060eXXX3+VbXCUmJgomjRpItatWyeLvKw4ffq0qFSpkpg2bZqIiooSdnZ2GgagEohjMtznYSDaZWBgTExMxJUrVxT/rukoMDLaIvJgZEJCQjTcMxfrwMAIEHEg6qpdeO3atZPxmsqe169fi1q1aok///wzw/dv3Lghvv/+e9G8efMsXboBYWVlJYYOHSr27Nkj4uPjZdEv9aGpjWvy69evRe3atcWOHTtk0SUz2rVrp5XHVl5YsWKFxCvr5cuXom/fvsLW1laEhIToTI8pU6aIRYsWySYvJCRElC9fXly/fl02melJSUkRCxcuFObm5pK/WUREhGjQoEGG13UvtFs2fw5iNohiGcgsXry4zvegRIGR0R6RByPj7Ows+eNbo/L+0IWRESBOZXAB+vj4yHhdZY+Pj48wNTUV9+/fF0Ko3Lj//PPPPAWililTRsyYMUM8ffpUK53SPzTzEkdx5coVYWpqKu7evau1jOywsLAQYWFhisnPiJSUFNGjRw8xY8YMcfHiRWFlZSUmTJggEhISdKpHt27dxN69e2WVuXHjRmFtbS1iY2NllRsRESE6deokHBwcMoznevnypWjbtm2G17MeiBYg1oIIzsaw7AHhmIlxAYS5ubm4fPmyrN8thxQYGW0RWhqZuLg4UapUKckFsEuHBib11UbtIhw7dqzM11b2/PDDD6J9+/bi7NmzWUd55/JVrFgxsXDhwly5Z8r90FyyZIlo0qSJIi6i0dHRonjx4jp3mRZCFZtUpkwZUbZsWXHw4EGd9y+EELVq1RJ+fn6yy+3fv7+YMGGCbPLOnDmTFk/15s2bTM9LSkoS33//fbbBpyVQeaK1e/tqhspRKLv7oW3btootK+eAAiOjLUJLI+Ph4SG5ACqASMoHI7Nf7UIsX758pp5TShEfHy8sLCw0POw0XiYIqqBKF2KNoDqC8ggMsr65GjRoIIKCgrLUITk5WaxYsUJUrFhR1odmSkqK6Natm5g1a5ZsMlO5fPmysLGxkV1udjx48EA4ODgIGxsbYWZmpmhOusx48+aNKFy4sIiLi5NddmRkpKhWrZrYv39/nuSk5mhTj6fKDh8fnwz3abR9mZqaii1btuTLYCQdBUZGW4SWRmbMmDGSC2FyPhgYgSqdRWm1i1JX7rdCCPHixQthb2+f8Q2ij6Amgq8QTCXrJIhDENghKJbxjWZiYiKOHDmSoQ5PnjwRHTp0EG3atFEkNY1SsRhubm7C0dFRVpnZsX//fmFmZpbmxv3dd9/lSwBqUFCQsLKyUky+l5eXMDc31/p6ePbsmejSpYto0aKFVqEBKSkp4u+//xYtW7bMfvCVyatKlSpi6dKlOk3WmgXvtZH5IIuWnT8vLSyeX38BQ6C1Wtu5c+d00ndERAQODg54eXlpvvkZMBZwfPv/rAr2FQKqAp2BSW//lRYgJDo6mi+++AIPDw9J+4EDB/jss89o1qwZnp6e2dbI0Yby5cuzbds2hgwZwrNnz2STGxgYSO3atWWTlxUJCQlMnDiRCRMmsGfPHubOnYu+vj4//PADUVFRuLq66kSPVEJCQqhVq5Zi8ps3b86oUaNwdHQkJSUlV5/19vamcePG1KhRgxMnTmhV10lPT49u3bpx5swZbt++zaJFi+jYsWOWVTuNjIywtbXlm2++4fTp09y9e5cpU6ZoVOMsQJMPrp5MSkoKwcHBkrYm+aQLgB3wV7rjwMBAxfuMjo6ma9eu3Lx5U/pGKeAroIqWgg1RfaH6wD9AOvGJiYk4OjpSqlQpWrRogYuLC/v372fPnj00b95cyw5zRuvWrenXrx+DBw/m4MGDshQxCwwMpH///jJolzVBQUH069cPKysrrl69KqmeWKhQIXbt2kWTJk1wcHCgYcOGiusDqlr0ShoZgNmzZ9O2bVuWLVvGN998k+35QghWrlzJokWL2LhxI126dJFFDysrK1xcXHBxcWHVqlVcvXqVsWPHEhkZCahqG5UvX56qVatSqNAH97jUCR/crxYeHi4pSVwOKJN/6qB+q+qi9O6IESPw9vaWNlYF+gJFZOigCNATsACOoFpAQGVoevbsiYWFBXXq1NF4aCrJ/PnzadmyJWvXrmXs2LF5lidHyeXscHNzY+rUqXz//fdMnDgxw3MsLS1ZtWoVffr0wdfXVyd14kNCQhQtMw6qcsTbtm2jUaNGtGjRAjs7u0zPjYqKYtiwYdy/f59z586lFbGTm6CgIBo2bIitra0i8j9WPrjlMknVP/LXwACUVTtW109uNm3axJ9//iltrAEMRB4Dkx47VDOjdBOHV69ekZCQgLu7u05rmhsaGvLHH3/www8/cP369TzJSkpK4u7du3mueJoZ0dHRDBw4kEWLFnHy5MlMDUwqvXr1olWrVtmeJxe6mMmAqsLsmjVrcHR0JDo6OsNzfHx8sLW1pVKlSnh5eSlmYEBlZHS1RPox8cEZmcTERMmxHKXL84J60d6EhATF+oqIiMDFxUXaWAHog3Jz1vpAe2nTnTt32LBhg0IdZk716tVZvXo1AwYMkMxmc8udO3eoVKkShQsXllE7FT4+PtjY2KCvr4+3t3eOy/K6urpy8eJFtm/fLrtO6ujKyAD07NkTBweHDA3ohg0b6NKlCwsXLsTV1RUjI2Xv5gIjowwf3HKZ+kZcTD7pkcprteOsNhfzyrx583jx4sW7BmOgN8pb2mZAGBD0rmnWrFk4OTnpfGO0T58+HDp0iClTprBu3bpMz4uLi+PSpUv4+/sT4u9PzIsXxMTEULxkSV4lJGBiYiLrklnqnsL8+fNZtWoVffv2zdXnixYtiru7O23atKFx48aKGYG4uDiePXuGpaWlIvIzYuXKlTRq1IgdO3YwYMAAXr16xfDhwwkNDeXixYtYWVkprkNMTAzPnz/X6ff+WPjgjEzZstIFqidACvk3ZftP7VhdP7mIiIhg48aN0sZW6Ga9UA/oBtwD3k7Unj17xvr165kyZYoOFJCydu1abG1t2bVrF/369UtrT0xMZM+ePWxbu5azly/zWZEi1E9MpFZcHMWBoqgGBU/09UkpWpQujRsTb2BA7379GDJqlNYb7xEREQwZMoTnz59z6dIlrZd86tWrx6xZs3B0dOTcuXOKjOyDg4OxsrLCwMBAdtmZUaxYMbZv307nzp0xMTFh8uTJtG3blvPnzys+e0klODiYmjVroq//wS3u5Dsf3C9aokQJzMzM0o7jgND8Uwd/tePTp0/Tr18/5s+fz759+7h9+3au3Tgz4vfff5cuEZVEt251JqhmNOn49ddfEULoUAkVqQ+tiRMncu/ePZKSkljl6kr1ChX4fdQoBnl58SQxEa+oKNbGxTEJGA4MAEYCs1NS+PP1a0Jfv+ZsVBRlN22ih709HZs3x8fHJ1e6nDx5koYNG1KjRg3Onj2bH6r+DwAAIABJREFU5z2FcePGUalSJebMmZMnOZmhy6Wy9NjY2NCmTRt69uzJTz/9xPr163VmYKBgqUxJPriZDKhGfE+fPk07Potq7zs/OKN27OLiQpUqVfDz82PHjh34+fkRGhqKlZUV1tbW1K1bF1tbW6ytralWrVqO3XH/+OMPaUNTQHeDURV2gBeQpDq8ffs2ly5domnTpjpWBGxtbfn222/p27cv8c+eYf70KX/HxNAgl3KqA7OTkpielITbhQt84eDA//r355dVqyhSJHNPiqSkJObNm8eGDRv4/fff6dBBnmgtPT09tmzZkvZQbt++ffYfygX5YWSio6MZOXIkwcHBNG/eXCdu/uoUGBnl+CCNjIODAydOnEg7/hsYmg96PAHSOxLr6enh6OhIhQoV6N27d1p7YmIiISEhXLlyBX9/fzZs2IC/vz/Pnz+nRo0a1K1bN80ANWrUiAoVKkj6efToETdu3HjXYIBqQ17XFAFqA37vmo4cOZIvRgagRLFi3Llxg5UJCQzI44zKCBguBL1iYxm/Ywd2p06xz9Mzw/2CsLAwHB0dKVasGFevXpXMrOWgdOnSbN26lX79+uHr64u5ublsskNCQmjRooVs8rLj2rVr9O7dm2bNmuHl5UV0dDQNGzakVatWtG6tHsqsHEFBQXTt2lVn/X1MfJBGpnPnzsyePTvt+BAQDpjqWI8/SBvUA9CgQQMNAwGqaGJra2usra0l7S9fvuTOnTv4+flx5coVjh8/zs2bN0lMTJQYnvDwcKnASmhE5euMWkiMzOnTp/NFjZ9mz2bbsmVcjI+XdRZbCtgWF8fae/do2agR/5w+Tf367yz6nj17GDduHJMmTeLbb79VbI2/ZcuWDBs2jKFDh/LPP//IEoAKqpnMsGHDZJGVHW5ubri4uLBixYq0vbMiRYqwefNmBg8ezNWrVxXbw1QnMDAwX/YPPwbkuTIV4m1OnqPafLZu3boEBASkHc8AFsikV05IQLXUkn7jf9myZUyePDnPsh89eoSfnx83b97E39+fw4cP8+jRo3cn2APt8tyNdrwEVrw7LFu2rKzpXnLCLz//jNv8+ZyIiVF0YOGhp8ekUqU44+1NxYoVmT59OkePHmXnzp06ic5PSkqiVatW9OzZU5brClRpem7duiX77Cs9r1+/ZtSoUVy7do3du3dnGPg5efJk7t+/z549exTTIxUhBCVKlOC///6jRIkSivenAB319PSO5bcSmfHBbfynMnr0aMnxSuC+DvtfitTAFC9eHCcnJ1lkV6xYkfbt2zNlyhQ2btyIvb299ITysnSjHSWRuEw/f/5c6latMH///Tdr5s3jiMIGBqCXEMyJiqLz25QvUVFR+Pj46Cz9S6FChdi5cyeLFi3i0qVLeZYXGRnJmzdvFDUwAQEBNG3aFAMDA7y9vTPNLLBw4ULu3r3Lb7/9ppguqfz333+YmJj8fzUw7z0frJEZPny45GaJAZxJy4CiKP7AfLU2Z2dnypUrp0h/Gg9x5TOPZI4eoBYKpCsj8+jRI0Y4OrIrNpbcp03UjhEpKbR88YIalpb8/vvvisZBZYSlpSVr1qxh4MCBmUbN55SgoCBFN/3d3Nxo3bo1M2bMwM3NjaJFi2Z6rrGxMX/++SezZs2SrEgogS5SCH3MfLBGpkiRIixYIF0gOwzMU7jfKFTxj+njzU1NTfnuu+8U6zMmRi3k1FCxrnKGmufp69fqIanKMHX0aEYkJKBrNwPXuDhunj/PmTPqvoS6oWfPnrRu3Zrx48dned5///3Htm3bGDt2LO3ataNmzZqYmZlRpkwZqlatSr9+/QgPD2fBggWcP3+epKSkLOXllLi4OEaMGMHChQs5fvw4jo6OOfpczZo1+emnn+jTpw/x8fGy6JIRBZ5lyvLBGhmAoUOH4uDgIGmbAyg1AY9FlcpLPTZm2bJliubxMjZWS16TrFhXOUPt2aREehZ1fHx8OH/iBN+ppRXSBcWAX2Jj+VZtiVaXrFy5kqtXr2q4sickJLB582ZatGiBpaUlgwYNYu3atZw4cYLbt28THh5OZGQkYWFhaa+ZM2fSvHlzKlasyMSJE/PkUhwYGIidnR0JCQl4e3tTr169XH1+xIgRWFtbM2PGDK11yI4CI6MsH7SR0dPTY/v27ZQv/26TQgCjgIXIu3T2FGgLnFJrHzx4cI5HbtpSsmRJaYP2abvkQa1/Df0UYOGsWXwTFyd7DtCc0guIffCA48eP50v/hQsXZseOHUyZMoXg4GCSk5P59ddfsbKyYtiwYXh5eeU6MDYiIoKVK1dibW1N3759c51BfNu2bbRo0YLx48fj5uamdYqhdevWsW/fPg4ePKjV57OjwMgoywfrXZaes2fP0rFjR+Li4iTtPYB1QF6jDI4AXwOP1dqbN2+Op6dnlkF7cjBp0iRpYau2gO5CHaTEAYukTbVq1aJWrVrUrl2bmjVrUqtWLWrWrImFhYUsXUZERFDL0pIHCQnq20E65Vc9Pc5268aOAwfyTYfVq1ezbt06jI2N8fX1lVV2kSJFmDNnTrau2fHx8UybNo2jR4+ye/fuHCcBzYqzZ8/St29frly5kmEYQF6oWrUqJ0+e1EmONIV4r73LPsg4GXVatGiBu7s7vXv3lqzt7gdOo3JvHkPu98tvAHOBvRm8Z2Njw4EDBxQ3MIDmpuVDxbvMHLW+P/vsM/766y9CQ0Px8/PD19cXDw8PQkNDefToERUrVkyL+bGyskrLfJCbB8mePXvoVqgQxRXMcJ0T+grBDE9P4uPjdbJEmBElS5YkMDCQ5ORM1kwtASugIqq8dkVQBe8mANGoAsrCgBBUA4Z0xMXFMX36dE6dOsXOnTszXAIODg6md+/e1K9fHx8fH9kcIVq0aMHw4cMZMmQIR44ckS0uKC4ujvDwcKpU0baSXwHZ8VHMZFL5999/+eqrrzL0diqJasnjS8CBzA3ObeA4sBNVupqMFiA6dOiAh4eHTgpMAdy8eVMSEEhh4BvyZwhxGEjnTTt27FhWr16d4akJCQncvn0bf39/QkND0wzRrVu30NfXTzM6VlZWaYaodu3aGg+uPp0788WRIwxU8GvllOYlSzJv716dRqunsnjxYqZPn665LGYENAIaAzndGkwGAoFzwCPNt+vVq8fRo0clJbX/+usvxowZw4wZMxSpfZOUlISDgwM9e/aULXDy+vXrODo6cuvWLVnk5RMFM5n3hZYtW3L16lX69evHhQsXJO9FAZvevvSByqiqFBcHElHFGIa8/TczDAwMKFy4MIsXL9aZgQHVDW9mZvYuX1s8EAwoW9xQkxQk0f4A7dplHhVqbGycYaYDgKdPnxIUFERISAjBwcHs27ePxYsXc+fOHUxNTalZs2ba0tvFy5dZKPNX0Rb72FguXrigcyOzbNkypk2bpvnGp0BHNNzKs8UAsEZ1Dd0AjiGpm3Hr1i3atWvH2bNnKV68OC4uLhw5coSjR4/y2WefafclsiG1HHWjRo2wt7enSZO8Z4ANCgoqcF9WmI/KyABUrlyZs2fP8uuvvzJr1ixevtQ0Gymostbfy4XcZs2asWbNGq5cucLAgQO5fPmyTpbKQOXg0K9fP+m+zAV0b2RuISmgU7JkSTp27KiVKDMzM8zMzGjZsqWkPSUlhbCwsDTj4+fnx7PoaKpqr7WsfPLmDWdk3gvJDg8PD7755htpoyGq8gt5fd7rvZVhBexGEtEcEBBAp06d0NPTw9LSksuXLyvu5JEaF+To6ChLOeqCTX/l+aC9yzLDwMCAcePGcffuXX766SetNxL19PRo2bIlBw8e5Ny5czRs2JDhw4dTr149RV0uM+Lrr7+WrlM/AO7oUIEkNFJOOzo6ym5o9fX1qVatGh06dGDcuHG4uLhgbmz83lzIlYDHDx7orL/Q0FCGDx8uXSIzRlVuW84JhQkwCFAb9Pv4+FC6dGn27NmjEy9CUJWjtre31zqVTnR0dFoMUIGRUZ6Pak8mM5KTkzl+/DiHDh3i8OHD3LlzJ1N3TxMTE5o2bUrbtm3p1asX1atX1zjn5cuXNGzYkJUrV9K9e3el1U+ja9eu/PPPP+8ayqHy19ZFcOYZJP7bhoaGBAUFKVqTHVT7UY729tx49UrRfnLKBWBqnTqc91ePllKG9u3bS92mCwGOgFI/ezKwHUmRJn19fS5evEjjxo0V6lSTmJgYbG1tmTNnDv3798/wnGfPnuHp6cm///7L9evXCQkJkeTRMzY2Rk9PjyZNmtC5c+e0qqNyORXokPd6T+a9/jV1ZWTSs2PHDvbu3cuPP/5IeHg4r1+/xsjICBMTEywtLalUKWcJS7y8vOjduze+vr6yu1xmxpUrV7Czs5N6FtkAXyjc8X3gd1TrjG8ZM2YMa9asUbhj8Pf3p3ezZvi9J0bmLDDz00/5N33pBYXw8PCQlIwAoCuqDX4liUPl+x/1rqlJkyZcvHhRpw/oK1eu0KVLFy5dukTVqlXT2j09PVmzZg3//PMPb968yZXM6tWrM2TIEMaMGUOZMrooKysL77WReV9WGd4bbty4QYMGDahTpw4ODg507dqV9u3b07Rp0xwbGAB7e3tGjhzJ4MGDZal8mRNsbW0ZOFDNx8oXVSExpXgO7EJiYMzMzJg3T+kEPipKlCjBq8zcdfOBKKCEDpaNhBD89NNP0sYaKG9gQOX23EPadPnyZQ4fPqyDzt9ha2vLN998g5OTE8nJyZw/fx47Ozs6dOjA/v37c21gAO7cucOsWbOoWrUqc+bM0YitKyD3FBgZNW7cuCF1B84Dc+bM4c2bNyxbtkwWedmxZ88eDh8+LMlwAKh8rpUIRA8HtiKJ8NfT0+O3335TNI1OeipUqMCLxESUy2yVO0KBZ3FxzJ07F3d3d27dukWiAqluPD09pYXq9IHOsneTOVZoOJYsXbpUhwqo+OabbyhWrBhNmzbF3t6ey5cvZ/sZE7JfQY6OjubHH3+kXr16nDt3ThZdP1Y+Ou+y7JDTyOjr6+Pm5kbjxo1p0aIFdnZ2sshVJzY2lhkzZnD06FH++ecfihQpQvPmzaWec16ohtndUG0M55UbwEFU/t3pmDNnjk73oQwMDKhRqRL+9+5ho7NeM+dW0aLYNGlCcnIy7u7u+Pn5ERYWRpUqVbC2tqZOnTpp/37yySeaeedyyNatW6UN1oBu6nu9oyWSRH2nT5/m/v37VK5cWWcqhIWFcf/+/UwzNVujmnS1BOqgCk1IJQaVp783qjHYQTTiTwkNDaVVq1YsXrxYtpo9HxsFezLpeP78OdWrVycyMlLWteU9e/Ywbdo0rl69Knv8jLe3N46OjjRt2pS1a9emBSp6eXnRsWNHYmPVEomVADqguvu0+YrPUcVMBGm+NXLkSNavX6+F0LwxdtgwamzZwuQ8lliWg5rFi7P3wgVJIsikpCTu37+Pn58f/v7+af/6+/tTqlSptAqnqf82bNgwyzxfb968oUyZMtLs1kNRBXbpmk2oPBnf4urqyoQJE3TStZ+fHx06dJAW7EN1WX8JTANyM6xLjZX7BVXpdHWmTp3KL7/88j46BrzXezLv3a+VHl0bmZMnTzJ37lz+/fdf2WUPGzYMIQSbN2+WRV5KSgqrVq1i/vz5rFy5Mq18bXouXLhAt27dMq7nUh7V+r012ZdqTkG1DnQN1cg1gy2m/LwB//77b5YOHMjpfN789wc6lSlD2LNnOfodMjM+AQEBlCxZUsP4NGjQgOLFi3PhwgU+//zzd4JMgCnkz918Ackd2qNHD/bt26d4t6GhoTRv3pwnT6Tm4BNgA3lL3RcNzAZc0czo8d133zF/vnq1qHynwMhoi66NzIoVK7hz5w6rVq2SXXZMTAyNGjVi1qxZDBgwIE+y7t+/z6BBgzAwMMDNzS1Lh4Tbt2/Tp08frl69mvEJeqgyhFZEtdxijGoRNTXNQTgq77FM0oIZGhpSp04drl27lm8jvMTERCzKluXi69fkZ4rDaYaGMHYsi5Yvz5Oc5ORkQkNDuXXrFgEBAfj5+REQEEBQUBBmZmYUKVIE//Qu0p8CPfOmu9Y8BX59d1ipUiUePlQ2eV50dDSNGjUiODhY0t4PVRkPuZKkHgYGoJnlY/PmzQwdOlSmXmThvTYyBRv/6bh586YsGWMzolixYri7uzNlypRcp0xPj4eHB40bN6ZVq1Z4enpm6/FWo0YNLly4wMyZMzNe/xeo0kdfQbUM9jeqjJ+HUOWtCiFTA+Pg4JAWdb08jw/WvGBkZMSI0aNZqqMMCxkRBWwuVIhR2RQOywkGBgbUrFmTr776iu+++47t27fj6+tLdHQ0np6eEnddIO9pxPNCeVQpaN7y6NEjXik8o3R2dtYwMOOAHchnYEDlR3EGNMp4jxs3TmrkC8iSAiOTjuvXr8u26Z8Rn376KS4uLvTr1y/X7pXR0dGMGjWKWbNmcfjwYebOnZtluvX0GBsbM2/ePG7evMmgQYMoVChv/h7169dn9+7dnDp1inr16rFz505++eUXzp8/nye5eWHSt9/irq+v0yQH6VlkZES37t0VTRevr69P9erVNQcLunHkyxh9oNS7QyEEjx+rF72Qj0OHDrFjxw5J2yBgJcosy9QH/kFqvGJjYxk5cmSu6/N8rBQYmbckJycTGBiY68p9uWXy5MmYmppqxjhkgbe3N7a2tsTFxeHj44ONjXZ+VDVr1mTr1q3cvXuXhQsXYmNjk2NDZW5uzrBhwzh9+jTXrl2jV69eactjlpaWbNy4kf79+/P8+XOtdMsr5cuXZ9qsWYwtVkzWYnQ5wR/YaGjIghUrdNJfdHS0tCF/qgq8Q83maegnE2/evNHI7twQWI+y6/62wFq1tnPnzrF9+3YFe/1wKHBhfktwcDAVK1aUrf5FZujp6bFp0yZsbGxo1aoVbdq0yfTc1M39xYsXs3btWnr06JHpubnBwsKCadOmMW3aNF68eMGiRYvw9PSkVatWvH79moSEBExMTChfvjy1a9emfv361K2bdbbNrl270rt3bwYPHszff/+t8/0ZIQQYGHCrWDGWJyQwRab69NkRB/QrVoyfly/XWWaH924ErfanVir4eMeOHdy5826uWgjYgm5srBPwF5DepWH+/PkMGDAgxwO1j5UCI/MWOeNjssPU1JRNmzYxZMgQrl69StmymgEO9+/fx8nJCUNDQy5fvpyrbAO5oUyZMhQuXJgvvviCuXPn5knWwoULcXBwYPny5bLV+8gJ4eHhfP3110RERLDd3Z3+PXpQOyqKrgr3mwwMLFoUm65dGTZihMK9vUPDDT5/a7Vp9F+iRAlFupFkGQdGIm8O0OxYjmqrMnWhOzAwkMOHD9O1q9JX2v9vCkzwW27cuKHYpn9GdOzYkZ49ezIig4dT6uZ+69atOXbsmGIGJhW5MtGm1vvQ5f6Mp6cntra21KtXDy8vLxwcHNjv6cmw4sVRMsnJG2BokSJEN2jAhm3bFOxJE3NztZ3+rIocKY3Q7H/Hjh3s3r2ba9euERMTk+HHcsuNGzckHpKFABdZJOecqqhyj6Znm47/9v8fKTAyb7lx44ZixZYyY+HChdy7d48NGzYA7zb3Z8+ezZEjR3K1uZ8XAgMDZSvcpKv9mfj4eKZPn86IESPYvn07CxcuxNBQlSykcePG7D9+nGElS7JWgd/vGdCtWDFefv45+zw9MTIykr2PrNAYEDzVafdSnqEq8/CWEiVKkJiYyK5duxg0aBDlypXD0tKSNm3aMGrUKJYsWcKBAwcIDAzMVbod9dibDuRP7OlwteNDhw5plSPtY6JguewtulwuS8XY2Bh3d3c+//xzTExMmD17Ns2aNcPb2zvLiG85SUlJ4fbt29SsWVM2mV27dqVXr16K7c8EBAQwYMAAqlevjq+vb4bZcu3s7PjXx4e+3bpx/MEDVsXGIsd88ADgXKQIlp98wrkjR/LsqacNGo4f93SuQqZ9N2/enIULpXVKIyMj0wJNQ0NDuXz5clqp7dKlS2Ntba1RavuTTz7BwOCdb/SZM9JiRb2U+j7Z8DmqkLLUHAOvX7/Gx8eHZs2a5ZNG7z8FMxlU9V8iIyMVr32SEdWqVaNly5YMGjSIn3/+GTc3N50ZGIAHDx5QpkwZ2R0eFi5cSGRkJCtk9rhyc3OjZcuWDBkyBA8PjyzTsdeoUYPz16/z6cSJNCxalFmGhjzL9OysOQ90Kl6c6ZUr8/u+fSQJwW+//aaltLxhZ2cnLQb3EvgvX1SR5C4DMnRkKV26dFpW8oULF+Lu7o6Pjw+vXr3i9OnTTJo0idq1a3Pv3j3Wr19Ply5dKF68ONbW1nz11Ve4uLhw8eJFicxWCn6lrNDLoG9fHVdC/f9GwUyGd/sxuvaICgsLw8nJCWNjY7p27YqXlxe9eul2jKZUjXNDQ0N27dpFkyZNsLOzk6ZB0YKIiAiGDRvG48ePOX/+fI5nXsbGxvyw4P/aO/P4Gq73j7+zCYmIfY8lCElqC0lRW2i/lFhqlxDUVrVTqvxqaUUbSzWoWkoVsRRpq9qICmlRS7ZasgqxVxQRkUTW+f0xTWTuTWS7MzfReb9eeb3MuXPPOXPdO8+c5zzP51nBuEmT8Fy6lGb79/OmsTGDnj3DmfzzGLOAi8AxQ0P2mJuTZG7Oh8uWMXbcOExMTLC2tqZTp0507NiRNm3alOjaioqpqSlvv/02Pj4+LxqDQSdLtaLwCMlKxsDAoEgRkCYmJtjY2GBjY6O1eZ6SksLVq1e5evUqoaGhEg0+C9Brue1WiImf2URF5SHkp5KDupJB/iTMvDhw4AAdOnSgb9+++Pn5sWPHDn766Sd+/vlnRecRGRkpW/nZ7P0ZV1fXEu3P+Pv74+DgQOPGjTlz5kyxXHuNGjXi6x07uHH/Pr2//JIDPXtib2ZG9fLl6VqlCv0sLRlWuTL/s7SkjaUlFY2NGVW/PnfefZf1R45w9d49Jk6alLPv07RpU9avX8+wYcNkywt5Ge7u7tKGS0iKiCnCH0jEvTp06KAzt2uFChVo1aoVgwcPZtiwYZLXGqFfPSxNf4emfpqKFHUlgygn07ZtW0XGevr0KdOmTSMoKIhff/01Z9zKlSuza9cuxatpRkVFYWtrK1v/ffv2xd/fn7Fjx3L48OEirRbT09Px8PBg69atbN++nV69epV4PpaWlowfP57x48cTGhrKqFGjWP711zx9+pSUlBQqV65M9erVsbGxKdBtOXz4cHx9fZk9ezbffPNNiedWFFxcXLCxsXkhr5KBKAs09GXv0iF3EQ1bLuQKW5eoTSOuZPSJZoC2Ph4yyhLqSgblNv3Pnz+fs2kbGBioZdg6d+7M5MmTFa2mqavw5Zfh6enJ48ePi7Q/ExkZyeuvv86lS5e4dOmSTgyMJhEREbRq1YquXbvi4uLC0KFDeeuttwqU2s/NV199pZfsbyMjIxYuXChtDAMuKzB4GqK+Xa5VzGuvvcagQYNkGa60Setr/jLVZMyX85//dLKysggPD5c1RyYjIwNPT08GDRrE2rVrX7q5v3jxYkWraeoyfDk/svdnVq5cydmzZws8f+fOnXTp0oUxY8bg4+OTZ7KqLoiIiCjxtWcLn86ePVtLtFFuRo8erV0I72dEwVO5EBDT3nNFUBgYGLB+/XrZbraayaf6TAsCba+krmtEvWr8591lMTExVK9eXbYs5Zs3bzJq1CjKly9PYGAgdevWfen5hoaG7Nq1i/bt28taTRNEN0RCQgL169eXbYxsrKys2Lp1KyNHjiQ4ODhPw/HkyROmTJnClStXOHHihOzJsREREVr+/uLQsmXLnBIOf/75p2J5M3fu3CEzMxNDQ8MXK980YDeiamQtHQ+YhVg+UiOibOLEiXTv3l3Hg71AMxk59t+p6OsJOUbjWInfT1nmP7+SkTMJM3tz38XFBT8/vwINTDb169fnq6++ws3NTVZ/b1RUFM2aNVPMHeHi4sKgQYMYO3aslv7WyZMnadWqFTVr1iQoKEgR9YWIiAid7UdNnz4dKysrbReWTBw4cABHR0f69u2rXY00CVHU66oOB3wO7Ac0onVbt26t8zB1TapUqULNmi8E91PIszCrYvylcWxjY6OXeZQVXvmVzN9//83Jkyc5e+Esf4X9xf3790lJSsG0gikVzStiJBhRo2oNAgMDcXBwkCSAFZenT58ydepUQkJC8PX1LVaI6+DBg/H19WXGjBl8++23JZ5TXsgVvvwyPD096d69O15eXsyaNYuMjAyWL1/Oli1b+Oabb+jTp48i88jIyCA2NlanSajbt2/HwcGBrl270r9/f531m5uEhASmTZtGcHAwR48ezdnXu3btmjQJ8jngjVh/uAdaSslFIgZRtCte2mxlZcWRI0ekOTsy0b59e3799dec4xOAfOEq+ZMJBGi0OTo66mEmZYdX0sikpqbi7e2N1yYvoqOiMbE2IbFmolhgyRoohyg+lQY8AtNHprw55E0Mkgxwc3Njzow5NGnSpFhjnzt3jlGjRtGzZ08CAwMxMzMr9nV4eXnRvn179uzZU+JqmnmhxKa/Jtn7M46OjlhZWfHFF19gYWFBSEiItiaXjFy/fp169epRvrzuNHyrVKmSEyHYvn37Qq9cC8uff/6Ju7s7PXv2JCgoSPLdWrFiBWlpadp7eecRAwI6ImrWF/ZyBcSKqKfQ9g8hhoT7+fkp5ipydnaWGJn9wFRFRpZyHMhdzLxatWqKy1Gp6BBBEP4nFIGsrCxh69atQtVaVYWK9hUFRiKwGIGlhfybgWDS3USoYFlBGDJyiHDv3r1Cj52eni4sWbJEqF27tvDzzz8XZdov5dKlS0KtWrWE69ev66zPbIYNGybs3btX5/0WhtmzZwuGhoaCh4eHkJWVpfj4P/74o9CvXz9Z+v7kk0+Ebt26CRkZGTrpLy0tTViyZIlQp06dAr9ba9euFUxMTAREMyH9M0agBQJ9EZiIwIJc3/3oMVD4AAAgAElEQVTF4vefkQh0RKBqHu//969Vq1bC3bt3dXJtheXatWuCgYFBzhwMQLgMgqDw30CNz2LChAmKfg758D/l786F55XZk7l58yYOHRyY/flsHg94zLOhz6A5RbvCqpDePZ2U91M4/Pdhmtk149sdBbuqbty4gbOzM3/++SchISG4uLgU+zo0ya6mOXz4cJ0L8eljJZOQkICbmxt+fn64uroWKtpMDnS5H6PJokWLMDExYcWKFSXuKyIigg4dOnD+/PlCfbdmzZpFQEBA3ivxDCAS0fW1FfgcWAosBz5BLC+5FziL9HH9X4yMjOjRowflypWjevXqJbiqomNtbU2XLl1yjgXEaSvJX8BPGm1aSbEqWrwSRubEiRO0dGjJlapXeDbqmahgVxJMIa17GkmuSUz/v+m4j3cnI58iWAcOHKBjx464uLhw9OhRWZIoZ8+eTa1atYpUTbMg5BDGLIhz587Rrl07KlasSGBgINu3b+fRo0esW7dOsTlkI6eRMTQ0ZPfu3WzatImTJ08Wqw9BENiyZUuOrp2vr2+h3YmdOnXiypUrLFu2rHBRk4Wo7+bs7ExQUBDHjx+nXr16Ja49VBzmzp0rOf4e7f0RuRCA6UhSg3j99dclhk+lDCIUwl32448/CmZVzATGFcEtVpS/hQjmdubC//r+T0hLS8sZNyEhQXBzcxPs7OyEv/76S8aVsEhcXJxQr149wd/fXyf9xcbGCg0aNNBJXwXxMlfizZs3hVq1agl//vmnInPJxtHRUTh79qysY/j6+gpWVlbCw4cPi/S+uLg4wcXFRXB0dBSioqJKNIfHjx8LHh4ego2NTb7ur/z+ypcvLwwfPlw4deqUVp8NGzYUfvvttxLNrahkZWUJ7dq1k8yxEQiPFXCTfZ7H5+Pr66vo9b8E1V0mFwEBAbiOcyV5WLJ8xSXKQdLgJE7dOsWI0SMQBIFz587h4OCAubk5gYGBimz85a6mqYs6LUq5ym7evImzszNnzpwhODhYy93ToEGDnPozjx/n4aORAUEQFLn+3r17M2zYMMaMGVPokslHjx6lXbt22Nvbc+bMmRKHx1apUoWFCxcSFRVFSEgIq1evxsbGhlq1akmUt42Njalbty7du3dn+vTp+Pj4cP/+ffbt20fnzp21+vzuu+8YM2YMcXHKFbMxMDDgq6++kiR93gCGIcbwyMUvwP9ptA0cOJDevXvLOOqrQ+nSa9DgXwvtl9drd+7cwb6NPU/7PVVGkjUdzPea07NVT4IuBLFt2za9fMnmzJnDjRs3pAq8xcDLy4tr167J6qo6cOAAM2bMYNasWcybN++lGeGzZs3i2rVrRdY3Kw537tzBycmJe/fuFXxyCUlPT6dr1664ubkxbdq0fM9LSUlhwYIFHD58OEfxQC5cXFyYNGlSTpj18+fPixVlt2jRIkJDQ/nll18Uy7WKioqia9euPHjwQNI+EHE7SXexgiJ+wGDE1KNsatSoQWhoqOwVa4tALwMDg2P6nkR+lMmVjCAIDB45mOR2ycppfptA0oAkjp04xq5du/T2FPPZZ59JqmnmRVZWFqGhoaxduxZ3d3ecnJywtramatWq1KhRgyZNmrBy5UqCg4PZunUrMTF5xKiWgKdPn+Lu7s6SJUvw9fXlww8/LFByZNWqVYrtz8i5H6OJiYkJ3t7efPrpp5LywbkJDAykTZs2/P3334SGhsru5w8LC8Pe3j7nuLhh3MuWLSMhIUGxPbWdO3fSuXNnPvzwQ63SET8Cb6LbsjpfAf2QGhgjIyN27txZmgxMqadMrmR2797N+x+/T6J7ouJm0iDUgNfuvMbFwIt6E+6LiYmhU6dO+Pv7SzLj7969y9dff82uXbu4detWkfps3bo1Y8eOZfz48SXSYrpw4QJubm507NiRr7/+ukgF2G7duoWTkxM//PCDrJUG169fT1RUFBs2bJBtDE0OHDjAokWLCA4Ozvl8MzMzWb16NWvWrOHLL7+UJRdKk6SkJGrWrMnTp091knh8+/ZtnJycJIriuiYxMZEpU6YQGhrKvn37aNmyJY8ePaJLly5ERERIzq0OrALGUPyb2w1gBqIMnCabN29m0qRJxexZNtSVjC7JyMhg3sJ5JPZQ3sAACG0Ebjy8oXjdl9w0bdqUzz77DFdXV1JSUvjnn3+YMmUKTZo0wcPDo8gGBsSaOrNnz6Zhw4YsX76c58+fF+n9mZmZeHp6MnDgQFavXl2sCp9K7c8ouZLJZujQoXTt2pUZM2YAL/aqfvvtN0JCQhQxMADh4eFapY1LgpWVFevXr2f48OGySCAFBQXh4OCAoaEhgYGBOQ9V1apV4/jx41ryQw+BcYADovusKN/iSMQET1u0DYyhoSEbNmwojQam1FPmVjL79+9n4uKJJLrqsYZDOLSKbcXFCxf1NwfIuRkHBQXp/KbctGlTtm/fXijXza1btxg9ejTGxsY6cSXMmjWL69ev89NPP8myWnR2dubjjz/Os1SwnCQnJ+Po6EiPHj04ePBgofaqdM2OHTvw9/dn165dOu13/PjxGBgY6KyujiAIrFu3Dg8PDzZs2JCvkOmTJ09wc3OTqAHkpjLQC+gG2AFWgCWi8XkMRAOBiKV48nZmijWIduzYwcCBA0tySXKirmR0ybpN60hspeciQS1El5U+y66mpqZiaGjIsWPH8jQw5sAgxPy6E4jKII+BfxDFBY8CK4C3yFtbKCYmhh49euDp6fnSeRw6dAhHR8ecp3Jd+KpXrVrFw4cPWb9+fYn7ygt9rGQA0tLSaNy4MZs2beLrr78u1F6VrgkPD5fsx+iKdevWcebMGfbs2VPwyQXw4MED+vbty759+zh//vxLlbIrV67MkSNHWLNmTZ4r5yeIEjTvA92BJogutfqIZZSHAJ7kb2C6du1KSEhIaTYwpZ4yZWQSEhIIvhAsZvLrE0PItM3E54eSRXgVl8TERPr27ZvnD7opsAW4DxxCTCBzRvxxVUH8gdkgPt19hPgEdwcxe1ozhzsjI4MFCxYwdepUrSJqKSkpzJw5k0WLFuHr68vSpUt1dsPM1jdbsWKFzhUBnjx5QkpKimKVR7Px9/enVatW1KtXj9WrV7NkyZIiuyR1geamv67IrqszZ84cYmNji93P8ePHadeuHU5OTpw+fZrGjTWLHWtjYGDAnDlzCAsLw9XVVSeuQGtra3bu3ElAQADW1tYl7u+/TJkyMqdOnaJ8o/Jgou+ZQGrDVH46qikyIT/Pnz9nwIAB+Pv7S9rNgTVABDARqJjHe/OjFrAIcbUzA+0vxcaNG3P2EkD0k7du3Zr4+Pgcn7muadCgQU79GV26AsPDwxVdxaSmprJgwQLc3d3ZtGkTmzdvZubMmdjZ2fHRRx8pNo9s5DIyIEogLViwoFgSSBkZGSxdupQJEybg7e3N0qVLi2wsGjZsiLe3NxEREcyePbvIgquGhoa89dZbeHt7ExUVxejRo0tdVc6ySKn+BDX3ZJYuW8rygOVkds/U46z+JQkqbq1IYryyrjtXV1f27t0rabMFDiL6nHXBMcAV0Ez5XLVqFSYmJnh4eODl5cXIkSN1NGL+zJw5k9jYWJ3tz2zbto3Tp0/LVj4hN+Hh4bi5uWFtbc2WLVskhdqePHmCg4MDa9euZcCAAbLPBcQidbVr1+bp06eyuekEQWDgwIG89tpreHh4FOo9N27cwNXVlVq1arFt2zaqVq2qk7lkZmYSEhJCQEAAW7duJS0tDSMjIxISEqhQoQIWFhY0bNgQW1tbOnbsSPfu3alRo4ZOxlaYUr0nU6ak/kPDQsmsUgoMDIA5pGek8/jxY539KApi8+bNWgbGCfAFdDmD/yEqvP8P0ZWWzfz587G3t+f8+fOFcmPogtWrV9OtWzc2bNjA9OnTS9xfZGSk7CsZQRDYunUrixcv5pNPPskzIqly5crs27eP/v3707ZtWxo0aCDrnOBFZJmc+0DZm/8ODg44Ozvz5ptvvvT87ITdBQsWMHPmTJ3OxcjICEdHRxwdHfHz82PevHn06tVLp2OoFEyZMjJxD+JA/t9ioTGtZMo///yjiJG5ffs2H3zwgaTtNcQN/CoyjGeLuITswgtBXkEQyMzMVDQRLXt/xsnJCUdHRzp06FDge54/f050dDTXr1/n4cOHpKenY2RkRLVq1Th37pxOjFV+xMXF8e677/Lo0SNOnz5N06ZN8z3XycmJmTNnMmrUKE6ePKmzsOL8kNNVlpsaNWqwe/duXF1dCQkJoVYt7TrQiYmJTJ06laCgII4ePSq7NJPSYrAqLyhTezJJSUmlYj8mGwNTA549e6bIWPPmzZOMVQn4AXkMTDZ2wE6kPtWIiAi8vLxkHFWb7P2ZESNG5Ls/c/36dT799FM6d+5MpUqVaN26Ne+88w4TJ07k/fffZ/LkyQwZMoTTp08zcuRIHBwcmD9/Pn/9pVlMt/j4+PjQunVrWrZsyalTp15qYLL58MMPKV++vE4VtvNDKSMD0K1bN9zd3Rk3bpyWbltwcDDt2rUDUET7LzU1lbi4OEVWiyralCkjY2pqWihZcqUQMgSdVlbMj4iICA4cOCBpW4MYSSY3fQFNZ8+qVatITk5WYPQX9OvXjwEDBjB27FjJTSsgIIBevXrRtGlTFi9ezJkzZwrcdM6W3Vm1ahVt27bF0dERHx8frQi6wpKYmMjkyZP54IMPOHToEJ9//jkmJoV7GsouC/DNN99w4sSJYo1fWJQ0MgCffvopT548yQlFFwQBLy8v3n77bT755JNiJewWh2vXrtGwYUOMjcuU4+aVoUwZmapVqhYthVdmMp5lKPIjWbt2reQG2B54V/ZRX7ACMaktm3/++YedO3cqOAOR1atX888//7Bhwwbu3LnD0KFDcXZ25tixY4VWOc6LoKAgBg8ejKOjIxcuXCjSe8+fP4+DgwMpKSlcunSJN954o8jj16xZk127djFu3DgePnxY5PcXFqWNjLGxMbt378bDw4MTJ07Qr18/9u7dy7lz5xgxYoRi87h69arqKtMjZcrItGzREoPHpSQgLg3SktKwtbXF2tqa3r17M2PGDDZu3Mjx48e5detWiW582aSkpPD9999L2hai7H9cVUBTP1gfRiZ7f+bjjz/GxsaGgwcP5n9yFaAZor6II2J9+xaIyUD5fIVCQkJ44403+Oyzzwpc1WRkZODp6ck777zDqlWr2Llzp0Q6v6g4OzszcuRI3N3ddfK90eTp06fEx8fTsKFcNTHyxtramvfee49evXphZWXFqVOnFM87UY2MfilT68e2rdtS8URFEtFzxj/AfbBuYU3UxSju3btHeHg4169fJywsjB9++IHr169z79496tati52dHfb29lhbW2NtbU3Lli3z3AzNi+PHj5OQkJBzXAfoL9MlvYyJiCua7FvvuXPncq5PKbKlRnJ/HhIaAK0Rs01fpvGZAlwDLgFXkZQ7zMjIYOHChQQGBrJnz5483aGxsbGMHj0aMzMzgoKCdPYZLF++nG7duuHl5cWsWbN00mc22flBSuZ9ZGRksHz5crZu3UqPHj3IyMgotBtRl1y9epU2bdooPq6KSJkyMt26dSNjeoZ4U9DzgsbohhF93uoDQN26dfO80aSmphITE5NjgIKDg9m5cyeXLl3C2NgYa2trLQNkZ2dHhQoVcvoICAiQ9DkEkDcGKW8aAK8jln8H8YZ/8uRJ3NzcFBlfEAQmTJjA9u3btV9sBPREFKYqDBUQQ/NeQ1RUPAmESU/54Ycf6NOnD7/88ovk/2Pnzp3MnTuXDz74QOe6Y8bGxuzbtw9HR0c6duzI66+/rrO+lXaV3bx5E1dXV6pXr87ly5cpX7487du3Z+/evYrkV+Xm6tWrDB06VNExVV5QpoyMlZUVtWvVJvZWrHyVMAuJWYwZ7yx556XnmJqaYm9vn+eP+86dO0RHRxMdHU1UVBS///470dHR3L17lwYNGtC8eXOaN2+upfasrKSjlJ68MDIgRgYpZWTmzZunbWBMgN6ILrHiPnRUB4YCbRCLkuQqHnLy5ElGjBiBj48P8fHxTJw4kZiYmByJGDmwsrLiq6++YtSoUQQHB1OpUiWd9KukkTl48CDTp09nwYIFzJgxI2f19P333/PWW2/RoUMHxfKsQHWX6ZsyZWQApkyYwtLvl5LcUNnoJgn3oHxm+RIVl6pfvz7169fXUgJOS0vLEd+Mjo7m9u3bktf1uejXHDs6OlqRcffs2cOaNWukjRaAG1A05ZD8aQZMBryBXBWFDx8+zNixYwkICGDQoEHs27dPjHKUkcGDB3Ps2DEmTpzI/v37ddJnWFgYb731lk76yo/s6p7Hjh3D19dXy0XVsmVL5s+fz4gRIzh9+rQirrOUlBQePXpE/fr1ZR9LJW/K1MY/wKSJkzC4aiDKq+oJ8/PmfPTBR7L4t8uVK4ednR3vvPMOc+fOlYgoGqPfXNQmGsd37+qyDmHe3Lx5k/fee0/aaIFYNERXBiabSsBY7X53797N/Pnz8fLykt3AZOPl5UVUVBQ7duzQSX9yr2TCwsJwcnLK0bPLbw9k9uzZ1KpVi2XLlsk2l9zExMTQqFEj2RNdVfKnzK1kLC0tmT51OuuOriO5nx5WM7fA9L4pkydNln0ozURPC/T7VGCpcSxHkSpNZs6cKR3HBHEFI5fIQoV/+98CueNLtm7dynvvvafYxnX58uXx9vbG2dmZ119/vUApnGfPnhEaGkpkZCR3794lOTmZjIwMKlasSKVKlXj8+LEsOV25674UprqngYEB27Zto23btjg7O9OzZ0+dzyk3qqtM/5Q5IwPw8cKP2b5jO8kxycpkJGaTAebHzNnotREzMzPZh5MjlLUkaBq44iYvFpbTp0/z008aSte90f0KRhMLxGI8371ounz5Mt999x0TJkyQefAX2Nvbs3z5coYNG8aFCxckAQgA9+/fZ8+ePRw8eJDAwEAyMl6eqVy7dm3s7e0ZMGAAo0ePpnnzktXMePjwIePGjSMuLo6zZ8/SpInmWjdvsmVn3N3dCQkJoXp1zSITukOVk9E/Zc5dBmBmZsb33t9j9osZSkYzm/5mirOTM8OHD1dkPM28i2dIom0VRzNwWFeb0vmxYsUKaUNDxE1+JWgMaJSs9/T0JDNTWYHWSZMm0apVK+bPn5/TFh0dzbhx42jQoAFz587l7NmzBRoYEB9arly5goeHB7a2tvTp04c///yzWPM6efIkbdu2xdramjNnzhTawGTTvXt3WfOCslFXMvqnTBoZEMOZF324CPPvzRVRATA+Z0zd+Lp4f+st/2D/YmJiIpGHT0eqiqw0mqWo0tLS8PPz48aNGzpf1dy8eRM/Pz9pY0+UDV3vgWStHxMTI7v0S15s2rSJY8eOsX//fj766CNatmzJjh07ilyzJTeCIODr60vnzp0ZNWoUcXFxBb+JF3Vf3Nzc2Lp1K15eXsV2IXp4eBAfH8+GDRuK9f7CoBoZ/VMm3WXZLPxwIffu3WPHvh0kDU0SK3fJgPE5Y6pdqcYfZ/+Q/eldk+bNm0ueNi9R+HQQXXNJ49jU1JQ1a9YQHR3NgwcPsLGxyQm9btGiBc2bN8fGxgYLi5dlRubNnj17pIarPspHPVgg5tLk0tD09vaWPUpLaxoWFixfvhxXV9eXrljseJGLao74405CfDi4hFhiWHMdJggC3t7eHD9+nN27d79Umv/WrVu4ublRoUIFQkJCilwUTBNjY2O8vb3p0KEDXbp0kSVhUjUy+qdMGxmADV4bsLS0xGuzF0kDk0CXCejpUOF4Beok1OGPc38oKnGfjYODg8TInEQUrdQHms/ws2bNYty4cYC4qrl69WpO4unvv//Oxo0bcxJPcyedZv+7UaNG+SYzHjumUYNJX7HbrZEYmWydNCUz50+ePMmECRPyNDAtECOvh1HwVz8BMRXoG+C0xmtxcXH07t2bjRs35ln/xsfHhylTpjBlyhQWL16ssyRUa2trNmzYwLBhwwgJCSmRNI8mSUlJPHnyRC+/W5UXlBIhsLzRrIz5Mg4dOsTYiWNJbZNKeqf0kpcEuCFu8vfq3Ivvtn2n0y9/UTh06BBDhgzJOW4IXEd5P+cDoB5SEezY2FgaNWpU4Hvj4+MJCwuTSO+Eh4fnKbtjZ2eHra0t9evXl4RvMxvt8DYlyAI8gdQXTVFRUdjY2Cgy/LFjxxgwYID0s0Bc1K1CVIAoznfhD8SPNCSP19auXZsja5Od++Ln58fevXtp27ZtHu8oOWPHjqVcuXJs2bJFZ31evHiRUaNGcfnyZZ31WUop1ZUxXxkjA3Dv3j3em/4eJ/44QYpjClltsqAoaQ0CcAsqXqiIWYIZWzZsUaw0bn4kJiZSu3ZtibS+H2LVSiX5HMhdkb5NmzaEhoaWqM+kpKScpNPIyEgiIyOJjo4mIiJCelO1RLwj6otdiFpn/+Lj48M777xc7UEXBAUF4ezsrBXKPgbYAJT0sScTUY9uGVI3moGBAd7e3rRu3ZoRI0bQpk0bNm7cKOuDVlJSEu3atWPJkiU6k505ePAge/bswcfHRyf9lWJKtZEp8+6y3NStW5fDhw4TGhrKx59+jP96f4ybGfOs/jPRp18N7St+CsSByS0TTKNNqWJRhUUfLGLcuHGUK1dO+YvQwMLCgnfeeQdv7xcBBx4oa2SeAWs12tzd3Uvcr7m5OQ4ODjg4SEPGfv75Z/r3zyUDKl+Ea+GojsTIxMTEyD5kfHw8Q4YMkRgYA2A1MEdHYxgBHyMG7A0Dsh9jBEFg7NixWFhY8OWXXzJq1CgdjZg/5ubm7Nmzh7fffpuOHTsWaoVcEOp+TOnglTIy2bRt25YjPkeIj4/n8OHD/Hz0Z84fO0/cnTiMyhlhYmZCZnom6UnpmFmYYWNrg8tbLrh86aJ1wysNzJ07lz179uSEev4BHECU3FKCZYjusmwsLS1z9mLk4MkTDTkH/Xgq8x1fa34yMG3aNG7evClpW4d2yQVd0Bc4ArzNC69gWloaNWrUULTuS3a10uHDh+tEdubq1at07NhRR7NTKS5lNoS5MFSpUoUxY8ZwcO9BbsfcJvlZMndv3OWvP/8i5koM8Y/iefLPEy78cYHFHy8ulQYGRKPZp08fSds04J4CY58CvtRomzVrFpUrV87rdJ2QkpIibdD3o5DGglbuktv+/v7s2bNH0jYHeQxMNs6IIge5iYyMZN26dTKOqs2cOXOoWbOmTspRqyuZ0sErbWQ0MTY2pmrVqlhbW1OnTh1FqlrqirVr10p0sx4gbvrKKaxzCxiBdLO/YcOGksRAOdCSP1E2/1EbjXQUudUeFi5cKDluh7gnJjfuwGiNNg8PD0Xkg7IxMDBg+/btbN++vcQ5SWq2f+lA38+IKoWkWbNmLF26lI8+erH9fhZR/cQH0PVt7w7QC+lqydDQkC1btsh+k7W01AgjS8r7PMXQGF9rfjrkxIkTkhLQhsAmSh4sWVjWILrO4v89fvz4MVu2bGHu3LkKzUCUndm+fTtjx44tUHYmPT2dsLAwoqOjiYuLywmQqVixIk+ePCl10kz/RV6p6LJXnaysLFxcXPD19ZW0d0Dco9GVmHkgMBi4rdG+cOFCPDw8dDRK/ly5coWWLVu+aKgCzJR92PzZA+SqamBnZ0eXLl2wtbXFzs6O5s2b06CBbjJFXV1d2bt3b87xIOCQTnouPJ8AS3Id29raEh4ervAsYP78+YSFhXHkyBFJXlJiYiIHDx7km13fEHIhhHJVy0ENSK2QSrphOsaGxhilGFHuaTnS7qdhUdEClz4uTBg74VXdoynV0WWqkSljPH36FGdnZ0JCpBkO1REjwNwo/n9qKmL00idAmsZrI0aMwNvbW6eVIPPj+fPnVKpUSSqb8gH6CQAQEBNScvklv/vuO54/f66V82NtbY29vb0k78fe3r7Q6sfJycnUqFFDEq7+O9BVpxdUMI8QEztzfwdCQ0MVL2Gcnp5O165dcXNzY9q0aTx+/JgVnivYtHkTBg0NeGb7TNSYK+jj/QeMoo2oEFaB+tXrs3L5Svr166fEJSiFamSKi2pk8ubBgwf06dOH4OBgrdc6IOaz9KXwZZpTEGt1fYaY6KnJkCFD8Pb2VjSku1OnTpw9m6sO50D0k/V/BzFF/l+qVavGgwcPtIxtQkICMTExEsMTFhbG9evX80w4bdOmjVbeyfHjxyWSNY0Q/z/08SMdCOTWv165ciXz5s1TfB7Xrl2jY8eOzJgxg1VfriKtWRrPOzyH4sSdCEAUVDxdkbY2bdm5badOQqVLAaqRKS6qkcmfxMREXF1dOXLkSJ6v10G8UXRHVEZpzIsgqSTgKqJaym+IPvinefRhYGDA7NmzWbVqlSIrmNwsXrxYGmFkjbgzrTS/Ai+2SBg2bFiRqlWmp6dz+/ZtieEJDw8nMjKSSpUqSQxPcHAwu3btynnvJGCz7q6kSHwNvJ/ruH///tplFxQgOTmZ3n16ExwdTHL/ZPGLXVIywei8EWZBZuz+drc0J6tsohqZ4qIamZcjCAJffPEFH3/8sXbYbx6UQwzUKkywVq1atdi8ebPeFA+io6O1651MRjc3mcKSDHghkZT58ccfdfKZZGZmEhsbS0REBBEREURGRnL48GEePXqUc852xAKg+uAi0oVjs2bNFCu3nU18fDw9evUgKiuKlN4puo9+uAtmPmas/HQlU6dM1XHniqIameKiGpnCERsbywcffMAPP/xQ4mgaU1NTJk+ezLJly2TNhSkMXbt25dSpUy8abICXF17ULX6IIXz/UrduXWJjY2VzGzo5OREYGJhzfAboJMtIBZOCqOSc/W0yNjYmLS1NMWHQpKQkOnbrSHT5aFLfTJXvThUP5vvMWbt8LRMnTJRpENkp1UbmP5Un86rSuHFjDh06xMWLF5kwYUKxQmzr1avHhx9+yLVr1/Dy8tK7gQEk4dqAGOGlVJDT38B5aa63cf8AAAm4SURBVNO8efNk3ZdKSJCWhdOnmk4FpJUzMjIySEpSJpZcEAQGDR9EjFGMvAYGoAokDU9i1oez8Pf3l3Gg/y7qSuYV5Pnz5wQEBHDy5ElCQ0OJiooiLi6O1FTR72NmZka9evVo0aIFjo6O9OzZkw4dOii+71IYnJ2dCQgIeNFQAXGzooqMgz5HTH9//KLJ2tqaK1euaJVA1iUNGzbk1q1bOcc3Ub6ETm5qAv/kOn7w4AE1atSQfdwv1n7B4vWLSRqVVPjolZISC5V/rUzUlShq1qyp0KA6o1SvZFQj8x8iLS0NIyMjjIyU+uWWnPDwcBwcHHIMJCAKnb6LPEXqMoDdwA1p85EjR+jbV95KPra2tkRGRuYcRyDWi9EX5kgVJZKSkmRPxL19+zYtWrYgeUwyVJV1KC3K+Zejf/3+HNhzQNmBS06pNjKl79FVRTbKlStXpgwMiImPK1eulDY+Ar4FdK1T+Zw8Dcz7778vu4EBUWsvN/dlHzF/EpAamPLly8tuYABmz59Nevt0xQ0MQFqXNH499itBQUHKD/4KoxoZlVLP9OnTteXmHyK6tHQV8HTv3/5uSJs7d+7MmjVrdDTIy9HU2YpQZNS8idQ4NjAwwN3dHU9PT37++Wfu39e9CYyNjeXXX38l3Sm94JPloBw8f/05C5cuLPhclUKjapeplHqyRRPj4+P55ZdfXryQjCj58hrQk+Lt0yQhSk1fQKyCmYuWLVty+PDhQmfslxR7e3vJ8WlgiiIja3NK47hTp0507tyZsLAwjh8/zqVLl0hPT89JMrWzs6Ndu3a0bt0aCwuLYo255ZstZLUqYqFBHZPVNotT605x//59ateurb+JvEKoRkalTGBiYoKPjw/jxo3TksHnCmLUmR0vMk9f9s3OQhRmuwxcQltDB3EFc/jwYS0Xlpx06dJFcnwMUQBaKXHM3PyicTx48GAmTZokacsuqx0cHEx4eDgHDhzg4sWLWFhYSOR17OzscHBwKNDdtn3ndlL7pb70HNkxAcMWhuzfv5+ZM/UpmPfqoG78q5QpBEFg9erVLFq0SKptlhsTRPGt6oAFosHJRFy1PALuIu6/5MO0adNYvXq1pLSCEqSnp1OnTh1JQuYPiMoNSnIDaMKLhZ2BgQFXr16lSZMmhXr/vXv3ctQNsg1QVJQYtZXb8Njb2/Paa69hamrKtWvXaOXUiuQZchavKCTh0O1JNwL8AvQ9k8JSqjf+VSOjUiYJDg5mypQpkuTFktK0aVPWr19P7969ddZnUZk6dSobN27MOe6AJB9UmTkAG3Mdd+rUiTNnzpSoz/T0dKKioggLC+Py5cuEhYVx5coV7t69S4sWLahXrx6///07if2Uq12TL0lgtsmMpKf6rjFRaFQjU1xUI6PyMrKysti3bx8rVqwgLCys2P1YWVkxb948Jk6cqNj+S35cvHiRtm3bSpQbfgSUEveJBlohUdJhx44djBkzRpbxkpOTiYiIYM0Xa9h/fz9ZXbMKfpMClP+iPDev3iwrOTOl2sio0WUqZRZDQ0NcXV25fPkyp06dYvLkyYVW1a1VqxZubm4cOXKE69evM336dL0bGIDWrVtrhUvPRPfR2nmRiSgPl9vANG7cGDc3N9nGNDMzo127djzPek6WZekwMACm1U0libEqxUfd+Fcp8xgYGNC5c2c6d+4MwK1bt3L2AZ48eUJKSgqmpqZYWlrmKB43a9ZMMR2uovL555/j5+eXs+d0ExiLWAFVzqfCpUCARpunpyfGxvLfJhKeJoj7Z6UEA1MDRctOv8qoRkbllaNBgwY0aNBAr3srJcHe3p45c+bg6emZ0/YTMB3YgDw+7q2AZs3Tt99+m6FDh8owmjaCIJQ6571aulk3qO4yFZVSyCeffIKTk5OkbSMwnjwjrkvESkQ3We5bau3atfn22291PFL+VLasLPXT6RkhVaBSpUr6nsYrgWpkVFRKIeXKlePgwYNYWVlJ2r8FugAxOhjjETAU+BCpgTEzM+PQoUPUqlVLB6MUDpvGNhgmlJ7bUerDVBo00Kc86atD6flfVVFRkWBlZcXRo0e1bvYXgJbA/yERii40zxHdbs2BgxqvmZqa8v3339Opk7KVbOxt7TFPkEPxtBgkgaFgWFYiy0o9qpFRUSnF2NnZcebMGZo2bSppf464h9IQUZD6GFJBS00yEPNtPkAURJiOuJLJTeXKlTl69KgiYqCadOrUiczYwtRsVYCb0L5De33P4pVB3fhXUSnlNGnShMDAQMaPH4+Pj4/ktWeILrRvEctr2yIakWqIpVgeI0anRQIvi5Vq3749+/fvx9raWoYrKJgmTZpQ0awiyXHJoJyXLk/MbpgxyHWQfifxCqGuZFRUygCVK1fm0KFDHD58WGufJps04CJi8uY2RFHpg0Ag+RsYMzMzlixZwpkzZ/RmYLJ51/1dTK/oUR0TIB2yIrIYNmyYfufxCqEaGRWVMkS/fv3EDPk1a6hfv36x+7G0tGT+/PnExsaydOlSWctKF5ZJEyZheNFQr1FmhiGGdOnahTp16uhvEq8YpSwyXYoqK6Oikj+ZmZn4+/tz6NAhTp48ydWrV196fp06dXB2dqZ///70799f1lLSxWXIyCH89OAnMrpmKD94GphtNuMPvz9o166d8uMXn1ItK6MaGRWVV4T4+HiioqK4ffs2iYmJZGRkUKVKFWrUqEGLFi3KRH0UtfxysVCNTHFRjYyKyn+PL9Z+weL1i0kalSRGLyhBLFT+tTJRV6LKYuhyqTYy6p6MiopKqWL2rNm8YfcGFfwqSLNE5eIxmB0249C+Q2XRwJR6VCOjoqJSqjAwMMBnvw9NM5ti6m8qr6GJB7N9Zqz1XEuPHj1kHOi/i2pkVFRUSh3m5ub8cfwP7NLtqPBzBbEOta65A2a7zVi5dCWTJk4q+HyVYqEaGRUVlVJJ5cqVOXPyDC4tXDDfYQ73dNRxJhifMcbCx4L9O/YzdcpUHXWskheqkVFRUSm1VKhQge+9v2fT55uw9LGkvG/54ldwE4AIqLi9Im8Ib3Al9AouLi66nK5KHqhGRkVFpdQzatQoYqNjmdFjBuY7zLHwsYBwIKUQb34ARqeNqLi1IraRtuzbvI+A3wJUlWWFUEOYVVRUyhSJiYkcOnSIbbu3EXQuiHJVy0F1SDVLJc0gDWNDY4xTjTFNNCX1XiqVLCrRr28/xo8ZT4cOHfQ9fTko1SHMqpFRUVEps6SnpxMWFkZ0dDT3798nJUVc2lSrVo2GDRtiZ2dHvXr19DxL2VGNTHFRjYyKiopKgZRqI6PuyaioqKioyIZqZFRUVFRUZOP/Afp4A8Ot0rp4AAAAAElFTkSuQmCC", - "text/plain": [ - "Cairo.CairoSurfaceBase{UInt32}(Ptr{Nothing} @0x00000002bf2707e0, 409.0, 1174.0)" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "readpng(\"traj/78.png\") # We have updated all the agents, 14/25 will be alive next timestep" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "id": "82132d0b", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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iYjI1KlTpVSpUppcVycvvfSS7N69WzN/TuLj46VevXrSqlUrKRQYKDP1etUijBl6vYTkySNHjhx55LieKdEQycjzh4WFSc+ePcXhcChic/r06dK3b19FbImInDt3TkqVKiX//e9/FbPp5ODBg1KtWjVFbR4+fFjy588va9euVdSuk8jISImNjVXFtojIiBEjpHz58nL58mVF7LVq1UoWLlz4xHbGjBkjFStWlFu3bikwquzp0aOHfPfdd6r6cHLhwgUpW7bsQx+GTp06JdFhYVLEYJAv9Hq5loubVzpILEgzX18pkjevzJk9O8v33Hldb9++rfbpiohItWrV5ODBg5r4cnLt2jWpVq2avPnmm2K32+XMmTNSplAh6eftLVYFxcIK0tfbW8oWLixnz57N0dieifTU3RgMBtauXcvJkyd55513FLGpZPrkxIkT1K9fn7fffpt3331XEZt3k56ernizwcqVK/PDDz/Qo0cPfvrpJ0Vtg3rpKRHh7bffZt26dcTFxT2wPPBxSE1NVWSjnY8++ohmzZoRFRVFcnKyAiN7MFql/06cOEG9evXo3bs348ePz/a40qVL8+P27az++WeOvPoqoT4+1AsIYLibG8uA/cCfZHSHOAZsAb4GOvj6EuLjwycVKtDyv//l9F9/EdOtW5a1GB999BGRkZFERUVhMqnVSuEftE5PXbhwgfr16xMeHs7XX3+NXq+nVKlS7Dt2jKSmTalsNLJRAT/rgcpGI6bISPYdO0bJkiVz9kF19VI9EhISpHr16vLxxx/n6nNWq1V++ukn+d///id9+veR1q+3lio1qsgLL74g/xn4H5k2bZrs3r07V1VOTn777TcpUKCAzJkzJ9efzSm7du2Sl19+WRXbO3fulODgYPn5558VtVu7dm3Fw/v09HSJiYmRBg0aSGJioqK2GzZsKNu2bVPElsPhkL59+0rDhg1Vq/5r06aNLF++XBXbTvbt2ycFChR4rIjGYrHIli1b5OMPP5S2TZpItZIl5TmjUUrkyyflCxeWRi+8IG906yazZ8+Wixcv5simw+GQ3r17yyuvvPLERSGPolSpUrlOez4ux44dkyJFisjEiROzPSY2NlbKFS4sdfz8ZDlISi4iixSQ5SAv+/lJaJEisn79+lyP8ZkVDRGRmzdvSoUKFWTs/ZHKNQAAIABJREFU2LEPPS49PV1W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", - "text/plain": [ - "Cairo.CairoSurfaceBase{UInt32}(Ptr{Nothing} @0x00000002bf271440, 397.0, 1266.0)" - ] - }, - "execution_count": 33, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "readpng(\"traj/179.png\") # final result. Exit b/c for loop counter is done." - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Julia 1.9.1", - "language": "julia", - "name": "julia-1.9" - }, - "language_info": { - "file_extension": ".jl", - "mimetype": "application/julia", - "name": "julia", - "version": "1.9.1" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/docs/src/PetriToABM.ipynb b/docs/src/PetriToABM.ipynb deleted file mode 100644 index 58caeb3..0000000 --- a/docs/src/PetriToABM.ipynb +++ /dev/null @@ -1,355 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 15, - "id": "7a2b0b58", - "metadata": {}, - "outputs": [], - "source": [ - "using AlgebraicPetri\n", - "using AlgebraicRewriting\n", - "using Catlab.Present, Catlab.Theories, Catlab.CategoricalAlgebra\n", - "const hom = AlgebraicRewriting.homomorphism;" - ] - }, - { - "cell_type": "markdown", - "id": "1a2c6c5b", - "metadata": {}, - "source": [ - "We can convert any petri net into a ABM, giving it the \"token-passing\"\n", - "semantics, by converting each transition into a rewrite rule.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "1c3a7188", - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": "\n\n\n\n\n\nG\n\n\n\ns1\n\nS\n\n\n\nt1\n\ninf\n\n\n\ns1->t1\n\n\n1\n\n\n\ns2\n\nI\n\n\n\ns2->t1\n\n\n1\n\n\n\nt2\n\nrec\n\n\n\ns2->t2\n\n\n1\n\n\n\ns3\n\nR\n\n\n\nt1->s2\n\n\n2\n\n\n\nt2->s3\n\n\n1\n\n\n\n", - "text/plain": [ - "Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"S\", :shape => \"circle\", :color => \"#6C9AC3\", :pos => \"\")), Catlab.Graphics.Graphviz.Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"I\", :shape => \"circle\", :color => \"#6C9AC3\", :pos => \"\")), Catlab.Graphics.Graphviz.Node(\"s3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"R\", :shape => \"circle\", :color => \"#6C9AC3\", :pos => \"\")), Catlab.Graphics.Graphviz.Node(\"t1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"inf\", :shape => \"square\", :color => \"#E28F41\", :pos => \"\")), Catlab.Graphics.Graphviz.Node(\"t2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"rec\", :shape => \"square\", :color => \"#E28F41\", :pos => \"\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"t1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:labelfontsize => \"6\", :label => \"1\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"t1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"s2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:labelfontsize => \"6\", :label => \"2\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"t2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"s3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:labelfontsize => \"6\", :label => \"1\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"t1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:labelfontsize => \"6\", :label => \"1\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"t2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:labelfontsize => \"6\", :label => \"1\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:shape => \"plain\", :style => \"filled\", :color => \"white\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "sir_petri = LabelledPetriNet([:S,:I,:R],\n", - " :inf=>((:S,:I)=>(:I,:I)),\n", - " :rec=>(:I=>:R))\n", - "Graph(sir_petri)" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "b4e39f2c", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "Discrete with elements S = 1:3, I = 1:2, R = 1:0\n", - "
\n" - ], - "text/plain": [ - "Discrete with elements S = 1:3, I = 1:2, R = 1:0\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "\"\"\"\n", - "The states of a Petri net induce a discrete schema for a C-Set\n", - "\"\"\"\n", - "function petri_to_cset_type(p::LabelledPetriNet, name::Symbol=:Discrete)::Type\n", - " pres = Presentation(FreeSchema)\n", - " [add_generator!(pres, Ob(FreeSchema, l)) for l in p[:sname]]\n", - " return AnonACSet(name)\n", - "end\n", - "\n", - "SIR = petri_to_cset_type(sir_petri)\n", - "\n", - "@acset Discrete begin S=3; I=2; R=0 end # Model w/ 3 susceptible, 2 infected" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "3eea5c91", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "\"\"\"\n", - "The rewrite rule matches for the inputs to the transition, deletes them, and\n", - "adds the outputs to the transition.\n", - "\"\"\"\n", - "function transition_to_rw_rule(p::LabelledPetriNet, t::Int)\n", - " Rule(map([(:it,:is), (:ot,:os)]) do (getIO, getState)\n", - " cset = petri_to_cset_type(p)()\n", - " [add_part!(cset, x) for x in p[incident(p, 1, getIO), [getState,:sname]]]\n", - " return create(cset) # interface I is an empty C-Set\n", - " end...)\n", - "end\n", - "\n", - "rw = transition_to_rw_rule(sir_petri, 1)\n", - "codom(rw.L) # C-Set with S=1 and I=1\n", - "codom(rw.R); # C-Set with I=2\n" - ] - }, - { - "attachments": { - "Screen%20Shot%202022-08-08%20at%201.27.05%20PM.png": { - "image/png": "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" - } - }, - "cell_type": "markdown", - "id": "e854912e", - "metadata": {}, - "source": [ - "![Screen%20Shot%202022-08-08%20at%201.27.05%20PM.png](attachment:Screen%20Shot%202022-08-08%20at%201.27.05%20PM.png)" - ] - }, - { - "cell_type": "markdown", - "id": "7b6cd63e", - "metadata": {}, - "source": [ - "We can repeat the above but this time include a graph that the tokens live on.\n", - "We assume the tokens move around randomly and interact only when living on the\n", - "same vertex\n" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "03ece288", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "PGraph with elements V = 1:3, E = 1:2, S = 1:2, I = 1:1, R = 1:0\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Esrctgt
112
223
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
SS_loc
11
23
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
II_loc
12
\n", - "
\n" - ], - "text/plain": [ - "PGraph with elements V = 1:3, E = 1:2, S = 1:2, I = 1:1, R = 1:0\n", - "┌───┬─────┬─────┐\n", - "│\u001b[1m E \u001b[0m│\u001b[1m src \u001b[0m│\u001b[1m tgt \u001b[0m│\n", - "├───┼─────┼─────┤\n", - "│ 1 │ 1 │ 2 │\n", - "│ 2 │ 2 │ 3 │\n", - "└───┴─────┴─────┘\n", - "┌───┬───────┐\n", - "│\u001b[1m S \u001b[0m│\u001b[1m S_loc \u001b[0m│\n", - "├───┼───────┤\n", - "│ 1 │ 1 │\n", - "│ 2 │ 3 │\n", - "└───┴───────┘\n", - "┌───┬───────┐\n", - "│\u001b[1m I \u001b[0m│\u001b[1m I_loc \u001b[0m│\n", - "├───┼───────┤\n", - "│ 1 │ 2 │\n", - "└───┴───────┘\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "using Catlab.Graphs: SchGraph\n", - "\n", - "loc(s::Symbol) = Symbol(\"$(s)_loc\")\n", - "\n", - "function petri_to_cset_type_gr(p::LabelledPetriNet, name::Symbol=:PGraph)::Type\n", - " pres = copy(SchGraph)\n", - " isempty(p[:sname] ∩ [:V,:E] ) || error(\"V and E are reserved\")\n", - " for l in p[:sname]\n", - " add_generator!(pres, Hom(loc(l),\n", - " add_generator!(pres, Ob(FreeSchema, l)),\n", - " pres.generators[:Ob][1]))\n", - " end\n", - " return AnonACSet(pres)\n", - "end\n", - "\n", - "SIR_gr = petri_to_cset_type_gr(sir_petri)\n", - "# An S, I, and S in a linear sequence\n", - "@acset SIR_gr begin S=2;I=1;V=3;E=2;src=[1,2];tgt=[2,3]; \n", - " S_loc=[1,3]; I_loc=[2] end" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "0200994f", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "\"\"\"Each transition requires all tokens to be on the same vertex\"\"\"\n", - "function transition_to_rw_rule_gr(p::LabelledPetriNet, t::Int)\n", - " V = @acset petri_to_cset_type_gr(p) begin V=1 end\n", - " Rule(map([(:it,:is), (:ot,:os)]) do (getIO, getState)\n", - " cset = deepcopy(V)\n", - " [add_part!(cset, x; Dict(loc(x)=>1)...)\n", - " for x in p[incident(p, 1, getIO), [getState,:sname]]]\n", - " return hom(V,cset) # interface I is an empty C-Set\n", - " end...)\n", - "end\n", - "rw = transition_to_rw_rule_gr(sir_petri, 1)\n", - "codom(rw.L) # S and I on a vertex\n", - "dom(rw.L) # Just a vertex\n", - "codom(rw.R); # Two I's on a vertex\n" - ] - }, - { - "attachments": { - "Screen%20Shot%202022-08-08%20at%201.33.08%20PM.png": { - "image/png": "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" - } - }, - "cell_type": "markdown", - "id": "faf6ac58", - "metadata": {}, - "source": [ - "![Screen%20Shot%202022-08-08%20at%201.33.08%20PM.png](attachment:Screen%20Shot%202022-08-08%20at%201.33.08%20PM.png)" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "0703eb12", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "\"\"\"Now each token type needs a rewrite rule to move\"\"\"\n", - "function state_to_rw_rule_gr(p::LabelledPetriNet, s::Int)\n", - " E = @acset petri_to_cset_type_gr(p) begin V=2;E=1;src=1;tgt=2 end\n", - " x = p[s, :sname]\n", - " Rule(map(1:2) do i\n", - " cset = deepcopy(E)\n", - " add_part!(cset, x; Dict(loc(x)=>i)...)\n", - " return hom(E,cset)\n", - " end...)\n", - "end\n", - "\n", - "rw = state_to_rw_rule_gr(sir_petri, 1)\n", - "codom(rw.L) # S on position 1\n", - "dom(rw.L) # Just an edge\n", - "codom(rw.R); # S on position 2\n" - ] - }, - { - "attachments": { - "Screen%20Shot%202022-08-08%20at%201.33.21%20PM.png": { - "image/png": "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k8fYKYXNSaFSSCPh94ipgpOTsVMSbghWbx2BQqHCoVHrmocOGSKAZ0G7du1k1KhRhmpIh1kKFQvaCZNpN2/eLCtWrHDXzvfo0UMOOeQQ7v4asG127tzpxhkASwwJgCH+8rR5V0Bkqcn+m9/8RiZMmOC255o1a+Sggw5Kje95crSqqsq9lyHex5dffum2Fx60jRs3zhOGyMe6e/du9162dOlSad68uRtXBfeyvA51UqhEPqWCG9iwYYM88cQT7t/y5ctlx44dRY3gZgzR8r3vfU+GDBnidgMWzZjTD7GvCzhi2d66devks88+K0ri4IMPFixjHTx4sLu8r3Xr1kXz8UN7CaB9sRnb2LFjpW/fvvY6mjPP8KPgySeflMcff1yWLVsm27ZtK0qgWbNm0rVr12/uZZhjxFRN4J133nHvY+C4atUq+eSTT6q/LHiHfawQRh/3Mvy1b9++4NsMv1WbHzHFQGDv3r3O1KlTneOPP95RM7fdP3VaOX7+vPzHHXec86c//clRv1Ri8NjOKtQvDUcNkTnqRheKo4q34Zx66qnO7Nmz7TxAelWSgBoWLfkdv4iXwMyZM53evXuHugZxPzvmmGOcyZMnO3v27InXcYtq+9///ufcddddjtpgMDTHnj17Og899JCT9WsDQw1Mhgk8/fTT35yMfoRJuTy4yLt16+bMmzfPsNd2mceFiAtShUkPJPJKsQTH0047zXn55ZftOlB6QwIWE3j++eed73znO9quwc6dOzsQPXlLqufE+da3vqWNo+plcf7xj39kFiOFisGm/fDDD50BAwZoORlrPnDxoO3fv7+zZcsWg0dgh+k33njDwYWIY67JIer/sDl8+HBHzW+x42DpBQlYSEAFIHOGDRtm7BpE78y7775r4ZHrden999931Go1YxzVNAFn+/btep22wBrnqKgnnYmEMfVBgwaJuvhMmP/GZqdOndxdY1VX6jefZenNokWL5Pvf/37JeTy6jvXEE090x4gxYY2JBEigmsDGjRvde9nq1av32yivOlf0d5g7hjlnqscmujELLbz++usuR0w0NpkQ5gLzhrp06WKymnhtWyCWMufCwoULHTVTW/uvf3VmFLWpJqo5CxYsyBxHDPU0bNiw6DGXYhHlcwwrqcBKmePIAyKBsARU/A6nbdu2sV2DFRUVzqxZs8K6a225p556ylG7fMfG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N8y1a9d+wxEsscuzxxA8cWFjh+asX9BhObIcCYQlgGsQOxvjgYt7GP5wDSJid+E12K1bN3dfNF6DxUmD43vvvef+mAU/75mAwHcIPIn7GP7ww7V9+/a5updRqBQ/ZxL5FCcqEi/kaPjJMRo/liaBqAR4DUYl+HV5cvyaA4WKnvOJVkiABEiABEiABAwQoFAxAJUmSYAESIAESIAE9BCgUNHDkVZIgARIgARIgAQMEKBQMQCVJkmABEiABEiABPQQoFDRw5FWSIAESIAESIAEDBCgUDEAlSZJgARIgARIgAT0EKBQ0cORVkiABEiABEiABAwQoFAxAJUmSYAESIAESIAE9BCgUNHDkVZIgARIgARIgAQMEKBQMQCVJkmABEiABEiABPQQoFDRw5FWSIAESIAESIAEDBCgUDEAlSZJgARIgARIgAT0EKBQ0cORVkiABEiABEiABAwQoFAxAJUmSYAESIAESIAE9BCgUNHDkVZIgARIgARIgAQMEKBQMQCVJkmABEiABEiABPQQoFDRw5FWSIAESIAESIAEDBCgUDEAlSZJgARIgARIgAT0EKBQ0cORVkiABEiABEiABAwQoFAxAJUmSYAESIAESIAE9BCgUNHDkVZIgARIgARIgAQMEKBQMQCVJkmABEiABEiABPQQoFDRw5FWSIAESIAESIAEDBCgUDEAlSZJgARIgARIgAT0EKBQ0cORVkiABEiABEiABAwQoFAxAJUmSYAESIAESIAE9BCgUNHDkVZIgARIgARIgAQMEKBQMQCVJkmABEiABEiABPQQoFDRw5FWSIAESIAESIAEDBCgUDEAlSZJgARIgARIgAT0EKBQ0cORVkiABEiABEiABAwQoFAxAJUmSYAESIAESIAE9BCgUNHDkVZIgARIgARIgAQMEKBQMQCVJkmABEiABEiABPQQoFDRw5FWSIAESIAESIAEDBCgUDEAlSZJgARIgARIgAT0EKBQ0cORVkiABEiABEiABAwQoFAxAJUmSYAESIAESIAE9BCgUNHDkVZIgARIgARIgAQMEKBQMQCVJkmABEiABEiABPQQ+D+x3+4k37rSrwAAAABJRU5ErkJggg==" - } - }, - "cell_type": "markdown", - "id": "8bec0dd2", - "metadata": {}, - "source": [ - "![Screen%20Shot%202022-08-08%20at%201.33.21%20PM.png](attachment:Screen%20Shot%202022-08-08%20at%201.33.21%20PM.png)" - ] - }, - { - "attachments": { - "Screen%20Shot%202022-08-08%20at%201.34.24%20PM.png": { - "image/png": "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" - } - }, - "cell_type": "markdown", - "id": "d4e6f92a", - "metadata": {}, - "source": [ - "We can now use these rewrite rules on larger sytems and analyze the dynamics.\n", - "![Screen%20Shot%202022-08-08%20at%201.34.24%20PM.png](attachment:Screen%20Shot%202022-08-08%20at%201.34.24%20PM.png)" - ] - } - ], - "metadata": { - "@webio": { - "lastCommId": null, - "lastKernelId": null - }, - "kernelspec": { - "display_name": "Julia 1.8.2", - "language": "julia", - "name": "julia-1.8" - }, - "language_info": { - "file_extension": ".jl", - "mimetype": "application/julia", - "name": "julia", - "version": "1.8.2" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/docs/src/api.md b/docs/src/api.md new file mode 100644 index 0000000..344c37b --- /dev/null +++ b/docs/src/api.md @@ -0,0 +1,9 @@ +# Library Reference + +```@index +``` + +```@autodocs +Modules = [AlgebraicRewriting] +Private = true +``` diff --git a/docs/src/generated/full_demo.ipynb b/docs/src/generated/full_demo.ipynb new file mode 100644 index 0000000..211877a --- /dev/null +++ b/docs/src/generated/full_demo.ipynb @@ -0,0 +1,1447 @@ +{ + "cells": [ + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\")), Catlab.Graphics.Graphviz.Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\")), Catlab.Graphics.Graphviz.Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:height => \"0.05\", :margin => \"0\", :shape => \"point\", :width => \"0.05\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:arrowsize => \"0.5\"))", + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "G\n", + "\n", + "\n", + "\n", + "n1\n", + "\n", + "\n", + "\n", + "\n", + "n2\n", + "\n", + "\n", + "\n", + "\n", + "n1->n2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n3\n", + "\n", + "\n", + "\n", + "\n", + "n2->n3\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 1 + } + ], + "cell_type": "code", + "source": [ + "using AlgebraicRewriting\n", + "using Catlab, Catlab.CategoricalAlgebra, Catlab.Graphics, Catlab.Graphs, Catlab.Programs, Catlab.Theories\n", + "import AlgebraicPetri\n", + "using Test\n", + "\n", + "\n", + "\"\"\"\n", + "This is a self-contained walkthrough of the main features of AlgebraicRewriting.\n", + "This is a regular julia file that can be run interactively.\n", + "\n", + "Importantly:\n", + " - use Julia 1.9 (not yet official released)\n", + " - ]activate the environment in AlgebraicRewriting.jl/docs\n", + " - check that graphviz is installed locally (test via \"which dot\" in terminal)\n", + "\n", + "Table of contents:\n", + "\n", + "1. DPO\n", + "2. SPO\n", + "3. SqPO\n", + "4. PBPO+\n", + "5. Generalizing graphs: C-Sets, Slices, etc.\n", + "6. Application conditions\n", + "7. Attribute variables\n", + "8. Graph processes\n", + "9. General purpose programming / agent-based modeling\n", + " a. Rewrite and Control Flow boxes\n", + " b. Agents and Query boxes\n", + " c. Data migration\n", + " d. Monadic output\n", + "\n", + "The VS Code REPL makes it easy to have figures automatically pop up in a side\n", + "window, so this is the preferred way of interacting with this file. However, if\n", + "that is not available, your options are to\n", + "1.) copy-paste the code into a Jupyter notebook\n", + "2.) use the following `to_svg` function, which will write a graphviz output to\n", + " a SVG file and can be viewed in a browser. The Julia pipe syntax |> allows\n", + " you to easily append \" |> to_svg \" to a line with a visualization.\n", + "\"\"\"\n", + "to_svg(G, filename=\"tmp.svg\") =\n", + " open(filename, \"w\") do io\n", + " show(io, \"image/svg+xml\", G)\n", + " end\n", + "\n", + "to_graphviz(path_graph(Graph, 3)) # |> to_svg\n", + "\n", + "##########" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "1. DPO #" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"1\")), Catlab.Graphics.Graphviz.Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"2\")), Catlab.Graphics.Graphviz.Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"3\")), Catlab.Graphics.Graphviz.Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"4\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:height => \"0.05\", :margin => \"0\", :shape => \"circle\", :width => \"0.05\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:arrowsize => \"0.5\"))", + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "G\n", + "\n", + "\n", + "\n", + "n1\n", + "\n", + "1\n", + "\n", + "\n", + "\n", + "n1->n1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n2\n", + "\n", + "2\n", + "\n", + "\n", + "\n", + "n3\n", + "\n", + "3\n", + "\n", + "\n", + "\n", + "n2->n3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n4\n", + "\n", + "4\n", + "\n", + "\n", + "\n", + "n3->n4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n4->n1\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 2 + } + ], + "cell_type": "code", + "source": [ + "##########\n", + "\n", + "\"\"\"\n", + "We construct a rule by providing a span, L ← I → R\n", + "\"\"\"\n", + "\n", + "L = path_graph(Graph, 2) # • → •\n", + "I = Graph(1) # •\n", + "R = @acset Graph begin\n", + " V = 1\n", + " E = 1\n", + " src = 1\n", + " tgt = 1\n", + "end # •↺\n", + "l = CSetTransformation(I, L; V=[1]) # graph homomorphism data\n", + "r = CSetTransformation(I, R; V=[1])\n", + "\n", + "rule = Rule(l, r)\n", + "G = path_graph(Graph, 5) # • → • → • → • → •\n", + "\n", + "m = only(get_matches(rule, G)) # only one match which satisfies dangling condition\n", + "\n", + "\"\"\"We can rewrite with a specific match\"\"\"\n", + "\n", + "res = rewrite_match(rule, m) # • → • → • → •↺\n", + "to_graphviz(res; node_labels=true)" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "Note that C-Sets are morally regarded up to isomorphism - in particular,\n", + "limits and colimits may modify the orderings of edges/vertices" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" + }, + "metadata": {}, + "execution_count": 3 + } + ], + "cell_type": "code", + "source": [ + "expected = @acset Graph begin\n", + " V = 4\n", + " E = 4\n", + " src = [1, 2, 3, 4]\n", + " tgt = [2, 3, 4, 4]\n", + "end\n", + "@test is_isomorphic(expected, res)\n", + "\n", + "\"\"\"\n", + "We can also specify the rule via a colimit-of-representables (i.e. generators\n", + "and relations) syntax. As your schema gets bigger, this becomes more and more\n", + "convenient. Assigning temporary names to the C-Set elements can also be helpful.\n", + "\"\"\"\n", + "yG = yoneda_cache(Graph, clear=true); # compute representables\n", + "\n", + "rule2 = Rule(@migration(SchRulel, SchGraph, begin\n", + " L => @join begin\n", + " e::E\n", + " end\n", + " K => @join begin\n", + " v::V\n", + " end\n", + " R => @join begin\n", + " eᵣ::E\n", + " src(eᵣ) == tgt(eᵣ)\n", + " end\n", + " l => begin\n", + " v => src(e)\n", + " end\n", + " end), yG)\n", + "\n", + "\"\"\"We can rewrite without a match (and let it pick an arbitrary match)\"\"\"\n", + "\n", + "@test res == rewrite(rule, G)\n", + "\n", + "##########" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "2. SPO #" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" + }, + "metadata": {}, + "execution_count": 4 + } + ], + "cell_type": "code", + "source": [ + "##########\n", + "\n", + "\"\"\"\n", + "Rules are by default DPO, but if we specify a type parameter we can change\n", + "the semantics\n", + "\"\"\"\n", + "\n", + "rule_spo = Rule{:SPO}(l, r) # (same data as before)\n", + "\n", + "@test length(get_matches(rule_spo, G)) == 4 # there are now four matches\n", + "res = rewrite(rule_spo, G)\n", + "to_graphviz(res)\n", + "@test is_isomorphic(res, path_graph(Graph, 3) ⊕ R)" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "note that ⊕ and ⊗ are shorthand for (co)products\n", + "Julia lets you easily write unicode symbols via \"\\\" followed by a LaTeX name" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "###########" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "3. SqPO #" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"neato\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\")), Catlab.Graphics.Graphviz.Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\")), Catlab.Graphics.Graphviz.Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\")), Catlab.Graphics.Graphviz.Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\")), Catlab.Graphics.Graphviz.Node(\"n5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\")), Catlab.Graphics.Graphviz.Node(\"n6\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\")), Catlab.Graphics.Graphviz.Node(\"n7\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:height => \"0.05\", :margin => \"0\", :shape => \"point\", :width => \"0.05\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:arrowsize => \"0.5\", :len => \"0.5\"))", + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "G\n", + "\n", + "\n", + "\n", + "n1\n", + "\n", + "\n", + "\n", + "\n", + "n2\n", + "\n", + "\n", + "\n", + "\n", + "n1->n2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n3\n", + "\n", + "\n", + "\n", + "\n", + "n1->n3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n4\n", + "\n", + "\n", + "\n", + "\n", + "n1->n4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n5\n", + "\n", + "\n", + "\n", + "\n", + "n1->n5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n6\n", + "\n", + "\n", + "\n", + "\n", + "n1->n6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n7\n", + "\n", + "\n", + "\n", + "\n", + "n1->n7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n2->n3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n2->n4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n2->n5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n2->n6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n2->n7\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 6 + } + ], + "cell_type": "code", + "source": [ + "###########\n", + "\n", + "\"\"\"If we duplicate a vertex with an incident edge, it will duplicate the edge\"\"\"\n", + "\n", + "L = Graph(1)\n", + "I = Graph(2)\n", + "R = path_graph(Graph, 2)\n", + "\n", + "\"\"\"\n", + "We can use automated homomorphism search to reduce the tedium of specifying\n", + "data manually. In this case, there is a unique option\n", + "\"\"\"\n", + "\n", + "l = homomorphism(I, L)\n", + "\n", + "\"\"\"\n", + "There are many constraints we can put on the search, such as being monic.\n", + "\"\"\"\n", + "\n", + "r = homomorphism(I, R; monic=true)\n", + "\n", + "rule_sqpo = Rule{:SqPO}(l, r) # same data as before)\n", + "\n", + "\n", + "G = star_graph(Graph, 6) # a 5-pointed star\n", + "to_graphviz(G; prog=\"neato\") # changing \"prog\" can sometimes make it look better\n", + "\n", + "m = CSetTransformation(Graph(1), G; V=[6]) # point at the center\n", + "res = rewrite_match(rule_sqpo, m)\n", + "to_graphviz(res; prog=\"neato\")\n", + "\n", + "############" + ], + "metadata": {}, + "execution_count": 6 + }, + { + "cell_type": "markdown", + "source": [ + "4. PBPO+ #" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "ACSetTransformation((V = id(FinSet(2)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0})" + }, + "metadata": {}, + "execution_count": 7 + } + ], + "cell_type": "code", + "source": [ + "############\n", + "\n", + "\"\"\"\n", + "PBPO+ requires not merely a span but also additional data for L and K which can\n", + "be thought of as type graphs. The graph G that we rewrite will be typed over\n", + "the L' type graph to determine how it is rewritten.\n", + "\"\"\"\n", + "\n", + "L = Graph(1)\n", + "K = Graph(2)\n", + "l = homomorphism(K, L)\n", + "r = id(K)" + ], + "metadata": {}, + "execution_count": 7 + }, + { + "cell_type": "markdown", + "source": [ + "We allow edges into and out of the matched vertex as well as edges\n", + "between the vertices incident to the matched vertex" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"1\")), Catlab.Graphics.Graphviz.Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"2\")), Catlab.Graphics.Graphviz.Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"3\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:height => \"0.05\", :margin => \"0\", :shape => \"circle\", :width => \"0.05\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:arrowsize => \"0.5\"))", + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "G\n", + "\n", + "\n", + "\n", + "n1\n", + "\n", + "1\n", + "\n", + "\n", + "\n", + "n1->n1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n2\n", + "\n", + "2\n", + "\n", + "\n", + "\n", + "n1->n2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n3\n", + "\n", + "3\n", + "\n", + "\n", + "\n", + "n1->n3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n2->n3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n3->n1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n3->n3\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 8 + } + ], + "cell_type": "code", + "source": [ + "L′ = @acset Graph begin\n", + " V = 3\n", + " E = 6\n", + " src = [1, 1, 1, 2, 3, 3]\n", + " tgt = [1, 2, 3, 3, 3, 1]\n", + "end\n", + "tl = CSetTransformation(L, L′; V=[2]) # 2 is the matched vertex\n", + "to_graphviz(L′; node_labels=true)" + ], + "metadata": {}, + "execution_count": 8 + }, + { + "cell_type": "markdown", + "source": [ + "The outneighbors of the matched vertex are duplicated (an edge connects the\n", + "old ones to the new ones) and the matched vertex is duplicated. The new copy\n", + "of the matched vertex points at the new ones. It does not have any inneighbors." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "PBPORule(ACSetTransformation((V = FinFunction([1, 1], 2, 1), E = FinFunction(Int64[], 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}), ACSetTransformation((V = id(FinSet(2)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}), ACSetTransformation((V = FinFunction([2], 1, 3), E = FinFunction(1:0, 0, 6)), Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:3, E:6}), ACSetTransformation((V = FinFunction([2, 4], 2, 5), E = FinFunction(1:0, 0, 9)), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:5, E:9}), ACSetTransformation((V = FinFunction([1, 2, 3, 2, 3], 5, 3), E = FinFunction([1, 2, 3, 4, 5, 6, 5, 4, 5], 9, 6)), Catlab.Graphs.BasicGraphs.Graph {V:5, E:9}, Catlab.Graphs.BasicGraphs.Graph {V:3, E:6}), true, Constraint[], Constraint[], Dict{Any, Any}(), Dict{Any, Any}(), nothing)" + }, + "metadata": {}, + "execution_count": 9 + } + ], + "cell_type": "code", + "source": [ + "K′ = @acset Graph begin\n", + " V = 5\n", + " E = 9\n", + " src = [1, 1, 1, 2, 3, 3, 3, 4, 5]\n", + " tgt = [1, 2, 3, 3, 3, 1, 5, 5, 5]\n", + "end\n", + "tk = CSetTransformation(K, K′; V=[2, 4])\n", + "to_graphviz(K′; node_labels=true)\n", + "\n", + "l′ = homomorphism(K′, L′; initial=(V=[1, 2, 3, 2, 3],))\n", + "\n", + "prule = PBPORule(l, r, tl, tk, l′)" + ], + "metadata": {}, + "execution_count": 9 + }, + { + "cell_type": "markdown", + "source": [ + "Apply to an example vertex (#3) with two inneighbors and one outneighbor." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Catlab.Graphs.BasicGraphs.Graph {V:6, E:8}\n┌───┬─────┬─────┐\n│\u001b[1m E \u001b[0m│\u001b[1m src \u001b[0m│\u001b[1m tgt \u001b[0m│\n├───┼─────┼─────┤\n│\u001b[1m 1 \u001b[0m│ 3 │ 4 │\n│\u001b[1m 2 \u001b[0m│ 3 │ 1 │\n│\u001b[1m 3 \u001b[0m│ 4 │ 1 │\n│\u001b[1m 4 \u001b[0m│ 1 │ 5 │\n│\u001b[1m 5 \u001b[0m│ 5 │ 5 │\n│\u001b[1m 6 \u001b[0m│ 5 │ 6 │\n│\u001b[1m 7 \u001b[0m│ 2 │ 6 │\n│\u001b[1m 8 \u001b[0m│ 6 │ 6 │\n└───┴─────┴─────┘\n", + "text/html": [ + "
\n", + "Catlab.Graphs.BasicGraphs.Graph {V:6, E:8}\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Esrctgt
134
231
341
415
555
656
726
866
\n", + "
\n" + ] + }, + "metadata": {}, + "execution_count": 10 + } + ], + "cell_type": "code", + "source": [ + "G = @acset Graph begin\n", + " V = 4\n", + " E = 5\n", + " src = [1, 1, 2, 3, 4]\n", + " tgt = [2, 3, 3, 4, 4]\n", + "end\n", + "to_graphviz(G; node_labels=true)\n", + "\n", + "m = get_match(prule, G; initial=(V=[3],) => Dict())\n", + "\n", + "res = rewrite_match(prule, m)" + ], + "metadata": {}, + "execution_count": 10 + }, + { + "cell_type": "markdown", + "source": [ + "V1 is copied to V2. Outneighbor V5 (w/ loop) is copied to V6, creating an edge" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"1\")), Catlab.Graphics.Graphviz.Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"2\")), Catlab.Graphics.Graphviz.Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"3\")), Catlab.Graphics.Graphviz.Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"4\")), Catlab.Graphics.Graphviz.Node(\"n5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"5\")), Catlab.Graphics.Graphviz.Node(\"n6\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"6\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:height => \"0.05\", :margin => \"0\", :shape => \"circle\", :width => \"0.05\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:arrowsize => \"0.5\"))", + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "G\n", + "\n", + "\n", + "\n", + "n1\n", + "\n", + "1\n", + "\n", + "\n", + "\n", + "n5\n", + "\n", + "5\n", + "\n", + "\n", + "\n", + "n1->n5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n2\n", + "\n", + "2\n", + "\n", + "\n", + "\n", + "n6\n", + "\n", + "6\n", + "\n", + "\n", + "\n", + "n2->n6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n3\n", + "\n", + "3\n", + "\n", + "\n", + "\n", + "n3->n1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n4\n", + "\n", + "4\n", + "\n", + "\n", + "\n", + "n3->n4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n4->n1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n5->n5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n5->n6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n6->n6\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 11 + } + ], + "cell_type": "code", + "source": [ + "to_graphviz(res; node_labels=true)\n", + "\n", + "##########################" + ], + "metadata": {}, + "execution_count": 11 + }, + { + "cell_type": "markdown", + "source": [ + "5. Generalizing Graphs #" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "\"While the vast majority of functionality is focused on ACSets at the present\\nmoment, but there is nothing in principle which limits this.\\n\"" + }, + "metadata": {}, + "execution_count": 12 + } + ], + "cell_type": "code", + "source": [ + "##########################\n", + "\n", + "\"\"\"\n", + "Any data structure which implements the required functions we need can, in\n", + "principle, be used for rewriting. Importantly this includes pushout_complement,\n", + "pushout, and homomorphism search. These are all implemented generically for\n", + "any C-Set schema (allowing us to rewrite Petri nets, Semisimplicial sets, etc.)\n", + "\n", + "Here we'll do rewriting in graphs sliced over •⇆•, which is isomorphic to the\n", + "category of (whole-grain) Petri nets, with States and Transitions.\n", + "\"\"\"\n", + "\n", + "\n", + "function graph_slice(s::Slice)\n", + " h = s.slice\n", + " V, E = collect.([h[:V], h[:E]])\n", + " g = dom(h)\n", + " (S, T), (I, O) = [[findall(==(i), X) for i in 1:2] for X in [V, E]]\n", + " nS, nT, nI, nO = length.([S, T, I, O])\n", + " findS, findT = [x -> findfirst(==(x), X) for X in [S, T]]\n", + " to_graphviz(@acset AlgebraicPetri.PetriNet begin\n", + " S = nS\n", + " T = nT\n", + " I = nI\n", + " O = nO\n", + " is = findS.(g[I, :src])\n", + " it = findT.(g[I, :tgt])\n", + " ot = findT.(g[O, :src])\n", + " os = findS.(g[O, :tgt])\n", + " end)\n", + "end;\n", + "\n", + "\"\"\" this is the graph we are slicing over \"\"\"\n", + "\n", + "two = @acset Graph begin\n", + " V = 2\n", + " E = 2\n", + " src = [1, 2]\n", + " tgt = [2, 1]\n", + "end\n", + "\n", + "\"\"\" Define a rule which deletes a [T] -> S edge\"\"\"\n", + "\n", + "L_ = path_graph(Graph, 2)\n", + "L = Slice(ACSetTransformation(L_, two, V=[2, 1], E=[2])) # [T] ⟶ (S)\n", + "graph_slice(L)\n", + "\n", + "I_ = Graph(1)\n", + "I = Slice(ACSetTransformation(I_, two, V=[2])) # [T]\n", + "R_ = Graph(2)\n", + "R = Slice(ACSetTransformation(R_, two, V=[2, 1])) # [T] (S)\n", + "\n", + "\"\"\"Using homomorphism search in the slice category\"\"\"\n", + "\n", + "rule = Rule(homomorphism(I, L), homomorphism(I, R))\n", + "\n", + "G_ = path_graph(Graph, 3)\n", + "G = Slice(ACSetTransformation(G_, two, V=[1, 2, 1], E=[1, 2])) # (S) ⟶ [T] ⟶ (S)\n", + "graph_slice(G)\n", + "\n", + "res = rewrite(rule, G) # (S) ⟶ [T] (S)\n", + "graph_slice(res)\n", + "\n", + "\"\"\"\n", + "While the vast majority of functionality is focused on ACSets at the present\n", + "moment, but there is nothing in principle which limits this.\n", + "\"\"\"\n", + "\n", + "#############################" + ], + "metadata": {}, + "execution_count": 12 + }, + { + "cell_type": "markdown", + "source": [ + "6. Application conditions #" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "\"We can combining constraints with logical combinators\"" + }, + "metadata": {}, + "execution_count": 13 + } + ], + "cell_type": "code", + "source": [ + "#############################\n", + "\n", + "\"\"\"\n", + "We can construct commutative diagrams with certain edges left unspecified or\n", + "marked with ∀ or ∃. If only one edge is left free, we can treat the diagram as\n", + "a boolean function which tests whether the morphism makes the specified paths\n", + "commute (or not commute). This generalizes positive/negative application\n", + "conditions and lifting conditions, but because those are most common there are\n", + "constructors AppCond and LiftCond to make these directly.\n", + "\n", + " ∀\n", + " [↻•] → ?\n", + " ↓ ↗ ∃ ↓\n", + " [↻•⟶•] → [↻•⟶•⟵•↺]\n", + "\n", + "Every vertex with a loop also has a map to the vertex marked by the bottom map.\n", + "\"\"\"\n", + "t = terminal(Graph) |> apex\n", + "looparr = @acset_colim yG begin\n", + " (e1, e2)::E\n", + " src(e1) == tgt(e1)\n", + " src(e1) == src(e2)\n", + "end\n", + "\n", + "v = homomorphism(t, looparr)\n", + "loop_csp = @acset Graph begin\n", + " V = 3\n", + " E = 4\n", + " src = [1, 3, 1, 3]\n", + " tgt = [1, 3, 2, 2]\n", + "end\n", + "b = homomorphism(looparr, loop_csp; monic=true)\n", + "constr = LiftCond(v, b)\n", + "\n", + "@test !apply_constraint(constr, homomorphism(t, loop_csp))\n", + "@test apply_constraint(constr, b)\n", + "\n", + "\"\"\"We can combining constraints with logical combinators\"\"\"" + ], + "metadata": {}, + "execution_count": 13 + }, + { + "cell_type": "markdown", + "source": [ + "match vertex iff it has 2 or 3 self loops" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" + }, + "metadata": {}, + "execution_count": 14 + } + ], + "cell_type": "code", + "source": [ + "one, two, three, four, five = [@acset(Graph, begin\n", + " V = 1\n", + " E = n\n", + " src = 1\n", + " tgt = 1\n", + "end) for n in 1:5]\n", + "\n", + "c2 = AppCond(homomorphism(Graph(1), two); monic=true) # PAC\n", + "c3 = AppCond(homomorphism(Graph(1), four), false; monic=true) # NAC\n", + "constr = c2 ⊗ c3 # logical conjunction: 2 ≤ |E| < 4\n", + "\n", + "rule = Rule(id(Graph(1)), id(Graph(1)); ac=[constr])\n", + "\n", + "G = two ⊕ three ⊕ two ⊕ four ⊕ five ⊕ one\n", + "\n", + "@test length(get_matches(rule, G)) == 3\n", + "\n", + "##########################" + ], + "metadata": {}, + "execution_count": 14 + }, + { + "cell_type": "markdown", + "source": [ + "7. Attribute variables #" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" + }, + "metadata": {}, + "execution_count": 15 + } + ], + "cell_type": "code", + "source": [ + "##########################\n", + "\n", + "\"\"\"\n", + "Normally ACSet morphisms must match attribute values exactly, i.e. a weighted\n", + "graph edge of 8.3 can only be mapped to another edge weighted at 8.3. This\n", + "becomes very restricted, especially when we want to do some simple computations\n", + "with attribute values (e.g. when merging two edges, add their values together)\n", + "\n", + "A recent extension of ACSets makes this possible - each attribute type comes\n", + "equipped with a finite set of \"variables\" which can be mapped to any concrete\n", + "value (or another variable).\n", + "\"\"\"\n", + "\n", + "yWG = yoneda_cache(WeightedGraph{Int}; clear=true);\n", + "L = @acset_colim yWG begin\n", + " (e1, e2)::E\n", + " src(e1) == src(e2)\n", + " tgt(e1) == tgt(e2)\n", + "end\n", + "I = WeightedGraph{Int}(2)\n", + "R = @acset WeightedGraph{Int} begin\n", + " V = 2\n", + " E = 1\n", + " Weight = 1\n", + " src = 1\n", + " tgt = 2\n", + " weight = [AttrVar(1)]\n", + "end\n", + "\n", + "l = homomorphism(I, L; monic=true)\n", + "r = homomorphism(I, R; monic=true)\n", + "rule = Rule(l, r; monic=[:E], expr=Dict(:Weight => [xs -> xs[1] + xs[2]]))\n", + "\n", + "G = @acset WeightedGraph{Int} begin\n", + " V = 1\n", + " E = 3\n", + " src = 1\n", + " tgt = 1\n", + " weight = [10, 20, 100]\n", + "end\n", + "\n", + "@test rewrite(rule, G) == @acset WeightedGraph{Int} begin\n", + " V = 1\n", + " E = 2\n", + " src = 1\n", + " tgt = 1\n", + " weight = [30, 100]\n", + "end\n", + "\n", + "######################" + ], + "metadata": {}, + "execution_count": 15 + }, + { + "cell_type": "markdown", + "source": [ + "8. Graph processes #" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "4-element Vector{Catlab.Graphs.BasicGraphs.Graph}:\n Catlab.Graphs.BasicGraphs.Graph:\n V = 1:0\n E = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n Catlab.Graphs.BasicGraphs.Graph:\n V = 1:1\n E = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n Catlab.Graphs.BasicGraphs.Graph:\n V = 1:2\n E = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n Catlab.Graphs.BasicGraphs.Graph:\n V = 1:3\n E = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]" + }, + "metadata": {}, + "execution_count": 16 + } + ], + "cell_type": "code", + "source": [ + "######################\n", + "\n", + "\"\"\"\n", + "A sequence of rewrite applications can be given a poset structure where α ≤ β\n", + "means that the rule application α needed to occur before β. This is computed\n", + "via analyzing the colimit of all the partial maps induced by the rewrites.\n", + "\"\"\"\n", + "\n", + "using AlgebraicRewriting.Processes: RWStep, find_deps\n", + "\n", + "G0, G1, G2, G3 = Graph.([0, 1, 2, 3])" + ], + "metadata": {}, + "execution_count": 16 + }, + { + "cell_type": "markdown", + "source": [ + "Delete a node" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "Rule1 = Span(create(G1), id(G0));" + ], + "metadata": {}, + "execution_count": 17 + }, + { + "cell_type": "markdown", + "source": [ + "Merge two nodes" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "Rule2 = Span(id(G2), homomorphism(G2, G1));" + ], + "metadata": {}, + "execution_count": 18 + }, + { + "cell_type": "markdown", + "source": [ + "Add a node" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "3-element Vector{Rule{:DPO}}:\n Rule{:DPO}(ACSetTransformation((V = FinFunction(Int64[], 0, 1), E = FinFunction(Int64[], 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}), ACSetTransformation((V = id(FinSet(0)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}), Constraint[], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())\n Rule{:DPO}(ACSetTransformation((V = id(FinSet(2)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}), ACSetTransformation((V = FinFunction([1, 1], 2, 1), E = FinFunction(Int64[], 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}), Constraint[], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())\n Rule{:DPO}(ACSetTransformation((V = id(FinSet(0)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}), ACSetTransformation((V = FinFunction(Int64[], 0, 1), E = FinFunction(Int64[], 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}), Constraint[], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())" + }, + "metadata": {}, + "execution_count": 19 + } + ], + "cell_type": "code", + "source": [ + "Rule3 = Span(id(G0), create(G1))\n", + "\n", + "R1, R2, R3 = [Rule(l, r) for (l, r) in [Rule1, Rule2, Rule3]]\n", + "\n", + "### Trajectory" + ], + "metadata": {}, + "execution_count": 19 + }, + { + "cell_type": "markdown", + "source": [ + "step 1: add node #3 to G2" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "AlgebraicRewriting.Processes.RWStep(Catlab.CategoricalAlgebra.FreeDiagrams.Multispan{Catlab.Graphs.BasicGraphs.Graph, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple, StaticArraysCore.SVector{2, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple}}(Catlab.Graphs.BasicGraphs.Graph:\n V = 1:0\n E = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[], Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple[ACSetTransformation((V = id(FinSet(0)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}), ACSetTransformation((V = FinFunction(Int64[], 0, 1), E = FinFunction(Int64[], 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:1, E:0})]), Catlab.CategoricalAlgebra.FreeDiagrams.Multispan{Catlab.Graphs.BasicGraphs.Graph, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple, StaticArraysCore.SVector{2, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple}}(Catlab.Graphs.BasicGraphs.Graph:\n V = 1:2\n E = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[], Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple[ACSetTransformation((V = id(FinSet(2)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}), ACSetTransformation((V = FinFunction([1, 2], 2, 3), E = FinFunction(1:0, 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:3, E:0})]), ACSetTransformation((V = FinFunction(Int64[], 0, 2), E = FinFunction(Int64[], 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}), ACSetTransformation((V = FinFunction([3], 1, 3), E = FinFunction(1:0, 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:3, E:0}))" + }, + "metadata": {}, + "execution_count": 20 + } + ], + "cell_type": "code", + "source": [ + "M1 = create(G2)\n", + "CM1 = ACSetTransformation(G1, G3; V=[3])\n", + "Pmap1 = Span(id(G2), ACSetTransformation(G2, G3; V=[1, 2]))\n", + "RS1 = RWStep(Rule3, Pmap1, M1, CM1)" + ], + "metadata": {}, + "execution_count": 20 + }, + { + "cell_type": "markdown", + "source": [ + "Step 2: merge node 2 and 3 to yield a G2" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "AlgebraicRewriting.Processes.RWStep(Catlab.CategoricalAlgebra.FreeDiagrams.Multispan{Catlab.Graphs.BasicGraphs.Graph, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple, StaticArraysCore.SVector{2, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple}}(Catlab.Graphs.BasicGraphs.Graph:\n V = 1:2\n E = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[], Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple[ACSetTransformation((V = id(FinSet(2)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}), ACSetTransformation((V = FinFunction([1, 1], 2, 1), E = FinFunction(Int64[], 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:1, E:0})]), Catlab.CategoricalAlgebra.FreeDiagrams.Multispan{Catlab.Graphs.BasicGraphs.Graph, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple, StaticArraysCore.SVector{2, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple}}(Catlab.Graphs.BasicGraphs.Graph:\n V = 1:3\n E = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[], Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple[ACSetTransformation((V = id(FinSet(3)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:3, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:3, E:0}), ACSetTransformation((V = FinFunction([1, 2, 2], 3, 2), E = FinFunction(1:0, 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:3, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0})]), ACSetTransformation((V = FinFunction([2, 3], 2, 3), E = FinFunction(1:0, 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:3, E:0}), ACSetTransformation((V = FinFunction([2], 1, 2), E = FinFunction(1:0, 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}))" + }, + "metadata": {}, + "execution_count": 21 + } + ], + "cell_type": "code", + "source": [ + "M2 = ACSetTransformation(G2, G3; V=[2, 3])\n", + "CM2 = ACSetTransformation(G1, G2; V=[2])\n", + "Pmap2 = Span(id(G3), ACSetTransformation(G3, G2; V=[1, 2, 2]))\n", + "RS2 = RWStep(Rule2, Pmap2, M2, CM2)" + ], + "metadata": {}, + "execution_count": 21 + }, + { + "cell_type": "markdown", + "source": [ + "Step 3: delete vertex 1" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "3-element Vector{AlgebraicRewriting.Processes.RWStep}:\n AlgebraicRewriting.Processes.RWStep(Catlab.CategoricalAlgebra.FreeDiagrams.Multispan{Catlab.Graphs.BasicGraphs.Graph, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple, StaticArraysCore.SVector{2, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple}}(Catlab.Graphs.BasicGraphs.Graph:\n V = 1:0\n E = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[], Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple[ACSetTransformation((V = id(FinSet(0)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}), ACSetTransformation((V = FinFunction(Int64[], 0, 1), E = FinFunction(Int64[], 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:1, E:0})]), Catlab.CategoricalAlgebra.FreeDiagrams.Multispan{Catlab.Graphs.BasicGraphs.Graph, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple, StaticArraysCore.SVector{2, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple}}(Catlab.Graphs.BasicGraphs.Graph:\n V = 1:2\n E = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[], Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple[ACSetTransformation((V = id(FinSet(2)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}), ACSetTransformation((V = FinFunction([1, 2], 2, 3), E = FinFunction(1:0, 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:3, E:0})]), ACSetTransformation((V = FinFunction(Int64[], 0, 2), E = FinFunction(Int64[], 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}), ACSetTransformation((V = FinFunction([3], 1, 3), E = FinFunction(1:0, 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:3, E:0}))\n AlgebraicRewriting.Processes.RWStep(Catlab.CategoricalAlgebra.FreeDiagrams.Multispan{Catlab.Graphs.BasicGraphs.Graph, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple, StaticArraysCore.SVector{2, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple}}(Catlab.Graphs.BasicGraphs.Graph:\n V = 1:2\n E = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[], Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple[ACSetTransformation((V = id(FinSet(2)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}), ACSetTransformation((V = FinFunction([1, 1], 2, 1), E = FinFunction(Int64[], 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:1, E:0})]), Catlab.CategoricalAlgebra.FreeDiagrams.Multispan{Catlab.Graphs.BasicGraphs.Graph, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple, StaticArraysCore.SVector{2, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple}}(Catlab.Graphs.BasicGraphs.Graph:\n V = 1:3\n E = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[], Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple[ACSetTransformation((V = id(FinSet(3)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:3, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:3, E:0}), ACSetTransformation((V = FinFunction([1, 2, 2], 3, 2), E = FinFunction(1:0, 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:3, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0})]), ACSetTransformation((V = FinFunction([2, 3], 2, 3), E = FinFunction(1:0, 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:3, E:0}), ACSetTransformation((V = FinFunction([2], 1, 2), E = FinFunction(1:0, 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}))\n AlgebraicRewriting.Processes.RWStep(Catlab.CategoricalAlgebra.FreeDiagrams.Multispan{Catlab.Graphs.BasicGraphs.Graph, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple, StaticArraysCore.SVector{2, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple}}(Catlab.Graphs.BasicGraphs.Graph:\n V = 1:0\n E = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[], Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple[ACSetTransformation((V = FinFunction(Int64[], 0, 1), E = FinFunction(Int64[], 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}), ACSetTransformation((V = id(FinSet(0)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:0, E:0})]), Catlab.CategoricalAlgebra.FreeDiagrams.Multispan{Catlab.Graphs.BasicGraphs.Graph, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple, StaticArraysCore.SVector{2, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple}}(Catlab.Graphs.BasicGraphs.Graph:\n V = 1:1\n E = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[], Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple[ACSetTransformation((V = FinFunction([2], 1, 2), E = FinFunction(1:0, 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}), ACSetTransformation((V = id(FinSet(1)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:1, E:0})]), ACSetTransformation((V = FinFunction([1], 1, 2), E = FinFunction(1:0, 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}), ACSetTransformation((V = FinFunction(Int64[], 0, 1), E = FinFunction(Int64[], 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}))" + }, + "metadata": {}, + "execution_count": 22 + } + ], + "cell_type": "code", + "source": [ + "M3 = ACSetTransformation(G1, G2; V=[1])\n", + "CM3 = create(G1)\n", + "Pmap3 = Span(ACSetTransformation(G1, G2; V=[2]), id(G1))\n", + "RS3 = RWStep(Rule1, Pmap3, M3, CM3)\n", + "\n", + "steps = [RS1, RS2, RS3]" + ], + "metadata": {}, + "execution_count": 22 + }, + { + "cell_type": "markdown", + "source": [ + "g = find_deps(steps)\n", + "to_graphviz(g; node_labels=true)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "expected = @acset Graph begin\n", + " V = 3\n", + " E = 1\n", + " src = 1\n", + " tgt = 2\n", + "end\n", + "@test expected == g" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "# Interface that just uses rules and match morphisms:\n", + "# The matches needed to be updated to reflect the particular isomorph that DPO\n", + "# rewriting produces when applying the rule.\n", + "σ₂ = ACSetTransformation(G2, G2; V=[2, 1])\n", + "σ₃ = ACSetTransformation(G3, G3; V=[3, 1, 2])" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "g′ = find_deps([R3 => M1, R2 => M2 ⋅ σ₃, R1 => M3 ⋅ σ₂])\n", + "@test g′ == g" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "###################################" + ], + "metadata": {}, + "execution_count": 23 + }, + { + "cell_type": "markdown", + "source": [ + "10. General purpose programming #" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "\"see lotka_volterra.jl\"" + }, + "metadata": {}, + "execution_count": 24 + } + ], + "cell_type": "code", + "source": [ + "###################################\n", + "\n", + "\"\"\"see lotka_volterra.jl\"\"\"" + ], + "metadata": {}, + "execution_count": 24 + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.9.4" + }, + "kernelspec": { + "name": "julia-1.9", + "display_name": "Julia 1.9.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/docs/src/generated/full_demo.md b/docs/src/generated/full_demo.md new file mode 100644 index 0000000..c33e099 --- /dev/null +++ b/docs/src/generated/full_demo.md @@ -0,0 +1,559 @@ +```@meta +EditURL = "../../literate/full_demo.jl" +``` + +````@example full_demo +using AlgebraicRewriting +using Catlab, Catlab.CategoricalAlgebra, Catlab.Graphics, Catlab.Graphs, Catlab.Programs, Catlab.Theories +import AlgebraicPetri +using Test + + +""" +This is a self-contained walkthrough of the main features of AlgebraicRewriting. +This is a regular julia file that can be run interactively. + +Importantly: + - use Julia 1.9 (not yet official released) + - ]activate the environment in AlgebraicRewriting.jl/docs + - check that graphviz is installed locally (test via "which dot" in terminal) + +Table of contents: + +1. DPO +2. SPO +3. SqPO +4. PBPO+ +5. Generalizing graphs: C-Sets, Slices, etc. +6. Application conditions +7. Attribute variables +8. Graph processes +9. General purpose programming / agent-based modeling + a. Rewrite and Control Flow boxes + b. Agents and Query boxes + c. Data migration + d. Monadic output + +The VS Code REPL makes it easy to have figures automatically pop up in a side +window, so this is the preferred way of interacting with this file. However, if +that is not available, your options are to +1.) copy-paste the code into a Jupyter notebook +2.) use the following `to_svg` function, which will write a graphviz output to + a SVG file and can be viewed in a browser. The Julia pipe syntax |> allows + you to easily append " |> to_svg " to a line with a visualization. +""" +to_svg(G, filename="tmp.svg") = + open(filename, "w") do io + show(io, "image/svg+xml", G) + end + +to_graphviz(path_graph(Graph, 3)) # |> to_svg + +########## +```` + +1. DPO # + +````@example full_demo +########## + +""" +We construct a rule by providing a span, L ← I → R +""" + +L = path_graph(Graph, 2) # • → • +I = Graph(1) # • +R = @acset Graph begin + V = 1 + E = 1 + src = 1 + tgt = 1 +end # •↺ +l = CSetTransformation(I, L; V=[1]) # graph homomorphism data +r = CSetTransformation(I, R; V=[1]) + +rule = Rule(l, r) +G = path_graph(Graph, 5) # • → • → • → • → • + +m = only(get_matches(rule, G)) # only one match which satisfies dangling condition + +"""We can rewrite with a specific match""" + +res = rewrite_match(rule, m) # • → • → • → •↺ +to_graphviz(res; node_labels=true) +```` + +Note that C-Sets are morally regarded up to isomorphism - in particular, +limits and colimits may modify the orderings of edges/vertices + +````@example full_demo +expected = @acset Graph begin + V = 4 + E = 4 + src = [1, 2, 3, 4] + tgt = [2, 3, 4, 4] +end +@test is_isomorphic(expected, res) + +""" +We can also specify the rule via a colimit-of-representables (i.e. generators +and relations) syntax. As your schema gets bigger, this becomes more and more +convenient. Assigning temporary names to the C-Set elements can also be helpful. +""" +yG = yoneda_cache(Graph, clear=true); # compute representables + +rule2 = Rule(@migration(SchRulel, SchGraph, begin + L => @join begin + e::E + end + K => @join begin + v::V + end + R => @join begin + eᵣ::E + src(eᵣ) == tgt(eᵣ) + end + l => begin + v => src(e) + end + end), yG) + +"""We can rewrite without a match (and let it pick an arbitrary match)""" + +@test res == rewrite(rule, G) + +########## +```` + +2. SPO # + +````@example full_demo +########## + +""" +Rules are by default DPO, but if we specify a type parameter we can change +the semantics +""" + +rule_spo = Rule{:SPO}(l, r) # (same data as before) + +@test length(get_matches(rule_spo, G)) == 4 # there are now four matches +res = rewrite(rule_spo, G) +to_graphviz(res) +@test is_isomorphic(res, path_graph(Graph, 3) ⊕ R) +```` + +note that ⊕ and ⊗ are shorthand for (co)products +Julia lets you easily write unicode symbols via "\" followed by a LaTeX name + +````@example full_demo +########### +```` + +3. SqPO # + +````@example full_demo +########### + +"""If we duplicate a vertex with an incident edge, it will duplicate the edge""" + +L = Graph(1) +I = Graph(2) +R = path_graph(Graph, 2) + +""" +We can use automated homomorphism search to reduce the tedium of specifying +data manually. In this case, there is a unique option +""" + +l = homomorphism(I, L) + +""" +There are many constraints we can put on the search, such as being monic. +""" + +r = homomorphism(I, R; monic=true) + +rule_sqpo = Rule{:SqPO}(l, r) # same data as before) + + +G = star_graph(Graph, 6) # a 5-pointed star +to_graphviz(G; prog="neato") # changing "prog" can sometimes make it look better + +m = CSetTransformation(Graph(1), G; V=[6]) # point at the center +res = rewrite_match(rule_sqpo, m) +to_graphviz(res; prog="neato") + +############ +```` + +4. PBPO+ # + +````@example full_demo +############ + +""" +PBPO+ requires not merely a span but also additional data for L and K which can +be thought of as type graphs. The graph G that we rewrite will be typed over +the L' type graph to determine how it is rewritten. +""" + +L = Graph(1) +K = Graph(2) +l = homomorphism(K, L) +r = id(K) +```` + +We allow edges into and out of the matched vertex as well as edges +between the vertices incident to the matched vertex + +````@example full_demo +L′ = @acset Graph begin + V = 3 + E = 6 + src = [1, 1, 1, 2, 3, 3] + tgt = [1, 2, 3, 3, 3, 1] +end +tl = CSetTransformation(L, L′; V=[2]) # 2 is the matched vertex +to_graphviz(L′; node_labels=true) +```` + +The outneighbors of the matched vertex are duplicated (an edge connects the +old ones to the new ones) and the matched vertex is duplicated. The new copy +of the matched vertex points at the new ones. It does not have any inneighbors. + +````@example full_demo +K′ = @acset Graph begin + V = 5 + E = 9 + src = [1, 1, 1, 2, 3, 3, 3, 4, 5] + tgt = [1, 2, 3, 3, 3, 1, 5, 5, 5] +end +tk = CSetTransformation(K, K′; V=[2, 4]) +to_graphviz(K′; node_labels=true) + +l′ = homomorphism(K′, L′; initial=(V=[1, 2, 3, 2, 3],)) + +prule = PBPORule(l, r, tl, tk, l′) +```` + +Apply to an example vertex (#3) with two inneighbors and one outneighbor. + +````@example full_demo +G = @acset Graph begin + V = 4 + E = 5 + src = [1, 1, 2, 3, 4] + tgt = [2, 3, 3, 4, 4] +end +to_graphviz(G; node_labels=true) + +m = get_match(prule, G; initial=(V=[3],) => Dict()) + +res = rewrite_match(prule, m) +```` + +V1 is copied to V2. Outneighbor V5 (w/ loop) is copied to V6, creating an edge + +````@example full_demo +to_graphviz(res; node_labels=true) + +########################## +```` + +5. Generalizing Graphs # + +````@example full_demo +########################## + +""" +Any data structure which implements the required functions we need can, in +principle, be used for rewriting. Importantly this includes pushout_complement, +pushout, and homomorphism search. These are all implemented generically for +any C-Set schema (allowing us to rewrite Petri nets, Semisimplicial sets, etc.) + +Here we'll do rewriting in graphs sliced over •⇆•, which is isomorphic to the +category of (whole-grain) Petri nets, with States and Transitions. +""" + + +function graph_slice(s::Slice) + h = s.slice + V, E = collect.([h[:V], h[:E]]) + g = dom(h) + (S, T), (I, O) = [[findall(==(i), X) for i in 1:2] for X in [V, E]] + nS, nT, nI, nO = length.([S, T, I, O]) + findS, findT = [x -> findfirst(==(x), X) for X in [S, T]] + to_graphviz(@acset AlgebraicPetri.PetriNet begin + S = nS + T = nT + I = nI + O = nO + is = findS.(g[I, :src]) + it = findT.(g[I, :tgt]) + ot = findT.(g[O, :src]) + os = findS.(g[O, :tgt]) + end) +end; + +""" this is the graph we are slicing over """ + +two = @acset Graph begin + V = 2 + E = 2 + src = [1, 2] + tgt = [2, 1] +end + +""" Define a rule which deletes a [T] -> S edge""" + +L_ = path_graph(Graph, 2) +L = Slice(ACSetTransformation(L_, two, V=[2, 1], E=[2])) # [T] ⟶ (S) +graph_slice(L) + +I_ = Graph(1) +I = Slice(ACSetTransformation(I_, two, V=[2])) # [T] +R_ = Graph(2) +R = Slice(ACSetTransformation(R_, two, V=[2, 1])) # [T] (S) + +"""Using homomorphism search in the slice category""" + +rule = Rule(homomorphism(I, L), homomorphism(I, R)) + +G_ = path_graph(Graph, 3) +G = Slice(ACSetTransformation(G_, two, V=[1, 2, 1], E=[1, 2])) # (S) ⟶ [T] ⟶ (S) +graph_slice(G) + +res = rewrite(rule, G) # (S) ⟶ [T] (S) +graph_slice(res) + +""" +While the vast majority of functionality is focused on ACSets at the present +moment, but there is nothing in principle which limits this. +""" + +############################# +```` + +6. Application conditions # + +````@example full_demo +############################# + +""" +We can construct commutative diagrams with certain edges left unspecified or +marked with ∀ or ∃. If only one edge is left free, we can treat the diagram as +a boolean function which tests whether the morphism makes the specified paths +commute (or not commute). This generalizes positive/negative application +conditions and lifting conditions, but because those are most common there are +constructors AppCond and LiftCond to make these directly. + + ∀ + [↻•] → ? + ↓ ↗ ∃ ↓ + [↻•⟶•] → [↻•⟶•⟵•↺] + +Every vertex with a loop also has a map to the vertex marked by the bottom map. +""" +t = terminal(Graph) |> apex +looparr = @acset_colim yG begin + (e1, e2)::E + src(e1) == tgt(e1) + src(e1) == src(e2) +end + +v = homomorphism(t, looparr) +loop_csp = @acset Graph begin + V = 3 + E = 4 + src = [1, 3, 1, 3] + tgt = [1, 3, 2, 2] +end +b = homomorphism(looparr, loop_csp; monic=true) +constr = LiftCond(v, b) + +@test !apply_constraint(constr, homomorphism(t, loop_csp)) +@test apply_constraint(constr, b) + +"""We can combining constraints with logical combinators""" +```` + +match vertex iff it has 2 or 3 self loops + +````@example full_demo +one, two, three, four, five = [@acset(Graph, begin + V = 1 + E = n + src = 1 + tgt = 1 +end) for n in 1:5] + +c2 = AppCond(homomorphism(Graph(1), two); monic=true) # PAC +c3 = AppCond(homomorphism(Graph(1), four), false; monic=true) # NAC +constr = c2 ⊗ c3 # logical conjunction: 2 ≤ |E| < 4 + +rule = Rule(id(Graph(1)), id(Graph(1)); ac=[constr]) + +G = two ⊕ three ⊕ two ⊕ four ⊕ five ⊕ one + +@test length(get_matches(rule, G)) == 3 + +########################## +```` + +7. Attribute variables # + +````@example full_demo +########################## + +""" +Normally ACSet morphisms must match attribute values exactly, i.e. a weighted +graph edge of 8.3 can only be mapped to another edge weighted at 8.3. This +becomes very restricted, especially when we want to do some simple computations +with attribute values (e.g. when merging two edges, add their values together) + +A recent extension of ACSets makes this possible - each attribute type comes +equipped with a finite set of "variables" which can be mapped to any concrete +value (or another variable). +""" + +yWG = yoneda_cache(WeightedGraph{Int}; clear=true); +L = @acset_colim yWG begin + (e1, e2)::E + src(e1) == src(e2) + tgt(e1) == tgt(e2) +end +I = WeightedGraph{Int}(2) +R = @acset WeightedGraph{Int} begin + V = 2 + E = 1 + Weight = 1 + src = 1 + tgt = 2 + weight = [AttrVar(1)] +end + +l = homomorphism(I, L; monic=true) +r = homomorphism(I, R; monic=true) +rule = Rule(l, r; monic=[:E], expr=Dict(:Weight => [xs -> xs[1] + xs[2]])) + +G = @acset WeightedGraph{Int} begin + V = 1 + E = 3 + src = 1 + tgt = 1 + weight = [10, 20, 100] +end + +@test rewrite(rule, G) == @acset WeightedGraph{Int} begin + V = 1 + E = 2 + src = 1 + tgt = 1 + weight = [30, 100] +end + +###################### +```` + +8. Graph processes # + +````@example full_demo +###################### + +""" +A sequence of rewrite applications can be given a poset structure where α ≤ β +means that the rule application α needed to occur before β. This is computed +via analyzing the colimit of all the partial maps induced by the rewrites. +""" + +using AlgebraicRewriting.Processes: RWStep, find_deps + +G0, G1, G2, G3 = Graph.([0, 1, 2, 3]) +```` + +Delete a node + +````@example full_demo +Rule1 = Span(create(G1), id(G0)); +nothing #hide +```` + +Merge two nodes + +````@example full_demo +Rule2 = Span(id(G2), homomorphism(G2, G1)); +nothing #hide +```` + +Add a node + +````@example full_demo +Rule3 = Span(id(G0), create(G1)) + +R1, R2, R3 = [Rule(l, r) for (l, r) in [Rule1, Rule2, Rule3]] + +### Trajectory +```` + +step 1: add node #3 to G2 + +````@example full_demo +M1 = create(G2) +CM1 = ACSetTransformation(G1, G3; V=[3]) +Pmap1 = Span(id(G2), ACSetTransformation(G2, G3; V=[1, 2])) +RS1 = RWStep(Rule3, Pmap1, M1, CM1) +```` + +Step 2: merge node 2 and 3 to yield a G2 + +````@example full_demo +M2 = ACSetTransformation(G2, G3; V=[2, 3]) +CM2 = ACSetTransformation(G1, G2; V=[2]) +Pmap2 = Span(id(G3), ACSetTransformation(G3, G2; V=[1, 2, 2])) +RS2 = RWStep(Rule2, Pmap2, M2, CM2) +```` + +Step 3: delete vertex 1 + +````@example full_demo +M3 = ACSetTransformation(G1, G2; V=[1]) +CM3 = create(G1) +Pmap3 = Span(ACSetTransformation(G1, G2; V=[2]), id(G1)) +RS3 = RWStep(Rule1, Pmap3, M3, CM3) + +steps = [RS1, RS2, RS3] +```` + +g = find_deps(steps) +to_graphviz(g; node_labels=true) + +expected = @acset Graph begin + V = 3 + E = 1 + src = 1 + tgt = 2 +end +@test expected == g + +# Interface that just uses rules and match morphisms: +# The matches needed to be updated to reflect the particular isomorph that DPO +# rewriting produces when applying the rule. +σ₂ = ACSetTransformation(G2, G2; V=[2, 1]) +σ₃ = ACSetTransformation(G3, G3; V=[3, 1, 2]) + +g′ = find_deps([R3 => M1, R2 => M2 ⋅ σ₃, R1 => M3 ⋅ σ₂]) +@test g′ == g + +````@example full_demo +################################### +```` + +10. General purpose programming # + +````@example full_demo +################################### + +"""see lotka_volterra.jl""" +```` + diff --git a/docs/src/generated/game_of_life.ipynb b/docs/src/generated/game_of_life.ipynb new file mode 100644 index 0000000..5277d4c --- /dev/null +++ b/docs/src/generated/game_of_life.ipynb @@ -0,0 +1,439 @@ +{ + "cells": [ + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "\"The game of life has two rules: one which turns living things dead, and one\\nthat brings dead things to life. We model the terrain as a symmetric graph:\\ncells are vertices. Neighboring cells have edges between them.\\n\\nImplementationwise, if we are going to update\\ncells one at a time, we must keep track of two bits of information (the cell's\\nliving status for the *current* timestep and whether it will be alive in the\\n*next* timestep). Thus we need helper rule to overwrite the \\\"current\\\"\\nlife status with the \\\"next\\\" life status at the end of each timestep.\\n\"" + }, + "metadata": {}, + "execution_count": 1 + } + ], + "cell_type": "code", + "source": [ + "using AlgebraicRewriting\n", + "using Catlab, Catlab.Graphs, Catlab.CategoricalAlgebra, Catlab.Theories\n", + "import Catlab.Graphics: to_graphviz\n", + "using Catlab.Graphics.Graphviz: Attributes, Statement, Node, Edge, Digraph\n", + "using PrettyTables\n", + "using Luxor\n", + "\n", + "\"\"\"\n", + "The game of life has two rules: one which turns living things dead, and one\n", + "that brings dead things to life. We model the terrain as a symmetric graph:\n", + "cells are vertices. Neighboring cells have edges between them.\n", + "\n", + "Implementationwise, if we are going to update\n", + "cells one at a time, we must keep track of two bits of information (the cell's\n", + "living status for the *current* timestep and whether it will be alive in the\n", + "*next* timestep). Thus we need helper rule to overwrite the \"current\"\n", + "life status with the \"next\" life status at the end of each timestep.\n", + "\"\"\"" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "Schema" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Migrate(Dict(:Curr => :Curr, :V => :V, :Next => :Next, :E => :E), Dict(:src => :src, :next => :next, :curr => :curr, :tgt => :tgt, :inv => :inv), Main.var\"##295\".AbsLifeCoords{Tuple{Int64, Int64}}, Main.var\"##295\".AbsLifeCoords{Tuple{Int64, Int64}}, false)" + }, + "metadata": {}, + "execution_count": 2 + } + ], + "cell_type": "code", + "source": [ + "########\n", + "\n", + "\"\"\"\n", + "`curr` and `next` pick out subsets of V which are marked as currently alive or\n", + "to be alive in the next timestep.\n", + "\"\"\"\n", + "@present SchLife <: SchSymmetricGraph begin\n", + " (Curr, Next)::Ob\n", + " curr::Hom(Curr, V)\n", + " next::Hom(Next, V)\n", + "end\n", + "@present SchLifeCoords <: SchLife begin\n", + " Coords::AttrType\n", + " coords::Attr(V, Coords)\n", + "end\n", + "@acset_type Life(SchLife) <: AbstractSymmetricGraph\n", + "@acset_type AbsLifeCoords(SchLifeCoords) <: AbstractSymmetricGraph\n", + "const LifeCoords = AbsLifeCoords{Tuple{Int,Int}}\n", + "F = Migrate(\n", + " Dict(x => x for x in Symbol.(generators(SchLife, :Ob))),\n", + " Dict(x => x for x in Symbol.(generators(SchLife, :Hom))), LifeCoords; delta=false)" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "Helper" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "########" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "Visualization" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "view_life (generic function with 6 methods)" + }, + "metadata": {}, + "execution_count": 4 + } + ], + "cell_type": "code", + "source": [ + "function view_life(f::ACSetTransformation, pth=tempname())\n", + " v = collect(f[:V])\n", + " view_life(codom(f), pth; star=isempty(v) ? nothing : only(v))\n", + "end\n", + "function view_life(X::Life, pth=tempname(); star=nothing)\n", + " pg = PropertyGraph{Any}(; prog=\"neato\", graph=Dict(),\n", + " node=Dict(:shape => \"circle\", :style => \"filled\", :margin => \"0\"),\n", + " edge=Dict(:dir => \"none\", :minlen => \"1\"))\n", + " add_vertices!(pg, nparts(X, :V))\n", + " for v in vertices(X)\n", + " set_vprop!(pg, v, :fillcolor, isempty(incident(X, v, :curr)) ? \"red\" : \"green\")\n", + " if !isempty(incident(X, v, :next))\n", + " set_vprop!(pg, v, :penwidth, \"4.0\")\n", + " end\n", + " set_vprop!(pg, v, :label, star == v ? \"*\" : \"\")\n", + " end\n", + " for e in filter(e -> X[e, :inv] > e, edges(X))\n", + " add_edge!(pg, X[e, :src], X[e, :tgt])\n", + " end\n", + " G = to_graphviz(pg)\n", + " open(pth, \"w\") do io\n", + " show(io, \"image/svg+xml\", G)\n", + " end\n", + " G\n", + "end\n", + "function view_life(X::LifeCoords, pth=tempname(); star=nothing)\n", + " n = Int(sqrt(nparts(X, :V)))\n", + " coords = Dict([(i, j) => findfirst(==((i, j)), X[:coords])\n", + " for (i, j) in Iterators.product(1:n, 1:n)])\n", + " mat = pretty_table(String, reduce(hcat, map(1:n) do i\n", + " map(1:n) do j\n", + " c, x = [!isempty(incident(X, coords[(i, j)], x)) for x in [:curr, :next]]\n", + " res = c ? (x ? \"O\" : \"o\") : (x ? \"X\" : \"x\")\n", + " return res * ((star == coords[(i, j)]) ? \".\" : \"\")\n", + " end\n", + " end); show_header=false, tf=tf_markdown)\n", + " open(pth, \"w\") do io\n", + " write(io, mat)\n", + " end\n", + " return mat\n", + "end" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "Constructions for Life ACSets / maps between them" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Main.var\"##295\".living_neighbors" + }, + "metadata": {}, + "execution_count": 5 + } + ], + "cell_type": "code", + "source": [ + "Next() = @acset Life begin\n", + " V = 1\n", + " Next = 1\n", + " next = 1\n", + "end\n", + "Curr() = @acset Life begin\n", + " V = 1\n", + " Curr = 1\n", + " curr = 1\n", + "end\n", + "to_next() = homomorphism(Life(1), Next())\n", + "to_curr() = homomorphism(Life(1), Curr())\n", + "\n", + "\"\"\"Construct a cell connected to n living neighbors\"\"\"\n", + "function living_neighbors(n::Int; alive=false)\n", + " X = Life(1)\n", + " if alive\n", + " add_part!(X, :Curr, curr=1)\n", + " end\n", + " for _ in 1:n\n", + " v = add_part!(X, :V)\n", + " add_part!(X, :Curr, curr=v)\n", + " add_edge!(X, v, 1)\n", + " end\n", + " return X\n", + "end" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "Initialization of LifeCoords" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "make_grid (generic function with 4 methods)" + }, + "metadata": {}, + "execution_count": 6 + } + ], + "cell_type": "code", + "source": [ + "function make_grid(curr::AbstractMatrix, next=nothing)\n", + " n, m = size(curr)\n", + " n == m || error(\"Must be square\")\n", + " X, coords = LifeCoords(), Dict()\n", + " for i in 1:n\n", + " for j in 1:n\n", + " coords[i=>j] = add_vertex!(X; coords=(i, j))\n", + " if Bool(curr[i, j])\n", + " add_part!(X, :Curr, curr=coords[i=>j])\n", + " end\n", + " if !isnothing(next) && Bool(next[i, j])\n", + " add_part!(X, :Curr, curr=coords[i=>j])\n", + " end\n", + " end\n", + " end\n", + " for i in 1:n\n", + " for j in 1:n\n", + " if i < n\n", + " add_edge!(X, coords[i=>j], coords[i+1=>j])\n", + " end\n", + " if j < n\n", + " add_edge!(X, coords[i=>j], coords[i=>j+1])\n", + " end\n", + " if i < n && j < n\n", + " add_edge!(X, coords[i=>j], coords[i+1=>j+1])\n", + " end\n", + " if i < n && j > 1\n", + " add_edge!(X, coords[i=>j], coords[i+1=>j-1])\n", + " end\n", + " end\n", + " end\n", + " return X\n", + "end\n", + "make_grid(n::Int, random=false) = make_grid((random ? rand : zeros)(Bool, (n, n)))" + ], + "metadata": {}, + "execution_count": 6 + }, + { + "cell_type": "markdown", + "source": [ + "Rules" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "#######" + ], + "metadata": {}, + "execution_count": 7 + }, + { + "cell_type": "markdown", + "source": [ + "A dead cell becomes alive iff exactly 3 living neighbors" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Rule{:DPO}(ACSetTransformation((V = id(FinSet(1)), E = id(FinSet(0)), Curr = id(FinSet(0)), Next = id(FinSet(0))), Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:0}), ACSetTransformation((V = FinFunction([1], 1, 1), E = FinFunction(Int64[], 0, 0), Curr = FinFunction(Int64[], 0, 0), Next = FinFunction(Int64[], 0, 1)), Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:1}), Constraint[Constraint(CGraph:\n V = 1:3\n E = 1:3\n VLabel = 1:0\n ELabel = 1:0\n src : E → V = [2, 1, 2]\n tgt : E → V = [1, 3, 3]\n vlabel : V → VLabel = Union{Nothing, Main.var\"##295\".Life}[Main.var\"##295\".Life:\n V = 1:4\n E = 1:6\n Curr = 1:3\n Next = 1:0\n src : E → V = [2, 1, 3, 1, 4, 1]\n tgt : E → V = [1, 2, 1, 3, 1, 4]\n inv : E → E = [2, 1, 4, 3, 6, 5]\n curr : Curr → V = [2, 3, 4]\n next : Next → V = Int64[], Main.var\"##295\".Life:\n V = 1:1\n E = 1:0\n Curr = 1:0\n Next = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n inv : E → E = Int64[]\n curr : Curr → V = Int64[]\n next : Next → V = Int64[], nothing]\n elabel : E → ELabel = Any[ACSetTransformation((V = FinFunction([1], 1, 4), E = FinFunction(Int64[], 0, 6), Curr = FinFunction(Int64[], 0, 3), Next = FinFunction(Int64[], 0, 0)), Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##295\".Life {V:4, E:6, Curr:3, Next:0}), nothing, 1], AlgebraicRewriting.Rewrite.Constraints.Quantifier(2, :Exists, Commutes([[1, 2], [3]], true), AlgebraicRewriting.Rewrite.Constraints.BoolConst(true), true)), Constraint(CGraph:\n V = 1:3\n E = 1:3\n VLabel = 1:0\n ELabel = 1:0\n src : E → V = [2, 1, 2]\n tgt : E → V = [1, 3, 3]\n vlabel : V → VLabel = Union{Nothing, Main.var\"##295\".Life}[Main.var\"##295\".Life:\n V = 1:5\n E = 1:8\n Curr = 1:4\n Next = 1:0\n src : E → V = [2, 1, 3, 1, 4, 1, 5, 1]\n tgt : E → V = [1, 2, 1, 3, 1, 4, 1, 5]\n inv : E → E = [2, 1, 4, 3, 6, 5, 8, 7]\n curr : Curr → V = [2, 3, 4, 5]\n next : Next → V = Int64[], Main.var\"##295\".Life:\n V = 1:1\n E = 1:0\n Curr = 1:0\n Next = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n inv : E → E = Int64[]\n curr : Curr → V = Int64[]\n next : Next → V = Int64[], nothing]\n elabel : E → ELabel = Any[ACSetTransformation((V = FinFunction([1], 1, 5), E = FinFunction(Int64[], 0, 8), Curr = FinFunction(Int64[], 0, 4), Next = FinFunction(Int64[], 0, 0)), Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##295\".Life {V:5, E:8, Curr:4, Next:0}), nothing, 1], AlgebraicRewriting.Rewrite.Constraints.BoolNot(AlgebraicRewriting.Rewrite.Constraints.Quantifier(2, :Exists, Commutes([[1, 2], [3]], true), AlgebraicRewriting.Rewrite.Constraints.BoolConst(true), true))), Constraint(CGraph:\n V = 1:3\n E = 1:3\n VLabel = 1:0\n ELabel = 1:0\n src : E → V = [2, 1, 2]\n tgt : E → V = [1, 3, 3]\n vlabel : V → VLabel = Union{Nothing, Main.var\"##295\".Life}[Main.var\"##295\".Life:\n V = 1:1\n E = 1:0\n Curr = 1:1\n Next = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n inv : E → E = Int64[]\n curr : Curr → V = [1]\n next : Next → V = Int64[], Main.var\"##295\".Life:\n V = 1:1\n E = 1:0\n Curr = 1:0\n Next = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n inv : E → E = Int64[]\n curr : Curr → V = Int64[]\n next : Next → V = Int64[], nothing]\n elabel : E → ELabel = Any[ACSetTransformation((V = FinFunction([1], 1, 1), E = FinFunction(Int64[], 0, 0), Curr = FinFunction(Int64[], 0, 1), Next = FinFunction(Int64[], 0, 0)), Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##295\".Life {V:1, E:0, Curr:1, Next:0}), nothing, 1], AlgebraicRewriting.Rewrite.Constraints.BoolNot(AlgebraicRewriting.Rewrite.Constraints.Quantifier(2, :Exists, Commutes([[1, 2], [3]], true), AlgebraicRewriting.Rewrite.Constraints.BoolConst(true), true)))], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())" + }, + "metadata": {}, + "execution_count": 8 + } + ], + "cell_type": "code", + "source": [ + "BirthP1 = living_neighbors(3) # must have 3 neighbors\n", + "BirthN1 = living_neighbors(4) # forbid the cell to have 4 neighbors\n", + "BirthN2 = Curr() # forbid the cell to be alive (i.e. it's currently dead)\n", + "BP1, BN1, BN2 = homomorphism.(Ref(Life(1)), [BirthP1, BirthN1, BirthN2])\n", + "bac = [AppCond(BP1; monic=true), AppCond.([BN1, BN2], false; monic=true)...]\n", + "Birth = Rule(id(Life(1)), to_next(); ac=bac)" + ], + "metadata": {}, + "execution_count": 8 + }, + { + "cell_type": "markdown", + "source": [ + "A living cell stays alive iff 2 or 3 living neighbors" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "5-element Vector{Pair{Symbol, Rule{:DPO}}}:\n :Birth => Rule{:DPO}(ACSetTransformation((V = id(FinSet(1)), E = id(FinSet(0)), Curr = id(FinSet(0)), Next = id(FinSet(0))), Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:0}), ACSetTransformation((V = FinFunction([1], 1, 1), E = FinFunction(Int64[], 0, 0), Curr = FinFunction(Int64[], 0, 0), Next = FinFunction(Int64[], 0, 1)), Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:1}), Constraint[Constraint(CGraph:\n V = 1:3\n E = 1:3\n VLabel = 1:0\n ELabel = 1:0\n src : E → V = [2, 1, 2]\n tgt : E → V = [1, 3, 3]\n vlabel : V → VLabel = Union{Nothing, Main.var\"##295\".Life}[Main.var\"##295\".Life:\n V = 1:4\n E = 1:6\n Curr = 1:3\n Next = 1:0\n src : E → V = [2, 1, 3, 1, 4, 1]\n tgt : E → V = [1, 2, 1, 3, 1, 4]\n inv : E → E = [2, 1, 4, 3, 6, 5]\n curr : Curr → V = [2, 3, 4]\n next : Next → V = Int64[], Main.var\"##295\".Life:\n V = 1:1\n E = 1:0\n Curr = 1:0\n Next = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n inv : E → E = Int64[]\n curr : Curr → V = Int64[]\n next : Next → V = Int64[], nothing]\n elabel : E → ELabel = Any[ACSetTransformation((V = FinFunction([1], 1, 4), E = FinFunction(Int64[], 0, 6), Curr = FinFunction(Int64[], 0, 3), Next = FinFunction(Int64[], 0, 0)), Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##295\".Life {V:4, E:6, Curr:3, Next:0}), nothing, 1], AlgebraicRewriting.Rewrite.Constraints.Quantifier(2, :Exists, Commutes([[1, 2], [3]], true), AlgebraicRewriting.Rewrite.Constraints.BoolConst(true), true)), Constraint(CGraph:\n V = 1:3\n E = 1:3\n VLabel = 1:0\n ELabel = 1:0\n src : E → V = [2, 1, 2]\n tgt : E → V = [1, 3, 3]\n vlabel : V → VLabel = Union{Nothing, Main.var\"##295\".Life}[Main.var\"##295\".Life:\n V = 1:5\n E = 1:8\n Curr = 1:4\n Next = 1:0\n src : E → V = [2, 1, 3, 1, 4, 1, 5, 1]\n tgt : E → V = [1, 2, 1, 3, 1, 4, 1, 5]\n inv : E → E = [2, 1, 4, 3, 6, 5, 8, 7]\n curr : Curr → V = [2, 3, 4, 5]\n next : Next → V = Int64[], Main.var\"##295\".Life:\n V = 1:1\n E = 1:0\n Curr = 1:0\n Next = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n inv : E → E = Int64[]\n curr : Curr → V = Int64[]\n next : Next → V = Int64[], nothing]\n elabel : E → ELabel = Any[ACSetTransformation((V = FinFunction([1], 1, 5), E = FinFunction(Int64[], 0, 8), Curr = FinFunction(Int64[], 0, 4), Next = FinFunction(Int64[], 0, 0)), Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##295\".Life {V:5, E:8, Curr:4, Next:0}), nothing, 1], AlgebraicRewriting.Rewrite.Constraints.BoolNot(AlgebraicRewriting.Rewrite.Constraints.Quantifier(2, :Exists, Commutes([[1, 2], [3]], true), AlgebraicRewriting.Rewrite.Constraints.BoolConst(true), true))), Constraint(CGraph:\n V = 1:3\n E = 1:3\n VLabel = 1:0\n ELabel = 1:0\n src : E → V = [2, 1, 2]\n tgt : E → V = [1, 3, 3]\n vlabel : V → VLabel = Union{Nothing, Main.var\"##295\".Life}[Main.var\"##295\".Life:\n V = 1:1\n E = 1:0\n Curr = 1:1\n Next = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n inv : E → E = Int64[]\n curr : Curr → V = [1]\n next : Next → V = Int64[], Main.var\"##295\".Life:\n V = 1:1\n E = 1:0\n Curr = 1:0\n Next = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n inv : E → E = Int64[]\n curr : Curr → V = Int64[]\n next : Next → V = Int64[], nothing]\n elabel : E → ELabel = Any[ACSetTransformation((V = FinFunction([1], 1, 1), E = FinFunction(Int64[], 0, 0), Curr = FinFunction(Int64[], 0, 1), Next = FinFunction(Int64[], 0, 0)), Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##295\".Life {V:1, E:0, Curr:1, Next:0}), nothing, 1], AlgebraicRewriting.Rewrite.Constraints.BoolNot(AlgebraicRewriting.Rewrite.Constraints.Quantifier(2, :Exists, Commutes([[1, 2], [3]], true), AlgebraicRewriting.Rewrite.Constraints.BoolConst(true), true)))], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())\n :Persist => Rule{:DPO}(ACSetTransformation((V = id(FinSet(1)), E = id(FinSet(0)), Curr = id(FinSet(1)), Next = id(FinSet(0))), Main.var\"##295\".Life {V:1, E:0, Curr:1, Next:0}, Main.var\"##295\".Life {V:1, E:0, Curr:1, Next:0}), ACSetTransformation((V = FinFunction([1], 1, 1), E = FinFunction(Int64[], 0, 0), Curr = FinFunction([1], 1, 1), Next = FinFunction(Int64[], 0, 1)), Main.var\"##295\".Life {V:1, E:0, Curr:1, Next:0}, Main.var\"##295\".Life {V:1, E:0, Curr:1, Next:1}), Constraint[Constraint(CGraph:\n V = 1:3\n E = 1:3\n VLabel = 1:0\n ELabel = 1:0\n src : E → V = [2, 1, 2]\n tgt : E → V = [1, 3, 3]\n vlabel : V → VLabel = Union{Nothing, Main.var\"##295\".Life}[Main.var\"##295\".Life:\n V = 1:3\n E = 1:4\n Curr = 1:3\n Next = 1:0\n src : E → V = [2, 1, 3, 1]\n tgt : E → V = [1, 2, 1, 3]\n inv : E → E = [2, 1, 4, 3]\n curr : Curr → V = [1, 2, 3]\n next : Next → V = Int64[], Main.var\"##295\".Life:\n V = 1:1\n E = 1:0\n Curr = 1:1\n Next = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n inv : E → E = Int64[]\n curr : Curr → V = [1]\n next : Next → V = Int64[], nothing]\n elabel : E → ELabel = Any[ACSetTransformation((V = FinFunction([1], 1, 3), E = FinFunction(Int64[], 0, 4), Curr = FinFunction([1], 1, 3), Next = FinFunction(Int64[], 0, 0)), Main.var\"##295\".Life {V:1, E:0, Curr:1, Next:0}, Main.var\"##295\".Life {V:3, E:4, Curr:3, Next:0}), nothing, 1], AlgebraicRewriting.Rewrite.Constraints.Quantifier(2, :Exists, Commutes([[1, 2], [3]], true), AlgebraicRewriting.Rewrite.Constraints.BoolConst(true), true)), Constraint(CGraph:\n V = 1:3\n E = 1:3\n VLabel = 1:0\n ELabel = 1:0\n src : E → V = [2, 1, 2]\n tgt : E → V = [1, 3, 3]\n vlabel : V → VLabel = Union{Nothing, Main.var\"##295\".Life}[Main.var\"##295\".Life:\n V = 1:5\n E = 1:8\n Curr = 1:5\n Next = 1:0\n src : E → V = [2, 1, 3, 1, 4, 1, 5, 1]\n tgt : E → V = [1, 2, 1, 3, 1, 4, 1, 5]\n inv : E → E = [2, 1, 4, 3, 6, 5, 8, 7]\n curr : Curr → V = [1, 2, 3, 4, 5]\n next : Next → V = Int64[], Main.var\"##295\".Life:\n V = 1:1\n E = 1:0\n Curr = 1:1\n Next = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n inv : E → E = Int64[]\n curr : Curr → V = [1]\n next : Next → V = Int64[], nothing]\n elabel : E → ELabel = Any[ACSetTransformation((V = FinFunction([1], 1, 5), E = FinFunction(Int64[], 0, 8), Curr = FinFunction([1], 1, 5), Next = FinFunction(Int64[], 0, 0)), Main.var\"##295\".Life {V:1, E:0, Curr:1, Next:0}, Main.var\"##295\".Life {V:5, E:8, Curr:5, Next:0}), nothing, 1], AlgebraicRewriting.Rewrite.Constraints.BoolNot(AlgebraicRewriting.Rewrite.Constraints.Quantifier(2, :Exists, Commutes([[1, 2], [3]], true), AlgebraicRewriting.Rewrite.Constraints.BoolConst(true), true)))], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())\n :ClearCurr => Rule{:DPO}(ACSetTransformation((V = FinFunction([1], 1, 1), E = FinFunction(Int64[], 0, 0), Curr = FinFunction(Int64[], 0, 1), Next = FinFunction(Int64[], 0, 0)), Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##295\".Life {V:1, E:0, Curr:1, Next:0}), ACSetTransformation((V = id(FinSet(1)), E = id(FinSet(0)), Curr = id(FinSet(0)), Next = id(FinSet(0))), Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:0}), Constraint[], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())\n :ClearNext => Rule{:DPO}(ACSetTransformation((V = FinFunction([1], 1, 1), E = FinFunction(Int64[], 0, 0), Curr = FinFunction(Int64[], 0, 0), Next = FinFunction(Int64[], 0, 1)), Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:1}), ACSetTransformation((V = id(FinSet(1)), E = id(FinSet(0)), Curr = id(FinSet(0)), Next = id(FinSet(0))), Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:0}), Constraint[], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())\n :CopyNext => Rule{:DPO}(ACSetTransformation((V = FinFunction([1], 1, 1), E = FinFunction(Int64[], 0, 0), Curr = FinFunction(Int64[], 0, 0), Next = FinFunction(Int64[], 0, 1)), Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:1}), ACSetTransformation((V = FinFunction([1], 1, 1), E = FinFunction(Int64[], 0, 0), Curr = FinFunction(Int64[], 0, 1), Next = FinFunction(Int64[], 0, 0)), Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##295\".Life {V:1, E:0, Curr:1, Next:0}), Constraint[], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())" + }, + "metadata": {}, + "execution_count": 9 + } + ], + "cell_type": "code", + "source": [ + "PersistR = @acset Life begin\n", + " V = 1\n", + " Curr = 1\n", + " Next = 1\n", + " curr = 1\n", + " next = 1\n", + "end\n", + "PersistP1 = living_neighbors(2; alive=true)\n", + "PersistN1 = living_neighbors(4; alive=true)\n", + "DR, DP1, DN1 = homomorphism.(Ref(Curr()), [PersistR, PersistP1, PersistN1])\n", + "pac = [AppCond(DP1; monic=true), AppCond(DN1, false; monic=true)]\n", + "Persist = Rule(id(Curr()), DR; ac=pac)\n", + "\n", + "ClearCurr = Rule(to_curr(), id(Life(1))) # remove \"Curr\" status\n", + "ClearNext = Rule(to_next(), id(Life(1))) # remove \"Next\" status\n", + "CopyNext = Rule(to_next(), to_curr()) # Copy \"Next\" to \"Curr\"\n", + "\n", + "rules = [:Birth => Birth, :Persist => Persist, :ClearCurr => ClearCurr,\n", + " :ClearNext => ClearNext, :CopyNext => CopyNext]" + ], + "metadata": {}, + "execution_count": 9 + }, + { + "cell_type": "markdown", + "source": [ + "Schedule" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "##########" + ], + "metadata": {}, + "execution_count": 10 + }, + { + "cell_type": "markdown", + "source": [ + "All rules have interface of a single distinguished cell.\n", + "Never distinguish control flow of successful vs unsuccessful application" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "view_life (generic function with 7 methods)" + }, + "metadata": {}, + "execution_count": 11 + } + ], + "cell_type": "code", + "source": [ + "rBirth, rPersist, rClearCurr, rClearNext, rCopyNext =\n", + " [tryrule(RuleApp(n, r, Life(1))) for (n, r) in rules]\n", + "\n", + "update_next = agent(rBirth ⋅ rPersist, Life(1); n=:Cell)\n", + "next_step = agent(compose(rClearCurr, rCopyNext, rClearNext), Life(1); n=:Cell)\n", + "life(n::Int) = for_schedule(update_next ⋅ next_step, n) |> F\n", + "const L = life(1)\n", + "\n", + "G = make_grid([1 0 1 0 1; 0 1 0 1 0; 0 1 0 1 0; 1 0 1 0 1; 1 0 1 0 1])\n", + "\n", + "res, = apply_schedule(L, G; steps=1000)\n", + "traj = last(res).edge.o.val\n", + "\n", + "view_life(i, traj) = view_life(traj.steps[i].world)" + ], + "metadata": {}, + "execution_count": 11 + }, + { + "cell_type": "markdown", + "source": [ + "view_traj(L, res, view_life; agent=true)" + ], + "metadata": {} + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.9.4" + }, + "kernelspec": { + "name": "julia-1.9", + "display_name": "Julia 1.9.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/docs/src/generated/game_of_life.md b/docs/src/generated/game_of_life.md new file mode 100644 index 0000000..33bdd8d --- /dev/null +++ b/docs/src/generated/game_of_life.md @@ -0,0 +1,242 @@ +```@meta +EditURL = "../../literate/game_of_life.jl" +``` + +````@example game_of_life +using AlgebraicRewriting +using Catlab, Catlab.Graphs, Catlab.CategoricalAlgebra, Catlab.Theories +import Catlab.Graphics: to_graphviz +using Catlab.Graphics.Graphviz: Attributes, Statement, Node, Edge, Digraph +using PrettyTables +using Luxor + +""" +The game of life has two rules: one which turns living things dead, and one +that brings dead things to life. We model the terrain as a symmetric graph: +cells are vertices. Neighboring cells have edges between them. + +Implementationwise, if we are going to update +cells one at a time, we must keep track of two bits of information (the cell's +living status for the *current* timestep and whether it will be alive in the +*next* timestep). Thus we need helper rule to overwrite the "current" +life status with the "next" life status at the end of each timestep. +""" +```` + +Schema + +````@example game_of_life +######## + +""" +`curr` and `next` pick out subsets of V which are marked as currently alive or +to be alive in the next timestep. +""" +@present SchLife <: SchSymmetricGraph begin + (Curr, Next)::Ob + curr::Hom(Curr, V) + next::Hom(Next, V) +end +@present SchLifeCoords <: SchLife begin + Coords::AttrType + coords::Attr(V, Coords) +end +@acset_type Life(SchLife) <: AbstractSymmetricGraph +@acset_type AbsLifeCoords(SchLifeCoords) <: AbstractSymmetricGraph +const LifeCoords = AbsLifeCoords{Tuple{Int,Int}} +F = Migrate( + Dict(x => x for x in Symbol.(generators(SchLife, :Ob))), + Dict(x => x for x in Symbol.(generators(SchLife, :Hom))), LifeCoords; delta=false) +```` + +Helper + +````@example game_of_life +######## +```` + +Visualization + +````@example game_of_life +function view_life(f::ACSetTransformation, pth=tempname()) + v = collect(f[:V]) + view_life(codom(f), pth; star=isempty(v) ? nothing : only(v)) +end +function view_life(X::Life, pth=tempname(); star=nothing) + pg = PropertyGraph{Any}(; prog="neato", graph=Dict(), + node=Dict(:shape => "circle", :style => "filled", :margin => "0"), + edge=Dict(:dir => "none", :minlen => "1")) + add_vertices!(pg, nparts(X, :V)) + for v in vertices(X) + set_vprop!(pg, v, :fillcolor, isempty(incident(X, v, :curr)) ? "red" : "green") + if !isempty(incident(X, v, :next)) + set_vprop!(pg, v, :penwidth, "4.0") + end + set_vprop!(pg, v, :label, star == v ? "*" : "") + end + for e in filter(e -> X[e, :inv] > e, edges(X)) + add_edge!(pg, X[e, :src], X[e, :tgt]) + end + G = to_graphviz(pg) + open(pth, "w") do io + show(io, "image/svg+xml", G) + end + G +end +function view_life(X::LifeCoords, pth=tempname(); star=nothing) + n = Int(sqrt(nparts(X, :V))) + coords = Dict([(i, j) => findfirst(==((i, j)), X[:coords]) + for (i, j) in Iterators.product(1:n, 1:n)]) + mat = pretty_table(String, reduce(hcat, map(1:n) do i + map(1:n) do j + c, x = [!isempty(incident(X, coords[(i, j)], x)) for x in [:curr, :next]] + res = c ? (x ? "O" : "o") : (x ? "X" : "x") + return res * ((star == coords[(i, j)]) ? "." : "") + end + end); show_header=false, tf=tf_markdown) + open(pth, "w") do io + write(io, mat) + end + return mat +end +```` + +Constructions for Life ACSets / maps between them + +````@example game_of_life +Next() = @acset Life begin + V = 1 + Next = 1 + next = 1 +end +Curr() = @acset Life begin + V = 1 + Curr = 1 + curr = 1 +end +to_next() = homomorphism(Life(1), Next()) +to_curr() = homomorphism(Life(1), Curr()) + +"""Construct a cell connected to n living neighbors""" +function living_neighbors(n::Int; alive=false) + X = Life(1) + if alive + add_part!(X, :Curr, curr=1) + end + for _ in 1:n + v = add_part!(X, :V) + add_part!(X, :Curr, curr=v) + add_edge!(X, v, 1) + end + return X +end +```` + +Initialization of LifeCoords + +````@example game_of_life +function make_grid(curr::AbstractMatrix, next=nothing) + n, m = size(curr) + n == m || error("Must be square") + X, coords = LifeCoords(), Dict() + for i in 1:n + for j in 1:n + coords[i=>j] = add_vertex!(X; coords=(i, j)) + if Bool(curr[i, j]) + add_part!(X, :Curr, curr=coords[i=>j]) + end + if !isnothing(next) && Bool(next[i, j]) + add_part!(X, :Curr, curr=coords[i=>j]) + end + end + end + for i in 1:n + for j in 1:n + if i < n + add_edge!(X, coords[i=>j], coords[i+1=>j]) + end + if j < n + add_edge!(X, coords[i=>j], coords[i=>j+1]) + end + if i < n && j < n + add_edge!(X, coords[i=>j], coords[i+1=>j+1]) + end + if i < n && j > 1 + add_edge!(X, coords[i=>j], coords[i+1=>j-1]) + end + end + end + return X +end +make_grid(n::Int, random=false) = make_grid((random ? rand : zeros)(Bool, (n, n))) +```` + +Rules + +````@example game_of_life +####### +```` + +A dead cell becomes alive iff exactly 3 living neighbors + +````@example game_of_life +BirthP1 = living_neighbors(3) # must have 3 neighbors +BirthN1 = living_neighbors(4) # forbid the cell to have 4 neighbors +BirthN2 = Curr() # forbid the cell to be alive (i.e. it's currently dead) +BP1, BN1, BN2 = homomorphism.(Ref(Life(1)), [BirthP1, BirthN1, BirthN2]) +bac = [AppCond(BP1; monic=true), AppCond.([BN1, BN2], false; monic=true)...] +Birth = Rule(id(Life(1)), to_next(); ac=bac) +```` + +A living cell stays alive iff 2 or 3 living neighbors + +````@example game_of_life +PersistR = @acset Life begin + V = 1 + Curr = 1 + Next = 1 + curr = 1 + next = 1 +end +PersistP1 = living_neighbors(2; alive=true) +PersistN1 = living_neighbors(4; alive=true) +DR, DP1, DN1 = homomorphism.(Ref(Curr()), [PersistR, PersistP1, PersistN1]) +pac = [AppCond(DP1; monic=true), AppCond(DN1, false; monic=true)] +Persist = Rule(id(Curr()), DR; ac=pac) + +ClearCurr = Rule(to_curr(), id(Life(1))) # remove "Curr" status +ClearNext = Rule(to_next(), id(Life(1))) # remove "Next" status +CopyNext = Rule(to_next(), to_curr()) # Copy "Next" to "Curr" + +rules = [:Birth => Birth, :Persist => Persist, :ClearCurr => ClearCurr, + :ClearNext => ClearNext, :CopyNext => CopyNext] +```` + +Schedule + +````@example game_of_life +########## +```` + +All rules have interface of a single distinguished cell. +Never distinguish control flow of successful vs unsuccessful application + +````@example game_of_life +rBirth, rPersist, rClearCurr, rClearNext, rCopyNext = + [tryrule(RuleApp(n, r, Life(1))) for (n, r) in rules] + +update_next = agent(rBirth ⋅ rPersist, Life(1); n=:Cell) +next_step = agent(compose(rClearCurr, rCopyNext, rClearNext), Life(1); n=:Cell) +life(n::Int) = for_schedule(update_next ⋅ next_step, n) |> F +const L = life(1) + +G = make_grid([1 0 1 0 1; 0 1 0 1 0; 0 1 0 1 0; 1 0 1 0 1; 1 0 1 0 1]) + +res, = apply_schedule(L, G; steps=1000) +traj = last(res).edge.o.val + +view_life(i, traj) = view_life(traj.steps[i].world) +```` + +view_traj(L, res, view_life; agent=true) + diff --git a/docs/src/generated/lotka_volterra.ipynb b/docs/src/generated/lotka_volterra.ipynb new file mode 100644 index 0000000..8b699de --- /dev/null +++ b/docs/src/generated/lotka_volterra.ipynb @@ -0,0 +1,1248 @@ +{ + "cells": [ + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}} {V:4, E:16, Sheep:2, Wolf:2, Dir:0, Eng:0, Coord:0}\n┌───┬───────────┬────────┐\n│\u001b[1m V \u001b[0m│\u001b[1m grass_eng \u001b[0m│\u001b[1m coord \u001b[0m│\n├───┼───────────┼────────┤\n│\u001b[1m 1 \u001b[0m│ 2 │ (0, 0) │\n│\u001b[1m 2 \u001b[0m│ 0 │ (0, 1) │\n│\u001b[1m 3 \u001b[0m│ 0 │ (1, 0) │\n│\u001b[1m 4 \u001b[0m│ 26 │ (1, 1) │\n└───┴───────────┴────────┘\n┌────┬─────┬─────┬─────┐\n│\u001b[1m E \u001b[0m│\u001b[1m src \u001b[0m│\u001b[1m tgt \u001b[0m│\u001b[1m dir \u001b[0m│\n├────┼─────┼─────┼─────┤\n│\u001b[1m 1 \u001b[0m│ 1 │ 3 │ E │\n│\u001b[1m 2 \u001b[0m│ 1 │ 3 │ W │\n│\u001b[1m 3 \u001b[0m│ 1 │ 2 │ N │\n│\u001b[1m 4 \u001b[0m│ 1 │ 2 │ S │\n│\u001b[1m 5 \u001b[0m│ 2 │ 4 │ E │\n│\u001b[1m 6 \u001b[0m│ 2 │ 4 │ W │\n│\u001b[1m 7 \u001b[0m│ 2 │ 1 │ N │\n│\u001b[1m 8 \u001b[0m│ 2 │ 1 │ S │\n│\u001b[1m 9 \u001b[0m│ 3 │ 1 │ E │\n│\u001b[1m 10 \u001b[0m│ 3 │ 1 │ W │\n│\u001b[1m 11 \u001b[0m│ 3 │ 4 │ N │\n│\u001b[1m 12 \u001b[0m│ 3 │ 4 │ S │\n│\u001b[1m 13 \u001b[0m│ 4 │ 2 │ E │\n│\u001b[1m 14 \u001b[0m│ 4 │ 2 │ W │\n│\u001b[1m 15 \u001b[0m│ 4 │ 3 │ N │\n│\u001b[1m 16 \u001b[0m│ 4 │ 3 │ S │\n└────┴─────┴─────┴─────┘\n┌───────┬───────────┬───────────┬───────────┐\n│\u001b[1m Sheep \u001b[0m│\u001b[1m sheep_loc \u001b[0m│\u001b[1m sheep_eng \u001b[0m│\u001b[1m sheep_dir \u001b[0m│\n├───────┼───────────┼───────────┼───────────┤\n│\u001b[1m 1 \u001b[0m│ 3 │ 5 │ E │\n│\u001b[1m 2 \u001b[0m│ 3 │ 5 │ W │\n└───────┴───────────┴───────────┴───────────┘\n┌──────┬──────────┬──────────┬──────────┐\n│\u001b[1m Wolf \u001b[0m│\u001b[1m wolf_loc \u001b[0m│\u001b[1m wolf_eng \u001b[0m│\u001b[1m wolf_dir \u001b[0m│\n├──────┼──────────┼──────────┼──────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │ 5 │ E │\n│\u001b[1m 2 \u001b[0m│ 2 │ 5 │ N │\n└──────┴──────────┴──────────┴──────────┘\n", + "text/html": [ + "
\n", + "Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}} {V:4, E:16, Sheep:2, Wolf:2, Dir:0, Eng:0, Coord:0}\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Vgrass_engcoord
12(0, 0)
20(0, 1)
30(1, 0)
426(1, 1)
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Esrctgtdir
113E
213W
312N
412S
524E
624W
721N
821S
931E
1031W
1134N
1234S
1342E
1442W
1543N
1643S
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Sheepsheep_locsheep_engsheep_dir
135E
235W
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Wolfwolf_locwolf_engwolf_dir
115E
225N
\n", + "
\n" + ] + }, + "metadata": {}, + "execution_count": 1 + } + ], + "cell_type": "code", + "source": [ + "using Catlab, Catlab.Theories, Catlab.CategoricalAlgebra, Catlab.Graphs,\n", + " Catlab.Graphics, Catlab.WiringDiagrams, Catlab.Programs\n", + "using AlgebraicRewriting\n", + "using Random, Test, StructEquality\n", + "using Luxor\n", + "\n", + "Random.seed!(123);\n", + "\n", + "using Catlab.Graphics.Graphviz: Attributes, Statement, Node\n", + "using Catlab.Graphics.Graphviz\n", + "\n", + "import Catlab.CategoricalAlgebra: left, right\n", + "\n", + "function right(s::Symbol)\n", + " if s == :N\n", + " return :E\n", + " elseif s == :S\n", + " return :W\n", + " elseif s == :E\n", + " return :S\n", + " elseif s == :W\n", + " return :N\n", + " end\n", + "end\n", + "function left(s::Symbol)\n", + " if s == :N\n", + " return :W\n", + " elseif s == :S\n", + " return :E\n", + " elseif s == :E\n", + " return :N\n", + " elseif s == :W\n", + " return :S\n", + " end\n", + "end\n", + "\n", + "\"\"\"\n", + "Grass = 0 means alive grass, whereas grass > 0 represent a counter of time until\n", + "the grass is alive.\n", + "\n", + "Sheeps and wolves have position and direction, so we assign each an *edge*. We\n", + "assume a convention where the location of the something is the edge SOURCE.\n", + "\n", + "Dir is an attribute which can take values :N, :E, :W, and :S.\n", + "\"\"\"\n", + "@present TheoryLV <: SchGraph begin\n", + " (Sheep, Wolf)::Ob\n", + " sheep_loc::Hom(Sheep, V)\n", + " wolf_loc::Hom(Wolf, V)\n", + "\n", + " (Dir, Eng)::AttrType\n", + " grass_eng::Attr(V, Eng)\n", + " sheep_eng::Attr(Sheep, Eng)\n", + " wolf_eng::Attr(Wolf, Eng)\n", + " sheep_dir::Attr(Sheep, Dir)\n", + " wolf_dir::Attr(Wolf, Dir)\n", + " dir::Attr(E, Dir)\n", + "end\n", + "\n", + "@present TheoryLV′ <: TheoryLV begin\n", + " Coord::AttrType\n", + " coord::Attr(V, Coord)\n", + "end\n", + "\n", + "to_graphviz(TheoryLV; prog=\"dot\")\n", + "\n", + "@acset_type LV_Generic(TheoryLV) <: HasGraph\n", + "const LV = LV_Generic{Symbol,Int}\n", + "\n", + "@acset_type LV′_Generic(TheoryLV′) <: HasGraph\n", + "const LV′ = LV′_Generic{Symbol,Int,Tuple{Int,Int}}\n", + "\n", + "F = Migrate(\n", + " Dict(:Sheep => :Wolf, :Wolf => :Sheep),\n", + " Dict([:sheep_loc => :wolf_loc, :wolf_loc => :sheep_loc,\n", + " :sheep_eng => :wolf_eng, :wolf_eng => :sheep_eng, :grass_eng => :grass_eng,\n", + " :sheep_dir => :wolf_dir, :wolf_dir => :sheep_dir,]), LV)\n", + "F2 = Migrate(\n", + " Dict(x => x for x in Symbol.(TheoryLV.generators[:Ob])),\n", + " Dict(x => x for x in Symbol.(TheoryLV.generators[:Hom])), LV′; delta=false)\n", + "\n", + "\"\"\"\n", + "Create a nxn grid with periodic boundary conditions. Edges in each cardinal\n", + "direction originate at every point\n", + "\n", + "\n", + "(i,j+1) -> (i+1,j+1) -> ...\n", + " ↑ ↑\n", + "(i,j) -> (i+1,j) -> ...\n", + "\n", + "\"\"\"\n", + "function create_grid(n::Int)\n", + " lv = LV′()\n", + " coords = Dict()\n", + " for i in 0:n-1\n", + " for j in 0:n-1\n", + " coords[i=>j] = add_part!(lv, :V; grass_eng=max(0, rand(-30:30)), coord=(i, j))\n", + " end\n", + " end\n", + " for i in 0:n-1\n", + " for j in 0:n-1\n", + " add_part!(lv, :E; src=coords[i=>j], tgt=coords[mod(i + 1, n)=>j], dir=:E)\n", + " add_part!(lv, :E; src=coords[i=>j], tgt=coords[mod(i - 1, n)=>j], dir=:W)\n", + " add_part!(lv, :E; src=coords[i=>j], tgt=coords[i=>mod(j + 1, n)], dir=:N)\n", + " add_part!(lv, :E; src=coords[i=>j], tgt=coords[i=>mod(j - 1, n)], dir=:S)\n", + " end\n", + " end\n", + " return lv\n", + "end\n", + "\n", + "g = create_grid(2)\n", + "\n", + "\n", + "\"\"\"\n", + "`n` is the length of the grid.\n", + "`sheep` and `wolves` are the fraction of spaces that are\n", + "populated with that animal\n", + "\"\"\"\n", + "function initialize(n::Int, sheep::Float64, wolves::Float64)::LV′\n", + " grid = create_grid(n)\n", + " args = [(sheep, :Sheep, :sheep_loc, :sheep_eng, :sheep_dir),\n", + " (wolves, :Wolf, :wolf_loc, :wolf_eng, :wolf_dir)]\n", + " for (n_, name, loc, eng, d) in args\n", + " for _ in 1:round(Int, n_ * n^2)\n", + " dic = Dict([eng => 5, loc => rand(vertices(grid)),\n", + " d => rand([:N, :E, :S, :W])])\n", + " add_part!(grid, name; dic...)\n", + " end\n", + " end\n", + " return grid\n", + "end\n", + "\n", + "\n", + "supscript_d = Dict([\n", + " '1' => '¹', '2' => '²', '3' => '³', '4' => '⁴', '5' => '⁵', '6' => '⁶', '7' => '⁷', '8' => '⁸',\n", + " '9' => '⁹', '0' => '⁰', 'x' => 'ˣ', 'y' => 'ʸ', 'z' => 'ᶻ', 'a' => 'ᵃ', 'b' => 'ᵇ', 'c' => 'ᶜ',\n", + " 'd' => 'ᵈ'])\n", + "supscript(x::String) = join([get(supscript_d, c, c) for c in x])\n", + "\n", + "\"\"\"Visualize a LV\"\"\"\n", + "function view_LV(p::ACSetTransformation, pth=tempname(); name=\"G\", title=\"\")\n", + " if nparts(dom(p), :Wolf) == 1\n", + " star = :Wolf => p[:Wolf](1)\n", + " elseif nparts(dom(p), :Sheep) == 1\n", + " star = :Sheep => p[:Sheep](1)\n", + " elseif nparts(dom(p), :V) == 1\n", + " star = :V => p[:V](1)\n", + " else\n", + " star = nothing\n", + " end\n", + " view_LV(codom(p), pth; name=name, title=title, star=star)\n", + "end\n", + "function view_LV(p::LV′, pth=tempname(); name=\"G\", title=\"\", star=nothing)\n", + " pstr = [\"$(i),$(j)!\" for (i, j) in p[:coord]]\n", + " stmts = Statement[]\n", + " for s in 1:nv(p)\n", + " st = (star == (:V => s)) ? \"*\" : \"\"\n", + " gv = p[s, :grass_eng]\n", + " col = gv == 0 ? \"lightgreen\" : \"tan\"\n", + " push!(stmts, Node(\"v$s\", Attributes(\n", + " :label => gv == 0 ? \"\" : string(gv) * st,\n", + " :shape => \"circle\",\n", + " :color => col, :pos => pstr[s])))\n", + " end\n", + " d = Dict([:E => (1, 0), :N => (0, 1), :S => (0, -1), :W => (-1, 0),])\n", + "\n", + " args = [(:true, :Wolf, :wolf_loc, :wolf_eng, :wolf_dir),\n", + " (false, :Sheep, :sheep_loc, :sheep_eng, :sheep_dir)]\n", + "\n", + " for (is_wolf, prt, loc, eng, dr) in args\n", + " for w in parts(p, prt)\n", + " st = (star == ((is_wolf ? :Wolf : :Sheep) => w)) ? \"*\" : \"\"\n", + " e = only(incident(p, p[w, loc], :src) ∩ incident(p, p[w, dr], :dir))\n", + " s = src(p, e)\n", + " dx, dy = d[p[e, :dir]]\n", + " (sx, sy) = p[s, :coord]\n", + "\n", + " L, R = 0.25, 0.1\n", + " wx = sx + L * dx + R * rand()\n", + " wy = sy + L * dy + R * rand()\n", + " ID = \"$(is_wolf ? :w : :s)$w\"\n", + " append!(stmts, [Node(ID, Attributes(\n", + " :label => \"$w\" * supscript(\"$(p[w,eng])\") * st,\n", + " :shape => \"square\", :width => \"0.3px\", :height => \"0.3px\", :fixedsize => \"true\",\n", + " :pos => \"$(wx),$(wy)!\", :color => is_wolf ? \"red\" : \"lightblue\"))])\n", + " end\n", + " end\n", + "\n", + " g = Graphviz.Digraph(name, Statement[stmts...]; prog=\"neato\",\n", + " graph_attrs=Attributes(:label => title, :labelloc => \"t\"),\n", + " node_attrs=Attributes(:shape => \"plain\", :style => \"filled\"))\n", + " open(pth, \"w\") do io\n", + " show(io, \"image/svg+xml\", g)\n", + " end\n", + "end\n", + "\n", + "i1 = initialize(2, 0.5, 0.5)" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "view_LV(i1)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "RULES" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "#######\n", + "yLV = yoneda_cache(LV; clear=true);\n", + "yLV = yoneda_cache(LV; clear=false);" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "Empty agent type" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Main.var\"##299\".LV_Generic{Symbol, Int64} {V:0, E:0, Sheep:0, Wolf:0, Dir:0, Eng:0}\n", + "text/html": [ + "
\n", + "Main.var\"##299\".LV_Generic{Symbol, Int64} {V:0, E:0, Sheep:0, Wolf:0, Dir:0, Eng:0}\n", + "
\n" + ] + }, + "metadata": {}, + "execution_count": 3 + } + ], + "cell_type": "code", + "source": [ + "I = LV()" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "Generic sheep agent" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Main.var\"##299\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:1, Wolf:0, Dir:1, Eng:2}\n┌───┬────────────┐\n│\u001b[1m V \u001b[0m│\u001b[1m grass_eng \u001b[0m│\n├───┼────────────┤\n│\u001b[1m 1 \u001b[0m│ AttrVar(2) │\n└───┴────────────┘\n┌───────┬───────────┬────────────┬────────────┐\n│\u001b[1m Sheep \u001b[0m│\u001b[1m sheep_loc \u001b[0m│\u001b[1m sheep_eng \u001b[0m│\u001b[1m sheep_dir \u001b[0m│\n├───────┼───────────┼────────────┼────────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │ AttrVar(1) │ AttrVar(1) │\n└───────┴───────────┴────────────┴────────────┘\n", + "text/html": [ + "
\n", + "Main.var\"##299\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:1, Wolf:0, Dir:1, Eng:2}\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Vgrass_eng
1AttrVar(2)
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Sheepsheep_locsheep_engsheep_dir
11AttrVar(1)AttrVar(1)
\n", + "
\n" + ] + }, + "metadata": {}, + "execution_count": 4 + } + ], + "cell_type": "code", + "source": [ + "S = @acset_colim yLV begin\n", + " s::Sheep\n", + "end" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "Generic wolf agent" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Main.var\"##299\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:0, Wolf:1, Dir:1, Eng:2}\n┌───┬────────────┐\n│\u001b[1m V \u001b[0m│\u001b[1m grass_eng \u001b[0m│\n├───┼────────────┤\n│\u001b[1m 1 \u001b[0m│ AttrVar(2) │\n└───┴────────────┘\n┌──────┬──────────┬────────────┬────────────┐\n│\u001b[1m Wolf \u001b[0m│\u001b[1m wolf_loc \u001b[0m│\u001b[1m wolf_eng \u001b[0m│\u001b[1m wolf_dir \u001b[0m│\n├──────┼──────────┼────────────┼────────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │ AttrVar(1) │ AttrVar(1) │\n└──────┴──────────┴────────────┴────────────┘\n", + "text/html": [ + "
\n", + "Main.var\"##299\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:0, Wolf:1, Dir:1, Eng:2}\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Vgrass_eng
1AttrVar(2)
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Wolfwolf_locwolf_engwolf_dir
11AttrVar(1)AttrVar(1)
\n", + "
\n" + ] + }, + "metadata": {}, + "execution_count": 5 + } + ], + "cell_type": "code", + "source": [ + "W = F(S)" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "Generic grass agent" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Names{Main.var\"##299\".LV_Generic{Symbol, Int64}}(Dict{String, Main.var\"##299\".LV_Generic{Symbol, Int64}}(\"S\" => Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[], \"W\" => Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[], \"G\" => Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[], \"\" => Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]), Dict{Main.var\"##299\".LV_Generic{Symbol, Int64}, String}(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[] => \"G\", Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[] => \"W\", Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[] => \"S\", Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[] => \"\"))" + }, + "metadata": {}, + "execution_count": 6 + } + ], + "cell_type": "code", + "source": [ + "G = @acset_colim yLV begin\n", + " v::V\n", + "end\n", + "\n", + "N = Names(Dict(\"W\" => W, \"S\" => S, \"G\" => G, \"\" => I))" + ], + "metadata": {}, + "execution_count": 6 + }, + { + "cell_type": "markdown", + "source": [ + "Rotating" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Schedule(WiringDiagram{AlgebraicRewriting.Schedules.Theories.ThTracedMonoidalWithBidiagonals}([Main.var\"##299\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:1, Wolf:0, Dir:1, Eng:2}], [Main.var\"##299\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:1, Wolf:0, Dir:1, Eng:2}], \n[ -2 => {inputs},\n -1 => {outputs},\n 1 => Box(\"turn_right\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]) ],\n[ Wire((-2,1) => (1,1)),\n Wire((1,1) => (-1,1)),\n Wire((1,2) => (-1,1)) ]), compose(turn_right,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])))" + }, + "metadata": {}, + "execution_count": 7 + } + ], + "cell_type": "code", + "source": [ + "rl = Rule(id(S), id(S); expr=(Dir=[xs -> left(only(xs))],))\n", + "rr = Rule(id(S), id(S); expr=(Dir=[xs -> right(only(xs))],))\n", + "\n", + "sheep_rotate_l = tryrule(RuleApp(:turn_left, rl, S))\n", + "sheep_rotate_r = tryrule(RuleApp(:turn_right, rr, S))" + ], + "metadata": {}, + "execution_count": 7 + }, + { + "cell_type": "markdown", + "source": [ + "we can imagine executing these rules in sequence or in parallel" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Schedule(WiringDiagram{AlgebraicRewriting.Schedules.Theories.ThTracedMonoidalWithBidiagonals}([Main.var\"##299\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:1, Wolf:0, Dir:1, Eng:2}], [Main.var\"##299\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:1, Wolf:0, Dir:1, Eng:2}], \n[ -2 => {inputs},\n -1 => {outputs},\n 1 => Box(\"turn_left\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]),\n 2 => Box(\"turn_right\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]) ],\n[ Wire((-2,1) => (1,1)),\n Wire((1,2) => (2,1)),\n Wire((1,1) => (2,1)),\n Wire((2,2) => (-1,1)),\n Wire((2,1) => (-1,1)) ]), compose(compose(turn_left,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),compose(turn_right,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))))" + }, + "metadata": {}, + "execution_count": 8 + } + ], + "cell_type": "code", + "source": [ + "seq_sched = (sheep_rotate_l ⋅ sheep_rotate_r)" + ], + "metadata": {}, + "execution_count": 8 + }, + { + "cell_type": "markdown", + "source": [ + "view_sched(seq_sched; names=N)" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Schedule(WiringDiagram{AlgebraicRewriting.Schedules.Theories.ThTracedMonoidalWithBidiagonals}([Main.var\"##299\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:1, Wolf:0, Dir:1, Eng:2},Main.var\"##299\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:1, Wolf:0, Dir:1, Eng:2}], [Main.var\"##299\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:1, Wolf:0, Dir:1, Eng:2},Main.var\"##299\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:1, Wolf:0, Dir:1, Eng:2}], \n[ -2 => {inputs},\n -1 => {outputs},\n 1 => Box(\"turn_left\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]),\n 2 => Box(\"turn_right\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]) ],\n[ Wire((-2,1) => (1,1)),\n Wire((-2,2) => (2,1)),\n Wire((2,1) => (-1,2)),\n Wire((2,2) => (-1,2)),\n Wire((1,1) => (-1,1)),\n Wire((1,2) => (-1,1)) ]), otimes(compose(turn_left,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),compose(turn_right,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))))" + }, + "metadata": {}, + "execution_count": 9 + } + ], + "cell_type": "code", + "source": [ + "par_sched = (sheep_rotate_l ⊗ sheep_rotate_r)" + ], + "metadata": {}, + "execution_count": 9 + }, + { + "cell_type": "markdown", + "source": [ + "view_sched(par_sched; names=N)" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" + }, + "metadata": {}, + "execution_count": 10 + } + ], + "cell_type": "code", + "source": [ + "begin\n", + " ex = @acset_colim yLV begin\n", + " e::E\n", + " s::Sheep\n", + " sheep_loc(s) == src(e)\n", + " sheep_dir(s) == :N\n", + " end\n", + " expected = copy(ex)\n", + " expected[:sheep_dir] = :W\n", + " @test is_isomorphic(rewrite(rl, ex), expected)\n", + "end" + ], + "metadata": {}, + "execution_count": 10 + }, + { + "cell_type": "markdown", + "source": [ + "Moving forward" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" + }, + "metadata": {}, + "execution_count": 11 + } + ], + "cell_type": "code", + "source": [ + "s_fwd_l = @acset_colim yLV begin\n", + " e::E\n", + " s::Sheep\n", + " sheep_loc(s) == src(e)\n", + "end\n", + "s_fwd_i = @acset_colim yLV begin\n", + " e::E\n", + "end\n", + "s_fwd_r = @acset_colim yLV begin\n", + " e::E\n", + " s::Sheep\n", + " sheep_loc(s) == tgt(e)\n", + "end\n", + "s_n = @acset_colim yLV begin\n", + " e::E\n", + " s::Sheep\n", + " sheep_loc(s) == src(e)\n", + " sheep_eng(s) == 0\n", + "end\n", + "\n", + "sheep_fwd_rule = Rule(\n", + " homomorphism(s_fwd_i, s_fwd_l; monic=true),\n", + " homomorphism(s_fwd_i, s_fwd_r; monic=true),\n", + " ac=[AppCond(homomorphism(s_fwd_l, s_n), false)],\n", + " expr=(Eng=Dict(3 => vs -> vs[3] - 1), Dir=Dict(2 => vs -> vs[2]))\n", + ")\n", + "\n", + "sheep_fwd = tryrule(RuleApp(:move_fwd, sheep_fwd_rule,\n", + " homomorphism(S, s_fwd_l), homomorphism(S, s_fwd_r)))\n", + "\n", + "\n", + "sheep_fwd_rule.L |> codom\n", + "\n", + "begin # test\n", + " ex = @acset_colim yLV begin\n", + " (e1, e2)::E\n", + " s::Sheep\n", + " sheep_loc(s) == tgt(e1)\n", + " tgt(e1) == src(e2)\n", + " sheep_dir(s) == :N\n", + " sheep_eng(s) == 10\n", + " end\n", + " expected = @acset_colim yLV begin\n", + " (e1, e2)::E\n", + " s::Sheep\n", + " sheep_loc(s) == tgt(e2)\n", + " tgt(e1) == src(e2)\n", + " sheep_dir(s) == :N\n", + " sheep_eng(s) == 9\n", + " end\n", + " @test is_isomorphic(expected, rewrite(sheep_fwd_rule, ex))\n", + "end" + ], + "metadata": {}, + "execution_count": 11 + }, + { + "cell_type": "markdown", + "source": [ + "Eat grass + 4eng" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Grass is at 0 - meaning it's ready to be eaten" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" + }, + "metadata": {}, + "execution_count": 12 + } + ], + "cell_type": "code", + "source": [ + "s_eat_pac = @acset_colim yLV begin\n", + " s::Sheep\n", + " grass_eng(sheep_loc(s)) == 0\n", + "end\n", + "\n", + "se_rule = Rule(id(S), id(S); expr=(Eng=[vs -> vs[1] + 4, vs -> 30],),\n", + " ac=[AppCond(homomorphism(S, s_eat_pac))])\n", + "sheep_eat = tryrule(RuleApp(:Sheep_eat, se_rule, S))\n", + "\n", + "begin # test\n", + " ex = @acset_colim yLV begin\n", + " s::Sheep\n", + " e::E\n", + " sheep_loc(s) == tgt(e)\n", + " sheep_eng(s) == 3\n", + " grass_eng(tgt(e)) == 0\n", + " grass_eng(src(e)) == 10\n", + " end\n", + " expected = @acset_colim yLV begin\n", + " s::Sheep\n", + " e::E\n", + " sheep_loc(s) == tgt(e)\n", + " sheep_eng(s) == 7\n", + " grass_eng(tgt(e)) == 30\n", + " grass_eng(src(e)) == 10\n", + " end\n", + "\n", + " @test is_isomorphic(expected, rewrite(se_rule, ex))\n", + "end" + ], + "metadata": {}, + "execution_count": 12 + }, + { + "cell_type": "markdown", + "source": [ + "Eat sheep + 20 eng" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" + }, + "metadata": {}, + "execution_count": 13 + } + ], + "cell_type": "code", + "source": [ + "w_eat_l = @acset_colim yLV begin\n", + " s::Sheep\n", + " w::Wolf\n", + " sheep_loc(s) == wolf_loc(w)\n", + "end\n", + "\n", + "we_rule = Rule(homomorphism(W, w_eat_l), id(W); expr=(Eng=[vs -> vs[3] + 20, vs -> vs[1]],))\n", + "wolf_eat = tryrule(RuleApp(:Wolf_eat, we_rule, W))\n", + "\n", + "begin # test\n", + " ex = @acset LV begin\n", + " Sheep = 1\n", + " Wolf = 1\n", + " V = 3\n", + " E = 2\n", + " src = [1, 2]\n", + " tgt = [2, 3]\n", + " sheep_loc = 2\n", + " sheep_eng = [3]\n", + " grass_eng = [9, 10, 11]\n", + " dir = fill(:N, 2)\n", + " sheep_dir = [:N]\n", + " wolf_loc = [2]\n", + " wolf_eng = [16]\n", + " wolf_dir = [:S]\n", + " end\n", + " expected = @acset LV begin\n", + " Wolf = 1\n", + " V = 3\n", + " E = 2\n", + " src = [1, 2]\n", + " tgt = [2, 3]\n", + " grass_eng = [9, 10, 11]\n", + " dir = fill(:N, 2)\n", + " sheep_dir = [:N]\n", + " wolf_loc = [2]\n", + " wolf_eng = [36]\n", + " wolf_dir = [:S]\n", + " end\n", + " @test is_isomorphic(rewrite(we_rule, ex), expected)\n", + "end" + ], + "metadata": {}, + "execution_count": 13 + }, + { + "cell_type": "markdown", + "source": [ + "Die if 0 eng" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" + }, + "metadata": {}, + "execution_count": 14 + } + ], + "cell_type": "code", + "source": [ + "s_die_l = @acset_colim yLV begin\n", + " s::Sheep\n", + " sheep_eng(s) == 0\n", + "end\n", + "\n", + "sheep_die_rule = Rule(homomorphism(G, s_die_l), id(G))\n", + "sheep_starve = (RuleApp(:starve, sheep_die_rule,\n", + " homomorphism(S, s_die_l), create(G))\n", + " ⋅\n", + " (id([I]) ⊗ Weaken(create(S))) ⋅ merge_wires(I))\n", + "\n", + "begin # test\n", + " ex = s_die_l ⊕ W\n", + " expected = G ⊕ W\n", + " @test is_isomorphic(rewrite(sheep_die_rule, ex), expected)\n", + "end" + ], + "metadata": {}, + "execution_count": 14 + }, + { + "cell_type": "markdown", + "source": [ + "reproduction" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" + }, + "metadata": {}, + "execution_count": 15 + } + ], + "cell_type": "code", + "source": [ + "s_reprod_r = @acset_colim yLV begin\n", + " (x, y)::Sheep\n", + " sheep_loc(x) == sheep_loc(y)\n", + "end\n", + "\n", + "sheep_reprod_rule = Rule(\n", + " homomorphism(G, S),\n", + " homomorphism(G, s_reprod_r);\n", + " expr=(Dir=[vs -> vs[1], vs -> vs[1]], Eng=[vs -> vs[2],\n", + " fill(vs -> round(Int, vs[1] / 2, RoundUp), 2)...],)\n", + ")\n", + "\n", + "sheep_reprod = RuleApp(:reproduce, sheep_reprod_rule,\n", + " id(S), homomorphism(S, s_reprod_r)) |> tryrule\n", + "\n", + "begin # test\n", + " ex = @acset_colim yLV begin\n", + " s::Sheep\n", + " w::Wolf\n", + " sheep_eng(s) == 10\n", + " end\n", + " expected = @acset_colim yLV begin\n", + " (s1, s2)::Sheep\n", + " w::Wolf\n", + " sheep_loc(s1) == sheep_loc(s2)\n", + " sheep_eng(s1) == 5\n", + " sheep_eng(s2) == 5\n", + " end\n", + " @test is_isomorphic(rewrite(sheep_reprod_rule, ex), expected)\n", + "end" + ], + "metadata": {}, + "execution_count": 15 + }, + { + "cell_type": "markdown", + "source": [ + "Grass increment" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" + }, + "metadata": {}, + "execution_count": 16 + } + ], + "cell_type": "code", + "source": [ + "g_inc_n = deepcopy(G)\n", + "set_subpart!(g_inc_n, 1, :grass_eng, 0);\n", + "rem_part!(g_inc_n, :Eng, 1)\n", + "\n", + "g_inc_rule = Rule(id(G), id(G);\n", + " ac=[AppCond(homomorphism(G, g_inc_n), false)],\n", + " expr=(Eng=[vs -> only(vs) - 1],))\n", + "g_inc = RuleApp(:GrassIncrements, g_inc_rule, G) |> tryrule\n", + "\n", + "\n", + "begin # test\n", + " ex = @acset LV begin\n", + " Sheep = 1\n", + " V = 3\n", + " E = 2\n", + " src = [1, 2]\n", + " tgt = [2, 3]\n", + " sheep_loc = 2\n", + " sheep_eng = [3]\n", + " grass_eng = [1, 10, 2]\n", + " dir = fill(:N, 2)\n", + " sheep_dir = [:N]\n", + " end\n", + " expected = @acset LV begin\n", + " Sheep = 1\n", + " V = 3\n", + " E = 2\n", + " src = [1, 2]\n", + " tgt = [2, 3]\n", + " sheep_loc = 2\n", + " sheep_eng = [3]\n", + " grass_eng = [0, 10, 2]\n", + " dir = fill(:N, 2)\n", + " sheep_dir = [:N]\n", + " end\n", + " @test is_isomorphic(rewrite(g_inc_rule, ex), expected)\n", + "end" + ], + "metadata": {}, + "execution_count": 16 + }, + { + "cell_type": "markdown", + "source": [ + "Scheduling Rules" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "##################" + ], + "metadata": {}, + "execution_count": 17 + }, + { + "cell_type": "markdown", + "source": [ + "Stuff that happens once per sheep" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "25% chance of left turn, 25% chance of right turn, 50% stay in same direction" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Schedule(WiringDiagram{AlgebraicRewriting.Schedules.Theories.ThTracedMonoidalWithBidiagonals}([Main.var\"##299\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:0, Wolf:1, Dir:1, Eng:2}], [Main.var\"##299\".LV_Generic{Symbol, Int64} {V:0, E:0, Sheep:0, Wolf:0, Dir:0, Eng:0}], \n[ -2 => {inputs},\n -1 => {outputs},\n 1 => Box(\"Wolf_eat\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]]),\n 2 => Box(\"turn\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]]),\n 3 => Box(\"turn_left\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]]),\n 4 => Box(\"turn_right\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]]),\n 5 => Box(\"move_fwd\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]]),\n 6 => Box(\"reprod\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]]),\n 7 => Box(\"reproduce\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]]),\n 8 => Box(\"starve\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]]),\n 9 => Box(\"\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]) ],\n[ Wire((-2,1) => (1,1)),\n Wire((7,1) => (8,1)),\n Wire((2,3) => (4,1)),\n Wire((2,1) => (3,1)),\n Wire((6,2) => (8,1)),\n Wire((1,1) => (2,1)),\n Wire((1,2) => (2,1)),\n Wire((2,2) => (5,1)),\n Wire((3,1) => (5,1)),\n Wire((3,2) => (5,1)),\n Wire((4,1) => (5,1)),\n Wire((4,2) => (5,1)),\n Wire((7,2) => (8,1)),\n Wire((6,1) => (7,1)),\n Wire((8,2) => (9,1)),\n Wire((5,1) => (6,1)),\n Wire((5,2) => (6,1)),\n Wire((8,1) => (-1,1)),\n Wire((9,1) => (-1,1)) ]), compose(compose(Wolf_eat,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[])),trace(munit(),Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],compose(compose(compose(compose(compose(compose(turn,otimes(compose(turn_left,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),compose(turn_right,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])))),otimes(braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),compose(compose(compose(otimes(mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),compose(move_fwd,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),reprod)),otimes(compose(reproduce,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),compose(mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),compose(compose(starve,otimes(id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),)),mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])))))))" + }, + "metadata": {}, + "execution_count": 18 + } + ], + "cell_type": "code", + "source": [ + "general = mk_sched((;), (init=:S,), N, (\n", + " turn=const_cond([1.0, 2.0, 1.0], S; name=:turn),\n", + " maybe=const_cond([0.1, 0.9], S; name=:reprod),\n", + " lft=sheep_rotate_l,\n", + " rght=sheep_rotate_r,\n", + " fwd=sheep_fwd,\n", + " repro=sheep_reprod,\n", + " starve=sheep_starve),\n", + " quote\n", + " out_l, out_str, out_r = turn(init)\n", + " moved = fwd([lft(out_l), out_str, rght(out_r)])\n", + " out_repro, out_no_repro = maybe(moved)\n", + " return starve([repro(out_repro), out_no_repro])\n", + " end)\n", + "\n", + "sheep = sheep_eat ⋅ general # once per sheep\n", + "wolf = wolf_eat ⋅ F(general) # once per wolf" + ], + "metadata": {}, + "execution_count": 18 + }, + { + "cell_type": "markdown", + "source": [ + "Do all sheep, then all wolves, then all daily operations" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Schedule(WiringDiagram{AlgebraicRewriting.Schedules.Theories.ThTracedMonoidalWithBidiagonals}([Main.var\"##299\".LV_Generic{Symbol, Int64} {V:0, E:0, Sheep:0, Wolf:0, Dir:0, Eng:0}], [Main.var\"##299\".LV_Generic{Symbol, Int64} {V:0, E:0, Sheep:0, Wolf:0, Dir:0, Eng:0}], \n[ -2 => {inputs},\n -1 => {outputs},\n 1 => Box(\"Query sheep\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]),\n 2 => Box(\"Fail\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], []),\n 3 => Box(\"Sheep_eat\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]),\n 4 => Box(\"turn\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]),\n 5 => Box(\"turn_left\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]),\n 6 => Box(\"turn_right\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]),\n 7 => Box(\"move_fwd\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]),\n 8 => Box(\"reprod\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]),\n 9 => Box(\"reproduce\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]),\n 10 => Box(\"starve\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]),\n 11 => Box(\"\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]),\n 12 => Box(\"Query wolves\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]),\n 13 => Box(\"Fail\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], []),\n 14 => Box(\"Wolf_eat\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]]),\n 15 => Box(\"turn\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]]),\n 16 => Box(\"turn_left\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]]),\n 17 => Box(\"turn_right\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]]),\n 18 => Box(\"move_fwd\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]]),\n 19 => Box(\"reprod\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]]),\n 20 => Box(\"reproduce\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]]),\n 21 => Box(\"starve\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]]),\n 22 => Box(\"\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]),\n 23 => Box(\"Query grass\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]),\n 24 => Box(\"Fail\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], []),\n 25 => Box(\"GrassIncrements\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]) ],\n[ Wire((-2,1) => (1,1)),\n Wire((23,2) => (25,1)),\n Wire((16,2) => (18,1)),\n Wire((10,2) => (11,1)),\n Wire((7,1) => (8,1)),\n Wire((7,2) => (8,1)),\n Wire((6,2) => (7,1)),\n Wire((11,1) => (1,2)),\n Wire((10,1) => (1,2)),\n Wire((9,2) => (10,1)),\n Wire((1,3) => (2,1)),\n Wire((8,1) => (9,1)),\n Wire((1,2) => (3,1)),\n Wire((9,1) => (10,1)),\n Wire((4,3) => (6,1)),\n Wire((4,1) => (5,1)),\n Wire((8,2) => (10,1)),\n Wire((3,1) => (4,1)),\n Wire((3,2) => (4,1)),\n Wire((4,2) => (7,1)),\n Wire((5,1) => (7,1)),\n Wire((5,2) => (7,1)),\n Wire((6,1) => (7,1)),\n Wire((17,1) => (18,1)),\n Wire((16,1) => (18,1)),\n Wire((1,1) => (12,1)),\n Wire((21,2) => (22,1)),\n Wire((18,1) => (19,1)),\n Wire((18,2) => (19,1)),\n Wire((17,2) => (18,1)),\n Wire((22,1) => (12,2)),\n Wire((21,1) => (12,2)),\n Wire((20,2) => (21,1)),\n Wire((12,3) => (13,1)),\n Wire((19,1) => (20,1)),\n Wire((12,2) => (14,1)),\n Wire((20,1) => (21,1)),\n Wire((15,3) => (17,1)),\n Wire((15,1) => (16,1)),\n Wire((19,2) => (21,1)),\n Wire((14,1) => (15,1)),\n Wire((14,2) => (15,1)),\n Wire((15,2) => (18,1)),\n Wire((25,1) => (23,2)),\n Wire((25,2) => (23,2)),\n Wire((12,1) => (23,1)),\n Wire((23,3) => (24,1)),\n Wire((23,1) => (-1,1)) ]), compose(compose(trace(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],otimes(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],munit()),compose(braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),compose(compose(sheep,otimes(braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),otimes(compose(compose(Sheep_eat,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),trace(munit(),Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],compose(compose(compose(compose(compose(compose(turn,otimes(compose(turn_left,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),compose(turn_right,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])))),otimes(braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),compose(compose(compose(otimes(mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),compose(move_fwd,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),reprod)),otimes(compose(reproduce,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),compose(mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),compose(compose(starve,otimes(id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),)),mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])))))),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),Fail)))),trace(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],otimes(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],munit()),compose(braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),compose(compose(wolves,otimes(braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),otimes(compose(compose(Wolf_eat,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[])),trace(munit(),Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],compose(compose(compose(compose(compose(compose(turn,otimes(compose(turn_left,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),compose(turn_right,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])))),otimes(braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),compose(compose(compose(otimes(mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),compose(move_fwd,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),reprod)),otimes(compose(reproduce,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),compose(mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),compose(compose(starve,otimes(id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),)),mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])))))),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),Fail))))),trace(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],otimes(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],munit()),compose(braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),compose(compose(grass,otimes(braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),otimes(compose(GrassIncrements,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),Fail))))))" + }, + "metadata": {}, + "execution_count": 19 + } + ], + "cell_type": "code", + "source": [ + "cycle = (agent(sheep; n=:sheep, ret=I)\n", + " ⋅\n", + " agent(wolf; n=:wolves, ret=I)\n", + " ⋅\n", + " agent(g_inc; n=:grass))" + ], + "metadata": {}, + "execution_count": 19 + }, + { + "cell_type": "markdown", + "source": [ + "wrap in a while loop" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Schedule(WiringDiagram{AlgebraicRewriting.Schedules.Theories.ThTracedMonoidalWithBidiagonals}([Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}} {V:0, E:0, Sheep:0, Wolf:0, Dir:0, Eng:0, Coord:0}], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}} {V:0, E:0, Sheep:0, Wolf:0, Dir:0, Eng:0, Coord:0}], \n[ -2 => {inputs},\n -1 => {outputs},\n 1 => Box(\"while\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[]]),\n 2 => Box(\"Query sheep\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[]]),\n 3 => Box(\"Fail\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[]], []),\n 4 => Box(\"Sheep_eat\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]]),\n 5 => Box(\"turn\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]]),\n 6 => Box(\"turn_left\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]]),\n 7 => Box(\"turn_right\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]]),\n 8 => Box(\"move_fwd\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]]),\n 9 => Box(\"reprod\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]]),\n 10 => Box(\"reproduce\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]]),\n 11 => Box(\"starve\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]]),\n 12 => Box(\"\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[]]),\n 13 => Box(\"Query wolves\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[]]),\n 14 => Box(\"Fail\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[]], []),\n 15 => Box(\"Wolf_eat\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]]),\n 16 => Box(\"turn\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]]),\n 17 => Box(\"turn_left\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]]),\n 18 => Box(\"turn_right\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]]),\n 19 => Box(\"move_fwd\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]]),\n 20 => Box(\"reprod\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]]),\n 21 => Box(\"reproduce\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]]),\n 22 => Box(\"starve\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]]),\n 23 => Box(\"\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[]]),\n 24 => Box(\"Query grass\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:1\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:1\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[]]),\n 25 => Box(\"Fail\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[]], []),\n 26 => Box(\"GrassIncrements\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:1\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:1\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:1\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]]) ],\n[ Wire((-2,1) => (1,1)),\n Wire((13,1) => (24,1)),\n Wire((24,3) => (25,1)),\n Wire((26,1) => (24,2)),\n Wire((24,1) => (1,1)),\n Wire((26,2) => (24,2)),\n Wire((1,1) => (2,1)),\n Wire((24,2) => (26,1)),\n Wire((17,2) => (19,1)),\n Wire((11,2) => (12,1)),\n Wire((8,1) => (9,1)),\n Wire((8,2) => (9,1)),\n Wire((7,2) => (8,1)),\n Wire((12,1) => (2,2)),\n Wire((11,1) => (2,2)),\n Wire((10,2) => (11,1)),\n Wire((2,3) => (3,1)),\n Wire((9,1) => (10,1)),\n Wire((2,2) => (4,1)),\n Wire((10,1) => (11,1)),\n Wire((5,3) => (7,1)),\n Wire((5,1) => (6,1)),\n Wire((9,2) => (11,1)),\n Wire((4,1) => (5,1)),\n Wire((4,2) => (5,1)),\n Wire((5,2) => (8,1)),\n Wire((6,1) => (8,1)),\n Wire((6,2) => (8,1)),\n Wire((7,1) => (8,1)),\n Wire((18,1) => (19,1)),\n Wire((17,1) => (19,1)),\n Wire((2,1) => (13,1)),\n Wire((22,2) => (23,1)),\n Wire((19,1) => (20,1)),\n Wire((19,2) => (20,1)),\n Wire((18,2) => (19,1)),\n Wire((23,1) => (13,2)),\n Wire((22,1) => (13,2)),\n Wire((21,2) => (22,1)),\n Wire((13,3) => (14,1)),\n Wire((20,1) => (21,1)),\n Wire((13,2) => (15,1)),\n Wire((21,1) => (22,1)),\n Wire((16,3) => (18,1)),\n Wire((16,1) => (17,1)),\n Wire((20,2) => (22,1)),\n Wire((15,1) => (16,1)),\n Wire((15,2) => (16,1)),\n Wire((16,2) => (19,1)),\n Wire((1,2) => (-1,1)) ]), trace(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],compose(compose(mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),while),otimes(compose(compose(trace(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],otimes(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],munit()),compose(braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),compose(compose(sheep,otimes(braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),otimes(compose(compose(Sheep_eat,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),trace(munit(),Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],compose(compose(compose(compose(compose(compose(turn,otimes(compose(turn_left,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),compose(turn_right,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])))),otimes(braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),compose(compose(compose(otimes(mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),compose(move_fwd,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),reprod)),otimes(compose(reproduce,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),compose(mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),compose(compose(starve,otimes(id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),)),mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])))))),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),Fail)))),trace(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],otimes(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],munit()),compose(braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),compose(compose(wolves,otimes(braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),otimes(compose(compose(Wolf_eat,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[])),trace(munit(),Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],compose(compose(compose(compose(compose(compose(turn,otimes(compose(turn_left,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),compose(turn_right,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])))),otimes(braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),compose(compose(compose(otimes(mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),compose(move_fwd,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),reprod)),otimes(compose(reproduce,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),compose(mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),compose(compose(starve,otimes(id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),)),mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])))))),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),Fail))))),trace(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],otimes(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],munit()),compose(braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),compose(compose(grass,otimes(braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),otimes(compose(GrassIncrements,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),Fail))))),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])))))" + }, + "metadata": {}, + "execution_count": 20 + } + ], + "cell_type": "code", + "source": [ + "overall = while_schedule(cycle, curr -> nparts(curr, :Wolf) >= 0) |> F2" + ], + "metadata": {}, + "execution_count": 20 + }, + { + "cell_type": "markdown", + "source": [ + "view_sched(overall; names=F2(N))" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "X = initialize(3, 0.25, 0.25)\n", + "res, = apply_schedule(overall, X; steps=50);" + ], + "metadata": {}, + "execution_count": 21 + }, + { + "cell_type": "markdown", + "source": [ + "Run this lines to view the trajectory\n", + "view_traj(overall, res, view_LV; agent=true, names=F2(N))" + ], + "metadata": {} + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.9.4" + }, + "kernelspec": { + "name": "julia-1.9", + "display_name": "Julia 1.9.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/docs/src/generated/lotka_volterra.md b/docs/src/generated/lotka_volterra.md new file mode 100644 index 0000000..452c2ff --- /dev/null +++ b/docs/src/generated/lotka_volterra.md @@ -0,0 +1,577 @@ +```@meta +EditURL = "../../literate/lotka_volterra.jl" +``` + +````@example lotka_volterra +using Catlab, Catlab.Theories, Catlab.CategoricalAlgebra, Catlab.Graphs, + Catlab.Graphics, Catlab.WiringDiagrams, Catlab.Programs +using AlgebraicRewriting +using Random, Test, StructEquality +using Luxor + +Random.seed!(123); + +using Catlab.Graphics.Graphviz: Attributes, Statement, Node +using Catlab.Graphics.Graphviz + +import Catlab.CategoricalAlgebra: left, right + +function right(s::Symbol) + if s == :N + return :E + elseif s == :S + return :W + elseif s == :E + return :S + elseif s == :W + return :N + end +end +function left(s::Symbol) + if s == :N + return :W + elseif s == :S + return :E + elseif s == :E + return :N + elseif s == :W + return :S + end +end + +""" +Grass = 0 means alive grass, whereas grass > 0 represent a counter of time until +the grass is alive. + +Sheeps and wolves have position and direction, so we assign each an *edge*. We +assume a convention where the location of the something is the edge SOURCE. + +Dir is an attribute which can take values :N, :E, :W, and :S. +""" +@present TheoryLV <: SchGraph begin + (Sheep, Wolf)::Ob + sheep_loc::Hom(Sheep, V) + wolf_loc::Hom(Wolf, V) + + (Dir, Eng)::AttrType + grass_eng::Attr(V, Eng) + sheep_eng::Attr(Sheep, Eng) + wolf_eng::Attr(Wolf, Eng) + sheep_dir::Attr(Sheep, Dir) + wolf_dir::Attr(Wolf, Dir) + dir::Attr(E, Dir) +end + +@present TheoryLV′ <: TheoryLV begin + Coord::AttrType + coord::Attr(V, Coord) +end + +to_graphviz(TheoryLV; prog="dot") + +@acset_type LV_Generic(TheoryLV) <: HasGraph +const LV = LV_Generic{Symbol,Int} + +@acset_type LV′_Generic(TheoryLV′) <: HasGraph +const LV′ = LV′_Generic{Symbol,Int,Tuple{Int,Int}} + +F = Migrate( + Dict(:Sheep => :Wolf, :Wolf => :Sheep), + Dict([:sheep_loc => :wolf_loc, :wolf_loc => :sheep_loc, + :sheep_eng => :wolf_eng, :wolf_eng => :sheep_eng, :grass_eng => :grass_eng, + :sheep_dir => :wolf_dir, :wolf_dir => :sheep_dir,]), LV) +F2 = Migrate( + Dict(x => x for x in Symbol.(TheoryLV.generators[:Ob])), + Dict(x => x for x in Symbol.(TheoryLV.generators[:Hom])), LV′; delta=false) + +""" +Create a nxn grid with periodic boundary conditions. Edges in each cardinal +direction originate at every point + + +(i,j+1) -> (i+1,j+1) -> ... + ↑ ↑ +(i,j) -> (i+1,j) -> ... + +""" +function create_grid(n::Int) + lv = LV′() + coords = Dict() + for i in 0:n-1 + for j in 0:n-1 + coords[i=>j] = add_part!(lv, :V; grass_eng=max(0, rand(-30:30)), coord=(i, j)) + end + end + for i in 0:n-1 + for j in 0:n-1 + add_part!(lv, :E; src=coords[i=>j], tgt=coords[mod(i + 1, n)=>j], dir=:E) + add_part!(lv, :E; src=coords[i=>j], tgt=coords[mod(i - 1, n)=>j], dir=:W) + add_part!(lv, :E; src=coords[i=>j], tgt=coords[i=>mod(j + 1, n)], dir=:N) + add_part!(lv, :E; src=coords[i=>j], tgt=coords[i=>mod(j - 1, n)], dir=:S) + end + end + return lv +end + +g = create_grid(2) + + +""" +`n` is the length of the grid. +`sheep` and `wolves` are the fraction of spaces that are +populated with that animal +""" +function initialize(n::Int, sheep::Float64, wolves::Float64)::LV′ + grid = create_grid(n) + args = [(sheep, :Sheep, :sheep_loc, :sheep_eng, :sheep_dir), + (wolves, :Wolf, :wolf_loc, :wolf_eng, :wolf_dir)] + for (n_, name, loc, eng, d) in args + for _ in 1:round(Int, n_ * n^2) + dic = Dict([eng => 5, loc => rand(vertices(grid)), + d => rand([:N, :E, :S, :W])]) + add_part!(grid, name; dic...) + end + end + return grid +end + + +supscript_d = Dict([ + '1' => '¹', '2' => '²', '3' => '³', '4' => '⁴', '5' => '⁵', '6' => '⁶', '7' => '⁷', '8' => '⁸', + '9' => '⁹', '0' => '⁰', 'x' => 'ˣ', 'y' => 'ʸ', 'z' => 'ᶻ', 'a' => 'ᵃ', 'b' => 'ᵇ', 'c' => 'ᶜ', + 'd' => 'ᵈ']) +supscript(x::String) = join([get(supscript_d, c, c) for c in x]) + +"""Visualize a LV""" +function view_LV(p::ACSetTransformation, pth=tempname(); name="G", title="") + if nparts(dom(p), :Wolf) == 1 + star = :Wolf => p[:Wolf](1) + elseif nparts(dom(p), :Sheep) == 1 + star = :Sheep => p[:Sheep](1) + elseif nparts(dom(p), :V) == 1 + star = :V => p[:V](1) + else + star = nothing + end + view_LV(codom(p), pth; name=name, title=title, star=star) +end +function view_LV(p::LV′, pth=tempname(); name="G", title="", star=nothing) + pstr = ["$(i),$(j)!" for (i, j) in p[:coord]] + stmts = Statement[] + for s in 1:nv(p) + st = (star == (:V => s)) ? "*" : "" + gv = p[s, :grass_eng] + col = gv == 0 ? "lightgreen" : "tan" + push!(stmts, Node("v$s", Attributes( + :label => gv == 0 ? "" : string(gv) * st, + :shape => "circle", + :color => col, :pos => pstr[s]))) + end + d = Dict([:E => (1, 0), :N => (0, 1), :S => (0, -1), :W => (-1, 0),]) + + args = [(:true, :Wolf, :wolf_loc, :wolf_eng, :wolf_dir), + (false, :Sheep, :sheep_loc, :sheep_eng, :sheep_dir)] + + for (is_wolf, prt, loc, eng, dr) in args + for w in parts(p, prt) + st = (star == ((is_wolf ? :Wolf : :Sheep) => w)) ? "*" : "" + e = only(incident(p, p[w, loc], :src) ∩ incident(p, p[w, dr], :dir)) + s = src(p, e) + dx, dy = d[p[e, :dir]] + (sx, sy) = p[s, :coord] + + L, R = 0.25, 0.1 + wx = sx + L * dx + R * rand() + wy = sy + L * dy + R * rand() + ID = "$(is_wolf ? :w : :s)$w" + append!(stmts, [Node(ID, Attributes( + :label => "$w" * supscript("$(p[w,eng])") * st, + :shape => "square", :width => "0.3px", :height => "0.3px", :fixedsize => "true", + :pos => "$(wx),$(wy)!", :color => is_wolf ? "red" : "lightblue"))]) + end + end + + g = Graphviz.Digraph(name, Statement[stmts...]; prog="neato", + graph_attrs=Attributes(:label => title, :labelloc => "t"), + node_attrs=Attributes(:shape => "plain", :style => "filled")) + open(pth, "w") do io + show(io, "image/svg+xml", g) + end +end + +i1 = initialize(2, 0.5, 0.5) +```` + +view_LV(i1) + +RULES + +````@example lotka_volterra +####### +yLV = yoneda_cache(LV; clear=true); +yLV = yoneda_cache(LV; clear=false); +nothing #hide +```` + +Empty agent type + +````@example lotka_volterra +I = LV() +```` + +Generic sheep agent + +````@example lotka_volterra +S = @acset_colim yLV begin + s::Sheep +end +```` + +Generic wolf agent + +````@example lotka_volterra +W = F(S) +```` + +Generic grass agent + +````@example lotka_volterra +G = @acset_colim yLV begin + v::V +end + +N = Names(Dict("W" => W, "S" => S, "G" => G, "" => I)) +```` + +Rotating + +````@example lotka_volterra +rl = Rule(id(S), id(S); expr=(Dir=[xs -> left(only(xs))],)) +rr = Rule(id(S), id(S); expr=(Dir=[xs -> right(only(xs))],)) + +sheep_rotate_l = tryrule(RuleApp(:turn_left, rl, S)) +sheep_rotate_r = tryrule(RuleApp(:turn_right, rr, S)) +```` + +we can imagine executing these rules in sequence or in parallel + +````@example lotka_volterra +seq_sched = (sheep_rotate_l ⋅ sheep_rotate_r) +```` + +view_sched(seq_sched; names=N) + +````@example lotka_volterra +par_sched = (sheep_rotate_l ⊗ sheep_rotate_r) +```` + +view_sched(par_sched; names=N) + +````@example lotka_volterra +begin + ex = @acset_colim yLV begin + e::E + s::Sheep + sheep_loc(s) == src(e) + sheep_dir(s) == :N + end + expected = copy(ex) + expected[:sheep_dir] = :W + @test is_isomorphic(rewrite(rl, ex), expected) +end +```` + +Moving forward + +````@example lotka_volterra +s_fwd_l = @acset_colim yLV begin + e::E + s::Sheep + sheep_loc(s) == src(e) +end +s_fwd_i = @acset_colim yLV begin + e::E +end +s_fwd_r = @acset_colim yLV begin + e::E + s::Sheep + sheep_loc(s) == tgt(e) +end +s_n = @acset_colim yLV begin + e::E + s::Sheep + sheep_loc(s) == src(e) + sheep_eng(s) == 0 +end + +sheep_fwd_rule = Rule( + homomorphism(s_fwd_i, s_fwd_l; monic=true), + homomorphism(s_fwd_i, s_fwd_r; monic=true), + ac=[AppCond(homomorphism(s_fwd_l, s_n), false)], + expr=(Eng=Dict(3 => vs -> vs[3] - 1), Dir=Dict(2 => vs -> vs[2])) +) + +sheep_fwd = tryrule(RuleApp(:move_fwd, sheep_fwd_rule, + homomorphism(S, s_fwd_l), homomorphism(S, s_fwd_r))) + + +sheep_fwd_rule.L |> codom + +begin # test + ex = @acset_colim yLV begin + (e1, e2)::E + s::Sheep + sheep_loc(s) == tgt(e1) + tgt(e1) == src(e2) + sheep_dir(s) == :N + sheep_eng(s) == 10 + end + expected = @acset_colim yLV begin + (e1, e2)::E + s::Sheep + sheep_loc(s) == tgt(e2) + tgt(e1) == src(e2) + sheep_dir(s) == :N + sheep_eng(s) == 9 + end + @test is_isomorphic(expected, rewrite(sheep_fwd_rule, ex)) +end +```` + +Eat grass + 4eng + +Grass is at 0 - meaning it's ready to be eaten + +````@example lotka_volterra +s_eat_pac = @acset_colim yLV begin + s::Sheep + grass_eng(sheep_loc(s)) == 0 +end + +se_rule = Rule(id(S), id(S); expr=(Eng=[vs -> vs[1] + 4, vs -> 30],), + ac=[AppCond(homomorphism(S, s_eat_pac))]) +sheep_eat = tryrule(RuleApp(:Sheep_eat, se_rule, S)) + +begin # test + ex = @acset_colim yLV begin + s::Sheep + e::E + sheep_loc(s) == tgt(e) + sheep_eng(s) == 3 + grass_eng(tgt(e)) == 0 + grass_eng(src(e)) == 10 + end + expected = @acset_colim yLV begin + s::Sheep + e::E + sheep_loc(s) == tgt(e) + sheep_eng(s) == 7 + grass_eng(tgt(e)) == 30 + grass_eng(src(e)) == 10 + end + + @test is_isomorphic(expected, rewrite(se_rule, ex)) +end +```` + +Eat sheep + 20 eng + +````@example lotka_volterra +w_eat_l = @acset_colim yLV begin + s::Sheep + w::Wolf + sheep_loc(s) == wolf_loc(w) +end + +we_rule = Rule(homomorphism(W, w_eat_l), id(W); expr=(Eng=[vs -> vs[3] + 20, vs -> vs[1]],)) +wolf_eat = tryrule(RuleApp(:Wolf_eat, we_rule, W)) + +begin # test + ex = @acset LV begin + Sheep = 1 + Wolf = 1 + V = 3 + E = 2 + src = [1, 2] + tgt = [2, 3] + sheep_loc = 2 + sheep_eng = [3] + grass_eng = [9, 10, 11] + dir = fill(:N, 2) + sheep_dir = [:N] + wolf_loc = [2] + wolf_eng = [16] + wolf_dir = [:S] + end + expected = @acset LV begin + Wolf = 1 + V = 3 + E = 2 + src = [1, 2] + tgt = [2, 3] + grass_eng = [9, 10, 11] + dir = fill(:N, 2) + sheep_dir = [:N] + wolf_loc = [2] + wolf_eng = [36] + wolf_dir = [:S] + end + @test is_isomorphic(rewrite(we_rule, ex), expected) +end +```` + +Die if 0 eng + +````@example lotka_volterra +s_die_l = @acset_colim yLV begin + s::Sheep + sheep_eng(s) == 0 +end + +sheep_die_rule = Rule(homomorphism(G, s_die_l), id(G)) +sheep_starve = (RuleApp(:starve, sheep_die_rule, + homomorphism(S, s_die_l), create(G)) + ⋅ + (id([I]) ⊗ Weaken(create(S))) ⋅ merge_wires(I)) + +begin # test + ex = s_die_l ⊕ W + expected = G ⊕ W + @test is_isomorphic(rewrite(sheep_die_rule, ex), expected) +end +```` + +reproduction + +````@example lotka_volterra +s_reprod_r = @acset_colim yLV begin + (x, y)::Sheep + sheep_loc(x) == sheep_loc(y) +end + +sheep_reprod_rule = Rule( + homomorphism(G, S), + homomorphism(G, s_reprod_r); + expr=(Dir=[vs -> vs[1], vs -> vs[1]], Eng=[vs -> vs[2], + fill(vs -> round(Int, vs[1] / 2, RoundUp), 2)...],) +) + +sheep_reprod = RuleApp(:reproduce, sheep_reprod_rule, + id(S), homomorphism(S, s_reprod_r)) |> tryrule + +begin # test + ex = @acset_colim yLV begin + s::Sheep + w::Wolf + sheep_eng(s) == 10 + end + expected = @acset_colim yLV begin + (s1, s2)::Sheep + w::Wolf + sheep_loc(s1) == sheep_loc(s2) + sheep_eng(s1) == 5 + sheep_eng(s2) == 5 + end + @test is_isomorphic(rewrite(sheep_reprod_rule, ex), expected) +end +```` + +Grass increment + +````@example lotka_volterra +g_inc_n = deepcopy(G) +set_subpart!(g_inc_n, 1, :grass_eng, 0); +rem_part!(g_inc_n, :Eng, 1) + +g_inc_rule = Rule(id(G), id(G); + ac=[AppCond(homomorphism(G, g_inc_n), false)], + expr=(Eng=[vs -> only(vs) - 1],)) +g_inc = RuleApp(:GrassIncrements, g_inc_rule, G) |> tryrule + + +begin # test + ex = @acset LV begin + Sheep = 1 + V = 3 + E = 2 + src = [1, 2] + tgt = [2, 3] + sheep_loc = 2 + sheep_eng = [3] + grass_eng = [1, 10, 2] + dir = fill(:N, 2) + sheep_dir = [:N] + end + expected = @acset LV begin + Sheep = 1 + V = 3 + E = 2 + src = [1, 2] + tgt = [2, 3] + sheep_loc = 2 + sheep_eng = [3] + grass_eng = [0, 10, 2] + dir = fill(:N, 2) + sheep_dir = [:N] + end + @test is_isomorphic(rewrite(g_inc_rule, ex), expected) +end +```` + +Scheduling Rules + +````@example lotka_volterra +################## +```` + +Stuff that happens once per sheep + +25% chance of left turn, 25% chance of right turn, 50% stay in same direction + +````@example lotka_volterra +general = mk_sched((;), (init=:S,), N, ( + turn=const_cond([1.0, 2.0, 1.0], S; name=:turn), + maybe=const_cond([0.1, 0.9], S; name=:reprod), + lft=sheep_rotate_l, + rght=sheep_rotate_r, + fwd=sheep_fwd, + repro=sheep_reprod, + starve=sheep_starve), + quote + out_l, out_str, out_r = turn(init) + moved = fwd([lft(out_l), out_str, rght(out_r)]) + out_repro, out_no_repro = maybe(moved) + return starve([repro(out_repro), out_no_repro]) + end) + +sheep = sheep_eat ⋅ general # once per sheep +wolf = wolf_eat ⋅ F(general) # once per wolf +```` + +Do all sheep, then all wolves, then all daily operations + +````@example lotka_volterra +cycle = (agent(sheep; n=:sheep, ret=I) + ⋅ + agent(wolf; n=:wolves, ret=I) + ⋅ + agent(g_inc; n=:grass)) +```` + +wrap in a while loop + +````@example lotka_volterra +overall = while_schedule(cycle, curr -> nparts(curr, :Wolf) >= 0) |> F2 +```` + +view_sched(overall; names=F2(N)) + +````@example lotka_volterra +X = initialize(3, 0.25, 0.25) +res, = apply_schedule(overall, X; steps=50); +nothing #hide +```` + +Run this lines to view the trajectory +view_traj(overall, res, view_LV; agent=true, names=F2(N)) + diff --git a/docs/src/generated/mesh.md b/docs/src/generated/mesh.md new file mode 100644 index 0000000..15c697e --- /dev/null +++ b/docs/src/generated/mesh.md @@ -0,0 +1,218 @@ +```@meta +EditURL = "../../literate/mesh.jl" +``` + +````@example mesh +using Catlab, Catlab.Graphs, Catlab.CategoricalAlgebra +using CairoMakie, GeometryBasics +using Base.Iterators +using CombinatorialSpaces +import AlgebraicPetri +using CombinatorialSpaces.SimplicialSets: get_edge! + +""" +Suppose we want to perform rewriting on a mesh with triangles defined over +certain triples of edges. +""" + +@present ThSemisimplicialSet <: SchGraph begin + T::Ob + (d1, d2, d3)::Hom(T, E) + compose(d1, src) == compose(d2, src) + compose(d1, tgt) == compose(d3, tgt) + compose(d2, tgt) == compose(d3, src) +end +@acset_type SSet(ThSemisimplicialSet) + +quadrangle = @acset SSet begin + T = 2 + E = 5 + V = 4 + d1 = [1, 1] + d2 = [2, 3] + d3 = [4, 5] + src = [1, 1, 1, 2, 3] + tgt = [4, 2, 3, 4, 4] +end + +function plot_sset(ss::SSet, points::Vector, + tri_colors::Union{Nothing,Vector}=nothing) + dflt = collect(take(cycle([:blue, :red, :green, :purple, :pink, :yellow, + :grey, :orange, :brown, :cyan]), + nparts(ss, :T))) + tri_colors = isnothing(tri_colors) ? dflt : tri_colors + + lengthscale = 0.8 # Validate inputs + dim = length(points[1]) + length(points) == nparts(ss, :V) || error("# of points") + if dim == 2 + points = [(p1, p2, 0.0) for (p1, p2) in points] + elseif dim != 3 + error("dim $dim") + end + tri_colors = tri_colors[1:nparts(ss, :T)] + + s = EmbeddedDeltaSet2D{Bool,Point{3,Float64}}() # convert SSet to EmbeddedDeltaSet2D + + edge_colors = [:black for _ in nparts(ss, :E)] + add_vertices!(s, length(points), point=points) + for (src, tgt) in zip(ss[:src], ss[:tgt]) + get_edge!(s, src, tgt) + end + + for t in parts(ss, :T) + glue_sorted_triangle!(s, ss[t, [:d1, :src]], + ss[t, [:d3, :src]], + ss[t, [:d1, :tgt]]) + end + + m = GeometryBasics.Mesh(s) # split mesh into component triangles + x = faces(m) + m_points = m.position[vcat([[t[1], t[2], t[3]] for t in x]...)] + m_faces = TriangleFace{Int}[[((t - 1) * 3) .+ (1, 2, 3) for t in 1:length(x)]...] + new_m = GeometryBasics.Mesh(Point{3,Float64}[m_points...], m_faces) + if ntriangles(s) == 0 + fig, ax, ob = arrows((s[s[:∂v0], :point] * (0.5 + lengthscale / 2) + .+ + s[s[:∂v1], :point] * (0.5 - lengthscale / 2)), + (s[s[:∂v1], :point] .- s[s[:∂v0], :point]), + lengthscale=lengthscale, arrowsize=0.05, shininess=0.0, + color=edge_colors, diffuse=[0.0, 0.0, 0.0]) + else + fig, ax, ob = mesh(new_m, color=vcat([[v, v, v] for v in tri_colors]...)) + arrows!((s[s[:∂v0], :point] * (0.5 + lengthscale / 2) + .+ + s[s[:∂v1], :point] * (0.5 - lengthscale / 2)), + (s[s[:∂v1], :point] .- s[s[:∂v0], :point]), + lengthscale=lengthscale, arrowsize=0.05, shininess=0.0, + color=edge_colors, diffuse=[0.0, 0.0, 0.0]) + end + if dim == 2 + spines!(ax) + hidedecorations!(ax) + ax.aspect = AxisAspect(1.0) # Remove this line if 3D embedding + end + fig +end + + +quad_coords = [(0, 1, 0), (1, 1, 0), (0, 0, 0), (1, 0, 0)] +plot_sset(quadrangle, quad_coords) + + + +L = quadrangle +I = @acset SSet begin + E = 4 + V = 4 + src = [1, 1, 2, 3] + tgt = [2, 3, 4, 4] +end +quad_coords = [(0, 1, 0), (1, 1, 0), (0, 0, 0), (1, 0, 0)] +plot_sset(I, quad_coords) + + +""" +Our replacement pattern will add two triangles and an edge, but now the edge +is perpendicular to where it was before. +""" + +R = @acset SSet begin + T = 2 + E = 5 + V = 4 + d1 = [2, 3] + d2 = [1, 5] + d3 = [5, 4] + src = [1, 1, 2, 3, 2] + tgt = [2, 3, 4, 4, 3] +end +quad_coords = [(0, 1, 0), (1, 1, 0), (0, 0, 0), (1, 0, 0)] +plot_sset(R, quad_coords) + + +""" +Again we create a rewrite rule by relating the `I` to `L` and `R`. +""" + +r = Rule(hom(I, R; monic=true), + hom(I, L; monic=true); + monic=true) + + +""" +We can construct a mesh to test this rewrite on by gluing together two +quadrilaterals (via a *pushout* along a common edge). +""" + +edge = @acset SSet begin + E = 1 + V = 2 + src = [1] + tgt = [2] +end +edge_left = hom(edge, L; initial=Dict([:V => [1, 3]])) +edge_right = hom(edge, L; initial=Dict([:V => [2, 4]])) +G = pushout(edge_left, edge_right) |> apex +six_coords = vcat(quad_coords, [(-1.0, 1.0, 0.0), (-1.0, 0.0, 0.0),]) +plot_sset(G, six_coords) + +""" +We then can perform the rewrite in larger contexts than just the pattern, such +as a mesh with two quadrilaterals. +""" +res = rewrite(r, G) + + + +""" +### Single pushout rewriting +Implicit deletion works like a cascading delete: if you delete a vertex +(for example), then you implicitly delete an edge which refers to that vertex +(and a triangle that refers to that edge, and so on). Here we delete a triangle +and a vertex explicitly, but implicitly the deleted vertex +""" + +Tri = @acset SSet begin + T = 1 + E = 3 + V = 3 + d1 = [1] + d2 = [2] + d3 = [3] + src = [1, 1, 2] + tgt = [3, 2, 3] +end +L = Tri +r = Rule{:SPO}(homomorphisms(edge, L)[2], id(edge)) +m = homomorphism(L, quadrangle) +```` + +can_pushout_complement(r.L, m) == false + +````@example mesh +rewrite_match(r, m) + +""" +Sesqui pushout rewriting + +Here our rewrite rule takes a vertex and duplicates it. +""" +L = @acset SSet begin + V = 1 +end +I = @acset SSet begin + V = 2 +end +r = Rule{:SqPO}(homomorphism(I, L), id(I)) + +""" +With sesqui-pushout semantics, when we apply this to the vertex of a triangle, +this will create two triangles. +""" +G = Tri +m = CSetTransformation(L, G, V=[1]); +nparts(sesqui_pushout_rewrite(l, r, m), :T) == 4 || error("We get 4 'triangles' when we ignore equations") +rewrite_match(r, m; pres=ThSemisimplicialSet) # pass in the equations +```` + diff --git a/docs/src/generated/petri_to_abm.md b/docs/src/generated/petri_to_abm.md new file mode 100644 index 0000000..5582c60 --- /dev/null +++ b/docs/src/generated/petri_to_abm.md @@ -0,0 +1,110 @@ +```@meta +EditURL = "../../literate/petri_to_abm.jl" +``` + +````@example petri_to_abm +""" +We can convert any petri net into a ABM, giving it the "token-passing" +semantics, by converting each transition into a rewrite rule. +""" + +using AlgebraicPetri +using AlgebraicRewriting +using Catlab, Catlab.Theories, Catlab.CategoricalAlgebra +const hom = homomorphism + +sir_petri = LabelledPetriNet([:S, :I, :R], + :inf => ((:S, :I) => (:I, :I)), + :rec => (:I => :R)) + +""" +The states of a Petri net induce a discrete schema for a C-Set +""" +function petri_to_cset_type(p::LabelledPetriNet, name::Symbol=:Discrete)::Type + pres = Presentation(FreeSchema) + [add_generator!(pres, Ob(FreeSchema, l)) for l in p[:sname]] + macro_call_expr = Expr(:macrocall, Symbol("@acset_type"), name, pres) + return eval(macro_call_expr) +end + +SIR = petri_to_cset_type(sir_petri) + +""" +The rewrite rule matches for the inputs to the transition, deletes them, and +adds the outputs to the transition. +""" +function transition_to_rw_rule(p::LabelledPetriNet, t::Int) + Rule(map([(:it, :is), (:ot, :os)]) do (getIO, getState) + cset = petri_to_cset_type(p)() + [add_part!(cset, x) for x in p[incident(p, 1, getIO), [getState, :sname]]] + return create(cset) # interface I is an empty C-Set + end...) +end + +rw = transition_to_rw_rule(sir_petri, 1) +codom(rw.L) # C-Set with S=1 and I=1 +codom(rw.R) # C-Set with I=2 + +""" +We can repeat the above but this time include a graph that the tokens live on. +We assume the tokens move around randomly and interact only when living on the +same vertex +""" + +using Catlab.Graphs: SchGraph + +loc(s::Symbol) = Symbol("$(s)_loc") + +function petri_to_cset_type_gr(p::LabelledPetriNet, name::Symbol=:PGraph)::Type + pres = copy(SchGraph) + isempty(p[:sname] ∩ [:V, :E]) || error("V and E are reserved") + for l in p[:sname] + add_generator!(pres, Hom(loc(l), + add_generator!(pres, Ob(FreeSchema, l)), + pres.generators[:Ob][1])) + end + macro_call_expr = Expr(:macrocall, Symbol("@acset_type"), name, pres) + return eval(macro_call_expr) +end + +SIR_gr = petri_to_cset_type_gr(sir_petri) + +"""Each transition requires all tokens to be on the same vertex""" +function transition_to_rw_rule_gr(p::LabelledPetriNet, t::Int) + V = @acset petri_to_cset_type_gr(p) begin + V = 1 + end + Rule(map([(:it, :is), (:ot, :os)]) do (getIO, getState) + cset = deepcopy(V) + [add_part!(cset, x; Dict(loc(x) => 1)...) + for x in p[incident(p, t, getIO), [getState, :sname]]] + return hom(V, cset) # interface I is an empty C-Set + end...) +end +rw = transition_to_rw_rule_gr(sir_petri, 1) +codom(rw.L) # S and I on a vertex +dom(rw.L) # Just a vertex +codom(rw.R) # Two I's on a vertex + +"""Now each token type needs a rewrite rule to move""" +function state_to_rw_rule_gr(p::LabelledPetriNet, s::Int) + E = @acset petri_to_cset_type_gr(p) begin + V = 2 + E = 1 + src = 1 + tgt = 2 + end + x = p[s, :sname] + Rule(map(1:2) do i + cset = deepcopy(E) + add_part!(cset, x; Dict(loc(x) => i)...) + return hom(E, cset) + end...) +end + +rw = state_to_rw_rule_gr(sir_petri, 1) +codom(rw.L) # S on position 1 +dom(rw.L) # Just an edge +codom(rw.R) # S on position 2 +```` + diff --git a/docs/src/generated/ptg_simple.ipynb b/docs/src/generated/ptg_simple.ipynb new file mode 100644 index 0000000..1768e49 --- /dev/null +++ b/docs/src/generated/ptg_simple.ipynb @@ -0,0 +1,876 @@ +{ + "cells": [ + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Activating project at `~/Documents/Git/aaguinal.github.io/assets/slides/aaai-symposiumtalk-2023/julia`\n", + "Precompiling project...\n", + "\u001b[32m ✓ \u001b[39m\u001b[90mInvertedIndices\u001b[39m\n", + "\u001b[33m ✓ \u001b[39m\u001b[90mPermutations\u001b[39m\n", + "\u001b[32m ✓ \u001b[39m\u001b[90mWorkerUtilities\u001b[39m\n", + "\u001b[33m ✓ \u001b[39m\u001b[90mCompat\u001b[39m\n", + "\u001b[32m ✓ \u001b[39m\u001b[90mPooledArrays\u001b[39m\n", + "\u001b[33m ✓ \u001b[39m\u001b[90mOrderedCollections\u001b[39m\n", + "\u001b[33m ✓ \u001b[39m\u001b[90mXML2_jll\u001b[39m\n", + "\u001b[32m ✓ \u001b[39m\u001b[90mInlineStrings\u001b[39m\n", + "\u001b[33m ✓ \u001b[39m\u001b[90mCompat → CompatLinearAlgebraExt\u001b[39m\n", + "\u001b[32m ✓ \u001b[39m\u001b[90mSentinelArrays\u001b[39m\n", + "\u001b[33m ✓ \u001b[39m\u001b[90mLightXML\u001b[39m\n", + "\u001b[32m ✓ \u001b[39m\u001b[90mWeakRefStrings\u001b[39m\n", + "\u001b[32m ✓ \u001b[39mCSV\n", + "\u001b[33m ✓ \u001b[39mPrettyTables\n", + "\u001b[33m ✓ \u001b[39mACSets\n", + "\u001b[32m ✓ \u001b[39mDataFrames\n", + "\u001b[32m ✓ \u001b[39m\u001b[90mCatlab → CatlabDataFramesExt\u001b[39m\n", + " 17 dependencies successfully precompiled in 179 seconds. 52 already precompiled.\n", + " \u001b[33m8\u001b[39m dependencies precompiled but different versions are currently loaded. Restart julia to access the new versions\n" + ] + } + ], + "cell_type": "code", + "source": [ + "using Pkg\n", + "cd(\"/Users/aguinam1/Documents/Git/aaguinal.github.io/assets/slides/aaai-symposiumtalk-2023/julia\") # use this environment to avoid `constructor` error\n", + "Pkg.activate(\".\")\n", + "Pkg.instantiate()\n", + "using PrettyTables\n", + "\n", + "using Catlab\n", + "using AlgebraicRewriting\n", + "\n", + "############################### SCHEMA ###############################" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "Create an ontology by defining a finite presentation of a freely generated category using @present macro" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "About the world: The Bread World Ontology has the types Thing, BreadLoaf, Countertop, and Stool. The Breadloaf, Countertop, and Stool types have morphisms to Thing that represent is-a relationships. The InOn type can be used to encode a set relation (as opposed to a function) that was two morphisms going to Thing. One morphism points out the LHS of the relation and the other morphism point out the RHS of the relation." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Catlab.GATs.Presentations.Presentation{Catlab.Theories.ThSchema, Symbol}(Catlab.Theories.FreeSchema, (Ob = Catlab.Theories.FreeSchema.Ob{:generator}[Thing, BreadLoaf, Countertop, Stool, InOn], Hom = Catlab.Theories.FreeSchema.Hom{:generator}[BreadLoafIsThing, CountertopIsThing, StoolIsThing, inOn_l, inOn_r], AttrType = Catlab.Theories.FreeSchema.AttrType{:generator}[], Attr = Catlab.Theories.FreeSchema.Attr{:generator}[]), Dict(:inOn_r => (:Hom => 5), :CountertopIsThing => (:Hom => 2), :Countertop => (:Ob => 3), :BreadLoaf => (:Ob => 2), :Thing => (:Ob => 1), :BreadLoafIsThing => (:Hom => 1), :StoolIsThing => (:Hom => 3), :InOn => (:Ob => 5), :inOn_l => (:Hom => 4), :Stool => (:Ob => 4)…), Pair[])" + }, + "metadata": {}, + "execution_count": 2 + } + ], + "cell_type": "code", + "source": [ + "@present OntBreadWorld(FreeSchema) begin\n", + " Thing::Ob\n", + " BreadLoaf::Ob\n", + " Countertop::Ob\n", + " Stool::Ob\n", + "\n", + " BreadLoafIsThing::Hom(BreadLoaf, Thing) # is-a\n", + " CountertopIsThing::Hom(Countertop, Thing) # is-a\n", + " StoolIsThing::Hom(Stool, Thing) # is-a\n", + "\n", + " InOn::Ob\n", + " inOn_l::Hom(InOn, Thing)\n", + " inOn_r::Hom(InOn, Thing)\n", + "end" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "Visualize the ontology" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"neato\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"Thing\")), Catlab.Graphics.Graphviz.Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"BreadLoaf\")), Catlab.Graphics.Graphviz.Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"Countertop\")), Catlab.Graphics.Graphviz.Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"Stool\")), Catlab.Graphics.Graphviz.Node(\"n5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"InOn\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"BreadLoafIsThing\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"CountertopIsThing\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"StoolIsThing\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"inOn_l\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"inOn_r\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:margin => \"0\", :shape => \"ellipse\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())", + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "G\n", + "\n", + "\n", + "\n", + "n1\n", + "\n", + "Thing\n", + "\n", + "\n", + "\n", + "n2\n", + "\n", + "BreadLoaf\n", + "\n", + "\n", + "\n", + "n2->n1\n", + "\n", + "\n", + "BreadLoafIsThing\n", + "\n", + "\n", + "\n", + "n3\n", + "\n", + "Countertop\n", + "\n", + "\n", + "\n", + "n3->n1\n", + "\n", + "\n", + "CountertopIsThing\n", + "\n", + "\n", + "\n", + "n4\n", + "\n", + "Stool\n", + "\n", + "\n", + "\n", + "n4->n1\n", + "\n", + "\n", + "StoolIsThing\n", + "\n", + "\n", + "\n", + "n5\n", + "\n", + "InOn\n", + "\n", + "\n", + "\n", + "n5->n1\n", + "\n", + "\n", + "inOn_l\n", + "\n", + "\n", + "\n", + "n5->n1\n", + "\n", + "\n", + "inOn_r\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 3 + } + ], + "cell_type": "code", + "source": [ + "to_graphviz(OntBreadWorld)" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "Make the ontology an acset type" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Main.var\"##392\".BreadWorld" + }, + "metadata": {}, + "execution_count": 4 + } + ], + "cell_type": "code", + "source": [ + "@acset_type BreadWorld(OntBreadWorld)\n", + "\n", + "############################### RULE ###############################" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "Construct rule by defining a span in the category of ACSets" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Use the @acset macro to define an ACSet functor. The LHS refers to a type (or object) in our ontology and the RHS defines the set assignment using FinFunctions. For this, you need to completely specify the ACSet functor, i.e. every object and morphism in the index category must be specified." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "About the rule: This rule moves a breadloaf from a countertop to a stool." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Left ACSet" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Main.var\"##392\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:1}\n┌───────────┬──────────────────┐\n│\u001b[1m BreadLoaf \u001b[0m│\u001b[1m BreadLoafIsThing \u001b[0m│\n├───────────┼──────────────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │\n└───────────┴──────────────────┘\n┌────────────┬───────────────────┐\n│\u001b[1m Countertop \u001b[0m│\u001b[1m CountertopIsThing \u001b[0m│\n├────────────┼───────────────────┤\n│\u001b[1m 1 \u001b[0m│ 2 │\n└────────────┴───────────────────┘\n┌───────┬──────────────┐\n│\u001b[1m Stool \u001b[0m│\u001b[1m StoolIsThing \u001b[0m│\n├───────┼──────────────┤\n│\u001b[1m 1 \u001b[0m│ 3 │\n└───────┴──────────────┘\n┌──────┬────────┬────────┐\n│\u001b[1m InOn \u001b[0m│\u001b[1m inOn_l \u001b[0m│\u001b[1m inOn_r \u001b[0m│\n├──────┼────────┼────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │ 2 │\n└──────┴────────┴────────┘\n", + "text/html": [ + "
\n", + "Main.var\"##392\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:1}\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
BreadLoafBreadLoafIsThing
11
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
CountertopCountertopIsThing
12
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
StoolStoolIsThing
13
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
InOninOn_linOn_r
112
\n", + "
\n" + ] + }, + "metadata": {}, + "execution_count": 5 + } + ], + "cell_type": "code", + "source": [ + "L = @acset BreadWorld begin\n", + " Thing = 3\n", + " BreadLoaf = 1\n", + " Countertop = 1\n", + " Stool = 1\n", + "\n", + " BreadLoafIsThing = [1]\n", + " CountertopIsThing = [2]\n", + " StoolIsThing = [3]\n", + "\n", + " InOn = 1\n", + " inOn_l = [1]\n", + " inOn_r = [2] # breadloaf is on the countertop\n", + "end" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "Middle/Keep ACSet\n", + "The Thing, Breadloaf, Countertop, and Stool types should be held constant. The InOn type will change because we are changing the underlying set function." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Main.var\"##392\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:0}\n┌───────────┬──────────────────┐\n│\u001b[1m BreadLoaf \u001b[0m│\u001b[1m BreadLoafIsThing \u001b[0m│\n├───────────┼──────────────────┤\n│\u001b[1m 1 \u001b[0m│ 0 │\n└───────────┴──────────────────┘\n┌────────────┬───────────────────┐\n│\u001b[1m Countertop \u001b[0m│\u001b[1m CountertopIsThing \u001b[0m│\n├────────────┼───────────────────┤\n│\u001b[1m 1 \u001b[0m│ 0 │\n└────────────┴───────────────────┘\n┌───────┬──────────────┐\n│\u001b[1m Stool \u001b[0m│\u001b[1m StoolIsThing \u001b[0m│\n├───────┼──────────────┤\n│\u001b[1m 1 \u001b[0m│ 0 │\n└───────┴──────────────┘\n", + "text/html": [ + "
\n", + "Main.var\"##392\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:0}\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
BreadLoafBreadLoafIsThing
10
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
CountertopCountertopIsThing
10
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
StoolStoolIsThing
10
\n", + "
\n" + ] + }, + "metadata": {}, + "execution_count": 6 + } + ], + "cell_type": "code", + "source": [ + "K = @acset BreadWorld begin\n", + " Thing = 3\n", + " BreadLoaf = 1\n", + " Countertop = 1\n", + " Stool = 1\n", + "end" + ], + "metadata": {}, + "execution_count": 6 + }, + { + "cell_type": "markdown", + "source": [ + "Right ACSet" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Main.var\"##392\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:1}\n┌───────────┬──────────────────┐\n│\u001b[1m BreadLoaf \u001b[0m│\u001b[1m BreadLoafIsThing \u001b[0m│\n├───────────┼──────────────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │\n└───────────┴──────────────────┘\n┌────────────┬───────────────────┐\n│\u001b[1m Countertop \u001b[0m│\u001b[1m CountertopIsThing \u001b[0m│\n├────────────┼───────────────────┤\n│\u001b[1m 1 \u001b[0m│ 2 │\n└────────────┴───────────────────┘\n┌───────┬──────────────┐\n│\u001b[1m Stool \u001b[0m│\u001b[1m StoolIsThing \u001b[0m│\n├───────┼──────────────┤\n│\u001b[1m 1 \u001b[0m│ 3 │\n└───────┴──────────────┘\n┌──────┬────────┬────────┐\n│\u001b[1m InOn \u001b[0m│\u001b[1m inOn_l \u001b[0m│\u001b[1m inOn_r \u001b[0m│\n├──────┼────────┼────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │ 3 │\n└──────┴────────┴────────┘\n", + "text/html": [ + "
\n", + "Main.var\"##392\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:1}\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
BreadLoafBreadLoafIsThing
11
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
CountertopCountertopIsThing
12
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
StoolStoolIsThing
13
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
InOninOn_linOn_r
113
\n", + "
\n" + ] + }, + "metadata": {}, + "execution_count": 7 + } + ], + "cell_type": "code", + "source": [ + "R = @acset BreadWorld begin\n", + " Thing = 3\n", + " BreadLoaf = 1\n", + " Countertop = 1\n", + " Stool = 1\n", + "\n", + " BreadLoafIsThing = [1]\n", + " CountertopIsThing = [2]\n", + " StoolIsThing = [3]\n", + "\n", + " InOn = 1\n", + " inOn_l = [1]\n", + " inOn_r = [3] # breadloaf is on the stool\n", + "end" + ], + "metadata": {}, + "execution_count": 7 + }, + { + "cell_type": "markdown", + "source": [ + "Left leg of span" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "ACSetTransformation((Thing = FinFunction([1, 2, 3], 3, 3), BreadLoaf = FinFunction([1], 1, 1), Countertop = FinFunction([1], 1, 1), Stool = FinFunction([1], 1, 1), InOn = FinFunction(1:0, 0, 1)), Main.var\"##392\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:0}, Main.var\"##392\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:1})" + }, + "metadata": {}, + "execution_count": 8 + } + ], + "cell_type": "code", + "source": [ + "l = ACSetTransformation(K, L, Thing=[1, 2, 3], BreadLoaf=[1], Countertop=[1], Stool=[1])" + ], + "metadata": {}, + "execution_count": 8 + }, + { + "cell_type": "markdown", + "source": [ + "Right leg of span" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "ACSetTransformation((Thing = FinFunction([1, 2, 3], 3, 3), BreadLoaf = FinFunction([1], 1, 1), Countertop = FinFunction([1], 1, 1), Stool = FinFunction([1], 1, 1), InOn = FinFunction(1:0, 0, 1)), Main.var\"##392\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:0}, Main.var\"##392\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:1})" + }, + "metadata": {}, + "execution_count": 9 + } + ], + "cell_type": "code", + "source": [ + "r = ACSetTransformation(K, R, Thing=[1, 2, 3], BreadLoaf=[1], Countertop=[1], Stool=[1])" + ], + "metadata": {}, + "execution_count": 9 + }, + { + "cell_type": "markdown", + "source": [ + "Use AlgebraicRewriting.Rule wrapper to add a rule interface" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Rule{:DPO}(ACSetTransformation((Thing = FinFunction([1, 2, 3], 3, 3), BreadLoaf = FinFunction([1], 1, 1), Countertop = FinFunction([1], 1, 1), Stool = FinFunction([1], 1, 1), InOn = FinFunction(1:0, 0, 1)), Main.var\"##392\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:0}, Main.var\"##392\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:1}), ACSetTransformation((Thing = FinFunction([1, 2, 3], 3, 3), BreadLoaf = FinFunction([1], 1, 1), Countertop = FinFunction([1], 1, 1), Stool = FinFunction([1], 1, 1), InOn = FinFunction(1:0, 0, 1)), Main.var\"##392\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:0}, Main.var\"##392\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:1}), Constraint[], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())" + }, + "metadata": {}, + "execution_count": 10 + } + ], + "cell_type": "code", + "source": [ + "moveBreadRule = Rule(l, r)\n", + "\n", + "############################### WORLD STATE ###############################" + ], + "metadata": {}, + "execution_count": 10 + }, + { + "cell_type": "markdown", + "source": [ + "Define a world state using the @acset macro. This is the ACSet way of specifying an ACSet. For this, you need to completely specify the ACSet functor, i.e. every object and morphism in the index category must be specified. The ACSets must be specified in terms of FinFunctions." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "About the world state: In this world state, there are two countertops, one stool, and one breadloaf. All of these amount to four things. The breadloaf is on the first countertop." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Main.var\"##392\".BreadWorld {Thing:4, BreadLoaf:1, Countertop:2, Stool:1, InOn:1}\n┌───────────┬──────────────────┐\n│\u001b[1m BreadLoaf \u001b[0m│\u001b[1m BreadLoafIsThing \u001b[0m│\n├───────────┼──────────────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │\n└───────────┴──────────────────┘\n┌────────────┬───────────────────┐\n│\u001b[1m Countertop \u001b[0m│\u001b[1m CountertopIsThing \u001b[0m│\n├────────────┼───────────────────┤\n│\u001b[1m 1 \u001b[0m│ 2 │\n│\u001b[1m 2 \u001b[0m│ 3 │\n└────────────┴───────────────────┘\n┌───────┬──────────────┐\n│\u001b[1m Stool \u001b[0m│\u001b[1m StoolIsThing \u001b[0m│\n├───────┼──────────────┤\n│\u001b[1m 1 \u001b[0m│ 4 │\n└───────┴──────────────┘\n┌──────┬────────┬────────┐\n│\u001b[1m InOn \u001b[0m│\u001b[1m inOn_l \u001b[0m│\u001b[1m inOn_r \u001b[0m│\n├──────┼────────┼────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │ 2 │\n└──────┴────────┴────────┘\n", + "text/html": [ + "
\n", + "Main.var\"##392\".BreadWorld {Thing:4, BreadLoaf:1, Countertop:2, Stool:1, InOn:1}\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
BreadLoafBreadLoafIsThing
11
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
CountertopCountertopIsThing
12
23
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
StoolStoolIsThing
14
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
InOninOn_linOn_r
112
\n", + "
\n" + ] + }, + "metadata": {}, + "execution_count": 11 + } + ], + "cell_type": "code", + "source": [ + "state = @acset BreadWorld begin\n", + " Thing = 4\n", + " BreadLoaf = 1\n", + " Countertop = 2\n", + " Stool = 1\n", + "\n", + " BreadLoafIsThing = [1]\n", + " CountertopIsThing = [2, 3] # there are two countertops\n", + " StoolIsThing = [4]\n", + "\n", + " InOn = 1\n", + " inOn_l = [1] # breadloaf is on the countertop 1\n", + " inOn_r = [2]\n", + "end\n", + "\n", + "############################### APPLY RULE ###############################" + ], + "metadata": {}, + "execution_count": 11 + }, + { + "cell_type": "markdown", + "source": [ + "Use the AlgebraicRewriting.get_matches(::Rule{T}, ::ACSet) utility function to find matches between the rule and the state." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "1-element Vector{Any}:\n ACSetTransformation((Thing = FinFunction([1, 2, 4], 3, 4), BreadLoaf = FinFunction([1], 1, 1), Countertop = FinFunction([1], 1, 2), Stool = FinFunction([1], 1, 1), InOn = FinFunction([1], 1, 1)), Main.var\"##392\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:1}, Main.var\"##392\".BreadWorld {Thing:4, BreadLoaf:1, Countertop:2, Stool:1, InOn:1})" + }, + "metadata": {}, + "execution_count": 12 + } + ], + "cell_type": "code", + "source": [ + "matches = get_matches(moveBreadRule, state)" + ], + "metadata": {}, + "execution_count": 12 + }, + { + "cell_type": "markdown", + "source": [ + "Take the first match" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "ACSetTransformation((Thing = FinFunction([1, 2, 4], 3, 4), BreadLoaf = FinFunction([1], 1, 1), Countertop = FinFunction([1], 1, 2), Stool = FinFunction([1], 1, 1), InOn = FinFunction([1], 1, 1)), Main.var\"##392\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:1}, Main.var\"##392\".BreadWorld {Thing:4, BreadLoaf:1, Countertop:2, Stool:1, InOn:1})" + }, + "metadata": {}, + "execution_count": 13 + } + ], + "cell_type": "code", + "source": [ + "match = matches[1]" + ], + "metadata": {}, + "execution_count": 13 + }, + { + "cell_type": "markdown", + "source": [ + "Compute the new world state after rewriting" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Main.var\"##392\".BreadWorld {Thing:4, BreadLoaf:1, Countertop:2, Stool:1, InOn:1}\n┌───────────┬──────────────────┐\n│\u001b[1m BreadLoaf \u001b[0m│\u001b[1m BreadLoafIsThing \u001b[0m│\n├───────────┼──────────────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │\n└───────────┴──────────────────┘\n┌────────────┬───────────────────┐\n│\u001b[1m Countertop \u001b[0m│\u001b[1m CountertopIsThing \u001b[0m│\n├────────────┼───────────────────┤\n│\u001b[1m 1 \u001b[0m│ 2 │\n│\u001b[1m 2 \u001b[0m│ 4 │\n└────────────┴───────────────────┘\n┌───────┬──────────────┐\n│\u001b[1m Stool \u001b[0m│\u001b[1m StoolIsThing \u001b[0m│\n├───────┼──────────────┤\n│\u001b[1m 1 \u001b[0m│ 3 │\n└───────┴──────────────┘\n┌──────┬────────┬────────┐\n│\u001b[1m InOn \u001b[0m│\u001b[1m inOn_l \u001b[0m│\u001b[1m inOn_r \u001b[0m│\n├──────┼────────┼────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │ 3 │\n└──────┴────────┴────────┘\n", + "text/html": [ + "
\n", + "Main.var\"##392\".BreadWorld {Thing:4, BreadLoaf:1, Countertop:2, Stool:1, InOn:1}\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
BreadLoafBreadLoafIsThing
11
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
CountertopCountertopIsThing
12
24
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
StoolStoolIsThing
13
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
InOninOn_linOn_r
113
\n", + "
\n" + ] + }, + "metadata": {}, + "execution_count": 14 + } + ], + "cell_type": "code", + "source": [ + "new_state = rewrite_match(moveBreadRule, match)" + ], + "metadata": {}, + "execution_count": 14 + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.9.4" + }, + "kernelspec": { + "name": "julia-1.9", + "display_name": "Julia 1.9.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/docs/src/generated/ptg_simple.md b/docs/src/generated/ptg_simple.md new file mode 100644 index 0000000..3a9ecf4 --- /dev/null +++ b/docs/src/generated/ptg_simple.md @@ -0,0 +1,169 @@ +```@meta +EditURL = "../../literate/ptg_simple.jl" +``` + +````@example ptg_simple +using Pkg +cd("/Users/aguinam1/Documents/Git/aaguinal.github.io/assets/slides/aaai-symposiumtalk-2023/julia") # use this environment to avoid `constructor` error +Pkg.activate(".") +Pkg.instantiate() +using PrettyTables + +using Catlab +using AlgebraicRewriting + +############################### SCHEMA ############################### +```` + +Create an ontology by defining a finite presentation of a freely generated category using @present macro + +About the world: The Bread World Ontology has the types Thing, BreadLoaf, Countertop, and Stool. The Breadloaf, Countertop, and Stool types have morphisms to Thing that represent is-a relationships. The InOn type can be used to encode a set relation (as opposed to a function) that was two morphisms going to Thing. One morphism points out the LHS of the relation and the other morphism point out the RHS of the relation. + +````@example ptg_simple +@present OntBreadWorld(FreeSchema) begin + Thing::Ob + BreadLoaf::Ob + Countertop::Ob + Stool::Ob + + BreadLoafIsThing::Hom(BreadLoaf, Thing) # is-a + CountertopIsThing::Hom(Countertop, Thing) # is-a + StoolIsThing::Hom(Stool, Thing) # is-a + + InOn::Ob + inOn_l::Hom(InOn, Thing) + inOn_r::Hom(InOn, Thing) +end +```` + +Visualize the ontology + +````@example ptg_simple +to_graphviz(OntBreadWorld) +```` + +Make the ontology an acset type + +````@example ptg_simple +@acset_type BreadWorld(OntBreadWorld) + +############################### RULE ############################### +```` + +Construct rule by defining a span in the category of ACSets + +Use the @acset macro to define an ACSet functor. The LHS refers to a type (or object) in our ontology and the RHS defines the set assignment using FinFunctions. For this, you need to completely specify the ACSet functor, i.e. every object and morphism in the index category must be specified. + +About the rule: This rule moves a breadloaf from a countertop to a stool. + +Left ACSet + +````@example ptg_simple +L = @acset BreadWorld begin + Thing = 3 + BreadLoaf = 1 + Countertop = 1 + Stool = 1 + + BreadLoafIsThing = [1] + CountertopIsThing = [2] + StoolIsThing = [3] + + InOn = 1 + inOn_l = [1] + inOn_r = [2] # breadloaf is on the countertop +end +```` + +Middle/Keep ACSet +The Thing, Breadloaf, Countertop, and Stool types should be held constant. The InOn type will change because we are changing the underlying set function. + +````@example ptg_simple +K = @acset BreadWorld begin + Thing = 3 + BreadLoaf = 1 + Countertop = 1 + Stool = 1 +end +```` + +Right ACSet + +````@example ptg_simple +R = @acset BreadWorld begin + Thing = 3 + BreadLoaf = 1 + Countertop = 1 + Stool = 1 + + BreadLoafIsThing = [1] + CountertopIsThing = [2] + StoolIsThing = [3] + + InOn = 1 + inOn_l = [1] + inOn_r = [3] # breadloaf is on the stool +end +```` + +Left leg of span + +````@example ptg_simple +l = ACSetTransformation(K, L, Thing=[1, 2, 3], BreadLoaf=[1], Countertop=[1], Stool=[1]) +```` + +Right leg of span + +````@example ptg_simple +r = ACSetTransformation(K, R, Thing=[1, 2, 3], BreadLoaf=[1], Countertop=[1], Stool=[1]) +```` + +Use AlgebraicRewriting.Rule wrapper to add a rule interface + +````@example ptg_simple +moveBreadRule = Rule(l, r) + +############################### WORLD STATE ############################### +```` + +Define a world state using the @acset macro. This is the ACSet way of specifying an ACSet. For this, you need to completely specify the ACSet functor, i.e. every object and morphism in the index category must be specified. The ACSets must be specified in terms of FinFunctions. + +About the world state: In this world state, there are two countertops, one stool, and one breadloaf. All of these amount to four things. The breadloaf is on the first countertop. + +````@example ptg_simple +state = @acset BreadWorld begin + Thing = 4 + BreadLoaf = 1 + Countertop = 2 + Stool = 1 + + BreadLoafIsThing = [1] + CountertopIsThing = [2, 3] # there are two countertops + StoolIsThing = [4] + + InOn = 1 + inOn_l = [1] # breadloaf is on the countertop 1 + inOn_r = [2] +end + +############################### APPLY RULE ############################### +```` + +Use the AlgebraicRewriting.get_matches(::Rule{T}, ::ACSet) utility function to find matches between the rule and the state. + +````@example ptg_simple +matches = get_matches(moveBreadRule, state) +```` + +Take the first match + +````@example ptg_simple +match = matches[1] +```` + +Compute the new world state after rewriting + +````@example ptg_simple +new_state = rewrite_match(moveBreadRule, match) +```` + diff --git a/docs/src/index.md b/docs/src/index.md index 40a2a0a..508cff9 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -1,7 +1,184 @@ # AlgebraicRewriting.jl -Although literate documentation is forthcoming, at present one can get a sense -of AlgebraicRewriting by checking out the following: +```@meta +CurrentModule = AlgebraicRewriting +``` + +```@autodocs +Modules = [AlgebraicRewriting.Rewrites] +Private = true +``` + +Algebraic rewriting is a context-aware find-and-replace operation, crucial for maintaining integrity and structure in various scenarios. This package provides tools for such operations in Julia, ensuring that replacements adhere to predefined rules or structures. + +# Creating and applying rules + +## Setup Environment +To begin, set up your environment by importing necessary packages. + +```julia +using Catlab +using AlgebraicRewriting +``` + +## Design a rewrite rule +The general process for designing a rewrite rule is as follows: + +1. Define your schema. This is done by defining a [finite presentation of a generalized algebraic theory model]() using generators, `Ob` and `Hom`. + +```julia +@present OntTeam(FreeSchema) begin + Player::Ob + Team::Ob + IsMemberOf::Hom(Player, Team) + + TeamName::AttrType + HasName::Attr(Team, TeamName) +end +``` + +2. Create the schema type. Data for rules are stored in data structures called an ACSet. ACSets can be completely instantiated (straightforward way) using `StructACSet()` type constructor or dynamically instantiated (advanced way) using `DynamicACSet()` type constructor. To create the schema type, you can choose to follow the straightforward way or the advanced way. + +For the **straightforward way**: +```julia +const TeamStraightforward = StructACSet("Team", OntTeam) +``` + +For the **advanced way**: +```julia +const TeamAdvanced = DynamicACSet("Team", OntTeam) +``` + +3. Define rule parts. A rewrite rule consists of a span of ACSets (`L <-l- K -r-> R`), namely three ACSets (`L`, `K`, `R`) and two natural transformations (`l`, `r`): + +- Left ACSet, `L`, is the pre-condition for the rule to be applied. +- Keep ACSet, `K`, is the data for the part of the state that remain consistent when the rule is applied. +- Right ACSet, `R`, is the effect of the rule. +- Left transformation, `l`, aligns `K` to `L`. +- Right transformation, `r`, aligns `K` to `R`. + +To define a rule, all five parts need to be defined. + +If using the **straightforward way**, you must fully specify the ACSet functors and natural transformation. In this example, the rule swaps player between two teams. +```julia +L = @acset TeamStraightforward begin + Player = 4 + Team = 2 + IsMemberOf = [1, 1, 2, 2] + + TeamName = ["Home", "Away"] + HasName = [1, 2] +end +K = @acset X begin + TeamName = ["Home", "Away"] +end +R = @acset TeamStraightforward begin + Player = 4 + Team = 2 + IsMemberOf = [1, 2, 1, 2] + + TeamName = ["Home", "Away"] + HasName = [1, 2] +end +l = ACSetTransformation(K, L, TeamName=[1, 2]) +r = ACSetTransformation(K, R, TeamName=[1, 2]) +``` + +If using the **advanced way**, you only need to specify relevant objects and morphism parts. The `K` part is empty because all the parts specified in `L` and `R` change. (Note: `SchRule` is from `AlgebraicRewriting`) +```julia +diagram = @migration(SchRule, OntTeam, + begin + L => @join begin + (p1, p2)::Player + (team1, team2)::Team + IsMemberOf(p1) == team1 + IsMemberOf(p2) == team2 + end + K => @join begin end + R => @join begin + (p1, p2)::Player + (team1, team2)::Team + IsMemberOf(p1) == team2 + IsMemberOf(p2) == team1 + end + end) +``` + +4. Construct the rule. Use the `AlgebraicRewriting.Rule` constructor to create the rule. This assumes that a double-pushout (DPO) rewrite rule is being constructed. You may also construct an single-pushout (SPO), sesqui-pushout (SqPO), or pullback-pushout (PBPO) rule. + +If using the **straightforward way**, package the rule in terms of maps, l and r, using the `AlgebraicRewriting.Rule` constructor directly. +```julia +rule = Rule{:DPO}(l, r) +``` + +If using the **advanced way**, you have to (1) compute the colimit of representables in order to obtain the fully-specified ACSets for L, K, and R; (2) infer the maps l and r, and (3) package the rule using the AlgebraicRewriting.Rule constructor. + +```julia +yTeam = yoneda(TeamAdvanced) +rule = colimit_representables(diagram, yTeam) +l = rule_hom_map(rule, :l, rule_ob_map(rule, Symbol(K), rule_ob_map(rule, Symbol(L)) +r = rule_hom_map(rule, :r, rule_ob_map(rule, Symbol(K), rule_ob_map(rule, Symbol(R)) +rule = Rule{:DPO}(l, r) +``` + +## Apply the rule +1. Define the initial state. + +If using the **straightforward way**, you must fully specify the ACSet for the initial state. +``` +state = @acset TeamStraightforward begin + Player = 10 + Team = 2 + IsMemberOf = [1, 1, 1, 1, 1, 2, 2, 2, 2, 2] + + TeamName = ["Home", "Away"] + HasName = [1, 2] +end +``` + +If using the **advanced way**, you only need to specify relevant objects and morphism parts. +``` +state = @acset_colim yTeam begin + (p1, p2, p3, p4, p5, p6, p7, p8, p9, p10)::Player + (team1, team2)::Team + IsMemberOf(p1) == team1 + IsMemberOf(p2) == team1 + IsMemberOf(p3) == team1 + IsMemberOf(p4) == team1 + IsMemberOf(p5) == team1 + IsMemberOf(p6) == team2 + IsMemberOf(p7) == team2 + IsMemberOf(p8) == team2 + IsMemberOf(p9) == team2 + IsMemberOf(p10) == team2 +end +``` + + +2. Identify the match from the rule to the state. This can be done manually or automatically. + +To **manually** identify the match, fully-specify an ACSet transformation. For this example, we would like to rule to swap `p5::Player` and `p6::Player` +```julia +match = ACSetTransformation(L, state, Player=[5, 6], Team=[1, 2], TeamName=[1, 2]) +``` + +To **automatically** identify the match, use the backtracking search algorithm provided by AlgebraicRewriting. This may returm multiple matches, so you can provide logic for deciding which match to select. +```julia +matches = get_matches(rule, state) +# insert logic to decide best match +``` + +3. Apply the rewrite rule. This executes the rewrite process using using the defined rule and match. + +``` +result = rewrite_match(rule, match) +``` + +This documentation provides a basic guide to using the AlgebraicRewriting package in Julia. + +# Examples + +You may visit these pages to view more elaborate applications of AlgebraicRewriting.jl: - [full demo](https://github.com/AlgebraicJulia/AlgebraicRewriting.jl/blob/main/docs/src/full_demo.jl): a small demonstration of most of the major features of AlgebraicRewriting. diff --git a/docs/src/lotka_volterra.jl b/docs/src/lotka_volterra.jl deleted file mode 100644 index 397da9f..0000000 --- a/docs/src/lotka_volterra.jl +++ /dev/null @@ -1,419 +0,0 @@ -module LotkaVolterra - -using Catlab, Catlab.Theories, Catlab.CategoricalAlgebra, Catlab.Graphs, - Catlab.Graphics, Catlab.WiringDiagrams, Catlab.Programs -using AlgebraicRewriting -using Random, Test, StructEquality -using Luxor - -Random.seed!(123); - -using Catlab.Graphics.Graphviz: Attributes, Statement, Node -using Catlab.Graphics.Graphviz - -import Catlab.CategoricalAlgebra: left, right - -function right(s::Symbol) - if s == :N return :E - elseif s == :S return :W - elseif s == :E return :S - elseif s == :W return :N - end -end -function left(s::Symbol) - if s == :N return :W - elseif s == :S return :E - elseif s == :E return :N - elseif s == :W return :S - end -end - -""" -Grass = 0 means alive grass, whereas grass > 0 represent a counter of time until -the grass is alive. - -Sheeps and wolves have position and direction, so we assign each an *edge*. We -assume a convention where the location of the something is the edge SOURCE. - -Dir is an attribute which can take values :N, :E, :W, and :S. -""" -@present TheoryLV <: SchGraph begin - (Sheep,Wolf)::Ob - sheep_loc::Hom(Sheep, V) - wolf_loc::Hom(Wolf, V) - - (Dir,Eng)::AttrType - grass_eng::Attr(V, Eng) - sheep_eng::Attr(Sheep, Eng) - wolf_eng::Attr(Wolf, Eng) - sheep_dir::Attr(Sheep, Dir) - wolf_dir::Attr(Wolf, Dir) - dir::Attr(E, Dir) -end - -@present TheoryLV′ <: TheoryLV begin - Coord::AttrType - coord::Attr(V,Coord) -end - -to_graphviz(TheoryLV; prog="dot") - -@acset_type LV_Generic(TheoryLV) <: HasGraph -const LV = LV_Generic{Symbol, Int} - -@acset_type LV′_Generic(TheoryLV′) <: HasGraph -const LV′ = LV′_Generic{Symbol, Int, Tuple{Int,Int}} - -F = Migrate( - Dict(:Sheep=>:Wolf, :Wolf=>:Sheep), - Dict([:sheep_loc=>:wolf_loc, :wolf_loc=>:sheep_loc, - :sheep_eng=>:wolf_eng, :wolf_eng=>:sheep_eng,:grass_eng =>:grass_eng, - :sheep_dir=>:wolf_dir, :wolf_dir=>:sheep_dir,]), LV) -F2 = Migrate( - Dict(x=>x for x in Symbol.(TheoryLV.generators[:Ob])), - Dict(x=>x for x in Symbol.(TheoryLV.generators[:Hom])), LV′; delta=false) - -""" -Create a nxn grid with periodic boundary conditions. Edges in each cardinal -direction originate at every point - - -(i,j+1) -> (i+1,j+1) -> ... - ↑ ↑ -(i,j) -> (i+1,j) -> ... - -""" -function create_grid(n::Int) - lv = LV′() - coords = Dict() - # Initialize grass 50% green, 50% uniformly between 0-30 - for i in 0:n-1 - for j in 0:n-1 - coords[i=>j] = add_part!(lv, :V; grass_eng=max(0,rand(-30:30)), coord=(i,j)) - end - end - for i in 0:n-1 - for j in 0:n-1 - add_part!(lv, :E; src=coords[i=>j], tgt=coords[mod(i+1,n)=>j], dir=:E) - add_part!(lv, :E; src=coords[i=>j], tgt=coords[mod(i-1,n)=>j], dir=:W) - add_part!(lv, :E; src=coords[i=>j], tgt=coords[i=>mod(j+1,n)], dir=:N) - add_part!(lv, :E; src=coords[i=>j], tgt=coords[i=>mod(j-1,n)], dir=:S) - end - end - return lv -end - -g = create_grid(2) - - -""" -`n` is the length of the grid. -`sheep` and `wolves` are the fraction of spaces that are -populated with that animal -""" -function initialize(n::Int, sheep::Float64, wolves::Float64)::LV′ - grid = create_grid(n) - args = [(sheep, :Sheep, :sheep_loc, :sheep_eng, :sheep_dir), - (wolves, :Wolf, :wolf_loc, :wolf_eng, :wolf_dir)] - for (n_, name, loc, eng, d) in args - for _ in 1:round(Int,n_*n^2) - dic = Dict([eng => 5, loc => rand(vertices(grid)), - d => rand([:N,:E,:S,:W])]) - add_part!(grid, name; dic...) - end - end - return grid -end - - -supscript_d = Dict([ - '1'=>'¹', '2'=>'²', '3'=>'³', '4'=>'⁴', '5'=>'⁵','6'=>'⁶', '7'=>'⁷', '8'=>'⁸', - '9'=>'⁹', '0'=>'⁰', 'x'=>'ˣ', 'y'=>'ʸ','z'=>'ᶻ','a'=>'ᵃ','b'=>'ᵇ','c'=>'ᶜ', - 'd'=>'ᵈ']) -supscript(x::String) = join([get(supscript_d, c, c) for c in x]) - -"""Visualize a LV""" -function view_LV(p::ACSetTransformation, pth=tempname(); name="G", title="") - if nparts(dom(p),:Wolf) == 1 - star = :Wolf=>p[:Wolf](1) - elseif nparts(dom(p),:Sheep) == 1 - star = :Sheep=>p[:Sheep](1) - elseif nparts(dom(p),:V) == 1 - star = :V=>p[:V](1) - else - star = nothing - end - view_LV(codom(p), pth; name=name, title=title, star=star) -end -function view_LV(p::LV′, pth=tempname(); name="G", title="", star=nothing) - pstr = ["$(i),$(j)!" for (i,j) in p[:coord]] - stmts = Statement[] - for s in 1:nv(p) - st = (star == (:V=>s)) ? "*" : "" - gv = p[s, :grass_eng] - col = gv == 0 ? "lightgreen" : "tan" - push!(stmts,Node("v$s", Attributes( - :label=>gv == 0 ? "" : string(gv)*st, - :shape=>"circle", - :color=> col, :pos=>pstr[s]))) - end - d = Dict([:E=>(1,0),:N=>(0,1), :S=>(0,-1),:W=>(-1,0),]) - - args = [(:true,:Wolf,:wolf_loc,:wolf_eng,:wolf_dir), - (false, :Sheep, :sheep_loc, :sheep_eng,:sheep_dir)] - - for (is_wolf, prt, loc, eng, dr) in args - for w in parts(p, prt) - st = (star == ((is_wolf ? :Wolf : :Sheep) => w)) ? "*" : "" - e = only(incident(p,p[w,loc], :src) ∩ incident(p,p[w,dr], :dir)) - s = src(p,e) - dx, dy = d[p[e, :dir]] - (sx,sy) = p[s,:coord] - - L, R = 0.25, 0.1 - wx = sx+L*dx+R*rand() - wy = sy+L*dy+R*rand() - ID = "$(is_wolf ? :w : :s)$w" - append!(stmts,[Node(ID, Attributes( - :label=>"$w"*supscript("$(p[w,eng])")*st, - :shape=>"square", :width=>"0.3px", :height=>"0.3px", :fixedsize=>"true", - :pos=>"$(wx),$(wy)!",:color=> is_wolf ? "red" : "lightblue"))]) - end - end - - g = Graphviz.Digraph(name, Statement[stmts...]; prog="neato", - graph_attrs=Attributes(:label=>title, :labelloc=>"t"), - node_attrs=Attributes(:shape=>"plain", :style=>"filled")) - open(pth, "w") do io - show(io,"image/svg+xml",g) - end -end - -i1 = initialize(2,.5,.5) -# view_LV(i1) - -# RULES -####### -yLV = yoneda_cache(LV; clear=true); -yLV = yoneda_cache(LV; clear=false); - -# Empty agent type -I = LV() -# Generic sheep agent -S = @acset_colim yLV begin s::Sheep end -# Generic wolf agent -W = F(S) -# Generic grass agent -G = @acset_colim yLV begin v::V end - -N = Names(Dict("W"=>W,"S"=>S,"G"=>G, ""=>I)) -# Rotating -#--------- - -rl = Rule(id(S),id(S); expr=(Dir=[xs->left(only(xs))],)) -rr = Rule(id(S),id(S); expr=(Dir=[xs->right(only(xs))],)) - -sheep_rotate_l = tryrule(RuleApp(:turn_left, rl, S)) -sheep_rotate_r = tryrule(RuleApp(:turn_right, rr, S)) - -# we can imagine executing these rules in sequence or in parallel -seq_sched = (sheep_rotate_l⋅sheep_rotate_r) -# view_sched(seq_sched; names=N) -par_sched = (sheep_rotate_l ⊗ sheep_rotate_r) -# view_sched(par_sched; names=N) - - - -begin - ex = @acset_colim yLV begin - e::E - s::Sheep - sheep_loc(s) == src(e) - sheep_dir(s) == :N - end - expected = copy(ex); - expected[:sheep_dir] = :W - @test is_isomorphic(rewrite(rl, ex), expected) -end - -# Moving forward -#--------------- -s_fwd_l = @acset_colim yLV begin e::E; s::Sheep; sheep_loc(s)==src(e) end -s_fwd_i = @acset_colim yLV begin e::E end -s_fwd_r = @acset_colim yLV begin e::E; s::Sheep; sheep_loc(s)==tgt(e) end -s_n = @acset_colim yLV begin - e::E; s::Sheep; sheep_loc(s)==src(e); sheep_eng(s)==0 -end - -sheep_fwd_rule = Rule( - homomorphism(s_fwd_i, s_fwd_l; monic=true), - homomorphism(s_fwd_i, s_fwd_r; monic=true), - ac=[AppCond(homomorphism(s_fwd_l, s_n), false)], - expr=(Eng=Dict(3=>vs->vs[3]-1), Dir=Dict(2=>vs->vs[2])) -) - -sheep_fwd = tryrule(RuleApp(:move_fwd, sheep_fwd_rule, - homomorphism(S,s_fwd_l), homomorphism(S,s_fwd_r))) - - -sheep_fwd_rule.L |> codom - -begin # test - ex = @acset_colim yLV begin (e1,e2)::E; s::Sheep - sheep_loc(s)==tgt(e1) - tgt(e1)==src(e2) - sheep_dir(s)==:N - sheep_eng(s) == 10 - end - expected = @acset_colim yLV begin (e1,e2)::E; s::Sheep - sheep_loc(s)==tgt(e2) - tgt(e1)==src(e2) - sheep_dir(s)==:N - sheep_eng(s) == 9 - end - @test is_isomorphic(expected,rewrite(sheep_fwd_rule,ex)) -end - -# Eat grass + 4eng -#----------------- -# Grass is at 0 - meaning it's ready to be eaten -s_eat_pac = @acset_colim yLV begin s::Sheep; grass_eng(sheep_loc(s))==0 end - -se_rule = Rule(id(S), id(S); expr=(Eng=[vs->vs[1]+4,vs->30],), - ac=[AppCond(homomorphism(S,s_eat_pac))]) -sheep_eat = tryrule(RuleApp(:Sheep_eat, se_rule, S)) - -begin # test - ex = @acset_colim yLV begin s::Sheep; e::E; sheep_loc(s)==tgt(e) - sheep_eng(s)==3; grass_eng(tgt(e))==0; grass_eng(src(e))==10 - end - expected = @acset_colim yLV begin s::Sheep; e::E; sheep_loc(s)==tgt(e) - sheep_eng(s)==7; grass_eng(tgt(e))==30; grass_eng(src(e))==10 - end - - @test is_isomorphic(expected, rewrite(se_rule,ex)) -end - -# Eat sheep + 20 eng -#------------------- - -w_eat_l = @acset_colim yLV begin s::Sheep; w::Wolf; sheep_loc(s)==wolf_loc(w) end - -we_rule = Rule(homomorphism(W, w_eat_l), id(W); expr=(Eng=[vs->vs[3]+20,vs->vs[1]],)) -wolf_eat = tryrule(RuleApp(:Wolf_eat, we_rule, W)) - -begin # test - ex = @acset LV begin Sheep=1; Wolf=1; V=3; E=2; src=[1,2]; tgt=[2,3]; sheep_loc=2 - sheep_eng=[3]; grass_eng=[9,10,11]; dir=fill(:N,2); sheep_dir=[:N] - wolf_loc=[2]; wolf_eng=[16]; wolf_dir=[:S] - end - expected = @acset LV begin Wolf=1; V=3; E=2; src=[1,2]; tgt=[2,3]; - grass_eng=[9,10,11]; dir=fill(:N,2); sheep_dir=[:N] - wolf_loc=[2]; wolf_eng=[36]; wolf_dir=[:S] - end - @test is_isomorphic(rewrite(we_rule,ex), expected) -end - -# Die if 0 eng -#------------- -s_die_l = @acset_colim yLV begin s::Sheep; sheep_eng(s)==0 end - -sheep_die_rule = Rule(homomorphism(G, s_die_l), id(G)) -sheep_starve = (RuleApp(:starve, sheep_die_rule, - homomorphism(S,s_die_l), create(G)) - ⋅ (id([I]) ⊗ Weaken(create(S))) ⋅ merge_wires(I)) - -begin # test - ex = s_die_l ⊕ W - expected = G ⊕ W - @test is_isomorphic(rewrite(sheep_die_rule,ex), expected) -end - -# reproduction -#------------- - -s_reprod_r = @acset_colim yLV begin (x,y)::Sheep; sheep_loc(x)==sheep_loc(y) end - -sheep_reprod_rule = Rule( - homomorphism(G, S), - homomorphism(G, s_reprod_r); - expr=(Dir=[vs->vs[1],vs->vs[1]], Eng=[vs->vs[2], - fill(vs->round(Int, vs[1]/2, RoundUp), 2)...],) - ) - -sheep_reprod = RuleApp(:reproduce, sheep_reprod_rule, - id(S), homomorphism(S, s_reprod_r)) |> tryrule - -begin # test - ex = @acset_colim yLV begin s::Sheep; w::Wolf; sheep_eng(s) == 10 end - expected = @acset_colim yLV begin - (s1,s2)::Sheep; w::Wolf; - sheep_loc(s1) == sheep_loc(s2) - sheep_eng(s1) == 5; sheep_eng(s2)==5 - end - @test is_isomorphic(rewrite(sheep_reprod_rule,ex),expected) -end - -# Grass increment -#---------------- - -g_inc_n = deepcopy(G) -set_subpart!(g_inc_n,1, :grass_eng, 0); -rem_part!(g_inc_n, :Eng, 1) - -g_inc_rule = Rule(id(G), id(G); - ac=[AppCond(homomorphism(G, g_inc_n), false)], - expr=(Eng=[vs->only(vs)-1],)) -g_inc = RuleApp(:GrassIncrements,g_inc_rule, G) |> tryrule - - -begin # test - ex = @acset LV begin Sheep=1; V=3; E=2; src=[1,2]; tgt=[2,3]; sheep_loc=2 - sheep_eng=[3]; grass_eng=[1,10,2]; dir=fill(:N,2); sheep_dir=[:N] - end - expected = @acset LV begin Sheep=1; V=3; E=2; src=[1,2]; tgt=[2,3]; sheep_loc=2 - sheep_eng=[3]; grass_eng=[0,10,2]; dir=fill(:N,2); sheep_dir=[:N] - end - @test is_isomorphic(rewrite(g_inc_rule,ex), expected) -end - -# Scheduling Rules -################## - -# Stuff that happens once per sheep -#---------------------------------- - -# 25% chance of left turn, 25% chance of right turn, 50% stay in same direction -general = mk_sched((;),(init=:S,), N, ( - turn = const_cond([1.,2.,1.], S; name=:turn), - maybe = const_cond([0.1, 0.9], S; name=:reprod), - lft = sheep_rotate_l, - rght = sheep_rotate_r, - fwd = sheep_fwd, - repro = sheep_reprod, - starve = sheep_starve), - quote - out_l, out_str, out_r = turn(init) - moved = fwd([lft(out_l), out_str, rght(out_r)]) - out_repro, out_no_repro = maybe(moved) - return starve([repro(out_repro), out_no_repro]) -end) - -sheep = sheep_eat ⋅ general # once per sheep -wolf = wolf_eat ⋅ F(general) # once per wolf - -# Do all sheep, then all wolves, then all daily operations -cycle = ( agent(sheep; n=:sheep, ret=I) - ⋅ agent(wolf; n=:wolves, ret=I) - ⋅ agent(g_inc; n=:grass)) - -# wrap in a while loop -overall = while_schedule(cycle, curr -> nparts(curr,:Wolf) >= 0) |> F2 -# view_sched(overall; names=F2(N)) -X = initialize(3, .25, .25) -res, = apply_schedule(overall, X; steps=50); - -# Run this lines to view the trajectory -# view_traj(overall, res, view_LV; agent=true, names=F2(N)) - -end # module diff --git a/docs/src/mesh.jl b/docs/src/mesh.jl deleted file mode 100644 index a34387a..0000000 --- a/docs/src/mesh.jl +++ /dev/null @@ -1,184 +0,0 @@ - -using Catlab, Catlab.Graphs, Catlab.CategoricalAlgebra -using CairoMakie, GeometryBasics -using Base.Iterators -using CombinatorialSpaces -import AlgebraicPetri -using CombinatorialSpaces.SimplicialSets: get_edge! - -""" -Suppose we want to perform rewriting on a mesh with triangles defined over -certain triples of edges. -""" - -@present ThSemisimplicialSet <: SchGraph begin - T :: Ob - (d1,d2,d3)::Hom(T,E) - compose(d1, src) == compose(d2, src) - compose(d1, tgt) == compose(d3, tgt) - compose(d2, tgt) == compose(d3, src) -end -@acset_type SSet(ThSemisimplicialSet) - -quadrangle = @acset SSet begin - T=2; E=5; V=4 - d1=[1,1]; d2=[2,3]; d3=[4,5] - src=[1,1,1,2,3] - tgt=[4,2,3,4,4] -end - -function plot_sset(ss::SSet, points::Vector, - tri_colors::Union{Nothing,Vector}=nothing) - dflt = collect(take(cycle([:blue,:red,:green, :purple, :pink, :yellow, - :grey, :orange, :brown, :cyan]), - nparts(ss, :T))) - tri_colors = isnothing(tri_colors) ? dflt : tri_colors - # Validate inputs - lengthscale=0.8 - dim = length(points[1]) - length(points) == nparts(ss,:V) || error("# of points") - if dim == 2 - points = [(p1,p2,0.) for (p1,p2) in points] - elseif dim != 3 - error("dim $dim") - end - tri_colors = tri_colors[1:nparts(ss, :T)] - - # Convert SSet to EmbeddedDeltaSet2D - s = EmbeddedDeltaSet2D{Bool, Point{3, Float64}}() - - edge_colors = [:black for _ in nparts(ss, :E)] - add_vertices!(s, length(points), point=points) - for (src, tgt) in zip(ss[:src], ss[:tgt]) - get_edge!(s, src, tgt) - end - - for t in parts(ss,:T) - glue_sorted_triangle!(s, ss[t,[:d1,:src]], - ss[t,[:d3,:src]], - ss[t, [:d1,:tgt]]) - end - - # Split mesh into component triangles - m = GeometryBasics.Mesh(s) - x = faces(m) - m_points = m.position[vcat([[t[1],t[2],t[3]] for t in x]...)] - m_faces = TriangleFace{Int}[[((t-1) * 3) .+ (1,2,3) for t in 1:length(x)]...] - new_m = GeometryBasics.Mesh(Point{3, Float64}[m_points...], m_faces) - if ntriangles(s) == 0 - fig, ax, ob = arrows((s[s[:∂v0], :point] * (0.5 + lengthscale / 2) - .+ s[s[:∂v1], :point] * (0.5 - lengthscale / 2)) , - (s[s[:∂v1], :point] .- s[s[:∂v0], :point]), - lengthscale=lengthscale, arrowsize=0.05, shininess=0.0, - color=edge_colors, diffuse=[0.0,0.0,0.0]) - else - fig, ax, ob = mesh(new_m, color=vcat([[v,v,v] for v in tri_colors]...)) - arrows!((s[s[:∂v0], :point] * (0.5 + lengthscale / 2) - .+ s[s[:∂v1], :point] * (0.5 - lengthscale / 2)) , - (s[s[:∂v1], :point] .- s[s[:∂v0], :point]), - lengthscale=lengthscale, arrowsize=0.05, shininess=0.0, - color=edge_colors, diffuse=[0.0,0.0,0.0]) - end - if dim == 2 - spines!(ax); hidedecorations!(ax) - ax.aspect = AxisAspect(1.0) # Remove this line if 3D embedding - end - fig -end - - -quad_coords = [(0,1,0), (1,1,0), (0,0,0),(1,0,0)] -plot_sset(quadrangle, quad_coords) - - - -L = quadrangle -I = @acset SSet begin - E=4; V=4 - src=[1,1,2,3] - tgt=[2,3,4,4] -end -quad_coords = [(0,1,0), (1,1,0), (0,0,0),(1,0,0)] -plot_sset(I, quad_coords) - - -""" -Our replacement pattern will add two triangles and an edge, but now the edge -is perpendicular to where it was before. -""" - -R = @acset SSet begin - T=2; E=5; V=4 - d1=[2,3]; d2=[1,5]; d3=[5,4] - src=[1,1,2,3,2] - tgt=[2,3,4,4,3] -end -quad_coords = [(0,1,0), (1,1,0), (0,0,0),(1,0,0)] -plot_sset(R, quad_coords) - - -""" -Again we create a rewrite rule by relating the `I` to `L` and `R`. -""" - -r = Rule(hom(I, R; monic=true), - hom(I, L; monic=true); - monic=true) - - -""" -We can construct a mesh to test this rewrite on by gluing together two -quadrilaterals (via a *pushout* along a common edge). -""" - -edge = @acset SSet begin E=1; V=2; src=[1]; tgt=[2] end -edge_left = hom(edge, L; initial=Dict([:V=>[1,3]])) -edge_right = hom(edge, L; initial=Dict([:V=>[2,4]])) -G = pushout(edge_left, edge_right) |> apex -six_coords = vcat(quad_coords,[(-1.,1.,0.),(-1.,0.,0.),]) -plot_sset(G, six_coords) - -""" -We then can perform the rewrite in larger contexts than just the pattern, such -as a mesh with two quadrilaterals. -""" -res = rewrite(r, G) - - - -""" -### Single pushout rewriting -Implicit deletion works like a cascading delete: if you delete a vertex -(for example), then you implicitly delete an edge which refers to that vertex -(and a triangle that refers to that edge, and so on). Here we delete a triangle -and a vertex explicitly, but implicitly the deleted vertex -""" - -Tri = @acset SSet begin - T=1; E=3; V=3; - d1=[1]; d2=[2]; d3=[3]; - src=[1,1,2]; tgt=[3,2,3] -end -L = Tri -r = Rule{:SPO}(homomorphisms(edge, L)[2],id(edge)) -m = homomorphism(L, quadrangle) -# can_pushout_complement(r.L, m) == false -rewrite_match(r,m) - -""" -Sesqui pushout rewriting - -Here our rewrite rule takes a vertex and duplicates it. -""" -L = @acset SSet begin V=1 end -I = @acset SSet begin V=2 end -r=Rule{:SqPO}(homomorphism(I,L),id(I)) - -""" -With sesqui-pushout semantics, when we apply this to the vertex of a triangle, -this will create two triangles. -""" -G = Tri -m = CSetTransformation(L, G, V=[1]); -nparts(sesqui_pushout_rewrite(l, r, m), :T) == 4 || error("We get 4 'triangles' when we ignore equations") -rewrite_match(r, m; pres=ThSemisimplicialSet) # pass in the equations From 55f91d96d6dcd0173a7b4d4abbfd7e014f878855 Mon Sep 17 00:00:00 2001 From: Angeline Aguinaldo Date: Tue, 9 Jan 2024 19:51:16 -0500 Subject: [PATCH 2/7] Move lotka_volterra.jl to literate folder --- docs/literate/lotka_volterra.jl | 420 ++++++++++++-------------------- docs/src/lotka_volterra.jl | 417 ------------------------------- 2 files changed, 161 insertions(+), 676 deletions(-) delete mode 100644 docs/src/lotka_volterra.jl diff --git a/docs/literate/lotka_volterra.jl b/docs/literate/lotka_volterra.jl index de377f2..7ad400d 100644 --- a/docs/literate/lotka_volterra.jl +++ b/docs/literate/lotka_volterra.jl @@ -1,6 +1,6 @@ -using Catlab, Catlab.Theories, Catlab.CategoricalAlgebra, Catlab.Graphs, - Catlab.Graphics, Catlab.WiringDiagrams, Catlab.Programs -using AlgebraicRewriting +module LotkaVolterra + +using Catlab, DataMigrations, AlgebraicRewriting using Random, Test, StructEquality using Luxor @@ -11,26 +11,18 @@ using Catlab.Graphics.Graphviz import Catlab.CategoricalAlgebra: left, right -function right(s::Symbol) - if s == :N - return :E - elseif s == :S - return :W - elseif s == :E - return :S - elseif s == :W - return :N +function right(s::Symbol) + if s == :N return :E + elseif s == :S return :W + elseif s == :E return :S + elseif s == :W return :N end end -function left(s::Symbol) - if s == :N - return :W - elseif s == :S - return :E - elseif s == :E - return :N - elseif s == :W - return :S +function left(s::Symbol) + if s == :N return :W + elseif s == :S return :E + elseif s == :E return :N + elseif s == :W return :S end end @@ -44,11 +36,11 @@ assume a convention where the location of the something is the edge SOURCE. Dir is an attribute which can take values :N, :E, :W, and :S. """ @present TheoryLV <: SchGraph begin - (Sheep, Wolf)::Ob + (Sheep,Wolf)::Ob sheep_loc::Hom(Sheep, V) wolf_loc::Hom(Wolf, V) - (Dir, Eng)::AttrType + (Dir,Eng)::AttrType grass_eng::Attr(V, Eng) sheep_eng::Attr(Sheep, Eng) wolf_eng::Attr(Wolf, Eng) @@ -58,32 +50,31 @@ Dir is an attribute which can take values :N, :E, :W, and :S. end @present TheoryLV′ <: TheoryLV begin - Coord::AttrType - coord::Attr(V, Coord) + Coord::AttrType + coord::Attr(V,Coord) end to_graphviz(TheoryLV; prog="dot") @acset_type LV_Generic(TheoryLV) <: HasGraph -const LV = LV_Generic{Symbol,Int} +const LV = LV_Generic{Symbol, Int} @acset_type LV′_Generic(TheoryLV′) <: HasGraph -const LV′ = LV′_Generic{Symbol,Int,Tuple{Int,Int}} +const LV′ = LV′_Generic{Symbol, Int, Tuple{Int,Int}} F = Migrate( - Dict(:Sheep => :Wolf, :Wolf => :Sheep), - Dict([:sheep_loc => :wolf_loc, :wolf_loc => :sheep_loc, - :sheep_eng => :wolf_eng, :wolf_eng => :sheep_eng, :grass_eng => :grass_eng, - :sheep_dir => :wolf_dir, :wolf_dir => :sheep_dir,]), LV) + Dict(:Sheep=>:Wolf, :Wolf=>:Sheep), + Dict([:sheep_loc=>:wolf_loc, :wolf_loc=>:sheep_loc, + :sheep_eng=>:wolf_eng, :wolf_eng=>:sheep_eng,:grass_eng =>:grass_eng, + :sheep_dir=>:wolf_dir, :wolf_dir=>:sheep_dir,]), LV) F2 = Migrate( - Dict(x => x for x in Symbol.(TheoryLV.generators[:Ob])), - Dict(x => x for x in Symbol.(TheoryLV.generators[:Hom])), LV′; delta=false) + Dict(x=>x for x in Symbol.(TheoryLV.generators[:Ob])), + Dict(x=>x for x in Symbol.(TheoryLV.generators[:Hom])), LV′; delta=false) """ -Create a nxn grid with periodic boundary conditions. Edges in each cardinal +Create an n × n grid with periodic boundary conditions. Edges in each cardinal direction originate at every point - (i,j+1) -> (i+1,j+1) -> ... ↑ ↑ (i,j) -> (i+1,j) -> ... @@ -92,17 +83,18 @@ direction originate at every point function create_grid(n::Int) lv = LV′() coords = Dict() + # Initialize grass 50% green, 50% uniformly between 0-30 for i in 0:n-1 for j in 0:n-1 - coords[i=>j] = add_part!(lv, :V; grass_eng=max(0, rand(-30:30)), coord=(i, j)) + coords[i=>j] = add_part!(lv, :V; grass_eng=max(0,rand(-30:30)), coord=(i,j)) end end for i in 0:n-1 for j in 0:n-1 - add_part!(lv, :E; src=coords[i=>j], tgt=coords[mod(i + 1, n)=>j], dir=:E) - add_part!(lv, :E; src=coords[i=>j], tgt=coords[mod(i - 1, n)=>j], dir=:W) - add_part!(lv, :E; src=coords[i=>j], tgt=coords[i=>mod(j + 1, n)], dir=:N) - add_part!(lv, :E; src=coords[i=>j], tgt=coords[i=>mod(j - 1, n)], dir=:S) + add_part!(lv, :E; src=coords[i=>j], tgt=coords[mod(i+1,n)=>j], dir=:E) + add_part!(lv, :E; src=coords[i=>j], tgt=coords[mod(i-1,n)=>j], dir=:W) + add_part!(lv, :E; src=coords[i=>j], tgt=coords[i=>mod(j+1,n)], dir=:N) + add_part!(lv, :E; src=coords[i=>j], tgt=coords[i=>mod(j-1,n)], dir=:S) end end return lv @@ -119,11 +111,11 @@ populated with that animal function initialize(n::Int, sheep::Float64, wolves::Float64)::LV′ grid = create_grid(n) args = [(sheep, :Sheep, :sheep_loc, :sheep_eng, :sheep_dir), - (wolves, :Wolf, :wolf_loc, :wolf_eng, :wolf_dir)] + (wolves, :Wolf, :wolf_loc, :wolf_eng, :wolf_dir)] for (n_, name, loc, eng, d) in args - for _ in 1:round(Int, n_ * n^2) + for _ in 1:round(Int,n_*n^2) dic = Dict([eng => 5, loc => rand(vertices(grid)), - d => rand([:N, :E, :S, :W])]) + d => rand([:N,:E,:S,:W])]) add_part!(grid, name; dic...) end end @@ -132,69 +124,69 @@ end supscript_d = Dict([ - '1' => '¹', '2' => '²', '3' => '³', '4' => '⁴', '5' => '⁵', '6' => '⁶', '7' => '⁷', '8' => '⁸', - '9' => '⁹', '0' => '⁰', 'x' => 'ˣ', 'y' => 'ʸ', 'z' => 'ᶻ', 'a' => 'ᵃ', 'b' => 'ᵇ', 'c' => 'ᶜ', - 'd' => 'ᵈ']) + '1'=>'¹', '2'=>'²', '3'=>'³', '4'=>'⁴', '5'=>'⁵','6'=>'⁶', '7'=>'⁷', '8'=>'⁸', + '9'=>'⁹', '0'=>'⁰', 'x'=>'ˣ', 'y'=>'ʸ','z'=>'ᶻ','a'=>'ᵃ','b'=>'ᵇ','c'=>'ᶜ', + 'd'=>'ᵈ']) supscript(x::String) = join([get(supscript_d, c, c) for c in x]) """Visualize a LV""" function view_LV(p::ACSetTransformation, pth=tempname(); name="G", title="") - if nparts(dom(p), :Wolf) == 1 - star = :Wolf => p[:Wolf](1) - elseif nparts(dom(p), :Sheep) == 1 - star = :Sheep => p[:Sheep](1) - elseif nparts(dom(p), :V) == 1 - star = :V => p[:V](1) + if nparts(dom(p),:Wolf) == 1 + star = :Wolf=>p[:Wolf](1) + elseif nparts(dom(p),:Sheep) == 1 + star = :Sheep=>p[:Sheep](1) + elseif nparts(dom(p),:V) == 1 + star = :V=>p[:V](1) else star = nothing end view_LV(codom(p), pth; name=name, title=title, star=star) -end +end function view_LV(p::LV′, pth=tempname(); name="G", title="", star=nothing) - pstr = ["$(i),$(j)!" for (i, j) in p[:coord]] + pstr = ["$(i),$(j)!" for (i,j) in p[:coord]] stmts = Statement[] - for s in 1:nv(p) - st = (star == (:V => s)) ? "*" : "" - gv = p[s, :grass_eng] - col = gv == 0 ? "lightgreen" : "tan" - push!(stmts, Node("v$s", Attributes( - :label => gv == 0 ? "" : string(gv) * st, - :shape => "circle", - :color => col, :pos => pstr[s]))) - end - d = Dict([:E => (1, 0), :N => (0, 1), :S => (0, -1), :W => (-1, 0),]) + for s in 1:nv(p) + st = (star == (:V=>s)) ? "*" : "" + gv = p[s, :grass_eng] + col = gv == 0 ? "lightgreen" : "tan" + push!(stmts,Node("v$s", Attributes( + :label=>gv == 0 ? "" : string(gv)*st, + :shape=>"circle", + :color=> col, :pos=>pstr[s]))) + end + d = Dict([:E=>(1,0),:N=>(0,1), :S=>(0,-1),:W=>(-1,0),]) - args = [(:true, :Wolf, :wolf_loc, :wolf_eng, :wolf_dir), - (false, :Sheep, :sheep_loc, :sheep_eng, :sheep_dir)] + args = [(:true,:Wolf,:wolf_loc,:wolf_eng,:wolf_dir), + (false, :Sheep, :sheep_loc, :sheep_eng,:sheep_dir)] for (is_wolf, prt, loc, eng, dr) in args for w in parts(p, prt) st = (star == ((is_wolf ? :Wolf : :Sheep) => w)) ? "*" : "" - e = only(incident(p, p[w, loc], :src) ∩ incident(p, p[w, dr], :dir)) - s = src(p, e) + e = only(incident(p,p[w,loc], :src) ∩ incident(p,p[w,dr], :dir)) + s = src(p,e) dx, dy = d[p[e, :dir]] - (sx, sy) = p[s, :coord] + (sx,sy) = p[s,:coord] L, R = 0.25, 0.1 - wx = sx + L * dx + R * rand() - wy = sy + L * dy + R * rand() + wx = sx+L*dx+R*rand() + wy = sy+L*dy+R*rand() ID = "$(is_wolf ? :w : :s)$w" - append!(stmts, [Node(ID, Attributes( - :label => "$w" * supscript("$(p[w,eng])") * st, - :shape => "square", :width => "0.3px", :height => "0.3px", :fixedsize => "true", - :pos => "$(wx),$(wy)!", :color => is_wolf ? "red" : "lightblue"))]) + append!(stmts,[Node(ID, Attributes( + :label=>"$w"*supscript("$(p[w,eng])")*st, + :shape=>"square", :width=>"0.3px", :height=>"0.3px", :fixedsize=>"true", + :pos=>"$(wx),$(wy)!",:color=> is_wolf ? "red" : "lightblue"))]) end end g = Graphviz.Digraph(name, Statement[stmts...]; prog="neato", - graph_attrs=Attributes(:label => title, :labelloc => "t"), - node_attrs=Attributes(:shape => "plain", :style => "filled")) - open(pth, "w") do io - show(io, "image/svg+xml", g) + graph_attrs=Attributes(:label=>title, :labelloc=>"t"), + node_attrs=Attributes(:shape=>"plain", :style=>"filled")) + open(pth, "w") do io + show(io,"image/svg+xml",g) end end -i1 = initialize(2, 0.5, 0.5) +i1 = initialize(2,.5,.5) # view_LV(i1) # RULES @@ -205,271 +197,181 @@ yLV = yoneda_cache(LV; clear=false); # Empty agent type I = LV() # Generic sheep agent -S = @acset_colim yLV begin - s::Sheep -end +S = @acset_colim yLV begin s::Sheep end # Generic wolf agent W = F(S) # Generic grass agent -G = @acset_colim yLV begin - v::V -end +G = @acset_colim yLV begin v::V end -N = Names(Dict("W" => W, "S" => S, "G" => G, "" => I)) +N = Names(Dict("W"=>W,"S"=>S,"G"=>G, ""=>I)) # Rotating #--------- -rl = Rule(id(S), id(S); expr=(Dir=[xs -> left(only(xs))],)) -rr = Rule(id(S), id(S); expr=(Dir=[xs -> right(only(xs))],)) +rl = Rule(id(S),id(S); expr=(Dir=[xs->left(only(xs))],)) +rr = Rule(id(S),id(S); expr=(Dir=[xs->right(only(xs))],)) sheep_rotate_l = tryrule(RuleApp(:turn_left, rl, S)) sheep_rotate_r = tryrule(RuleApp(:turn_right, rr, S)) # we can imagine executing these rules in sequence or in parallel -seq_sched = (sheep_rotate_l ⋅ sheep_rotate_r) +seq_sched = (sheep_rotate_l⋅sheep_rotate_r) # view_sched(seq_sched; names=N) -par_sched = (sheep_rotate_l ⊗ sheep_rotate_r) +par_sched = (sheep_rotate_l ⊗ sheep_rotate_r) # view_sched(par_sched; names=N) -begin - ex = @acset_colim yLV begin +begin + ex = @acset_colim yLV begin e::E s::Sheep sheep_loc(s) == src(e) sheep_dir(s) == :N end - expected = copy(ex) + expected = copy(ex); expected[:sheep_dir] = :W - @test is_isomorphic(rewrite(rl, ex), expected) + @test is_isomorphic(rewrite(rl, ex), expected) end # Moving forward #--------------- -s_fwd_l = @acset_colim yLV begin - e::E - s::Sheep - sheep_loc(s) == src(e) -end -s_fwd_i = @acset_colim yLV begin - e::E -end -s_fwd_r = @acset_colim yLV begin - e::E - s::Sheep - sheep_loc(s) == tgt(e) -end -s_n = @acset_colim yLV begin - e::E - s::Sheep - sheep_loc(s) == src(e) - sheep_eng(s) == 0 +s_fwd_l = @acset_colim yLV begin e::E; s::Sheep; sheep_loc(s)==src(e) end +s_fwd_i = @acset_colim yLV begin e::E end +s_fwd_r = @acset_colim yLV begin e::E; s::Sheep; sheep_loc(s)==tgt(e) end +s_n = @acset_colim yLV begin + e::E; s::Sheep; sheep_loc(s)==src(e); sheep_eng(s)==0 end sheep_fwd_rule = Rule( homomorphism(s_fwd_i, s_fwd_l; monic=true), homomorphism(s_fwd_i, s_fwd_r; monic=true), ac=[AppCond(homomorphism(s_fwd_l, s_n), false)], - expr=(Eng=Dict(3 => vs -> vs[3] - 1), Dir=Dict(2 => vs -> vs[2])) + expr=(Eng=Dict(3=>vs->vs[3]-1), Dir=Dict(2=>vs->vs[2])) ) -sheep_fwd = tryrule(RuleApp(:move_fwd, sheep_fwd_rule, - homomorphism(S, s_fwd_l), homomorphism(S, s_fwd_r))) +sheep_fwd = tryrule(RuleApp(:move_fwd, sheep_fwd_rule, + homomorphism(S,s_fwd_l), homomorphism(S,s_fwd_r))) sheep_fwd_rule.L |> codom begin # test - ex = @acset_colim yLV begin - (e1, e2)::E - s::Sheep - sheep_loc(s) == tgt(e1) - tgt(e1) == src(e2) - sheep_dir(s) == :N + ex = @acset_colim yLV begin (e1,e2)::E; s::Sheep + sheep_loc(s)==tgt(e1) + tgt(e1)==src(e2) + sheep_dir(s)==:N sheep_eng(s) == 10 end - expected = @acset_colim yLV begin - (e1, e2)::E - s::Sheep - sheep_loc(s) == tgt(e2) - tgt(e1) == src(e2) - sheep_dir(s) == :N + expected = @acset_colim yLV begin (e1,e2)::E; s::Sheep + sheep_loc(s)==tgt(e2) + tgt(e1)==src(e2) + sheep_dir(s)==:N sheep_eng(s) == 9 end - @test is_isomorphic(expected, rewrite(sheep_fwd_rule, ex)) + @test is_isomorphic(expected,rewrite(sheep_fwd_rule,ex)) end # Eat grass + 4eng #----------------- # Grass is at 0 - meaning it's ready to be eaten -s_eat_pac = @acset_colim yLV begin - s::Sheep - grass_eng(sheep_loc(s)) == 0 -end +s_eat_pac = @acset_colim yLV begin s::Sheep; grass_eng(sheep_loc(s))==0 end -se_rule = Rule(id(S), id(S); expr=(Eng=[vs -> vs[1] + 4, vs -> 30],), - ac=[AppCond(homomorphism(S, s_eat_pac))]) +se_rule = Rule(id(S), id(S); expr=(Eng=[vs->vs[1]+4,vs->30],), + ac=[AppCond(homomorphism(S,s_eat_pac))]) sheep_eat = tryrule(RuleApp(:Sheep_eat, se_rule, S)) begin # test - ex = @acset_colim yLV begin - s::Sheep - e::E - sheep_loc(s) == tgt(e) - sheep_eng(s) == 3 - grass_eng(tgt(e)) == 0 - grass_eng(src(e)) == 10 + ex = @acset_colim yLV begin s::Sheep; e::E; sheep_loc(s)==tgt(e) + sheep_eng(s)==3; grass_eng(tgt(e))==0; grass_eng(src(e))==10 end - expected = @acset_colim yLV begin - s::Sheep - e::E - sheep_loc(s) == tgt(e) - sheep_eng(s) == 7 - grass_eng(tgt(e)) == 30 - grass_eng(src(e)) == 10 + expected = @acset_colim yLV begin s::Sheep; e::E; sheep_loc(s)==tgt(e) + sheep_eng(s)==7; grass_eng(tgt(e))==30; grass_eng(src(e))==10 end - @test is_isomorphic(expected, rewrite(se_rule, ex)) + @test is_isomorphic(expected, rewrite(se_rule,ex)) end # Eat sheep + 20 eng #------------------- -w_eat_l = @acset_colim yLV begin - s::Sheep - w::Wolf - sheep_loc(s) == wolf_loc(w) -end +w_eat_l = @acset_colim yLV begin s::Sheep; w::Wolf; sheep_loc(s)==wolf_loc(w) end -we_rule = Rule(homomorphism(W, w_eat_l), id(W); expr=(Eng=[vs -> vs[3] + 20, vs -> vs[1]],)) +we_rule = Rule(homomorphism(W, w_eat_l), id(W); expr=(Eng=[vs->vs[3]+20,vs->vs[1]],)) wolf_eat = tryrule(RuleApp(:Wolf_eat, we_rule, W)) begin # test - ex = @acset LV begin - Sheep = 1 - Wolf = 1 - V = 3 - E = 2 - src = [1, 2] - tgt = [2, 3] - sheep_loc = 2 - sheep_eng = [3] - grass_eng = [9, 10, 11] - dir = fill(:N, 2) - sheep_dir = [:N] - wolf_loc = [2] - wolf_eng = [16] - wolf_dir = [:S] + ex = @acset LV begin Sheep=1; Wolf=1; V=3; E=2; src=[1,2]; tgt=[2,3]; sheep_loc=2 + sheep_eng=[3]; grass_eng=[9,10,11]; dir=fill(:N,2); sheep_dir=[:N] + wolf_loc=[2]; wolf_eng=[16]; wolf_dir=[:S] end - expected = @acset LV begin - Wolf = 1 - V = 3 - E = 2 - src = [1, 2] - tgt = [2, 3] - grass_eng = [9, 10, 11] - dir = fill(:N, 2) - sheep_dir = [:N] - wolf_loc = [2] - wolf_eng = [36] - wolf_dir = [:S] + expected = @acset LV begin Wolf=1; V=3; E=2; src=[1,2]; tgt=[2,3]; + grass_eng=[9,10,11]; dir=fill(:N,2); sheep_dir=[:N] + wolf_loc=[2]; wolf_eng=[36]; wolf_dir=[:S] end - @test is_isomorphic(rewrite(we_rule, ex), expected) + @test is_isomorphic(rewrite(we_rule,ex), expected) end # Die if 0 eng #------------- -s_die_l = @acset_colim yLV begin - s::Sheep - sheep_eng(s) == 0 -end +s_die_l = @acset_colim yLV begin s::Sheep; sheep_eng(s)==0 end sheep_die_rule = Rule(homomorphism(G, s_die_l), id(G)) -sheep_starve = (RuleApp(:starve, sheep_die_rule, - homomorphism(S, s_die_l), create(G)) - ⋅ - (id([I]) ⊗ Weaken(create(S))) ⋅ merge_wires(I)) +sheep_starve = (RuleApp(:starve, sheep_die_rule, + homomorphism(S,s_die_l), create(G)) + ⋅ (id([I]) ⊗ Weaken(create(S))) ⋅ merge_wires(I)) begin # test ex = s_die_l ⊕ W expected = G ⊕ W - @test is_isomorphic(rewrite(sheep_die_rule, ex), expected) + @test is_isomorphic(rewrite(sheep_die_rule,ex), expected) end # reproduction #------------- -s_reprod_r = @acset_colim yLV begin - (x, y)::Sheep - sheep_loc(x) == sheep_loc(y) -end +s_reprod_r = @acset_colim yLV begin (x,y)::Sheep; sheep_loc(x)==sheep_loc(y) end sheep_reprod_rule = Rule( homomorphism(G, S), - homomorphism(G, s_reprod_r); - expr=(Dir=[vs -> vs[1], vs -> vs[1]], Eng=[vs -> vs[2], - fill(vs -> round(Int, vs[1] / 2, RoundUp), 2)...],) -) + homomorphism(G, s_reprod_r); + expr=(Dir=[vs->vs[1],vs->vs[1]], Eng=[vs->vs[2], + fill(vs->round(Int, vs[1]/2, RoundUp), 2)...],) + ) -sheep_reprod = RuleApp(:reproduce, sheep_reprod_rule, - id(S), homomorphism(S, s_reprod_r)) |> tryrule +sheep_reprod = RuleApp(:reproduce, sheep_reprod_rule, + id(S), homomorphism(S, s_reprod_r)) |> tryrule begin # test - ex = @acset_colim yLV begin - s::Sheep - w::Wolf - sheep_eng(s) == 10 - end - expected = @acset_colim yLV begin - (s1, s2)::Sheep - w::Wolf + ex = @acset_colim yLV begin s::Sheep; w::Wolf; sheep_eng(s) == 10 end + expected = @acset_colim yLV begin + (s1,s2)::Sheep; w::Wolf; sheep_loc(s1) == sheep_loc(s2) - sheep_eng(s1) == 5 - sheep_eng(s2) == 5 + sheep_eng(s1) == 5; sheep_eng(s2)==5 end - @test is_isomorphic(rewrite(sheep_reprod_rule, ex), expected) + @test is_isomorphic(rewrite(sheep_reprod_rule,ex),expected) end # Grass increment #---------------- g_inc_n = deepcopy(G) -set_subpart!(g_inc_n, 1, :grass_eng, 0); +set_subpart!(g_inc_n,1, :grass_eng, 0); rem_part!(g_inc_n, :Eng, 1) g_inc_rule = Rule(id(G), id(G); - ac=[AppCond(homomorphism(G, g_inc_n), false)], - expr=(Eng=[vs -> only(vs) - 1],)) -g_inc = RuleApp(:GrassIncrements, g_inc_rule, G) |> tryrule + ac=[AppCond(homomorphism(G, g_inc_n), false)], + expr=(Eng=[vs->only(vs)-1],)) +g_inc = RuleApp(:GrassIncrements,g_inc_rule, G) |> tryrule begin # test - ex = @acset LV begin - Sheep = 1 - V = 3 - E = 2 - src = [1, 2] - tgt = [2, 3] - sheep_loc = 2 - sheep_eng = [3] - grass_eng = [1, 10, 2] - dir = fill(:N, 2) - sheep_dir = [:N] + ex = @acset LV begin Sheep=1; V=3; E=2; src=[1,2]; tgt=[2,3]; sheep_loc=2 + sheep_eng=[3]; grass_eng=[1,10,2]; dir=fill(:N,2); sheep_dir=[:N] end - expected = @acset LV begin - Sheep = 1 - V = 3 - E = 2 - src = [1, 2] - tgt = [2, 3] - sheep_loc = 2 - sheep_eng = [3] - grass_eng = [0, 10, 2] - dir = fill(:N, 2) - sheep_dir = [:N] + expected = @acset LV begin Sheep=1; V=3; E=2; src=[1,2]; tgt=[2,3]; sheep_loc=2 + sheep_eng=[3]; grass_eng=[0,10,2]; dir=fill(:N,2); sheep_dir=[:N] end - @test is_isomorphic(rewrite(g_inc_rule, ex), expected) + @test is_isomorphic(rewrite(g_inc_rule,ex), expected) end # Scheduling Rules @@ -479,37 +381,37 @@ end #---------------------------------- # 25% chance of left turn, 25% chance of right turn, 50% stay in same direction -general = mk_sched((;), (init=:S,), N, ( - turn=const_cond([1.0, 2.0, 1.0], S; name=:turn), - maybe=const_cond([0.1, 0.9], S; name=:reprod), - lft=sheep_rotate_l, - rght=sheep_rotate_r, - fwd=sheep_fwd, - repro=sheep_reprod, - starve=sheep_starve), - quote +general = mk_sched((;),(init=:S,), N, ( + turn = const_cond([1.,2.,1.], S; name=:turn), + maybe = const_cond([0.1, 0.9], S; name=:reprod), + lft = sheep_rotate_l, + rght = sheep_rotate_r, + fwd = sheep_fwd, + repro = sheep_reprod, + starve = sheep_starve), + quote out_l, out_str, out_r = turn(init) - moved = fwd([lft(out_l), out_str, rght(out_r)]) + moved = fwd([lft(out_l), out_str, rght(out_r)]) out_repro, out_no_repro = maybe(moved) return starve([repro(out_repro), out_no_repro]) - end) +end) sheep = sheep_eat ⋅ general # once per sheep wolf = wolf_eat ⋅ F(general) # once per wolf # Do all sheep, then all wolves, then all daily operations -cycle = (agent(sheep; n=:sheep, ret=I) - ⋅ - agent(wolf; n=:wolves, ret=I) - ⋅ - agent(g_inc; n=:grass)) +cycle = ( agent(sheep; n=:sheep, ret=I) + ⋅ agent(wolf; n=:wolves, ret=I) + ⋅ agent(g_inc; n=:grass)) # wrap in a while loop -overall = while_schedule(cycle, curr -> nparts(curr, :Wolf) >= 0) |> F2 +overall = while_schedule(cycle, curr -> nparts(curr,:Wolf) >= 0) |> F2 # view_sched(overall; names=F2(N)) -X = initialize(3, 0.25, 0.25) + +X = initialize(3, .25, .25) res, = apply_schedule(overall, X; steps=50); # Run this lines to view the trajectory # view_traj(overall, res, view_LV; agent=true, names=F2(N)) +end # module diff --git a/docs/src/lotka_volterra.jl b/docs/src/lotka_volterra.jl deleted file mode 100644 index 7ad400d..0000000 --- a/docs/src/lotka_volterra.jl +++ /dev/null @@ -1,417 +0,0 @@ -module LotkaVolterra - -using Catlab, DataMigrations, AlgebraicRewriting -using Random, Test, StructEquality -using Luxor - -Random.seed!(123); - -using Catlab.Graphics.Graphviz: Attributes, Statement, Node -using Catlab.Graphics.Graphviz - -import Catlab.CategoricalAlgebra: left, right - -function right(s::Symbol) - if s == :N return :E - elseif s == :S return :W - elseif s == :E return :S - elseif s == :W return :N - end -end -function left(s::Symbol) - if s == :N return :W - elseif s == :S return :E - elseif s == :E return :N - elseif s == :W return :S - end -end - -""" -Grass = 0 means alive grass, whereas grass > 0 represent a counter of time until -the grass is alive. - -Sheeps and wolves have position and direction, so we assign each an *edge*. We -assume a convention where the location of the something is the edge SOURCE. - -Dir is an attribute which can take values :N, :E, :W, and :S. -""" -@present TheoryLV <: SchGraph begin - (Sheep,Wolf)::Ob - sheep_loc::Hom(Sheep, V) - wolf_loc::Hom(Wolf, V) - - (Dir,Eng)::AttrType - grass_eng::Attr(V, Eng) - sheep_eng::Attr(Sheep, Eng) - wolf_eng::Attr(Wolf, Eng) - sheep_dir::Attr(Sheep, Dir) - wolf_dir::Attr(Wolf, Dir) - dir::Attr(E, Dir) -end - -@present TheoryLV′ <: TheoryLV begin - Coord::AttrType - coord::Attr(V,Coord) -end - -to_graphviz(TheoryLV; prog="dot") - -@acset_type LV_Generic(TheoryLV) <: HasGraph -const LV = LV_Generic{Symbol, Int} - -@acset_type LV′_Generic(TheoryLV′) <: HasGraph -const LV′ = LV′_Generic{Symbol, Int, Tuple{Int,Int}} - -F = Migrate( - Dict(:Sheep=>:Wolf, :Wolf=>:Sheep), - Dict([:sheep_loc=>:wolf_loc, :wolf_loc=>:sheep_loc, - :sheep_eng=>:wolf_eng, :wolf_eng=>:sheep_eng,:grass_eng =>:grass_eng, - :sheep_dir=>:wolf_dir, :wolf_dir=>:sheep_dir,]), LV) -F2 = Migrate( - Dict(x=>x for x in Symbol.(TheoryLV.generators[:Ob])), - Dict(x=>x for x in Symbol.(TheoryLV.generators[:Hom])), LV′; delta=false) - -""" -Create an n × n grid with periodic boundary conditions. Edges in each cardinal -direction originate at every point - -(i,j+1) -> (i+1,j+1) -> ... - ↑ ↑ -(i,j) -> (i+1,j) -> ... - -""" -function create_grid(n::Int) - lv = LV′() - coords = Dict() - # Initialize grass 50% green, 50% uniformly between 0-30 - for i in 0:n-1 - for j in 0:n-1 - coords[i=>j] = add_part!(lv, :V; grass_eng=max(0,rand(-30:30)), coord=(i,j)) - end - end - for i in 0:n-1 - for j in 0:n-1 - add_part!(lv, :E; src=coords[i=>j], tgt=coords[mod(i+1,n)=>j], dir=:E) - add_part!(lv, :E; src=coords[i=>j], tgt=coords[mod(i-1,n)=>j], dir=:W) - add_part!(lv, :E; src=coords[i=>j], tgt=coords[i=>mod(j+1,n)], dir=:N) - add_part!(lv, :E; src=coords[i=>j], tgt=coords[i=>mod(j-1,n)], dir=:S) - end - end - return lv -end - -g = create_grid(2) - - -""" -`n` is the length of the grid. -`sheep` and `wolves` are the fraction of spaces that are -populated with that animal -""" -function initialize(n::Int, sheep::Float64, wolves::Float64)::LV′ - grid = create_grid(n) - args = [(sheep, :Sheep, :sheep_loc, :sheep_eng, :sheep_dir), - (wolves, :Wolf, :wolf_loc, :wolf_eng, :wolf_dir)] - for (n_, name, loc, eng, d) in args - for _ in 1:round(Int,n_*n^2) - dic = Dict([eng => 5, loc => rand(vertices(grid)), - d => rand([:N,:E,:S,:W])]) - add_part!(grid, name; dic...) - end - end - return grid -end - - -supscript_d = Dict([ - '1'=>'¹', '2'=>'²', '3'=>'³', '4'=>'⁴', '5'=>'⁵','6'=>'⁶', '7'=>'⁷', '8'=>'⁸', - '9'=>'⁹', '0'=>'⁰', 'x'=>'ˣ', 'y'=>'ʸ','z'=>'ᶻ','a'=>'ᵃ','b'=>'ᵇ','c'=>'ᶜ', - 'd'=>'ᵈ']) -supscript(x::String) = join([get(supscript_d, c, c) for c in x]) - -"""Visualize a LV""" -function view_LV(p::ACSetTransformation, pth=tempname(); name="G", title="") - if nparts(dom(p),:Wolf) == 1 - star = :Wolf=>p[:Wolf](1) - elseif nparts(dom(p),:Sheep) == 1 - star = :Sheep=>p[:Sheep](1) - elseif nparts(dom(p),:V) == 1 - star = :V=>p[:V](1) - else - star = nothing - end - view_LV(codom(p), pth; name=name, title=title, star=star) -end -function view_LV(p::LV′, pth=tempname(); name="G", title="", star=nothing) - pstr = ["$(i),$(j)!" for (i,j) in p[:coord]] - stmts = Statement[] - for s in 1:nv(p) - st = (star == (:V=>s)) ? "*" : "" - gv = p[s, :grass_eng] - col = gv == 0 ? "lightgreen" : "tan" - push!(stmts,Node("v$s", Attributes( - :label=>gv == 0 ? "" : string(gv)*st, - :shape=>"circle", - :color=> col, :pos=>pstr[s]))) - end - d = Dict([:E=>(1,0),:N=>(0,1), :S=>(0,-1),:W=>(-1,0),]) - - args = [(:true,:Wolf,:wolf_loc,:wolf_eng,:wolf_dir), - (false, :Sheep, :sheep_loc, :sheep_eng,:sheep_dir)] - - for (is_wolf, prt, loc, eng, dr) in args - for w in parts(p, prt) - st = (star == ((is_wolf ? :Wolf : :Sheep) => w)) ? "*" : "" - e = only(incident(p,p[w,loc], :src) ∩ incident(p,p[w,dr], :dir)) - s = src(p,e) - dx, dy = d[p[e, :dir]] - (sx,sy) = p[s,:coord] - - L, R = 0.25, 0.1 - wx = sx+L*dx+R*rand() - wy = sy+L*dy+R*rand() - ID = "$(is_wolf ? :w : :s)$w" - append!(stmts,[Node(ID, Attributes( - :label=>"$w"*supscript("$(p[w,eng])")*st, - :shape=>"square", :width=>"0.3px", :height=>"0.3px", :fixedsize=>"true", - :pos=>"$(wx),$(wy)!",:color=> is_wolf ? "red" : "lightblue"))]) - end - end - - g = Graphviz.Digraph(name, Statement[stmts...]; prog="neato", - graph_attrs=Attributes(:label=>title, :labelloc=>"t"), - node_attrs=Attributes(:shape=>"plain", :style=>"filled")) - open(pth, "w") do io - show(io,"image/svg+xml",g) - end -end - -i1 = initialize(2,.5,.5) -# view_LV(i1) - -# RULES -####### -yLV = yoneda_cache(LV; clear=true); -yLV = yoneda_cache(LV; clear=false); - -# Empty agent type -I = LV() -# Generic sheep agent -S = @acset_colim yLV begin s::Sheep end -# Generic wolf agent -W = F(S) -# Generic grass agent -G = @acset_colim yLV begin v::V end - -N = Names(Dict("W"=>W,"S"=>S,"G"=>G, ""=>I)) -# Rotating -#--------- - -rl = Rule(id(S),id(S); expr=(Dir=[xs->left(only(xs))],)) -rr = Rule(id(S),id(S); expr=(Dir=[xs->right(only(xs))],)) - -sheep_rotate_l = tryrule(RuleApp(:turn_left, rl, S)) -sheep_rotate_r = tryrule(RuleApp(:turn_right, rr, S)) - -# we can imagine executing these rules in sequence or in parallel -seq_sched = (sheep_rotate_l⋅sheep_rotate_r) -# view_sched(seq_sched; names=N) -par_sched = (sheep_rotate_l ⊗ sheep_rotate_r) -# view_sched(par_sched; names=N) - - - -begin - ex = @acset_colim yLV begin - e::E - s::Sheep - sheep_loc(s) == src(e) - sheep_dir(s) == :N - end - expected = copy(ex); - expected[:sheep_dir] = :W - @test is_isomorphic(rewrite(rl, ex), expected) -end - -# Moving forward -#--------------- -s_fwd_l = @acset_colim yLV begin e::E; s::Sheep; sheep_loc(s)==src(e) end -s_fwd_i = @acset_colim yLV begin e::E end -s_fwd_r = @acset_colim yLV begin e::E; s::Sheep; sheep_loc(s)==tgt(e) end -s_n = @acset_colim yLV begin - e::E; s::Sheep; sheep_loc(s)==src(e); sheep_eng(s)==0 -end - -sheep_fwd_rule = Rule( - homomorphism(s_fwd_i, s_fwd_l; monic=true), - homomorphism(s_fwd_i, s_fwd_r; monic=true), - ac=[AppCond(homomorphism(s_fwd_l, s_n), false)], - expr=(Eng=Dict(3=>vs->vs[3]-1), Dir=Dict(2=>vs->vs[2])) -) - -sheep_fwd = tryrule(RuleApp(:move_fwd, sheep_fwd_rule, - homomorphism(S,s_fwd_l), homomorphism(S,s_fwd_r))) - - -sheep_fwd_rule.L |> codom - -begin # test - ex = @acset_colim yLV begin (e1,e2)::E; s::Sheep - sheep_loc(s)==tgt(e1) - tgt(e1)==src(e2) - sheep_dir(s)==:N - sheep_eng(s) == 10 - end - expected = @acset_colim yLV begin (e1,e2)::E; s::Sheep - sheep_loc(s)==tgt(e2) - tgt(e1)==src(e2) - sheep_dir(s)==:N - sheep_eng(s) == 9 - end - @test is_isomorphic(expected,rewrite(sheep_fwd_rule,ex)) -end - -# Eat grass + 4eng -#----------------- -# Grass is at 0 - meaning it's ready to be eaten -s_eat_pac = @acset_colim yLV begin s::Sheep; grass_eng(sheep_loc(s))==0 end - -se_rule = Rule(id(S), id(S); expr=(Eng=[vs->vs[1]+4,vs->30],), - ac=[AppCond(homomorphism(S,s_eat_pac))]) -sheep_eat = tryrule(RuleApp(:Sheep_eat, se_rule, S)) - -begin # test - ex = @acset_colim yLV begin s::Sheep; e::E; sheep_loc(s)==tgt(e) - sheep_eng(s)==3; grass_eng(tgt(e))==0; grass_eng(src(e))==10 - end - expected = @acset_colim yLV begin s::Sheep; e::E; sheep_loc(s)==tgt(e) - sheep_eng(s)==7; grass_eng(tgt(e))==30; grass_eng(src(e))==10 - end - - @test is_isomorphic(expected, rewrite(se_rule,ex)) -end - -# Eat sheep + 20 eng -#------------------- - -w_eat_l = @acset_colim yLV begin s::Sheep; w::Wolf; sheep_loc(s)==wolf_loc(w) end - -we_rule = Rule(homomorphism(W, w_eat_l), id(W); expr=(Eng=[vs->vs[3]+20,vs->vs[1]],)) -wolf_eat = tryrule(RuleApp(:Wolf_eat, we_rule, W)) - -begin # test - ex = @acset LV begin Sheep=1; Wolf=1; V=3; E=2; src=[1,2]; tgt=[2,3]; sheep_loc=2 - sheep_eng=[3]; grass_eng=[9,10,11]; dir=fill(:N,2); sheep_dir=[:N] - wolf_loc=[2]; wolf_eng=[16]; wolf_dir=[:S] - end - expected = @acset LV begin Wolf=1; V=3; E=2; src=[1,2]; tgt=[2,3]; - grass_eng=[9,10,11]; dir=fill(:N,2); sheep_dir=[:N] - wolf_loc=[2]; wolf_eng=[36]; wolf_dir=[:S] - end - @test is_isomorphic(rewrite(we_rule,ex), expected) -end - -# Die if 0 eng -#------------- -s_die_l = @acset_colim yLV begin s::Sheep; sheep_eng(s)==0 end - -sheep_die_rule = Rule(homomorphism(G, s_die_l), id(G)) -sheep_starve = (RuleApp(:starve, sheep_die_rule, - homomorphism(S,s_die_l), create(G)) - ⋅ (id([I]) ⊗ Weaken(create(S))) ⋅ merge_wires(I)) - -begin # test - ex = s_die_l ⊕ W - expected = G ⊕ W - @test is_isomorphic(rewrite(sheep_die_rule,ex), expected) -end - -# reproduction -#------------- - -s_reprod_r = @acset_colim yLV begin (x,y)::Sheep; sheep_loc(x)==sheep_loc(y) end - -sheep_reprod_rule = Rule( - homomorphism(G, S), - homomorphism(G, s_reprod_r); - expr=(Dir=[vs->vs[1],vs->vs[1]], Eng=[vs->vs[2], - fill(vs->round(Int, vs[1]/2, RoundUp), 2)...],) - ) - -sheep_reprod = RuleApp(:reproduce, sheep_reprod_rule, - id(S), homomorphism(S, s_reprod_r)) |> tryrule - -begin # test - ex = @acset_colim yLV begin s::Sheep; w::Wolf; sheep_eng(s) == 10 end - expected = @acset_colim yLV begin - (s1,s2)::Sheep; w::Wolf; - sheep_loc(s1) == sheep_loc(s2) - sheep_eng(s1) == 5; sheep_eng(s2)==5 - end - @test is_isomorphic(rewrite(sheep_reprod_rule,ex),expected) -end - -# Grass increment -#---------------- - -g_inc_n = deepcopy(G) -set_subpart!(g_inc_n,1, :grass_eng, 0); -rem_part!(g_inc_n, :Eng, 1) - -g_inc_rule = Rule(id(G), id(G); - ac=[AppCond(homomorphism(G, g_inc_n), false)], - expr=(Eng=[vs->only(vs)-1],)) -g_inc = RuleApp(:GrassIncrements,g_inc_rule, G) |> tryrule - - -begin # test - ex = @acset LV begin Sheep=1; V=3; E=2; src=[1,2]; tgt=[2,3]; sheep_loc=2 - sheep_eng=[3]; grass_eng=[1,10,2]; dir=fill(:N,2); sheep_dir=[:N] - end - expected = @acset LV begin Sheep=1; V=3; E=2; src=[1,2]; tgt=[2,3]; sheep_loc=2 - sheep_eng=[3]; grass_eng=[0,10,2]; dir=fill(:N,2); sheep_dir=[:N] - end - @test is_isomorphic(rewrite(g_inc_rule,ex), expected) -end - -# Scheduling Rules -################## - -# Stuff that happens once per sheep -#---------------------------------- - -# 25% chance of left turn, 25% chance of right turn, 50% stay in same direction -general = mk_sched((;),(init=:S,), N, ( - turn = const_cond([1.,2.,1.], S; name=:turn), - maybe = const_cond([0.1, 0.9], S; name=:reprod), - lft = sheep_rotate_l, - rght = sheep_rotate_r, - fwd = sheep_fwd, - repro = sheep_reprod, - starve = sheep_starve), - quote - out_l, out_str, out_r = turn(init) - moved = fwd([lft(out_l), out_str, rght(out_r)]) - out_repro, out_no_repro = maybe(moved) - return starve([repro(out_repro), out_no_repro]) -end) - -sheep = sheep_eat ⋅ general # once per sheep -wolf = wolf_eat ⋅ F(general) # once per wolf - -# Do all sheep, then all wolves, then all daily operations -cycle = ( agent(sheep; n=:sheep, ret=I) - ⋅ agent(wolf; n=:wolves, ret=I) - ⋅ agent(g_inc; n=:grass)) - -# wrap in a while loop -overall = while_schedule(cycle, curr -> nparts(curr,:Wolf) >= 0) |> F2 -# view_sched(overall; names=F2(N)) - -X = initialize(3, .25, .25) -res, = apply_schedule(overall, X; steps=50); - -# Run this lines to view the trajectory -# view_traj(overall, res, view_LV; agent=true, names=F2(N)) - -end # module From 289d02d98b34e0786ca7187cb40c89724d42d7eb Mon Sep 17 00:00:00 2001 From: Kris Brown Date: Wed, 3 Jan 2024 11:55:37 -0800 Subject: [PATCH 3/7] compat with catlab 16 --- Project.toml | 1 - docs/Project.toml | 1 - docs/literate/full_demo.jl | 18 ++++++++---------- test/Project.toml | 1 - test/runtests.jl | 4 ++-- 5 files changed, 10 insertions(+), 15 deletions(-) diff --git a/Project.toml b/Project.toml index 13d0d68..1c0d234 100644 --- a/Project.toml +++ b/Project.toml @@ -24,7 +24,6 @@ AlgebraicRewritingDataMigrationsExt = "DataMigrations" [compat] ACSets = "0.2.9" Catlab = "0.16.1" -DataMigrations = "0.0.2" DataStructures = "0.17, 0.18" Reexport = "^1" StructEquality = "2.1" diff --git a/docs/Project.toml b/docs/Project.toml index 7c87032..110f5ba 100644 --- a/docs/Project.toml +++ b/docs/Project.toml @@ -1,5 +1,4 @@ [deps] -ACSets = "227ef7b5-1206-438b-ac65-934d6da304b8" AlgebraicPetri = "4f99eebe-17bf-4e98-b6a1-2c4f205a959b" AlgebraicRewriting = "725a01d3-f174-5bbd-84e1-b9417bad95d9" Catlab = "134e5e36-593f-5add-ad60-77f754baafbe" diff --git a/docs/literate/full_demo.jl b/docs/literate/full_demo.jl index a02ab31..0280133 100644 --- a/docs/literate/full_demo.jl +++ b/docs/literate/full_demo.jl @@ -1,6 +1,4 @@ -using AlgebraicRewriting -using Catlab, Catlab.CategoricalAlgebra, Catlab.Graphics, Catlab.Graphs, Catlab.Programs -import AlgebraicPetri +using AlgebraicRewriting, Catlab, AlgebraicPetri, DataMigrations using Test @@ -9,7 +7,7 @@ This is a self-contained walkthrough of the main features of AlgebraicRewriting. This is a regular julia file that can be run interactively. Importantly: - - use Julia 1.9 (not yet official released) + - use Julia 1.10 - ]activate the environment in AlgebraicRewriting.jl/docs - check that graphviz is installed locally (test via "which dot" in terminal) @@ -60,8 +58,8 @@ R = @acset Graph begin src = 1 tgt = 1 end # •↺ -l = CSetTransformation(I, L; V=[1]) # graph homomorphism data -r = CSetTransformation(I, R; V=[1]) +l = ACSetTransformation(I, L; V=[1]) # graph homomorphism data +r = ACSetTransformation(I, R; V=[1]) rule = Rule(l, r) G = path_graph(Graph, 5) # • → • → • → • → • @@ -159,7 +157,7 @@ rule_sqpo = Rule{:SqPO}(l, r) # same data as before) G = star_graph(Graph, 6) # a 5-pointed star to_graphviz(G; prog="neato") # changing "prog" can sometimes make it look better -m = CSetTransformation(Graph(1), G; V=[6]) # point at the center +m = ACSetTransformation(Graph(1), G; V=[6]) # point at the center res = rewrite_match(rule_sqpo, m) to_graphviz(res; prog="neato") @@ -186,7 +184,7 @@ L′ = @acset Graph begin src = [1, 1, 1, 2, 3, 3] tgt = [1, 2, 3, 3, 3, 1] end -tl = CSetTransformation(L, L′; V=[2]) # 2 is the matched vertex +tl = ACSetTransformation(L, L′; V=[2]) # 2 is the matched vertex to_graphviz(L′; node_labels=true) # The outneighbors of the matched vertex are duplicated (an edge connects the @@ -199,7 +197,7 @@ K′ = @acset Graph begin src = [1, 1, 1, 2, 3, 3, 3, 4, 5] tgt = [1, 2, 3, 3, 3, 1, 5, 5, 5] end -tk = CSetTransformation(K, K′; V=[2, 4]) +tk = ACSetTransformation(K, K′; V=[2, 4]) to_graphviz(K′; node_labels=true) l′ = homomorphism(K′, L′; initial=(V=[1, 2, 3, 2, 3],)) @@ -243,7 +241,7 @@ function graph_slice(s::Slice) (S, T), (I, O) = [[findall(==(i), X) for i in 1:2] for X in [V, E]] nS, nT, nI, nO = length.([S, T, I, O]) findS, findT = [x -> findfirst(==(x), X) for X in [S, T]] - AlgebraicPetri.Graph(@acset AlgebraicPetri.PetriNet begin + to_graphviz(@acset AlgebraicPetri.PetriNet begin S = nS T = nT I = nI diff --git a/test/Project.toml b/test/Project.toml index c565a0b..0367591 100644 --- a/test/Project.toml +++ b/test/Project.toml @@ -4,7 +4,6 @@ Catlab = "134e5e36-593f-5add-ad60-77f754baafbe" DataMigrations = "0c4ad18d-0c49-4bc2-90d5-5bca8f00d6ae" Luxor = "ae8d54c2-7ccd-5906-9d76-62fc9837b5bc" PrettyTables = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d" -Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" Revise = "295af30f-e4ad-537b-8983-00126c2a3abe" StructEquality = "6ec83bb0-ed9f-11e9-3b4c-2b04cb4e219c" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" diff --git a/test/runtests.jl b/test/runtests.jl index 637d585..7e3fbbb 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -15,11 +15,11 @@ using DataMigrations ####### @testset "Lotka Volterra" begin - include("../docs/src/lotka_volterra.jl") + #include("../docs/src/lotka_volterra.jl") end @testset "Game of Life" begin - include("../docs/src/GameOfLife.jl") + #include("../docs/src/GameOfLife.jl") end From f6253bbbc02b1c894e61b4d3fd7a04d687d86d28 Mon Sep 17 00:00:00 2001 From: Angeline Aguinaldo Date: Wed, 17 Jan 2024 18:44:24 -0500 Subject: [PATCH 4/7] maintain doc examples, working literate/documenter build, reformate homepage --- docs/literate/full_demo.jl | 164 ++- docs/literate/game_of_life.jl | 50 +- docs/literate/lotka_volterra.jl | 509 +++++---- docs/literate/mesh.jl | 207 ---- docs/literate/petri_to_abm.jl | 104 -- docs/literate/ptg_simple.jl | 56 +- docs/make.jl | 22 +- docs/src/api.md | 40 +- docs/src/generated/full_demo.ipynb | 1247 ++++++++++++++--------- docs/src/generated/full_demo.md | 226 ++-- docs/src/generated/game_of_life.ipynb | 138 +-- docs/src/generated/game_of_life.md | 55 +- docs/src/generated/lotka_volterra.ipynb | 949 +++++++++-------- docs/src/generated/lotka_volterra.md | 209 ++-- docs/src/generated/mesh.md | 218 ---- docs/src/generated/petri_to_abm.md | 110 -- docs/src/generated/ptg_simple.ipynb | 129 +-- docs/src/generated/ptg_simple.md | 30 +- docs/src/index.md | 138 ++- 19 files changed, 2122 insertions(+), 2479 deletions(-) delete mode 100644 docs/literate/mesh.jl delete mode 100644 docs/literate/petri_to_abm.jl delete mode 100644 docs/src/generated/mesh.md delete mode 100644 docs/src/generated/petri_to_abm.md diff --git a/docs/literate/full_demo.jl b/docs/literate/full_demo.jl index 0280133..d025e4f 100644 --- a/docs/literate/full_demo.jl +++ b/docs/literate/full_demo.jl @@ -1,14 +1,16 @@ +# # Full Demo + using AlgebraicRewriting, Catlab, AlgebraicPetri, DataMigrations using Test -""" +#= This is a self-contained walkthrough of the main features of AlgebraicRewriting. This is a regular julia file that can be run interactively. Importantly: - use Julia 1.10 - - ]activate the environment in AlgebraicRewriting.jl/docs + - activate the environment in AlgebraicRewriting.jl/docs - check that graphviz is installed locally (test via "which dot" in terminal) Table of contents: @@ -34,24 +36,21 @@ that is not available, your options are to 2.) use the following `to_svg` function, which will write a graphviz output to a SVG file and can be viewed in a browser. The Julia pipe syntax |> allows you to easily append " |> to_svg " to a line with a visualization. -""" +=# + to_svg(G, filename="tmp.svg") = open(filename, "w") do io show(io, "image/svg+xml", G) end -to_graphviz(path_graph(Graph, 3)) # |> to_svg +to_graphviz(path_graph(Graph, 3)) -########## -# 1. DPO # -########## +# # 1. DPO -""" -We construct a rule by providing a span, L ← I → R -""" +# We construct a rule by providing a span, L ← I → R -L = path_graph(Graph, 2) # • → • -I = Graph(1) # • +L = path_graph(Graph, 2) # • → • +I = Graph(1) # • R = @acset Graph begin V = 1 E = 1 @@ -60,19 +59,19 @@ R = @acset Graph begin end # •↺ l = ACSetTransformation(I, L; V=[1]) # graph homomorphism data r = ACSetTransformation(I, R; V=[1]) - rule = Rule(l, r) -G = path_graph(Graph, 5) # • → • → • → • → • +G = path_graph(Graph, 5) # • → • → • → • → • m = only(get_matches(rule, G)) # only one match which satisfies dangling condition -"""We can rewrite with a specific match""" +# Provided a specific match (`m`), we can use the `rule` to rewrite the graph (`G`) using `rewrite_match(rule, m)`. res = rewrite_match(rule, m) # • → • → • → •↺ to_graphviz(res; node_labels=true) -# Note that C-Sets are morally regarded up to isomorphism - in particular, -# limits and colimits may modify the orderings of edges/vertices +#= +Note that C-Sets are morally regarded up to isomorphism - in particular, limits and colimits may modify the orderings of edges/vertices +=# expected = @acset Graph begin V = 4 @@ -82,11 +81,10 @@ expected = @acset Graph begin end @test is_isomorphic(expected, res) -""" -We can also specify the rule via a colimit-of-representables (i.e. generators -and relations) syntax. As your schema gets bigger, this becomes more and more -convenient. Assigning temporary names to the C-Set elements can also be helpful. -""" +#= +We can also specify the rule via a colimit-of-representables (i.e. generators and relations) syntax. As your schema gets bigger, this becomes more and more convenient. Assigning temporary tags, e.g. `e`, `v`, `eᵣ` to the C-Set elements can also be helpful. +=# + yG = yoneda_cache(Graph, clear=true); # compute representables rule2 = Rule(@migration(SchRulel, SchGraph, begin @@ -105,49 +103,41 @@ rule2 = Rule(@migration(SchRulel, SchGraph, begin end end), yG) -"""We can rewrite without a match (and let it pick an arbitrary match)""" +# We can also rewrite without a match (and let it pick an arbitrary match). @test res == rewrite(rule, G) -########## -# 2. SPO # -########## +# # 2. SPO -""" -Rules are by default DPO, but if we specify a type parameter we can change -the semantics -""" +# Rules are by default DPO, but if we specify a type parameter we can change the semantics -rule_spo = Rule{:SPO}(l, r) # (same data as before) +rule_spo = Rule{:SPO}(l, r) # (same data as before) @test length(get_matches(rule_spo, G)) == 4 # there are now four matches res = rewrite(rule_spo, G) to_graphviz(res) @test is_isomorphic(res, path_graph(Graph, 3) ⊕ R) -# note that ⊕ and ⊗ are shorthand for (co)products -# Julia lets you easily write unicode symbols via "\" followed by a LaTeX name +# **Note**: ⊕ and ⊗ are shorthand for (co)products +# _Tip: Julia lets you easily write unicode symbols via "\" followed by a LaTeX name, then hit "Tab" to convert the symbol_ -########### -# 3. SqPO # -########### +# # 3. SqPO -"""If we duplicate a vertex with an incident edge, it will duplicate the edge""" +# If we duplicate a vertex with an incident edge, it will duplicate the edge L = Graph(1) I = Graph(2) R = path_graph(Graph, 2) -""" -We can use automated homomorphism search to reduce the tedium of specifying -data manually. In this case, there is a unique option -""" +#= +We can use automated homomorphism search to reduce the tedium of specifying data manually. In this case, there is a unique option. +=# l = homomorphism(I, L) -""" +#= There are many constraints we can put on the search, such as being monic. -""" +=# r = homomorphism(I, R; monic=true) @@ -161,15 +151,11 @@ m = ACSetTransformation(Graph(1), G; V=[6]) # point at the center res = rewrite_match(rule_sqpo, m) to_graphviz(res; prog="neato") -############ -# 4. PBPO+ # -############ +# # 4. PBPO+ -""" -PBPO+ requires not merely a span but also additional data for L and K which can -be thought of as type graphs. The graph G that we rewrite will be typed over -the L' type graph to determine how it is rewritten. -""" +#= +PBPO+ requires not merely a span but also additional data for L and K which can be thought of as type graphs. The graph G that we rewrite will be typed over the L' type graph to determine how it is rewritten. +=# L = Graph(1) K = Graph(2) @@ -219,19 +205,13 @@ res = rewrite_match(prule, m) # V1 is copied to V2. Outneighbor V5 (w/ loop) is copied to V6, creating an edge to_graphviz(res; node_labels=true) -########################## -# 5. Generalizing Graphs # -########################## +# # 5. Generalizing Graphs -""" -Any data structure which implements the required functions we need can, in -principle, be used for rewriting. Importantly this includes pushout_complement, -pushout, and homomorphism search. These are all implemented generically for -any C-Set schema (allowing us to rewrite Petri nets, Semisimplicial sets, etc.) +#= +Any data structure which implements the required functions we need can, in principle, be used for rewriting. Importantly this includes pushout_complement, pushout, and homomorphism search. These are all implemented generically for any C-Set schema (allowing us to rewrite Petri nets, Semisimplicial sets, etc.) -Here we'll do rewriting in graphs sliced over •⇆•, which is isomorphic to the -category of (whole-grain) Petri nets, with States and Transitions. -""" +Here we'll do rewriting in graphs sliced over •⇆•, which is isomorphic to the category of (whole-grain) Petri nets, with States and Transitions. +=# function graph_slice(s::Slice) @@ -253,7 +233,7 @@ function graph_slice(s::Slice) end) end; -""" this is the graph we are slicing over """ +# This is the graph we are slicing over. two = @acset Graph begin V = 2 @@ -262,7 +242,7 @@ two = @acset Graph begin tgt = [2, 1] end -""" Define a rule which deletes a [T] -> S edge""" +# Define a rule which deletes a [T] -> S edge L_ = path_graph(Graph, 2) L = Slice(ACSetTransformation(L_, two, V=[2, 1], E=[2])) # [T] ⟶ (S) @@ -273,7 +253,7 @@ I = Slice(ACSetTransformation(I_, two, V=[2])) # [T] R_ = Graph(2) R = Slice(ACSetTransformation(R_, two, V=[2, 1])) # [T] (S) -"""Using homomorphism search in the slice category""" +# Using homomorphism search in the slice category rule = Rule(homomorphism(I, L), homomorphism(I, R)) @@ -284,22 +264,15 @@ graph_slice(G) res = rewrite(rule, G) # (S) ⟶ [T] (S) graph_slice(res) -""" -While the vast majority of functionality is focused on ACSets at the present -moment, but there is nothing in principle which limits this. -""" +#= +While the vast majority of functionality is focused on ACSets at the present moment, but there is nothing in principle which limits this. +=# + +# # 6. Application conditions -############################# -# 6. Application conditions # -############################# -""" -We can construct commutative diagrams with certain edges left unspecified or -marked with ∀ or ∃. If only one edge is left free, we can treat the diagram as -a boolean function which tests whether the morphism makes the specified paths -commute (or not commute). This generalizes positive/negative application -conditions and lifting conditions, but because those are most common there are -constructors AppCond and LiftCond to make these directly. +#= +We can construct commutative diagrams with certain edges left unspecified or marked with ∀ or ∃. If only one edge is left free, we can treat the diagram as a boolean function which tests whether the morphism makes the specified paths commute (or not commute). This generalizes positive/negative application conditions and lifting conditions, but because those are most common there are constructors AppCond and LiftCond to make these directly. ∀ [↻•] → ? @@ -307,7 +280,8 @@ constructors AppCond and LiftCond to make these directly. [↻•⟶•] → [↻•⟶•⟵•↺] Every vertex with a loop also has a map to the vertex marked by the bottom map. -""" +=# + t = terminal(Graph) |> apex looparr = @acset_colim yG begin (e1, e2)::E @@ -328,7 +302,7 @@ constr = LiftCond(v, b) @test !apply_constraint(constr, homomorphism(t, loop_csp)) @test apply_constraint(constr, b) -"""We can combining constraints with logical combinators""" +# We can combining constraints with logical combinators. # match vertex iff it has 2 or 3 self loops one, two, three, four, five = [@acset(Graph, begin @@ -348,11 +322,9 @@ G = two ⊕ three ⊕ two ⊕ four ⊕ five ⊕ one @test length(get_matches(rule, G)) == 3 -########################## -# 7. Attribute variables # -########################## +# # 7. Attribute variables -""" +#= Normally ACSet morphisms must match attribute values exactly, i.e. a weighted graph edge of 8.3 can only be mapped to another edge weighted at 8.3. This becomes very restricted, especially when we want to do some simple computations @@ -361,7 +333,7 @@ with attribute values (e.g. when merging two edges, add their values together) A recent extension of ACSets makes this possible - each attribute type comes equipped with a finite set of "variables" which can be mapped to any concrete value (or another variable). -""" +=# yWG = yoneda_cache(WeightedGraph{Int}; clear=true); L = @acset_colim yWG begin @@ -399,15 +371,13 @@ end weight = [30, 100] end -###################### -# 8. Graph processes # -###################### +# # 8. Graph processes -""" +#= A sequence of rewrite applications can be given a poset structure where α ≤ β means that the rule application α needed to occur before β. This is computed via analyzing the colimit of all the partial maps induced by the rewrites. -""" +=# using AlgebraicRewriting.Processes: RWStep, find_deps @@ -421,9 +391,9 @@ Rule3 = Span(id(G0), create(G1)) R1, R2, R3 = [Rule(l, r) for (l, r) in [Rule1, Rule2, Rule3]] -### Trajectory +# # 9. Trajectory -# step 1: add node #3 to G2 +# Step 1: add node 3 to G2 M1 = create(G2) CM1 = ACSetTransformation(G1, G3; V=[3]) Pmap1 = Span(id(G2), ACSetTransformation(G2, G3; V=[1, 2])) @@ -462,10 +432,4 @@ end σ₃ = ACSetTransformation(G3, G3; V=[3, 1, 2]) g′ = find_deps([R3 => M1, R2 => M2 ⋅ σ₃, R1 => M3 ⋅ σ₂]) -@test g′ == g - -################################### -# 10. General purpose programming # -################################### - -"""see lotka_volterra.jl""" \ No newline at end of file +@test g′ == g \ No newline at end of file diff --git a/docs/literate/game_of_life.jl b/docs/literate/game_of_life.jl index fd9528a..12b92d0 100644 --- a/docs/literate/game_of_life.jl +++ b/docs/literate/game_of_life.jl @@ -1,3 +1,6 @@ +# # Conway's Game of Life + + using AlgebraicRewriting using Catlab, Catlab.Graphs, Catlab.CategoricalAlgebra, Catlab.Theories import Catlab.Graphics: to_graphviz @@ -5,25 +8,19 @@ using Catlab.Graphics.Graphviz: Attributes, Statement, Node, Edge, Digraph using PrettyTables using Luxor -""" -The game of life has two rules: one which turns living things dead, and one -that brings dead things to life. We model the terrain as a symmetric graph: -cells are vertices. Neighboring cells have edges between them. +#= +The game of life has two rules: one which turns living things dead, and one that brings dead things to life. We model the terrain as a symmetric graph: cells are vertices. Neighboring cells have edges between them. -Implementationwise, if we are going to update -cells one at a time, we must keep track of two bits of information (the cell's -living status for the *current* timestep and whether it will be alive in the -*next* timestep). Thus we need helper rule to overwrite the "current" -life status with the "next" life status at the end of each timestep. -""" +Implementation wise, if we are going to update cells one at a time, we must keep track of two bits of information (the cell's living status for the *current* timestep and whether it will be alive in the *next* timestep). Thus we need helper rule to overwrite the "current" life status with the "next" life status at the end of each timestep. +=# -# Schema -######## +# # Schema -""" +#= `curr` and `next` pick out subsets of V which are marked as currently alive or to be alive in the next timestep. -""" +=# + @present SchLife <: SchSymmetricGraph begin (Curr, Next)::Ob curr::Hom(Curr, V) @@ -40,10 +37,9 @@ F = Migrate( Dict(x => x for x in Symbol.(generators(SchLife, :Ob))), Dict(x => x for x in Symbol.(generators(SchLife, :Hom))), LifeCoords; delta=false) -# Helper -######## +# # Helper -# Visualization +# ## Visualization function view_life(f::ACSetTransformation, pth=tempname()) v = collect(f[:V]) view_life(codom(f), pth; star=isempty(v) ? nothing : only(v)) @@ -86,7 +82,7 @@ function view_life(X::LifeCoords, pth=tempname(); star=nothing) return mat end -# Constructions for Life ACSets / maps between them +# ## Constructions for Life ACSets / maps between them Next() = @acset Life begin V = 1 Next = 1 @@ -114,7 +110,7 @@ function living_neighbors(n::Int; alive=false) return X end -# Initialization of LifeCoords +# ## Initialization of LifeCoords function make_grid(curr::AbstractMatrix, next=nothing) n, m = size(curr) n == m || error("Must be square") @@ -150,11 +146,10 @@ function make_grid(curr::AbstractMatrix, next=nothing) end make_grid(n::Int, random=false) = make_grid((random ? rand : zeros)(Bool, (n, n))) -# Rules -####### +# # Rules # A dead cell becomes alive iff exactly 3 living neighbors -#--------------------------------------------------------- + BirthP1 = living_neighbors(3) # must have 3 neighbors BirthN1 = living_neighbors(4) # forbid the cell to have 4 neighbors BirthN2 = Curr() # forbid the cell to be alive (i.e. it's currently dead) @@ -163,7 +158,6 @@ bac = [AppCond(BP1; monic=true), AppCond.([BN1, BN2], false; monic=true)...] Birth = Rule(id(Life(1)), to_next(); ac=bac) # A living cell stays alive iff 2 or 3 living neighbors -#------------------------------------------------------ PersistR = @acset Life begin V = 1 Curr = 1 @@ -183,8 +177,8 @@ CopyNext = Rule(to_next(), to_curr()) # Copy "Next" to "Curr" rules = [:Birth => Birth, :Persist => Persist, :ClearCurr => ClearCurr, :ClearNext => ClearNext, :CopyNext => CopyNext] -# Schedule -########## + +# # Schedule # All rules have interface of a single distinguished cell. # Never distinguish control flow of successful vs unsuccessful application @@ -194,13 +188,13 @@ rBirth, rPersist, rClearCurr, rClearNext, rCopyNext = update_next = agent(rBirth ⋅ rPersist, Life(1); n=:Cell) next_step = agent(compose(rClearCurr, rCopyNext, rClearNext), Life(1); n=:Cell) life(n::Int) = for_schedule(update_next ⋅ next_step, n) |> F -const L = life(1) +const L1 = life(1) G = make_grid([1 0 1 0 1; 0 1 0 1 0; 0 1 0 1 0; 1 0 1 0 1; 1 0 1 0 1]) -res, = apply_schedule(L, G; steps=1000) +res, = apply_schedule(L1, G; steps=1000) traj = last(res).edge.o.val view_life(i, traj) = view_life(traj.steps[i].world) -# view_traj(L, res, view_life; agent=true) +# view_traj(L1, res, view_life; agent=true) diff --git a/docs/literate/lotka_volterra.jl b/docs/literate/lotka_volterra.jl index 7ad400d..0eb943a 100644 --- a/docs/literate/lotka_volterra.jl +++ b/docs/literate/lotka_volterra.jl @@ -1,46 +1,53 @@ -module LotkaVolterra +# # Lotka Volterra using Catlab, DataMigrations, AlgebraicRewriting using Random, Test, StructEquality using Luxor -Random.seed!(123); +Random.seed!(123) using Catlab.Graphics.Graphviz: Attributes, Statement, Node using Catlab.Graphics.Graphviz import Catlab.CategoricalAlgebra: left, right -function right(s::Symbol) - if s == :N return :E - elseif s == :S return :W - elseif s == :E return :S - elseif s == :W return :N +function right(s::Symbol) + if s == :N + return :E + elseif s == :S + return :W + elseif s == :E + return :S + elseif s == :W + return :N end end -function left(s::Symbol) - if s == :N return :W - elseif s == :S return :E - elseif s == :E return :N - elseif s == :W return :S +function left(s::Symbol) + if s == :N + return :W + elseif s == :S + return :E + elseif s == :E + return :N + elseif s == :W + return :S end end -""" -Grass = 0 means alive grass, whereas grass > 0 represent a counter of time until -the grass is alive. +#= +Grass = 0 means alive grass, whereas grass > 0 represent a counter of time until the grass is alive. -Sheeps and wolves have position and direction, so we assign each an *edge*. We -assume a convention where the location of the something is the edge SOURCE. +Sheeps and wolves have position and direction, so we assign each an *edge*. We assume a convention where the location of the something is the edge SOURCE. Dir is an attribute which can take values :N, :E, :W, and :S. -""" +=# + @present TheoryLV <: SchGraph begin - (Sheep,Wolf)::Ob + (Sheep, Wolf)::Ob sheep_loc::Hom(Sheep, V) wolf_loc::Hom(Wolf, V) - (Dir,Eng)::AttrType + (Dir, Eng)::AttrType grass_eng::Attr(V, Eng) sheep_eng::Attr(Sheep, Eng) wolf_eng::Attr(Wolf, Eng) @@ -50,51 +57,50 @@ Dir is an attribute which can take values :N, :E, :W, and :S. end @present TheoryLV′ <: TheoryLV begin - Coord::AttrType - coord::Attr(V,Coord) + Coord::AttrType + coord::Attr(V, Coord) end to_graphviz(TheoryLV; prog="dot") @acset_type LV_Generic(TheoryLV) <: HasGraph -const LV = LV_Generic{Symbol, Int} +const LV = LV_Generic{Symbol,Int} @acset_type LV′_Generic(TheoryLV′) <: HasGraph -const LV′ = LV′_Generic{Symbol, Int, Tuple{Int,Int}} +const LV′ = LV′_Generic{Symbol,Int,Tuple{Int,Int}} F = Migrate( - Dict(:Sheep=>:Wolf, :Wolf=>:Sheep), - Dict([:sheep_loc=>:wolf_loc, :wolf_loc=>:sheep_loc, - :sheep_eng=>:wolf_eng, :wolf_eng=>:sheep_eng,:grass_eng =>:grass_eng, - :sheep_dir=>:wolf_dir, :wolf_dir=>:sheep_dir,]), LV) + Dict(:Sheep => :Wolf, :Wolf => :Sheep), + Dict([:sheep_loc => :wolf_loc, :wolf_loc => :sheep_loc, + :sheep_eng => :wolf_eng, :wolf_eng => :sheep_eng, :grass_eng => :grass_eng, + :sheep_dir => :wolf_dir, :wolf_dir => :sheep_dir,]), LV) F2 = Migrate( - Dict(x=>x for x in Symbol.(TheoryLV.generators[:Ob])), - Dict(x=>x for x in Symbol.(TheoryLV.generators[:Hom])), LV′; delta=false) + Dict(x => x for x in Symbol.(TheoryLV.generators[:Ob])), + Dict(x => x for x in Symbol.(TheoryLV.generators[:Hom])), LV′; delta=false) -""" +#= Create an n × n grid with periodic boundary conditions. Edges in each cardinal direction originate at every point (i,j+1) -> (i+1,j+1) -> ... ↑ ↑ (i,j) -> (i+1,j) -> ... +=# -""" function create_grid(n::Int) lv = LV′() coords = Dict() - # Initialize grass 50% green, 50% uniformly between 0-30 - for i in 0:n-1 + for i in 0:n-1 # Initialize grass 50% green, 50% uniformly between 0-30 for j in 0:n-1 - coords[i=>j] = add_part!(lv, :V; grass_eng=max(0,rand(-30:30)), coord=(i,j)) + coords[i=>j] = add_part!(lv, :V; grass_eng=max(0, rand(-30:30)), coord=(i, j)) end end for i in 0:n-1 for j in 0:n-1 - add_part!(lv, :E; src=coords[i=>j], tgt=coords[mod(i+1,n)=>j], dir=:E) - add_part!(lv, :E; src=coords[i=>j], tgt=coords[mod(i-1,n)=>j], dir=:W) - add_part!(lv, :E; src=coords[i=>j], tgt=coords[i=>mod(j+1,n)], dir=:N) - add_part!(lv, :E; src=coords[i=>j], tgt=coords[i=>mod(j-1,n)], dir=:S) + add_part!(lv, :E; src=coords[i=>j], tgt=coords[mod(i + 1, n)=>j], dir=:E) + add_part!(lv, :E; src=coords[i=>j], tgt=coords[mod(i - 1, n)=>j], dir=:W) + add_part!(lv, :E; src=coords[i=>j], tgt=coords[i=>mod(j + 1, n)], dir=:N) + add_part!(lv, :E; src=coords[i=>j], tgt=coords[i=>mod(j - 1, n)], dir=:S) end end return lv @@ -103,19 +109,20 @@ end g = create_grid(2) -""" +#= `n` is the length of the grid. `sheep` and `wolves` are the fraction of spaces that are populated with that animal -""" +=# + function initialize(n::Int, sheep::Float64, wolves::Float64)::LV′ grid = create_grid(n) args = [(sheep, :Sheep, :sheep_loc, :sheep_eng, :sheep_dir), - (wolves, :Wolf, :wolf_loc, :wolf_eng, :wolf_dir)] + (wolves, :Wolf, :wolf_loc, :wolf_eng, :wolf_dir)] for (n_, name, loc, eng, d) in args - for _ in 1:round(Int,n_*n^2) + for _ in 1:round(Int, n_ * n^2) dic = Dict([eng => 5, loc => rand(vertices(grid)), - d => rand([:N,:E,:S,:W])]) + d => rand([:N, :E, :S, :W])]) add_part!(grid, name; dic...) end end @@ -124,294 +131,368 @@ end supscript_d = Dict([ - '1'=>'¹', '2'=>'²', '3'=>'³', '4'=>'⁴', '5'=>'⁵','6'=>'⁶', '7'=>'⁷', '8'=>'⁸', - '9'=>'⁹', '0'=>'⁰', 'x'=>'ˣ', 'y'=>'ʸ','z'=>'ᶻ','a'=>'ᵃ','b'=>'ᵇ','c'=>'ᶜ', - 'd'=>'ᵈ']) + '1' => '¹', '2' => '²', '3' => '³', '4' => '⁴', '5' => '⁵', '6' => '⁶', '7' => '⁷', '8' => '⁸', + '9' => '⁹', '0' => '⁰', 'x' => 'ˣ', 'y' => 'ʸ', 'z' => 'ᶻ', 'a' => 'ᵃ', 'b' => 'ᵇ', 'c' => 'ᶜ', + 'd' => 'ᵈ']) supscript(x::String) = join([get(supscript_d, c, c) for c in x]) -"""Visualize a LV""" +# Visualize a LV function view_LV(p::ACSetTransformation, pth=tempname(); name="G", title="") - if nparts(dom(p),:Wolf) == 1 - star = :Wolf=>p[:Wolf](1) - elseif nparts(dom(p),:Sheep) == 1 - star = :Sheep=>p[:Sheep](1) - elseif nparts(dom(p),:V) == 1 - star = :V=>p[:V](1) + if nparts(dom(p), :Wolf) == 1 + star = :Wolf => p[:Wolf](1) + elseif nparts(dom(p), :Sheep) == 1 + star = :Sheep => p[:Sheep](1) + elseif nparts(dom(p), :V) == 1 + star = :V => p[:V](1) else star = nothing end view_LV(codom(p), pth; name=name, title=title, star=star) -end +end function view_LV(p::LV′, pth=tempname(); name="G", title="", star=nothing) - pstr = ["$(i),$(j)!" for (i,j) in p[:coord]] + pstr = ["$(i),$(j)!" for (i, j) in p[:coord]] stmts = Statement[] - for s in 1:nv(p) - st = (star == (:V=>s)) ? "*" : "" - gv = p[s, :grass_eng] - col = gv == 0 ? "lightgreen" : "tan" - push!(stmts,Node("v$s", Attributes( - :label=>gv == 0 ? "" : string(gv)*st, - :shape=>"circle", - :color=> col, :pos=>pstr[s]))) - end - d = Dict([:E=>(1,0),:N=>(0,1), :S=>(0,-1),:W=>(-1,0),]) + for s in 1:nv(p) + st = (star == (:V => s)) ? "*" : "" + gv = p[s, :grass_eng] + col = gv == 0 ? "lightgreen" : "tan" + push!(stmts, Node("v$s", Attributes( + :label => gv == 0 ? "" : string(gv) * st, + :shape => "circle", + :color => col, :pos => pstr[s]))) + end + d = Dict([:E => (1, 0), :N => (0, 1), :S => (0, -1), :W => (-1, 0),]) - args = [(:true,:Wolf,:wolf_loc,:wolf_eng,:wolf_dir), - (false, :Sheep, :sheep_loc, :sheep_eng,:sheep_dir)] + args = [(:true, :Wolf, :wolf_loc, :wolf_eng, :wolf_dir), + (false, :Sheep, :sheep_loc, :sheep_eng, :sheep_dir)] for (is_wolf, prt, loc, eng, dr) in args for w in parts(p, prt) st = (star == ((is_wolf ? :Wolf : :Sheep) => w)) ? "*" : "" - e = only(incident(p,p[w,loc], :src) ∩ incident(p,p[w,dr], :dir)) - s = src(p,e) + e = only(incident(p, p[w, loc], :src) ∩ incident(p, p[w, dr], :dir)) + s = src(p, e) dx, dy = d[p[e, :dir]] - (sx,sy) = p[s,:coord] + (sx, sy) = p[s, :coord] L, R = 0.25, 0.1 - wx = sx+L*dx+R*rand() - wy = sy+L*dy+R*rand() + wx = sx + L * dx + R * rand() + wy = sy + L * dy + R * rand() ID = "$(is_wolf ? :w : :s)$w" - append!(stmts,[Node(ID, Attributes( - :label=>"$w"*supscript("$(p[w,eng])")*st, - :shape=>"square", :width=>"0.3px", :height=>"0.3px", :fixedsize=>"true", - :pos=>"$(wx),$(wy)!",:color=> is_wolf ? "red" : "lightblue"))]) + append!(stmts, [Node(ID, Attributes( + :label => "$w" * supscript("$(p[w,eng])") * st, + :shape => "square", :width => "0.3px", :height => "0.3px", :fixedsize => "true", + :pos => "$(wx),$(wy)!", :color => is_wolf ? "red" : "lightblue"))]) end end g = Graphviz.Digraph(name, Statement[stmts...]; prog="neato", - graph_attrs=Attributes(:label=>title, :labelloc=>"t"), - node_attrs=Attributes(:shape=>"plain", :style=>"filled")) - open(pth, "w") do io - show(io,"image/svg+xml",g) + graph_attrs=Attributes(:label => title, :labelloc => "t"), + node_attrs=Attributes(:shape => "plain", :style => "filled")) + open(pth, "w") do io + show(io, "image/svg+xml", g) end end -i1 = initialize(2,.5,.5) -# view_LV(i1) +i1 = initialize(2, 0.5, 0.5) + +# # Rules -# RULES -####### yLV = yoneda_cache(LV; clear=true); yLV = yoneda_cache(LV; clear=false); # Empty agent type I = LV() # Generic sheep agent -S = @acset_colim yLV begin s::Sheep end +S = @acset_colim yLV begin + s::Sheep +end # Generic wolf agent W = F(S) # Generic grass agent -G = @acset_colim yLV begin v::V end +G = @acset_colim yLV begin + v::V +end -N = Names(Dict("W"=>W,"S"=>S,"G"=>G, ""=>I)) -# Rotating -#--------- +N = Names(Dict("W" => W, "S" => S, "G" => G, "" => I)); -rl = Rule(id(S),id(S); expr=(Dir=[xs->left(only(xs))],)) -rr = Rule(id(S),id(S); expr=(Dir=[xs->right(only(xs))],)) +# ## Rotating + +rl = Rule(id(S), id(S); expr=(Dir=[xs -> left(only(xs))],)) +rr = Rule(id(S), id(S); expr=(Dir=[xs -> right(only(xs))],)) sheep_rotate_l = tryrule(RuleApp(:turn_left, rl, S)) sheep_rotate_r = tryrule(RuleApp(:turn_right, rr, S)) -# we can imagine executing these rules in sequence or in parallel -seq_sched = (sheep_rotate_l⋅sheep_rotate_r) -# view_sched(seq_sched; names=N) -par_sched = (sheep_rotate_l ⊗ sheep_rotate_r) -# view_sched(par_sched; names=N) - - +# We can imagine executing these rules in sequence or in parallel +seq_sched = (sheep_rotate_l ⋅ sheep_rotate_r) +#src view_sched(seq_sched; names=N) +par_sched = (sheep_rotate_l ⊗ sheep_rotate_r) +#src view_sched(par_sched; names=N) -begin - ex = @acset_colim yLV begin +begin + ex = @acset_colim yLV begin e::E s::Sheep sheep_loc(s) == src(e) sheep_dir(s) == :N end - expected = copy(ex); + expected = copy(ex) expected[:sheep_dir] = :W - @test is_isomorphic(rewrite(rl, ex), expected) + @test is_isomorphic(rewrite(rl, ex), expected) end -# Moving forward -#--------------- -s_fwd_l = @acset_colim yLV begin e::E; s::Sheep; sheep_loc(s)==src(e) end -s_fwd_i = @acset_colim yLV begin e::E end -s_fwd_r = @acset_colim yLV begin e::E; s::Sheep; sheep_loc(s)==tgt(e) end -s_n = @acset_colim yLV begin - e::E; s::Sheep; sheep_loc(s)==src(e); sheep_eng(s)==0 +# ## Moving forward +s_fwd_l = @acset_colim yLV begin + e::E + s::Sheep + sheep_loc(s) == src(e) +end +s_fwd_i = @acset_colim yLV begin + e::E +end +s_fwd_r = @acset_colim yLV begin + e::E + s::Sheep + sheep_loc(s) == tgt(e) +end +s_n = @acset_colim yLV begin + e::E + s::Sheep + sheep_loc(s) == src(e) + sheep_eng(s) == 0 end sheep_fwd_rule = Rule( homomorphism(s_fwd_i, s_fwd_l; monic=true), homomorphism(s_fwd_i, s_fwd_r; monic=true), ac=[AppCond(homomorphism(s_fwd_l, s_n), false)], - expr=(Eng=Dict(3=>vs->vs[3]-1), Dir=Dict(2=>vs->vs[2])) + expr=(Eng=Dict(3 => vs -> vs[3] - 1), Dir=Dict(2 => vs -> vs[2])) ) -sheep_fwd = tryrule(RuleApp(:move_fwd, sheep_fwd_rule, - homomorphism(S,s_fwd_l), homomorphism(S,s_fwd_r))) +sheep_fwd = tryrule(RuleApp(:move_fwd, sheep_fwd_rule, + homomorphism(S, s_fwd_l), homomorphism(S, s_fwd_r))) sheep_fwd_rule.L |> codom begin # test - ex = @acset_colim yLV begin (e1,e2)::E; s::Sheep - sheep_loc(s)==tgt(e1) - tgt(e1)==src(e2) - sheep_dir(s)==:N + ex = @acset_colim yLV begin + (e1, e2)::E + s::Sheep + sheep_loc(s) == tgt(e1) + tgt(e1) == src(e2) + sheep_dir(s) == :N sheep_eng(s) == 10 end - expected = @acset_colim yLV begin (e1,e2)::E; s::Sheep - sheep_loc(s)==tgt(e2) - tgt(e1)==src(e2) - sheep_dir(s)==:N + expected = @acset_colim yLV begin + (e1, e2)::E + s::Sheep + sheep_loc(s) == tgt(e2) + tgt(e1) == src(e2) + sheep_dir(s) == :N sheep_eng(s) == 9 end - @test is_isomorphic(expected,rewrite(sheep_fwd_rule,ex)) + @test is_isomorphic(expected, rewrite(sheep_fwd_rule, ex)) end -# Eat grass + 4eng -#----------------- -# Grass is at 0 - meaning it's ready to be eaten -s_eat_pac = @acset_colim yLV begin s::Sheep; grass_eng(sheep_loc(s))==0 end +#= +Eat grass + 4eng +Grass is at 0 - meaning it's ready to be eaten +=# + +s_eat_pac = @acset_colim yLV begin + s::Sheep + grass_eng(sheep_loc(s)) == 0 +end -se_rule = Rule(id(S), id(S); expr=(Eng=[vs->vs[1]+4,vs->30],), - ac=[AppCond(homomorphism(S,s_eat_pac))]) +se_rule = Rule(id(S), id(S); expr=(Eng=[vs -> vs[1] + 4, vs -> 30],), + ac=[AppCond(homomorphism(S, s_eat_pac))]) sheep_eat = tryrule(RuleApp(:Sheep_eat, se_rule, S)) begin # test - ex = @acset_colim yLV begin s::Sheep; e::E; sheep_loc(s)==tgt(e) - sheep_eng(s)==3; grass_eng(tgt(e))==0; grass_eng(src(e))==10 + ex = @acset_colim yLV begin + s::Sheep + e::E + sheep_loc(s) == tgt(e) + sheep_eng(s) == 3 + grass_eng(tgt(e)) == 0 + grass_eng(src(e)) == 10 end - expected = @acset_colim yLV begin s::Sheep; e::E; sheep_loc(s)==tgt(e) - sheep_eng(s)==7; grass_eng(tgt(e))==30; grass_eng(src(e))==10 + expected = @acset_colim yLV begin + s::Sheep + e::E + sheep_loc(s) == tgt(e) + sheep_eng(s) == 7 + grass_eng(tgt(e)) == 30 + grass_eng(src(e)) == 10 end - @test is_isomorphic(expected, rewrite(se_rule,ex)) + @test is_isomorphic(expected, rewrite(se_rule, ex)) end -# Eat sheep + 20 eng -#------------------- +#= +Eat sheep + 20 eng +=# -w_eat_l = @acset_colim yLV begin s::Sheep; w::Wolf; sheep_loc(s)==wolf_loc(w) end +w_eat_l = @acset_colim yLV begin + s::Sheep + w::Wolf + sheep_loc(s) == wolf_loc(w) +end -we_rule = Rule(homomorphism(W, w_eat_l), id(W); expr=(Eng=[vs->vs[3]+20,vs->vs[1]],)) +we_rule = Rule(homomorphism(W, w_eat_l), id(W); expr=(Eng=[vs -> vs[3] + 20, vs -> vs[1]],)) wolf_eat = tryrule(RuleApp(:Wolf_eat, we_rule, W)) -begin # test - ex = @acset LV begin Sheep=1; Wolf=1; V=3; E=2; src=[1,2]; tgt=[2,3]; sheep_loc=2 - sheep_eng=[3]; grass_eng=[9,10,11]; dir=fill(:N,2); sheep_dir=[:N] - wolf_loc=[2]; wolf_eng=[16]; wolf_dir=[:S] - end - expected = @acset LV begin Wolf=1; V=3; E=2; src=[1,2]; tgt=[2,3]; - grass_eng=[9,10,11]; dir=fill(:N,2); sheep_dir=[:N] - wolf_loc=[2]; wolf_eng=[36]; wolf_dir=[:S] - end - @test is_isomorphic(rewrite(we_rule,ex), expected) +# ### A test +ex = @acset LV begin + Sheep = 1 + Wolf = 1 + V = 3 + E = 2 + src = [1, 2] + tgt = [2, 3] + sheep_loc = 2 + sheep_eng = [3] + grass_eng = [9, 10, 11] + dir = fill(:N, 2) + sheep_dir = [:N] + wolf_loc = [2] + wolf_eng = [16] + wolf_dir = [:S] end +expected = @acset LV begin + Wolf = 1 + V = 3 + E = 2 + src = [1, 2] + tgt = [2, 3] + grass_eng = [9, 10, 11] + dir = fill(:N, 2) + sheep_dir = [:N] + wolf_loc = [2] + wolf_eng = [36] + wolf_dir = [:S] +end +@test is_isomorphic(rewrite(we_rule, ex), expected) # Die if 0 eng -#------------- -s_die_l = @acset_colim yLV begin s::Sheep; sheep_eng(s)==0 end +s_die_l = @acset_colim yLV begin + s::Sheep + sheep_eng(s) == 0 +end sheep_die_rule = Rule(homomorphism(G, s_die_l), id(G)) -sheep_starve = (RuleApp(:starve, sheep_die_rule, - homomorphism(S,s_die_l), create(G)) - ⋅ (id([I]) ⊗ Weaken(create(S))) ⋅ merge_wires(I)) +sheep_starve = (RuleApp(:starve, sheep_die_rule, + homomorphism(S, s_die_l), create(G)) + ⋅ + (id([I]) ⊗ Weaken(create(S))) ⋅ merge_wires(I)) begin # test ex = s_die_l ⊕ W expected = G ⊕ W - @test is_isomorphic(rewrite(sheep_die_rule,ex), expected) + @test is_isomorphic(rewrite(sheep_die_rule, ex), expected) end -# reproduction -#------------- +# Reproduction -s_reprod_r = @acset_colim yLV begin (x,y)::Sheep; sheep_loc(x)==sheep_loc(y) end +s_reprod_r = @acset_colim yLV begin + (x, y)::Sheep + sheep_loc(x) == sheep_loc(y) +end sheep_reprod_rule = Rule( homomorphism(G, S), - homomorphism(G, s_reprod_r); - expr=(Dir=[vs->vs[1],vs->vs[1]], Eng=[vs->vs[2], - fill(vs->round(Int, vs[1]/2, RoundUp), 2)...],) - ) + homomorphism(G, s_reprod_r); + expr=(Dir=[vs -> vs[1], vs -> vs[1]], Eng=[vs -> vs[2], + fill(vs -> round(Int, vs[1] / 2, RoundUp), 2)...],) +) -sheep_reprod = RuleApp(:reproduce, sheep_reprod_rule, - id(S), homomorphism(S, s_reprod_r)) |> tryrule +sheep_reprod = RuleApp(:reproduce, sheep_reprod_rule, + id(S), homomorphism(S, s_reprod_r)) |> tryrule begin # test - ex = @acset_colim yLV begin s::Sheep; w::Wolf; sheep_eng(s) == 10 end - expected = @acset_colim yLV begin - (s1,s2)::Sheep; w::Wolf; + ex = @acset_colim yLV begin + s::Sheep + w::Wolf + sheep_eng(s) == 10 + end + expected = @acset_colim yLV begin + (s1, s2)::Sheep + w::Wolf sheep_loc(s1) == sheep_loc(s2) - sheep_eng(s1) == 5; sheep_eng(s2)==5 + sheep_eng(s1) == 5 + sheep_eng(s2) == 5 end - @test is_isomorphic(rewrite(sheep_reprod_rule,ex),expected) + @test is_isomorphic(rewrite(sheep_reprod_rule, ex), expected) end # Grass increment -#---------------- g_inc_n = deepcopy(G) -set_subpart!(g_inc_n,1, :grass_eng, 0); +set_subpart!(g_inc_n, 1, :grass_eng, 0) rem_part!(g_inc_n, :Eng, 1) g_inc_rule = Rule(id(G), id(G); - ac=[AppCond(homomorphism(G, g_inc_n), false)], - expr=(Eng=[vs->only(vs)-1],)) -g_inc = RuleApp(:GrassIncrements,g_inc_rule, G) |> tryrule - - -begin # test - ex = @acset LV begin Sheep=1; V=3; E=2; src=[1,2]; tgt=[2,3]; sheep_loc=2 - sheep_eng=[3]; grass_eng=[1,10,2]; dir=fill(:N,2); sheep_dir=[:N] - end - expected = @acset LV begin Sheep=1; V=3; E=2; src=[1,2]; tgt=[2,3]; sheep_loc=2 - sheep_eng=[3]; grass_eng=[0,10,2]; dir=fill(:N,2); sheep_dir=[:N] - end - @test is_isomorphic(rewrite(g_inc_rule,ex), expected) + ac=[AppCond(homomorphism(G, g_inc_n), false)], + expr=(Eng=[vs -> only(vs) - 1],)) +g_inc = RuleApp(:GrassIncrements, g_inc_rule, G) |> tryrule + + +ex = @acset LV begin + Sheep = 1 + V = 3 + E = 2 + src = [1, 2] + tgt = [2, 3] + sheep_loc = 2 + sheep_eng = [3] + grass_eng = [1, 10, 2] + dir = fill(:N, 2) + sheep_dir = [:N] end +expected = @acset LV begin + Sheep = 1 + V = 3 + E = 2 + src = [1, 2] + tgt = [2, 3] + sheep_loc = 2 + sheep_eng = [3] + grass_eng = [0, 10, 2] + dir = fill(:N, 2) + sheep_dir = [:N] +end +@test is_isomorphic(rewrite(g_inc_rule, ex), expected) + # Scheduling Rules -################## - -# Stuff that happens once per sheep -#---------------------------------- - -# 25% chance of left turn, 25% chance of right turn, 50% stay in same direction -general = mk_sched((;),(init=:S,), N, ( - turn = const_cond([1.,2.,1.], S; name=:turn), - maybe = const_cond([0.1, 0.9], S; name=:reprod), - lft = sheep_rotate_l, - rght = sheep_rotate_r, - fwd = sheep_fwd, - repro = sheep_reprod, - starve = sheep_starve), - quote + +general = mk_sched((;), (init=:S,), N, ( + turn=const_cond([1.0, 2.0, 1.0], S; name=:turn), + maybe=const_cond([0.1, 0.9], S; name=:reprod), + lft=sheep_rotate_l, + rght=sheep_rotate_r, + fwd=sheep_fwd, + repro=sheep_reprod, + starve=sheep_starve), + quote out_l, out_str, out_r = turn(init) - moved = fwd([lft(out_l), out_str, rght(out_r)]) + moved = fwd([lft(out_l), out_str, rght(out_r)]) out_repro, out_no_repro = maybe(moved) return starve([repro(out_repro), out_no_repro]) -end) + end) -sheep = sheep_eat ⋅ general # once per sheep -wolf = wolf_eat ⋅ F(general) # once per wolf +sheep = sheep_eat ⋅ general; # once per sheep +wolf = wolf_eat ⋅ F(general); # once per wolf # Do all sheep, then all wolves, then all daily operations -cycle = ( agent(sheep; n=:sheep, ret=I) - ⋅ agent(wolf; n=:wolves, ret=I) - ⋅ agent(g_inc; n=:grass)) - -# wrap in a while loop -overall = while_schedule(cycle, curr -> nparts(curr,:Wolf) >= 0) |> F2 -# view_sched(overall; names=F2(N)) - -X = initialize(3, .25, .25) -res, = apply_schedule(overall, X; steps=50); +cycle = (agent(sheep; n=:sheep, ret=I) + ⋅ + agent(wolf; n=:wolves, ret=I) + ⋅ + agent(g_inc; n=:grass)) -# Run this lines to view the trajectory -# view_traj(overall, res, view_LV; agent=true, names=F2(N)) +overall = while_schedule(cycle, curr -> nparts(curr, :Wolf) >= 0) |> F2 # wrap in a while loop -end # module +X = initialize(3, 0.25, 0.25); +res, = apply_schedule(overall, X; steps=50); \ No newline at end of file diff --git a/docs/literate/mesh.jl b/docs/literate/mesh.jl deleted file mode 100644 index fcddcd3..0000000 --- a/docs/literate/mesh.jl +++ /dev/null @@ -1,207 +0,0 @@ -using Catlab, Catlab.Graphs, Catlab.CategoricalAlgebra -using CairoMakie, GeometryBasics -using Base.Iterators -using CombinatorialSpaces -import AlgebraicPetri -using CombinatorialSpaces.SimplicialSets: get_edge! - -""" -Suppose we want to perform rewriting on a mesh with triangles defined over -certain triples of edges. -""" - -@present ThSemisimplicialSet <: SchGraph begin - T::Ob - (d1, d2, d3)::Hom(T, E) - compose(d1, src) == compose(d2, src) - compose(d1, tgt) == compose(d3, tgt) - compose(d2, tgt) == compose(d3, src) -end -@acset_type SSet(ThSemisimplicialSet) - -quadrangle = @acset SSet begin - T = 2 - E = 5 - V = 4 - d1 = [1, 1] - d2 = [2, 3] - d3 = [4, 5] - src = [1, 1, 1, 2, 3] - tgt = [4, 2, 3, 4, 4] -end - -function plot_sset(ss::SSet, points::Vector, - tri_colors::Union{Nothing,Vector}=nothing) - dflt = collect(take(cycle([:blue, :red, :green, :purple, :pink, :yellow, - :grey, :orange, :brown, :cyan]), - nparts(ss, :T))) - tri_colors = isnothing(tri_colors) ? dflt : tri_colors - - lengthscale = 0.8 # Validate inputs - dim = length(points[1]) - length(points) == nparts(ss, :V) || error("# of points") - if dim == 2 - points = [(p1, p2, 0.0) for (p1, p2) in points] - elseif dim != 3 - error("dim $dim") - end - tri_colors = tri_colors[1:nparts(ss, :T)] - - s = EmbeddedDeltaSet2D{Bool,Point{3,Float64}}() # convert SSet to EmbeddedDeltaSet2D - - edge_colors = [:black for _ in nparts(ss, :E)] - add_vertices!(s, length(points), point=points) - for (src, tgt) in zip(ss[:src], ss[:tgt]) - get_edge!(s, src, tgt) - end - - for t in parts(ss, :T) - glue_sorted_triangle!(s, ss[t, [:d1, :src]], - ss[t, [:d3, :src]], - ss[t, [:d1, :tgt]]) - end - - m = GeometryBasics.Mesh(s) # split mesh into component triangles - x = faces(m) - m_points = m.position[vcat([[t[1], t[2], t[3]] for t in x]...)] - m_faces = TriangleFace{Int}[[((t - 1) * 3) .+ (1, 2, 3) for t in 1:length(x)]...] - new_m = GeometryBasics.Mesh(Point{3,Float64}[m_points...], m_faces) - if ntriangles(s) == 0 - fig, ax, ob = arrows((s[s[:∂v0], :point] * (0.5 + lengthscale / 2) - .+ - s[s[:∂v1], :point] * (0.5 - lengthscale / 2)), - (s[s[:∂v1], :point] .- s[s[:∂v0], :point]), - lengthscale=lengthscale, arrowsize=0.05, shininess=0.0, - color=edge_colors, diffuse=[0.0, 0.0, 0.0]) - else - fig, ax, ob = mesh(new_m, color=vcat([[v, v, v] for v in tri_colors]...)) - arrows!((s[s[:∂v0], :point] * (0.5 + lengthscale / 2) - .+ - s[s[:∂v1], :point] * (0.5 - lengthscale / 2)), - (s[s[:∂v1], :point] .- s[s[:∂v0], :point]), - lengthscale=lengthscale, arrowsize=0.05, shininess=0.0, - color=edge_colors, diffuse=[0.0, 0.0, 0.0]) - end - if dim == 2 - spines!(ax) - hidedecorations!(ax) - ax.aspect = AxisAspect(1.0) # Remove this line if 3D embedding - end - fig -end - - -quad_coords = [(0, 1, 0), (1, 1, 0), (0, 0, 0), (1, 0, 0)] -plot_sset(quadrangle, quad_coords) - - - -L = quadrangle -I = @acset SSet begin - E = 4 - V = 4 - src = [1, 1, 2, 3] - tgt = [2, 3, 4, 4] -end -quad_coords = [(0, 1, 0), (1, 1, 0), (0, 0, 0), (1, 0, 0)] -plot_sset(I, quad_coords) - - -""" -Our replacement pattern will add two triangles and an edge, but now the edge -is perpendicular to where it was before. -""" - -R = @acset SSet begin - T = 2 - E = 5 - V = 4 - d1 = [2, 3] - d2 = [1, 5] - d3 = [5, 4] - src = [1, 1, 2, 3, 2] - tgt = [2, 3, 4, 4, 3] -end -quad_coords = [(0, 1, 0), (1, 1, 0), (0, 0, 0), (1, 0, 0)] -plot_sset(R, quad_coords) - - -""" -Again we create a rewrite rule by relating the `I` to `L` and `R`. -""" - -r = Rule(hom(I, R; monic=true), - hom(I, L; monic=true); - monic=true) - - -""" -We can construct a mesh to test this rewrite on by gluing together two -quadrilaterals (via a *pushout* along a common edge). -""" - -edge = @acset SSet begin - E = 1 - V = 2 - src = [1] - tgt = [2] -end -edge_left = hom(edge, L; initial=Dict([:V => [1, 3]])) -edge_right = hom(edge, L; initial=Dict([:V => [2, 4]])) -G = pushout(edge_left, edge_right) |> apex -six_coords = vcat(quad_coords, [(-1.0, 1.0, 0.0), (-1.0, 0.0, 0.0),]) -plot_sset(G, six_coords) - -""" -We then can perform the rewrite in larger contexts than just the pattern, such -as a mesh with two quadrilaterals. -""" -res = rewrite(r, G) - - - -""" -### Single pushout rewriting -Implicit deletion works like a cascading delete: if you delete a vertex -(for example), then you implicitly delete an edge which refers to that vertex -(and a triangle that refers to that edge, and so on). Here we delete a triangle -and a vertex explicitly, but implicitly the deleted vertex -""" - -Tri = @acset SSet begin - T = 1 - E = 3 - V = 3 - d1 = [1] - d2 = [2] - d3 = [3] - src = [1, 1, 2] - tgt = [3, 2, 3] -end -L = Tri -r = Rule{:SPO}(homomorphisms(edge, L)[2], id(edge)) -m = homomorphism(L, quadrangle) -# can_pushout_complement(r.L, m) == false -rewrite_match(r, m) - -""" -Sesqui pushout rewriting - -Here our rewrite rule takes a vertex and duplicates it. -""" -L = @acset SSet begin - V = 1 -end -I = @acset SSet begin - V = 2 -end -r = Rule{:SqPO}(homomorphism(I, L), id(I)) - -""" -With sesqui-pushout semantics, when we apply this to the vertex of a triangle, -this will create two triangles. -""" -G = Tri -m = CSetTransformation(L, G, V=[1]); -nparts(sesqui_pushout_rewrite(l, r, m), :T) == 4 || error("We get 4 'triangles' when we ignore equations") -rewrite_match(r, m; pres=ThSemisimplicialSet) # pass in the equations diff --git a/docs/literate/petri_to_abm.jl b/docs/literate/petri_to_abm.jl deleted file mode 100644 index 3859244..0000000 --- a/docs/literate/petri_to_abm.jl +++ /dev/null @@ -1,104 +0,0 @@ - -""" -We can convert any petri net into a ABM, giving it the "token-passing" -semantics, by converting each transition into a rewrite rule. -""" - -using AlgebraicPetri -using AlgebraicRewriting -using Catlab, Catlab.Theories, Catlab.CategoricalAlgebra -const hom = homomorphism - -sir_petri = LabelledPetriNet([:S, :I, :R], - :inf => ((:S, :I) => (:I, :I)), - :rec => (:I => :R)) - -""" -The states of a Petri net induce a discrete schema for a C-Set -""" -function petri_to_cset_type(p::LabelledPetriNet, name::Symbol=:Discrete)::Type - pres = Presentation(FreeSchema) - [add_generator!(pres, Ob(FreeSchema, l)) for l in p[:sname]] - macro_call_expr = Expr(:macrocall, Symbol("@acset_type"), name, pres) - return eval(macro_call_expr) -end - -SIR = petri_to_cset_type(sir_petri) - -""" -The rewrite rule matches for the inputs to the transition, deletes them, and -adds the outputs to the transition. -""" -function transition_to_rw_rule(p::LabelledPetriNet, t::Int) - Rule(map([(:it, :is), (:ot, :os)]) do (getIO, getState) - cset = petri_to_cset_type(p)() - [add_part!(cset, x) for x in p[incident(p, 1, getIO), [getState, :sname]]] - return create(cset) # interface I is an empty C-Set - end...) -end - -rw = transition_to_rw_rule(sir_petri, 1) -codom(rw.L) # C-Set with S=1 and I=1 -codom(rw.R) # C-Set with I=2 - -""" -We can repeat the above but this time include a graph that the tokens live on. -We assume the tokens move around randomly and interact only when living on the -same vertex -""" - -using Catlab.Graphs: SchGraph - -loc(s::Symbol) = Symbol("$(s)_loc") - -function petri_to_cset_type_gr(p::LabelledPetriNet, name::Symbol=:PGraph)::Type - pres = copy(SchGraph) - isempty(p[:sname] ∩ [:V, :E]) || error("V and E are reserved") - for l in p[:sname] - add_generator!(pres, Hom(loc(l), - add_generator!(pres, Ob(FreeSchema, l)), - pres.generators[:Ob][1])) - end - macro_call_expr = Expr(:macrocall, Symbol("@acset_type"), name, pres) - return eval(macro_call_expr) -end - -SIR_gr = petri_to_cset_type_gr(sir_petri) - -"""Each transition requires all tokens to be on the same vertex""" -function transition_to_rw_rule_gr(p::LabelledPetriNet, t::Int) - V = @acset petri_to_cset_type_gr(p) begin - V = 1 - end - Rule(map([(:it, :is), (:ot, :os)]) do (getIO, getState) - cset = deepcopy(V) - [add_part!(cset, x; Dict(loc(x) => 1)...) - for x in p[incident(p, t, getIO), [getState, :sname]]] - return hom(V, cset) # interface I is an empty C-Set - end...) -end -rw = transition_to_rw_rule_gr(sir_petri, 1) -codom(rw.L) # S and I on a vertex -dom(rw.L) # Just a vertex -codom(rw.R) # Two I's on a vertex - -"""Now each token type needs a rewrite rule to move""" -function state_to_rw_rule_gr(p::LabelledPetriNet, s::Int) - E = @acset petri_to_cset_type_gr(p) begin - V = 2 - E = 1 - src = 1 - tgt = 2 - end - x = p[s, :sname] - Rule(map(1:2) do i - cset = deepcopy(E) - add_part!(cset, x; Dict(loc(x) => i)...) - return hom(E, cset) - end...) -end - -rw = state_to_rw_rule_gr(sir_petri, 1) -codom(rw.L) # S on position 1 -dom(rw.L) # Just an edge -codom(rw.R) # S on position 2 diff --git a/docs/literate/ptg_simple.jl b/docs/literate/ptg_simple.jl index 7bca786..c1a9ebb 100644 --- a/docs/literate/ptg_simple.jl +++ b/docs/literate/ptg_simple.jl @@ -1,16 +1,15 @@ -using Pkg -cd("/Users/aguinam1/Documents/Git/aaguinal.github.io/assets/slides/aaai-symposiumtalk-2023/julia") # use this environment to avoid `constructor` error -Pkg.activate(".") -Pkg.instantiate() +# # Slice Bread + using PrettyTables using Catlab using AlgebraicRewriting -############################### SCHEMA ############################### -# Create an ontology by defining a finite presentation of a freely generated category using @present macro +#= +Create an ontology by defining a finite presentation of a freely generated category using @present macro -# About the world: The Bread World Ontology has the types Thing, BreadLoaf, Countertop, and Stool. The Breadloaf, Countertop, and Stool types have morphisms to Thing that represent is-a relationships. The InOn type can be used to encode a set relation (as opposed to a function) that was two morphisms going to Thing. One morphism points out the LHS of the relation and the other morphism point out the RHS of the relation. +About the world: The Bread World Ontology has the types Thing, BreadLoaf, Countertop, and Stool. The Breadloaf, Countertop, and Stool types have morphisms to Thing that represent is-a relationships. The InOn type can be used to encode a set relation (as opposed to a function) that was two morphisms going to Thing. One morphism points out the LHS of the relation and the other morphism point out the RHS of the relation. +=# @present OntBreadWorld(FreeSchema) begin Thing::Ob @@ -33,14 +32,15 @@ to_graphviz(OntBreadWorld) # Make the ontology an acset type @acset_type BreadWorld(OntBreadWorld) -############################### RULE ############################### -# Construct rule by defining a span in the category of ACSets +#= +Construct rule by defining a span in the category of ACSets -# Use the @acset macro to define an ACSet functor. The LHS refers to a type (or object) in our ontology and the RHS defines the set assignment using FinFunctions. For this, you need to completely specify the ACSet functor, i.e. every object and morphism in the index category must be specified. +Use the @acset macro to define an ACSet functor. The LHS refers to a type (or object) in our ontology and the RHS defines the set assignment using FinFunctions. For this, you need to completely specify the ACSet functor, i.e. every object and morphism in the index category must be specified. +=# -# About the rule: This rule moves a breadloaf from a countertop to a stool. +# **About the rule:** This rule moves a breadloaf from a countertop to a stool. -# Left ACSet +# ### Left ACSet L = @acset BreadWorld begin Thing = 3 BreadLoaf = 1 @@ -56,8 +56,10 @@ L = @acset BreadWorld begin inOn_r = [2] # breadloaf is on the countertop end -# Middle/Keep ACSet -# The Thing, Breadloaf, Countertop, and Stool types should be held constant. The InOn type will change because we are changing the underlying set function. +#= +### Middle/Keep ACSet +The Thing, Breadloaf, Countertop, and Stool types should be held constant. The InOn type will change because we are changing the underlying set function. +=# K = @acset BreadWorld begin Thing = 3 BreadLoaf = 1 @@ -65,7 +67,7 @@ K = @acset BreadWorld begin Stool = 1 end -# Right ACSet +# ### Right ACSet R = @acset BreadWorld begin Thing = 3 BreadLoaf = 1 @@ -81,19 +83,25 @@ R = @acset BreadWorld begin inOn_r = [3] # breadloaf is on the stool end -# Left leg of span +# ### Left leg of span l = ACSetTransformation(K, L, Thing=[1, 2, 3], BreadLoaf=[1], Countertop=[1], Stool=[1]) -# Right leg of span +# ### Right leg of span r = ACSetTransformation(K, R, Thing=[1, 2, 3], BreadLoaf=[1], Countertop=[1], Stool=[1]) -# Use AlgebraicRewriting.Rule wrapper to add a rule interface +#= +Use AlgebraicRewriting.Rule wrapper to add a rule interface +=# moveBreadRule = Rule(l, r) -############################### WORLD STATE ############################### -# Define a world state using the @acset macro. This is the ACSet way of specifying an ACSet. For this, you need to completely specify the ACSet functor, i.e. every object and morphism in the index category must be specified. The ACSets must be specified in terms of FinFunctions. +#= +## WORLD STATE +Define a world state using the @acset macro. This is the ACSet way of specifying an ACSet. For this, you need to completely specify the ACSet functor, i.e. every object and morphism in the index category must be specified. The ACSets must be specified in terms of FinFunctions. +=# -# About the world state: In this world state, there are two countertops, one stool, and one breadloaf. All of these amount to four things. The breadloaf is on the first countertop. +#= +**About the world state:** In this world state, there are two countertops, one stool, and one breadloaf. All of these amount to four things. The breadloaf is on the first countertop. +=# state = @acset BreadWorld begin Thing = 4 @@ -110,8 +118,10 @@ state = @acset BreadWorld begin inOn_r = [2] end -############################### APPLY RULE ############################### -# Use the AlgebraicRewriting.get_matches(::Rule{T}, ::ACSet) utility function to find matches between the rule and the state. +#= +## Apply Rule +Use the AlgebraicRewriting.get_matches(::Rule{T}, ::ACSet) utility function to find matches between the rule and the state. +=# matches = get_matches(moveBreadRule, state) # Take the first match diff --git a/docs/make.jl b/docs/make.jl index fab4a8f..ecc63a9 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -24,9 +24,9 @@ if !no_literate f, l = splitext(file) if l == ".jl" && !startswith(f, "_") Literate.markdown(joinpath(root, file), out_dir; - config=config, documenter=true, credit=false) + config=config, documenter=true, credit=false, mdstrings=true) Literate.notebook(joinpath(root, file), out_dir; - execute=true, documenter=true, credit=false) + execute=true, documenter=true, credit=false, mdstrings=true) end end end @@ -36,7 +36,7 @@ end makedocs( modules=[AlgebraicRewriting], format=Documenter.HTML( - size_threshold=300000, # in bytes + size_threshold=600000000, # in bytes size_threshold_warn=150000 # in bytes ), sitename="AlgebraicRewriting.jl", @@ -45,14 +45,12 @@ makedocs( warnonly=true, pages=Any[ "AlgebraicRewriting.jl"=>"index.md", - # "Examples"=>Any[ - # "generated/full_demo.md", - # "generated/game_of_life.md", - # "generated/lotka_volterra.md", - # "generated/mesh.md", - # "generated/petri_to_abm.md", - # "generated/ptg_simple.md" - # ], + "Examples"=>Any[ + "generated/full_demo.md", + "generated/game_of_life.md", + "generated/lotka_volterra.md", + "generated/ptg_simple.md" + ], "Library Reference"=>"api.md", ] ) @@ -62,7 +60,7 @@ deploydocs( target="build", repo="github.com/AlgebraicJulia/AlgebraicRewriting.jl.git", branch="gh-pages", - devbranch="main" + devbranch="dev" ) @info "Done!" \ No newline at end of file diff --git a/docs/src/api.md b/docs/src/api.md index 344c37b..2b6c06f 100644 --- a/docs/src/api.md +++ b/docs/src/api.md @@ -1,9 +1,43 @@ # Library Reference -```@index +## Rewrite + +```@autodocs +Modules = [ + AlgebraicRewriting.Constraints, + AlgebraicRewriting.Utils, + AlgebraicRewriting.DPO, + AlgebraicRewriting.CoNeg, + AlgebraicRewriting.SPO, + AlgebraicRewriting.SqPO, + AlgebraicRewriting.PBPO, + AlgebraicRewriting.Migration +] ``` +## Schedules + +```@autodocs +Modules = [ + AlgebraicRewriting.Theories, + AlgebraicRewriting.Poly, + AlgebraicRewriting.Wiring, + AlgebraicRewriting.Eval, + AlgebraicRewriting.Basic, + AlgebraicRewriting.Conditionals, + AlgebraicRewriting.RuleApps, + AlgebraicRewriting.Queries, + AlgebraicRewriting.Visuals +] +``` + +## CategoricalAlgebra + ```@autodocs -Modules = [AlgebraicRewriting] -Private = true +Modules = [ +AlgebraicRewriting.FinSets, +AlgebraicRewriting.CSets, +AlgebraicRewriting.StructuredCospans, +AlgebraicRewriting.PartialMap +] ``` diff --git a/docs/src/generated/full_demo.ipynb b/docs/src/generated/full_demo.ipynb index 211877a..4f32eac 100644 --- a/docs/src/generated/full_demo.ipynb +++ b/docs/src/generated/full_demo.ipynb @@ -1,11 +1,66 @@ { "cells": [ { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Full Demo" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "using AlgebraicRewriting, Catlab, AlgebraicPetri, DataMigrations\n", + "using Test" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is a self-contained walkthrough of the main features of AlgebraicRewriting.\n", + "This is a regular julia file that can be run interactively.\n", + "\n", + "Importantly:\n", + " - use Julia 1.10\n", + " - activate the environment in AlgebraicRewriting.jl/docs\n", + " - check that graphviz is installed locally (test via \"which dot\" in terminal)\n", + "\n", + "Table of contents:\n", + "\n", + "1. DPO\n", + "2. SPO\n", + "3. SqPO\n", + "4. PBPO+\n", + "5. Generalizing graphs: C-Sets, Slices, etc.\n", + "6. Application conditions\n", + "7. Attribute variables\n", + "8. Graph processes\n", + "9. General purpose programming / agent-based modeling\n", + " a. Rewrite and Control Flow boxes\n", + " b. Agents and Query boxes\n", + " c. Data migration\n", + " d. Monadic output\n", + "\n", + "The VS Code REPL makes it easy to have figures automatically pop up in a side\n", + "window, so this is the preferred way of interacting with this file. However, if\n", + "that is not available, your options are to\n", + "1.) copy-paste the code into a Jupyter notebook\n", + "2.) use the following `to_svg` function, which will write a graphviz output to\n", + " a SVG file and can be viewed in a browser. The Julia pipe syntax |> allows\n", + " you to easily append \" |> to_svg \" to a line with a visualization." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, "outputs": [ { - "output_type": "execute_result", "data": { - "text/plain": "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\")), Catlab.Graphics.Graphviz.Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\")), Catlab.Graphics.Graphviz.Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:height => \"0.05\", :margin => \"0\", :shape => \"point\", :width => \"0.05\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:arrowsize => \"0.5\"))", "image/svg+xml": [ "\n", "\n", "\n", "\n" + ], + "text/plain": [ + "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\")), Catlab.Graphics.Graphviz.Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\")), Catlab.Graphics.Graphviz.Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:height => \"0.05\", :margin => \"0\", :shape => \"point\", :width => \"0.05\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:arrowsize => \"0.5\"))" ] }, + "execution_count": 2, "metadata": {}, - "execution_count": 1 + "output_type": "execute_result" } ], - "cell_type": "code", "source": [ - "using AlgebraicRewriting\n", - "using Catlab, Catlab.CategoricalAlgebra, Catlab.Graphics, Catlab.Graphs, Catlab.Programs, Catlab.Theories\n", - "import AlgebraicPetri\n", - "using Test\n", - "\n", - "\n", - "\"\"\"\n", - "This is a self-contained walkthrough of the main features of AlgebraicRewriting.\n", - "This is a regular julia file that can be run interactively.\n", - "\n", - "Importantly:\n", - " - use Julia 1.9 (not yet official released)\n", - " - ]activate the environment in AlgebraicRewriting.jl/docs\n", - " - check that graphviz is installed locally (test via \"which dot\" in terminal)\n", - "\n", - "Table of contents:\n", - "\n", - "1. DPO\n", - "2. SPO\n", - "3. SqPO\n", - "4. PBPO+\n", - "5. Generalizing graphs: C-Sets, Slices, etc.\n", - "6. Application conditions\n", - "7. Attribute variables\n", - "8. Graph processes\n", - "9. General purpose programming / agent-based modeling\n", - " a. Rewrite and Control Flow boxes\n", - " b. Agents and Query boxes\n", - " c. Data migration\n", - " d. Monadic output\n", - "\n", - "The VS Code REPL makes it easy to have figures automatically pop up in a side\n", - "window, so this is the preferred way of interacting with this file. However, if\n", - "that is not available, your options are to\n", - "1.) copy-paste the code into a Jupyter notebook\n", - "2.) use the following `to_svg` function, which will write a graphviz output to\n", - " a SVG file and can be viewed in a browser. The Julia pipe syntax |> allows\n", - " you to easily append \" |> to_svg \" to a line with a visualization.\n", - "\"\"\"\n", "to_svg(G, filename=\"tmp.svg\") =\n", " open(filename, \"w\") do io\n", " show(io, \"image/svg+xml\", G)\n", " end\n", "\n", - "to_graphviz(path_graph(Graph, 3)) # |> to_svg\n", - "\n", - "##########" - ], + "to_graphviz(path_graph(Graph, 3))" + ] + }, + { + "cell_type": "markdown", "metadata": {}, - "execution_count": 1 + "source": [ + "# 1. DPO" + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ - "1. DPO #" + "We construct a rule by providing a span, L ← I → R" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "ACSetTransformation((V = FinFunction([4, 5], 2, 5), E = FinFunction([4], 1, 4)), Catlab.Graphs.BasicGraphs.Graph {V:2, E:1}, Catlab.Graphs.BasicGraphs.Graph {V:5, E:4})" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } ], - "metadata": {} + "source": [ + "L = path_graph(Graph, 2) # • → •\n", + "I = Graph(1) # •\n", + "R = @acset Graph begin\n", + " V = 1\n", + " E = 1\n", + " src = 1\n", + " tgt = 1\n", + "end # •↺\n", + "l = ACSetTransformation(I, L; V=[1]) # graph homomorphism data\n", + "r = ACSetTransformation(I, R; V=[1])\n", + "rule = Rule(l, r)\n", + "\n", + "G = path_graph(Graph, 5) # • → • → • → • → •\n", + "m = only(get_matches(rule, G)) # only one match which satisfies dangling condition" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Provided a specific match (`m`), we can use the `rule` to rewrite the graph (`G`) using `rewrite_match(rule, m)`." + ] }, { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, "outputs": [ { - "output_type": "execute_result", "data": { - "text/plain": "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"1\")), Catlab.Graphics.Graphviz.Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"2\")), Catlab.Graphics.Graphviz.Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"3\")), Catlab.Graphics.Graphviz.Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"4\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:height => \"0.05\", :margin => \"0\", :shape => \"circle\", :width => \"0.05\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:arrowsize => \"0.5\"))", "image/svg+xml": [ "\n", "\n", "\n", "\n" + ], + "text/plain": [ + "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"1\")), Catlab.Graphics.Graphviz.Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"2\")), Catlab.Graphics.Graphviz.Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"3\")), Catlab.Graphics.Graphviz.Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"4\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:height => \"0.05\", :margin => \"0\", :shape => \"circle\", :width => \"0.05\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:arrowsize => \"0.5\"))" ] }, + "execution_count": 5, "metadata": {}, - "execution_count": 2 + "output_type": "execute_result" } ], - "cell_type": "code", "source": [ - "##########\n", - "\n", - "\"\"\"\n", - "We construct a rule by providing a span, L ← I → R\n", - "\"\"\"\n", - "\n", - "L = path_graph(Graph, 2) # • → •\n", - "I = Graph(1) # •\n", - "R = @acset Graph begin\n", - " V = 1\n", - " E = 1\n", - " src = 1\n", - " tgt = 1\n", - "end # •↺\n", - "l = CSetTransformation(I, L; V=[1]) # graph homomorphism data\n", - "r = CSetTransformation(I, R; V=[1])\n", - "\n", - "rule = Rule(l, r)\n", - "G = path_graph(Graph, 5) # • → • → • → • → •\n", - "\n", - "m = only(get_matches(rule, G)) # only one match which satisfies dangling condition\n", - "\n", - "\"\"\"We can rewrite with a specific match\"\"\"\n", - "\n", "res = rewrite_match(rule, m) # • → • → • → •↺\n", "to_graphviz(res; node_labels=true)" - ], - "metadata": {}, - "execution_count": 2 + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ - "Note that C-Sets are morally regarded up to isomorphism - in particular,\n", - "limits and colimits may modify the orderings of edges/vertices" - ], - "metadata": {} + "Note that C-Sets are morally regarded up to isomorphism - in particular, limits and colimits may modify the orderings of edges/vertices" + ] }, { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, "outputs": [ { - "output_type": "execute_result", "data": { - "text/plain": "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" + "text/plain": [ + "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" + ] }, + "execution_count": 6, "metadata": {}, - "execution_count": 3 + "output_type": "execute_result" } ], - "cell_type": "code", "source": [ "expected = @acset Graph begin\n", " V = 4\n", @@ -246,13 +289,33 @@ " src = [1, 2, 3, 4]\n", " tgt = [2, 3, 4, 4]\n", "end\n", - "@test is_isomorphic(expected, res)\n", - "\n", - "\"\"\"\n", - "We can also specify the rule via a colimit-of-representables (i.e. generators\n", - "and relations) syntax. As your schema gets bigger, this becomes more and more\n", - "convenient. Assigning temporary names to the C-Set elements can also be helpful.\n", - "\"\"\"\n", + "@test is_isomorphic(expected, res)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can also specify the rule via a colimit-of-representables (i.e. generators and relations) syntax. As your schema gets bigger, this becomes more and more convenient. Assigning temporary tags, e.g. `e`, `v`, `eᵣ` to the C-Set elements can also be helpful." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Rule{:DPO}(ACSetTransformation((V = FinFunction([2], 1, 2), E = FinFunction(Int64[], 0, 1)), Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:1}), ACSetTransformation((V = FinFunction([1], 1, 1), E = FinFunction(Int64[], 0, 1)), Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:1, E:1}), Constraint[], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ "yG = yoneda_cache(Graph, clear=true); # compute representables\n", "\n", "rule2 = Rule(@migration(SchRulel, SchGraph, begin\n", @@ -269,84 +332,186 @@ " l => begin\n", " v => src(e)\n", " end\n", - " end), yG)\n", - "\n", - "\"\"\"We can rewrite without a match (and let it pick an arbitrary match)\"\"\"\n", - "\n", - "@test res == rewrite(rule, G)\n", - "\n", - "##########" + " end), yG)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can also rewrite without a match (and let it pick an arbitrary match)." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } ], + "source": [ + "@test res == rewrite(rule, G)" + ] + }, + { + "cell_type": "markdown", "metadata": {}, - "execution_count": 3 + "source": [ + "# 2. SPO" + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ - "2. SPO #" - ], - "metadata": {} + "Rules are by default DPO, but if we specify a type parameter we can change the semantics" + ] }, { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, "outputs": [ { - "output_type": "execute_result", "data": { - "text/plain": "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" + "text/plain": [ + "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" + ] }, + "execution_count": 9, "metadata": {}, - "execution_count": 4 + "output_type": "execute_result" } ], - "cell_type": "code", "source": [ - "##########\n", - "\n", - "\"\"\"\n", - "Rules are by default DPO, but if we specify a type parameter we can change\n", - "the semantics\n", - "\"\"\"\n", - "\n", - "rule_spo = Rule{:SPO}(l, r) # (same data as before)\n", + "rule_spo = Rule{:SPO}(l, r) # (same data as before)\n", "\n", "@test length(get_matches(rule_spo, G)) == 4 # there are now four matches\n", "res = rewrite(rule_spo, G)\n", "to_graphviz(res)\n", "@test is_isomorphic(res, path_graph(Graph, 3) ⊕ R)" - ], + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Note**: ⊕ and ⊗ are shorthand for (co)products\n", + "_Tip: Julia lets you easily write unicode symbols via \"\\\" followed by a LaTeX name, then hit \"Tab\" to convert the symbol_" + ] + }, + { + "cell_type": "markdown", "metadata": {}, - "execution_count": 4 + "source": [ + "# 3. SqPO" + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ - "note that ⊕ and ⊗ are shorthand for (co)products\n", - "Julia lets you easily write unicode symbols via \"\\\" followed by a LaTeX name" - ], - "metadata": {} + "If we duplicate a vertex with an incident edge, it will duplicate the edge" + ] }, { - "outputs": [], "cell_type": "code", - "source": [ - "###########" - ], + "execution_count": 10, "metadata": {}, - "execution_count": 5 + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "Catlab.Graphs.BasicGraphs.Graph {V:2, E:1}\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Esrctgt
112
\n", + "
\n" + ], + "text/plain": [ + "Catlab.Graphs.BasicGraphs.Graph {V:2, E:1}\n", + "┌───┬─────┬─────┐\n", + "│\u001b[1m E \u001b[0m│\u001b[1m src \u001b[0m│\u001b[1m tgt \u001b[0m│\n", + "├───┼─────┼─────┤\n", + "│\u001b[1m 1 \u001b[0m│ 1 │ 2 │\n", + "└───┴─────┴─────┘\n" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "L = Graph(1)\n", + "I = Graph(2)\n", + "R = path_graph(Graph, 2)" + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ - "3. SqPO #" + "We can use automated homomorphism search to reduce the tedium of specifying data manually. In this case, there is a unique option." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "ACSetTransformation((V = FinFunction([1, 1], 2, 1), E = FinFunction(Int64[], 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:1, E:0})" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } ], - "metadata": {} + "source": [ + "l = homomorphism(I, L)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There are many constraints we can put on the search, such as being monic." + ] }, { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, "outputs": [ { - "output_type": "execute_result", "data": { - "text/plain": "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"neato\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\")), Catlab.Graphics.Graphviz.Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\")), Catlab.Graphics.Graphviz.Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\")), Catlab.Graphics.Graphviz.Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\")), Catlab.Graphics.Graphviz.Node(\"n5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\")), Catlab.Graphics.Graphviz.Node(\"n6\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\")), Catlab.Graphics.Graphviz.Node(\"n7\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:height => \"0.05\", :margin => \"0\", :shape => \"point\", :width => \"0.05\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:arrowsize => \"0.5\", :len => \"0.5\"))", "image/svg+xml": [ "\n", "\n", "\n", "\n" + ], + "text/plain": [ + "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"neato\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\")), Catlab.Graphics.Graphviz.Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\")), Catlab.Graphics.Graphviz.Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\")), Catlab.Graphics.Graphviz.Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\")), Catlab.Graphics.Graphviz.Node(\"n5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\")), Catlab.Graphics.Graphviz.Node(\"n6\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\")), Catlab.Graphics.Graphviz.Node(\"n7\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:height => \"0.05\", :margin => \"0\", :shape => \"point\", :width => \"0.05\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:arrowsize => \"0.5\", :len => \"0.5\"))" ] }, + "execution_count": 12, "metadata": {}, - "execution_count": 6 + "output_type": "execute_result" } ], - "cell_type": "code", "source": [ - "###########\n", + "r = homomorphism(I, R; monic=true)\n", "\n", - "\"\"\"If we duplicate a vertex with an incident edge, it will duplicate the edge\"\"\"\n", - "\n", - "L = Graph(1)\n", - "I = Graph(2)\n", - "R = path_graph(Graph, 2)\n", - "\n", - "\"\"\"\n", - "We can use automated homomorphism search to reduce the tedium of specifying\n", - "data manually. In this case, there is a unique option\n", - "\"\"\"\n", - "\n", - "l = homomorphism(I, L)\n", - "\n", - "\"\"\"\n", - "There are many constraints we can put on the search, such as being monic.\n", - "\"\"\"\n", - "\n", - "r = homomorphism(I, R; monic=true)\n", - "\n", - "rule_sqpo = Rule{:SqPO}(l, r) # same data as before)\n", + "rule_sqpo = Rule{:SqPO}(l, r) # same data as before)\n", "\n", "\n", "G = star_graph(Graph, 6) # a 5-pointed star\n", "to_graphviz(G; prog=\"neato\") # changing \"prog\" can sometimes make it look better\n", "\n", - "m = CSetTransformation(Graph(1), G; V=[6]) # point at the center\n", + "m = ACSetTransformation(Graph(1), G; V=[6]) # point at the center\n", "res = rewrite_match(rule_sqpo, m)\n", - "to_graphviz(res; prog=\"neato\")\n", - "\n", - "############" - ], + "to_graphviz(res; prog=\"neato\")" + ] + }, + { + "cell_type": "markdown", "metadata": {}, - "execution_count": 6 + "source": [ + "# 4. PBPO+" + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ - "4. PBPO+ #" - ], - "metadata": {} + "PBPO+ requires not merely a span but also additional data for L and K which can be thought of as type graphs. The graph G that we rewrite will be typed over the L' type graph to determine how it is rewritten." + ] }, { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, "outputs": [ { - "output_type": "execute_result", "data": { - "text/plain": "ACSetTransformation((V = id(FinSet(2)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0})" + "text/plain": [ + "ACSetTransformation((V = id(FinSet(2)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0})" + ] }, + "execution_count": 13, "metadata": {}, - "execution_count": 7 + "output_type": "execute_result" } ], - "cell_type": "code", "source": [ - "############\n", - "\n", - "\"\"\"\n", - "PBPO+ requires not merely a span but also additional data for L and K which can\n", - "be thought of as type graphs. The graph G that we rewrite will be typed over\n", - "the L' type graph to determine how it is rewritten.\n", - "\"\"\"\n", - "\n", "L = Graph(1)\n", "K = Graph(2)\n", "l = homomorphism(K, L)\n", "r = id(K)" - ], - "metadata": {}, - "execution_count": 7 + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "We allow edges into and out of the matched vertex as well as edges\n", "between the vertices incident to the matched vertex" - ], - "metadata": {} + ] }, { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, "outputs": [ { - "output_type": "execute_result", "data": { - "text/plain": "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"1\")), Catlab.Graphics.Graphviz.Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"2\")), Catlab.Graphics.Graphviz.Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"3\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:height => \"0.05\", :margin => \"0\", :shape => \"circle\", :width => \"0.05\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:arrowsize => \"0.5\"))", "image/svg+xml": [ "\n", "\n", "\n", "\n" + ], + "text/plain": [ + "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"1\")), Catlab.Graphics.Graphviz.Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"2\")), Catlab.Graphics.Graphviz.Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"3\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:height => \"0.05\", :margin => \"0\", :shape => \"circle\", :width => \"0.05\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:arrowsize => \"0.5\"))" ] }, + "execution_count": 14, "metadata": {}, - "execution_count": 8 + "output_type": "execute_result" } ], - "cell_type": "code", "source": [ "L′ = @acset Graph begin\n", " V = 3\n", @@ -638,33 +788,35 @@ " src = [1, 1, 1, 2, 3, 3]\n", " tgt = [1, 2, 3, 3, 3, 1]\n", "end\n", - "tl = CSetTransformation(L, L′; V=[2]) # 2 is the matched vertex\n", + "tl = ACSetTransformation(L, L′; V=[2]) # 2 is the matched vertex\n", "to_graphviz(L′; node_labels=true)" - ], - "metadata": {}, - "execution_count": 8 + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "The outneighbors of the matched vertex are duplicated (an edge connects the\n", "old ones to the new ones) and the matched vertex is duplicated. The new copy\n", "of the matched vertex points at the new ones. It does not have any inneighbors." - ], - "metadata": {} + ] }, { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, "outputs": [ { - "output_type": "execute_result", "data": { - "text/plain": "PBPORule(ACSetTransformation((V = FinFunction([1, 1], 2, 1), E = FinFunction(Int64[], 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}), ACSetTransformation((V = id(FinSet(2)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}), ACSetTransformation((V = FinFunction([2], 1, 3), E = FinFunction(1:0, 0, 6)), Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:3, E:6}), ACSetTransformation((V = FinFunction([2, 4], 2, 5), E = FinFunction(1:0, 0, 9)), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:5, E:9}), ACSetTransformation((V = FinFunction([1, 2, 3, 2, 3], 5, 3), E = FinFunction([1, 2, 3, 4, 5, 6, 5, 4, 5], 9, 6)), Catlab.Graphs.BasicGraphs.Graph {V:5, E:9}, Catlab.Graphs.BasicGraphs.Graph {V:3, E:6}), true, Constraint[], Constraint[], Dict{Any, Any}(), Dict{Any, Any}(), nothing)" + "text/plain": [ + "PBPORule(ACSetTransformation((V = FinFunction([1, 1], 2, 1), E = FinFunction(Int64[], 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}), ACSetTransformation((V = id(FinSet(2)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}), ACSetTransformation((V = FinFunction([2], 1, 3), E = FinFunction(1:0, 0, 6)), Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:3, E:6}), ACSetTransformation((V = FinFunction([2, 4], 2, 5), E = FinFunction(1:0, 0, 9)), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:5, E:9}), ACSetTransformation((V = FinFunction([1, 2, 3, 2, 3], 5, 3), E = FinFunction([1, 2, 3, 4, 5, 6, 5, 4, 5], 9, 6)), Catlab.Graphs.BasicGraphs.Graph {V:5, E:9}, Catlab.Graphs.BasicGraphs.Graph {V:3, E:6}), false, Constraint[], Constraint[], Dict{Any, Any}(), Dict{Any, Any}(), nothing)" + ] }, + "execution_count": 15, "metadata": {}, - "execution_count": 9 + "output_type": "execute_result" } ], - "cell_type": "code", "source": [ "K′ = @acset Graph begin\n", " V = 5\n", @@ -672,29 +824,28 @@ " src = [1, 1, 1, 2, 3, 3, 3, 4, 5]\n", " tgt = [1, 2, 3, 3, 3, 1, 5, 5, 5]\n", "end\n", - "tk = CSetTransformation(K, K′; V=[2, 4])\n", + "tk = ACSetTransformation(K, K′; V=[2, 4])\n", "to_graphviz(K′; node_labels=true)\n", "\n", "l′ = homomorphism(K′, L′; initial=(V=[1, 2, 3, 2, 3],))\n", "\n", "prule = PBPORule(l, r, tl, tk, l′)" - ], - "metadata": {}, - "execution_count": 9 + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "Apply to an example vertex (#3) with two inneighbors and one outneighbor." - ], - "metadata": {} + ] }, { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, "outputs": [ { - "output_type": "execute_result", "data": { - "text/plain": "Catlab.Graphs.BasicGraphs.Graph {V:6, E:8}\n┌───┬─────┬─────┐\n│\u001b[1m E \u001b[0m│\u001b[1m src \u001b[0m│\u001b[1m tgt \u001b[0m│\n├───┼─────┼─────┤\n│\u001b[1m 1 \u001b[0m│ 3 │ 4 │\n│\u001b[1m 2 \u001b[0m│ 3 │ 1 │\n│\u001b[1m 3 \u001b[0m│ 4 │ 1 │\n│\u001b[1m 4 \u001b[0m│ 1 │ 5 │\n│\u001b[1m 5 \u001b[0m│ 5 │ 5 │\n│\u001b[1m 6 \u001b[0m│ 5 │ 6 │\n│\u001b[1m 7 \u001b[0m│ 2 │ 6 │\n│\u001b[1m 8 \u001b[0m│ 6 │ 6 │\n└───┴─────┴─────┘\n", "text/html": [ "
\n", "Catlab.Graphs.BasicGraphs.Graph {V:6, E:8}\n", @@ -750,13 +901,28 @@ " \n", "\n", "
\n" + ], + "text/plain": [ + "Catlab.Graphs.BasicGraphs.Graph {V:6, E:8}\n", + "┌───┬─────┬─────┐\n", + "│\u001b[1m E \u001b[0m│\u001b[1m src \u001b[0m│\u001b[1m tgt \u001b[0m│\n", + "├───┼─────┼─────┤\n", + "│\u001b[1m 1 \u001b[0m│ 3 │ 4 │\n", + "│\u001b[1m 2 \u001b[0m│ 3 │ 1 │\n", + "│\u001b[1m 3 \u001b[0m│ 4 │ 1 │\n", + "│\u001b[1m 4 \u001b[0m│ 1 │ 5 │\n", + "│\u001b[1m 5 \u001b[0m│ 5 │ 5 │\n", + "│\u001b[1m 6 \u001b[0m│ 5 │ 6 │\n", + "│\u001b[1m 7 \u001b[0m│ 2 │ 6 │\n", + "│\u001b[1m 8 \u001b[0m│ 6 │ 6 │\n", + "└───┴─────┴─────┘\n" ] }, + "execution_count": 16, "metadata": {}, - "execution_count": 10 + "output_type": "execute_result" } ], - "cell_type": "code", "source": [ "G = @acset Graph begin\n", " V = 4\n", @@ -769,23 +935,22 @@ "m = get_match(prule, G; initial=(V=[3],) => Dict())\n", "\n", "res = rewrite_match(prule, m)" - ], - "metadata": {}, - "execution_count": 10 + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "V1 is copied to V2. Outneighbor V5 (w/ loop) is copied to V6, creating an edge" - ], - "metadata": {} + ] }, { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, "outputs": [ { - "output_type": "execute_result", "data": { - "text/plain": "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"1\")), Catlab.Graphics.Graphviz.Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"2\")), Catlab.Graphics.Graphviz.Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"3\")), Catlab.Graphics.Graphviz.Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"4\")), Catlab.Graphics.Graphviz.Node(\"n5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"5\")), Catlab.Graphics.Graphviz.Node(\"n6\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"6\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:height => \"0.05\", :margin => \"0\", :shape => \"circle\", :width => \"0.05\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:arrowsize => \"0.5\"))", "image/svg+xml": [ "\n", "\n", "\n", "\n" + ], + "text/plain": [ + "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"1\")), Catlab.Graphics.Graphviz.Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"2\")), Catlab.Graphics.Graphviz.Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"3\")), Catlab.Graphics.Graphviz.Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"4\")), Catlab.Graphics.Graphviz.Node(\"n5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"5\")), Catlab.Graphics.Graphviz.Node(\"n6\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"6\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:height => \"0.05\", :margin => \"0\", :shape => \"circle\", :width => \"0.05\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:arrowsize => \"0.5\"))" ] }, + "execution_count": 17, "metadata": {}, - "execution_count": 11 + "output_type": "execute_result" } ], - "cell_type": "code", "source": [ - "to_graphviz(res; node_labels=true)\n", - "\n", - "##########################" - ], + "to_graphviz(res; node_labels=true)" + ] + }, + { + "cell_type": "markdown", "metadata": {}, - "execution_count": 11 + "source": [ + "# 5. Generalizing Graphs" + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ - "5. Generalizing Graphs #" - ], - "metadata": {} + "Any data structure which implements the required functions we need can, in principle, be used for rewriting. Importantly this includes pushout_complement, pushout, and homomorphism search. These are all implemented generically for any C-Set schema (allowing us to rewrite Petri nets, Semisimplicial sets, etc.)\n", + "\n", + "Here we'll do rewriting in graphs sliced over •⇆•, which is isomorphic to the category of (whole-grain) Petri nets, with States and Transitions." + ] }, { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "\"While the vast majority of functionality is focused on ACSets at the present\\nmoment, but there is nothing in principle which limits this.\\n\"" - }, - "metadata": {}, - "execution_count": 12 - } - ], "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], "source": [ - "##########################\n", - "\n", - "\"\"\"\n", - "Any data structure which implements the required functions we need can, in\n", - "principle, be used for rewriting. Importantly this includes pushout_complement,\n", - "pushout, and homomorphism search. These are all implemented generically for\n", - "any C-Set schema (allowing us to rewrite Petri nets, Semisimplicial sets, etc.)\n", - "\n", - "Here we'll do rewriting in graphs sliced over •⇆•, which is isomorphic to the\n", - "category of (whole-grain) Petri nets, with States and Transitions.\n", - "\"\"\"\n", - "\n", - "\n", "function graph_slice(s::Slice)\n", " h = s.slice\n", " V, E = collect.([h[:V], h[:E]])\n", @@ -949,19 +1102,97 @@ " ot = findT.(g[O, :src])\n", " os = findS.(g[O, :tgt])\n", " end)\n", - "end;\n", - "\n", - "\"\"\" this is the graph we are slicing over \"\"\"\n", - "\n", + "end;" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is the graph we are slicing over." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "Catlab.Graphs.BasicGraphs.Graph {V:2, E:2}\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Esrctgt
112
221
\n", + "
\n" + ], + "text/plain": [ + "Catlab.Graphs.BasicGraphs.Graph {V:2, E:2}\n", + "┌───┬─────┬─────┐\n", + "│\u001b[1m E \u001b[0m│\u001b[1m src \u001b[0m│\u001b[1m tgt \u001b[0m│\n", + "├───┼─────┼─────┤\n", + "│\u001b[1m 1 \u001b[0m│ 1 │ 2 │\n", + "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n", + "└───┴─────┴─────┘\n" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ "two = @acset Graph begin\n", " V = 2\n", " E = 2\n", " src = [1, 2]\n", " tgt = [2, 1]\n", - "end\n", - "\n", - "\"\"\" Define a rule which deletes a [T] -> S edge\"\"\"\n", - "\n", + "end" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Define a rule which deletes a [T] -> S edge" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Catlab.CategoricalAlgebra.Slices.Slice{Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, @NamedTuple{V::Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, E::Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}}, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph}}(ACSetTransformation((V = FinFunction([2, 1], 2, 2), E = FinFunction(1:0, 0, 2)), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:2}))" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ "L_ = path_graph(Graph, 2)\n", "L = Slice(ACSetTransformation(L_, two, V=[2, 1], E=[2])) # [T] ⟶ (S)\n", "graph_slice(L)\n", @@ -969,10 +1200,73 @@ "I_ = Graph(1)\n", "I = Slice(ACSetTransformation(I_, two, V=[2])) # [T]\n", "R_ = Graph(2)\n", - "R = Slice(ACSetTransformation(R_, two, V=[2, 1])) # [T] (S)\n", - "\n", - "\"\"\"Using homomorphism search in the slice category\"\"\"\n", - "\n", + "R = Slice(ACSetTransformation(R_, two, V=[2, 1])) # [T] (S)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using homomorphism search in the slice category" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "G\n", + "\n", + "\n", + "\n", + "n1\n", + "\n", + "1\n", + "\n", + "\n", + "\n", + "n2\n", + "\n", + "2\n", + "\n", + "\n", + "\n", + "n3\n", + "\n", + "1\n", + "\n", + "\n", + "\n", + "n2->n3\n", + "\n", + "\n", + "1\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"#6C9AC3\", :label => \"1\", :shape => \"circle\")), Catlab.Graphics.Graphviz.Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"#6C9AC3\", :label => \"2\", :shape => \"circle\")), Catlab.Graphics.Graphviz.Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"#E28F41\", :label => \"1\", :shape => \"square\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"1\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:shape => \"plain\", :style => \"filled\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ "rule = Rule(homomorphism(I, L), homomorphism(I, R))\n", "\n", "G_ = path_graph(Graph, 3)\n", @@ -980,55 +1274,54 @@ "graph_slice(G)\n", "\n", "res = rewrite(rule, G) # (S) ⟶ [T] (S)\n", - "graph_slice(res)\n", - "\n", - "\"\"\"\n", - "While the vast majority of functionality is focused on ACSets at the present\n", - "moment, but there is nothing in principle which limits this.\n", - "\"\"\"\n", - "\n", - "#############################" - ], + "graph_slice(res)" + ] + }, + { + "cell_type": "markdown", "metadata": {}, - "execution_count": 12 + "source": [ + "While the vast majority of functionality is focused on ACSets at the present moment, but there is nothing in principle which limits this." + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ - "6. Application conditions #" - ], - "metadata": {} + "# 6. Application conditions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can construct commutative diagrams with certain edges left unspecified or marked with ∀ or ∃. If only one edge is left free, we can treat the diagram as a boolean function which tests whether the morphism makes the specified paths commute (or not commute). This generalizes positive/negative application conditions and lifting conditions, but because those are most common there are constructors AppCond and LiftCond to make these directly.\n", + "\n", + " ∀\n", + " [↻•] → ?\n", + " ↓ ↗ ∃ ↓\n", + " [↻•⟶•] → [↻•⟶•⟵•↺]\n", + "\n", + "Every vertex with a loop also has a map to the vertex marked by the bottom map." + ] }, { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, "outputs": [ { - "output_type": "execute_result", "data": { - "text/plain": "\"We can combining constraints with logical combinators\"" + "text/plain": [ + "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" + ] }, + "execution_count": 22, "metadata": {}, - "execution_count": 13 + "output_type": "execute_result" } ], - "cell_type": "code", "source": [ - "#############################\n", - "\n", - "\"\"\"\n", - "We can construct commutative diagrams with certain edges left unspecified or\n", - "marked with ∀ or ∃. If only one edge is left free, we can treat the diagram as\n", - "a boolean function which tests whether the morphism makes the specified paths\n", - "commute (or not commute). This generalizes positive/negative application\n", - "conditions and lifting conditions, but because those are most common there are\n", - "constructors AppCond and LiftCond to make these directly.\n", - "\n", - " ∀\n", - " [↻•] → ?\n", - " ↓ ↗ ∃ ↓\n", - " [↻•⟶•] → [↻•⟶•⟵•↺]\n", - "\n", - "Every vertex with a loop also has a map to the vertex marked by the bottom map.\n", - "\"\"\"\n", "t = terminal(Graph) |> apex\n", "looparr = @acset_colim yG begin\n", " (e1, e2)::E\n", @@ -1047,32 +1340,39 @@ "constr = LiftCond(v, b)\n", "\n", "@test !apply_constraint(constr, homomorphism(t, loop_csp))\n", - "@test apply_constraint(constr, b)\n", - "\n", - "\"\"\"We can combining constraints with logical combinators\"\"\"" - ], + "@test apply_constraint(constr, b)" + ] + }, + { + "cell_type": "markdown", "metadata": {}, - "execution_count": 13 + "source": [ + "We can combining constraints with logical combinators." + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "match vertex iff it has 2 or 3 self loops" - ], - "metadata": {} + ] }, { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, "outputs": [ { - "output_type": "execute_result", "data": { - "text/plain": "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" + "text/plain": [ + "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" + ] }, + "execution_count": 23, "metadata": {}, - "execution_count": 14 + "output_type": "execute_result" } ], - "cell_type": "code", "source": [ "one, two, three, four, five = [@acset(Graph, begin\n", " V = 1\n", @@ -1089,46 +1389,47 @@ "\n", "G = two ⊕ three ⊕ two ⊕ four ⊕ five ⊕ one\n", "\n", - "@test length(get_matches(rule, G)) == 3\n", - "\n", - "##########################" - ], + "@test length(get_matches(rule, G)) == 3" + ] + }, + { + "cell_type": "markdown", "metadata": {}, - "execution_count": 14 + "source": [ + "# 7. Attribute variables" + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ - "7. Attribute variables #" - ], - "metadata": {} + "Normally ACSet morphisms must match attribute values exactly, i.e. a weighted\n", + "graph edge of 8.3 can only be mapped to another edge weighted at 8.3. This\n", + "becomes very restricted, especially when we want to do some simple computations\n", + "with attribute values (e.g. when merging two edges, add their values together)\n", + "\n", + "A recent extension of ACSets makes this possible - each attribute type comes\n", + "equipped with a finite set of \"variables\" which can be mapped to any concrete\n", + "value (or another variable)." + ] }, { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, "outputs": [ { - "output_type": "execute_result", "data": { - "text/plain": "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" + "text/plain": [ + "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" + ] }, + "execution_count": 24, "metadata": {}, - "execution_count": 15 + "output_type": "execute_result" } ], - "cell_type": "code", "source": [ - "##########################\n", - "\n", - "\"\"\"\n", - "Normally ACSet morphisms must match attribute values exactly, i.e. a weighted\n", - "graph edge of 8.3 can only be mapped to another edge weighted at 8.3. This\n", - "becomes very restricted, especially when we want to do some simple computations\n", - "with attribute values (e.g. when merging two edges, add their values together)\n", - "\n", - "A recent extension of ACSets makes this possible - each attribute type comes\n", - "equipped with a finite set of \"variables\" which can be mapped to any concrete\n", - "value (or another variable).\n", - "\"\"\"\n", - "\n", "yWG = yoneda_cache(WeightedGraph{Int}; clear=true);\n", "L = @acset_colim yWG begin\n", " (e1, e2)::E\n", @@ -1163,206 +1464,249 @@ " src = 1\n", " tgt = 1\n", " weight = [30, 100]\n", - "end\n", - "\n", - "######################" - ], + "end" + ] + }, + { + "cell_type": "markdown", "metadata": {}, - "execution_count": 15 + "source": [ + "# 8. Graph processes" + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ - "8. Graph processes #" - ], - "metadata": {} + "A sequence of rewrite applications can be given a poset structure where α ≤ β\n", + "means that the rule application α needed to occur before β. This is computed\n", + "via analyzing the colimit of all the partial maps induced by the rewrites." + ] }, { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, "outputs": [ { - "output_type": "execute_result", "data": { - "text/plain": "4-element Vector{Catlab.Graphs.BasicGraphs.Graph}:\n Catlab.Graphs.BasicGraphs.Graph:\n V = 1:0\n E = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n Catlab.Graphs.BasicGraphs.Graph:\n V = 1:1\n E = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n Catlab.Graphs.BasicGraphs.Graph:\n V = 1:2\n E = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n Catlab.Graphs.BasicGraphs.Graph:\n V = 1:3\n E = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]" + "text/plain": [ + "4-element Vector{Catlab.Graphs.BasicGraphs.Graph}:\n", + " Catlab.Graphs.BasicGraphs.Graph:\n", + " V = 1:0\n", + " E = 1:0\n", + " src : E → V = Int64[]\n", + " tgt : E → V = Int64[]\n", + " Catlab.Graphs.BasicGraphs.Graph:\n", + " V = 1:1\n", + " E = 1:0\n", + " src : E → V = Int64[]\n", + " tgt : E → V = Int64[]\n", + " Catlab.Graphs.BasicGraphs.Graph:\n", + " V = 1:2\n", + " E = 1:0\n", + " src : E → V = Int64[]\n", + " tgt : E → V = Int64[]\n", + " Catlab.Graphs.BasicGraphs.Graph:\n", + " V = 1:3\n", + " E = 1:0\n", + " src : E → V = Int64[]\n", + " tgt : E → V = Int64[]" + ] }, + "execution_count": 25, "metadata": {}, - "execution_count": 16 + "output_type": "execute_result" } ], - "cell_type": "code", "source": [ - "######################\n", - "\n", - "\"\"\"\n", - "A sequence of rewrite applications can be given a poset structure where α ≤ β\n", - "means that the rule application α needed to occur before β. This is computed\n", - "via analyzing the colimit of all the partial maps induced by the rewrites.\n", - "\"\"\"\n", - "\n", "using AlgebraicRewriting.Processes: RWStep, find_deps\n", "\n", "G0, G1, G2, G3 = Graph.([0, 1, 2, 3])" - ], - "metadata": {}, - "execution_count": 16 + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "Delete a node" - ], - "metadata": {} + ] }, { - "outputs": [], "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], "source": [ "Rule1 = Span(create(G1), id(G0));" - ], - "metadata": {}, - "execution_count": 17 + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "Merge two nodes" - ], - "metadata": {} + ] }, { - "outputs": [], "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [], "source": [ "Rule2 = Span(id(G2), homomorphism(G2, G1));" - ], - "metadata": {}, - "execution_count": 18 + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "Add a node" - ], - "metadata": {} + ] }, { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, "outputs": [ { - "output_type": "execute_result", "data": { - "text/plain": "3-element Vector{Rule{:DPO}}:\n Rule{:DPO}(ACSetTransformation((V = FinFunction(Int64[], 0, 1), E = FinFunction(Int64[], 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}), ACSetTransformation((V = id(FinSet(0)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}), Constraint[], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())\n Rule{:DPO}(ACSetTransformation((V = id(FinSet(2)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}), ACSetTransformation((V = FinFunction([1, 1], 2, 1), E = FinFunction(Int64[], 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}), Constraint[], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())\n Rule{:DPO}(ACSetTransformation((V = id(FinSet(0)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}), ACSetTransformation((V = FinFunction(Int64[], 0, 1), E = FinFunction(Int64[], 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}), Constraint[], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())" + "text/plain": [ + "3-element Vector{Rule{:DPO}}:\n", + " Rule{:DPO}(ACSetTransformation((V = FinFunction(Int64[], 0, 1), E = FinFunction(Int64[], 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}), ACSetTransformation((V = id(FinSet(0)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}), Constraint[], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())\n", + " Rule{:DPO}(ACSetTransformation((V = id(FinSet(2)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}), ACSetTransformation((V = FinFunction([1, 1], 2, 1), E = FinFunction(Int64[], 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}), Constraint[], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())\n", + " Rule{:DPO}(ACSetTransformation((V = id(FinSet(0)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}), ACSetTransformation((V = FinFunction(Int64[], 0, 1), E = FinFunction(Int64[], 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}), Constraint[], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())" + ] }, + "execution_count": 28, "metadata": {}, - "execution_count": 19 + "output_type": "execute_result" } ], - "cell_type": "code", "source": [ "Rule3 = Span(id(G0), create(G1))\n", "\n", - "R1, R2, R3 = [Rule(l, r) for (l, r) in [Rule1, Rule2, Rule3]]\n", - "\n", - "### Trajectory" - ], + "R1, R2, R3 = [Rule(l, r) for (l, r) in [Rule1, Rule2, Rule3]]" + ] + }, + { + "cell_type": "markdown", "metadata": {}, - "execution_count": 19 + "source": [ + "# 9. Trajectory" + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ - "step 1: add node #3 to G2" - ], - "metadata": {} + "Step 1: add node 3 to G2" + ] }, { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, "outputs": [ { - "output_type": "execute_result", "data": { - "text/plain": "AlgebraicRewriting.Processes.RWStep(Catlab.CategoricalAlgebra.FreeDiagrams.Multispan{Catlab.Graphs.BasicGraphs.Graph, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple, StaticArraysCore.SVector{2, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple}}(Catlab.Graphs.BasicGraphs.Graph:\n V = 1:0\n E = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[], Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple[ACSetTransformation((V = id(FinSet(0)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}), ACSetTransformation((V = FinFunction(Int64[], 0, 1), E = FinFunction(Int64[], 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:1, E:0})]), Catlab.CategoricalAlgebra.FreeDiagrams.Multispan{Catlab.Graphs.BasicGraphs.Graph, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple, StaticArraysCore.SVector{2, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple}}(Catlab.Graphs.BasicGraphs.Graph:\n V = 1:2\n E = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[], Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple[ACSetTransformation((V = id(FinSet(2)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}), ACSetTransformation((V = FinFunction([1, 2], 2, 3), E = FinFunction(1:0, 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:3, E:0})]), ACSetTransformation((V = FinFunction(Int64[], 0, 2), E = FinFunction(Int64[], 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}), ACSetTransformation((V = FinFunction([3], 1, 3), E = FinFunction(1:0, 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:3, E:0}))" + "text/plain": [ + "AlgebraicRewriting.Processes.RWStep(Catlab.CategoricalAlgebra.FreeDiagrams.Multispan{Catlab.Graphs.BasicGraphs.Graph, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple, StaticArraysCore.SVector{2, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple}}(Catlab.Graphs.BasicGraphs.Graph:\n", + " V = 1:0\n", + " E = 1:0\n", + " src : E → V = Int64[]\n", + " tgt : E → V = Int64[], Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple[ACSetTransformation((V = id(FinSet(0)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}), ACSetTransformation((V = FinFunction(Int64[], 0, 1), E = FinFunction(Int64[], 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:1, E:0})]), Catlab.CategoricalAlgebra.FreeDiagrams.Multispan{Catlab.Graphs.BasicGraphs.Graph, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple, StaticArraysCore.SVector{2, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple}}(Catlab.Graphs.BasicGraphs.Graph:\n", + " V = 1:2\n", + " E = 1:0\n", + " src : E → V = Int64[]\n", + " tgt : E → V = Int64[], Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple[ACSetTransformation((V = id(FinSet(2)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}), ACSetTransformation((V = FinFunction([1, 2], 2, 3), E = FinFunction(1:0, 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:3, E:0})]), ACSetTransformation((V = FinFunction(Int64[], 0, 2), E = FinFunction(Int64[], 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}), ACSetTransformation((V = FinFunction([3], 1, 3), E = FinFunction(1:0, 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:3, E:0}))" + ] }, + "execution_count": 29, "metadata": {}, - "execution_count": 20 + "output_type": "execute_result" } ], - "cell_type": "code", "source": [ "M1 = create(G2)\n", "CM1 = ACSetTransformation(G1, G3; V=[3])\n", "Pmap1 = Span(id(G2), ACSetTransformation(G2, G3; V=[1, 2]))\n", "RS1 = RWStep(Rule3, Pmap1, M1, CM1)" - ], - "metadata": {}, - "execution_count": 20 + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "Step 2: merge node 2 and 3 to yield a G2" - ], - "metadata": {} + ] }, { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, "outputs": [ { - "output_type": "execute_result", "data": { - "text/plain": "AlgebraicRewriting.Processes.RWStep(Catlab.CategoricalAlgebra.FreeDiagrams.Multispan{Catlab.Graphs.BasicGraphs.Graph, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple, StaticArraysCore.SVector{2, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple}}(Catlab.Graphs.BasicGraphs.Graph:\n V = 1:2\n E = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[], Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple[ACSetTransformation((V = id(FinSet(2)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}), ACSetTransformation((V = FinFunction([1, 1], 2, 1), E = FinFunction(Int64[], 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:1, E:0})]), Catlab.CategoricalAlgebra.FreeDiagrams.Multispan{Catlab.Graphs.BasicGraphs.Graph, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple, StaticArraysCore.SVector{2, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple}}(Catlab.Graphs.BasicGraphs.Graph:\n V = 1:3\n E = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[], Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple[ACSetTransformation((V = id(FinSet(3)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:3, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:3, E:0}), ACSetTransformation((V = FinFunction([1, 2, 2], 3, 2), E = FinFunction(1:0, 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:3, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0})]), ACSetTransformation((V = FinFunction([2, 3], 2, 3), E = FinFunction(1:0, 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:3, E:0}), ACSetTransformation((V = FinFunction([2], 1, 2), E = FinFunction(1:0, 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}))" + "text/plain": [ + "AlgebraicRewriting.Processes.RWStep(Catlab.CategoricalAlgebra.FreeDiagrams.Multispan{Catlab.Graphs.BasicGraphs.Graph, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple, StaticArraysCore.SVector{2, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple}}(Catlab.Graphs.BasicGraphs.Graph:\n", + " V = 1:2\n", + " E = 1:0\n", + " src : E → V = Int64[]\n", + " tgt : E → V = Int64[], Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple[ACSetTransformation((V = id(FinSet(2)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}), ACSetTransformation((V = FinFunction([1, 1], 2, 1), E = FinFunction(Int64[], 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:1, E:0})]), Catlab.CategoricalAlgebra.FreeDiagrams.Multispan{Catlab.Graphs.BasicGraphs.Graph, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple, StaticArraysCore.SVector{2, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple}}(Catlab.Graphs.BasicGraphs.Graph:\n", + " V = 1:3\n", + " E = 1:0\n", + " src : E → V = Int64[]\n", + " tgt : E → V = Int64[], Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple[ACSetTransformation((V = id(FinSet(3)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:3, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:3, E:0}), ACSetTransformation((V = FinFunction([1, 2, 2], 3, 2), E = FinFunction(1:0, 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:3, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0})]), ACSetTransformation((V = FinFunction([2, 3], 2, 3), E = FinFunction(1:0, 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:3, E:0}), ACSetTransformation((V = FinFunction([2], 1, 2), E = FinFunction(1:0, 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}))" + ] }, + "execution_count": 30, "metadata": {}, - "execution_count": 21 + "output_type": "execute_result" } ], - "cell_type": "code", "source": [ "M2 = ACSetTransformation(G2, G3; V=[2, 3])\n", "CM2 = ACSetTransformation(G1, G2; V=[2])\n", "Pmap2 = Span(id(G3), ACSetTransformation(G3, G2; V=[1, 2, 2]))\n", "RS2 = RWStep(Rule2, Pmap2, M2, CM2)" - ], - "metadata": {}, - "execution_count": 21 + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "Step 3: delete vertex 1" - ], - "metadata": {} + ] }, { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, "outputs": [ { - "output_type": "execute_result", "data": { - "text/plain": "3-element Vector{AlgebraicRewriting.Processes.RWStep}:\n AlgebraicRewriting.Processes.RWStep(Catlab.CategoricalAlgebra.FreeDiagrams.Multispan{Catlab.Graphs.BasicGraphs.Graph, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple, StaticArraysCore.SVector{2, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple}}(Catlab.Graphs.BasicGraphs.Graph:\n V = 1:0\n E = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[], Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple[ACSetTransformation((V = id(FinSet(0)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}), ACSetTransformation((V = FinFunction(Int64[], 0, 1), E = FinFunction(Int64[], 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:1, E:0})]), Catlab.CategoricalAlgebra.FreeDiagrams.Multispan{Catlab.Graphs.BasicGraphs.Graph, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple, StaticArraysCore.SVector{2, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple}}(Catlab.Graphs.BasicGraphs.Graph:\n V = 1:2\n E = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[], Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple[ACSetTransformation((V = id(FinSet(2)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}), ACSetTransformation((V = FinFunction([1, 2], 2, 3), E = FinFunction(1:0, 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:3, E:0})]), ACSetTransformation((V = FinFunction(Int64[], 0, 2), E = FinFunction(Int64[], 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}), ACSetTransformation((V = FinFunction([3], 1, 3), E = FinFunction(1:0, 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:3, E:0}))\n AlgebraicRewriting.Processes.RWStep(Catlab.CategoricalAlgebra.FreeDiagrams.Multispan{Catlab.Graphs.BasicGraphs.Graph, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple, StaticArraysCore.SVector{2, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple}}(Catlab.Graphs.BasicGraphs.Graph:\n V = 1:2\n E = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[], Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple[ACSetTransformation((V = id(FinSet(2)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}), ACSetTransformation((V = FinFunction([1, 1], 2, 1), E = FinFunction(Int64[], 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:1, E:0})]), Catlab.CategoricalAlgebra.FreeDiagrams.Multispan{Catlab.Graphs.BasicGraphs.Graph, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple, StaticArraysCore.SVector{2, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple}}(Catlab.Graphs.BasicGraphs.Graph:\n V = 1:3\n E = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[], Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple[ACSetTransformation((V = id(FinSet(3)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:3, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:3, E:0}), ACSetTransformation((V = FinFunction([1, 2, 2], 3, 2), E = FinFunction(1:0, 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:3, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0})]), ACSetTransformation((V = FinFunction([2, 3], 2, 3), E = FinFunction(1:0, 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:3, E:0}), ACSetTransformation((V = FinFunction([2], 1, 2), E = FinFunction(1:0, 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}))\n AlgebraicRewriting.Processes.RWStep(Catlab.CategoricalAlgebra.FreeDiagrams.Multispan{Catlab.Graphs.BasicGraphs.Graph, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple, StaticArraysCore.SVector{2, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple}}(Catlab.Graphs.BasicGraphs.Graph:\n V = 1:0\n E = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[], Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple[ACSetTransformation((V = FinFunction(Int64[], 0, 1), E = FinFunction(Int64[], 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}), ACSetTransformation((V = id(FinSet(0)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:0, E:0})]), Catlab.CategoricalAlgebra.FreeDiagrams.Multispan{Catlab.Graphs.BasicGraphs.Graph, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple, StaticArraysCore.SVector{2, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple}}(Catlab.Graphs.BasicGraphs.Graph:\n V = 1:1\n E = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[], Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple[ACSetTransformation((V = FinFunction([2], 1, 2), E = FinFunction(1:0, 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}), ACSetTransformation((V = id(FinSet(1)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:1, E:0})]), ACSetTransformation((V = FinFunction([1], 1, 2), E = FinFunction(1:0, 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}), ACSetTransformation((V = FinFunction(Int64[], 0, 1), E = FinFunction(Int64[], 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}))" + "text/plain": [ + "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" + ] }, + "execution_count": 31, "metadata": {}, - "execution_count": 22 + "output_type": "execute_result" } ], - "cell_type": "code", "source": [ "M3 = ACSetTransformation(G1, G2; V=[1])\n", "CM3 = create(G1)\n", "Pmap3 = Span(ACSetTransformation(G1, G2; V=[2]), id(G1))\n", "RS3 = RWStep(Rule1, Pmap3, M3, CM3)\n", "\n", - "steps = [RS1, RS2, RS3]" - ], - "metadata": {}, - "execution_count": 22 - }, - { - "cell_type": "markdown", - "source": [ + "\n", + "steps = [RS1, RS2, RS3]\n", + "\n", "g = find_deps(steps)\n", - "to_graphviz(g; node_labels=true)" - ], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ + "to_graphviz(g; node_labels=true)\n", + "\n", "expected = @acset Graph begin\n", " V = 3\n", " E = 1\n", @@ -1370,78 +1714,55 @@ " tgt = 2\n", "end\n", "@test expected == g" - ], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ - "# Interface that just uses rules and match morphisms:\n", - "# The matches needed to be updated to reflect the particular isomorph that DPO\n", - "# rewriting produces when applying the rule.\n", - "σ₂ = ACSetTransformation(G2, G2; V=[2, 1])\n", - "σ₃ = ACSetTransformation(G3, G3; V=[3, 1, 2])" - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ - "g′ = find_deps([R3 => M1, R2 => M2 ⋅ σ₃, R1 => M3 ⋅ σ₂])\n", - "@test g′ == g" - ], - "metadata": {} + "Interface that just uses rules and match morphisms:\n", + "The matches needed to be updated to reflect the particular isomorph that DPO\n", + "rewriting produces when applying the rule." + ] }, { - "outputs": [], "cell_type": "code", - "source": [ - "###################################" - ], + "execution_count": 32, "metadata": {}, - "execution_count": 23 - }, - { - "cell_type": "markdown", - "source": [ - "10. General purpose programming #" - ], - "metadata": {} - }, - { "outputs": [ { - "output_type": "execute_result", "data": { - "text/plain": "\"see lotka_volterra.jl\"" + "text/plain": [ + "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" + ] }, + "execution_count": 32, "metadata": {}, - "execution_count": 24 + "output_type": "execute_result" } ], - "cell_type": "code", "source": [ - "###################################\n", + "σ₂ = ACSetTransformation(G2, G2; V=[2, 1])\n", + "σ₃ = ACSetTransformation(G3, G3; V=[3, 1, 2])\n", "\n", - "\"\"\"see lotka_volterra.jl\"\"\"" - ], - "metadata": {}, - "execution_count": 24 + "g′ = find_deps([R3 => M1, R2 => M2 ⋅ σ₃, R1 => M3 ⋅ σ₂])\n", + "@test g′ == g" + ] } ], - "nbformat_minor": 3, "metadata": { + "kernelspec": { + "display_name": "Julia 1.10.0", + "language": "julia", + "name": "julia-1.10" + }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.4" - }, - "kernelspec": { - "name": "julia-1.9", - "display_name": "Julia 1.9.4", - "language": "julia" + "version": "1.10.0" } }, - "nbformat": 4 + "nbformat": 4, + "nbformat_minor": 3 } diff --git a/docs/src/generated/full_demo.md b/docs/src/generated/full_demo.md index c33e099..292e97a 100644 --- a/docs/src/generated/full_demo.md +++ b/docs/src/generated/full_demo.md @@ -2,20 +2,19 @@ EditURL = "../../literate/full_demo.jl" ``` +# Full Demo + ````@example full_demo -using AlgebraicRewriting -using Catlab, Catlab.CategoricalAlgebra, Catlab.Graphics, Catlab.Graphs, Catlab.Programs, Catlab.Theories -import AlgebraicPetri +using AlgebraicRewriting, Catlab, AlgebraicPetri, DataMigrations using Test +```` - -""" This is a self-contained walkthrough of the main features of AlgebraicRewriting. This is a regular julia file that can be run interactively. Importantly: - - use Julia 1.9 (not yet official released) - - ]activate the environment in AlgebraicRewriting.jl/docs + - use Julia 1.10 + - activate the environment in AlgebraicRewriting.jl/docs - check that graphviz is installed locally (test via "which dot" in terminal) Table of contents: @@ -41,50 +40,45 @@ that is not available, your options are to 2.) use the following `to_svg` function, which will write a graphviz output to a SVG file and can be viewed in a browser. The Julia pipe syntax |> allows you to easily append " |> to_svg " to a line with a visualization. -""" + +````@example full_demo to_svg(G, filename="tmp.svg") = open(filename, "w") do io show(io, "image/svg+xml", G) end -to_graphviz(path_graph(Graph, 3)) # |> to_svg - -########## +to_graphviz(path_graph(Graph, 3)) ```` -1. DPO # - -````@example full_demo -########## +# 1. DPO -""" We construct a rule by providing a span, L ← I → R -""" -L = path_graph(Graph, 2) # • → • -I = Graph(1) # • +````@example full_demo +L = path_graph(Graph, 2) # • → • +I = Graph(1) # • R = @acset Graph begin V = 1 E = 1 src = 1 tgt = 1 end # •↺ -l = CSetTransformation(I, L; V=[1]) # graph homomorphism data -r = CSetTransformation(I, R; V=[1]) - +l = ACSetTransformation(I, L; V=[1]) # graph homomorphism data +r = ACSetTransformation(I, R; V=[1]) rule = Rule(l, r) -G = path_graph(Graph, 5) # • → • → • → • → • +G = path_graph(Graph, 5) # • → • → • → • → • m = only(get_matches(rule, G)) # only one match which satisfies dangling condition +```` -"""We can rewrite with a specific match""" +Provided a specific match (`m`), we can use the `rule` to rewrite the graph (`G`) using `rewrite_match(rule, m)`. +````@example full_demo res = rewrite_match(rule, m) # • → • → • → •↺ to_graphviz(res; node_labels=true) ```` -Note that C-Sets are morally regarded up to isomorphism - in particular, -limits and colimits may modify the orderings of edges/vertices +Note that C-Sets are morally regarded up to isomorphism - in particular, limits and colimits may modify the orderings of edges/vertices ````@example full_demo expected = @acset Graph begin @@ -94,12 +88,11 @@ expected = @acset Graph begin tgt = [2, 3, 4, 4] end @test is_isomorphic(expected, res) +```` -""" -We can also specify the rule via a colimit-of-representables (i.e. generators -and relations) syntax. As your schema gets bigger, this becomes more and more -convenient. Assigning temporary names to the C-Set elements can also be helpful. -""" +We can also specify the rule via a colimit-of-representables (i.e. generators and relations) syntax. As your schema gets bigger, this becomes more and more convenient. Assigning temporary tags, e.g. `e`, `v`, `eᵣ` to the C-Set elements can also be helpful. + +````@example full_demo yG = yoneda_cache(Graph, clear=true); # compute representables rule2 = Rule(@migration(SchRulel, SchGraph, begin @@ -117,25 +110,20 @@ rule2 = Rule(@migration(SchRulel, SchGraph, begin v => src(e) end end), yG) +```` -"""We can rewrite without a match (and let it pick an arbitrary match)""" +We can also rewrite without a match (and let it pick an arbitrary match). +````@example full_demo @test res == rewrite(rule, G) - -########## ```` -2. SPO # - -````@example full_demo -########## +# 2. SPO -""" -Rules are by default DPO, but if we specify a type parameter we can change -the semantics -""" +Rules are by default DPO, but if we specify a type parameter we can change the semantics -rule_spo = Rule{:SPO}(l, r) # (same data as before) +````@example full_demo +rule_spo = Rule{:SPO}(l, r) # (same data as before) @test length(get_matches(rule_spo, G)) == 4 # there are now four matches res = rewrite(rule_spo, G) @@ -143,35 +131,28 @@ to_graphviz(res) @test is_isomorphic(res, path_graph(Graph, 3) ⊕ R) ```` -note that ⊕ and ⊗ are shorthand for (co)products -Julia lets you easily write unicode symbols via "\" followed by a LaTeX name +**Note**: ⊕ and ⊗ are shorthand for (co)products +_Tip: Julia lets you easily write unicode symbols via "\" followed by a LaTeX name, then hit "Tab" to convert the symbol_ -````@example full_demo -########### -```` +# 3. SqPO -3. SqPO # +If we duplicate a vertex with an incident edge, it will duplicate the edge ````@example full_demo -########### - -"""If we duplicate a vertex with an incident edge, it will duplicate the edge""" - L = Graph(1) I = Graph(2) R = path_graph(Graph, 2) +```` -""" -We can use automated homomorphism search to reduce the tedium of specifying -data manually. In this case, there is a unique option -""" +We can use automated homomorphism search to reduce the tedium of specifying data manually. In this case, there is a unique option. +````@example full_demo l = homomorphism(I, L) +```` -""" There are many constraints we can put on the search, such as being monic. -""" +````@example full_demo r = homomorphism(I, R; monic=true) rule_sqpo = Rule{:SqPO}(l, r) # same data as before) @@ -180,24 +161,16 @@ rule_sqpo = Rule{:SqPO}(l, r) # same data as before) G = star_graph(Graph, 6) # a 5-pointed star to_graphviz(G; prog="neato") # changing "prog" can sometimes make it look better -m = CSetTransformation(Graph(1), G; V=[6]) # point at the center +m = ACSetTransformation(Graph(1), G; V=[6]) # point at the center res = rewrite_match(rule_sqpo, m) to_graphviz(res; prog="neato") - -############ ```` -4. PBPO+ # - -````@example full_demo -############ +# 4. PBPO+ -""" -PBPO+ requires not merely a span but also additional data for L and K which can -be thought of as type graphs. The graph G that we rewrite will be typed over -the L' type graph to determine how it is rewritten. -""" +PBPO+ requires not merely a span but also additional data for L and K which can be thought of as type graphs. The graph G that we rewrite will be typed over the L' type graph to determine how it is rewritten. +````@example full_demo L = Graph(1) K = Graph(2) l = homomorphism(K, L) @@ -214,7 +187,7 @@ L′ = @acset Graph begin src = [1, 1, 1, 2, 3, 3] tgt = [1, 2, 3, 3, 3, 1] end -tl = CSetTransformation(L, L′; V=[2]) # 2 is the matched vertex +tl = ACSetTransformation(L, L′; V=[2]) # 2 is the matched vertex to_graphviz(L′; node_labels=true) ```` @@ -229,7 +202,7 @@ K′ = @acset Graph begin src = [1, 1, 1, 2, 3, 3, 3, 4, 5] tgt = [1, 2, 3, 3, 3, 1, 5, 5, 5] end -tk = CSetTransformation(K, K′; V=[2, 4]) +tk = ACSetTransformation(K, K′; V=[2, 4]) to_graphviz(K′; node_labels=true) l′ = homomorphism(K′, L′; initial=(V=[1, 2, 3, 2, 3],)) @@ -257,26 +230,15 @@ V1 is copied to V2. Outneighbor V5 (w/ loop) is copied to V6, creating an edge ````@example full_demo to_graphviz(res; node_labels=true) - -########################## ```` -5. Generalizing Graphs # - -````@example full_demo -########################## - -""" -Any data structure which implements the required functions we need can, in -principle, be used for rewriting. Importantly this includes pushout_complement, -pushout, and homomorphism search. These are all implemented generically for -any C-Set schema (allowing us to rewrite Petri nets, Semisimplicial sets, etc.) +# 5. Generalizing Graphs -Here we'll do rewriting in graphs sliced over •⇆•, which is isomorphic to the -category of (whole-grain) Petri nets, with States and Transitions. -""" +Any data structure which implements the required functions we need can, in principle, be used for rewriting. Importantly this includes pushout_complement, pushout, and homomorphism search. These are all implemented generically for any C-Set schema (allowing us to rewrite Petri nets, Semisimplicial sets, etc.) +Here we'll do rewriting in graphs sliced over •⇆•, which is isomorphic to the category of (whole-grain) Petri nets, with States and Transitions. +````@example full_demo function graph_slice(s::Slice) h = s.slice V, E = collect.([h[:V], h[:E]]) @@ -295,18 +257,23 @@ function graph_slice(s::Slice) os = findS.(g[O, :tgt]) end) end; +nothing #hide +```` -""" this is the graph we are slicing over """ +This is the graph we are slicing over. +````@example full_demo two = @acset Graph begin V = 2 E = 2 src = [1, 2] tgt = [2, 1] end +```` -""" Define a rule which deletes a [T] -> S edge""" +Define a rule which deletes a [T] -> S edge +````@example full_demo L_ = path_graph(Graph, 2) L = Slice(ACSetTransformation(L_, two, V=[2, 1], E=[2])) # [T] ⟶ (S) graph_slice(L) @@ -315,9 +282,11 @@ I_ = Graph(1) I = Slice(ACSetTransformation(I_, two, V=[2])) # [T] R_ = Graph(2) R = Slice(ACSetTransformation(R_, two, V=[2, 1])) # [T] (S) +```` -"""Using homomorphism search in the slice category""" +Using homomorphism search in the slice category +````@example full_demo rule = Rule(homomorphism(I, L), homomorphism(I, R)) G_ = path_graph(Graph, 3) @@ -326,27 +295,13 @@ graph_slice(G) res = rewrite(rule, G) # (S) ⟶ [T] (S) graph_slice(res) - -""" -While the vast majority of functionality is focused on ACSets at the present -moment, but there is nothing in principle which limits this. -""" - -############################# ```` -6. Application conditions # +While the vast majority of functionality is focused on ACSets at the present moment, but there is nothing in principle which limits this. -````@example full_demo -############################# +# 6. Application conditions -""" -We can construct commutative diagrams with certain edges left unspecified or -marked with ∀ or ∃. If only one edge is left free, we can treat the diagram as -a boolean function which tests whether the morphism makes the specified paths -commute (or not commute). This generalizes positive/negative application -conditions and lifting conditions, but because those are most common there are -constructors AppCond and LiftCond to make these directly. +We can construct commutative diagrams with certain edges left unspecified or marked with ∀ or ∃. If only one edge is left free, we can treat the diagram as a boolean function which tests whether the morphism makes the specified paths commute (or not commute). This generalizes positive/negative application conditions and lifting conditions, but because those are most common there are constructors AppCond and LiftCond to make these directly. ∀ [↻•] → ? @@ -354,7 +309,8 @@ constructors AppCond and LiftCond to make these directly. [↻•⟶•] → [↻•⟶•⟵•↺] Every vertex with a loop also has a map to the vertex marked by the bottom map. -""" + +````@example full_demo t = terminal(Graph) |> apex looparr = @acset_colim yG begin (e1, e2)::E @@ -374,10 +330,10 @@ constr = LiftCond(v, b) @test !apply_constraint(constr, homomorphism(t, loop_csp)) @test apply_constraint(constr, b) - -"""We can combining constraints with logical combinators""" ```` +We can combining constraints with logical combinators. + match vertex iff it has 2 or 3 self loops ````@example full_demo @@ -397,16 +353,10 @@ rule = Rule(id(Graph(1)), id(Graph(1)); ac=[constr]) G = two ⊕ three ⊕ two ⊕ four ⊕ five ⊕ one @test length(get_matches(rule, G)) == 3 - -########################## ```` -7. Attribute variables # - -````@example full_demo -########################## +# 7. Attribute variables -""" Normally ACSet morphisms must match attribute values exactly, i.e. a weighted graph edge of 8.3 can only be mapped to another edge weighted at 8.3. This becomes very restricted, especially when we want to do some simple computations @@ -415,8 +365,8 @@ with attribute values (e.g. when merging two edges, add their values together) A recent extension of ACSets makes this possible - each attribute type comes equipped with a finite set of "variables" which can be mapped to any concrete value (or another variable). -""" +````@example full_demo yWG = yoneda_cache(WeightedGraph{Int}; clear=true); L = @acset_colim yWG begin (e1, e2)::E @@ -452,21 +402,15 @@ end tgt = 1 weight = [30, 100] end - -###################### ```` -8. Graph processes # +# 8. Graph processes -````@example full_demo -###################### - -""" A sequence of rewrite applications can be given a poset structure where α ≤ β means that the rule application α needed to occur before β. This is computed via analyzing the colimit of all the partial maps induced by the rewrites. -""" +````@example full_demo using AlgebraicRewriting.Processes: RWStep, find_deps G0, G1, G2, G3 = Graph.([0, 1, 2, 3]) @@ -492,11 +436,11 @@ Add a node Rule3 = Span(id(G0), create(G1)) R1, R2, R3 = [Rule(l, r) for (l, r) in [Rule1, Rule2, Rule3]] - -### Trajectory ```` -step 1: add node #3 to G2 +# 9. Trajectory + +Step 1: add node 3 to G2 ````@example full_demo M1 = create(G2) @@ -522,8 +466,8 @@ CM3 = create(G1) Pmap3 = Span(ACSetTransformation(G1, G2; V=[2]), id(G1)) RS3 = RWStep(Rule1, Pmap3, M3, CM3) + steps = [RS1, RS2, RS3] -```` g = find_deps(steps) to_graphviz(g; node_labels=true) @@ -535,25 +479,17 @@ expected = @acset Graph begin tgt = 2 end @test expected == g +```` -# Interface that just uses rules and match morphisms: -# The matches needed to be updated to reflect the particular isomorph that DPO -# rewriting produces when applying the rule. +Interface that just uses rules and match morphisms: +The matches needed to be updated to reflect the particular isomorph that DPO +rewriting produces when applying the rule. + +````@example full_demo σ₂ = ACSetTransformation(G2, G2; V=[2, 1]) σ₃ = ACSetTransformation(G3, G3; V=[3, 1, 2]) g′ = find_deps([R3 => M1, R2 => M2 ⋅ σ₃, R1 => M3 ⋅ σ₂]) @test g′ == g - -````@example full_demo -################################### -```` - -10. General purpose programming # - -````@example full_demo -################################### - -"""see lotka_volterra.jl""" ```` diff --git a/docs/src/generated/game_of_life.ipynb b/docs/src/generated/game_of_life.ipynb index 5277d4c..6d2f137 100644 --- a/docs/src/generated/game_of_life.ipynb +++ b/docs/src/generated/game_of_life.ipynb @@ -1,16 +1,14 @@ { "cells": [ { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "\"The game of life has two rules: one which turns living things dead, and one\\nthat brings dead things to life. We model the terrain as a symmetric graph:\\ncells are vertices. Neighboring cells have edges between them.\\n\\nImplementationwise, if we are going to update\\ncells one at a time, we must keep track of two bits of information (the cell's\\nliving status for the *current* timestep and whether it will be alive in the\\n*next* timestep). Thus we need helper rule to overwrite the \\\"current\\\"\\nlife status with the \\\"next\\\" life status at the end of each timestep.\\n\"" - }, - "metadata": {}, - "execution_count": 1 - } + "cell_type": "markdown", + "source": [ + "# Conway's Game of Life" ], + "metadata": {} + }, + { + "outputs": [], "cell_type": "code", "source": [ "using AlgebraicRewriting\n", @@ -18,19 +16,7 @@ "import Catlab.Graphics: to_graphviz\n", "using Catlab.Graphics.Graphviz: Attributes, Statement, Node, Edge, Digraph\n", "using PrettyTables\n", - "using Luxor\n", - "\n", - "\"\"\"\n", - "The game of life has two rules: one which turns living things dead, and one\n", - "that brings dead things to life. We model the terrain as a symmetric graph:\n", - "cells are vertices. Neighboring cells have edges between them.\n", - "\n", - "Implementationwise, if we are going to update\n", - "cells one at a time, we must keep track of two bits of information (the cell's\n", - "living status for the *current* timestep and whether it will be alive in the\n", - "*next* timestep). Thus we need helper rule to overwrite the \"current\"\n", - "life status with the \"next\" life status at the end of each timestep.\n", - "\"\"\"" + "using Luxor" ], "metadata": {}, "execution_count": 1 @@ -38,7 +24,24 @@ { "cell_type": "markdown", "source": [ - "Schema" + "The game of life has two rules: one which turns living things dead, and one that brings dead things to life. We model the terrain as a symmetric graph: cells are vertices. Neighboring cells have edges between them.\n", + "\n", + "Implementation wise, if we are going to update cells one at a time, we must keep track of two bits of information (the cell's living status for the *current* timestep and whether it will be alive in the *next* timestep). Thus we need helper rule to overwrite the \"current\" life status with the \"next\" life status at the end of each timestep." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "# Schema" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "`curr` and `next` pick out subsets of V which are marked as currently alive or\n", + "to be alive in the next timestep." ], "metadata": {} }, @@ -47,7 +50,7 @@ { "output_type": "execute_result", "data": { - "text/plain": "Migrate(Dict(:Curr => :Curr, :V => :V, :Next => :Next, :E => :E), Dict(:src => :src, :next => :next, :curr => :curr, :tgt => :tgt, :inv => :inv), Main.var\"##295\".AbsLifeCoords{Tuple{Int64, Int64}}, Main.var\"##295\".AbsLifeCoords{Tuple{Int64, Int64}}, false)" + "text/plain": "Migrate(Dict(:Curr => :Curr, :V => :V, :Next => :Next, :E => :E), Dict(:src => :src, :next => :next, :curr => :curr, :tgt => :tgt, :inv => :inv), Main.var\"##228\".AbsLifeCoords{Tuple{Int64, Int64}}, Main.var\"##228\".AbsLifeCoords{Tuple{Int64, Int64}}, false)" }, "metadata": {}, "execution_count": 2 @@ -55,12 +58,6 @@ ], "cell_type": "code", "source": [ - "########\n", - "\n", - "\"\"\"\n", - "`curr` and `next` pick out subsets of V which are marked as currently alive or\n", - "to be alive in the next timestep.\n", - "\"\"\"\n", "@present SchLife <: SchSymmetricGraph begin\n", " (Curr, Next)::Ob\n", " curr::Hom(Curr, V)\n", @@ -83,23 +80,14 @@ { "cell_type": "markdown", "source": [ - "Helper" + "# Helper" ], "metadata": {} }, - { - "outputs": [], - "cell_type": "code", - "source": [ - "########" - ], - "metadata": {}, - "execution_count": 3 - }, { "cell_type": "markdown", "source": [ - "Visualization" + "## Visualization" ], "metadata": {} }, @@ -111,7 +99,7 @@ "text/plain": "view_life (generic function with 6 methods)" }, "metadata": {}, - "execution_count": 4 + "execution_count": 3 } ], "cell_type": "code", @@ -159,12 +147,12 @@ "end" ], "metadata": {}, - "execution_count": 4 + "execution_count": 3 }, { "cell_type": "markdown", "source": [ - "Constructions for Life ACSets / maps between them" + "## Constructions for Life ACSets / maps between them" ], "metadata": {} }, @@ -173,10 +161,10 @@ { "output_type": "execute_result", "data": { - "text/plain": "Main.var\"##295\".living_neighbors" + "text/plain": "Main.var\"##228\".living_neighbors" }, "metadata": {}, - "execution_count": 5 + "execution_count": 4 } ], "cell_type": "code", @@ -209,12 +197,12 @@ "end" ], "metadata": {}, - "execution_count": 5 + "execution_count": 4 }, { "cell_type": "markdown", "source": [ - "Initialization of LifeCoords" + "## Initialization of LifeCoords" ], "metadata": {} }, @@ -226,7 +214,7 @@ "text/plain": "make_grid (generic function with 4 methods)" }, "metadata": {}, - "execution_count": 6 + "execution_count": 5 } ], "cell_type": "code", @@ -267,24 +255,15 @@ "make_grid(n::Int, random=false) = make_grid((random ? rand : zeros)(Bool, (n, n)))" ], "metadata": {}, - "execution_count": 6 + "execution_count": 5 }, { "cell_type": "markdown", "source": [ - "Rules" + "# Rules" ], "metadata": {} }, - { - "outputs": [], - "cell_type": "code", - "source": [ - "#######" - ], - "metadata": {}, - "execution_count": 7 - }, { "cell_type": "markdown", "source": [ @@ -297,10 +276,10 @@ { "output_type": "execute_result", "data": { - "text/plain": "Rule{:DPO}(ACSetTransformation((V = id(FinSet(1)), E = id(FinSet(0)), Curr = id(FinSet(0)), Next = id(FinSet(0))), Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:0}), ACSetTransformation((V = FinFunction([1], 1, 1), E = FinFunction(Int64[], 0, 0), Curr = FinFunction(Int64[], 0, 0), Next = FinFunction(Int64[], 0, 1)), Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:1}), Constraint[Constraint(CGraph:\n V = 1:3\n E = 1:3\n VLabel = 1:0\n ELabel = 1:0\n src : E → V = [2, 1, 2]\n tgt : E → V = [1, 3, 3]\n vlabel : V → VLabel = Union{Nothing, Main.var\"##295\".Life}[Main.var\"##295\".Life:\n V = 1:4\n E = 1:6\n Curr = 1:3\n Next = 1:0\n src : E → V = [2, 1, 3, 1, 4, 1]\n tgt : E → V = [1, 2, 1, 3, 1, 4]\n inv : E → E = [2, 1, 4, 3, 6, 5]\n curr : Curr → V = [2, 3, 4]\n next : Next → V = Int64[], Main.var\"##295\".Life:\n V = 1:1\n E = 1:0\n Curr = 1:0\n Next = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n inv : E → E = Int64[]\n curr : Curr → V = Int64[]\n next : Next → V = Int64[], nothing]\n elabel : E → ELabel = Any[ACSetTransformation((V = FinFunction([1], 1, 4), E = FinFunction(Int64[], 0, 6), Curr = FinFunction(Int64[], 0, 3), Next = FinFunction(Int64[], 0, 0)), Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##295\".Life {V:4, E:6, Curr:3, Next:0}), nothing, 1], AlgebraicRewriting.Rewrite.Constraints.Quantifier(2, :Exists, Commutes([[1, 2], [3]], true), AlgebraicRewriting.Rewrite.Constraints.BoolConst(true), true)), Constraint(CGraph:\n V = 1:3\n E = 1:3\n VLabel = 1:0\n ELabel = 1:0\n src : E → V = [2, 1, 2]\n tgt : E → V = [1, 3, 3]\n vlabel : V → VLabel = Union{Nothing, Main.var\"##295\".Life}[Main.var\"##295\".Life:\n V = 1:5\n E = 1:8\n Curr = 1:4\n Next = 1:0\n src : E → V = [2, 1, 3, 1, 4, 1, 5, 1]\n tgt : E → V = [1, 2, 1, 3, 1, 4, 1, 5]\n inv : E → E = [2, 1, 4, 3, 6, 5, 8, 7]\n curr : Curr → V = [2, 3, 4, 5]\n next : Next → V = Int64[], Main.var\"##295\".Life:\n V = 1:1\n E = 1:0\n Curr = 1:0\n Next = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n inv : E → E = Int64[]\n curr : Curr → V = Int64[]\n next : Next → V = Int64[], nothing]\n elabel : E → ELabel = Any[ACSetTransformation((V = FinFunction([1], 1, 5), E = FinFunction(Int64[], 0, 8), Curr = FinFunction(Int64[], 0, 4), Next = FinFunction(Int64[], 0, 0)), Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##295\".Life {V:5, E:8, Curr:4, Next:0}), nothing, 1], AlgebraicRewriting.Rewrite.Constraints.BoolNot(AlgebraicRewriting.Rewrite.Constraints.Quantifier(2, :Exists, Commutes([[1, 2], [3]], true), AlgebraicRewriting.Rewrite.Constraints.BoolConst(true), true))), Constraint(CGraph:\n V = 1:3\n E = 1:3\n VLabel = 1:0\n ELabel = 1:0\n src : E → V = [2, 1, 2]\n tgt : E → V = [1, 3, 3]\n vlabel : V → VLabel = Union{Nothing, Main.var\"##295\".Life}[Main.var\"##295\".Life:\n V = 1:1\n E = 1:0\n Curr = 1:1\n Next = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n inv : E → E = Int64[]\n curr : Curr → V = [1]\n next : Next → V = Int64[], Main.var\"##295\".Life:\n V = 1:1\n E = 1:0\n Curr = 1:0\n Next = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n inv : E → E = Int64[]\n curr : Curr → V = Int64[]\n next : Next → V = Int64[], nothing]\n elabel : E → ELabel = Any[ACSetTransformation((V = FinFunction([1], 1, 1), E = FinFunction(Int64[], 0, 0), Curr = FinFunction(Int64[], 0, 1), Next = FinFunction(Int64[], 0, 0)), Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##295\".Life {V:1, E:0, Curr:1, Next:0}), nothing, 1], AlgebraicRewriting.Rewrite.Constraints.BoolNot(AlgebraicRewriting.Rewrite.Constraints.Quantifier(2, :Exists, Commutes([[1, 2], [3]], true), AlgebraicRewriting.Rewrite.Constraints.BoolConst(true), true)))], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())" + "text/plain": "Rule{:DPO}(ACSetTransformation((V = id(FinSet(1)), E = id(FinSet(0)), Curr = id(FinSet(0)), Next = id(FinSet(0))), Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:0}), ACSetTransformation((V = FinFunction([1], 1, 1), E = FinFunction(Int64[], 0, 0), Curr = FinFunction(Int64[], 0, 0), Next = FinFunction(Int64[], 0, 1)), Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:1}), Constraint[Constraint(CGraph:\n V = 1:3\n E = 1:3\n VLabel = 1:0\n ELabel = 1:0\n src : E → V = [2, 1, 2]\n tgt : E → V = [1, 3, 3]\n vlabel : V → VLabel = Union{Nothing, Main.var\"##228\".Life}[Main.var\"##228\".Life:\n V = 1:4\n E = 1:6\n Curr = 1:3\n Next = 1:0\n src : E → V = [2, 1, 3, 1, 4, 1]\n tgt : E → V = [1, 2, 1, 3, 1, 4]\n inv : E → E = [2, 1, 4, 3, 6, 5]\n curr : Curr → V = [2, 3, 4]\n next : Next → V = Int64[], Main.var\"##228\".Life:\n V = 1:1\n E = 1:0\n Curr = 1:0\n Next = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n inv : E → E = Int64[]\n curr : Curr → V = Int64[]\n next : Next → V = Int64[], nothing]\n elabel : E → ELabel = Any[ACSetTransformation((V = FinFunction([1], 1, 4), E = FinFunction(Int64[], 0, 6), Curr = FinFunction(Int64[], 0, 3), Next = FinFunction(Int64[], 0, 0)), Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##228\".Life {V:4, E:6, Curr:3, Next:0}), nothing, 1], ∃2 (monic, ): (1⋅2 = 3)), Constraint(CGraph:\n V = 1:3\n E = 1:3\n VLabel = 1:0\n ELabel = 1:0\n src : E → V = [2, 1, 2]\n tgt : E → V = [1, 3, 3]\n vlabel : V → VLabel = Union{Nothing, Main.var\"##228\".Life}[Main.var\"##228\".Life:\n V = 1:5\n E = 1:8\n Curr = 1:4\n Next = 1:0\n src : E → V = [2, 1, 3, 1, 4, 1, 5, 1]\n tgt : E → V = [1, 2, 1, 3, 1, 4, 1, 5]\n inv : E → E = [2, 1, 4, 3, 6, 5, 8, 7]\n curr : Curr → V = [2, 3, 4, 5]\n next : Next → V = Int64[], Main.var\"##228\".Life:\n V = 1:1\n E = 1:0\n Curr = 1:0\n Next = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n inv : E → E = Int64[]\n curr : Curr → V = Int64[]\n next : Next → V = Int64[], nothing]\n elabel : E → ELabel = Any[ACSetTransformation((V = FinFunction([1], 1, 5), E = FinFunction(Int64[], 0, 8), Curr = FinFunction(Int64[], 0, 4), Next = FinFunction(Int64[], 0, 0)), Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##228\".Life {V:5, E:8, Curr:4, Next:0}), nothing, 1], ¬∃2 (monic, ): (1⋅2 = 3)), Constraint(CGraph:\n V = 1:3\n E = 1:3\n VLabel = 1:0\n ELabel = 1:0\n src : E → V = [2, 1, 2]\n tgt : E → V = [1, 3, 3]\n vlabel : V → VLabel = Union{Nothing, Main.var\"##228\".Life}[Main.var\"##228\".Life:\n V = 1:1\n E = 1:0\n Curr = 1:1\n Next = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n inv : E → E = Int64[]\n curr : Curr → V = [1]\n next : Next → V = Int64[], Main.var\"##228\".Life:\n V = 1:1\n E = 1:0\n Curr = 1:0\n Next = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n inv : E → E = Int64[]\n curr : Curr → V = Int64[]\n next : Next → V = Int64[], nothing]\n elabel : E → ELabel = Any[ACSetTransformation((V = FinFunction([1], 1, 1), E = FinFunction(Int64[], 0, 0), Curr = FinFunction(Int64[], 0, 1), Next = FinFunction(Int64[], 0, 0)), Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##228\".Life {V:1, E:0, Curr:1, Next:0}), nothing, 1], ¬∃2 (monic, ): (1⋅2 = 3))], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())" }, "metadata": {}, - "execution_count": 8 + "execution_count": 6 } ], "cell_type": "code", @@ -313,7 +292,7 @@ "Birth = Rule(id(Life(1)), to_next(); ac=bac)" ], "metadata": {}, - "execution_count": 8 + "execution_count": 6 }, { "cell_type": "markdown", @@ -327,10 +306,10 @@ { "output_type": "execute_result", "data": { - "text/plain": "5-element Vector{Pair{Symbol, Rule{:DPO}}}:\n :Birth => Rule{:DPO}(ACSetTransformation((V = id(FinSet(1)), E = id(FinSet(0)), Curr = id(FinSet(0)), Next = id(FinSet(0))), Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:0}), ACSetTransformation((V = FinFunction([1], 1, 1), E = FinFunction(Int64[], 0, 0), Curr = FinFunction(Int64[], 0, 0), Next = FinFunction(Int64[], 0, 1)), Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:1}), Constraint[Constraint(CGraph:\n V = 1:3\n E = 1:3\n VLabel = 1:0\n ELabel = 1:0\n src : E → V = [2, 1, 2]\n tgt : E → V = [1, 3, 3]\n vlabel : V → VLabel = Union{Nothing, Main.var\"##295\".Life}[Main.var\"##295\".Life:\n V = 1:4\n E = 1:6\n Curr = 1:3\n Next = 1:0\n src : E → V = [2, 1, 3, 1, 4, 1]\n tgt : E → V = [1, 2, 1, 3, 1, 4]\n inv : E → E = [2, 1, 4, 3, 6, 5]\n curr : Curr → V = [2, 3, 4]\n next : Next → V = Int64[], Main.var\"##295\".Life:\n V = 1:1\n E = 1:0\n Curr = 1:0\n Next = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n inv : E → E = Int64[]\n curr : Curr → V = Int64[]\n next : Next → V = Int64[], nothing]\n elabel : E → ELabel = Any[ACSetTransformation((V = FinFunction([1], 1, 4), E = FinFunction(Int64[], 0, 6), Curr = FinFunction(Int64[], 0, 3), Next = FinFunction(Int64[], 0, 0)), Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##295\".Life {V:4, E:6, Curr:3, Next:0}), nothing, 1], AlgebraicRewriting.Rewrite.Constraints.Quantifier(2, :Exists, Commutes([[1, 2], [3]], true), AlgebraicRewriting.Rewrite.Constraints.BoolConst(true), true)), Constraint(CGraph:\n V = 1:3\n E = 1:3\n VLabel = 1:0\n ELabel = 1:0\n src : E → V = [2, 1, 2]\n tgt : E → V = [1, 3, 3]\n vlabel : V → VLabel = Union{Nothing, Main.var\"##295\".Life}[Main.var\"##295\".Life:\n V = 1:5\n E = 1:8\n Curr = 1:4\n Next = 1:0\n src : E → V = [2, 1, 3, 1, 4, 1, 5, 1]\n tgt : E → V = [1, 2, 1, 3, 1, 4, 1, 5]\n inv : E → E = [2, 1, 4, 3, 6, 5, 8, 7]\n curr : Curr → V = [2, 3, 4, 5]\n next : Next → V = Int64[], Main.var\"##295\".Life:\n V = 1:1\n E = 1:0\n Curr = 1:0\n Next = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n inv : E → E = Int64[]\n curr : Curr → V = Int64[]\n next : Next → V = Int64[], nothing]\n elabel : E → ELabel = Any[ACSetTransformation((V = FinFunction([1], 1, 5), E = FinFunction(Int64[], 0, 8), Curr = FinFunction(Int64[], 0, 4), Next = FinFunction(Int64[], 0, 0)), Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##295\".Life {V:5, E:8, Curr:4, Next:0}), nothing, 1], AlgebraicRewriting.Rewrite.Constraints.BoolNot(AlgebraicRewriting.Rewrite.Constraints.Quantifier(2, :Exists, Commutes([[1, 2], [3]], true), AlgebraicRewriting.Rewrite.Constraints.BoolConst(true), true))), Constraint(CGraph:\n V = 1:3\n E = 1:3\n VLabel = 1:0\n ELabel = 1:0\n src : E → V = [2, 1, 2]\n tgt : E → V = [1, 3, 3]\n vlabel : V → VLabel = Union{Nothing, Main.var\"##295\".Life}[Main.var\"##295\".Life:\n V = 1:1\n E = 1:0\n Curr = 1:1\n Next = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n inv : E → E = Int64[]\n curr : Curr → V = [1]\n next : Next → V = Int64[], Main.var\"##295\".Life:\n V = 1:1\n E = 1:0\n Curr = 1:0\n Next = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n inv : E → E = Int64[]\n curr : Curr → V = Int64[]\n next : Next → V = Int64[], nothing]\n elabel : E → ELabel = Any[ACSetTransformation((V = FinFunction([1], 1, 1), E = FinFunction(Int64[], 0, 0), Curr = FinFunction(Int64[], 0, 1), Next = FinFunction(Int64[], 0, 0)), Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##295\".Life {V:1, E:0, Curr:1, Next:0}), nothing, 1], AlgebraicRewriting.Rewrite.Constraints.BoolNot(AlgebraicRewriting.Rewrite.Constraints.Quantifier(2, :Exists, Commutes([[1, 2], [3]], true), AlgebraicRewriting.Rewrite.Constraints.BoolConst(true), true)))], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())\n :Persist => Rule{:DPO}(ACSetTransformation((V = id(FinSet(1)), E = id(FinSet(0)), Curr = id(FinSet(1)), Next = id(FinSet(0))), Main.var\"##295\".Life {V:1, E:0, Curr:1, Next:0}, Main.var\"##295\".Life {V:1, E:0, Curr:1, Next:0}), ACSetTransformation((V = FinFunction([1], 1, 1), E = FinFunction(Int64[], 0, 0), Curr = FinFunction([1], 1, 1), Next = FinFunction(Int64[], 0, 1)), Main.var\"##295\".Life {V:1, E:0, Curr:1, Next:0}, Main.var\"##295\".Life {V:1, E:0, Curr:1, Next:1}), Constraint[Constraint(CGraph:\n V = 1:3\n E = 1:3\n VLabel = 1:0\n ELabel = 1:0\n src : E → V = [2, 1, 2]\n tgt : E → V = [1, 3, 3]\n vlabel : V → VLabel = Union{Nothing, Main.var\"##295\".Life}[Main.var\"##295\".Life:\n V = 1:3\n E = 1:4\n Curr = 1:3\n Next = 1:0\n src : E → V = [2, 1, 3, 1]\n tgt : E → V = [1, 2, 1, 3]\n inv : E → E = [2, 1, 4, 3]\n curr : Curr → V = [1, 2, 3]\n next : Next → V = Int64[], Main.var\"##295\".Life:\n V = 1:1\n E = 1:0\n Curr = 1:1\n Next = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n inv : E → E = Int64[]\n curr : Curr → V = [1]\n next : Next → V = Int64[], nothing]\n elabel : E → ELabel = Any[ACSetTransformation((V = FinFunction([1], 1, 3), E = FinFunction(Int64[], 0, 4), Curr = FinFunction([1], 1, 3), Next = FinFunction(Int64[], 0, 0)), Main.var\"##295\".Life {V:1, E:0, Curr:1, Next:0}, Main.var\"##295\".Life {V:3, E:4, Curr:3, Next:0}), nothing, 1], AlgebraicRewriting.Rewrite.Constraints.Quantifier(2, :Exists, Commutes([[1, 2], [3]], true), AlgebraicRewriting.Rewrite.Constraints.BoolConst(true), true)), Constraint(CGraph:\n V = 1:3\n E = 1:3\n VLabel = 1:0\n ELabel = 1:0\n src : E → V = [2, 1, 2]\n tgt : E → V = [1, 3, 3]\n vlabel : V → VLabel = Union{Nothing, Main.var\"##295\".Life}[Main.var\"##295\".Life:\n V = 1:5\n E = 1:8\n Curr = 1:5\n Next = 1:0\n src : E → V = [2, 1, 3, 1, 4, 1, 5, 1]\n tgt : E → V = [1, 2, 1, 3, 1, 4, 1, 5]\n inv : E → E = [2, 1, 4, 3, 6, 5, 8, 7]\n curr : Curr → V = [1, 2, 3, 4, 5]\n next : Next → V = Int64[], Main.var\"##295\".Life:\n V = 1:1\n E = 1:0\n Curr = 1:1\n Next = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n inv : E → E = Int64[]\n curr : Curr → V = [1]\n next : Next → V = Int64[], nothing]\n elabel : E → ELabel = Any[ACSetTransformation((V = FinFunction([1], 1, 5), E = FinFunction(Int64[], 0, 8), Curr = FinFunction([1], 1, 5), Next = FinFunction(Int64[], 0, 0)), Main.var\"##295\".Life {V:1, E:0, Curr:1, Next:0}, Main.var\"##295\".Life {V:5, E:8, Curr:5, Next:0}), nothing, 1], AlgebraicRewriting.Rewrite.Constraints.BoolNot(AlgebraicRewriting.Rewrite.Constraints.Quantifier(2, :Exists, Commutes([[1, 2], [3]], true), AlgebraicRewriting.Rewrite.Constraints.BoolConst(true), true)))], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())\n :ClearCurr => Rule{:DPO}(ACSetTransformation((V = FinFunction([1], 1, 1), E = FinFunction(Int64[], 0, 0), Curr = FinFunction(Int64[], 0, 1), Next = FinFunction(Int64[], 0, 0)), Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##295\".Life {V:1, E:0, Curr:1, Next:0}), ACSetTransformation((V = id(FinSet(1)), E = id(FinSet(0)), Curr = id(FinSet(0)), Next = id(FinSet(0))), Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:0}), Constraint[], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())\n :ClearNext => Rule{:DPO}(ACSetTransformation((V = FinFunction([1], 1, 1), E = FinFunction(Int64[], 0, 0), Curr = FinFunction(Int64[], 0, 0), Next = FinFunction(Int64[], 0, 1)), Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:1}), ACSetTransformation((V = id(FinSet(1)), E = id(FinSet(0)), Curr = id(FinSet(0)), Next = id(FinSet(0))), Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:0}), Constraint[], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())\n :CopyNext => Rule{:DPO}(ACSetTransformation((V = FinFunction([1], 1, 1), E = FinFunction(Int64[], 0, 0), Curr = FinFunction(Int64[], 0, 0), Next = FinFunction(Int64[], 0, 1)), Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:1}), ACSetTransformation((V = FinFunction([1], 1, 1), E = FinFunction(Int64[], 0, 0), Curr = FinFunction(Int64[], 0, 1), Next = FinFunction(Int64[], 0, 0)), Main.var\"##295\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##295\".Life {V:1, E:0, Curr:1, Next:0}), Constraint[], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())" + "text/plain": "5-element Vector{Pair{Symbol, Rule{:DPO}}}:\n :Birth => Rule{:DPO}(ACSetTransformation((V = id(FinSet(1)), E = id(FinSet(0)), Curr = id(FinSet(0)), Next = id(FinSet(0))), Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:0}), ACSetTransformation((V = FinFunction([1], 1, 1), E = FinFunction(Int64[], 0, 0), Curr = FinFunction(Int64[], 0, 0), Next = FinFunction(Int64[], 0, 1)), Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:1}), Constraint[Constraint(CGraph:\n V = 1:3\n E = 1:3\n VLabel = 1:0\n ELabel = 1:0\n src : E → V = [2, 1, 2]\n tgt : E → V = [1, 3, 3]\n vlabel : V → VLabel = Union{Nothing, Main.var\"##228\".Life}[Main.var\"##228\".Life:\n V = 1:4\n E = 1:6\n Curr = 1:3\n Next = 1:0\n src : E → V = [2, 1, 3, 1, 4, 1]\n tgt : E → V = [1, 2, 1, 3, 1, 4]\n inv : E → E = [2, 1, 4, 3, 6, 5]\n curr : Curr → V = [2, 3, 4]\n next : Next → V = Int64[], Main.var\"##228\".Life:\n V = 1:1\n E = 1:0\n Curr = 1:0\n Next = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n inv : E → E = Int64[]\n curr : Curr → V = Int64[]\n next : Next → V = Int64[], nothing]\n elabel : E → ELabel = Any[ACSetTransformation((V = FinFunction([1], 1, 4), E = FinFunction(Int64[], 0, 6), Curr = FinFunction(Int64[], 0, 3), Next = FinFunction(Int64[], 0, 0)), Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##228\".Life {V:4, E:6, Curr:3, Next:0}), nothing, 1], ∃2 (monic, ): (1⋅2 = 3)), Constraint(CGraph:\n V = 1:3\n E = 1:3\n VLabel = 1:0\n ELabel = 1:0\n src : E → V = [2, 1, 2]\n tgt : E → V = [1, 3, 3]\n vlabel : V → VLabel = Union{Nothing, Main.var\"##228\".Life}[Main.var\"##228\".Life:\n V = 1:5\n E = 1:8\n Curr = 1:4\n Next = 1:0\n src : E → V = [2, 1, 3, 1, 4, 1, 5, 1]\n tgt : E → V = [1, 2, 1, 3, 1, 4, 1, 5]\n inv : E → E = [2, 1, 4, 3, 6, 5, 8, 7]\n curr : Curr → V = [2, 3, 4, 5]\n next : Next → V = Int64[], Main.var\"##228\".Life:\n V = 1:1\n E = 1:0\n Curr = 1:0\n Next = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n inv : E → E = Int64[]\n curr : Curr → V = Int64[]\n next : Next → V = Int64[], nothing]\n elabel : E → ELabel = Any[ACSetTransformation((V = FinFunction([1], 1, 5), E = FinFunction(Int64[], 0, 8), Curr = FinFunction(Int64[], 0, 4), Next = FinFunction(Int64[], 0, 0)), Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##228\".Life {V:5, E:8, Curr:4, Next:0}), nothing, 1], ¬∃2 (monic, ): (1⋅2 = 3)), Constraint(CGraph:\n V = 1:3\n E = 1:3\n VLabel = 1:0\n ELabel = 1:0\n src : E → V = [2, 1, 2]\n tgt : E → V = [1, 3, 3]\n vlabel : V → VLabel = Union{Nothing, Main.var\"##228\".Life}[Main.var\"##228\".Life:\n V = 1:1\n E = 1:0\n Curr = 1:1\n Next = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n inv : E → E = Int64[]\n curr : Curr → V = [1]\n next : Next → V = Int64[], Main.var\"##228\".Life:\n V = 1:1\n E = 1:0\n Curr = 1:0\n Next = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n inv : E → E = Int64[]\n curr : Curr → V = Int64[]\n next : Next → V = Int64[], nothing]\n elabel : E → ELabel = Any[ACSetTransformation((V = FinFunction([1], 1, 1), E = FinFunction(Int64[], 0, 0), Curr = FinFunction(Int64[], 0, 1), Next = FinFunction(Int64[], 0, 0)), Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##228\".Life {V:1, E:0, Curr:1, Next:0}), nothing, 1], ¬∃2 (monic, ): (1⋅2 = 3))], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())\n :Persist => Rule{:DPO}(ACSetTransformation((V = id(FinSet(1)), E = id(FinSet(0)), Curr = id(FinSet(1)), Next = id(FinSet(0))), Main.var\"##228\".Life {V:1, E:0, Curr:1, Next:0}, Main.var\"##228\".Life {V:1, E:0, Curr:1, Next:0}), ACSetTransformation((V = FinFunction([1], 1, 1), E = FinFunction(Int64[], 0, 0), Curr = FinFunction([1], 1, 1), Next = FinFunction(Int64[], 0, 1)), Main.var\"##228\".Life {V:1, E:0, Curr:1, Next:0}, Main.var\"##228\".Life {V:1, E:0, Curr:1, Next:1}), Constraint[Constraint(CGraph:\n V = 1:3\n E = 1:3\n VLabel = 1:0\n ELabel = 1:0\n src : E → V = [2, 1, 2]\n tgt : E → V = [1, 3, 3]\n vlabel : V → VLabel = Union{Nothing, Main.var\"##228\".Life}[Main.var\"##228\".Life:\n V = 1:3\n E = 1:4\n Curr = 1:3\n Next = 1:0\n src : E → V = [2, 1, 3, 1]\n tgt : E → V = [1, 2, 1, 3]\n inv : E → E = [2, 1, 4, 3]\n curr : Curr → V = [1, 2, 3]\n next : Next → V = Int64[], Main.var\"##228\".Life:\n V = 1:1\n E = 1:0\n Curr = 1:1\n Next = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n inv : E → E = Int64[]\n curr : Curr → V = [1]\n next : Next → V = Int64[], nothing]\n elabel : E → ELabel = Any[ACSetTransformation((V = FinFunction([1], 1, 3), E = FinFunction(Int64[], 0, 4), Curr = FinFunction([1], 1, 3), Next = FinFunction(Int64[], 0, 0)), Main.var\"##228\".Life {V:1, E:0, Curr:1, Next:0}, Main.var\"##228\".Life {V:3, E:4, Curr:3, Next:0}), nothing, 1], ∃2 (monic, ): (1⋅2 = 3)), Constraint(CGraph:\n V = 1:3\n E = 1:3\n VLabel = 1:0\n ELabel = 1:0\n src : E → V = [2, 1, 2]\n tgt : E → V = [1, 3, 3]\n vlabel : V → VLabel = Union{Nothing, Main.var\"##228\".Life}[Main.var\"##228\".Life:\n V = 1:5\n E = 1:8\n Curr = 1:5\n Next = 1:0\n src : E → V = [2, 1, 3, 1, 4, 1, 5, 1]\n tgt : E → V = [1, 2, 1, 3, 1, 4, 1, 5]\n inv : E → E = [2, 1, 4, 3, 6, 5, 8, 7]\n curr : Curr → V = [1, 2, 3, 4, 5]\n next : Next → V = Int64[], Main.var\"##228\".Life:\n V = 1:1\n E = 1:0\n Curr = 1:1\n Next = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n inv : E → E = Int64[]\n curr : Curr → V = [1]\n next : Next → V = Int64[], nothing]\n elabel : E → ELabel = Any[ACSetTransformation((V = FinFunction([1], 1, 5), E = FinFunction(Int64[], 0, 8), Curr = FinFunction([1], 1, 5), Next = FinFunction(Int64[], 0, 0)), Main.var\"##228\".Life {V:1, E:0, Curr:1, Next:0}, Main.var\"##228\".Life {V:5, E:8, Curr:5, Next:0}), nothing, 1], ¬∃2 (monic, ): (1⋅2 = 3))], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())\n :ClearCurr => Rule{:DPO}(ACSetTransformation((V = FinFunction([1], 1, 1), E = FinFunction(Int64[], 0, 0), Curr = FinFunction(Int64[], 0, 1), Next = FinFunction(Int64[], 0, 0)), Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##228\".Life {V:1, E:0, Curr:1, Next:0}), ACSetTransformation((V = id(FinSet(1)), E = id(FinSet(0)), Curr = id(FinSet(0)), Next = id(FinSet(0))), Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:0}), Constraint[], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())\n :ClearNext => Rule{:DPO}(ACSetTransformation((V = FinFunction([1], 1, 1), E = FinFunction(Int64[], 0, 0), Curr = FinFunction(Int64[], 0, 0), Next = FinFunction(Int64[], 0, 1)), Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:1}), ACSetTransformation((V = id(FinSet(1)), E = id(FinSet(0)), Curr = id(FinSet(0)), Next = id(FinSet(0))), Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:0}), Constraint[], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())\n :CopyNext => Rule{:DPO}(ACSetTransformation((V = FinFunction([1], 1, 1), E = FinFunction(Int64[], 0, 0), Curr = FinFunction(Int64[], 0, 0), Next = FinFunction(Int64[], 0, 1)), Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:1}), ACSetTransformation((V = FinFunction([1], 1, 1), E = FinFunction(Int64[], 0, 0), Curr = FinFunction(Int64[], 0, 1), Next = FinFunction(Int64[], 0, 0)), Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##228\".Life {V:1, E:0, Curr:1, Next:0}), Constraint[], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())" }, "metadata": {}, - "execution_count": 9 + "execution_count": 7 } ], "cell_type": "code", @@ -356,24 +335,15 @@ " :ClearNext => ClearNext, :CopyNext => CopyNext]" ], "metadata": {}, - "execution_count": 9 + "execution_count": 7 }, { "cell_type": "markdown", "source": [ - "Schedule" + "# Schedule" ], "metadata": {} }, - { - "outputs": [], - "cell_type": "code", - "source": [ - "##########" - ], - "metadata": {}, - "execution_count": 10 - }, { "cell_type": "markdown", "source": [ @@ -390,7 +360,7 @@ "text/plain": "view_life (generic function with 7 methods)" }, "metadata": {}, - "execution_count": 11 + "execution_count": 8 } ], "cell_type": "code", @@ -401,22 +371,22 @@ "update_next = agent(rBirth ⋅ rPersist, Life(1); n=:Cell)\n", "next_step = agent(compose(rClearCurr, rCopyNext, rClearNext), Life(1); n=:Cell)\n", "life(n::Int) = for_schedule(update_next ⋅ next_step, n) |> F\n", - "const L = life(1)\n", + "const L1 = life(1)\n", "\n", "G = make_grid([1 0 1 0 1; 0 1 0 1 0; 0 1 0 1 0; 1 0 1 0 1; 1 0 1 0 1])\n", "\n", - "res, = apply_schedule(L, G; steps=1000)\n", + "res, = apply_schedule(L1, G; steps=1000)\n", "traj = last(res).edge.o.val\n", "\n", "view_life(i, traj) = view_life(traj.steps[i].world)" ], "metadata": {}, - "execution_count": 11 + "execution_count": 8 }, { "cell_type": "markdown", "source": [ - "view_traj(L, res, view_life; agent=true)" + "view_traj(L1, res, view_life; agent=true)" ], "metadata": {} } @@ -427,11 +397,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.4" + "version": "1.10.0" }, "kernelspec": { - "name": "julia-1.9", - "display_name": "Julia 1.9.4", + "name": "julia-1.10", + "display_name": "Julia 1.10.0", "language": "julia" } }, diff --git a/docs/src/generated/game_of_life.md b/docs/src/generated/game_of_life.md index 33bdd8d..8852f1d 100644 --- a/docs/src/generated/game_of_life.md +++ b/docs/src/generated/game_of_life.md @@ -2,6 +2,8 @@ EditURL = "../../literate/game_of_life.jl" ``` +# Conway's Game of Life + ````@example game_of_life using AlgebraicRewriting using Catlab, Catlab.Graphs, Catlab.CategoricalAlgebra, Catlab.Theories @@ -9,29 +11,18 @@ import Catlab.Graphics: to_graphviz using Catlab.Graphics.Graphviz: Attributes, Statement, Node, Edge, Digraph using PrettyTables using Luxor - -""" -The game of life has two rules: one which turns living things dead, and one -that brings dead things to life. We model the terrain as a symmetric graph: -cells are vertices. Neighboring cells have edges between them. - -Implementationwise, if we are going to update -cells one at a time, we must keep track of two bits of information (the cell's -living status for the *current* timestep and whether it will be alive in the -*next* timestep). Thus we need helper rule to overwrite the "current" -life status with the "next" life status at the end of each timestep. -""" ```` -Schema +The game of life has two rules: one which turns living things dead, and one that brings dead things to life. We model the terrain as a symmetric graph: cells are vertices. Neighboring cells have edges between them. -````@example game_of_life -######## +Implementation wise, if we are going to update cells one at a time, we must keep track of two bits of information (the cell's living status for the *current* timestep and whether it will be alive in the *next* timestep). Thus we need helper rule to overwrite the "current" life status with the "next" life status at the end of each timestep. + +# Schema -""" `curr` and `next` pick out subsets of V which are marked as currently alive or to be alive in the next timestep. -""" + +````@example game_of_life @present SchLife <: SchSymmetricGraph begin (Curr, Next)::Ob curr::Hom(Curr, V) @@ -49,13 +40,9 @@ F = Migrate( Dict(x => x for x in Symbol.(generators(SchLife, :Hom))), LifeCoords; delta=false) ```` -Helper +# Helper -````@example game_of_life -######## -```` - -Visualization +## Visualization ````@example game_of_life function view_life(f::ACSetTransformation, pth=tempname()) @@ -101,7 +88,7 @@ function view_life(X::LifeCoords, pth=tempname(); star=nothing) end ```` -Constructions for Life ACSets / maps between them +## Constructions for Life ACSets / maps between them ````@example game_of_life Next() = @acset Life begin @@ -132,7 +119,7 @@ function living_neighbors(n::Int; alive=false) end ```` -Initialization of LifeCoords +## Initialization of LifeCoords ````@example game_of_life function make_grid(curr::AbstractMatrix, next=nothing) @@ -171,11 +158,7 @@ end make_grid(n::Int, random=false) = make_grid((random ? rand : zeros)(Bool, (n, n))) ```` -Rules - -````@example game_of_life -####### -```` +# Rules A dead cell becomes alive iff exactly 3 living neighbors @@ -212,11 +195,7 @@ rules = [:Birth => Birth, :Persist => Persist, :ClearCurr => ClearCurr, :ClearNext => ClearNext, :CopyNext => CopyNext] ```` -Schedule - -````@example game_of_life -########## -```` +# Schedule All rules have interface of a single distinguished cell. Never distinguish control flow of successful vs unsuccessful application @@ -228,15 +207,15 @@ rBirth, rPersist, rClearCurr, rClearNext, rCopyNext = update_next = agent(rBirth ⋅ rPersist, Life(1); n=:Cell) next_step = agent(compose(rClearCurr, rCopyNext, rClearNext), Life(1); n=:Cell) life(n::Int) = for_schedule(update_next ⋅ next_step, n) |> F -const L = life(1) +const L1 = life(1) G = make_grid([1 0 1 0 1; 0 1 0 1 0; 0 1 0 1 0; 1 0 1 0 1; 1 0 1 0 1]) -res, = apply_schedule(L, G; steps=1000) +res, = apply_schedule(L1, G; steps=1000) traj = last(res).edge.o.val view_life(i, traj) = view_life(traj.steps[i].world) ```` -view_traj(L, res, view_life; agent=true) +view_traj(L1, res, view_life; agent=true) diff --git a/docs/src/generated/lotka_volterra.ipynb b/docs/src/generated/lotka_volterra.ipynb index 8b699de..0690385 100644 --- a/docs/src/generated/lotka_volterra.ipynb +++ b/docs/src/generated/lotka_volterra.ipynb @@ -1,14 +1,146 @@ { "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Lotka Volterra" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "left (generic function with 7 methods)" + }, + "metadata": {}, + "execution_count": 1 + } + ], + "cell_type": "code", + "source": [ + "using Catlab, DataMigrations, AlgebraicRewriting\n", + "using Random, Test, StructEquality\n", + "using Luxor\n", + "\n", + "Random.seed!(123)\n", + "\n", + "using Catlab.Graphics.Graphviz: Attributes, Statement, Node\n", + "using Catlab.Graphics.Graphviz\n", + "\n", + "import Catlab.CategoricalAlgebra: left, right\n", + "\n", + "function right(s::Symbol)\n", + " if s == :N\n", + " return :E\n", + " elseif s == :S\n", + " return :W\n", + " elseif s == :E\n", + " return :S\n", + " elseif s == :W\n", + " return :N\n", + " end\n", + "end\n", + "function left(s::Symbol)\n", + " if s == :N\n", + " return :W\n", + " elseif s == :S\n", + " return :E\n", + " elseif s == :E\n", + " return :N\n", + " elseif s == :W\n", + " return :S\n", + " end\n", + "end" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "Grass = 0 means alive grass, whereas grass > 0 represent a counter of time until the grass is alive.\n", + "\n", + "Sheeps and wolves have position and direction, so we assign each an *edge*. We assume a convention where the location of the something is the edge SOURCE.\n", + "\n", + "Dir is an attribute which can take values :N, :E, :W, and :S." + ], + "metadata": {} + }, { "outputs": [ { "output_type": "execute_result", "data": { - "text/plain": "Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}} {V:4, E:16, Sheep:2, Wolf:2, Dir:0, Eng:0, Coord:0}\n┌───┬───────────┬────────┐\n│\u001b[1m V \u001b[0m│\u001b[1m grass_eng \u001b[0m│\u001b[1m coord \u001b[0m│\n├───┼───────────┼────────┤\n│\u001b[1m 1 \u001b[0m│ 2 │ (0, 0) │\n│\u001b[1m 2 \u001b[0m│ 0 │ (0, 1) │\n│\u001b[1m 3 \u001b[0m│ 0 │ (1, 0) │\n│\u001b[1m 4 \u001b[0m│ 26 │ (1, 1) │\n└───┴───────────┴────────┘\n┌────┬─────┬─────┬─────┐\n│\u001b[1m E \u001b[0m│\u001b[1m src \u001b[0m│\u001b[1m tgt \u001b[0m│\u001b[1m dir \u001b[0m│\n├────┼─────┼─────┼─────┤\n│\u001b[1m 1 \u001b[0m│ 1 │ 3 │ E │\n│\u001b[1m 2 \u001b[0m│ 1 │ 3 │ W │\n│\u001b[1m 3 \u001b[0m│ 1 │ 2 │ N │\n│\u001b[1m 4 \u001b[0m│ 1 │ 2 │ S │\n│\u001b[1m 5 \u001b[0m│ 2 │ 4 │ E │\n│\u001b[1m 6 \u001b[0m│ 2 │ 4 │ W │\n│\u001b[1m 7 \u001b[0m│ 2 │ 1 │ N │\n│\u001b[1m 8 \u001b[0m│ 2 │ 1 │ S │\n│\u001b[1m 9 \u001b[0m│ 3 │ 1 │ E │\n│\u001b[1m 10 \u001b[0m│ 3 │ 1 │ W │\n│\u001b[1m 11 \u001b[0m│ 3 │ 4 │ N │\n│\u001b[1m 12 \u001b[0m│ 3 │ 4 │ S │\n│\u001b[1m 13 \u001b[0m│ 4 │ 2 │ E │\n│\u001b[1m 14 \u001b[0m│ 4 │ 2 │ W │\n│\u001b[1m 15 \u001b[0m│ 4 │ 3 │ N │\n│\u001b[1m 16 \u001b[0m│ 4 │ 3 │ S │\n└────┴─────┴─────┴─────┘\n┌───────┬───────────┬───────────┬───────────┐\n│\u001b[1m Sheep \u001b[0m│\u001b[1m sheep_loc \u001b[0m│\u001b[1m sheep_eng \u001b[0m│\u001b[1m sheep_dir \u001b[0m│\n├───────┼───────────┼───────────┼───────────┤\n│\u001b[1m 1 \u001b[0m│ 3 │ 5 │ E │\n│\u001b[1m 2 \u001b[0m│ 3 │ 5 │ W │\n└───────┴───────────┴───────────┴───────────┘\n┌──────┬──────────┬──────────┬──────────┐\n│\u001b[1m Wolf \u001b[0m│\u001b[1m wolf_loc \u001b[0m│\u001b[1m wolf_eng \u001b[0m│\u001b[1m wolf_dir \u001b[0m│\n├──────┼──────────┼──────────┼──────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │ 5 │ E │\n│\u001b[1m 2 \u001b[0m│ 2 │ 5 │ N │\n└──────┴──────────┴──────────┴──────────┘\n", + "text/plain": "Migrate(Dict(:Wolf => :Wolf, :V => :V, :Sheep => :Sheep, :E => :E), Dict(:wolf_loc => :wolf_loc, :src => :src, :sheep_loc => :sheep_loc, :tgt => :tgt), Main.var\"##232\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}, Main.var\"##232\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}, false)" + }, + "metadata": {}, + "execution_count": 2 + } + ], + "cell_type": "code", + "source": [ + "@present TheoryLV <: SchGraph begin\n", + " (Sheep, Wolf)::Ob\n", + " sheep_loc::Hom(Sheep, V)\n", + " wolf_loc::Hom(Wolf, V)\n", + "\n", + " (Dir, Eng)::AttrType\n", + " grass_eng::Attr(V, Eng)\n", + " sheep_eng::Attr(Sheep, Eng)\n", + " wolf_eng::Attr(Wolf, Eng)\n", + " sheep_dir::Attr(Sheep, Dir)\n", + " wolf_dir::Attr(Wolf, Dir)\n", + " dir::Attr(E, Dir)\n", + "end\n", + "\n", + "@present TheoryLV′ <: TheoryLV begin\n", + " Coord::AttrType\n", + " coord::Attr(V, Coord)\n", + "end\n", + "\n", + "to_graphviz(TheoryLV; prog=\"dot\")\n", + "\n", + "@acset_type LV_Generic(TheoryLV) <: HasGraph\n", + "const LV = LV_Generic{Symbol,Int}\n", + "\n", + "@acset_type LV′_Generic(TheoryLV′) <: HasGraph\n", + "const LV′ = LV′_Generic{Symbol,Int,Tuple{Int,Int}}\n", + "\n", + "F = Migrate(\n", + " Dict(:Sheep => :Wolf, :Wolf => :Sheep),\n", + " Dict([:sheep_loc => :wolf_loc, :wolf_loc => :sheep_loc,\n", + " :sheep_eng => :wolf_eng, :wolf_eng => :sheep_eng, :grass_eng => :grass_eng,\n", + " :sheep_dir => :wolf_dir, :wolf_dir => :sheep_dir,]), LV)\n", + "F2 = Migrate(\n", + " Dict(x => x for x in Symbol.(TheoryLV.generators[:Ob])),\n", + " Dict(x => x for x in Symbol.(TheoryLV.generators[:Hom])), LV′; delta=false)" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "Create an n × n grid with periodic boundary conditions. Edges in each cardinal\n", + "direction originate at every point\n", + "\n", + "(i,j+1) -> (i+1,j+1) -> ...\n", + " ↑ ↑\n", + "(i,j) -> (i+1,j) -> ..." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Main.var\"##232\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}} {V:4, E:16, Sheep:0, Wolf:0, Dir:0, Eng:0, Coord:0}\n┌───┬───────────┬────────┐\n│\u001b[1m V \u001b[0m│\u001b[1m grass_eng \u001b[0m│\u001b[1m coord \u001b[0m│\n├───┼───────────┼────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │ (0, 0) │\n│\u001b[1m 2 \u001b[0m│ 5 │ (0, 1) │\n│\u001b[1m 3 \u001b[0m│ 24 │ (1, 0) │\n│\u001b[1m 4 \u001b[0m│ 0 │ (1, 1) │\n└───┴───────────┴────────┘\n┌────┬─────┬─────┬─────┐\n│\u001b[1m E \u001b[0m│\u001b[1m src \u001b[0m│\u001b[1m tgt \u001b[0m│\u001b[1m dir \u001b[0m│\n├────┼─────┼─────┼─────┤\n│\u001b[1m 1 \u001b[0m│ 1 │ 3 │ E │\n│\u001b[1m 2 \u001b[0m│ 1 │ 3 │ W │\n│\u001b[1m 3 \u001b[0m│ 1 │ 2 │ N │\n│\u001b[1m 4 \u001b[0m│ 1 │ 2 │ S │\n│\u001b[1m 5 \u001b[0m│ 2 │ 4 │ E │\n│\u001b[1m 6 \u001b[0m│ 2 │ 4 │ W │\n│\u001b[1m 7 \u001b[0m│ 2 │ 1 │ N │\n│\u001b[1m 8 \u001b[0m│ 2 │ 1 │ S │\n│\u001b[1m 9 \u001b[0m│ 3 │ 1 │ E │\n│\u001b[1m 10 \u001b[0m│ 3 │ 1 │ W │\n│\u001b[1m 11 \u001b[0m│ 3 │ 4 │ N │\n│\u001b[1m 12 \u001b[0m│ 3 │ 4 │ S │\n│\u001b[1m 13 \u001b[0m│ 4 │ 2 │ E │\n│\u001b[1m 14 \u001b[0m│ 4 │ 2 │ W │\n│\u001b[1m 15 \u001b[0m│ 4 │ 3 │ N │\n│\u001b[1m 16 \u001b[0m│ 4 │ 3 │ S │\n└────┴─────┴─────┴─────┘\n", "text/html": [ "
\n", - "Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}} {V:4, E:16, Sheep:2, Wolf:2, Dir:0, Eng:0, Coord:0}\n", + "Main.var\"##232\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}} {V:4, E:16, Sheep:0, Wolf:0, Dir:0, Eng:0, Coord:0}\n", "\n", " \n", " \n", @@ -20,22 +152,22 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -148,158 +280,19 @@ " \n", " \n", "
121(0, 0)
205(0, 1)
3024(1, 0)
4260(1, 1)
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Sheepsheep_locsheep_engsheep_dir
135E
235W
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Wolfwolf_locwolf_engwolf_dir
115E
225N
\n", "
\n" ] }, "metadata": {}, - "execution_count": 1 + "execution_count": 3 } ], "cell_type": "code", "source": [ - "using Catlab, Catlab.Theories, Catlab.CategoricalAlgebra, Catlab.Graphs,\n", - " Catlab.Graphics, Catlab.WiringDiagrams, Catlab.Programs\n", - "using AlgebraicRewriting\n", - "using Random, Test, StructEquality\n", - "using Luxor\n", - "\n", - "Random.seed!(123);\n", - "\n", - "using Catlab.Graphics.Graphviz: Attributes, Statement, Node\n", - "using Catlab.Graphics.Graphviz\n", - "\n", - "import Catlab.CategoricalAlgebra: left, right\n", - "\n", - "function right(s::Symbol)\n", - " if s == :N\n", - " return :E\n", - " elseif s == :S\n", - " return :W\n", - " elseif s == :E\n", - " return :S\n", - " elseif s == :W\n", - " return :N\n", - " end\n", - "end\n", - "function left(s::Symbol)\n", - " if s == :N\n", - " return :W\n", - " elseif s == :S\n", - " return :E\n", - " elseif s == :E\n", - " return :N\n", - " elseif s == :W\n", - " return :S\n", - " end\n", - "end\n", - "\n", - "\"\"\"\n", - "Grass = 0 means alive grass, whereas grass > 0 represent a counter of time until\n", - "the grass is alive.\n", - "\n", - "Sheeps and wolves have position and direction, so we assign each an *edge*. We\n", - "assume a convention where the location of the something is the edge SOURCE.\n", - "\n", - "Dir is an attribute which can take values :N, :E, :W, and :S.\n", - "\"\"\"\n", - "@present TheoryLV <: SchGraph begin\n", - " (Sheep, Wolf)::Ob\n", - " sheep_loc::Hom(Sheep, V)\n", - " wolf_loc::Hom(Wolf, V)\n", - "\n", - " (Dir, Eng)::AttrType\n", - " grass_eng::Attr(V, Eng)\n", - " sheep_eng::Attr(Sheep, Eng)\n", - " wolf_eng::Attr(Wolf, Eng)\n", - " sheep_dir::Attr(Sheep, Dir)\n", - " wolf_dir::Attr(Wolf, Dir)\n", - " dir::Attr(E, Dir)\n", - "end\n", - "\n", - "@present TheoryLV′ <: TheoryLV begin\n", - " Coord::AttrType\n", - " coord::Attr(V, Coord)\n", - "end\n", - "\n", - "to_graphviz(TheoryLV; prog=\"dot\")\n", - "\n", - "@acset_type LV_Generic(TheoryLV) <: HasGraph\n", - "const LV = LV_Generic{Symbol,Int}\n", - "\n", - "@acset_type LV′_Generic(TheoryLV′) <: HasGraph\n", - "const LV′ = LV′_Generic{Symbol,Int,Tuple{Int,Int}}\n", - "\n", - "F = Migrate(\n", - " Dict(:Sheep => :Wolf, :Wolf => :Sheep),\n", - " Dict([:sheep_loc => :wolf_loc, :wolf_loc => :sheep_loc,\n", - " :sheep_eng => :wolf_eng, :wolf_eng => :sheep_eng, :grass_eng => :grass_eng,\n", - " :sheep_dir => :wolf_dir, :wolf_dir => :sheep_dir,]), LV)\n", - "F2 = Migrate(\n", - " Dict(x => x for x in Symbol.(TheoryLV.generators[:Ob])),\n", - " Dict(x => x for x in Symbol.(TheoryLV.generators[:Hom])), LV′; delta=false)\n", - "\n", - "\"\"\"\n", - "Create a nxn grid with periodic boundary conditions. Edges in each cardinal\n", - "direction originate at every point\n", - "\n", - "\n", - "(i,j+1) -> (i+1,j+1) -> ...\n", - " ↑ ↑\n", - "(i,j) -> (i+1,j) -> ...\n", - "\n", - "\"\"\"\n", "function create_grid(n::Int)\n", " lv = LV′()\n", " coords = Dict()\n", - " for i in 0:n-1\n", + " for i in 0:n-1 # Initialize grass 50% green, 50% uniformly between 0-30\n", " for j in 0:n-1\n", " coords[i=>j] = add_part!(lv, :V; grass_eng=max(0, rand(-30:30)), coord=(i, j))\n", " end\n", @@ -315,14 +308,33 @@ " return lv\n", "end\n", "\n", - "g = create_grid(2)\n", - "\n", - "\n", - "\"\"\"\n", + "g = create_grid(2)" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ "`n` is the length of the grid.\n", "`sheep` and `wolves` are the fraction of spaces that are\n", - "populated with that animal\n", - "\"\"\"\n", + "populated with that animal" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "supscript (generic function with 1 method)" + }, + "metadata": {}, + "execution_count": 4 + } + ], + "cell_type": "code", + "source": [ "function initialize(n::Int, sheep::Float64, wolves::Float64)::LV′\n", " grid = create_grid(n)\n", " args = [(sheep, :Sheep, :sheep_loc, :sheep_eng, :sheep_dir),\n", @@ -342,9 +354,223 @@ " '1' => '¹', '2' => '²', '3' => '³', '4' => '⁴', '5' => '⁵', '6' => '⁶', '7' => '⁷', '8' => '⁸',\n", " '9' => '⁹', '0' => '⁰', 'x' => 'ˣ', 'y' => 'ʸ', 'z' => 'ᶻ', 'a' => 'ᵃ', 'b' => 'ᵇ', 'c' => 'ᶜ',\n", " 'd' => 'ᵈ'])\n", - "supscript(x::String) = join([get(supscript_d, c, c) for c in x])\n", - "\n", - "\"\"\"Visualize a LV\"\"\"\n", + "supscript(x::String) = join([get(supscript_d, c, c) for c in x])" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "Visualize a LV" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Main.var\"##232\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}} {V:4, E:16, Sheep:2, Wolf:2, Dir:0, Eng:0, Coord:0}\n┌───┬───────────┬────────┐\n│\u001b[1m V \u001b[0m│\u001b[1m grass_eng \u001b[0m│\u001b[1m coord \u001b[0m│\n├───┼───────────┼────────┤\n│\u001b[1m 1 \u001b[0m│ 2 │ (0, 0) │\n│\u001b[1m 2 \u001b[0m│ 0 │ (0, 1) │\n│\u001b[1m 3 \u001b[0m│ 0 │ (1, 0) │\n│\u001b[1m 4 \u001b[0m│ 26 │ (1, 1) │\n└───┴───────────┴────────┘\n┌────┬─────┬─────┬─────┐\n│\u001b[1m E \u001b[0m│\u001b[1m src \u001b[0m│\u001b[1m tgt \u001b[0m│\u001b[1m dir \u001b[0m│\n├────┼─────┼─────┼─────┤\n│\u001b[1m 1 \u001b[0m│ 1 │ 3 │ E │\n│\u001b[1m 2 \u001b[0m│ 1 │ 3 │ W │\n│\u001b[1m 3 \u001b[0m│ 1 │ 2 │ N │\n│\u001b[1m 4 \u001b[0m│ 1 │ 2 │ S │\n│\u001b[1m 5 \u001b[0m│ 2 │ 4 │ E │\n│\u001b[1m 6 \u001b[0m│ 2 │ 4 │ W │\n│\u001b[1m 7 \u001b[0m│ 2 │ 1 │ N │\n│\u001b[1m 8 \u001b[0m│ 2 │ 1 │ S │\n│\u001b[1m 9 \u001b[0m│ 3 │ 1 │ E │\n│\u001b[1m 10 \u001b[0m│ 3 │ 1 │ W │\n│\u001b[1m 11 \u001b[0m│ 3 │ 4 │ N │\n│\u001b[1m 12 \u001b[0m│ 3 │ 4 │ S │\n│\u001b[1m 13 \u001b[0m│ 4 │ 2 │ E │\n│\u001b[1m 14 \u001b[0m│ 4 │ 2 │ W │\n│\u001b[1m 15 \u001b[0m│ 4 │ 3 │ N │\n│\u001b[1m 16 \u001b[0m│ 4 │ 3 │ S │\n└────┴─────┴─────┴─────┘\n┌───────┬───────────┬───────────┬───────────┐\n│\u001b[1m Sheep \u001b[0m│\u001b[1m sheep_loc \u001b[0m│\u001b[1m sheep_eng \u001b[0m│\u001b[1m sheep_dir \u001b[0m│\n├───────┼───────────┼───────────┼───────────┤\n│\u001b[1m 1 \u001b[0m│ 3 │ 5 │ E │\n│\u001b[1m 2 \u001b[0m│ 3 │ 5 │ W │\n└───────┴───────────┴───────────┴───────────┘\n┌──────┬──────────┬──────────┬──────────┐\n│\u001b[1m Wolf \u001b[0m│\u001b[1m wolf_loc \u001b[0m│\u001b[1m wolf_eng \u001b[0m│\u001b[1m wolf_dir \u001b[0m│\n├──────┼──────────┼──────────┼──────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │ 5 │ E │\n│\u001b[1m 2 \u001b[0m│ 2 │ 5 │ N │\n└──────┴──────────┴──────────┴──────────┘\n", + "text/html": [ + "
\n", + "Main.var\"##232\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}} {V:4, E:16, Sheep:2, Wolf:2, Dir:0, Eng:0, Coord:0}\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Vgrass_engcoord
12(0, 0)
20(0, 1)
30(1, 0)
426(1, 1)
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Esrctgtdir
113E
213W
312N
412S
524E
624W
721N
821S
931E
1031W
1134N
1234S
1342E
1442W
1543N
1643S
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Sheepsheep_locsheep_engsheep_dir
135E
235W
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Wolfwolf_locwolf_engwolf_dir
115E
225N
\n", + "
\n" + ] + }, + "metadata": {}, + "execution_count": 5 + } + ], + "cell_type": "code", + "source": [ "function view_LV(p::ACSetTransformation, pth=tempname(); name=\"G\", title=\"\")\n", " if nparts(dom(p), :Wolf) == 1\n", " star = :Wolf => p[:Wolf](1)\n", @@ -404,19 +630,12 @@ "i1 = initialize(2, 0.5, 0.5)" ], "metadata": {}, - "execution_count": 1 - }, - { - "cell_type": "markdown", - "source": [ - "view_LV(i1)" - ], - "metadata": {} + "execution_count": 5 }, { "cell_type": "markdown", "source": [ - "RULES" + "# Rules" ], "metadata": {} }, @@ -424,12 +643,11 @@ "outputs": [], "cell_type": "code", "source": [ - "#######\n", "yLV = yoneda_cache(LV; clear=true);\n", "yLV = yoneda_cache(LV; clear=false);" ], "metadata": {}, - "execution_count": 2 + "execution_count": 6 }, { "cell_type": "markdown", @@ -443,15 +661,15 @@ { "output_type": "execute_result", "data": { - "text/plain": "Main.var\"##299\".LV_Generic{Symbol, Int64} {V:0, E:0, Sheep:0, Wolf:0, Dir:0, Eng:0}\n", + "text/plain": "Main.var\"##232\".LV_Generic{Symbol, Int64} {V:0, E:0, Sheep:0, Wolf:0, Dir:0, Eng:0}\n", "text/html": [ "
\n", - "Main.var\"##299\".LV_Generic{Symbol, Int64} {V:0, E:0, Sheep:0, Wolf:0, Dir:0, Eng:0}\n", + "Main.var\"##232\".LV_Generic{Symbol, Int64} {V:0, E:0, Sheep:0, Wolf:0, Dir:0, Eng:0}\n", "
\n" ] }, "metadata": {}, - "execution_count": 3 + "execution_count": 7 } ], "cell_type": "code", @@ -459,7 +677,7 @@ "I = LV()" ], "metadata": {}, - "execution_count": 3 + "execution_count": 7 }, { "cell_type": "markdown", @@ -473,10 +691,10 @@ { "output_type": "execute_result", "data": { - "text/plain": "Main.var\"##299\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:1, Wolf:0, Dir:1, Eng:2}\n┌───┬────────────┐\n│\u001b[1m V \u001b[0m│\u001b[1m grass_eng \u001b[0m│\n├───┼────────────┤\n│\u001b[1m 1 \u001b[0m│ AttrVar(2) │\n└───┴────────────┘\n┌───────┬───────────┬────────────┬────────────┐\n│\u001b[1m Sheep \u001b[0m│\u001b[1m sheep_loc \u001b[0m│\u001b[1m sheep_eng \u001b[0m│\u001b[1m sheep_dir \u001b[0m│\n├───────┼───────────┼────────────┼────────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │ AttrVar(1) │ AttrVar(1) │\n└───────┴───────────┴────────────┴────────────┘\n", + "text/plain": "Main.var\"##232\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:1, Wolf:0, Dir:1, Eng:2}\n┌───┬────────────┐\n│\u001b[1m V \u001b[0m│\u001b[1m grass_eng \u001b[0m│\n├───┼────────────┤\n│\u001b[1m 1 \u001b[0m│ AttrVar(2) │\n└───┴────────────┘\n┌───────┬───────────┬────────────┬────────────┐\n│\u001b[1m Sheep \u001b[0m│\u001b[1m sheep_loc \u001b[0m│\u001b[1m sheep_eng \u001b[0m│\u001b[1m sheep_dir \u001b[0m│\n├───────┼───────────┼────────────┼────────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │ AttrVar(1) │ AttrVar(1) │\n└───────┴───────────┴────────────┴────────────┘\n", "text/html": [ "
\n", - "Main.var\"##299\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:1, Wolf:0, Dir:1, Eng:2}\n", + "Main.var\"##232\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:1, Wolf:0, Dir:1, Eng:2}\n", "\n", " \n", " \n", @@ -513,7 +731,7 @@ ] }, "metadata": {}, - "execution_count": 4 + "execution_count": 8 } ], "cell_type": "code", @@ -523,7 +741,7 @@ "end" ], "metadata": {}, - "execution_count": 4 + "execution_count": 8 }, { "cell_type": "markdown", @@ -537,10 +755,10 @@ { "output_type": "execute_result", "data": { - "text/plain": "Main.var\"##299\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:0, Wolf:1, Dir:1, Eng:2}\n┌───┬────────────┐\n│\u001b[1m V \u001b[0m│\u001b[1m grass_eng \u001b[0m│\n├───┼────────────┤\n│\u001b[1m 1 \u001b[0m│ AttrVar(2) │\n└───┴────────────┘\n┌──────┬──────────┬────────────┬────────────┐\n│\u001b[1m Wolf \u001b[0m│\u001b[1m wolf_loc \u001b[0m│\u001b[1m wolf_eng \u001b[0m│\u001b[1m wolf_dir \u001b[0m│\n├──────┼──────────┼────────────┼────────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │ AttrVar(1) │ AttrVar(1) │\n└──────┴──────────┴────────────┴────────────┘\n", + "text/plain": "Main.var\"##232\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:0, Wolf:1, Dir:1, Eng:2}\n┌───┬────────────┐\n│\u001b[1m V \u001b[0m│\u001b[1m grass_eng \u001b[0m│\n├───┼────────────┤\n│\u001b[1m 1 \u001b[0m│ AttrVar(2) │\n└───┴────────────┘\n┌──────┬──────────┬────────────┬────────────┐\n│\u001b[1m Wolf \u001b[0m│\u001b[1m wolf_loc \u001b[0m│\u001b[1m wolf_eng \u001b[0m│\u001b[1m wolf_dir \u001b[0m│\n├──────┼──────────┼────────────┼────────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │ AttrVar(1) │ AttrVar(1) │\n└──────┴──────────┴────────────┴────────────┘\n", "text/html": [ "
\n", - "Main.var\"##299\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:0, Wolf:1, Dir:1, Eng:2}\n", + "Main.var\"##232\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:0, Wolf:1, Dir:1, Eng:2}\n", "
\n", " \n", " \n", @@ -577,7 +795,7 @@ ] }, "metadata": {}, - "execution_count": 5 + "execution_count": 9 } ], "cell_type": "code", @@ -585,7 +803,7 @@ "W = F(S)" ], "metadata": {}, - "execution_count": 5 + "execution_count": 9 }, { "cell_type": "markdown", @@ -595,31 +813,22 @@ "metadata": {} }, { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "Names{Main.var\"##299\".LV_Generic{Symbol, Int64}}(Dict{String, Main.var\"##299\".LV_Generic{Symbol, Int64}}(\"S\" => Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[], \"W\" => Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[], \"G\" => Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[], \"\" => Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]), Dict{Main.var\"##299\".LV_Generic{Symbol, Int64}, String}(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[] => \"G\", Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[] => \"W\", Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[] => \"S\", Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[] => \"\"))" - }, - "metadata": {}, - "execution_count": 6 - } - ], + "outputs": [], "cell_type": "code", "source": [ "G = @acset_colim yLV begin\n", " v::V\n", "end\n", "\n", - "N = Names(Dict(\"W\" => W, \"S\" => S, \"G\" => G, \"\" => I))" + "N = Names(Dict(\"W\" => W, \"S\" => S, \"G\" => G, \"\" => I));" ], "metadata": {}, - "execution_count": 6 + "execution_count": 10 }, { "cell_type": "markdown", "source": [ - "Rotating" + "## Rotating" ], "metadata": {} }, @@ -628,10 +837,10 @@ { "output_type": "execute_result", "data": { - "text/plain": "Schedule(WiringDiagram{AlgebraicRewriting.Schedules.Theories.ThTracedMonoidalWithBidiagonals}([Main.var\"##299\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:1, Wolf:0, Dir:1, Eng:2}], [Main.var\"##299\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:1, Wolf:0, Dir:1, Eng:2}], \n[ -2 => {inputs},\n -1 => {outputs},\n 1 => Box(\"turn_right\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]) ],\n[ Wire((-2,1) => (1,1)),\n Wire((1,1) => (-1,1)),\n Wire((1,2) => (-1,1)) ]), compose(turn_right,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])))" + "text/plain": "Schedule(WiringDiagram{AlgebraicRewriting.Schedules.Theories.ThTracedMonoidalWithBidiagonals.Meta.T}([Main.var\"##232\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:1, Wolf:0, Dir:1, Eng:2}], [Main.var\"##232\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:1, Wolf:0, Dir:1, Eng:2}], \n[ -2 => {inputs},\n -1 => {outputs},\n 1 => Box(\"turn_right\", [Main.var\"##232\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], [Main.var\"##232\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##232\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]) ],\n[ Wire((-2,1) => (1,1)),\n Wire((1,1) => (-1,1)),\n Wire((1,2) => (-1,1)) ]), compose(turn_right,mmerge(Main.var\"##232\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])))" }, "metadata": {}, - "execution_count": 7 + "execution_count": 11 } ], "cell_type": "code", @@ -643,62 +852,12 @@ "sheep_rotate_r = tryrule(RuleApp(:turn_right, rr, S))" ], "metadata": {}, - "execution_count": 7 - }, - { - "cell_type": "markdown", - "source": [ - "we can imagine executing these rules in sequence or in parallel" - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "Schedule(WiringDiagram{AlgebraicRewriting.Schedules.Theories.ThTracedMonoidalWithBidiagonals}([Main.var\"##299\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:1, Wolf:0, Dir:1, Eng:2}], [Main.var\"##299\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:1, Wolf:0, Dir:1, Eng:2}], \n[ -2 => {inputs},\n -1 => {outputs},\n 1 => Box(\"turn_left\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]),\n 2 => Box(\"turn_right\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]) ],\n[ Wire((-2,1) => (1,1)),\n Wire((1,2) => (2,1)),\n Wire((1,1) => (2,1)),\n Wire((2,2) => (-1,1)),\n Wire((2,1) => (-1,1)) ]), compose(compose(turn_left,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),compose(turn_right,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))))" - }, - "metadata": {}, - "execution_count": 8 - } - ], - "cell_type": "code", - "source": [ - "seq_sched = (sheep_rotate_l ⋅ sheep_rotate_r)" - ], - "metadata": {}, - "execution_count": 8 - }, - { - "cell_type": "markdown", - "source": [ - "view_sched(seq_sched; names=N)" - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "Schedule(WiringDiagram{AlgebraicRewriting.Schedules.Theories.ThTracedMonoidalWithBidiagonals}([Main.var\"##299\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:1, Wolf:0, Dir:1, Eng:2},Main.var\"##299\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:1, Wolf:0, Dir:1, Eng:2}], [Main.var\"##299\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:1, Wolf:0, Dir:1, Eng:2},Main.var\"##299\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:1, Wolf:0, Dir:1, Eng:2}], \n[ -2 => {inputs},\n -1 => {outputs},\n 1 => Box(\"turn_left\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]),\n 2 => Box(\"turn_right\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]) ],\n[ Wire((-2,1) => (1,1)),\n Wire((-2,2) => (2,1)),\n Wire((2,1) => (-1,2)),\n Wire((2,2) => (-1,2)),\n Wire((1,1) => (-1,1)),\n Wire((1,2) => (-1,1)) ]), otimes(compose(turn_left,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),compose(turn_right,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))))" - }, - "metadata": {}, - "execution_count": 9 - } - ], - "cell_type": "code", - "source": [ - "par_sched = (sheep_rotate_l ⊗ sheep_rotate_r)" - ], - "metadata": {}, - "execution_count": 9 + "execution_count": 11 }, { "cell_type": "markdown", "source": [ - "view_sched(par_sched; names=N)" + "We can imagine executing these rules in sequence or in parallel" ], "metadata": {} }, @@ -710,11 +869,14 @@ "text/plain": "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" }, "metadata": {}, - "execution_count": 10 + "execution_count": 12 } ], "cell_type": "code", "source": [ + "seq_sched = (sheep_rotate_l ⋅ sheep_rotate_r)\n", + "par_sched = (sheep_rotate_l ⊗ sheep_rotate_r)\n", + "\n", "begin\n", " ex = @acset_colim yLV begin\n", " e::E\n", @@ -728,12 +890,12 @@ "end" ], "metadata": {}, - "execution_count": 10 + "execution_count": 12 }, { "cell_type": "markdown", "source": [ - "Moving forward" + "## Moving forward" ], "metadata": {} }, @@ -745,7 +907,7 @@ "text/plain": "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" }, "metadata": {}, - "execution_count": 11 + "execution_count": 13 } ], "cell_type": "code", @@ -804,18 +966,12 @@ "end" ], "metadata": {}, - "execution_count": 11 - }, - { - "cell_type": "markdown", - "source": [ - "Eat grass + 4eng" - ], - "metadata": {} + "execution_count": 13 }, { "cell_type": "markdown", "source": [ + "Eat grass + 4eng\n", "Grass is at 0 - meaning it's ready to be eaten" ], "metadata": {} @@ -828,7 +984,7 @@ "text/plain": "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" }, "metadata": {}, - "execution_count": 12 + "execution_count": 14 } ], "cell_type": "code", @@ -864,7 +1020,7 @@ "end" ], "metadata": {}, - "execution_count": 12 + "execution_count": 14 }, { "cell_type": "markdown", @@ -878,10 +1034,10 @@ { "output_type": "execute_result", "data": { - "text/plain": "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" + "text/plain": "Schedule(WiringDiagram{AlgebraicRewriting.Schedules.Theories.ThTracedMonoidalWithBidiagonals.Meta.T}([Main.var\"##232\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:0, Wolf:1, Dir:1, Eng:2}], [Main.var\"##232\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:0, Wolf:1, Dir:1, Eng:2}], \n[ -2 => {inputs},\n -1 => {outputs},\n 1 => Box(\"Wolf_eat\", [Main.var\"##232\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]], [Main.var\"##232\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[],Main.var\"##232\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]]) ],\n[ Wire((-2,1) => (1,1)),\n Wire((1,1) => (-1,1)),\n Wire((1,2) => (-1,1)) ]), compose(Wolf_eat,mmerge(Main.var\"##232\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[])))" }, "metadata": {}, - "execution_count": 13 + "execution_count": 15 } ], "cell_type": "code", @@ -893,43 +1049,64 @@ "end\n", "\n", "we_rule = Rule(homomorphism(W, w_eat_l), id(W); expr=(Eng=[vs -> vs[3] + 20, vs -> vs[1]],))\n", - "wolf_eat = tryrule(RuleApp(:Wolf_eat, we_rule, W))\n", - "\n", - "begin # test\n", - " ex = @acset LV begin\n", - " Sheep = 1\n", - " Wolf = 1\n", - " V = 3\n", - " E = 2\n", - " src = [1, 2]\n", - " tgt = [2, 3]\n", - " sheep_loc = 2\n", - " sheep_eng = [3]\n", - " grass_eng = [9, 10, 11]\n", - " dir = fill(:N, 2)\n", - " sheep_dir = [:N]\n", - " wolf_loc = [2]\n", - " wolf_eng = [16]\n", - " wolf_dir = [:S]\n", - " end\n", - " expected = @acset LV begin\n", - " Wolf = 1\n", - " V = 3\n", - " E = 2\n", - " src = [1, 2]\n", - " tgt = [2, 3]\n", - " grass_eng = [9, 10, 11]\n", - " dir = fill(:N, 2)\n", - " sheep_dir = [:N]\n", - " wolf_loc = [2]\n", - " wolf_eng = [36]\n", - " wolf_dir = [:S]\n", - " end\n", - " @test is_isomorphic(rewrite(we_rule, ex), expected)\n", - "end" + "wolf_eat = tryrule(RuleApp(:Wolf_eat, we_rule, W))" ], "metadata": {}, - "execution_count": 13 + "execution_count": 15 + }, + { + "cell_type": "markdown", + "source": [ + "### A test" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" + }, + "metadata": {}, + "execution_count": 16 + } + ], + "cell_type": "code", + "source": [ + "ex = @acset LV begin\n", + " Sheep = 1\n", + " Wolf = 1\n", + " V = 3\n", + " E = 2\n", + " src = [1, 2]\n", + " tgt = [2, 3]\n", + " sheep_loc = 2\n", + " sheep_eng = [3]\n", + " grass_eng = [9, 10, 11]\n", + " dir = fill(:N, 2)\n", + " sheep_dir = [:N]\n", + " wolf_loc = [2]\n", + " wolf_eng = [16]\n", + " wolf_dir = [:S]\n", + "end\n", + "expected = @acset LV begin\n", + " Wolf = 1\n", + " V = 3\n", + " E = 2\n", + " src = [1, 2]\n", + " tgt = [2, 3]\n", + " grass_eng = [9, 10, 11]\n", + " dir = fill(:N, 2)\n", + " sheep_dir = [:N]\n", + " wolf_loc = [2]\n", + " wolf_eng = [36]\n", + " wolf_dir = [:S]\n", + "end\n", + "@test is_isomorphic(rewrite(we_rule, ex), expected)" + ], + "metadata": {}, + "execution_count": 16 }, { "cell_type": "markdown", @@ -946,7 +1123,7 @@ "text/plain": "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" }, "metadata": {}, - "execution_count": 14 + "execution_count": 17 } ], "cell_type": "code", @@ -969,12 +1146,12 @@ "end" ], "metadata": {}, - "execution_count": 14 + "execution_count": 17 }, { "cell_type": "markdown", "source": [ - "reproduction" + "Reproduction" ], "metadata": {} }, @@ -986,7 +1163,7 @@ "text/plain": "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" }, "metadata": {}, - "execution_count": 15 + "execution_count": 18 } ], "cell_type": "code", @@ -1023,7 +1200,7 @@ "end" ], "metadata": {}, - "execution_count": 15 + "execution_count": 18 }, { "cell_type": "markdown", @@ -1040,13 +1217,13 @@ "text/plain": "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" }, "metadata": {}, - "execution_count": 16 + "execution_count": 19 } ], "cell_type": "code", "source": [ "g_inc_n = deepcopy(G)\n", - "set_subpart!(g_inc_n, 1, :grass_eng, 0);\n", + "set_subpart!(g_inc_n, 1, :grass_eng, 0)\n", "rem_part!(g_inc_n, :Eng, 1)\n", "\n", "g_inc_rule = Rule(id(G), id(G);\n", @@ -1055,36 +1232,34 @@ "g_inc = RuleApp(:GrassIncrements, g_inc_rule, G) |> tryrule\n", "\n", "\n", - "begin # test\n", - " ex = @acset LV begin\n", - " Sheep = 1\n", - " V = 3\n", - " E = 2\n", - " src = [1, 2]\n", - " tgt = [2, 3]\n", - " sheep_loc = 2\n", - " sheep_eng = [3]\n", - " grass_eng = [1, 10, 2]\n", - " dir = fill(:N, 2)\n", - " sheep_dir = [:N]\n", - " end\n", - " expected = @acset LV begin\n", - " Sheep = 1\n", - " V = 3\n", - " E = 2\n", - " src = [1, 2]\n", - " tgt = [2, 3]\n", - " sheep_loc = 2\n", - " sheep_eng = [3]\n", - " grass_eng = [0, 10, 2]\n", - " dir = fill(:N, 2)\n", - " sheep_dir = [:N]\n", - " end\n", - " @test is_isomorphic(rewrite(g_inc_rule, ex), expected)\n", - "end" + "ex = @acset LV begin\n", + " Sheep = 1\n", + " V = 3\n", + " E = 2\n", + " src = [1, 2]\n", + " tgt = [2, 3]\n", + " sheep_loc = 2\n", + " sheep_eng = [3]\n", + " grass_eng = [1, 10, 2]\n", + " dir = fill(:N, 2)\n", + " sheep_dir = [:N]\n", + "end\n", + "expected = @acset LV begin\n", + " Sheep = 1\n", + " V = 3\n", + " E = 2\n", + " src = [1, 2]\n", + " tgt = [2, 3]\n", + " sheep_loc = 2\n", + " sheep_eng = [3]\n", + " grass_eng = [0, 10, 2]\n", + " dir = fill(:N, 2)\n", + " sheep_dir = [:N]\n", + "end\n", + "@test is_isomorphic(rewrite(g_inc_rule, ex), expected)" ], "metadata": {}, - "execution_count": 16 + "execution_count": 19 }, { "cell_type": "markdown", @@ -1096,38 +1271,6 @@ { "outputs": [], "cell_type": "code", - "source": [ - "##################" - ], - "metadata": {}, - "execution_count": 17 - }, - { - "cell_type": "markdown", - "source": [ - "Stuff that happens once per sheep" - ], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ - "25% chance of left turn, 25% chance of right turn, 50% stay in same direction" - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "Schedule(WiringDiagram{AlgebraicRewriting.Schedules.Theories.ThTracedMonoidalWithBidiagonals}([Main.var\"##299\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:0, Wolf:1, Dir:1, Eng:2}], [Main.var\"##299\".LV_Generic{Symbol, Int64} {V:0, E:0, Sheep:0, Wolf:0, Dir:0, Eng:0}], \n[ -2 => {inputs},\n -1 => {outputs},\n 1 => Box(\"Wolf_eat\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]]),\n 2 => Box(\"turn\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]]),\n 3 => Box(\"turn_left\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]]),\n 4 => Box(\"turn_right\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]]),\n 5 => Box(\"move_fwd\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]]),\n 6 => Box(\"reprod\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]]),\n 7 => Box(\"reproduce\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]]),\n 8 => Box(\"starve\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]]),\n 9 => Box(\"\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]) ],\n[ Wire((-2,1) => (1,1)),\n Wire((7,1) => (8,1)),\n Wire((2,3) => (4,1)),\n Wire((2,1) => (3,1)),\n Wire((6,2) => (8,1)),\n Wire((1,1) => (2,1)),\n Wire((1,2) => (2,1)),\n Wire((2,2) => (5,1)),\n Wire((3,1) => (5,1)),\n Wire((3,2) => (5,1)),\n Wire((4,1) => (5,1)),\n Wire((4,2) => (5,1)),\n Wire((7,2) => (8,1)),\n Wire((6,1) => (7,1)),\n Wire((8,2) => (9,1)),\n Wire((5,1) => (6,1)),\n Wire((5,2) => (6,1)),\n Wire((8,1) => (-1,1)),\n Wire((9,1) => (-1,1)) ]), compose(compose(Wolf_eat,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[])),trace(munit(),Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],compose(compose(compose(compose(compose(compose(turn,otimes(compose(turn_left,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),compose(turn_right,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])))),otimes(braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),compose(compose(compose(otimes(mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),compose(move_fwd,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),reprod)),otimes(compose(reproduce,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),compose(mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),compose(compose(starve,otimes(id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),)),mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])))))))" - }, - "metadata": {}, - "execution_count": 18 - } - ], - "cell_type": "code", "source": [ "general = mk_sched((;), (init=:S,), N, (\n", " turn=const_cond([1.0, 2.0, 1.0], S; name=:turn),\n", @@ -1144,11 +1287,11 @@ " return starve([repro(out_repro), out_no_repro])\n", " end)\n", "\n", - "sheep = sheep_eat ⋅ general # once per sheep\n", - "wolf = wolf_eat ⋅ F(general) # once per wolf" + "sheep = sheep_eat ⋅ general; # once per sheep\n", + "wolf = wolf_eat ⋅ F(general); # once per wolf" ], "metadata": {}, - "execution_count": 18 + "execution_count": 20 }, { "cell_type": "markdown", @@ -1158,76 +1301,22 @@ "metadata": {} }, { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "Schedule(WiringDiagram{AlgebraicRewriting.Schedules.Theories.ThTracedMonoidalWithBidiagonals}([Main.var\"##299\".LV_Generic{Symbol, Int64} {V:0, E:0, Sheep:0, Wolf:0, Dir:0, Eng:0}], [Main.var\"##299\".LV_Generic{Symbol, Int64} {V:0, E:0, Sheep:0, Wolf:0, Dir:0, Eng:0}], \n[ -2 => {inputs},\n -1 => {outputs},\n 1 => Box(\"Query sheep\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]),\n 2 => Box(\"Fail\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], []),\n 3 => Box(\"Sheep_eat\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]),\n 4 => Box(\"turn\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]),\n 5 => Box(\"turn_left\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]),\n 6 => Box(\"turn_right\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]),\n 7 => Box(\"move_fwd\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]),\n 8 => Box(\"reprod\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]),\n 9 => Box(\"reproduce\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]),\n 10 => Box(\"starve\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]),\n 11 => Box(\"\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]),\n 12 => Box(\"Query wolves\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]),\n 13 => Box(\"Fail\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], []),\n 14 => Box(\"Wolf_eat\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]]),\n 15 => Box(\"turn\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]]),\n 16 => Box(\"turn_left\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]]),\n 17 => Box(\"turn_right\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]]),\n 18 => Box(\"move_fwd\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]]),\n 19 => Box(\"reprod\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]]),\n 20 => Box(\"reproduce\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]]),\n 21 => Box(\"starve\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]]),\n 22 => Box(\"\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]),\n 23 => Box(\"Query grass\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]),\n 24 => Box(\"Fail\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], []),\n 25 => Box(\"GrassIncrements\", [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], [Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]) ],\n[ Wire((-2,1) => (1,1)),\n Wire((23,2) => (25,1)),\n Wire((16,2) => (18,1)),\n Wire((10,2) => (11,1)),\n Wire((7,1) => (8,1)),\n Wire((7,2) => (8,1)),\n Wire((6,2) => (7,1)),\n Wire((11,1) => (1,2)),\n Wire((10,1) => (1,2)),\n Wire((9,2) => (10,1)),\n Wire((1,3) => (2,1)),\n Wire((8,1) => (9,1)),\n Wire((1,2) => (3,1)),\n Wire((9,1) => (10,1)),\n Wire((4,3) => (6,1)),\n Wire((4,1) => (5,1)),\n Wire((8,2) => (10,1)),\n Wire((3,1) => (4,1)),\n Wire((3,2) => (4,1)),\n Wire((4,2) => (7,1)),\n Wire((5,1) => (7,1)),\n Wire((5,2) => (7,1)),\n Wire((6,1) => (7,1)),\n Wire((17,1) => (18,1)),\n Wire((16,1) => (18,1)),\n Wire((1,1) => (12,1)),\n Wire((21,2) => (22,1)),\n Wire((18,1) => (19,1)),\n Wire((18,2) => (19,1)),\n Wire((17,2) => (18,1)),\n Wire((22,1) => (12,2)),\n Wire((21,1) => (12,2)),\n Wire((20,2) => (21,1)),\n Wire((12,3) => (13,1)),\n Wire((19,1) => (20,1)),\n Wire((12,2) => (14,1)),\n Wire((20,1) => (21,1)),\n Wire((15,3) => (17,1)),\n Wire((15,1) => (16,1)),\n Wire((19,2) => (21,1)),\n Wire((14,1) => (15,1)),\n Wire((14,2) => (15,1)),\n Wire((15,2) => (18,1)),\n Wire((25,1) => (23,2)),\n Wire((25,2) => (23,2)),\n Wire((12,1) => (23,1)),\n Wire((23,3) => (24,1)),\n Wire((23,1) => (-1,1)) ]), compose(compose(trace(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],otimes(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],munit()),compose(braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),compose(compose(sheep,otimes(braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),otimes(compose(compose(Sheep_eat,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),trace(munit(),Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],compose(compose(compose(compose(compose(compose(turn,otimes(compose(turn_left,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),compose(turn_right,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])))),otimes(braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),compose(compose(compose(otimes(mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),compose(move_fwd,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),reprod)),otimes(compose(reproduce,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),compose(mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),compose(compose(starve,otimes(id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),)),mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])))))),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),Fail)))),trace(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],otimes(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],munit()),compose(braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),compose(compose(wolves,otimes(braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),otimes(compose(compose(Wolf_eat,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[])),trace(munit(),Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],compose(compose(compose(compose(compose(compose(turn,otimes(compose(turn_left,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),compose(turn_right,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])))),otimes(braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),compose(compose(compose(otimes(mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),compose(move_fwd,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),reprod)),otimes(compose(reproduce,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),compose(mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),compose(compose(starve,otimes(id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),)),mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])))))),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),Fail))))),trace(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],otimes(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],munit()),compose(braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),compose(compose(grass,otimes(braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),otimes(compose(GrassIncrements,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),Fail))))))" - }, - "metadata": {}, - "execution_count": 19 - } - ], + "outputs": [], "cell_type": "code", "source": [ "cycle = (agent(sheep; n=:sheep, ret=I)\n", " ⋅\n", " agent(wolf; n=:wolves, ret=I)\n", " ⋅\n", - " agent(g_inc; n=:grass))" - ], - "metadata": {}, - "execution_count": 19 - }, - { - "cell_type": "markdown", - "source": [ - "wrap in a while loop" - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "Schedule(WiringDiagram{AlgebraicRewriting.Schedules.Theories.ThTracedMonoidalWithBidiagonals}([Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}} {V:0, E:0, Sheep:0, Wolf:0, Dir:0, Eng:0, Coord:0}], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}} {V:0, E:0, Sheep:0, Wolf:0, Dir:0, Eng:0, Coord:0}], \n[ -2 => {inputs},\n -1 => {outputs},\n 1 => Box(\"while\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[]]),\n 2 => Box(\"Query sheep\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[]]),\n 3 => Box(\"Fail\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[]], []),\n 4 => Box(\"Sheep_eat\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]]),\n 5 => Box(\"turn\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]]),\n 6 => Box(\"turn_left\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]]),\n 7 => Box(\"turn_right\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]]),\n 8 => Box(\"move_fwd\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]]),\n 9 => Box(\"reprod\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]]),\n 10 => Box(\"reproduce\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]]),\n 11 => Box(\"starve\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]]),\n 12 => Box(\"\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[]]),\n 13 => Box(\"Query wolves\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[]]),\n 14 => Box(\"Fail\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[]], []),\n 15 => Box(\"Wolf_eat\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]]),\n 16 => Box(\"turn\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]]),\n 17 => Box(\"turn_left\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]]),\n 18 => Box(\"turn_right\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]]),\n 19 => Box(\"move_fwd\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]]),\n 20 => Box(\"reprod\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]]),\n 21 => Box(\"reproduce\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]]),\n 22 => Box(\"starve\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]]),\n 23 => Box(\"\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[]]),\n 24 => Box(\"Query grass\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:1\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:1\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[]]),\n 25 => Box(\"Fail\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n Coord = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = Tuple{Int64, Int64}[]], []),\n 26 => Box(\"GrassIncrements\", [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:1\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]], [Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:1\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)],Main.var\"##299\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:1\n Coord = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]\n coord : V → Coord = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]]) ],\n[ Wire((-2,1) => (1,1)),\n Wire((13,1) => (24,1)),\n Wire((24,3) => (25,1)),\n Wire((26,1) => (24,2)),\n Wire((24,1) => (1,1)),\n Wire((26,2) => (24,2)),\n Wire((1,1) => (2,1)),\n Wire((24,2) => (26,1)),\n Wire((17,2) => (19,1)),\n Wire((11,2) => (12,1)),\n Wire((8,1) => (9,1)),\n Wire((8,2) => (9,1)),\n Wire((7,2) => (8,1)),\n Wire((12,1) => (2,2)),\n Wire((11,1) => (2,2)),\n Wire((10,2) => (11,1)),\n Wire((2,3) => (3,1)),\n Wire((9,1) => (10,1)),\n Wire((2,2) => (4,1)),\n Wire((10,1) => (11,1)),\n Wire((5,3) => (7,1)),\n Wire((5,1) => (6,1)),\n Wire((9,2) => (11,1)),\n Wire((4,1) => (5,1)),\n Wire((4,2) => (5,1)),\n Wire((5,2) => (8,1)),\n Wire((6,1) => (8,1)),\n Wire((6,2) => (8,1)),\n Wire((7,1) => (8,1)),\n Wire((18,1) => (19,1)),\n Wire((17,1) => (19,1)),\n Wire((2,1) => (13,1)),\n Wire((22,2) => (23,1)),\n Wire((19,1) => (20,1)),\n Wire((19,2) => (20,1)),\n Wire((18,2) => (19,1)),\n Wire((23,1) => (13,2)),\n Wire((22,1) => (13,2)),\n Wire((21,2) => (22,1)),\n Wire((13,3) => (14,1)),\n Wire((20,1) => (21,1)),\n Wire((13,2) => (15,1)),\n Wire((21,1) => (22,1)),\n Wire((16,3) => (18,1)),\n Wire((16,1) => (17,1)),\n Wire((20,2) => (22,1)),\n Wire((15,1) => (16,1)),\n Wire((15,2) => (16,1)),\n Wire((16,2) => (19,1)),\n Wire((1,2) => (-1,1)) ]), trace(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],compose(compose(mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),while),otimes(compose(compose(trace(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],otimes(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],munit()),compose(braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),compose(compose(sheep,otimes(braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),otimes(compose(compose(Sheep_eat,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),trace(munit(),Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],compose(compose(compose(compose(compose(compose(turn,otimes(compose(turn_left,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),compose(turn_right,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])))),otimes(braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),compose(compose(compose(otimes(mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),compose(move_fwd,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),reprod)),otimes(compose(reproduce,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),compose(mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),compose(compose(starve,otimes(id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),)),mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])))))),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),Fail)))),trace(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],otimes(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],munit()),compose(braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),compose(compose(wolves,otimes(braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),otimes(compose(compose(Wolf_eat,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[])),trace(munit(),Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],compose(compose(compose(compose(compose(compose(turn,otimes(compose(turn_left,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),compose(turn_right,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])))),otimes(braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),compose(compose(compose(otimes(mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),compose(move_fwd,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),reprod)),otimes(compose(reproduce,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),compose(mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),compose(compose(starve,otimes(id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),)),mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])))))),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),Fail))))),trace(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],otimes(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],munit()),compose(braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),compose(compose(grass,otimes(braid(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]))),otimes(compose(GrassIncrements,mmerge(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:1\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]),Fail))))),id(Main.var\"##299\".LV_Generic{Symbol, Int64}:\n V = 1:0\n E = 1:0\n Sheep = 1:0\n Wolf = 1:0\n Dir = 1:0\n Eng = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = Int64[]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])))))" - }, - "metadata": {}, - "execution_count": 20 - } - ], - "cell_type": "code", - "source": [ - "overall = while_schedule(cycle, curr -> nparts(curr, :Wolf) >= 0) |> F2" - ], - "metadata": {}, - "execution_count": 20 - }, - { - "cell_type": "markdown", - "source": [ - "view_sched(overall; names=F2(N))" - ], - "metadata": {} - }, - { - "outputs": [], - "cell_type": "code", - "source": [ - "X = initialize(3, 0.25, 0.25)\n", + " agent(g_inc; n=:grass))\n", + "\n", + "overall = while_schedule(cycle, curr -> nparts(curr, :Wolf) >= 0) |> F2 # wrap in a while loop\n", + "\n", + "X = initialize(3, 0.25, 0.25);\n", "res, = apply_schedule(overall, X; steps=50);" ], "metadata": {}, "execution_count": 21 - }, - { - "cell_type": "markdown", - "source": [ - "Run this lines to view the trajectory\n", - "view_traj(overall, res, view_LV; agent=true, names=F2(N))" - ], - "metadata": {} } ], "nbformat_minor": 3, @@ -1236,11 +1325,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.4" + "version": "1.10.0" }, "kernelspec": { - "name": "julia-1.9", - "display_name": "Julia 1.9.4", + "name": "julia-1.10", + "display_name": "Julia 1.10.0", "language": "julia" } }, diff --git a/docs/src/generated/lotka_volterra.md b/docs/src/generated/lotka_volterra.md index 452c2ff..508dab1 100644 --- a/docs/src/generated/lotka_volterra.md +++ b/docs/src/generated/lotka_volterra.md @@ -2,14 +2,14 @@ EditURL = "../../literate/lotka_volterra.jl" ``` +# Lotka Volterra + ````@example lotka_volterra -using Catlab, Catlab.Theories, Catlab.CategoricalAlgebra, Catlab.Graphs, - Catlab.Graphics, Catlab.WiringDiagrams, Catlab.Programs -using AlgebraicRewriting +using Catlab, DataMigrations, AlgebraicRewriting using Random, Test, StructEquality using Luxor -Random.seed!(123); +Random.seed!(123) using Catlab.Graphics.Graphviz: Attributes, Statement, Node using Catlab.Graphics.Graphviz @@ -38,16 +38,15 @@ function left(s::Symbol) return :S end end +```` -""" -Grass = 0 means alive grass, whereas grass > 0 represent a counter of time until -the grass is alive. +Grass = 0 means alive grass, whereas grass > 0 represent a counter of time until the grass is alive. -Sheeps and wolves have position and direction, so we assign each an *edge*. We -assume a convention where the location of the something is the edge SOURCE. +Sheeps and wolves have position and direction, so we assign each an *edge*. We assume a convention where the location of the something is the edge SOURCE. Dir is an attribute which can take values :N, :E, :W, and :S. -""" + +````@example lotka_volterra @present TheoryLV <: SchGraph begin (Sheep, Wolf)::Ob sheep_loc::Hom(Sheep, V) @@ -83,21 +82,20 @@ F = Migrate( F2 = Migrate( Dict(x => x for x in Symbol.(TheoryLV.generators[:Ob])), Dict(x => x for x in Symbol.(TheoryLV.generators[:Hom])), LV′; delta=false) +```` -""" -Create a nxn grid with periodic boundary conditions. Edges in each cardinal +Create an n × n grid with periodic boundary conditions. Edges in each cardinal direction originate at every point - (i,j+1) -> (i+1,j+1) -> ... ↑ ↑ (i,j) -> (i+1,j) -> ... -""" +````@example lotka_volterra function create_grid(n::Int) lv = LV′() coords = Dict() - for i in 0:n-1 + for i in 0:n-1 # Initialize grass 50% green, 50% uniformly between 0-30 for j in 0:n-1 coords[i=>j] = add_part!(lv, :V; grass_eng=max(0, rand(-30:30)), coord=(i, j)) end @@ -114,13 +112,13 @@ function create_grid(n::Int) end g = create_grid(2) +```` - -""" `n` is the length of the grid. `sheep` and `wolves` are the fraction of spaces that are populated with that animal -""" + +````@example lotka_volterra function initialize(n::Int, sheep::Float64, wolves::Float64)::LV′ grid = create_grid(n) args = [(sheep, :Sheep, :sheep_loc, :sheep_eng, :sheep_dir), @@ -141,8 +139,11 @@ supscript_d = Dict([ '9' => '⁹', '0' => '⁰', 'x' => 'ˣ', 'y' => 'ʸ', 'z' => 'ᶻ', 'a' => 'ᵃ', 'b' => 'ᵇ', 'c' => 'ᶜ', 'd' => 'ᵈ']) supscript(x::String) = join([get(supscript_d, c, c) for c in x]) +```` -"""Visualize a LV""" +Visualize a LV + +````@example lotka_volterra function view_LV(p::ACSetTransformation, pth=tempname(); name="G", title="") if nparts(dom(p), :Wolf) == 1 star = :Wolf => p[:Wolf](1) @@ -202,12 +203,9 @@ end i1 = initialize(2, 0.5, 0.5) ```` -view_LV(i1) - -RULES +# Rules ````@example lotka_volterra -####### yLV = yoneda_cache(LV; clear=true); yLV = yoneda_cache(LV; clear=false); nothing #hide @@ -240,10 +238,11 @@ G = @acset_colim yLV begin v::V end -N = Names(Dict("W" => W, "S" => S, "G" => G, "" => I)) +N = Names(Dict("W" => W, "S" => S, "G" => G, "" => I)); +nothing #hide ```` -Rotating +## Rotating ````@example lotka_volterra rl = Rule(id(S), id(S); expr=(Dir=[xs -> left(only(xs))],)) @@ -253,21 +252,12 @@ sheep_rotate_l = tryrule(RuleApp(:turn_left, rl, S)) sheep_rotate_r = tryrule(RuleApp(:turn_right, rr, S)) ```` -we can imagine executing these rules in sequence or in parallel +We can imagine executing these rules in sequence or in parallel ````@example lotka_volterra seq_sched = (sheep_rotate_l ⋅ sheep_rotate_r) -```` - -view_sched(seq_sched; names=N) - -````@example lotka_volterra par_sched = (sheep_rotate_l ⊗ sheep_rotate_r) -```` -view_sched(par_sched; names=N) - -````@example lotka_volterra begin ex = @acset_colim yLV begin e::E @@ -281,7 +271,7 @@ begin end ```` -Moving forward +## Moving forward ````@example lotka_volterra s_fwd_l = @acset_colim yLV begin @@ -339,7 +329,6 @@ end ```` Eat grass + 4eng - Grass is at 0 - meaning it's ready to be eaten ````@example lotka_volterra @@ -385,39 +374,41 @@ end we_rule = Rule(homomorphism(W, w_eat_l), id(W); expr=(Eng=[vs -> vs[3] + 20, vs -> vs[1]],)) wolf_eat = tryrule(RuleApp(:Wolf_eat, we_rule, W)) +```` -begin # test - ex = @acset LV begin - Sheep = 1 - Wolf = 1 - V = 3 - E = 2 - src = [1, 2] - tgt = [2, 3] - sheep_loc = 2 - sheep_eng = [3] - grass_eng = [9, 10, 11] - dir = fill(:N, 2) - sheep_dir = [:N] - wolf_loc = [2] - wolf_eng = [16] - wolf_dir = [:S] - end - expected = @acset LV begin - Wolf = 1 - V = 3 - E = 2 - src = [1, 2] - tgt = [2, 3] - grass_eng = [9, 10, 11] - dir = fill(:N, 2) - sheep_dir = [:N] - wolf_loc = [2] - wolf_eng = [36] - wolf_dir = [:S] - end - @test is_isomorphic(rewrite(we_rule, ex), expected) +### A test + +````@example lotka_volterra +ex = @acset LV begin + Sheep = 1 + Wolf = 1 + V = 3 + E = 2 + src = [1, 2] + tgt = [2, 3] + sheep_loc = 2 + sheep_eng = [3] + grass_eng = [9, 10, 11] + dir = fill(:N, 2) + sheep_dir = [:N] + wolf_loc = [2] + wolf_eng = [16] + wolf_dir = [:S] end +expected = @acset LV begin + Wolf = 1 + V = 3 + E = 2 + src = [1, 2] + tgt = [2, 3] + grass_eng = [9, 10, 11] + dir = fill(:N, 2) + sheep_dir = [:N] + wolf_loc = [2] + wolf_eng = [36] + wolf_dir = [:S] +end +@test is_isomorphic(rewrite(we_rule, ex), expected) ```` Die if 0 eng @@ -441,7 +432,7 @@ begin # test end ```` -reproduction +Reproduction ````@example lotka_volterra s_reprod_r = @acset_colim yLV begin @@ -480,7 +471,7 @@ Grass increment ````@example lotka_volterra g_inc_n = deepcopy(G) -set_subpart!(g_inc_n, 1, :grass_eng, 0); +set_subpart!(g_inc_n, 1, :grass_eng, 0) rem_part!(g_inc_n, :Eng, 1) g_inc_rule = Rule(id(G), id(G); @@ -489,45 +480,35 @@ g_inc_rule = Rule(id(G), id(G); g_inc = RuleApp(:GrassIncrements, g_inc_rule, G) |> tryrule -begin # test - ex = @acset LV begin - Sheep = 1 - V = 3 - E = 2 - src = [1, 2] - tgt = [2, 3] - sheep_loc = 2 - sheep_eng = [3] - grass_eng = [1, 10, 2] - dir = fill(:N, 2) - sheep_dir = [:N] - end - expected = @acset LV begin - Sheep = 1 - V = 3 - E = 2 - src = [1, 2] - tgt = [2, 3] - sheep_loc = 2 - sheep_eng = [3] - grass_eng = [0, 10, 2] - dir = fill(:N, 2) - sheep_dir = [:N] - end - @test is_isomorphic(rewrite(g_inc_rule, ex), expected) +ex = @acset LV begin + Sheep = 1 + V = 3 + E = 2 + src = [1, 2] + tgt = [2, 3] + sheep_loc = 2 + sheep_eng = [3] + grass_eng = [1, 10, 2] + dir = fill(:N, 2) + sheep_dir = [:N] +end +expected = @acset LV begin + Sheep = 1 + V = 3 + E = 2 + src = [1, 2] + tgt = [2, 3] + sheep_loc = 2 + sheep_eng = [3] + grass_eng = [0, 10, 2] + dir = fill(:N, 2) + sheep_dir = [:N] end +@test is_isomorphic(rewrite(g_inc_rule, ex), expected) ```` Scheduling Rules -````@example lotka_volterra -################## -```` - -Stuff that happens once per sheep - -25% chance of left turn, 25% chance of right turn, 50% stay in same direction - ````@example lotka_volterra general = mk_sched((;), (init=:S,), N, ( turn=const_cond([1.0, 2.0, 1.0], S; name=:turn), @@ -544,8 +525,9 @@ general = mk_sched((;), (init=:S,), N, ( return starve([repro(out_repro), out_no_repro]) end) -sheep = sheep_eat ⋅ general # once per sheep -wolf = wolf_eat ⋅ F(general) # once per wolf +sheep = sheep_eat ⋅ general; # once per sheep +wolf = wolf_eat ⋅ F(general); # once per wolf +nothing #hide ```` Do all sheep, then all wolves, then all daily operations @@ -556,22 +538,11 @@ cycle = (agent(sheep; n=:sheep, ret=I) agent(wolf; n=:wolves, ret=I) ⋅ agent(g_inc; n=:grass)) -```` -wrap in a while loop +overall = while_schedule(cycle, curr -> nparts(curr, :Wolf) >= 0) |> F2 # wrap in a while loop -````@example lotka_volterra -overall = while_schedule(cycle, curr -> nparts(curr, :Wolf) >= 0) |> F2 -```` - -view_sched(overall; names=F2(N)) - -````@example lotka_volterra -X = initialize(3, 0.25, 0.25) +X = initialize(3, 0.25, 0.25); res, = apply_schedule(overall, X; steps=50); nothing #hide ```` -Run this lines to view the trajectory -view_traj(overall, res, view_LV; agent=true, names=F2(N)) - diff --git a/docs/src/generated/mesh.md b/docs/src/generated/mesh.md deleted file mode 100644 index 15c697e..0000000 --- a/docs/src/generated/mesh.md +++ /dev/null @@ -1,218 +0,0 @@ -```@meta -EditURL = "../../literate/mesh.jl" -``` - -````@example mesh -using Catlab, Catlab.Graphs, Catlab.CategoricalAlgebra -using CairoMakie, GeometryBasics -using Base.Iterators -using CombinatorialSpaces -import AlgebraicPetri -using CombinatorialSpaces.SimplicialSets: get_edge! - -""" -Suppose we want to perform rewriting on a mesh with triangles defined over -certain triples of edges. -""" - -@present ThSemisimplicialSet <: SchGraph begin - T::Ob - (d1, d2, d3)::Hom(T, E) - compose(d1, src) == compose(d2, src) - compose(d1, tgt) == compose(d3, tgt) - compose(d2, tgt) == compose(d3, src) -end -@acset_type SSet(ThSemisimplicialSet) - -quadrangle = @acset SSet begin - T = 2 - E = 5 - V = 4 - d1 = [1, 1] - d2 = [2, 3] - d3 = [4, 5] - src = [1, 1, 1, 2, 3] - tgt = [4, 2, 3, 4, 4] -end - -function plot_sset(ss::SSet, points::Vector, - tri_colors::Union{Nothing,Vector}=nothing) - dflt = collect(take(cycle([:blue, :red, :green, :purple, :pink, :yellow, - :grey, :orange, :brown, :cyan]), - nparts(ss, :T))) - tri_colors = isnothing(tri_colors) ? dflt : tri_colors - - lengthscale = 0.8 # Validate inputs - dim = length(points[1]) - length(points) == nparts(ss, :V) || error("# of points") - if dim == 2 - points = [(p1, p2, 0.0) for (p1, p2) in points] - elseif dim != 3 - error("dim $dim") - end - tri_colors = tri_colors[1:nparts(ss, :T)] - - s = EmbeddedDeltaSet2D{Bool,Point{3,Float64}}() # convert SSet to EmbeddedDeltaSet2D - - edge_colors = [:black for _ in nparts(ss, :E)] - add_vertices!(s, length(points), point=points) - for (src, tgt) in zip(ss[:src], ss[:tgt]) - get_edge!(s, src, tgt) - end - - for t in parts(ss, :T) - glue_sorted_triangle!(s, ss[t, [:d1, :src]], - ss[t, [:d3, :src]], - ss[t, [:d1, :tgt]]) - end - - m = GeometryBasics.Mesh(s) # split mesh into component triangles - x = faces(m) - m_points = m.position[vcat([[t[1], t[2], t[3]] for t in x]...)] - m_faces = TriangleFace{Int}[[((t - 1) * 3) .+ (1, 2, 3) for t in 1:length(x)]...] - new_m = GeometryBasics.Mesh(Point{3,Float64}[m_points...], m_faces) - if ntriangles(s) == 0 - fig, ax, ob = arrows((s[s[:∂v0], :point] * (0.5 + lengthscale / 2) - .+ - s[s[:∂v1], :point] * (0.5 - lengthscale / 2)), - (s[s[:∂v1], :point] .- s[s[:∂v0], :point]), - lengthscale=lengthscale, arrowsize=0.05, shininess=0.0, - color=edge_colors, diffuse=[0.0, 0.0, 0.0]) - else - fig, ax, ob = mesh(new_m, color=vcat([[v, v, v] for v in tri_colors]...)) - arrows!((s[s[:∂v0], :point] * (0.5 + lengthscale / 2) - .+ - s[s[:∂v1], :point] * (0.5 - lengthscale / 2)), - (s[s[:∂v1], :point] .- s[s[:∂v0], :point]), - lengthscale=lengthscale, arrowsize=0.05, shininess=0.0, - color=edge_colors, diffuse=[0.0, 0.0, 0.0]) - end - if dim == 2 - spines!(ax) - hidedecorations!(ax) - ax.aspect = AxisAspect(1.0) # Remove this line if 3D embedding - end - fig -end - - -quad_coords = [(0, 1, 0), (1, 1, 0), (0, 0, 0), (1, 0, 0)] -plot_sset(quadrangle, quad_coords) - - - -L = quadrangle -I = @acset SSet begin - E = 4 - V = 4 - src = [1, 1, 2, 3] - tgt = [2, 3, 4, 4] -end -quad_coords = [(0, 1, 0), (1, 1, 0), (0, 0, 0), (1, 0, 0)] -plot_sset(I, quad_coords) - - -""" -Our replacement pattern will add two triangles and an edge, but now the edge -is perpendicular to where it was before. -""" - -R = @acset SSet begin - T = 2 - E = 5 - V = 4 - d1 = [2, 3] - d2 = [1, 5] - d3 = [5, 4] - src = [1, 1, 2, 3, 2] - tgt = [2, 3, 4, 4, 3] -end -quad_coords = [(0, 1, 0), (1, 1, 0), (0, 0, 0), (1, 0, 0)] -plot_sset(R, quad_coords) - - -""" -Again we create a rewrite rule by relating the `I` to `L` and `R`. -""" - -r = Rule(hom(I, R; monic=true), - hom(I, L; monic=true); - monic=true) - - -""" -We can construct a mesh to test this rewrite on by gluing together two -quadrilaterals (via a *pushout* along a common edge). -""" - -edge = @acset SSet begin - E = 1 - V = 2 - src = [1] - tgt = [2] -end -edge_left = hom(edge, L; initial=Dict([:V => [1, 3]])) -edge_right = hom(edge, L; initial=Dict([:V => [2, 4]])) -G = pushout(edge_left, edge_right) |> apex -six_coords = vcat(quad_coords, [(-1.0, 1.0, 0.0), (-1.0, 0.0, 0.0),]) -plot_sset(G, six_coords) - -""" -We then can perform the rewrite in larger contexts than just the pattern, such -as a mesh with two quadrilaterals. -""" -res = rewrite(r, G) - - - -""" -### Single pushout rewriting -Implicit deletion works like a cascading delete: if you delete a vertex -(for example), then you implicitly delete an edge which refers to that vertex -(and a triangle that refers to that edge, and so on). Here we delete a triangle -and a vertex explicitly, but implicitly the deleted vertex -""" - -Tri = @acset SSet begin - T = 1 - E = 3 - V = 3 - d1 = [1] - d2 = [2] - d3 = [3] - src = [1, 1, 2] - tgt = [3, 2, 3] -end -L = Tri -r = Rule{:SPO}(homomorphisms(edge, L)[2], id(edge)) -m = homomorphism(L, quadrangle) -```` - -can_pushout_complement(r.L, m) == false - -````@example mesh -rewrite_match(r, m) - -""" -Sesqui pushout rewriting - -Here our rewrite rule takes a vertex and duplicates it. -""" -L = @acset SSet begin - V = 1 -end -I = @acset SSet begin - V = 2 -end -r = Rule{:SqPO}(homomorphism(I, L), id(I)) - -""" -With sesqui-pushout semantics, when we apply this to the vertex of a triangle, -this will create two triangles. -""" -G = Tri -m = CSetTransformation(L, G, V=[1]); -nparts(sesqui_pushout_rewrite(l, r, m), :T) == 4 || error("We get 4 'triangles' when we ignore equations") -rewrite_match(r, m; pres=ThSemisimplicialSet) # pass in the equations -```` - diff --git a/docs/src/generated/petri_to_abm.md b/docs/src/generated/petri_to_abm.md deleted file mode 100644 index 5582c60..0000000 --- a/docs/src/generated/petri_to_abm.md +++ /dev/null @@ -1,110 +0,0 @@ -```@meta -EditURL = "../../literate/petri_to_abm.jl" -``` - -````@example petri_to_abm -""" -We can convert any petri net into a ABM, giving it the "token-passing" -semantics, by converting each transition into a rewrite rule. -""" - -using AlgebraicPetri -using AlgebraicRewriting -using Catlab, Catlab.Theories, Catlab.CategoricalAlgebra -const hom = homomorphism - -sir_petri = LabelledPetriNet([:S, :I, :R], - :inf => ((:S, :I) => (:I, :I)), - :rec => (:I => :R)) - -""" -The states of a Petri net induce a discrete schema for a C-Set -""" -function petri_to_cset_type(p::LabelledPetriNet, name::Symbol=:Discrete)::Type - pres = Presentation(FreeSchema) - [add_generator!(pres, Ob(FreeSchema, l)) for l in p[:sname]] - macro_call_expr = Expr(:macrocall, Symbol("@acset_type"), name, pres) - return eval(macro_call_expr) -end - -SIR = petri_to_cset_type(sir_petri) - -""" -The rewrite rule matches for the inputs to the transition, deletes them, and -adds the outputs to the transition. -""" -function transition_to_rw_rule(p::LabelledPetriNet, t::Int) - Rule(map([(:it, :is), (:ot, :os)]) do (getIO, getState) - cset = petri_to_cset_type(p)() - [add_part!(cset, x) for x in p[incident(p, 1, getIO), [getState, :sname]]] - return create(cset) # interface I is an empty C-Set - end...) -end - -rw = transition_to_rw_rule(sir_petri, 1) -codom(rw.L) # C-Set with S=1 and I=1 -codom(rw.R) # C-Set with I=2 - -""" -We can repeat the above but this time include a graph that the tokens live on. -We assume the tokens move around randomly and interact only when living on the -same vertex -""" - -using Catlab.Graphs: SchGraph - -loc(s::Symbol) = Symbol("$(s)_loc") - -function petri_to_cset_type_gr(p::LabelledPetriNet, name::Symbol=:PGraph)::Type - pres = copy(SchGraph) - isempty(p[:sname] ∩ [:V, :E]) || error("V and E are reserved") - for l in p[:sname] - add_generator!(pres, Hom(loc(l), - add_generator!(pres, Ob(FreeSchema, l)), - pres.generators[:Ob][1])) - end - macro_call_expr = Expr(:macrocall, Symbol("@acset_type"), name, pres) - return eval(macro_call_expr) -end - -SIR_gr = petri_to_cset_type_gr(sir_petri) - -"""Each transition requires all tokens to be on the same vertex""" -function transition_to_rw_rule_gr(p::LabelledPetriNet, t::Int) - V = @acset petri_to_cset_type_gr(p) begin - V = 1 - end - Rule(map([(:it, :is), (:ot, :os)]) do (getIO, getState) - cset = deepcopy(V) - [add_part!(cset, x; Dict(loc(x) => 1)...) - for x in p[incident(p, t, getIO), [getState, :sname]]] - return hom(V, cset) # interface I is an empty C-Set - end...) -end -rw = transition_to_rw_rule_gr(sir_petri, 1) -codom(rw.L) # S and I on a vertex -dom(rw.L) # Just a vertex -codom(rw.R) # Two I's on a vertex - -"""Now each token type needs a rewrite rule to move""" -function state_to_rw_rule_gr(p::LabelledPetriNet, s::Int) - E = @acset petri_to_cset_type_gr(p) begin - V = 2 - E = 1 - src = 1 - tgt = 2 - end - x = p[s, :sname] - Rule(map(1:2) do i - cset = deepcopy(E) - add_part!(cset, x; Dict(loc(x) => i)...) - return hom(E, cset) - end...) -end - -rw = state_to_rw_rule_gr(sir_petri, 1) -codom(rw.L) # S on position 1 -dom(rw.L) # Just an edge -codom(rw.R) # S on position 2 -```` - diff --git a/docs/src/generated/ptg_simple.ipynb b/docs/src/generated/ptg_simple.ipynb index 1768e49..8b50094 100644 --- a/docs/src/generated/ptg_simple.ipynb +++ b/docs/src/generated/ptg_simple.ipynb @@ -1,47 +1,20 @@ { "cells": [ { - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " Activating project at `~/Documents/Git/aaguinal.github.io/assets/slides/aaai-symposiumtalk-2023/julia`\n", - "Precompiling project...\n", - "\u001b[32m ✓ \u001b[39m\u001b[90mInvertedIndices\u001b[39m\n", - "\u001b[33m ✓ \u001b[39m\u001b[90mPermutations\u001b[39m\n", - "\u001b[32m ✓ \u001b[39m\u001b[90mWorkerUtilities\u001b[39m\n", - "\u001b[33m ✓ \u001b[39m\u001b[90mCompat\u001b[39m\n", - "\u001b[32m ✓ \u001b[39m\u001b[90mPooledArrays\u001b[39m\n", - "\u001b[33m ✓ \u001b[39m\u001b[90mOrderedCollections\u001b[39m\n", - "\u001b[33m ✓ \u001b[39m\u001b[90mXML2_jll\u001b[39m\n", - "\u001b[32m ✓ \u001b[39m\u001b[90mInlineStrings\u001b[39m\n", - "\u001b[33m ✓ \u001b[39m\u001b[90mCompat → CompatLinearAlgebraExt\u001b[39m\n", - "\u001b[32m ✓ \u001b[39m\u001b[90mSentinelArrays\u001b[39m\n", - "\u001b[33m ✓ \u001b[39m\u001b[90mLightXML\u001b[39m\n", - "\u001b[32m ✓ \u001b[39m\u001b[90mWeakRefStrings\u001b[39m\n", - "\u001b[32m ✓ \u001b[39mCSV\n", - "\u001b[33m ✓ \u001b[39mPrettyTables\n", - "\u001b[33m ✓ \u001b[39mACSets\n", - "\u001b[32m ✓ \u001b[39mDataFrames\n", - "\u001b[32m ✓ \u001b[39m\u001b[90mCatlab → CatlabDataFramesExt\u001b[39m\n", - " 17 dependencies successfully precompiled in 179 seconds. 52 already precompiled.\n", - " \u001b[33m8\u001b[39m dependencies precompiled but different versions are currently loaded. Restart julia to access the new versions\n" - ] - } + "cell_type": "markdown", + "source": [ + "# Slice Bread" ], + "metadata": {} + }, + { + "outputs": [], "cell_type": "code", "source": [ - "using Pkg\n", - "cd(\"/Users/aguinam1/Documents/Git/aaguinal.github.io/assets/slides/aaai-symposiumtalk-2023/julia\") # use this environment to avoid `constructor` error\n", - "Pkg.activate(\".\")\n", - "Pkg.instantiate()\n", "using PrettyTables\n", "\n", "using Catlab\n", - "using AlgebraicRewriting\n", - "\n", - "############################### SCHEMA ###############################" + "using AlgebraicRewriting" ], "metadata": {}, "execution_count": 1 @@ -49,13 +22,8 @@ { "cell_type": "markdown", "source": [ - "Create an ontology by defining a finite presentation of a freely generated category using @present macro" - ], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ + "Create an ontology by defining a finite presentation of a freely generated category using @present macro\n", + "\n", "About the world: The Bread World Ontology has the types Thing, BreadLoaf, Countertop, and Stool. The Breadloaf, Countertop, and Stool types have morphisms to Thing that represent is-a relationships. The InOn type can be used to encode a set relation (as opposed to a function) that was two morphisms going to Thing. One morphism points out the LHS of the relation and the other morphism point out the RHS of the relation." ], "metadata": {} @@ -65,7 +33,7 @@ { "output_type": "execute_result", "data": { - "text/plain": "Catlab.GATs.Presentations.Presentation{Catlab.Theories.ThSchema, Symbol}(Catlab.Theories.FreeSchema, (Ob = Catlab.Theories.FreeSchema.Ob{:generator}[Thing, BreadLoaf, Countertop, Stool, InOn], Hom = Catlab.Theories.FreeSchema.Hom{:generator}[BreadLoafIsThing, CountertopIsThing, StoolIsThing, inOn_l, inOn_r], AttrType = Catlab.Theories.FreeSchema.AttrType{:generator}[], Attr = Catlab.Theories.FreeSchema.Attr{:generator}[]), Dict(:inOn_r => (:Hom => 5), :CountertopIsThing => (:Hom => 2), :Countertop => (:Ob => 3), :BreadLoaf => (:Ob => 2), :Thing => (:Ob => 1), :BreadLoafIsThing => (:Hom => 1), :StoolIsThing => (:Hom => 3), :InOn => (:Ob => 5), :inOn_l => (:Hom => 4), :Stool => (:Ob => 4)…), Pair[])" + "text/plain": "GATlab.Models.Presentations.Presentation{Catlab.Theories.ThSchema.Meta.T, Symbol}(Catlab.Theories.FreeSchema, (Ob = Catlab.Theories.FreeSchema.Ob{:generator}[Thing, BreadLoaf, Countertop, Stool, InOn], Hom = Catlab.Theories.FreeSchema.Hom{:generator}[BreadLoafIsThing, CountertopIsThing, StoolIsThing, inOn_l, inOn_r], AttrType = Catlab.Theories.FreeSchema.AttrType{:generator}[], Attr = Catlab.Theories.FreeSchema.Attr{:generator}[]), Dict(:inOn_r => (:Hom => 5), :CountertopIsThing => (:Hom => 2), :Countertop => (:Ob => 3), :BreadLoaf => (:Ob => 2), :Thing => (:Ob => 1), :BreadLoafIsThing => (:Hom => 1), :StoolIsThing => (:Hom => 3), :InOn => (:Ob => 5), :inOn_l => (:Hom => 4), :Stool => (:Ob => 4)…), Pair[])" }, "metadata": {}, "execution_count": 2 @@ -208,7 +176,7 @@ { "output_type": "execute_result", "data": { - "text/plain": "Main.var\"##392\".BreadWorld" + "text/plain": "Main.var\"##236\".BreadWorld" }, "metadata": {}, "execution_count": 4 @@ -216,9 +184,7 @@ ], "cell_type": "code", "source": [ - "@acset_type BreadWorld(OntBreadWorld)\n", - "\n", - "############################### RULE ###############################" + "@acset_type BreadWorld(OntBreadWorld)" ], "metadata": {}, "execution_count": 4 @@ -226,13 +192,8 @@ { "cell_type": "markdown", "source": [ - "Construct rule by defining a span in the category of ACSets" - ], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ + "Construct rule by defining a span in the category of ACSets\n", + "\n", "Use the @acset macro to define an ACSet functor. The LHS refers to a type (or object) in our ontology and the RHS defines the set assignment using FinFunctions. For this, you need to completely specify the ACSet functor, i.e. every object and morphism in the index category must be specified." ], "metadata": {} @@ -240,14 +201,14 @@ { "cell_type": "markdown", "source": [ - "About the rule: This rule moves a breadloaf from a countertop to a stool." + "**About the rule:** This rule moves a breadloaf from a countertop to a stool." ], "metadata": {} }, { "cell_type": "markdown", "source": [ - "Left ACSet" + "### Left ACSet" ], "metadata": {} }, @@ -256,10 +217,10 @@ { "output_type": "execute_result", "data": { - "text/plain": "Main.var\"##392\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:1}\n┌───────────┬──────────────────┐\n│\u001b[1m BreadLoaf \u001b[0m│\u001b[1m BreadLoafIsThing \u001b[0m│\n├───────────┼──────────────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │\n└───────────┴──────────────────┘\n┌────────────┬───────────────────┐\n│\u001b[1m Countertop \u001b[0m│\u001b[1m CountertopIsThing \u001b[0m│\n├────────────┼───────────────────┤\n│\u001b[1m 1 \u001b[0m│ 2 │\n└────────────┴───────────────────┘\n┌───────┬──────────────┐\n│\u001b[1m Stool \u001b[0m│\u001b[1m StoolIsThing \u001b[0m│\n├───────┼──────────────┤\n│\u001b[1m 1 \u001b[0m│ 3 │\n└───────┴──────────────┘\n┌──────┬────────┬────────┐\n│\u001b[1m InOn \u001b[0m│\u001b[1m inOn_l \u001b[0m│\u001b[1m inOn_r \u001b[0m│\n├──────┼────────┼────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │ 2 │\n└──────┴────────┴────────┘\n", + "text/plain": "Main.var\"##236\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:1}\n┌───────────┬──────────────────┐\n│\u001b[1m BreadLoaf \u001b[0m│\u001b[1m BreadLoafIsThing \u001b[0m│\n├───────────┼──────────────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │\n└───────────┴──────────────────┘\n┌────────────┬───────────────────┐\n│\u001b[1m Countertop \u001b[0m│\u001b[1m CountertopIsThing \u001b[0m│\n├────────────┼───────────────────┤\n│\u001b[1m 1 \u001b[0m│ 2 │\n└────────────┴───────────────────┘\n┌───────┬──────────────┐\n│\u001b[1m Stool \u001b[0m│\u001b[1m StoolIsThing \u001b[0m│\n├───────┼──────────────┤\n│\u001b[1m 1 \u001b[0m│ 3 │\n└───────┴──────────────┘\n┌──────┬────────┬────────┐\n│\u001b[1m InOn \u001b[0m│\u001b[1m inOn_l \u001b[0m│\u001b[1m inOn_r \u001b[0m│\n├──────┼────────┼────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │ 2 │\n└──────┴────────┴────────┘\n", "text/html": [ "
\n", - "Main.var\"##392\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:1}\n", + "Main.var\"##236\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:1}\n", "
\n", " \n", " \n", @@ -348,7 +309,7 @@ { "cell_type": "markdown", "source": [ - "Middle/Keep ACSet\n", + "### Middle/Keep ACSet\n", "The Thing, Breadloaf, Countertop, and Stool types should be held constant. The InOn type will change because we are changing the underlying set function." ], "metadata": {} @@ -358,10 +319,10 @@ { "output_type": "execute_result", "data": { - "text/plain": "Main.var\"##392\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:0}\n┌───────────┬──────────────────┐\n│\u001b[1m BreadLoaf \u001b[0m│\u001b[1m BreadLoafIsThing \u001b[0m│\n├───────────┼──────────────────┤\n│\u001b[1m 1 \u001b[0m│ 0 │\n└───────────┴──────────────────┘\n┌────────────┬───────────────────┐\n│\u001b[1m Countertop \u001b[0m│\u001b[1m CountertopIsThing \u001b[0m│\n├────────────┼───────────────────┤\n│\u001b[1m 1 \u001b[0m│ 0 │\n└────────────┴───────────────────┘\n┌───────┬──────────────┐\n│\u001b[1m Stool \u001b[0m│\u001b[1m StoolIsThing \u001b[0m│\n├───────┼──────────────┤\n│\u001b[1m 1 \u001b[0m│ 0 │\n└───────┴──────────────┘\n", + "text/plain": "Main.var\"##236\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:0}\n┌───────────┬──────────────────┐\n│\u001b[1m BreadLoaf \u001b[0m│\u001b[1m BreadLoafIsThing \u001b[0m│\n├───────────┼──────────────────┤\n│\u001b[1m 1 \u001b[0m│ 0 │\n└───────────┴──────────────────┘\n┌────────────┬───────────────────┐\n│\u001b[1m Countertop \u001b[0m│\u001b[1m CountertopIsThing \u001b[0m│\n├────────────┼───────────────────┤\n│\u001b[1m 1 \u001b[0m│ 0 │\n└────────────┴───────────────────┘\n┌───────┬──────────────┐\n│\u001b[1m Stool \u001b[0m│\u001b[1m StoolIsThing \u001b[0m│\n├───────┼──────────────┤\n│\u001b[1m 1 \u001b[0m│ 0 │\n└───────┴──────────────┘\n", "text/html": [ "
\n", - "Main.var\"##392\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:0}\n", + "Main.var\"##236\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:0}\n", "
\n", " \n", " \n", @@ -426,7 +387,7 @@ { "cell_type": "markdown", "source": [ - "Right ACSet" + "### Right ACSet" ], "metadata": {} }, @@ -435,10 +396,10 @@ { "output_type": "execute_result", "data": { - "text/plain": "Main.var\"##392\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:1}\n┌───────────┬──────────────────┐\n│\u001b[1m BreadLoaf \u001b[0m│\u001b[1m BreadLoafIsThing \u001b[0m│\n├───────────┼──────────────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │\n└───────────┴──────────────────┘\n┌────────────┬───────────────────┐\n│\u001b[1m Countertop \u001b[0m│\u001b[1m CountertopIsThing \u001b[0m│\n├────────────┼───────────────────┤\n│\u001b[1m 1 \u001b[0m│ 2 │\n└────────────┴───────────────────┘\n┌───────┬──────────────┐\n│\u001b[1m Stool \u001b[0m│\u001b[1m StoolIsThing \u001b[0m│\n├───────┼──────────────┤\n│\u001b[1m 1 \u001b[0m│ 3 │\n└───────┴──────────────┘\n┌──────┬────────┬────────┐\n│\u001b[1m InOn \u001b[0m│\u001b[1m inOn_l \u001b[0m│\u001b[1m inOn_r \u001b[0m│\n├──────┼────────┼────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │ 3 │\n└──────┴────────┴────────┘\n", + "text/plain": "Main.var\"##236\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:1}\n┌───────────┬──────────────────┐\n│\u001b[1m BreadLoaf \u001b[0m│\u001b[1m BreadLoafIsThing \u001b[0m│\n├───────────┼──────────────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │\n└───────────┴──────────────────┘\n┌────────────┬───────────────────┐\n│\u001b[1m Countertop \u001b[0m│\u001b[1m CountertopIsThing \u001b[0m│\n├────────────┼───────────────────┤\n│\u001b[1m 1 \u001b[0m│ 2 │\n└────────────┴───────────────────┘\n┌───────┬──────────────┐\n│\u001b[1m Stool \u001b[0m│\u001b[1m StoolIsThing \u001b[0m│\n├───────┼──────────────┤\n│\u001b[1m 1 \u001b[0m│ 3 │\n└───────┴──────────────┘\n┌──────┬────────┬────────┐\n│\u001b[1m InOn \u001b[0m│\u001b[1m inOn_l \u001b[0m│\u001b[1m inOn_r \u001b[0m│\n├──────┼────────┼────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │ 3 │\n└──────┴────────┴────────┘\n", "text/html": [ "
\n", - "Main.var\"##392\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:1}\n", + "Main.var\"##236\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:1}\n", "
\n", " \n", " \n", @@ -527,7 +488,7 @@ { "cell_type": "markdown", "source": [ - "Left leg of span" + "### Left leg of span" ], "metadata": {} }, @@ -536,7 +497,7 @@ { "output_type": "execute_result", "data": { - "text/plain": "ACSetTransformation((Thing = FinFunction([1, 2, 3], 3, 3), BreadLoaf = FinFunction([1], 1, 1), Countertop = FinFunction([1], 1, 1), Stool = FinFunction([1], 1, 1), InOn = FinFunction(1:0, 0, 1)), Main.var\"##392\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:0}, Main.var\"##392\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:1})" + "text/plain": "ACSetTransformation((Thing = FinFunction([1, 2, 3], 3, 3), BreadLoaf = FinFunction([1], 1, 1), Countertop = FinFunction([1], 1, 1), Stool = FinFunction([1], 1, 1), InOn = FinFunction(1:0, 0, 1)), Main.var\"##236\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:0}, Main.var\"##236\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:1})" }, "metadata": {}, "execution_count": 8 @@ -552,7 +513,7 @@ { "cell_type": "markdown", "source": [ - "Right leg of span" + "### Right leg of span" ], "metadata": {} }, @@ -561,7 +522,7 @@ { "output_type": "execute_result", "data": { - "text/plain": "ACSetTransformation((Thing = FinFunction([1, 2, 3], 3, 3), BreadLoaf = FinFunction([1], 1, 1), Countertop = FinFunction([1], 1, 1), Stool = FinFunction([1], 1, 1), InOn = FinFunction(1:0, 0, 1)), Main.var\"##392\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:0}, Main.var\"##392\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:1})" + "text/plain": "ACSetTransformation((Thing = FinFunction([1, 2, 3], 3, 3), BreadLoaf = FinFunction([1], 1, 1), Countertop = FinFunction([1], 1, 1), Stool = FinFunction([1], 1, 1), InOn = FinFunction(1:0, 0, 1)), Main.var\"##236\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:0}, Main.var\"##236\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:1})" }, "metadata": {}, "execution_count": 9 @@ -586,7 +547,7 @@ { "output_type": "execute_result", "data": { - "text/plain": "Rule{:DPO}(ACSetTransformation((Thing = FinFunction([1, 2, 3], 3, 3), BreadLoaf = FinFunction([1], 1, 1), Countertop = FinFunction([1], 1, 1), Stool = FinFunction([1], 1, 1), InOn = FinFunction(1:0, 0, 1)), Main.var\"##392\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:0}, Main.var\"##392\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:1}), ACSetTransformation((Thing = FinFunction([1, 2, 3], 3, 3), BreadLoaf = FinFunction([1], 1, 1), Countertop = FinFunction([1], 1, 1), Stool = FinFunction([1], 1, 1), InOn = FinFunction(1:0, 0, 1)), Main.var\"##392\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:0}, Main.var\"##392\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:1}), Constraint[], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())" + "text/plain": "Rule{:DPO}(ACSetTransformation((Thing = FinFunction([1, 2, 3], 3, 3), BreadLoaf = FinFunction([1], 1, 1), Countertop = FinFunction([1], 1, 1), Stool = FinFunction([1], 1, 1), InOn = FinFunction(1:0, 0, 1)), Main.var\"##236\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:0}, Main.var\"##236\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:1}), ACSetTransformation((Thing = FinFunction([1, 2, 3], 3, 3), BreadLoaf = FinFunction([1], 1, 1), Countertop = FinFunction([1], 1, 1), Stool = FinFunction([1], 1, 1), InOn = FinFunction(1:0, 0, 1)), Main.var\"##236\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:0}, Main.var\"##236\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:1}), Constraint[], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())" }, "metadata": {}, "execution_count": 10 @@ -594,9 +555,7 @@ ], "cell_type": "code", "source": [ - "moveBreadRule = Rule(l, r)\n", - "\n", - "############################### WORLD STATE ###############################" + "moveBreadRule = Rule(l, r)" ], "metadata": {}, "execution_count": 10 @@ -604,6 +563,7 @@ { "cell_type": "markdown", "source": [ + "## WORLD STATE\n", "Define a world state using the @acset macro. This is the ACSet way of specifying an ACSet. For this, you need to completely specify the ACSet functor, i.e. every object and morphism in the index category must be specified. The ACSets must be specified in terms of FinFunctions." ], "metadata": {} @@ -611,7 +571,7 @@ { "cell_type": "markdown", "source": [ - "About the world state: In this world state, there are two countertops, one stool, and one breadloaf. All of these amount to four things. The breadloaf is on the first countertop." + "**About the world state:** In this world state, there are two countertops, one stool, and one breadloaf. All of these amount to four things. The breadloaf is on the first countertop." ], "metadata": {} }, @@ -620,10 +580,10 @@ { "output_type": "execute_result", "data": { - "text/plain": "Main.var\"##392\".BreadWorld {Thing:4, BreadLoaf:1, Countertop:2, Stool:1, InOn:1}\n┌───────────┬──────────────────┐\n│\u001b[1m BreadLoaf \u001b[0m│\u001b[1m BreadLoafIsThing \u001b[0m│\n├───────────┼──────────────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │\n└───────────┴──────────────────┘\n┌────────────┬───────────────────┐\n│\u001b[1m Countertop \u001b[0m│\u001b[1m CountertopIsThing \u001b[0m│\n├────────────┼───────────────────┤\n│\u001b[1m 1 \u001b[0m│ 2 │\n│\u001b[1m 2 \u001b[0m│ 3 │\n└────────────┴───────────────────┘\n┌───────┬──────────────┐\n│\u001b[1m Stool \u001b[0m│\u001b[1m StoolIsThing \u001b[0m│\n├───────┼──────────────┤\n│\u001b[1m 1 \u001b[0m│ 4 │\n└───────┴──────────────┘\n┌──────┬────────┬────────┐\n│\u001b[1m InOn \u001b[0m│\u001b[1m inOn_l \u001b[0m│\u001b[1m inOn_r \u001b[0m│\n├──────┼────────┼────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │ 2 │\n└──────┴────────┴────────┘\n", + "text/plain": "Main.var\"##236\".BreadWorld {Thing:4, BreadLoaf:1, Countertop:2, Stool:1, InOn:1}\n┌───────────┬──────────────────┐\n│\u001b[1m BreadLoaf \u001b[0m│\u001b[1m BreadLoafIsThing \u001b[0m│\n├───────────┼──────────────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │\n└───────────┴──────────────────┘\n┌────────────┬───────────────────┐\n│\u001b[1m Countertop \u001b[0m│\u001b[1m CountertopIsThing \u001b[0m│\n├────────────┼───────────────────┤\n│\u001b[1m 1 \u001b[0m│ 2 │\n│\u001b[1m 2 \u001b[0m│ 3 │\n└────────────┴───────────────────┘\n┌───────┬──────────────┐\n│\u001b[1m Stool \u001b[0m│\u001b[1m StoolIsThing \u001b[0m│\n├───────┼──────────────┤\n│\u001b[1m 1 \u001b[0m│ 4 │\n└───────┴──────────────┘\n┌──────┬────────┬────────┐\n│\u001b[1m InOn \u001b[0m│\u001b[1m inOn_l \u001b[0m│\u001b[1m inOn_r \u001b[0m│\n├──────┼────────┼────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │ 2 │\n└──────┴────────┴────────┘\n", "text/html": [ "
\n", - "Main.var\"##392\".BreadWorld {Thing:4, BreadLoaf:1, Countertop:2, Stool:1, InOn:1}\n", + "Main.var\"##236\".BreadWorld {Thing:4, BreadLoaf:1, Countertop:2, Stool:1, InOn:1}\n", "
\n", " \n", " \n", @@ -708,9 +668,7 @@ " InOn = 1\n", " inOn_l = [1] # breadloaf is on the countertop 1\n", " inOn_r = [2]\n", - "end\n", - "\n", - "############################### APPLY RULE ###############################" + "end" ], "metadata": {}, "execution_count": 11 @@ -718,6 +676,7 @@ { "cell_type": "markdown", "source": [ + "## Apply Rule\n", "Use the AlgebraicRewriting.get_matches(::Rule{T}, ::ACSet) utility function to find matches between the rule and the state." ], "metadata": {} @@ -727,7 +686,7 @@ { "output_type": "execute_result", "data": { - "text/plain": "1-element Vector{Any}:\n ACSetTransformation((Thing = FinFunction([1, 2, 4], 3, 4), BreadLoaf = FinFunction([1], 1, 1), Countertop = FinFunction([1], 1, 2), Stool = FinFunction([1], 1, 1), InOn = FinFunction([1], 1, 1)), Main.var\"##392\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:1}, Main.var\"##392\".BreadWorld {Thing:4, BreadLoaf:1, Countertop:2, Stool:1, InOn:1})" + "text/plain": "1-element Vector{Any}:\n ACSetTransformation((Thing = FinFunction([1, 2, 4], 3, 4), BreadLoaf = FinFunction([1], 1, 1), Countertop = FinFunction([1], 1, 2), Stool = FinFunction([1], 1, 1), InOn = FinFunction([1], 1, 1)), Main.var\"##236\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:1}, Main.var\"##236\".BreadWorld {Thing:4, BreadLoaf:1, Countertop:2, Stool:1, InOn:1})" }, "metadata": {}, "execution_count": 12 @@ -752,7 +711,7 @@ { "output_type": "execute_result", "data": { - "text/plain": "ACSetTransformation((Thing = FinFunction([1, 2, 4], 3, 4), BreadLoaf = FinFunction([1], 1, 1), Countertop = FinFunction([1], 1, 2), Stool = FinFunction([1], 1, 1), InOn = FinFunction([1], 1, 1)), Main.var\"##392\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:1}, Main.var\"##392\".BreadWorld {Thing:4, BreadLoaf:1, Countertop:2, Stool:1, InOn:1})" + "text/plain": "ACSetTransformation((Thing = FinFunction([1, 2, 4], 3, 4), BreadLoaf = FinFunction([1], 1, 1), Countertop = FinFunction([1], 1, 2), Stool = FinFunction([1], 1, 1), InOn = FinFunction([1], 1, 1)), Main.var\"##236\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:1}, Main.var\"##236\".BreadWorld {Thing:4, BreadLoaf:1, Countertop:2, Stool:1, InOn:1})" }, "metadata": {}, "execution_count": 13 @@ -777,10 +736,10 @@ { "output_type": "execute_result", "data": { - "text/plain": "Main.var\"##392\".BreadWorld {Thing:4, BreadLoaf:1, Countertop:2, Stool:1, InOn:1}\n┌───────────┬──────────────────┐\n│\u001b[1m BreadLoaf \u001b[0m│\u001b[1m BreadLoafIsThing \u001b[0m│\n├───────────┼──────────────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │\n└───────────┴──────────────────┘\n┌────────────┬───────────────────┐\n│\u001b[1m Countertop \u001b[0m│\u001b[1m CountertopIsThing \u001b[0m│\n├────────────┼───────────────────┤\n│\u001b[1m 1 \u001b[0m│ 2 │\n│\u001b[1m 2 \u001b[0m│ 4 │\n└────────────┴───────────────────┘\n┌───────┬──────────────┐\n│\u001b[1m Stool \u001b[0m│\u001b[1m StoolIsThing \u001b[0m│\n├───────┼──────────────┤\n│\u001b[1m 1 \u001b[0m│ 3 │\n└───────┴──────────────┘\n┌──────┬────────┬────────┐\n│\u001b[1m InOn \u001b[0m│\u001b[1m inOn_l \u001b[0m│\u001b[1m inOn_r \u001b[0m│\n├──────┼────────┼────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │ 3 │\n└──────┴────────┴────────┘\n", + "text/plain": "Main.var\"##236\".BreadWorld {Thing:4, BreadLoaf:1, Countertop:2, Stool:1, InOn:1}\n┌───────────┬──────────────────┐\n│\u001b[1m BreadLoaf \u001b[0m│\u001b[1m BreadLoafIsThing \u001b[0m│\n├───────────┼──────────────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │\n└───────────┴──────────────────┘\n┌────────────┬───────────────────┐\n│\u001b[1m Countertop \u001b[0m│\u001b[1m CountertopIsThing \u001b[0m│\n├────────────┼───────────────────┤\n│\u001b[1m 1 \u001b[0m│ 2 │\n│\u001b[1m 2 \u001b[0m│ 4 │\n└────────────┴───────────────────┘\n┌───────┬──────────────┐\n│\u001b[1m Stool \u001b[0m│\u001b[1m StoolIsThing \u001b[0m│\n├───────┼──────────────┤\n│\u001b[1m 1 \u001b[0m│ 3 │\n└───────┴──────────────┘\n┌──────┬────────┬────────┐\n│\u001b[1m InOn \u001b[0m│\u001b[1m inOn_l \u001b[0m│\u001b[1m inOn_r \u001b[0m│\n├──────┼────────┼────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │ 3 │\n└──────┴────────┴────────┘\n", "text/html": [ "
\n", - "Main.var\"##392\".BreadWorld {Thing:4, BreadLoaf:1, Countertop:2, Stool:1, InOn:1}\n", + "Main.var\"##236\".BreadWorld {Thing:4, BreadLoaf:1, Countertop:2, Stool:1, InOn:1}\n", "
\n", " \n", " \n", @@ -864,11 +823,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.4" + "version": "1.10.0" }, "kernelspec": { - "name": "julia-1.9", - "display_name": "Julia 1.9.4", + "name": "julia-1.10", + "display_name": "Julia 1.10.0", "language": "julia" } }, diff --git a/docs/src/generated/ptg_simple.md b/docs/src/generated/ptg_simple.md index 3a9ecf4..2aa9439 100644 --- a/docs/src/generated/ptg_simple.md +++ b/docs/src/generated/ptg_simple.md @@ -2,17 +2,13 @@ EditURL = "../../literate/ptg_simple.jl" ``` +# Slice Bread + ````@example ptg_simple -using Pkg -cd("/Users/aguinam1/Documents/Git/aaguinal.github.io/assets/slides/aaai-symposiumtalk-2023/julia") # use this environment to avoid `constructor` error -Pkg.activate(".") -Pkg.instantiate() using PrettyTables using Catlab using AlgebraicRewriting - -############################### SCHEMA ############################### ```` Create an ontology by defining a finite presentation of a freely generated category using @present macro @@ -46,17 +42,15 @@ Make the ontology an acset type ````@example ptg_simple @acset_type BreadWorld(OntBreadWorld) - -############################### RULE ############################### ```` Construct rule by defining a span in the category of ACSets Use the @acset macro to define an ACSet functor. The LHS refers to a type (or object) in our ontology and the RHS defines the set assignment using FinFunctions. For this, you need to completely specify the ACSet functor, i.e. every object and morphism in the index category must be specified. -About the rule: This rule moves a breadloaf from a countertop to a stool. +**About the rule:** This rule moves a breadloaf from a countertop to a stool. -Left ACSet +### Left ACSet ````@example ptg_simple L = @acset BreadWorld begin @@ -75,7 +69,7 @@ L = @acset BreadWorld begin end ```` -Middle/Keep ACSet +### Middle/Keep ACSet The Thing, Breadloaf, Countertop, and Stool types should be held constant. The InOn type will change because we are changing the underlying set function. ````@example ptg_simple @@ -87,7 +81,7 @@ K = @acset BreadWorld begin end ```` -Right ACSet +### Right ACSet ````@example ptg_simple R = @acset BreadWorld begin @@ -106,13 +100,13 @@ R = @acset BreadWorld begin end ```` -Left leg of span +### Left leg of span ````@example ptg_simple l = ACSetTransformation(K, L, Thing=[1, 2, 3], BreadLoaf=[1], Countertop=[1], Stool=[1]) ```` -Right leg of span +### Right leg of span ````@example ptg_simple r = ACSetTransformation(K, R, Thing=[1, 2, 3], BreadLoaf=[1], Countertop=[1], Stool=[1]) @@ -122,13 +116,12 @@ Use AlgebraicRewriting.Rule wrapper to add a rule interface ````@example ptg_simple moveBreadRule = Rule(l, r) - -############################### WORLD STATE ############################### ```` +## WORLD STATE Define a world state using the @acset macro. This is the ACSet way of specifying an ACSet. For this, you need to completely specify the ACSet functor, i.e. every object and morphism in the index category must be specified. The ACSets must be specified in terms of FinFunctions. -About the world state: In this world state, there are two countertops, one stool, and one breadloaf. All of these amount to four things. The breadloaf is on the first countertop. +**About the world state:** In this world state, there are two countertops, one stool, and one breadloaf. All of these amount to four things. The breadloaf is on the first countertop. ````@example ptg_simple state = @acset BreadWorld begin @@ -145,10 +138,9 @@ state = @acset BreadWorld begin inOn_l = [1] # breadloaf is on the countertop 1 inOn_r = [2] end - -############################### APPLY RULE ############################### ```` +## Apply Rule Use the AlgebraicRewriting.get_matches(::Rule{T}, ::ACSet) utility function to find matches between the rule and the state. ````@example ptg_simple diff --git a/docs/src/index.md b/docs/src/index.md index 508cff9..bc0f5fb 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -4,14 +4,9 @@ CurrentModule = AlgebraicRewriting ``` -```@autodocs -Modules = [AlgebraicRewriting.Rewrites] -Private = true -``` - -Algebraic rewriting is a context-aware find-and-replace operation, crucial for maintaining integrity and structure in various scenarios. This package provides tools for such operations in Julia, ensuring that replacements adhere to predefined rules or structures. +Algebraic rewriting is a context-aware find-and-replace operation that is useful for maintaining structure in various scenarios. This package provides tools for such operations in Julia, ensuring that rewrite rules adhere to structures defined using ACSets (see [ACSets.jl](https://github.com/AlgebraicJulia/ACSets.jl) and [Catlab.jl](https://github.com/AlgebraicJulia/Catlab.jl)). -# Creating and applying rules +This page will provide you with a gentle overview of how to design and apply rewrite rules for a simple ACSet. **More sophisticated examples** can be found in the side-bar. ## Setup Environment To begin, set up your environment by importing necessary packages. @@ -24,10 +19,11 @@ using AlgebraicRewriting ## Design a rewrite rule The general process for designing a rewrite rule is as follows: -1. Define your schema. This is done by defining a [finite presentation of a generalized algebraic theory model]() using generators, `Ob` and `Hom`. +### 1. Define your schema +A schema defined by a finite presentation of a generalized algebraic theory model using generators, `Ob`, `Hom`, `AttrType`, and `Attr`. ```julia -@present OntTeam(FreeSchema) begin +@present SchTeam(FreeSchema) begin Player::Ob Team::Ob IsMemberOf::Hom(Player, Team) @@ -37,34 +33,36 @@ The general process for designing a rewrite rule is as follows: end ``` -2. Create the schema type. Data for rules are stored in data structures called an ACSet. ACSets can be completely instantiated (straightforward way) using `StructACSet()` type constructor or dynamically instantiated (advanced way) using `DynamicACSet()` type constructor. To create the schema type, you can choose to follow the straightforward way or the advanced way. +### 2. Create the schema type +Data for rules are stored in a data structure called an ACSet. -For the **straightforward way**: ```julia -const TeamStraightforward = StructACSet("Team", OntTeam) +@acset_type Team(SchTeam) ``` -For the **advanced way**: -```julia -const TeamAdvanced = DynamicACSet("Team", OntTeam) -``` - -3. Define rule parts. A rewrite rule consists of a span of ACSets (`L <-l- K -r-> R`), namely three ACSets (`L`, `K`, `R`) and two natural transformations (`l`, `r`): +### 3. Define rule parts +A rewrite rule consists of a span of ACSets (`L <-l- K -r-> R`), namely three ACSets (`L`, `K`, `R`) and two natural transformations (`l`, `r`): - Left ACSet, `L`, is the pre-condition for the rule to be applied. - Keep ACSet, `K`, is the data for the part of the state that remain consistent when the rule is applied. - Right ACSet, `R`, is the effect of the rule. -- Left transformation, `l`, aligns `K` to `L`. -- Right transformation, `r`, aligns `K` to `R`. +- Left transformation, `l`, embeds `K` in `L`. +- Right transformation, `r`, embed `K` in `R`. To define a rule, all five parts need to be defined. -If using the **straightforward way**, you must fully specify the ACSet functors and natural transformation. In this example, the rule swaps player between two teams. +It is possible to insert data according to the schema using a **static** approach _or_ the **colimit-of-representables** approach. + +#### Static Instantiation (`@acset`) +If using the **static** approach, you must fully specify the ACSet functors and natural transformation. Here is a rule that defines the ACSet statically. + +In this example, the rule swaps player between two teams. + ```julia -L = @acset TeamStraightforward begin - Player = 4 - Team = 2 - IsMemberOf = [1, 1, 2, 2] +L = @acset TeamStatic begin + Player = 4 + Team = 2 + IsMemberOf = [1, 1, 2, 2] TeamName = ["Home", "Away"] HasName = [1, 2] @@ -72,10 +70,10 @@ end K = @acset X begin TeamName = ["Home", "Away"] end -R = @acset TeamStraightforward begin - Player = 4 - Team = 2 - IsMemberOf = [1, 2, 1, 2] +R = @acset TeamStatic begin + Player = 4 + Team = 2 + IsMemberOf = [1, 2, 1, 2] TeamName = ["Home", "Away"] HasName = [1, 2] @@ -84,64 +82,59 @@ l = ACSetTransformation(K, L, TeamName=[1, 2]) r = ACSetTransformation(K, R, TeamName=[1, 2]) ``` -If using the **advanced way**, you only need to specify relevant objects and morphism parts. The `K` part is empty because all the parts specified in `L` and `R` change. (Note: `SchRule` is from `AlgebraicRewriting`) +#### Colimit-of-representables instantiation (`@acset_colim``) +If using the **colimit-of-representables** approach, you only need to specify relevant objects and morphism parts. The `K` part is empty because we want all the parts specified in `L` to be rewritten. You can use `homomorphisms` to automatically define the maps `l` and `r`. + ```julia -diagram = @migration(SchRule, OntTeam, - begin - L => @join begin +yTeam = yoneda(Team) +L = @acset_colim yTeam begin (p1, p2)::Player (team1, team2)::Team IsMemberOf(p1) == team1 IsMemberOf(p2) == team2 end - K => @join begin end - R => @join begin +K = @acset_colim yTeam begin end +R = @acset_colim yTeam begin (p1, p2)::Player (team1, team2)::Team IsMemberOf(p1) == team2 IsMemberOf(p2) == team1 end - end) -``` - -4. Construct the rule. Use the `AlgebraicRewriting.Rule` constructor to create the rule. This assumes that a double-pushout (DPO) rewrite rule is being constructed. You may also construct an single-pushout (SPO), sesqui-pushout (SqPO), or pullback-pushout (PBPO) rule. - -If using the **straightforward way**, package the rule in terms of maps, l and r, using the `AlgebraicRewriting.Rule` constructor directly. -```julia -rule = Rule{:DPO}(l, r) +l = only(homomorphisms(K, L)) +r = only(homomorphisms(K, R)) ``` -If using the **advanced way**, you have to (1) compute the colimit of representables in order to obtain the fully-specified ACSets for L, K, and R; (2) infer the maps l and r, and (3) package the rule using the AlgebraicRewriting.Rule constructor. +### 4. Construct the rule +Use the `AlgebraicRewriting.Rule` constructor to create the rule. This assumes that a double-pushout (DPO) rewrite rule is being constructed. You may also construct an single-pushout (SPO), sesqui-pushout (SqPO), or pullback-pushout (PBPO) rule. ```julia -yTeam = yoneda(TeamAdvanced) -rule = colimit_representables(diagram, yTeam) -l = rule_hom_map(rule, :l, rule_ob_map(rule, Symbol(K), rule_ob_map(rule, Symbol(L)) -r = rule_hom_map(rule, :r, rule_ob_map(rule, Symbol(K), rule_ob_map(rule, Symbol(R)) rule = Rule{:DPO}(l, r) ``` ## Apply the rule -1. Define the initial state. +### 5. Define the initial state. +Similarly, you can choose to define the acset using the static approach or the colimit-of-representable approach. -If using the **straightforward way**, you must fully specify the ACSet for the initial state. -``` +- If using the **static approach**, you must fully specify the ACSet for the initial state. + +```julia state = @acset TeamStraightforward begin - Player = 10 - Team = 2 - IsMemberOf = [1, 1, 1, 1, 1, 2, 2, 2, 2, 2] + Player = 10 + Team = 2 + IsMemberOf = [1, 1, 1, 1, 1, 2, 2, 2, 2, 2] TeamName = ["Home", "Away"] HasName = [1, 2] end ``` -If using the **advanced way**, you only need to specify relevant objects and morphism parts. -``` +- If using the **colimit-of-representable approach**, you only need to specify relevant objects and morphism parts. + +```julia state = @acset_colim yTeam begin - (p1, p2, p3, p4, p5, p6, p7, p8, p9, p10)::Player - (team1, team2)::Team - IsMemberOf(p1) == team1 + (p1, p2, p3, p4, p5, p6, p7, p8, p9, p10)::Player + (team1, team2)::Team + IsMemberOf(p1) == team1 IsMemberOf(p2) == team1 IsMemberOf(p3) == team1 IsMemberOf(p4) == team1 @@ -154,36 +147,27 @@ state = @acset_colim yTeam begin end ``` +### 6. Identify the match from the rule to the state +This can be done manually or automatically. -2. Identify the match from the rule to the state. This can be done manually or automatically. +- To **manually** identify the match, fully-specify an ACSet transformation. For this example, we would like to rule to swap `p5::Player` and `p6::Player` -To **manually** identify the match, fully-specify an ACSet transformation. For this example, we would like to rule to swap `p5::Player` and `p6::Player` ```julia match = ACSetTransformation(L, state, Player=[5, 6], Team=[1, 2], TeamName=[1, 2]) ``` -To **automatically** identify the match, use the backtracking search algorithm provided by AlgebraicRewriting. This may returm multiple matches, so you can provide logic for deciding which match to select. +- To **automatically** identify the match, use the backtracking search algorithm provided by AlgebraicRewriting. This may returm multiple matches, so you can provide logic for deciding which match to select. + ```julia matches = get_matches(rule, state) # insert logic to decide best match ``` -3. Apply the rewrite rule. This executes the rewrite process using using the defined rule and match. +### 7. Apply the rewrite rule +This executes the rewrite process using using the defined rule and match. -``` +```julia result = rewrite_match(rule, match) ``` -This documentation provides a basic guide to using the AlgebraicRewriting package in Julia. - -# Examples - -You may visit these pages to view more elaborate applications of AlgebraicRewriting.jl: - -- [full demo](https://github.com/AlgebraicJulia/AlgebraicRewriting.jl/blob/main/docs/src/full_demo.jl): a small demonstration of most of the major features - of AlgebraicRewriting. -- [Lotka Volterra example](https://github.com/AlgebraicJulia/AlgebraicRewriting.jl/blob/main/docs/src/lotka_volterra.jl): a model based - on NetLogo's [wolf-sheep predation](http://ccl.northwestern.edu/netlogo/models/WolfSheepPredation) agent-based model demo. -- [Game of Life example](https://github.com/AlgebraicJulia/AlgebraicRewriting.jl/blob/main/docs/src/GameOfLife.ipynb): an implementation of Conway's - [game of life](https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life) on an - arbitrary graph (with the grid-structure as a special case). \ No newline at end of file +This documentation provides a basic guide to using the AlgebraicRewriting package in Julia. \ No newline at end of file From 8a98e5e3f7a75db2e76c9ca7a2048e4f4ff02e62 Mon Sep 17 00:00:00 2001 From: Angeline Aguinaldo Date: Fri, 19 Jan 2024 12:37:16 -0500 Subject: [PATCH 5/7] remove src/generated dir, add dir to .gitignore --- docs/.gitignore | 1 + docs/src/generated/full_demo.ipynb | 1768 ----------------------- docs/src/generated/full_demo.md | 495 ------- docs/src/generated/game_of_life.ipynb | 409 ------ docs/src/generated/game_of_life.md | 221 --- docs/src/generated/lotka_volterra.ipynb | 1337 ----------------- docs/src/generated/lotka_volterra.md | 548 ------- docs/src/generated/ptg_simple.ipynb | 835 ----------- docs/src/generated/ptg_simple.md | 161 --- 9 files changed, 1 insertion(+), 5774 deletions(-) delete mode 100644 docs/src/generated/full_demo.ipynb delete mode 100644 docs/src/generated/full_demo.md delete mode 100644 docs/src/generated/game_of_life.ipynb delete mode 100644 docs/src/generated/game_of_life.md delete mode 100644 docs/src/generated/lotka_volterra.ipynb delete mode 100644 docs/src/generated/lotka_volterra.md delete mode 100644 docs/src/generated/ptg_simple.ipynb delete mode 100644 docs/src/generated/ptg_simple.md diff --git a/docs/.gitignore b/docs/.gitignore index 0750395..93f3a83 100644 --- a/docs/.gitignore +++ b/docs/.gitignore @@ -1,3 +1,4 @@ build/ site/ +src/generated .DS_Store \ No newline at end of file diff --git a/docs/src/generated/full_demo.ipynb b/docs/src/generated/full_demo.ipynb deleted file mode 100644 index 4f32eac..0000000 --- a/docs/src/generated/full_demo.ipynb +++ /dev/null @@ -1,1768 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Full Demo" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "using AlgebraicRewriting, Catlab, AlgebraicPetri, DataMigrations\n", - "using Test" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This is a self-contained walkthrough of the main features of AlgebraicRewriting.\n", - "This is a regular julia file that can be run interactively.\n", - "\n", - "Importantly:\n", - " - use Julia 1.10\n", - " - activate the environment in AlgebraicRewriting.jl/docs\n", - " - check that graphviz is installed locally (test via \"which dot\" in terminal)\n", - "\n", - "Table of contents:\n", - "\n", - "1. DPO\n", - "2. SPO\n", - "3. SqPO\n", - "4. PBPO+\n", - "5. Generalizing graphs: C-Sets, Slices, etc.\n", - "6. Application conditions\n", - "7. Attribute variables\n", - "8. Graph processes\n", - "9. General purpose programming / agent-based modeling\n", - " a. Rewrite and Control Flow boxes\n", - " b. Agents and Query boxes\n", - " c. Data migration\n", - " d. Monadic output\n", - "\n", - "The VS Code REPL makes it easy to have figures automatically pop up in a side\n", - "window, so this is the preferred way of interacting with this file. However, if\n", - "that is not available, your options are to\n", - "1.) copy-paste the code into a Jupyter notebook\n", - "2.) use the following `to_svg` function, which will write a graphviz output to\n", - " a SVG file and can be viewed in a browser. The Julia pipe syntax |> allows\n", - " you to easily append \" |> to_svg \" to a line with a visualization." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "n1\n", - "\n", - "\n", - "\n", - "\n", - "n2\n", - "\n", - "\n", - "\n", - "\n", - "n1->n2\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n3\n", - "\n", - "\n", - "\n", - "\n", - "n2->n3\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\")), Catlab.Graphics.Graphviz.Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\")), Catlab.Graphics.Graphviz.Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:height => \"0.05\", :margin => \"0\", :shape => \"point\", :width => \"0.05\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:arrowsize => \"0.5\"))" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "to_svg(G, filename=\"tmp.svg\") =\n", - " open(filename, \"w\") do io\n", - " show(io, \"image/svg+xml\", G)\n", - " end\n", - "\n", - "to_graphviz(path_graph(Graph, 3))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 1. DPO" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We construct a rule by providing a span, L ← I → R" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "ACSetTransformation((V = FinFunction([4, 5], 2, 5), E = FinFunction([4], 1, 4)), Catlab.Graphs.BasicGraphs.Graph {V:2, E:1}, Catlab.Graphs.BasicGraphs.Graph {V:5, E:4})" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "L = path_graph(Graph, 2) # • → •\n", - "I = Graph(1) # •\n", - "R = @acset Graph begin\n", - " V = 1\n", - " E = 1\n", - " src = 1\n", - " tgt = 1\n", - "end # •↺\n", - "l = ACSetTransformation(I, L; V=[1]) # graph homomorphism data\n", - "r = ACSetTransformation(I, R; V=[1])\n", - "rule = Rule(l, r)\n", - "\n", - "G = path_graph(Graph, 5) # • → • → • → • → •\n", - "m = only(get_matches(rule, G)) # only one match which satisfies dangling condition" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Provided a specific match (`m`), we can use the `rule` to rewrite the graph (`G`) using `rewrite_match(rule, m)`." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "n1\n", - "\n", - "1\n", - "\n", - "\n", - "\n", - "n1->n1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n2\n", - "\n", - "2\n", - "\n", - "\n", - "\n", - "n3\n", - "\n", - "3\n", - "\n", - "\n", - "\n", - "n2->n3\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n4\n", - "\n", - "4\n", - "\n", - "\n", - "\n", - "n3->n4\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n4->n1\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"1\")), Catlab.Graphics.Graphviz.Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"2\")), Catlab.Graphics.Graphviz.Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"3\")), Catlab.Graphics.Graphviz.Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"4\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:height => \"0.05\", :margin => \"0\", :shape => \"circle\", :width => \"0.05\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:arrowsize => \"0.5\"))" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "res = rewrite_match(rule, m) # • → • → • → •↺\n", - "to_graphviz(res; node_labels=true)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Note that C-Sets are morally regarded up to isomorphism - in particular, limits and colimits may modify the orderings of edges/vertices" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "expected = @acset Graph begin\n", - " V = 4\n", - " E = 4\n", - " src = [1, 2, 3, 4]\n", - " tgt = [2, 3, 4, 4]\n", - "end\n", - "@test is_isomorphic(expected, res)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can also specify the rule via a colimit-of-representables (i.e. generators and relations) syntax. As your schema gets bigger, this becomes more and more convenient. Assigning temporary tags, e.g. `e`, `v`, `eᵣ` to the C-Set elements can also be helpful." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Rule{:DPO}(ACSetTransformation((V = FinFunction([2], 1, 2), E = FinFunction(Int64[], 0, 1)), Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:1}), ACSetTransformation((V = FinFunction([1], 1, 1), E = FinFunction(Int64[], 0, 1)), Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:1, E:1}), Constraint[], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "yG = yoneda_cache(Graph, clear=true); # compute representables\n", - "\n", - "rule2 = Rule(@migration(SchRulel, SchGraph, begin\n", - " L => @join begin\n", - " e::E\n", - " end\n", - " K => @join begin\n", - " v::V\n", - " end\n", - " R => @join begin\n", - " eᵣ::E\n", - " src(eᵣ) == tgt(eᵣ)\n", - " end\n", - " l => begin\n", - " v => src(e)\n", - " end\n", - " end), yG)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can also rewrite without a match (and let it pick an arbitrary match)." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "@test res == rewrite(rule, G)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 2. SPO" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Rules are by default DPO, but if we specify a type parameter we can change the semantics" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "rule_spo = Rule{:SPO}(l, r) # (same data as before)\n", - "\n", - "@test length(get_matches(rule_spo, G)) == 4 # there are now four matches\n", - "res = rewrite(rule_spo, G)\n", - "to_graphviz(res)\n", - "@test is_isomorphic(res, path_graph(Graph, 3) ⊕ R)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Note**: ⊕ and ⊗ are shorthand for (co)products\n", - "_Tip: Julia lets you easily write unicode symbols via \"\\\" followed by a LaTeX name, then hit \"Tab\" to convert the symbol_" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 3. SqPO" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If we duplicate a vertex with an incident edge, it will duplicate the edge" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "Catlab.Graphs.BasicGraphs.Graph {V:2, E:1}\n", - "
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Esrctgt
112
\n", - "
\n" - ], - "text/plain": [ - "Catlab.Graphs.BasicGraphs.Graph {V:2, E:1}\n", - "┌───┬─────┬─────┐\n", - "│\u001b[1m E \u001b[0m│\u001b[1m src \u001b[0m│\u001b[1m tgt \u001b[0m│\n", - "├───┼─────┼─────┤\n", - "│\u001b[1m 1 \u001b[0m│ 1 │ 2 │\n", - "└───┴─────┴─────┘\n" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "L = Graph(1)\n", - "I = Graph(2)\n", - "R = path_graph(Graph, 2)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can use automated homomorphism search to reduce the tedium of specifying data manually. In this case, there is a unique option." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "ACSetTransformation((V = FinFunction([1, 1], 2, 1), E = FinFunction(Int64[], 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:1, E:0})" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "l = homomorphism(I, L)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "There are many constraints we can put on the search, such as being monic." - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "n1\n", - "\n", - "\n", - "\n", - "\n", - "n2\n", - "\n", - "\n", - "\n", - "\n", - "n1->n2\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n3\n", - "\n", - "\n", - "\n", - "\n", - "n1->n3\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n4\n", - "\n", - "\n", - "\n", - "\n", - "n1->n4\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n5\n", - "\n", - "\n", - "\n", - "\n", - "n1->n5\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n6\n", - "\n", - "\n", - "\n", - "\n", - "n1->n6\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n7\n", - "\n", - "\n", - "\n", - "\n", - "n1->n7\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n2->n3\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n2->n4\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n2->n5\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n2->n6\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n2->n7\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"neato\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\")), Catlab.Graphics.Graphviz.Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\")), Catlab.Graphics.Graphviz.Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\")), Catlab.Graphics.Graphviz.Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\")), Catlab.Graphics.Graphviz.Node(\"n5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\")), Catlab.Graphics.Graphviz.Node(\"n6\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\")), Catlab.Graphics.Graphviz.Node(\"n7\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:height => \"0.05\", :margin => \"0\", :shape => \"point\", :width => \"0.05\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:arrowsize => \"0.5\", :len => \"0.5\"))" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "r = homomorphism(I, R; monic=true)\n", - "\n", - "rule_sqpo = Rule{:SqPO}(l, r) # same data as before)\n", - "\n", - "\n", - "G = star_graph(Graph, 6) # a 5-pointed star\n", - "to_graphviz(G; prog=\"neato\") # changing \"prog\" can sometimes make it look better\n", - "\n", - "m = ACSetTransformation(Graph(1), G; V=[6]) # point at the center\n", - "res = rewrite_match(rule_sqpo, m)\n", - "to_graphviz(res; prog=\"neato\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 4. PBPO+" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "PBPO+ requires not merely a span but also additional data for L and K which can be thought of as type graphs. The graph G that we rewrite will be typed over the L' type graph to determine how it is rewritten." - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "ACSetTransformation((V = id(FinSet(2)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0})" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "L = Graph(1)\n", - "K = Graph(2)\n", - "l = homomorphism(K, L)\n", - "r = id(K)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We allow edges into and out of the matched vertex as well as edges\n", - "between the vertices incident to the matched vertex" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "n1\n", - "\n", - "1\n", - "\n", - "\n", - "\n", - "n1->n1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n2\n", - "\n", - "2\n", - "\n", - "\n", - "\n", - "n1->n2\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n3\n", - "\n", - "3\n", - "\n", - "\n", - "\n", - "n1->n3\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n2->n3\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n3->n1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n3->n3\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"1\")), Catlab.Graphics.Graphviz.Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"2\")), Catlab.Graphics.Graphviz.Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"3\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:height => \"0.05\", :margin => \"0\", :shape => \"circle\", :width => \"0.05\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:arrowsize => \"0.5\"))" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "L′ = @acset Graph begin\n", - " V = 3\n", - " E = 6\n", - " src = [1, 1, 1, 2, 3, 3]\n", - " tgt = [1, 2, 3, 3, 3, 1]\n", - "end\n", - "tl = ACSetTransformation(L, L′; V=[2]) # 2 is the matched vertex\n", - "to_graphviz(L′; node_labels=true)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The outneighbors of the matched vertex are duplicated (an edge connects the\n", - "old ones to the new ones) and the matched vertex is duplicated. The new copy\n", - "of the matched vertex points at the new ones. It does not have any inneighbors." - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "PBPORule(ACSetTransformation((V = FinFunction([1, 1], 2, 1), E = FinFunction(Int64[], 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}), ACSetTransformation((V = id(FinSet(2)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}), ACSetTransformation((V = FinFunction([2], 1, 3), E = FinFunction(1:0, 0, 6)), Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:3, E:6}), ACSetTransformation((V = FinFunction([2, 4], 2, 5), E = FinFunction(1:0, 0, 9)), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:5, E:9}), ACSetTransformation((V = FinFunction([1, 2, 3, 2, 3], 5, 3), E = FinFunction([1, 2, 3, 4, 5, 6, 5, 4, 5], 9, 6)), Catlab.Graphs.BasicGraphs.Graph {V:5, E:9}, Catlab.Graphs.BasicGraphs.Graph {V:3, E:6}), false, Constraint[], Constraint[], Dict{Any, Any}(), Dict{Any, Any}(), nothing)" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "K′ = @acset Graph begin\n", - " V = 5\n", - " E = 9\n", - " src = [1, 1, 1, 2, 3, 3, 3, 4, 5]\n", - " tgt = [1, 2, 3, 3, 3, 1, 5, 5, 5]\n", - "end\n", - "tk = ACSetTransformation(K, K′; V=[2, 4])\n", - "to_graphviz(K′; node_labels=true)\n", - "\n", - "l′ = homomorphism(K′, L′; initial=(V=[1, 2, 3, 2, 3],))\n", - "\n", - "prule = PBPORule(l, r, tl, tk, l′)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Apply to an example vertex (#3) with two inneighbors and one outneighbor." - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "Catlab.Graphs.BasicGraphs.Graph {V:6, E:8}\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Esrctgt
134
231
341
415
555
656
726
866
\n", - "
\n" - ], - "text/plain": [ - "Catlab.Graphs.BasicGraphs.Graph {V:6, E:8}\n", - "┌───┬─────┬─────┐\n", - "│\u001b[1m E \u001b[0m│\u001b[1m src \u001b[0m│\u001b[1m tgt \u001b[0m│\n", - "├───┼─────┼─────┤\n", - "│\u001b[1m 1 \u001b[0m│ 3 │ 4 │\n", - "│\u001b[1m 2 \u001b[0m│ 3 │ 1 │\n", - "│\u001b[1m 3 \u001b[0m│ 4 │ 1 │\n", - "│\u001b[1m 4 \u001b[0m│ 1 │ 5 │\n", - "│\u001b[1m 5 \u001b[0m│ 5 │ 5 │\n", - "│\u001b[1m 6 \u001b[0m│ 5 │ 6 │\n", - "│\u001b[1m 7 \u001b[0m│ 2 │ 6 │\n", - "│\u001b[1m 8 \u001b[0m│ 6 │ 6 │\n", - "└───┴─────┴─────┘\n" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "G = @acset Graph begin\n", - " V = 4\n", - " E = 5\n", - " src = [1, 1, 2, 3, 4]\n", - " tgt = [2, 3, 3, 4, 4]\n", - "end\n", - "to_graphviz(G; node_labels=true)\n", - "\n", - "m = get_match(prule, G; initial=(V=[3],) => Dict())\n", - "\n", - "res = rewrite_match(prule, m)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "V1 is copied to V2. Outneighbor V5 (w/ loop) is copied to V6, creating an edge" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "n1\n", - "\n", - "1\n", - "\n", - "\n", - "\n", - "n5\n", - "\n", - "5\n", - "\n", - "\n", - "\n", - "n1->n5\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n2\n", - "\n", - "2\n", - "\n", - "\n", - "\n", - "n6\n", - "\n", - "6\n", - "\n", - "\n", - "\n", - "n2->n6\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n3\n", - "\n", - "3\n", - "\n", - "\n", - "\n", - "n3->n1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n4\n", - "\n", - "4\n", - "\n", - "\n", - "\n", - "n3->n4\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n4->n1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n5->n5\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n5->n6\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "n6->n6\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"1\")), Catlab.Graphics.Graphviz.Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"2\")), Catlab.Graphics.Graphviz.Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"3\")), Catlab.Graphics.Graphviz.Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"4\")), Catlab.Graphics.Graphviz.Node(\"n5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"5\")), Catlab.Graphics.Graphviz.Node(\"n6\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"6\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:height => \"0.05\", :margin => \"0\", :shape => \"circle\", :width => \"0.05\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:arrowsize => \"0.5\"))" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "to_graphviz(res; node_labels=true)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 5. Generalizing Graphs" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Any data structure which implements the required functions we need can, in principle, be used for rewriting. Importantly this includes pushout_complement, pushout, and homomorphism search. These are all implemented generically for any C-Set schema (allowing us to rewrite Petri nets, Semisimplicial sets, etc.)\n", - "\n", - "Here we'll do rewriting in graphs sliced over •⇆•, which is isomorphic to the category of (whole-grain) Petri nets, with States and Transitions." - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [], - "source": [ - "function graph_slice(s::Slice)\n", - " h = s.slice\n", - " V, E = collect.([h[:V], h[:E]])\n", - " g = dom(h)\n", - " (S, T), (I, O) = [[findall(==(i), X) for i in 1:2] for X in [V, E]]\n", - " nS, nT, nI, nO = length.([S, T, I, O])\n", - " findS, findT = [x -> findfirst(==(x), X) for X in [S, T]]\n", - " to_graphviz(@acset AlgebraicPetri.PetriNet begin\n", - " S = nS\n", - " T = nT\n", - " I = nI\n", - " O = nO\n", - " is = findS.(g[I, :src])\n", - " it = findT.(g[I, :tgt])\n", - " ot = findT.(g[O, :src])\n", - " os = findS.(g[O, :tgt])\n", - " end)\n", - "end;" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This is the graph we are slicing over." - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "Catlab.Graphs.BasicGraphs.Graph {V:2, E:2}\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Esrctgt
112
221
\n", - "
\n" - ], - "text/plain": [ - "Catlab.Graphs.BasicGraphs.Graph {V:2, E:2}\n", - "┌───┬─────┬─────┐\n", - "│\u001b[1m E \u001b[0m│\u001b[1m src \u001b[0m│\u001b[1m tgt \u001b[0m│\n", - "├───┼─────┼─────┤\n", - "│\u001b[1m 1 \u001b[0m│ 1 │ 2 │\n", - "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n", - "└───┴─────┴─────┘\n" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "two = @acset Graph begin\n", - " V = 2\n", - " E = 2\n", - " src = [1, 2]\n", - " tgt = [2, 1]\n", - "end" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Define a rule which deletes a [T] -> S edge" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Catlab.CategoricalAlgebra.Slices.Slice{Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, @NamedTuple{V::Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, E::Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}}, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph}}(ACSetTransformation((V = FinFunction([2, 1], 2, 2), E = FinFunction(1:0, 0, 2)), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:2}))" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "L_ = path_graph(Graph, 2)\n", - "L = Slice(ACSetTransformation(L_, two, V=[2, 1], E=[2])) # [T] ⟶ (S)\n", - "graph_slice(L)\n", - "\n", - "I_ = Graph(1)\n", - "I = Slice(ACSetTransformation(I_, two, V=[2])) # [T]\n", - "R_ = Graph(2)\n", - "R = Slice(ACSetTransformation(R_, two, V=[2, 1])) # [T] (S)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Using homomorphism search in the slice category" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "n1\n", - "\n", - "1\n", - "\n", - "\n", - "\n", - "n2\n", - "\n", - "2\n", - "\n", - "\n", - "\n", - "n3\n", - "\n", - "1\n", - "\n", - "\n", - "\n", - "n2->n3\n", - "\n", - "\n", - "1\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"#6C9AC3\", :label => \"1\", :shape => \"circle\")), Catlab.Graphics.Graphviz.Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"#6C9AC3\", :label => \"2\", :shape => \"circle\")), Catlab.Graphics.Graphviz.Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"#E28F41\", :label => \"1\", :shape => \"square\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"1\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:shape => \"plain\", :style => \"filled\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "rule = Rule(homomorphism(I, L), homomorphism(I, R))\n", - "\n", - "G_ = path_graph(Graph, 3)\n", - "G = Slice(ACSetTransformation(G_, two, V=[1, 2, 1], E=[1, 2])) # (S) ⟶ [T] ⟶ (S)\n", - "graph_slice(G)\n", - "\n", - "res = rewrite(rule, G) # (S) ⟶ [T] (S)\n", - "graph_slice(res)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "While the vast majority of functionality is focused on ACSets at the present moment, but there is nothing in principle which limits this." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 6. Application conditions" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can construct commutative diagrams with certain edges left unspecified or marked with ∀ or ∃. If only one edge is left free, we can treat the diagram as a boolean function which tests whether the morphism makes the specified paths commute (or not commute). This generalizes positive/negative application conditions and lifting conditions, but because those are most common there are constructors AppCond and LiftCond to make these directly.\n", - "\n", - " ∀\n", - " [↻•] → ?\n", - " ↓ ↗ ∃ ↓\n", - " [↻•⟶•] → [↻•⟶•⟵•↺]\n", - "\n", - "Every vertex with a loop also has a map to the vertex marked by the bottom map." - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "t = terminal(Graph) |> apex\n", - "looparr = @acset_colim yG begin\n", - " (e1, e2)::E\n", - " src(e1) == tgt(e1)\n", - " src(e1) == src(e2)\n", - "end\n", - "\n", - "v = homomorphism(t, looparr)\n", - "loop_csp = @acset Graph begin\n", - " V = 3\n", - " E = 4\n", - " src = [1, 3, 1, 3]\n", - " tgt = [1, 3, 2, 2]\n", - "end\n", - "b = homomorphism(looparr, loop_csp; monic=true)\n", - "constr = LiftCond(v, b)\n", - "\n", - "@test !apply_constraint(constr, homomorphism(t, loop_csp))\n", - "@test apply_constraint(constr, b)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can combining constraints with logical combinators." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "match vertex iff it has 2 or 3 self loops" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "one, two, three, four, five = [@acset(Graph, begin\n", - " V = 1\n", - " E = n\n", - " src = 1\n", - " tgt = 1\n", - "end) for n in 1:5]\n", - "\n", - "c2 = AppCond(homomorphism(Graph(1), two); monic=true) # PAC\n", - "c3 = AppCond(homomorphism(Graph(1), four), false; monic=true) # NAC\n", - "constr = c2 ⊗ c3 # logical conjunction: 2 ≤ |E| < 4\n", - "\n", - "rule = Rule(id(Graph(1)), id(Graph(1)); ac=[constr])\n", - "\n", - "G = two ⊕ three ⊕ two ⊕ four ⊕ five ⊕ one\n", - "\n", - "@test length(get_matches(rule, G)) == 3" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 7. Attribute variables" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Normally ACSet morphisms must match attribute values exactly, i.e. a weighted\n", - "graph edge of 8.3 can only be mapped to another edge weighted at 8.3. This\n", - "becomes very restricted, especially when we want to do some simple computations\n", - "with attribute values (e.g. when merging two edges, add their values together)\n", - "\n", - "A recent extension of ACSets makes this possible - each attribute type comes\n", - "equipped with a finite set of \"variables\" which can be mapped to any concrete\n", - "value (or another variable)." - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "yWG = yoneda_cache(WeightedGraph{Int}; clear=true);\n", - "L = @acset_colim yWG begin\n", - " (e1, e2)::E\n", - " src(e1) == src(e2)\n", - " tgt(e1) == tgt(e2)\n", - "end\n", - "I = WeightedGraph{Int}(2)\n", - "R = @acset WeightedGraph{Int} begin\n", - " V = 2\n", - " E = 1\n", - " Weight = 1\n", - " src = 1\n", - " tgt = 2\n", - " weight = [AttrVar(1)]\n", - "end\n", - "\n", - "l = homomorphism(I, L; monic=true)\n", - "r = homomorphism(I, R; monic=true)\n", - "rule = Rule(l, r; monic=[:E], expr=Dict(:Weight => [xs -> xs[1] + xs[2]]))\n", - "\n", - "G = @acset WeightedGraph{Int} begin\n", - " V = 1\n", - " E = 3\n", - " src = 1\n", - " tgt = 1\n", - " weight = [10, 20, 100]\n", - "end\n", - "\n", - "@test rewrite(rule, G) == @acset WeightedGraph{Int} begin\n", - " V = 1\n", - " E = 2\n", - " src = 1\n", - " tgt = 1\n", - " weight = [30, 100]\n", - "end" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 8. Graph processes" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "A sequence of rewrite applications can be given a poset structure where α ≤ β\n", - "means that the rule application α needed to occur before β. This is computed\n", - "via analyzing the colimit of all the partial maps induced by the rewrites." - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "4-element Vector{Catlab.Graphs.BasicGraphs.Graph}:\n", - " Catlab.Graphs.BasicGraphs.Graph:\n", - " V = 1:0\n", - " E = 1:0\n", - " src : E → V = Int64[]\n", - " tgt : E → V = Int64[]\n", - " Catlab.Graphs.BasicGraphs.Graph:\n", - " V = 1:1\n", - " E = 1:0\n", - " src : E → V = Int64[]\n", - " tgt : E → V = Int64[]\n", - " Catlab.Graphs.BasicGraphs.Graph:\n", - " V = 1:2\n", - " E = 1:0\n", - " src : E → V = Int64[]\n", - " tgt : E → V = Int64[]\n", - " Catlab.Graphs.BasicGraphs.Graph:\n", - " V = 1:3\n", - " E = 1:0\n", - " src : E → V = Int64[]\n", - " tgt : E → V = Int64[]" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "using AlgebraicRewriting.Processes: RWStep, find_deps\n", - "\n", - "G0, G1, G2, G3 = Graph.([0, 1, 2, 3])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Delete a node" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": {}, - "outputs": [], - "source": [ - "Rule1 = Span(create(G1), id(G0));" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Merge two nodes" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": {}, - "outputs": [], - "source": [ - "Rule2 = Span(id(G2), homomorphism(G2, G1));" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Add a node" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "3-element Vector{Rule{:DPO}}:\n", - " Rule{:DPO}(ACSetTransformation((V = FinFunction(Int64[], 0, 1), E = FinFunction(Int64[], 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}), ACSetTransformation((V = id(FinSet(0)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}), Constraint[], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())\n", - " Rule{:DPO}(ACSetTransformation((V = id(FinSet(2)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}), ACSetTransformation((V = FinFunction([1, 1], 2, 1), E = FinFunction(Int64[], 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}), Constraint[], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())\n", - " Rule{:DPO}(ACSetTransformation((V = id(FinSet(0)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}), ACSetTransformation((V = FinFunction(Int64[], 0, 1), E = FinFunction(Int64[], 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}), Constraint[], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())" - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Rule3 = Span(id(G0), create(G1))\n", - "\n", - "R1, R2, R3 = [Rule(l, r) for (l, r) in [Rule1, Rule2, Rule3]]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 9. Trajectory" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Step 1: add node 3 to G2" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "AlgebraicRewriting.Processes.RWStep(Catlab.CategoricalAlgebra.FreeDiagrams.Multispan{Catlab.Graphs.BasicGraphs.Graph, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple, StaticArraysCore.SVector{2, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple}}(Catlab.Graphs.BasicGraphs.Graph:\n", - " V = 1:0\n", - " E = 1:0\n", - " src : E → V = Int64[]\n", - " tgt : E → V = Int64[], Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple[ACSetTransformation((V = id(FinSet(0)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}), ACSetTransformation((V = FinFunction(Int64[], 0, 1), E = FinFunction(Int64[], 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:1, E:0})]), Catlab.CategoricalAlgebra.FreeDiagrams.Multispan{Catlab.Graphs.BasicGraphs.Graph, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple, StaticArraysCore.SVector{2, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple}}(Catlab.Graphs.BasicGraphs.Graph:\n", - " V = 1:2\n", - " E = 1:0\n", - " src : E → V = Int64[]\n", - " tgt : E → V = Int64[], Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple[ACSetTransformation((V = id(FinSet(2)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}), ACSetTransformation((V = FinFunction([1, 2], 2, 3), E = FinFunction(1:0, 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:3, E:0})]), ACSetTransformation((V = FinFunction(Int64[], 0, 2), E = FinFunction(Int64[], 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:0, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}), ACSetTransformation((V = FinFunction([3], 1, 3), E = FinFunction(1:0, 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:3, E:0}))" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "M1 = create(G2)\n", - "CM1 = ACSetTransformation(G1, G3; V=[3])\n", - "Pmap1 = Span(id(G2), ACSetTransformation(G2, G3; V=[1, 2]))\n", - "RS1 = RWStep(Rule3, Pmap1, M1, CM1)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Step 2: merge node 2 and 3 to yield a G2" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "AlgebraicRewriting.Processes.RWStep(Catlab.CategoricalAlgebra.FreeDiagrams.Multispan{Catlab.Graphs.BasicGraphs.Graph, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple, StaticArraysCore.SVector{2, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple}}(Catlab.Graphs.BasicGraphs.Graph:\n", - " V = 1:2\n", - " E = 1:0\n", - " src : E → V = Int64[]\n", - " tgt : E → V = Int64[], Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple[ACSetTransformation((V = id(FinSet(2)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}), ACSetTransformation((V = FinFunction([1, 1], 2, 1), E = FinFunction(Int64[], 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:1, E:0})]), Catlab.CategoricalAlgebra.FreeDiagrams.Multispan{Catlab.Graphs.BasicGraphs.Graph, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple, StaticArraysCore.SVector{2, Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple}}(Catlab.Graphs.BasicGraphs.Graph:\n", - " V = 1:3\n", - " E = 1:0\n", - " src : E → V = Int64[]\n", - " tgt : E → V = Int64[], Catlab.CategoricalAlgebra.CSets.StructTightACSetTransformation{ACSets.Schemas.TypeLevelBasicSchema{Symbol, Tuple{:V, :E}, Tuple{(:src, :E, :V), (:tgt, :E, :V)}, Tuple{}, Tuple{}}, Comp, Catlab.Graphs.BasicGraphs.Graph, Catlab.Graphs.BasicGraphs.Graph} where Comp<:NamedTuple[ACSetTransformation((V = id(FinSet(3)), E = id(FinSet(0))), Catlab.Graphs.BasicGraphs.Graph {V:3, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:3, E:0}), ACSetTransformation((V = FinFunction([1, 2, 2], 3, 2), E = FinFunction(1:0, 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:3, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0})]), ACSetTransformation((V = FinFunction([2, 3], 2, 3), E = FinFunction(1:0, 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:3, E:0}), ACSetTransformation((V = FinFunction([2], 1, 2), E = FinFunction(1:0, 0, 0)), Catlab.Graphs.BasicGraphs.Graph {V:1, E:0}, Catlab.Graphs.BasicGraphs.Graph {V:2, E:0}))" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "M2 = ACSetTransformation(G2, G3; V=[2, 3])\n", - "CM2 = ACSetTransformation(G1, G2; V=[2])\n", - "Pmap2 = Span(id(G3), ACSetTransformation(G3, G2; V=[1, 2, 2]))\n", - "RS2 = RWStep(Rule2, Pmap2, M2, CM2)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Step 3: delete vertex 1" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "M3 = ACSetTransformation(G1, G2; V=[1])\n", - "CM3 = create(G1)\n", - "Pmap3 = Span(ACSetTransformation(G1, G2; V=[2]), id(G1))\n", - "RS3 = RWStep(Rule1, Pmap3, M3, CM3)\n", - "\n", - "\n", - "steps = [RS1, RS2, RS3]\n", - "\n", - "g = find_deps(steps)\n", - "to_graphviz(g; node_labels=true)\n", - "\n", - "expected = @acset Graph begin\n", - " V = 3\n", - " E = 1\n", - " src = 1\n", - " tgt = 2\n", - "end\n", - "@test expected == g" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Interface that just uses rules and match morphisms:\n", - "The matches needed to be updated to reflect the particular isomorph that DPO\n", - "rewriting produces when applying the rule." - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "σ₂ = ACSetTransformation(G2, G2; V=[2, 1])\n", - "σ₃ = ACSetTransformation(G3, G3; V=[3, 1, 2])\n", - "\n", - "g′ = find_deps([R3 => M1, R2 => M2 ⋅ σ₃, R1 => M3 ⋅ σ₂])\n", - "@test g′ == g" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Julia 1.10.0", - "language": "julia", - "name": "julia-1.10" - }, - "language_info": { - "file_extension": ".jl", - "mimetype": "application/julia", - "name": "julia", - "version": "1.10.0" - } - }, - "nbformat": 4, - "nbformat_minor": 3 -} diff --git a/docs/src/generated/full_demo.md b/docs/src/generated/full_demo.md deleted file mode 100644 index 292e97a..0000000 --- a/docs/src/generated/full_demo.md +++ /dev/null @@ -1,495 +0,0 @@ -```@meta -EditURL = "../../literate/full_demo.jl" -``` - -# Full Demo - -````@example full_demo -using AlgebraicRewriting, Catlab, AlgebraicPetri, DataMigrations -using Test -```` - -This is a self-contained walkthrough of the main features of AlgebraicRewriting. -This is a regular julia file that can be run interactively. - -Importantly: - - use Julia 1.10 - - activate the environment in AlgebraicRewriting.jl/docs - - check that graphviz is installed locally (test via "which dot" in terminal) - -Table of contents: - -1. DPO -2. SPO -3. SqPO -4. PBPO+ -5. Generalizing graphs: C-Sets, Slices, etc. -6. Application conditions -7. Attribute variables -8. Graph processes -9. General purpose programming / agent-based modeling - a. Rewrite and Control Flow boxes - b. Agents and Query boxes - c. Data migration - d. Monadic output - -The VS Code REPL makes it easy to have figures automatically pop up in a side -window, so this is the preferred way of interacting with this file. However, if -that is not available, your options are to -1.) copy-paste the code into a Jupyter notebook -2.) use the following `to_svg` function, which will write a graphviz output to - a SVG file and can be viewed in a browser. The Julia pipe syntax |> allows - you to easily append " |> to_svg " to a line with a visualization. - -````@example full_demo -to_svg(G, filename="tmp.svg") = - open(filename, "w") do io - show(io, "image/svg+xml", G) - end - -to_graphviz(path_graph(Graph, 3)) -```` - -# 1. DPO - -We construct a rule by providing a span, L ← I → R - -````@example full_demo -L = path_graph(Graph, 2) # • → • -I = Graph(1) # • -R = @acset Graph begin - V = 1 - E = 1 - src = 1 - tgt = 1 -end # •↺ -l = ACSetTransformation(I, L; V=[1]) # graph homomorphism data -r = ACSetTransformation(I, R; V=[1]) -rule = Rule(l, r) - -G = path_graph(Graph, 5) # • → • → • → • → • -m = only(get_matches(rule, G)) # only one match which satisfies dangling condition -```` - -Provided a specific match (`m`), we can use the `rule` to rewrite the graph (`G`) using `rewrite_match(rule, m)`. - -````@example full_demo -res = rewrite_match(rule, m) # • → • → • → •↺ -to_graphviz(res; node_labels=true) -```` - -Note that C-Sets are morally regarded up to isomorphism - in particular, limits and colimits may modify the orderings of edges/vertices - -````@example full_demo -expected = @acset Graph begin - V = 4 - E = 4 - src = [1, 2, 3, 4] - tgt = [2, 3, 4, 4] -end -@test is_isomorphic(expected, res) -```` - -We can also specify the rule via a colimit-of-representables (i.e. generators and relations) syntax. As your schema gets bigger, this becomes more and more convenient. Assigning temporary tags, e.g. `e`, `v`, `eᵣ` to the C-Set elements can also be helpful. - -````@example full_demo -yG = yoneda_cache(Graph, clear=true); # compute representables - -rule2 = Rule(@migration(SchRulel, SchGraph, begin - L => @join begin - e::E - end - K => @join begin - v::V - end - R => @join begin - eᵣ::E - src(eᵣ) == tgt(eᵣ) - end - l => begin - v => src(e) - end - end), yG) -```` - -We can also rewrite without a match (and let it pick an arbitrary match). - -````@example full_demo -@test res == rewrite(rule, G) -```` - -# 2. SPO - -Rules are by default DPO, but if we specify a type parameter we can change the semantics - -````@example full_demo -rule_spo = Rule{:SPO}(l, r) # (same data as before) - -@test length(get_matches(rule_spo, G)) == 4 # there are now four matches -res = rewrite(rule_spo, G) -to_graphviz(res) -@test is_isomorphic(res, path_graph(Graph, 3) ⊕ R) -```` - -**Note**: ⊕ and ⊗ are shorthand for (co)products -_Tip: Julia lets you easily write unicode symbols via "\" followed by a LaTeX name, then hit "Tab" to convert the symbol_ - -# 3. SqPO - -If we duplicate a vertex with an incident edge, it will duplicate the edge - -````@example full_demo -L = Graph(1) -I = Graph(2) -R = path_graph(Graph, 2) -```` - -We can use automated homomorphism search to reduce the tedium of specifying data manually. In this case, there is a unique option. - -````@example full_demo -l = homomorphism(I, L) -```` - -There are many constraints we can put on the search, such as being monic. - -````@example full_demo -r = homomorphism(I, R; monic=true) - -rule_sqpo = Rule{:SqPO}(l, r) # same data as before) - - -G = star_graph(Graph, 6) # a 5-pointed star -to_graphviz(G; prog="neato") # changing "prog" can sometimes make it look better - -m = ACSetTransformation(Graph(1), G; V=[6]) # point at the center -res = rewrite_match(rule_sqpo, m) -to_graphviz(res; prog="neato") -```` - -# 4. PBPO+ - -PBPO+ requires not merely a span but also additional data for L and K which can be thought of as type graphs. The graph G that we rewrite will be typed over the L' type graph to determine how it is rewritten. - -````@example full_demo -L = Graph(1) -K = Graph(2) -l = homomorphism(K, L) -r = id(K) -```` - -We allow edges into and out of the matched vertex as well as edges -between the vertices incident to the matched vertex - -````@example full_demo -L′ = @acset Graph begin - V = 3 - E = 6 - src = [1, 1, 1, 2, 3, 3] - tgt = [1, 2, 3, 3, 3, 1] -end -tl = ACSetTransformation(L, L′; V=[2]) # 2 is the matched vertex -to_graphviz(L′; node_labels=true) -```` - -The outneighbors of the matched vertex are duplicated (an edge connects the -old ones to the new ones) and the matched vertex is duplicated. The new copy -of the matched vertex points at the new ones. It does not have any inneighbors. - -````@example full_demo -K′ = @acset Graph begin - V = 5 - E = 9 - src = [1, 1, 1, 2, 3, 3, 3, 4, 5] - tgt = [1, 2, 3, 3, 3, 1, 5, 5, 5] -end -tk = ACSetTransformation(K, K′; V=[2, 4]) -to_graphviz(K′; node_labels=true) - -l′ = homomorphism(K′, L′; initial=(V=[1, 2, 3, 2, 3],)) - -prule = PBPORule(l, r, tl, tk, l′) -```` - -Apply to an example vertex (#3) with two inneighbors and one outneighbor. - -````@example full_demo -G = @acset Graph begin - V = 4 - E = 5 - src = [1, 1, 2, 3, 4] - tgt = [2, 3, 3, 4, 4] -end -to_graphviz(G; node_labels=true) - -m = get_match(prule, G; initial=(V=[3],) => Dict()) - -res = rewrite_match(prule, m) -```` - -V1 is copied to V2. Outneighbor V5 (w/ loop) is copied to V6, creating an edge - -````@example full_demo -to_graphviz(res; node_labels=true) -```` - -# 5. Generalizing Graphs - -Any data structure which implements the required functions we need can, in principle, be used for rewriting. Importantly this includes pushout_complement, pushout, and homomorphism search. These are all implemented generically for any C-Set schema (allowing us to rewrite Petri nets, Semisimplicial sets, etc.) - -Here we'll do rewriting in graphs sliced over •⇆•, which is isomorphic to the category of (whole-grain) Petri nets, with States and Transitions. - -````@example full_demo -function graph_slice(s::Slice) - h = s.slice - V, E = collect.([h[:V], h[:E]]) - g = dom(h) - (S, T), (I, O) = [[findall(==(i), X) for i in 1:2] for X in [V, E]] - nS, nT, nI, nO = length.([S, T, I, O]) - findS, findT = [x -> findfirst(==(x), X) for X in [S, T]] - to_graphviz(@acset AlgebraicPetri.PetriNet begin - S = nS - T = nT - I = nI - O = nO - is = findS.(g[I, :src]) - it = findT.(g[I, :tgt]) - ot = findT.(g[O, :src]) - os = findS.(g[O, :tgt]) - end) -end; -nothing #hide -```` - -This is the graph we are slicing over. - -````@example full_demo -two = @acset Graph begin - V = 2 - E = 2 - src = [1, 2] - tgt = [2, 1] -end -```` - -Define a rule which deletes a [T] -> S edge - -````@example full_demo -L_ = path_graph(Graph, 2) -L = Slice(ACSetTransformation(L_, two, V=[2, 1], E=[2])) # [T] ⟶ (S) -graph_slice(L) - -I_ = Graph(1) -I = Slice(ACSetTransformation(I_, two, V=[2])) # [T] -R_ = Graph(2) -R = Slice(ACSetTransformation(R_, two, V=[2, 1])) # [T] (S) -```` - -Using homomorphism search in the slice category - -````@example full_demo -rule = Rule(homomorphism(I, L), homomorphism(I, R)) - -G_ = path_graph(Graph, 3) -G = Slice(ACSetTransformation(G_, two, V=[1, 2, 1], E=[1, 2])) # (S) ⟶ [T] ⟶ (S) -graph_slice(G) - -res = rewrite(rule, G) # (S) ⟶ [T] (S) -graph_slice(res) -```` - -While the vast majority of functionality is focused on ACSets at the present moment, but there is nothing in principle which limits this. - -# 6. Application conditions - -We can construct commutative diagrams with certain edges left unspecified or marked with ∀ or ∃. If only one edge is left free, we can treat the diagram as a boolean function which tests whether the morphism makes the specified paths commute (or not commute). This generalizes positive/negative application conditions and lifting conditions, but because those are most common there are constructors AppCond and LiftCond to make these directly. - - ∀ - [↻•] → ? - ↓ ↗ ∃ ↓ - [↻•⟶•] → [↻•⟶•⟵•↺] - -Every vertex with a loop also has a map to the vertex marked by the bottom map. - -````@example full_demo -t = terminal(Graph) |> apex -looparr = @acset_colim yG begin - (e1, e2)::E - src(e1) == tgt(e1) - src(e1) == src(e2) -end - -v = homomorphism(t, looparr) -loop_csp = @acset Graph begin - V = 3 - E = 4 - src = [1, 3, 1, 3] - tgt = [1, 3, 2, 2] -end -b = homomorphism(looparr, loop_csp; monic=true) -constr = LiftCond(v, b) - -@test !apply_constraint(constr, homomorphism(t, loop_csp)) -@test apply_constraint(constr, b) -```` - -We can combining constraints with logical combinators. - -match vertex iff it has 2 or 3 self loops - -````@example full_demo -one, two, three, four, five = [@acset(Graph, begin - V = 1 - E = n - src = 1 - tgt = 1 -end) for n in 1:5] - -c2 = AppCond(homomorphism(Graph(1), two); monic=true) # PAC -c3 = AppCond(homomorphism(Graph(1), four), false; monic=true) # NAC -constr = c2 ⊗ c3 # logical conjunction: 2 ≤ |E| < 4 - -rule = Rule(id(Graph(1)), id(Graph(1)); ac=[constr]) - -G = two ⊕ three ⊕ two ⊕ four ⊕ five ⊕ one - -@test length(get_matches(rule, G)) == 3 -```` - -# 7. Attribute variables - -Normally ACSet morphisms must match attribute values exactly, i.e. a weighted -graph edge of 8.3 can only be mapped to another edge weighted at 8.3. This -becomes very restricted, especially when we want to do some simple computations -with attribute values (e.g. when merging two edges, add their values together) - -A recent extension of ACSets makes this possible - each attribute type comes -equipped with a finite set of "variables" which can be mapped to any concrete -value (or another variable). - -````@example full_demo -yWG = yoneda_cache(WeightedGraph{Int}; clear=true); -L = @acset_colim yWG begin - (e1, e2)::E - src(e1) == src(e2) - tgt(e1) == tgt(e2) -end -I = WeightedGraph{Int}(2) -R = @acset WeightedGraph{Int} begin - V = 2 - E = 1 - Weight = 1 - src = 1 - tgt = 2 - weight = [AttrVar(1)] -end - -l = homomorphism(I, L; monic=true) -r = homomorphism(I, R; monic=true) -rule = Rule(l, r; monic=[:E], expr=Dict(:Weight => [xs -> xs[1] + xs[2]])) - -G = @acset WeightedGraph{Int} begin - V = 1 - E = 3 - src = 1 - tgt = 1 - weight = [10, 20, 100] -end - -@test rewrite(rule, G) == @acset WeightedGraph{Int} begin - V = 1 - E = 2 - src = 1 - tgt = 1 - weight = [30, 100] -end -```` - -# 8. Graph processes - -A sequence of rewrite applications can be given a poset structure where α ≤ β -means that the rule application α needed to occur before β. This is computed -via analyzing the colimit of all the partial maps induced by the rewrites. - -````@example full_demo -using AlgebraicRewriting.Processes: RWStep, find_deps - -G0, G1, G2, G3 = Graph.([0, 1, 2, 3]) -```` - -Delete a node - -````@example full_demo -Rule1 = Span(create(G1), id(G0)); -nothing #hide -```` - -Merge two nodes - -````@example full_demo -Rule2 = Span(id(G2), homomorphism(G2, G1)); -nothing #hide -```` - -Add a node - -````@example full_demo -Rule3 = Span(id(G0), create(G1)) - -R1, R2, R3 = [Rule(l, r) for (l, r) in [Rule1, Rule2, Rule3]] -```` - -# 9. Trajectory - -Step 1: add node 3 to G2 - -````@example full_demo -M1 = create(G2) -CM1 = ACSetTransformation(G1, G3; V=[3]) -Pmap1 = Span(id(G2), ACSetTransformation(G2, G3; V=[1, 2])) -RS1 = RWStep(Rule3, Pmap1, M1, CM1) -```` - -Step 2: merge node 2 and 3 to yield a G2 - -````@example full_demo -M2 = ACSetTransformation(G2, G3; V=[2, 3]) -CM2 = ACSetTransformation(G1, G2; V=[2]) -Pmap2 = Span(id(G3), ACSetTransformation(G3, G2; V=[1, 2, 2])) -RS2 = RWStep(Rule2, Pmap2, M2, CM2) -```` - -Step 3: delete vertex 1 - -````@example full_demo -M3 = ACSetTransformation(G1, G2; V=[1]) -CM3 = create(G1) -Pmap3 = Span(ACSetTransformation(G1, G2; V=[2]), id(G1)) -RS3 = RWStep(Rule1, Pmap3, M3, CM3) - - -steps = [RS1, RS2, RS3] - -g = find_deps(steps) -to_graphviz(g; node_labels=true) - -expected = @acset Graph begin - V = 3 - E = 1 - src = 1 - tgt = 2 -end -@test expected == g -```` - -Interface that just uses rules and match morphisms: -The matches needed to be updated to reflect the particular isomorph that DPO -rewriting produces when applying the rule. - -````@example full_demo -σ₂ = ACSetTransformation(G2, G2; V=[2, 1]) -σ₃ = ACSetTransformation(G3, G3; V=[3, 1, 2]) - -g′ = find_deps([R3 => M1, R2 => M2 ⋅ σ₃, R1 => M3 ⋅ σ₂]) -@test g′ == g -```` - diff --git a/docs/src/generated/game_of_life.ipynb b/docs/src/generated/game_of_life.ipynb deleted file mode 100644 index 6d2f137..0000000 --- a/docs/src/generated/game_of_life.ipynb +++ /dev/null @@ -1,409 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "source": [ - "# Conway's Game of Life" - ], - "metadata": {} - }, - { - "outputs": [], - "cell_type": "code", - "source": [ - "using AlgebraicRewriting\n", - "using Catlab, Catlab.Graphs, Catlab.CategoricalAlgebra, Catlab.Theories\n", - "import Catlab.Graphics: to_graphviz\n", - "using Catlab.Graphics.Graphviz: Attributes, Statement, Node, Edge, Digraph\n", - "using PrettyTables\n", - "using Luxor" - ], - "metadata": {}, - "execution_count": 1 - }, - { - "cell_type": "markdown", - "source": [ - "The game of life has two rules: one which turns living things dead, and one that brings dead things to life. We model the terrain as a symmetric graph: cells are vertices. Neighboring cells have edges between them.\n", - "\n", - "Implementation wise, if we are going to update cells one at a time, we must keep track of two bits of information (the cell's living status for the *current* timestep and whether it will be alive in the *next* timestep). Thus we need helper rule to overwrite the \"current\" life status with the \"next\" life status at the end of each timestep." - ], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ - "# Schema" - ], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ - "`curr` and `next` pick out subsets of V which are marked as currently alive or\n", - "to be alive in the next timestep." - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "Migrate(Dict(:Curr => :Curr, :V => :V, :Next => :Next, :E => :E), Dict(:src => :src, :next => :next, :curr => :curr, :tgt => :tgt, :inv => :inv), Main.var\"##228\".AbsLifeCoords{Tuple{Int64, Int64}}, Main.var\"##228\".AbsLifeCoords{Tuple{Int64, Int64}}, false)" - }, - "metadata": {}, - "execution_count": 2 - } - ], - "cell_type": "code", - "source": [ - "@present SchLife <: SchSymmetricGraph begin\n", - " (Curr, Next)::Ob\n", - " curr::Hom(Curr, V)\n", - " next::Hom(Next, V)\n", - "end\n", - "@present SchLifeCoords <: SchLife begin\n", - " Coords::AttrType\n", - " coords::Attr(V, Coords)\n", - "end\n", - "@acset_type Life(SchLife) <: AbstractSymmetricGraph\n", - "@acset_type AbsLifeCoords(SchLifeCoords) <: AbstractSymmetricGraph\n", - "const LifeCoords = AbsLifeCoords{Tuple{Int,Int}}\n", - "F = Migrate(\n", - " Dict(x => x for x in Symbol.(generators(SchLife, :Ob))),\n", - " Dict(x => x for x in Symbol.(generators(SchLife, :Hom))), LifeCoords; delta=false)" - ], - "metadata": {}, - "execution_count": 2 - }, - { - "cell_type": "markdown", - "source": [ - "# Helper" - ], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ - "## Visualization" - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "view_life (generic function with 6 methods)" - }, - "metadata": {}, - "execution_count": 3 - } - ], - "cell_type": "code", - "source": [ - "function view_life(f::ACSetTransformation, pth=tempname())\n", - " v = collect(f[:V])\n", - " view_life(codom(f), pth; star=isempty(v) ? nothing : only(v))\n", - "end\n", - "function view_life(X::Life, pth=tempname(); star=nothing)\n", - " pg = PropertyGraph{Any}(; prog=\"neato\", graph=Dict(),\n", - " node=Dict(:shape => \"circle\", :style => \"filled\", :margin => \"0\"),\n", - " edge=Dict(:dir => \"none\", :minlen => \"1\"))\n", - " add_vertices!(pg, nparts(X, :V))\n", - " for v in vertices(X)\n", - " set_vprop!(pg, v, :fillcolor, isempty(incident(X, v, :curr)) ? \"red\" : \"green\")\n", - " if !isempty(incident(X, v, :next))\n", - " set_vprop!(pg, v, :penwidth, \"4.0\")\n", - " end\n", - " set_vprop!(pg, v, :label, star == v ? \"*\" : \"\")\n", - " end\n", - " for e in filter(e -> X[e, :inv] > e, edges(X))\n", - " add_edge!(pg, X[e, :src], X[e, :tgt])\n", - " end\n", - " G = to_graphviz(pg)\n", - " open(pth, \"w\") do io\n", - " show(io, \"image/svg+xml\", G)\n", - " end\n", - " G\n", - "end\n", - "function view_life(X::LifeCoords, pth=tempname(); star=nothing)\n", - " n = Int(sqrt(nparts(X, :V)))\n", - " coords = Dict([(i, j) => findfirst(==((i, j)), X[:coords])\n", - " for (i, j) in Iterators.product(1:n, 1:n)])\n", - " mat = pretty_table(String, reduce(hcat, map(1:n) do i\n", - " map(1:n) do j\n", - " c, x = [!isempty(incident(X, coords[(i, j)], x)) for x in [:curr, :next]]\n", - " res = c ? (x ? \"O\" : \"o\") : (x ? \"X\" : \"x\")\n", - " return res * ((star == coords[(i, j)]) ? \".\" : \"\")\n", - " end\n", - " end); show_header=false, tf=tf_markdown)\n", - " open(pth, \"w\") do io\n", - " write(io, mat)\n", - " end\n", - " return mat\n", - "end" - ], - "metadata": {}, - "execution_count": 3 - }, - { - "cell_type": "markdown", - "source": [ - "## Constructions for Life ACSets / maps between them" - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "Main.var\"##228\".living_neighbors" - }, - "metadata": {}, - "execution_count": 4 - } - ], - "cell_type": "code", - "source": [ - "Next() = @acset Life begin\n", - " V = 1\n", - " Next = 1\n", - " next = 1\n", - "end\n", - "Curr() = @acset Life begin\n", - " V = 1\n", - " Curr = 1\n", - " curr = 1\n", - "end\n", - "to_next() = homomorphism(Life(1), Next())\n", - "to_curr() = homomorphism(Life(1), Curr())\n", - "\n", - "\"\"\"Construct a cell connected to n living neighbors\"\"\"\n", - "function living_neighbors(n::Int; alive=false)\n", - " X = Life(1)\n", - " if alive\n", - " add_part!(X, :Curr, curr=1)\n", - " end\n", - " for _ in 1:n\n", - " v = add_part!(X, :V)\n", - " add_part!(X, :Curr, curr=v)\n", - " add_edge!(X, v, 1)\n", - " end\n", - " return X\n", - "end" - ], - "metadata": {}, - "execution_count": 4 - }, - { - "cell_type": "markdown", - "source": [ - "## Initialization of LifeCoords" - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "make_grid (generic function with 4 methods)" - }, - "metadata": {}, - "execution_count": 5 - } - ], - "cell_type": "code", - "source": [ - "function make_grid(curr::AbstractMatrix, next=nothing)\n", - " n, m = size(curr)\n", - " n == m || error(\"Must be square\")\n", - " X, coords = LifeCoords(), Dict()\n", - " for i in 1:n\n", - " for j in 1:n\n", - " coords[i=>j] = add_vertex!(X; coords=(i, j))\n", - " if Bool(curr[i, j])\n", - " add_part!(X, :Curr, curr=coords[i=>j])\n", - " end\n", - " if !isnothing(next) && Bool(next[i, j])\n", - " add_part!(X, :Curr, curr=coords[i=>j])\n", - " end\n", - " end\n", - " end\n", - " for i in 1:n\n", - " for j in 1:n\n", - " if i < n\n", - " add_edge!(X, coords[i=>j], coords[i+1=>j])\n", - " end\n", - " if j < n\n", - " add_edge!(X, coords[i=>j], coords[i=>j+1])\n", - " end\n", - " if i < n && j < n\n", - " add_edge!(X, coords[i=>j], coords[i+1=>j+1])\n", - " end\n", - " if i < n && j > 1\n", - " add_edge!(X, coords[i=>j], coords[i+1=>j-1])\n", - " end\n", - " end\n", - " end\n", - " return X\n", - "end\n", - "make_grid(n::Int, random=false) = make_grid((random ? rand : zeros)(Bool, (n, n)))" - ], - "metadata": {}, - "execution_count": 5 - }, - { - "cell_type": "markdown", - "source": [ - "# Rules" - ], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ - "A dead cell becomes alive iff exactly 3 living neighbors" - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "Rule{:DPO}(ACSetTransformation((V = id(FinSet(1)), E = id(FinSet(0)), Curr = id(FinSet(0)), Next = id(FinSet(0))), Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:0}), ACSetTransformation((V = FinFunction([1], 1, 1), E = FinFunction(Int64[], 0, 0), Curr = FinFunction(Int64[], 0, 0), Next = FinFunction(Int64[], 0, 1)), Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:1}), Constraint[Constraint(CGraph:\n V = 1:3\n E = 1:3\n VLabel = 1:0\n ELabel = 1:0\n src : E → V = [2, 1, 2]\n tgt : E → V = [1, 3, 3]\n vlabel : V → VLabel = Union{Nothing, Main.var\"##228\".Life}[Main.var\"##228\".Life:\n V = 1:4\n E = 1:6\n Curr = 1:3\n Next = 1:0\n src : E → V = [2, 1, 3, 1, 4, 1]\n tgt : E → V = [1, 2, 1, 3, 1, 4]\n inv : E → E = [2, 1, 4, 3, 6, 5]\n curr : Curr → V = [2, 3, 4]\n next : Next → V = Int64[], Main.var\"##228\".Life:\n V = 1:1\n E = 1:0\n Curr = 1:0\n Next = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n inv : E → E = Int64[]\n curr : Curr → V = Int64[]\n next : Next → V = Int64[], nothing]\n elabel : E → ELabel = Any[ACSetTransformation((V = FinFunction([1], 1, 4), E = FinFunction(Int64[], 0, 6), Curr = FinFunction(Int64[], 0, 3), Next = FinFunction(Int64[], 0, 0)), Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##228\".Life {V:4, E:6, Curr:3, Next:0}), nothing, 1], ∃2 (monic, ): (1⋅2 = 3)), Constraint(CGraph:\n V = 1:3\n E = 1:3\n VLabel = 1:0\n ELabel = 1:0\n src : E → V = [2, 1, 2]\n tgt : E → V = [1, 3, 3]\n vlabel : V → VLabel = Union{Nothing, Main.var\"##228\".Life}[Main.var\"##228\".Life:\n V = 1:5\n E = 1:8\n Curr = 1:4\n Next = 1:0\n src : E → V = [2, 1, 3, 1, 4, 1, 5, 1]\n tgt : E → V = [1, 2, 1, 3, 1, 4, 1, 5]\n inv : E → E = [2, 1, 4, 3, 6, 5, 8, 7]\n curr : Curr → V = [2, 3, 4, 5]\n next : Next → V = Int64[], Main.var\"##228\".Life:\n V = 1:1\n E = 1:0\n Curr = 1:0\n Next = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n inv : E → E = Int64[]\n curr : Curr → V = Int64[]\n next : Next → V = Int64[], nothing]\n elabel : E → ELabel = Any[ACSetTransformation((V = FinFunction([1], 1, 5), E = FinFunction(Int64[], 0, 8), Curr = FinFunction(Int64[], 0, 4), Next = FinFunction(Int64[], 0, 0)), Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##228\".Life {V:5, E:8, Curr:4, Next:0}), nothing, 1], ¬∃2 (monic, ): (1⋅2 = 3)), Constraint(CGraph:\n V = 1:3\n E = 1:3\n VLabel = 1:0\n ELabel = 1:0\n src : E → V = [2, 1, 2]\n tgt : E → V = [1, 3, 3]\n vlabel : V → VLabel = Union{Nothing, Main.var\"##228\".Life}[Main.var\"##228\".Life:\n V = 1:1\n E = 1:0\n Curr = 1:1\n Next = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n inv : E → E = Int64[]\n curr : Curr → V = [1]\n next : Next → V = Int64[], Main.var\"##228\".Life:\n V = 1:1\n E = 1:0\n Curr = 1:0\n Next = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n inv : E → E = Int64[]\n curr : Curr → V = Int64[]\n next : Next → V = Int64[], nothing]\n elabel : E → ELabel = Any[ACSetTransformation((V = FinFunction([1], 1, 1), E = FinFunction(Int64[], 0, 0), Curr = FinFunction(Int64[], 0, 1), Next = FinFunction(Int64[], 0, 0)), Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##228\".Life {V:1, E:0, Curr:1, Next:0}), nothing, 1], ¬∃2 (monic, ): (1⋅2 = 3))], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())" - }, - "metadata": {}, - "execution_count": 6 - } - ], - "cell_type": "code", - "source": [ - "BirthP1 = living_neighbors(3) # must have 3 neighbors\n", - "BirthN1 = living_neighbors(4) # forbid the cell to have 4 neighbors\n", - "BirthN2 = Curr() # forbid the cell to be alive (i.e. it's currently dead)\n", - "BP1, BN1, BN2 = homomorphism.(Ref(Life(1)), [BirthP1, BirthN1, BirthN2])\n", - "bac = [AppCond(BP1; monic=true), AppCond.([BN1, BN2], false; monic=true)...]\n", - "Birth = Rule(id(Life(1)), to_next(); ac=bac)" - ], - "metadata": {}, - "execution_count": 6 - }, - { - "cell_type": "markdown", - "source": [ - "A living cell stays alive iff 2 or 3 living neighbors" - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "5-element Vector{Pair{Symbol, Rule{:DPO}}}:\n :Birth => Rule{:DPO}(ACSetTransformation((V = id(FinSet(1)), E = id(FinSet(0)), Curr = id(FinSet(0)), Next = id(FinSet(0))), Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:0}), ACSetTransformation((V = FinFunction([1], 1, 1), E = FinFunction(Int64[], 0, 0), Curr = FinFunction(Int64[], 0, 0), Next = FinFunction(Int64[], 0, 1)), Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:1}), Constraint[Constraint(CGraph:\n V = 1:3\n E = 1:3\n VLabel = 1:0\n ELabel = 1:0\n src : E → V = [2, 1, 2]\n tgt : E → V = [1, 3, 3]\n vlabel : V → VLabel = Union{Nothing, Main.var\"##228\".Life}[Main.var\"##228\".Life:\n V = 1:4\n E = 1:6\n Curr = 1:3\n Next = 1:0\n src : E → V = [2, 1, 3, 1, 4, 1]\n tgt : E → V = [1, 2, 1, 3, 1, 4]\n inv : E → E = [2, 1, 4, 3, 6, 5]\n curr : Curr → V = [2, 3, 4]\n next : Next → V = Int64[], Main.var\"##228\".Life:\n V = 1:1\n E = 1:0\n Curr = 1:0\n Next = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n inv : E → E = Int64[]\n curr : Curr → V = Int64[]\n next : Next → V = Int64[], nothing]\n elabel : E → ELabel = Any[ACSetTransformation((V = FinFunction([1], 1, 4), E = FinFunction(Int64[], 0, 6), Curr = FinFunction(Int64[], 0, 3), Next = FinFunction(Int64[], 0, 0)), Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##228\".Life {V:4, E:6, Curr:3, Next:0}), nothing, 1], ∃2 (monic, ): (1⋅2 = 3)), Constraint(CGraph:\n V = 1:3\n E = 1:3\n VLabel = 1:0\n ELabel = 1:0\n src : E → V = [2, 1, 2]\n tgt : E → V = [1, 3, 3]\n vlabel : V → VLabel = Union{Nothing, Main.var\"##228\".Life}[Main.var\"##228\".Life:\n V = 1:5\n E = 1:8\n Curr = 1:4\n Next = 1:0\n src : E → V = [2, 1, 3, 1, 4, 1, 5, 1]\n tgt : E → V = [1, 2, 1, 3, 1, 4, 1, 5]\n inv : E → E = [2, 1, 4, 3, 6, 5, 8, 7]\n curr : Curr → V = [2, 3, 4, 5]\n next : Next → V = Int64[], Main.var\"##228\".Life:\n V = 1:1\n E = 1:0\n Curr = 1:0\n Next = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n inv : E → E = Int64[]\n curr : Curr → V = Int64[]\n next : Next → V = Int64[], nothing]\n elabel : E → ELabel = Any[ACSetTransformation((V = FinFunction([1], 1, 5), E = FinFunction(Int64[], 0, 8), Curr = FinFunction(Int64[], 0, 4), Next = FinFunction(Int64[], 0, 0)), Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##228\".Life {V:5, E:8, Curr:4, Next:0}), nothing, 1], ¬∃2 (monic, ): (1⋅2 = 3)), Constraint(CGraph:\n V = 1:3\n E = 1:3\n VLabel = 1:0\n ELabel = 1:0\n src : E → V = [2, 1, 2]\n tgt : E → V = [1, 3, 3]\n vlabel : V → VLabel = Union{Nothing, Main.var\"##228\".Life}[Main.var\"##228\".Life:\n V = 1:1\n E = 1:0\n Curr = 1:1\n Next = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n inv : E → E = Int64[]\n curr : Curr → V = [1]\n next : Next → V = Int64[], Main.var\"##228\".Life:\n V = 1:1\n E = 1:0\n Curr = 1:0\n Next = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n inv : E → E = Int64[]\n curr : Curr → V = Int64[]\n next : Next → V = Int64[], nothing]\n elabel : E → ELabel = Any[ACSetTransformation((V = FinFunction([1], 1, 1), E = FinFunction(Int64[], 0, 0), Curr = FinFunction(Int64[], 0, 1), Next = FinFunction(Int64[], 0, 0)), Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##228\".Life {V:1, E:0, Curr:1, Next:0}), nothing, 1], ¬∃2 (monic, ): (1⋅2 = 3))], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())\n :Persist => Rule{:DPO}(ACSetTransformation((V = id(FinSet(1)), E = id(FinSet(0)), Curr = id(FinSet(1)), Next = id(FinSet(0))), Main.var\"##228\".Life {V:1, E:0, Curr:1, Next:0}, Main.var\"##228\".Life {V:1, E:0, Curr:1, Next:0}), ACSetTransformation((V = FinFunction([1], 1, 1), E = FinFunction(Int64[], 0, 0), Curr = FinFunction([1], 1, 1), Next = FinFunction(Int64[], 0, 1)), Main.var\"##228\".Life {V:1, E:0, Curr:1, Next:0}, Main.var\"##228\".Life {V:1, E:0, Curr:1, Next:1}), Constraint[Constraint(CGraph:\n V = 1:3\n E = 1:3\n VLabel = 1:0\n ELabel = 1:0\n src : E → V = [2, 1, 2]\n tgt : E → V = [1, 3, 3]\n vlabel : V → VLabel = Union{Nothing, Main.var\"##228\".Life}[Main.var\"##228\".Life:\n V = 1:3\n E = 1:4\n Curr = 1:3\n Next = 1:0\n src : E → V = [2, 1, 3, 1]\n tgt : E → V = [1, 2, 1, 3]\n inv : E → E = [2, 1, 4, 3]\n curr : Curr → V = [1, 2, 3]\n next : Next → V = Int64[], Main.var\"##228\".Life:\n V = 1:1\n E = 1:0\n Curr = 1:1\n Next = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n inv : E → E = Int64[]\n curr : Curr → V = [1]\n next : Next → V = Int64[], nothing]\n elabel : E → ELabel = Any[ACSetTransformation((V = FinFunction([1], 1, 3), E = FinFunction(Int64[], 0, 4), Curr = FinFunction([1], 1, 3), Next = FinFunction(Int64[], 0, 0)), Main.var\"##228\".Life {V:1, E:0, Curr:1, Next:0}, Main.var\"##228\".Life {V:3, E:4, Curr:3, Next:0}), nothing, 1], ∃2 (monic, ): (1⋅2 = 3)), Constraint(CGraph:\n V = 1:3\n E = 1:3\n VLabel = 1:0\n ELabel = 1:0\n src : E → V = [2, 1, 2]\n tgt : E → V = [1, 3, 3]\n vlabel : V → VLabel = Union{Nothing, Main.var\"##228\".Life}[Main.var\"##228\".Life:\n V = 1:5\n E = 1:8\n Curr = 1:5\n Next = 1:0\n src : E → V = [2, 1, 3, 1, 4, 1, 5, 1]\n tgt : E → V = [1, 2, 1, 3, 1, 4, 1, 5]\n inv : E → E = [2, 1, 4, 3, 6, 5, 8, 7]\n curr : Curr → V = [1, 2, 3, 4, 5]\n next : Next → V = Int64[], Main.var\"##228\".Life:\n V = 1:1\n E = 1:0\n Curr = 1:1\n Next = 1:0\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n inv : E → E = Int64[]\n curr : Curr → V = [1]\n next : Next → V = Int64[], nothing]\n elabel : E → ELabel = Any[ACSetTransformation((V = FinFunction([1], 1, 5), E = FinFunction(Int64[], 0, 8), Curr = FinFunction([1], 1, 5), Next = FinFunction(Int64[], 0, 0)), Main.var\"##228\".Life {V:1, E:0, Curr:1, Next:0}, Main.var\"##228\".Life {V:5, E:8, Curr:5, Next:0}), nothing, 1], ¬∃2 (monic, ): (1⋅2 = 3))], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())\n :ClearCurr => Rule{:DPO}(ACSetTransformation((V = FinFunction([1], 1, 1), E = FinFunction(Int64[], 0, 0), Curr = FinFunction(Int64[], 0, 1), Next = FinFunction(Int64[], 0, 0)), Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##228\".Life {V:1, E:0, Curr:1, Next:0}), ACSetTransformation((V = id(FinSet(1)), E = id(FinSet(0)), Curr = id(FinSet(0)), Next = id(FinSet(0))), Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:0}), Constraint[], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())\n :ClearNext => Rule{:DPO}(ACSetTransformation((V = FinFunction([1], 1, 1), E = FinFunction(Int64[], 0, 0), Curr = FinFunction(Int64[], 0, 0), Next = FinFunction(Int64[], 0, 1)), Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:1}), ACSetTransformation((V = id(FinSet(1)), E = id(FinSet(0)), Curr = id(FinSet(0)), Next = id(FinSet(0))), Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:0}), Constraint[], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())\n :CopyNext => Rule{:DPO}(ACSetTransformation((V = FinFunction([1], 1, 1), E = FinFunction(Int64[], 0, 0), Curr = FinFunction(Int64[], 0, 0), Next = FinFunction(Int64[], 0, 1)), Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:1}), ACSetTransformation((V = FinFunction([1], 1, 1), E = FinFunction(Int64[], 0, 0), Curr = FinFunction(Int64[], 0, 1), Next = FinFunction(Int64[], 0, 0)), Main.var\"##228\".Life {V:1, E:0, Curr:0, Next:0}, Main.var\"##228\".Life {V:1, E:0, Curr:1, Next:0}), Constraint[], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())" - }, - "metadata": {}, - "execution_count": 7 - } - ], - "cell_type": "code", - "source": [ - "PersistR = @acset Life begin\n", - " V = 1\n", - " Curr = 1\n", - " Next = 1\n", - " curr = 1\n", - " next = 1\n", - "end\n", - "PersistP1 = living_neighbors(2; alive=true)\n", - "PersistN1 = living_neighbors(4; alive=true)\n", - "DR, DP1, DN1 = homomorphism.(Ref(Curr()), [PersistR, PersistP1, PersistN1])\n", - "pac = [AppCond(DP1; monic=true), AppCond(DN1, false; monic=true)]\n", - "Persist = Rule(id(Curr()), DR; ac=pac)\n", - "\n", - "ClearCurr = Rule(to_curr(), id(Life(1))) # remove \"Curr\" status\n", - "ClearNext = Rule(to_next(), id(Life(1))) # remove \"Next\" status\n", - "CopyNext = Rule(to_next(), to_curr()) # Copy \"Next\" to \"Curr\"\n", - "\n", - "rules = [:Birth => Birth, :Persist => Persist, :ClearCurr => ClearCurr,\n", - " :ClearNext => ClearNext, :CopyNext => CopyNext]" - ], - "metadata": {}, - "execution_count": 7 - }, - { - "cell_type": "markdown", - "source": [ - "# Schedule" - ], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ - "All rules have interface of a single distinguished cell.\n", - "Never distinguish control flow of successful vs unsuccessful application" - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "view_life (generic function with 7 methods)" - }, - "metadata": {}, - "execution_count": 8 - } - ], - "cell_type": "code", - "source": [ - "rBirth, rPersist, rClearCurr, rClearNext, rCopyNext =\n", - " [tryrule(RuleApp(n, r, Life(1))) for (n, r) in rules]\n", - "\n", - "update_next = agent(rBirth ⋅ rPersist, Life(1); n=:Cell)\n", - "next_step = agent(compose(rClearCurr, rCopyNext, rClearNext), Life(1); n=:Cell)\n", - "life(n::Int) = for_schedule(update_next ⋅ next_step, n) |> F\n", - "const L1 = life(1)\n", - "\n", - "G = make_grid([1 0 1 0 1; 0 1 0 1 0; 0 1 0 1 0; 1 0 1 0 1; 1 0 1 0 1])\n", - "\n", - "res, = apply_schedule(L1, G; steps=1000)\n", - "traj = last(res).edge.o.val\n", - "\n", - "view_life(i, traj) = view_life(traj.steps[i].world)" - ], - "metadata": {}, - "execution_count": 8 - }, - { - "cell_type": "markdown", - "source": [ - "view_traj(L1, res, view_life; agent=true)" - ], - "metadata": {} - } - ], - "nbformat_minor": 3, - "metadata": { - "language_info": { - "file_extension": ".jl", - "mimetype": "application/julia", - "name": "julia", - "version": "1.10.0" - }, - "kernelspec": { - "name": "julia-1.10", - "display_name": "Julia 1.10.0", - "language": "julia" - } - }, - "nbformat": 4 -} diff --git a/docs/src/generated/game_of_life.md b/docs/src/generated/game_of_life.md deleted file mode 100644 index 8852f1d..0000000 --- a/docs/src/generated/game_of_life.md +++ /dev/null @@ -1,221 +0,0 @@ -```@meta -EditURL = "../../literate/game_of_life.jl" -``` - -# Conway's Game of Life - -````@example game_of_life -using AlgebraicRewriting -using Catlab, Catlab.Graphs, Catlab.CategoricalAlgebra, Catlab.Theories -import Catlab.Graphics: to_graphviz -using Catlab.Graphics.Graphviz: Attributes, Statement, Node, Edge, Digraph -using PrettyTables -using Luxor -```` - -The game of life has two rules: one which turns living things dead, and one that brings dead things to life. We model the terrain as a symmetric graph: cells are vertices. Neighboring cells have edges between them. - -Implementation wise, if we are going to update cells one at a time, we must keep track of two bits of information (the cell's living status for the *current* timestep and whether it will be alive in the *next* timestep). Thus we need helper rule to overwrite the "current" life status with the "next" life status at the end of each timestep. - -# Schema - -`curr` and `next` pick out subsets of V which are marked as currently alive or -to be alive in the next timestep. - -````@example game_of_life -@present SchLife <: SchSymmetricGraph begin - (Curr, Next)::Ob - curr::Hom(Curr, V) - next::Hom(Next, V) -end -@present SchLifeCoords <: SchLife begin - Coords::AttrType - coords::Attr(V, Coords) -end -@acset_type Life(SchLife) <: AbstractSymmetricGraph -@acset_type AbsLifeCoords(SchLifeCoords) <: AbstractSymmetricGraph -const LifeCoords = AbsLifeCoords{Tuple{Int,Int}} -F = Migrate( - Dict(x => x for x in Symbol.(generators(SchLife, :Ob))), - Dict(x => x for x in Symbol.(generators(SchLife, :Hom))), LifeCoords; delta=false) -```` - -# Helper - -## Visualization - -````@example game_of_life -function view_life(f::ACSetTransformation, pth=tempname()) - v = collect(f[:V]) - view_life(codom(f), pth; star=isempty(v) ? nothing : only(v)) -end -function view_life(X::Life, pth=tempname(); star=nothing) - pg = PropertyGraph{Any}(; prog="neato", graph=Dict(), - node=Dict(:shape => "circle", :style => "filled", :margin => "0"), - edge=Dict(:dir => "none", :minlen => "1")) - add_vertices!(pg, nparts(X, :V)) - for v in vertices(X) - set_vprop!(pg, v, :fillcolor, isempty(incident(X, v, :curr)) ? "red" : "green") - if !isempty(incident(X, v, :next)) - set_vprop!(pg, v, :penwidth, "4.0") - end - set_vprop!(pg, v, :label, star == v ? "*" : "") - end - for e in filter(e -> X[e, :inv] > e, edges(X)) - add_edge!(pg, X[e, :src], X[e, :tgt]) - end - G = to_graphviz(pg) - open(pth, "w") do io - show(io, "image/svg+xml", G) - end - G -end -function view_life(X::LifeCoords, pth=tempname(); star=nothing) - n = Int(sqrt(nparts(X, :V))) - coords = Dict([(i, j) => findfirst(==((i, j)), X[:coords]) - for (i, j) in Iterators.product(1:n, 1:n)]) - mat = pretty_table(String, reduce(hcat, map(1:n) do i - map(1:n) do j - c, x = [!isempty(incident(X, coords[(i, j)], x)) for x in [:curr, :next]] - res = c ? (x ? "O" : "o") : (x ? "X" : "x") - return res * ((star == coords[(i, j)]) ? "." : "") - end - end); show_header=false, tf=tf_markdown) - open(pth, "w") do io - write(io, mat) - end - return mat -end -```` - -## Constructions for Life ACSets / maps between them - -````@example game_of_life -Next() = @acset Life begin - V = 1 - Next = 1 - next = 1 -end -Curr() = @acset Life begin - V = 1 - Curr = 1 - curr = 1 -end -to_next() = homomorphism(Life(1), Next()) -to_curr() = homomorphism(Life(1), Curr()) - -"""Construct a cell connected to n living neighbors""" -function living_neighbors(n::Int; alive=false) - X = Life(1) - if alive - add_part!(X, :Curr, curr=1) - end - for _ in 1:n - v = add_part!(X, :V) - add_part!(X, :Curr, curr=v) - add_edge!(X, v, 1) - end - return X -end -```` - -## Initialization of LifeCoords - -````@example game_of_life -function make_grid(curr::AbstractMatrix, next=nothing) - n, m = size(curr) - n == m || error("Must be square") - X, coords = LifeCoords(), Dict() - for i in 1:n - for j in 1:n - coords[i=>j] = add_vertex!(X; coords=(i, j)) - if Bool(curr[i, j]) - add_part!(X, :Curr, curr=coords[i=>j]) - end - if !isnothing(next) && Bool(next[i, j]) - add_part!(X, :Curr, curr=coords[i=>j]) - end - end - end - for i in 1:n - for j in 1:n - if i < n - add_edge!(X, coords[i=>j], coords[i+1=>j]) - end - if j < n - add_edge!(X, coords[i=>j], coords[i=>j+1]) - end - if i < n && j < n - add_edge!(X, coords[i=>j], coords[i+1=>j+1]) - end - if i < n && j > 1 - add_edge!(X, coords[i=>j], coords[i+1=>j-1]) - end - end - end - return X -end -make_grid(n::Int, random=false) = make_grid((random ? rand : zeros)(Bool, (n, n))) -```` - -# Rules - -A dead cell becomes alive iff exactly 3 living neighbors - -````@example game_of_life -BirthP1 = living_neighbors(3) # must have 3 neighbors -BirthN1 = living_neighbors(4) # forbid the cell to have 4 neighbors -BirthN2 = Curr() # forbid the cell to be alive (i.e. it's currently dead) -BP1, BN1, BN2 = homomorphism.(Ref(Life(1)), [BirthP1, BirthN1, BirthN2]) -bac = [AppCond(BP1; monic=true), AppCond.([BN1, BN2], false; monic=true)...] -Birth = Rule(id(Life(1)), to_next(); ac=bac) -```` - -A living cell stays alive iff 2 or 3 living neighbors - -````@example game_of_life -PersistR = @acset Life begin - V = 1 - Curr = 1 - Next = 1 - curr = 1 - next = 1 -end -PersistP1 = living_neighbors(2; alive=true) -PersistN1 = living_neighbors(4; alive=true) -DR, DP1, DN1 = homomorphism.(Ref(Curr()), [PersistR, PersistP1, PersistN1]) -pac = [AppCond(DP1; monic=true), AppCond(DN1, false; monic=true)] -Persist = Rule(id(Curr()), DR; ac=pac) - -ClearCurr = Rule(to_curr(), id(Life(1))) # remove "Curr" status -ClearNext = Rule(to_next(), id(Life(1))) # remove "Next" status -CopyNext = Rule(to_next(), to_curr()) # Copy "Next" to "Curr" - -rules = [:Birth => Birth, :Persist => Persist, :ClearCurr => ClearCurr, - :ClearNext => ClearNext, :CopyNext => CopyNext] -```` - -# Schedule - -All rules have interface of a single distinguished cell. -Never distinguish control flow of successful vs unsuccessful application - -````@example game_of_life -rBirth, rPersist, rClearCurr, rClearNext, rCopyNext = - [tryrule(RuleApp(n, r, Life(1))) for (n, r) in rules] - -update_next = agent(rBirth ⋅ rPersist, Life(1); n=:Cell) -next_step = agent(compose(rClearCurr, rCopyNext, rClearNext), Life(1); n=:Cell) -life(n::Int) = for_schedule(update_next ⋅ next_step, n) |> F -const L1 = life(1) - -G = make_grid([1 0 1 0 1; 0 1 0 1 0; 0 1 0 1 0; 1 0 1 0 1; 1 0 1 0 1]) - -res, = apply_schedule(L1, G; steps=1000) -traj = last(res).edge.o.val - -view_life(i, traj) = view_life(traj.steps[i].world) -```` - -view_traj(L1, res, view_life; agent=true) - diff --git a/docs/src/generated/lotka_volterra.ipynb b/docs/src/generated/lotka_volterra.ipynb deleted file mode 100644 index 0690385..0000000 --- a/docs/src/generated/lotka_volterra.ipynb +++ /dev/null @@ -1,1337 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "source": [ - "# Lotka Volterra" - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "left (generic function with 7 methods)" - }, - "metadata": {}, - "execution_count": 1 - } - ], - "cell_type": "code", - "source": [ - "using Catlab, DataMigrations, AlgebraicRewriting\n", - "using Random, Test, StructEquality\n", - "using Luxor\n", - "\n", - "Random.seed!(123)\n", - "\n", - "using Catlab.Graphics.Graphviz: Attributes, Statement, Node\n", - "using Catlab.Graphics.Graphviz\n", - "\n", - "import Catlab.CategoricalAlgebra: left, right\n", - "\n", - "function right(s::Symbol)\n", - " if s == :N\n", - " return :E\n", - " elseif s == :S\n", - " return :W\n", - " elseif s == :E\n", - " return :S\n", - " elseif s == :W\n", - " return :N\n", - " end\n", - "end\n", - "function left(s::Symbol)\n", - " if s == :N\n", - " return :W\n", - " elseif s == :S\n", - " return :E\n", - " elseif s == :E\n", - " return :N\n", - " elseif s == :W\n", - " return :S\n", - " end\n", - "end" - ], - "metadata": {}, - "execution_count": 1 - }, - { - "cell_type": "markdown", - "source": [ - "Grass = 0 means alive grass, whereas grass > 0 represent a counter of time until the grass is alive.\n", - "\n", - "Sheeps and wolves have position and direction, so we assign each an *edge*. We assume a convention where the location of the something is the edge SOURCE.\n", - "\n", - "Dir is an attribute which can take values :N, :E, :W, and :S." - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "Migrate(Dict(:Wolf => :Wolf, :V => :V, :Sheep => :Sheep, :E => :E), Dict(:wolf_loc => :wolf_loc, :src => :src, :sheep_loc => :sheep_loc, :tgt => :tgt), Main.var\"##232\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}, Main.var\"##232\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}}, false)" - }, - "metadata": {}, - "execution_count": 2 - } - ], - "cell_type": "code", - "source": [ - "@present TheoryLV <: SchGraph begin\n", - " (Sheep, Wolf)::Ob\n", - " sheep_loc::Hom(Sheep, V)\n", - " wolf_loc::Hom(Wolf, V)\n", - "\n", - " (Dir, Eng)::AttrType\n", - " grass_eng::Attr(V, Eng)\n", - " sheep_eng::Attr(Sheep, Eng)\n", - " wolf_eng::Attr(Wolf, Eng)\n", - " sheep_dir::Attr(Sheep, Dir)\n", - " wolf_dir::Attr(Wolf, Dir)\n", - " dir::Attr(E, Dir)\n", - "end\n", - "\n", - "@present TheoryLV′ <: TheoryLV begin\n", - " Coord::AttrType\n", - " coord::Attr(V, Coord)\n", - "end\n", - "\n", - "to_graphviz(TheoryLV; prog=\"dot\")\n", - "\n", - "@acset_type LV_Generic(TheoryLV) <: HasGraph\n", - "const LV = LV_Generic{Symbol,Int}\n", - "\n", - "@acset_type LV′_Generic(TheoryLV′) <: HasGraph\n", - "const LV′ = LV′_Generic{Symbol,Int,Tuple{Int,Int}}\n", - "\n", - "F = Migrate(\n", - " Dict(:Sheep => :Wolf, :Wolf => :Sheep),\n", - " Dict([:sheep_loc => :wolf_loc, :wolf_loc => :sheep_loc,\n", - " :sheep_eng => :wolf_eng, :wolf_eng => :sheep_eng, :grass_eng => :grass_eng,\n", - " :sheep_dir => :wolf_dir, :wolf_dir => :sheep_dir,]), LV)\n", - "F2 = Migrate(\n", - " Dict(x => x for x in Symbol.(TheoryLV.generators[:Ob])),\n", - " Dict(x => x for x in Symbol.(TheoryLV.generators[:Hom])), LV′; delta=false)" - ], - "metadata": {}, - "execution_count": 2 - }, - { - "cell_type": "markdown", - "source": [ - "Create an n × n grid with periodic boundary conditions. Edges in each cardinal\n", - "direction originate at every point\n", - "\n", - "(i,j+1) -> (i+1,j+1) -> ...\n", - " ↑ ↑\n", - "(i,j) -> (i+1,j) -> ..." - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "Main.var\"##232\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}} {V:4, E:16, Sheep:0, Wolf:0, Dir:0, Eng:0, Coord:0}\n┌───┬───────────┬────────┐\n│\u001b[1m V \u001b[0m│\u001b[1m grass_eng \u001b[0m│\u001b[1m coord \u001b[0m│\n├───┼───────────┼────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │ (0, 0) │\n│\u001b[1m 2 \u001b[0m│ 5 │ (0, 1) │\n│\u001b[1m 3 \u001b[0m│ 24 │ (1, 0) │\n│\u001b[1m 4 \u001b[0m│ 0 │ (1, 1) │\n└───┴───────────┴────────┘\n┌────┬─────┬─────┬─────┐\n│\u001b[1m E \u001b[0m│\u001b[1m src \u001b[0m│\u001b[1m tgt \u001b[0m│\u001b[1m dir \u001b[0m│\n├────┼─────┼─────┼─────┤\n│\u001b[1m 1 \u001b[0m│ 1 │ 3 │ E │\n│\u001b[1m 2 \u001b[0m│ 1 │ 3 │ W │\n│\u001b[1m 3 \u001b[0m│ 1 │ 2 │ N │\n│\u001b[1m 4 \u001b[0m│ 1 │ 2 │ S │\n│\u001b[1m 5 \u001b[0m│ 2 │ 4 │ E │\n│\u001b[1m 6 \u001b[0m│ 2 │ 4 │ W │\n│\u001b[1m 7 \u001b[0m│ 2 │ 1 │ N │\n│\u001b[1m 8 \u001b[0m│ 2 │ 1 │ S │\n│\u001b[1m 9 \u001b[0m│ 3 │ 1 │ E │\n│\u001b[1m 10 \u001b[0m│ 3 │ 1 │ W │\n│\u001b[1m 11 \u001b[0m│ 3 │ 4 │ N │\n│\u001b[1m 12 \u001b[0m│ 3 │ 4 │ S │\n│\u001b[1m 13 \u001b[0m│ 4 │ 2 │ E │\n│\u001b[1m 14 \u001b[0m│ 4 │ 2 │ W │\n│\u001b[1m 15 \u001b[0m│ 4 │ 3 │ N │\n│\u001b[1m 16 \u001b[0m│ 4 │ 3 │ S │\n└────┴─────┴─────┴─────┘\n", - "text/html": [ - "
\n", - "Main.var\"##232\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}} {V:4, E:16, Sheep:0, Wolf:0, Dir:0, Eng:0, Coord:0}\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Vgrass_engcoord
11(0, 0)
25(0, 1)
324(1, 0)
40(1, 1)
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Esrctgtdir
113E
213W
312N
412S
524E
624W
721N
821S
931E
1031W
1134N
1234S
1342E
1442W
1543N
1643S
\n", - "
\n" - ] - }, - "metadata": {}, - "execution_count": 3 - } - ], - "cell_type": "code", - "source": [ - "function create_grid(n::Int)\n", - " lv = LV′()\n", - " coords = Dict()\n", - " for i in 0:n-1 # Initialize grass 50% green, 50% uniformly between 0-30\n", - " for j in 0:n-1\n", - " coords[i=>j] = add_part!(lv, :V; grass_eng=max(0, rand(-30:30)), coord=(i, j))\n", - " end\n", - " end\n", - " for i in 0:n-1\n", - " for j in 0:n-1\n", - " add_part!(lv, :E; src=coords[i=>j], tgt=coords[mod(i + 1, n)=>j], dir=:E)\n", - " add_part!(lv, :E; src=coords[i=>j], tgt=coords[mod(i - 1, n)=>j], dir=:W)\n", - " add_part!(lv, :E; src=coords[i=>j], tgt=coords[i=>mod(j + 1, n)], dir=:N)\n", - " add_part!(lv, :E; src=coords[i=>j], tgt=coords[i=>mod(j - 1, n)], dir=:S)\n", - " end\n", - " end\n", - " return lv\n", - "end\n", - "\n", - "g = create_grid(2)" - ], - "metadata": {}, - "execution_count": 3 - }, - { - "cell_type": "markdown", - "source": [ - "`n` is the length of the grid.\n", - "`sheep` and `wolves` are the fraction of spaces that are\n", - "populated with that animal" - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "supscript (generic function with 1 method)" - }, - "metadata": {}, - "execution_count": 4 - } - ], - "cell_type": "code", - "source": [ - "function initialize(n::Int, sheep::Float64, wolves::Float64)::LV′\n", - " grid = create_grid(n)\n", - " args = [(sheep, :Sheep, :sheep_loc, :sheep_eng, :sheep_dir),\n", - " (wolves, :Wolf, :wolf_loc, :wolf_eng, :wolf_dir)]\n", - " for (n_, name, loc, eng, d) in args\n", - " for _ in 1:round(Int, n_ * n^2)\n", - " dic = Dict([eng => 5, loc => rand(vertices(grid)),\n", - " d => rand([:N, :E, :S, :W])])\n", - " add_part!(grid, name; dic...)\n", - " end\n", - " end\n", - " return grid\n", - "end\n", - "\n", - "\n", - "supscript_d = Dict([\n", - " '1' => '¹', '2' => '²', '3' => '³', '4' => '⁴', '5' => '⁵', '6' => '⁶', '7' => '⁷', '8' => '⁸',\n", - " '9' => '⁹', '0' => '⁰', 'x' => 'ˣ', 'y' => 'ʸ', 'z' => 'ᶻ', 'a' => 'ᵃ', 'b' => 'ᵇ', 'c' => 'ᶜ',\n", - " 'd' => 'ᵈ'])\n", - "supscript(x::String) = join([get(supscript_d, c, c) for c in x])" - ], - "metadata": {}, - "execution_count": 4 - }, - { - "cell_type": "markdown", - "source": [ - "Visualize a LV" - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "Main.var\"##232\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}} {V:4, E:16, Sheep:2, Wolf:2, Dir:0, Eng:0, Coord:0}\n┌───┬───────────┬────────┐\n│\u001b[1m V \u001b[0m│\u001b[1m grass_eng \u001b[0m│\u001b[1m coord \u001b[0m│\n├───┼───────────┼────────┤\n│\u001b[1m 1 \u001b[0m│ 2 │ (0, 0) │\n│\u001b[1m 2 \u001b[0m│ 0 │ (0, 1) │\n│\u001b[1m 3 \u001b[0m│ 0 │ (1, 0) │\n│\u001b[1m 4 \u001b[0m│ 26 │ (1, 1) │\n└───┴───────────┴────────┘\n┌────┬─────┬─────┬─────┐\n│\u001b[1m E \u001b[0m│\u001b[1m src \u001b[0m│\u001b[1m tgt \u001b[0m│\u001b[1m dir \u001b[0m│\n├────┼─────┼─────┼─────┤\n│\u001b[1m 1 \u001b[0m│ 1 │ 3 │ E │\n│\u001b[1m 2 \u001b[0m│ 1 │ 3 │ W │\n│\u001b[1m 3 \u001b[0m│ 1 │ 2 │ N │\n│\u001b[1m 4 \u001b[0m│ 1 │ 2 │ S │\n│\u001b[1m 5 \u001b[0m│ 2 │ 4 │ E │\n│\u001b[1m 6 \u001b[0m│ 2 │ 4 │ W │\n│\u001b[1m 7 \u001b[0m│ 2 │ 1 │ N │\n│\u001b[1m 8 \u001b[0m│ 2 │ 1 │ S │\n│\u001b[1m 9 \u001b[0m│ 3 │ 1 │ E │\n│\u001b[1m 10 \u001b[0m│ 3 │ 1 │ W │\n│\u001b[1m 11 \u001b[0m│ 3 │ 4 │ N │\n│\u001b[1m 12 \u001b[0m│ 3 │ 4 │ S │\n│\u001b[1m 13 \u001b[0m│ 4 │ 2 │ E │\n│\u001b[1m 14 \u001b[0m│ 4 │ 2 │ W │\n│\u001b[1m 15 \u001b[0m│ 4 │ 3 │ N │\n│\u001b[1m 16 \u001b[0m│ 4 │ 3 │ S │\n└────┴─────┴─────┴─────┘\n┌───────┬───────────┬───────────┬───────────┐\n│\u001b[1m Sheep \u001b[0m│\u001b[1m sheep_loc \u001b[0m│\u001b[1m sheep_eng \u001b[0m│\u001b[1m sheep_dir \u001b[0m│\n├───────┼───────────┼───────────┼───────────┤\n│\u001b[1m 1 \u001b[0m│ 3 │ 5 │ E │\n│\u001b[1m 2 \u001b[0m│ 3 │ 5 │ W │\n└───────┴───────────┴───────────┴───────────┘\n┌──────┬──────────┬──────────┬──────────┐\n│\u001b[1m Wolf \u001b[0m│\u001b[1m wolf_loc \u001b[0m│\u001b[1m wolf_eng \u001b[0m│\u001b[1m wolf_dir \u001b[0m│\n├──────┼──────────┼──────────┼──────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │ 5 │ E │\n│\u001b[1m 2 \u001b[0m│ 2 │ 5 │ N │\n└──────┴──────────┴──────────┴──────────┘\n", - "text/html": [ - "
\n", - "Main.var\"##232\".LV′_Generic{Symbol, Int64, Tuple{Int64, Int64}} {V:4, E:16, Sheep:2, Wolf:2, Dir:0, Eng:0, Coord:0}\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Vgrass_engcoord
12(0, 0)
20(0, 1)
30(1, 0)
426(1, 1)
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Esrctgtdir
113E
213W
312N
412S
524E
624W
721N
821S
931E
1031W
1134N
1234S
1342E
1442W
1543N
1643S
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Sheepsheep_locsheep_engsheep_dir
135E
235W
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Wolfwolf_locwolf_engwolf_dir
115E
225N
\n", - "
\n" - ] - }, - "metadata": {}, - "execution_count": 5 - } - ], - "cell_type": "code", - "source": [ - "function view_LV(p::ACSetTransformation, pth=tempname(); name=\"G\", title=\"\")\n", - " if nparts(dom(p), :Wolf) == 1\n", - " star = :Wolf => p[:Wolf](1)\n", - " elseif nparts(dom(p), :Sheep) == 1\n", - " star = :Sheep => p[:Sheep](1)\n", - " elseif nparts(dom(p), :V) == 1\n", - " star = :V => p[:V](1)\n", - " else\n", - " star = nothing\n", - " end\n", - " view_LV(codom(p), pth; name=name, title=title, star=star)\n", - "end\n", - "function view_LV(p::LV′, pth=tempname(); name=\"G\", title=\"\", star=nothing)\n", - " pstr = [\"$(i),$(j)!\" for (i, j) in p[:coord]]\n", - " stmts = Statement[]\n", - " for s in 1:nv(p)\n", - " st = (star == (:V => s)) ? \"*\" : \"\"\n", - " gv = p[s, :grass_eng]\n", - " col = gv == 0 ? \"lightgreen\" : \"tan\"\n", - " push!(stmts, Node(\"v$s\", Attributes(\n", - " :label => gv == 0 ? \"\" : string(gv) * st,\n", - " :shape => \"circle\",\n", - " :color => col, :pos => pstr[s])))\n", - " end\n", - " d = Dict([:E => (1, 0), :N => (0, 1), :S => (0, -1), :W => (-1, 0),])\n", - "\n", - " args = [(:true, :Wolf, :wolf_loc, :wolf_eng, :wolf_dir),\n", - " (false, :Sheep, :sheep_loc, :sheep_eng, :sheep_dir)]\n", - "\n", - " for (is_wolf, prt, loc, eng, dr) in args\n", - " for w in parts(p, prt)\n", - " st = (star == ((is_wolf ? :Wolf : :Sheep) => w)) ? \"*\" : \"\"\n", - " e = only(incident(p, p[w, loc], :src) ∩ incident(p, p[w, dr], :dir))\n", - " s = src(p, e)\n", - " dx, dy = d[p[e, :dir]]\n", - " (sx, sy) = p[s, :coord]\n", - "\n", - " L, R = 0.25, 0.1\n", - " wx = sx + L * dx + R * rand()\n", - " wy = sy + L * dy + R * rand()\n", - " ID = \"$(is_wolf ? :w : :s)$w\"\n", - " append!(stmts, [Node(ID, Attributes(\n", - " :label => \"$w\" * supscript(\"$(p[w,eng])\") * st,\n", - " :shape => \"square\", :width => \"0.3px\", :height => \"0.3px\", :fixedsize => \"true\",\n", - " :pos => \"$(wx),$(wy)!\", :color => is_wolf ? \"red\" : \"lightblue\"))])\n", - " end\n", - " end\n", - "\n", - " g = Graphviz.Digraph(name, Statement[stmts...]; prog=\"neato\",\n", - " graph_attrs=Attributes(:label => title, :labelloc => \"t\"),\n", - " node_attrs=Attributes(:shape => \"plain\", :style => \"filled\"))\n", - " open(pth, \"w\") do io\n", - " show(io, \"image/svg+xml\", g)\n", - " end\n", - "end\n", - "\n", - "i1 = initialize(2, 0.5, 0.5)" - ], - "metadata": {}, - "execution_count": 5 - }, - { - "cell_type": "markdown", - "source": [ - "# Rules" - ], - "metadata": {} - }, - { - "outputs": [], - "cell_type": "code", - "source": [ - "yLV = yoneda_cache(LV; clear=true);\n", - "yLV = yoneda_cache(LV; clear=false);" - ], - "metadata": {}, - "execution_count": 6 - }, - { - "cell_type": "markdown", - "source": [ - "Empty agent type" - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "Main.var\"##232\".LV_Generic{Symbol, Int64} {V:0, E:0, Sheep:0, Wolf:0, Dir:0, Eng:0}\n", - "text/html": [ - "
\n", - "Main.var\"##232\".LV_Generic{Symbol, Int64} {V:0, E:0, Sheep:0, Wolf:0, Dir:0, Eng:0}\n", - "
\n" - ] - }, - "metadata": {}, - "execution_count": 7 - } - ], - "cell_type": "code", - "source": [ - "I = LV()" - ], - "metadata": {}, - "execution_count": 7 - }, - { - "cell_type": "markdown", - "source": [ - "Generic sheep agent" - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "Main.var\"##232\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:1, Wolf:0, Dir:1, Eng:2}\n┌───┬────────────┐\n│\u001b[1m V \u001b[0m│\u001b[1m grass_eng \u001b[0m│\n├───┼────────────┤\n│\u001b[1m 1 \u001b[0m│ AttrVar(2) │\n└───┴────────────┘\n┌───────┬───────────┬────────────┬────────────┐\n│\u001b[1m Sheep \u001b[0m│\u001b[1m sheep_loc \u001b[0m│\u001b[1m sheep_eng \u001b[0m│\u001b[1m sheep_dir \u001b[0m│\n├───────┼───────────┼────────────┼────────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │ AttrVar(1) │ AttrVar(1) │\n└───────┴───────────┴────────────┴────────────┘\n", - "text/html": [ - "
\n", - "Main.var\"##232\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:1, Wolf:0, Dir:1, Eng:2}\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Vgrass_eng
1AttrVar(2)
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Sheepsheep_locsheep_engsheep_dir
11AttrVar(1)AttrVar(1)
\n", - "
\n" - ] - }, - "metadata": {}, - "execution_count": 8 - } - ], - "cell_type": "code", - "source": [ - "S = @acset_colim yLV begin\n", - " s::Sheep\n", - "end" - ], - "metadata": {}, - "execution_count": 8 - }, - { - "cell_type": "markdown", - "source": [ - "Generic wolf agent" - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "Main.var\"##232\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:0, Wolf:1, Dir:1, Eng:2}\n┌───┬────────────┐\n│\u001b[1m V \u001b[0m│\u001b[1m grass_eng \u001b[0m│\n├───┼────────────┤\n│\u001b[1m 1 \u001b[0m│ AttrVar(2) │\n└───┴────────────┘\n┌──────┬──────────┬────────────┬────────────┐\n│\u001b[1m Wolf \u001b[0m│\u001b[1m wolf_loc \u001b[0m│\u001b[1m wolf_eng \u001b[0m│\u001b[1m wolf_dir \u001b[0m│\n├──────┼──────────┼────────────┼────────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │ AttrVar(1) │ AttrVar(1) │\n└──────┴──────────┴────────────┴────────────┘\n", - "text/html": [ - "
\n", - "Main.var\"##232\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:0, Wolf:1, Dir:1, Eng:2}\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Vgrass_eng
1AttrVar(2)
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Wolfwolf_locwolf_engwolf_dir
11AttrVar(1)AttrVar(1)
\n", - "
\n" - ] - }, - "metadata": {}, - "execution_count": 9 - } - ], - "cell_type": "code", - "source": [ - "W = F(S)" - ], - "metadata": {}, - "execution_count": 9 - }, - { - "cell_type": "markdown", - "source": [ - "Generic grass agent" - ], - "metadata": {} - }, - { - "outputs": [], - "cell_type": "code", - "source": [ - "G = @acset_colim yLV begin\n", - " v::V\n", - "end\n", - "\n", - "N = Names(Dict(\"W\" => W, \"S\" => S, \"G\" => G, \"\" => I));" - ], - "metadata": {}, - "execution_count": 10 - }, - { - "cell_type": "markdown", - "source": [ - "## Rotating" - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "Schedule(WiringDiagram{AlgebraicRewriting.Schedules.Theories.ThTracedMonoidalWithBidiagonals.Meta.T}([Main.var\"##232\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:1, Wolf:0, Dir:1, Eng:2}], [Main.var\"##232\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:1, Wolf:0, Dir:1, Eng:2}], \n[ -2 => {inputs},\n -1 => {outputs},\n 1 => Box(\"turn_right\", [Main.var\"##232\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]], [Main.var\"##232\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[],Main.var\"##232\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[]]) ],\n[ Wire((-2,1) => (1,1)),\n Wire((1,1) => (-1,1)),\n Wire((1,2) => (-1,1)) ]), compose(turn_right,mmerge(Main.var\"##232\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:1\n Wolf = 1:0\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = [1]\n wolf_loc : Wolf → V = Int64[]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_eng : Wolf → Eng = Int64[]\n sheep_dir : Sheep → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n wolf_dir : Wolf → Dir = Symbol[]\n dir : E → Dir = Symbol[])))" - }, - "metadata": {}, - "execution_count": 11 - } - ], - "cell_type": "code", - "source": [ - "rl = Rule(id(S), id(S); expr=(Dir=[xs -> left(only(xs))],))\n", - "rr = Rule(id(S), id(S); expr=(Dir=[xs -> right(only(xs))],))\n", - "\n", - "sheep_rotate_l = tryrule(RuleApp(:turn_left, rl, S))\n", - "sheep_rotate_r = tryrule(RuleApp(:turn_right, rr, S))" - ], - "metadata": {}, - "execution_count": 11 - }, - { - "cell_type": "markdown", - "source": [ - "We can imagine executing these rules in sequence or in parallel" - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" - }, - "metadata": {}, - "execution_count": 12 - } - ], - "cell_type": "code", - "source": [ - "seq_sched = (sheep_rotate_l ⋅ sheep_rotate_r)\n", - "par_sched = (sheep_rotate_l ⊗ sheep_rotate_r)\n", - "\n", - "begin\n", - " ex = @acset_colim yLV begin\n", - " e::E\n", - " s::Sheep\n", - " sheep_loc(s) == src(e)\n", - " sheep_dir(s) == :N\n", - " end\n", - " expected = copy(ex)\n", - " expected[:sheep_dir] = :W\n", - " @test is_isomorphic(rewrite(rl, ex), expected)\n", - "end" - ], - "metadata": {}, - "execution_count": 12 - }, - { - "cell_type": "markdown", - "source": [ - "## Moving forward" - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" - }, - "metadata": {}, - "execution_count": 13 - } - ], - "cell_type": "code", - "source": [ - "s_fwd_l = @acset_colim yLV begin\n", - " e::E\n", - " s::Sheep\n", - " sheep_loc(s) == src(e)\n", - "end\n", - "s_fwd_i = @acset_colim yLV begin\n", - " e::E\n", - "end\n", - "s_fwd_r = @acset_colim yLV begin\n", - " e::E\n", - " s::Sheep\n", - " sheep_loc(s) == tgt(e)\n", - "end\n", - "s_n = @acset_colim yLV begin\n", - " e::E\n", - " s::Sheep\n", - " sheep_loc(s) == src(e)\n", - " sheep_eng(s) == 0\n", - "end\n", - "\n", - "sheep_fwd_rule = Rule(\n", - " homomorphism(s_fwd_i, s_fwd_l; monic=true),\n", - " homomorphism(s_fwd_i, s_fwd_r; monic=true),\n", - " ac=[AppCond(homomorphism(s_fwd_l, s_n), false)],\n", - " expr=(Eng=Dict(3 => vs -> vs[3] - 1), Dir=Dict(2 => vs -> vs[2]))\n", - ")\n", - "\n", - "sheep_fwd = tryrule(RuleApp(:move_fwd, sheep_fwd_rule,\n", - " homomorphism(S, s_fwd_l), homomorphism(S, s_fwd_r)))\n", - "\n", - "\n", - "sheep_fwd_rule.L |> codom\n", - "\n", - "begin # test\n", - " ex = @acset_colim yLV begin\n", - " (e1, e2)::E\n", - " s::Sheep\n", - " sheep_loc(s) == tgt(e1)\n", - " tgt(e1) == src(e2)\n", - " sheep_dir(s) == :N\n", - " sheep_eng(s) == 10\n", - " end\n", - " expected = @acset_colim yLV begin\n", - " (e1, e2)::E\n", - " s::Sheep\n", - " sheep_loc(s) == tgt(e2)\n", - " tgt(e1) == src(e2)\n", - " sheep_dir(s) == :N\n", - " sheep_eng(s) == 9\n", - " end\n", - " @test is_isomorphic(expected, rewrite(sheep_fwd_rule, ex))\n", - "end" - ], - "metadata": {}, - "execution_count": 13 - }, - { - "cell_type": "markdown", - "source": [ - "Eat grass + 4eng\n", - "Grass is at 0 - meaning it's ready to be eaten" - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" - }, - "metadata": {}, - "execution_count": 14 - } - ], - "cell_type": "code", - "source": [ - "s_eat_pac = @acset_colim yLV begin\n", - " s::Sheep\n", - " grass_eng(sheep_loc(s)) == 0\n", - "end\n", - "\n", - "se_rule = Rule(id(S), id(S); expr=(Eng=[vs -> vs[1] + 4, vs -> 30],),\n", - " ac=[AppCond(homomorphism(S, s_eat_pac))])\n", - "sheep_eat = tryrule(RuleApp(:Sheep_eat, se_rule, S))\n", - "\n", - "begin # test\n", - " ex = @acset_colim yLV begin\n", - " s::Sheep\n", - " e::E\n", - " sheep_loc(s) == tgt(e)\n", - " sheep_eng(s) == 3\n", - " grass_eng(tgt(e)) == 0\n", - " grass_eng(src(e)) == 10\n", - " end\n", - " expected = @acset_colim yLV begin\n", - " s::Sheep\n", - " e::E\n", - " sheep_loc(s) == tgt(e)\n", - " sheep_eng(s) == 7\n", - " grass_eng(tgt(e)) == 30\n", - " grass_eng(src(e)) == 10\n", - " end\n", - "\n", - " @test is_isomorphic(expected, rewrite(se_rule, ex))\n", - "end" - ], - "metadata": {}, - "execution_count": 14 - }, - { - "cell_type": "markdown", - "source": [ - "Eat sheep + 20 eng" - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "Schedule(WiringDiagram{AlgebraicRewriting.Schedules.Theories.ThTracedMonoidalWithBidiagonals.Meta.T}([Main.var\"##232\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:0, Wolf:1, Dir:1, Eng:2}], [Main.var\"##232\".LV_Generic{Symbol, Int64} {V:1, E:0, Sheep:0, Wolf:1, Dir:1, Eng:2}], \n[ -2 => {inputs},\n -1 => {outputs},\n 1 => Box(\"Wolf_eat\", [Main.var\"##232\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]], [Main.var\"##232\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[],Main.var\"##232\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[]]) ],\n[ Wire((-2,1) => (1,1)),\n Wire((1,1) => (-1,1)),\n Wire((1,2) => (-1,1)) ]), compose(Wolf_eat,mmerge(Main.var\"##232\".LV_Generic{Symbol, Int64}:\n V = 1:1\n E = 1:0\n Sheep = 1:0\n Wolf = 1:1\n Dir = 1:1\n Eng = 1:2\n src : E → V = Int64[]\n tgt : E → V = Int64[]\n sheep_loc : Sheep → V = Int64[]\n wolf_loc : Wolf → V = [1]\n grass_eng : V → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(2)]\n sheep_eng : Sheep → Eng = Int64[]\n wolf_eng : Wolf → Eng = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n sheep_dir : Sheep → Dir = Symbol[]\n wolf_dir : Wolf → Dir = ACSets.ColumnImplementations.AttrVar[ACSets.ColumnImplementations.AttrVar(1)]\n dir : E → Dir = Symbol[])))" - }, - "metadata": {}, - "execution_count": 15 - } - ], - "cell_type": "code", - "source": [ - "w_eat_l = @acset_colim yLV begin\n", - " s::Sheep\n", - " w::Wolf\n", - " sheep_loc(s) == wolf_loc(w)\n", - "end\n", - "\n", - "we_rule = Rule(homomorphism(W, w_eat_l), id(W); expr=(Eng=[vs -> vs[3] + 20, vs -> vs[1]],))\n", - "wolf_eat = tryrule(RuleApp(:Wolf_eat, we_rule, W))" - ], - "metadata": {}, - "execution_count": 15 - }, - { - "cell_type": "markdown", - "source": [ - "### A test" - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" - }, - "metadata": {}, - "execution_count": 16 - } - ], - "cell_type": "code", - "source": [ - "ex = @acset LV begin\n", - " Sheep = 1\n", - " Wolf = 1\n", - " V = 3\n", - " E = 2\n", - " src = [1, 2]\n", - " tgt = [2, 3]\n", - " sheep_loc = 2\n", - " sheep_eng = [3]\n", - " grass_eng = [9, 10, 11]\n", - " dir = fill(:N, 2)\n", - " sheep_dir = [:N]\n", - " wolf_loc = [2]\n", - " wolf_eng = [16]\n", - " wolf_dir = [:S]\n", - "end\n", - "expected = @acset LV begin\n", - " Wolf = 1\n", - " V = 3\n", - " E = 2\n", - " src = [1, 2]\n", - " tgt = [2, 3]\n", - " grass_eng = [9, 10, 11]\n", - " dir = fill(:N, 2)\n", - " sheep_dir = [:N]\n", - " wolf_loc = [2]\n", - " wolf_eng = [36]\n", - " wolf_dir = [:S]\n", - "end\n", - "@test is_isomorphic(rewrite(we_rule, ex), expected)" - ], - "metadata": {}, - "execution_count": 16 - }, - { - "cell_type": "markdown", - "source": [ - "Die if 0 eng" - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" - }, - "metadata": {}, - "execution_count": 17 - } - ], - "cell_type": "code", - "source": [ - "s_die_l = @acset_colim yLV begin\n", - " s::Sheep\n", - " sheep_eng(s) == 0\n", - "end\n", - "\n", - "sheep_die_rule = Rule(homomorphism(G, s_die_l), id(G))\n", - "sheep_starve = (RuleApp(:starve, sheep_die_rule,\n", - " homomorphism(S, s_die_l), create(G))\n", - " ⋅\n", - " (id([I]) ⊗ Weaken(create(S))) ⋅ merge_wires(I))\n", - "\n", - "begin # test\n", - " ex = s_die_l ⊕ W\n", - " expected = G ⊕ W\n", - " @test is_isomorphic(rewrite(sheep_die_rule, ex), expected)\n", - "end" - ], - "metadata": {}, - "execution_count": 17 - }, - { - "cell_type": "markdown", - "source": [ - "Reproduction" - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" - }, - "metadata": {}, - "execution_count": 18 - } - ], - "cell_type": "code", - "source": [ - "s_reprod_r = @acset_colim yLV begin\n", - " (x, y)::Sheep\n", - " sheep_loc(x) == sheep_loc(y)\n", - "end\n", - "\n", - "sheep_reprod_rule = Rule(\n", - " homomorphism(G, S),\n", - " homomorphism(G, s_reprod_r);\n", - " expr=(Dir=[vs -> vs[1], vs -> vs[1]], Eng=[vs -> vs[2],\n", - " fill(vs -> round(Int, vs[1] / 2, RoundUp), 2)...],)\n", - ")\n", - "\n", - "sheep_reprod = RuleApp(:reproduce, sheep_reprod_rule,\n", - " id(S), homomorphism(S, s_reprod_r)) |> tryrule\n", - "\n", - "begin # test\n", - " ex = @acset_colim yLV begin\n", - " s::Sheep\n", - " w::Wolf\n", - " sheep_eng(s) == 10\n", - " end\n", - " expected = @acset_colim yLV begin\n", - " (s1, s2)::Sheep\n", - " w::Wolf\n", - " sheep_loc(s1) == sheep_loc(s2)\n", - " sheep_eng(s1) == 5\n", - " sheep_eng(s2) == 5\n", - " end\n", - " @test is_isomorphic(rewrite(sheep_reprod_rule, ex), expected)\n", - "end" - ], - "metadata": {}, - "execution_count": 18 - }, - { - "cell_type": "markdown", - "source": [ - "Grass increment" - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "\u001b[32m\u001b[1mTest Passed\u001b[22m\u001b[39m" - }, - "metadata": {}, - "execution_count": 19 - } - ], - "cell_type": "code", - "source": [ - "g_inc_n = deepcopy(G)\n", - "set_subpart!(g_inc_n, 1, :grass_eng, 0)\n", - "rem_part!(g_inc_n, :Eng, 1)\n", - "\n", - "g_inc_rule = Rule(id(G), id(G);\n", - " ac=[AppCond(homomorphism(G, g_inc_n), false)],\n", - " expr=(Eng=[vs -> only(vs) - 1],))\n", - "g_inc = RuleApp(:GrassIncrements, g_inc_rule, G) |> tryrule\n", - "\n", - "\n", - "ex = @acset LV begin\n", - " Sheep = 1\n", - " V = 3\n", - " E = 2\n", - " src = [1, 2]\n", - " tgt = [2, 3]\n", - " sheep_loc = 2\n", - " sheep_eng = [3]\n", - " grass_eng = [1, 10, 2]\n", - " dir = fill(:N, 2)\n", - " sheep_dir = [:N]\n", - "end\n", - "expected = @acset LV begin\n", - " Sheep = 1\n", - " V = 3\n", - " E = 2\n", - " src = [1, 2]\n", - " tgt = [2, 3]\n", - " sheep_loc = 2\n", - " sheep_eng = [3]\n", - " grass_eng = [0, 10, 2]\n", - " dir = fill(:N, 2)\n", - " sheep_dir = [:N]\n", - "end\n", - "@test is_isomorphic(rewrite(g_inc_rule, ex), expected)" - ], - "metadata": {}, - "execution_count": 19 - }, - { - "cell_type": "markdown", - "source": [ - "Scheduling Rules" - ], - "metadata": {} - }, - { - "outputs": [], - "cell_type": "code", - "source": [ - "general = mk_sched((;), (init=:S,), N, (\n", - " turn=const_cond([1.0, 2.0, 1.0], S; name=:turn),\n", - " maybe=const_cond([0.1, 0.9], S; name=:reprod),\n", - " lft=sheep_rotate_l,\n", - " rght=sheep_rotate_r,\n", - " fwd=sheep_fwd,\n", - " repro=sheep_reprod,\n", - " starve=sheep_starve),\n", - " quote\n", - " out_l, out_str, out_r = turn(init)\n", - " moved = fwd([lft(out_l), out_str, rght(out_r)])\n", - " out_repro, out_no_repro = maybe(moved)\n", - " return starve([repro(out_repro), out_no_repro])\n", - " end)\n", - "\n", - "sheep = sheep_eat ⋅ general; # once per sheep\n", - "wolf = wolf_eat ⋅ F(general); # once per wolf" - ], - "metadata": {}, - "execution_count": 20 - }, - { - "cell_type": "markdown", - "source": [ - "Do all sheep, then all wolves, then all daily operations" - ], - "metadata": {} - }, - { - "outputs": [], - "cell_type": "code", - "source": [ - "cycle = (agent(sheep; n=:sheep, ret=I)\n", - " ⋅\n", - " agent(wolf; n=:wolves, ret=I)\n", - " ⋅\n", - " agent(g_inc; n=:grass))\n", - "\n", - "overall = while_schedule(cycle, curr -> nparts(curr, :Wolf) >= 0) |> F2 # wrap in a while loop\n", - "\n", - "X = initialize(3, 0.25, 0.25);\n", - "res, = apply_schedule(overall, X; steps=50);" - ], - "metadata": {}, - "execution_count": 21 - } - ], - "nbformat_minor": 3, - "metadata": { - "language_info": { - "file_extension": ".jl", - "mimetype": "application/julia", - "name": "julia", - "version": "1.10.0" - }, - "kernelspec": { - "name": "julia-1.10", - "display_name": "Julia 1.10.0", - "language": "julia" - } - }, - "nbformat": 4 -} diff --git a/docs/src/generated/lotka_volterra.md b/docs/src/generated/lotka_volterra.md deleted file mode 100644 index 508dab1..0000000 --- a/docs/src/generated/lotka_volterra.md +++ /dev/null @@ -1,548 +0,0 @@ -```@meta -EditURL = "../../literate/lotka_volterra.jl" -``` - -# Lotka Volterra - -````@example lotka_volterra -using Catlab, DataMigrations, AlgebraicRewriting -using Random, Test, StructEquality -using Luxor - -Random.seed!(123) - -using Catlab.Graphics.Graphviz: Attributes, Statement, Node -using Catlab.Graphics.Graphviz - -import Catlab.CategoricalAlgebra: left, right - -function right(s::Symbol) - if s == :N - return :E - elseif s == :S - return :W - elseif s == :E - return :S - elseif s == :W - return :N - end -end -function left(s::Symbol) - if s == :N - return :W - elseif s == :S - return :E - elseif s == :E - return :N - elseif s == :W - return :S - end -end -```` - -Grass = 0 means alive grass, whereas grass > 0 represent a counter of time until the grass is alive. - -Sheeps and wolves have position and direction, so we assign each an *edge*. We assume a convention where the location of the something is the edge SOURCE. - -Dir is an attribute which can take values :N, :E, :W, and :S. - -````@example lotka_volterra -@present TheoryLV <: SchGraph begin - (Sheep, Wolf)::Ob - sheep_loc::Hom(Sheep, V) - wolf_loc::Hom(Wolf, V) - - (Dir, Eng)::AttrType - grass_eng::Attr(V, Eng) - sheep_eng::Attr(Sheep, Eng) - wolf_eng::Attr(Wolf, Eng) - sheep_dir::Attr(Sheep, Dir) - wolf_dir::Attr(Wolf, Dir) - dir::Attr(E, Dir) -end - -@present TheoryLV′ <: TheoryLV begin - Coord::AttrType - coord::Attr(V, Coord) -end - -to_graphviz(TheoryLV; prog="dot") - -@acset_type LV_Generic(TheoryLV) <: HasGraph -const LV = LV_Generic{Symbol,Int} - -@acset_type LV′_Generic(TheoryLV′) <: HasGraph -const LV′ = LV′_Generic{Symbol,Int,Tuple{Int,Int}} - -F = Migrate( - Dict(:Sheep => :Wolf, :Wolf => :Sheep), - Dict([:sheep_loc => :wolf_loc, :wolf_loc => :sheep_loc, - :sheep_eng => :wolf_eng, :wolf_eng => :sheep_eng, :grass_eng => :grass_eng, - :sheep_dir => :wolf_dir, :wolf_dir => :sheep_dir,]), LV) -F2 = Migrate( - Dict(x => x for x in Symbol.(TheoryLV.generators[:Ob])), - Dict(x => x for x in Symbol.(TheoryLV.generators[:Hom])), LV′; delta=false) -```` - -Create an n × n grid with periodic boundary conditions. Edges in each cardinal -direction originate at every point - -(i,j+1) -> (i+1,j+1) -> ... - ↑ ↑ -(i,j) -> (i+1,j) -> ... - -````@example lotka_volterra -function create_grid(n::Int) - lv = LV′() - coords = Dict() - for i in 0:n-1 # Initialize grass 50% green, 50% uniformly between 0-30 - for j in 0:n-1 - coords[i=>j] = add_part!(lv, :V; grass_eng=max(0, rand(-30:30)), coord=(i, j)) - end - end - for i in 0:n-1 - for j in 0:n-1 - add_part!(lv, :E; src=coords[i=>j], tgt=coords[mod(i + 1, n)=>j], dir=:E) - add_part!(lv, :E; src=coords[i=>j], tgt=coords[mod(i - 1, n)=>j], dir=:W) - add_part!(lv, :E; src=coords[i=>j], tgt=coords[i=>mod(j + 1, n)], dir=:N) - add_part!(lv, :E; src=coords[i=>j], tgt=coords[i=>mod(j - 1, n)], dir=:S) - end - end - return lv -end - -g = create_grid(2) -```` - -`n` is the length of the grid. -`sheep` and `wolves` are the fraction of spaces that are -populated with that animal - -````@example lotka_volterra -function initialize(n::Int, sheep::Float64, wolves::Float64)::LV′ - grid = create_grid(n) - args = [(sheep, :Sheep, :sheep_loc, :sheep_eng, :sheep_dir), - (wolves, :Wolf, :wolf_loc, :wolf_eng, :wolf_dir)] - for (n_, name, loc, eng, d) in args - for _ in 1:round(Int, n_ * n^2) - dic = Dict([eng => 5, loc => rand(vertices(grid)), - d => rand([:N, :E, :S, :W])]) - add_part!(grid, name; dic...) - end - end - return grid -end - - -supscript_d = Dict([ - '1' => '¹', '2' => '²', '3' => '³', '4' => '⁴', '5' => '⁵', '6' => '⁶', '7' => '⁷', '8' => '⁸', - '9' => '⁹', '0' => '⁰', 'x' => 'ˣ', 'y' => 'ʸ', 'z' => 'ᶻ', 'a' => 'ᵃ', 'b' => 'ᵇ', 'c' => 'ᶜ', - 'd' => 'ᵈ']) -supscript(x::String) = join([get(supscript_d, c, c) for c in x]) -```` - -Visualize a LV - -````@example lotka_volterra -function view_LV(p::ACSetTransformation, pth=tempname(); name="G", title="") - if nparts(dom(p), :Wolf) == 1 - star = :Wolf => p[:Wolf](1) - elseif nparts(dom(p), :Sheep) == 1 - star = :Sheep => p[:Sheep](1) - elseif nparts(dom(p), :V) == 1 - star = :V => p[:V](1) - else - star = nothing - end - view_LV(codom(p), pth; name=name, title=title, star=star) -end -function view_LV(p::LV′, pth=tempname(); name="G", title="", star=nothing) - pstr = ["$(i),$(j)!" for (i, j) in p[:coord]] - stmts = Statement[] - for s in 1:nv(p) - st = (star == (:V => s)) ? "*" : "" - gv = p[s, :grass_eng] - col = gv == 0 ? "lightgreen" : "tan" - push!(stmts, Node("v$s", Attributes( - :label => gv == 0 ? "" : string(gv) * st, - :shape => "circle", - :color => col, :pos => pstr[s]))) - end - d = Dict([:E => (1, 0), :N => (0, 1), :S => (0, -1), :W => (-1, 0),]) - - args = [(:true, :Wolf, :wolf_loc, :wolf_eng, :wolf_dir), - (false, :Sheep, :sheep_loc, :sheep_eng, :sheep_dir)] - - for (is_wolf, prt, loc, eng, dr) in args - for w in parts(p, prt) - st = (star == ((is_wolf ? :Wolf : :Sheep) => w)) ? "*" : "" - e = only(incident(p, p[w, loc], :src) ∩ incident(p, p[w, dr], :dir)) - s = src(p, e) - dx, dy = d[p[e, :dir]] - (sx, sy) = p[s, :coord] - - L, R = 0.25, 0.1 - wx = sx + L * dx + R * rand() - wy = sy + L * dy + R * rand() - ID = "$(is_wolf ? :w : :s)$w" - append!(stmts, [Node(ID, Attributes( - :label => "$w" * supscript("$(p[w,eng])") * st, - :shape => "square", :width => "0.3px", :height => "0.3px", :fixedsize => "true", - :pos => "$(wx),$(wy)!", :color => is_wolf ? "red" : "lightblue"))]) - end - end - - g = Graphviz.Digraph(name, Statement[stmts...]; prog="neato", - graph_attrs=Attributes(:label => title, :labelloc => "t"), - node_attrs=Attributes(:shape => "plain", :style => "filled")) - open(pth, "w") do io - show(io, "image/svg+xml", g) - end -end - -i1 = initialize(2, 0.5, 0.5) -```` - -# Rules - -````@example lotka_volterra -yLV = yoneda_cache(LV; clear=true); -yLV = yoneda_cache(LV; clear=false); -nothing #hide -```` - -Empty agent type - -````@example lotka_volterra -I = LV() -```` - -Generic sheep agent - -````@example lotka_volterra -S = @acset_colim yLV begin - s::Sheep -end -```` - -Generic wolf agent - -````@example lotka_volterra -W = F(S) -```` - -Generic grass agent - -````@example lotka_volterra -G = @acset_colim yLV begin - v::V -end - -N = Names(Dict("W" => W, "S" => S, "G" => G, "" => I)); -nothing #hide -```` - -## Rotating - -````@example lotka_volterra -rl = Rule(id(S), id(S); expr=(Dir=[xs -> left(only(xs))],)) -rr = Rule(id(S), id(S); expr=(Dir=[xs -> right(only(xs))],)) - -sheep_rotate_l = tryrule(RuleApp(:turn_left, rl, S)) -sheep_rotate_r = tryrule(RuleApp(:turn_right, rr, S)) -```` - -We can imagine executing these rules in sequence or in parallel - -````@example lotka_volterra -seq_sched = (sheep_rotate_l ⋅ sheep_rotate_r) -par_sched = (sheep_rotate_l ⊗ sheep_rotate_r) - -begin - ex = @acset_colim yLV begin - e::E - s::Sheep - sheep_loc(s) == src(e) - sheep_dir(s) == :N - end - expected = copy(ex) - expected[:sheep_dir] = :W - @test is_isomorphic(rewrite(rl, ex), expected) -end -```` - -## Moving forward - -````@example lotka_volterra -s_fwd_l = @acset_colim yLV begin - e::E - s::Sheep - sheep_loc(s) == src(e) -end -s_fwd_i = @acset_colim yLV begin - e::E -end -s_fwd_r = @acset_colim yLV begin - e::E - s::Sheep - sheep_loc(s) == tgt(e) -end -s_n = @acset_colim yLV begin - e::E - s::Sheep - sheep_loc(s) == src(e) - sheep_eng(s) == 0 -end - -sheep_fwd_rule = Rule( - homomorphism(s_fwd_i, s_fwd_l; monic=true), - homomorphism(s_fwd_i, s_fwd_r; monic=true), - ac=[AppCond(homomorphism(s_fwd_l, s_n), false)], - expr=(Eng=Dict(3 => vs -> vs[3] - 1), Dir=Dict(2 => vs -> vs[2])) -) - -sheep_fwd = tryrule(RuleApp(:move_fwd, sheep_fwd_rule, - homomorphism(S, s_fwd_l), homomorphism(S, s_fwd_r))) - - -sheep_fwd_rule.L |> codom - -begin # test - ex = @acset_colim yLV begin - (e1, e2)::E - s::Sheep - sheep_loc(s) == tgt(e1) - tgt(e1) == src(e2) - sheep_dir(s) == :N - sheep_eng(s) == 10 - end - expected = @acset_colim yLV begin - (e1, e2)::E - s::Sheep - sheep_loc(s) == tgt(e2) - tgt(e1) == src(e2) - sheep_dir(s) == :N - sheep_eng(s) == 9 - end - @test is_isomorphic(expected, rewrite(sheep_fwd_rule, ex)) -end -```` - -Eat grass + 4eng -Grass is at 0 - meaning it's ready to be eaten - -````@example lotka_volterra -s_eat_pac = @acset_colim yLV begin - s::Sheep - grass_eng(sheep_loc(s)) == 0 -end - -se_rule = Rule(id(S), id(S); expr=(Eng=[vs -> vs[1] + 4, vs -> 30],), - ac=[AppCond(homomorphism(S, s_eat_pac))]) -sheep_eat = tryrule(RuleApp(:Sheep_eat, se_rule, S)) - -begin # test - ex = @acset_colim yLV begin - s::Sheep - e::E - sheep_loc(s) == tgt(e) - sheep_eng(s) == 3 - grass_eng(tgt(e)) == 0 - grass_eng(src(e)) == 10 - end - expected = @acset_colim yLV begin - s::Sheep - e::E - sheep_loc(s) == tgt(e) - sheep_eng(s) == 7 - grass_eng(tgt(e)) == 30 - grass_eng(src(e)) == 10 - end - - @test is_isomorphic(expected, rewrite(se_rule, ex)) -end -```` - -Eat sheep + 20 eng - -````@example lotka_volterra -w_eat_l = @acset_colim yLV begin - s::Sheep - w::Wolf - sheep_loc(s) == wolf_loc(w) -end - -we_rule = Rule(homomorphism(W, w_eat_l), id(W); expr=(Eng=[vs -> vs[3] + 20, vs -> vs[1]],)) -wolf_eat = tryrule(RuleApp(:Wolf_eat, we_rule, W)) -```` - -### A test - -````@example lotka_volterra -ex = @acset LV begin - Sheep = 1 - Wolf = 1 - V = 3 - E = 2 - src = [1, 2] - tgt = [2, 3] - sheep_loc = 2 - sheep_eng = [3] - grass_eng = [9, 10, 11] - dir = fill(:N, 2) - sheep_dir = [:N] - wolf_loc = [2] - wolf_eng = [16] - wolf_dir = [:S] -end -expected = @acset LV begin - Wolf = 1 - V = 3 - E = 2 - src = [1, 2] - tgt = [2, 3] - grass_eng = [9, 10, 11] - dir = fill(:N, 2) - sheep_dir = [:N] - wolf_loc = [2] - wolf_eng = [36] - wolf_dir = [:S] -end -@test is_isomorphic(rewrite(we_rule, ex), expected) -```` - -Die if 0 eng - -````@example lotka_volterra -s_die_l = @acset_colim yLV begin - s::Sheep - sheep_eng(s) == 0 -end - -sheep_die_rule = Rule(homomorphism(G, s_die_l), id(G)) -sheep_starve = (RuleApp(:starve, sheep_die_rule, - homomorphism(S, s_die_l), create(G)) - ⋅ - (id([I]) ⊗ Weaken(create(S))) ⋅ merge_wires(I)) - -begin # test - ex = s_die_l ⊕ W - expected = G ⊕ W - @test is_isomorphic(rewrite(sheep_die_rule, ex), expected) -end -```` - -Reproduction - -````@example lotka_volterra -s_reprod_r = @acset_colim yLV begin - (x, y)::Sheep - sheep_loc(x) == sheep_loc(y) -end - -sheep_reprod_rule = Rule( - homomorphism(G, S), - homomorphism(G, s_reprod_r); - expr=(Dir=[vs -> vs[1], vs -> vs[1]], Eng=[vs -> vs[2], - fill(vs -> round(Int, vs[1] / 2, RoundUp), 2)...],) -) - -sheep_reprod = RuleApp(:reproduce, sheep_reprod_rule, - id(S), homomorphism(S, s_reprod_r)) |> tryrule - -begin # test - ex = @acset_colim yLV begin - s::Sheep - w::Wolf - sheep_eng(s) == 10 - end - expected = @acset_colim yLV begin - (s1, s2)::Sheep - w::Wolf - sheep_loc(s1) == sheep_loc(s2) - sheep_eng(s1) == 5 - sheep_eng(s2) == 5 - end - @test is_isomorphic(rewrite(sheep_reprod_rule, ex), expected) -end -```` - -Grass increment - -````@example lotka_volterra -g_inc_n = deepcopy(G) -set_subpart!(g_inc_n, 1, :grass_eng, 0) -rem_part!(g_inc_n, :Eng, 1) - -g_inc_rule = Rule(id(G), id(G); - ac=[AppCond(homomorphism(G, g_inc_n), false)], - expr=(Eng=[vs -> only(vs) - 1],)) -g_inc = RuleApp(:GrassIncrements, g_inc_rule, G) |> tryrule - - -ex = @acset LV begin - Sheep = 1 - V = 3 - E = 2 - src = [1, 2] - tgt = [2, 3] - sheep_loc = 2 - sheep_eng = [3] - grass_eng = [1, 10, 2] - dir = fill(:N, 2) - sheep_dir = [:N] -end -expected = @acset LV begin - Sheep = 1 - V = 3 - E = 2 - src = [1, 2] - tgt = [2, 3] - sheep_loc = 2 - sheep_eng = [3] - grass_eng = [0, 10, 2] - dir = fill(:N, 2) - sheep_dir = [:N] -end -@test is_isomorphic(rewrite(g_inc_rule, ex), expected) -```` - -Scheduling Rules - -````@example lotka_volterra -general = mk_sched((;), (init=:S,), N, ( - turn=const_cond([1.0, 2.0, 1.0], S; name=:turn), - maybe=const_cond([0.1, 0.9], S; name=:reprod), - lft=sheep_rotate_l, - rght=sheep_rotate_r, - fwd=sheep_fwd, - repro=sheep_reprod, - starve=sheep_starve), - quote - out_l, out_str, out_r = turn(init) - moved = fwd([lft(out_l), out_str, rght(out_r)]) - out_repro, out_no_repro = maybe(moved) - return starve([repro(out_repro), out_no_repro]) - end) - -sheep = sheep_eat ⋅ general; # once per sheep -wolf = wolf_eat ⋅ F(general); # once per wolf -nothing #hide -```` - -Do all sheep, then all wolves, then all daily operations - -````@example lotka_volterra -cycle = (agent(sheep; n=:sheep, ret=I) - ⋅ - agent(wolf; n=:wolves, ret=I) - ⋅ - agent(g_inc; n=:grass)) - -overall = while_schedule(cycle, curr -> nparts(curr, :Wolf) >= 0) |> F2 # wrap in a while loop - -X = initialize(3, 0.25, 0.25); -res, = apply_schedule(overall, X; steps=50); -nothing #hide -```` - diff --git a/docs/src/generated/ptg_simple.ipynb b/docs/src/generated/ptg_simple.ipynb deleted file mode 100644 index 8b50094..0000000 --- a/docs/src/generated/ptg_simple.ipynb +++ /dev/null @@ -1,835 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "source": [ - "# Slice Bread" - ], - "metadata": {} - }, - { - "outputs": [], - "cell_type": "code", - "source": [ - "using PrettyTables\n", - "\n", - "using Catlab\n", - "using AlgebraicRewriting" - ], - "metadata": {}, - "execution_count": 1 - }, - { - "cell_type": "markdown", - "source": [ - "Create an ontology by defining a finite presentation of a freely generated category using @present macro\n", - "\n", - "About the world: The Bread World Ontology has the types Thing, BreadLoaf, Countertop, and Stool. The Breadloaf, Countertop, and Stool types have morphisms to Thing that represent is-a relationships. The InOn type can be used to encode a set relation (as opposed to a function) that was two morphisms going to Thing. One morphism points out the LHS of the relation and the other morphism point out the RHS of the relation." - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "GATlab.Models.Presentations.Presentation{Catlab.Theories.ThSchema.Meta.T, Symbol}(Catlab.Theories.FreeSchema, (Ob = Catlab.Theories.FreeSchema.Ob{:generator}[Thing, BreadLoaf, Countertop, Stool, InOn], Hom = Catlab.Theories.FreeSchema.Hom{:generator}[BreadLoafIsThing, CountertopIsThing, StoolIsThing, inOn_l, inOn_r], AttrType = Catlab.Theories.FreeSchema.AttrType{:generator}[], Attr = Catlab.Theories.FreeSchema.Attr{:generator}[]), Dict(:inOn_r => (:Hom => 5), :CountertopIsThing => (:Hom => 2), :Countertop => (:Ob => 3), :BreadLoaf => (:Ob => 2), :Thing => (:Ob => 1), :BreadLoafIsThing => (:Hom => 1), :StoolIsThing => (:Hom => 3), :InOn => (:Ob => 5), :inOn_l => (:Hom => 4), :Stool => (:Ob => 4)…), Pair[])" - }, - "metadata": {}, - "execution_count": 2 - } - ], - "cell_type": "code", - "source": [ - "@present OntBreadWorld(FreeSchema) begin\n", - " Thing::Ob\n", - " BreadLoaf::Ob\n", - " Countertop::Ob\n", - " Stool::Ob\n", - "\n", - " BreadLoafIsThing::Hom(BreadLoaf, Thing) # is-a\n", - " CountertopIsThing::Hom(Countertop, Thing) # is-a\n", - " StoolIsThing::Hom(Stool, Thing) # is-a\n", - "\n", - " InOn::Ob\n", - " inOn_l::Hom(InOn, Thing)\n", - " inOn_r::Hom(InOn, Thing)\n", - "end" - ], - "metadata": {}, - "execution_count": 2 - }, - { - "cell_type": "markdown", - "source": [ - "Visualize the ontology" - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"neato\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"Thing\")), Catlab.Graphics.Graphviz.Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"BreadLoaf\")), Catlab.Graphics.Graphviz.Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"Countertop\")), Catlab.Graphics.Graphviz.Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"Stool\")), Catlab.Graphics.Graphviz.Node(\"n5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"InOn\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"BreadLoafIsThing\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"CountertopIsThing\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"StoolIsThing\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"inOn_l\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"inOn_r\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:margin => \"0\", :shape => \"ellipse\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())", - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "n1\n", - "\n", - "Thing\n", - "\n", - "\n", - "\n", - "n2\n", - "\n", - "BreadLoaf\n", - "\n", - "\n", - "\n", - "n2->n1\n", - "\n", - "\n", - "BreadLoafIsThing\n", - "\n", - "\n", - "\n", - "n3\n", - "\n", - "Countertop\n", - "\n", - "\n", - "\n", - "n3->n1\n", - "\n", - "\n", - "CountertopIsThing\n", - "\n", - "\n", - "\n", - "n4\n", - "\n", - "Stool\n", - "\n", - "\n", - "\n", - "n4->n1\n", - "\n", - "\n", - "StoolIsThing\n", - "\n", - "\n", - "\n", - "n5\n", - "\n", - "InOn\n", - "\n", - "\n", - "\n", - "n5->n1\n", - "\n", - "\n", - "inOn_l\n", - "\n", - "\n", - "\n", - "n5->n1\n", - "\n", - "\n", - "inOn_r\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {}, - "execution_count": 3 - } - ], - "cell_type": "code", - "source": [ - "to_graphviz(OntBreadWorld)" - ], - "metadata": {}, - "execution_count": 3 - }, - { - "cell_type": "markdown", - "source": [ - "Make the ontology an acset type" - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "Main.var\"##236\".BreadWorld" - }, - "metadata": {}, - "execution_count": 4 - } - ], - "cell_type": "code", - "source": [ - "@acset_type BreadWorld(OntBreadWorld)" - ], - "metadata": {}, - "execution_count": 4 - }, - { - "cell_type": "markdown", - "source": [ - "Construct rule by defining a span in the category of ACSets\n", - "\n", - "Use the @acset macro to define an ACSet functor. The LHS refers to a type (or object) in our ontology and the RHS defines the set assignment using FinFunctions. For this, you need to completely specify the ACSet functor, i.e. every object and morphism in the index category must be specified." - ], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ - "**About the rule:** This rule moves a breadloaf from a countertop to a stool." - ], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ - "### Left ACSet" - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "Main.var\"##236\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:1}\n┌───────────┬──────────────────┐\n│\u001b[1m BreadLoaf \u001b[0m│\u001b[1m BreadLoafIsThing \u001b[0m│\n├───────────┼──────────────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │\n└───────────┴──────────────────┘\n┌────────────┬───────────────────┐\n│\u001b[1m Countertop \u001b[0m│\u001b[1m CountertopIsThing \u001b[0m│\n├────────────┼───────────────────┤\n│\u001b[1m 1 \u001b[0m│ 2 │\n└────────────┴───────────────────┘\n┌───────┬──────────────┐\n│\u001b[1m Stool \u001b[0m│\u001b[1m StoolIsThing \u001b[0m│\n├───────┼──────────────┤\n│\u001b[1m 1 \u001b[0m│ 3 │\n└───────┴──────────────┘\n┌──────┬────────┬────────┐\n│\u001b[1m InOn \u001b[0m│\u001b[1m inOn_l \u001b[0m│\u001b[1m inOn_r \u001b[0m│\n├──────┼────────┼────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │ 2 │\n└──────┴────────┴────────┘\n", - "text/html": [ - "
\n", - "Main.var\"##236\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:1}\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
BreadLoafBreadLoafIsThing
11
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CountertopCountertopIsThing
12
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
StoolStoolIsThing
13
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
InOninOn_linOn_r
112
\n", - "
\n" - ] - }, - "metadata": {}, - "execution_count": 5 - } - ], - "cell_type": "code", - "source": [ - "L = @acset BreadWorld begin\n", - " Thing = 3\n", - " BreadLoaf = 1\n", - " Countertop = 1\n", - " Stool = 1\n", - "\n", - " BreadLoafIsThing = [1]\n", - " CountertopIsThing = [2]\n", - " StoolIsThing = [3]\n", - "\n", - " InOn = 1\n", - " inOn_l = [1]\n", - " inOn_r = [2] # breadloaf is on the countertop\n", - "end" - ], - "metadata": {}, - "execution_count": 5 - }, - { - "cell_type": "markdown", - "source": [ - "### Middle/Keep ACSet\n", - "The Thing, Breadloaf, Countertop, and Stool types should be held constant. The InOn type will change because we are changing the underlying set function." - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "Main.var\"##236\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:0}\n┌───────────┬──────────────────┐\n│\u001b[1m BreadLoaf \u001b[0m│\u001b[1m BreadLoafIsThing \u001b[0m│\n├───────────┼──────────────────┤\n│\u001b[1m 1 \u001b[0m│ 0 │\n└───────────┴──────────────────┘\n┌────────────┬───────────────────┐\n│\u001b[1m Countertop \u001b[0m│\u001b[1m CountertopIsThing \u001b[0m│\n├────────────┼───────────────────┤\n│\u001b[1m 1 \u001b[0m│ 0 │\n└────────────┴───────────────────┘\n┌───────┬──────────────┐\n│\u001b[1m Stool \u001b[0m│\u001b[1m StoolIsThing \u001b[0m│\n├───────┼──────────────┤\n│\u001b[1m 1 \u001b[0m│ 0 │\n└───────┴──────────────┘\n", - "text/html": [ - "
\n", - "Main.var\"##236\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:0}\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
BreadLoafBreadLoafIsThing
10
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CountertopCountertopIsThing
10
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
StoolStoolIsThing
10
\n", - "
\n" - ] - }, - "metadata": {}, - "execution_count": 6 - } - ], - "cell_type": "code", - "source": [ - "K = @acset BreadWorld begin\n", - " Thing = 3\n", - " BreadLoaf = 1\n", - " Countertop = 1\n", - " Stool = 1\n", - "end" - ], - "metadata": {}, - "execution_count": 6 - }, - { - "cell_type": "markdown", - "source": [ - "### Right ACSet" - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "Main.var\"##236\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:1}\n┌───────────┬──────────────────┐\n│\u001b[1m BreadLoaf \u001b[0m│\u001b[1m BreadLoafIsThing \u001b[0m│\n├───────────┼──────────────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │\n└───────────┴──────────────────┘\n┌────────────┬───────────────────┐\n│\u001b[1m Countertop \u001b[0m│\u001b[1m CountertopIsThing \u001b[0m│\n├────────────┼───────────────────┤\n│\u001b[1m 1 \u001b[0m│ 2 │\n└────────────┴───────────────────┘\n┌───────┬──────────────┐\n│\u001b[1m Stool \u001b[0m│\u001b[1m StoolIsThing \u001b[0m│\n├───────┼──────────────┤\n│\u001b[1m 1 \u001b[0m│ 3 │\n└───────┴──────────────┘\n┌──────┬────────┬────────┐\n│\u001b[1m InOn \u001b[0m│\u001b[1m inOn_l \u001b[0m│\u001b[1m inOn_r \u001b[0m│\n├──────┼────────┼────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │ 3 │\n└──────┴────────┴────────┘\n", - "text/html": [ - "
\n", - "Main.var\"##236\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:1}\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
BreadLoafBreadLoafIsThing
11
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CountertopCountertopIsThing
12
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
StoolStoolIsThing
13
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
InOninOn_linOn_r
113
\n", - "
\n" - ] - }, - "metadata": {}, - "execution_count": 7 - } - ], - "cell_type": "code", - "source": [ - "R = @acset BreadWorld begin\n", - " Thing = 3\n", - " BreadLoaf = 1\n", - " Countertop = 1\n", - " Stool = 1\n", - "\n", - " BreadLoafIsThing = [1]\n", - " CountertopIsThing = [2]\n", - " StoolIsThing = [3]\n", - "\n", - " InOn = 1\n", - " inOn_l = [1]\n", - " inOn_r = [3] # breadloaf is on the stool\n", - "end" - ], - "metadata": {}, - "execution_count": 7 - }, - { - "cell_type": "markdown", - "source": [ - "### Left leg of span" - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "ACSetTransformation((Thing = FinFunction([1, 2, 3], 3, 3), BreadLoaf = FinFunction([1], 1, 1), Countertop = FinFunction([1], 1, 1), Stool = FinFunction([1], 1, 1), InOn = FinFunction(1:0, 0, 1)), Main.var\"##236\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:0}, Main.var\"##236\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:1})" - }, - "metadata": {}, - "execution_count": 8 - } - ], - "cell_type": "code", - "source": [ - "l = ACSetTransformation(K, L, Thing=[1, 2, 3], BreadLoaf=[1], Countertop=[1], Stool=[1])" - ], - "metadata": {}, - "execution_count": 8 - }, - { - "cell_type": "markdown", - "source": [ - "### Right leg of span" - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "ACSetTransformation((Thing = FinFunction([1, 2, 3], 3, 3), BreadLoaf = FinFunction([1], 1, 1), Countertop = FinFunction([1], 1, 1), Stool = FinFunction([1], 1, 1), InOn = FinFunction(1:0, 0, 1)), Main.var\"##236\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:0}, Main.var\"##236\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:1})" - }, - "metadata": {}, - "execution_count": 9 - } - ], - "cell_type": "code", - "source": [ - "r = ACSetTransformation(K, R, Thing=[1, 2, 3], BreadLoaf=[1], Countertop=[1], Stool=[1])" - ], - "metadata": {}, - "execution_count": 9 - }, - { - "cell_type": "markdown", - "source": [ - "Use AlgebraicRewriting.Rule wrapper to add a rule interface" - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "Rule{:DPO}(ACSetTransformation((Thing = FinFunction([1, 2, 3], 3, 3), BreadLoaf = FinFunction([1], 1, 1), Countertop = FinFunction([1], 1, 1), Stool = FinFunction([1], 1, 1), InOn = FinFunction(1:0, 0, 1)), Main.var\"##236\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:0}, Main.var\"##236\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:1}), ACSetTransformation((Thing = FinFunction([1, 2, 3], 3, 3), BreadLoaf = FinFunction([1], 1, 1), Countertop = FinFunction([1], 1, 1), Stool = FinFunction([1], 1, 1), InOn = FinFunction(1:0, 0, 1)), Main.var\"##236\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:0}, Main.var\"##236\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:1}), Constraint[], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}())" - }, - "metadata": {}, - "execution_count": 10 - } - ], - "cell_type": "code", - "source": [ - "moveBreadRule = Rule(l, r)" - ], - "metadata": {}, - "execution_count": 10 - }, - { - "cell_type": "markdown", - "source": [ - "## WORLD STATE\n", - "Define a world state using the @acset macro. This is the ACSet way of specifying an ACSet. For this, you need to completely specify the ACSet functor, i.e. every object and morphism in the index category must be specified. The ACSets must be specified in terms of FinFunctions." - ], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ - "**About the world state:** In this world state, there are two countertops, one stool, and one breadloaf. All of these amount to four things. The breadloaf is on the first countertop." - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "Main.var\"##236\".BreadWorld {Thing:4, BreadLoaf:1, Countertop:2, Stool:1, InOn:1}\n┌───────────┬──────────────────┐\n│\u001b[1m BreadLoaf \u001b[0m│\u001b[1m BreadLoafIsThing \u001b[0m│\n├───────────┼──────────────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │\n└───────────┴──────────────────┘\n┌────────────┬───────────────────┐\n│\u001b[1m Countertop \u001b[0m│\u001b[1m CountertopIsThing \u001b[0m│\n├────────────┼───────────────────┤\n│\u001b[1m 1 \u001b[0m│ 2 │\n│\u001b[1m 2 \u001b[0m│ 3 │\n└────────────┴───────────────────┘\n┌───────┬──────────────┐\n│\u001b[1m Stool \u001b[0m│\u001b[1m StoolIsThing \u001b[0m│\n├───────┼──────────────┤\n│\u001b[1m 1 \u001b[0m│ 4 │\n└───────┴──────────────┘\n┌──────┬────────┬────────┐\n│\u001b[1m InOn \u001b[0m│\u001b[1m inOn_l \u001b[0m│\u001b[1m inOn_r \u001b[0m│\n├──────┼────────┼────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │ 2 │\n└──────┴────────┴────────┘\n", - "text/html": [ - "
\n", - "Main.var\"##236\".BreadWorld {Thing:4, BreadLoaf:1, Countertop:2, Stool:1, InOn:1}\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
BreadLoafBreadLoafIsThing
11
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CountertopCountertopIsThing
12
23
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
StoolStoolIsThing
14
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
InOninOn_linOn_r
112
\n", - "
\n" - ] - }, - "metadata": {}, - "execution_count": 11 - } - ], - "cell_type": "code", - "source": [ - "state = @acset BreadWorld begin\n", - " Thing = 4\n", - " BreadLoaf = 1\n", - " Countertop = 2\n", - " Stool = 1\n", - "\n", - " BreadLoafIsThing = [1]\n", - " CountertopIsThing = [2, 3] # there are two countertops\n", - " StoolIsThing = [4]\n", - "\n", - " InOn = 1\n", - " inOn_l = [1] # breadloaf is on the countertop 1\n", - " inOn_r = [2]\n", - "end" - ], - "metadata": {}, - "execution_count": 11 - }, - { - "cell_type": "markdown", - "source": [ - "## Apply Rule\n", - "Use the AlgebraicRewriting.get_matches(::Rule{T}, ::ACSet) utility function to find matches between the rule and the state." - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "1-element Vector{Any}:\n ACSetTransformation((Thing = FinFunction([1, 2, 4], 3, 4), BreadLoaf = FinFunction([1], 1, 1), Countertop = FinFunction([1], 1, 2), Stool = FinFunction([1], 1, 1), InOn = FinFunction([1], 1, 1)), Main.var\"##236\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:1}, Main.var\"##236\".BreadWorld {Thing:4, BreadLoaf:1, Countertop:2, Stool:1, InOn:1})" - }, - "metadata": {}, - "execution_count": 12 - } - ], - "cell_type": "code", - "source": [ - "matches = get_matches(moveBreadRule, state)" - ], - "metadata": {}, - "execution_count": 12 - }, - { - "cell_type": "markdown", - "source": [ - "Take the first match" - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "ACSetTransformation((Thing = FinFunction([1, 2, 4], 3, 4), BreadLoaf = FinFunction([1], 1, 1), Countertop = FinFunction([1], 1, 2), Stool = FinFunction([1], 1, 1), InOn = FinFunction([1], 1, 1)), Main.var\"##236\".BreadWorld {Thing:3, BreadLoaf:1, Countertop:1, Stool:1, InOn:1}, Main.var\"##236\".BreadWorld {Thing:4, BreadLoaf:1, Countertop:2, Stool:1, InOn:1})" - }, - "metadata": {}, - "execution_count": 13 - } - ], - "cell_type": "code", - "source": [ - "match = matches[1]" - ], - "metadata": {}, - "execution_count": 13 - }, - { - "cell_type": "markdown", - "source": [ - "Compute the new world state after rewriting" - ], - "metadata": {} - }, - { - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": "Main.var\"##236\".BreadWorld {Thing:4, BreadLoaf:1, Countertop:2, Stool:1, InOn:1}\n┌───────────┬──────────────────┐\n│\u001b[1m BreadLoaf \u001b[0m│\u001b[1m BreadLoafIsThing \u001b[0m│\n├───────────┼──────────────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │\n└───────────┴──────────────────┘\n┌────────────┬───────────────────┐\n│\u001b[1m Countertop \u001b[0m│\u001b[1m CountertopIsThing \u001b[0m│\n├────────────┼───────────────────┤\n│\u001b[1m 1 \u001b[0m│ 2 │\n│\u001b[1m 2 \u001b[0m│ 4 │\n└────────────┴───────────────────┘\n┌───────┬──────────────┐\n│\u001b[1m Stool \u001b[0m│\u001b[1m StoolIsThing \u001b[0m│\n├───────┼──────────────┤\n│\u001b[1m 1 \u001b[0m│ 3 │\n└───────┴──────────────┘\n┌──────┬────────┬────────┐\n│\u001b[1m InOn \u001b[0m│\u001b[1m inOn_l \u001b[0m│\u001b[1m inOn_r \u001b[0m│\n├──────┼────────┼────────┤\n│\u001b[1m 1 \u001b[0m│ 1 │ 3 │\n└──────┴────────┴────────┘\n", - "text/html": [ - "
\n", - "Main.var\"##236\".BreadWorld {Thing:4, BreadLoaf:1, Countertop:2, Stool:1, InOn:1}\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
BreadLoafBreadLoafIsThing
11
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
CountertopCountertopIsThing
12
24
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
StoolStoolIsThing
13
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
InOninOn_linOn_r
113
\n", - "
\n" - ] - }, - "metadata": {}, - "execution_count": 14 - } - ], - "cell_type": "code", - "source": [ - "new_state = rewrite_match(moveBreadRule, match)" - ], - "metadata": {}, - "execution_count": 14 - } - ], - "nbformat_minor": 3, - "metadata": { - "language_info": { - "file_extension": ".jl", - "mimetype": "application/julia", - "name": "julia", - "version": "1.10.0" - }, - "kernelspec": { - "name": "julia-1.10", - "display_name": "Julia 1.10.0", - "language": "julia" - } - }, - "nbformat": 4 -} diff --git a/docs/src/generated/ptg_simple.md b/docs/src/generated/ptg_simple.md deleted file mode 100644 index 2aa9439..0000000 --- a/docs/src/generated/ptg_simple.md +++ /dev/null @@ -1,161 +0,0 @@ -```@meta -EditURL = "../../literate/ptg_simple.jl" -``` - -# Slice Bread - -````@example ptg_simple -using PrettyTables - -using Catlab -using AlgebraicRewriting -```` - -Create an ontology by defining a finite presentation of a freely generated category using @present macro - -About the world: The Bread World Ontology has the types Thing, BreadLoaf, Countertop, and Stool. The Breadloaf, Countertop, and Stool types have morphisms to Thing that represent is-a relationships. The InOn type can be used to encode a set relation (as opposed to a function) that was two morphisms going to Thing. One morphism points out the LHS of the relation and the other morphism point out the RHS of the relation. - -````@example ptg_simple -@present OntBreadWorld(FreeSchema) begin - Thing::Ob - BreadLoaf::Ob - Countertop::Ob - Stool::Ob - - BreadLoafIsThing::Hom(BreadLoaf, Thing) # is-a - CountertopIsThing::Hom(Countertop, Thing) # is-a - StoolIsThing::Hom(Stool, Thing) # is-a - - InOn::Ob - inOn_l::Hom(InOn, Thing) - inOn_r::Hom(InOn, Thing) -end -```` - -Visualize the ontology - -````@example ptg_simple -to_graphviz(OntBreadWorld) -```` - -Make the ontology an acset type - -````@example ptg_simple -@acset_type BreadWorld(OntBreadWorld) -```` - -Construct rule by defining a span in the category of ACSets - -Use the @acset macro to define an ACSet functor. The LHS refers to a type (or object) in our ontology and the RHS defines the set assignment using FinFunctions. For this, you need to completely specify the ACSet functor, i.e. every object and morphism in the index category must be specified. - -**About the rule:** This rule moves a breadloaf from a countertop to a stool. - -### Left ACSet - -````@example ptg_simple -L = @acset BreadWorld begin - Thing = 3 - BreadLoaf = 1 - Countertop = 1 - Stool = 1 - - BreadLoafIsThing = [1] - CountertopIsThing = [2] - StoolIsThing = [3] - - InOn = 1 - inOn_l = [1] - inOn_r = [2] # breadloaf is on the countertop -end -```` - -### Middle/Keep ACSet -The Thing, Breadloaf, Countertop, and Stool types should be held constant. The InOn type will change because we are changing the underlying set function. - -````@example ptg_simple -K = @acset BreadWorld begin - Thing = 3 - BreadLoaf = 1 - Countertop = 1 - Stool = 1 -end -```` - -### Right ACSet - -````@example ptg_simple -R = @acset BreadWorld begin - Thing = 3 - BreadLoaf = 1 - Countertop = 1 - Stool = 1 - - BreadLoafIsThing = [1] - CountertopIsThing = [2] - StoolIsThing = [3] - - InOn = 1 - inOn_l = [1] - inOn_r = [3] # breadloaf is on the stool -end -```` - -### Left leg of span - -````@example ptg_simple -l = ACSetTransformation(K, L, Thing=[1, 2, 3], BreadLoaf=[1], Countertop=[1], Stool=[1]) -```` - -### Right leg of span - -````@example ptg_simple -r = ACSetTransformation(K, R, Thing=[1, 2, 3], BreadLoaf=[1], Countertop=[1], Stool=[1]) -```` - -Use AlgebraicRewriting.Rule wrapper to add a rule interface - -````@example ptg_simple -moveBreadRule = Rule(l, r) -```` - -## WORLD STATE -Define a world state using the @acset macro. This is the ACSet way of specifying an ACSet. For this, you need to completely specify the ACSet functor, i.e. every object and morphism in the index category must be specified. The ACSets must be specified in terms of FinFunctions. - -**About the world state:** In this world state, there are two countertops, one stool, and one breadloaf. All of these amount to four things. The breadloaf is on the first countertop. - -````@example ptg_simple -state = @acset BreadWorld begin - Thing = 4 - BreadLoaf = 1 - Countertop = 2 - Stool = 1 - - BreadLoafIsThing = [1] - CountertopIsThing = [2, 3] # there are two countertops - StoolIsThing = [4] - - InOn = 1 - inOn_l = [1] # breadloaf is on the countertop 1 - inOn_r = [2] -end -```` - -## Apply Rule -Use the AlgebraicRewriting.get_matches(::Rule{T}, ::ACSet) utility function to find matches between the rule and the state. - -````@example ptg_simple -matches = get_matches(moveBreadRule, state) -```` - -Take the first match - -````@example ptg_simple -match = matches[1] -```` - -Compute the new world state after rewriting - -````@example ptg_simple -new_state = rewrite_match(moveBreadRule, match) -```` - From e2a4c0da37563843bb9d50087bf55e193bb75695 Mon Sep 17 00:00:00 2001 From: Angeline Aguinaldo Date: Fri, 19 Jan 2024 12:37:59 -0500 Subject: [PATCH 6/7] clarify player swap example, move sentence to intro --- docs/src/index.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/docs/src/index.md b/docs/src/index.md index bc0f5fb..aa242da 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -4,7 +4,7 @@ CurrentModule = AlgebraicRewriting ``` -Algebraic rewriting is a context-aware find-and-replace operation that is useful for maintaining structure in various scenarios. This package provides tools for such operations in Julia, ensuring that rewrite rules adhere to structures defined using ACSets (see [ACSets.jl](https://github.com/AlgebraicJulia/ACSets.jl) and [Catlab.jl](https://github.com/AlgebraicJulia/Catlab.jl)). +Algebraic rewriting is a context-aware find-and-replace operation that is useful for maintaining structure in various scenarios. This package provides tools for such operations in Julia, ensuring that rewrite rules adhere to structures defined using ACSets (see [ACSets.jl](https://github.com/AlgebraicJulia/ACSets.jl) and [Catlab.jl](https://github.com/AlgebraicJulia/Catlab.jl)). This documentation provides a basic guide to using the AlgebraicRewriting package in Julia. This page will provide you with a gentle overview of how to design and apply rewrite rules for a simple ACSet. **More sophisticated examples** can be found in the side-bar. @@ -56,7 +56,7 @@ It is possible to insert data according to the schema using a **static** approac #### Static Instantiation (`@acset`) If using the **static** approach, you must fully specify the ACSet functors and natural transformation. Here is a rule that defines the ACSet statically. -In this example, the rule swaps player between two teams. +In this example, the rule trades players, one from each team. ```julia L = @acset TeamStatic begin @@ -82,7 +82,7 @@ l = ACSetTransformation(K, L, TeamName=[1, 2]) r = ACSetTransformation(K, R, TeamName=[1, 2]) ``` -#### Colimit-of-representables instantiation (`@acset_colim``) +#### Colimit-of-representables instantiation (`@acset_colim`) If using the **colimit-of-representables** approach, you only need to specify relevant objects and morphism parts. The `K` part is empty because we want all the parts specified in `L` to be rewritten. You can use `homomorphisms` to automatically define the maps `l` and `r`. ```julia @@ -168,6 +168,4 @@ This executes the rewrite process using using the defined rule and match. ```julia result = rewrite_match(rule, match) -``` - -This documentation provides a basic guide to using the AlgebraicRewriting package in Julia. \ No newline at end of file +``` \ No newline at end of file From 4ab460d5d39103e281a594e3396b0652caf97800 Mon Sep 17 00:00:00 2001 From: Angeline Aguinaldo Date: Fri, 19 Jan 2024 19:06:40 -0500 Subject: [PATCH 7/7] modify SportsTeam example in index.md --- docs/src/index.md | 132 ++++++++++++++++++++++++---------------------- 1 file changed, 69 insertions(+), 63 deletions(-) diff --git a/docs/src/index.md b/docs/src/index.md index aa242da..aac8888 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -14,6 +14,7 @@ To begin, set up your environment by importing necessary packages. ```julia using Catlab using AlgebraicRewriting +using DataMigrations ``` ## Design a rewrite rule @@ -23,21 +24,23 @@ The general process for designing a rewrite rule is as follows: A schema defined by a finite presentation of a generalized algebraic theory model using generators, `Ob`, `Hom`, `AttrType`, and `Attr`. ```julia -@present SchTeam(FreeSchema) begin +@present SchSportsTeam(FreeSchema) begin Player::Ob Team::Ob IsMemberOf::Hom(Player, Team) - TeamName::AttrType - HasName::Attr(Team, TeamName) + Name::AttrType + PlayerHasName::Attr(Player, Name) + TeamHasName::Attr(Team, Name) end +to_graphviz(SchSportsTeam) ``` ### 2. Create the schema type Data for rules are stored in a data structure called an ACSet. ```julia -@acset_type Team(SchTeam) +@acset_type SportsTeam(SchSportsTeam) ``` ### 3. Define rule parts @@ -56,52 +59,55 @@ It is possible to insert data according to the schema using a **static** approac #### Static Instantiation (`@acset`) If using the **static** approach, you must fully specify the ACSet functors and natural transformation. Here is a rule that defines the ACSet statically. -In this example, the rule trades players, one from each team. +In this example, the rule swaps players, one from each team. `AttrVar.(1:2)`, or `[AttrVar(1), AttrVar(2)]`, are used as variable placeholders for the names of the players. This allows the rule to be applied independent of player names, as long as two players are specified from opposing teams. Contrastingly, `["Home", "Away"]`, are specified explicitly and, therefore, this rule can only be applied to teams whose names are "Home" and "Away" ```julia -L = @acset TeamStatic begin - Player = 4 - Team = 2 - IsMemberOf = [1, 1, 2, 2] - - TeamName = ["Home", "Away"] - HasName = [1, 2] +L = @acset SportsTeam{String} begin + Player = 2 + Team = 2 + Name = 2 + IsMemberOf = [1, 2] + PlayerHasName = AttrVar.(1:2) + TeamHasName = ["Home", "Away"] end -K = @acset X begin - TeamName = ["Home", "Away"] +K = @acset SportsTeam{String} begin + Team = 2 + Name = 2 + TeamHasName = ["Home", "Away"] end -R = @acset TeamStatic begin - Player = 4 - Team = 2 - IsMemberOf = [1, 2, 1, 2] - - TeamName = ["Home", "Away"] - HasName = [1, 2] +R = @acset SportsTeam{String} begin + Player = 2 + Team = 2 + Name = 2 + IsMemberOf = [2, 1] + PlayerHasName = AttrVar.(1:2) + TeamHasName = ["Home", "Away"] end -l = ACSetTransformation(K, L, TeamName=[1, 2]) -r = ACSetTransformation(K, R, TeamName=[1, 2]) +l = ACSetTransformation(K, L, Team=[1, 2], Name=AttrVar.(1:2)) +r = ACSetTransformation(K, R, Team=[1, 2], Name=AttrVar.(1:2)) ``` #### Colimit-of-representables instantiation (`@acset_colim`) -If using the **colimit-of-representables** approach, you only need to specify relevant objects and morphism parts. The `K` part is empty because we want all the parts specified in `L` to be rewritten. You can use `homomorphisms` to automatically define the maps `l` and `r`. +If using the **colimit-of-representables** approach, you only need to specify relevant objects and morphism parts. Shown here is the translation of the above rule using `@acset_colim`. ```julia -yTeam = yoneda(Team) -L = @acset_colim yTeam begin - (p1, p2)::Player - (team1, team2)::Team - IsMemberOf(p1) == team1 - IsMemberOf(p2) == team2 - end -K = @acset_colim yTeam begin end -R = @acset_colim yTeam begin - (p1, p2)::Player - (team1, team2)::Team - IsMemberOf(p1) == team2 - IsMemberOf(p2) == team1 - end -l = only(homomorphisms(K, L)) -r = only(homomorphisms(K, R)) +ySportsTeam = yoneda(SportsTeam{String}) +L = R = @acset_colim ySportsTeam begin + (p1, p2)::Player + (t1, t2)::Team + IsMemberOf(p1) == t1 + IsMemberOf(p2) == t2 + TeamHasName(t1) == "Home" + TeamHasName(t2) == "Away" +end +K = @acset_colim ySportsTeam begin + (t1, t2)::Team + (n1, n2)::Name + TeamHasName(t1) == "Home" + TeamHasName(t2) == "Away" +end +l = ACSetTransformation(K, L, Team=[1, 2], Name=AttrVar.([1, 2])) +r = ACSetTransformation(K, R, Team=[1, 2], Name=AttrVar.([1, 2])) ``` ### 4. Construct the rule @@ -118,45 +124,45 @@ Similarly, you can choose to define the acset using the static approach or the c - If using the **static approach**, you must fully specify the ACSet for the initial state. ```julia -state = @acset TeamStraightforward begin - Player = 10 - Team = 2 - IsMemberOf = [1, 1, 1, 1, 1, 2, 2, 2, 2, 2] - - TeamName = ["Home", "Away"] - HasName = [1, 2] +state = @acset SportsTeam{String} begin + Player = 4 + Team = 2 + Name = 6 + IsMemberOf = [1, 1, 2, 2] + TeamHasName = ["Home", "Away"] + PlayerHasName = ["Jordan", "Alex", "Casey", "Taylor"] end ``` - If using the **colimit-of-representable approach**, you only need to specify relevant objects and morphism parts. ```julia -state = @acset_colim yTeam begin - (p1, p2, p3, p4, p5, p6, p7, p8, p9, p10)::Player - (team1, team2)::Team - IsMemberOf(p1) == team1 - IsMemberOf(p2) == team1 - IsMemberOf(p3) == team1 - IsMemberOf(p4) == team1 - IsMemberOf(p5) == team1 - IsMemberOf(p6) == team2 - IsMemberOf(p7) == team2 - IsMemberOf(p8) == team2 - IsMemberOf(p9) == team2 - IsMemberOf(p10) == team2 +state = @acset_colim ySportsTeam begin + (p1, p2, p3, p4)::Player + (t1, t2)::Team + IsMemberOf(p1) == t1 + IsMemberOf(p2) == t1 + IsMemberOf(p3) == t2 + IsMemberOf(p4) == t2 + PlayerHasName(p1) == "Jordan" + PlayerHasName(p2) == "Alex" + PlayerHasName(p3) == "Casey" + PlayerHasName(p4) == "Taylor" + TeamHasName(t1) == "Home" + TeamHasName(t2) == "Away" end ``` ### 6. Identify the match from the rule to the state This can be done manually or automatically. -- To **manually** identify the match, fully-specify an ACSet transformation. For this example, we would like to rule to swap `p5::Player` and `p6::Player` +- To **manually** identify the match, fully-specify an ACSet transformation. For this example, we would like to rule to swap `p2::Player` and `p3::Player` ```julia -match = ACSetTransformation(L, state, Player=[5, 6], Team=[1, 2], TeamName=[1, 2]) +match = ACSetTransformation(L, state, Player=[2, 3], Team=[1, 2], Name=["Alex", "Casey"]) ``` -- To **automatically** identify the match, use the backtracking search algorithm provided by AlgebraicRewriting. This may returm multiple matches, so you can provide logic for deciding which match to select. +- To **automatically** identify the match, use the backtracking search algorithm provided by AlgebraicRewriting. This may return multiple matches, so you can provide logic for deciding which match to select. ```julia matches = get_matches(rule, state)