Last active
May 9, 2019 10:31
-
-
Save kenwebb/75fc87ec3cc222582478636f44c71c90 to your computer and use it in GitHub Desktop.
Picturing Quantum Processes (PQP) - exercise 3.30
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<!--Xholon Workbook http://www.primordion.com/Xholon/gwt/ MIT License, Copyright (C) Ken Webb, Thu May 09 2019 06:31:12 GMT-0400 (Eastern Daylight Time)--> | |
<XholonWorkbook> | |
<Notes><![CDATA[ | |
Xholon | |
------ | |
Title: Picturing Quantum Processes (PQP) - exercise 3.30 | |
Description: | |
Url: http://www.primordion.com/Xholon/gwt/ | |
InternalName: 75fc87ec3cc222582478636f44c71c90 | |
Keywords: | |
My Notes | |
-------- | |
May 6, 2019 | |
Exercise 3.30 on page 55-56 | |
Concurrency is important in this exercise. | |
TODO | |
---- | |
- do a Petri Net implementation | |
Imlementation Approaches | |
------------------------ | |
1. ROOM - communicating state machines | |
maybe eTrice | |
2. Petri Net | |
3. single Process class with roleName=NOT or CNOT | |
the behavior could base its actions on type (roleName) and time (timestep) | |
this approach is very specific to one particular app/Function | |
Type x Time -> Action | |
4. a DSL | |
using 2 symbols and parentheses: | |
⊗ parallel composition | |
∘ sequential composition | |
() | |
I think I did this with Graphical Linear Algebra | |
this might end up being a Xholon mechanism | |
5. perfectly synchronized, where layer 1 executes, followed by layer 2, etc. | |
each layer is at a different timestep | |
see PQP p. 48 | |
6. use arrays to pass values between processes | |
7. other approaches mentioned in ref[3] | |
References | |
---------- | |
(1) Picturing Quantum Processes | |
A First Course in Quantum Theory and Diagrammatic Reasoning | |
Bob Coecke, University of Oxford and Aleks Kissinger, Radboud Universiteit Nijmegen | |
2017 | |
(2) http://127.0.0.1:8888/XholonOpDSL.html?app=57e815d9de593c1a3d0fe155c3790067&src=gist&gui=none | |
Operadics DSL IDE | |
ex: bindings d1 |-> X3 | |
(3) https://en.wikipedia.org/wiki/Concurrency_(computer_science) | |
(4) https://inst.eecs.berkeley.edu/~ee249/fa07/discussions/TSM.pdf | |
A Framework for Comparing Models of Computation | |
Edward A. Lee,Fellow, IEEE, and Alberto Sangiovanni-Vincentelli,Fellow, IEEE | |
1998 | |
(5) https://en.wikipedia.org/wiki/Reo_Coordination_Language | |
(6) https://en.wikipedia.org/wiki/Actor_model_and_process_calculi | |
(7) https://gist.github.com/kenwebb/834e367697da821ca2b207552f761018 | |
Sync vs Async | |
various implementations of (((3 + 2) * 6) - (7 + 1)) | |
<TestPetriNetApproach> produces the correct answer after 4 timesteps; uses a custom behavior | |
<TestPetriNetFuncApproach> also produces the correct answer; uses a built-in Petri Net behavior | |
(8) https://gist.github.com/kenwebb/063bc93c7c5deb1a16c75d84b2170a58 | |
includes a Petri Net version | |
]]></Notes> | |
<_-.XholonClass> | |
<PhysicalSystem/> | |
<!-- processes --> | |
<Not/> | |
<Cnot/> | |
<!--<Not superClass="script"/>--> | |
<!--<Cnot superClass="script"/>--> | |
<Function> | |
<Function01/> | |
<Function02/> | |
</Function> | |
<TestHarness/> | |
<TestHarnessIn/> | |
<TestHarnessOut/> | |
<!-- NEW approach --> | |
<Process/> | |
<Diagram> | |
<Circuit/> | |
</Diagram> | |
<PetriNetApproach/> | |
<PNFunc> | |
<!-- a function that ... --> | |
<PNFuncNOT superClass="Script"/> | |
<!-- a function that ... --> | |
<PNFuncCNOT superClass="Script"/> | |
<!-- a function that ... --> | |
<PNFuncSWAP superClass="Script"/> | |
</PNFunc> | |
<PetriNetFunctions/> | |
</_-.XholonClass> | |
<xholonClassDetails> | |
<Not> | |
<port name="one" connector="./following-sibling::*"/> | |
</Not> | |
<Cnot> | |
<port name="one" connector="./following-sibling::*"/> | |
<port name="two" connector="./following-sibling::*[2]"/> | |
</Cnot> | |
<PNFuncNOT><DefaultContent> | |
var me, beh = { | |
postConfigure: function() { | |
me = this.cnode; | |
}, | |
processReceivedSyncMessage: function(msg) { | |
var data = msg.data; | |
if (data == 0) {return 1;} | |
else {return 0;} | |
} | |
} | |
//# sourceURL=PNFuncNOT.js | |
</DefaultContent></PNFuncNOT> | |
<PNFuncCNOT><DefaultContent> | |
var me, beh = { | |
postConfigure: function() { | |
me = this.cnode; | |
}, | |
processReceivedSyncMessage: function(msg) { | |
var datastr = msg.data.toString(); // an array of 2 integers | |
switch (datastr) { | |
case "0,0": return [0,0]; | |
case "0,1": return [0,1]; | |
case "1,0": return [1,1]; | |
case "1,1": return [1,0]; | |
default: return [101,102]; | |
} | |
} | |
} | |
//# sourceURL=PNFuncCNOT.js | |
</DefaultContent></PNFuncCNOT> | |
<PNFuncSWAP><DefaultContent> | |
var me, beh = { | |
postConfigure: function() { | |
me = this.cnode; | |
}, | |
processReceivedSyncMessage: function(msg) { | |
var data = msg.data; | |
return [data[1], data[0]]; | |
} | |
} | |
//# sourceURL=PNFuncSWAP.js | |
</DefaultContent></PNFuncSWAP> | |
</xholonClassDetails> | |
<PhysicalSystem> | |
<!-- OLD approach --> | |
<TestHarness in01="0" in02="1"> | |
<Function01> | |
<!-- layers; processing moves downwards from topmost layer/node to bottommost; in the book, it moves from bottom to top --> | |
<Not/> <!-- plain wire --> | |
<Cnot/> | |
<Not/> <Not/> | |
</Function01> | |
</TestHarness> | |
<TestHarness in01="0" in02="1"> | |
<Function02></Function02> | |
</TestHarness> | |
<!-- NEW approach; specifications --> | |
<Process roleName="NOT"><Attribute_String> | |
0 |-> 1 | |
1 |-> 0 | |
</Attribute_String></Process> | |
<Process roleName="CNOT"><Attribute_String> | |
(0,0) |-> (0,0) | |
(0,1) |-> (0,1) | |
(1,0) |-> (1,1) | |
(1,1) |-> (1,0) | |
</Attribute_String></Process> | |
<Process roleName="identity"><Attribute_String> | |
(a) |-> (a) | |
</Attribute_String></Process> | |
<Process roleName="swap"><Attribute_String> | |
(a,b) |-> (b,a) | |
</Attribute_String></Process> | |
<Circuit roleName="3.30 1"><Attribute_String> | |
(NOT ⊗ NOT) ∘ CNOT ∘ (NOT ⊗ *) | |
</Attribute_String></Circuit> | |
<Circuit roleName="3.30 2"><Attribute_String> | |
CNOT ∘ swap ∘ CNOT ∘ swap ∘ CNOT | |
</Attribute_String></Circuit> | |
<!-- Petri Net approach --> | |
<PetriNetApproach> | |
<!-- KINETICS_FUNCTION = 11; auto invoke functions --> | |
<PetriNet roleName="PN 3.30 1" kineticsType="11"> | |
<QueueTransitions shouldShuffle="false"/> | |
<AnalysisCRN/> | |
<AnalysisCat/> | |
<Places> | |
<!-- initial values --> | |
<PlacePN roleName="p1" token="0"/> | |
<PlacePN roleName="p2" token="0"/> | |
<PlacePN roleName="p3" token="0"/> | |
<PlacePN roleName="p4" token="0"/> | |
<PlacePN roleName="p5" token="0"/> | |
<PlacePN roleName="p6"/> | |
<PlacePN roleName="p7"/> | |
</Places> | |
<Transitions> | |
<TransitionPN roleName="t1NOT" functionXPath="ancestor::PhysicalSystem/PetriNetFunctions/PNFuncNOT"> | |
<InputArcs> | |
<InputArc weight="1" connector="ancestor::PetriNet/Places/PlacePN[@roleName='p1']"/> | |
</InputArcs> | |
<OutputArcs> | |
<OutputArc weight="1" connector="ancestor::PetriNet/Places/PlacePN[@roleName='p3']"/> | |
</OutputArcs> | |
</TransitionPN> | |
<TransitionPN roleName="t2CNOT" functionXPath="ancestor::PhysicalSystem/PetriNetFunctions/PNFuncCNOT"> | |
<InputArcs> | |
<InputArc weight="1" connector="ancestor::PetriNet/Places/PlacePN[@roleName='p3']"/> | |
<InputArc weight="1" connector="ancestor::PetriNet/Places/PlacePN[@roleName='p2']"/> | |
</InputArcs> | |
<OutputArcs> | |
<OutputArc weight="1" connector="ancestor::PetriNet/Places/PlacePN[@roleName='p4']"/> | |
<OutputArc weight="1" connector="ancestor::PetriNet/Places/PlacePN[@roleName='p5']"/> | |
</OutputArcs> | |
</TransitionPN> | |
<TransitionPN roleName="t3NOT" functionXPath="ancestor::PhysicalSystem/PetriNetFunctions/PNFuncNOT"> | |
<InputArcs> | |
<InputArc weight="1" connector="ancestor::PetriNet/Places/PlacePN[@roleName='p4']"/> | |
</InputArcs> | |
<OutputArcs> | |
<OutputArc weight="1" connector="ancestor::PetriNet/Places/PlacePN[@roleName='p6']"/> | |
</OutputArcs> | |
</TransitionPN> | |
<TransitionPN roleName="t4NOT" functionXPath="ancestor::PhysicalSystem/PetriNetFunctions/PNFuncNOT"> | |
<InputArcs> | |
<InputArc weight="1" connector="ancestor::PetriNet/Places/PlacePN[@roleName='p5']"/> | |
</InputArcs> | |
<OutputArcs> | |
<OutputArc weight="1" connector="ancestor::PetriNet/Places/PlacePN[@roleName='p7']"/> | |
</OutputArcs> | |
</TransitionPN> | |
</Transitions> | |
</PetriNet> | |
</PetriNetApproach> | |
<PetriNetApproach> | |
<!-- KINETICS_FUNCTION = 11; auto invoke functions --> | |
<PetriNet roleName="PN 3.30 2" kineticsType="11"> | |
<QueueTransitions shouldShuffle="false"/> | |
<AnalysisCRN/> | |
<AnalysisCat/> | |
<Places> | |
<!-- initial values --> | |
<PlacePN roleName="p1" token="0"/> | |
<PlacePN roleName="p2" token="1"/> | |
<PlacePN roleName="p3" token="0"/> | |
<PlacePN roleName="p4" token="0"/> | |
<PlacePN roleName="p5" token="0"/> | |
<PlacePN roleName="p6" token="0"/> | |
<PlacePN roleName="p7" token="0"/> | |
<PlacePN roleName="p8" token="0"/> | |
<PlacePN roleName="p9" token="0"/> | |
<PlacePN roleName="p10" token="0"/> | |
<PlacePN roleName="p11" token="0"/> | |
<PlacePN roleName="p12" token="0"/> | |
</Places> | |
<Transitions> | |
<TransitionPN roleName="t1CNOT" functionXPath="ancestor::PhysicalSystem/PetriNetFunctions/PNFuncCNOT"> | |
<InputArcs> | |
<InputArc weight="1" connector="ancestor::PetriNet/Places/PlacePN[@roleName='p1']"/> | |
<InputArc weight="1" connector="ancestor::PetriNet/Places/PlacePN[@roleName='p2']"/> | |
</InputArcs> | |
<OutputArcs> | |
<OutputArc weight="1" connector="ancestor::PetriNet/Places/PlacePN[@roleName='p3']"/> | |
<OutputArc weight="1" connector="ancestor::PetriNet/Places/PlacePN[@roleName='p4']"/> | |
</OutputArcs> | |
</TransitionPN> | |
<TransitionPN roleName="t2SWAP" functionXPath="ancestor::PhysicalSystem/PetriNetFunctions/PNFuncSWAP"> | |
<InputArcs> | |
<InputArc weight="1" connector="ancestor::PetriNet/Places/PlacePN[@roleName='p3']"/> | |
<InputArc weight="1" connector="ancestor::PetriNet/Places/PlacePN[@roleName='p4']"/> | |
</InputArcs> | |
<OutputArcs> | |
<OutputArc weight="1" connector="ancestor::PetriNet/Places/PlacePN[@roleName='p5']"/> | |
<OutputArc weight="1" connector="ancestor::PetriNet/Places/PlacePN[@roleName='p6']"/> | |
</OutputArcs> | |
</TransitionPN> | |
<TransitionPN roleName="t3CNOT" functionXPath="ancestor::PhysicalSystem/PetriNetFunctions/PNFuncCNOT"> | |
<InputArcs> | |
<InputArc weight="1" connector="ancestor::PetriNet/Places/PlacePN[@roleName='p5']"/> | |
<InputArc weight="1" connector="ancestor::PetriNet/Places/PlacePN[@roleName='p6']"/> | |
</InputArcs> | |
<OutputArcs> | |
<OutputArc weight="1" connector="ancestor::PetriNet/Places/PlacePN[@roleName='p7']"/> | |
<OutputArc weight="1" connector="ancestor::PetriNet/Places/PlacePN[@roleName='p8']"/> | |
</OutputArcs> | |
</TransitionPN> | |
<TransitionPN roleName="t4SWAP" functionXPath="ancestor::PhysicalSystem/PetriNetFunctions/PNFuncSWAP"> | |
<InputArcs> | |
<InputArc weight="1" connector="ancestor::PetriNet/Places/PlacePN[@roleName='p7']"/> | |
<InputArc weight="1" connector="ancestor::PetriNet/Places/PlacePN[@roleName='p8']"/> | |
</InputArcs> | |
<OutputArcs> | |
<OutputArc weight="1" connector="ancestor::PetriNet/Places/PlacePN[@roleName='p9']"/> | |
<OutputArc weight="1" connector="ancestor::PetriNet/Places/PlacePN[@roleName='p10']"/> | |
</OutputArcs> | |
</TransitionPN> | |
<TransitionPN roleName="t5CNOT" functionXPath="ancestor::PhysicalSystem/PetriNetFunctions/PNFuncCNOT"> | |
<InputArcs> | |
<InputArc weight="1" connector="ancestor::PetriNet/Places/PlacePN[@roleName='p9']"/> | |
<InputArc weight="1" connector="ancestor::PetriNet/Places/PlacePN[@roleName='p10']"/> | |
</InputArcs> | |
<OutputArcs> | |
<OutputArc weight="1" connector="ancestor::PetriNet/Places/PlacePN[@roleName='p11']"/> | |
<OutputArc weight="1" connector="ancestor::PetriNet/Places/PlacePN[@roleName='p12']"/> | |
</OutputArcs> | |
</TransitionPN> | |
</Transitions> | |
</PetriNet> | |
</PetriNetApproach> | |
<!-- a set of Petri Net functions | |
will be invoked by TransitionPN nodes | |
--> | |
<PetriNetFunctions> | |
<PNFuncNOT/> | |
<PNFuncCNOT/> | |
<PNFuncSWAP/> | |
</PetriNetFunctions> | |
</PhysicalSystem> | |
<Notbehavior implName="org.primordion.xholon.base.Behavior_gwtjs"><![CDATA[ | |
var me, beh = { | |
postConfigure: function() { | |
me = this.cnode.parent(); | |
//me.println("I am Not."); | |
}, | |
act: function() { | |
//me.println(this.toString()); | |
} | |
} | |
//# sourceURL=Notbehavior.js | |
]]></Notbehavior> | |
<Cnotbehavior implName="org.primordion.xholon.base.Behavior_gwtjs"><![CDATA[ | |
var me, beh = { | |
postConfigure: function() { | |
me = this.cnode.parent(); | |
//me.println("I am Cnot."); | |
}, | |
act: function() { | |
//me.println(this.toString()); | |
} | |
} | |
//# sourceURL=Cnotbehavior.js | |
]]></Cnotbehavior> | |
<SvgClient><Attribute_String roleName="svgUri"><![CDATA[data:image/svg+xml, | |
<svg width="143pt" height="549pt" | |
viewBox="0.00 0.00 143.00 548.80" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> | |
<g id="PetriNet" class="graph" transform="scale(1 1) rotate(0) translate(4 544.8)"> | |
<title>61</title> | |
<polygon fill="white" stroke="none" points="-4,4 -4,-544.8 139,-544.8 139,4 -4,4"/> | |
<text text-anchor="middle" x="67.5" y="-8.2" font-family="Courier New" font-size="14.00">PN 3.30 1</text> | |
<!-- 64 --> | |
<g id="PetriNet/Places/PlacePN[@roleName='p1']" class="node"><title>64</title> | |
<ellipse fill="#ffff00" stroke="black" cx="30" cy="-42.8" rx="27" ry="18"/> | |
<text text-anchor="middle" x="30" y="-38.6" font-family="Courier New" font-size="14.00">p1</text> | |
</g> | |
<!-- 72 --> | |
<g id="PetriNet/Transitions/TransitionPN[@roleName='t1NOT']" class="node"><title>72</title> | |
<polygon fill="#00ffff" stroke="black" points="58.993,-132.8 1.007,-132.8 1.007,-96.8 58.993,-96.8 58.993,-132.8"/> | |
<text text-anchor="middle" x="30" y="-110.6" font-family="Courier New" font-size="14.00">t1NOT</text> | |
</g> | |
<!-- 64->72 --> | |
<g id="PetriNet_edge1" class="edge"><title>64->72</title> | |
<path fill="none" stroke="black" d="M30,-61.1034C30,-68.8173 30,-78.0875 30,-86.6876"/> | |
<polygon fill="black" stroke="black" points="30,-96.6957 25.5001,-86.6956 30,-91.6957 30.0001,-86.6957 30.0001,-86.6957 30.0001,-86.6957 30,-91.6957 34.5001,-86.6957 30,-96.6957 30,-96.6957"/> | |
</g> | |
<!-- 65 --> | |
<g id="PetriNet/Places/PlacePN[@roleName='p2']" class="node"><title>65</title> | |
<ellipse fill="#ffff00" stroke="black" cx="104" cy="-198.8" rx="27" ry="18"/> | |
<text text-anchor="middle" x="104" y="-194.6" font-family="Courier New" font-size="14.00">p2</text> | |
</g> | |
<!-- 77 --> | |
<g id="PetriNet/Transitions/TransitionPN[@roleName='t2CNOT']" class="node"><title>77</title> | |
<polygon fill="#00ffff" stroke="black" points="100.393,-300.8 33.6072,-300.8 33.6072,-264.8 100.393,-264.8 100.393,-300.8"/> | |
<text text-anchor="middle" x="67" y="-278.6" font-family="Courier New" font-size="14.00">t2CNOT</text> | |
</g> | |
<!-- 65->77 --> | |
<g id="PetriNet_edge4" class="edge"><title>65->77</title> | |
<path fill="none" stroke="black" d="M96.5125,-216.394C91.4644,-227.582 84.6963,-242.581 78.9149,-255.394"/> | |
<polygon fill="black" stroke="black" points="74.7311,-264.666 74.7422,-253.7 76.7875,-260.109 78.844,-255.551 78.844,-255.551 78.844,-255.551 76.7875,-260.109 82.9458,-257.402 74.7311,-264.666 74.7311,-264.666"/> | |
</g> | |
<!-- 66 --> | |
<g id="PetriNet/Places/PlacePN[@roleName='p3']" class="node"><title>66</title> | |
<ellipse fill="#ffff00" stroke="black" cx="30" cy="-198.8" rx="29.2602" ry="29.3315"/> | |
<text text-anchor="middle" x="30" y="-203" font-family="Courier New" font-size="14.00">p3</text> | |
<text text-anchor="middle" x="30" y="-186.2" font-family="Courier New" font-size="14.00">⬤</text> | |
</g> | |
<!-- 66->77 --> | |
<g id="PetriNet_edge3" class="edge"><title>66->77</title> | |
<path fill="none" stroke="black" d="M41.707,-225.745C45.9496,-235.148 50.7457,-245.777 55.0121,-255.232"/> | |
<polygon fill="black" stroke="black" points="59.221,-264.56 51.0063,-257.296 57.1646,-260.003 55.1081,-255.445 55.1081,-255.445 55.1081,-255.445 57.1646,-260.003 59.2099,-253.594 59.221,-264.56 59.221,-264.56"/> | |
</g> | |
<!-- 67 --> | |
<g id="PetriNet/Places/PlacePN[@roleName='p4']" class="node"><title>67</title> | |
<ellipse fill="#ffff00" stroke="black" cx="29" cy="-366.8" rx="29.2602" ry="29.3315"/> | |
<text text-anchor="middle" x="29" y="-371" font-family="Courier New" font-size="14.00">p4</text> | |
<text text-anchor="middle" x="29" y="-354.2" font-family="Courier New" font-size="14.00">⬤</text> | |
</g> | |
<!-- 84 --> | |
<g id="PetriNet/Transitions/TransitionPN[@roleName='t3NOT']" class="node"><title>84</title> | |
<polygon fill="#00ffff" stroke="black" points="57.993,-468.8 0.00699958,-468.8 0.00699958,-432.8 57.993,-432.8 57.993,-468.8"/> | |
<text text-anchor="middle" x="29" y="-446.6" font-family="Courier New" font-size="14.00">t3NOT</text> | |
</g> | |
<!-- 67->84 --> | |
<g id="PetriNet_edge7" class="edge"><title>67->84</title> | |
<path fill="none" stroke="black" d="M29,-396.48C29,-404.923 29,-414.134 29,-422.489"/> | |
<polygon fill="black" stroke="black" points="29,-432.491 24.5001,-422.491 29,-427.491 29.0001,-422.491 29.0001,-422.491 29.0001,-422.491 29,-427.491 33.5001,-422.491 29,-432.491 29,-432.491"/> | |
</g> | |
<!-- 68 --> | |
<g id="PetriNet/Places/PlacePN[@roleName='p5']" class="node"><title>68</title> | |
<ellipse fill="#ffff00" stroke="black" cx="105" cy="-366.8" rx="29.2602" ry="29.3315"/> | |
<text text-anchor="middle" x="105" y="-371" font-family="Courier New" font-size="14.00">p5</text> | |
<text text-anchor="middle" x="105" y="-354.2" font-family="Courier New" font-size="14.00">⬤</text> | |
</g> | |
<!-- 89 --> | |
<g id="PetriNet/Transitions/TransitionPN[@roleName='t4NOT']" class="node"><title>89</title> | |
<polygon fill="#00ffff" stroke="black" points="133.993,-468.8 76.007,-468.8 76.007,-432.8 133.993,-432.8 133.993,-468.8"/> | |
<text text-anchor="middle" x="105" y="-446.6" font-family="Courier New" font-size="14.00">t4NOT</text> | |
</g> | |
<!-- 68->89 --> | |
<g id="PetriNet_edge9" class="edge"><title>68->89</title> | |
<path fill="none" stroke="black" d="M105,-396.48C105,-404.923 105,-414.134 105,-422.489"/> | |
<polygon fill="black" stroke="black" points="105,-432.491 100.5,-422.491 105,-427.491 105,-422.491 105,-422.491 105,-422.491 105,-427.491 109.5,-422.491 105,-432.491 105,-432.491"/> | |
</g> | |
<!-- 69 --> | |
<g id="PetriNet/Places/PlacePN[@roleName='p6']" class="node"><title>69</title> | |
<ellipse fill="#ffff00" stroke="black" cx="29" cy="-522.8" rx="27" ry="18"/> | |
<text text-anchor="middle" x="29" y="-518.6" font-family="Courier New" font-size="14.00">p6</text> | |
</g> | |
<!-- 70 --> | |
<g id="PetriNet/Places/PlacePN[@roleName='p7']" class="node"><title>70</title> | |
<ellipse fill="#ffff00" stroke="black" cx="105" cy="-522.8" rx="27" ry="18"/> | |
<text text-anchor="middle" x="105" y="-518.6" font-family="Courier New" font-size="14.00">p7</text> | |
</g> | |
<!-- 72->66 --> | |
<g id="PetriNet_edge2" class="edge"><title>72->66</title> | |
<path fill="none" stroke="black" d="M30,-133.19C30,-140.773 30,-149.991 30,-159.06"/> | |
<polygon fill="black" stroke="black" points="30,-169.142 25.5001,-159.142 30,-164.142 30.0001,-159.142 30.0001,-159.142 30.0001,-159.142 30,-164.142 34.5001,-159.142 30,-169.142 30,-169.142"/> | |
</g> | |
<!-- 77->67 --> | |
<g id="PetriNet_edge5" class="edge"><title>77->67</title> | |
<path fill="none" stroke="black" d="M58.9412,-301.19C54.9713,-309.757 50.0348,-320.409 45.3224,-330.578"/> | |
<polygon fill="black" stroke="black" points="41.092,-339.707 41.2137,-328.742 43.1943,-335.17 45.2966,-330.634 45.2966,-330.634 45.2966,-330.634 43.1943,-335.17 49.3795,-332.526 41.092,-339.707 41.092,-339.707"/> | |
</g> | |
<!-- 77->68 --> | |
<g id="PetriNet_edge6" class="edge"><title>77->68</title> | |
<path fill="none" stroke="black" d="M75.0588,-301.19C79.0287,-309.757 83.9652,-320.409 88.6776,-330.578"/> | |
<polygon fill="black" stroke="black" points="92.908,-339.707 84.6205,-332.526 90.8057,-335.17 88.7034,-330.634 88.7034,-330.634 88.7034,-330.634 90.8057,-335.17 92.7863,-328.742 92.908,-339.707 92.908,-339.707"/> | |
</g> | |
<!-- 84->69 --> | |
<g id="PetriNet_edge8" class="edge"><title>84->69</title> | |
<path fill="none" stroke="black" d="M29,-469.103C29,-476.817 29,-486.088 29,-494.688"/> | |
<polygon fill="black" stroke="black" points="29,-504.696 24.5001,-494.696 29,-499.696 29.0001,-494.696 29.0001,-494.696 29.0001,-494.696 29,-499.696 33.5001,-494.696 29,-504.696 29,-504.696"/> | |
</g> | |
<!-- 89->70 --> | |
<g id="PetriNet_edge10" class="edge"><title>89->70</title> | |
<path fill="none" stroke="black" d="M105,-469.103C105,-476.817 105,-486.088 105,-494.688"/> | |
<polygon fill="black" stroke="black" points="105,-504.696 100.5,-494.696 105,-499.696 105,-494.696 105,-494.696 105,-494.696 105,-499.696 109.5,-494.696 105,-504.696 105,-504.696"/> | |
</g> | |
</g> | |
</svg> | |
<svg width="142pt" height="933pt" | |
viewBox="0.00 0.00 142.00 932.80" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> | |
<g id="PetriNet" class="graph" transform="scale(1 1) rotate(0) translate(4 928.8)"> | |
<title>97</title> | |
<polygon fill="white" stroke="none" points="-4,4 -4,-928.8 138,-928.8 138,4 -4,4"/> | |
<text text-anchor="middle" x="67" y="-8.2" font-family="Courier New" font-size="14.00">PN 3.30 2</text> | |
<!-- 102 --> | |
<g id="PetriNet/Places/PlacePN[@roleName='p1']" class="node"><title>102</title> | |
<ellipse fill="#ffff00" stroke="black" cx="30" cy="-54.8" rx="27" ry="18"/> | |
<text text-anchor="middle" x="30" y="-50.6" font-family="Courier New" font-size="14.00">p1</text> | |
</g> | |
<!-- 115 --> | |
<g id="PetriNet/Transitions/TransitionPN[@roleName='t1CNOT']" class="node"><title>115</title> | |
<polygon fill="#00ffff" stroke="black" points="100.393,-156.8 33.6072,-156.8 33.6072,-120.8 100.393,-120.8 100.393,-156.8"/> | |
<text text-anchor="middle" x="67" y="-134.6" font-family="Courier New" font-size="14.00">t1CNOT</text> | |
</g> | |
<!-- 102->115 --> | |
<g id="PetriNet_edge1" class="edge"><title>102->115</title> | |
<path fill="none" stroke="black" d="M37.4875,-72.3939C42.5356,-83.5816 49.3037,-98.5812 55.0851,-111.394"/> | |
<polygon fill="black" stroke="black" points="59.2689,-120.666 51.0542,-113.402 57.2125,-116.109 55.156,-111.551 55.156,-111.551 55.156,-111.551 57.2125,-116.109 59.2578,-109.7 59.2689,-120.666 59.2689,-120.666"/> | |
</g> | |
<!-- 103 --> | |
<g id="PetriNet/Places/PlacePN[@roleName='p2']" class="node"><title>103</title> | |
<ellipse fill="#ffff00" stroke="black" cx="104" cy="-54.8" rx="29.2602" ry="29.3315"/> | |
<text text-anchor="middle" x="104" y="-59" font-family="Courier New" font-size="14.00">p2</text> | |
<text text-anchor="middle" x="104" y="-42.2" font-family="Courier New" font-size="14.00">⬤</text> | |
</g> | |
<!-- 103->115 --> | |
<g id="PetriNet_edge2" class="edge"><title>103->115</title> | |
<path fill="none" stroke="black" d="M92.293,-81.7453C88.0504,-91.1478 83.2543,-101.777 78.9879,-111.232"/> | |
<polygon fill="black" stroke="black" points="74.779,-120.56 74.7901,-109.594 76.8354,-116.003 78.8919,-111.445 78.8919,-111.445 78.8919,-111.445 76.8354,-116.003 82.9937,-113.296 74.779,-120.56 74.779,-120.56"/> | |
</g> | |
<!-- 104 --> | |
<g id="PetriNet/Places/PlacePN[@roleName='p3']" class="node"><title>104</title> | |
<ellipse fill="#ffff00" stroke="black" cx="30" cy="-222.8" rx="27" ry="18"/> | |
<text text-anchor="middle" x="30" y="-218.6" font-family="Courier New" font-size="14.00">p3</text> | |
</g> | |
<!-- 122 --> | |
<g id="PetriNet/Transitions/TransitionPN[2]" class="node"><title>122</title> | |
<polygon fill="#00ffff" stroke="black" points="100.393,-324.8 33.6072,-324.8 33.6072,-288.8 100.393,-288.8 100.393,-324.8"/> | |
<text text-anchor="middle" x="67" y="-302.6" font-family="Courier New" font-size="14.00">t2SWAP</text> | |
</g> | |
<!-- 104->122 --> | |
<g id="PetriNet_edge5" class="edge"><title>104->122</title> | |
<path fill="none" stroke="black" d="M37.4875,-240.394C42.5356,-251.582 49.3037,-266.581 55.0851,-279.394"/> | |
<polygon fill="black" stroke="black" points="59.2689,-288.666 51.0542,-281.402 57.2125,-284.109 55.156,-279.551 55.156,-279.551 55.156,-279.551 57.2125,-284.109 59.2578,-277.7 59.2689,-288.666 59.2689,-288.666"/> | |
</g> | |
<!-- 105 --> | |
<g id="PetriNet/Places/PlacePN[@roleName='p4']" class="node"><title>105</title> | |
<ellipse fill="#ffff00" stroke="black" cx="104" cy="-222.8" rx="29.2602" ry="29.3315"/> | |
<text text-anchor="middle" x="104" y="-227" font-family="Courier New" font-size="14.00">p4</text> | |
<text text-anchor="middle" x="104" y="-210.2" font-family="Courier New" font-size="14.00">⬤</text> | |
</g> | |
<!-- 105->122 --> | |
<g id="PetriNet_edge6" class="edge"><title>105->122</title> | |
<path fill="none" stroke="black" d="M92.293,-249.745C88.0504,-259.148 83.2543,-269.777 78.9879,-279.232"/> | |
<polygon fill="black" stroke="black" points="74.779,-288.56 74.7901,-277.594 76.8354,-284.003 78.8919,-279.445 78.8919,-279.445 78.8919,-279.445 76.8354,-284.003 82.9937,-281.296 74.779,-288.56 74.779,-288.56"/> | |
</g> | |
<!-- 106 --> | |
<g id="PetriNet/Places/PlacePN[@roleName='p5']" class="node"><title>106</title> | |
<ellipse fill="#ffff00" stroke="black" cx="30" cy="-390.8" rx="29.2602" ry="29.3315"/> | |
<text text-anchor="middle" x="30" y="-395" font-family="Courier New" font-size="14.00">p5</text> | |
<text text-anchor="middle" x="30" y="-378.2" font-family="Courier New" font-size="14.00">⬤</text> | |
</g> | |
<!-- 129 --> | |
<g id="PetriNet/Transitions/TransitionPN[@roleName='t3CNOT']" class="node"><title>129</title> | |
<polygon fill="#00ffff" stroke="black" points="100.393,-492.8 33.6072,-492.8 33.6072,-456.8 100.393,-456.8 100.393,-492.8"/> | |
<text text-anchor="middle" x="67" y="-470.6" font-family="Courier New" font-size="14.00">t3CNOT</text> | |
</g> | |
<!-- 106->129 --> | |
<g id="PetriNet_edge9" class="edge"><title>106->129</title> | |
<path fill="none" stroke="black" d="M41.707,-417.745C45.9496,-427.148 50.7457,-437.777 55.0121,-447.232"/> | |
<polygon fill="black" stroke="black" points="59.221,-456.56 51.0063,-449.296 57.1646,-452.003 55.1081,-447.445 55.1081,-447.445 55.1081,-447.445 57.1646,-452.003 59.2099,-445.594 59.221,-456.56 59.221,-456.56"/> | |
</g> | |
<!-- 107 --> | |
<g id="PetriNet/Places/PlacePN[@roleName='p6']" class="node"><title>107</title> | |
<ellipse fill="#ffff00" stroke="black" cx="104" cy="-390.8" rx="27" ry="18"/> | |
<text text-anchor="middle" x="104" y="-386.6" font-family="Courier New" font-size="14.00">p6</text> | |
</g> | |
<!-- 107->129 --> | |
<g id="PetriNet_edge10" class="edge"><title>107->129</title> | |
<path fill="none" stroke="black" d="M96.5125,-408.394C91.4644,-419.582 84.6963,-434.581 78.9149,-447.394"/> | |
<polygon fill="black" stroke="black" points="74.7311,-456.666 74.7422,-445.7 76.7875,-452.109 78.844,-447.551 78.844,-447.551 78.844,-447.551 76.7875,-452.109 82.9458,-449.402 74.7311,-456.666 74.7311,-456.666"/> | |
</g> | |
<!-- 108 --> | |
<g id="PetriNet/Places/PlacePN[@roleName='p7']" class="node"><title>108</title> | |
<ellipse fill="#ffff00" stroke="black" cx="29" cy="-558.8" rx="29.2602" ry="29.3315"/> | |
<text text-anchor="middle" x="29" y="-563" font-family="Courier New" font-size="14.00">p7</text> | |
<text text-anchor="middle" x="29" y="-546.2" font-family="Courier New" font-size="14.00">⬤</text> | |
</g> | |
<!-- 136 --> | |
<g id="PetriNet/Transitions/TransitionPN[4]" class="node"><title>136</title> | |
<polygon fill="#00ffff" stroke="black" points="100.393,-660.8 33.6072,-660.8 33.6072,-624.8 100.393,-624.8 100.393,-660.8"/> | |
<text text-anchor="middle" x="67" y="-638.6" font-family="Courier New" font-size="14.00">t4SWAP</text> | |
</g> | |
<!-- 108->136 --> | |
<g id="PetriNet_edge13" class="edge"><title>108->136</title> | |
<path fill="none" stroke="black" d="M41.0234,-585.745C45.3807,-595.148 50.3064,-605.777 54.6881,-615.232"/> | |
<polygon fill="black" stroke="black" points="59.0108,-624.56 50.7232,-617.379 56.9085,-620.024 54.8061,-615.487 54.8061,-615.487 54.8061,-615.487 56.9085,-620.024 58.889,-613.595 59.0108,-624.56 59.0108,-624.56"/> | |
</g> | |
<!-- 109 --> | |
<g id="PetriNet/Places/PlacePN[@roleName='p8']" class="node"><title>109</title> | |
<ellipse fill="#ffff00" stroke="black" cx="105" cy="-558.8" rx="29.2602" ry="29.3315"/> | |
<text text-anchor="middle" x="105" y="-563" font-family="Courier New" font-size="14.00">p8</text> | |
<text text-anchor="middle" x="105" y="-546.2" font-family="Courier New" font-size="14.00">⬤</text> | |
</g> | |
<!-- 109->136 --> | |
<g id="PetriNet_edge14" class="edge"><title>109->136</title> | |
<path fill="none" stroke="black" d="M92.9766,-585.745C88.6193,-595.148 83.6936,-605.777 79.3119,-615.232"/> | |
<polygon fill="black" stroke="black" points="74.9892,-624.56 75.111,-613.595 77.0915,-620.024 79.1939,-615.487 79.1939,-615.487 79.1939,-615.487 77.0915,-620.024 83.2768,-617.379 74.9892,-624.56 74.9892,-624.56"/> | |
</g> | |
<!-- 110 --> | |
<g id="PetriNet/Places/PlacePN[@roleName='p9']" class="node"><title>110</title> | |
<ellipse fill="#ffff00" stroke="black" cx="29" cy="-726.8" rx="29.2602" ry="29.3315"/> | |
<text text-anchor="middle" x="29" y="-731" font-family="Courier New" font-size="14.00">p9</text> | |
<text text-anchor="middle" x="29" y="-714.2" font-family="Courier New" font-size="14.00">⬤</text> | |
</g> | |
<!-- 143 --> | |
<g id="PetriNet/Transitions/TransitionPN[@roleName='t5CNOT']" class="node"><title>143</title> | |
<polygon fill="#00ffff" stroke="black" points="100.393,-828.8 33.6072,-828.8 33.6072,-792.8 100.393,-792.8 100.393,-828.8"/> | |
<text text-anchor="middle" x="67" y="-806.6" font-family="Courier New" font-size="14.00">t5CNOT</text> | |
</g> | |
<!-- 110->143 --> | |
<g id="PetriNet_edge17" class="edge"><title>110->143</title> | |
<path fill="none" stroke="black" d="M41.0234,-753.745C45.3807,-763.148 50.3064,-773.777 54.6881,-783.232"/> | |
<polygon fill="black" stroke="black" points="59.0108,-792.56 50.7232,-785.379 56.9085,-788.024 54.8061,-783.487 54.8061,-783.487 54.8061,-783.487 56.9085,-788.024 58.889,-781.595 59.0108,-792.56 59.0108,-792.56"/> | |
</g> | |
<!-- 111 --> | |
<g id="PetriNet/Places/PlacePN[@roleName='p10']" class="node"><title>111</title> | |
<ellipse fill="#ffff00" stroke="black" cx="105" cy="-726.8" rx="29.2602" ry="29.3315"/> | |
<text text-anchor="middle" x="105" y="-731" font-family="Courier New" font-size="14.00">p10</text> | |
<text text-anchor="middle" x="105" y="-714.2" font-family="Courier New" font-size="14.00">⬤</text> | |
</g> | |
<!-- 111->143 --> | |
<g id="PetriNet_edge18" class="edge"><title>111->143</title> | |
<path fill="none" stroke="black" d="M92.9766,-753.745C88.6193,-763.148 83.6936,-773.777 79.3119,-783.232"/> | |
<polygon fill="black" stroke="black" points="74.9892,-792.56 75.111,-781.595 77.0915,-788.024 79.1939,-783.487 79.1939,-783.487 79.1939,-783.487 77.0915,-788.024 83.2768,-785.379 74.9892,-792.56 74.9892,-792.56"/> | |
</g> | |
<!-- 112 --> | |
<g id="PetriNet/Places/PlacePN[@roleName='p11']" class="node"><title>112</title> | |
<ellipse fill="#ffff00" stroke="black" cx="29" cy="-894.8" rx="29.2602" ry="29.3315"/> | |
<text text-anchor="middle" x="29" y="-899" font-family="Courier New" font-size="14.00">p11</text> | |
<text text-anchor="middle" x="29" y="-882.2" font-family="Courier New" font-size="14.00">⬤</text> | |
</g> | |
<!-- 113 --> | |
<g id="PetriNet/Places/PlacePN[@roleName='p12']" class="node"><title>113</title> | |
<ellipse fill="#ffff00" stroke="black" cx="105" cy="-894.8" rx="28.3325" ry="18"/> | |
<text text-anchor="middle" x="105" y="-890.6" font-family="Courier New" font-size="14.00">p12</text> | |
</g> | |
<!-- 115->104 --> | |
<g id="PetriNet_edge3" class="edge"><title>115->104</title> | |
<path fill="none" stroke="black" d="M59.1533,-157.19C54.0482,-168.504 47.3014,-183.456 41.5841,-196.127"/> | |
<polygon fill="black" stroke="black" points="37.4569,-205.274 37.4681,-194.308 39.5134,-200.716 41.5698,-196.159 41.5698,-196.159 41.5698,-196.159 39.5134,-200.716 45.6716,-198.01 37.4569,-205.274 37.4569,-205.274"/> | |
</g> | |
<!-- 115->105 --> | |
<g id="PetriNet_edge4" class="edge"><title>115->105</title> | |
<path fill="none" stroke="black" d="M74.8467,-157.19C78.7121,-165.757 83.5188,-176.409 88.1071,-186.578"/> | |
<polygon fill="black" stroke="black" points="92.2262,-195.707 84.0115,-188.443 90.1698,-191.149 88.1133,-186.592 88.1133,-186.592 88.1133,-186.592 90.1698,-191.149 92.2151,-184.741 92.2262,-195.707 92.2262,-195.707"/> | |
</g> | |
<!-- 122->106 --> | |
<g id="PetriNet_edge7" class="edge"><title>122->106</title> | |
<path fill="none" stroke="black" d="M59.1533,-325.19C55.2879,-333.757 50.4812,-344.409 45.8929,-354.578"/> | |
<polygon fill="black" stroke="black" points="41.7738,-363.707 41.7849,-352.741 43.8302,-359.149 45.8867,-354.592 45.8867,-354.592 45.8867,-354.592 43.8302,-359.149 49.9885,-356.443 41.7738,-363.707 41.7738,-363.707"/> | |
</g> | |
<!-- 122->107 --> | |
<g id="PetriNet_edge8" class="edge"><title>122->107</title> | |
<path fill="none" stroke="black" d="M74.8467,-325.19C79.9518,-336.504 86.6986,-351.456 92.4159,-364.127"/> | |
<polygon fill="black" stroke="black" points="96.5431,-373.274 88.3284,-366.01 94.4866,-368.716 92.4302,-364.159 92.4302,-364.159 92.4302,-364.159 94.4866,-368.716 96.5319,-362.308 96.5431,-373.274 96.5431,-373.274"/> | |
</g> | |
<!-- 129->108 --> | |
<g id="PetriNet_edge11" class="edge"><title>129->108</title> | |
<path fill="none" stroke="black" d="M58.9412,-493.19C54.9713,-501.757 50.0348,-512.409 45.3224,-522.578"/> | |
<polygon fill="black" stroke="black" points="41.092,-531.707 41.2137,-520.742 43.1943,-527.17 45.2966,-522.634 45.2966,-522.634 45.2966,-522.634 43.1943,-527.17 49.3795,-524.526 41.092,-531.707 41.092,-531.707"/> | |
</g> | |
<!-- 129->109 --> | |
<g id="PetriNet_edge12" class="edge"><title>129->109</title> | |
<path fill="none" stroke="black" d="M75.0588,-493.19C79.0287,-501.757 83.9652,-512.409 88.6776,-522.578"/> | |
<polygon fill="black" stroke="black" points="92.908,-531.707 84.6205,-524.526 90.8057,-527.17 88.7034,-522.634 88.7034,-522.634 88.7034,-522.634 90.8057,-527.17 92.7863,-520.742 92.908,-531.707 92.908,-531.707"/> | |
</g> | |
<!-- 136->110 --> | |
<g id="PetriNet_edge15" class="edge"><title>136->110</title> | |
<path fill="none" stroke="black" d="M58.9412,-661.19C54.9713,-669.757 50.0348,-680.409 45.3224,-690.578"/> | |
<polygon fill="black" stroke="black" points="41.092,-699.707 41.2137,-688.742 43.1943,-695.17 45.2966,-690.634 45.2966,-690.634 45.2966,-690.634 43.1943,-695.17 49.3795,-692.526 41.092,-699.707 41.092,-699.707"/> | |
</g> | |
<!-- 136->111 --> | |
<g id="PetriNet_edge16" class="edge"><title>136->111</title> | |
<path fill="none" stroke="black" d="M75.0588,-661.19C79.0287,-669.757 83.9652,-680.409 88.6776,-690.578"/> | |
<polygon fill="black" stroke="black" points="92.908,-699.707 84.6205,-692.526 90.8057,-695.17 88.7034,-690.634 88.7034,-690.634 88.7034,-690.634 90.8057,-695.17 92.7863,-688.742 92.908,-699.707 92.908,-699.707"/> | |
</g> | |
<!-- 143->112 --> | |
<g id="PetriNet_edge19" class="edge"><title>143->112</title> | |
<path fill="none" stroke="black" d="M58.9412,-829.19C54.9713,-837.757 50.0348,-848.409 45.3224,-858.578"/> | |
<polygon fill="black" stroke="black" points="41.092,-867.707 41.2137,-856.742 43.1943,-863.17 45.2966,-858.634 45.2966,-858.634 45.2966,-858.634 43.1943,-863.17 49.3795,-860.526 41.092,-867.707 41.092,-867.707"/> | |
</g> | |
<!-- 143->113 --> | |
<g id="PetriNet_edge20" class="edge"><title>143->113</title> | |
<path fill="none" stroke="black" d="M75.0588,-829.19C80.3018,-840.504 87.231,-855.456 93.1028,-868.127"/> | |
<polygon fill="black" stroke="black" points="97.3416,-877.274 89.054,-870.093 95.2392,-872.737 93.1369,-868.201 93.1369,-868.201 93.1369,-868.201 95.2392,-872.737 97.2198,-866.309 97.3416,-877.274 97.3416,-877.274"/> | |
</g> | |
</g> | |
</svg> | |
]]></Attribute_String><Attribute_String roleName="setup">${MODELNAME_DEFAULT},${SVGURI_DEFAULT}</Attribute_String></SvgClient> | |
</XholonWorkbook> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment