The revision arrives after copying
Swipe the diagram to see the join →
A / B · Matching port types, differing recorded revisions. The stated join condition has no accepted output.
Project wiring diagrams · Essai 04
One controlled drawing reaches the wall team and the roof fabricator. A revision arrives. Does changing where it enters the wiring change what can fit together?
The wall team sets out a line from its issued drawing. Separately, a fabricator cuts a roof kit from another copy. This toy trial assumes their recorded drawing revisions must agree before the two outputs can be accepted together.
Make a project interface explainable when two work packages depend on the same information.
Compose typed boxes in sequence and in parallel; give their wiring an explicit finite interpretation.
Move one revision box across an explicit copy, then compare the outputs at the join.
Try one change
Both constructions start with controlled drawing A, contain one revision operation, and have the same outer input and output types. The revision moves; the result changes.
Swipe the diagram to see the join →
A / B · Matching port types, differing recorded revisions. The stated join condition has no accepted output.
Swipe the diagram to see the join →
B / B · The same declared revision reaches both work packages. Their recorded outputs satisfy the toy join rule.
Selected construction
Roof copy revised after issue: wall line A meets roof kit B. Revision agreement fails.
Under the picture
Every thin line labelled D carries a value of type Drawing. Both A and B are values of that type, so both diagrams are well typed. The Copy box is explicit: ordinary symmetric monoidal wiring gives serial and parallel composition, not free duplication of a physical resource or an authorised document.
These two SVGs are exported from the same late and early DisCoPy objects used by the independent check, rather than redrawn for this page. Read them from top to bottom. Their wires name types; they do not display the A/B revision values.
Rendering confirms the authored serial and parallel wiring can be drawn from typed DisCoPy objects. It does not prove revision agreement. The A/B and B/B results come from the separately declared finite interpretation below.
» means “then”; ⊗ means “alongside”. The Agreement type is interpreted as a Boolean diagnostic here. With initial value A, late(A)=false and early(A)=true. If we interpret c as an acceptance relation allowing only true, the A/B case has no permitted result. Moving u changes the interpreted behaviour without changing either outer type.
Under this interpretation, u » Δ = Δ » (u ⊗ u): revising before copying agrees with revising both copies. Updating only one branch changes the process; it is not a valid slide of a box across the copy in the free wiring syntax.
What the change teaches: a revision process has to be placed relative to the issue boundary. “All boxes were given a drawing” is weaker than “both outputs were made from an agreed issue”. The model does not decide who has authority to issue B, whether either record is accurate, whether the roof fits the wall, or how long any work takes.
What is borrowed; what is tried here
Patterson, Spivak & Vagner provide an operadic account of directed acyclic wiring diagrams and their SMC interpretation. Here, the outer types match in both arrangements; that formal fact does not make their behaviours equal.
DisCoPy represents the explicit copy, the two parallel branch boxes, their serial composition and the join. Its drawing function produces the two SVGs above from those objects. A functor into Python functions independently evaluates both diagrams on A and B. The reproducible check is retained in the source repository; its decisive construction is shown below.
We chose the wall set-out and prefabricated roof-kit story, the A/B revision values, the update operation and an equality rule at their join. Matching revision is necessary only under this declared toy rule; neither DisCoPy nor the paper establishes project readiness, fit, document authority or a schedule.
do_work = (set_out @ prefab) >> join
late = copy >> (Id(drawing) @ update) >> do_work
early = update >> copy >> do_work
Here @ puts boxes alongside one another and >> connects them in sequence. copy is an explicit Drawing → Drawing ⊗ Drawing box. Under the declared finite interpretation, its two outputs carry the same revision, update sets the revision to B, and join checks equality. The source check also verifies the outer types and rejects an ill-typed connection.