about summary refs log tree commit diff stats
path: root/cpp/.traces
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2015-05-03 18:39:58 -0700
committerKartik K. Agaram <vc@akkartik.com>2015-05-03 18:39:58 -0700
commit249a5672e41f603c8d705f69f2939a25a45685ff (patch)
treee823865449d538dec8d2606ba45af7878a277588 /cpp/.traces
parent282a3d94b5ba889a91ac537558d0237225571a85 (diff)
downloadmu-249a5672e41f603c8d705f69f2939a25a45685ff.tar.gz
1246
Diffstat (limited to 'cpp/.traces')
-rw-r--r--cpp/.traces/add6
-rw-r--r--cpp/.traces/add_literal2
-rw-r--r--cpp/.traces/and6
-rw-r--r--cpp/.traces/array-from-args100
-rw-r--r--cpp/.traces/array_length10
-rw-r--r--cpp/.traces/assert2
-rw-r--r--cpp/.traces/brace_conversion_and_run50
-rw-r--r--cpp/.traces/buffer-append-works258
-rw-r--r--cpp/.traces/calling_recipe4
-rw-r--r--cpp/.traces/channel126
-rw-r--r--cpp/.traces/channel-initialization32
-rw-r--r--cpp/.traces/channel-new-empty-not-full74
-rw-r--r--cpp/.traces/channel-read-increments-full130
-rw-r--r--cpp/.traces/channel-read-not-full174
-rw-r--r--cpp/.traces/channel-wrap238
-rw-r--r--cpp/.traces/channel-write-full136
-rw-r--r--cpp/.traces/channel-write-increments-free92
-rw-r--r--cpp/.traces/channel-write-not-empty134
-rw-r--r--cpp/.traces/check_string_in_memory12
-rw-r--r--cpp/.traces/check_trace6
-rw-r--r--cpp/.traces/check_trace_instruction6
-rw-r--r--cpp/.traces/check_trace_negative6
-rw-r--r--cpp/.traces/clear-line-erases-printed-characters328
-rw-r--r--cpp/.traces/closure36
-rw-r--r--cpp/.traces/convert_names2
-rw-r--r--cpp/.traces/convert_names_passes_default_space2
-rw-r--r--cpp/.traces/convert_names_passes_dummy2
-rw-r--r--cpp/.traces/convert_names_passes_raw2
-rw-r--r--cpp/.traces/convert_names_transforms_container_elements4
-rw-r--r--cpp/.traces/convert_names_warns2
-rw-r--r--cpp/.traces/copy4
-rw-r--r--cpp/.traces/copy_array10
-rw-r--r--cpp/.traces/copy_array_indirect12
-rw-r--r--cpp/.traces/copy_exclusive_container8
-rw-r--r--cpp/.traces/copy_handles_nested_container_elements8
-rw-r--r--cpp/.traces/copy_indirect6
-rw-r--r--cpp/.traces/copy_literal2
-rw-r--r--cpp/.traces/copy_multiple_locations6
-rw-r--r--cpp/.traces/deref_sidesteps_default_space10
-rw-r--r--cpp/.traces/deref_sidesteps_default_space_in_get12
-rw-r--r--cpp/.traces/deref_sidesteps_default_space_in_index14
-rw-r--r--cpp/.traces/divide6
-rw-r--r--cpp/.traces/divide_literal2
-rw-r--r--cpp/.traces/divide_with_remainder6
-rw-r--r--cpp/.traces/divide_with_remainder_literal2
-rw-r--r--cpp/.traces/equal6
-rw-r--r--cpp/.traces/equal26
-rw-r--r--cpp/.traces/first_scenario_in_mu6
-rw-r--r--cpp/.traces/get6
-rw-r--r--cpp/.traces/get_address6
-rw-r--r--cpp/.traces/get_address_indirect8
-rw-r--r--cpp/.traces/get_default_space4
-rw-r--r--cpp/.traces/get_handles_nested_container_elements8
-rw-r--r--cpp/.traces/get_indirect8
-rw-r--r--cpp/.traces/greater_or_equal6
-rw-r--r--cpp/.traces/greater_or_equal26
-rw-r--r--cpp/.traces/greater_or_equal36
-rw-r--r--cpp/.traces/greater_than6
-rw-r--r--cpp/.traces/greater_than26
-rw-r--r--cpp/.traces/include_nonderef_properties8
-rw-r--r--cpp/.traces/index10
-rw-r--r--cpp/.traces/index_address10
-rw-r--r--cpp/.traces/index_direct_offset12
-rw-r--r--cpp/.traces/index_indirect12
-rw-r--r--cpp/.traces/ingredient6
-rw-r--r--cpp/.traces/integer-to-decimal-digit-negative184
-rw-r--r--cpp/.traces/integer-to-decimal-digit-positive254
-rw-r--r--cpp/.traces/integer-to-decimal-digit-zero18
-rw-r--r--cpp/.traces/interpolate-at-end268
-rw-r--r--cpp/.traces/interpolate-at-start256
-rw-r--r--cpp/.traces/interpolate-works208
-rw-r--r--cpp/.traces/jump_backward6
-rw-r--r--cpp/.traces/jump_can_skip_instructions2
-rw-r--r--cpp/.traces/jump_if2
-rw-r--r--cpp/.traces/jump_if_fallthrough4
-rw-r--r--cpp/.traces/jump_unless2
-rw-r--r--cpp/.traces/jump_unless_fallthrough4
-rw-r--r--cpp/.traces/lesser_or_equal6
-rw-r--r--cpp/.traces/lesser_or_equal26
-rw-r--r--cpp/.traces/lesser_or_equal36
-rw-r--r--cpp/.traces/lesser_than6
-rw-r--r--cpp/.traces/lesser_than26
-rw-r--r--cpp/.traces/maybe_convert8
-rw-r--r--cpp/.traces/maybe_convert_fail8
-rw-r--r--cpp/.traces/maybe_convert_named8
-rw-r--r--cpp/.traces/memory_check2
-rw-r--r--cpp/.traces/memory_check_multiple2
-rw-r--r--cpp/.traces/memory_check_string10
-rw-r--r--cpp/.traces/memory_check_string_length10
-rw-r--r--cpp/.traces/multiply6
-rw-r--r--cpp/.traces/multiply_literal2
-rw-r--r--cpp/.traces/new6
-rw-r--r--cpp/.traces/new_array6
-rw-r--r--cpp/.traces/new_concurrent8
-rw-r--r--cpp/.traces/new_overflow4
-rw-r--r--cpp/.traces/new_string4
-rw-r--r--cpp/.traces/next_ingredient6
-rw-r--r--cpp/.traces/next_ingredient_missing4
-rw-r--r--cpp/.traces/not4
-rw-r--r--cpp/.traces/or6
-rw-r--r--cpp/.traces/print-character-at-top-left164
-rw-r--r--cpp/.traces/reply8
-rw-r--r--cpp/.traces/reply_container8
-rw-r--r--cpp/.traces/reply_same_as_ingredient8
-rw-r--r--cpp/.traces/return_on_fallthrough12
-rw-r--r--cpp/.traces/rewind_ingredients10
-rw-r--r--cpp/.traces/run4
-rw-r--r--cpp/.traces/run_dummy2
-rw-r--r--cpp/.traces/run_label4
-rw-r--r--cpp/.traces/run_multiple8
-rw-r--r--cpp/.traces/scenario_block6
-rw-r--r--cpp/.traces/scenario_check_memory_and_trace12
-rw-r--r--cpp/.traces/scenario_multiple_blocks12
-rw-r--r--cpp/.traces/scenario_with_comment_in_mu6
-rw-r--r--cpp/.traces/scenario_with_multiple_comments_in_mu6
-rw-r--r--cpp/.traces/scheduler6
-rw-r--r--cpp/.traces/scheduler_interleaves_routines10
-rw-r--r--cpp/.traces/scheduler_runs_single_routine4
-rw-r--r--cpp/.traces/scheduler_skips_completed_routines4
-rw-r--r--cpp/.traces/scheduler_starts_at_middle_of_routines4
-rw-r--r--cpp/.traces/set_default_space6
-rw-r--r--cpp/.traces/store_indirect4
-rw-r--r--cpp/.traces/string-append-1250
-rw-r--r--cpp/.traces/string-equal-common-lengths-but-distinct78
-rw-r--r--cpp/.traces/string-equal-distinct-lengths34
-rw-r--r--cpp/.traces/string-equal-identical86
-rw-r--r--cpp/.traces/string-equal-reflexive84
-rw-r--r--cpp/.traces/string-equal-with-empty30
-rw-r--r--cpp/.traces/subtract6
-rw-r--r--cpp/.traces/subtract_literal2
-rw-r--r--cpp/.traces/surrounding_space12
-rw-r--r--cpp/.traces/trace2
-rw-r--r--cpp/.traces/trace_check_passes_silently6
-rw-r--r--cpp/.traces/trace_check_warns_on_failure2
-rw-r--r--cpp/.traces/trace_check_warns_on_failure_in_later_line6
-rw-r--r--cpp/.traces/trace_negative_check_passes_silently2
-rw-r--r--cpp/.traces/trace_negative_check_warns_on_any_unexpected_line6
-rw-r--r--cpp/.traces/trace_negative_check_warns_on_failure6
-rw-r--r--cpp/.traces/wait_for_location10
139 files changed, 2254 insertions, 2254 deletions
diff --git a/cpp/.traces/add b/cpp/.traces/add
index 8892c399..51c64f81 100644
--- a/cpp/.traces/add
+++ b/cpp/.traces/add
@@ -15,15 +15,15 @@ after-brace/0: add ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "23", value: 23, type: 0, properties: ["23": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "23", value: 23, type: 0, properties: ["23": "literal"]}
 run/0: ingredient 0 is 23
 mem/0: storing 23 in location 1
 run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 run/0: ingredient 0 is 34
 mem/0: storing 34 in location 2
 run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- add {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- add/2 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 23
 run/0: ingredient 1 is 2
diff --git a/cpp/.traces/add_literal b/cpp/.traces/add_literal
index 6f232792..c6dc982e 100644
--- a/cpp/.traces/add_literal
+++ b/cpp/.traces/add_literal
@@ -7,7 +7,7 @@ after-brace/0: add ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- add {name: "23", value: 23, type: 0, properties: ["23": "literal"]}, {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- add/2 {name: "23", value: 23, type: 0, properties: ["23": "literal"]}, {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 run/0: ingredient 0 is 23
 run/0: ingredient 1 is 34
 run/0: product 0 is 57
diff --git a/cpp/.traces/and b/cpp/.traces/and
index 39380cec..d354b1a9 100644
--- a/cpp/.traces/and
+++ b/cpp/.traces/and
@@ -15,15 +15,15 @@ after-brace/0: and ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is 1
 mem/0: storing 1 in location 1
 run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 2
 run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- and {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- and/7 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 1
 run/0: ingredient 1 is 2
diff --git a/cpp/.traces/array-from-args b/cpp/.traces/array-from-args
index 6abdab60..d033bb80 100644
--- a/cpp/.traces/array-from-args
+++ b/cpp/.traces/array-from-args
@@ -24,7 +24,7 @@ after-brace/0: memory-should-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: array-from-args
 run/0: instruction array-from-args/0
-run/0: run {name: "
+run/0: run/42 {name: "
     1:address:array:location <- init-array 0:literal, 1:literal, 2:literal
     2:array:location <- copy 1:address:array:location/deref
   ", value: 0, type: 0, properties: ["
@@ -43,101 +43,101 @@ after-brace/0: recipe run1001
 after-brace/0: init-array ...
 after-brace/0: copy ...
 run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 2-5-1, properties: ["1": "address":"array":"location"]} <- init-array {name: "0", value: 0, type: 0, properties: ["0": "literal"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}, {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
+run/0: {name: "1", value: 1, type: 2-5-1, properties: ["1": "address":"array":"location"]} <- init-array/114 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}, {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
 run/0: instruction init-array/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1000
 run/0: instruction init-array/1
-run/0: {name: "capacity", value: 1, type: 1, properties: ["capacity": "integer"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "capacity", value: 1, type: 1, properties: ["capacity": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 1002
 run/0: instruction init-array/3
-run/0: {name: "curr-value", value: 2, type: 1, properties: ["curr-value": "location"]}, {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]} <- next-ingredient 
+run/0: {name: "curr-value", value: 2, type: 1, properties: ["curr-value": "location"]}, {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]} <- next-ingredient/29 
 run/0: product 0 is 0
 mem/0: storing 0 in location 1003
 mem/0: storing 1 in location 1004
 run/0: instruction init-array/4
-run/0: break-unless {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
 mem/0: location 1004 is 1
 run/0: ingredient 0 is 1
 run/0: jump-unless fell through
 run/0: instruction init-array/5
-run/0: {name: "capacity", value: 1, type: 1, properties: ["capacity": "integer"]} <- add {name: "capacity", value: 1, type: 1, properties: ["capacity": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "capacity", value: 1, type: 1, properties: ["capacity": "integer"]} <- add/2 {name: "capacity", value: 1, type: 1, properties: ["capacity": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is capacity
 mem/0: location 1002 is 0
 run/0: ingredient 1 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1002
 run/0: instruction init-array/6
-run/0: loop {name: "", value: -4, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -4, type: , properties: ["": ]}
 run/0: ingredient 0 is -4
 run/0: jumping to instruction 3
 run/0: instruction init-array/3
-run/0: {name: "curr-value", value: 2, type: 1, properties: ["curr-value": "location"]}, {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]} <- next-ingredient 
+run/0: {name: "curr-value", value: 2, type: 1, properties: ["curr-value": "location"]}, {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]} <- next-ingredient/29 
 run/0: product 0 is 1
 mem/0: storing 1 in location 1003
 mem/0: storing 1 in location 1004
 run/0: instruction init-array/4
-run/0: break-unless {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
 mem/0: location 1004 is 1
 run/0: ingredient 0 is 1
 run/0: jump-unless fell through
 run/0: instruction init-array/5
-run/0: {name: "capacity", value: 1, type: 1, properties: ["capacity": "integer"]} <- add {name: "capacity", value: 1, type: 1, properties: ["capacity": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "capacity", value: 1, type: 1, properties: ["capacity": "integer"]} <- add/2 {name: "capacity", value: 1, type: 1, properties: ["capacity": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is capacity
 mem/0: location 1002 is 1
 run/0: ingredient 1 is 1
 run/0: product 0 is 2
 mem/0: storing 2 in location 1002
 run/0: instruction init-array/6
-run/0: loop {name: "", value: -4, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -4, type: , properties: ["": ]}
 run/0: ingredient 0 is -4
 run/0: jumping to instruction 3
 run/0: instruction init-array/3
-run/0: {name: "curr-value", value: 2, type: 1, properties: ["curr-value": "location"]}, {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]} <- next-ingredient 
+run/0: {name: "curr-value", value: 2, type: 1, properties: ["curr-value": "location"]}, {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]} <- next-ingredient/29 
 run/0: product 0 is 2
 mem/0: storing 2 in location 1003
 mem/0: storing 1 in location 1004
 run/0: instruction init-array/4
-run/0: break-unless {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
 mem/0: location 1004 is 1
 run/0: ingredient 0 is 1
 run/0: jump-unless fell through
 run/0: instruction init-array/5
-run/0: {name: "capacity", value: 1, type: 1, properties: ["capacity": "integer"]} <- add {name: "capacity", value: 1, type: 1, properties: ["capacity": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "capacity", value: 1, type: 1, properties: ["capacity": "integer"]} <- add/2 {name: "capacity", value: 1, type: 1, properties: ["capacity": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is capacity
 mem/0: location 1002 is 2
 run/0: ingredient 1 is 1
 run/0: product 0 is 3
 mem/0: storing 3 in location 1002
 run/0: instruction init-array/6
-run/0: loop {name: "", value: -4, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -4, type: , properties: ["": ]}
 run/0: ingredient 0 is -4
 run/0: jumping to instruction 3
 run/0: instruction init-array/3
-run/0: {name: "curr-value", value: 2, type: 1, properties: ["curr-value": "location"]}, {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]} <- next-ingredient 
+run/0: {name: "curr-value", value: 2, type: 1, properties: ["curr-value": "location"]}, {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]} <- next-ingredient/29 
 mem/0: storing 0 in location 1004
 run/0: instruction init-array/4
-run/0: break-unless {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
 mem/0: location 1004 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 7
 run/0: instruction init-array/8
-run/0: {name: "result", value: 4, type: 2-5-1, properties: ["result": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "capacity", value: 1, type: 1, properties: ["capacity": "integer"]}
+run/0: {name: "result", value: 4, type: 2-5-1, properties: ["result": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "capacity", value: 1, type: 1, properties: ["capacity": "integer"]}
 mem/0: location 1002 is 3
 mem/0: array size is 3
 mem/0: new alloc: 1031
 mem/0: storing 1031 in location 1005
 run/0: instruction init-array/9
-run/0: rewind-ingredients 
+run/0: rewind-ingredients/30 
 run/0: instruction init-array/10
-run/0: {name: "i", value: 5, type: 1, properties: ["i": "integer"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "i", value: 5, type: 1, properties: ["i": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 1006
 run/0: instruction init-array/12
-run/0: {name: "done?", value: 6, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "i", value: 5, type: 1, properties: ["i": "integer"]}, {name: "capacity", value: 1, type: 1, properties: ["capacity": "integer"]}
+run/0: {name: "done?", value: 6, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 5, type: 1, properties: ["i": "integer"]}, {name: "capacity", value: 1, type: 1, properties: ["capacity": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1006 is 0
 run/0: ingredient 1 is capacity
@@ -145,21 +145,21 @@ mem/0: location 1002 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1007
 run/0: instruction init-array/13
-run/0: break-if {name: "done?", value: 6, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 6, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1007 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction init-array/14
-run/0: {name: "curr-value", value: 2, type: 1, properties: ["curr-value": "location"]}, {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]} <- next-ingredient 
+run/0: {name: "curr-value", value: 2, type: 1, properties: ["curr-value": "location"]}, {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]} <- next-ingredient/29 
 run/0: product 0 is 0
 mem/0: storing 0 in location 1003
 mem/0: storing 1 in location 1004
 run/0: instruction init-array/15
-run/0: assert {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]}, {name: "error in rewinding ingredients to init-array", value: 0, type: 0, properties: ["error in rewinding ingredients to init-array": "literal-string"]}
+run/0: assert/19 {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]}, {name: "error in rewinding ingredients to init-array", value: 0, type: 0, properties: ["error in rewinding ingredients to init-array": "literal-string"]}
 run/0: ingredient 0 is exists?
 mem/0: location 1004 is 1
 run/0: instruction init-array/16
-run/0: {name: "tmp", value: 7, type: 2-1, properties: ["tmp": "address":"location"]} <- index-address {name: "result", value: 4, type: 2-5-1, properties: ["result": "address":"array":"location", "deref": ]}, {name: "i", value: 5, type: 1, properties: ["i": "integer"]}
+run/0: {name: "tmp", value: 7, type: 2-1, properties: ["tmp": "address":"location"]} <- index-address/26 {name: "result", value: 4, type: 2-5-1, properties: ["result": "address":"array":"location", "deref": ]}, {name: "i", value: 5, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1005 is 1031
 run/0: ingredient 1 is {name: "i", value: 5, type: 1, properties: ["i": "integer"]}
@@ -168,24 +168,24 @@ run/0: address to copy is 1032
 run/0: product 0 is 1032
 mem/0: storing 1032 in location 1008
 run/0: instruction init-array/17
-run/0: {name: "tmp", value: 7, type: 2-1, properties: ["tmp": "address":"location", "deref": ]} <- copy {name: "curr-value", value: 2, type: 1, properties: ["curr-value": "location"]}
+run/0: {name: "tmp", value: 7, type: 2-1, properties: ["tmp": "address":"location", "deref": ]} <- copy/1 {name: "curr-value", value: 2, type: 1, properties: ["curr-value": "location"]}
 run/0: ingredient 0 is curr-value
 mem/0: location 1003 is 0
 mem/0: location 1008 is 1032
 mem/0: storing 0 in location 1032
 run/0: instruction init-array/18
-run/0: {name: "i", value: 5, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 5, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 5, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 5, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1006 is 0
 run/0: ingredient 1 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1006
 run/0: instruction init-array/19
-run/0: loop {name: "", value: -8, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
 run/0: ingredient 0 is -8
 run/0: jumping to instruction 12
 run/0: instruction init-array/12
-run/0: {name: "done?", value: 6, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "i", value: 5, type: 1, properties: ["i": "integer"]}, {name: "capacity", value: 1, type: 1, properties: ["capacity": "integer"]}
+run/0: {name: "done?", value: 6, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 5, type: 1, properties: ["i": "integer"]}, {name: "capacity", value: 1, type: 1, properties: ["capacity": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1006 is 1
 run/0: ingredient 1 is capacity
@@ -193,21 +193,21 @@ mem/0: location 1002 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1007
 run/0: instruction init-array/13
-run/0: break-if {name: "done?", value: 6, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 6, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1007 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction init-array/14
-run/0: {name: "curr-value", value: 2, type: 1, properties: ["curr-value": "location"]}, {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]} <- next-ingredient 
+run/0: {name: "curr-value", value: 2, type: 1, properties: ["curr-value": "location"]}, {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]} <- next-ingredient/29 
 run/0: product 0 is 1
 mem/0: storing 1 in location 1003
 mem/0: storing 1 in location 1004
 run/0: instruction init-array/15
-run/0: assert {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]}, {name: "error in rewinding ingredients to init-array", value: 0, type: 0, properties: ["error in rewinding ingredients to init-array": "literal-string"]}
+run/0: assert/19 {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]}, {name: "error in rewinding ingredients to init-array", value: 0, type: 0, properties: ["error in rewinding ingredients to init-array": "literal-string"]}
 run/0: ingredient 0 is exists?
 mem/0: location 1004 is 1
 run/0: instruction init-array/16
-run/0: {name: "tmp", value: 7, type: 2-1, properties: ["tmp": "address":"location"]} <- index-address {name: "result", value: 4, type: 2-5-1, properties: ["result": "address":"array":"location", "deref": ]}, {name: "i", value: 5, type: 1, properties: ["i": "integer"]}
+run/0: {name: "tmp", value: 7, type: 2-1, properties: ["tmp": "address":"location"]} <- index-address/26 {name: "result", value: 4, type: 2-5-1, properties: ["result": "address":"array":"location", "deref": ]}, {name: "i", value: 5, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1005 is 1031
 run/0: ingredient 1 is {name: "i", value: 5, type: 1, properties: ["i": "integer"]}
@@ -216,24 +216,24 @@ run/0: address to copy is 1033
 run/0: product 0 is 1033
 mem/0: storing 1033 in location 1008
 run/0: instruction init-array/17
-run/0: {name: "tmp", value: 7, type: 2-1, properties: ["tmp": "address":"location", "deref": ]} <- copy {name: "curr-value", value: 2, type: 1, properties: ["curr-value": "location"]}
+run/0: {name: "tmp", value: 7, type: 2-1, properties: ["tmp": "address":"location", "deref": ]} <- copy/1 {name: "curr-value", value: 2, type: 1, properties: ["curr-value": "location"]}
 run/0: ingredient 0 is curr-value
 mem/0: location 1003 is 1
 mem/0: location 1008 is 1033
 mem/0: storing 1 in location 1033
 run/0: instruction init-array/18
-run/0: {name: "i", value: 5, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 5, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 5, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 5, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1006 is 1
 run/0: ingredient 1 is 1
 run/0: product 0 is 2
 mem/0: storing 2 in location 1006
 run/0: instruction init-array/19
-run/0: loop {name: "", value: -8, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
 run/0: ingredient 0 is -8
 run/0: jumping to instruction 12
 run/0: instruction init-array/12
-run/0: {name: "done?", value: 6, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "i", value: 5, type: 1, properties: ["i": "integer"]}, {name: "capacity", value: 1, type: 1, properties: ["capacity": "integer"]}
+run/0: {name: "done?", value: 6, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 5, type: 1, properties: ["i": "integer"]}, {name: "capacity", value: 1, type: 1, properties: ["capacity": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1006 is 2
 run/0: ingredient 1 is capacity
@@ -241,21 +241,21 @@ mem/0: location 1002 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1007
 run/0: instruction init-array/13
-run/0: break-if {name: "done?", value: 6, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 6, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1007 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction init-array/14
-run/0: {name: "curr-value", value: 2, type: 1, properties: ["curr-value": "location"]}, {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]} <- next-ingredient 
+run/0: {name: "curr-value", value: 2, type: 1, properties: ["curr-value": "location"]}, {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]} <- next-ingredient/29 
 run/0: product 0 is 2
 mem/0: storing 2 in location 1003
 mem/0: storing 1 in location 1004
 run/0: instruction init-array/15
-run/0: assert {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]}, {name: "error in rewinding ingredients to init-array", value: 0, type: 0, properties: ["error in rewinding ingredients to init-array": "literal-string"]}
+run/0: assert/19 {name: "exists?", value: 3, type: 3, properties: ["exists?": "boolean"]}, {name: "error in rewinding ingredients to init-array", value: 0, type: 0, properties: ["error in rewinding ingredients to init-array": "literal-string"]}
 run/0: ingredient 0 is exists?
 mem/0: location 1004 is 1
 run/0: instruction init-array/16
-run/0: {name: "tmp", value: 7, type: 2-1, properties: ["tmp": "address":"location"]} <- index-address {name: "result", value: 4, type: 2-5-1, properties: ["result": "address":"array":"location", "deref": ]}, {name: "i", value: 5, type: 1, properties: ["i": "integer"]}
+run/0: {name: "tmp", value: 7, type: 2-1, properties: ["tmp": "address":"location"]} <- index-address/26 {name: "result", value: 4, type: 2-5-1, properties: ["result": "address":"array":"location", "deref": ]}, {name: "i", value: 5, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1005 is 1031
 run/0: ingredient 1 is {name: "i", value: 5, type: 1, properties: ["i": "integer"]}
@@ -264,24 +264,24 @@ run/0: address to copy is 1034
 run/0: product 0 is 1034
 mem/0: storing 1034 in location 1008
 run/0: instruction init-array/17
-run/0: {name: "tmp", value: 7, type: 2-1, properties: ["tmp": "address":"location", "deref": ]} <- copy {name: "curr-value", value: 2, type: 1, properties: ["curr-value": "location"]}
+run/0: {name: "tmp", value: 7, type: 2-1, properties: ["tmp": "address":"location", "deref": ]} <- copy/1 {name: "curr-value", value: 2, type: 1, properties: ["curr-value": "location"]}
 run/0: ingredient 0 is curr-value
 mem/0: location 1003 is 2
 mem/0: location 1008 is 1034
 mem/0: storing 2 in location 1034
 run/0: instruction init-array/18
-run/0: {name: "i", value: 5, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 5, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 5, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 5, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1006 is 2
 run/0: ingredient 1 is 1
 run/0: product 0 is 3
 mem/0: storing 3 in location 1006
 run/0: instruction init-array/19
-run/0: loop {name: "", value: -8, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
 run/0: ingredient 0 is -8
 run/0: jumping to instruction 12
 run/0: instruction init-array/12
-run/0: {name: "done?", value: 6, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "i", value: 5, type: 1, properties: ["i": "integer"]}, {name: "capacity", value: 1, type: 1, properties: ["capacity": "integer"]}
+run/0: {name: "done?", value: 6, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 5, type: 1, properties: ["i": "integer"]}, {name: "capacity", value: 1, type: 1, properties: ["capacity": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1006 is 3
 run/0: ingredient 1 is capacity
@@ -289,18 +289,18 @@ mem/0: location 1002 is 3
 run/0: product 0 is 1
 mem/0: storing 1 in location 1007
 run/0: instruction init-array/13
-run/0: break-if {name: "done?", value: 6, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 6, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1007 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
 run/0: jumping to instruction 20
 run/0: instruction init-array/21
-run/0: reply {name: "result", value: 4, type: 2-5-1, properties: ["result": "address":"array":"location"]}
+run/0: reply/32 {name: "result", value: 4, type: 2-5-1, properties: ["result": "address":"array":"location"]}
 mem/0: location 1005 is 1031
 run/0: result 0 is 1031
 mem/0: storing 1031 in location 1
 run/0: instruction run1001/1
-run/0: {name: "2", value: 2, type: 5-1, properties: ["2": "array":"location"]} <- copy {name: "1", value: 1, type: 2-5-1, properties: ["1": "address":"array":"location", "deref": ]}
+run/0: {name: "2", value: 2, type: 5-1, properties: ["2": "array":"location"]} <- copy/1 {name: "1", value: 1, type: 2-5-1, properties: ["1": "address":"array":"location", "deref": ]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 1031
 mem/0: location 1031 is 3
@@ -312,7 +312,7 @@ mem/0: storing 0 in location 3
 mem/0: storing 1 in location 4
 mem/0: storing 2 in location 5
 run/0: instruction array-from-args/1
-run/0: memory-should-contain {name: "
+run/0: memory-should-contain/43 {name: "
     2 <- 3  # array length
     3 <- 0
     4 <- 1
diff --git a/cpp/.traces/array_length b/cpp/.traces/array_length
index bd5f2a56..f78e0e12 100644
--- a/cpp/.traces/array_length
+++ b/cpp/.traces/array_length
@@ -22,21 +22,21 @@ after-brace/0: length ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
 run/0: ingredient 0 is 3
 mem/0: storing 3 in location 1
 run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "14", value: 14, type: 0, properties: ["14": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "14", value: 14, type: 0, properties: ["14": "literal"]}
 run/0: ingredient 0 is 14
 mem/0: storing 14 in location 2
 run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy {name: "15", value: 15, type: 0, properties: ["15": "literal"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy/1 {name: "15", value: 15, type: 0, properties: ["15": "literal"]}
 run/0: ingredient 0 is 15
 mem/0: storing 15 in location 3
 run/0: instruction main/3
-run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- copy {name: "16", value: 16, type: 0, properties: ["16": "literal"]}
+run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- copy/1 {name: "16", value: 16, type: 0, properties: ["16": "literal"]}
 run/0: ingredient 0 is 16
 mem/0: storing 16 in location 4
 run/0: instruction main/4
-run/0: {name: "5", value: 5, type: 1, properties: ["5": "integer"]} <- length {name: "1", value: 1, type: 5-1, properties: ["1": "array":"integer"]}
+run/0: {name: "5", value: 5, type: 1, properties: ["5": "integer"]} <- length/27 {name: "1", value: 1, type: 5-1, properties: ["1": "array":"integer"]}
 mem/0: storing 3 in location 5
diff --git a/cpp/.traces/assert b/cpp/.traces/assert
index a9688419..74ca6ecf 100644
--- a/cpp/.traces/assert
+++ b/cpp/.traces/assert
@@ -6,6 +6,6 @@ after-brace/0: assert ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: assert {name: "0", value: 0, type: 0, properties: ["0": "literal"]}, {name: "this is an assert in mu", value: 0, type: 0, properties: ["this is an assert in mu": "literal-string"]}
+run/0: assert/19 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}, {name: "this is an assert in mu", value: 0, type: 0, properties: ["this is an assert in mu": "literal-string"]}
 run/0: ingredient 0 is 0
 warn/0: this is an assert in mu
diff --git a/cpp/.traces/brace_conversion_and_run b/cpp/.traces/brace_conversion_and_run
index 9aafc716..172de7f0 100644
--- a/cpp/.traces/brace_conversion_and_run
+++ b/cpp/.traces/brace_conversion_and_run
@@ -40,27 +40,27 @@ after-brace/0: copy ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: test-factorial
 run/0: instruction test-factorial/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "5", value: 5, type: 0, properties: ["5": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "5", value: 5, type: 0, properties: ["5": "literal"]}
 run/0: ingredient 0 is 5
 mem/0: storing 5 in location 1
 run/0: instruction test-factorial/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is 1
 mem/0: storing 1 in location 2
 run/0: instruction test-factorial/3
-run/0: {name: "3", value: 3, type: 3, properties: ["3": "boolean"]} <- equal {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "3", value: 3, type: 3, properties: ["3": "boolean"]} <- equal/13 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 5
 run/0: ingredient 1 is 1
 run/0: product 0 is 0
 mem/0: storing 0 in location 3
 run/0: instruction test-factorial/4
-run/0: break-if {name: "3", value: 3, type: 3, properties: ["3": "boolean"]}, {name: "", value: 3, type: , properties: ["": ]}
+run/0: break-if/11 {name: "3", value: 3, type: 3, properties: ["3": "boolean"]}, {name: "", value: 3, type: , properties: ["": ]}
 mem/0: location 3 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction test-factorial/5
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- multiply {name: "2", value: 2, type: 1, properties: ["2": "integer"]}, {name: "1", value: 1, type: 1, properties: ["1": "integer"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- multiply/4 {name: "2", value: 2, type: 1, properties: ["2": "integer"]}, {name: "1", value: 1, type: 1, properties: ["1": "integer"]}
 run/0: ingredient 0 is 2
 mem/0: location 2 is 1
 run/0: ingredient 1 is 1
@@ -69,30 +69,30 @@ run/0: ingredient 1 is 5
 run/0: product 0 is 5
 mem/0: storing 5 in location 2
 run/0: instruction test-factorial/6
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- subtract {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- subtract/3 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 5
 run/0: ingredient 1 is 1
 run/0: product 0 is 4
 mem/0: storing 4 in location 1
 run/0: instruction test-factorial/7
-run/0: loop {name: "", value: -5, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -5, type: , properties: ["": ]}
 run/0: ingredient 0 is -5
 run/0: jumping to instruction 3
 run/0: instruction test-factorial/3
-run/0: {name: "3", value: 3, type: 3, properties: ["3": "boolean"]} <- equal {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "3", value: 3, type: 3, properties: ["3": "boolean"]} <- equal/13 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 4
 run/0: ingredient 1 is 1
 run/0: product 0 is 0
 mem/0: storing 0 in location 3
 run/0: instruction test-factorial/4
-run/0: break-if {name: "3", value: 3, type: 3, properties: ["3": "boolean"]}, {name: "", value: 3, type: , properties: ["": ]}
+run/0: break-if/11 {name: "3", value: 3, type: 3, properties: ["3": "boolean"]}, {name: "", value: 3, type: , properties: ["": ]}
 mem/0: location 3 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction test-factorial/5
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- multiply {name: "2", value: 2, type: 1, properties: ["2": "integer"]}, {name: "1", value: 1, type: 1, properties: ["1": "integer"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- multiply/4 {name: "2", value: 2, type: 1, properties: ["2": "integer"]}, {name: "1", value: 1, type: 1, properties: ["1": "integer"]}
 run/0: ingredient 0 is 2
 mem/0: location 2 is 5
 run/0: ingredient 1 is 1
@@ -101,30 +101,30 @@ run/0: ingredient 1 is 4
 run/0: product 0 is 20
 mem/0: storing 20 in location 2
 run/0: instruction test-factorial/6
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- subtract {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- subtract/3 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 4
 run/0: ingredient 1 is 1
 run/0: product 0 is 3
 mem/0: storing 3 in location 1
 run/0: instruction test-factorial/7
-run/0: loop {name: "", value: -5, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -5, type: , properties: ["": ]}
 run/0: ingredient 0 is -5
 run/0: jumping to instruction 3
 run/0: instruction test-factorial/3
-run/0: {name: "3", value: 3, type: 3, properties: ["3": "boolean"]} <- equal {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "3", value: 3, type: 3, properties: ["3": "boolean"]} <- equal/13 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 3
 run/0: ingredient 1 is 1
 run/0: product 0 is 0
 mem/0: storing 0 in location 3
 run/0: instruction test-factorial/4
-run/0: break-if {name: "3", value: 3, type: 3, properties: ["3": "boolean"]}, {name: "", value: 3, type: , properties: ["": ]}
+run/0: break-if/11 {name: "3", value: 3, type: 3, properties: ["3": "boolean"]}, {name: "", value: 3, type: , properties: ["": ]}
 mem/0: location 3 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction test-factorial/5
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- multiply {name: "2", value: 2, type: 1, properties: ["2": "integer"]}, {name: "1", value: 1, type: 1, properties: ["1": "integer"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- multiply/4 {name: "2", value: 2, type: 1, properties: ["2": "integer"]}, {name: "1", value: 1, type: 1, properties: ["1": "integer"]}
 run/0: ingredient 0 is 2
 mem/0: location 2 is 20
 run/0: ingredient 1 is 1
@@ -133,30 +133,30 @@ run/0: ingredient 1 is 3
 run/0: product 0 is 60
 mem/0: storing 60 in location 2
 run/0: instruction test-factorial/6
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- subtract {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- subtract/3 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 3
 run/0: ingredient 1 is 1
 run/0: product 0 is 2
 mem/0: storing 2 in location 1
 run/0: instruction test-factorial/7
-run/0: loop {name: "", value: -5, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -5, type: , properties: ["": ]}
 run/0: ingredient 0 is -5
 run/0: jumping to instruction 3
 run/0: instruction test-factorial/3
-run/0: {name: "3", value: 3, type: 3, properties: ["3": "boolean"]} <- equal {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "3", value: 3, type: 3, properties: ["3": "boolean"]} <- equal/13 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 2
 run/0: ingredient 1 is 1
 run/0: product 0 is 0
 mem/0: storing 0 in location 3
 run/0: instruction test-factorial/4
-run/0: break-if {name: "3", value: 3, type: 3, properties: ["3": "boolean"]}, {name: "", value: 3, type: , properties: ["": ]}
+run/0: break-if/11 {name: "3", value: 3, type: 3, properties: ["3": "boolean"]}, {name: "", value: 3, type: , properties: ["": ]}
 mem/0: location 3 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction test-factorial/5
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- multiply {name: "2", value: 2, type: 1, properties: ["2": "integer"]}, {name: "1", value: 1, type: 1, properties: ["1": "integer"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- multiply/4 {name: "2", value: 2, type: 1, properties: ["2": "integer"]}, {name: "1", value: 1, type: 1, properties: ["1": "integer"]}
 run/0: ingredient 0 is 2
 mem/0: location 2 is 60
 run/0: ingredient 1 is 1
@@ -165,31 +165,31 @@ run/0: ingredient 1 is 2
 run/0: product 0 is 120
 mem/0: storing 120 in location 2
 run/0: instruction test-factorial/6
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- subtract {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- subtract/3 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 2
 run/0: ingredient 1 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1
 run/0: instruction test-factorial/7
-run/0: loop {name: "", value: -5, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -5, type: , properties: ["": ]}
 run/0: ingredient 0 is -5
 run/0: jumping to instruction 3
 run/0: instruction test-factorial/3
-run/0: {name: "3", value: 3, type: 3, properties: ["3": "boolean"]} <- equal {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "3", value: 3, type: 3, properties: ["3": "boolean"]} <- equal/13 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 1
 run/0: ingredient 1 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 3
 run/0: instruction test-factorial/4
-run/0: break-if {name: "3", value: 3, type: 3, properties: ["3": "boolean"]}, {name: "", value: 3, type: , properties: ["": ]}
+run/0: break-if/11 {name: "3", value: 3, type: 3, properties: ["3": "boolean"]}, {name: "", value: 3, type: , properties: ["": ]}
 mem/0: location 3 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
 run/0: jumping to instruction 8
 run/0: instruction test-factorial/9
-run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- copy {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
+run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- copy/1 {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
 run/0: ingredient 0 is 2
 mem/0: location 2 is 120
 mem/0: storing 120 in location 4
diff --git a/cpp/.traces/buffer-append-works b/cpp/.traces/buffer-append-works
index 8536f9bc..e24f3b69 100644
--- a/cpp/.traces/buffer-append-works
+++ b/cpp/.traces/buffer-append-works
@@ -116,7 +116,7 @@ after-brace/0: memory-should-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: buffer-append-works
 run/0: instruction buffer-append-works/0
-run/0: run {name: "
+run/0: run/42 {name: "
     default-space:address:array:location <- new location:type, 30:literal
     x:address:buffer <- init-buffer 3:literal
     s1:address:array:character <- get x:address:buffer/deref, data:offset
@@ -270,21 +270,21 @@ after-brace/0: equal ...
 after-brace/0: get ...
 after-brace/0: copy ...
 run/0: instruction run1001/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1000
 run/0: instruction run1001/1
-run/0: {name: "x", value: 1, type: 2-9, properties: ["x": "address":"buffer"]} <- init-buffer {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
+run/0: {name: "x", value: 1, type: 2-9, properties: ["x": "address":"buffer"]} <- init-buffer/101 {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
 run/0: instruction init-buffer/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1031
 run/0: instruction init-buffer/1
-run/0: {name: "result", value: 1, type: 2-9, properties: ["result": "address":"buffer"]} <- new {name: "buffer", value: 9, type: 0, properties: ["buffer": "type"]}
+run/0: {name: "result", value: 1, type: 2-9, properties: ["result": "address":"buffer"]} <- new/41 {name: "buffer", value: 9, type: 0, properties: ["buffer": "type"]}
 mem/0: new alloc: 1062
 mem/0: storing 1062 in location 1033
 run/0: instruction init-buffer/2
-run/0: {name: "len", value: 2, type: 2-1, properties: ["len": "address":"integer"]} <- get-address {name: "result", value: 1, type: 2-9, properties: ["result": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
+run/0: {name: "len", value: 2, type: 2-1, properties: ["len": "address":"integer"]} <- get-address/24 {name: "result", value: 1, type: 2-9, properties: ["result": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1033 is 1062
 run/0: ingredient 1 is length
@@ -292,12 +292,12 @@ run/0: address to copy is 1062
 run/0: product 0 is 1062
 mem/0: storing 1062 in location 1034
 run/0: instruction init-buffer/3
-run/0: {name: "len", value: 2, type: 2-1, properties: ["len": "address":"integer", "deref": ]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "len", value: 2, type: 2-1, properties: ["len": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: location 1034 is 1062
 mem/0: storing 0 in location 1062
 run/0: instruction init-buffer/4
-run/0: {name: "s", value: 3, type: 2-2-5-4, properties: ["s": "address":"address":"array":"character"]} <- get-address {name: "result", value: 1, type: 2-9, properties: ["result": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
+run/0: {name: "s", value: 3, type: 2-2-5-4, properties: ["s": "address":"address":"array":"character"]} <- get-address/24 {name: "result", value: 1, type: 2-9, properties: ["result": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1033 is 1062
 run/0: ingredient 1 is data
@@ -305,23 +305,23 @@ run/0: address to copy is 1063
 run/0: product 0 is 1063
 mem/0: storing 1063 in location 1035
 run/0: instruction init-buffer/5
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- next-ingredient 
+run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- next-ingredient/29 
 run/0: product 0 is 3
 mem/0: storing 3 in location 1036
 run/0: instruction init-buffer/6
-run/0: {name: "s", value: 3, type: 2-2-5-4, properties: ["s": "address":"address":"array":"character", "deref": ]} <- new {name: "character", value: 4, type: 0, properties: ["character": "type"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
+run/0: {name: "s", value: 3, type: 2-2-5-4, properties: ["s": "address":"address":"array":"character", "deref": ]} <- new/41 {name: "character", value: 4, type: 0, properties: ["character": "type"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
 mem/0: location 1036 is 3
 mem/0: array size is 3
 mem/0: new alloc: 1064
 mem/0: location 1035 is 1063
 mem/0: storing 1064 in location 1063
 run/0: instruction init-buffer/7
-run/0: reply {name: "result", value: 1, type: 2-9, properties: ["result": "address":"buffer"]}
+run/0: reply/32 {name: "result", value: 1, type: 2-9, properties: ["result": "address":"buffer"]}
 mem/0: location 1033 is 1062
 run/0: result 0 is 1062
 mem/0: storing 1062 in location 1002
 run/0: instruction run1001/2
-run/0: {name: "s1", value: 2, type: 2-5-4, properties: ["s1": "address":"array":"character"]} <- get {name: "x", value: 1, type: 2-9, properties: ["x": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
+run/0: {name: "s1", value: 2, type: 2-5-4, properties: ["s1": "address":"array":"character"]} <- get/23 {name: "x", value: 1, type: 2-9, properties: ["x": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is x
 mem/0: location 1002 is 1062
 run/0: ingredient 1 is data
@@ -331,33 +331,33 @@ mem/0: location 1063 is 1064
 run/0: product 0 is 1064
 mem/0: storing 1064 in location 1003
 run/0: instruction run1001/3
-run/0: {name: "x", value: 1, type: 2-9, properties: ["x": "address":"buffer"]} <- buffer-append {name: "x", value: 1, type: 2-9, properties: ["x": "address":"buffer"]}, {name: "97", value: 97, type: 0, properties: ["97": "literal"]}
+run/0: {name: "x", value: 1, type: 2-9, properties: ["x": "address":"buffer"]} <- buffer-append/104 {name: "x", value: 1, type: 2-9, properties: ["x": "address":"buffer"]}, {name: "97", value: 97, type: 0, properties: ["97": "literal"]}
 mem/0: location 1002 is 1062
 run/0: instruction buffer-append/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1068
 run/0: instruction buffer-append/1
-run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient 
+run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient/29 
 run/0: product 0 is 1062
 mem/0: storing 1062 in location 1070
 run/0: instruction buffer-append/2
-run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient 
+run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient/29 
 run/0: product 0 is 97
 mem/0: storing 97 in location 1071
 run/0: instruction buffer-append/4
-run/0: {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]} <- buffer-full? {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]}
+run/0: {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]} <- buffer-full?/103 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]}
 mem/0: location 1070 is 1062
 run/0: instruction buffer-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1099
 run/0: instruction buffer-full?/1
-run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient 
+run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient/29 
 run/0: product 0 is 1062
 mem/0: storing 1062 in location 1101
 run/0: instruction buffer-full?/2
-run/0: {name: "len", value: 2, type: 1, properties: ["len": "integer"]} <- get {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
+run/0: {name: "len", value: 2, type: 1, properties: ["len": "integer"]} <- get/23 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
 run/0: ingredient 0 is in
 mem/0: location 1101 is 1062
 run/0: ingredient 1 is length
@@ -367,7 +367,7 @@ mem/0: location 1062 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1102
 run/0: instruction buffer-full?/3
-run/0: {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
+run/0: {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get/23 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is in
 mem/0: location 1101 is 1062
 run/0: ingredient 1 is data
@@ -377,11 +377,11 @@ mem/0: location 1063 is 1064
 run/0: product 0 is 1064
 mem/0: storing 1064 in location 1103
 run/0: instruction buffer-full?/4
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- length {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}
+run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- length/27 {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}
 mem/0: location 1103 is 1064
 mem/0: storing 3 in location 1104
 run/0: instruction buffer-full?/5
-run/0: {name: "result", value: 5, type: 3, properties: ["result": "boolean"]} <- greater-or-equal {name: "len", value: 2, type: 1, properties: ["len": "integer"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
+run/0: {name: "result", value: 5, type: 3, properties: ["result": "boolean"]} <- greater-or-equal/16 {name: "len", value: 2, type: 1, properties: ["len": "integer"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
 run/0: ingredient 0 is len
 mem/0: location 1102 is 0
 run/0: ingredient 1 is capacity
@@ -389,18 +389,18 @@ mem/0: location 1104 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1105
 run/0: instruction buffer-full?/6
-run/0: reply {name: "result", value: 5, type: 3, properties: ["result": "boolean"]}
+run/0: reply/32 {name: "result", value: 5, type: 3, properties: ["result": "boolean"]}
 mem/0: location 1105 is 0
 run/0: result 0 is 0
 mem/0: storing 0 in location 1072
 run/0: instruction buffer-append/5
-run/0: break-unless {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1072 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 7
 run/0: instruction buffer-append/8
-run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer"]} <- get-address {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
+run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer"]} <- get-address/24 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
 run/0: ingredient 0 is in
 mem/0: location 1070 is 1062
 run/0: ingredient 1 is length
@@ -408,7 +408,7 @@ run/0: address to copy is 1062
 run/0: product 0 is 1062
 mem/0: storing 1062 in location 1073
 run/0: instruction buffer-append/9
-run/0: {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
+run/0: {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get/23 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is in
 mem/0: location 1070 is 1062
 run/0: ingredient 1 is data
@@ -418,7 +418,7 @@ mem/0: location 1063 is 1064
 run/0: product 0 is 1064
 mem/0: storing 1064 in location 1074
 run/0: instruction buffer-append/10
-run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character"]} <- index-address {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}, {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
+run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character"]} <- index-address/26 {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}, {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
 run/0: ingredient 0 is s
 mem/0: location 1074 is 1064
 run/0: ingredient 1 is {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
@@ -428,13 +428,13 @@ run/0: address to copy is 1065
 run/0: product 0 is 1065
 mem/0: storing 1065 in location 1075
 run/0: instruction buffer-append/11
-run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy {name: "c", value: 2, type: 4, properties: ["c": "character"]}
+run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy/1 {name: "c", value: 2, type: 4, properties: ["c": "character"]}
 run/0: ingredient 0 is c
 mem/0: location 1071 is 97
 mem/0: location 1075 is 1065
 mem/0: storing 97 in location 1065
 run/0: instruction buffer-append/12
-run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]} <- add {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]} <- add/2 {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is len
 mem/0: location 1073 is 1062
 mem/0: location 1062 is 0
@@ -443,38 +443,38 @@ run/0: product 0 is 1
 mem/0: location 1073 is 1062
 mem/0: storing 1 in location 1062
 run/0: instruction buffer-append/13
-run/0: reply {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "same-as-ingredient": "0"]}
+run/0: reply/32 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "same-as-ingredient": "0"]}
 mem/0: location 1070 is 1062
 run/0: result 0 is 1062
 mem/0: storing 1062 in location 1002
 run/0: instruction run1001/4
-run/0: {name: "x", value: 1, type: 2-9, properties: ["x": "address":"buffer"]} <- buffer-append {name: "x", value: 1, type: 2-9, properties: ["x": "address":"buffer"]}, {name: "98", value: 98, type: 0, properties: ["98": "literal"]}
+run/0: {name: "x", value: 1, type: 2-9, properties: ["x": "address":"buffer"]} <- buffer-append/104 {name: "x", value: 1, type: 2-9, properties: ["x": "address":"buffer"]}, {name: "98", value: 98, type: 0, properties: ["98": "literal"]}
 mem/0: location 1002 is 1062
 run/0: instruction buffer-append/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1130
 run/0: instruction buffer-append/1
-run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient 
+run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient/29 
 run/0: product 0 is 1062
 mem/0: storing 1062 in location 1132
 run/0: instruction buffer-append/2
-run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient 
+run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient/29 
 run/0: product 0 is 98
 mem/0: storing 98 in location 1133
 run/0: instruction buffer-append/4
-run/0: {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]} <- buffer-full? {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]}
+run/0: {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]} <- buffer-full?/103 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]}
 mem/0: location 1132 is 1062
 run/0: instruction buffer-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1161
 run/0: instruction buffer-full?/1
-run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient 
+run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient/29 
 run/0: product 0 is 1062
 mem/0: storing 1062 in location 1163
 run/0: instruction buffer-full?/2
-run/0: {name: "len", value: 2, type: 1, properties: ["len": "integer"]} <- get {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
+run/0: {name: "len", value: 2, type: 1, properties: ["len": "integer"]} <- get/23 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
 run/0: ingredient 0 is in
 mem/0: location 1163 is 1062
 run/0: ingredient 1 is length
@@ -484,7 +484,7 @@ mem/0: location 1062 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1164
 run/0: instruction buffer-full?/3
-run/0: {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
+run/0: {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get/23 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is in
 mem/0: location 1163 is 1062
 run/0: ingredient 1 is data
@@ -494,11 +494,11 @@ mem/0: location 1063 is 1064
 run/0: product 0 is 1064
 mem/0: storing 1064 in location 1165
 run/0: instruction buffer-full?/4
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- length {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}
+run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- length/27 {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}
 mem/0: location 1165 is 1064
 mem/0: storing 3 in location 1166
 run/0: instruction buffer-full?/5
-run/0: {name: "result", value: 5, type: 3, properties: ["result": "boolean"]} <- greater-or-equal {name: "len", value: 2, type: 1, properties: ["len": "integer"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
+run/0: {name: "result", value: 5, type: 3, properties: ["result": "boolean"]} <- greater-or-equal/16 {name: "len", value: 2, type: 1, properties: ["len": "integer"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
 run/0: ingredient 0 is len
 mem/0: location 1164 is 1
 run/0: ingredient 1 is capacity
@@ -506,18 +506,18 @@ mem/0: location 1166 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1167
 run/0: instruction buffer-full?/6
-run/0: reply {name: "result", value: 5, type: 3, properties: ["result": "boolean"]}
+run/0: reply/32 {name: "result", value: 5, type: 3, properties: ["result": "boolean"]}
 mem/0: location 1167 is 0
 run/0: result 0 is 0
 mem/0: storing 0 in location 1134
 run/0: instruction buffer-append/5
-run/0: break-unless {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1134 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 7
 run/0: instruction buffer-append/8
-run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer"]} <- get-address {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
+run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer"]} <- get-address/24 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
 run/0: ingredient 0 is in
 mem/0: location 1132 is 1062
 run/0: ingredient 1 is length
@@ -525,7 +525,7 @@ run/0: address to copy is 1062
 run/0: product 0 is 1062
 mem/0: storing 1062 in location 1135
 run/0: instruction buffer-append/9
-run/0: {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
+run/0: {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get/23 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is in
 mem/0: location 1132 is 1062
 run/0: ingredient 1 is data
@@ -535,7 +535,7 @@ mem/0: location 1063 is 1064
 run/0: product 0 is 1064
 mem/0: storing 1064 in location 1136
 run/0: instruction buffer-append/10
-run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character"]} <- index-address {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}, {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
+run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character"]} <- index-address/26 {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}, {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
 run/0: ingredient 0 is s
 mem/0: location 1136 is 1064
 run/0: ingredient 1 is {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
@@ -545,13 +545,13 @@ run/0: address to copy is 1066
 run/0: product 0 is 1066
 mem/0: storing 1066 in location 1137
 run/0: instruction buffer-append/11
-run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy {name: "c", value: 2, type: 4, properties: ["c": "character"]}
+run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy/1 {name: "c", value: 2, type: 4, properties: ["c": "character"]}
 run/0: ingredient 0 is c
 mem/0: location 1133 is 98
 mem/0: location 1137 is 1066
 mem/0: storing 98 in location 1066
 run/0: instruction buffer-append/12
-run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]} <- add {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]} <- add/2 {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is len
 mem/0: location 1135 is 1062
 mem/0: location 1062 is 1
@@ -560,38 +560,38 @@ run/0: product 0 is 2
 mem/0: location 1135 is 1062
 mem/0: storing 2 in location 1062
 run/0: instruction buffer-append/13
-run/0: reply {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "same-as-ingredient": "0"]}
+run/0: reply/32 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "same-as-ingredient": "0"]}
 mem/0: location 1132 is 1062
 run/0: result 0 is 1062
 mem/0: storing 1062 in location 1002
 run/0: instruction run1001/5
-run/0: {name: "x", value: 1, type: 2-9, properties: ["x": "address":"buffer"]} <- buffer-append {name: "x", value: 1, type: 2-9, properties: ["x": "address":"buffer"]}, {name: "99", value: 99, type: 0, properties: ["99": "literal"]}
+run/0: {name: "x", value: 1, type: 2-9, properties: ["x": "address":"buffer"]} <- buffer-append/104 {name: "x", value: 1, type: 2-9, properties: ["x": "address":"buffer"]}, {name: "99", value: 99, type: 0, properties: ["99": "literal"]}
 mem/0: location 1002 is 1062
 run/0: instruction buffer-append/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1192
 run/0: instruction buffer-append/1
-run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient 
+run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient/29 
 run/0: product 0 is 1062
 mem/0: storing 1062 in location 1194
 run/0: instruction buffer-append/2
-run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient 
+run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient/29 
 run/0: product 0 is 99
 mem/0: storing 99 in location 1195
 run/0: instruction buffer-append/4
-run/0: {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]} <- buffer-full? {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]}
+run/0: {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]} <- buffer-full?/103 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]}
 mem/0: location 1194 is 1062
 run/0: instruction buffer-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1223
 run/0: instruction buffer-full?/1
-run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient 
+run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient/29 
 run/0: product 0 is 1062
 mem/0: storing 1062 in location 1225
 run/0: instruction buffer-full?/2
-run/0: {name: "len", value: 2, type: 1, properties: ["len": "integer"]} <- get {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
+run/0: {name: "len", value: 2, type: 1, properties: ["len": "integer"]} <- get/23 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
 run/0: ingredient 0 is in
 mem/0: location 1225 is 1062
 run/0: ingredient 1 is length
@@ -601,7 +601,7 @@ mem/0: location 1062 is 2
 run/0: product 0 is 2
 mem/0: storing 2 in location 1226
 run/0: instruction buffer-full?/3
-run/0: {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
+run/0: {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get/23 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is in
 mem/0: location 1225 is 1062
 run/0: ingredient 1 is data
@@ -611,11 +611,11 @@ mem/0: location 1063 is 1064
 run/0: product 0 is 1064
 mem/0: storing 1064 in location 1227
 run/0: instruction buffer-full?/4
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- length {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}
+run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- length/27 {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}
 mem/0: location 1227 is 1064
 mem/0: storing 3 in location 1228
 run/0: instruction buffer-full?/5
-run/0: {name: "result", value: 5, type: 3, properties: ["result": "boolean"]} <- greater-or-equal {name: "len", value: 2, type: 1, properties: ["len": "integer"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
+run/0: {name: "result", value: 5, type: 3, properties: ["result": "boolean"]} <- greater-or-equal/16 {name: "len", value: 2, type: 1, properties: ["len": "integer"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
 run/0: ingredient 0 is len
 mem/0: location 1226 is 2
 run/0: ingredient 1 is capacity
@@ -623,18 +623,18 @@ mem/0: location 1228 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1229
 run/0: instruction buffer-full?/6
-run/0: reply {name: "result", value: 5, type: 3, properties: ["result": "boolean"]}
+run/0: reply/32 {name: "result", value: 5, type: 3, properties: ["result": "boolean"]}
 mem/0: location 1229 is 0
 run/0: result 0 is 0
 mem/0: storing 0 in location 1196
 run/0: instruction buffer-append/5
-run/0: break-unless {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1196 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 7
 run/0: instruction buffer-append/8
-run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer"]} <- get-address {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
+run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer"]} <- get-address/24 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
 run/0: ingredient 0 is in
 mem/0: location 1194 is 1062
 run/0: ingredient 1 is length
@@ -642,7 +642,7 @@ run/0: address to copy is 1062
 run/0: product 0 is 1062
 mem/0: storing 1062 in location 1197
 run/0: instruction buffer-append/9
-run/0: {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
+run/0: {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get/23 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is in
 mem/0: location 1194 is 1062
 run/0: ingredient 1 is data
@@ -652,7 +652,7 @@ mem/0: location 1063 is 1064
 run/0: product 0 is 1064
 mem/0: storing 1064 in location 1198
 run/0: instruction buffer-append/10
-run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character"]} <- index-address {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}, {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
+run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character"]} <- index-address/26 {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}, {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
 run/0: ingredient 0 is s
 mem/0: location 1198 is 1064
 run/0: ingredient 1 is {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
@@ -662,13 +662,13 @@ run/0: address to copy is 1067
 run/0: product 0 is 1067
 mem/0: storing 1067 in location 1199
 run/0: instruction buffer-append/11
-run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy {name: "c", value: 2, type: 4, properties: ["c": "character"]}
+run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy/1 {name: "c", value: 2, type: 4, properties: ["c": "character"]}
 run/0: ingredient 0 is c
 mem/0: location 1195 is 99
 mem/0: location 1199 is 1067
 mem/0: storing 99 in location 1067
 run/0: instruction buffer-append/12
-run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]} <- add {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]} <- add/2 {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is len
 mem/0: location 1197 is 1062
 mem/0: location 1062 is 2
@@ -677,12 +677,12 @@ run/0: product 0 is 3
 mem/0: location 1197 is 1062
 mem/0: storing 3 in location 1062
 run/0: instruction buffer-append/13
-run/0: reply {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "same-as-ingredient": "0"]}
+run/0: reply/32 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "same-as-ingredient": "0"]}
 mem/0: location 1194 is 1062
 run/0: result 0 is 1062
 mem/0: storing 1062 in location 1002
 run/0: instruction run1001/6
-run/0: {name: "s2", value: 3, type: 2-5-4, properties: ["s2": "address":"array":"character"]} <- get {name: "x", value: 1, type: 2-9, properties: ["x": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
+run/0: {name: "s2", value: 3, type: 2-5-4, properties: ["s2": "address":"array":"character"]} <- get/23 {name: "x", value: 1, type: 2-9, properties: ["x": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is x
 mem/0: location 1002 is 1062
 run/0: ingredient 1 is data
@@ -692,7 +692,7 @@ mem/0: location 1063 is 1064
 run/0: product 0 is 1064
 mem/0: storing 1064 in location 1004
 run/0: instruction run1001/7
-run/0: {name: "1", value: 1, type: 3, properties: ["1": "boolean", "raw": ]} <- equal {name: "s1", value: 2, type: 2-5-4, properties: ["s1": "address":"array":"character"]}, {name: "s2", value: 3, type: 2-5-4, properties: ["s2": "address":"array":"character"]}
+run/0: {name: "1", value: 1, type: 3, properties: ["1": "boolean", "raw": ]} <- equal/13 {name: "s1", value: 2, type: 2-5-4, properties: ["s1": "address":"array":"character"]}, {name: "s2", value: 3, type: 2-5-4, properties: ["s2": "address":"array":"character"]}
 run/0: ingredient 0 is s1
 mem/0: location 1003 is 1064
 run/0: ingredient 1 is s2
@@ -700,7 +700,7 @@ mem/0: location 1004 is 1064
 run/0: product 0 is 1
 mem/0: storing 1 in location 1
 run/0: instruction run1001/8
-run/0: {name: "2", value: 2, type: 5-4, properties: ["2": "array":"character", "raw": ]} <- copy {name: "s2", value: 3, type: 2-5-4, properties: ["s2": "address":"array":"character", "deref": ]}
+run/0: {name: "2", value: 2, type: 5-4, properties: ["2": "array":"character", "raw": ]} <- copy/1 {name: "s2", value: 3, type: 2-5-4, properties: ["s2": "address":"array":"character", "deref": ]}
 run/0: ingredient 0 is s2
 mem/0: location 1004 is 1064
 mem/0: location 1064 is 3
@@ -712,33 +712,33 @@ mem/0: storing 97 in location 3
 mem/0: storing 98 in location 4
 mem/0: storing 99 in location 5
 run/0: instruction run1001/10
-run/0: {name: "x", value: 1, type: 2-9, properties: ["x": "address":"buffer"]} <- buffer-append {name: "x", value: 1, type: 2-9, properties: ["x": "address":"buffer"]}, {name: "100", value: 100, type: 0, properties: ["100": "literal"]}
+run/0: {name: "x", value: 1, type: 2-9, properties: ["x": "address":"buffer"]} <- buffer-append/104 {name: "x", value: 1, type: 2-9, properties: ["x": "address":"buffer"]}, {name: "100", value: 100, type: 0, properties: ["100": "literal"]}
 mem/0: location 1002 is 1062
 run/0: instruction buffer-append/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1254
 run/0: instruction buffer-append/1
-run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient 
+run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient/29 
 run/0: product 0 is 1062
 mem/0: storing 1062 in location 1256
 run/0: instruction buffer-append/2
-run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient 
+run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient/29 
 run/0: product 0 is 100
 mem/0: storing 100 in location 1257
 run/0: instruction buffer-append/4
-run/0: {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]} <- buffer-full? {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]}
+run/0: {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]} <- buffer-full?/103 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]}
 mem/0: location 1256 is 1062
 run/0: instruction buffer-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1285
 run/0: instruction buffer-full?/1
-run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient 
+run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient/29 
 run/0: product 0 is 1062
 mem/0: storing 1062 in location 1287
 run/0: instruction buffer-full?/2
-run/0: {name: "len", value: 2, type: 1, properties: ["len": "integer"]} <- get {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
+run/0: {name: "len", value: 2, type: 1, properties: ["len": "integer"]} <- get/23 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
 run/0: ingredient 0 is in
 mem/0: location 1287 is 1062
 run/0: ingredient 1 is length
@@ -748,7 +748,7 @@ mem/0: location 1062 is 3
 run/0: product 0 is 3
 mem/0: storing 3 in location 1288
 run/0: instruction buffer-full?/3
-run/0: {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
+run/0: {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get/23 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is in
 mem/0: location 1287 is 1062
 run/0: ingredient 1 is data
@@ -758,11 +758,11 @@ mem/0: location 1063 is 1064
 run/0: product 0 is 1064
 mem/0: storing 1064 in location 1289
 run/0: instruction buffer-full?/4
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- length {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}
+run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- length/27 {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}
 mem/0: location 1289 is 1064
 mem/0: storing 3 in location 1290
 run/0: instruction buffer-full?/5
-run/0: {name: "result", value: 5, type: 3, properties: ["result": "boolean"]} <- greater-or-equal {name: "len", value: 2, type: 1, properties: ["len": "integer"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
+run/0: {name: "result", value: 5, type: 3, properties: ["result": "boolean"]} <- greater-or-equal/16 {name: "len", value: 2, type: 1, properties: ["len": "integer"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
 run/0: ingredient 0 is len
 mem/0: location 1288 is 3
 run/0: ingredient 1 is capacity
@@ -770,28 +770,28 @@ mem/0: location 1290 is 3
 run/0: product 0 is 1
 mem/0: storing 1 in location 1291
 run/0: instruction buffer-full?/6
-run/0: reply {name: "result", value: 5, type: 3, properties: ["result": "boolean"]}
+run/0: reply/32 {name: "result", value: 5, type: 3, properties: ["result": "boolean"]}
 mem/0: location 1291 is 1
 run/0: result 0 is 1
 mem/0: storing 1 in location 1258
 run/0: instruction buffer-append/5
-run/0: break-unless {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1258 is 1
 run/0: ingredient 0 is 1
 run/0: jump-unless fell through
 run/0: instruction buffer-append/6
-run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- grow-buffer {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]}
+run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- grow-buffer/102 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]}
 mem/0: location 1256 is 1062
 run/0: instruction grow-buffer/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1316
 run/0: instruction grow-buffer/1
-run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient 
+run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient/29 
 run/0: product 0 is 1062
 mem/0: storing 1062 in location 1318
 run/0: instruction grow-buffer/2
-run/0: {name: "x", value: 2, type: 2-2-5-4, properties: ["x": "address":"address":"array":"character"]} <- get-address {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
+run/0: {name: "x", value: 2, type: 2-2-5-4, properties: ["x": "address":"address":"array":"character"]} <- get-address/24 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is in
 mem/0: location 1318 is 1062
 run/0: ingredient 1 is data
@@ -799,12 +799,12 @@ run/0: address to copy is 1063
 run/0: product 0 is 1063
 mem/0: storing 1063 in location 1319
 run/0: instruction grow-buffer/3
-run/0: {name: "oldlen", value: 3, type: 1, properties: ["oldlen": "integer"]} <- length {name: "x", value: 2, type: 2-2-5-4, properties: ["x": "address":"address":"array":"character", "deref": , "deref": ]}
+run/0: {name: "oldlen", value: 3, type: 1, properties: ["oldlen": "integer"]} <- length/27 {name: "x", value: 2, type: 2-2-5-4, properties: ["x": "address":"address":"array":"character", "deref": , "deref": ]}
 mem/0: location 1319 is 1063
 mem/0: location 1063 is 1064
 mem/0: storing 3 in location 1320
 run/0: instruction grow-buffer/4
-run/0: {name: "newlen", value: 4, type: 1, properties: ["newlen": "integer"]} <- multiply {name: "oldlen", value: 3, type: 1, properties: ["oldlen": "integer"]}, {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
+run/0: {name: "newlen", value: 4, type: 1, properties: ["newlen": "integer"]} <- multiply/4 {name: "oldlen", value: 3, type: 1, properties: ["oldlen": "integer"]}, {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
 run/0: ingredient 0 is oldlen
 mem/0: location 1320 is 3
 run/0: ingredient 1 is 2
@@ -812,24 +812,24 @@ run/0: ingredient 1 is 2
 run/0: product 0 is 6
 mem/0: storing 6 in location 1321
 run/0: instruction grow-buffer/5
-run/0: {name: "olddata", value: 5, type: 2-5-4, properties: ["olddata": "address":"array":"character"]} <- copy {name: "x", value: 2, type: 2-2-5-4, properties: ["x": "address":"address":"array":"character", "deref": ]}
+run/0: {name: "olddata", value: 5, type: 2-5-4, properties: ["olddata": "address":"array":"character"]} <- copy/1 {name: "x", value: 2, type: 2-2-5-4, properties: ["x": "address":"address":"array":"character", "deref": ]}
 run/0: ingredient 0 is x
 mem/0: location 1319 is 1063
 mem/0: location 1063 is 1064
 mem/0: storing 1064 in location 1322
 run/0: instruction grow-buffer/6
-run/0: {name: "x", value: 2, type: 2-2-5-4, properties: ["x": "address":"address":"array":"character", "deref": ]} <- new {name: "character", value: 4, type: 0, properties: ["character": "type"]}, {name: "newlen", value: 4, type: 1, properties: ["newlen": "integer"]}
+run/0: {name: "x", value: 2, type: 2-2-5-4, properties: ["x": "address":"address":"array":"character", "deref": ]} <- new/41 {name: "character", value: 4, type: 0, properties: ["character": "type"]}, {name: "newlen", value: 4, type: 1, properties: ["newlen": "integer"]}
 mem/0: location 1321 is 6
 mem/0: array size is 6
 mem/0: new alloc: 1347
 mem/0: location 1319 is 1063
 mem/0: storing 1347 in location 1063
 run/0: instruction grow-buffer/7
-run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 1323
 run/0: instruction grow-buffer/9
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "oldlen", value: 3, type: 1, properties: ["oldlen": "integer"]}
+run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "oldlen", value: 3, type: 1, properties: ["oldlen": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1323 is 0
 run/0: ingredient 1 is oldlen
@@ -837,12 +837,12 @@ mem/0: location 1320 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1324
 run/0: instruction grow-buffer/10
-run/0: break-if {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
 mem/0: location 1324 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction grow-buffer/11
-run/0: {name: "src", value: 8, type: 4, properties: ["src": "character"]} <- index {name: "olddata", value: 5, type: 2-5-4, properties: ["olddata": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
+run/0: {name: "src", value: 8, type: 4, properties: ["src": "character"]} <- index/25 {name: "olddata", value: 5, type: 2-5-4, properties: ["olddata": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "olddata", value: 5, type: 2-5-4, properties: ["olddata": "address":"array":"character", "deref": ]}
 mem/0: location 1322 is 1064
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
@@ -853,7 +853,7 @@ mem/0: location 1065 is 97
 run/0: product 0 is 97
 mem/0: storing 97 in location 1325
 run/0: instruction grow-buffer/12
-run/0: {name: "dest", value: 9, type: 2-4, properties: ["dest": "address":"character"]} <- index-address {name: "x", value: 2, type: 2-2-5-4, properties: ["x": "address":"address":"array":"character", "deref": , "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
+run/0: {name: "dest", value: 9, type: 2-4, properties: ["dest": "address":"character"]} <- index-address/26 {name: "x", value: 2, type: 2-2-5-4, properties: ["x": "address":"address":"array":"character", "deref": , "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is x
 mem/0: location 1319 is 1063
 mem/0: location 1063 is 1347
@@ -863,24 +863,24 @@ run/0: address to copy is 1348
 run/0: product 0 is 1348
 mem/0: storing 1348 in location 1326
 run/0: instruction grow-buffer/13
-run/0: {name: "dest", value: 9, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy {name: "src", value: 8, type: 4, properties: ["src": "character"]}
+run/0: {name: "dest", value: 9, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy/1 {name: "src", value: 8, type: 4, properties: ["src": "character"]}
 run/0: ingredient 0 is src
 mem/0: location 1325 is 97
 mem/0: location 1326 is 1348
 mem/0: storing 97 in location 1348
 run/0: instruction grow-buffer/14
-run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1323 is 0
 run/0: ingredient 1 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1323
 run/0: instruction grow-buffer/15
-run/0: loop {name: "", value: -7, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -7, type: , properties: ["": ]}
 run/0: ingredient 0 is -7
 run/0: jumping to instruction 9
 run/0: instruction grow-buffer/9
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "oldlen", value: 3, type: 1, properties: ["oldlen": "integer"]}
+run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "oldlen", value: 3, type: 1, properties: ["oldlen": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1323 is 1
 run/0: ingredient 1 is oldlen
@@ -888,12 +888,12 @@ mem/0: location 1320 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1324
 run/0: instruction grow-buffer/10
-run/0: break-if {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
 mem/0: location 1324 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction grow-buffer/11
-run/0: {name: "src", value: 8, type: 4, properties: ["src": "character"]} <- index {name: "olddata", value: 5, type: 2-5-4, properties: ["olddata": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
+run/0: {name: "src", value: 8, type: 4, properties: ["src": "character"]} <- index/25 {name: "olddata", value: 5, type: 2-5-4, properties: ["olddata": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "olddata", value: 5, type: 2-5-4, properties: ["olddata": "address":"array":"character", "deref": ]}
 mem/0: location 1322 is 1064
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
@@ -904,7 +904,7 @@ mem/0: location 1066 is 98
 run/0: product 0 is 98
 mem/0: storing 98 in location 1325
 run/0: instruction grow-buffer/12
-run/0: {name: "dest", value: 9, type: 2-4, properties: ["dest": "address":"character"]} <- index-address {name: "x", value: 2, type: 2-2-5-4, properties: ["x": "address":"address":"array":"character", "deref": , "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
+run/0: {name: "dest", value: 9, type: 2-4, properties: ["dest": "address":"character"]} <- index-address/26 {name: "x", value: 2, type: 2-2-5-4, properties: ["x": "address":"address":"array":"character", "deref": , "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is x
 mem/0: location 1319 is 1063
 mem/0: location 1063 is 1347
@@ -914,24 +914,24 @@ run/0: address to copy is 1349
 run/0: product 0 is 1349
 mem/0: storing 1349 in location 1326
 run/0: instruction grow-buffer/13
-run/0: {name: "dest", value: 9, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy {name: "src", value: 8, type: 4, properties: ["src": "character"]}
+run/0: {name: "dest", value: 9, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy/1 {name: "src", value: 8, type: 4, properties: ["src": "character"]}
 run/0: ingredient 0 is src
 mem/0: location 1325 is 98
 mem/0: location 1326 is 1349
 mem/0: storing 98 in location 1349
 run/0: instruction grow-buffer/14
-run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1323 is 1
 run/0: ingredient 1 is 1
 run/0: product 0 is 2
 mem/0: storing 2 in location 1323
 run/0: instruction grow-buffer/15
-run/0: loop {name: "", value: -7, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -7, type: , properties: ["": ]}
 run/0: ingredient 0 is -7
 run/0: jumping to instruction 9
 run/0: instruction grow-buffer/9
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "oldlen", value: 3, type: 1, properties: ["oldlen": "integer"]}
+run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "oldlen", value: 3, type: 1, properties: ["oldlen": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1323 is 2
 run/0: ingredient 1 is oldlen
@@ -939,12 +939,12 @@ mem/0: location 1320 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1324
 run/0: instruction grow-buffer/10
-run/0: break-if {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
 mem/0: location 1324 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction grow-buffer/11
-run/0: {name: "src", value: 8, type: 4, properties: ["src": "character"]} <- index {name: "olddata", value: 5, type: 2-5-4, properties: ["olddata": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
+run/0: {name: "src", value: 8, type: 4, properties: ["src": "character"]} <- index/25 {name: "olddata", value: 5, type: 2-5-4, properties: ["olddata": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "olddata", value: 5, type: 2-5-4, properties: ["olddata": "address":"array":"character", "deref": ]}
 mem/0: location 1322 is 1064
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
@@ -955,7 +955,7 @@ mem/0: location 1067 is 99
 run/0: product 0 is 99
 mem/0: storing 99 in location 1325
 run/0: instruction grow-buffer/12
-run/0: {name: "dest", value: 9, type: 2-4, properties: ["dest": "address":"character"]} <- index-address {name: "x", value: 2, type: 2-2-5-4, properties: ["x": "address":"address":"array":"character", "deref": , "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
+run/0: {name: "dest", value: 9, type: 2-4, properties: ["dest": "address":"character"]} <- index-address/26 {name: "x", value: 2, type: 2-2-5-4, properties: ["x": "address":"address":"array":"character", "deref": , "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is x
 mem/0: location 1319 is 1063
 mem/0: location 1063 is 1347
@@ -965,24 +965,24 @@ run/0: address to copy is 1350
 run/0: product 0 is 1350
 mem/0: storing 1350 in location 1326
 run/0: instruction grow-buffer/13
-run/0: {name: "dest", value: 9, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy {name: "src", value: 8, type: 4, properties: ["src": "character"]}
+run/0: {name: "dest", value: 9, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy/1 {name: "src", value: 8, type: 4, properties: ["src": "character"]}
 run/0: ingredient 0 is src
 mem/0: location 1325 is 99
 mem/0: location 1326 is 1350
 mem/0: storing 99 in location 1350
 run/0: instruction grow-buffer/14
-run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1323 is 2
 run/0: ingredient 1 is 1
 run/0: product 0 is 3
 mem/0: storing 3 in location 1323
 run/0: instruction grow-buffer/15
-run/0: loop {name: "", value: -7, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -7, type: , properties: ["": ]}
 run/0: ingredient 0 is -7
 run/0: jumping to instruction 9
 run/0: instruction grow-buffer/9
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "oldlen", value: 3, type: 1, properties: ["oldlen": "integer"]}
+run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "oldlen", value: 3, type: 1, properties: ["oldlen": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1323 is 3
 run/0: ingredient 1 is oldlen
@@ -990,18 +990,18 @@ mem/0: location 1320 is 3
 run/0: product 0 is 1
 mem/0: storing 1 in location 1324
 run/0: instruction grow-buffer/10
-run/0: break-if {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
 mem/0: location 1324 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
 run/0: jumping to instruction 16
 run/0: instruction grow-buffer/17
-run/0: reply {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]}
+run/0: reply/32 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]}
 mem/0: location 1318 is 1062
 run/0: result 0 is 1062
 mem/0: storing 1062 in location 1256
 run/0: instruction buffer-append/8
-run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer"]} <- get-address {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
+run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer"]} <- get-address/24 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
 run/0: ingredient 0 is in
 mem/0: location 1256 is 1062
 run/0: ingredient 1 is length
@@ -1009,7 +1009,7 @@ run/0: address to copy is 1062
 run/0: product 0 is 1062
 mem/0: storing 1062 in location 1259
 run/0: instruction buffer-append/9
-run/0: {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
+run/0: {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get/23 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is in
 mem/0: location 1256 is 1062
 run/0: ingredient 1 is data
@@ -1019,7 +1019,7 @@ mem/0: location 1063 is 1347
 run/0: product 0 is 1347
 mem/0: storing 1347 in location 1260
 run/0: instruction buffer-append/10
-run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character"]} <- index-address {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}, {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
+run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character"]} <- index-address/26 {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}, {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
 run/0: ingredient 0 is s
 mem/0: location 1260 is 1347
 run/0: ingredient 1 is {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
@@ -1029,13 +1029,13 @@ run/0: address to copy is 1351
 run/0: product 0 is 1351
 mem/0: storing 1351 in location 1261
 run/0: instruction buffer-append/11
-run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy {name: "c", value: 2, type: 4, properties: ["c": "character"]}
+run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy/1 {name: "c", value: 2, type: 4, properties: ["c": "character"]}
 run/0: ingredient 0 is c
 mem/0: location 1257 is 100
 mem/0: location 1261 is 1351
 mem/0: storing 100 in location 1351
 run/0: instruction buffer-append/12
-run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]} <- add {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]} <- add/2 {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is len
 mem/0: location 1259 is 1062
 mem/0: location 1062 is 3
@@ -1044,12 +1044,12 @@ run/0: product 0 is 4
 mem/0: location 1259 is 1062
 mem/0: storing 4 in location 1062
 run/0: instruction buffer-append/13
-run/0: reply {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "same-as-ingredient": "0"]}
+run/0: reply/32 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "same-as-ingredient": "0"]}
 mem/0: location 1256 is 1062
 run/0: result 0 is 1062
 mem/0: storing 1062 in location 1002
 run/0: instruction run1001/11
-run/0: {name: "s3", value: 4, type: 2-5-4, properties: ["s3": "address":"array":"character"]} <- get {name: "x", value: 1, type: 2-9, properties: ["x": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
+run/0: {name: "s3", value: 4, type: 2-5-4, properties: ["s3": "address":"array":"character"]} <- get/23 {name: "x", value: 1, type: 2-9, properties: ["x": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is x
 mem/0: location 1002 is 1062
 run/0: ingredient 1 is data
@@ -1059,7 +1059,7 @@ mem/0: location 1063 is 1347
 run/0: product 0 is 1347
 mem/0: storing 1347 in location 1005
 run/0: instruction run1001/12
-run/0: {name: "10", value: 10, type: 3, properties: ["10": "boolean", "raw": ]} <- equal {name: "s1", value: 2, type: 2-5-4, properties: ["s1": "address":"array":"character"]}, {name: "s3", value: 4, type: 2-5-4, properties: ["s3": "address":"array":"character"]}
+run/0: {name: "10", value: 10, type: 3, properties: ["10": "boolean", "raw": ]} <- equal/13 {name: "s1", value: 2, type: 2-5-4, properties: ["s1": "address":"array":"character"]}, {name: "s3", value: 4, type: 2-5-4, properties: ["s3": "address":"array":"character"]}
 run/0: ingredient 0 is s1
 mem/0: location 1003 is 1064
 run/0: ingredient 1 is s3
@@ -1067,7 +1067,7 @@ mem/0: location 1005 is 1347
 run/0: product 0 is 0
 mem/0: storing 0 in location 10
 run/0: instruction run1001/13
-run/0: {name: "11", value: 11, type: 1, properties: ["11": "integer", "raw": ]} <- get {name: "x", value: 1, type: 2-9, properties: ["x": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
+run/0: {name: "11", value: 11, type: 1, properties: ["11": "integer", "raw": ]} <- get/23 {name: "x", value: 1, type: 2-9, properties: ["x": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
 run/0: ingredient 0 is x
 mem/0: location 1002 is 1062
 run/0: ingredient 1 is length
@@ -1077,7 +1077,7 @@ mem/0: location 1062 is 4
 run/0: product 0 is 4
 mem/0: storing 4 in location 11
 run/0: instruction run1001/14
-run/0: {name: "12", value: 12, type: 5-4, properties: ["12": "array":"character", "raw": ]} <- copy {name: "s3", value: 4, type: 2-5-4, properties: ["s3": "address":"array":"character", "deref": ]}
+run/0: {name: "12", value: 12, type: 5-4, properties: ["12": "array":"character", "raw": ]} <- copy/1 {name: "s3", value: 4, type: 2-5-4, properties: ["s3": "address":"array":"character", "deref": ]}
 run/0: ingredient 0 is s3
 mem/0: location 1005 is 1347
 mem/0: location 1347 is 6
@@ -1095,7 +1095,7 @@ mem/0: storing 100 in location 16
 mem/0: storing 0 in location 17
 mem/0: storing 0 in location 18
 run/0: instruction buffer-append-works/1
-run/0: memory-should-contain {name: "
+run/0: memory-should-contain/43 {name: "
     # before +buffer-filled
     1 <- 1   # no change in data pointer
     2 <- 3   # size of data
diff --git a/cpp/.traces/calling_recipe b/cpp/.traces/calling_recipe
index 9b265ca1..a7a66682 100644
--- a/cpp/.traces/calling_recipe
+++ b/cpp/.traces/calling_recipe
@@ -10,9 +10,9 @@ after-brace/0: add ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: f 
+run/0: f/1001 
 run/0: instruction f/0
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- add {name: "2", value: 2, type: 0, properties: ["2": "literal"]}, {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- add/2 {name: "2", value: 2, type: 0, properties: ["2": "literal"]}, {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
 run/0: ingredient 0 is 2
 run/0: ingredient 1 is 2
 run/0: product 0 is 4
diff --git a/cpp/.traces/channel b/cpp/.traces/channel
index c80f3f6d..59294c41 100644
--- a/cpp/.traces/channel
+++ b/cpp/.traces/channel
@@ -20,7 +20,7 @@ after-brace/0: memory-should-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: channel
 run/0: instruction channel/0
-run/0: run {name: "
+run/0: run/42 {name: "
     1:address:channel <- init-channel 3:literal/capacity
     1:address:channel <- write 1:address:channel, 34:literal
     2:integer, 1:address:channel <- read 1:address:channel
@@ -45,17 +45,17 @@ after-brace/0: init-channel ...
 after-brace/0: write ...
 after-brace/0: read ...
 run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- init-channel {name: "3", value: 3, type: 0, properties: ["3": "literal", "capacity": ]}
+run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- init-channel/108 {name: "3", value: 3, type: 0, properties: ["3": "literal", "capacity": ]}
 run/0: instruction init-channel/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1000
 run/0: instruction init-channel/1
-run/0: {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]} <- new {name: "channel", value: 10, type: 0, properties: ["channel": "type"]}
+run/0: {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]} <- new/41 {name: "channel", value: 10, type: 0, properties: ["channel": "type"]}
 mem/0: new alloc: 1031
 mem/0: storing 1031 in location 1002
 run/0: instruction init-channel/2
-run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer"]} <- get-address {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
+run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer"]} <- get-address/24 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1002 is 1031
 run/0: ingredient 1 is first-full
@@ -63,12 +63,12 @@ run/0: address to copy is 1031
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1003
 run/0: instruction init-channel/3
-run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: location 1003 is 1031
 mem/0: storing 0 in location 1031
 run/0: instruction init-channel/4
-run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer"]} <- get-address {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer"]} <- get-address/24 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1002 is 1031
 run/0: ingredient 1 is first-free
@@ -76,23 +76,23 @@ run/0: address to copy is 1032
 run/0: product 0 is 1032
 mem/0: storing 1032 in location 1004
 run/0: instruction init-channel/5
-run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: location 1004 is 1032
 mem/0: storing 0 in location 1032
 run/0: instruction init-channel/6
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- next-ingredient 
+run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- next-ingredient/29 
 run/0: product 0 is 3
 mem/0: storing 3 in location 1005
 run/0: instruction init-channel/7
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- add {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- add/2 {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is capacity
 mem/0: location 1005 is 3
 run/0: ingredient 1 is 1
 run/0: product 0 is 4
 mem/0: storing 4 in location 1005
 run/0: instruction init-channel/8
-run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location"]} <- get-address {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
+run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location"]} <- get-address/24 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1002 is 1031
 run/0: ingredient 1 is data
@@ -100,45 +100,45 @@ run/0: address to copy is 1033
 run/0: product 0 is 1033
 mem/0: storing 1033 in location 1006
 run/0: instruction init-channel/9
-run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location", "deref": ]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
+run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location", "deref": ]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
 mem/0: location 1005 is 4
 mem/0: array size is 4
 mem/0: new alloc: 1034
 mem/0: location 1006 is 1033
 mem/0: storing 1034 in location 1033
 run/0: instruction init-channel/10
-run/0: reply {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]}
+run/0: reply/32 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]}
 mem/0: location 1002 is 1031
 run/0: result 0 is 1031
 mem/0: storing 1031 in location 1
 run/0: instruction run1001/1
-run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- write {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}, {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- write/109 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}, {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 mem/0: location 1 is 1031
 run/0: instruction write/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1039
 run/0: instruction write/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1041
 run/0: instruction write/2
-run/0: {name: "val", value: 2, type: 1, properties: ["val": "location"]} <- next-ingredient 
+run/0: {name: "val", value: 2, type: 1, properties: ["val": "location"]} <- next-ingredient/29 
 run/0: product 0 is 34
 mem/0: storing 34 in location 1042
 run/0: instruction write/4
-run/0: {name: "full", value: 3, type: 3, properties: ["full": "boolean"]} <- channel-full? {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
+run/0: {name: "full", value: 3, type: 3, properties: ["full": "boolean"]} <- channel-full?/110 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
 mem/0: location 1041 is 1031
 run/0: instruction channel-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1070
 run/0: instruction channel-full?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1072
 run/0: instruction channel-full?/2
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1072 is 1031
 run/0: ingredient 1 is first-free
@@ -148,25 +148,25 @@ mem/0: location 1032 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1073
 run/0: instruction channel-full?/3
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- add {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- add/2 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is tmp
 mem/0: location 1073 is 0
 run/0: ingredient 1 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1073
 run/0: instruction channel-full?/5
-run/0: {name: "len", value: 3, type: 1, properties: ["len": "integer"]} <- channel-capacity {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
+run/0: {name: "len", value: 3, type: 1, properties: ["len": "integer"]} <- channel-capacity/113 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
 mem/0: location 1072 is 1031
 run/0: instruction channel-capacity/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1101
 run/0: instruction channel-capacity/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1103
 run/0: instruction channel-capacity/2
-run/0: {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
+run/0: {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1103 is 1031
 run/0: ingredient 1 is data
@@ -176,16 +176,16 @@ mem/0: location 1033 is 1034
 run/0: product 0 is 1034
 mem/0: storing 1034 in location 1104
 run/0: instruction channel-capacity/3
-run/0: {name: "result", value: 3, type: 1, properties: ["result": "integer"]} <- length {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location", "deref": ]}
+run/0: {name: "result", value: 3, type: 1, properties: ["result": "integer"]} <- length/27 {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location", "deref": ]}
 mem/0: location 1104 is 1034
 mem/0: storing 4 in location 1105
 run/0: instruction channel-capacity/4
-run/0: reply {name: "result", value: 3, type: 1, properties: ["result": "integer"]}
+run/0: reply/32 {name: "result", value: 3, type: 1, properties: ["result": "integer"]}
 mem/0: location 1105 is 4
 run/0: result 0 is 4
 mem/0: storing 4 in location 1074
 run/0: instruction channel-full?/6
-run/0: {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "len", value: 3, type: 1, properties: ["len": "integer"]}
+run/0: {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "len", value: 3, type: 1, properties: ["len": "integer"]}
 run/0: ingredient 0 is tmp
 mem/0: location 1073 is 1
 run/0: ingredient 1 is len
@@ -193,13 +193,13 @@ mem/0: location 1074 is 4
 run/0: product 0 is 0
 mem/0: storing 0 in location 1075
 run/0: instruction channel-full?/7
-run/0: break-unless {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1075 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 9
 run/0: instruction channel-full?/10
-run/0: {name: "full", value: 5, type: 1, properties: ["full": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
+run/0: {name: "full", value: 5, type: 1, properties: ["full": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1072 is 1031
 run/0: ingredient 1 is first-full
@@ -209,7 +209,7 @@ mem/0: location 1031 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1076
 run/0: instruction channel-full?/11
-run/0: {name: "result", value: 6, type: 3, properties: ["result": "boolean"]} <- equal {name: "full", value: 5, type: 1, properties: ["full": "integer"]}, {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}
+run/0: {name: "result", value: 6, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 5, type: 1, properties: ["full": "integer"]}, {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}
 run/0: ingredient 0 is full
 mem/0: location 1076 is 0
 run/0: ingredient 1 is tmp
@@ -217,18 +217,18 @@ mem/0: location 1073 is 1
 run/0: product 0 is 0
 mem/0: storing 0 in location 1077
 run/0: instruction channel-full?/12
-run/0: reply {name: "result", value: 6, type: 3, properties: ["result": "boolean"]}
+run/0: reply/32 {name: "result", value: 6, type: 3, properties: ["result": "boolean"]}
 mem/0: location 1077 is 0
 run/0: result 0 is 0
 mem/0: storing 0 in location 1043
 run/0: instruction write/5
-run/0: break-unless {name: "full", value: 3, type: 3, properties: ["full": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "full", value: 3, type: 3, properties: ["full": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
 mem/0: location 1043 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 8
 run/0: instruction write/9
-run/0: {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
+run/0: {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1041 is 1031
 run/0: ingredient 1 is data
@@ -238,7 +238,7 @@ mem/0: location 1033 is 1034
 run/0: product 0 is 1034
 mem/0: storing 1034 in location 1045
 run/0: instruction write/10
-run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer"]} <- get-address {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer"]} <- get-address/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1041 is 1031
 run/0: ingredient 1 is first-free
@@ -246,7 +246,7 @@ run/0: address to copy is 1032
 run/0: product 0 is 1032
 mem/0: storing 1032 in location 1046
 run/0: instruction write/11
-run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location"]} <- index-address {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}, {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}
+run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location"]} <- index-address/26 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}, {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}
 run/0: ingredient 0 is circular-buffer
 mem/0: location 1045 is 1034
 run/0: ingredient 1 is {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}
@@ -256,13 +256,13 @@ run/0: address to copy is 1035
 run/0: product 0 is 1035
 mem/0: storing 1035 in location 1047
 run/0: instruction write/12
-run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location", "deref": ]} <- copy {name: "val", value: 2, type: 1, properties: ["val": "location"]}
+run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location", "deref": ]} <- copy/1 {name: "val", value: 2, type: 1, properties: ["val": "location"]}
 run/0: ingredient 0 is val
 mem/0: location 1042 is 34
 mem/0: location 1047 is 1035
 mem/0: storing 34 in location 1035
 run/0: instruction write/13
-run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- add {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- add/2 {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is free
 mem/0: location 1046 is 1032
 mem/0: location 1032 is 0
@@ -271,11 +271,11 @@ run/0: product 0 is 1
 mem/0: location 1046 is 1032
 mem/0: storing 1 in location 1032
 run/0: instruction write/15
-run/0: {name: "len", value: 8, type: 1, properties: ["len": "integer"]} <- length {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
+run/0: {name: "len", value: 8, type: 1, properties: ["len": "integer"]} <- length/27 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
 mem/0: location 1045 is 1034
 mem/0: storing 4 in location 1048
 run/0: instruction write/16
-run/0: {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "len", value: 8, type: 1, properties: ["len": "integer"]}
+run/0: {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "len", value: 8, type: 1, properties: ["len": "integer"]}
 run/0: ingredient 0 is free
 mem/0: location 1046 is 1032
 mem/0: location 1032 is 1
@@ -284,40 +284,40 @@ mem/0: location 1048 is 4
 run/0: product 0 is 0
 mem/0: storing 0 in location 1049
 run/0: instruction write/17
-run/0: break-unless {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1049 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 19
 run/0: instruction write/20
-run/0: reply {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "same-as-ingredient": "0"]}
+run/0: reply/32 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "same-as-ingredient": "0"]}
 mem/0: location 1041 is 1031
 run/0: result 0 is 1031
 mem/0: storing 1031 in location 1
 run/0: instruction run1001/2
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]}, {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- read {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]}, {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- read/111 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}
 mem/0: location 1 is 1031
 run/0: instruction read/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1132
 run/0: instruction read/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1134
 run/0: instruction read/3
-run/0: {name: "empty", value: 2, type: 3, properties: ["empty": "boolean"]} <- channel-empty? {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
+run/0: {name: "empty", value: 2, type: 3, properties: ["empty": "boolean"]} <- channel-empty?/112 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
 mem/0: location 1134 is 1031
 run/0: instruction channel-empty?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1163
 run/0: instruction channel-empty?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1165
 run/0: instruction channel-empty?/2
-run/0: {name: "full", value: 2, type: 1, properties: ["full": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
+run/0: {name: "full", value: 2, type: 1, properties: ["full": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1165 is 1031
 run/0: ingredient 1 is first-full
@@ -327,7 +327,7 @@ mem/0: location 1031 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1166
 run/0: instruction channel-empty?/3
-run/0: {name: "free", value: 3, type: 1, properties: ["free": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "free", value: 3, type: 1, properties: ["free": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1165 is 1031
 run/0: ingredient 1 is first-free
@@ -337,7 +337,7 @@ mem/0: location 1032 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1167
 run/0: instruction channel-empty?/4
-run/0: {name: "result", value: 4, type: 3, properties: ["result": "boolean"]} <- equal {name: "full", value: 2, type: 1, properties: ["full": "integer"]}, {name: "free", value: 3, type: 1, properties: ["free": "integer"]}
+run/0: {name: "result", value: 4, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 2, type: 1, properties: ["full": "integer"]}, {name: "free", value: 3, type: 1, properties: ["free": "integer"]}
 run/0: ingredient 0 is full
 mem/0: location 1166 is 0
 run/0: ingredient 1 is free
@@ -345,18 +345,18 @@ mem/0: location 1167 is 1
 run/0: product 0 is 0
 mem/0: storing 0 in location 1168
 run/0: instruction channel-empty?/5
-run/0: reply {name: "result", value: 4, type: 3, properties: ["result": "boolean"]}
+run/0: reply/32 {name: "result", value: 4, type: 3, properties: ["result": "boolean"]}
 mem/0: location 1168 is 0
 run/0: result 0 is 0
 mem/0: storing 0 in location 1135
 run/0: instruction read/4
-run/0: break-unless {name: "empty", value: 2, type: 3, properties: ["empty": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "empty", value: 2, type: 3, properties: ["empty": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
 mem/0: location 1135 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 7
 run/0: instruction read/8
-run/0: {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer"]} <- get-address {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
+run/0: {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer"]} <- get-address/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1134 is 1031
 run/0: ingredient 1 is first-full
@@ -364,7 +364,7 @@ run/0: address to copy is 1031
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1137
 run/0: instruction read/9
-run/0: {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
+run/0: {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1134 is 1031
 run/0: ingredient 1 is data
@@ -374,7 +374,7 @@ mem/0: location 1033 is 1034
 run/0: product 0 is 1034
 mem/0: storing 1034 in location 1138
 run/0: instruction read/10
-run/0: {name: "result", value: 6, type: 1, properties: ["result": "location"]} <- index {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}, {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}
+run/0: {name: "result", value: 6, type: 1, properties: ["result": "location"]} <- index/25 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}, {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}
 run/0: ingredient 0 is {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
 mem/0: location 1138 is 1034
 run/0: ingredient 1 is {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}
@@ -386,7 +386,7 @@ mem/0: location 1035 is 34
 run/0: product 0 is 34
 mem/0: storing 34 in location 1139
 run/0: instruction read/11
-run/0: {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- add {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- add/2 {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is full
 mem/0: location 1137 is 1031
 mem/0: location 1031 is 0
@@ -395,11 +395,11 @@ run/0: product 0 is 1
 mem/0: location 1137 is 1031
 mem/0: storing 1 in location 1031
 run/0: instruction read/13
-run/0: {name: "len", value: 7, type: 1, properties: ["len": "integer"]} <- length {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
+run/0: {name: "len", value: 7, type: 1, properties: ["len": "integer"]} <- length/27 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
 mem/0: location 1138 is 1034
 mem/0: storing 4 in location 1140
 run/0: instruction read/14
-run/0: {name: "at-end?", value: 8, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}, {name: "len", value: 7, type: 1, properties: ["len": "integer"]}
+run/0: {name: "at-end?", value: 8, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}, {name: "len", value: 7, type: 1, properties: ["len": "integer"]}
 run/0: ingredient 0 is full
 mem/0: location 1137 is 1031
 mem/0: location 1031 is 1
@@ -408,13 +408,13 @@ mem/0: location 1140 is 4
 run/0: product 0 is 0
 mem/0: storing 0 in location 1141
 run/0: instruction read/15
-run/0: break-unless {name: "at-end?", value: 8, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "at-end?", value: 8, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1141 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 17
 run/0: instruction read/18
-run/0: reply {name: "result", value: 6, type: 1, properties: ["result": "location"]}, {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "same-as-ingredient": "0"]}
+run/0: reply/32 {name: "result", value: 6, type: 1, properties: ["result": "location"]}, {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "same-as-ingredient": "0"]}
 mem/0: location 1139 is 34
 mem/0: location 1134 is 1031
 run/0: result 0 is 34
@@ -422,7 +422,7 @@ mem/0: storing 34 in location 2
 run/0: result 1 is 1031
 mem/0: storing 1031 in location 1
 run/0: instruction channel/1
-run/0: memory-should-contain {name: "
+run/0: memory-should-contain/43 {name: "
     2 <- 34
   ", value: 0, type: 0, properties: ["
     2 <- 34
diff --git a/cpp/.traces/channel-initialization b/cpp/.traces/channel-initialization
index 9d82ca12..256d270c 100644
--- a/cpp/.traces/channel-initialization
+++ b/cpp/.traces/channel-initialization
@@ -22,7 +22,7 @@ after-brace/0: memory-should-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: channel-initialization
 run/0: instruction channel-initialization/0
-run/0: run {name: "
+run/0: run/42 {name: "
     1:address:channel <- init-channel 3:literal/capacity
     2:integer <- get 1:address:channel/deref, first-full:offset
     3:integer <- get 1:address:channel/deref, first-free:offset
@@ -49,17 +49,17 @@ after-brace/0: init-channel ...
 after-brace/0: get ...
 after-brace/0: get ...
 run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- init-channel {name: "3", value: 3, type: 0, properties: ["3": "literal", "capacity": ]}
+run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- init-channel/108 {name: "3", value: 3, type: 0, properties: ["3": "literal", "capacity": ]}
 run/0: instruction init-channel/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1000
 run/0: instruction init-channel/1
-run/0: {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]} <- new {name: "channel", value: 10, type: 0, properties: ["channel": "type"]}
+run/0: {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]} <- new/41 {name: "channel", value: 10, type: 0, properties: ["channel": "type"]}
 mem/0: new alloc: 1031
 mem/0: storing 1031 in location 1002
 run/0: instruction init-channel/2
-run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer"]} <- get-address {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
+run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer"]} <- get-address/24 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1002 is 1031
 run/0: ingredient 1 is first-full
@@ -67,12 +67,12 @@ run/0: address to copy is 1031
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1003
 run/0: instruction init-channel/3
-run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: location 1003 is 1031
 mem/0: storing 0 in location 1031
 run/0: instruction init-channel/4
-run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer"]} <- get-address {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer"]} <- get-address/24 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1002 is 1031
 run/0: ingredient 1 is first-free
@@ -80,23 +80,23 @@ run/0: address to copy is 1032
 run/0: product 0 is 1032
 mem/0: storing 1032 in location 1004
 run/0: instruction init-channel/5
-run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: location 1004 is 1032
 mem/0: storing 0 in location 1032
 run/0: instruction init-channel/6
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- next-ingredient 
+run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- next-ingredient/29 
 run/0: product 0 is 3
 mem/0: storing 3 in location 1005
 run/0: instruction init-channel/7
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- add {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- add/2 {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is capacity
 mem/0: location 1005 is 3
 run/0: ingredient 1 is 1
 run/0: product 0 is 4
 mem/0: storing 4 in location 1005
 run/0: instruction init-channel/8
-run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location"]} <- get-address {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
+run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location"]} <- get-address/24 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1002 is 1031
 run/0: ingredient 1 is data
@@ -104,19 +104,19 @@ run/0: address to copy is 1033
 run/0: product 0 is 1033
 mem/0: storing 1033 in location 1006
 run/0: instruction init-channel/9
-run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location", "deref": ]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
+run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location", "deref": ]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
 mem/0: location 1005 is 4
 mem/0: array size is 4
 mem/0: new alloc: 1034
 mem/0: location 1006 is 1033
 mem/0: storing 1034 in location 1033
 run/0: instruction init-channel/10
-run/0: reply {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]}
+run/0: reply/32 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]}
 mem/0: location 1002 is 1031
 run/0: result 0 is 1031
 mem/0: storing 1031 in location 1
 run/0: instruction run1001/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- get {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- get/23 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 1031
 run/0: ingredient 1 is first-full
@@ -126,7 +126,7 @@ mem/0: location 1031 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 2
 run/0: instruction run1001/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- get {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- get/23 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 1031
 run/0: ingredient 1 is first-free
@@ -136,7 +136,7 @@ mem/0: location 1032 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 3
 run/0: instruction channel-initialization/1
-run/0: memory-should-contain {name: "
+run/0: memory-should-contain/43 {name: "
     2 <- 0  # first-full
     3 <- 0  # first-free
   ", value: 0, type: 0, properties: ["
diff --git a/cpp/.traces/channel-new-empty-not-full b/cpp/.traces/channel-new-empty-not-full
index 41c382f6..91ff45d3 100644
--- a/cpp/.traces/channel-new-empty-not-full
+++ b/cpp/.traces/channel-new-empty-not-full
@@ -22,7 +22,7 @@ after-brace/0: memory-should-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: channel-new-empty-not-full
 run/0: instruction channel-new-empty-not-full/0
-run/0: run {name: "
+run/0: run/42 {name: "
     1:address:channel <- init-channel 3:literal/capacity
     2:integer <- channel-empty? 1:address:channel
     3:integer <- channel-full? 1:address:channel
@@ -45,17 +45,17 @@ after-brace/0: init-channel ...
 after-brace/0: channel-empty? ...
 after-brace/0: channel-full? ...
 run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- init-channel {name: "3", value: 3, type: 0, properties: ["3": "literal", "capacity": ]}
+run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- init-channel/108 {name: "3", value: 3, type: 0, properties: ["3": "literal", "capacity": ]}
 run/0: instruction init-channel/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1000
 run/0: instruction init-channel/1
-run/0: {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]} <- new {name: "channel", value: 10, type: 0, properties: ["channel": "type"]}
+run/0: {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]} <- new/41 {name: "channel", value: 10, type: 0, properties: ["channel": "type"]}
 mem/0: new alloc: 1031
 mem/0: storing 1031 in location 1002
 run/0: instruction init-channel/2
-run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer"]} <- get-address {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
+run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer"]} <- get-address/24 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1002 is 1031
 run/0: ingredient 1 is first-full
@@ -63,12 +63,12 @@ run/0: address to copy is 1031
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1003
 run/0: instruction init-channel/3
-run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: location 1003 is 1031
 mem/0: storing 0 in location 1031
 run/0: instruction init-channel/4
-run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer"]} <- get-address {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer"]} <- get-address/24 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1002 is 1031
 run/0: ingredient 1 is first-free
@@ -76,23 +76,23 @@ run/0: address to copy is 1032
 run/0: product 0 is 1032
 mem/0: storing 1032 in location 1004
 run/0: instruction init-channel/5
-run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: location 1004 is 1032
 mem/0: storing 0 in location 1032
 run/0: instruction init-channel/6
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- next-ingredient 
+run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- next-ingredient/29 
 run/0: product 0 is 3
 mem/0: storing 3 in location 1005
 run/0: instruction init-channel/7
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- add {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- add/2 {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is capacity
 mem/0: location 1005 is 3
 run/0: ingredient 1 is 1
 run/0: product 0 is 4
 mem/0: storing 4 in location 1005
 run/0: instruction init-channel/8
-run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location"]} <- get-address {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
+run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location"]} <- get-address/24 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1002 is 1031
 run/0: ingredient 1 is data
@@ -100,30 +100,30 @@ run/0: address to copy is 1033
 run/0: product 0 is 1033
 mem/0: storing 1033 in location 1006
 run/0: instruction init-channel/9
-run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location", "deref": ]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
+run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location", "deref": ]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
 mem/0: location 1005 is 4
 mem/0: array size is 4
 mem/0: new alloc: 1034
 mem/0: location 1006 is 1033
 mem/0: storing 1034 in location 1033
 run/0: instruction init-channel/10
-run/0: reply {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]}
+run/0: reply/32 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]}
 mem/0: location 1002 is 1031
 run/0: result 0 is 1031
 mem/0: storing 1031 in location 1
 run/0: instruction run1001/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- channel-empty? {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- channel-empty?/112 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}
 mem/0: location 1 is 1031
 run/0: instruction channel-empty?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1039
 run/0: instruction channel-empty?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1041
 run/0: instruction channel-empty?/2
-run/0: {name: "full", value: 2, type: 1, properties: ["full": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
+run/0: {name: "full", value: 2, type: 1, properties: ["full": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1041 is 1031
 run/0: ingredient 1 is first-full
@@ -133,7 +133,7 @@ mem/0: location 1031 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1042
 run/0: instruction channel-empty?/3
-run/0: {name: "free", value: 3, type: 1, properties: ["free": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "free", value: 3, type: 1, properties: ["free": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1041 is 1031
 run/0: ingredient 1 is first-free
@@ -143,7 +143,7 @@ mem/0: location 1032 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1043
 run/0: instruction channel-empty?/4
-run/0: {name: "result", value: 4, type: 3, properties: ["result": "boolean"]} <- equal {name: "full", value: 2, type: 1, properties: ["full": "integer"]}, {name: "free", value: 3, type: 1, properties: ["free": "integer"]}
+run/0: {name: "result", value: 4, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 2, type: 1, properties: ["full": "integer"]}, {name: "free", value: 3, type: 1, properties: ["free": "integer"]}
 run/0: ingredient 0 is full
 mem/0: location 1042 is 0
 run/0: ingredient 1 is free
@@ -151,23 +151,23 @@ mem/0: location 1043 is 0
 run/0: product 0 is 1
 mem/0: storing 1 in location 1044
 run/0: instruction channel-empty?/5
-run/0: reply {name: "result", value: 4, type: 3, properties: ["result": "boolean"]}
+run/0: reply/32 {name: "result", value: 4, type: 3, properties: ["result": "boolean"]}
 mem/0: location 1044 is 1
 run/0: result 0 is 1
 mem/0: storing 1 in location 2
 run/0: instruction run1001/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- channel-full? {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- channel-full?/110 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}
 mem/0: location 1 is 1031
 run/0: instruction channel-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1070
 run/0: instruction channel-full?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1072
 run/0: instruction channel-full?/2
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1072 is 1031
 run/0: ingredient 1 is first-free
@@ -177,25 +177,25 @@ mem/0: location 1032 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1073
 run/0: instruction channel-full?/3
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- add {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- add/2 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is tmp
 mem/0: location 1073 is 0
 run/0: ingredient 1 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1073
 run/0: instruction channel-full?/5
-run/0: {name: "len", value: 3, type: 1, properties: ["len": "integer"]} <- channel-capacity {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
+run/0: {name: "len", value: 3, type: 1, properties: ["len": "integer"]} <- channel-capacity/113 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
 mem/0: location 1072 is 1031
 run/0: instruction channel-capacity/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1101
 run/0: instruction channel-capacity/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1103
 run/0: instruction channel-capacity/2
-run/0: {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
+run/0: {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1103 is 1031
 run/0: ingredient 1 is data
@@ -205,16 +205,16 @@ mem/0: location 1033 is 1034
 run/0: product 0 is 1034
 mem/0: storing 1034 in location 1104
 run/0: instruction channel-capacity/3
-run/0: {name: "result", value: 3, type: 1, properties: ["result": "integer"]} <- length {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location", "deref": ]}
+run/0: {name: "result", value: 3, type: 1, properties: ["result": "integer"]} <- length/27 {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location", "deref": ]}
 mem/0: location 1104 is 1034
 mem/0: storing 4 in location 1105
 run/0: instruction channel-capacity/4
-run/0: reply {name: "result", value: 3, type: 1, properties: ["result": "integer"]}
+run/0: reply/32 {name: "result", value: 3, type: 1, properties: ["result": "integer"]}
 mem/0: location 1105 is 4
 run/0: result 0 is 4
 mem/0: storing 4 in location 1074
 run/0: instruction channel-full?/6
-run/0: {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "len", value: 3, type: 1, properties: ["len": "integer"]}
+run/0: {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "len", value: 3, type: 1, properties: ["len": "integer"]}
 run/0: ingredient 0 is tmp
 mem/0: location 1073 is 1
 run/0: ingredient 1 is len
@@ -222,13 +222,13 @@ mem/0: location 1074 is 4
 run/0: product 0 is 0
 mem/0: storing 0 in location 1075
 run/0: instruction channel-full?/7
-run/0: break-unless {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1075 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 9
 run/0: instruction channel-full?/10
-run/0: {name: "full", value: 5, type: 1, properties: ["full": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
+run/0: {name: "full", value: 5, type: 1, properties: ["full": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1072 is 1031
 run/0: ingredient 1 is first-full
@@ -238,7 +238,7 @@ mem/0: location 1031 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1076
 run/0: instruction channel-full?/11
-run/0: {name: "result", value: 6, type: 3, properties: ["result": "boolean"]} <- equal {name: "full", value: 5, type: 1, properties: ["full": "integer"]}, {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}
+run/0: {name: "result", value: 6, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 5, type: 1, properties: ["full": "integer"]}, {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}
 run/0: ingredient 0 is full
 mem/0: location 1076 is 0
 run/0: ingredient 1 is tmp
@@ -246,12 +246,12 @@ mem/0: location 1073 is 1
 run/0: product 0 is 0
 mem/0: storing 0 in location 1077
 run/0: instruction channel-full?/12
-run/0: reply {name: "result", value: 6, type: 3, properties: ["result": "boolean"]}
+run/0: reply/32 {name: "result", value: 6, type: 3, properties: ["result": "boolean"]}
 mem/0: location 1077 is 0
 run/0: result 0 is 0
 mem/0: storing 0 in location 3
 run/0: instruction channel-new-empty-not-full/1
-run/0: memory-should-contain {name: "
+run/0: memory-should-contain/43 {name: "
     2 <- 1  # empty?
     3 <- 0  # full?
   ", value: 0, type: 0, properties: ["
diff --git a/cpp/.traces/channel-read-increments-full b/cpp/.traces/channel-read-increments-full
index e3000312..45a2a88a 100644
--- a/cpp/.traces/channel-read-increments-full
+++ b/cpp/.traces/channel-read-increments-full
@@ -26,7 +26,7 @@ after-brace/0: memory-should-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: channel-read-increments-full
 run/0: instruction channel-read-increments-full/0
-run/0: run {name: "
+run/0: run/42 {name: "
     1:address:channel <- init-channel 3:literal/capacity
     1:address:channel <- write 1:address:channel, 34:literal
     _, 1:address:channel <- read 1:address:channel
@@ -67,17 +67,17 @@ after-brace/0: read ...
 after-brace/0: get ...
 after-brace/0: get ...
 run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- init-channel {name: "3", value: 3, type: 0, properties: ["3": "literal", "capacity": ]}
+run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- init-channel/108 {name: "3", value: 3, type: 0, properties: ["3": "literal", "capacity": ]}
 run/0: instruction init-channel/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1000
 run/0: instruction init-channel/1
-run/0: {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]} <- new {name: "channel", value: 10, type: 0, properties: ["channel": "type"]}
+run/0: {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]} <- new/41 {name: "channel", value: 10, type: 0, properties: ["channel": "type"]}
 mem/0: new alloc: 1031
 mem/0: storing 1031 in location 1002
 run/0: instruction init-channel/2
-run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer"]} <- get-address {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
+run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer"]} <- get-address/24 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1002 is 1031
 run/0: ingredient 1 is first-full
@@ -85,12 +85,12 @@ run/0: address to copy is 1031
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1003
 run/0: instruction init-channel/3
-run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: location 1003 is 1031
 mem/0: storing 0 in location 1031
 run/0: instruction init-channel/4
-run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer"]} <- get-address {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer"]} <- get-address/24 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1002 is 1031
 run/0: ingredient 1 is first-free
@@ -98,23 +98,23 @@ run/0: address to copy is 1032
 run/0: product 0 is 1032
 mem/0: storing 1032 in location 1004
 run/0: instruction init-channel/5
-run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: location 1004 is 1032
 mem/0: storing 0 in location 1032
 run/0: instruction init-channel/6
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- next-ingredient 
+run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- next-ingredient/29 
 run/0: product 0 is 3
 mem/0: storing 3 in location 1005
 run/0: instruction init-channel/7
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- add {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- add/2 {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is capacity
 mem/0: location 1005 is 3
 run/0: ingredient 1 is 1
 run/0: product 0 is 4
 mem/0: storing 4 in location 1005
 run/0: instruction init-channel/8
-run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location"]} <- get-address {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
+run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location"]} <- get-address/24 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1002 is 1031
 run/0: ingredient 1 is data
@@ -122,45 +122,45 @@ run/0: address to copy is 1033
 run/0: product 0 is 1033
 mem/0: storing 1033 in location 1006
 run/0: instruction init-channel/9
-run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location", "deref": ]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
+run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location", "deref": ]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
 mem/0: location 1005 is 4
 mem/0: array size is 4
 mem/0: new alloc: 1034
 mem/0: location 1006 is 1033
 mem/0: storing 1034 in location 1033
 run/0: instruction init-channel/10
-run/0: reply {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]}
+run/0: reply/32 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]}
 mem/0: location 1002 is 1031
 run/0: result 0 is 1031
 mem/0: storing 1031 in location 1
 run/0: instruction run1001/1
-run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- write {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}, {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- write/109 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}, {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 mem/0: location 1 is 1031
 run/0: instruction write/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1039
 run/0: instruction write/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1041
 run/0: instruction write/2
-run/0: {name: "val", value: 2, type: 1, properties: ["val": "location"]} <- next-ingredient 
+run/0: {name: "val", value: 2, type: 1, properties: ["val": "location"]} <- next-ingredient/29 
 run/0: product 0 is 34
 mem/0: storing 34 in location 1042
 run/0: instruction write/4
-run/0: {name: "full", value: 3, type: 3, properties: ["full": "boolean"]} <- channel-full? {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
+run/0: {name: "full", value: 3, type: 3, properties: ["full": "boolean"]} <- channel-full?/110 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
 mem/0: location 1041 is 1031
 run/0: instruction channel-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1070
 run/0: instruction channel-full?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1072
 run/0: instruction channel-full?/2
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1072 is 1031
 run/0: ingredient 1 is first-free
@@ -170,25 +170,25 @@ mem/0: location 1032 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1073
 run/0: instruction channel-full?/3
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- add {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- add/2 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is tmp
 mem/0: location 1073 is 0
 run/0: ingredient 1 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1073
 run/0: instruction channel-full?/5
-run/0: {name: "len", value: 3, type: 1, properties: ["len": "integer"]} <- channel-capacity {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
+run/0: {name: "len", value: 3, type: 1, properties: ["len": "integer"]} <- channel-capacity/113 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
 mem/0: location 1072 is 1031
 run/0: instruction channel-capacity/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1101
 run/0: instruction channel-capacity/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1103
 run/0: instruction channel-capacity/2
-run/0: {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
+run/0: {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1103 is 1031
 run/0: ingredient 1 is data
@@ -198,16 +198,16 @@ mem/0: location 1033 is 1034
 run/0: product 0 is 1034
 mem/0: storing 1034 in location 1104
 run/0: instruction channel-capacity/3
-run/0: {name: "result", value: 3, type: 1, properties: ["result": "integer"]} <- length {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location", "deref": ]}
+run/0: {name: "result", value: 3, type: 1, properties: ["result": "integer"]} <- length/27 {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location", "deref": ]}
 mem/0: location 1104 is 1034
 mem/0: storing 4 in location 1105
 run/0: instruction channel-capacity/4
-run/0: reply {name: "result", value: 3, type: 1, properties: ["result": "integer"]}
+run/0: reply/32 {name: "result", value: 3, type: 1, properties: ["result": "integer"]}
 mem/0: location 1105 is 4
 run/0: result 0 is 4
 mem/0: storing 4 in location 1074
 run/0: instruction channel-full?/6
-run/0: {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "len", value: 3, type: 1, properties: ["len": "integer"]}
+run/0: {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "len", value: 3, type: 1, properties: ["len": "integer"]}
 run/0: ingredient 0 is tmp
 mem/0: location 1073 is 1
 run/0: ingredient 1 is len
@@ -215,13 +215,13 @@ mem/0: location 1074 is 4
 run/0: product 0 is 0
 mem/0: storing 0 in location 1075
 run/0: instruction channel-full?/7
-run/0: break-unless {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1075 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 9
 run/0: instruction channel-full?/10
-run/0: {name: "full", value: 5, type: 1, properties: ["full": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
+run/0: {name: "full", value: 5, type: 1, properties: ["full": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1072 is 1031
 run/0: ingredient 1 is first-full
@@ -231,7 +231,7 @@ mem/0: location 1031 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1076
 run/0: instruction channel-full?/11
-run/0: {name: "result", value: 6, type: 3, properties: ["result": "boolean"]} <- equal {name: "full", value: 5, type: 1, properties: ["full": "integer"]}, {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}
+run/0: {name: "result", value: 6, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 5, type: 1, properties: ["full": "integer"]}, {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}
 run/0: ingredient 0 is full
 mem/0: location 1076 is 0
 run/0: ingredient 1 is tmp
@@ -239,18 +239,18 @@ mem/0: location 1073 is 1
 run/0: product 0 is 0
 mem/0: storing 0 in location 1077
 run/0: instruction channel-full?/12
-run/0: reply {name: "result", value: 6, type: 3, properties: ["result": "boolean"]}
+run/0: reply/32 {name: "result", value: 6, type: 3, properties: ["result": "boolean"]}
 mem/0: location 1077 is 0
 run/0: result 0 is 0
 mem/0: storing 0 in location 1043
 run/0: instruction write/5
-run/0: break-unless {name: "full", value: 3, type: 3, properties: ["full": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "full", value: 3, type: 3, properties: ["full": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
 mem/0: location 1043 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 8
 run/0: instruction write/9
-run/0: {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
+run/0: {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1041 is 1031
 run/0: ingredient 1 is data
@@ -260,7 +260,7 @@ mem/0: location 1033 is 1034
 run/0: product 0 is 1034
 mem/0: storing 1034 in location 1045
 run/0: instruction write/10
-run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer"]} <- get-address {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer"]} <- get-address/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1041 is 1031
 run/0: ingredient 1 is first-free
@@ -268,7 +268,7 @@ run/0: address to copy is 1032
 run/0: product 0 is 1032
 mem/0: storing 1032 in location 1046
 run/0: instruction write/11
-run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location"]} <- index-address {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}, {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}
+run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location"]} <- index-address/26 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}, {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}
 run/0: ingredient 0 is circular-buffer
 mem/0: location 1045 is 1034
 run/0: ingredient 1 is {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}
@@ -278,13 +278,13 @@ run/0: address to copy is 1035
 run/0: product 0 is 1035
 mem/0: storing 1035 in location 1047
 run/0: instruction write/12
-run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location", "deref": ]} <- copy {name: "val", value: 2, type: 1, properties: ["val": "location"]}
+run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location", "deref": ]} <- copy/1 {name: "val", value: 2, type: 1, properties: ["val": "location"]}
 run/0: ingredient 0 is val
 mem/0: location 1042 is 34
 mem/0: location 1047 is 1035
 mem/0: storing 34 in location 1035
 run/0: instruction write/13
-run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- add {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- add/2 {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is free
 mem/0: location 1046 is 1032
 mem/0: location 1032 is 0
@@ -293,11 +293,11 @@ run/0: product 0 is 1
 mem/0: location 1046 is 1032
 mem/0: storing 1 in location 1032
 run/0: instruction write/15
-run/0: {name: "len", value: 8, type: 1, properties: ["len": "integer"]} <- length {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
+run/0: {name: "len", value: 8, type: 1, properties: ["len": "integer"]} <- length/27 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
 mem/0: location 1045 is 1034
 mem/0: storing 4 in location 1048
 run/0: instruction write/16
-run/0: {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "len", value: 8, type: 1, properties: ["len": "integer"]}
+run/0: {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "len", value: 8, type: 1, properties: ["len": "integer"]}
 run/0: ingredient 0 is free
 mem/0: location 1046 is 1032
 mem/0: location 1032 is 1
@@ -306,40 +306,40 @@ mem/0: location 1048 is 4
 run/0: product 0 is 0
 mem/0: storing 0 in location 1049
 run/0: instruction write/17
-run/0: break-unless {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1049 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 19
 run/0: instruction write/20
-run/0: reply {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "same-as-ingredient": "0"]}
+run/0: reply/32 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "same-as-ingredient": "0"]}
 mem/0: location 1041 is 1031
 run/0: result 0 is 1031
 mem/0: storing 1031 in location 1
 run/0: instruction run1001/2
-run/0: {name: "_", value: 0, type: 0, properties: ["_": "dummy"]}, {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- read {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}
+run/0: {name: "_", value: 0, type: 0, properties: ["_": "dummy"]}, {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- read/111 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}
 mem/0: location 1 is 1031
 run/0: instruction read/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1132
 run/0: instruction read/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1134
 run/0: instruction read/3
-run/0: {name: "empty", value: 2, type: 3, properties: ["empty": "boolean"]} <- channel-empty? {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
+run/0: {name: "empty", value: 2, type: 3, properties: ["empty": "boolean"]} <- channel-empty?/112 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
 mem/0: location 1134 is 1031
 run/0: instruction channel-empty?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1163
 run/0: instruction channel-empty?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1165
 run/0: instruction channel-empty?/2
-run/0: {name: "full", value: 2, type: 1, properties: ["full": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
+run/0: {name: "full", value: 2, type: 1, properties: ["full": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1165 is 1031
 run/0: ingredient 1 is first-full
@@ -349,7 +349,7 @@ mem/0: location 1031 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1166
 run/0: instruction channel-empty?/3
-run/0: {name: "free", value: 3, type: 1, properties: ["free": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "free", value: 3, type: 1, properties: ["free": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1165 is 1031
 run/0: ingredient 1 is first-free
@@ -359,7 +359,7 @@ mem/0: location 1032 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1167
 run/0: instruction channel-empty?/4
-run/0: {name: "result", value: 4, type: 3, properties: ["result": "boolean"]} <- equal {name: "full", value: 2, type: 1, properties: ["full": "integer"]}, {name: "free", value: 3, type: 1, properties: ["free": "integer"]}
+run/0: {name: "result", value: 4, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 2, type: 1, properties: ["full": "integer"]}, {name: "free", value: 3, type: 1, properties: ["free": "integer"]}
 run/0: ingredient 0 is full
 mem/0: location 1166 is 0
 run/0: ingredient 1 is free
@@ -367,18 +367,18 @@ mem/0: location 1167 is 1
 run/0: product 0 is 0
 mem/0: storing 0 in location 1168
 run/0: instruction channel-empty?/5
-run/0: reply {name: "result", value: 4, type: 3, properties: ["result": "boolean"]}
+run/0: reply/32 {name: "result", value: 4, type: 3, properties: ["result": "boolean"]}
 mem/0: location 1168 is 0
 run/0: result 0 is 0
 mem/0: storing 0 in location 1135
 run/0: instruction read/4
-run/0: break-unless {name: "empty", value: 2, type: 3, properties: ["empty": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "empty", value: 2, type: 3, properties: ["empty": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
 mem/0: location 1135 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 7
 run/0: instruction read/8
-run/0: {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer"]} <- get-address {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
+run/0: {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer"]} <- get-address/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1134 is 1031
 run/0: ingredient 1 is first-full
@@ -386,7 +386,7 @@ run/0: address to copy is 1031
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1137
 run/0: instruction read/9
-run/0: {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
+run/0: {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1134 is 1031
 run/0: ingredient 1 is data
@@ -396,7 +396,7 @@ mem/0: location 1033 is 1034
 run/0: product 0 is 1034
 mem/0: storing 1034 in location 1138
 run/0: instruction read/10
-run/0: {name: "result", value: 6, type: 1, properties: ["result": "location"]} <- index {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}, {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}
+run/0: {name: "result", value: 6, type: 1, properties: ["result": "location"]} <- index/25 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}, {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}
 run/0: ingredient 0 is {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
 mem/0: location 1138 is 1034
 run/0: ingredient 1 is {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}
@@ -408,7 +408,7 @@ mem/0: location 1035 is 34
 run/0: product 0 is 34
 mem/0: storing 34 in location 1139
 run/0: instruction read/11
-run/0: {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- add {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- add/2 {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is full
 mem/0: location 1137 is 1031
 mem/0: location 1031 is 0
@@ -417,11 +417,11 @@ run/0: product 0 is 1
 mem/0: location 1137 is 1031
 mem/0: storing 1 in location 1031
 run/0: instruction read/13
-run/0: {name: "len", value: 7, type: 1, properties: ["len": "integer"]} <- length {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
+run/0: {name: "len", value: 7, type: 1, properties: ["len": "integer"]} <- length/27 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
 mem/0: location 1138 is 1034
 mem/0: storing 4 in location 1140
 run/0: instruction read/14
-run/0: {name: "at-end?", value: 8, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}, {name: "len", value: 7, type: 1, properties: ["len": "integer"]}
+run/0: {name: "at-end?", value: 8, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}, {name: "len", value: 7, type: 1, properties: ["len": "integer"]}
 run/0: ingredient 0 is full
 mem/0: location 1137 is 1031
 mem/0: location 1031 is 1
@@ -430,20 +430,20 @@ mem/0: location 1140 is 4
 run/0: product 0 is 0
 mem/0: storing 0 in location 1141
 run/0: instruction read/15
-run/0: break-unless {name: "at-end?", value: 8, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "at-end?", value: 8, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1141 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 17
 run/0: instruction read/18
-run/0: reply {name: "result", value: 6, type: 1, properties: ["result": "location"]}, {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "same-as-ingredient": "0"]}
+run/0: reply/32 {name: "result", value: 6, type: 1, properties: ["result": "location"]}, {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "same-as-ingredient": "0"]}
 mem/0: location 1139 is 34
 mem/0: location 1134 is 1031
 run/0: result 0 is 34
 run/0: result 1 is 1031
 mem/0: storing 1031 in location 1
 run/0: instruction run1001/3
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- get {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- get/23 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 1031
 run/0: ingredient 1 is first-full
@@ -453,7 +453,7 @@ mem/0: location 1031 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 2
 run/0: instruction run1001/4
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- get {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- get/23 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 1031
 run/0: ingredient 1 is first-free
@@ -463,7 +463,7 @@ mem/0: location 1032 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 3
 run/0: instruction channel-read-increments-full/1
-run/0: memory-should-contain {name: "
+run/0: memory-should-contain/43 {name: "
     2 <- 1  # first-full
     3 <- 1  # first-free
   ", value: 0, type: 0, properties: ["
diff --git a/cpp/.traces/channel-read-not-full b/cpp/.traces/channel-read-not-full
index a2ccb3f6..69379ea9 100644
--- a/cpp/.traces/channel-read-not-full
+++ b/cpp/.traces/channel-read-not-full
@@ -26,7 +26,7 @@ after-brace/0: memory-should-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: channel-read-not-full
 run/0: instruction channel-read-not-full/0
-run/0: run {name: "
+run/0: run/42 {name: "
     1:address:channel <- init-channel 1:literal/capacity
     1:address:channel <- write 1:address:channel, 34:literal
     _, 1:address:channel <- read 1:address:channel
@@ -63,17 +63,17 @@ after-brace/0: read ...
 after-brace/0: channel-empty? ...
 after-brace/0: channel-full? ...
 run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- init-channel {name: "1", value: 1, type: 0, properties: ["1": "literal", "capacity": ]}
+run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- init-channel/108 {name: "1", value: 1, type: 0, properties: ["1": "literal", "capacity": ]}
 run/0: instruction init-channel/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1000
 run/0: instruction init-channel/1
-run/0: {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]} <- new {name: "channel", value: 10, type: 0, properties: ["channel": "type"]}
+run/0: {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]} <- new/41 {name: "channel", value: 10, type: 0, properties: ["channel": "type"]}
 mem/0: new alloc: 1031
 mem/0: storing 1031 in location 1002
 run/0: instruction init-channel/2
-run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer"]} <- get-address {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
+run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer"]} <- get-address/24 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1002 is 1031
 run/0: ingredient 1 is first-full
@@ -81,12 +81,12 @@ run/0: address to copy is 1031
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1003
 run/0: instruction init-channel/3
-run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: location 1003 is 1031
 mem/0: storing 0 in location 1031
 run/0: instruction init-channel/4
-run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer"]} <- get-address {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer"]} <- get-address/24 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1002 is 1031
 run/0: ingredient 1 is first-free
@@ -94,23 +94,23 @@ run/0: address to copy is 1032
 run/0: product 0 is 1032
 mem/0: storing 1032 in location 1004
 run/0: instruction init-channel/5
-run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: location 1004 is 1032
 mem/0: storing 0 in location 1032
 run/0: instruction init-channel/6
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- next-ingredient 
+run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- next-ingredient/29 
 run/0: product 0 is 1
 mem/0: storing 1 in location 1005
 run/0: instruction init-channel/7
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- add {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- add/2 {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is capacity
 mem/0: location 1005 is 1
 run/0: ingredient 1 is 1
 run/0: product 0 is 2
 mem/0: storing 2 in location 1005
 run/0: instruction init-channel/8
-run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location"]} <- get-address {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
+run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location"]} <- get-address/24 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1002 is 1031
 run/0: ingredient 1 is data
@@ -118,45 +118,45 @@ run/0: address to copy is 1033
 run/0: product 0 is 1033
 mem/0: storing 1033 in location 1006
 run/0: instruction init-channel/9
-run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location", "deref": ]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
+run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location", "deref": ]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
 mem/0: location 1005 is 2
 mem/0: array size is 2
 mem/0: new alloc: 1034
 mem/0: location 1006 is 1033
 mem/0: storing 1034 in location 1033
 run/0: instruction init-channel/10
-run/0: reply {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]}
+run/0: reply/32 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]}
 mem/0: location 1002 is 1031
 run/0: result 0 is 1031
 mem/0: storing 1031 in location 1
 run/0: instruction run1001/1
-run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- write {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}, {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- write/109 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}, {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 mem/0: location 1 is 1031
 run/0: instruction write/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1037
 run/0: instruction write/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1039
 run/0: instruction write/2
-run/0: {name: "val", value: 2, type: 1, properties: ["val": "location"]} <- next-ingredient 
+run/0: {name: "val", value: 2, type: 1, properties: ["val": "location"]} <- next-ingredient/29 
 run/0: product 0 is 34
 mem/0: storing 34 in location 1040
 run/0: instruction write/4
-run/0: {name: "full", value: 3, type: 3, properties: ["full": "boolean"]} <- channel-full? {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
+run/0: {name: "full", value: 3, type: 3, properties: ["full": "boolean"]} <- channel-full?/110 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
 mem/0: location 1039 is 1031
 run/0: instruction channel-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1068
 run/0: instruction channel-full?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1070
 run/0: instruction channel-full?/2
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1070 is 1031
 run/0: ingredient 1 is first-free
@@ -166,25 +166,25 @@ mem/0: location 1032 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1071
 run/0: instruction channel-full?/3
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- add {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- add/2 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is tmp
 mem/0: location 1071 is 0
 run/0: ingredient 1 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1071
 run/0: instruction channel-full?/5
-run/0: {name: "len", value: 3, type: 1, properties: ["len": "integer"]} <- channel-capacity {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
+run/0: {name: "len", value: 3, type: 1, properties: ["len": "integer"]} <- channel-capacity/113 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
 mem/0: location 1070 is 1031
 run/0: instruction channel-capacity/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1099
 run/0: instruction channel-capacity/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1101
 run/0: instruction channel-capacity/2
-run/0: {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
+run/0: {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1101 is 1031
 run/0: ingredient 1 is data
@@ -194,16 +194,16 @@ mem/0: location 1033 is 1034
 run/0: product 0 is 1034
 mem/0: storing 1034 in location 1102
 run/0: instruction channel-capacity/3
-run/0: {name: "result", value: 3, type: 1, properties: ["result": "integer"]} <- length {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location", "deref": ]}
+run/0: {name: "result", value: 3, type: 1, properties: ["result": "integer"]} <- length/27 {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location", "deref": ]}
 mem/0: location 1102 is 1034
 mem/0: storing 2 in location 1103
 run/0: instruction channel-capacity/4
-run/0: reply {name: "result", value: 3, type: 1, properties: ["result": "integer"]}
+run/0: reply/32 {name: "result", value: 3, type: 1, properties: ["result": "integer"]}
 mem/0: location 1103 is 2
 run/0: result 0 is 2
 mem/0: storing 2 in location 1072
 run/0: instruction channel-full?/6
-run/0: {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "len", value: 3, type: 1, properties: ["len": "integer"]}
+run/0: {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "len", value: 3, type: 1, properties: ["len": "integer"]}
 run/0: ingredient 0 is tmp
 mem/0: location 1071 is 1
 run/0: ingredient 1 is len
@@ -211,13 +211,13 @@ mem/0: location 1072 is 2
 run/0: product 0 is 0
 mem/0: storing 0 in location 1073
 run/0: instruction channel-full?/7
-run/0: break-unless {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1073 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 9
 run/0: instruction channel-full?/10
-run/0: {name: "full", value: 5, type: 1, properties: ["full": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
+run/0: {name: "full", value: 5, type: 1, properties: ["full": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1070 is 1031
 run/0: ingredient 1 is first-full
@@ -227,7 +227,7 @@ mem/0: location 1031 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1074
 run/0: instruction channel-full?/11
-run/0: {name: "result", value: 6, type: 3, properties: ["result": "boolean"]} <- equal {name: "full", value: 5, type: 1, properties: ["full": "integer"]}, {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}
+run/0: {name: "result", value: 6, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 5, type: 1, properties: ["full": "integer"]}, {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}
 run/0: ingredient 0 is full
 mem/0: location 1074 is 0
 run/0: ingredient 1 is tmp
@@ -235,18 +235,18 @@ mem/0: location 1071 is 1
 run/0: product 0 is 0
 mem/0: storing 0 in location 1075
 run/0: instruction channel-full?/12
-run/0: reply {name: "result", value: 6, type: 3, properties: ["result": "boolean"]}
+run/0: reply/32 {name: "result", value: 6, type: 3, properties: ["result": "boolean"]}
 mem/0: location 1075 is 0
 run/0: result 0 is 0
 mem/0: storing 0 in location 1041
 run/0: instruction write/5
-run/0: break-unless {name: "full", value: 3, type: 3, properties: ["full": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "full", value: 3, type: 3, properties: ["full": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
 mem/0: location 1041 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 8
 run/0: instruction write/9
-run/0: {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
+run/0: {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1039 is 1031
 run/0: ingredient 1 is data
@@ -256,7 +256,7 @@ mem/0: location 1033 is 1034
 run/0: product 0 is 1034
 mem/0: storing 1034 in location 1043
 run/0: instruction write/10
-run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer"]} <- get-address {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer"]} <- get-address/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1039 is 1031
 run/0: ingredient 1 is first-free
@@ -264,7 +264,7 @@ run/0: address to copy is 1032
 run/0: product 0 is 1032
 mem/0: storing 1032 in location 1044
 run/0: instruction write/11
-run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location"]} <- index-address {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}, {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}
+run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location"]} <- index-address/26 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}, {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}
 run/0: ingredient 0 is circular-buffer
 mem/0: location 1043 is 1034
 run/0: ingredient 1 is {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}
@@ -274,13 +274,13 @@ run/0: address to copy is 1035
 run/0: product 0 is 1035
 mem/0: storing 1035 in location 1045
 run/0: instruction write/12
-run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location", "deref": ]} <- copy {name: "val", value: 2, type: 1, properties: ["val": "location"]}
+run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location", "deref": ]} <- copy/1 {name: "val", value: 2, type: 1, properties: ["val": "location"]}
 run/0: ingredient 0 is val
 mem/0: location 1040 is 34
 mem/0: location 1045 is 1035
 mem/0: storing 34 in location 1035
 run/0: instruction write/13
-run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- add {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- add/2 {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is free
 mem/0: location 1044 is 1032
 mem/0: location 1032 is 0
@@ -289,11 +289,11 @@ run/0: product 0 is 1
 mem/0: location 1044 is 1032
 mem/0: storing 1 in location 1032
 run/0: instruction write/15
-run/0: {name: "len", value: 8, type: 1, properties: ["len": "integer"]} <- length {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
+run/0: {name: "len", value: 8, type: 1, properties: ["len": "integer"]} <- length/27 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
 mem/0: location 1043 is 1034
 mem/0: storing 2 in location 1046
 run/0: instruction write/16
-run/0: {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "len", value: 8, type: 1, properties: ["len": "integer"]}
+run/0: {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "len", value: 8, type: 1, properties: ["len": "integer"]}
 run/0: ingredient 0 is free
 mem/0: location 1044 is 1032
 mem/0: location 1032 is 1
@@ -302,40 +302,40 @@ mem/0: location 1046 is 2
 run/0: product 0 is 0
 mem/0: storing 0 in location 1047
 run/0: instruction write/17
-run/0: break-unless {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1047 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 19
 run/0: instruction write/20
-run/0: reply {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "same-as-ingredient": "0"]}
+run/0: reply/32 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "same-as-ingredient": "0"]}
 mem/0: location 1039 is 1031
 run/0: result 0 is 1031
 mem/0: storing 1031 in location 1
 run/0: instruction run1001/2
-run/0: {name: "_", value: 0, type: 0, properties: ["_": "dummy"]}, {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- read {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}
+run/0: {name: "_", value: 0, type: 0, properties: ["_": "dummy"]}, {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- read/111 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}
 mem/0: location 1 is 1031
 run/0: instruction read/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1130
 run/0: instruction read/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1132
 run/0: instruction read/3
-run/0: {name: "empty", value: 2, type: 3, properties: ["empty": "boolean"]} <- channel-empty? {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
+run/0: {name: "empty", value: 2, type: 3, properties: ["empty": "boolean"]} <- channel-empty?/112 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
 mem/0: location 1132 is 1031
 run/0: instruction channel-empty?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1161
 run/0: instruction channel-empty?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1163
 run/0: instruction channel-empty?/2
-run/0: {name: "full", value: 2, type: 1, properties: ["full": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
+run/0: {name: "full", value: 2, type: 1, properties: ["full": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1163 is 1031
 run/0: ingredient 1 is first-full
@@ -345,7 +345,7 @@ mem/0: location 1031 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1164
 run/0: instruction channel-empty?/3
-run/0: {name: "free", value: 3, type: 1, properties: ["free": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "free", value: 3, type: 1, properties: ["free": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1163 is 1031
 run/0: ingredient 1 is first-free
@@ -355,7 +355,7 @@ mem/0: location 1032 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1165
 run/0: instruction channel-empty?/4
-run/0: {name: "result", value: 4, type: 3, properties: ["result": "boolean"]} <- equal {name: "full", value: 2, type: 1, properties: ["full": "integer"]}, {name: "free", value: 3, type: 1, properties: ["free": "integer"]}
+run/0: {name: "result", value: 4, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 2, type: 1, properties: ["full": "integer"]}, {name: "free", value: 3, type: 1, properties: ["free": "integer"]}
 run/0: ingredient 0 is full
 mem/0: location 1164 is 0
 run/0: ingredient 1 is free
@@ -363,18 +363,18 @@ mem/0: location 1165 is 1
 run/0: product 0 is 0
 mem/0: storing 0 in location 1166
 run/0: instruction channel-empty?/5
-run/0: reply {name: "result", value: 4, type: 3, properties: ["result": "boolean"]}
+run/0: reply/32 {name: "result", value: 4, type: 3, properties: ["result": "boolean"]}
 mem/0: location 1166 is 0
 run/0: result 0 is 0
 mem/0: storing 0 in location 1133
 run/0: instruction read/4
-run/0: break-unless {name: "empty", value: 2, type: 3, properties: ["empty": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "empty", value: 2, type: 3, properties: ["empty": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
 mem/0: location 1133 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 7
 run/0: instruction read/8
-run/0: {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer"]} <- get-address {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
+run/0: {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer"]} <- get-address/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1132 is 1031
 run/0: ingredient 1 is first-full
@@ -382,7 +382,7 @@ run/0: address to copy is 1031
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1135
 run/0: instruction read/9
-run/0: {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
+run/0: {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1132 is 1031
 run/0: ingredient 1 is data
@@ -392,7 +392,7 @@ mem/0: location 1033 is 1034
 run/0: product 0 is 1034
 mem/0: storing 1034 in location 1136
 run/0: instruction read/10
-run/0: {name: "result", value: 6, type: 1, properties: ["result": "location"]} <- index {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}, {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}
+run/0: {name: "result", value: 6, type: 1, properties: ["result": "location"]} <- index/25 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}, {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}
 run/0: ingredient 0 is {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
 mem/0: location 1136 is 1034
 run/0: ingredient 1 is {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}
@@ -404,7 +404,7 @@ mem/0: location 1035 is 34
 run/0: product 0 is 34
 mem/0: storing 34 in location 1137
 run/0: instruction read/11
-run/0: {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- add {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- add/2 {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is full
 mem/0: location 1135 is 1031
 mem/0: location 1031 is 0
@@ -413,11 +413,11 @@ run/0: product 0 is 1
 mem/0: location 1135 is 1031
 mem/0: storing 1 in location 1031
 run/0: instruction read/13
-run/0: {name: "len", value: 7, type: 1, properties: ["len": "integer"]} <- length {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
+run/0: {name: "len", value: 7, type: 1, properties: ["len": "integer"]} <- length/27 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
 mem/0: location 1136 is 1034
 mem/0: storing 2 in location 1138
 run/0: instruction read/14
-run/0: {name: "at-end?", value: 8, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}, {name: "len", value: 7, type: 1, properties: ["len": "integer"]}
+run/0: {name: "at-end?", value: 8, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}, {name: "len", value: 7, type: 1, properties: ["len": "integer"]}
 run/0: ingredient 0 is full
 mem/0: location 1135 is 1031
 mem/0: location 1031 is 1
@@ -426,31 +426,31 @@ mem/0: location 1138 is 2
 run/0: product 0 is 0
 mem/0: storing 0 in location 1139
 run/0: instruction read/15
-run/0: break-unless {name: "at-end?", value: 8, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "at-end?", value: 8, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1139 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 17
 run/0: instruction read/18
-run/0: reply {name: "result", value: 6, type: 1, properties: ["result": "location"]}, {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "same-as-ingredient": "0"]}
+run/0: reply/32 {name: "result", value: 6, type: 1, properties: ["result": "location"]}, {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "same-as-ingredient": "0"]}
 mem/0: location 1137 is 34
 mem/0: location 1132 is 1031
 run/0: result 0 is 34
 run/0: result 1 is 1031
 mem/0: storing 1031 in location 1
 run/0: instruction run1001/3
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- channel-empty? {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- channel-empty?/112 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}
 mem/0: location 1 is 1031
 run/0: instruction channel-empty?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1192
 run/0: instruction channel-empty?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1194
 run/0: instruction channel-empty?/2
-run/0: {name: "full", value: 2, type: 1, properties: ["full": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
+run/0: {name: "full", value: 2, type: 1, properties: ["full": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1194 is 1031
 run/0: ingredient 1 is first-full
@@ -460,7 +460,7 @@ mem/0: location 1031 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1195
 run/0: instruction channel-empty?/3
-run/0: {name: "free", value: 3, type: 1, properties: ["free": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "free", value: 3, type: 1, properties: ["free": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1194 is 1031
 run/0: ingredient 1 is first-free
@@ -470,7 +470,7 @@ mem/0: location 1032 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1196
 run/0: instruction channel-empty?/4
-run/0: {name: "result", value: 4, type: 3, properties: ["result": "boolean"]} <- equal {name: "full", value: 2, type: 1, properties: ["full": "integer"]}, {name: "free", value: 3, type: 1, properties: ["free": "integer"]}
+run/0: {name: "result", value: 4, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 2, type: 1, properties: ["full": "integer"]}, {name: "free", value: 3, type: 1, properties: ["free": "integer"]}
 run/0: ingredient 0 is full
 mem/0: location 1195 is 1
 run/0: ingredient 1 is free
@@ -478,23 +478,23 @@ mem/0: location 1196 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1197
 run/0: instruction channel-empty?/5
-run/0: reply {name: "result", value: 4, type: 3, properties: ["result": "boolean"]}
+run/0: reply/32 {name: "result", value: 4, type: 3, properties: ["result": "boolean"]}
 mem/0: location 1197 is 1
 run/0: result 0 is 1
 mem/0: storing 1 in location 2
 run/0: instruction run1001/4
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- channel-full? {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- channel-full?/110 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}
 mem/0: location 1 is 1031
 run/0: instruction channel-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1223
 run/0: instruction channel-full?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1225
 run/0: instruction channel-full?/2
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1225 is 1031
 run/0: ingredient 1 is first-free
@@ -504,25 +504,25 @@ mem/0: location 1032 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1226
 run/0: instruction channel-full?/3
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- add {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- add/2 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is tmp
 mem/0: location 1226 is 1
 run/0: ingredient 1 is 1
 run/0: product 0 is 2
 mem/0: storing 2 in location 1226
 run/0: instruction channel-full?/5
-run/0: {name: "len", value: 3, type: 1, properties: ["len": "integer"]} <- channel-capacity {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
+run/0: {name: "len", value: 3, type: 1, properties: ["len": "integer"]} <- channel-capacity/113 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
 mem/0: location 1225 is 1031
 run/0: instruction channel-capacity/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1254
 run/0: instruction channel-capacity/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1256
 run/0: instruction channel-capacity/2
-run/0: {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
+run/0: {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1256 is 1031
 run/0: ingredient 1 is data
@@ -532,16 +532,16 @@ mem/0: location 1033 is 1034
 run/0: product 0 is 1034
 mem/0: storing 1034 in location 1257
 run/0: instruction channel-capacity/3
-run/0: {name: "result", value: 3, type: 1, properties: ["result": "integer"]} <- length {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location", "deref": ]}
+run/0: {name: "result", value: 3, type: 1, properties: ["result": "integer"]} <- length/27 {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location", "deref": ]}
 mem/0: location 1257 is 1034
 mem/0: storing 2 in location 1258
 run/0: instruction channel-capacity/4
-run/0: reply {name: "result", value: 3, type: 1, properties: ["result": "integer"]}
+run/0: reply/32 {name: "result", value: 3, type: 1, properties: ["result": "integer"]}
 mem/0: location 1258 is 2
 run/0: result 0 is 2
 mem/0: storing 2 in location 1227
 run/0: instruction channel-full?/6
-run/0: {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "len", value: 3, type: 1, properties: ["len": "integer"]}
+run/0: {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "len", value: 3, type: 1, properties: ["len": "integer"]}
 run/0: ingredient 0 is tmp
 mem/0: location 1226 is 2
 run/0: ingredient 1 is len
@@ -549,16 +549,16 @@ mem/0: location 1227 is 2
 run/0: product 0 is 1
 mem/0: storing 1 in location 1228
 run/0: instruction channel-full?/7
-run/0: break-unless {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1228 is 1
 run/0: ingredient 0 is 1
 run/0: jump-unless fell through
 run/0: instruction channel-full?/8
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 1226
 run/0: instruction channel-full?/10
-run/0: {name: "full", value: 5, type: 1, properties: ["full": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
+run/0: {name: "full", value: 5, type: 1, properties: ["full": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1225 is 1031
 run/0: ingredient 1 is first-full
@@ -568,7 +568,7 @@ mem/0: location 1031 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1229
 run/0: instruction channel-full?/11
-run/0: {name: "result", value: 6, type: 3, properties: ["result": "boolean"]} <- equal {name: "full", value: 5, type: 1, properties: ["full": "integer"]}, {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}
+run/0: {name: "result", value: 6, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 5, type: 1, properties: ["full": "integer"]}, {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}
 run/0: ingredient 0 is full
 mem/0: location 1229 is 1
 run/0: ingredient 1 is tmp
@@ -576,12 +576,12 @@ mem/0: location 1226 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1230
 run/0: instruction channel-full?/12
-run/0: reply {name: "result", value: 6, type: 3, properties: ["result": "boolean"]}
+run/0: reply/32 {name: "result", value: 6, type: 3, properties: ["result": "boolean"]}
 mem/0: location 1230 is 0
 run/0: result 0 is 0
 mem/0: storing 0 in location 3
 run/0: instruction channel-read-not-full/1
-run/0: memory-should-contain {name: "
+run/0: memory-should-contain/43 {name: "
     2 <- 1  # empty?
     3 <- 0  # full?
   ", value: 0, type: 0, properties: ["
diff --git a/cpp/.traces/channel-wrap b/cpp/.traces/channel-wrap
index d785fc42..04a7cd13 100644
--- a/cpp/.traces/channel-wrap
+++ b/cpp/.traces/channel-wrap
@@ -48,7 +48,7 @@ after-brace/0: memory-should-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: channel-wrap
 run/0: instruction channel-wrap/0
-run/0: run {name: "
+run/0: run/42 {name: "
     # channel with just 1 slot
     1:address:channel <- init-channel 1:literal/capacity
     # write and read a value
@@ -129,17 +129,17 @@ after-brace/0: get ...
 after-brace/0: read ...
 after-brace/0: get ...
 run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- init-channel {name: "1", value: 1, type: 0, properties: ["1": "literal", "capacity": ]}
+run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- init-channel/108 {name: "1", value: 1, type: 0, properties: ["1": "literal", "capacity": ]}
 run/0: instruction init-channel/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1000
 run/0: instruction init-channel/1
-run/0: {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]} <- new {name: "channel", value: 10, type: 0, properties: ["channel": "type"]}
+run/0: {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]} <- new/41 {name: "channel", value: 10, type: 0, properties: ["channel": "type"]}
 mem/0: new alloc: 1031
 mem/0: storing 1031 in location 1002
 run/0: instruction init-channel/2
-run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer"]} <- get-address {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
+run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer"]} <- get-address/24 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1002 is 1031
 run/0: ingredient 1 is first-full
@@ -147,12 +147,12 @@ run/0: address to copy is 1031
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1003
 run/0: instruction init-channel/3
-run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: location 1003 is 1031
 mem/0: storing 0 in location 1031
 run/0: instruction init-channel/4
-run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer"]} <- get-address {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer"]} <- get-address/24 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1002 is 1031
 run/0: ingredient 1 is first-free
@@ -160,23 +160,23 @@ run/0: address to copy is 1032
 run/0: product 0 is 1032
 mem/0: storing 1032 in location 1004
 run/0: instruction init-channel/5
-run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: location 1004 is 1032
 mem/0: storing 0 in location 1032
 run/0: instruction init-channel/6
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- next-ingredient 
+run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- next-ingredient/29 
 run/0: product 0 is 1
 mem/0: storing 1 in location 1005
 run/0: instruction init-channel/7
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- add {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- add/2 {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is capacity
 mem/0: location 1005 is 1
 run/0: ingredient 1 is 1
 run/0: product 0 is 2
 mem/0: storing 2 in location 1005
 run/0: instruction init-channel/8
-run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location"]} <- get-address {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
+run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location"]} <- get-address/24 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1002 is 1031
 run/0: ingredient 1 is data
@@ -184,45 +184,45 @@ run/0: address to copy is 1033
 run/0: product 0 is 1033
 mem/0: storing 1033 in location 1006
 run/0: instruction init-channel/9
-run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location", "deref": ]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
+run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location", "deref": ]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
 mem/0: location 1005 is 2
 mem/0: array size is 2
 mem/0: new alloc: 1034
 mem/0: location 1006 is 1033
 mem/0: storing 1034 in location 1033
 run/0: instruction init-channel/10
-run/0: reply {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]}
+run/0: reply/32 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]}
 mem/0: location 1002 is 1031
 run/0: result 0 is 1031
 mem/0: storing 1031 in location 1
 run/0: instruction run1001/1
-run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- write {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}, {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- write/109 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}, {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 mem/0: location 1 is 1031
 run/0: instruction write/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1037
 run/0: instruction write/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1039
 run/0: instruction write/2
-run/0: {name: "val", value: 2, type: 1, properties: ["val": "location"]} <- next-ingredient 
+run/0: {name: "val", value: 2, type: 1, properties: ["val": "location"]} <- next-ingredient/29 
 run/0: product 0 is 34
 mem/0: storing 34 in location 1040
 run/0: instruction write/4
-run/0: {name: "full", value: 3, type: 3, properties: ["full": "boolean"]} <- channel-full? {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
+run/0: {name: "full", value: 3, type: 3, properties: ["full": "boolean"]} <- channel-full?/110 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
 mem/0: location 1039 is 1031
 run/0: instruction channel-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1068
 run/0: instruction channel-full?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1070
 run/0: instruction channel-full?/2
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1070 is 1031
 run/0: ingredient 1 is first-free
@@ -232,25 +232,25 @@ mem/0: location 1032 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1071
 run/0: instruction channel-full?/3
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- add {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- add/2 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is tmp
 mem/0: location 1071 is 0
 run/0: ingredient 1 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1071
 run/0: instruction channel-full?/5
-run/0: {name: "len", value: 3, type: 1, properties: ["len": "integer"]} <- channel-capacity {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
+run/0: {name: "len", value: 3, type: 1, properties: ["len": "integer"]} <- channel-capacity/113 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
 mem/0: location 1070 is 1031
 run/0: instruction channel-capacity/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1099
 run/0: instruction channel-capacity/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1101
 run/0: instruction channel-capacity/2
-run/0: {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
+run/0: {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1101 is 1031
 run/0: ingredient 1 is data
@@ -260,16 +260,16 @@ mem/0: location 1033 is 1034
 run/0: product 0 is 1034
 mem/0: storing 1034 in location 1102
 run/0: instruction channel-capacity/3
-run/0: {name: "result", value: 3, type: 1, properties: ["result": "integer"]} <- length {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location", "deref": ]}
+run/0: {name: "result", value: 3, type: 1, properties: ["result": "integer"]} <- length/27 {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location", "deref": ]}
 mem/0: location 1102 is 1034
 mem/0: storing 2 in location 1103
 run/0: instruction channel-capacity/4
-run/0: reply {name: "result", value: 3, type: 1, properties: ["result": "integer"]}
+run/0: reply/32 {name: "result", value: 3, type: 1, properties: ["result": "integer"]}
 mem/0: location 1103 is 2
 run/0: result 0 is 2
 mem/0: storing 2 in location 1072
 run/0: instruction channel-full?/6
-run/0: {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "len", value: 3, type: 1, properties: ["len": "integer"]}
+run/0: {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "len", value: 3, type: 1, properties: ["len": "integer"]}
 run/0: ingredient 0 is tmp
 mem/0: location 1071 is 1
 run/0: ingredient 1 is len
@@ -277,13 +277,13 @@ mem/0: location 1072 is 2
 run/0: product 0 is 0
 mem/0: storing 0 in location 1073
 run/0: instruction channel-full?/7
-run/0: break-unless {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1073 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 9
 run/0: instruction channel-full?/10
-run/0: {name: "full", value: 5, type: 1, properties: ["full": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
+run/0: {name: "full", value: 5, type: 1, properties: ["full": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1070 is 1031
 run/0: ingredient 1 is first-full
@@ -293,7 +293,7 @@ mem/0: location 1031 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1074
 run/0: instruction channel-full?/11
-run/0: {name: "result", value: 6, type: 3, properties: ["result": "boolean"]} <- equal {name: "full", value: 5, type: 1, properties: ["full": "integer"]}, {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}
+run/0: {name: "result", value: 6, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 5, type: 1, properties: ["full": "integer"]}, {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}
 run/0: ingredient 0 is full
 mem/0: location 1074 is 0
 run/0: ingredient 1 is tmp
@@ -301,18 +301,18 @@ mem/0: location 1071 is 1
 run/0: product 0 is 0
 mem/0: storing 0 in location 1075
 run/0: instruction channel-full?/12
-run/0: reply {name: "result", value: 6, type: 3, properties: ["result": "boolean"]}
+run/0: reply/32 {name: "result", value: 6, type: 3, properties: ["result": "boolean"]}
 mem/0: location 1075 is 0
 run/0: result 0 is 0
 mem/0: storing 0 in location 1041
 run/0: instruction write/5
-run/0: break-unless {name: "full", value: 3, type: 3, properties: ["full": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "full", value: 3, type: 3, properties: ["full": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
 mem/0: location 1041 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 8
 run/0: instruction write/9
-run/0: {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
+run/0: {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1039 is 1031
 run/0: ingredient 1 is data
@@ -322,7 +322,7 @@ mem/0: location 1033 is 1034
 run/0: product 0 is 1034
 mem/0: storing 1034 in location 1043
 run/0: instruction write/10
-run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer"]} <- get-address {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer"]} <- get-address/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1039 is 1031
 run/0: ingredient 1 is first-free
@@ -330,7 +330,7 @@ run/0: address to copy is 1032
 run/0: product 0 is 1032
 mem/0: storing 1032 in location 1044
 run/0: instruction write/11
-run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location"]} <- index-address {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}, {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}
+run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location"]} <- index-address/26 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}, {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}
 run/0: ingredient 0 is circular-buffer
 mem/0: location 1043 is 1034
 run/0: ingredient 1 is {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}
@@ -340,13 +340,13 @@ run/0: address to copy is 1035
 run/0: product 0 is 1035
 mem/0: storing 1035 in location 1045
 run/0: instruction write/12
-run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location", "deref": ]} <- copy {name: "val", value: 2, type: 1, properties: ["val": "location"]}
+run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location", "deref": ]} <- copy/1 {name: "val", value: 2, type: 1, properties: ["val": "location"]}
 run/0: ingredient 0 is val
 mem/0: location 1040 is 34
 mem/0: location 1045 is 1035
 mem/0: storing 34 in location 1035
 run/0: instruction write/13
-run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- add {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- add/2 {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is free
 mem/0: location 1044 is 1032
 mem/0: location 1032 is 0
@@ -355,11 +355,11 @@ run/0: product 0 is 1
 mem/0: location 1044 is 1032
 mem/0: storing 1 in location 1032
 run/0: instruction write/15
-run/0: {name: "len", value: 8, type: 1, properties: ["len": "integer"]} <- length {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
+run/0: {name: "len", value: 8, type: 1, properties: ["len": "integer"]} <- length/27 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
 mem/0: location 1043 is 1034
 mem/0: storing 2 in location 1046
 run/0: instruction write/16
-run/0: {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "len", value: 8, type: 1, properties: ["len": "integer"]}
+run/0: {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "len", value: 8, type: 1, properties: ["len": "integer"]}
 run/0: ingredient 0 is free
 mem/0: location 1044 is 1032
 mem/0: location 1032 is 1
@@ -368,40 +368,40 @@ mem/0: location 1046 is 2
 run/0: product 0 is 0
 mem/0: storing 0 in location 1047
 run/0: instruction write/17
-run/0: break-unless {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1047 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 19
 run/0: instruction write/20
-run/0: reply {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "same-as-ingredient": "0"]}
+run/0: reply/32 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "same-as-ingredient": "0"]}
 mem/0: location 1039 is 1031
 run/0: result 0 is 1031
 mem/0: storing 1031 in location 1
 run/0: instruction run1001/2
-run/0: {name: "_", value: 0, type: 0, properties: ["_": "dummy"]}, {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- read {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}
+run/0: {name: "_", value: 0, type: 0, properties: ["_": "dummy"]}, {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- read/111 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}
 mem/0: location 1 is 1031
 run/0: instruction read/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1130
 run/0: instruction read/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1132
 run/0: instruction read/3
-run/0: {name: "empty", value: 2, type: 3, properties: ["empty": "boolean"]} <- channel-empty? {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
+run/0: {name: "empty", value: 2, type: 3, properties: ["empty": "boolean"]} <- channel-empty?/112 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
 mem/0: location 1132 is 1031
 run/0: instruction channel-empty?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1161
 run/0: instruction channel-empty?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1163
 run/0: instruction channel-empty?/2
-run/0: {name: "full", value: 2, type: 1, properties: ["full": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
+run/0: {name: "full", value: 2, type: 1, properties: ["full": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1163 is 1031
 run/0: ingredient 1 is first-full
@@ -411,7 +411,7 @@ mem/0: location 1031 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1164
 run/0: instruction channel-empty?/3
-run/0: {name: "free", value: 3, type: 1, properties: ["free": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "free", value: 3, type: 1, properties: ["free": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1163 is 1031
 run/0: ingredient 1 is first-free
@@ -421,7 +421,7 @@ mem/0: location 1032 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1165
 run/0: instruction channel-empty?/4
-run/0: {name: "result", value: 4, type: 3, properties: ["result": "boolean"]} <- equal {name: "full", value: 2, type: 1, properties: ["full": "integer"]}, {name: "free", value: 3, type: 1, properties: ["free": "integer"]}
+run/0: {name: "result", value: 4, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 2, type: 1, properties: ["full": "integer"]}, {name: "free", value: 3, type: 1, properties: ["free": "integer"]}
 run/0: ingredient 0 is full
 mem/0: location 1164 is 0
 run/0: ingredient 1 is free
@@ -429,18 +429,18 @@ mem/0: location 1165 is 1
 run/0: product 0 is 0
 mem/0: storing 0 in location 1166
 run/0: instruction channel-empty?/5
-run/0: reply {name: "result", value: 4, type: 3, properties: ["result": "boolean"]}
+run/0: reply/32 {name: "result", value: 4, type: 3, properties: ["result": "boolean"]}
 mem/0: location 1166 is 0
 run/0: result 0 is 0
 mem/0: storing 0 in location 1133
 run/0: instruction read/4
-run/0: break-unless {name: "empty", value: 2, type: 3, properties: ["empty": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "empty", value: 2, type: 3, properties: ["empty": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
 mem/0: location 1133 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 7
 run/0: instruction read/8
-run/0: {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer"]} <- get-address {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
+run/0: {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer"]} <- get-address/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1132 is 1031
 run/0: ingredient 1 is first-full
@@ -448,7 +448,7 @@ run/0: address to copy is 1031
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1135
 run/0: instruction read/9
-run/0: {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
+run/0: {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1132 is 1031
 run/0: ingredient 1 is data
@@ -458,7 +458,7 @@ mem/0: location 1033 is 1034
 run/0: product 0 is 1034
 mem/0: storing 1034 in location 1136
 run/0: instruction read/10
-run/0: {name: "result", value: 6, type: 1, properties: ["result": "location"]} <- index {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}, {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}
+run/0: {name: "result", value: 6, type: 1, properties: ["result": "location"]} <- index/25 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}, {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}
 run/0: ingredient 0 is {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
 mem/0: location 1136 is 1034
 run/0: ingredient 1 is {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}
@@ -470,7 +470,7 @@ mem/0: location 1035 is 34
 run/0: product 0 is 34
 mem/0: storing 34 in location 1137
 run/0: instruction read/11
-run/0: {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- add {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- add/2 {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is full
 mem/0: location 1135 is 1031
 mem/0: location 1031 is 0
@@ -479,11 +479,11 @@ run/0: product 0 is 1
 mem/0: location 1135 is 1031
 mem/0: storing 1 in location 1031
 run/0: instruction read/13
-run/0: {name: "len", value: 7, type: 1, properties: ["len": "integer"]} <- length {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
+run/0: {name: "len", value: 7, type: 1, properties: ["len": "integer"]} <- length/27 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
 mem/0: location 1136 is 1034
 mem/0: storing 2 in location 1138
 run/0: instruction read/14
-run/0: {name: "at-end?", value: 8, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}, {name: "len", value: 7, type: 1, properties: ["len": "integer"]}
+run/0: {name: "at-end?", value: 8, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}, {name: "len", value: 7, type: 1, properties: ["len": "integer"]}
 run/0: ingredient 0 is full
 mem/0: location 1135 is 1031
 mem/0: location 1031 is 1
@@ -492,20 +492,20 @@ mem/0: location 1138 is 2
 run/0: product 0 is 0
 mem/0: storing 0 in location 1139
 run/0: instruction read/15
-run/0: break-unless {name: "at-end?", value: 8, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "at-end?", value: 8, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1139 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 17
 run/0: instruction read/18
-run/0: reply {name: "result", value: 6, type: 1, properties: ["result": "location"]}, {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "same-as-ingredient": "0"]}
+run/0: reply/32 {name: "result", value: 6, type: 1, properties: ["result": "location"]}, {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "same-as-ingredient": "0"]}
 mem/0: location 1137 is 34
 mem/0: location 1132 is 1031
 run/0: result 0 is 34
 run/0: result 1 is 1031
 mem/0: storing 1031 in location 1
 run/0: instruction run1001/3
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- get {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- get/23 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 1031
 run/0: ingredient 1 is first-free
@@ -515,7 +515,7 @@ mem/0: location 1032 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 2
 run/0: instruction run1001/4
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- get {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- get/23 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 1031
 run/0: ingredient 1 is first-free
@@ -525,33 +525,33 @@ mem/0: location 1032 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 3
 run/0: instruction run1001/5
-run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- write {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}, {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- write/109 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}, {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 mem/0: location 1 is 1031
 run/0: instruction write/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1192
 run/0: instruction write/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1194
 run/0: instruction write/2
-run/0: {name: "val", value: 2, type: 1, properties: ["val": "location"]} <- next-ingredient 
+run/0: {name: "val", value: 2, type: 1, properties: ["val": "location"]} <- next-ingredient/29 
 run/0: product 0 is 34
 mem/0: storing 34 in location 1195
 run/0: instruction write/4
-run/0: {name: "full", value: 3, type: 3, properties: ["full": "boolean"]} <- channel-full? {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
+run/0: {name: "full", value: 3, type: 3, properties: ["full": "boolean"]} <- channel-full?/110 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
 mem/0: location 1194 is 1031
 run/0: instruction channel-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1223
 run/0: instruction channel-full?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1225
 run/0: instruction channel-full?/2
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1225 is 1031
 run/0: ingredient 1 is first-free
@@ -561,25 +561,25 @@ mem/0: location 1032 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1226
 run/0: instruction channel-full?/3
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- add {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- add/2 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is tmp
 mem/0: location 1226 is 1
 run/0: ingredient 1 is 1
 run/0: product 0 is 2
 mem/0: storing 2 in location 1226
 run/0: instruction channel-full?/5
-run/0: {name: "len", value: 3, type: 1, properties: ["len": "integer"]} <- channel-capacity {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
+run/0: {name: "len", value: 3, type: 1, properties: ["len": "integer"]} <- channel-capacity/113 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
 mem/0: location 1225 is 1031
 run/0: instruction channel-capacity/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1254
 run/0: instruction channel-capacity/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1256
 run/0: instruction channel-capacity/2
-run/0: {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
+run/0: {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1256 is 1031
 run/0: ingredient 1 is data
@@ -589,16 +589,16 @@ mem/0: location 1033 is 1034
 run/0: product 0 is 1034
 mem/0: storing 1034 in location 1257
 run/0: instruction channel-capacity/3
-run/0: {name: "result", value: 3, type: 1, properties: ["result": "integer"]} <- length {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location", "deref": ]}
+run/0: {name: "result", value: 3, type: 1, properties: ["result": "integer"]} <- length/27 {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location", "deref": ]}
 mem/0: location 1257 is 1034
 mem/0: storing 2 in location 1258
 run/0: instruction channel-capacity/4
-run/0: reply {name: "result", value: 3, type: 1, properties: ["result": "integer"]}
+run/0: reply/32 {name: "result", value: 3, type: 1, properties: ["result": "integer"]}
 mem/0: location 1258 is 2
 run/0: result 0 is 2
 mem/0: storing 2 in location 1227
 run/0: instruction channel-full?/6
-run/0: {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "len", value: 3, type: 1, properties: ["len": "integer"]}
+run/0: {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "len", value: 3, type: 1, properties: ["len": "integer"]}
 run/0: ingredient 0 is tmp
 mem/0: location 1226 is 2
 run/0: ingredient 1 is len
@@ -606,16 +606,16 @@ mem/0: location 1227 is 2
 run/0: product 0 is 1
 mem/0: storing 1 in location 1228
 run/0: instruction channel-full?/7
-run/0: break-unless {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1228 is 1
 run/0: ingredient 0 is 1
 run/0: jump-unless fell through
 run/0: instruction channel-full?/8
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 1226
 run/0: instruction channel-full?/10
-run/0: {name: "full", value: 5, type: 1, properties: ["full": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
+run/0: {name: "full", value: 5, type: 1, properties: ["full": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1225 is 1031
 run/0: ingredient 1 is first-full
@@ -625,7 +625,7 @@ mem/0: location 1031 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1229
 run/0: instruction channel-full?/11
-run/0: {name: "result", value: 6, type: 3, properties: ["result": "boolean"]} <- equal {name: "full", value: 5, type: 1, properties: ["full": "integer"]}, {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}
+run/0: {name: "result", value: 6, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 5, type: 1, properties: ["full": "integer"]}, {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}
 run/0: ingredient 0 is full
 mem/0: location 1229 is 1
 run/0: ingredient 1 is tmp
@@ -633,18 +633,18 @@ mem/0: location 1226 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1230
 run/0: instruction channel-full?/12
-run/0: reply {name: "result", value: 6, type: 3, properties: ["result": "boolean"]}
+run/0: reply/32 {name: "result", value: 6, type: 3, properties: ["result": "boolean"]}
 mem/0: location 1230 is 0
 run/0: result 0 is 0
 mem/0: storing 0 in location 1196
 run/0: instruction write/5
-run/0: break-unless {name: "full", value: 3, type: 3, properties: ["full": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "full", value: 3, type: 3, properties: ["full": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
 mem/0: location 1196 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 8
 run/0: instruction write/9
-run/0: {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
+run/0: {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1194 is 1031
 run/0: ingredient 1 is data
@@ -654,7 +654,7 @@ mem/0: location 1033 is 1034
 run/0: product 0 is 1034
 mem/0: storing 1034 in location 1198
 run/0: instruction write/10
-run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer"]} <- get-address {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer"]} <- get-address/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1194 is 1031
 run/0: ingredient 1 is first-free
@@ -662,7 +662,7 @@ run/0: address to copy is 1032
 run/0: product 0 is 1032
 mem/0: storing 1032 in location 1199
 run/0: instruction write/11
-run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location"]} <- index-address {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}, {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}
+run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location"]} <- index-address/26 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}, {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}
 run/0: ingredient 0 is circular-buffer
 mem/0: location 1198 is 1034
 run/0: ingredient 1 is {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}
@@ -672,13 +672,13 @@ run/0: address to copy is 1036
 run/0: product 0 is 1036
 mem/0: storing 1036 in location 1200
 run/0: instruction write/12
-run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location", "deref": ]} <- copy {name: "val", value: 2, type: 1, properties: ["val": "location"]}
+run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location", "deref": ]} <- copy/1 {name: "val", value: 2, type: 1, properties: ["val": "location"]}
 run/0: ingredient 0 is val
 mem/0: location 1195 is 34
 mem/0: location 1200 is 1036
 mem/0: storing 34 in location 1036
 run/0: instruction write/13
-run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- add {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- add/2 {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is free
 mem/0: location 1199 is 1032
 mem/0: location 1032 is 1
@@ -687,11 +687,11 @@ run/0: product 0 is 2
 mem/0: location 1199 is 1032
 mem/0: storing 2 in location 1032
 run/0: instruction write/15
-run/0: {name: "len", value: 8, type: 1, properties: ["len": "integer"]} <- length {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
+run/0: {name: "len", value: 8, type: 1, properties: ["len": "integer"]} <- length/27 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
 mem/0: location 1198 is 1034
 mem/0: storing 2 in location 1201
 run/0: instruction write/16
-run/0: {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "len", value: 8, type: 1, properties: ["len": "integer"]}
+run/0: {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "len", value: 8, type: 1, properties: ["len": "integer"]}
 run/0: ingredient 0 is free
 mem/0: location 1199 is 1032
 mem/0: location 1032 is 2
@@ -700,22 +700,22 @@ mem/0: location 1201 is 2
 run/0: product 0 is 1
 mem/0: storing 1 in location 1202
 run/0: instruction write/17
-run/0: break-unless {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1202 is 1
 run/0: ingredient 0 is 1
 run/0: jump-unless fell through
 run/0: instruction write/18
-run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: location 1199 is 1032
 mem/0: storing 0 in location 1032
 run/0: instruction write/20
-run/0: reply {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "same-as-ingredient": "0"]}
+run/0: reply/32 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "same-as-ingredient": "0"]}
 mem/0: location 1194 is 1031
 run/0: result 0 is 1031
 mem/0: storing 1031 in location 1
 run/0: instruction run1001/6
-run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- get {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- get/23 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 1031
 run/0: ingredient 1 is first-free
@@ -725,29 +725,29 @@ mem/0: location 1032 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 4
 run/0: instruction run1001/7
-run/0: {name: "_", value: 0, type: 0, properties: ["_": "dummy"]}, {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- read {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}
+run/0: {name: "_", value: 0, type: 0, properties: ["_": "dummy"]}, {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- read/111 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}
 mem/0: location 1 is 1031
 run/0: instruction read/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1285
 run/0: instruction read/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1287
 run/0: instruction read/3
-run/0: {name: "empty", value: 2, type: 3, properties: ["empty": "boolean"]} <- channel-empty? {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
+run/0: {name: "empty", value: 2, type: 3, properties: ["empty": "boolean"]} <- channel-empty?/112 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
 mem/0: location 1287 is 1031
 run/0: instruction channel-empty?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1316
 run/0: instruction channel-empty?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1318
 run/0: instruction channel-empty?/2
-run/0: {name: "full", value: 2, type: 1, properties: ["full": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
+run/0: {name: "full", value: 2, type: 1, properties: ["full": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1318 is 1031
 run/0: ingredient 1 is first-full
@@ -757,7 +757,7 @@ mem/0: location 1031 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1319
 run/0: instruction channel-empty?/3
-run/0: {name: "free", value: 3, type: 1, properties: ["free": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "free", value: 3, type: 1, properties: ["free": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1318 is 1031
 run/0: ingredient 1 is first-free
@@ -767,7 +767,7 @@ mem/0: location 1032 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1320
 run/0: instruction channel-empty?/4
-run/0: {name: "result", value: 4, type: 3, properties: ["result": "boolean"]} <- equal {name: "full", value: 2, type: 1, properties: ["full": "integer"]}, {name: "free", value: 3, type: 1, properties: ["free": "integer"]}
+run/0: {name: "result", value: 4, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 2, type: 1, properties: ["full": "integer"]}, {name: "free", value: 3, type: 1, properties: ["free": "integer"]}
 run/0: ingredient 0 is full
 mem/0: location 1319 is 1
 run/0: ingredient 1 is free
@@ -775,18 +775,18 @@ mem/0: location 1320 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1321
 run/0: instruction channel-empty?/5
-run/0: reply {name: "result", value: 4, type: 3, properties: ["result": "boolean"]}
+run/0: reply/32 {name: "result", value: 4, type: 3, properties: ["result": "boolean"]}
 mem/0: location 1321 is 0
 run/0: result 0 is 0
 mem/0: storing 0 in location 1288
 run/0: instruction read/4
-run/0: break-unless {name: "empty", value: 2, type: 3, properties: ["empty": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "empty", value: 2, type: 3, properties: ["empty": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
 mem/0: location 1288 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 7
 run/0: instruction read/8
-run/0: {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer"]} <- get-address {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
+run/0: {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer"]} <- get-address/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1287 is 1031
 run/0: ingredient 1 is first-full
@@ -794,7 +794,7 @@ run/0: address to copy is 1031
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1290
 run/0: instruction read/9
-run/0: {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
+run/0: {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1287 is 1031
 run/0: ingredient 1 is data
@@ -804,7 +804,7 @@ mem/0: location 1033 is 1034
 run/0: product 0 is 1034
 mem/0: storing 1034 in location 1291
 run/0: instruction read/10
-run/0: {name: "result", value: 6, type: 1, properties: ["result": "location"]} <- index {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}, {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}
+run/0: {name: "result", value: 6, type: 1, properties: ["result": "location"]} <- index/25 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}, {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}
 run/0: ingredient 0 is {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
 mem/0: location 1291 is 1034
 run/0: ingredient 1 is {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}
@@ -816,7 +816,7 @@ mem/0: location 1036 is 34
 run/0: product 0 is 34
 mem/0: storing 34 in location 1292
 run/0: instruction read/11
-run/0: {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- add {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- add/2 {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is full
 mem/0: location 1290 is 1031
 mem/0: location 1031 is 1
@@ -825,11 +825,11 @@ run/0: product 0 is 2
 mem/0: location 1290 is 1031
 mem/0: storing 2 in location 1031
 run/0: instruction read/13
-run/0: {name: "len", value: 7, type: 1, properties: ["len": "integer"]} <- length {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
+run/0: {name: "len", value: 7, type: 1, properties: ["len": "integer"]} <- length/27 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
 mem/0: location 1291 is 1034
 mem/0: storing 2 in location 1293
 run/0: instruction read/14
-run/0: {name: "at-end?", value: 8, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}, {name: "len", value: 7, type: 1, properties: ["len": "integer"]}
+run/0: {name: "at-end?", value: 8, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]}, {name: "len", value: 7, type: 1, properties: ["len": "integer"]}
 run/0: ingredient 0 is full
 mem/0: location 1290 is 1031
 mem/0: location 1031 is 2
@@ -838,24 +838,24 @@ mem/0: location 1293 is 2
 run/0: product 0 is 1
 mem/0: storing 1 in location 1294
 run/0: instruction read/15
-run/0: break-unless {name: "at-end?", value: 8, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "at-end?", value: 8, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1294 is 1
 run/0: ingredient 0 is 1
 run/0: jump-unless fell through
 run/0: instruction read/16
-run/0: {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "full", value: 4, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: location 1290 is 1031
 mem/0: storing 0 in location 1031
 run/0: instruction read/18
-run/0: reply {name: "result", value: 6, type: 1, properties: ["result": "location"]}, {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "same-as-ingredient": "0"]}
+run/0: reply/32 {name: "result", value: 6, type: 1, properties: ["result": "location"]}, {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "same-as-ingredient": "0"]}
 mem/0: location 1292 is 34
 mem/0: location 1287 is 1031
 run/0: result 0 is 34
 run/0: result 1 is 1031
 mem/0: storing 1031 in location 1
 run/0: instruction run1001/8
-run/0: {name: "5", value: 5, type: 1, properties: ["5": "integer"]} <- get {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
+run/0: {name: "5", value: 5, type: 1, properties: ["5": "integer"]} <- get/23 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 1031
 run/0: ingredient 1 is first-full
@@ -865,7 +865,7 @@ mem/0: location 1031 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 5
 run/0: instruction channel-wrap/1
-run/0: memory-should-contain {name: "
+run/0: memory-should-contain/43 {name: "
     2 <- 1  # first-free after first write
     3 <- 1  # first-full after first read
     4 <- 0  # first-free after second write, wrapped
diff --git a/cpp/.traces/channel-write-full b/cpp/.traces/channel-write-full
index e1cdb2c6..1487727c 100644
--- a/cpp/.traces/channel-write-full
+++ b/cpp/.traces/channel-write-full
@@ -24,7 +24,7 @@ after-brace/0: memory-should-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: channel-write-full
 run/0: instruction channel-write-full/0
-run/0: run {name: "
+run/0: run/42 {name: "
     1:address:channel <- init-channel 1:literal/capacity
     1:address:channel <- write 1:address:channel, 34:literal
     2:integer <- channel-empty? 1:address:channel
@@ -54,17 +54,17 @@ after-brace/0: write ...
 after-brace/0: channel-empty? ...
 after-brace/0: channel-full? ...
 run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- init-channel {name: "1", value: 1, type: 0, properties: ["1": "literal", "capacity": ]}
+run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- init-channel/108 {name: "1", value: 1, type: 0, properties: ["1": "literal", "capacity": ]}
 run/0: instruction init-channel/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1000
 run/0: instruction init-channel/1
-run/0: {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]} <- new {name: "channel", value: 10, type: 0, properties: ["channel": "type"]}
+run/0: {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]} <- new/41 {name: "channel", value: 10, type: 0, properties: ["channel": "type"]}
 mem/0: new alloc: 1031
 mem/0: storing 1031 in location 1002
 run/0: instruction init-channel/2
-run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer"]} <- get-address {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
+run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer"]} <- get-address/24 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1002 is 1031
 run/0: ingredient 1 is first-full
@@ -72,12 +72,12 @@ run/0: address to copy is 1031
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1003
 run/0: instruction init-channel/3
-run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: location 1003 is 1031
 mem/0: storing 0 in location 1031
 run/0: instruction init-channel/4
-run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer"]} <- get-address {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer"]} <- get-address/24 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1002 is 1031
 run/0: ingredient 1 is first-free
@@ -85,23 +85,23 @@ run/0: address to copy is 1032
 run/0: product 0 is 1032
 mem/0: storing 1032 in location 1004
 run/0: instruction init-channel/5
-run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: location 1004 is 1032
 mem/0: storing 0 in location 1032
 run/0: instruction init-channel/6
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- next-ingredient 
+run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- next-ingredient/29 
 run/0: product 0 is 1
 mem/0: storing 1 in location 1005
 run/0: instruction init-channel/7
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- add {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- add/2 {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is capacity
 mem/0: location 1005 is 1
 run/0: ingredient 1 is 1
 run/0: product 0 is 2
 mem/0: storing 2 in location 1005
 run/0: instruction init-channel/8
-run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location"]} <- get-address {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
+run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location"]} <- get-address/24 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1002 is 1031
 run/0: ingredient 1 is data
@@ -109,45 +109,45 @@ run/0: address to copy is 1033
 run/0: product 0 is 1033
 mem/0: storing 1033 in location 1006
 run/0: instruction init-channel/9
-run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location", "deref": ]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
+run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location", "deref": ]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
 mem/0: location 1005 is 2
 mem/0: array size is 2
 mem/0: new alloc: 1034
 mem/0: location 1006 is 1033
 mem/0: storing 1034 in location 1033
 run/0: instruction init-channel/10
-run/0: reply {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]}
+run/0: reply/32 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]}
 mem/0: location 1002 is 1031
 run/0: result 0 is 1031
 mem/0: storing 1031 in location 1
 run/0: instruction run1001/1
-run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- write {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}, {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- write/109 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}, {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 mem/0: location 1 is 1031
 run/0: instruction write/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1037
 run/0: instruction write/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1039
 run/0: instruction write/2
-run/0: {name: "val", value: 2, type: 1, properties: ["val": "location"]} <- next-ingredient 
+run/0: {name: "val", value: 2, type: 1, properties: ["val": "location"]} <- next-ingredient/29 
 run/0: product 0 is 34
 mem/0: storing 34 in location 1040
 run/0: instruction write/4
-run/0: {name: "full", value: 3, type: 3, properties: ["full": "boolean"]} <- channel-full? {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
+run/0: {name: "full", value: 3, type: 3, properties: ["full": "boolean"]} <- channel-full?/110 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
 mem/0: location 1039 is 1031
 run/0: instruction channel-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1068
 run/0: instruction channel-full?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1070
 run/0: instruction channel-full?/2
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1070 is 1031
 run/0: ingredient 1 is first-free
@@ -157,25 +157,25 @@ mem/0: location 1032 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1071
 run/0: instruction channel-full?/3
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- add {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- add/2 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is tmp
 mem/0: location 1071 is 0
 run/0: ingredient 1 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1071
 run/0: instruction channel-full?/5
-run/0: {name: "len", value: 3, type: 1, properties: ["len": "integer"]} <- channel-capacity {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
+run/0: {name: "len", value: 3, type: 1, properties: ["len": "integer"]} <- channel-capacity/113 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
 mem/0: location 1070 is 1031
 run/0: instruction channel-capacity/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1099
 run/0: instruction channel-capacity/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1101
 run/0: instruction channel-capacity/2
-run/0: {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
+run/0: {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1101 is 1031
 run/0: ingredient 1 is data
@@ -185,16 +185,16 @@ mem/0: location 1033 is 1034
 run/0: product 0 is 1034
 mem/0: storing 1034 in location 1102
 run/0: instruction channel-capacity/3
-run/0: {name: "result", value: 3, type: 1, properties: ["result": "integer"]} <- length {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location", "deref": ]}
+run/0: {name: "result", value: 3, type: 1, properties: ["result": "integer"]} <- length/27 {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location", "deref": ]}
 mem/0: location 1102 is 1034
 mem/0: storing 2 in location 1103
 run/0: instruction channel-capacity/4
-run/0: reply {name: "result", value: 3, type: 1, properties: ["result": "integer"]}
+run/0: reply/32 {name: "result", value: 3, type: 1, properties: ["result": "integer"]}
 mem/0: location 1103 is 2
 run/0: result 0 is 2
 mem/0: storing 2 in location 1072
 run/0: instruction channel-full?/6
-run/0: {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "len", value: 3, type: 1, properties: ["len": "integer"]}
+run/0: {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "len", value: 3, type: 1, properties: ["len": "integer"]}
 run/0: ingredient 0 is tmp
 mem/0: location 1071 is 1
 run/0: ingredient 1 is len
@@ -202,13 +202,13 @@ mem/0: location 1072 is 2
 run/0: product 0 is 0
 mem/0: storing 0 in location 1073
 run/0: instruction channel-full?/7
-run/0: break-unless {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1073 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 9
 run/0: instruction channel-full?/10
-run/0: {name: "full", value: 5, type: 1, properties: ["full": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
+run/0: {name: "full", value: 5, type: 1, properties: ["full": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1070 is 1031
 run/0: ingredient 1 is first-full
@@ -218,7 +218,7 @@ mem/0: location 1031 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1074
 run/0: instruction channel-full?/11
-run/0: {name: "result", value: 6, type: 3, properties: ["result": "boolean"]} <- equal {name: "full", value: 5, type: 1, properties: ["full": "integer"]}, {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}
+run/0: {name: "result", value: 6, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 5, type: 1, properties: ["full": "integer"]}, {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}
 run/0: ingredient 0 is full
 mem/0: location 1074 is 0
 run/0: ingredient 1 is tmp
@@ -226,18 +226,18 @@ mem/0: location 1071 is 1
 run/0: product 0 is 0
 mem/0: storing 0 in location 1075
 run/0: instruction channel-full?/12
-run/0: reply {name: "result", value: 6, type: 3, properties: ["result": "boolean"]}
+run/0: reply/32 {name: "result", value: 6, type: 3, properties: ["result": "boolean"]}
 mem/0: location 1075 is 0
 run/0: result 0 is 0
 mem/0: storing 0 in location 1041
 run/0: instruction write/5
-run/0: break-unless {name: "full", value: 3, type: 3, properties: ["full": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "full", value: 3, type: 3, properties: ["full": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
 mem/0: location 1041 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 8
 run/0: instruction write/9
-run/0: {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
+run/0: {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1039 is 1031
 run/0: ingredient 1 is data
@@ -247,7 +247,7 @@ mem/0: location 1033 is 1034
 run/0: product 0 is 1034
 mem/0: storing 1034 in location 1043
 run/0: instruction write/10
-run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer"]} <- get-address {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer"]} <- get-address/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1039 is 1031
 run/0: ingredient 1 is first-free
@@ -255,7 +255,7 @@ run/0: address to copy is 1032
 run/0: product 0 is 1032
 mem/0: storing 1032 in location 1044
 run/0: instruction write/11
-run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location"]} <- index-address {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}, {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}
+run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location"]} <- index-address/26 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}, {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}
 run/0: ingredient 0 is circular-buffer
 mem/0: location 1043 is 1034
 run/0: ingredient 1 is {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}
@@ -265,13 +265,13 @@ run/0: address to copy is 1035
 run/0: product 0 is 1035
 mem/0: storing 1035 in location 1045
 run/0: instruction write/12
-run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location", "deref": ]} <- copy {name: "val", value: 2, type: 1, properties: ["val": "location"]}
+run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location", "deref": ]} <- copy/1 {name: "val", value: 2, type: 1, properties: ["val": "location"]}
 run/0: ingredient 0 is val
 mem/0: location 1040 is 34
 mem/0: location 1045 is 1035
 mem/0: storing 34 in location 1035
 run/0: instruction write/13
-run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- add {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- add/2 {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is free
 mem/0: location 1044 is 1032
 mem/0: location 1032 is 0
@@ -280,11 +280,11 @@ run/0: product 0 is 1
 mem/0: location 1044 is 1032
 mem/0: storing 1 in location 1032
 run/0: instruction write/15
-run/0: {name: "len", value: 8, type: 1, properties: ["len": "integer"]} <- length {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
+run/0: {name: "len", value: 8, type: 1, properties: ["len": "integer"]} <- length/27 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
 mem/0: location 1043 is 1034
 mem/0: storing 2 in location 1046
 run/0: instruction write/16
-run/0: {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "len", value: 8, type: 1, properties: ["len": "integer"]}
+run/0: {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "len", value: 8, type: 1, properties: ["len": "integer"]}
 run/0: ingredient 0 is free
 mem/0: location 1044 is 1032
 mem/0: location 1032 is 1
@@ -293,29 +293,29 @@ mem/0: location 1046 is 2
 run/0: product 0 is 0
 mem/0: storing 0 in location 1047
 run/0: instruction write/17
-run/0: break-unless {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1047 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 19
 run/0: instruction write/20
-run/0: reply {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "same-as-ingredient": "0"]}
+run/0: reply/32 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "same-as-ingredient": "0"]}
 mem/0: location 1039 is 1031
 run/0: result 0 is 1031
 mem/0: storing 1031 in location 1
 run/0: instruction run1001/2
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- channel-empty? {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- channel-empty?/112 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}
 mem/0: location 1 is 1031
 run/0: instruction channel-empty?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1130
 run/0: instruction channel-empty?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1132
 run/0: instruction channel-empty?/2
-run/0: {name: "full", value: 2, type: 1, properties: ["full": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
+run/0: {name: "full", value: 2, type: 1, properties: ["full": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1132 is 1031
 run/0: ingredient 1 is first-full
@@ -325,7 +325,7 @@ mem/0: location 1031 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1133
 run/0: instruction channel-empty?/3
-run/0: {name: "free", value: 3, type: 1, properties: ["free": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "free", value: 3, type: 1, properties: ["free": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1132 is 1031
 run/0: ingredient 1 is first-free
@@ -335,7 +335,7 @@ mem/0: location 1032 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1134
 run/0: instruction channel-empty?/4
-run/0: {name: "result", value: 4, type: 3, properties: ["result": "boolean"]} <- equal {name: "full", value: 2, type: 1, properties: ["full": "integer"]}, {name: "free", value: 3, type: 1, properties: ["free": "integer"]}
+run/0: {name: "result", value: 4, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 2, type: 1, properties: ["full": "integer"]}, {name: "free", value: 3, type: 1, properties: ["free": "integer"]}
 run/0: ingredient 0 is full
 mem/0: location 1133 is 0
 run/0: ingredient 1 is free
@@ -343,23 +343,23 @@ mem/0: location 1134 is 1
 run/0: product 0 is 0
 mem/0: storing 0 in location 1135
 run/0: instruction channel-empty?/5
-run/0: reply {name: "result", value: 4, type: 3, properties: ["result": "boolean"]}
+run/0: reply/32 {name: "result", value: 4, type: 3, properties: ["result": "boolean"]}
 mem/0: location 1135 is 0
 run/0: result 0 is 0
 mem/0: storing 0 in location 2
 run/0: instruction run1001/3
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- channel-full? {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- channel-full?/110 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}
 mem/0: location 1 is 1031
 run/0: instruction channel-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1161
 run/0: instruction channel-full?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1163
 run/0: instruction channel-full?/2
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1163 is 1031
 run/0: ingredient 1 is first-free
@@ -369,25 +369,25 @@ mem/0: location 1032 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1164
 run/0: instruction channel-full?/3
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- add {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- add/2 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is tmp
 mem/0: location 1164 is 1
 run/0: ingredient 1 is 1
 run/0: product 0 is 2
 mem/0: storing 2 in location 1164
 run/0: instruction channel-full?/5
-run/0: {name: "len", value: 3, type: 1, properties: ["len": "integer"]} <- channel-capacity {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
+run/0: {name: "len", value: 3, type: 1, properties: ["len": "integer"]} <- channel-capacity/113 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
 mem/0: location 1163 is 1031
 run/0: instruction channel-capacity/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1192
 run/0: instruction channel-capacity/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1194
 run/0: instruction channel-capacity/2
-run/0: {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
+run/0: {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1194 is 1031
 run/0: ingredient 1 is data
@@ -397,16 +397,16 @@ mem/0: location 1033 is 1034
 run/0: product 0 is 1034
 mem/0: storing 1034 in location 1195
 run/0: instruction channel-capacity/3
-run/0: {name: "result", value: 3, type: 1, properties: ["result": "integer"]} <- length {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location", "deref": ]}
+run/0: {name: "result", value: 3, type: 1, properties: ["result": "integer"]} <- length/27 {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location", "deref": ]}
 mem/0: location 1195 is 1034
 mem/0: storing 2 in location 1196
 run/0: instruction channel-capacity/4
-run/0: reply {name: "result", value: 3, type: 1, properties: ["result": "integer"]}
+run/0: reply/32 {name: "result", value: 3, type: 1, properties: ["result": "integer"]}
 mem/0: location 1196 is 2
 run/0: result 0 is 2
 mem/0: storing 2 in location 1165
 run/0: instruction channel-full?/6
-run/0: {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "len", value: 3, type: 1, properties: ["len": "integer"]}
+run/0: {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "len", value: 3, type: 1, properties: ["len": "integer"]}
 run/0: ingredient 0 is tmp
 mem/0: location 1164 is 2
 run/0: ingredient 1 is len
@@ -414,16 +414,16 @@ mem/0: location 1165 is 2
 run/0: product 0 is 1
 mem/0: storing 1 in location 1166
 run/0: instruction channel-full?/7
-run/0: break-unless {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1166 is 1
 run/0: ingredient 0 is 1
 run/0: jump-unless fell through
 run/0: instruction channel-full?/8
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 1164
 run/0: instruction channel-full?/10
-run/0: {name: "full", value: 5, type: 1, properties: ["full": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
+run/0: {name: "full", value: 5, type: 1, properties: ["full": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1163 is 1031
 run/0: ingredient 1 is first-full
@@ -433,7 +433,7 @@ mem/0: location 1031 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1167
 run/0: instruction channel-full?/11
-run/0: {name: "result", value: 6, type: 3, properties: ["result": "boolean"]} <- equal {name: "full", value: 5, type: 1, properties: ["full": "integer"]}, {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}
+run/0: {name: "result", value: 6, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 5, type: 1, properties: ["full": "integer"]}, {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}
 run/0: ingredient 0 is full
 mem/0: location 1167 is 0
 run/0: ingredient 1 is tmp
@@ -441,12 +441,12 @@ mem/0: location 1164 is 0
 run/0: product 0 is 1
 mem/0: storing 1 in location 1168
 run/0: instruction channel-full?/12
-run/0: reply {name: "result", value: 6, type: 3, properties: ["result": "boolean"]}
+run/0: reply/32 {name: "result", value: 6, type: 3, properties: ["result": "boolean"]}
 mem/0: location 1168 is 1
 run/0: result 0 is 1
 mem/0: storing 1 in location 3
 run/0: instruction channel-write-full/1
-run/0: memory-should-contain {name: "
+run/0: memory-should-contain/43 {name: "
     2 <- 0  # empty?
     3 <- 1  # full?
   ", value: 0, type: 0, properties: ["
diff --git a/cpp/.traces/channel-write-increments-free b/cpp/.traces/channel-write-increments-free
index 9f05e40a..1f9ae970 100644
--- a/cpp/.traces/channel-write-increments-free
+++ b/cpp/.traces/channel-write-increments-free
@@ -24,7 +24,7 @@ after-brace/0: memory-should-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: channel-write-increments-free
 run/0: instruction channel-write-increments-free/0
-run/0: run {name: "
+run/0: run/42 {name: "
     1:address:channel <- init-channel 3:literal/capacity
     1:address:channel <- write 1:address:channel, 34:literal
     2:integer <- get 1:address:channel/deref, first-full:offset
@@ -58,17 +58,17 @@ after-brace/0: write ...
 after-brace/0: get ...
 after-brace/0: get ...
 run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- init-channel {name: "3", value: 3, type: 0, properties: ["3": "literal", "capacity": ]}
+run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- init-channel/108 {name: "3", value: 3, type: 0, properties: ["3": "literal", "capacity": ]}
 run/0: instruction init-channel/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1000
 run/0: instruction init-channel/1
-run/0: {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]} <- new {name: "channel", value: 10, type: 0, properties: ["channel": "type"]}
+run/0: {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]} <- new/41 {name: "channel", value: 10, type: 0, properties: ["channel": "type"]}
 mem/0: new alloc: 1031
 mem/0: storing 1031 in location 1002
 run/0: instruction init-channel/2
-run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer"]} <- get-address {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
+run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer"]} <- get-address/24 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1002 is 1031
 run/0: ingredient 1 is first-full
@@ -76,12 +76,12 @@ run/0: address to copy is 1031
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1003
 run/0: instruction init-channel/3
-run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: location 1003 is 1031
 mem/0: storing 0 in location 1031
 run/0: instruction init-channel/4
-run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer"]} <- get-address {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer"]} <- get-address/24 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1002 is 1031
 run/0: ingredient 1 is first-free
@@ -89,23 +89,23 @@ run/0: address to copy is 1032
 run/0: product 0 is 1032
 mem/0: storing 1032 in location 1004
 run/0: instruction init-channel/5
-run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: location 1004 is 1032
 mem/0: storing 0 in location 1032
 run/0: instruction init-channel/6
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- next-ingredient 
+run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- next-ingredient/29 
 run/0: product 0 is 3
 mem/0: storing 3 in location 1005
 run/0: instruction init-channel/7
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- add {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- add/2 {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is capacity
 mem/0: location 1005 is 3
 run/0: ingredient 1 is 1
 run/0: product 0 is 4
 mem/0: storing 4 in location 1005
 run/0: instruction init-channel/8
-run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location"]} <- get-address {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
+run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location"]} <- get-address/24 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1002 is 1031
 run/0: ingredient 1 is data
@@ -113,45 +113,45 @@ run/0: address to copy is 1033
 run/0: product 0 is 1033
 mem/0: storing 1033 in location 1006
 run/0: instruction init-channel/9
-run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location", "deref": ]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
+run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location", "deref": ]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
 mem/0: location 1005 is 4
 mem/0: array size is 4
 mem/0: new alloc: 1034
 mem/0: location 1006 is 1033
 mem/0: storing 1034 in location 1033
 run/0: instruction init-channel/10
-run/0: reply {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]}
+run/0: reply/32 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]}
 mem/0: location 1002 is 1031
 run/0: result 0 is 1031
 mem/0: storing 1031 in location 1
 run/0: instruction run1001/1
-run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- write {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}, {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- write/109 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}, {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 mem/0: location 1 is 1031
 run/0: instruction write/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1039
 run/0: instruction write/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1041
 run/0: instruction write/2
-run/0: {name: "val", value: 2, type: 1, properties: ["val": "location"]} <- next-ingredient 
+run/0: {name: "val", value: 2, type: 1, properties: ["val": "location"]} <- next-ingredient/29 
 run/0: product 0 is 34
 mem/0: storing 34 in location 1042
 run/0: instruction write/4
-run/0: {name: "full", value: 3, type: 3, properties: ["full": "boolean"]} <- channel-full? {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
+run/0: {name: "full", value: 3, type: 3, properties: ["full": "boolean"]} <- channel-full?/110 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
 mem/0: location 1041 is 1031
 run/0: instruction channel-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1070
 run/0: instruction channel-full?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1072
 run/0: instruction channel-full?/2
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1072 is 1031
 run/0: ingredient 1 is first-free
@@ -161,25 +161,25 @@ mem/0: location 1032 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1073
 run/0: instruction channel-full?/3
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- add {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- add/2 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is tmp
 mem/0: location 1073 is 0
 run/0: ingredient 1 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1073
 run/0: instruction channel-full?/5
-run/0: {name: "len", value: 3, type: 1, properties: ["len": "integer"]} <- channel-capacity {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
+run/0: {name: "len", value: 3, type: 1, properties: ["len": "integer"]} <- channel-capacity/113 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
 mem/0: location 1072 is 1031
 run/0: instruction channel-capacity/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1101
 run/0: instruction channel-capacity/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1103
 run/0: instruction channel-capacity/2
-run/0: {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
+run/0: {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1103 is 1031
 run/0: ingredient 1 is data
@@ -189,16 +189,16 @@ mem/0: location 1033 is 1034
 run/0: product 0 is 1034
 mem/0: storing 1034 in location 1104
 run/0: instruction channel-capacity/3
-run/0: {name: "result", value: 3, type: 1, properties: ["result": "integer"]} <- length {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location", "deref": ]}
+run/0: {name: "result", value: 3, type: 1, properties: ["result": "integer"]} <- length/27 {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location", "deref": ]}
 mem/0: location 1104 is 1034
 mem/0: storing 4 in location 1105
 run/0: instruction channel-capacity/4
-run/0: reply {name: "result", value: 3, type: 1, properties: ["result": "integer"]}
+run/0: reply/32 {name: "result", value: 3, type: 1, properties: ["result": "integer"]}
 mem/0: location 1105 is 4
 run/0: result 0 is 4
 mem/0: storing 4 in location 1074
 run/0: instruction channel-full?/6
-run/0: {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "len", value: 3, type: 1, properties: ["len": "integer"]}
+run/0: {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "len", value: 3, type: 1, properties: ["len": "integer"]}
 run/0: ingredient 0 is tmp
 mem/0: location 1073 is 1
 run/0: ingredient 1 is len
@@ -206,13 +206,13 @@ mem/0: location 1074 is 4
 run/0: product 0 is 0
 mem/0: storing 0 in location 1075
 run/0: instruction channel-full?/7
-run/0: break-unless {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1075 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 9
 run/0: instruction channel-full?/10
-run/0: {name: "full", value: 5, type: 1, properties: ["full": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
+run/0: {name: "full", value: 5, type: 1, properties: ["full": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1072 is 1031
 run/0: ingredient 1 is first-full
@@ -222,7 +222,7 @@ mem/0: location 1031 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1076
 run/0: instruction channel-full?/11
-run/0: {name: "result", value: 6, type: 3, properties: ["result": "boolean"]} <- equal {name: "full", value: 5, type: 1, properties: ["full": "integer"]}, {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}
+run/0: {name: "result", value: 6, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 5, type: 1, properties: ["full": "integer"]}, {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}
 run/0: ingredient 0 is full
 mem/0: location 1076 is 0
 run/0: ingredient 1 is tmp
@@ -230,18 +230,18 @@ mem/0: location 1073 is 1
 run/0: product 0 is 0
 mem/0: storing 0 in location 1077
 run/0: instruction channel-full?/12
-run/0: reply {name: "result", value: 6, type: 3, properties: ["result": "boolean"]}
+run/0: reply/32 {name: "result", value: 6, type: 3, properties: ["result": "boolean"]}
 mem/0: location 1077 is 0
 run/0: result 0 is 0
 mem/0: storing 0 in location 1043
 run/0: instruction write/5
-run/0: break-unless {name: "full", value: 3, type: 3, properties: ["full": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "full", value: 3, type: 3, properties: ["full": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
 mem/0: location 1043 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 8
 run/0: instruction write/9
-run/0: {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
+run/0: {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1041 is 1031
 run/0: ingredient 1 is data
@@ -251,7 +251,7 @@ mem/0: location 1033 is 1034
 run/0: product 0 is 1034
 mem/0: storing 1034 in location 1045
 run/0: instruction write/10
-run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer"]} <- get-address {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer"]} <- get-address/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1041 is 1031
 run/0: ingredient 1 is first-free
@@ -259,7 +259,7 @@ run/0: address to copy is 1032
 run/0: product 0 is 1032
 mem/0: storing 1032 in location 1046
 run/0: instruction write/11
-run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location"]} <- index-address {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}, {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}
+run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location"]} <- index-address/26 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}, {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}
 run/0: ingredient 0 is circular-buffer
 mem/0: location 1045 is 1034
 run/0: ingredient 1 is {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}
@@ -269,13 +269,13 @@ run/0: address to copy is 1035
 run/0: product 0 is 1035
 mem/0: storing 1035 in location 1047
 run/0: instruction write/12
-run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location", "deref": ]} <- copy {name: "val", value: 2, type: 1, properties: ["val": "location"]}
+run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location", "deref": ]} <- copy/1 {name: "val", value: 2, type: 1, properties: ["val": "location"]}
 run/0: ingredient 0 is val
 mem/0: location 1042 is 34
 mem/0: location 1047 is 1035
 mem/0: storing 34 in location 1035
 run/0: instruction write/13
-run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- add {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- add/2 {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is free
 mem/0: location 1046 is 1032
 mem/0: location 1032 is 0
@@ -284,11 +284,11 @@ run/0: product 0 is 1
 mem/0: location 1046 is 1032
 mem/0: storing 1 in location 1032
 run/0: instruction write/15
-run/0: {name: "len", value: 8, type: 1, properties: ["len": "integer"]} <- length {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
+run/0: {name: "len", value: 8, type: 1, properties: ["len": "integer"]} <- length/27 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
 mem/0: location 1045 is 1034
 mem/0: storing 4 in location 1048
 run/0: instruction write/16
-run/0: {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "len", value: 8, type: 1, properties: ["len": "integer"]}
+run/0: {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "len", value: 8, type: 1, properties: ["len": "integer"]}
 run/0: ingredient 0 is free
 mem/0: location 1046 is 1032
 mem/0: location 1032 is 1
@@ -297,18 +297,18 @@ mem/0: location 1048 is 4
 run/0: product 0 is 0
 mem/0: storing 0 in location 1049
 run/0: instruction write/17
-run/0: break-unless {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1049 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 19
 run/0: instruction write/20
-run/0: reply {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "same-as-ingredient": "0"]}
+run/0: reply/32 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "same-as-ingredient": "0"]}
 mem/0: location 1041 is 1031
 run/0: result 0 is 1031
 mem/0: storing 1031 in location 1
 run/0: instruction run1001/2
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- get {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- get/23 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 1031
 run/0: ingredient 1 is first-full
@@ -318,7 +318,7 @@ mem/0: location 1031 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 2
 run/0: instruction run1001/3
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- get {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- get/23 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 1031
 run/0: ingredient 1 is first-free
@@ -328,7 +328,7 @@ mem/0: location 1032 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 3
 run/0: instruction channel-write-increments-free/1
-run/0: memory-should-contain {name: "
+run/0: memory-should-contain/43 {name: "
     2 <- 0  # first-full
     3 <- 1  # first-free
   ", value: 0, type: 0, properties: ["
diff --git a/cpp/.traces/channel-write-not-empty b/cpp/.traces/channel-write-not-empty
index cdc54864..e4758cd3 100644
--- a/cpp/.traces/channel-write-not-empty
+++ b/cpp/.traces/channel-write-not-empty
@@ -24,7 +24,7 @@ after-brace/0: memory-should-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: channel-write-not-empty
 run/0: instruction channel-write-not-empty/0
-run/0: run {name: "
+run/0: run/42 {name: "
     1:address:channel <- init-channel 3:literal/capacity
     1:address:channel <- write 1:address:channel, 34:literal
     2:integer <- channel-empty? 1:address:channel
@@ -54,17 +54,17 @@ after-brace/0: write ...
 after-brace/0: channel-empty? ...
 after-brace/0: channel-full? ...
 run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- init-channel {name: "3", value: 3, type: 0, properties: ["3": "literal", "capacity": ]}
+run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- init-channel/108 {name: "3", value: 3, type: 0, properties: ["3": "literal", "capacity": ]}
 run/0: instruction init-channel/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1000
 run/0: instruction init-channel/1
-run/0: {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]} <- new {name: "channel", value: 10, type: 0, properties: ["channel": "type"]}
+run/0: {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]} <- new/41 {name: "channel", value: 10, type: 0, properties: ["channel": "type"]}
 mem/0: new alloc: 1031
 mem/0: storing 1031 in location 1002
 run/0: instruction init-channel/2
-run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer"]} <- get-address {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
+run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer"]} <- get-address/24 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1002 is 1031
 run/0: ingredient 1 is first-full
@@ -72,12 +72,12 @@ run/0: address to copy is 1031
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1003
 run/0: instruction init-channel/3
-run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "full", value: 2, type: 2-1, properties: ["full": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: location 1003 is 1031
 mem/0: storing 0 in location 1031
 run/0: instruction init-channel/4
-run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer"]} <- get-address {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer"]} <- get-address/24 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1002 is 1031
 run/0: ingredient 1 is first-free
@@ -85,23 +85,23 @@ run/0: address to copy is 1032
 run/0: product 0 is 1032
 mem/0: storing 1032 in location 1004
 run/0: instruction init-channel/5
-run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "free", value: 3, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: location 1004 is 1032
 mem/0: storing 0 in location 1032
 run/0: instruction init-channel/6
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- next-ingredient 
+run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- next-ingredient/29 
 run/0: product 0 is 3
 mem/0: storing 3 in location 1005
 run/0: instruction init-channel/7
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- add {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- add/2 {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is capacity
 mem/0: location 1005 is 3
 run/0: ingredient 1 is 1
 run/0: product 0 is 4
 mem/0: storing 4 in location 1005
 run/0: instruction init-channel/8
-run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location"]} <- get-address {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
+run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location"]} <- get-address/24 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1002 is 1031
 run/0: ingredient 1 is data
@@ -109,45 +109,45 @@ run/0: address to copy is 1033
 run/0: product 0 is 1033
 mem/0: storing 1033 in location 1006
 run/0: instruction init-channel/9
-run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location", "deref": ]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
+run/0: {name: "dest", value: 5, type: 2-2-5-1, properties: ["dest": "address":"address":"array":"location", "deref": ]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
 mem/0: location 1005 is 4
 mem/0: array size is 4
 mem/0: new alloc: 1034
 mem/0: location 1006 is 1033
 mem/0: storing 1034 in location 1033
 run/0: instruction init-channel/10
-run/0: reply {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]}
+run/0: reply/32 {name: "result", value: 1, type: 2-10, properties: ["result": "address":"channel"]}
 mem/0: location 1002 is 1031
 run/0: result 0 is 1031
 mem/0: storing 1031 in location 1
 run/0: instruction run1001/1
-run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- write {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}, {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]} <- write/109 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}, {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 mem/0: location 1 is 1031
 run/0: instruction write/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1039
 run/0: instruction write/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1041
 run/0: instruction write/2
-run/0: {name: "val", value: 2, type: 1, properties: ["val": "location"]} <- next-ingredient 
+run/0: {name: "val", value: 2, type: 1, properties: ["val": "location"]} <- next-ingredient/29 
 run/0: product 0 is 34
 mem/0: storing 34 in location 1042
 run/0: instruction write/4
-run/0: {name: "full", value: 3, type: 3, properties: ["full": "boolean"]} <- channel-full? {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
+run/0: {name: "full", value: 3, type: 3, properties: ["full": "boolean"]} <- channel-full?/110 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
 mem/0: location 1041 is 1031
 run/0: instruction channel-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1070
 run/0: instruction channel-full?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1072
 run/0: instruction channel-full?/2
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1072 is 1031
 run/0: ingredient 1 is first-free
@@ -157,25 +157,25 @@ mem/0: location 1032 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1073
 run/0: instruction channel-full?/3
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- add {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- add/2 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is tmp
 mem/0: location 1073 is 0
 run/0: ingredient 1 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1073
 run/0: instruction channel-full?/5
-run/0: {name: "len", value: 3, type: 1, properties: ["len": "integer"]} <- channel-capacity {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
+run/0: {name: "len", value: 3, type: 1, properties: ["len": "integer"]} <- channel-capacity/113 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
 mem/0: location 1072 is 1031
 run/0: instruction channel-capacity/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1101
 run/0: instruction channel-capacity/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1103
 run/0: instruction channel-capacity/2
-run/0: {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
+run/0: {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1103 is 1031
 run/0: ingredient 1 is data
@@ -185,16 +185,16 @@ mem/0: location 1033 is 1034
 run/0: product 0 is 1034
 mem/0: storing 1034 in location 1104
 run/0: instruction channel-capacity/3
-run/0: {name: "result", value: 3, type: 1, properties: ["result": "integer"]} <- length {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location", "deref": ]}
+run/0: {name: "result", value: 3, type: 1, properties: ["result": "integer"]} <- length/27 {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location", "deref": ]}
 mem/0: location 1104 is 1034
 mem/0: storing 4 in location 1105
 run/0: instruction channel-capacity/4
-run/0: reply {name: "result", value: 3, type: 1, properties: ["result": "integer"]}
+run/0: reply/32 {name: "result", value: 3, type: 1, properties: ["result": "integer"]}
 mem/0: location 1105 is 4
 run/0: result 0 is 4
 mem/0: storing 4 in location 1074
 run/0: instruction channel-full?/6
-run/0: {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "len", value: 3, type: 1, properties: ["len": "integer"]}
+run/0: {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "len", value: 3, type: 1, properties: ["len": "integer"]}
 run/0: ingredient 0 is tmp
 mem/0: location 1073 is 1
 run/0: ingredient 1 is len
@@ -202,13 +202,13 @@ mem/0: location 1074 is 4
 run/0: product 0 is 0
 mem/0: storing 0 in location 1075
 run/0: instruction channel-full?/7
-run/0: break-unless {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1075 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 9
 run/0: instruction channel-full?/10
-run/0: {name: "full", value: 5, type: 1, properties: ["full": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
+run/0: {name: "full", value: 5, type: 1, properties: ["full": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1072 is 1031
 run/0: ingredient 1 is first-full
@@ -218,7 +218,7 @@ mem/0: location 1031 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1076
 run/0: instruction channel-full?/11
-run/0: {name: "result", value: 6, type: 3, properties: ["result": "boolean"]} <- equal {name: "full", value: 5, type: 1, properties: ["full": "integer"]}, {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}
+run/0: {name: "result", value: 6, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 5, type: 1, properties: ["full": "integer"]}, {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}
 run/0: ingredient 0 is full
 mem/0: location 1076 is 0
 run/0: ingredient 1 is tmp
@@ -226,18 +226,18 @@ mem/0: location 1073 is 1
 run/0: product 0 is 0
 mem/0: storing 0 in location 1077
 run/0: instruction channel-full?/12
-run/0: reply {name: "result", value: 6, type: 3, properties: ["result": "boolean"]}
+run/0: reply/32 {name: "result", value: 6, type: 3, properties: ["result": "boolean"]}
 mem/0: location 1077 is 0
 run/0: result 0 is 0
 mem/0: storing 0 in location 1043
 run/0: instruction write/5
-run/0: break-unless {name: "full", value: 3, type: 3, properties: ["full": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "full", value: 3, type: 3, properties: ["full": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
 mem/0: location 1043 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 8
 run/0: instruction write/9
-run/0: {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
+run/0: {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1041 is 1031
 run/0: ingredient 1 is data
@@ -247,7 +247,7 @@ mem/0: location 1033 is 1034
 run/0: product 0 is 1034
 mem/0: storing 1034 in location 1045
 run/0: instruction write/10
-run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer"]} <- get-address {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer"]} <- get-address/24 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1041 is 1031
 run/0: ingredient 1 is first-free
@@ -255,7 +255,7 @@ run/0: address to copy is 1032
 run/0: product 0 is 1032
 mem/0: storing 1032 in location 1046
 run/0: instruction write/11
-run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location"]} <- index-address {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}, {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}
+run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location"]} <- index-address/26 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}, {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}
 run/0: ingredient 0 is circular-buffer
 mem/0: location 1045 is 1034
 run/0: ingredient 1 is {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}
@@ -265,13 +265,13 @@ run/0: address to copy is 1035
 run/0: product 0 is 1035
 mem/0: storing 1035 in location 1047
 run/0: instruction write/12
-run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location", "deref": ]} <- copy {name: "val", value: 2, type: 1, properties: ["val": "location"]}
+run/0: {name: "dest", value: 7, type: 2-1, properties: ["dest": "address":"location", "deref": ]} <- copy/1 {name: "val", value: 2, type: 1, properties: ["val": "location"]}
 run/0: ingredient 0 is val
 mem/0: location 1042 is 34
 mem/0: location 1047 is 1035
 mem/0: storing 34 in location 1035
 run/0: instruction write/13
-run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- add {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]} <- add/2 {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is free
 mem/0: location 1046 is 1032
 mem/0: location 1032 is 0
@@ -280,11 +280,11 @@ run/0: product 0 is 1
 mem/0: location 1046 is 1032
 mem/0: storing 1 in location 1032
 run/0: instruction write/15
-run/0: {name: "len", value: 8, type: 1, properties: ["len": "integer"]} <- length {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
+run/0: {name: "len", value: 8, type: 1, properties: ["len": "integer"]} <- length/27 {name: "circular-buffer", value: 5, type: 2-5-1, properties: ["circular-buffer": "address":"array":"location", "deref": ]}
 mem/0: location 1045 is 1034
 mem/0: storing 4 in location 1048
 run/0: instruction write/16
-run/0: {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "len", value: 8, type: 1, properties: ["len": "integer"]}
+run/0: {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "free", value: 6, type: 2-1, properties: ["free": "address":"integer", "deref": ]}, {name: "len", value: 8, type: 1, properties: ["len": "integer"]}
 run/0: ingredient 0 is free
 mem/0: location 1046 is 1032
 mem/0: location 1032 is 1
@@ -293,29 +293,29 @@ mem/0: location 1048 is 4
 run/0: product 0 is 0
 mem/0: storing 0 in location 1049
 run/0: instruction write/17
-run/0: break-unless {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "at-end?", value: 9, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1049 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 19
 run/0: instruction write/20
-run/0: reply {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "same-as-ingredient": "0"]}
+run/0: reply/32 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "same-as-ingredient": "0"]}
 mem/0: location 1041 is 1031
 run/0: result 0 is 1031
 mem/0: storing 1031 in location 1
 run/0: instruction run1001/2
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- channel-empty? {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- channel-empty?/112 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}
 mem/0: location 1 is 1031
 run/0: instruction channel-empty?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1132
 run/0: instruction channel-empty?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1134
 run/0: instruction channel-empty?/2
-run/0: {name: "full", value: 2, type: 1, properties: ["full": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
+run/0: {name: "full", value: 2, type: 1, properties: ["full": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1134 is 1031
 run/0: ingredient 1 is first-full
@@ -325,7 +325,7 @@ mem/0: location 1031 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1135
 run/0: instruction channel-empty?/3
-run/0: {name: "free", value: 3, type: 1, properties: ["free": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "free", value: 3, type: 1, properties: ["free": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1134 is 1031
 run/0: ingredient 1 is first-free
@@ -335,7 +335,7 @@ mem/0: location 1032 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1136
 run/0: instruction channel-empty?/4
-run/0: {name: "result", value: 4, type: 3, properties: ["result": "boolean"]} <- equal {name: "full", value: 2, type: 1, properties: ["full": "integer"]}, {name: "free", value: 3, type: 1, properties: ["free": "integer"]}
+run/0: {name: "result", value: 4, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 2, type: 1, properties: ["full": "integer"]}, {name: "free", value: 3, type: 1, properties: ["free": "integer"]}
 run/0: ingredient 0 is full
 mem/0: location 1135 is 0
 run/0: ingredient 1 is free
@@ -343,23 +343,23 @@ mem/0: location 1136 is 1
 run/0: product 0 is 0
 mem/0: storing 0 in location 1137
 run/0: instruction channel-empty?/5
-run/0: reply {name: "result", value: 4, type: 3, properties: ["result": "boolean"]}
+run/0: reply/32 {name: "result", value: 4, type: 3, properties: ["result": "boolean"]}
 mem/0: location 1137 is 0
 run/0: result 0 is 0
 mem/0: storing 0 in location 2
 run/0: instruction run1001/3
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- channel-full? {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- channel-full?/110 {name: "1", value: 1, type: 2-10, properties: ["1": "address":"channel"]}
 mem/0: location 1 is 1031
 run/0: instruction channel-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1163
 run/0: instruction channel-full?/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1165
 run/0: instruction channel-full?/2
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
+run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-free", value: 1, type: 0, properties: ["first-free": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1165 is 1031
 run/0: ingredient 1 is first-free
@@ -369,25 +369,25 @@ mem/0: location 1032 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1166
 run/0: instruction channel-full?/3
-run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- add {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]} <- add/2 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is tmp
 mem/0: location 1166 is 1
 run/0: ingredient 1 is 1
 run/0: product 0 is 2
 mem/0: storing 2 in location 1166
 run/0: instruction channel-full?/5
-run/0: {name: "len", value: 3, type: 1, properties: ["len": "integer"]} <- channel-capacity {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
+run/0: {name: "len", value: 3, type: 1, properties: ["len": "integer"]} <- channel-capacity/113 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]}
 mem/0: location 1165 is 1031
 run/0: instruction channel-capacity/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1194
 run/0: instruction channel-capacity/1
-run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient 
+run/0: {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1196
 run/0: instruction channel-capacity/2
-run/0: {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
+run/0: {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "data", value: 2, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1196 is 1031
 run/0: ingredient 1 is data
@@ -397,16 +397,16 @@ mem/0: location 1033 is 1034
 run/0: product 0 is 1034
 mem/0: storing 1034 in location 1197
 run/0: instruction channel-capacity/3
-run/0: {name: "result", value: 3, type: 1, properties: ["result": "integer"]} <- length {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location", "deref": ]}
+run/0: {name: "result", value: 3, type: 1, properties: ["result": "integer"]} <- length/27 {name: "q", value: 2, type: 2-5-1, properties: ["q": "address":"array":"location", "deref": ]}
 mem/0: location 1197 is 1034
 mem/0: storing 4 in location 1198
 run/0: instruction channel-capacity/4
-run/0: reply {name: "result", value: 3, type: 1, properties: ["result": "integer"]}
+run/0: reply/32 {name: "result", value: 3, type: 1, properties: ["result": "integer"]}
 mem/0: location 1198 is 4
 run/0: result 0 is 4
 mem/0: storing 4 in location 1167
 run/0: instruction channel-full?/6
-run/0: {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "len", value: 3, type: 1, properties: ["len": "integer"]}
+run/0: {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]} <- greater-or-equal/16 {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}, {name: "len", value: 3, type: 1, properties: ["len": "integer"]}
 run/0: ingredient 0 is tmp
 mem/0: location 1166 is 2
 run/0: ingredient 1 is len
@@ -414,13 +414,13 @@ mem/0: location 1167 is 4
 run/0: product 0 is 0
 mem/0: storing 0 in location 1168
 run/0: instruction channel-full?/7
-run/0: break-unless {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "at-end?", value: 4, type: 3, properties: ["at-end?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1168 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 9
 run/0: instruction channel-full?/10
-run/0: {name: "full", value: 5, type: 1, properties: ["full": "integer"]} <- get {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
+run/0: {name: "full", value: 5, type: 1, properties: ["full": "integer"]} <- get/23 {name: "chan", value: 1, type: 2-10, properties: ["chan": "address":"channel", "deref": ]}, {name: "first-full", value: 0, type: 0, properties: ["first-full": "offset"]}
 run/0: ingredient 0 is chan
 mem/0: location 1165 is 1031
 run/0: ingredient 1 is first-full
@@ -430,7 +430,7 @@ mem/0: location 1031 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1169
 run/0: instruction channel-full?/11
-run/0: {name: "result", value: 6, type: 3, properties: ["result": "boolean"]} <- equal {name: "full", value: 5, type: 1, properties: ["full": "integer"]}, {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}
+run/0: {name: "result", value: 6, type: 3, properties: ["result": "boolean"]} <- equal/13 {name: "full", value: 5, type: 1, properties: ["full": "integer"]}, {name: "tmp", value: 2, type: 1, properties: ["tmp": "integer"]}
 run/0: ingredient 0 is full
 mem/0: location 1169 is 0
 run/0: ingredient 1 is tmp
@@ -438,12 +438,12 @@ mem/0: location 1166 is 2
 run/0: product 0 is 0
 mem/0: storing 0 in location 1170
 run/0: instruction channel-full?/12
-run/0: reply {name: "result", value: 6, type: 3, properties: ["result": "boolean"]}
+run/0: reply/32 {name: "result", value: 6, type: 3, properties: ["result": "boolean"]}
 mem/0: location 1170 is 0
 run/0: result 0 is 0
 mem/0: storing 0 in location 3
 run/0: instruction channel-write-not-empty/1
-run/0: memory-should-contain {name: "
+run/0: memory-should-contain/43 {name: "
     2 <- 0  # empty?
     3 <- 0  # full?
   ", value: 0, type: 0, properties: ["
diff --git a/cpp/.traces/check_string_in_memory b/cpp/.traces/check_string_in_memory
index 277d3396..bffcabc6 100644
--- a/cpp/.traces/check_string_in_memory
+++ b/cpp/.traces/check_string_in_memory
@@ -22,7 +22,7 @@ after-brace/0: memory-should-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: check_string_in_memory
 run/0: instruction check_string_in_memory/0
-run/0: run {name: "
+run/0: run/42 {name: "
     1:integer <- copy 3:literal
     2:character <- copy 97:literal  # 'a'
     3:character <- copy 98:literal  # 'b'
@@ -51,23 +51,23 @@ after-brace/0: copy ...
 after-brace/0: copy ...
 after-brace/0: copy ...
 run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
 run/0: ingredient 0 is 3
 mem/0: storing 3 in location 1
 run/0: instruction run1001/1
-run/0: {name: "2", value: 2, type: 4, properties: ["2": "character"]} <- copy {name: "97", value: 97, type: 0, properties: ["97": "literal"]}
+run/0: {name: "2", value: 2, type: 4, properties: ["2": "character"]} <- copy/1 {name: "97", value: 97, type: 0, properties: ["97": "literal"]}
 run/0: ingredient 0 is 97
 mem/0: storing 97 in location 2
 run/0: instruction run1001/2
-run/0: {name: "3", value: 3, type: 4, properties: ["3": "character"]} <- copy {name: "98", value: 98, type: 0, properties: ["98": "literal"]}
+run/0: {name: "3", value: 3, type: 4, properties: ["3": "character"]} <- copy/1 {name: "98", value: 98, type: 0, properties: ["98": "literal"]}
 run/0: ingredient 0 is 98
 mem/0: storing 98 in location 3
 run/0: instruction run1001/3
-run/0: {name: "4", value: 4, type: 4, properties: ["4": "character"]} <- copy {name: "99", value: 99, type: 0, properties: ["99": "literal"]}
+run/0: {name: "4", value: 4, type: 4, properties: ["4": "character"]} <- copy/1 {name: "99", value: 99, type: 0, properties: ["99": "literal"]}
 run/0: ingredient 0 is 99
 mem/0: storing 99 in location 4
 run/0: instruction check_string_in_memory/1
-run/0: memory-should-contain {name: "
+run/0: memory-should-contain/43 {name: "
     1:string <- [abc]
   ", value: 0, type: 0, properties: ["
     1:string <- [abc]
diff --git a/cpp/.traces/check_trace b/cpp/.traces/check_trace
index c0e19982..e6f6c360 100644
--- a/cpp/.traces/check_trace
+++ b/cpp/.traces/check_trace
@@ -16,7 +16,7 @@ after-brace/0: trace-should-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: check_trace
 run/0: instruction check_trace/0
-run/0: run {name: "
+run/0: run/42 {name: "
     1:integer <- add 2:literal, 2:literal
   ", value: 0, type: 0, properties: ["
     1:integer <- add 2:literal, 2:literal
@@ -28,13 +28,13 @@ parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
 after-brace/0: recipe run1001
 after-brace/0: add ...
 run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- add {name: "2", value: 2, type: 0, properties: ["2": "literal"]}, {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- add/2 {name: "2", value: 2, type: 0, properties: ["2": "literal"]}, {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
 run/0: ingredient 0 is 2
 run/0: ingredient 1 is 2
 run/0: product 0 is 4
 mem/0: storing 4 in location 1
 run/0: instruction check_trace/1
-run/0: trace-should-contain {name: "
+run/0: trace-should-contain/44 {name: "
     mem: storing 4 in location 1
   ", value: 0, type: 0, properties: ["
     mem: storing 4 in location 1
diff --git a/cpp/.traces/check_trace_instruction b/cpp/.traces/check_trace_instruction
index 08417a62..ef94da20 100644
--- a/cpp/.traces/check_trace_instruction
+++ b/cpp/.traces/check_trace_instruction
@@ -16,7 +16,7 @@ after-brace/0: trace-should-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: check_trace_instruction
 run/0: instruction check_trace_instruction/0
-run/0: run {name: "
+run/0: run/42 {name: "
     trace [foo], [aaa]
   ", value: 0, type: 0, properties: ["
     trace [foo], [aaa]
@@ -27,10 +27,10 @@ parse/0:   ingredient: {name: "aaa", value: 0, type: 0, properties: ["aaa": "lit
 after-brace/0: recipe run1001
 after-brace/0: trace ...
 run/0: instruction run1001/0
-run/0: trace {name: "foo", value: 0, type: 0, properties: ["foo": "literal-string"]}, {name: "aaa", value: 0, type: 0, properties: ["aaa": "literal-string"]}
+run/0: trace/18 {name: "foo", value: 0, type: 0, properties: ["foo": "literal-string"]}, {name: "aaa", value: 0, type: 0, properties: ["aaa": "literal-string"]}
 foo/0: aaa
 run/0: instruction check_trace_instruction/1
-run/0: trace-should-contain {name: "
+run/0: trace-should-contain/44 {name: "
     foo: aaa
   ", value: 0, type: 0, properties: ["
     foo: aaa
diff --git a/cpp/.traces/check_trace_negative b/cpp/.traces/check_trace_negative
index 2d6c6dd5..1912420a 100644
--- a/cpp/.traces/check_trace_negative
+++ b/cpp/.traces/check_trace_negative
@@ -16,7 +16,7 @@ after-brace/0: trace-should-not-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: check_trace_negative
 run/0: instruction check_trace_negative/0
-run/0: run {name: "
+run/0: run/42 {name: "
     1:integer <- add 2:literal, 2:literal
   ", value: 0, type: 0, properties: ["
     1:integer <- add 2:literal, 2:literal
@@ -28,13 +28,13 @@ parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
 after-brace/0: recipe run1001
 after-brace/0: add ...
 run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- add {name: "2", value: 2, type: 0, properties: ["2": "literal"]}, {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- add/2 {name: "2", value: 2, type: 0, properties: ["2": "literal"]}, {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
 run/0: ingredient 0 is 2
 run/0: ingredient 1 is 2
 run/0: product 0 is 4
 mem/0: storing 4 in location 1
 run/0: instruction check_trace_negative/1
-run/0: trace-should-not-contain {name: "
+run/0: trace-should-not-contain/45 {name: "
     mem: storing 5 in location 1
   ", value: 0, type: 0, properties: ["
     mem: storing 5 in location 1
diff --git a/cpp/.traces/clear-line-erases-printed-characters b/cpp/.traces/clear-line-erases-printed-characters
index 76e0c603..25eb1b97 100644
--- a/cpp/.traces/clear-line-erases-printed-characters
+++ b/cpp/.traces/clear-line-erases-printed-characters
@@ -46,7 +46,7 @@ after-brace/0: memory-should-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: clear-line-erases-printed-characters
 run/0: instruction clear-line-erases-printed-characters/0
-run/0: run {name: "
+run/0: run/42 {name: "
 #?     $start-tracing #? 3
     1:address:screen <- init-fake-screen 3:literal/width, 2:literal/height
     # print a character
@@ -101,17 +101,17 @@ after-brace/0: clear-line ...
 after-brace/0: get ...
 after-brace/0: copy ...
 run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen"]} <- init-fake-screen {name: "3", value: 3, type: 0, properties: ["3": "literal", "width": ]}, {name: "2", value: 2, type: 0, properties: ["2": "literal", "height": ]}
+run/0: {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen"]} <- init-fake-screen/115 {name: "3", value: 3, type: 0, properties: ["3": "literal", "width": ]}, {name: "2", value: 2, type: 0, properties: ["2": "literal", "height": ]}
 run/0: instruction init-fake-screen/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal", "capacity": ]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal", "capacity": ]}
 mem/0: array size is 30
 mem/0: new alloc: 1000
 run/0: instruction init-fake-screen/1
-run/0: {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen"]} <- new {name: "screen", value: 11, type: 0, properties: ["screen": "type"]}
+run/0: {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen"]} <- new/41 {name: "screen", value: 11, type: 0, properties: ["screen": "type"]}
 mem/0: new alloc: 1031
 mem/0: storing 1031 in location 1002
 run/0: instruction init-fake-screen/2
-run/0: {name: "width", value: 2, type: 2-1, properties: ["width": "address":"integer"]} <- get-address {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]}
+run/0: {name: "width", value: 2, type: 2-1, properties: ["width": "address":"integer"]} <- get-address/24 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1002 is 1031
 run/0: ingredient 1 is num-columns
@@ -119,12 +119,12 @@ run/0: address to copy is 1032
 run/0: product 0 is 1032
 mem/0: storing 1032 in location 1003
 run/0: instruction init-fake-screen/3
-run/0: {name: "width", value: 2, type: 2-1, properties: ["width": "address":"integer", "deref": ]} <- next-ingredient 
+run/0: {name: "width", value: 2, type: 2-1, properties: ["width": "address":"integer", "deref": ]} <- next-ingredient/29 
 run/0: product 0 is 3
 mem/0: location 1003 is 1032
 mem/0: storing 3 in location 1032
 run/0: instruction init-fake-screen/4
-run/0: {name: "height", value: 3, type: 2-1, properties: ["height": "address":"integer"]} <- get-address {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "num-rows", value: 0, type: 0, properties: ["num-rows": "offset"]}
+run/0: {name: "height", value: 3, type: 2-1, properties: ["height": "address":"integer"]} <- get-address/24 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "num-rows", value: 0, type: 0, properties: ["num-rows": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1002 is 1031
 run/0: ingredient 1 is num-rows
@@ -132,12 +132,12 @@ run/0: address to copy is 1031
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1004
 run/0: instruction init-fake-screen/5
-run/0: {name: "height", value: 3, type: 2-1, properties: ["height": "address":"integer", "deref": ]} <- next-ingredient 
+run/0: {name: "height", value: 3, type: 2-1, properties: ["height": "address":"integer", "deref": ]} <- next-ingredient/29 
 run/0: product 0 is 2
 mem/0: location 1004 is 1031
 mem/0: storing 2 in location 1031
 run/0: instruction init-fake-screen/6
-run/0: {name: "row", value: 4, type: 2-1, properties: ["row": "address":"integer"]} <- get-address {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]}
+run/0: {name: "row", value: 4, type: 2-1, properties: ["row": "address":"integer"]} <- get-address/24 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1002 is 1031
 run/0: ingredient 1 is cursor-row
@@ -145,12 +145,12 @@ run/0: address to copy is 1033
 run/0: product 0 is 1033
 mem/0: storing 1033 in location 1005
 run/0: instruction init-fake-screen/7
-run/0: {name: "row", value: 4, type: 2-1, properties: ["row": "address":"integer", "deref": ]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "row", value: 4, type: 2-1, properties: ["row": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: location 1005 is 1033
 mem/0: storing 0 in location 1033
 run/0: instruction init-fake-screen/8
-run/0: {name: "column", value: 5, type: 2-1, properties: ["column": "address":"integer"]} <- get-address {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
+run/0: {name: "column", value: 5, type: 2-1, properties: ["column": "address":"integer"]} <- get-address/24 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1002 is 1031
 run/0: ingredient 1 is cursor-column
@@ -158,12 +158,12 @@ run/0: address to copy is 1034
 run/0: product 0 is 1034
 mem/0: storing 1034 in location 1006
 run/0: instruction init-fake-screen/9
-run/0: {name: "column", value: 5, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "column", value: 5, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: location 1006 is 1034
 mem/0: storing 0 in location 1034
 run/0: instruction init-fake-screen/10
-run/0: {name: "bufsize", value: 6, type: 1, properties: ["bufsize": "integer"]} <- multiply {name: "width", value: 2, type: 2-1, properties: ["width": "address":"integer", "deref": ]}, {name: "height", value: 3, type: 2-1, properties: ["height": "address":"integer", "deref": ]}
+run/0: {name: "bufsize", value: 6, type: 1, properties: ["bufsize": "integer"]} <- multiply/4 {name: "width", value: 2, type: 2-1, properties: ["width": "address":"integer", "deref": ]}, {name: "height", value: 3, type: 2-1, properties: ["height": "address":"integer", "deref": ]}
 run/0: ingredient 0 is width
 mem/0: location 1003 is 1032
 mem/0: location 1032 is 3
@@ -174,7 +174,7 @@ run/0: ingredient 1 is 2
 run/0: product 0 is 6
 mem/0: storing 6 in location 1007
 run/0: instruction init-fake-screen/11
-run/0: {name: "buf", value: 7, type: 2-2-5-4, properties: ["buf": "address":"address":"array":"character"]} <- get-address {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
+run/0: {name: "buf", value: 7, type: 2-2-5-4, properties: ["buf": "address":"address":"array":"character"]} <- get-address/24 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1002 is 1031
 run/0: ingredient 1 is data
@@ -182,30 +182,30 @@ run/0: address to copy is 1035
 run/0: product 0 is 1035
 mem/0: storing 1035 in location 1008
 run/0: instruction init-fake-screen/12
-run/0: {name: "buf", value: 7, type: 2-2-5-4, properties: ["buf": "address":"address":"array":"character", "deref": ]} <- new {name: "character", value: 0, type: 0, properties: ["character": "literal"]}, {name: "bufsize", value: 6, type: 1, properties: ["bufsize": "integer"]}
+run/0: {name: "buf", value: 7, type: 2-2-5-4, properties: ["buf": "address":"address":"array":"character", "deref": ]} <- new/41 {name: "character", value: 0, type: 0, properties: ["character": "literal"]}, {name: "bufsize", value: 6, type: 1, properties: ["bufsize": "integer"]}
 mem/0: location 1007 is 6
 mem/0: array size is 6
 mem/0: new alloc: 1036
 mem/0: location 1008 is 1035
 mem/0: storing 1036 in location 1035
 run/0: instruction init-fake-screen/13
-run/0: clear-screen {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen"]}
+run/0: clear-screen/116 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen"]}
 mem/0: location 1002 is 1031
 run/0: instruction clear-screen/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1043
 run/0: instruction clear-screen/1
-run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient 
+run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1045
 run/0: instruction clear-screen/3
-run/0: break-unless {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 12, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 12, type: , properties: ["": ]}
 mem/0: location 1045 is 1031
 run/0: ingredient 0 is 1031
 run/0: jump-unless fell through
 run/0: instruction clear-screen/4
-run/0: {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
+run/0: {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get/23 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is x
 mem/0: location 1045 is 1031
 run/0: ingredient 1 is data
@@ -215,15 +215,15 @@ mem/0: location 1035 is 1036
 run/0: product 0 is 1036
 mem/0: storing 1036 in location 1046
 run/0: instruction clear-screen/5
-run/0: {name: "max", value: 3, type: 1, properties: ["max": "integer"]} <- length {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}
+run/0: {name: "max", value: 3, type: 1, properties: ["max": "integer"]} <- length/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}
 mem/0: location 1046 is 1036
 mem/0: storing 6 in location 1047
 run/0: instruction clear-screen/6
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 1048
 run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
+run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1048 is 0
 run/0: ingredient 1 is max
@@ -231,12 +231,12 @@ mem/0: location 1047 is 6
 run/0: product 0 is 0
 mem/0: storing 0 in location 1049
 run/0: instruction clear-screen/9
-run/0: break-if {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
 mem/0: location 1049 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
+run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/26 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is buf
 mem/0: location 1046 is 1036
 run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
@@ -245,23 +245,23 @@ run/0: address to copy is 1037
 run/0: product 0 is 1037
 mem/0: storing 1037 in location 1050
 run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
+run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
 run/0: ingredient 0 is  
 mem/0: location 1050 is 1037
 mem/0: storing 0 in location 1037
 run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1048 is 0
 run/0: ingredient 1 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1048
 run/0: instruction clear-screen/13
-run/0: loop {name: "", value: -6, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
 run/0: ingredient 0 is -6
 run/0: jumping to instruction 8
 run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
+run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1048 is 1
 run/0: ingredient 1 is max
@@ -269,12 +269,12 @@ mem/0: location 1047 is 6
 run/0: product 0 is 0
 mem/0: storing 0 in location 1049
 run/0: instruction clear-screen/9
-run/0: break-if {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
 mem/0: location 1049 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
+run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/26 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is buf
 mem/0: location 1046 is 1036
 run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
@@ -283,23 +283,23 @@ run/0: address to copy is 1038
 run/0: product 0 is 1038
 mem/0: storing 1038 in location 1050
 run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
+run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
 run/0: ingredient 0 is  
 mem/0: location 1050 is 1038
 mem/0: storing 0 in location 1038
 run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1048 is 1
 run/0: ingredient 1 is 1
 run/0: product 0 is 2
 mem/0: storing 2 in location 1048
 run/0: instruction clear-screen/13
-run/0: loop {name: "", value: -6, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
 run/0: ingredient 0 is -6
 run/0: jumping to instruction 8
 run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
+run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1048 is 2
 run/0: ingredient 1 is max
@@ -307,12 +307,12 @@ mem/0: location 1047 is 6
 run/0: product 0 is 0
 mem/0: storing 0 in location 1049
 run/0: instruction clear-screen/9
-run/0: break-if {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
 mem/0: location 1049 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
+run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/26 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is buf
 mem/0: location 1046 is 1036
 run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
@@ -321,23 +321,23 @@ run/0: address to copy is 1039
 run/0: product 0 is 1039
 mem/0: storing 1039 in location 1050
 run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
+run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
 run/0: ingredient 0 is  
 mem/0: location 1050 is 1039
 mem/0: storing 0 in location 1039
 run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1048 is 2
 run/0: ingredient 1 is 1
 run/0: product 0 is 3
 mem/0: storing 3 in location 1048
 run/0: instruction clear-screen/13
-run/0: loop {name: "", value: -6, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
 run/0: ingredient 0 is -6
 run/0: jumping to instruction 8
 run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
+run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1048 is 3
 run/0: ingredient 1 is max
@@ -345,12 +345,12 @@ mem/0: location 1047 is 6
 run/0: product 0 is 0
 mem/0: storing 0 in location 1049
 run/0: instruction clear-screen/9
-run/0: break-if {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
 mem/0: location 1049 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
+run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/26 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is buf
 mem/0: location 1046 is 1036
 run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
@@ -359,23 +359,23 @@ run/0: address to copy is 1040
 run/0: product 0 is 1040
 mem/0: storing 1040 in location 1050
 run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
+run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
 run/0: ingredient 0 is  
 mem/0: location 1050 is 1040
 mem/0: storing 0 in location 1040
 run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1048 is 3
 run/0: ingredient 1 is 1
 run/0: product 0 is 4
 mem/0: storing 4 in location 1048
 run/0: instruction clear-screen/13
-run/0: loop {name: "", value: -6, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
 run/0: ingredient 0 is -6
 run/0: jumping to instruction 8
 run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
+run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1048 is 4
 run/0: ingredient 1 is max
@@ -383,12 +383,12 @@ mem/0: location 1047 is 6
 run/0: product 0 is 0
 mem/0: storing 0 in location 1049
 run/0: instruction clear-screen/9
-run/0: break-if {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
 mem/0: location 1049 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
+run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/26 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is buf
 mem/0: location 1046 is 1036
 run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
@@ -397,23 +397,23 @@ run/0: address to copy is 1041
 run/0: product 0 is 1041
 mem/0: storing 1041 in location 1050
 run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
+run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
 run/0: ingredient 0 is  
 mem/0: location 1050 is 1041
 mem/0: storing 0 in location 1041
 run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1048 is 4
 run/0: ingredient 1 is 1
 run/0: product 0 is 5
 mem/0: storing 5 in location 1048
 run/0: instruction clear-screen/13
-run/0: loop {name: "", value: -6, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
 run/0: ingredient 0 is -6
 run/0: jumping to instruction 8
 run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
+run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1048 is 5
 run/0: ingredient 1 is max
@@ -421,12 +421,12 @@ mem/0: location 1047 is 6
 run/0: product 0 is 0
 mem/0: storing 0 in location 1049
 run/0: instruction clear-screen/9
-run/0: break-if {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
 mem/0: location 1049 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
+run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/26 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is buf
 mem/0: location 1046 is 1036
 run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
@@ -435,23 +435,23 @@ run/0: address to copy is 1042
 run/0: product 0 is 1042
 mem/0: storing 1042 in location 1050
 run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
+run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
 run/0: ingredient 0 is  
 mem/0: location 1050 is 1042
 mem/0: storing 0 in location 1042
 run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1048 is 5
 run/0: ingredient 1 is 1
 run/0: product 0 is 6
 mem/0: storing 6 in location 1048
 run/0: instruction clear-screen/13
-run/0: loop {name: "", value: -6, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
 run/0: ingredient 0 is -6
 run/0: jumping to instruction 8
 run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
+run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1048 is 6
 run/0: ingredient 1 is max
@@ -459,41 +459,41 @@ mem/0: location 1047 is 6
 run/0: product 0 is 1
 mem/0: storing 1 in location 1049
 run/0: instruction clear-screen/9
-run/0: break-if {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
 mem/0: location 1049 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
 run/0: jumping to instruction 14
 run/0: instruction clear-screen/15
-run/0: reply {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
+run/0: reply/32 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
 mem/0: location 1045 is 1031
 run/0: instruction init-fake-screen/14
-run/0: reply {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen"]}
+run/0: reply/32 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen"]}
 mem/0: location 1002 is 1031
 run/0: result 0 is 1031
 mem/0: storing 1031 in location 1
 run/0: instruction run1001/1
-run/0: {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen"]} <- print-character {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen"]}, {name: "97", value: 97, type: 0, properties: ["97": "literal"]}
+run/0: {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen"]} <- print-character/117 {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen"]}, {name: "97", value: 97, type: 0, properties: ["97": "literal"]}
 mem/0: location 1 is 1031
 run/0: instruction print-character/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1074
 run/0: instruction print-character/1
-run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient 
+run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1076
 run/0: instruction print-character/2
-run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient 
+run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient/29 
 run/0: product 0 is 97
 mem/0: storing 97 in location 1077
 run/0: instruction print-character/4
-run/0: break-unless {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 14, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 14, type: , properties: ["": ]}
 mem/0: location 1076 is 1031
 run/0: ingredient 0 is 1031
 run/0: jump-unless fell through
 run/0: instruction print-character/5
-run/0: {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer"]} <- get-address {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]}
+run/0: {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer"]} <- get-address/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]}
 run/0: ingredient 0 is x
 mem/0: location 1076 is 1031
 run/0: ingredient 1 is cursor-row
@@ -501,7 +501,7 @@ run/0: address to copy is 1033
 run/0: product 0 is 1033
 mem/0: storing 1033 in location 1078
 run/0: instruction print-character/6
-run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer"]} <- get-address {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
+run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer"]} <- get-address/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
 run/0: ingredient 0 is x
 mem/0: location 1076 is 1031
 run/0: ingredient 1 is cursor-column
@@ -509,7 +509,7 @@ run/0: address to copy is 1034
 run/0: product 0 is 1034
 mem/0: storing 1034 in location 1079
 run/0: instruction print-character/7
-run/0: {name: "width", value: 5, type: 1, properties: ["width": "integer"]} <- get {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]}
+run/0: {name: "width", value: 5, type: 1, properties: ["width": "integer"]} <- get/23 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]}
 run/0: ingredient 0 is x
 mem/0: location 1076 is 1031
 run/0: ingredient 1 is num-columns
@@ -519,7 +519,7 @@ mem/0: location 1032 is 3
 run/0: product 0 is 3
 mem/0: storing 3 in location 1080
 run/0: instruction print-character/8
-run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- multiply {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
+run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- multiply/4 {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
 run/0: ingredient 0 is row
 mem/0: location 1078 is 1033
 mem/0: location 1033 is 0
@@ -529,7 +529,7 @@ run/0: ingredient 1 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1081
 run/0: instruction print-character/9
-run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- add {name: "index", value: 6, type: 1, properties: ["index": "integer"]}, {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}
+run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- add/2 {name: "index", value: 6, type: 1, properties: ["index": "integer"]}, {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}
 run/0: ingredient 0 is index
 mem/0: location 1081 is 0
 run/0: ingredient 1 is column
@@ -538,7 +538,7 @@ mem/0: location 1034 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1081
 run/0: instruction print-character/10
-run/0: {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
+run/0: {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get/23 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is x
 mem/0: location 1076 is 1031
 run/0: ingredient 1 is data
@@ -548,7 +548,7 @@ mem/0: location 1035 is 1036
 run/0: product 0 is 1036
 mem/0: storing 1036 in location 1082
 run/0: instruction print-character/11
-run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character"]} <- index-address {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
+run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character"]} <- index-address/26 {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
 run/0: ingredient 0 is buf
 mem/0: location 1082 is 1036
 run/0: ingredient 1 is {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
@@ -557,13 +557,13 @@ run/0: address to copy is 1037
 run/0: product 0 is 1037
 mem/0: storing 1037 in location 1083
 run/0: instruction print-character/12
-run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character", "deref": ]} <- copy {name: "c", value: 2, type: 4, properties: ["c": "character"]}
+run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character", "deref": ]} <- copy/1 {name: "c", value: 2, type: 4, properties: ["c": "character"]}
 run/0: ingredient 0 is c
 mem/0: location 1077 is 97
 mem/0: location 1083 is 1037
 mem/0: storing 97 in location 1037
 run/0: instruction print-character/14
-run/0: {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]} <- equal {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
+run/0: {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]} <- equal/13 {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
 run/0: ingredient 0 is column
 mem/0: location 1079 is 1034
 mem/0: location 1034 is 0
@@ -572,12 +572,12 @@ mem/0: location 1080 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1084
 run/0: instruction print-character/15
-run/0: break-if {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-if/11 {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1084 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction print-character/16
-run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- add {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- add/2 {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is column
 mem/0: location 1079 is 1034
 mem/0: location 1034 is 0
@@ -586,36 +586,36 @@ run/0: product 0 is 1
 mem/0: location 1079 is 1034
 mem/0: storing 1 in location 1034
 run/0: instruction print-character/18
-run/0: reply {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
+run/0: reply/32 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
 mem/0: location 1076 is 1031
 run/0: result 0 is 1031
 mem/0: storing 1031 in location 1
 run/0: instruction run1001/2
-run/0: {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen"]} <- move-cursor {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal", "row": ]}, {name: "0", value: 0, type: 0, properties: ["0": "literal", "column": ]}
+run/0: {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen"]} <- move-cursor/120 {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal", "row": ]}, {name: "0", value: 0, type: 0, properties: ["0": "literal", "column": ]}
 mem/0: location 1 is 1031
 run/0: instruction move-cursor/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1105
 run/0: instruction move-cursor/1
-run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient 
+run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1107
 run/0: instruction move-cursor/2
-run/0: {name: "new-row", value: 2, type: 1, properties: ["new-row": "integer"]} <- next-ingredient 
+run/0: {name: "new-row", value: 2, type: 1, properties: ["new-row": "integer"]} <- next-ingredient/29 
 run/0: product 0 is 0
 mem/0: storing 0 in location 1108
 run/0: instruction move-cursor/3
-run/0: {name: "new-column", value: 3, type: 1, properties: ["new-column": "integer"]} <- next-ingredient 
+run/0: {name: "new-column", value: 3, type: 1, properties: ["new-column": "integer"]} <- next-ingredient/29 
 run/0: product 0 is 0
 mem/0: storing 0 in location 1109
 run/0: instruction move-cursor/5
-run/0: break-unless {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 5, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 5, type: , properties: ["": ]}
 mem/0: location 1107 is 1031
 run/0: ingredient 0 is 1031
 run/0: jump-unless fell through
 run/0: instruction move-cursor/6
-run/0: {name: "row", value: 4, type: 2-1, properties: ["row": "address":"integer"]} <- get-address {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]}
+run/0: {name: "row", value: 4, type: 2-1, properties: ["row": "address":"integer"]} <- get-address/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]}
 run/0: ingredient 0 is x
 mem/0: location 1107 is 1031
 run/0: ingredient 1 is cursor-row
@@ -623,13 +623,13 @@ run/0: address to copy is 1033
 run/0: product 0 is 1033
 mem/0: storing 1033 in location 1110
 run/0: instruction move-cursor/7
-run/0: {name: "row", value: 4, type: 2-1, properties: ["row": "address":"integer", "deref": ]} <- copy {name: "new-row", value: 2, type: 1, properties: ["new-row": "integer"]}
+run/0: {name: "row", value: 4, type: 2-1, properties: ["row": "address":"integer", "deref": ]} <- copy/1 {name: "new-row", value: 2, type: 1, properties: ["new-row": "integer"]}
 run/0: ingredient 0 is new-row
 mem/0: location 1108 is 0
 mem/0: location 1110 is 1033
 mem/0: storing 0 in location 1033
 run/0: instruction move-cursor/8
-run/0: {name: "column", value: 5, type: 2-1, properties: ["column": "address":"integer"]} <- get-address {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
+run/0: {name: "column", value: 5, type: 2-1, properties: ["column": "address":"integer"]} <- get-address/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
 run/0: ingredient 0 is x
 mem/0: location 1107 is 1031
 run/0: ingredient 1 is cursor-column
@@ -637,34 +637,34 @@ run/0: address to copy is 1034
 run/0: product 0 is 1034
 mem/0: storing 1034 in location 1111
 run/0: instruction move-cursor/9
-run/0: {name: "column", value: 5, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- copy {name: "new-column", value: 3, type: 1, properties: ["new-column": "integer"]}
+run/0: {name: "column", value: 5, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- copy/1 {name: "new-column", value: 3, type: 1, properties: ["new-column": "integer"]}
 run/0: ingredient 0 is new-column
 mem/0: location 1109 is 0
 mem/0: location 1111 is 1034
 mem/0: storing 0 in location 1034
 run/0: instruction move-cursor/10
-run/0: reply {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
+run/0: reply/32 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
 mem/0: location 1107 is 1031
 run/0: result 0 is 1031
 mem/0: storing 1031 in location 1
 run/0: instruction run1001/3
-run/0: {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen"]} <- clear-line {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen"]}
+run/0: {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen"]} <- clear-line/118 {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen"]}
 mem/0: location 1 is 1031
 run/0: instruction clear-line/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1136
 run/0: instruction clear-line/1
-run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient 
+run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1138
 run/0: instruction clear-line/3
-run/0: break-unless {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 11, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 11, type: , properties: ["": ]}
 mem/0: location 1138 is 1031
 run/0: ingredient 0 is 1031
 run/0: jump-unless fell through
 run/0: instruction clear-line/4
-run/0: {name: "n", value: 2, type: 1, properties: ["n": "integer"]} <- get {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]}
+run/0: {name: "n", value: 2, type: 1, properties: ["n": "integer"]} <- get/23 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]}
 run/0: ingredient 0 is x
 mem/0: location 1138 is 1031
 run/0: ingredient 1 is num-columns
@@ -674,7 +674,7 @@ mem/0: location 1032 is 3
 run/0: product 0 is 3
 mem/0: storing 3 in location 1139
 run/0: instruction clear-line/5
-run/0: {name: "column", value: 3, type: 2-1, properties: ["column": "address":"integer"]} <- get-address {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
+run/0: {name: "column", value: 3, type: 2-1, properties: ["column": "address":"integer"]} <- get-address/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
 run/0: ingredient 0 is x
 mem/0: location 1138 is 1031
 run/0: ingredient 1 is cursor-column
@@ -682,13 +682,13 @@ run/0: address to copy is 1034
 run/0: product 0 is 1034
 mem/0: storing 1034 in location 1140
 run/0: instruction clear-line/6
-run/0: {name: "original-column", value: 4, type: 1, properties: ["original-column": "integer"]} <- copy {name: "column", value: 3, type: 2-1, properties: ["column": "address":"integer", "deref": ]}
+run/0: {name: "original-column", value: 4, type: 1, properties: ["original-column": "integer"]} <- copy/1 {name: "column", value: 3, type: 2-1, properties: ["column": "address":"integer", "deref": ]}
 run/0: ingredient 0 is column
 mem/0: location 1140 is 1034
 mem/0: location 1034 is 0
 mem/0: storing 0 in location 1141
 run/0: instruction clear-line/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "column", value: 3, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "n", value: 2, type: 1, properties: ["n": "integer"]}
+run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "column", value: 3, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "n", value: 2, type: 1, properties: ["n": "integer"]}
 run/0: ingredient 0 is column
 mem/0: location 1140 is 1034
 mem/0: location 1034 is 0
@@ -697,32 +697,32 @@ mem/0: location 1139 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1142
 run/0: instruction clear-line/9
-run/0: break-if {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
 mem/0: location 1142 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction clear-line/10
-run/0: print-character {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
+run/0: print-character/117 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
 mem/0: location 1138 is 1031
 run/0: instruction print-character/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1167
 run/0: instruction print-character/1
-run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient 
+run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1169
 run/0: instruction print-character/2
-run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient 
+run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient/29 
 run/0: product 0 is 0
 mem/0: storing 0 in location 1170
 run/0: instruction print-character/4
-run/0: break-unless {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 14, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 14, type: , properties: ["": ]}
 mem/0: location 1169 is 1031
 run/0: ingredient 0 is 1031
 run/0: jump-unless fell through
 run/0: instruction print-character/5
-run/0: {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer"]} <- get-address {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]}
+run/0: {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer"]} <- get-address/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]}
 run/0: ingredient 0 is x
 mem/0: location 1169 is 1031
 run/0: ingredient 1 is cursor-row
@@ -730,7 +730,7 @@ run/0: address to copy is 1033
 run/0: product 0 is 1033
 mem/0: storing 1033 in location 1171
 run/0: instruction print-character/6
-run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer"]} <- get-address {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
+run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer"]} <- get-address/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
 run/0: ingredient 0 is x
 mem/0: location 1169 is 1031
 run/0: ingredient 1 is cursor-column
@@ -738,7 +738,7 @@ run/0: address to copy is 1034
 run/0: product 0 is 1034
 mem/0: storing 1034 in location 1172
 run/0: instruction print-character/7
-run/0: {name: "width", value: 5, type: 1, properties: ["width": "integer"]} <- get {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]}
+run/0: {name: "width", value: 5, type: 1, properties: ["width": "integer"]} <- get/23 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]}
 run/0: ingredient 0 is x
 mem/0: location 1169 is 1031
 run/0: ingredient 1 is num-columns
@@ -748,7 +748,7 @@ mem/0: location 1032 is 3
 run/0: product 0 is 3
 mem/0: storing 3 in location 1173
 run/0: instruction print-character/8
-run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- multiply {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
+run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- multiply/4 {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
 run/0: ingredient 0 is row
 mem/0: location 1171 is 1033
 mem/0: location 1033 is 0
@@ -758,7 +758,7 @@ run/0: ingredient 1 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1174
 run/0: instruction print-character/9
-run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- add {name: "index", value: 6, type: 1, properties: ["index": "integer"]}, {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}
+run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- add/2 {name: "index", value: 6, type: 1, properties: ["index": "integer"]}, {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}
 run/0: ingredient 0 is index
 mem/0: location 1174 is 0
 run/0: ingredient 1 is column
@@ -767,7 +767,7 @@ mem/0: location 1034 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1174
 run/0: instruction print-character/10
-run/0: {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
+run/0: {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get/23 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is x
 mem/0: location 1169 is 1031
 run/0: ingredient 1 is data
@@ -777,7 +777,7 @@ mem/0: location 1035 is 1036
 run/0: product 0 is 1036
 mem/0: storing 1036 in location 1175
 run/0: instruction print-character/11
-run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character"]} <- index-address {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
+run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character"]} <- index-address/26 {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
 run/0: ingredient 0 is buf
 mem/0: location 1175 is 1036
 run/0: ingredient 1 is {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
@@ -786,13 +786,13 @@ run/0: address to copy is 1037
 run/0: product 0 is 1037
 mem/0: storing 1037 in location 1176
 run/0: instruction print-character/12
-run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character", "deref": ]} <- copy {name: "c", value: 2, type: 4, properties: ["c": "character"]}
+run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character", "deref": ]} <- copy/1 {name: "c", value: 2, type: 4, properties: ["c": "character"]}
 run/0: ingredient 0 is c
 mem/0: location 1170 is 0
 mem/0: location 1176 is 1037
 mem/0: storing 0 in location 1037
 run/0: instruction print-character/14
-run/0: {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]} <- equal {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
+run/0: {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]} <- equal/13 {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
 run/0: ingredient 0 is column
 mem/0: location 1172 is 1034
 mem/0: location 1034 is 0
@@ -801,12 +801,12 @@ mem/0: location 1173 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1177
 run/0: instruction print-character/15
-run/0: break-if {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-if/11 {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1177 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction print-character/16
-run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- add {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- add/2 {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is column
 mem/0: location 1172 is 1034
 mem/0: location 1034 is 0
@@ -815,14 +815,14 @@ run/0: product 0 is 1
 mem/0: location 1172 is 1034
 mem/0: storing 1 in location 1034
 run/0: instruction print-character/18
-run/0: reply {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
+run/0: reply/32 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
 mem/0: location 1169 is 1031
 run/0: instruction clear-line/11
-run/0: loop {name: "", value: -4, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -4, type: , properties: ["": ]}
 run/0: ingredient 0 is -4
 run/0: jumping to instruction 8
 run/0: instruction clear-line/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "column", value: 3, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "n", value: 2, type: 1, properties: ["n": "integer"]}
+run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "column", value: 3, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "n", value: 2, type: 1, properties: ["n": "integer"]}
 run/0: ingredient 0 is column
 mem/0: location 1140 is 1034
 mem/0: location 1034 is 1
@@ -831,32 +831,32 @@ mem/0: location 1139 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1142
 run/0: instruction clear-line/9
-run/0: break-if {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
 mem/0: location 1142 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction clear-line/10
-run/0: print-character {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
+run/0: print-character/117 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
 mem/0: location 1138 is 1031
 run/0: instruction print-character/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1198
 run/0: instruction print-character/1
-run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient 
+run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1200
 run/0: instruction print-character/2
-run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient 
+run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient/29 
 run/0: product 0 is 0
 mem/0: storing 0 in location 1201
 run/0: instruction print-character/4
-run/0: break-unless {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 14, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 14, type: , properties: ["": ]}
 mem/0: location 1200 is 1031
 run/0: ingredient 0 is 1031
 run/0: jump-unless fell through
 run/0: instruction print-character/5
-run/0: {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer"]} <- get-address {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]}
+run/0: {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer"]} <- get-address/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]}
 run/0: ingredient 0 is x
 mem/0: location 1200 is 1031
 run/0: ingredient 1 is cursor-row
@@ -864,7 +864,7 @@ run/0: address to copy is 1033
 run/0: product 0 is 1033
 mem/0: storing 1033 in location 1202
 run/0: instruction print-character/6
-run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer"]} <- get-address {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
+run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer"]} <- get-address/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
 run/0: ingredient 0 is x
 mem/0: location 1200 is 1031
 run/0: ingredient 1 is cursor-column
@@ -872,7 +872,7 @@ run/0: address to copy is 1034
 run/0: product 0 is 1034
 mem/0: storing 1034 in location 1203
 run/0: instruction print-character/7
-run/0: {name: "width", value: 5, type: 1, properties: ["width": "integer"]} <- get {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]}
+run/0: {name: "width", value: 5, type: 1, properties: ["width": "integer"]} <- get/23 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]}
 run/0: ingredient 0 is x
 mem/0: location 1200 is 1031
 run/0: ingredient 1 is num-columns
@@ -882,7 +882,7 @@ mem/0: location 1032 is 3
 run/0: product 0 is 3
 mem/0: storing 3 in location 1204
 run/0: instruction print-character/8
-run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- multiply {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
+run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- multiply/4 {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
 run/0: ingredient 0 is row
 mem/0: location 1202 is 1033
 mem/0: location 1033 is 0
@@ -892,7 +892,7 @@ run/0: ingredient 1 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1205
 run/0: instruction print-character/9
-run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- add {name: "index", value: 6, type: 1, properties: ["index": "integer"]}, {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}
+run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- add/2 {name: "index", value: 6, type: 1, properties: ["index": "integer"]}, {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}
 run/0: ingredient 0 is index
 mem/0: location 1205 is 0
 run/0: ingredient 1 is column
@@ -901,7 +901,7 @@ mem/0: location 1034 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1205
 run/0: instruction print-character/10
-run/0: {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
+run/0: {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get/23 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is x
 mem/0: location 1200 is 1031
 run/0: ingredient 1 is data
@@ -911,7 +911,7 @@ mem/0: location 1035 is 1036
 run/0: product 0 is 1036
 mem/0: storing 1036 in location 1206
 run/0: instruction print-character/11
-run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character"]} <- index-address {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
+run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character"]} <- index-address/26 {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
 run/0: ingredient 0 is buf
 mem/0: location 1206 is 1036
 run/0: ingredient 1 is {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
@@ -920,13 +920,13 @@ run/0: address to copy is 1038
 run/0: product 0 is 1038
 mem/0: storing 1038 in location 1207
 run/0: instruction print-character/12
-run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character", "deref": ]} <- copy {name: "c", value: 2, type: 4, properties: ["c": "character"]}
+run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character", "deref": ]} <- copy/1 {name: "c", value: 2, type: 4, properties: ["c": "character"]}
 run/0: ingredient 0 is c
 mem/0: location 1201 is 0
 mem/0: location 1207 is 1038
 mem/0: storing 0 in location 1038
 run/0: instruction print-character/14
-run/0: {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]} <- equal {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
+run/0: {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]} <- equal/13 {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
 run/0: ingredient 0 is column
 mem/0: location 1203 is 1034
 mem/0: location 1034 is 1
@@ -935,12 +935,12 @@ mem/0: location 1204 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1208
 run/0: instruction print-character/15
-run/0: break-if {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-if/11 {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1208 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction print-character/16
-run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- add {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- add/2 {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is column
 mem/0: location 1203 is 1034
 mem/0: location 1034 is 1
@@ -949,14 +949,14 @@ run/0: product 0 is 2
 mem/0: location 1203 is 1034
 mem/0: storing 2 in location 1034
 run/0: instruction print-character/18
-run/0: reply {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
+run/0: reply/32 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
 mem/0: location 1200 is 1031
 run/0: instruction clear-line/11
-run/0: loop {name: "", value: -4, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -4, type: , properties: ["": ]}
 run/0: ingredient 0 is -4
 run/0: jumping to instruction 8
 run/0: instruction clear-line/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "column", value: 3, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "n", value: 2, type: 1, properties: ["n": "integer"]}
+run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "column", value: 3, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "n", value: 2, type: 1, properties: ["n": "integer"]}
 run/0: ingredient 0 is column
 mem/0: location 1140 is 1034
 mem/0: location 1034 is 2
@@ -965,32 +965,32 @@ mem/0: location 1139 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1142
 run/0: instruction clear-line/9
-run/0: break-if {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
 mem/0: location 1142 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction clear-line/10
-run/0: print-character {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
+run/0: print-character/117 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
 mem/0: location 1138 is 1031
 run/0: instruction print-character/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1229
 run/0: instruction print-character/1
-run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient 
+run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1231
 run/0: instruction print-character/2
-run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient 
+run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient/29 
 run/0: product 0 is 0
 mem/0: storing 0 in location 1232
 run/0: instruction print-character/4
-run/0: break-unless {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 14, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 14, type: , properties: ["": ]}
 mem/0: location 1231 is 1031
 run/0: ingredient 0 is 1031
 run/0: jump-unless fell through
 run/0: instruction print-character/5
-run/0: {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer"]} <- get-address {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]}
+run/0: {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer"]} <- get-address/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]}
 run/0: ingredient 0 is x
 mem/0: location 1231 is 1031
 run/0: ingredient 1 is cursor-row
@@ -998,7 +998,7 @@ run/0: address to copy is 1033
 run/0: product 0 is 1033
 mem/0: storing 1033 in location 1233
 run/0: instruction print-character/6
-run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer"]} <- get-address {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
+run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer"]} <- get-address/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
 run/0: ingredient 0 is x
 mem/0: location 1231 is 1031
 run/0: ingredient 1 is cursor-column
@@ -1006,7 +1006,7 @@ run/0: address to copy is 1034
 run/0: product 0 is 1034
 mem/0: storing 1034 in location 1234
 run/0: instruction print-character/7
-run/0: {name: "width", value: 5, type: 1, properties: ["width": "integer"]} <- get {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]}
+run/0: {name: "width", value: 5, type: 1, properties: ["width": "integer"]} <- get/23 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]}
 run/0: ingredient 0 is x
 mem/0: location 1231 is 1031
 run/0: ingredient 1 is num-columns
@@ -1016,7 +1016,7 @@ mem/0: location 1032 is 3
 run/0: product 0 is 3
 mem/0: storing 3 in location 1235
 run/0: instruction print-character/8
-run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- multiply {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
+run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- multiply/4 {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
 run/0: ingredient 0 is row
 mem/0: location 1233 is 1033
 mem/0: location 1033 is 0
@@ -1026,7 +1026,7 @@ run/0: ingredient 1 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1236
 run/0: instruction print-character/9
-run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- add {name: "index", value: 6, type: 1, properties: ["index": "integer"]}, {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}
+run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- add/2 {name: "index", value: 6, type: 1, properties: ["index": "integer"]}, {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}
 run/0: ingredient 0 is index
 mem/0: location 1236 is 0
 run/0: ingredient 1 is column
@@ -1035,7 +1035,7 @@ mem/0: location 1034 is 2
 run/0: product 0 is 2
 mem/0: storing 2 in location 1236
 run/0: instruction print-character/10
-run/0: {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
+run/0: {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get/23 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is x
 mem/0: location 1231 is 1031
 run/0: ingredient 1 is data
@@ -1045,7 +1045,7 @@ mem/0: location 1035 is 1036
 run/0: product 0 is 1036
 mem/0: storing 1036 in location 1237
 run/0: instruction print-character/11
-run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character"]} <- index-address {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
+run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character"]} <- index-address/26 {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
 run/0: ingredient 0 is buf
 mem/0: location 1237 is 1036
 run/0: ingredient 1 is {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
@@ -1054,13 +1054,13 @@ run/0: address to copy is 1039
 run/0: product 0 is 1039
 mem/0: storing 1039 in location 1238
 run/0: instruction print-character/12
-run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character", "deref": ]} <- copy {name: "c", value: 2, type: 4, properties: ["c": "character"]}
+run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character", "deref": ]} <- copy/1 {name: "c", value: 2, type: 4, properties: ["c": "character"]}
 run/0: ingredient 0 is c
 mem/0: location 1232 is 0
 mem/0: location 1238 is 1039
 mem/0: storing 0 in location 1039
 run/0: instruction print-character/14
-run/0: {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]} <- equal {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
+run/0: {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]} <- equal/13 {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
 run/0: ingredient 0 is column
 mem/0: location 1234 is 1034
 mem/0: location 1034 is 2
@@ -1069,12 +1069,12 @@ mem/0: location 1235 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1239
 run/0: instruction print-character/15
-run/0: break-if {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-if/11 {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1239 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction print-character/16
-run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- add {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- add/2 {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is column
 mem/0: location 1234 is 1034
 mem/0: location 1034 is 2
@@ -1083,14 +1083,14 @@ run/0: product 0 is 3
 mem/0: location 1234 is 1034
 mem/0: storing 3 in location 1034
 run/0: instruction print-character/18
-run/0: reply {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
+run/0: reply/32 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
 mem/0: location 1231 is 1031
 run/0: instruction clear-line/11
-run/0: loop {name: "", value: -4, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -4, type: , properties: ["": ]}
 run/0: ingredient 0 is -4
 run/0: jumping to instruction 8
 run/0: instruction clear-line/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "column", value: 3, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "n", value: 2, type: 1, properties: ["n": "integer"]}
+run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "column", value: 3, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "n", value: 2, type: 1, properties: ["n": "integer"]}
 run/0: ingredient 0 is column
 mem/0: location 1140 is 1034
 mem/0: location 1034 is 3
@@ -1099,24 +1099,24 @@ mem/0: location 1139 is 3
 run/0: product 0 is 1
 mem/0: storing 1 in location 1142
 run/0: instruction clear-line/9
-run/0: break-if {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
 mem/0: location 1142 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
 run/0: jumping to instruction 12
 run/0: instruction clear-line/13
-run/0: {name: "column", value: 3, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- copy {name: "original-column", value: 4, type: 1, properties: ["original-column": "integer"]}
+run/0: {name: "column", value: 3, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- copy/1 {name: "original-column", value: 4, type: 1, properties: ["original-column": "integer"]}
 run/0: ingredient 0 is original-column
 mem/0: location 1141 is 0
 mem/0: location 1140 is 1034
 mem/0: storing 0 in location 1034
 run/0: instruction clear-line/14
-run/0: reply {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
+run/0: reply/32 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
 mem/0: location 1138 is 1031
 run/0: result 0 is 1031
 mem/0: storing 1031 in location 1
 run/0: instruction run1001/4
-run/0: {name: "2", value: 2, type: 2-5-4, properties: ["2": "address":"array":"character"]} <- get {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
+run/0: {name: "2", value: 2, type: 2-5-4, properties: ["2": "address":"array":"character"]} <- get/23 {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 1031
 run/0: ingredient 1 is data
@@ -1126,7 +1126,7 @@ mem/0: location 1035 is 1036
 run/0: product 0 is 1036
 mem/0: storing 1036 in location 2
 run/0: instruction run1001/5
-run/0: {name: "3", value: 3, type: 5-4, properties: ["3": "array":"character"]} <- copy {name: "2", value: 2, type: 2-5-4, properties: ["2": "address":"array":"character", "deref": ]}
+run/0: {name: "3", value: 3, type: 5-4, properties: ["3": "array":"character"]} <- copy/1 {name: "2", value: 2, type: 2-5-4, properties: ["2": "address":"array":"character", "deref": ]}
 run/0: ingredient 0 is 2
 mem/0: location 2 is 1036
 mem/0: location 1036 is 6
@@ -1144,7 +1144,7 @@ mem/0: storing 0 in location 7
 mem/0: storing 0 in location 8
 mem/0: storing 0 in location 9
 run/0: instruction clear-line-erases-printed-characters/1
-run/0: memory-should-contain {name: "
+run/0: memory-should-contain/43 {name: "
     3 <- 6  # width*height
     4 <- 0
     5 <- 0
diff --git a/cpp/.traces/closure b/cpp/.traces/closure
index de197db2..3ee1eb17 100644
--- a/cpp/.traces/closure
+++ b/cpp/.traces/closure
@@ -63,78 +63,78 @@ after-brace/0: reply ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1000
 run/0: instruction main/1
-run/0: {name: "1", value: 1, type: 2-5-1, properties: ["1": "address":"array":"location", "names": "init-counter"]} <- init-counter 
+run/0: {name: "1", value: 1, type: 2-5-1, properties: ["1": "address":"array":"location", "names": "init-counter"]} <- init-counter/1001 
 run/0: instruction init-counter/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1031
 run/0: instruction init-counter/1
-run/0: {name: "x", value: 1, type: 1, properties: ["x": "integer"]} <- copy {name: "23", value: 23, type: 0, properties: ["23": "literal"]}
+run/0: {name: "x", value: 1, type: 1, properties: ["x": "integer"]} <- copy/1 {name: "23", value: 23, type: 0, properties: ["23": "literal"]}
 run/0: ingredient 0 is 23
 mem/0: storing 23 in location 1033
 run/0: instruction init-counter/2
-run/0: {name: "y", value: 2, type: 1, properties: ["y": "integer"]} <- copy {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
+run/0: {name: "y", value: 2, type: 1, properties: ["y": "integer"]} <- copy/1 {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
 run/0: ingredient 0 is 3
 mem/0: storing 3 in location 1034
 run/0: instruction init-counter/3
-run/0: reply {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]}
+run/0: reply/32 {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]}
 run/0: result 0 is 1031
 mem/0: storing 1031 in location 1002
 run/0: instruction main/2
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer", "raw": ]} <- increment-counter {name: "1", value: 1, type: 2-5-1, properties: ["1": "address":"array":"location", "names": "init-counter"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer", "raw": ]} <- increment-counter/1002 {name: "1", value: 1, type: 2-5-1, properties: ["1": "address":"array":"location", "names": "init-counter"]}
 mem/0: location 1002 is 1031
 run/0: instruction increment-counter/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "space", value: 0, type: 0, properties: ["space": "literal"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "space", value: 0, type: 0, properties: ["space": "literal"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1062
 run/0: instruction increment-counter/1
-run/0: {name: "0", value: 0, type: 2-5-1, properties: ["0": "address":"array":"location", "names": "init-counter"]} <- next-ingredient 
+run/0: {name: "0", value: 0, type: 2-5-1, properties: ["0": "address":"array":"location", "names": "init-counter"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1063
 run/0: instruction increment-counter/2
-run/0: {name: "y", value: 2, type: 1, properties: ["y": "integer", "space": "1"]} <- add {name: "y", value: 2, type: 1, properties: ["y": "integer", "space": "1"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "y", value: 2, type: 1, properties: ["y": "integer", "space": "1"]} <- add/2 {name: "y", value: 2, type: 1, properties: ["y": "integer", "space": "1"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is y
 mem/0: location 1034 is 3
 run/0: ingredient 1 is 1
 run/0: product 0 is 4
 mem/0: storing 4 in location 1034
 run/0: instruction increment-counter/3
-run/0: {name: "y", value: 1, type: 1, properties: ["y": "integer"]} <- copy {name: "234", value: 234, type: 0, properties: ["234": "literal"]}
+run/0: {name: "y", value: 1, type: 1, properties: ["y": "integer"]} <- copy/1 {name: "234", value: 234, type: 0, properties: ["234": "literal"]}
 run/0: ingredient 0 is 234
 mem/0: storing 234 in location 1064
 run/0: instruction increment-counter/4
-run/0: reply {name: "y", value: 2, type: 1, properties: ["y": "integer", "space": "1"]}
+run/0: reply/32 {name: "y", value: 2, type: 1, properties: ["y": "integer", "space": "1"]}
 mem/0: location 1034 is 4
 run/0: result 0 is 4
 mem/0: storing 4 in location 2
 run/0: instruction main/3
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer", "raw": ]} <- increment-counter {name: "1", value: 1, type: 2-5-1, properties: ["1": "address":"array":"location", "names": "init-counter"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer", "raw": ]} <- increment-counter/1002 {name: "1", value: 1, type: 2-5-1, properties: ["1": "address":"array":"location", "names": "init-counter"]}
 mem/0: location 1002 is 1031
 run/0: instruction increment-counter/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "space", value: 0, type: 0, properties: ["space": "literal"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "space", value: 0, type: 0, properties: ["space": "literal"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1093
 run/0: instruction increment-counter/1
-run/0: {name: "0", value: 0, type: 2-5-1, properties: ["0": "address":"array":"location", "names": "init-counter"]} <- next-ingredient 
+run/0: {name: "0", value: 0, type: 2-5-1, properties: ["0": "address":"array":"location", "names": "init-counter"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1094
 run/0: instruction increment-counter/2
-run/0: {name: "y", value: 2, type: 1, properties: ["y": "integer", "space": "1"]} <- add {name: "y", value: 2, type: 1, properties: ["y": "integer", "space": "1"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "y", value: 2, type: 1, properties: ["y": "integer", "space": "1"]} <- add/2 {name: "y", value: 2, type: 1, properties: ["y": "integer", "space": "1"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is y
 mem/0: location 1034 is 4
 run/0: ingredient 1 is 1
 run/0: product 0 is 5
 mem/0: storing 5 in location 1034
 run/0: instruction increment-counter/3
-run/0: {name: "y", value: 1, type: 1, properties: ["y": "integer"]} <- copy {name: "234", value: 234, type: 0, properties: ["234": "literal"]}
+run/0: {name: "y", value: 1, type: 1, properties: ["y": "integer"]} <- copy/1 {name: "234", value: 234, type: 0, properties: ["234": "literal"]}
 run/0: ingredient 0 is 234
 mem/0: storing 234 in location 1095
 run/0: instruction increment-counter/4
-run/0: reply {name: "y", value: 2, type: 1, properties: ["y": "integer", "space": "1"]}
+run/0: reply/32 {name: "y", value: 2, type: 1, properties: ["y": "integer", "space": "1"]}
 mem/0: location 1034 is 5
 run/0: result 0 is 5
 mem/0: storing 5 in location 3
diff --git a/cpp/.traces/convert_names b/cpp/.traces/convert_names
index 96e8a0f8..5420908d 100644
--- a/cpp/.traces/convert_names
+++ b/cpp/.traces/convert_names
@@ -7,6 +7,6 @@ after-brace/0: copy ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "x", value: 1, type: 1, properties: ["x": "integer"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "x", value: 1, type: 1, properties: ["x": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 1
diff --git a/cpp/.traces/convert_names_passes_default_space b/cpp/.traces/convert_names_passes_default_space
index b26d843a..1897c72a 100644
--- a/cpp/.traces/convert_names_passes_default_space
+++ b/cpp/.traces/convert_names_passes_default_space
@@ -8,5 +8,5 @@ after-brace/0: copy ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "default-space", value: 0, type: 1, properties: ["default-space": "integer"]}, {name: "x", value: 1, type: 1, properties: ["x": "integer"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "default-space", value: 0, type: 1, properties: ["default-space": "integer"]}, {name: "x", value: 1, type: 1, properties: ["x": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
diff --git a/cpp/.traces/convert_names_passes_dummy b/cpp/.traces/convert_names_passes_dummy
index c0fe17de..6a79d0a3 100644
--- a/cpp/.traces/convert_names_passes_dummy
+++ b/cpp/.traces/convert_names_passes_dummy
@@ -8,5 +8,5 @@ after-brace/0: copy ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "_", value: 0, type: 0, properties: ["_": "dummy"]}, {name: "x", value: 1, type: 1, properties: ["x": "integer"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "_", value: 0, type: 0, properties: ["_": "dummy"]}, {name: "x", value: 1, type: 1, properties: ["x": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
diff --git a/cpp/.traces/convert_names_passes_raw b/cpp/.traces/convert_names_passes_raw
index 6e25c354..bb1c42ae 100644
--- a/cpp/.traces/convert_names_passes_raw
+++ b/cpp/.traces/convert_names_passes_raw
@@ -6,6 +6,6 @@ after-brace/0: copy ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "x", value: 0, type: 1, properties: ["x": "integer", "raw": ]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "x", value: 0, type: 1, properties: ["x": "integer", "raw": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 0
diff --git a/cpp/.traces/convert_names_transforms_container_elements b/cpp/.traces/convert_names_transforms_container_elements
index 5cf58994..ec1ba6a8 100644
--- a/cpp/.traces/convert_names_transforms_container_elements
+++ b/cpp/.traces/convert_names_transforms_container_elements
@@ -16,7 +16,7 @@ after-brace/0: get ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "a", value: 1, type: 1, properties: ["a": "integer"]} <- get {name: "0", value: 0, type: 6, properties: ["0": "point"]}, {name: "y", value: 1, type: 0, properties: ["y": "offset"]}
+run/0: {name: "a", value: 1, type: 1, properties: ["a": "integer"]} <- get/23 {name: "0", value: 0, type: 6, properties: ["0": "point"]}, {name: "y", value: 1, type: 0, properties: ["y": "offset"]}
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is y
 run/0: address to copy is 1
@@ -25,7 +25,7 @@ mem/0: location 1 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1
 run/0: instruction main/1
-run/0: {name: "b", value: 2, type: 1, properties: ["b": "integer"]} <- get {name: "0", value: 0, type: 6, properties: ["0": "point"]}, {name: "x", value: 0, type: 0, properties: ["x": "offset"]}
+run/0: {name: "b", value: 2, type: 1, properties: ["b": "integer"]} <- get/23 {name: "0", value: 0, type: 6, properties: ["0": "point"]}, {name: "x", value: 0, type: 0, properties: ["x": "offset"]}
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is x
 run/0: address to copy is 0
diff --git a/cpp/.traces/convert_names_warns b/cpp/.traces/convert_names_warns
index bd98273a..53b84c52 100644
--- a/cpp/.traces/convert_names_warns
+++ b/cpp/.traces/convert_names_warns
@@ -9,7 +9,7 @@ after-brace/0: copy ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "x", value: 1, type: 1, properties: ["x": "integer"]} <- copy {name: "y", value: 0, type: 1, properties: ["y": "integer"]}
+run/0: {name: "x", value: 1, type: 1, properties: ["x": "integer"]} <- copy/1 {name: "y", value: 0, type: 1, properties: ["y": "integer"]}
 run/0: ingredient 0 is y
 mem/0: location 0 is 0
 mem/0: storing 0 in location 1
diff --git a/cpp/.traces/copy b/cpp/.traces/copy
index e8cd036f..ce833903 100644
--- a/cpp/.traces/copy
+++ b/cpp/.traces/copy
@@ -10,11 +10,11 @@ after-brace/0: copy ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "23", value: 23, type: 0, properties: ["23": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "23", value: 23, type: 0, properties: ["23": "literal"]}
 run/0: ingredient 0 is 23
 mem/0: storing 23 in location 1
 run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "1", value: 1, type: 1, properties: ["1": "integer"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 23
 mem/0: storing 23 in location 2
diff --git a/cpp/.traces/copy_array b/cpp/.traces/copy_array
index 4acd43fe..00c78037 100644
--- a/cpp/.traces/copy_array
+++ b/cpp/.traces/copy_array
@@ -22,23 +22,23 @@ after-brace/0: copy ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
 run/0: ingredient 0 is 3
 mem/0: storing 3 in location 1
 run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "14", value: 14, type: 0, properties: ["14": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "14", value: 14, type: 0, properties: ["14": "literal"]}
 run/0: ingredient 0 is 14
 mem/0: storing 14 in location 2
 run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy {name: "15", value: 15, type: 0, properties: ["15": "literal"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy/1 {name: "15", value: 15, type: 0, properties: ["15": "literal"]}
 run/0: ingredient 0 is 15
 mem/0: storing 15 in location 3
 run/0: instruction main/3
-run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- copy {name: "16", value: 16, type: 0, properties: ["16": "literal"]}
+run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- copy/1 {name: "16", value: 16, type: 0, properties: ["16": "literal"]}
 run/0: ingredient 0 is 16
 mem/0: storing 16 in location 4
 run/0: instruction main/4
-run/0: {name: "5", value: 5, type: 5-1, properties: ["5": "array":"integer"]} <- copy {name: "1", value: 1, type: 5-1, properties: ["1": "array":"integer"]}
+run/0: {name: "5", value: 5, type: 5-1, properties: ["5": "array":"integer"]} <- copy/1 {name: "1", value: 1, type: 5-1, properties: ["1": "array":"integer"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 3
 mem/0: location 2 is 14
diff --git a/cpp/.traces/copy_array_indirect b/cpp/.traces/copy_array_indirect
index 1ffcac68..a32cbfc9 100644
--- a/cpp/.traces/copy_array_indirect
+++ b/cpp/.traces/copy_array_indirect
@@ -26,27 +26,27 @@ after-brace/0: copy ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
 run/0: ingredient 0 is 3
 mem/0: storing 3 in location 1
 run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "14", value: 14, type: 0, properties: ["14": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "14", value: 14, type: 0, properties: ["14": "literal"]}
 run/0: ingredient 0 is 14
 mem/0: storing 14 in location 2
 run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy {name: "15", value: 15, type: 0, properties: ["15": "literal"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy/1 {name: "15", value: 15, type: 0, properties: ["15": "literal"]}
 run/0: ingredient 0 is 15
 mem/0: storing 15 in location 3
 run/0: instruction main/3
-run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- copy {name: "16", value: 16, type: 0, properties: ["16": "literal"]}
+run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- copy/1 {name: "16", value: 16, type: 0, properties: ["16": "literal"]}
 run/0: ingredient 0 is 16
 mem/0: storing 16 in location 4
 run/0: instruction main/4
-run/0: {name: "5", value: 5, type: 2-5-1, properties: ["5": "address":"array":"integer"]} <- copy {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "5", value: 5, type: 2-5-1, properties: ["5": "address":"array":"integer"]} <- copy/1 {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is 1
 mem/0: storing 1 in location 5
 run/0: instruction main/5
-run/0: {name: "6", value: 6, type: 5-1, properties: ["6": "array":"integer"]} <- copy {name: "5", value: 5, type: 2-5-1, properties: ["5": "address":"array":"integer", "deref": ]}
+run/0: {name: "6", value: 6, type: 5-1, properties: ["6": "array":"integer"]} <- copy/1 {name: "5", value: 5, type: 2-5-1, properties: ["5": "address":"array":"integer", "deref": ]}
 run/0: ingredient 0 is 5
 mem/0: location 5 is 1
 mem/0: location 1 is 3
diff --git a/cpp/.traces/copy_exclusive_container b/cpp/.traces/copy_exclusive_container
index 46d3b69b..3cc5ea54 100644
--- a/cpp/.traces/copy_exclusive_container
+++ b/cpp/.traces/copy_exclusive_container
@@ -18,19 +18,19 @@ after-brace/0: copy ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is 1
 mem/0: storing 1 in location 1
 run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 run/0: ingredient 0 is 34
 mem/0: storing 34 in location 2
 run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy/1 {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
 run/0: ingredient 0 is 35
 mem/0: storing 35 in location 3
 run/0: instruction main/3
-run/0: {name: "4", value: 4, type: 8, properties: ["4": "integer-or-point"]} <- copy {name: "1", value: 1, type: 8, properties: ["1": "integer-or-point"]}
+run/0: {name: "4", value: 4, type: 8, properties: ["4": "integer-or-point"]} <- copy/1 {name: "1", value: 1, type: 8, properties: ["1": "integer-or-point"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 1
 mem/0: location 2 is 34
diff --git a/cpp/.traces/copy_handles_nested_container_elements b/cpp/.traces/copy_handles_nested_container_elements
index 726ba849..b8a57d73 100644
--- a/cpp/.traces/copy_handles_nested_container_elements
+++ b/cpp/.traces/copy_handles_nested_container_elements
@@ -18,19 +18,19 @@ after-brace/0: copy ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- copy {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 run/0: ingredient 0 is 34
 mem/0: storing 34 in location 12
 run/0: instruction main/1
-run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]} <- copy {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
+run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]} <- copy/1 {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
 run/0: ingredient 0 is 35
 mem/0: storing 35 in location 13
 run/0: instruction main/2
-run/0: {name: "14", value: 14, type: 1, properties: ["14": "integer"]} <- copy {name: "36", value: 36, type: 0, properties: ["36": "literal"]}
+run/0: {name: "14", value: 14, type: 1, properties: ["14": "integer"]} <- copy/1 {name: "36", value: 36, type: 0, properties: ["36": "literal"]}
 run/0: ingredient 0 is 36
 mem/0: storing 36 in location 14
 run/0: instruction main/3
-run/0: {name: "15", value: 15, type: 7, properties: ["15": "point-integer"]} <- copy {name: "12", value: 12, type: 7, properties: ["12": "point-integer"]}
+run/0: {name: "15", value: 15, type: 7, properties: ["15": "point-integer"]} <- copy/1 {name: "12", value: 12, type: 7, properties: ["12": "point-integer"]}
 run/0: ingredient 0 is 12
 mem/0: location 12 is 34
 mem/0: location 13 is 35
diff --git a/cpp/.traces/copy_indirect b/cpp/.traces/copy_indirect
index 0b093016..2c5ae938 100644
--- a/cpp/.traces/copy_indirect
+++ b/cpp/.traces/copy_indirect
@@ -14,15 +14,15 @@ after-brace/0: copy ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 2-1, properties: ["1": "address":"integer"]} <- copy {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
+run/0: {name: "1", value: 1, type: 2-1, properties: ["1": "address":"integer"]} <- copy/1 {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
 run/0: ingredient 0 is 2
 mem/0: storing 2 in location 1
 run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 run/0: ingredient 0 is 34
 mem/0: storing 34 in location 2
 run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy {name: "1", value: 1, type: 2-1, properties: ["1": "address":"integer", "deref": ]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy/1 {name: "1", value: 1, type: 2-1, properties: ["1": "address":"integer", "deref": ]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 2
 mem/0: location 2 is 34
diff --git a/cpp/.traces/copy_literal b/cpp/.traces/copy_literal
index 553aa000..3a25bf98 100644
--- a/cpp/.traces/copy_literal
+++ b/cpp/.traces/copy_literal
@@ -6,6 +6,6 @@ after-brace/0: copy ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "23", value: 23, type: 0, properties: ["23": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "23", value: 23, type: 0, properties: ["23": "literal"]}
 run/0: ingredient 0 is 23
 mem/0: storing 23 in location 1
diff --git a/cpp/.traces/copy_multiple_locations b/cpp/.traces/copy_multiple_locations
index a6df00c4..8014b483 100644
--- a/cpp/.traces/copy_multiple_locations
+++ b/cpp/.traces/copy_multiple_locations
@@ -14,15 +14,15 @@ after-brace/0: copy ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 run/0: ingredient 0 is 34
 mem/0: storing 34 in location 1
 run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
 run/0: ingredient 0 is 35
 mem/0: storing 35 in location 2
 run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 6, properties: ["3": "point"]} <- copy {name: "1", value: 1, type: 6, properties: ["1": "point"]}
+run/0: {name: "3", value: 3, type: 6, properties: ["3": "point"]} <- copy/1 {name: "1", value: 1, type: 6, properties: ["1": "point"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 34
 mem/0: location 2 is 35
diff --git a/cpp/.traces/deref_sidesteps_default_space b/cpp/.traces/deref_sidesteps_default_space
index f5912fa2..0592d082 100644
--- a/cpp/.traces/deref_sidesteps_default_space
+++ b/cpp/.traces/deref_sidesteps_default_space
@@ -22,22 +22,22 @@ after-brace/0: copy ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 run/0: ingredient 0 is 34
 mem/0: storing 34 in location 3
 run/0: instruction main/1
-run/0: {name: "1000", value: 1000, type: 1, properties: ["1000": "integer"]} <- copy {name: "5", value: 5, type: 0, properties: ["5": "literal"]}
+run/0: {name: "1000", value: 1000, type: 1, properties: ["1000": "integer"]} <- copy/1 {name: "5", value: 5, type: 0, properties: ["5": "literal"]}
 run/0: ingredient 0 is 5
 mem/0: storing 5 in location 1000
 run/0: instruction main/2
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- copy {name: "1000", value: 1000, type: 0, properties: ["1000": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- copy/1 {name: "1000", value: 1000, type: 0, properties: ["1000": "literal"]}
 run/0: ingredient 0 is 1000
 run/0: instruction main/3
-run/0: {name: "1", value: 1, type: 2-1, properties: ["1": "address":"integer"]} <- copy {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
+run/0: {name: "1", value: 1, type: 2-1, properties: ["1": "address":"integer"]} <- copy/1 {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
 run/0: ingredient 0 is 3
 mem/0: storing 3 in location 1002
 run/0: instruction main/4
-run/0: {name: "8", value: 8, type: 1, properties: ["8": "integer", "raw": ]} <- copy {name: "1", value: 1, type: 2-1, properties: ["1": "address":"integer", "deref": ]}
+run/0: {name: "8", value: 8, type: 1, properties: ["8": "integer", "raw": ]} <- copy/1 {name: "1", value: 1, type: 2-1, properties: ["1": "address":"integer", "deref": ]}
 run/0: ingredient 0 is 1
 mem/0: location 1002 is 3
 mem/0: location 3 is 34
diff --git a/cpp/.traces/deref_sidesteps_default_space_in_get b/cpp/.traces/deref_sidesteps_default_space_in_get
index 364977e2..3493fccd 100644
--- a/cpp/.traces/deref_sidesteps_default_space_in_get
+++ b/cpp/.traces/deref_sidesteps_default_space_in_get
@@ -27,26 +27,26 @@ after-brace/0: get ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- copy {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 run/0: ingredient 0 is 34
 mem/0: storing 34 in location 12
 run/0: instruction main/1
-run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]} <- copy {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
+run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]} <- copy/1 {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
 run/0: ingredient 0 is 35
 mem/0: storing 35 in location 13
 run/0: instruction main/2
-run/0: {name: "1000", value: 1000, type: 1, properties: ["1000": "integer"]} <- copy {name: "5", value: 5, type: 0, properties: ["5": "literal"]}
+run/0: {name: "1000", value: 1000, type: 1, properties: ["1000": "integer"]} <- copy/1 {name: "5", value: 5, type: 0, properties: ["5": "literal"]}
 run/0: ingredient 0 is 5
 mem/0: storing 5 in location 1000
 run/0: instruction main/3
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- copy {name: "1000", value: 1000, type: 0, properties: ["1000": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- copy/1 {name: "1000", value: 1000, type: 0, properties: ["1000": "literal"]}
 run/0: ingredient 0 is 1000
 run/0: instruction main/4
-run/0: {name: "1", value: 1, type: 2-6, properties: ["1": "address":"point"]} <- copy {name: "12", value: 12, type: 0, properties: ["12": "literal"]}
+run/0: {name: "1", value: 1, type: 2-6, properties: ["1": "address":"point"]} <- copy/1 {name: "12", value: 12, type: 0, properties: ["12": "literal"]}
 run/0: ingredient 0 is 12
 mem/0: storing 12 in location 1002
 run/0: instruction main/5
-run/0: {name: "9", value: 9, type: 1, properties: ["9": "integer", "raw": ]} <- get {name: "1", value: 1, type: 2-6, properties: ["1": "address":"point", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "offset"]}
+run/0: {name: "9", value: 9, type: 1, properties: ["9": "integer", "raw": ]} <- get/23 {name: "1", value: 1, type: 2-6, properties: ["1": "address":"point", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "offset"]}
 run/0: ingredient 0 is 1
 mem/0: location 1002 is 12
 run/0: ingredient 1 is 1
diff --git a/cpp/.traces/deref_sidesteps_default_space_in_index b/cpp/.traces/deref_sidesteps_default_space_in_index
index 705f2b59..a33f3bfe 100644
--- a/cpp/.traces/deref_sidesteps_default_space_in_index
+++ b/cpp/.traces/deref_sidesteps_default_space_in_index
@@ -31,30 +31,30 @@ after-brace/0: index ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- copy {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
+run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- copy/1 {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
 run/0: ingredient 0 is 2
 mem/0: storing 2 in location 12
 run/0: instruction main/1
-run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]} <- copy {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 run/0: ingredient 0 is 34
 mem/0: storing 34 in location 13
 run/0: instruction main/2
-run/0: {name: "14", value: 14, type: 1, properties: ["14": "integer"]} <- copy {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
+run/0: {name: "14", value: 14, type: 1, properties: ["14": "integer"]} <- copy/1 {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
 run/0: ingredient 0 is 35
 mem/0: storing 35 in location 14
 run/0: instruction main/3
-run/0: {name: "1000", value: 1000, type: 1, properties: ["1000": "integer"]} <- copy {name: "5", value: 5, type: 0, properties: ["5": "literal"]}
+run/0: {name: "1000", value: 1000, type: 1, properties: ["1000": "integer"]} <- copy/1 {name: "5", value: 5, type: 0, properties: ["5": "literal"]}
 run/0: ingredient 0 is 5
 mem/0: storing 5 in location 1000
 run/0: instruction main/4
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- copy {name: "1000", value: 1000, type: 0, properties: ["1000": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- copy/1 {name: "1000", value: 1000, type: 0, properties: ["1000": "literal"]}
 run/0: ingredient 0 is 1000
 run/0: instruction main/5
-run/0: {name: "1", value: 1, type: 2-5-1, properties: ["1": "address":"array":"integer"]} <- copy {name: "12", value: 12, type: 0, properties: ["12": "literal"]}
+run/0: {name: "1", value: 1, type: 2-5-1, properties: ["1": "address":"array":"integer"]} <- copy/1 {name: "12", value: 12, type: 0, properties: ["12": "literal"]}
 run/0: ingredient 0 is 12
 mem/0: storing 12 in location 1002
 run/0: instruction main/6
-run/0: {name: "9", value: 9, type: 1, properties: ["9": "integer", "raw": ]} <- index {name: "1", value: 1, type: 2-5-1, properties: ["1": "address":"array":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "9", value: 9, type: 1, properties: ["9": "integer", "raw": ]} <- index/25 {name: "1", value: 1, type: 2-5-1, properties: ["1": "address":"array":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is {name: "1", value: 1, type: 2-5-1, properties: ["1": "address":"array":"integer", "deref": ]}
 mem/0: location 1002 is 12
 run/0: ingredient 1 is {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
diff --git a/cpp/.traces/divide b/cpp/.traces/divide
index 9d83a35e..902b84e3 100644
--- a/cpp/.traces/divide
+++ b/cpp/.traces/divide
@@ -15,15 +15,15 @@ after-brace/0: divide ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "27", value: 27, type: 0, properties: ["27": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "27", value: 27, type: 0, properties: ["27": "literal"]}
 run/0: ingredient 0 is 27
 mem/0: storing 27 in location 1
 run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
 run/0: ingredient 0 is 3
 mem/0: storing 3 in location 2
 run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- divide {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- divide/5 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 27
 run/0: ingredient 1 is 2
diff --git a/cpp/.traces/divide_literal b/cpp/.traces/divide_literal
index 40578702..81ed7530 100644
--- a/cpp/.traces/divide_literal
+++ b/cpp/.traces/divide_literal
@@ -7,7 +7,7 @@ after-brace/0: divide ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- divide {name: "8", value: 8, type: 0, properties: ["8": "literal"]}, {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- divide/5 {name: "8", value: 8, type: 0, properties: ["8": "literal"]}, {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
 run/0: ingredient 0 is 8
 run/0: ingredient 1 is 2
 run/0: ingredient 1 is 2
diff --git a/cpp/.traces/divide_with_remainder b/cpp/.traces/divide_with_remainder
index 979e92d3..e99c8cf2 100644
--- a/cpp/.traces/divide_with_remainder
+++ b/cpp/.traces/divide_with_remainder
@@ -16,15 +16,15 @@ after-brace/0: divide-with-remainder ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "27", value: 27, type: 0, properties: ["27": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "27", value: 27, type: 0, properties: ["27": "literal"]}
 run/0: ingredient 0 is 27
 mem/0: storing 27 in location 1
 run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "11", value: 11, type: 0, properties: ["11": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "11", value: 11, type: 0, properties: ["11": "literal"]}
 run/0: ingredient 0 is 11
 mem/0: storing 11 in location 2
 run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]}, {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- divide-with-remainder {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]}, {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- divide-with-remainder/6 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 27
 run/0: ingredient 1 is 2
diff --git a/cpp/.traces/divide_with_remainder_literal b/cpp/.traces/divide_with_remainder_literal
index a06d9e34..a401ee2e 100644
--- a/cpp/.traces/divide_with_remainder_literal
+++ b/cpp/.traces/divide_with_remainder_literal
@@ -8,7 +8,7 @@ after-brace/0: divide-with-remainder ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- divide-with-remainder {name: "9", value: 9, type: 0, properties: ["9": "literal"]}, {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- divide-with-remainder/6 {name: "9", value: 9, type: 0, properties: ["9": "literal"]}, {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
 run/0: ingredient 0 is 9
 run/0: ingredient 1 is 2
 run/0: product 0 is 4
diff --git a/cpp/.traces/equal b/cpp/.traces/equal
index 807515a8..52cd0896 100644
--- a/cpp/.traces/equal
+++ b/cpp/.traces/equal
@@ -15,15 +15,15 @@ after-brace/0: equal ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 run/0: ingredient 0 is 34
 mem/0: storing 34 in location 1
 run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "33", value: 33, type: 0, properties: ["33": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "33", value: 33, type: 0, properties: ["33": "literal"]}
 run/0: ingredient 0 is 33
 mem/0: storing 33 in location 2
 run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- equal {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- equal/13 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 34
 run/0: ingredient 1 is 2
diff --git a/cpp/.traces/equal2 b/cpp/.traces/equal2
index 7fb70453..6d43f9f1 100644
--- a/cpp/.traces/equal2
+++ b/cpp/.traces/equal2
@@ -15,15 +15,15 @@ after-brace/0: equal ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 run/0: ingredient 0 is 34
 mem/0: storing 34 in location 1
 run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 run/0: ingredient 0 is 34
 mem/0: storing 34 in location 2
 run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- equal {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- equal/13 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 34
 run/0: ingredient 1 is 2
diff --git a/cpp/.traces/first_scenario_in_mu b/cpp/.traces/first_scenario_in_mu
index c02a0dff..46162d13 100644
--- a/cpp/.traces/first_scenario_in_mu
+++ b/cpp/.traces/first_scenario_in_mu
@@ -16,7 +16,7 @@ after-brace/0: memory-should-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: first_scenario_in_mu
 run/0: instruction first_scenario_in_mu/0
-run/0: run {name: "
+run/0: run/42 {name: "
     1:integer <- add 2:literal, 2:literal
   ", value: 0, type: 0, properties: ["
     1:integer <- add 2:literal, 2:literal
@@ -28,13 +28,13 @@ parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
 after-brace/0: recipe run1001
 after-brace/0: add ...
 run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- add {name: "2", value: 2, type: 0, properties: ["2": "literal"]}, {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- add/2 {name: "2", value: 2, type: 0, properties: ["2": "literal"]}, {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
 run/0: ingredient 0 is 2
 run/0: ingredient 1 is 2
 run/0: product 0 is 4
 mem/0: storing 4 in location 1
 run/0: instruction first_scenario_in_mu/1
-run/0: memory-should-contain {name: "
+run/0: memory-should-contain/43 {name: "
     1 <- 4
   ", value: 0, type: 0, properties: ["
     1 <- 4
diff --git a/cpp/.traces/get b/cpp/.traces/get
index 1e3db5f3..c8bf9521 100644
--- a/cpp/.traces/get
+++ b/cpp/.traces/get
@@ -15,15 +15,15 @@ after-brace/0: get ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- copy {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 run/0: ingredient 0 is 34
 mem/0: storing 34 in location 12
 run/0: instruction main/1
-run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]} <- copy {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
+run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]} <- copy/1 {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
 run/0: ingredient 0 is 35
 mem/0: storing 35 in location 13
 run/0: instruction main/2
-run/0: {name: "15", value: 15, type: 1, properties: ["15": "integer"]} <- get {name: "12", value: 12, type: 6, properties: ["12": "point"]}, {name: "1", value: 1, type: 0, properties: ["1": "offset"]}
+run/0: {name: "15", value: 15, type: 1, properties: ["15": "integer"]} <- get/23 {name: "12", value: 12, type: 6, properties: ["12": "point"]}, {name: "1", value: 1, type: 0, properties: ["1": "offset"]}
 run/0: ingredient 0 is 12
 run/0: ingredient 1 is 1
 run/0: address to copy is 13
diff --git a/cpp/.traces/get_address b/cpp/.traces/get_address
index 3238f4eb..22702857 100644
--- a/cpp/.traces/get_address
+++ b/cpp/.traces/get_address
@@ -15,15 +15,15 @@ after-brace/0: get-address ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- copy {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 run/0: ingredient 0 is 34
 mem/0: storing 34 in location 12
 run/0: instruction main/1
-run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]} <- copy {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
+run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]} <- copy/1 {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
 run/0: ingredient 0 is 35
 mem/0: storing 35 in location 13
 run/0: instruction main/2
-run/0: {name: "15", value: 15, type: 2-1, properties: ["15": "address":"integer"]} <- get-address {name: "12", value: 12, type: 6, properties: ["12": "point"]}, {name: "1", value: 1, type: 0, properties: ["1": "offset"]}
+run/0: {name: "15", value: 15, type: 2-1, properties: ["15": "address":"integer"]} <- get-address/24 {name: "12", value: 12, type: 6, properties: ["12": "point"]}, {name: "1", value: 1, type: 0, properties: ["1": "offset"]}
 run/0: ingredient 0 is 12
 run/0: ingredient 1 is 1
 run/0: address to copy is 13
diff --git a/cpp/.traces/get_address_indirect b/cpp/.traces/get_address_indirect
index 40f315d2..d986b280 100644
--- a/cpp/.traces/get_address_indirect
+++ b/cpp/.traces/get_address_indirect
@@ -19,19 +19,19 @@ after-brace/0: get-address ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
 run/0: ingredient 0 is 2
 mem/0: storing 2 in location 1
 run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 run/0: ingredient 0 is 34
 mem/0: storing 34 in location 2
 run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy/1 {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
 run/0: ingredient 0 is 35
 mem/0: storing 35 in location 3
 run/0: instruction main/3
-run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- get-address {name: "1", value: 1, type: 2-6, properties: ["1": "address":"point", "deref": ]}, {name: "0", value: 0, type: 0, properties: ["0": "offset"]}
+run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- get-address/24 {name: "1", value: 1, type: 2-6, properties: ["1": "address":"point", "deref": ]}, {name: "0", value: 0, type: 0, properties: ["0": "offset"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 2
 run/0: ingredient 1 is 0
diff --git a/cpp/.traces/get_default_space b/cpp/.traces/get_default_space
index e9a108ab..bb513849 100644
--- a/cpp/.traces/get_default_space
+++ b/cpp/.traces/get_default_space
@@ -10,9 +10,9 @@ after-brace/0: copy ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- copy {name: "10", value: 10, type: 0, properties: ["10": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- copy/1 {name: "10", value: 10, type: 0, properties: ["10": "literal"]}
 run/0: ingredient 0 is 10
 run/0: instruction main/1
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer", "raw": ]} <- copy {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer", "raw": ]} <- copy/1 {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]}
 run/0: ingredient 0 is default-space
 mem/0: storing 10 in location 1
diff --git a/cpp/.traces/get_handles_nested_container_elements b/cpp/.traces/get_handles_nested_container_elements
index c91a14a1..963b25c1 100644
--- a/cpp/.traces/get_handles_nested_container_elements
+++ b/cpp/.traces/get_handles_nested_container_elements
@@ -19,19 +19,19 @@ after-brace/0: get ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- copy {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 run/0: ingredient 0 is 34
 mem/0: storing 34 in location 12
 run/0: instruction main/1
-run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]} <- copy {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
+run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]} <- copy/1 {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
 run/0: ingredient 0 is 35
 mem/0: storing 35 in location 13
 run/0: instruction main/2
-run/0: {name: "14", value: 14, type: 1, properties: ["14": "integer"]} <- copy {name: "36", value: 36, type: 0, properties: ["36": "literal"]}
+run/0: {name: "14", value: 14, type: 1, properties: ["14": "integer"]} <- copy/1 {name: "36", value: 36, type: 0, properties: ["36": "literal"]}
 run/0: ingredient 0 is 36
 mem/0: storing 36 in location 14
 run/0: instruction main/3
-run/0: {name: "15", value: 15, type: 1, properties: ["15": "integer"]} <- get {name: "12", value: 12, type: 7, properties: ["12": "point-integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "offset"]}
+run/0: {name: "15", value: 15, type: 1, properties: ["15": "integer"]} <- get/23 {name: "12", value: 12, type: 7, properties: ["12": "point-integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "offset"]}
 run/0: ingredient 0 is 12
 run/0: ingredient 1 is 1
 run/0: address to copy is 14
diff --git a/cpp/.traces/get_indirect b/cpp/.traces/get_indirect
index 4a276e98..62c2cdaa 100644
--- a/cpp/.traces/get_indirect
+++ b/cpp/.traces/get_indirect
@@ -19,19 +19,19 @@ after-brace/0: get ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
 run/0: ingredient 0 is 2
 mem/0: storing 2 in location 1
 run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 run/0: ingredient 0 is 34
 mem/0: storing 34 in location 2
 run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy/1 {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
 run/0: ingredient 0 is 35
 mem/0: storing 35 in location 3
 run/0: instruction main/3
-run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- get {name: "1", value: 1, type: 2-6, properties: ["1": "address":"point", "deref": ]}, {name: "0", value: 0, type: 0, properties: ["0": "offset"]}
+run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- get/23 {name: "1", value: 1, type: 2-6, properties: ["1": "address":"point", "deref": ]}, {name: "0", value: 0, type: 0, properties: ["0": "offset"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 2
 run/0: ingredient 1 is 0
diff --git a/cpp/.traces/greater_or_equal b/cpp/.traces/greater_or_equal
index 59f290c0..b03df27c 100644
--- a/cpp/.traces/greater_or_equal
+++ b/cpp/.traces/greater_or_equal
@@ -15,15 +15,15 @@ after-brace/0: greater-or-equal ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 run/0: ingredient 0 is 34
 mem/0: storing 34 in location 1
 run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "33", value: 33, type: 0, properties: ["33": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "33", value: 33, type: 0, properties: ["33": "literal"]}
 run/0: ingredient 0 is 33
 mem/0: storing 33 in location 2
 run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- greater-or-equal {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- greater-or-equal/16 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 34
 run/0: ingredient 1 is 2
diff --git a/cpp/.traces/greater_or_equal2 b/cpp/.traces/greater_or_equal2
index 4f85470f..6cc4e076 100644
--- a/cpp/.traces/greater_or_equal2
+++ b/cpp/.traces/greater_or_equal2
@@ -15,15 +15,15 @@ after-brace/0: greater-or-equal ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 run/0: ingredient 0 is 34
 mem/0: storing 34 in location 1
 run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 run/0: ingredient 0 is 34
 mem/0: storing 34 in location 2
 run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- greater-or-equal {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- greater-or-equal/16 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 34
 run/0: ingredient 1 is 2
diff --git a/cpp/.traces/greater_or_equal3 b/cpp/.traces/greater_or_equal3
index 2b43292f..aa0e7f60 100644
--- a/cpp/.traces/greater_or_equal3
+++ b/cpp/.traces/greater_or_equal3
@@ -15,15 +15,15 @@ after-brace/0: greater-or-equal ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 run/0: ingredient 0 is 34
 mem/0: storing 34 in location 1
 run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
 run/0: ingredient 0 is 35
 mem/0: storing 35 in location 2
 run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- greater-or-equal {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- greater-or-equal/16 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 34
 run/0: ingredient 1 is 2
diff --git a/cpp/.traces/greater_than b/cpp/.traces/greater_than
index 211983c3..1a56cb8b 100644
--- a/cpp/.traces/greater_than
+++ b/cpp/.traces/greater_than
@@ -15,15 +15,15 @@ after-brace/0: greater-than ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 run/0: ingredient 0 is 34
 mem/0: storing 34 in location 1
 run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "33", value: 33, type: 0, properties: ["33": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "33", value: 33, type: 0, properties: ["33": "literal"]}
 run/0: ingredient 0 is 33
 mem/0: storing 33 in location 2
 run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- greater-than {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- greater-than/14 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 34
 run/0: ingredient 1 is 2
diff --git a/cpp/.traces/greater_than2 b/cpp/.traces/greater_than2
index b9ee951e..f352176b 100644
--- a/cpp/.traces/greater_than2
+++ b/cpp/.traces/greater_than2
@@ -15,15 +15,15 @@ after-brace/0: greater-than ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 run/0: ingredient 0 is 34
 mem/0: storing 34 in location 1
 run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 run/0: ingredient 0 is 34
 mem/0: storing 34 in location 2
 run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- greater-than {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- greater-than/14 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 34
 run/0: ingredient 1 is 2
diff --git a/cpp/.traces/include_nonderef_properties b/cpp/.traces/include_nonderef_properties
index 7a073504..aa4d3c6b 100644
--- a/cpp/.traces/include_nonderef_properties
+++ b/cpp/.traces/include_nonderef_properties
@@ -19,19 +19,19 @@ after-brace/0: get ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
 run/0: ingredient 0 is 2
 mem/0: storing 2 in location 1
 run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 run/0: ingredient 0 is 34
 mem/0: storing 34 in location 2
 run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy/1 {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
 run/0: ingredient 0 is 35
 mem/0: storing 35 in location 3
 run/0: instruction main/3
-run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- get {name: "1", value: 1, type: 2-6, properties: ["1": "address":"point", "deref": , "foo": ]}, {name: "0", value: 0, type: 0, properties: ["0": "offset"]}
+run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- get/23 {name: "1", value: 1, type: 2-6, properties: ["1": "address":"point", "deref": , "foo": ]}, {name: "0", value: 0, type: 0, properties: ["0": "offset"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 2
 run/0: ingredient 1 is 0
diff --git a/cpp/.traces/index b/cpp/.traces/index
index ed5c0662..4ba27c97 100644
--- a/cpp/.traces/index
+++ b/cpp/.traces/index
@@ -23,23 +23,23 @@ after-brace/0: index ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
 run/0: ingredient 0 is 3
 mem/0: storing 3 in location 1
 run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "14", value: 14, type: 0, properties: ["14": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "14", value: 14, type: 0, properties: ["14": "literal"]}
 run/0: ingredient 0 is 14
 mem/0: storing 14 in location 2
 run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy {name: "15", value: 15, type: 0, properties: ["15": "literal"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy/1 {name: "15", value: 15, type: 0, properties: ["15": "literal"]}
 run/0: ingredient 0 is 15
 mem/0: storing 15 in location 3
 run/0: instruction main/3
-run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- copy {name: "16", value: 16, type: 0, properties: ["16": "literal"]}
+run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- copy/1 {name: "16", value: 16, type: 0, properties: ["16": "literal"]}
 run/0: ingredient 0 is 16
 mem/0: storing 16 in location 4
 run/0: instruction main/4
-run/0: {name: "5", value: 5, type: 1, properties: ["5": "integer"]} <- index {name: "1", value: 1, type: 5-1, properties: ["1": "array":"integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "5", value: 5, type: 1, properties: ["5": "integer"]} <- index/25 {name: "1", value: 1, type: 5-1, properties: ["1": "array":"integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is {name: "1", value: 1, type: 5-1, properties: ["1": "array":"integer"]}
 run/0: ingredient 1 is {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: address to copy is 2
diff --git a/cpp/.traces/index_address b/cpp/.traces/index_address
index 7041c06a..1aaf7fbe 100644
--- a/cpp/.traces/index_address
+++ b/cpp/.traces/index_address
@@ -23,23 +23,23 @@ after-brace/0: index-address ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
 run/0: ingredient 0 is 3
 mem/0: storing 3 in location 1
 run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "14", value: 14, type: 0, properties: ["14": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "14", value: 14, type: 0, properties: ["14": "literal"]}
 run/0: ingredient 0 is 14
 mem/0: storing 14 in location 2
 run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy {name: "15", value: 15, type: 0, properties: ["15": "literal"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy/1 {name: "15", value: 15, type: 0, properties: ["15": "literal"]}
 run/0: ingredient 0 is 15
 mem/0: storing 15 in location 3
 run/0: instruction main/3
-run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- copy {name: "16", value: 16, type: 0, properties: ["16": "literal"]}
+run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- copy/1 {name: "16", value: 16, type: 0, properties: ["16": "literal"]}
 run/0: ingredient 0 is 16
 mem/0: storing 16 in location 4
 run/0: instruction main/4
-run/0: {name: "5", value: 5, type: 1, properties: ["5": "integer"]} <- index-address {name: "1", value: 1, type: 5-1, properties: ["1": "array":"integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "5", value: 5, type: 1, properties: ["5": "integer"]} <- index-address/26 {name: "1", value: 1, type: 5-1, properties: ["1": "array":"integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: address to copy is 2
diff --git a/cpp/.traces/index_direct_offset b/cpp/.traces/index_direct_offset
index c31f843e..fa0a134a 100644
--- a/cpp/.traces/index_direct_offset
+++ b/cpp/.traces/index_direct_offset
@@ -27,27 +27,27 @@ after-brace/0: index ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
 run/0: ingredient 0 is 3
 mem/0: storing 3 in location 1
 run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "14", value: 14, type: 0, properties: ["14": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "14", value: 14, type: 0, properties: ["14": "literal"]}
 run/0: ingredient 0 is 14
 mem/0: storing 14 in location 2
 run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy {name: "15", value: 15, type: 0, properties: ["15": "literal"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy/1 {name: "15", value: 15, type: 0, properties: ["15": "literal"]}
 run/0: ingredient 0 is 15
 mem/0: storing 15 in location 3
 run/0: instruction main/3
-run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- copy {name: "16", value: 16, type: 0, properties: ["16": "literal"]}
+run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- copy/1 {name: "16", value: 16, type: 0, properties: ["16": "literal"]}
 run/0: ingredient 0 is 16
 mem/0: storing 16 in location 4
 run/0: instruction main/4
-run/0: {name: "5", value: 5, type: 1, properties: ["5": "integer"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "5", value: 5, type: 1, properties: ["5": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 5
 run/0: instruction main/5
-run/0: {name: "6", value: 6, type: 1, properties: ["6": "integer"]} <- index {name: "1", value: 1, type: 5-1, properties: ["1": "array":"integer"]}, {name: "5", value: 5, type: 1, properties: ["5": "integer"]}
+run/0: {name: "6", value: 6, type: 1, properties: ["6": "integer"]} <- index/25 {name: "1", value: 1, type: 5-1, properties: ["1": "array":"integer"]}, {name: "5", value: 5, type: 1, properties: ["5": "integer"]}
 run/0: ingredient 0 is {name: "1", value: 1, type: 5-1, properties: ["1": "array":"integer"]}
 run/0: ingredient 1 is {name: "5", value: 5, type: 1, properties: ["5": "integer"]}
 mem/0: location 5 is 0
diff --git a/cpp/.traces/index_indirect b/cpp/.traces/index_indirect
index ef73381b..e610d675 100644
--- a/cpp/.traces/index_indirect
+++ b/cpp/.traces/index_indirect
@@ -27,27 +27,27 @@ after-brace/0: index ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
 run/0: ingredient 0 is 3
 mem/0: storing 3 in location 1
 run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "14", value: 14, type: 0, properties: ["14": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "14", value: 14, type: 0, properties: ["14": "literal"]}
 run/0: ingredient 0 is 14
 mem/0: storing 14 in location 2
 run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy {name: "15", value: 15, type: 0, properties: ["15": "literal"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy/1 {name: "15", value: 15, type: 0, properties: ["15": "literal"]}
 run/0: ingredient 0 is 15
 mem/0: storing 15 in location 3
 run/0: instruction main/3
-run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- copy {name: "16", value: 16, type: 0, properties: ["16": "literal"]}
+run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- copy/1 {name: "16", value: 16, type: 0, properties: ["16": "literal"]}
 run/0: ingredient 0 is 16
 mem/0: storing 16 in location 4
 run/0: instruction main/4
-run/0: {name: "5", value: 5, type: 2-5-1, properties: ["5": "address":"array":"integer"]} <- copy {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "5", value: 5, type: 2-5-1, properties: ["5": "address":"array":"integer"]} <- copy/1 {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is 1
 mem/0: storing 1 in location 5
 run/0: instruction main/5
-run/0: {name: "6", value: 6, type: 1, properties: ["6": "integer"]} <- index {name: "5", value: 5, type: 2-5-1, properties: ["5": "address":"array":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "6", value: 6, type: 1, properties: ["6": "integer"]} <- index/25 {name: "5", value: 5, type: 2-5-1, properties: ["5": "address":"array":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is {name: "5", value: 5, type: 2-5-1, properties: ["5": "address":"array":"integer", "deref": ]}
 mem/0: location 5 is 1
 run/0: ingredient 1 is {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
diff --git a/cpp/.traces/ingredient b/cpp/.traces/ingredient
index 26deed09..a2c3f5aa 100644
--- a/cpp/.traces/ingredient
+++ b/cpp/.traces/ingredient
@@ -15,11 +15,11 @@ after-brace/0: next-ingredient ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: f {name: "1", value: 1, type: 0, properties: ["1": "literal"]}, {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
+run/0: f/1001 {name: "1", value: 1, type: 0, properties: ["1": "literal"]}, {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
 run/0: instruction f/0
-run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- ingredient {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- ingredient/31 {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: product 0 is 2
 mem/0: storing 2 in location 12
 run/0: instruction f/1
-run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]}, {name: "1", value: 1, type: 3, properties: ["1": "boolean"]} <- next-ingredient 
+run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]}, {name: "1", value: 1, type: 3, properties: ["1": "boolean"]} <- next-ingredient/29 
 mem/0: storing 0 in location 1
diff --git a/cpp/.traces/integer-to-decimal-digit-negative b/cpp/.traces/integer-to-decimal-digit-negative
index 890696f4..0f3cc329 100644
--- a/cpp/.traces/integer-to-decimal-digit-negative
+++ b/cpp/.traces/integer-to-decimal-digit-negative
@@ -22,7 +22,7 @@ after-brace/0: memory-should-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: integer-to-decimal-digit-negative
 run/0: instruction integer-to-decimal-digit-negative/0
-run/0: run {name: "
+run/0: run/42 {name: "
     1:address:array:character/raw <- integer-to-decimal-string -1:literal
     2:array:character/raw <- copy 1:address:array:character/deref/raw
   ", value: 0, type: 0, properties: ["
@@ -39,43 +39,43 @@ after-brace/0: recipe run1001
 after-brace/0: integer-to-decimal-string ...
 after-brace/0: copy ...
 run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]} <- integer-to-decimal-string {name: "-1", value: -1, type: 0, properties: ["-1": "literal"]}
+run/0: {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]} <- integer-to-decimal-string/105 {name: "-1", value: -1, type: 0, properties: ["-1": "literal"]}
 run/0: instruction integer-to-decimal-string/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1000
 run/0: instruction integer-to-decimal-string/1
-run/0: {name: "n", value: 1, type: 1, properties: ["n": "integer"]} <- next-ingredient 
+run/0: {name: "n", value: 1, type: 1, properties: ["n": "integer"]} <- next-ingredient/29 
 run/0: product 0 is -1
 mem/0: storing -1 in location 1002
 run/0: instruction integer-to-decimal-string/3
-run/0: break-if {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "", value: 2, type: , properties: ["": ]}
+run/0: break-if/11 {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "", value: 2, type: , properties: ["": ]}
 mem/0: location 1002 is -1
 run/0: ingredient 0 is -1
 run/0: ingredient 1 is 
 run/0: jumping to instruction 6
 run/0: instruction integer-to-decimal-string/7
-run/0: {name: "negate-result", value: 3, type: 3, properties: ["negate-result": "boolean"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "negate-result", value: 3, type: 3, properties: ["negate-result": "boolean"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 1004
 run/0: instruction integer-to-decimal-string/9
-run/0: {name: "negative?", value: 4, type: 3, properties: ["negative?": "boolean"]} <- lesser-than {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "negative?", value: 4, type: 3, properties: ["negative?": "boolean"]} <- lesser-than/15 {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is n
 mem/0: location 1002 is -1
 run/0: ingredient 1 is 0
 run/0: product 0 is 1
 mem/0: storing 1 in location 1005
 run/0: instruction integer-to-decimal-string/10
-run/0: break-unless {name: "negative?", value: 4, type: 3, properties: ["negative?": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "negative?", value: 4, type: 3, properties: ["negative?": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
 mem/0: location 1005 is 1
 run/0: ingredient 0 is 1
 run/0: jump-unless fell through
 run/0: instruction integer-to-decimal-string/11
-run/0: {name: "negate-result", value: 3, type: 3, properties: ["negate-result": "boolean"]} <- copy {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "negate-result", value: 3, type: 3, properties: ["negate-result": "boolean"]} <- copy/1 {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is 1
 mem/0: storing 1 in location 1004
 run/0: instruction integer-to-decimal-string/12
-run/0: {name: "n", value: 1, type: 1, properties: ["n": "integer"]} <- multiply {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "-1", value: -1, type: 0, properties: ["-1": "literal"]}
+run/0: {name: "n", value: 1, type: 1, properties: ["n": "integer"]} <- multiply/4 {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "-1", value: -1, type: 0, properties: ["-1": "literal"]}
 run/0: ingredient 0 is n
 mem/0: location 1002 is -1
 run/0: ingredient 1 is -1
@@ -83,17 +83,17 @@ run/0: ingredient 1 is -1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1002
 run/0: instruction integer-to-decimal-string/14
-run/0: {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer"]} <- init-buffer {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer"]} <- init-buffer/101 {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 run/0: instruction init-buffer/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1031
 run/0: instruction init-buffer/1
-run/0: {name: "result", value: 1, type: 2-9, properties: ["result": "address":"buffer"]} <- new {name: "buffer", value: 9, type: 0, properties: ["buffer": "type"]}
+run/0: {name: "result", value: 1, type: 2-9, properties: ["result": "address":"buffer"]} <- new/41 {name: "buffer", value: 9, type: 0, properties: ["buffer": "type"]}
 mem/0: new alloc: 1062
 mem/0: storing 1062 in location 1033
 run/0: instruction init-buffer/2
-run/0: {name: "len", value: 2, type: 2-1, properties: ["len": "address":"integer"]} <- get-address {name: "result", value: 1, type: 2-9, properties: ["result": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
+run/0: {name: "len", value: 2, type: 2-1, properties: ["len": "address":"integer"]} <- get-address/24 {name: "result", value: 1, type: 2-9, properties: ["result": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1033 is 1062
 run/0: ingredient 1 is length
@@ -101,12 +101,12 @@ run/0: address to copy is 1062
 run/0: product 0 is 1062
 mem/0: storing 1062 in location 1034
 run/0: instruction init-buffer/3
-run/0: {name: "len", value: 2, type: 2-1, properties: ["len": "address":"integer", "deref": ]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "len", value: 2, type: 2-1, properties: ["len": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: location 1034 is 1062
 mem/0: storing 0 in location 1062
 run/0: instruction init-buffer/4
-run/0: {name: "s", value: 3, type: 2-2-5-4, properties: ["s": "address":"address":"array":"character"]} <- get-address {name: "result", value: 1, type: 2-9, properties: ["result": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
+run/0: {name: "s", value: 3, type: 2-2-5-4, properties: ["s": "address":"address":"array":"character"]} <- get-address/24 {name: "result", value: 1, type: 2-9, properties: ["result": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1033 is 1062
 run/0: ingredient 1 is data
@@ -114,39 +114,39 @@ run/0: address to copy is 1063
 run/0: product 0 is 1063
 mem/0: storing 1063 in location 1035
 run/0: instruction init-buffer/5
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- next-ingredient 
+run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- next-ingredient/29 
 run/0: product 0 is 30
 mem/0: storing 30 in location 1036
 run/0: instruction init-buffer/6
-run/0: {name: "s", value: 3, type: 2-2-5-4, properties: ["s": "address":"address":"array":"character", "deref": ]} <- new {name: "character", value: 4, type: 0, properties: ["character": "type"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
+run/0: {name: "s", value: 3, type: 2-2-5-4, properties: ["s": "address":"address":"array":"character", "deref": ]} <- new/41 {name: "character", value: 4, type: 0, properties: ["character": "type"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
 mem/0: location 1036 is 30
 mem/0: array size is 30
 mem/0: new alloc: 1064
 mem/0: location 1035 is 1063
 mem/0: storing 1064 in location 1063
 run/0: instruction init-buffer/7
-run/0: reply {name: "result", value: 1, type: 2-9, properties: ["result": "address":"buffer"]}
+run/0: reply/32 {name: "result", value: 1, type: 2-9, properties: ["result": "address":"buffer"]}
 mem/0: location 1033 is 1062
 run/0: result 0 is 1062
 mem/0: storing 1062 in location 1006
 run/0: instruction integer-to-decimal-string/15
-run/0: {name: "digit-base", value: 6, type: 1, properties: ["digit-base": "integer"]} <- copy {name: "48", value: 48, type: 0, properties: ["48": "literal"]}
+run/0: {name: "digit-base", value: 6, type: 1, properties: ["digit-base": "integer"]} <- copy/1 {name: "48", value: 48, type: 0, properties: ["48": "literal"]}
 run/0: ingredient 0 is 48
 mem/0: storing 48 in location 1007
 run/0: instruction integer-to-decimal-string/17
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- equal {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- equal/13 {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is n
 mem/0: location 1002 is 1
 run/0: ingredient 1 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1008
 run/0: instruction integer-to-decimal-string/18
-run/0: break-if {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
 mem/0: location 1008 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction integer-to-decimal-string/19
-run/0: {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "digit", value: 8, type: 1, properties: ["digit": "integer"]} <- divide-with-remainder {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "10", value: 10, type: 0, properties: ["10": "literal"]}
+run/0: {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "digit", value: 8, type: 1, properties: ["digit": "integer"]} <- divide-with-remainder/6 {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "10", value: 10, type: 0, properties: ["10": "literal"]}
 run/0: ingredient 0 is n
 mem/0: location 1002 is 1
 run/0: ingredient 1 is 10
@@ -155,7 +155,7 @@ mem/0: storing 0 in location 1002
 run/0: product 1 is 1
 mem/0: storing 1 in location 1009
 run/0: instruction integer-to-decimal-string/20
-run/0: {name: "c", value: 9, type: 4, properties: ["c": "character"]} <- add {name: "digit-base", value: 6, type: 1, properties: ["digit-base": "integer"]}, {name: "digit", value: 8, type: 1, properties: ["digit": "integer"]}
+run/0: {name: "c", value: 9, type: 4, properties: ["c": "character"]} <- add/2 {name: "digit-base", value: 6, type: 1, properties: ["digit-base": "integer"]}, {name: "digit", value: 8, type: 1, properties: ["digit": "integer"]}
 run/0: ingredient 0 is digit-base
 mem/0: location 1007 is 48
 run/0: ingredient 1 is digit
@@ -163,34 +163,34 @@ mem/0: location 1009 is 1
 run/0: product 0 is 49
 mem/0: storing 49 in location 1010
 run/0: instruction integer-to-decimal-string/21
-run/0: {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer"]} <- buffer-append {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer"]}, {name: "c", value: 9, type: 4, properties: ["c": "character"]}
+run/0: {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer"]} <- buffer-append/104 {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer"]}, {name: "c", value: 9, type: 4, properties: ["c": "character"]}
 mem/0: location 1006 is 1062
 mem/0: location 1010 is 49
 run/0: instruction buffer-append/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1095
 run/0: instruction buffer-append/1
-run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient 
+run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient/29 
 run/0: product 0 is 1062
 mem/0: storing 1062 in location 1097
 run/0: instruction buffer-append/2
-run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient 
+run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient/29 
 run/0: product 0 is 49
 mem/0: storing 49 in location 1098
 run/0: instruction buffer-append/4
-run/0: {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]} <- buffer-full? {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]}
+run/0: {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]} <- buffer-full?/103 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]}
 mem/0: location 1097 is 1062
 run/0: instruction buffer-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1126
 run/0: instruction buffer-full?/1
-run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient 
+run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient/29 
 run/0: product 0 is 1062
 mem/0: storing 1062 in location 1128
 run/0: instruction buffer-full?/2
-run/0: {name: "len", value: 2, type: 1, properties: ["len": "integer"]} <- get {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
+run/0: {name: "len", value: 2, type: 1, properties: ["len": "integer"]} <- get/23 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
 run/0: ingredient 0 is in
 mem/0: location 1128 is 1062
 run/0: ingredient 1 is length
@@ -200,7 +200,7 @@ mem/0: location 1062 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1129
 run/0: instruction buffer-full?/3
-run/0: {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
+run/0: {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get/23 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is in
 mem/0: location 1128 is 1062
 run/0: ingredient 1 is data
@@ -210,11 +210,11 @@ mem/0: location 1063 is 1064
 run/0: product 0 is 1064
 mem/0: storing 1064 in location 1130
 run/0: instruction buffer-full?/4
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- length {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}
+run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- length/27 {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}
 mem/0: location 1130 is 1064
 mem/0: storing 30 in location 1131
 run/0: instruction buffer-full?/5
-run/0: {name: "result", value: 5, type: 3, properties: ["result": "boolean"]} <- greater-or-equal {name: "len", value: 2, type: 1, properties: ["len": "integer"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
+run/0: {name: "result", value: 5, type: 3, properties: ["result": "boolean"]} <- greater-or-equal/16 {name: "len", value: 2, type: 1, properties: ["len": "integer"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
 run/0: ingredient 0 is len
 mem/0: location 1129 is 0
 run/0: ingredient 1 is capacity
@@ -222,18 +222,18 @@ mem/0: location 1131 is 30
 run/0: product 0 is 0
 mem/0: storing 0 in location 1132
 run/0: instruction buffer-full?/6
-run/0: reply {name: "result", value: 5, type: 3, properties: ["result": "boolean"]}
+run/0: reply/32 {name: "result", value: 5, type: 3, properties: ["result": "boolean"]}
 mem/0: location 1132 is 0
 run/0: result 0 is 0
 mem/0: storing 0 in location 1099
 run/0: instruction buffer-append/5
-run/0: break-unless {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1099 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 7
 run/0: instruction buffer-append/8
-run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer"]} <- get-address {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
+run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer"]} <- get-address/24 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
 run/0: ingredient 0 is in
 mem/0: location 1097 is 1062
 run/0: ingredient 1 is length
@@ -241,7 +241,7 @@ run/0: address to copy is 1062
 run/0: product 0 is 1062
 mem/0: storing 1062 in location 1100
 run/0: instruction buffer-append/9
-run/0: {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
+run/0: {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get/23 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is in
 mem/0: location 1097 is 1062
 run/0: ingredient 1 is data
@@ -251,7 +251,7 @@ mem/0: location 1063 is 1064
 run/0: product 0 is 1064
 mem/0: storing 1064 in location 1101
 run/0: instruction buffer-append/10
-run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character"]} <- index-address {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}, {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
+run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character"]} <- index-address/26 {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}, {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
 run/0: ingredient 0 is s
 mem/0: location 1101 is 1064
 run/0: ingredient 1 is {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
@@ -261,13 +261,13 @@ run/0: address to copy is 1065
 run/0: product 0 is 1065
 mem/0: storing 1065 in location 1102
 run/0: instruction buffer-append/11
-run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy {name: "c", value: 2, type: 4, properties: ["c": "character"]}
+run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy/1 {name: "c", value: 2, type: 4, properties: ["c": "character"]}
 run/0: ingredient 0 is c
 mem/0: location 1098 is 49
 mem/0: location 1102 is 1065
 mem/0: storing 49 in location 1065
 run/0: instruction buffer-append/12
-run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]} <- add {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]} <- add/2 {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is len
 mem/0: location 1100 is 1062
 mem/0: location 1062 is 0
@@ -276,60 +276,60 @@ run/0: product 0 is 1
 mem/0: location 1100 is 1062
 mem/0: storing 1 in location 1062
 run/0: instruction buffer-append/13
-run/0: reply {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "same-as-ingredient": "0"]}
+run/0: reply/32 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "same-as-ingredient": "0"]}
 mem/0: location 1097 is 1062
 run/0: result 0 is 1062
 mem/0: storing 1062 in location 1006
 run/0: instruction integer-to-decimal-string/22
-run/0: loop {name: "", value: -6, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
 run/0: ingredient 0 is -6
 run/0: jumping to instruction 17
 run/0: instruction integer-to-decimal-string/17
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- equal {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- equal/13 {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is n
 mem/0: location 1002 is 0
 run/0: ingredient 1 is 0
 run/0: product 0 is 1
 mem/0: storing 1 in location 1008
 run/0: instruction integer-to-decimal-string/18
-run/0: break-if {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
 mem/0: location 1008 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
 run/0: jumping to instruction 23
 run/0: instruction integer-to-decimal-string/25
-run/0: break-unless {name: "negate-result", value: 3, type: 3, properties: ["negate-result": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "negate-result", value: 3, type: 3, properties: ["negate-result": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1004 is 1
 run/0: ingredient 0 is 1
 run/0: jump-unless fell through
 run/0: instruction integer-to-decimal-string/26
-run/0: {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer"]} <- buffer-append {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer"]}, {name: "45", value: 45, type: 0, properties: ["45": "literal"]}
+run/0: {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer"]} <- buffer-append/104 {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer"]}, {name: "45", value: 45, type: 0, properties: ["45": "literal"]}
 mem/0: location 1006 is 1062
 run/0: instruction buffer-append/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1157
 run/0: instruction buffer-append/1
-run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient 
+run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient/29 
 run/0: product 0 is 1062
 mem/0: storing 1062 in location 1159
 run/0: instruction buffer-append/2
-run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient 
+run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient/29 
 run/0: product 0 is 45
 mem/0: storing 45 in location 1160
 run/0: instruction buffer-append/4
-run/0: {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]} <- buffer-full? {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]}
+run/0: {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]} <- buffer-full?/103 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]}
 mem/0: location 1159 is 1062
 run/0: instruction buffer-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1188
 run/0: instruction buffer-full?/1
-run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient 
+run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient/29 
 run/0: product 0 is 1062
 mem/0: storing 1062 in location 1190
 run/0: instruction buffer-full?/2
-run/0: {name: "len", value: 2, type: 1, properties: ["len": "integer"]} <- get {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
+run/0: {name: "len", value: 2, type: 1, properties: ["len": "integer"]} <- get/23 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
 run/0: ingredient 0 is in
 mem/0: location 1190 is 1062
 run/0: ingredient 1 is length
@@ -339,7 +339,7 @@ mem/0: location 1062 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1191
 run/0: instruction buffer-full?/3
-run/0: {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
+run/0: {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get/23 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is in
 mem/0: location 1190 is 1062
 run/0: ingredient 1 is data
@@ -349,11 +349,11 @@ mem/0: location 1063 is 1064
 run/0: product 0 is 1064
 mem/0: storing 1064 in location 1192
 run/0: instruction buffer-full?/4
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- length {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}
+run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- length/27 {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}
 mem/0: location 1192 is 1064
 mem/0: storing 30 in location 1193
 run/0: instruction buffer-full?/5
-run/0: {name: "result", value: 5, type: 3, properties: ["result": "boolean"]} <- greater-or-equal {name: "len", value: 2, type: 1, properties: ["len": "integer"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
+run/0: {name: "result", value: 5, type: 3, properties: ["result": "boolean"]} <- greater-or-equal/16 {name: "len", value: 2, type: 1, properties: ["len": "integer"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
 run/0: ingredient 0 is len
 mem/0: location 1191 is 1
 run/0: ingredient 1 is capacity
@@ -361,18 +361,18 @@ mem/0: location 1193 is 30
 run/0: product 0 is 0
 mem/0: storing 0 in location 1194
 run/0: instruction buffer-full?/6
-run/0: reply {name: "result", value: 5, type: 3, properties: ["result": "boolean"]}
+run/0: reply/32 {name: "result", value: 5, type: 3, properties: ["result": "boolean"]}
 mem/0: location 1194 is 0
 run/0: result 0 is 0
 mem/0: storing 0 in location 1161
 run/0: instruction buffer-append/5
-run/0: break-unless {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1161 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 7
 run/0: instruction buffer-append/8
-run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer"]} <- get-address {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
+run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer"]} <- get-address/24 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
 run/0: ingredient 0 is in
 mem/0: location 1159 is 1062
 run/0: ingredient 1 is length
@@ -380,7 +380,7 @@ run/0: address to copy is 1062
 run/0: product 0 is 1062
 mem/0: storing 1062 in location 1162
 run/0: instruction buffer-append/9
-run/0: {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
+run/0: {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get/23 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is in
 mem/0: location 1159 is 1062
 run/0: ingredient 1 is data
@@ -390,7 +390,7 @@ mem/0: location 1063 is 1064
 run/0: product 0 is 1064
 mem/0: storing 1064 in location 1163
 run/0: instruction buffer-append/10
-run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character"]} <- index-address {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}, {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
+run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character"]} <- index-address/26 {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}, {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
 run/0: ingredient 0 is s
 mem/0: location 1163 is 1064
 run/0: ingredient 1 is {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
@@ -400,13 +400,13 @@ run/0: address to copy is 1066
 run/0: product 0 is 1066
 mem/0: storing 1066 in location 1164
 run/0: instruction buffer-append/11
-run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy {name: "c", value: 2, type: 4, properties: ["c": "character"]}
+run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy/1 {name: "c", value: 2, type: 4, properties: ["c": "character"]}
 run/0: ingredient 0 is c
 mem/0: location 1160 is 45
 mem/0: location 1164 is 1066
 mem/0: storing 45 in location 1066
 run/0: instruction buffer-append/12
-run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]} <- add {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]} <- add/2 {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is len
 mem/0: location 1162 is 1062
 mem/0: location 1062 is 1
@@ -415,12 +415,12 @@ run/0: product 0 is 2
 mem/0: location 1162 is 1062
 mem/0: storing 2 in location 1062
 run/0: instruction buffer-append/13
-run/0: reply {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "same-as-ingredient": "0"]}
+run/0: reply/32 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "same-as-ingredient": "0"]}
 mem/0: location 1159 is 1062
 run/0: result 0 is 1062
 mem/0: storing 1062 in location 1006
 run/0: instruction integer-to-decimal-string/28
-run/0: {name: "len", value: 10, type: 1, properties: ["len": "integer"]} <- get {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
+run/0: {name: "len", value: 10, type: 1, properties: ["len": "integer"]} <- get/23 {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
 run/0: ingredient 0 is tmp
 mem/0: location 1006 is 1062
 run/0: ingredient 1 is length
@@ -430,7 +430,7 @@ mem/0: location 1062 is 2
 run/0: product 0 is 2
 mem/0: storing 2 in location 1011
 run/0: instruction integer-to-decimal-string/29
-run/0: {name: "buf", value: 11, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
+run/0: {name: "buf", value: 11, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get/23 {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is tmp
 mem/0: location 1006 is 1062
 run/0: ingredient 1 is data
@@ -440,36 +440,36 @@ mem/0: location 1063 is 1064
 run/0: product 0 is 1064
 mem/0: storing 1064 in location 1012
 run/0: instruction integer-to-decimal-string/30
-run/0: {name: "result", value: 2, type: 2-5-4, properties: ["result": "address":"array":"character"]} <- new {name: "character", value: 4, type: 0, properties: ["character": "type"]}, {name: "len", value: 10, type: 1, properties: ["len": "integer"]}
+run/0: {name: "result", value: 2, type: 2-5-4, properties: ["result": "address":"array":"character"]} <- new/41 {name: "character", value: 4, type: 0, properties: ["character": "type"]}, {name: "len", value: 10, type: 1, properties: ["len": "integer"]}
 mem/0: location 1011 is 2
 mem/0: array size is 2
 mem/0: new alloc: 1219
 mem/0: storing 1219 in location 1003
 run/0: instruction integer-to-decimal-string/31
-run/0: {name: "i", value: 12, type: 1, properties: ["i": "integer"]} <- subtract {name: "len", value: 10, type: 1, properties: ["len": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 12, type: 1, properties: ["i": "integer"]} <- subtract/3 {name: "len", value: 10, type: 1, properties: ["len": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is len
 mem/0: location 1011 is 2
 run/0: ingredient 1 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1013
 run/0: instruction integer-to-decimal-string/32
-run/0: {name: "j", value: 13, type: 1, properties: ["j": "integer"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "j", value: 13, type: 1, properties: ["j": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 1014
 run/0: instruction integer-to-decimal-string/34
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- lesser-than {name: "i", value: 12, type: 1, properties: ["i": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- lesser-than/15 {name: "i", value: 12, type: 1, properties: ["i": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1013 is 1
 run/0: ingredient 1 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1008
 run/0: instruction integer-to-decimal-string/35
-run/0: break-if {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1008 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction integer-to-decimal-string/36
-run/0: {name: "src", value: 14, type: 4, properties: ["src": "character"]} <- index {name: "buf", value: 11, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 12, type: 1, properties: ["i": "integer"]}
+run/0: {name: "src", value: 14, type: 4, properties: ["src": "character"]} <- index/25 {name: "buf", value: 11, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 12, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "buf", value: 11, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}
 mem/0: location 1012 is 1064
 run/0: ingredient 1 is {name: "i", value: 12, type: 1, properties: ["i": "integer"]}
@@ -480,7 +480,7 @@ mem/0: location 1066 is 45
 run/0: product 0 is 45
 mem/0: storing 45 in location 1015
 run/0: instruction integer-to-decimal-string/37
-run/0: {name: "dest", value: 15, type: 2-4, properties: ["dest": "address":"character"]} <- index-address {name: "result", value: 2, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "j", value: 13, type: 1, properties: ["j": "integer"]}
+run/0: {name: "dest", value: 15, type: 2-4, properties: ["dest": "address":"character"]} <- index-address/26 {name: "result", value: 2, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "j", value: 13, type: 1, properties: ["j": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1003 is 1219
 run/0: ingredient 1 is {name: "j", value: 13, type: 1, properties: ["j": "integer"]}
@@ -489,43 +489,43 @@ run/0: address to copy is 1220
 run/0: product 0 is 1220
 mem/0: storing 1220 in location 1016
 run/0: instruction integer-to-decimal-string/38
-run/0: {name: "dest", value: 15, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy {name: "src", value: 14, type: 4, properties: ["src": "character"]}
+run/0: {name: "dest", value: 15, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy/1 {name: "src", value: 14, type: 4, properties: ["src": "character"]}
 run/0: ingredient 0 is src
 mem/0: location 1015 is 45
 mem/0: location 1016 is 1220
 mem/0: storing 45 in location 1220
 run/0: instruction integer-to-decimal-string/39
-run/0: {name: "i", value: 12, type: 1, properties: ["i": "integer"]} <- subtract {name: "i", value: 12, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 12, type: 1, properties: ["i": "integer"]} <- subtract/3 {name: "i", value: 12, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1013 is 1
 run/0: ingredient 1 is 1
 run/0: product 0 is 0
 mem/0: storing 0 in location 1013
 run/0: instruction integer-to-decimal-string/40
-run/0: {name: "j", value: 13, type: 1, properties: ["j": "integer"]} <- add {name: "j", value: 13, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "j", value: 13, type: 1, properties: ["j": "integer"]} <- add/2 {name: "j", value: 13, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is j
 mem/0: location 1014 is 0
 run/0: ingredient 1 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1014
 run/0: instruction integer-to-decimal-string/41
-run/0: loop {name: "", value: -8, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
 run/0: ingredient 0 is -8
 run/0: jumping to instruction 34
 run/0: instruction integer-to-decimal-string/34
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- lesser-than {name: "i", value: 12, type: 1, properties: ["i": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- lesser-than/15 {name: "i", value: 12, type: 1, properties: ["i": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1013 is 0
 run/0: ingredient 1 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1008
 run/0: instruction integer-to-decimal-string/35
-run/0: break-if {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1008 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction integer-to-decimal-string/36
-run/0: {name: "src", value: 14, type: 4, properties: ["src": "character"]} <- index {name: "buf", value: 11, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 12, type: 1, properties: ["i": "integer"]}
+run/0: {name: "src", value: 14, type: 4, properties: ["src": "character"]} <- index/25 {name: "buf", value: 11, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 12, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "buf", value: 11, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}
 mem/0: location 1012 is 1064
 run/0: ingredient 1 is {name: "i", value: 12, type: 1, properties: ["i": "integer"]}
@@ -536,7 +536,7 @@ mem/0: location 1065 is 49
 run/0: product 0 is 49
 mem/0: storing 49 in location 1015
 run/0: instruction integer-to-decimal-string/37
-run/0: {name: "dest", value: 15, type: 2-4, properties: ["dest": "address":"character"]} <- index-address {name: "result", value: 2, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "j", value: 13, type: 1, properties: ["j": "integer"]}
+run/0: {name: "dest", value: 15, type: 2-4, properties: ["dest": "address":"character"]} <- index-address/26 {name: "result", value: 2, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "j", value: 13, type: 1, properties: ["j": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1003 is 1219
 run/0: ingredient 1 is {name: "j", value: 13, type: 1, properties: ["j": "integer"]}
@@ -545,49 +545,49 @@ run/0: address to copy is 1221
 run/0: product 0 is 1221
 mem/0: storing 1221 in location 1016
 run/0: instruction integer-to-decimal-string/38
-run/0: {name: "dest", value: 15, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy {name: "src", value: 14, type: 4, properties: ["src": "character"]}
+run/0: {name: "dest", value: 15, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy/1 {name: "src", value: 14, type: 4, properties: ["src": "character"]}
 run/0: ingredient 0 is src
 mem/0: location 1015 is 49
 mem/0: location 1016 is 1221
 mem/0: storing 49 in location 1221
 run/0: instruction integer-to-decimal-string/39
-run/0: {name: "i", value: 12, type: 1, properties: ["i": "integer"]} <- subtract {name: "i", value: 12, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 12, type: 1, properties: ["i": "integer"]} <- subtract/3 {name: "i", value: 12, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1013 is 0
 run/0: ingredient 1 is 1
 run/0: product 0 is -1
 mem/0: storing -1 in location 1013
 run/0: instruction integer-to-decimal-string/40
-run/0: {name: "j", value: 13, type: 1, properties: ["j": "integer"]} <- add {name: "j", value: 13, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "j", value: 13, type: 1, properties: ["j": "integer"]} <- add/2 {name: "j", value: 13, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is j
 mem/0: location 1014 is 1
 run/0: ingredient 1 is 1
 run/0: product 0 is 2
 mem/0: storing 2 in location 1014
 run/0: instruction integer-to-decimal-string/41
-run/0: loop {name: "", value: -8, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
 run/0: ingredient 0 is -8
 run/0: jumping to instruction 34
 run/0: instruction integer-to-decimal-string/34
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- lesser-than {name: "i", value: 12, type: 1, properties: ["i": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- lesser-than/15 {name: "i", value: 12, type: 1, properties: ["i": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1013 is -1
 run/0: ingredient 1 is 0
 run/0: product 0 is 1
 mem/0: storing 1 in location 1008
 run/0: instruction integer-to-decimal-string/35
-run/0: break-if {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1008 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
 run/0: jumping to instruction 42
 run/0: instruction integer-to-decimal-string/43
-run/0: reply {name: "result", value: 2, type: 2-5-4, properties: ["result": "address":"array":"character"]}
+run/0: reply/32 {name: "result", value: 2, type: 2-5-4, properties: ["result": "address":"array":"character"]}
 mem/0: location 1003 is 1219
 run/0: result 0 is 1219
 mem/0: storing 1219 in location 1
 run/0: instruction run1001/1
-run/0: {name: "2", value: 2, type: 5-4, properties: ["2": "array":"character", "raw": ]} <- copy {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "deref": , "raw": ]}
+run/0: {name: "2", value: 2, type: 5-4, properties: ["2": "array":"character", "raw": ]} <- copy/1 {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "deref": , "raw": ]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 1219
 mem/0: location 1219 is 2
@@ -597,7 +597,7 @@ mem/0: storing 2 in location 2
 mem/0: storing 45 in location 3
 mem/0: storing 49 in location 4
 run/0: instruction integer-to-decimal-digit-negative/1
-run/0: memory-should-contain {name: "
+run/0: memory-should-contain/43 {name: "
     2 <- 2
     3 <- 45  # '-'
     4 <- 49  # '1'
diff --git a/cpp/.traces/integer-to-decimal-digit-positive b/cpp/.traces/integer-to-decimal-digit-positive
index d42b63e6..a09aa37a 100644
--- a/cpp/.traces/integer-to-decimal-digit-positive
+++ b/cpp/.traces/integer-to-decimal-digit-positive
@@ -18,7 +18,7 @@ after-brace/0: memory-should-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: integer-to-decimal-digit-positive
 run/0: instruction integer-to-decimal-digit-positive/0
-run/0: run {name: "
+run/0: run/42 {name: "
     1:address:array:character/raw <- integer-to-decimal-string 234:literal
     2:array:character/raw <- copy 1:address:array:character/deref/raw
   ", value: 0, type: 0, properties: ["
@@ -35,50 +35,50 @@ after-brace/0: recipe run1001
 after-brace/0: integer-to-decimal-string ...
 after-brace/0: copy ...
 run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]} <- integer-to-decimal-string {name: "234", value: 234, type: 0, properties: ["234": "literal"]}
+run/0: {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]} <- integer-to-decimal-string/105 {name: "234", value: 234, type: 0, properties: ["234": "literal"]}
 run/0: instruction integer-to-decimal-string/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1000
 run/0: instruction integer-to-decimal-string/1
-run/0: {name: "n", value: 1, type: 1, properties: ["n": "integer"]} <- next-ingredient 
+run/0: {name: "n", value: 1, type: 1, properties: ["n": "integer"]} <- next-ingredient/29 
 run/0: product 0 is 234
 mem/0: storing 234 in location 1002
 run/0: instruction integer-to-decimal-string/3
-run/0: break-if {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "", value: 2, type: , properties: ["": ]}
+run/0: break-if/11 {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "", value: 2, type: , properties: ["": ]}
 mem/0: location 1002 is 234
 run/0: ingredient 0 is 234
 run/0: ingredient 1 is 
 run/0: jumping to instruction 6
 run/0: instruction integer-to-decimal-string/7
-run/0: {name: "negate-result", value: 3, type: 3, properties: ["negate-result": "boolean"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "negate-result", value: 3, type: 3, properties: ["negate-result": "boolean"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 1004
 run/0: instruction integer-to-decimal-string/9
-run/0: {name: "negative?", value: 4, type: 3, properties: ["negative?": "boolean"]} <- lesser-than {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "negative?", value: 4, type: 3, properties: ["negative?": "boolean"]} <- lesser-than/15 {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is n
 mem/0: location 1002 is 234
 run/0: ingredient 1 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1005
 run/0: instruction integer-to-decimal-string/10
-run/0: break-unless {name: "negative?", value: 4, type: 3, properties: ["negative?": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "negative?", value: 4, type: 3, properties: ["negative?": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]}
 mem/0: location 1005 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 13
 run/0: instruction integer-to-decimal-string/14
-run/0: {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer"]} <- init-buffer {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer"]} <- init-buffer/101 {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 run/0: instruction init-buffer/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1031
 run/0: instruction init-buffer/1
-run/0: {name: "result", value: 1, type: 2-9, properties: ["result": "address":"buffer"]} <- new {name: "buffer", value: 9, type: 0, properties: ["buffer": "type"]}
+run/0: {name: "result", value: 1, type: 2-9, properties: ["result": "address":"buffer"]} <- new/41 {name: "buffer", value: 9, type: 0, properties: ["buffer": "type"]}
 mem/0: new alloc: 1062
 mem/0: storing 1062 in location 1033
 run/0: instruction init-buffer/2
-run/0: {name: "len", value: 2, type: 2-1, properties: ["len": "address":"integer"]} <- get-address {name: "result", value: 1, type: 2-9, properties: ["result": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
+run/0: {name: "len", value: 2, type: 2-1, properties: ["len": "address":"integer"]} <- get-address/24 {name: "result", value: 1, type: 2-9, properties: ["result": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1033 is 1062
 run/0: ingredient 1 is length
@@ -86,12 +86,12 @@ run/0: address to copy is 1062
 run/0: product 0 is 1062
 mem/0: storing 1062 in location 1034
 run/0: instruction init-buffer/3
-run/0: {name: "len", value: 2, type: 2-1, properties: ["len": "address":"integer", "deref": ]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "len", value: 2, type: 2-1, properties: ["len": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: location 1034 is 1062
 mem/0: storing 0 in location 1062
 run/0: instruction init-buffer/4
-run/0: {name: "s", value: 3, type: 2-2-5-4, properties: ["s": "address":"address":"array":"character"]} <- get-address {name: "result", value: 1, type: 2-9, properties: ["result": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
+run/0: {name: "s", value: 3, type: 2-2-5-4, properties: ["s": "address":"address":"array":"character"]} <- get-address/24 {name: "result", value: 1, type: 2-9, properties: ["result": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1033 is 1062
 run/0: ingredient 1 is data
@@ -99,39 +99,39 @@ run/0: address to copy is 1063
 run/0: product 0 is 1063
 mem/0: storing 1063 in location 1035
 run/0: instruction init-buffer/5
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- next-ingredient 
+run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- next-ingredient/29 
 run/0: product 0 is 30
 mem/0: storing 30 in location 1036
 run/0: instruction init-buffer/6
-run/0: {name: "s", value: 3, type: 2-2-5-4, properties: ["s": "address":"address":"array":"character", "deref": ]} <- new {name: "character", value: 4, type: 0, properties: ["character": "type"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
+run/0: {name: "s", value: 3, type: 2-2-5-4, properties: ["s": "address":"address":"array":"character", "deref": ]} <- new/41 {name: "character", value: 4, type: 0, properties: ["character": "type"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
 mem/0: location 1036 is 30
 mem/0: array size is 30
 mem/0: new alloc: 1064
 mem/0: location 1035 is 1063
 mem/0: storing 1064 in location 1063
 run/0: instruction init-buffer/7
-run/0: reply {name: "result", value: 1, type: 2-9, properties: ["result": "address":"buffer"]}
+run/0: reply/32 {name: "result", value: 1, type: 2-9, properties: ["result": "address":"buffer"]}
 mem/0: location 1033 is 1062
 run/0: result 0 is 1062
 mem/0: storing 1062 in location 1006
 run/0: instruction integer-to-decimal-string/15
-run/0: {name: "digit-base", value: 6, type: 1, properties: ["digit-base": "integer"]} <- copy {name: "48", value: 48, type: 0, properties: ["48": "literal"]}
+run/0: {name: "digit-base", value: 6, type: 1, properties: ["digit-base": "integer"]} <- copy/1 {name: "48", value: 48, type: 0, properties: ["48": "literal"]}
 run/0: ingredient 0 is 48
 mem/0: storing 48 in location 1007
 run/0: instruction integer-to-decimal-string/17
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- equal {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- equal/13 {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is n
 mem/0: location 1002 is 234
 run/0: ingredient 1 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1008
 run/0: instruction integer-to-decimal-string/18
-run/0: break-if {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
 mem/0: location 1008 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction integer-to-decimal-string/19
-run/0: {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "digit", value: 8, type: 1, properties: ["digit": "integer"]} <- divide-with-remainder {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "10", value: 10, type: 0, properties: ["10": "literal"]}
+run/0: {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "digit", value: 8, type: 1, properties: ["digit": "integer"]} <- divide-with-remainder/6 {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "10", value: 10, type: 0, properties: ["10": "literal"]}
 run/0: ingredient 0 is n
 mem/0: location 1002 is 234
 run/0: ingredient 1 is 10
@@ -140,7 +140,7 @@ mem/0: storing 23 in location 1002
 run/0: product 1 is 4
 mem/0: storing 4 in location 1009
 run/0: instruction integer-to-decimal-string/20
-run/0: {name: "c", value: 9, type: 4, properties: ["c": "character"]} <- add {name: "digit-base", value: 6, type: 1, properties: ["digit-base": "integer"]}, {name: "digit", value: 8, type: 1, properties: ["digit": "integer"]}
+run/0: {name: "c", value: 9, type: 4, properties: ["c": "character"]} <- add/2 {name: "digit-base", value: 6, type: 1, properties: ["digit-base": "integer"]}, {name: "digit", value: 8, type: 1, properties: ["digit": "integer"]}
 run/0: ingredient 0 is digit-base
 mem/0: location 1007 is 48
 run/0: ingredient 1 is digit
@@ -148,34 +148,34 @@ mem/0: location 1009 is 4
 run/0: product 0 is 52
 mem/0: storing 52 in location 1010
 run/0: instruction integer-to-decimal-string/21
-run/0: {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer"]} <- buffer-append {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer"]}, {name: "c", value: 9, type: 4, properties: ["c": "character"]}
+run/0: {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer"]} <- buffer-append/104 {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer"]}, {name: "c", value: 9, type: 4, properties: ["c": "character"]}
 mem/0: location 1006 is 1062
 mem/0: location 1010 is 52
 run/0: instruction buffer-append/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1095
 run/0: instruction buffer-append/1
-run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient 
+run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient/29 
 run/0: product 0 is 1062
 mem/0: storing 1062 in location 1097
 run/0: instruction buffer-append/2
-run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient 
+run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient/29 
 run/0: product 0 is 52
 mem/0: storing 52 in location 1098
 run/0: instruction buffer-append/4
-run/0: {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]} <- buffer-full? {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]}
+run/0: {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]} <- buffer-full?/103 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]}
 mem/0: location 1097 is 1062
 run/0: instruction buffer-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1126
 run/0: instruction buffer-full?/1
-run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient 
+run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient/29 
 run/0: product 0 is 1062
 mem/0: storing 1062 in location 1128
 run/0: instruction buffer-full?/2
-run/0: {name: "len", value: 2, type: 1, properties: ["len": "integer"]} <- get {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
+run/0: {name: "len", value: 2, type: 1, properties: ["len": "integer"]} <- get/23 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
 run/0: ingredient 0 is in
 mem/0: location 1128 is 1062
 run/0: ingredient 1 is length
@@ -185,7 +185,7 @@ mem/0: location 1062 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1129
 run/0: instruction buffer-full?/3
-run/0: {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
+run/0: {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get/23 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is in
 mem/0: location 1128 is 1062
 run/0: ingredient 1 is data
@@ -195,11 +195,11 @@ mem/0: location 1063 is 1064
 run/0: product 0 is 1064
 mem/0: storing 1064 in location 1130
 run/0: instruction buffer-full?/4
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- length {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}
+run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- length/27 {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}
 mem/0: location 1130 is 1064
 mem/0: storing 30 in location 1131
 run/0: instruction buffer-full?/5
-run/0: {name: "result", value: 5, type: 3, properties: ["result": "boolean"]} <- greater-or-equal {name: "len", value: 2, type: 1, properties: ["len": "integer"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
+run/0: {name: "result", value: 5, type: 3, properties: ["result": "boolean"]} <- greater-or-equal/16 {name: "len", value: 2, type: 1, properties: ["len": "integer"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
 run/0: ingredient 0 is len
 mem/0: location 1129 is 0
 run/0: ingredient 1 is capacity
@@ -207,18 +207,18 @@ mem/0: location 1131 is 30
 run/0: product 0 is 0
 mem/0: storing 0 in location 1132
 run/0: instruction buffer-full?/6
-run/0: reply {name: "result", value: 5, type: 3, properties: ["result": "boolean"]}
+run/0: reply/32 {name: "result", value: 5, type: 3, properties: ["result": "boolean"]}
 mem/0: location 1132 is 0
 run/0: result 0 is 0
 mem/0: storing 0 in location 1099
 run/0: instruction buffer-append/5
-run/0: break-unless {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1099 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 7
 run/0: instruction buffer-append/8
-run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer"]} <- get-address {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
+run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer"]} <- get-address/24 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
 run/0: ingredient 0 is in
 mem/0: location 1097 is 1062
 run/0: ingredient 1 is length
@@ -226,7 +226,7 @@ run/0: address to copy is 1062
 run/0: product 0 is 1062
 mem/0: storing 1062 in location 1100
 run/0: instruction buffer-append/9
-run/0: {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
+run/0: {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get/23 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is in
 mem/0: location 1097 is 1062
 run/0: ingredient 1 is data
@@ -236,7 +236,7 @@ mem/0: location 1063 is 1064
 run/0: product 0 is 1064
 mem/0: storing 1064 in location 1101
 run/0: instruction buffer-append/10
-run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character"]} <- index-address {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}, {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
+run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character"]} <- index-address/26 {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}, {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
 run/0: ingredient 0 is s
 mem/0: location 1101 is 1064
 run/0: ingredient 1 is {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
@@ -246,13 +246,13 @@ run/0: address to copy is 1065
 run/0: product 0 is 1065
 mem/0: storing 1065 in location 1102
 run/0: instruction buffer-append/11
-run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy {name: "c", value: 2, type: 4, properties: ["c": "character"]}
+run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy/1 {name: "c", value: 2, type: 4, properties: ["c": "character"]}
 run/0: ingredient 0 is c
 mem/0: location 1098 is 52
 mem/0: location 1102 is 1065
 mem/0: storing 52 in location 1065
 run/0: instruction buffer-append/12
-run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]} <- add {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]} <- add/2 {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is len
 mem/0: location 1100 is 1062
 mem/0: location 1062 is 0
@@ -261,28 +261,28 @@ run/0: product 0 is 1
 mem/0: location 1100 is 1062
 mem/0: storing 1 in location 1062
 run/0: instruction buffer-append/13
-run/0: reply {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "same-as-ingredient": "0"]}
+run/0: reply/32 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "same-as-ingredient": "0"]}
 mem/0: location 1097 is 1062
 run/0: result 0 is 1062
 mem/0: storing 1062 in location 1006
 run/0: instruction integer-to-decimal-string/22
-run/0: loop {name: "", value: -6, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
 run/0: ingredient 0 is -6
 run/0: jumping to instruction 17
 run/0: instruction integer-to-decimal-string/17
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- equal {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- equal/13 {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is n
 mem/0: location 1002 is 23
 run/0: ingredient 1 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1008
 run/0: instruction integer-to-decimal-string/18
-run/0: break-if {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
 mem/0: location 1008 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction integer-to-decimal-string/19
-run/0: {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "digit", value: 8, type: 1, properties: ["digit": "integer"]} <- divide-with-remainder {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "10", value: 10, type: 0, properties: ["10": "literal"]}
+run/0: {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "digit", value: 8, type: 1, properties: ["digit": "integer"]} <- divide-with-remainder/6 {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "10", value: 10, type: 0, properties: ["10": "literal"]}
 run/0: ingredient 0 is n
 mem/0: location 1002 is 23
 run/0: ingredient 1 is 10
@@ -291,7 +291,7 @@ mem/0: storing 2 in location 1002
 run/0: product 1 is 3
 mem/0: storing 3 in location 1009
 run/0: instruction integer-to-decimal-string/20
-run/0: {name: "c", value: 9, type: 4, properties: ["c": "character"]} <- add {name: "digit-base", value: 6, type: 1, properties: ["digit-base": "integer"]}, {name: "digit", value: 8, type: 1, properties: ["digit": "integer"]}
+run/0: {name: "c", value: 9, type: 4, properties: ["c": "character"]} <- add/2 {name: "digit-base", value: 6, type: 1, properties: ["digit-base": "integer"]}, {name: "digit", value: 8, type: 1, properties: ["digit": "integer"]}
 run/0: ingredient 0 is digit-base
 mem/0: location 1007 is 48
 run/0: ingredient 1 is digit
@@ -299,34 +299,34 @@ mem/0: location 1009 is 3
 run/0: product 0 is 51
 mem/0: storing 51 in location 1010
 run/0: instruction integer-to-decimal-string/21
-run/0: {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer"]} <- buffer-append {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer"]}, {name: "c", value: 9, type: 4, properties: ["c": "character"]}
+run/0: {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer"]} <- buffer-append/104 {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer"]}, {name: "c", value: 9, type: 4, properties: ["c": "character"]}
 mem/0: location 1006 is 1062
 mem/0: location 1010 is 51
 run/0: instruction buffer-append/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1157
 run/0: instruction buffer-append/1
-run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient 
+run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient/29 
 run/0: product 0 is 1062
 mem/0: storing 1062 in location 1159
 run/0: instruction buffer-append/2
-run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient 
+run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient/29 
 run/0: product 0 is 51
 mem/0: storing 51 in location 1160
 run/0: instruction buffer-append/4
-run/0: {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]} <- buffer-full? {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]}
+run/0: {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]} <- buffer-full?/103 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]}
 mem/0: location 1159 is 1062
 run/0: instruction buffer-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1188
 run/0: instruction buffer-full?/1
-run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient 
+run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient/29 
 run/0: product 0 is 1062
 mem/0: storing 1062 in location 1190
 run/0: instruction buffer-full?/2
-run/0: {name: "len", value: 2, type: 1, properties: ["len": "integer"]} <- get {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
+run/0: {name: "len", value: 2, type: 1, properties: ["len": "integer"]} <- get/23 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
 run/0: ingredient 0 is in
 mem/0: location 1190 is 1062
 run/0: ingredient 1 is length
@@ -336,7 +336,7 @@ mem/0: location 1062 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1191
 run/0: instruction buffer-full?/3
-run/0: {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
+run/0: {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get/23 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is in
 mem/0: location 1190 is 1062
 run/0: ingredient 1 is data
@@ -346,11 +346,11 @@ mem/0: location 1063 is 1064
 run/0: product 0 is 1064
 mem/0: storing 1064 in location 1192
 run/0: instruction buffer-full?/4
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- length {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}
+run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- length/27 {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}
 mem/0: location 1192 is 1064
 mem/0: storing 30 in location 1193
 run/0: instruction buffer-full?/5
-run/0: {name: "result", value: 5, type: 3, properties: ["result": "boolean"]} <- greater-or-equal {name: "len", value: 2, type: 1, properties: ["len": "integer"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
+run/0: {name: "result", value: 5, type: 3, properties: ["result": "boolean"]} <- greater-or-equal/16 {name: "len", value: 2, type: 1, properties: ["len": "integer"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
 run/0: ingredient 0 is len
 mem/0: location 1191 is 1
 run/0: ingredient 1 is capacity
@@ -358,18 +358,18 @@ mem/0: location 1193 is 30
 run/0: product 0 is 0
 mem/0: storing 0 in location 1194
 run/0: instruction buffer-full?/6
-run/0: reply {name: "result", value: 5, type: 3, properties: ["result": "boolean"]}
+run/0: reply/32 {name: "result", value: 5, type: 3, properties: ["result": "boolean"]}
 mem/0: location 1194 is 0
 run/0: result 0 is 0
 mem/0: storing 0 in location 1161
 run/0: instruction buffer-append/5
-run/0: break-unless {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1161 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 7
 run/0: instruction buffer-append/8
-run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer"]} <- get-address {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
+run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer"]} <- get-address/24 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
 run/0: ingredient 0 is in
 mem/0: location 1159 is 1062
 run/0: ingredient 1 is length
@@ -377,7 +377,7 @@ run/0: address to copy is 1062
 run/0: product 0 is 1062
 mem/0: storing 1062 in location 1162
 run/0: instruction buffer-append/9
-run/0: {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
+run/0: {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get/23 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is in
 mem/0: location 1159 is 1062
 run/0: ingredient 1 is data
@@ -387,7 +387,7 @@ mem/0: location 1063 is 1064
 run/0: product 0 is 1064
 mem/0: storing 1064 in location 1163
 run/0: instruction buffer-append/10
-run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character"]} <- index-address {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}, {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
+run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character"]} <- index-address/26 {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}, {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
 run/0: ingredient 0 is s
 mem/0: location 1163 is 1064
 run/0: ingredient 1 is {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
@@ -397,13 +397,13 @@ run/0: address to copy is 1066
 run/0: product 0 is 1066
 mem/0: storing 1066 in location 1164
 run/0: instruction buffer-append/11
-run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy {name: "c", value: 2, type: 4, properties: ["c": "character"]}
+run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy/1 {name: "c", value: 2, type: 4, properties: ["c": "character"]}
 run/0: ingredient 0 is c
 mem/0: location 1160 is 51
 mem/0: location 1164 is 1066
 mem/0: storing 51 in location 1066
 run/0: instruction buffer-append/12
-run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]} <- add {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]} <- add/2 {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is len
 mem/0: location 1162 is 1062
 mem/0: location 1062 is 1
@@ -412,28 +412,28 @@ run/0: product 0 is 2
 mem/0: location 1162 is 1062
 mem/0: storing 2 in location 1062
 run/0: instruction buffer-append/13
-run/0: reply {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "same-as-ingredient": "0"]}
+run/0: reply/32 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "same-as-ingredient": "0"]}
 mem/0: location 1159 is 1062
 run/0: result 0 is 1062
 mem/0: storing 1062 in location 1006
 run/0: instruction integer-to-decimal-string/22
-run/0: loop {name: "", value: -6, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
 run/0: ingredient 0 is -6
 run/0: jumping to instruction 17
 run/0: instruction integer-to-decimal-string/17
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- equal {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- equal/13 {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is n
 mem/0: location 1002 is 2
 run/0: ingredient 1 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1008
 run/0: instruction integer-to-decimal-string/18
-run/0: break-if {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
 mem/0: location 1008 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction integer-to-decimal-string/19
-run/0: {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "digit", value: 8, type: 1, properties: ["digit": "integer"]} <- divide-with-remainder {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "10", value: 10, type: 0, properties: ["10": "literal"]}
+run/0: {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "digit", value: 8, type: 1, properties: ["digit": "integer"]} <- divide-with-remainder/6 {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "10", value: 10, type: 0, properties: ["10": "literal"]}
 run/0: ingredient 0 is n
 mem/0: location 1002 is 2
 run/0: ingredient 1 is 10
@@ -442,7 +442,7 @@ mem/0: storing 0 in location 1002
 run/0: product 1 is 2
 mem/0: storing 2 in location 1009
 run/0: instruction integer-to-decimal-string/20
-run/0: {name: "c", value: 9, type: 4, properties: ["c": "character"]} <- add {name: "digit-base", value: 6, type: 1, properties: ["digit-base": "integer"]}, {name: "digit", value: 8, type: 1, properties: ["digit": "integer"]}
+run/0: {name: "c", value: 9, type: 4, properties: ["c": "character"]} <- add/2 {name: "digit-base", value: 6, type: 1, properties: ["digit-base": "integer"]}, {name: "digit", value: 8, type: 1, properties: ["digit": "integer"]}
 run/0: ingredient 0 is digit-base
 mem/0: location 1007 is 48
 run/0: ingredient 1 is digit
@@ -450,34 +450,34 @@ mem/0: location 1009 is 2
 run/0: product 0 is 50
 mem/0: storing 50 in location 1010
 run/0: instruction integer-to-decimal-string/21
-run/0: {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer"]} <- buffer-append {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer"]}, {name: "c", value: 9, type: 4, properties: ["c": "character"]}
+run/0: {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer"]} <- buffer-append/104 {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer"]}, {name: "c", value: 9, type: 4, properties: ["c": "character"]}
 mem/0: location 1006 is 1062
 mem/0: location 1010 is 50
 run/0: instruction buffer-append/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1219
 run/0: instruction buffer-append/1
-run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient 
+run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient/29 
 run/0: product 0 is 1062
 mem/0: storing 1062 in location 1221
 run/0: instruction buffer-append/2
-run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient 
+run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient/29 
 run/0: product 0 is 50
 mem/0: storing 50 in location 1222
 run/0: instruction buffer-append/4
-run/0: {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]} <- buffer-full? {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]}
+run/0: {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]} <- buffer-full?/103 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]}
 mem/0: location 1221 is 1062
 run/0: instruction buffer-full?/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1250
 run/0: instruction buffer-full?/1
-run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient 
+run/0: {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer"]} <- next-ingredient/29 
 run/0: product 0 is 1062
 mem/0: storing 1062 in location 1252
 run/0: instruction buffer-full?/2
-run/0: {name: "len", value: 2, type: 1, properties: ["len": "integer"]} <- get {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
+run/0: {name: "len", value: 2, type: 1, properties: ["len": "integer"]} <- get/23 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
 run/0: ingredient 0 is in
 mem/0: location 1252 is 1062
 run/0: ingredient 1 is length
@@ -487,7 +487,7 @@ mem/0: location 1062 is 2
 run/0: product 0 is 2
 mem/0: storing 2 in location 1253
 run/0: instruction buffer-full?/3
-run/0: {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
+run/0: {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get/23 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is in
 mem/0: location 1252 is 1062
 run/0: ingredient 1 is data
@@ -497,11 +497,11 @@ mem/0: location 1063 is 1064
 run/0: product 0 is 1064
 mem/0: storing 1064 in location 1254
 run/0: instruction buffer-full?/4
-run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- length {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}
+run/0: {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]} <- length/27 {name: "s", value: 3, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}
 mem/0: location 1254 is 1064
 mem/0: storing 30 in location 1255
 run/0: instruction buffer-full?/5
-run/0: {name: "result", value: 5, type: 3, properties: ["result": "boolean"]} <- greater-or-equal {name: "len", value: 2, type: 1, properties: ["len": "integer"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
+run/0: {name: "result", value: 5, type: 3, properties: ["result": "boolean"]} <- greater-or-equal/16 {name: "len", value: 2, type: 1, properties: ["len": "integer"]}, {name: "capacity", value: 4, type: 1, properties: ["capacity": "integer"]}
 run/0: ingredient 0 is len
 mem/0: location 1253 is 2
 run/0: ingredient 1 is capacity
@@ -509,18 +509,18 @@ mem/0: location 1255 is 30
 run/0: product 0 is 0
 mem/0: storing 0 in location 1256
 run/0: instruction buffer-full?/6
-run/0: reply {name: "result", value: 5, type: 3, properties: ["result": "boolean"]}
+run/0: reply/32 {name: "result", value: 5, type: 3, properties: ["result": "boolean"]}
 mem/0: location 1256 is 0
 run/0: result 0 is 0
 mem/0: storing 0 in location 1223
 run/0: instruction buffer-append/5
-run/0: break-unless {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "full?", value: 3, type: 3, properties: ["full?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1223 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 7
 run/0: instruction buffer-append/8
-run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer"]} <- get-address {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
+run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer"]} <- get-address/24 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
 run/0: ingredient 0 is in
 mem/0: location 1221 is 1062
 run/0: ingredient 1 is length
@@ -528,7 +528,7 @@ run/0: address to copy is 1062
 run/0: product 0 is 1062
 mem/0: storing 1062 in location 1224
 run/0: instruction buffer-append/9
-run/0: {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
+run/0: {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character"]} <- get/23 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is in
 mem/0: location 1221 is 1062
 run/0: ingredient 1 is data
@@ -538,7 +538,7 @@ mem/0: location 1063 is 1064
 run/0: product 0 is 1064
 mem/0: storing 1064 in location 1225
 run/0: instruction buffer-append/10
-run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character"]} <- index-address {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}, {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
+run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character"]} <- index-address/26 {name: "s", value: 5, type: 2-5-4, properties: ["s": "address":"array":"character", "deref": ]}, {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
 run/0: ingredient 0 is s
 mem/0: location 1225 is 1064
 run/0: ingredient 1 is {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
@@ -548,13 +548,13 @@ run/0: address to copy is 1067
 run/0: product 0 is 1067
 mem/0: storing 1067 in location 1226
 run/0: instruction buffer-append/11
-run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy {name: "c", value: 2, type: 4, properties: ["c": "character"]}
+run/0: {name: "dest", value: 6, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy/1 {name: "c", value: 2, type: 4, properties: ["c": "character"]}
 run/0: ingredient 0 is c
 mem/0: location 1222 is 50
 mem/0: location 1226 is 1067
 mem/0: storing 50 in location 1067
 run/0: instruction buffer-append/12
-run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]} <- add {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]} <- add/2 {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is len
 mem/0: location 1224 is 1062
 mem/0: location 1062 is 2
@@ -563,35 +563,35 @@ run/0: product 0 is 3
 mem/0: location 1224 is 1062
 mem/0: storing 3 in location 1062
 run/0: instruction buffer-append/13
-run/0: reply {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "same-as-ingredient": "0"]}
+run/0: reply/32 {name: "in", value: 1, type: 2-9, properties: ["in": "address":"buffer", "same-as-ingredient": "0"]}
 mem/0: location 1221 is 1062
 run/0: result 0 is 1062
 mem/0: storing 1062 in location 1006
 run/0: instruction integer-to-decimal-string/22
-run/0: loop {name: "", value: -6, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
 run/0: ingredient 0 is -6
 run/0: jumping to instruction 17
 run/0: instruction integer-to-decimal-string/17
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- equal {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- equal/13 {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is n
 mem/0: location 1002 is 0
 run/0: ingredient 1 is 0
 run/0: product 0 is 1
 mem/0: storing 1 in location 1008
 run/0: instruction integer-to-decimal-string/18
-run/0: break-if {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
 mem/0: location 1008 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
 run/0: jumping to instruction 23
 run/0: instruction integer-to-decimal-string/25
-run/0: break-unless {name: "negate-result", value: 3, type: 3, properties: ["negate-result": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "negate-result", value: 3, type: 3, properties: ["negate-result": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1004 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 27
 run/0: instruction integer-to-decimal-string/28
-run/0: {name: "len", value: 10, type: 1, properties: ["len": "integer"]} <- get {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
+run/0: {name: "len", value: 10, type: 1, properties: ["len": "integer"]} <- get/23 {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer", "deref": ]}, {name: "length", value: 0, type: 0, properties: ["length": "offset"]}
 run/0: ingredient 0 is tmp
 mem/0: location 1006 is 1062
 run/0: ingredient 1 is length
@@ -601,7 +601,7 @@ mem/0: location 1062 is 3
 run/0: product 0 is 3
 mem/0: storing 3 in location 1011
 run/0: instruction integer-to-decimal-string/29
-run/0: {name: "buf", value: 11, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
+run/0: {name: "buf", value: 11, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get/23 {name: "tmp", value: 5, type: 2-9, properties: ["tmp": "address":"buffer", "deref": ]}, {name: "data", value: 1, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is tmp
 mem/0: location 1006 is 1062
 run/0: ingredient 1 is data
@@ -611,36 +611,36 @@ mem/0: location 1063 is 1064
 run/0: product 0 is 1064
 mem/0: storing 1064 in location 1012
 run/0: instruction integer-to-decimal-string/30
-run/0: {name: "result", value: 2, type: 2-5-4, properties: ["result": "address":"array":"character"]} <- new {name: "character", value: 4, type: 0, properties: ["character": "type"]}, {name: "len", value: 10, type: 1, properties: ["len": "integer"]}
+run/0: {name: "result", value: 2, type: 2-5-4, properties: ["result": "address":"array":"character"]} <- new/41 {name: "character", value: 4, type: 0, properties: ["character": "type"]}, {name: "len", value: 10, type: 1, properties: ["len": "integer"]}
 mem/0: location 1011 is 3
 mem/0: array size is 3
 mem/0: new alloc: 1281
 mem/0: storing 1281 in location 1003
 run/0: instruction integer-to-decimal-string/31
-run/0: {name: "i", value: 12, type: 1, properties: ["i": "integer"]} <- subtract {name: "len", value: 10, type: 1, properties: ["len": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 12, type: 1, properties: ["i": "integer"]} <- subtract/3 {name: "len", value: 10, type: 1, properties: ["len": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is len
 mem/0: location 1011 is 3
 run/0: ingredient 1 is 1
 run/0: product 0 is 2
 mem/0: storing 2 in location 1013
 run/0: instruction integer-to-decimal-string/32
-run/0: {name: "j", value: 13, type: 1, properties: ["j": "integer"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "j", value: 13, type: 1, properties: ["j": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 1014
 run/0: instruction integer-to-decimal-string/34
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- lesser-than {name: "i", value: 12, type: 1, properties: ["i": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- lesser-than/15 {name: "i", value: 12, type: 1, properties: ["i": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1013 is 2
 run/0: ingredient 1 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1008
 run/0: instruction integer-to-decimal-string/35
-run/0: break-if {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1008 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction integer-to-decimal-string/36
-run/0: {name: "src", value: 14, type: 4, properties: ["src": "character"]} <- index {name: "buf", value: 11, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 12, type: 1, properties: ["i": "integer"]}
+run/0: {name: "src", value: 14, type: 4, properties: ["src": "character"]} <- index/25 {name: "buf", value: 11, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 12, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "buf", value: 11, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}
 mem/0: location 1012 is 1064
 run/0: ingredient 1 is {name: "i", value: 12, type: 1, properties: ["i": "integer"]}
@@ -651,7 +651,7 @@ mem/0: location 1067 is 50
 run/0: product 0 is 50
 mem/0: storing 50 in location 1015
 run/0: instruction integer-to-decimal-string/37
-run/0: {name: "dest", value: 15, type: 2-4, properties: ["dest": "address":"character"]} <- index-address {name: "result", value: 2, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "j", value: 13, type: 1, properties: ["j": "integer"]}
+run/0: {name: "dest", value: 15, type: 2-4, properties: ["dest": "address":"character"]} <- index-address/26 {name: "result", value: 2, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "j", value: 13, type: 1, properties: ["j": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1003 is 1281
 run/0: ingredient 1 is {name: "j", value: 13, type: 1, properties: ["j": "integer"]}
@@ -660,43 +660,43 @@ run/0: address to copy is 1282
 run/0: product 0 is 1282
 mem/0: storing 1282 in location 1016
 run/0: instruction integer-to-decimal-string/38
-run/0: {name: "dest", value: 15, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy {name: "src", value: 14, type: 4, properties: ["src": "character"]}
+run/0: {name: "dest", value: 15, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy/1 {name: "src", value: 14, type: 4, properties: ["src": "character"]}
 run/0: ingredient 0 is src
 mem/0: location 1015 is 50
 mem/0: location 1016 is 1282
 mem/0: storing 50 in location 1282
 run/0: instruction integer-to-decimal-string/39
-run/0: {name: "i", value: 12, type: 1, properties: ["i": "integer"]} <- subtract {name: "i", value: 12, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 12, type: 1, properties: ["i": "integer"]} <- subtract/3 {name: "i", value: 12, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1013 is 2
 run/0: ingredient 1 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1013
 run/0: instruction integer-to-decimal-string/40
-run/0: {name: "j", value: 13, type: 1, properties: ["j": "integer"]} <- add {name: "j", value: 13, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "j", value: 13, type: 1, properties: ["j": "integer"]} <- add/2 {name: "j", value: 13, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is j
 mem/0: location 1014 is 0
 run/0: ingredient 1 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1014
 run/0: instruction integer-to-decimal-string/41
-run/0: loop {name: "", value: -8, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
 run/0: ingredient 0 is -8
 run/0: jumping to instruction 34
 run/0: instruction integer-to-decimal-string/34
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- lesser-than {name: "i", value: 12, type: 1, properties: ["i": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- lesser-than/15 {name: "i", value: 12, type: 1, properties: ["i": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1013 is 1
 run/0: ingredient 1 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1008
 run/0: instruction integer-to-decimal-string/35
-run/0: break-if {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1008 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction integer-to-decimal-string/36
-run/0: {name: "src", value: 14, type: 4, properties: ["src": "character"]} <- index {name: "buf", value: 11, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 12, type: 1, properties: ["i": "integer"]}
+run/0: {name: "src", value: 14, type: 4, properties: ["src": "character"]} <- index/25 {name: "buf", value: 11, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 12, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "buf", value: 11, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}
 mem/0: location 1012 is 1064
 run/0: ingredient 1 is {name: "i", value: 12, type: 1, properties: ["i": "integer"]}
@@ -707,7 +707,7 @@ mem/0: location 1066 is 51
 run/0: product 0 is 51
 mem/0: storing 51 in location 1015
 run/0: instruction integer-to-decimal-string/37
-run/0: {name: "dest", value: 15, type: 2-4, properties: ["dest": "address":"character"]} <- index-address {name: "result", value: 2, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "j", value: 13, type: 1, properties: ["j": "integer"]}
+run/0: {name: "dest", value: 15, type: 2-4, properties: ["dest": "address":"character"]} <- index-address/26 {name: "result", value: 2, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "j", value: 13, type: 1, properties: ["j": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1003 is 1281
 run/0: ingredient 1 is {name: "j", value: 13, type: 1, properties: ["j": "integer"]}
@@ -716,43 +716,43 @@ run/0: address to copy is 1283
 run/0: product 0 is 1283
 mem/0: storing 1283 in location 1016
 run/0: instruction integer-to-decimal-string/38
-run/0: {name: "dest", value: 15, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy {name: "src", value: 14, type: 4, properties: ["src": "character"]}
+run/0: {name: "dest", value: 15, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy/1 {name: "src", value: 14, type: 4, properties: ["src": "character"]}
 run/0: ingredient 0 is src
 mem/0: location 1015 is 51
 mem/0: location 1016 is 1283
 mem/0: storing 51 in location 1283
 run/0: instruction integer-to-decimal-string/39
-run/0: {name: "i", value: 12, type: 1, properties: ["i": "integer"]} <- subtract {name: "i", value: 12, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 12, type: 1, properties: ["i": "integer"]} <- subtract/3 {name: "i", value: 12, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1013 is 1
 run/0: ingredient 1 is 1
 run/0: product 0 is 0
 mem/0: storing 0 in location 1013
 run/0: instruction integer-to-decimal-string/40
-run/0: {name: "j", value: 13, type: 1, properties: ["j": "integer"]} <- add {name: "j", value: 13, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "j", value: 13, type: 1, properties: ["j": "integer"]} <- add/2 {name: "j", value: 13, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is j
 mem/0: location 1014 is 1
 run/0: ingredient 1 is 1
 run/0: product 0 is 2
 mem/0: storing 2 in location 1014
 run/0: instruction integer-to-decimal-string/41
-run/0: loop {name: "", value: -8, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
 run/0: ingredient 0 is -8
 run/0: jumping to instruction 34
 run/0: instruction integer-to-decimal-string/34
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- lesser-than {name: "i", value: 12, type: 1, properties: ["i": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- lesser-than/15 {name: "i", value: 12, type: 1, properties: ["i": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1013 is 0
 run/0: ingredient 1 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1008
 run/0: instruction integer-to-decimal-string/35
-run/0: break-if {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1008 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction integer-to-decimal-string/36
-run/0: {name: "src", value: 14, type: 4, properties: ["src": "character"]} <- index {name: "buf", value: 11, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 12, type: 1, properties: ["i": "integer"]}
+run/0: {name: "src", value: 14, type: 4, properties: ["src": "character"]} <- index/25 {name: "buf", value: 11, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 12, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "buf", value: 11, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}
 mem/0: location 1012 is 1064
 run/0: ingredient 1 is {name: "i", value: 12, type: 1, properties: ["i": "integer"]}
@@ -763,7 +763,7 @@ mem/0: location 1065 is 52
 run/0: product 0 is 52
 mem/0: storing 52 in location 1015
 run/0: instruction integer-to-decimal-string/37
-run/0: {name: "dest", value: 15, type: 2-4, properties: ["dest": "address":"character"]} <- index-address {name: "result", value: 2, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "j", value: 13, type: 1, properties: ["j": "integer"]}
+run/0: {name: "dest", value: 15, type: 2-4, properties: ["dest": "address":"character"]} <- index-address/26 {name: "result", value: 2, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "j", value: 13, type: 1, properties: ["j": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1003 is 1281
 run/0: ingredient 1 is {name: "j", value: 13, type: 1, properties: ["j": "integer"]}
@@ -772,49 +772,49 @@ run/0: address to copy is 1284
 run/0: product 0 is 1284
 mem/0: storing 1284 in location 1016
 run/0: instruction integer-to-decimal-string/38
-run/0: {name: "dest", value: 15, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy {name: "src", value: 14, type: 4, properties: ["src": "character"]}
+run/0: {name: "dest", value: 15, type: 2-4, properties: ["dest": "address":"character", "deref": ]} <- copy/1 {name: "src", value: 14, type: 4, properties: ["src": "character"]}
 run/0: ingredient 0 is src
 mem/0: location 1015 is 52
 mem/0: location 1016 is 1284
 mem/0: storing 52 in location 1284
 run/0: instruction integer-to-decimal-string/39
-run/0: {name: "i", value: 12, type: 1, properties: ["i": "integer"]} <- subtract {name: "i", value: 12, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 12, type: 1, properties: ["i": "integer"]} <- subtract/3 {name: "i", value: 12, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1013 is 0
 run/0: ingredient 1 is 1
 run/0: product 0 is -1
 mem/0: storing -1 in location 1013
 run/0: instruction integer-to-decimal-string/40
-run/0: {name: "j", value: 13, type: 1, properties: ["j": "integer"]} <- add {name: "j", value: 13, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "j", value: 13, type: 1, properties: ["j": "integer"]} <- add/2 {name: "j", value: 13, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is j
 mem/0: location 1014 is 2
 run/0: ingredient 1 is 1
 run/0: product 0 is 3
 mem/0: storing 3 in location 1014
 run/0: instruction integer-to-decimal-string/41
-run/0: loop {name: "", value: -8, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
 run/0: ingredient 0 is -8
 run/0: jumping to instruction 34
 run/0: instruction integer-to-decimal-string/34
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- lesser-than {name: "i", value: 12, type: 1, properties: ["i": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- lesser-than/15 {name: "i", value: 12, type: 1, properties: ["i": "integer"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1013 is -1
 run/0: ingredient 1 is 0
 run/0: product 0 is 1
 mem/0: storing 1 in location 1008
 run/0: instruction integer-to-decimal-string/35
-run/0: break-if {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1008 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
 run/0: jumping to instruction 42
 run/0: instruction integer-to-decimal-string/43
-run/0: reply {name: "result", value: 2, type: 2-5-4, properties: ["result": "address":"array":"character"]}
+run/0: reply/32 {name: "result", value: 2, type: 2-5-4, properties: ["result": "address":"array":"character"]}
 mem/0: location 1003 is 1281
 run/0: result 0 is 1281
 mem/0: storing 1281 in location 1
 run/0: instruction run1001/1
-run/0: {name: "2", value: 2, type: 5-4, properties: ["2": "array":"character", "raw": ]} <- copy {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "deref": , "raw": ]}
+run/0: {name: "2", value: 2, type: 5-4, properties: ["2": "array":"character", "raw": ]} <- copy/1 {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "deref": , "raw": ]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 1281
 mem/0: location 1281 is 3
@@ -826,7 +826,7 @@ mem/0: storing 50 in location 3
 mem/0: storing 51 in location 4
 mem/0: storing 52 in location 5
 run/0: instruction integer-to-decimal-digit-positive/1
-run/0: memory-should-contain {name: "
+run/0: memory-should-contain/43 {name: "
     2:string <- [234]
   ", value: 0, type: 0, properties: ["
     2:string <- [234]
diff --git a/cpp/.traces/integer-to-decimal-digit-zero b/cpp/.traces/integer-to-decimal-digit-zero
index 763b760e..64d5b93d 100644
--- a/cpp/.traces/integer-to-decimal-digit-zero
+++ b/cpp/.traces/integer-to-decimal-digit-zero
@@ -18,7 +18,7 @@ after-brace/0: memory-should-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: integer-to-decimal-digit-zero
 run/0: instruction integer-to-decimal-digit-zero/0
-run/0: run {name: "
+run/0: run/42 {name: "
     1:address:array:character/raw <- integer-to-decimal-string 0:literal
     2:array:character/raw <- copy 1:address:array:character/deref/raw
   ", value: 0, type: 0, properties: ["
@@ -35,30 +35,30 @@ after-brace/0: recipe run1001
 after-brace/0: integer-to-decimal-string ...
 after-brace/0: copy ...
 run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]} <- integer-to-decimal-string {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]} <- integer-to-decimal-string/105 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: instruction integer-to-decimal-string/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1000
 run/0: instruction integer-to-decimal-string/1
-run/0: {name: "n", value: 1, type: 1, properties: ["n": "integer"]} <- next-ingredient 
+run/0: {name: "n", value: 1, type: 1, properties: ["n": "integer"]} <- next-ingredient/29 
 run/0: product 0 is 0
 mem/0: storing 0 in location 1002
 run/0: instruction integer-to-decimal-string/3
-run/0: break-if {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "", value: 2, type: , properties: ["": ]}
+run/0: break-if/11 {name: "n", value: 1, type: 1, properties: ["n": "integer"]}, {name: "", value: 2, type: , properties: ["": ]}
 mem/0: location 1002 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction integer-to-decimal-string/4
-run/0: {name: "result", value: 2, type: 2-5-4, properties: ["result": "address":"array":"character"]} <- new {name: "0", value: 0, type: 0, properties: ["0": "literal-string"]}
+run/0: {name: "result", value: 2, type: 2-5-4, properties: ["result": "address":"array":"character"]} <- new/41 {name: "0", value: 0, type: 0, properties: ["0": "literal-string"]}
 mem/0: storing 1031 in location 1003
 run/0: instruction integer-to-decimal-string/5
-run/0: reply {name: "result", value: 2, type: 2-5-4, properties: ["result": "address":"array":"character"]}
+run/0: reply/32 {name: "result", value: 2, type: 2-5-4, properties: ["result": "address":"array":"character"]}
 mem/0: location 1003 is 1031
 run/0: result 0 is 1031
 mem/0: storing 1031 in location 1
 run/0: instruction run1001/1
-run/0: {name: "2", value: 2, type: 5-4, properties: ["2": "array":"character", "raw": ]} <- copy {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "deref": , "raw": ]}
+run/0: {name: "2", value: 2, type: 5-4, properties: ["2": "array":"character", "raw": ]} <- copy/1 {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "deref": , "raw": ]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 1031
 mem/0: location 1031 is 1
@@ -66,7 +66,7 @@ mem/0: location 1032 is 48
 mem/0: storing 1 in location 2
 mem/0: storing 48 in location 3
 run/0: instruction integer-to-decimal-digit-zero/1
-run/0: memory-should-contain {name: "
+run/0: memory-should-contain/43 {name: "
     2:string <- [0]
   ", value: 0, type: 0, properties: ["
     2:string <- [0]
diff --git a/cpp/.traces/interpolate-at-end b/cpp/.traces/interpolate-at-end
index de8c30dc..08c9aa86 100644
--- a/cpp/.traces/interpolate-at-end
+++ b/cpp/.traces/interpolate-at-end
@@ -22,7 +22,7 @@ after-brace/0: memory-should-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: interpolate-at-end
 run/0: instruction interpolate-at-end/0
-run/0: run {name: "
+run/0: run/42 {name: "
     1:address:array:character/raw <- new [hello, _]
     2:address:array:character/raw <- new [abc]
     3:address:array:character/raw <- interpolate 1:address:array:character/raw, 2:address:array:character/raw
@@ -54,48 +54,48 @@ after-brace/0: new ...
 after-brace/0: interpolate ...
 after-brace/0: copy ...
 run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]} <- new {name: "hello, _", value: 0, type: 0, properties: ["hello, _": "literal-string"]}
+run/0: {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]} <- new/41 {name: "hello, _", value: 0, type: 0, properties: ["hello, _": "literal-string"]}
 mem/0: storing 1000 in location 1
 run/0: instruction run1001/1
-run/0: {name: "2", value: 2, type: 2-5-4, properties: ["2": "address":"array":"character", "raw": ]} <- new {name: "abc", value: 0, type: 0, properties: ["abc": "literal-string"]}
+run/0: {name: "2", value: 2, type: 2-5-4, properties: ["2": "address":"array":"character", "raw": ]} <- new/41 {name: "abc", value: 0, type: 0, properties: ["abc": "literal-string"]}
 mem/0: storing 1009 in location 2
 run/0: instruction run1001/2
-run/0: {name: "3", value: 3, type: 2-5-4, properties: ["3": "address":"array":"character", "raw": ]} <- interpolate {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]}, {name: "2", value: 2, type: 2-5-4, properties: ["2": "address":"array":"character", "raw": ]}
+run/0: {name: "3", value: 3, type: 2-5-4, properties: ["3": "address":"array":"character", "raw": ]} <- interpolate/107 {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]}, {name: "2", value: 2, type: 2-5-4, properties: ["2": "address":"array":"character", "raw": ]}
 mem/0: location 1 is 1000
 mem/0: location 2 is 1009
 run/0: instruction interpolate/0
-run/0: {name: "default-space", value: 0, type: 5-2-1, properties: ["default-space": "array":"address":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "60", value: 60, type: 0, properties: ["60": "literal"]}
+run/0: {name: "default-space", value: 0, type: 5-2-1, properties: ["default-space": "array":"address":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "60", value: 60, type: 0, properties: ["60": "literal"]}
 mem/0: array size is 60
 mem/0: new alloc: 1013
 run/0: instruction interpolate/1
-run/0: {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character"]} <- next-ingredient 
+run/0: {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character"]} <- next-ingredient/29 
 run/0: product 0 is 1000
 mem/0: storing 1000 in location 1015
 run/0: instruction interpolate/2
-run/0: {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]} <- length {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
+run/0: {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]} <- length/27 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
 mem/0: location 1015 is 1000
 mem/0: storing 8 in location 1016
 run/0: instruction interpolate/3
-run/0: {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]} <- copy {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
+run/0: {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]} <- copy/1 {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
 run/0: ingredient 0 is tem-len
 mem/0: location 1016 is 8
 mem/0: storing 8 in location 1017
 run/0: instruction interpolate/5
-run/0: {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character"]}, {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]} <- next-ingredient 
+run/0: {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character"]}, {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]} <- next-ingredient/29 
 run/0: product 0 is 1009
 mem/0: storing 1009 in location 1018
 mem/0: storing 1 in location 1019
 run/0: instruction interpolate/6
-run/0: break-unless {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
 mem/0: location 1019 is 1
 run/0: ingredient 0 is 1
 run/0: jump-unless fell through
 run/0: instruction interpolate/7
-run/0: {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]} <- length {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
+run/0: {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]} <- length/27 {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1018 is 1009
 mem/0: storing 3 in location 1020
 run/0: instruction interpolate/8
-run/0: {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]} <- add {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
+run/0: {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]} <- add/2 {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
 run/0: ingredient 0 is result-len
 mem/0: location 1017 is 8
 run/0: ingredient 1 is a-len
@@ -103,56 +103,56 @@ mem/0: location 1020 is 3
 run/0: product 0 is 11
 mem/0: storing 11 in location 1017
 run/0: instruction interpolate/9
-run/0: {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]} <- subtract {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]} <- subtract/3 {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-len
 mem/0: location 1017 is 11
 run/0: ingredient 1 is 1
 run/0: product 0 is 10
 mem/0: storing 10 in location 1017
 run/0: instruction interpolate/10
-run/0: loop {name: "", value: -6, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
 run/0: ingredient 0 is -6
 run/0: jumping to instruction 5
 run/0: instruction interpolate/5
-run/0: {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character"]}, {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]} <- next-ingredient 
+run/0: {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character"]}, {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]} <- next-ingredient/29 
 mem/0: storing 0 in location 1019
 run/0: instruction interpolate/6
-run/0: break-unless {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
 mem/0: location 1019 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 11
 run/0: instruction interpolate/12
-run/0: rewind-ingredients 
+run/0: rewind-ingredients/30 
 run/0: instruction interpolate/13
-run/0: {name: "_", value: 0, type: 0, properties: ["_": "dummy"]} <- next-ingredient 
+run/0: {name: "_", value: 0, type: 0, properties: ["_": "dummy"]} <- next-ingredient/29 
 run/0: product 0 is 1000
 run/0: instruction interpolate/14
-run/0: {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character"]} <- new {name: "character", value: 4, type: 0, properties: ["character": "type"]}, {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]}
+run/0: {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character"]} <- new/41 {name: "character", value: 4, type: 0, properties: ["character": "type"]}, {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]}
 mem/0: location 1017 is 10
 mem/0: array size is 10
 mem/0: new alloc: 1074
 mem/0: storing 1074 in location 1021
 run/0: instruction interpolate/15
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 1022
 run/0: instruction interpolate/16
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 1023
 run/0: instruction interpolate/18
-run/0: {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character"]}, {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]} <- next-ingredient 
+run/0: {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character"]}, {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]} <- next-ingredient/29 
 run/0: product 0 is 1009
 mem/0: storing 1009 in location 1018
 mem/0: storing 1 in location 1019
 run/0: instruction interpolate/19
-run/0: break-unless {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]}, {name: "", value: 25, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]}, {name: "", value: 25, type: , properties: ["": ]}
 mem/0: location 1019 is 1
 run/0: ingredient 0 is 1
 run/0: jump-unless fell through
 run/0: instruction interpolate/21
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
+run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1023 is 0
 run/0: ingredient 1 is tem-len
@@ -160,12 +160,12 @@ mem/0: location 1016 is 8
 run/0: product 0 is 0
 mem/0: storing 0 in location 1024
 run/0: instruction interpolate/22
-run/0: break-if {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
+run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
 mem/0: location 1024 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/23
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
 mem/0: location 1015 is 1000
 run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
@@ -176,19 +176,19 @@ mem/0: location 1001 is 104
 run/0: product 0 is 104
 mem/0: storing 104 in location 1025
 run/0: instruction interpolate/24
-run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
+run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal/13 {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
 run/0: ingredient 0 is in
 mem/0: location 1025 is 104
 run/0: ingredient 1 is 95
 run/0: product 0 is 0
 mem/0: storing 0 in location 1026
 run/0: instruction interpolate/25
-run/0: break-if {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
+run/0: break-if/11 {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
 mem/0: location 1026 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/26
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/26 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1021 is 1074
 run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
@@ -197,31 +197,31 @@ run/0: address to copy is 1075
 run/0: product 0 is 1075
 mem/0: storing 1075 in location 1027
 run/0: instruction interpolate/27
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy {name: "in", value: 11, type: 4, properties: ["in": "character"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
 run/0: ingredient 0 is in
 mem/0: location 1025 is 104
 mem/0: location 1027 is 1075
 mem/0: storing 104 in location 1075
 run/0: instruction interpolate/28
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1023 is 0
 run/0: ingredient 1 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1023
 run/0: instruction interpolate/29
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-idx
 mem/0: location 1022 is 0
 run/0: ingredient 1 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1022
 run/0: instruction interpolate/30
-run/0: loop {name: "", value: -10, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -10, type: , properties: ["": ]}
 run/0: ingredient 0 is -10
 run/0: jumping to instruction 21
 run/0: instruction interpolate/21
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
+run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1023 is 1
 run/0: ingredient 1 is tem-len
@@ -229,12 +229,12 @@ mem/0: location 1016 is 8
 run/0: product 0 is 0
 mem/0: storing 0 in location 1024
 run/0: instruction interpolate/22
-run/0: break-if {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
+run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
 mem/0: location 1024 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/23
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
 mem/0: location 1015 is 1000
 run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
@@ -245,19 +245,19 @@ mem/0: location 1002 is 101
 run/0: product 0 is 101
 mem/0: storing 101 in location 1025
 run/0: instruction interpolate/24
-run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
+run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal/13 {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
 run/0: ingredient 0 is in
 mem/0: location 1025 is 101
 run/0: ingredient 1 is 95
 run/0: product 0 is 0
 mem/0: storing 0 in location 1026
 run/0: instruction interpolate/25
-run/0: break-if {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
+run/0: break-if/11 {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
 mem/0: location 1026 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/26
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/26 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1021 is 1074
 run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
@@ -266,31 +266,31 @@ run/0: address to copy is 1076
 run/0: product 0 is 1076
 mem/0: storing 1076 in location 1027
 run/0: instruction interpolate/27
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy {name: "in", value: 11, type: 4, properties: ["in": "character"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
 run/0: ingredient 0 is in
 mem/0: location 1025 is 101
 mem/0: location 1027 is 1076
 mem/0: storing 101 in location 1076
 run/0: instruction interpolate/28
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1023 is 1
 run/0: ingredient 1 is 1
 run/0: product 0 is 2
 mem/0: storing 2 in location 1023
 run/0: instruction interpolate/29
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-idx
 mem/0: location 1022 is 1
 run/0: ingredient 1 is 1
 run/0: product 0 is 2
 mem/0: storing 2 in location 1022
 run/0: instruction interpolate/30
-run/0: loop {name: "", value: -10, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -10, type: , properties: ["": ]}
 run/0: ingredient 0 is -10
 run/0: jumping to instruction 21
 run/0: instruction interpolate/21
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
+run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1023 is 2
 run/0: ingredient 1 is tem-len
@@ -298,12 +298,12 @@ mem/0: location 1016 is 8
 run/0: product 0 is 0
 mem/0: storing 0 in location 1024
 run/0: instruction interpolate/22
-run/0: break-if {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
+run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
 mem/0: location 1024 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/23
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
 mem/0: location 1015 is 1000
 run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
@@ -314,19 +314,19 @@ mem/0: location 1003 is 108
 run/0: product 0 is 108
 mem/0: storing 108 in location 1025
 run/0: instruction interpolate/24
-run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
+run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal/13 {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
 run/0: ingredient 0 is in
 mem/0: location 1025 is 108
 run/0: ingredient 1 is 95
 run/0: product 0 is 0
 mem/0: storing 0 in location 1026
 run/0: instruction interpolate/25
-run/0: break-if {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
+run/0: break-if/11 {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
 mem/0: location 1026 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/26
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/26 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1021 is 1074
 run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
@@ -335,31 +335,31 @@ run/0: address to copy is 1077
 run/0: product 0 is 1077
 mem/0: storing 1077 in location 1027
 run/0: instruction interpolate/27
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy {name: "in", value: 11, type: 4, properties: ["in": "character"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
 run/0: ingredient 0 is in
 mem/0: location 1025 is 108
 mem/0: location 1027 is 1077
 mem/0: storing 108 in location 1077
 run/0: instruction interpolate/28
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1023 is 2
 run/0: ingredient 1 is 1
 run/0: product 0 is 3
 mem/0: storing 3 in location 1023
 run/0: instruction interpolate/29
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-idx
 mem/0: location 1022 is 2
 run/0: ingredient 1 is 1
 run/0: product 0 is 3
 mem/0: storing 3 in location 1022
 run/0: instruction interpolate/30
-run/0: loop {name: "", value: -10, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -10, type: , properties: ["": ]}
 run/0: ingredient 0 is -10
 run/0: jumping to instruction 21
 run/0: instruction interpolate/21
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
+run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1023 is 3
 run/0: ingredient 1 is tem-len
@@ -367,12 +367,12 @@ mem/0: location 1016 is 8
 run/0: product 0 is 0
 mem/0: storing 0 in location 1024
 run/0: instruction interpolate/22
-run/0: break-if {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
+run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
 mem/0: location 1024 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/23
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
 mem/0: location 1015 is 1000
 run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
@@ -383,19 +383,19 @@ mem/0: location 1004 is 108
 run/0: product 0 is 108
 mem/0: storing 108 in location 1025
 run/0: instruction interpolate/24
-run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
+run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal/13 {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
 run/0: ingredient 0 is in
 mem/0: location 1025 is 108
 run/0: ingredient 1 is 95
 run/0: product 0 is 0
 mem/0: storing 0 in location 1026
 run/0: instruction interpolate/25
-run/0: break-if {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
+run/0: break-if/11 {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
 mem/0: location 1026 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/26
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/26 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1021 is 1074
 run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
@@ -404,31 +404,31 @@ run/0: address to copy is 1078
 run/0: product 0 is 1078
 mem/0: storing 1078 in location 1027
 run/0: instruction interpolate/27
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy {name: "in", value: 11, type: 4, properties: ["in": "character"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
 run/0: ingredient 0 is in
 mem/0: location 1025 is 108
 mem/0: location 1027 is 1078
 mem/0: storing 108 in location 1078
 run/0: instruction interpolate/28
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1023 is 3
 run/0: ingredient 1 is 1
 run/0: product 0 is 4
 mem/0: storing 4 in location 1023
 run/0: instruction interpolate/29
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-idx
 mem/0: location 1022 is 3
 run/0: ingredient 1 is 1
 run/0: product 0 is 4
 mem/0: storing 4 in location 1022
 run/0: instruction interpolate/30
-run/0: loop {name: "", value: -10, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -10, type: , properties: ["": ]}
 run/0: ingredient 0 is -10
 run/0: jumping to instruction 21
 run/0: instruction interpolate/21
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
+run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1023 is 4
 run/0: ingredient 1 is tem-len
@@ -436,12 +436,12 @@ mem/0: location 1016 is 8
 run/0: product 0 is 0
 mem/0: storing 0 in location 1024
 run/0: instruction interpolate/22
-run/0: break-if {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
+run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
 mem/0: location 1024 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/23
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
 mem/0: location 1015 is 1000
 run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
@@ -452,19 +452,19 @@ mem/0: location 1005 is 111
 run/0: product 0 is 111
 mem/0: storing 111 in location 1025
 run/0: instruction interpolate/24
-run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
+run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal/13 {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
 run/0: ingredient 0 is in
 mem/0: location 1025 is 111
 run/0: ingredient 1 is 95
 run/0: product 0 is 0
 mem/0: storing 0 in location 1026
 run/0: instruction interpolate/25
-run/0: break-if {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
+run/0: break-if/11 {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
 mem/0: location 1026 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/26
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/26 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1021 is 1074
 run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
@@ -473,31 +473,31 @@ run/0: address to copy is 1079
 run/0: product 0 is 1079
 mem/0: storing 1079 in location 1027
 run/0: instruction interpolate/27
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy {name: "in", value: 11, type: 4, properties: ["in": "character"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
 run/0: ingredient 0 is in
 mem/0: location 1025 is 111
 mem/0: location 1027 is 1079
 mem/0: storing 111 in location 1079
 run/0: instruction interpolate/28
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1023 is 4
 run/0: ingredient 1 is 1
 run/0: product 0 is 5
 mem/0: storing 5 in location 1023
 run/0: instruction interpolate/29
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-idx
 mem/0: location 1022 is 4
 run/0: ingredient 1 is 1
 run/0: product 0 is 5
 mem/0: storing 5 in location 1022
 run/0: instruction interpolate/30
-run/0: loop {name: "", value: -10, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -10, type: , properties: ["": ]}
 run/0: ingredient 0 is -10
 run/0: jumping to instruction 21
 run/0: instruction interpolate/21
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
+run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1023 is 5
 run/0: ingredient 1 is tem-len
@@ -505,12 +505,12 @@ mem/0: location 1016 is 8
 run/0: product 0 is 0
 mem/0: storing 0 in location 1024
 run/0: instruction interpolate/22
-run/0: break-if {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
+run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
 mem/0: location 1024 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/23
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
 mem/0: location 1015 is 1000
 run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
@@ -521,19 +521,19 @@ mem/0: location 1006 is 44
 run/0: product 0 is 44
 mem/0: storing 44 in location 1025
 run/0: instruction interpolate/24
-run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
+run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal/13 {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
 run/0: ingredient 0 is in
 mem/0: location 1025 is 44
 run/0: ingredient 1 is 95
 run/0: product 0 is 0
 mem/0: storing 0 in location 1026
 run/0: instruction interpolate/25
-run/0: break-if {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
+run/0: break-if/11 {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
 mem/0: location 1026 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/26
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/26 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1021 is 1074
 run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
@@ -542,31 +542,31 @@ run/0: address to copy is 1080
 run/0: product 0 is 1080
 mem/0: storing 1080 in location 1027
 run/0: instruction interpolate/27
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy {name: "in", value: 11, type: 4, properties: ["in": "character"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
 run/0: ingredient 0 is in
 mem/0: location 1025 is 44
 mem/0: location 1027 is 1080
 mem/0: storing 44 in location 1080
 run/0: instruction interpolate/28
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1023 is 5
 run/0: ingredient 1 is 1
 run/0: product 0 is 6
 mem/0: storing 6 in location 1023
 run/0: instruction interpolate/29
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-idx
 mem/0: location 1022 is 5
 run/0: ingredient 1 is 1
 run/0: product 0 is 6
 mem/0: storing 6 in location 1022
 run/0: instruction interpolate/30
-run/0: loop {name: "", value: -10, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -10, type: , properties: ["": ]}
 run/0: ingredient 0 is -10
 run/0: jumping to instruction 21
 run/0: instruction interpolate/21
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
+run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1023 is 6
 run/0: ingredient 1 is tem-len
@@ -574,12 +574,12 @@ mem/0: location 1016 is 8
 run/0: product 0 is 0
 mem/0: storing 0 in location 1024
 run/0: instruction interpolate/22
-run/0: break-if {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
+run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
 mem/0: location 1024 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/23
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
 mem/0: location 1015 is 1000
 run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
@@ -590,19 +590,19 @@ mem/0: location 1007 is 32
 run/0: product 0 is 32
 mem/0: storing 32 in location 1025
 run/0: instruction interpolate/24
-run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
+run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal/13 {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
 run/0: ingredient 0 is in
 mem/0: location 1025 is 32
 run/0: ingredient 1 is 95
 run/0: product 0 is 0
 mem/0: storing 0 in location 1026
 run/0: instruction interpolate/25
-run/0: break-if {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
+run/0: break-if/11 {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
 mem/0: location 1026 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/26
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/26 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1021 is 1074
 run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
@@ -611,31 +611,31 @@ run/0: address to copy is 1081
 run/0: product 0 is 1081
 mem/0: storing 1081 in location 1027
 run/0: instruction interpolate/27
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy {name: "in", value: 11, type: 4, properties: ["in": "character"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
 run/0: ingredient 0 is in
 mem/0: location 1025 is 32
 mem/0: location 1027 is 1081
 mem/0: storing 32 in location 1081
 run/0: instruction interpolate/28
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1023 is 6
 run/0: ingredient 1 is 1
 run/0: product 0 is 7
 mem/0: storing 7 in location 1023
 run/0: instruction interpolate/29
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-idx
 mem/0: location 1022 is 6
 run/0: ingredient 1 is 1
 run/0: product 0 is 7
 mem/0: storing 7 in location 1022
 run/0: instruction interpolate/30
-run/0: loop {name: "", value: -10, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -10, type: , properties: ["": ]}
 run/0: ingredient 0 is -10
 run/0: jumping to instruction 21
 run/0: instruction interpolate/21
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
+run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1023 is 7
 run/0: ingredient 1 is tem-len
@@ -643,12 +643,12 @@ mem/0: location 1016 is 8
 run/0: product 0 is 0
 mem/0: storing 0 in location 1024
 run/0: instruction interpolate/22
-run/0: break-if {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
+run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
 mem/0: location 1024 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/23
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
 mem/0: location 1015 is 1000
 run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
@@ -659,24 +659,24 @@ mem/0: location 1008 is 95
 run/0: product 0 is 95
 mem/0: storing 95 in location 1025
 run/0: instruction interpolate/24
-run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
+run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal/13 {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
 run/0: ingredient 0 is in
 mem/0: location 1025 is 95
 run/0: ingredient 1 is 95
 run/0: product 0 is 1
 mem/0: storing 1 in location 1026
 run/0: instruction interpolate/25
-run/0: break-if {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
+run/0: break-if/11 {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
 mem/0: location 1026 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
 run/0: jumping to instruction 31
 run/0: instruction interpolate/32
-run/0: {name: "j", value: 14, type: 1, properties: ["j": "integer"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "j", value: 14, type: 1, properties: ["j": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 1028
 run/0: instruction interpolate/34
-run/0: {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]} <- greater-or-equal {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
+run/0: {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]} <- greater-or-equal/16 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
 run/0: ingredient 0 is j
 mem/0: location 1028 is 0
 run/0: ingredient 1 is a-len
@@ -684,12 +684,12 @@ mem/0: location 1020 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1029
 run/0: instruction interpolate/35
-run/0: break-if {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1029 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/36
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
 run/0: ingredient 0 is {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1018 is 1009
 run/0: ingredient 1 is {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
@@ -700,7 +700,7 @@ mem/0: location 1010 is 97
 run/0: product 0 is 97
 mem/0: storing 97 in location 1025
 run/0: instruction interpolate/37
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/26 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1021 is 1074
 run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
@@ -709,31 +709,31 @@ run/0: address to copy is 1082
 run/0: product 0 is 1082
 mem/0: storing 1082 in location 1027
 run/0: instruction interpolate/38
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy {name: "in", value: 11, type: 4, properties: ["in": "character"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
 run/0: ingredient 0 is in
 mem/0: location 1025 is 97
 mem/0: location 1027 is 1082
 mem/0: storing 97 in location 1082
 run/0: instruction interpolate/39
-run/0: {name: "j", value: 14, type: 1, properties: ["j": "integer"]} <- add {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "j", value: 14, type: 1, properties: ["j": "integer"]} <- add/2 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is j
 mem/0: location 1028 is 0
 run/0: ingredient 1 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1028
 run/0: instruction interpolate/40
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-idx
 mem/0: location 1022 is 7
 run/0: ingredient 1 is 1
 run/0: product 0 is 8
 mem/0: storing 8 in location 1022
 run/0: instruction interpolate/41
-run/0: loop {name: "", value: -8, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
 run/0: ingredient 0 is -8
 run/0: jumping to instruction 34
 run/0: instruction interpolate/34
-run/0: {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]} <- greater-or-equal {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
+run/0: {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]} <- greater-or-equal/16 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
 run/0: ingredient 0 is j
 mem/0: location 1028 is 1
 run/0: ingredient 1 is a-len
@@ -741,12 +741,12 @@ mem/0: location 1020 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1029
 run/0: instruction interpolate/35
-run/0: break-if {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1029 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/36
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
 run/0: ingredient 0 is {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1018 is 1009
 run/0: ingredient 1 is {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
@@ -757,7 +757,7 @@ mem/0: location 1011 is 98
 run/0: product 0 is 98
 mem/0: storing 98 in location 1025
 run/0: instruction interpolate/37
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/26 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1021 is 1074
 run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
@@ -766,31 +766,31 @@ run/0: address to copy is 1083
 run/0: product 0 is 1083
 mem/0: storing 1083 in location 1027
 run/0: instruction interpolate/38
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy {name: "in", value: 11, type: 4, properties: ["in": "character"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
 run/0: ingredient 0 is in
 mem/0: location 1025 is 98
 mem/0: location 1027 is 1083
 mem/0: storing 98 in location 1083
 run/0: instruction interpolate/39
-run/0: {name: "j", value: 14, type: 1, properties: ["j": "integer"]} <- add {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "j", value: 14, type: 1, properties: ["j": "integer"]} <- add/2 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is j
 mem/0: location 1028 is 1
 run/0: ingredient 1 is 1
 run/0: product 0 is 2
 mem/0: storing 2 in location 1028
 run/0: instruction interpolate/40
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-idx
 mem/0: location 1022 is 8
 run/0: ingredient 1 is 1
 run/0: product 0 is 9
 mem/0: storing 9 in location 1022
 run/0: instruction interpolate/41
-run/0: loop {name: "", value: -8, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
 run/0: ingredient 0 is -8
 run/0: jumping to instruction 34
 run/0: instruction interpolate/34
-run/0: {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]} <- greater-or-equal {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
+run/0: {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]} <- greater-or-equal/16 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
 run/0: ingredient 0 is j
 mem/0: location 1028 is 2
 run/0: ingredient 1 is a-len
@@ -798,12 +798,12 @@ mem/0: location 1020 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1029
 run/0: instruction interpolate/35
-run/0: break-if {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1029 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/36
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
 run/0: ingredient 0 is {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1018 is 1009
 run/0: ingredient 1 is {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
@@ -814,7 +814,7 @@ mem/0: location 1012 is 99
 run/0: product 0 is 99
 mem/0: storing 99 in location 1025
 run/0: instruction interpolate/37
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/26 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1021 is 1074
 run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
@@ -823,31 +823,31 @@ run/0: address to copy is 1084
 run/0: product 0 is 1084
 mem/0: storing 1084 in location 1027
 run/0: instruction interpolate/38
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy {name: "in", value: 11, type: 4, properties: ["in": "character"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
 run/0: ingredient 0 is in
 mem/0: location 1025 is 99
 mem/0: location 1027 is 1084
 mem/0: storing 99 in location 1084
 run/0: instruction interpolate/39
-run/0: {name: "j", value: 14, type: 1, properties: ["j": "integer"]} <- add {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "j", value: 14, type: 1, properties: ["j": "integer"]} <- add/2 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is j
 mem/0: location 1028 is 2
 run/0: ingredient 1 is 1
 run/0: product 0 is 3
 mem/0: storing 3 in location 1028
 run/0: instruction interpolate/40
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-idx
 mem/0: location 1022 is 9
 run/0: ingredient 1 is 1
 run/0: product 0 is 10
 mem/0: storing 10 in location 1022
 run/0: instruction interpolate/41
-run/0: loop {name: "", value: -8, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
 run/0: ingredient 0 is -8
 run/0: jumping to instruction 34
 run/0: instruction interpolate/34
-run/0: {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]} <- greater-or-equal {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
+run/0: {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]} <- greater-or-equal/16 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
 run/0: ingredient 0 is j
 mem/0: location 1028 is 3
 run/0: ingredient 1 is a-len
@@ -855,33 +855,33 @@ mem/0: location 1020 is 3
 run/0: product 0 is 1
 mem/0: storing 1 in location 1029
 run/0: instruction interpolate/35
-run/0: break-if {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1029 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
 run/0: jumping to instruction 42
 run/0: instruction interpolate/43
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1023 is 7
 run/0: ingredient 1 is 1
 run/0: product 0 is 8
 mem/0: storing 8 in location 1023
 run/0: instruction interpolate/44
-run/0: loop {name: "", value: -27, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -27, type: , properties: ["": ]}
 run/0: ingredient 0 is -27
 run/0: jumping to instruction 18
 run/0: instruction interpolate/18
-run/0: {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character"]}, {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]} <- next-ingredient 
+run/0: {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character"]}, {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]} <- next-ingredient/29 
 mem/0: storing 0 in location 1019
 run/0: instruction interpolate/19
-run/0: break-unless {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]}, {name: "", value: 25, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]}, {name: "", value: 25, type: , properties: ["": ]}
 mem/0: location 1019 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 45
 run/0: instruction interpolate/47
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
+run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1023 is 8
 run/0: ingredient 1 is tem-len
@@ -889,18 +889,18 @@ mem/0: location 1016 is 8
 run/0: product 0 is 1
 mem/0: storing 1 in location 1024
 run/0: instruction interpolate/48
-run/0: break-if {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1024 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
 run/0: jumping to instruction 55
 run/0: instruction interpolate/56
-run/0: reply {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character"]}
+run/0: reply/32 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character"]}
 mem/0: location 1021 is 1074
 run/0: result 0 is 1074
 mem/0: storing 1074 in location 3
 run/0: instruction run1001/3
-run/0: {name: "4", value: 4, type: 5-4, properties: ["4": "array":"character", "raw": ]} <- copy {name: "3", value: 3, type: 2-5-4, properties: ["3": "address":"array":"character", "raw": , "deref": ]}
+run/0: {name: "4", value: 4, type: 5-4, properties: ["4": "array":"character", "raw": ]} <- copy/1 {name: "3", value: 3, type: 2-5-4, properties: ["3": "address":"array":"character", "raw": , "deref": ]}
 run/0: ingredient 0 is 3
 mem/0: location 3 is 1074
 mem/0: location 1074 is 10
@@ -926,7 +926,7 @@ mem/0: storing 97 in location 12
 mem/0: storing 98 in location 13
 mem/0: storing 99 in location 14
 run/0: instruction interpolate-at-end/1
-run/0: memory-should-contain {name: "
+run/0: memory-should-contain/43 {name: "
     4:string <- [hello, abc]
   ", value: 0, type: 0, properties: ["
     4:string <- [hello, abc]
diff --git a/cpp/.traces/interpolate-at-start b/cpp/.traces/interpolate-at-start
index 49cefee9..faaacb97 100644
--- a/cpp/.traces/interpolate-at-start
+++ b/cpp/.traces/interpolate-at-start
@@ -24,7 +24,7 @@ after-brace/0: memory-should-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: interpolate-at-start
 run/0: instruction interpolate-at-start/0
-run/0: run {name: "
+run/0: run/42 {name: "
     1:address:array:character/raw <- new [_, hello!]
     2:address:array:character/raw <- new [abc]
     3:address:array:character/raw <- interpolate 1:address:array:character/raw, 2:address:array:character/raw
@@ -56,48 +56,48 @@ after-brace/0: new ...
 after-brace/0: interpolate ...
 after-brace/0: copy ...
 run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]} <- new {name: "_, hello!", value: 0, type: 0, properties: ["_, hello!": "literal-string"]}
+run/0: {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]} <- new/41 {name: "_, hello!", value: 0, type: 0, properties: ["_, hello!": "literal-string"]}
 mem/0: storing 1000 in location 1
 run/0: instruction run1001/1
-run/0: {name: "2", value: 2, type: 2-5-4, properties: ["2": "address":"array":"character", "raw": ]} <- new {name: "abc", value: 0, type: 0, properties: ["abc": "literal-string"]}
+run/0: {name: "2", value: 2, type: 2-5-4, properties: ["2": "address":"array":"character", "raw": ]} <- new/41 {name: "abc", value: 0, type: 0, properties: ["abc": "literal-string"]}
 mem/0: storing 1010 in location 2
 run/0: instruction run1001/2
-run/0: {name: "3", value: 3, type: 2-5-4, properties: ["3": "address":"array":"character", "raw": ]} <- interpolate {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]}, {name: "2", value: 2, type: 2-5-4, properties: ["2": "address":"array":"character", "raw": ]}
+run/0: {name: "3", value: 3, type: 2-5-4, properties: ["3": "address":"array":"character", "raw": ]} <- interpolate/107 {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]}, {name: "2", value: 2, type: 2-5-4, properties: ["2": "address":"array":"character", "raw": ]}
 mem/0: location 1 is 1000
 mem/0: location 2 is 1010
 run/0: instruction interpolate/0
-run/0: {name: "default-space", value: 0, type: 5-2-1, properties: ["default-space": "array":"address":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "60", value: 60, type: 0, properties: ["60": "literal"]}
+run/0: {name: "default-space", value: 0, type: 5-2-1, properties: ["default-space": "array":"address":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "60", value: 60, type: 0, properties: ["60": "literal"]}
 mem/0: array size is 60
 mem/0: new alloc: 1014
 run/0: instruction interpolate/1
-run/0: {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character"]} <- next-ingredient 
+run/0: {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character"]} <- next-ingredient/29 
 run/0: product 0 is 1000
 mem/0: storing 1000 in location 1016
 run/0: instruction interpolate/2
-run/0: {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]} <- length {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
+run/0: {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]} <- length/27 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
 mem/0: location 1016 is 1000
 mem/0: storing 9 in location 1017
 run/0: instruction interpolate/3
-run/0: {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]} <- copy {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
+run/0: {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]} <- copy/1 {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
 run/0: ingredient 0 is tem-len
 mem/0: location 1017 is 9
 mem/0: storing 9 in location 1018
 run/0: instruction interpolate/5
-run/0: {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character"]}, {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]} <- next-ingredient 
+run/0: {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character"]}, {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]} <- next-ingredient/29 
 run/0: product 0 is 1010
 mem/0: storing 1010 in location 1019
 mem/0: storing 1 in location 1020
 run/0: instruction interpolate/6
-run/0: break-unless {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
 mem/0: location 1020 is 1
 run/0: ingredient 0 is 1
 run/0: jump-unless fell through
 run/0: instruction interpolate/7
-run/0: {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]} <- length {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
+run/0: {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]} <- length/27 {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1019 is 1010
 mem/0: storing 3 in location 1021
 run/0: instruction interpolate/8
-run/0: {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]} <- add {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
+run/0: {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]} <- add/2 {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
 run/0: ingredient 0 is result-len
 mem/0: location 1018 is 9
 run/0: ingredient 1 is a-len
@@ -105,56 +105,56 @@ mem/0: location 1021 is 3
 run/0: product 0 is 12
 mem/0: storing 12 in location 1018
 run/0: instruction interpolate/9
-run/0: {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]} <- subtract {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]} <- subtract/3 {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-len
 mem/0: location 1018 is 12
 run/0: ingredient 1 is 1
 run/0: product 0 is 11
 mem/0: storing 11 in location 1018
 run/0: instruction interpolate/10
-run/0: loop {name: "", value: -6, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
 run/0: ingredient 0 is -6
 run/0: jumping to instruction 5
 run/0: instruction interpolate/5
-run/0: {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character"]}, {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]} <- next-ingredient 
+run/0: {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character"]}, {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]} <- next-ingredient/29 
 mem/0: storing 0 in location 1020
 run/0: instruction interpolate/6
-run/0: break-unless {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
 mem/0: location 1020 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 11
 run/0: instruction interpolate/12
-run/0: rewind-ingredients 
+run/0: rewind-ingredients/30 
 run/0: instruction interpolate/13
-run/0: {name: "_", value: 0, type: 0, properties: ["_": "dummy"]} <- next-ingredient 
+run/0: {name: "_", value: 0, type: 0, properties: ["_": "dummy"]} <- next-ingredient/29 
 run/0: product 0 is 1000
 run/0: instruction interpolate/14
-run/0: {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character"]} <- new {name: "character", value: 4, type: 0, properties: ["character": "type"]}, {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]}
+run/0: {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character"]} <- new/41 {name: "character", value: 4, type: 0, properties: ["character": "type"]}, {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]}
 mem/0: location 1018 is 11
 mem/0: array size is 11
 mem/0: new alloc: 1075
 mem/0: storing 1075 in location 1022
 run/0: instruction interpolate/15
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 1023
 run/0: instruction interpolate/16
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 1024
 run/0: instruction interpolate/18
-run/0: {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character"]}, {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]} <- next-ingredient 
+run/0: {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character"]}, {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]} <- next-ingredient/29 
 run/0: product 0 is 1010
 mem/0: storing 1010 in location 1019
 mem/0: storing 1 in location 1020
 run/0: instruction interpolate/19
-run/0: break-unless {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]}, {name: "", value: 25, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]}, {name: "", value: 25, type: , properties: ["": ]}
 mem/0: location 1020 is 1
 run/0: ingredient 0 is 1
 run/0: jump-unless fell through
 run/0: instruction interpolate/21
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
+run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 0
 run/0: ingredient 1 is tem-len
@@ -162,12 +162,12 @@ mem/0: location 1017 is 9
 run/0: product 0 is 0
 mem/0: storing 0 in location 1025
 run/0: instruction interpolate/22
-run/0: break-if {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
+run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
 mem/0: location 1025 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/23
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
 mem/0: location 1016 is 1000
 run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
@@ -178,24 +178,24 @@ mem/0: location 1001 is 95
 run/0: product 0 is 95
 mem/0: storing 95 in location 1026
 run/0: instruction interpolate/24
-run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
+run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal/13 {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
 run/0: ingredient 0 is in
 mem/0: location 1026 is 95
 run/0: ingredient 1 is 95
 run/0: product 0 is 1
 mem/0: storing 1 in location 1027
 run/0: instruction interpolate/25
-run/0: break-if {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
+run/0: break-if/11 {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
 mem/0: location 1027 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
 run/0: jumping to instruction 31
 run/0: instruction interpolate/32
-run/0: {name: "j", value: 14, type: 1, properties: ["j": "integer"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "j", value: 14, type: 1, properties: ["j": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 1029
 run/0: instruction interpolate/34
-run/0: {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]} <- greater-or-equal {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
+run/0: {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]} <- greater-or-equal/16 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
 run/0: ingredient 0 is j
 mem/0: location 1029 is 0
 run/0: ingredient 1 is a-len
@@ -203,12 +203,12 @@ mem/0: location 1021 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1030
 run/0: instruction interpolate/35
-run/0: break-if {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1030 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/36
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
 run/0: ingredient 0 is {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1019 is 1010
 run/0: ingredient 1 is {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
@@ -219,7 +219,7 @@ mem/0: location 1011 is 97
 run/0: product 0 is 97
 mem/0: storing 97 in location 1026
 run/0: instruction interpolate/37
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/26 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1022 is 1075
 run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
@@ -228,31 +228,31 @@ run/0: address to copy is 1076
 run/0: product 0 is 1076
 mem/0: storing 1076 in location 1028
 run/0: instruction interpolate/38
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy {name: "in", value: 11, type: 4, properties: ["in": "character"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
 run/0: ingredient 0 is in
 mem/0: location 1026 is 97
 mem/0: location 1028 is 1076
 mem/0: storing 97 in location 1076
 run/0: instruction interpolate/39
-run/0: {name: "j", value: 14, type: 1, properties: ["j": "integer"]} <- add {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "j", value: 14, type: 1, properties: ["j": "integer"]} <- add/2 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is j
 mem/0: location 1029 is 0
 run/0: ingredient 1 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1029
 run/0: instruction interpolate/40
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-idx
 mem/0: location 1023 is 0
 run/0: ingredient 1 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1023
 run/0: instruction interpolate/41
-run/0: loop {name: "", value: -8, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
 run/0: ingredient 0 is -8
 run/0: jumping to instruction 34
 run/0: instruction interpolate/34
-run/0: {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]} <- greater-or-equal {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
+run/0: {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]} <- greater-or-equal/16 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
 run/0: ingredient 0 is j
 mem/0: location 1029 is 1
 run/0: ingredient 1 is a-len
@@ -260,12 +260,12 @@ mem/0: location 1021 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1030
 run/0: instruction interpolate/35
-run/0: break-if {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1030 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/36
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
 run/0: ingredient 0 is {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1019 is 1010
 run/0: ingredient 1 is {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
@@ -276,7 +276,7 @@ mem/0: location 1012 is 98
 run/0: product 0 is 98
 mem/0: storing 98 in location 1026
 run/0: instruction interpolate/37
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/26 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1022 is 1075
 run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
@@ -285,31 +285,31 @@ run/0: address to copy is 1077
 run/0: product 0 is 1077
 mem/0: storing 1077 in location 1028
 run/0: instruction interpolate/38
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy {name: "in", value: 11, type: 4, properties: ["in": "character"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
 run/0: ingredient 0 is in
 mem/0: location 1026 is 98
 mem/0: location 1028 is 1077
 mem/0: storing 98 in location 1077
 run/0: instruction interpolate/39
-run/0: {name: "j", value: 14, type: 1, properties: ["j": "integer"]} <- add {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "j", value: 14, type: 1, properties: ["j": "integer"]} <- add/2 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is j
 mem/0: location 1029 is 1
 run/0: ingredient 1 is 1
 run/0: product 0 is 2
 mem/0: storing 2 in location 1029
 run/0: instruction interpolate/40
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-idx
 mem/0: location 1023 is 1
 run/0: ingredient 1 is 1
 run/0: product 0 is 2
 mem/0: storing 2 in location 1023
 run/0: instruction interpolate/41
-run/0: loop {name: "", value: -8, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
 run/0: ingredient 0 is -8
 run/0: jumping to instruction 34
 run/0: instruction interpolate/34
-run/0: {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]} <- greater-or-equal {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
+run/0: {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]} <- greater-or-equal/16 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
 run/0: ingredient 0 is j
 mem/0: location 1029 is 2
 run/0: ingredient 1 is a-len
@@ -317,12 +317,12 @@ mem/0: location 1021 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1030
 run/0: instruction interpolate/35
-run/0: break-if {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1030 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/36
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
 run/0: ingredient 0 is {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1019 is 1010
 run/0: ingredient 1 is {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
@@ -333,7 +333,7 @@ mem/0: location 1013 is 99
 run/0: product 0 is 99
 mem/0: storing 99 in location 1026
 run/0: instruction interpolate/37
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/26 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1022 is 1075
 run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
@@ -342,31 +342,31 @@ run/0: address to copy is 1078
 run/0: product 0 is 1078
 mem/0: storing 1078 in location 1028
 run/0: instruction interpolate/38
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy {name: "in", value: 11, type: 4, properties: ["in": "character"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
 run/0: ingredient 0 is in
 mem/0: location 1026 is 99
 mem/0: location 1028 is 1078
 mem/0: storing 99 in location 1078
 run/0: instruction interpolate/39
-run/0: {name: "j", value: 14, type: 1, properties: ["j": "integer"]} <- add {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "j", value: 14, type: 1, properties: ["j": "integer"]} <- add/2 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is j
 mem/0: location 1029 is 2
 run/0: ingredient 1 is 1
 run/0: product 0 is 3
 mem/0: storing 3 in location 1029
 run/0: instruction interpolate/40
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-idx
 mem/0: location 1023 is 2
 run/0: ingredient 1 is 1
 run/0: product 0 is 3
 mem/0: storing 3 in location 1023
 run/0: instruction interpolate/41
-run/0: loop {name: "", value: -8, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
 run/0: ingredient 0 is -8
 run/0: jumping to instruction 34
 run/0: instruction interpolate/34
-run/0: {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]} <- greater-or-equal {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
+run/0: {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]} <- greater-or-equal/16 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
 run/0: ingredient 0 is j
 mem/0: location 1029 is 3
 run/0: ingredient 1 is a-len
@@ -374,33 +374,33 @@ mem/0: location 1021 is 3
 run/0: product 0 is 1
 mem/0: storing 1 in location 1030
 run/0: instruction interpolate/35
-run/0: break-if {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1030 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
 run/0: jumping to instruction 42
 run/0: instruction interpolate/43
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 0
 run/0: ingredient 1 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1024
 run/0: instruction interpolate/44
-run/0: loop {name: "", value: -27, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -27, type: , properties: ["": ]}
 run/0: ingredient 0 is -27
 run/0: jumping to instruction 18
 run/0: instruction interpolate/18
-run/0: {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character"]}, {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]} <- next-ingredient 
+run/0: {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character"]}, {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]} <- next-ingredient/29 
 mem/0: storing 0 in location 1020
 run/0: instruction interpolate/19
-run/0: break-unless {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]}, {name: "", value: 25, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]}, {name: "", value: 25, type: , properties: ["": ]}
 mem/0: location 1020 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 45
 run/0: instruction interpolate/47
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
+run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 1
 run/0: ingredient 1 is tem-len
@@ -408,12 +408,12 @@ mem/0: location 1017 is 9
 run/0: product 0 is 0
 mem/0: storing 0 in location 1025
 run/0: instruction interpolate/48
-run/0: break-if {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1025 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/49
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
 mem/0: location 1016 is 1000
 run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
@@ -424,7 +424,7 @@ mem/0: location 1002 is 44
 run/0: product 0 is 44
 mem/0: storing 44 in location 1026
 run/0: instruction interpolate/50
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/26 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1022 is 1075
 run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
@@ -433,31 +433,31 @@ run/0: address to copy is 1079
 run/0: product 0 is 1079
 mem/0: storing 1079 in location 1028
 run/0: instruction interpolate/51
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy {name: "in", value: 11, type: 4, properties: ["in": "character"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
 run/0: ingredient 0 is in
 mem/0: location 1026 is 44
 mem/0: location 1028 is 1079
 mem/0: storing 44 in location 1079
 run/0: instruction interpolate/52
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 1
 run/0: ingredient 1 is 1
 run/0: product 0 is 2
 mem/0: storing 2 in location 1024
 run/0: instruction interpolate/53
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-idx
 mem/0: location 1023 is 3
 run/0: ingredient 1 is 1
 run/0: product 0 is 4
 mem/0: storing 4 in location 1023
 run/0: instruction interpolate/54
-run/0: loop {name: "", value: -8, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
 run/0: ingredient 0 is -8
 run/0: jumping to instruction 47
 run/0: instruction interpolate/47
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
+run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 2
 run/0: ingredient 1 is tem-len
@@ -465,12 +465,12 @@ mem/0: location 1017 is 9
 run/0: product 0 is 0
 mem/0: storing 0 in location 1025
 run/0: instruction interpolate/48
-run/0: break-if {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1025 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/49
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
 mem/0: location 1016 is 1000
 run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
@@ -481,7 +481,7 @@ mem/0: location 1003 is 32
 run/0: product 0 is 32
 mem/0: storing 32 in location 1026
 run/0: instruction interpolate/50
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/26 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1022 is 1075
 run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
@@ -490,31 +490,31 @@ run/0: address to copy is 1080
 run/0: product 0 is 1080
 mem/0: storing 1080 in location 1028
 run/0: instruction interpolate/51
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy {name: "in", value: 11, type: 4, properties: ["in": "character"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
 run/0: ingredient 0 is in
 mem/0: location 1026 is 32
 mem/0: location 1028 is 1080
 mem/0: storing 32 in location 1080
 run/0: instruction interpolate/52
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 2
 run/0: ingredient 1 is 1
 run/0: product 0 is 3
 mem/0: storing 3 in location 1024
 run/0: instruction interpolate/53
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-idx
 mem/0: location 1023 is 4
 run/0: ingredient 1 is 1
 run/0: product 0 is 5
 mem/0: storing 5 in location 1023
 run/0: instruction interpolate/54
-run/0: loop {name: "", value: -8, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
 run/0: ingredient 0 is -8
 run/0: jumping to instruction 47
 run/0: instruction interpolate/47
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
+run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 3
 run/0: ingredient 1 is tem-len
@@ -522,12 +522,12 @@ mem/0: location 1017 is 9
 run/0: product 0 is 0
 mem/0: storing 0 in location 1025
 run/0: instruction interpolate/48
-run/0: break-if {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1025 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/49
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
 mem/0: location 1016 is 1000
 run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
@@ -538,7 +538,7 @@ mem/0: location 1004 is 104
 run/0: product 0 is 104
 mem/0: storing 104 in location 1026
 run/0: instruction interpolate/50
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/26 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1022 is 1075
 run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
@@ -547,31 +547,31 @@ run/0: address to copy is 1081
 run/0: product 0 is 1081
 mem/0: storing 1081 in location 1028
 run/0: instruction interpolate/51
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy {name: "in", value: 11, type: 4, properties: ["in": "character"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
 run/0: ingredient 0 is in
 mem/0: location 1026 is 104
 mem/0: location 1028 is 1081
 mem/0: storing 104 in location 1081
 run/0: instruction interpolate/52
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 3
 run/0: ingredient 1 is 1
 run/0: product 0 is 4
 mem/0: storing 4 in location 1024
 run/0: instruction interpolate/53
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-idx
 mem/0: location 1023 is 5
 run/0: ingredient 1 is 1
 run/0: product 0 is 6
 mem/0: storing 6 in location 1023
 run/0: instruction interpolate/54
-run/0: loop {name: "", value: -8, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
 run/0: ingredient 0 is -8
 run/0: jumping to instruction 47
 run/0: instruction interpolate/47
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
+run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 4
 run/0: ingredient 1 is tem-len
@@ -579,12 +579,12 @@ mem/0: location 1017 is 9
 run/0: product 0 is 0
 mem/0: storing 0 in location 1025
 run/0: instruction interpolate/48
-run/0: break-if {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1025 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/49
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
 mem/0: location 1016 is 1000
 run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
@@ -595,7 +595,7 @@ mem/0: location 1005 is 101
 run/0: product 0 is 101
 mem/0: storing 101 in location 1026
 run/0: instruction interpolate/50
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/26 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1022 is 1075
 run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
@@ -604,31 +604,31 @@ run/0: address to copy is 1082
 run/0: product 0 is 1082
 mem/0: storing 1082 in location 1028
 run/0: instruction interpolate/51
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy {name: "in", value: 11, type: 4, properties: ["in": "character"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
 run/0: ingredient 0 is in
 mem/0: location 1026 is 101
 mem/0: location 1028 is 1082
 mem/0: storing 101 in location 1082
 run/0: instruction interpolate/52
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 4
 run/0: ingredient 1 is 1
 run/0: product 0 is 5
 mem/0: storing 5 in location 1024
 run/0: instruction interpolate/53
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-idx
 mem/0: location 1023 is 6
 run/0: ingredient 1 is 1
 run/0: product 0 is 7
 mem/0: storing 7 in location 1023
 run/0: instruction interpolate/54
-run/0: loop {name: "", value: -8, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
 run/0: ingredient 0 is -8
 run/0: jumping to instruction 47
 run/0: instruction interpolate/47
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
+run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 5
 run/0: ingredient 1 is tem-len
@@ -636,12 +636,12 @@ mem/0: location 1017 is 9
 run/0: product 0 is 0
 mem/0: storing 0 in location 1025
 run/0: instruction interpolate/48
-run/0: break-if {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1025 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/49
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
 mem/0: location 1016 is 1000
 run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
@@ -652,7 +652,7 @@ mem/0: location 1006 is 108
 run/0: product 0 is 108
 mem/0: storing 108 in location 1026
 run/0: instruction interpolate/50
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/26 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1022 is 1075
 run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
@@ -661,31 +661,31 @@ run/0: address to copy is 1083
 run/0: product 0 is 1083
 mem/0: storing 1083 in location 1028
 run/0: instruction interpolate/51
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy {name: "in", value: 11, type: 4, properties: ["in": "character"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
 run/0: ingredient 0 is in
 mem/0: location 1026 is 108
 mem/0: location 1028 is 1083
 mem/0: storing 108 in location 1083
 run/0: instruction interpolate/52
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 5
 run/0: ingredient 1 is 1
 run/0: product 0 is 6
 mem/0: storing 6 in location 1024
 run/0: instruction interpolate/53
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-idx
 mem/0: location 1023 is 7
 run/0: ingredient 1 is 1
 run/0: product 0 is 8
 mem/0: storing 8 in location 1023
 run/0: instruction interpolate/54
-run/0: loop {name: "", value: -8, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
 run/0: ingredient 0 is -8
 run/0: jumping to instruction 47
 run/0: instruction interpolate/47
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
+run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 6
 run/0: ingredient 1 is tem-len
@@ -693,12 +693,12 @@ mem/0: location 1017 is 9
 run/0: product 0 is 0
 mem/0: storing 0 in location 1025
 run/0: instruction interpolate/48
-run/0: break-if {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1025 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/49
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
 mem/0: location 1016 is 1000
 run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
@@ -709,7 +709,7 @@ mem/0: location 1007 is 108
 run/0: product 0 is 108
 mem/0: storing 108 in location 1026
 run/0: instruction interpolate/50
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/26 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1022 is 1075
 run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
@@ -718,31 +718,31 @@ run/0: address to copy is 1084
 run/0: product 0 is 1084
 mem/0: storing 1084 in location 1028
 run/0: instruction interpolate/51
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy {name: "in", value: 11, type: 4, properties: ["in": "character"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
 run/0: ingredient 0 is in
 mem/0: location 1026 is 108
 mem/0: location 1028 is 1084
 mem/0: storing 108 in location 1084
 run/0: instruction interpolate/52
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 6
 run/0: ingredient 1 is 1
 run/0: product 0 is 7
 mem/0: storing 7 in location 1024
 run/0: instruction interpolate/53
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-idx
 mem/0: location 1023 is 8
 run/0: ingredient 1 is 1
 run/0: product 0 is 9
 mem/0: storing 9 in location 1023
 run/0: instruction interpolate/54
-run/0: loop {name: "", value: -8, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
 run/0: ingredient 0 is -8
 run/0: jumping to instruction 47
 run/0: instruction interpolate/47
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
+run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 7
 run/0: ingredient 1 is tem-len
@@ -750,12 +750,12 @@ mem/0: location 1017 is 9
 run/0: product 0 is 0
 mem/0: storing 0 in location 1025
 run/0: instruction interpolate/48
-run/0: break-if {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1025 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/49
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
 mem/0: location 1016 is 1000
 run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
@@ -766,7 +766,7 @@ mem/0: location 1008 is 111
 run/0: product 0 is 111
 mem/0: storing 111 in location 1026
 run/0: instruction interpolate/50
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/26 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1022 is 1075
 run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
@@ -775,31 +775,31 @@ run/0: address to copy is 1085
 run/0: product 0 is 1085
 mem/0: storing 1085 in location 1028
 run/0: instruction interpolate/51
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy {name: "in", value: 11, type: 4, properties: ["in": "character"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
 run/0: ingredient 0 is in
 mem/0: location 1026 is 111
 mem/0: location 1028 is 1085
 mem/0: storing 111 in location 1085
 run/0: instruction interpolate/52
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 7
 run/0: ingredient 1 is 1
 run/0: product 0 is 8
 mem/0: storing 8 in location 1024
 run/0: instruction interpolate/53
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-idx
 mem/0: location 1023 is 9
 run/0: ingredient 1 is 1
 run/0: product 0 is 10
 mem/0: storing 10 in location 1023
 run/0: instruction interpolate/54
-run/0: loop {name: "", value: -8, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
 run/0: ingredient 0 is -8
 run/0: jumping to instruction 47
 run/0: instruction interpolate/47
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
+run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 8
 run/0: ingredient 1 is tem-len
@@ -807,12 +807,12 @@ mem/0: location 1017 is 9
 run/0: product 0 is 0
 mem/0: storing 0 in location 1025
 run/0: instruction interpolate/48
-run/0: break-if {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1025 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/49
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
 mem/0: location 1016 is 1000
 run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
@@ -823,7 +823,7 @@ mem/0: location 1009 is 33
 run/0: product 0 is 33
 mem/0: storing 33 in location 1026
 run/0: instruction interpolate/50
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/26 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1022 is 1075
 run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
@@ -832,31 +832,31 @@ run/0: address to copy is 1086
 run/0: product 0 is 1086
 mem/0: storing 1086 in location 1028
 run/0: instruction interpolate/51
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy {name: "in", value: 11, type: 4, properties: ["in": "character"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
 run/0: ingredient 0 is in
 mem/0: location 1026 is 33
 mem/0: location 1028 is 1086
 mem/0: storing 33 in location 1086
 run/0: instruction interpolate/52
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 8
 run/0: ingredient 1 is 1
 run/0: product 0 is 9
 mem/0: storing 9 in location 1024
 run/0: instruction interpolate/53
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-idx
 mem/0: location 1023 is 10
 run/0: ingredient 1 is 1
 run/0: product 0 is 11
 mem/0: storing 11 in location 1023
 run/0: instruction interpolate/54
-run/0: loop {name: "", value: -8, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
 run/0: ingredient 0 is -8
 run/0: jumping to instruction 47
 run/0: instruction interpolate/47
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
+run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 9
 run/0: ingredient 1 is tem-len
@@ -864,18 +864,18 @@ mem/0: location 1017 is 9
 run/0: product 0 is 1
 mem/0: storing 1 in location 1025
 run/0: instruction interpolate/48
-run/0: break-if {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1025 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
 run/0: jumping to instruction 55
 run/0: instruction interpolate/56
-run/0: reply {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character"]}
+run/0: reply/32 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character"]}
 mem/0: location 1022 is 1075
 run/0: result 0 is 1075
 mem/0: storing 1075 in location 3
 run/0: instruction run1001/3
-run/0: {name: "4", value: 4, type: 5-4, properties: ["4": "array":"character", "raw": ]} <- copy {name: "3", value: 3, type: 2-5-4, properties: ["3": "address":"array":"character", "raw": , "deref": ]}
+run/0: {name: "4", value: 4, type: 5-4, properties: ["4": "array":"character", "raw": ]} <- copy/1 {name: "3", value: 3, type: 2-5-4, properties: ["3": "address":"array":"character", "raw": , "deref": ]}
 run/0: ingredient 0 is 3
 mem/0: location 3 is 1075
 mem/0: location 1075 is 11
@@ -903,7 +903,7 @@ mem/0: storing 108 in location 13
 mem/0: storing 111 in location 14
 mem/0: storing 33 in location 15
 run/0: instruction interpolate-at-start/1
-run/0: memory-should-contain {name: "
+run/0: memory-should-contain/43 {name: "
     4:string <- [abc, hello!]
     16 <- 0  # out of bounds
   ", value: 0, type: 0, properties: ["
diff --git a/cpp/.traces/interpolate-works b/cpp/.traces/interpolate-works
index 53336da5..a9251adc 100644
--- a/cpp/.traces/interpolate-works
+++ b/cpp/.traces/interpolate-works
@@ -22,7 +22,7 @@ after-brace/0: memory-should-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: interpolate-works
 run/0: instruction interpolate-works/0
-run/0: run {name: "
+run/0: run/42 {name: "
     1:address:array:character/raw <- new [abc _]
     2:address:array:character/raw <- new [def]
     3:address:array:character/raw <- interpolate 1:address:array:character/raw, 2:address:array:character/raw
@@ -54,48 +54,48 @@ after-brace/0: new ...
 after-brace/0: interpolate ...
 after-brace/0: copy ...
 run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]} <- new {name: "abc _", value: 0, type: 0, properties: ["abc _": "literal-string"]}
+run/0: {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]} <- new/41 {name: "abc _", value: 0, type: 0, properties: ["abc _": "literal-string"]}
 mem/0: storing 1000 in location 1
 run/0: instruction run1001/1
-run/0: {name: "2", value: 2, type: 2-5-4, properties: ["2": "address":"array":"character", "raw": ]} <- new {name: "def", value: 0, type: 0, properties: ["def": "literal-string"]}
+run/0: {name: "2", value: 2, type: 2-5-4, properties: ["2": "address":"array":"character", "raw": ]} <- new/41 {name: "def", value: 0, type: 0, properties: ["def": "literal-string"]}
 mem/0: storing 1006 in location 2
 run/0: instruction run1001/2
-run/0: {name: "3", value: 3, type: 2-5-4, properties: ["3": "address":"array":"character", "raw": ]} <- interpolate {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]}, {name: "2", value: 2, type: 2-5-4, properties: ["2": "address":"array":"character", "raw": ]}
+run/0: {name: "3", value: 3, type: 2-5-4, properties: ["3": "address":"array":"character", "raw": ]} <- interpolate/107 {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]}, {name: "2", value: 2, type: 2-5-4, properties: ["2": "address":"array":"character", "raw": ]}
 mem/0: location 1 is 1000
 mem/0: location 2 is 1006
 run/0: instruction interpolate/0
-run/0: {name: "default-space", value: 0, type: 5-2-1, properties: ["default-space": "array":"address":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "60", value: 60, type: 0, properties: ["60": "literal"]}
+run/0: {name: "default-space", value: 0, type: 5-2-1, properties: ["default-space": "array":"address":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "60", value: 60, type: 0, properties: ["60": "literal"]}
 mem/0: array size is 60
 mem/0: new alloc: 1010
 run/0: instruction interpolate/1
-run/0: {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character"]} <- next-ingredient 
+run/0: {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character"]} <- next-ingredient/29 
 run/0: product 0 is 1000
 mem/0: storing 1000 in location 1012
 run/0: instruction interpolate/2
-run/0: {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]} <- length {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
+run/0: {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]} <- length/27 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
 mem/0: location 1012 is 1000
 mem/0: storing 5 in location 1013
 run/0: instruction interpolate/3
-run/0: {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]} <- copy {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
+run/0: {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]} <- copy/1 {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
 run/0: ingredient 0 is tem-len
 mem/0: location 1013 is 5
 mem/0: storing 5 in location 1014
 run/0: instruction interpolate/5
-run/0: {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character"]}, {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]} <- next-ingredient 
+run/0: {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character"]}, {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]} <- next-ingredient/29 
 run/0: product 0 is 1006
 mem/0: storing 1006 in location 1015
 mem/0: storing 1 in location 1016
 run/0: instruction interpolate/6
-run/0: break-unless {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
 mem/0: location 1016 is 1
 run/0: ingredient 0 is 1
 run/0: jump-unless fell through
 run/0: instruction interpolate/7
-run/0: {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]} <- length {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
+run/0: {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]} <- length/27 {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1015 is 1006
 mem/0: storing 3 in location 1017
 run/0: instruction interpolate/8
-run/0: {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]} <- add {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
+run/0: {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]} <- add/2 {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
 run/0: ingredient 0 is result-len
 mem/0: location 1014 is 5
 run/0: ingredient 1 is a-len
@@ -103,56 +103,56 @@ mem/0: location 1017 is 3
 run/0: product 0 is 8
 mem/0: storing 8 in location 1014
 run/0: instruction interpolate/9
-run/0: {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]} <- subtract {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]} <- subtract/3 {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-len
 mem/0: location 1014 is 8
 run/0: ingredient 1 is 1
 run/0: product 0 is 7
 mem/0: storing 7 in location 1014
 run/0: instruction interpolate/10
-run/0: loop {name: "", value: -6, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
 run/0: ingredient 0 is -6
 run/0: jumping to instruction 5
 run/0: instruction interpolate/5
-run/0: {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character"]}, {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]} <- next-ingredient 
+run/0: {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character"]}, {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]} <- next-ingredient/29 
 mem/0: storing 0 in location 1016
 run/0: instruction interpolate/6
-run/0: break-unless {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
 mem/0: location 1016 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 11
 run/0: instruction interpolate/12
-run/0: rewind-ingredients 
+run/0: rewind-ingredients/30 
 run/0: instruction interpolate/13
-run/0: {name: "_", value: 0, type: 0, properties: ["_": "dummy"]} <- next-ingredient 
+run/0: {name: "_", value: 0, type: 0, properties: ["_": "dummy"]} <- next-ingredient/29 
 run/0: product 0 is 1000
 run/0: instruction interpolate/14
-run/0: {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character"]} <- new {name: "character", value: 4, type: 0, properties: ["character": "type"]}, {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]}
+run/0: {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character"]} <- new/41 {name: "character", value: 4, type: 0, properties: ["character": "type"]}, {name: "result-len", value: 3, type: 1, properties: ["result-len": "integer"]}
 mem/0: location 1014 is 7
 mem/0: array size is 7
 mem/0: new alloc: 1071
 mem/0: storing 1071 in location 1018
 run/0: instruction interpolate/15
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 1019
 run/0: instruction interpolate/16
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 1020
 run/0: instruction interpolate/18
-run/0: {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character"]}, {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]} <- next-ingredient 
+run/0: {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character"]}, {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]} <- next-ingredient/29 
 run/0: product 0 is 1006
 mem/0: storing 1006 in location 1015
 mem/0: storing 1 in location 1016
 run/0: instruction interpolate/19
-run/0: break-unless {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]}, {name: "", value: 25, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]}, {name: "", value: 25, type: , properties: ["": ]}
 mem/0: location 1016 is 1
 run/0: ingredient 0 is 1
 run/0: jump-unless fell through
 run/0: instruction interpolate/21
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
+run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1020 is 0
 run/0: ingredient 1 is tem-len
@@ -160,12 +160,12 @@ mem/0: location 1013 is 5
 run/0: product 0 is 0
 mem/0: storing 0 in location 1021
 run/0: instruction interpolate/22
-run/0: break-if {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
+run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
 mem/0: location 1021 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/23
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
 mem/0: location 1012 is 1000
 run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
@@ -176,19 +176,19 @@ mem/0: location 1001 is 97
 run/0: product 0 is 97
 mem/0: storing 97 in location 1022
 run/0: instruction interpolate/24
-run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
+run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal/13 {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
 run/0: ingredient 0 is in
 mem/0: location 1022 is 97
 run/0: ingredient 1 is 95
 run/0: product 0 is 0
 mem/0: storing 0 in location 1023
 run/0: instruction interpolate/25
-run/0: break-if {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
+run/0: break-if/11 {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
 mem/0: location 1023 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/26
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/26 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1018 is 1071
 run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
@@ -197,31 +197,31 @@ run/0: address to copy is 1072
 run/0: product 0 is 1072
 mem/0: storing 1072 in location 1024
 run/0: instruction interpolate/27
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy {name: "in", value: 11, type: 4, properties: ["in": "character"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
 run/0: ingredient 0 is in
 mem/0: location 1022 is 97
 mem/0: location 1024 is 1072
 mem/0: storing 97 in location 1072
 run/0: instruction interpolate/28
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1020 is 0
 run/0: ingredient 1 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1020
 run/0: instruction interpolate/29
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-idx
 mem/0: location 1019 is 0
 run/0: ingredient 1 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1019
 run/0: instruction interpolate/30
-run/0: loop {name: "", value: -10, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -10, type: , properties: ["": ]}
 run/0: ingredient 0 is -10
 run/0: jumping to instruction 21
 run/0: instruction interpolate/21
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
+run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1020 is 1
 run/0: ingredient 1 is tem-len
@@ -229,12 +229,12 @@ mem/0: location 1013 is 5
 run/0: product 0 is 0
 mem/0: storing 0 in location 1021
 run/0: instruction interpolate/22
-run/0: break-if {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
+run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
 mem/0: location 1021 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/23
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
 mem/0: location 1012 is 1000
 run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
@@ -245,19 +245,19 @@ mem/0: location 1002 is 98
 run/0: product 0 is 98
 mem/0: storing 98 in location 1022
 run/0: instruction interpolate/24
-run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
+run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal/13 {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
 run/0: ingredient 0 is in
 mem/0: location 1022 is 98
 run/0: ingredient 1 is 95
 run/0: product 0 is 0
 mem/0: storing 0 in location 1023
 run/0: instruction interpolate/25
-run/0: break-if {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
+run/0: break-if/11 {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
 mem/0: location 1023 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/26
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/26 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1018 is 1071
 run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
@@ -266,31 +266,31 @@ run/0: address to copy is 1073
 run/0: product 0 is 1073
 mem/0: storing 1073 in location 1024
 run/0: instruction interpolate/27
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy {name: "in", value: 11, type: 4, properties: ["in": "character"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
 run/0: ingredient 0 is in
 mem/0: location 1022 is 98
 mem/0: location 1024 is 1073
 mem/0: storing 98 in location 1073
 run/0: instruction interpolate/28
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1020 is 1
 run/0: ingredient 1 is 1
 run/0: product 0 is 2
 mem/0: storing 2 in location 1020
 run/0: instruction interpolate/29
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-idx
 mem/0: location 1019 is 1
 run/0: ingredient 1 is 1
 run/0: product 0 is 2
 mem/0: storing 2 in location 1019
 run/0: instruction interpolate/30
-run/0: loop {name: "", value: -10, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -10, type: , properties: ["": ]}
 run/0: ingredient 0 is -10
 run/0: jumping to instruction 21
 run/0: instruction interpolate/21
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
+run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1020 is 2
 run/0: ingredient 1 is tem-len
@@ -298,12 +298,12 @@ mem/0: location 1013 is 5
 run/0: product 0 is 0
 mem/0: storing 0 in location 1021
 run/0: instruction interpolate/22
-run/0: break-if {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
+run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
 mem/0: location 1021 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/23
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
 mem/0: location 1012 is 1000
 run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
@@ -314,19 +314,19 @@ mem/0: location 1003 is 99
 run/0: product 0 is 99
 mem/0: storing 99 in location 1022
 run/0: instruction interpolate/24
-run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
+run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal/13 {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
 run/0: ingredient 0 is in
 mem/0: location 1022 is 99
 run/0: ingredient 1 is 95
 run/0: product 0 is 0
 mem/0: storing 0 in location 1023
 run/0: instruction interpolate/25
-run/0: break-if {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
+run/0: break-if/11 {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
 mem/0: location 1023 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/26
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/26 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1018 is 1071
 run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
@@ -335,31 +335,31 @@ run/0: address to copy is 1074
 run/0: product 0 is 1074
 mem/0: storing 1074 in location 1024
 run/0: instruction interpolate/27
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy {name: "in", value: 11, type: 4, properties: ["in": "character"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
 run/0: ingredient 0 is in
 mem/0: location 1022 is 99
 mem/0: location 1024 is 1074
 mem/0: storing 99 in location 1074
 run/0: instruction interpolate/28
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1020 is 2
 run/0: ingredient 1 is 1
 run/0: product 0 is 3
 mem/0: storing 3 in location 1020
 run/0: instruction interpolate/29
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-idx
 mem/0: location 1019 is 2
 run/0: ingredient 1 is 1
 run/0: product 0 is 3
 mem/0: storing 3 in location 1019
 run/0: instruction interpolate/30
-run/0: loop {name: "", value: -10, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -10, type: , properties: ["": ]}
 run/0: ingredient 0 is -10
 run/0: jumping to instruction 21
 run/0: instruction interpolate/21
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
+run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1020 is 3
 run/0: ingredient 1 is tem-len
@@ -367,12 +367,12 @@ mem/0: location 1013 is 5
 run/0: product 0 is 0
 mem/0: storing 0 in location 1021
 run/0: instruction interpolate/22
-run/0: break-if {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
+run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
 mem/0: location 1021 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/23
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
 mem/0: location 1012 is 1000
 run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
@@ -383,19 +383,19 @@ mem/0: location 1004 is 32
 run/0: product 0 is 32
 mem/0: storing 32 in location 1022
 run/0: instruction interpolate/24
-run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
+run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal/13 {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
 run/0: ingredient 0 is in
 mem/0: location 1022 is 32
 run/0: ingredient 1 is 95
 run/0: product 0 is 0
 mem/0: storing 0 in location 1023
 run/0: instruction interpolate/25
-run/0: break-if {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
+run/0: break-if/11 {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
 mem/0: location 1023 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/26
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/26 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1018 is 1071
 run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
@@ -404,31 +404,31 @@ run/0: address to copy is 1075
 run/0: product 0 is 1075
 mem/0: storing 1075 in location 1024
 run/0: instruction interpolate/27
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy {name: "in", value: 11, type: 4, properties: ["in": "character"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
 run/0: ingredient 0 is in
 mem/0: location 1022 is 32
 mem/0: location 1024 is 1075
 mem/0: storing 32 in location 1075
 run/0: instruction interpolate/28
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1020 is 3
 run/0: ingredient 1 is 1
 run/0: product 0 is 4
 mem/0: storing 4 in location 1020
 run/0: instruction interpolate/29
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-idx
 mem/0: location 1019 is 3
 run/0: ingredient 1 is 1
 run/0: product 0 is 4
 mem/0: storing 4 in location 1019
 run/0: instruction interpolate/30
-run/0: loop {name: "", value: -10, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -10, type: , properties: ["": ]}
 run/0: ingredient 0 is -10
 run/0: jumping to instruction 21
 run/0: instruction interpolate/21
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
+run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1020 is 4
 run/0: ingredient 1 is tem-len
@@ -436,12 +436,12 @@ mem/0: location 1013 is 5
 run/0: product 0 is 0
 mem/0: storing 0 in location 1021
 run/0: instruction interpolate/22
-run/0: break-if {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
+run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "2", value: 2, type: 0, properties: ["2": "blocks"]}
 mem/0: location 1021 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/23
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}, {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "template", value: 1, type: 2-5-4, properties: ["template": "address":"array":"character", "deref": ]}
 mem/0: location 1012 is 1000
 run/0: ingredient 1 is {name: "i", value: 9, type: 1, properties: ["i": "integer"]}
@@ -452,24 +452,24 @@ mem/0: location 1005 is 95
 run/0: product 0 is 95
 mem/0: storing 95 in location 1022
 run/0: instruction interpolate/24
-run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
+run/0: {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]} <- equal/13 {name: "in", value: 11, type: 4, properties: ["in": "character"]}, {name: "95", value: 95, type: 0, properties: ["95": "literal"]}
 run/0: ingredient 0 is in
 mem/0: location 1022 is 95
 run/0: ingredient 1 is 95
 run/0: product 0 is 1
 mem/0: storing 1 in location 1023
 run/0: instruction interpolate/25
-run/0: break-if {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
+run/0: break-if/11 {name: "underscore?", value: 12, type: 3, properties: ["underscore?": "boolean"]}, {name: "", value: 5, type: , properties: ["": ]}
 mem/0: location 1023 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
 run/0: jumping to instruction 31
 run/0: instruction interpolate/32
-run/0: {name: "j", value: 14, type: 1, properties: ["j": "integer"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "j", value: 14, type: 1, properties: ["j": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 1025
 run/0: instruction interpolate/34
-run/0: {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]} <- greater-or-equal {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
+run/0: {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]} <- greater-or-equal/16 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
 run/0: ingredient 0 is j
 mem/0: location 1025 is 0
 run/0: ingredient 1 is a-len
@@ -477,12 +477,12 @@ mem/0: location 1017 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1026
 run/0: instruction interpolate/35
-run/0: break-if {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1026 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/36
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
 run/0: ingredient 0 is {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1015 is 1006
 run/0: ingredient 1 is {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
@@ -493,7 +493,7 @@ mem/0: location 1007 is 100
 run/0: product 0 is 100
 mem/0: storing 100 in location 1022
 run/0: instruction interpolate/37
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/26 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1018 is 1071
 run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
@@ -502,31 +502,31 @@ run/0: address to copy is 1076
 run/0: product 0 is 1076
 mem/0: storing 1076 in location 1024
 run/0: instruction interpolate/38
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy {name: "in", value: 11, type: 4, properties: ["in": "character"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
 run/0: ingredient 0 is in
 mem/0: location 1022 is 100
 mem/0: location 1024 is 1076
 mem/0: storing 100 in location 1076
 run/0: instruction interpolate/39
-run/0: {name: "j", value: 14, type: 1, properties: ["j": "integer"]} <- add {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "j", value: 14, type: 1, properties: ["j": "integer"]} <- add/2 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is j
 mem/0: location 1025 is 0
 run/0: ingredient 1 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1025
 run/0: instruction interpolate/40
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-idx
 mem/0: location 1019 is 4
 run/0: ingredient 1 is 1
 run/0: product 0 is 5
 mem/0: storing 5 in location 1019
 run/0: instruction interpolate/41
-run/0: loop {name: "", value: -8, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
 run/0: ingredient 0 is -8
 run/0: jumping to instruction 34
 run/0: instruction interpolate/34
-run/0: {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]} <- greater-or-equal {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
+run/0: {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]} <- greater-or-equal/16 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
 run/0: ingredient 0 is j
 mem/0: location 1025 is 1
 run/0: ingredient 1 is a-len
@@ -534,12 +534,12 @@ mem/0: location 1017 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1026
 run/0: instruction interpolate/35
-run/0: break-if {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1026 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/36
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
 run/0: ingredient 0 is {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1015 is 1006
 run/0: ingredient 1 is {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
@@ -550,7 +550,7 @@ mem/0: location 1008 is 101
 run/0: product 0 is 101
 mem/0: storing 101 in location 1022
 run/0: instruction interpolate/37
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/26 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1018 is 1071
 run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
@@ -559,31 +559,31 @@ run/0: address to copy is 1077
 run/0: product 0 is 1077
 mem/0: storing 1077 in location 1024
 run/0: instruction interpolate/38
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy {name: "in", value: 11, type: 4, properties: ["in": "character"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
 run/0: ingredient 0 is in
 mem/0: location 1022 is 101
 mem/0: location 1024 is 1077
 mem/0: storing 101 in location 1077
 run/0: instruction interpolate/39
-run/0: {name: "j", value: 14, type: 1, properties: ["j": "integer"]} <- add {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "j", value: 14, type: 1, properties: ["j": "integer"]} <- add/2 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is j
 mem/0: location 1025 is 1
 run/0: ingredient 1 is 1
 run/0: product 0 is 2
 mem/0: storing 2 in location 1025
 run/0: instruction interpolate/40
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-idx
 mem/0: location 1019 is 5
 run/0: ingredient 1 is 1
 run/0: product 0 is 6
 mem/0: storing 6 in location 1019
 run/0: instruction interpolate/41
-run/0: loop {name: "", value: -8, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
 run/0: ingredient 0 is -8
 run/0: jumping to instruction 34
 run/0: instruction interpolate/34
-run/0: {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]} <- greater-or-equal {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
+run/0: {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]} <- greater-or-equal/16 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
 run/0: ingredient 0 is j
 mem/0: location 1025 is 2
 run/0: ingredient 1 is a-len
@@ -591,12 +591,12 @@ mem/0: location 1017 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1026
 run/0: instruction interpolate/35
-run/0: break-if {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1026 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction interpolate/36
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
 run/0: ingredient 0 is {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1015 is 1006
 run/0: ingredient 1 is {name: "j", value: 14, type: 1, properties: ["j": "integer"]}
@@ -607,7 +607,7 @@ mem/0: location 1009 is 102
 run/0: product 0 is 102
 mem/0: storing 102 in location 1022
 run/0: instruction interpolate/37
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character"]} <- index-address/26 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1018 is 1071
 run/0: ingredient 1 is {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}
@@ -616,31 +616,31 @@ run/0: address to copy is 1078
 run/0: product 0 is 1078
 mem/0: storing 1078 in location 1024
 run/0: instruction interpolate/38
-run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy {name: "in", value: 11, type: 4, properties: ["in": "character"]}
+run/0: {name: "out", value: 13, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
 run/0: ingredient 0 is in
 mem/0: location 1022 is 102
 mem/0: location 1024 is 1078
 mem/0: storing 102 in location 1078
 run/0: instruction interpolate/39
-run/0: {name: "j", value: 14, type: 1, properties: ["j": "integer"]} <- add {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "j", value: 14, type: 1, properties: ["j": "integer"]} <- add/2 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is j
 mem/0: location 1025 is 2
 run/0: ingredient 1 is 1
 run/0: product 0 is 3
 mem/0: storing 3 in location 1025
 run/0: instruction interpolate/40
-run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 8, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-idx
 mem/0: location 1019 is 6
 run/0: ingredient 1 is 1
 run/0: product 0 is 7
 mem/0: storing 7 in location 1019
 run/0: instruction interpolate/41
-run/0: loop {name: "", value: -8, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
 run/0: ingredient 0 is -8
 run/0: jumping to instruction 34
 run/0: instruction interpolate/34
-run/0: {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]} <- greater-or-equal {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
+run/0: {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]} <- greater-or-equal/16 {name: "j", value: 14, type: 1, properties: ["j": "integer"]}, {name: "a-len", value: 6, type: 1, properties: ["a-len": "integer"]}
 run/0: ingredient 0 is j
 mem/0: location 1025 is 3
 run/0: ingredient 1 is a-len
@@ -648,33 +648,33 @@ mem/0: location 1017 is 3
 run/0: product 0 is 1
 mem/0: storing 1 in location 1026
 run/0: instruction interpolate/35
-run/0: break-if {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "arg-done?", value: 15, type: 3, properties: ["arg-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1026 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
 run/0: jumping to instruction 42
 run/0: instruction interpolate/43
-run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 9, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1020 is 4
 run/0: ingredient 1 is 1
 run/0: product 0 is 5
 mem/0: storing 5 in location 1020
 run/0: instruction interpolate/44
-run/0: loop {name: "", value: -27, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -27, type: , properties: ["": ]}
 run/0: ingredient 0 is -27
 run/0: jumping to instruction 18
 run/0: instruction interpolate/18
-run/0: {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character"]}, {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]} <- next-ingredient 
+run/0: {name: "a", value: 4, type: 2-5-4, properties: ["a": "address":"array":"character"]}, {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]} <- next-ingredient/29 
 mem/0: storing 0 in location 1016
 run/0: instruction interpolate/19
-run/0: break-unless {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]}, {name: "", value: 25, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "arg-received?", value: 5, type: 3, properties: ["arg-received?": "boolean"]}, {name: "", value: 25, type: , properties: ["": ]}
 mem/0: location 1016 is 0
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 
 run/0: jumping to instruction 45
 run/0: instruction interpolate/47
-run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
+run/0: {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 9, type: 1, properties: ["i": "integer"]}, {name: "tem-len", value: 2, type: 1, properties: ["tem-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1020 is 5
 run/0: ingredient 1 is tem-len
@@ -682,18 +682,18 @@ mem/0: location 1013 is 5
 run/0: product 0 is 1
 mem/0: storing 1 in location 1021
 run/0: instruction interpolate/48
-run/0: break-if {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "tem-done?", value: 10, type: 3, properties: ["tem-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1021 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
 run/0: jumping to instruction 55
 run/0: instruction interpolate/56
-run/0: reply {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character"]}
+run/0: reply/32 {name: "result", value: 7, type: 2-5-4, properties: ["result": "address":"array":"character"]}
 mem/0: location 1018 is 1071
 run/0: result 0 is 1071
 mem/0: storing 1071 in location 3
 run/0: instruction run1001/3
-run/0: {name: "4", value: 4, type: 5-4, properties: ["4": "array":"character", "raw": ]} <- copy {name: "3", value: 3, type: 2-5-4, properties: ["3": "address":"array":"character", "raw": , "deref": ]}
+run/0: {name: "4", value: 4, type: 5-4, properties: ["4": "array":"character", "raw": ]} <- copy/1 {name: "3", value: 3, type: 2-5-4, properties: ["3": "address":"array":"character", "raw": , "deref": ]}
 run/0: ingredient 0 is 3
 mem/0: location 3 is 1071
 mem/0: location 1071 is 7
@@ -713,7 +713,7 @@ mem/0: storing 100 in location 9
 mem/0: storing 101 in location 10
 mem/0: storing 102 in location 11
 run/0: instruction interpolate-works/1
-run/0: memory-should-contain {name: "
+run/0: memory-should-contain/43 {name: "
     4:string <- [abc def]
   ", value: 0, type: 0, properties: ["
     4:string <- [abc def]
diff --git a/cpp/.traces/jump_backward b/cpp/.traces/jump_backward
index 4de52a27..4c652f4e 100644
--- a/cpp/.traces/jump_backward
+++ b/cpp/.traces/jump_backward
@@ -11,14 +11,14 @@ after-brace/0: jump ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: jump {name: "1", value: 1, type: 0, properties: ["1": "offset"]}
+run/0: jump/10 {name: "1", value: 1, type: 0, properties: ["1": "offset"]}
 run/0: ingredient 0 is 1
 run/0: jumping to instruction 2
 run/0: instruction main/2
-run/0: jump {name: "-2", value: -2, type: 0, properties: ["-2": "offset"]}
+run/0: jump/10 {name: "-2", value: -2, type: 0, properties: ["-2": "offset"]}
 run/0: ingredient 0 is -2
 run/0: jumping to instruction 1
 run/0: instruction main/1
-run/0: jump {name: "1", value: 1, type: 0, properties: ["1": "offset"]}
+run/0: jump/10 {name: "1", value: 1, type: 0, properties: ["1": "offset"]}
 run/0: ingredient 0 is 1
 run/0: jumping to instruction 3
diff --git a/cpp/.traces/jump_can_skip_instructions b/cpp/.traces/jump_can_skip_instructions
index 6bfdce8b..ce915fa0 100644
--- a/cpp/.traces/jump_can_skip_instructions
+++ b/cpp/.traces/jump_can_skip_instructions
@@ -9,6 +9,6 @@ after-brace/0: copy ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: jump {name: "1", value: 1, type: 0, properties: ["1": "offset"]}
+run/0: jump/10 {name: "1", value: 1, type: 0, properties: ["1": "offset"]}
 run/0: ingredient 0 is 1
 run/0: jumping to instruction 2
diff --git a/cpp/.traces/jump_if b/cpp/.traces/jump_if
index b01ed9dd..cea3c4f8 100644
--- a/cpp/.traces/jump_if
+++ b/cpp/.traces/jump_if
@@ -10,7 +10,7 @@ after-brace/0: copy ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: jump-if {name: "999", value: 999, type: 0, properties: ["999": "literal"]}, {name: "1", value: 1, type: 0, properties: ["1": "offset"]}
+run/0: jump-if/11 {name: "999", value: 999, type: 0, properties: ["999": "literal"]}, {name: "1", value: 1, type: 0, properties: ["1": "offset"]}
 run/0: ingredient 0 is 999
 run/0: ingredient 1 is 1
 run/0: jumping to instruction 2
diff --git a/cpp/.traces/jump_if_fallthrough b/cpp/.traces/jump_if_fallthrough
index d87703c0..c5404292 100644
--- a/cpp/.traces/jump_if_fallthrough
+++ b/cpp/.traces/jump_if_fallthrough
@@ -10,10 +10,10 @@ after-brace/0: copy ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: jump-if {name: "0", value: 0, type: 0, properties: ["0": "literal"]}, {name: "1", value: 1, type: 0, properties: ["1": "offset"]}
+run/0: jump-if/11 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}, {name: "1", value: 1, type: 0, properties: ["1": "offset"]}
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction main/1
-run/0: {name: "123", value: 123, type: 1, properties: ["123": "integer"]} <- copy {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "123", value: 123, type: 1, properties: ["123": "integer"]} <- copy/1 {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is 1
 mem/0: storing 1 in location 123
diff --git a/cpp/.traces/jump_unless b/cpp/.traces/jump_unless
index 5c986093..fb015b69 100644
--- a/cpp/.traces/jump_unless
+++ b/cpp/.traces/jump_unless
@@ -10,7 +10,7 @@ after-brace/0: copy ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: jump-unless {name: "0", value: 0, type: 0, properties: ["0": "literal"]}, {name: "1", value: 1, type: 0, properties: ["1": "offset"]}
+run/0: jump-unless/12 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}, {name: "1", value: 1, type: 0, properties: ["1": "offset"]}
 run/0: ingredient 0 is 0
 run/0: ingredient 1 is 1
 run/0: jumping to instruction 2
diff --git a/cpp/.traces/jump_unless_fallthrough b/cpp/.traces/jump_unless_fallthrough
index b54b5c18..f9c4b840 100644
--- a/cpp/.traces/jump_unless_fallthrough
+++ b/cpp/.traces/jump_unless_fallthrough
@@ -10,10 +10,10 @@ after-brace/0: copy ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: jump-unless {name: "999", value: 999, type: 0, properties: ["999": "literal"]}, {name: "1", value: 1, type: 0, properties: ["1": "offset"]}
+run/0: jump-unless/12 {name: "999", value: 999, type: 0, properties: ["999": "literal"]}, {name: "1", value: 1, type: 0, properties: ["1": "offset"]}
 run/0: ingredient 0 is 999
 run/0: jump-unless fell through
 run/0: instruction main/1
-run/0: {name: "123", value: 123, type: 1, properties: ["123": "integer"]} <- copy {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "123", value: 123, type: 1, properties: ["123": "integer"]} <- copy/1 {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is 1
 mem/0: storing 1 in location 123
diff --git a/cpp/.traces/lesser_or_equal b/cpp/.traces/lesser_or_equal
index a8f225ec..ef139323 100644
--- a/cpp/.traces/lesser_or_equal
+++ b/cpp/.traces/lesser_or_equal
@@ -15,15 +15,15 @@ after-brace/0: lesser-or-equal ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "32", value: 32, type: 0, properties: ["32": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "32", value: 32, type: 0, properties: ["32": "literal"]}
 run/0: ingredient 0 is 32
 mem/0: storing 32 in location 1
 run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "33", value: 33, type: 0, properties: ["33": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "33", value: 33, type: 0, properties: ["33": "literal"]}
 run/0: ingredient 0 is 33
 mem/0: storing 33 in location 2
 run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- lesser-or-equal {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- lesser-or-equal/17 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 32
 run/0: ingredient 1 is 2
diff --git a/cpp/.traces/lesser_or_equal2 b/cpp/.traces/lesser_or_equal2
index a7ee1aff..3f75857d 100644
--- a/cpp/.traces/lesser_or_equal2
+++ b/cpp/.traces/lesser_or_equal2
@@ -15,15 +15,15 @@ after-brace/0: lesser-or-equal ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "33", value: 33, type: 0, properties: ["33": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "33", value: 33, type: 0, properties: ["33": "literal"]}
 run/0: ingredient 0 is 33
 mem/0: storing 33 in location 1
 run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "33", value: 33, type: 0, properties: ["33": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "33", value: 33, type: 0, properties: ["33": "literal"]}
 run/0: ingredient 0 is 33
 mem/0: storing 33 in location 2
 run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- lesser-or-equal {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- lesser-or-equal/17 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 33
 run/0: ingredient 1 is 2
diff --git a/cpp/.traces/lesser_or_equal3 b/cpp/.traces/lesser_or_equal3
index 027d1458..cc7d8d18 100644
--- a/cpp/.traces/lesser_or_equal3
+++ b/cpp/.traces/lesser_or_equal3
@@ -15,15 +15,15 @@ after-brace/0: lesser-or-equal ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 run/0: ingredient 0 is 34
 mem/0: storing 34 in location 1
 run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "33", value: 33, type: 0, properties: ["33": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "33", value: 33, type: 0, properties: ["33": "literal"]}
 run/0: ingredient 0 is 33
 mem/0: storing 33 in location 2
 run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- lesser-or-equal {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- lesser-or-equal/17 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 34
 run/0: ingredient 1 is 2
diff --git a/cpp/.traces/lesser_than b/cpp/.traces/lesser_than
index ccac221d..8c5a05dc 100644
--- a/cpp/.traces/lesser_than
+++ b/cpp/.traces/lesser_than
@@ -15,15 +15,15 @@ after-brace/0: lesser-than ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "32", value: 32, type: 0, properties: ["32": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "32", value: 32, type: 0, properties: ["32": "literal"]}
 run/0: ingredient 0 is 32
 mem/0: storing 32 in location 1
 run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "33", value: 33, type: 0, properties: ["33": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "33", value: 33, type: 0, properties: ["33": "literal"]}
 run/0: ingredient 0 is 33
 mem/0: storing 33 in location 2
 run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- lesser-than {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- lesser-than/15 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 32
 run/0: ingredient 1 is 2
diff --git a/cpp/.traces/lesser_than2 b/cpp/.traces/lesser_than2
index bddf9eff..27c17708 100644
--- a/cpp/.traces/lesser_than2
+++ b/cpp/.traces/lesser_than2
@@ -15,15 +15,15 @@ after-brace/0: lesser-than ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 run/0: ingredient 0 is 34
 mem/0: storing 34 in location 1
 run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "33", value: 33, type: 0, properties: ["33": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "33", value: 33, type: 0, properties: ["33": "literal"]}
 run/0: ingredient 0 is 33
 mem/0: storing 33 in location 2
 run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- lesser-than {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- lesser-than/15 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 34
 run/0: ingredient 1 is 2
diff --git a/cpp/.traces/maybe_convert b/cpp/.traces/maybe_convert
index adb8ebe7..0c26557b 100644
--- a/cpp/.traces/maybe_convert
+++ b/cpp/.traces/maybe_convert
@@ -19,19 +19,19 @@ after-brace/0: maybe-convert ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- copy {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- copy/1 {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is 1
 mem/0: storing 1 in location 12
 run/0: instruction main/1
-run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]} <- copy {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
+run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]} <- copy/1 {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
 run/0: ingredient 0 is 35
 mem/0: storing 35 in location 13
 run/0: instruction main/2
-run/0: {name: "14", value: 14, type: 1, properties: ["14": "integer"]} <- copy {name: "36", value: 36, type: 0, properties: ["36": "literal"]}
+run/0: {name: "14", value: 14, type: 1, properties: ["14": "integer"]} <- copy/1 {name: "36", value: 36, type: 0, properties: ["36": "literal"]}
 run/0: ingredient 0 is 36
 mem/0: storing 36 in location 14
 run/0: instruction main/3
-run/0: {name: "20", value: 20, type: 2-6, properties: ["20": "address":"point"]} <- maybe-convert {name: "12", value: 12, type: 8, properties: ["12": "integer-or-point"]}, {name: "1", value: 1, type: 0, properties: ["1": "variant"]}
+run/0: {name: "20", value: 20, type: 2-6, properties: ["20": "address":"point"]} <- maybe-convert/28 {name: "12", value: 12, type: 8, properties: ["12": "integer-or-point"]}, {name: "1", value: 1, type: 0, properties: ["1": "variant"]}
 run/0: ingredient 0 is 12
 run/0: ingredient 1 is 1
 mem/0: storing 13 in location 20
diff --git a/cpp/.traces/maybe_convert_fail b/cpp/.traces/maybe_convert_fail
index 31922135..c28c17b3 100644
--- a/cpp/.traces/maybe_convert_fail
+++ b/cpp/.traces/maybe_convert_fail
@@ -19,19 +19,19 @@ after-brace/0: maybe-convert ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- copy {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- copy/1 {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is 1
 mem/0: storing 1 in location 12
 run/0: instruction main/1
-run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]} <- copy {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
+run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]} <- copy/1 {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
 run/0: ingredient 0 is 35
 mem/0: storing 35 in location 13
 run/0: instruction main/2
-run/0: {name: "14", value: 14, type: 1, properties: ["14": "integer"]} <- copy {name: "36", value: 36, type: 0, properties: ["36": "literal"]}
+run/0: {name: "14", value: 14, type: 1, properties: ["14": "integer"]} <- copy/1 {name: "36", value: 36, type: 0, properties: ["36": "literal"]}
 run/0: ingredient 0 is 36
 mem/0: storing 36 in location 14
 run/0: instruction main/3
-run/0: {name: "20", value: 20, type: 2-6, properties: ["20": "address":"point"]} <- maybe-convert {name: "12", value: 12, type: 8, properties: ["12": "integer-or-point"]}, {name: "0", value: 0, type: 0, properties: ["0": "variant"]}
+run/0: {name: "20", value: 20, type: 2-6, properties: ["20": "address":"point"]} <- maybe-convert/28 {name: "12", value: 12, type: 8, properties: ["12": "integer-or-point"]}, {name: "0", value: 0, type: 0, properties: ["0": "variant"]}
 run/0: ingredient 0 is 12
 run/0: ingredient 1 is 0
 mem/0: storing 0 in location 20
diff --git a/cpp/.traces/maybe_convert_named b/cpp/.traces/maybe_convert_named
index 3444a65f..96a6528e 100644
--- a/cpp/.traces/maybe_convert_named
+++ b/cpp/.traces/maybe_convert_named
@@ -20,19 +20,19 @@ after-brace/0: maybe-convert ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- copy {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- copy/1 {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is 1
 mem/0: storing 1 in location 12
 run/0: instruction main/1
-run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]} <- copy {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
+run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]} <- copy/1 {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
 run/0: ingredient 0 is 35
 mem/0: storing 35 in location 13
 run/0: instruction main/2
-run/0: {name: "14", value: 14, type: 1, properties: ["14": "integer"]} <- copy {name: "36", value: 36, type: 0, properties: ["36": "literal"]}
+run/0: {name: "14", value: 14, type: 1, properties: ["14": "integer"]} <- copy/1 {name: "36", value: 36, type: 0, properties: ["36": "literal"]}
 run/0: ingredient 0 is 36
 mem/0: storing 36 in location 14
 run/0: instruction main/3
-run/0: {name: "20", value: 20, type: 2-6, properties: ["20": "address":"point"]} <- maybe-convert {name: "12", value: 12, type: 8, properties: ["12": "integer-or-point"]}, {name: "p", value: 1, type: 0, properties: ["p": "variant"]}
+run/0: {name: "20", value: 20, type: 2-6, properties: ["20": "address":"point"]} <- maybe-convert/28 {name: "12", value: 12, type: 8, properties: ["12": "integer-or-point"]}, {name: "p", value: 1, type: 0, properties: ["p": "variant"]}
 run/0: ingredient 0 is 12
 run/0: ingredient 1 is p
 mem/0: storing 13 in location 20
diff --git a/cpp/.traces/memory_check b/cpp/.traces/memory_check
index 2f883ae7..8f112824 100644
--- a/cpp/.traces/memory_check
+++ b/cpp/.traces/memory_check
@@ -9,7 +9,7 @@ after-brace/0: memory-should-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: memory-should-contain {name: "
+run/0: memory-should-contain/43 {name: "
     1 <- 13
   ", value: 0, type: 0, properties: ["
     1 <- 13
diff --git a/cpp/.traces/memory_check_multiple b/cpp/.traces/memory_check_multiple
index 230bdc6f..a90f062b 100644
--- a/cpp/.traces/memory_check_multiple
+++ b/cpp/.traces/memory_check_multiple
@@ -11,7 +11,7 @@ after-brace/0: memory-should-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: memory-should-contain {name: "
+run/0: memory-should-contain/43 {name: "
     1 <- 0
     1 <- 0
   ", value: 0, type: 0, properties: ["
diff --git a/cpp/.traces/memory_check_string b/cpp/.traces/memory_check_string
index d81ccd3e..4d878131 100644
--- a/cpp/.traces/memory_check_string
+++ b/cpp/.traces/memory_check_string
@@ -25,23 +25,23 @@ after-brace/0: memory-should-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
 run/0: ingredient 0 is 3
 mem/0: storing 3 in location 1
 run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "97", value: 97, type: 0, properties: ["97": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "97", value: 97, type: 0, properties: ["97": "literal"]}
 run/0: ingredient 0 is 97
 mem/0: storing 97 in location 2
 run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy {name: "98", value: 98, type: 0, properties: ["98": "literal"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy/1 {name: "98", value: 98, type: 0, properties: ["98": "literal"]}
 run/0: ingredient 0 is 98
 mem/0: storing 98 in location 3
 run/0: instruction main/3
-run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- copy {name: "99", value: 99, type: 0, properties: ["99": "literal"]}
+run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- copy/1 {name: "99", value: 99, type: 0, properties: ["99": "literal"]}
 run/0: ingredient 0 is 99
 mem/0: storing 99 in location 4
 run/0: instruction main/4
-run/0: memory-should-contain {name: "
+run/0: memory-should-contain/43 {name: "
     1:string <- [abc]
   ", value: 0, type: 0, properties: ["
     1:string <- [abc]
diff --git a/cpp/.traces/memory_check_string_length b/cpp/.traces/memory_check_string_length
index 13ddd812..2d9759cd 100644
--- a/cpp/.traces/memory_check_string_length
+++ b/cpp/.traces/memory_check_string_length
@@ -25,23 +25,23 @@ after-brace/0: memory-should-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
 run/0: ingredient 0 is 3
 mem/0: storing 3 in location 1
 run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "97", value: 97, type: 0, properties: ["97": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "97", value: 97, type: 0, properties: ["97": "literal"]}
 run/0: ingredient 0 is 97
 mem/0: storing 97 in location 2
 run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy {name: "98", value: 98, type: 0, properties: ["98": "literal"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy/1 {name: "98", value: 98, type: 0, properties: ["98": "literal"]}
 run/0: ingredient 0 is 98
 mem/0: storing 98 in location 3
 run/0: instruction main/3
-run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- copy {name: "99", value: 99, type: 0, properties: ["99": "literal"]}
+run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- copy/1 {name: "99", value: 99, type: 0, properties: ["99": "literal"]}
 run/0: ingredient 0 is 99
 mem/0: storing 99 in location 4
 run/0: instruction main/4
-run/0: memory-should-contain {name: "
+run/0: memory-should-contain/43 {name: "
     1:string <- [ab]
   ", value: 0, type: 0, properties: ["
     1:string <- [ab]
diff --git a/cpp/.traces/multiply b/cpp/.traces/multiply
index 85425656..ceb7be06 100644
--- a/cpp/.traces/multiply
+++ b/cpp/.traces/multiply
@@ -15,15 +15,15 @@ after-brace/0: multiply ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "4", value: 4, type: 0, properties: ["4": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "4", value: 4, type: 0, properties: ["4": "literal"]}
 run/0: ingredient 0 is 4
 mem/0: storing 4 in location 1
 run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "6", value: 6, type: 0, properties: ["6": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "6", value: 6, type: 0, properties: ["6": "literal"]}
 run/0: ingredient 0 is 6
 mem/0: storing 6 in location 2
 run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- multiply {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- multiply/4 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 4
 run/0: ingredient 1 is 2
diff --git a/cpp/.traces/multiply_literal b/cpp/.traces/multiply_literal
index cd240a9a..115fb958 100644
--- a/cpp/.traces/multiply_literal
+++ b/cpp/.traces/multiply_literal
@@ -7,7 +7,7 @@ after-brace/0: multiply ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- multiply {name: "2", value: 2, type: 0, properties: ["2": "literal"]}, {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- multiply/4 {name: "2", value: 2, type: 0, properties: ["2": "literal"]}, {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
 run/0: ingredient 0 is 2
 run/0: ingredient 1 is 3
 run/0: ingredient 1 is 3
diff --git a/cpp/.traces/new b/cpp/.traces/new
index 0ec29cd9..fddad2e9 100644
--- a/cpp/.traces/new
+++ b/cpp/.traces/new
@@ -17,15 +17,15 @@ after-brace/0: equal ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 2-1, properties: ["1": "address":"integer", "raw": ]} <- new {name: "integer", value: 1, type: 0, properties: ["integer": "type"]}
+run/0: {name: "1", value: 1, type: 2-1, properties: ["1": "address":"integer", "raw": ]} <- new/41 {name: "integer", value: 1, type: 0, properties: ["integer": "type"]}
 mem/0: new alloc: 1000
 mem/0: storing 1000 in location 1
 run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 2-1, properties: ["2": "address":"integer", "raw": ]} <- new {name: "integer", value: 1, type: 0, properties: ["integer": "type"]}
+run/0: {name: "2", value: 2, type: 2-1, properties: ["2": "address":"integer", "raw": ]} <- new/41 {name: "integer", value: 1, type: 0, properties: ["integer": "type"]}
 mem/0: new alloc: 1001
 mem/0: storing 1001 in location 2
 run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 3, properties: ["3": "boolean", "raw": ]} <- equal {name: "1", value: 1, type: 2-1, properties: ["1": "address":"integer", "raw": ]}, {name: "2", value: 2, type: 2-1, properties: ["2": "address":"integer", "raw": ]}
+run/0: {name: "3", value: 3, type: 3, properties: ["3": "boolean", "raw": ]} <- equal/13 {name: "1", value: 1, type: 2-1, properties: ["1": "address":"integer", "raw": ]}, {name: "2", value: 2, type: 2-1, properties: ["2": "address":"integer", "raw": ]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 1000
 run/0: ingredient 1 is 2
diff --git a/cpp/.traces/new_array b/cpp/.traces/new_array
index 52919f13..44369804 100644
--- a/cpp/.traces/new_array
+++ b/cpp/.traces/new_array
@@ -18,16 +18,16 @@ after-brace/0: subtract ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 2-5-1, properties: ["1": "address":"array":"integer", "raw": ]} <- new {name: "integer", value: 1, type: 0, properties: ["integer": "type"]}, {name: "5", value: 5, type: 0, properties: ["5": "literal"]}
+run/0: {name: "1", value: 1, type: 2-5-1, properties: ["1": "address":"array":"integer", "raw": ]} <- new/41 {name: "integer", value: 1, type: 0, properties: ["integer": "type"]}, {name: "5", value: 5, type: 0, properties: ["5": "literal"]}
 mem/0: array size is 5
 mem/0: new alloc: 1000
 mem/0: storing 1000 in location 1
 run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 2-1, properties: ["2": "address":"integer", "raw": ]} <- new {name: "integer", value: 1, type: 0, properties: ["integer": "type"]}
+run/0: {name: "2", value: 2, type: 2-1, properties: ["2": "address":"integer", "raw": ]} <- new/41 {name: "integer", value: 1, type: 0, properties: ["integer": "type"]}
 mem/0: new alloc: 1006
 mem/0: storing 1006 in location 2
 run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer", "raw": ]} <- subtract {name: "2", value: 2, type: 2-1, properties: ["2": "address":"integer", "raw": ]}, {name: "1", value: 1, type: 2-5-1, properties: ["1": "address":"array":"integer", "raw": ]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer", "raw": ]} <- subtract/3 {name: "2", value: 2, type: 2-1, properties: ["2": "address":"integer", "raw": ]}, {name: "1", value: 1, type: 2-5-1, properties: ["1": "address":"array":"integer", "raw": ]}
 run/0: ingredient 0 is 2
 mem/0: location 2 is 1006
 run/0: ingredient 1 is 1
diff --git a/cpp/.traces/new_concurrent b/cpp/.traces/new_concurrent
index fe3a1a01..cf9c8dba 100644
--- a/cpp/.traces/new_concurrent
+++ b/cpp/.traces/new_concurrent
@@ -21,20 +21,20 @@ after-brace/0: equal ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: f1
 run/0: instruction f1/0
-run/0: start-running {name: "f2", value: 0, type: 0, properties: ["f2": "recipe"]}
+run/0: start-running/33 {name: "f2", value: 0, type: 0, properties: ["f2": "recipe"]}
 run/0: ingredient 0 is f2
 new/0: routine allocated memory from 101000 to 201000
 run/0: instruction f1/1
-run/0: {name: "1", value: 1, type: 2-1, properties: ["1": "address":"integer", "raw": ]} <- new {name: "integer", value: 1, type: 0, properties: ["integer": "type"]}
+run/0: {name: "1", value: 1, type: 2-1, properties: ["1": "address":"integer", "raw": ]} <- new/41 {name: "integer", value: 1, type: 0, properties: ["integer": "type"]}
 mem/0: new alloc: 1000
 mem/0: storing 1000 in location 1
 schedule/0: f2
 run/0: instruction f2/0
-run/0: {name: "2", value: 2, type: 2-1, properties: ["2": "address":"integer", "raw": ]} <- new {name: "integer", value: 1, type: 0, properties: ["integer": "type"]}
+run/0: {name: "2", value: 2, type: 2-1, properties: ["2": "address":"integer", "raw": ]} <- new/41 {name: "integer", value: 1, type: 0, properties: ["integer": "type"]}
 mem/0: new alloc: 101000
 mem/0: storing 101000 in location 2
 run/0: instruction f2/1
-run/0: {name: "3", value: 3, type: 3, properties: ["3": "boolean", "raw": ]} <- equal {name: "1", value: 1, type: 2-1, properties: ["1": "address":"integer", "raw": ]}, {name: "2", value: 2, type: 2-1, properties: ["2": "address":"integer", "raw": ]}
+run/0: {name: "3", value: 3, type: 3, properties: ["3": "boolean", "raw": ]} <- equal/13 {name: "1", value: 1, type: 2-1, properties: ["1": "address":"integer", "raw": ]}, {name: "2", value: 2, type: 2-1, properties: ["2": "address":"integer", "raw": ]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 1000
 run/0: ingredient 1 is 2
diff --git a/cpp/.traces/new_overflow b/cpp/.traces/new_overflow
index 1e41e693..91203b0e 100644
--- a/cpp/.traces/new_overflow
+++ b/cpp/.traces/new_overflow
@@ -12,11 +12,11 @@ after-brace/0: new ...
 new/0: routine allocated memory from 1000 to 1002
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 2-1, properties: ["1": "address":"integer", "raw": ]} <- new {name: "integer", value: 1, type: 0, properties: ["integer": "type"]}
+run/0: {name: "1", value: 1, type: 2-1, properties: ["1": "address":"integer", "raw": ]} <- new/41 {name: "integer", value: 1, type: 0, properties: ["integer": "type"]}
 mem/0: new alloc: 1000
 mem/0: storing 1000 in location 1
 run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 2-6, properties: ["2": "address":"point", "raw": ]} <- new {name: "point", value: 6, type: 0, properties: ["point": "type"]}
+run/0: {name: "2", value: 2, type: 2-6, properties: ["2": "address":"point", "raw": ]} <- new/41 {name: "point", value: 6, type: 0, properties: ["point": "type"]}
 new/0: routine allocated memory from 1002 to 1004
 mem/0: new alloc: 1002
 mem/0: storing 1002 in location 2
diff --git a/cpp/.traces/new_string b/cpp/.traces/new_string
index d926b829..75357567 100644
--- a/cpp/.traces/new_string
+++ b/cpp/.traces/new_string
@@ -12,10 +12,10 @@ after-brace/0: index ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character"]} <- new {name: "abc def", value: 0, type: 0, properties: ["abc def": "literal-string"]}
+run/0: {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character"]} <- new/41 {name: "abc def", value: 0, type: 0, properties: ["abc def": "literal-string"]}
 mem/0: storing 1000 in location 1
 run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 4, properties: ["2": "character"]} <- index {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "deref": ]}, {name: "5", value: 5, type: 0, properties: ["5": "literal"]}
+run/0: {name: "2", value: 2, type: 4, properties: ["2": "character"]} <- index/25 {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "deref": ]}, {name: "5", value: 5, type: 0, properties: ["5": "literal"]}
 run/0: ingredient 0 is {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "deref": ]}
 mem/0: location 1 is 1000
 run/0: ingredient 1 is {name: "5", value: 5, type: 0, properties: ["5": "literal"]}
diff --git a/cpp/.traces/next_ingredient b/cpp/.traces/next_ingredient
index 0b91ebf7..814f9298 100644
--- a/cpp/.traces/next_ingredient
+++ b/cpp/.traces/next_ingredient
@@ -14,13 +14,13 @@ after-brace/0: add ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: f {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
+run/0: f/1001 {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
 run/0: instruction f/0
-run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- next-ingredient 
+run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- next-ingredient/29 
 run/0: product 0 is 2
 mem/0: storing 2 in location 12
 run/0: instruction f/1
-run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]} <- add {name: "1", value: 1, type: 0, properties: ["1": "literal"]}, {name: "12", value: 12, type: 1, properties: ["12": "integer"]}
+run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]} <- add/2 {name: "1", value: 1, type: 0, properties: ["1": "literal"]}, {name: "12", value: 12, type: 1, properties: ["12": "integer"]}
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 12
 mem/0: location 12 is 2
diff --git a/cpp/.traces/next_ingredient_missing b/cpp/.traces/next_ingredient_missing
index 06f8e65c..f67ee2c5 100644
--- a/cpp/.traces/next_ingredient_missing
+++ b/cpp/.traces/next_ingredient_missing
@@ -9,7 +9,7 @@ after-brace/0: next-ingredient ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: f 
+run/0: f/1001 
 run/0: instruction f/0
-run/0: {name: "_", value: 0, type: 0, properties: ["_": "dummy"]}, {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- next-ingredient 
+run/0: {name: "_", value: 0, type: 0, properties: ["_": "dummy"]}, {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- next-ingredient/29 
 mem/0: storing 0 in location 12
diff --git a/cpp/.traces/not b/cpp/.traces/not
index 24db029f..5450b050 100644
--- a/cpp/.traces/not
+++ b/cpp/.traces/not
@@ -10,11 +10,11 @@ after-brace/0: not ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is 1
 mem/0: storing 1 in location 1
 run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- not {name: "1", value: 1, type: 1, properties: ["1": "integer"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- not/9 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 1
 run/0: product 0 is 0
diff --git a/cpp/.traces/or b/cpp/.traces/or
index 50a78dee..72231ceb 100644
--- a/cpp/.traces/or
+++ b/cpp/.traces/or
@@ -15,15 +15,15 @@ after-brace/0: or ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is 1
 mem/0: storing 1 in location 1
 run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 2
 run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- or {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- or/8 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 1
 run/0: ingredient 1 is 2
diff --git a/cpp/.traces/print-character-at-top-left b/cpp/.traces/print-character-at-top-left
index 3bdff75f..4358d624 100644
--- a/cpp/.traces/print-character-at-top-left
+++ b/cpp/.traces/print-character-at-top-left
@@ -28,7 +28,7 @@ after-brace/0: memory-should-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: print-character-at-top-left
 run/0: instruction print-character-at-top-left/0
-run/0: run {name: "
+run/0: run/42 {name: "
 #?     $start-tracing #? 3
     1:address:screen <- init-fake-screen 3:literal/width, 2:literal/height
     1:address:screen <- print-character 1:address:screen, 97:literal  # 'a'
@@ -63,17 +63,17 @@ after-brace/0: print-character ...
 after-brace/0: get ...
 after-brace/0: copy ...
 run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen"]} <- init-fake-screen {name: "3", value: 3, type: 0, properties: ["3": "literal", "width": ]}, {name: "2", value: 2, type: 0, properties: ["2": "literal", "height": ]}
+run/0: {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen"]} <- init-fake-screen/115 {name: "3", value: 3, type: 0, properties: ["3": "literal", "width": ]}, {name: "2", value: 2, type: 0, properties: ["2": "literal", "height": ]}
 run/0: instruction init-fake-screen/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal", "capacity": ]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal", "capacity": ]}
 mem/0: array size is 30
 mem/0: new alloc: 1000
 run/0: instruction init-fake-screen/1
-run/0: {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen"]} <- new {name: "screen", value: 11, type: 0, properties: ["screen": "type"]}
+run/0: {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen"]} <- new/41 {name: "screen", value: 11, type: 0, properties: ["screen": "type"]}
 mem/0: new alloc: 1031
 mem/0: storing 1031 in location 1002
 run/0: instruction init-fake-screen/2
-run/0: {name: "width", value: 2, type: 2-1, properties: ["width": "address":"integer"]} <- get-address {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]}
+run/0: {name: "width", value: 2, type: 2-1, properties: ["width": "address":"integer"]} <- get-address/24 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1002 is 1031
 run/0: ingredient 1 is num-columns
@@ -81,12 +81,12 @@ run/0: address to copy is 1032
 run/0: product 0 is 1032
 mem/0: storing 1032 in location 1003
 run/0: instruction init-fake-screen/3
-run/0: {name: "width", value: 2, type: 2-1, properties: ["width": "address":"integer", "deref": ]} <- next-ingredient 
+run/0: {name: "width", value: 2, type: 2-1, properties: ["width": "address":"integer", "deref": ]} <- next-ingredient/29 
 run/0: product 0 is 3
 mem/0: location 1003 is 1032
 mem/0: storing 3 in location 1032
 run/0: instruction init-fake-screen/4
-run/0: {name: "height", value: 3, type: 2-1, properties: ["height": "address":"integer"]} <- get-address {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "num-rows", value: 0, type: 0, properties: ["num-rows": "offset"]}
+run/0: {name: "height", value: 3, type: 2-1, properties: ["height": "address":"integer"]} <- get-address/24 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "num-rows", value: 0, type: 0, properties: ["num-rows": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1002 is 1031
 run/0: ingredient 1 is num-rows
@@ -94,12 +94,12 @@ run/0: address to copy is 1031
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1004
 run/0: instruction init-fake-screen/5
-run/0: {name: "height", value: 3, type: 2-1, properties: ["height": "address":"integer", "deref": ]} <- next-ingredient 
+run/0: {name: "height", value: 3, type: 2-1, properties: ["height": "address":"integer", "deref": ]} <- next-ingredient/29 
 run/0: product 0 is 2
 mem/0: location 1004 is 1031
 mem/0: storing 2 in location 1031
 run/0: instruction init-fake-screen/6
-run/0: {name: "row", value: 4, type: 2-1, properties: ["row": "address":"integer"]} <- get-address {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]}
+run/0: {name: "row", value: 4, type: 2-1, properties: ["row": "address":"integer"]} <- get-address/24 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1002 is 1031
 run/0: ingredient 1 is cursor-row
@@ -107,12 +107,12 @@ run/0: address to copy is 1033
 run/0: product 0 is 1033
 mem/0: storing 1033 in location 1005
 run/0: instruction init-fake-screen/7
-run/0: {name: "row", value: 4, type: 2-1, properties: ["row": "address":"integer", "deref": ]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "row", value: 4, type: 2-1, properties: ["row": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: location 1005 is 1033
 mem/0: storing 0 in location 1033
 run/0: instruction init-fake-screen/8
-run/0: {name: "column", value: 5, type: 2-1, properties: ["column": "address":"integer"]} <- get-address {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
+run/0: {name: "column", value: 5, type: 2-1, properties: ["column": "address":"integer"]} <- get-address/24 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1002 is 1031
 run/0: ingredient 1 is cursor-column
@@ -120,12 +120,12 @@ run/0: address to copy is 1034
 run/0: product 0 is 1034
 mem/0: storing 1034 in location 1006
 run/0: instruction init-fake-screen/9
-run/0: {name: "column", value: 5, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "column", value: 5, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: location 1006 is 1034
 mem/0: storing 0 in location 1034
 run/0: instruction init-fake-screen/10
-run/0: {name: "bufsize", value: 6, type: 1, properties: ["bufsize": "integer"]} <- multiply {name: "width", value: 2, type: 2-1, properties: ["width": "address":"integer", "deref": ]}, {name: "height", value: 3, type: 2-1, properties: ["height": "address":"integer", "deref": ]}
+run/0: {name: "bufsize", value: 6, type: 1, properties: ["bufsize": "integer"]} <- multiply/4 {name: "width", value: 2, type: 2-1, properties: ["width": "address":"integer", "deref": ]}, {name: "height", value: 3, type: 2-1, properties: ["height": "address":"integer", "deref": ]}
 run/0: ingredient 0 is width
 mem/0: location 1003 is 1032
 mem/0: location 1032 is 3
@@ -136,7 +136,7 @@ run/0: ingredient 1 is 2
 run/0: product 0 is 6
 mem/0: storing 6 in location 1007
 run/0: instruction init-fake-screen/11
-run/0: {name: "buf", value: 7, type: 2-2-5-4, properties: ["buf": "address":"address":"array":"character"]} <- get-address {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
+run/0: {name: "buf", value: 7, type: 2-2-5-4, properties: ["buf": "address":"address":"array":"character"]} <- get-address/24 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is result
 mem/0: location 1002 is 1031
 run/0: ingredient 1 is data
@@ -144,30 +144,30 @@ run/0: address to copy is 1035
 run/0: product 0 is 1035
 mem/0: storing 1035 in location 1008
 run/0: instruction init-fake-screen/12
-run/0: {name: "buf", value: 7, type: 2-2-5-4, properties: ["buf": "address":"address":"array":"character", "deref": ]} <- new {name: "character", value: 0, type: 0, properties: ["character": "literal"]}, {name: "bufsize", value: 6, type: 1, properties: ["bufsize": "integer"]}
+run/0: {name: "buf", value: 7, type: 2-2-5-4, properties: ["buf": "address":"address":"array":"character", "deref": ]} <- new/41 {name: "character", value: 0, type: 0, properties: ["character": "literal"]}, {name: "bufsize", value: 6, type: 1, properties: ["bufsize": "integer"]}
 mem/0: location 1007 is 6
 mem/0: array size is 6
 mem/0: new alloc: 1036
 mem/0: location 1008 is 1035
 mem/0: storing 1036 in location 1035
 run/0: instruction init-fake-screen/13
-run/0: clear-screen {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen"]}
+run/0: clear-screen/116 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen"]}
 mem/0: location 1002 is 1031
 run/0: instruction clear-screen/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1043
 run/0: instruction clear-screen/1
-run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient 
+run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1045
 run/0: instruction clear-screen/3
-run/0: break-unless {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 12, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 12, type: , properties: ["": ]}
 mem/0: location 1045 is 1031
 run/0: ingredient 0 is 1031
 run/0: jump-unless fell through
 run/0: instruction clear-screen/4
-run/0: {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
+run/0: {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get/23 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is x
 mem/0: location 1045 is 1031
 run/0: ingredient 1 is data
@@ -177,15 +177,15 @@ mem/0: location 1035 is 1036
 run/0: product 0 is 1036
 mem/0: storing 1036 in location 1046
 run/0: instruction clear-screen/5
-run/0: {name: "max", value: 3, type: 1, properties: ["max": "integer"]} <- length {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}
+run/0: {name: "max", value: 3, type: 1, properties: ["max": "integer"]} <- length/27 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}
 mem/0: location 1046 is 1036
 mem/0: storing 6 in location 1047
 run/0: instruction clear-screen/6
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 1048
 run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
+run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1048 is 0
 run/0: ingredient 1 is max
@@ -193,12 +193,12 @@ mem/0: location 1047 is 6
 run/0: product 0 is 0
 mem/0: storing 0 in location 1049
 run/0: instruction clear-screen/9
-run/0: break-if {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
 mem/0: location 1049 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
+run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/26 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is buf
 mem/0: location 1046 is 1036
 run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
@@ -207,23 +207,23 @@ run/0: address to copy is 1037
 run/0: product 0 is 1037
 mem/0: storing 1037 in location 1050
 run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
+run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
 run/0: ingredient 0 is  
 mem/0: location 1050 is 1037
 mem/0: storing 0 in location 1037
 run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1048 is 0
 run/0: ingredient 1 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1048
 run/0: instruction clear-screen/13
-run/0: loop {name: "", value: -6, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
 run/0: ingredient 0 is -6
 run/0: jumping to instruction 8
 run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
+run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1048 is 1
 run/0: ingredient 1 is max
@@ -231,12 +231,12 @@ mem/0: location 1047 is 6
 run/0: product 0 is 0
 mem/0: storing 0 in location 1049
 run/0: instruction clear-screen/9
-run/0: break-if {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
 mem/0: location 1049 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
+run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/26 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is buf
 mem/0: location 1046 is 1036
 run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
@@ -245,23 +245,23 @@ run/0: address to copy is 1038
 run/0: product 0 is 1038
 mem/0: storing 1038 in location 1050
 run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
+run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
 run/0: ingredient 0 is  
 mem/0: location 1050 is 1038
 mem/0: storing 0 in location 1038
 run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1048 is 1
 run/0: ingredient 1 is 1
 run/0: product 0 is 2
 mem/0: storing 2 in location 1048
 run/0: instruction clear-screen/13
-run/0: loop {name: "", value: -6, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
 run/0: ingredient 0 is -6
 run/0: jumping to instruction 8
 run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
+run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1048 is 2
 run/0: ingredient 1 is max
@@ -269,12 +269,12 @@ mem/0: location 1047 is 6
 run/0: product 0 is 0
 mem/0: storing 0 in location 1049
 run/0: instruction clear-screen/9
-run/0: break-if {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
 mem/0: location 1049 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
+run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/26 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is buf
 mem/0: location 1046 is 1036
 run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
@@ -283,23 +283,23 @@ run/0: address to copy is 1039
 run/0: product 0 is 1039
 mem/0: storing 1039 in location 1050
 run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
+run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
 run/0: ingredient 0 is  
 mem/0: location 1050 is 1039
 mem/0: storing 0 in location 1039
 run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1048 is 2
 run/0: ingredient 1 is 1
 run/0: product 0 is 3
 mem/0: storing 3 in location 1048
 run/0: instruction clear-screen/13
-run/0: loop {name: "", value: -6, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
 run/0: ingredient 0 is -6
 run/0: jumping to instruction 8
 run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
+run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1048 is 3
 run/0: ingredient 1 is max
@@ -307,12 +307,12 @@ mem/0: location 1047 is 6
 run/0: product 0 is 0
 mem/0: storing 0 in location 1049
 run/0: instruction clear-screen/9
-run/0: break-if {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
 mem/0: location 1049 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
+run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/26 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is buf
 mem/0: location 1046 is 1036
 run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
@@ -321,23 +321,23 @@ run/0: address to copy is 1040
 run/0: product 0 is 1040
 mem/0: storing 1040 in location 1050
 run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
+run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
 run/0: ingredient 0 is  
 mem/0: location 1050 is 1040
 mem/0: storing 0 in location 1040
 run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1048 is 3
 run/0: ingredient 1 is 1
 run/0: product 0 is 4
 mem/0: storing 4 in location 1048
 run/0: instruction clear-screen/13
-run/0: loop {name: "", value: -6, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
 run/0: ingredient 0 is -6
 run/0: jumping to instruction 8
 run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
+run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1048 is 4
 run/0: ingredient 1 is max
@@ -345,12 +345,12 @@ mem/0: location 1047 is 6
 run/0: product 0 is 0
 mem/0: storing 0 in location 1049
 run/0: instruction clear-screen/9
-run/0: break-if {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
 mem/0: location 1049 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
+run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/26 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is buf
 mem/0: location 1046 is 1036
 run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
@@ -359,23 +359,23 @@ run/0: address to copy is 1041
 run/0: product 0 is 1041
 mem/0: storing 1041 in location 1050
 run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
+run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
 run/0: ingredient 0 is  
 mem/0: location 1050 is 1041
 mem/0: storing 0 in location 1041
 run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1048 is 4
 run/0: ingredient 1 is 1
 run/0: product 0 is 5
 mem/0: storing 5 in location 1048
 run/0: instruction clear-screen/13
-run/0: loop {name: "", value: -6, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
 run/0: ingredient 0 is -6
 run/0: jumping to instruction 8
 run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
+run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1048 is 5
 run/0: ingredient 1 is max
@@ -383,12 +383,12 @@ mem/0: location 1047 is 6
 run/0: product 0 is 0
 mem/0: storing 0 in location 1049
 run/0: instruction clear-screen/9
-run/0: break-if {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
 mem/0: location 1049 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction clear-screen/10
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
+run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address/26 {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is buf
 mem/0: location 1046 is 1036
 run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]}
@@ -397,23 +397,23 @@ run/0: address to copy is 1042
 run/0: product 0 is 1042
 mem/0: storing 1042 in location 1050
 run/0: instruction clear-screen/11
-run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
+run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy/1 {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]}
 run/0: ingredient 0 is  
 mem/0: location 1050 is 1042
 mem/0: storing 0 in location 1042
 run/0: instruction clear-screen/12
-run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1048 is 5
 run/0: ingredient 1 is 1
 run/0: product 0 is 6
 mem/0: storing 6 in location 1048
 run/0: instruction clear-screen/13
-run/0: loop {name: "", value: -6, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -6, type: , properties: ["": ]}
 run/0: ingredient 0 is -6
 run/0: jumping to instruction 8
 run/0: instruction clear-screen/8
-run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
+run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1048 is 6
 run/0: ingredient 1 is max
@@ -421,41 +421,41 @@ mem/0: location 1047 is 6
 run/0: product 0 is 1
 mem/0: storing 1 in location 1049
 run/0: instruction clear-screen/9
-run/0: break-if {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]}
 mem/0: location 1049 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
 run/0: jumping to instruction 14
 run/0: instruction clear-screen/15
-run/0: reply {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
+run/0: reply/32 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
 mem/0: location 1045 is 1031
 run/0: instruction init-fake-screen/14
-run/0: reply {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen"]}
+run/0: reply/32 {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen"]}
 mem/0: location 1002 is 1031
 run/0: result 0 is 1031
 mem/0: storing 1031 in location 1
 run/0: instruction run1001/1
-run/0: {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen"]} <- print-character {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen"]}, {name: "97", value: 97, type: 0, properties: ["97": "literal"]}
+run/0: {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen"]} <- print-character/117 {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen"]}, {name: "97", value: 97, type: 0, properties: ["97": "literal"]}
 mem/0: location 1 is 1031
 run/0: instruction print-character/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1074
 run/0: instruction print-character/1
-run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient 
+run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1076
 run/0: instruction print-character/2
-run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient 
+run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient/29 
 run/0: product 0 is 97
 mem/0: storing 97 in location 1077
 run/0: instruction print-character/4
-run/0: break-unless {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 14, type: , properties: ["": ]}
+run/0: break-unless/12 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 14, type: , properties: ["": ]}
 mem/0: location 1076 is 1031
 run/0: ingredient 0 is 1031
 run/0: jump-unless fell through
 run/0: instruction print-character/5
-run/0: {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer"]} <- get-address {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]}
+run/0: {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer"]} <- get-address/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]}
 run/0: ingredient 0 is x
 mem/0: location 1076 is 1031
 run/0: ingredient 1 is cursor-row
@@ -463,7 +463,7 @@ run/0: address to copy is 1033
 run/0: product 0 is 1033
 mem/0: storing 1033 in location 1078
 run/0: instruction print-character/6
-run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer"]} <- get-address {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
+run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer"]} <- get-address/24 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]}
 run/0: ingredient 0 is x
 mem/0: location 1076 is 1031
 run/0: ingredient 1 is cursor-column
@@ -471,7 +471,7 @@ run/0: address to copy is 1034
 run/0: product 0 is 1034
 mem/0: storing 1034 in location 1079
 run/0: instruction print-character/7
-run/0: {name: "width", value: 5, type: 1, properties: ["width": "integer"]} <- get {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]}
+run/0: {name: "width", value: 5, type: 1, properties: ["width": "integer"]} <- get/23 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]}
 run/0: ingredient 0 is x
 mem/0: location 1076 is 1031
 run/0: ingredient 1 is num-columns
@@ -481,7 +481,7 @@ mem/0: location 1032 is 3
 run/0: product 0 is 3
 mem/0: storing 3 in location 1080
 run/0: instruction print-character/8
-run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- multiply {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
+run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- multiply/4 {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
 run/0: ingredient 0 is row
 mem/0: location 1078 is 1033
 mem/0: location 1033 is 0
@@ -491,7 +491,7 @@ run/0: ingredient 1 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1081
 run/0: instruction print-character/9
-run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- add {name: "index", value: 6, type: 1, properties: ["index": "integer"]}, {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}
+run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- add/2 {name: "index", value: 6, type: 1, properties: ["index": "integer"]}, {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}
 run/0: ingredient 0 is index
 mem/0: location 1081 is 0
 run/0: ingredient 1 is column
@@ -500,7 +500,7 @@ mem/0: location 1034 is 0
 run/0: product 0 is 0
 mem/0: storing 0 in location 1081
 run/0: instruction print-character/10
-run/0: {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
+run/0: {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get/23 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is x
 mem/0: location 1076 is 1031
 run/0: ingredient 1 is data
@@ -510,7 +510,7 @@ mem/0: location 1035 is 1036
 run/0: product 0 is 1036
 mem/0: storing 1036 in location 1082
 run/0: instruction print-character/11
-run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character"]} <- index-address {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
+run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character"]} <- index-address/26 {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
 run/0: ingredient 0 is buf
 mem/0: location 1082 is 1036
 run/0: ingredient 1 is {name: "index", value: 6, type: 1, properties: ["index": "integer"]}
@@ -519,13 +519,13 @@ run/0: address to copy is 1037
 run/0: product 0 is 1037
 mem/0: storing 1037 in location 1083
 run/0: instruction print-character/12
-run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character", "deref": ]} <- copy {name: "c", value: 2, type: 4, properties: ["c": "character"]}
+run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character", "deref": ]} <- copy/1 {name: "c", value: 2, type: 4, properties: ["c": "character"]}
 run/0: ingredient 0 is c
 mem/0: location 1077 is 97
 mem/0: location 1083 is 1037
 mem/0: storing 97 in location 1037
 run/0: instruction print-character/14
-run/0: {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]} <- equal {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
+run/0: {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]} <- equal/13 {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]}
 run/0: ingredient 0 is column
 mem/0: location 1079 is 1034
 mem/0: location 1034 is 0
@@ -534,12 +534,12 @@ mem/0: location 1080 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1084
 run/0: instruction print-character/15
-run/0: break-if {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-if/11 {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1084 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction print-character/16
-run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- add {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- add/2 {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is column
 mem/0: location 1079 is 1034
 mem/0: location 1034 is 0
@@ -548,12 +548,12 @@ run/0: product 0 is 1
 mem/0: location 1079 is 1034
 mem/0: storing 1 in location 1034
 run/0: instruction print-character/18
-run/0: reply {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
+run/0: reply/32 {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]}
 mem/0: location 1076 is 1031
 run/0: result 0 is 1031
 mem/0: storing 1031 in location 1
 run/0: instruction run1001/2
-run/0: {name: "2", value: 2, type: 2-5-4, properties: ["2": "address":"array":"character"]} <- get {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
+run/0: {name: "2", value: 2, type: 2-5-4, properties: ["2": "address":"array":"character"]} <- get/23 {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 1031
 run/0: ingredient 1 is data
@@ -563,7 +563,7 @@ mem/0: location 1035 is 1036
 run/0: product 0 is 1036
 mem/0: storing 1036 in location 2
 run/0: instruction run1001/3
-run/0: {name: "3", value: 3, type: 5-4, properties: ["3": "array":"character"]} <- copy {name: "2", value: 2, type: 2-5-4, properties: ["2": "address":"array":"character", "deref": ]}
+run/0: {name: "3", value: 3, type: 5-4, properties: ["3": "array":"character"]} <- copy/1 {name: "2", value: 2, type: 2-5-4, properties: ["2": "address":"array":"character", "deref": ]}
 run/0: ingredient 0 is 2
 mem/0: location 2 is 1036
 mem/0: location 1036 is 6
@@ -581,7 +581,7 @@ mem/0: storing 0 in location 7
 mem/0: storing 0 in location 8
 mem/0: storing 0 in location 9
 run/0: instruction print-character-at-top-left/1
-run/0: memory-should-contain {name: "
+run/0: memory-should-contain/43 {name: "
     3 <- 6  # width*height
     4 <- 97  # 'a'
     5 <- 0
diff --git a/cpp/.traces/reply b/cpp/.traces/reply
index de83831a..5a7c9e81 100644
--- a/cpp/.traces/reply
+++ b/cpp/.traces/reply
@@ -20,20 +20,20 @@ after-brace/0: reply ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]}, {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- f {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]}, {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- f/1001 {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
 run/0: instruction f/0
-run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- next-ingredient 
+run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- next-ingredient/29 
 run/0: product 0 is 2
 mem/0: storing 2 in location 12
 run/0: instruction f/1
-run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]} <- add {name: "1", value: 1, type: 0, properties: ["1": "literal"]}, {name: "12", value: 12, type: 1, properties: ["12": "integer"]}
+run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]} <- add/2 {name: "1", value: 1, type: 0, properties: ["1": "literal"]}, {name: "12", value: 12, type: 1, properties: ["12": "integer"]}
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 12
 mem/0: location 12 is 2
 run/0: product 0 is 3
 mem/0: storing 3 in location 13
 run/0: instruction f/2
-run/0: reply {name: "12", value: 12, type: 1, properties: ["12": "integer"]}, {name: "13", value: 13, type: 1, properties: ["13": "integer"]}
+run/0: reply/32 {name: "12", value: 12, type: 1, properties: ["12": "integer"]}, {name: "13", value: 13, type: 1, properties: ["13": "integer"]}
 mem/0: location 12 is 2
 mem/0: location 13 is 3
 run/0: result 0 is 2
diff --git a/cpp/.traces/reply_container b/cpp/.traces/reply_container
index 10916f34..beaaab68 100644
--- a/cpp/.traces/reply_container
+++ b/cpp/.traces/reply_container
@@ -17,17 +17,17 @@ after-brace/0: reply ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "3", value: 3, type: 6, properties: ["3": "point"]} <- f {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
+run/0: {name: "3", value: 3, type: 6, properties: ["3": "point"]} <- f/1001 {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
 run/0: instruction f/0
-run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- next-ingredient 
+run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- next-ingredient/29 
 run/0: product 0 is 2
 mem/0: storing 2 in location 12
 run/0: instruction f/1
-run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]} <- copy {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
+run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]} <- copy/1 {name: "35", value: 35, type: 0, properties: ["35": "literal"]}
 run/0: ingredient 0 is 35
 mem/0: storing 35 in location 13
 run/0: instruction f/2
-run/0: reply {name: "12", value: 12, type: 6, properties: ["12": "point"]}
+run/0: reply/32 {name: "12", value: 12, type: 6, properties: ["12": "point"]}
 mem/0: location 12 is 2
 mem/0: location 13 is 35
 run/0: result 0 is [2, 35]
diff --git a/cpp/.traces/reply_same_as_ingredient b/cpp/.traces/reply_same_as_ingredient
index 781da74a..6c030bd3 100644
--- a/cpp/.traces/reply_same_as_ingredient
+++ b/cpp/.traces/reply_same_as_ingredient
@@ -18,18 +18,18 @@ after-brace/0: reply ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 2-1, properties: ["1": "address":"integer"]} <- new {name: "integer", value: 1, type: 0, properties: ["integer": "type"]}
+run/0: {name: "1", value: 1, type: 2-1, properties: ["1": "address":"integer"]} <- new/41 {name: "integer", value: 1, type: 0, properties: ["integer": "type"]}
 mem/0: new alloc: 1000
 mem/0: storing 1000 in location 1
 run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 2-1, properties: ["2": "address":"integer"]} <- test1 {name: "1", value: 1, type: 2-1, properties: ["1": "address":"integer"]}
+run/0: {name: "2", value: 2, type: 2-1, properties: ["2": "address":"integer"]} <- test1/1001 {name: "1", value: 1, type: 2-1, properties: ["1": "address":"integer"]}
 mem/0: location 1 is 1000
 run/0: instruction test1/0
-run/0: {name: "10", value: 10, type: 2-1, properties: ["10": "address":"integer"]} <- next-ingredient 
+run/0: {name: "10", value: 10, type: 2-1, properties: ["10": "address":"integer"]} <- next-ingredient/29 
 run/0: product 0 is 1000
 mem/0: storing 1000 in location 10
 run/0: instruction test1/1
-run/0: reply {name: "10", value: 10, type: 2-1, properties: ["10": "address":"integer", "same-as-ingredient": "0"]}
+run/0: reply/32 {name: "10", value: 10, type: 2-1, properties: ["10": "address":"integer", "same-as-ingredient": "0"]}
 mem/0: location 10 is 1000
 run/0: result 0 is 1000
 warn/0: 'same-as-ingredient' result 2 must be location 1
diff --git a/cpp/.traces/return_on_fallthrough b/cpp/.traces/return_on_fallthrough
index 60b3b79f..01d38444 100644
--- a/cpp/.traces/return_on_fallthrough
+++ b/cpp/.traces/return_on_fallthrough
@@ -25,24 +25,24 @@ after-brace/0: copy ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: f 
+run/0: f/1001 
 run/0: instruction f/0
-run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- copy {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 run/0: ingredient 0 is 34
 mem/0: storing 34 in location 4
 run/0: instruction f/1
-run/0: {name: "5", value: 5, type: 1, properties: ["5": "integer"]} <- copy {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "5", value: 5, type: 1, properties: ["5": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 run/0: ingredient 0 is 34
 mem/0: storing 34 in location 5
 run/0: instruction main/1
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 run/0: ingredient 0 is 34
 mem/0: storing 34 in location 1
 run/0: instruction main/2
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 run/0: ingredient 0 is 34
 mem/0: storing 34 in location 2
 run/0: instruction main/3
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 run/0: ingredient 0 is 34
 mem/0: storing 34 in location 3
diff --git a/cpp/.traces/rewind_ingredients b/cpp/.traces/rewind_ingredients
index ffe655b3..7e01e4f3 100644
--- a/cpp/.traces/rewind_ingredients
+++ b/cpp/.traces/rewind_ingredients
@@ -19,18 +19,18 @@ after-brace/0: next-ingredient ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: f {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
+run/0: f/1001 {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
 run/0: instruction f/0
-run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- next-ingredient 
+run/0: {name: "12", value: 12, type: 1, properties: ["12": "integer"]} <- next-ingredient/29 
 run/0: product 0 is 2
 mem/0: storing 2 in location 12
 run/0: instruction f/1
-run/0: {name: "_", value: 0, type: 0, properties: ["_": "dummy"]}, {name: "1", value: 1, type: 3, properties: ["1": "boolean"]} <- next-ingredient 
+run/0: {name: "_", value: 0, type: 0, properties: ["_": "dummy"]}, {name: "1", value: 1, type: 3, properties: ["1": "boolean"]} <- next-ingredient/29 
 mem/0: storing 0 in location 1
 run/0: instruction f/2
-run/0: rewind-ingredients 
+run/0: rewind-ingredients/30 
 run/0: instruction f/3
-run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]}, {name: "2", value: 2, type: 3, properties: ["2": "boolean"]} <- next-ingredient 
+run/0: {name: "13", value: 13, type: 1, properties: ["13": "integer"]}, {name: "2", value: 2, type: 3, properties: ["2": "boolean"]} <- next-ingredient/29 
 run/0: product 0 is 2
 mem/0: storing 2 in location 13
 mem/0: storing 1 in location 2
diff --git a/cpp/.traces/run b/cpp/.traces/run
index 0fd2d418..f8480ccb 100644
--- a/cpp/.traces/run
+++ b/cpp/.traces/run
@@ -9,7 +9,7 @@ after-brace/0: run ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: run {name: "
+run/0: run/42 {name: "
     1:integer <- copy 13:literal
   ", value: 0, type: 0, properties: ["
     1:integer <- copy 13:literal
@@ -20,6 +20,6 @@ parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
 after-brace/0: recipe run1001
 after-brace/0: copy ...
 run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "13", value: 13, type: 0, properties: ["13": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "13", value: 13, type: 0, properties: ["13": "literal"]}
 run/0: ingredient 0 is 13
 mem/0: storing 13 in location 1
diff --git a/cpp/.traces/run_dummy b/cpp/.traces/run_dummy
index 49ad354d..0cd9cdf3 100644
--- a/cpp/.traces/run_dummy
+++ b/cpp/.traces/run_dummy
@@ -6,5 +6,5 @@ after-brace/0: copy ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "_", value: 0, type: 0, properties: ["_": "dummy"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "_", value: 0, type: 0, properties: ["_": "dummy"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
diff --git a/cpp/.traces/run_label b/cpp/.traces/run_label
index 4d643bd7..f9f2fce7 100644
--- a/cpp/.traces/run_label
+++ b/cpp/.traces/run_label
@@ -11,11 +11,11 @@ after-brace/0: copy ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/1
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "23", value: 23, type: 0, properties: ["23": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "23", value: 23, type: 0, properties: ["23": "literal"]}
 run/0: ingredient 0 is 23
 mem/0: storing 23 in location 1
 run/0: instruction main/2
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "1", value: 1, type: 1, properties: ["1": "integer"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 23
 mem/0: storing 23 in location 2
diff --git a/cpp/.traces/run_multiple b/cpp/.traces/run_multiple
index a34de64b..6d11353c 100644
--- a/cpp/.traces/run_multiple
+++ b/cpp/.traces/run_multiple
@@ -16,7 +16,7 @@ after-brace/0: run ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: run {name: "
+run/0: run/42 {name: "
     1:integer <- copy 13:literal
   ", value: 0, type: 0, properties: ["
     1:integer <- copy 13:literal
@@ -27,11 +27,11 @@ parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
 after-brace/0: recipe run1001
 after-brace/0: copy ...
 run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "13", value: 13, type: 0, properties: ["13": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "13", value: 13, type: 0, properties: ["13": "literal"]}
 run/0: ingredient 0 is 13
 mem/0: storing 13 in location 1
 run/0: instruction main/1
-run/0: run {name: "
+run/0: run/42 {name: "
     2:integer <- copy 13:literal
   ", value: 0, type: 0, properties: ["
     2:integer <- copy 13:literal
@@ -42,6 +42,6 @@ parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
 after-brace/0: recipe run1002
 after-brace/0: copy ...
 run/0: instruction run1002/0
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "13", value: 13, type: 0, properties: ["13": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "13", value: 13, type: 0, properties: ["13": "literal"]}
 run/0: ingredient 0 is 13
 mem/0: storing 13 in location 2
diff --git a/cpp/.traces/scenario_block b/cpp/.traces/scenario_block
index 75f23e5b..b57ef92d 100644
--- a/cpp/.traces/scenario_block
+++ b/cpp/.traces/scenario_block
@@ -16,7 +16,7 @@ after-brace/0: memory-should-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: foo
 run/0: instruction foo/0
-run/0: run {name: "
+run/0: run/42 {name: "
     1:integer <- copy 13:literal
   ", value: 0, type: 0, properties: ["
     1:integer <- copy 13:literal
@@ -27,11 +27,11 @@ parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
 after-brace/0: recipe run1001
 after-brace/0: copy ...
 run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "13", value: 13, type: 0, properties: ["13": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "13", value: 13, type: 0, properties: ["13": "literal"]}
 run/0: ingredient 0 is 13
 mem/0: storing 13 in location 1
 run/0: instruction foo/1
-run/0: memory-should-contain {name: "
+run/0: memory-should-contain/43 {name: "
     1 <- 13
   ", value: 0, type: 0, properties: ["
     1 <- 13
diff --git a/cpp/.traces/scenario_check_memory_and_trace b/cpp/.traces/scenario_check_memory_and_trace
index 683f827e..8eceb1a5 100644
--- a/cpp/.traces/scenario_check_memory_and_trace
+++ b/cpp/.traces/scenario_check_memory_and_trace
@@ -32,7 +32,7 @@ after-brace/0: trace-should-not-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: foo
 run/0: instruction foo/0
-run/0: run {name: "
+run/0: run/42 {name: "
     1:integer <- copy 13:literal
     trace [a], [a b c]
   ", value: 0, type: 0, properties: ["
@@ -49,27 +49,27 @@ after-brace/0: recipe run1001
 after-brace/0: copy ...
 after-brace/0: trace ...
 run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "13", value: 13, type: 0, properties: ["13": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "13", value: 13, type: 0, properties: ["13": "literal"]}
 run/0: ingredient 0 is 13
 mem/0: storing 13 in location 1
 run/0: instruction run1001/1
-run/0: trace {name: "a", value: 0, type: 0, properties: ["a": "literal-string"]}, {name: "a b c", value: 0, type: 0, properties: ["a b c": "literal-string"]}
+run/0: trace/18 {name: "a", value: 0, type: 0, properties: ["a": "literal-string"]}, {name: "a b c", value: 0, type: 0, properties: ["a b c": "literal-string"]}
 a/0: a b c
 run/0: instruction foo/1
-run/0: memory-should-contain {name: "
+run/0: memory-should-contain/43 {name: "
     1 <- 13
   ", value: 0, type: 0, properties: ["
     1 <- 13
   ": "literal-string"]}
 run/0: checking location 1
 run/0: instruction foo/2
-run/0: trace-should-contain {name: "
+run/0: trace-should-contain/44 {name: "
     a: a b c
   ", value: 0, type: 0, properties: ["
     a: a b c
   ": "literal-string"]}
 run/0: instruction foo/3
-run/0: trace-should-not-contain {name: "
+run/0: trace-should-not-contain/45 {name: "
     a: x y z
   ", value: 0, type: 0, properties: ["
     a: x y z
diff --git a/cpp/.traces/scenario_multiple_blocks b/cpp/.traces/scenario_multiple_blocks
index 12434407..e627fdb7 100644
--- a/cpp/.traces/scenario_multiple_blocks
+++ b/cpp/.traces/scenario_multiple_blocks
@@ -32,7 +32,7 @@ after-brace/0: memory-should-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: foo
 run/0: instruction foo/0
-run/0: run {name: "
+run/0: run/42 {name: "
     1:integer <- copy 13:literal
   ", value: 0, type: 0, properties: ["
     1:integer <- copy 13:literal
@@ -43,18 +43,18 @@ parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
 after-brace/0: recipe run1001
 after-brace/0: copy ...
 run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "13", value: 13, type: 0, properties: ["13": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "13", value: 13, type: 0, properties: ["13": "literal"]}
 run/0: ingredient 0 is 13
 mem/0: storing 13 in location 1
 run/0: instruction foo/1
-run/0: memory-should-contain {name: "
+run/0: memory-should-contain/43 {name: "
     1 <- 13
   ", value: 0, type: 0, properties: ["
     1 <- 13
   ": "literal-string"]}
 run/0: checking location 1
 run/0: instruction foo/2
-run/0: run {name: "
+run/0: run/42 {name: "
     2:integer <- copy 13:literal
   ", value: 0, type: 0, properties: ["
     2:integer <- copy 13:literal
@@ -65,11 +65,11 @@ parse/0:   product: {name: "2", value: 0, type: 1, properties: ["2": "integer"]}
 after-brace/0: recipe run1002
 after-brace/0: copy ...
 run/0: instruction run1002/0
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "13", value: 13, type: 0, properties: ["13": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "13", value: 13, type: 0, properties: ["13": "literal"]}
 run/0: ingredient 0 is 13
 mem/0: storing 13 in location 2
 run/0: instruction foo/3
-run/0: memory-should-contain {name: "
+run/0: memory-should-contain/43 {name: "
     1 <- 13
     2 <- 13
   ", value: 0, type: 0, properties: ["
diff --git a/cpp/.traces/scenario_with_comment_in_mu b/cpp/.traces/scenario_with_comment_in_mu
index f5d44965..57fe0aae 100644
--- a/cpp/.traces/scenario_with_comment_in_mu
+++ b/cpp/.traces/scenario_with_comment_in_mu
@@ -18,7 +18,7 @@ after-brace/0: memory-should-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: scenario_with_comment_in_mu
 run/0: instruction scenario_with_comment_in_mu/0
-run/0: run {name: "
+run/0: run/42 {name: "
     # comment
     1:integer <- add 2:literal, 2:literal
   ", value: 0, type: 0, properties: ["
@@ -32,13 +32,13 @@ parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
 after-brace/0: recipe run1001
 after-brace/0: add ...
 run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- add {name: "2", value: 2, type: 0, properties: ["2": "literal"]}, {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- add/2 {name: "2", value: 2, type: 0, properties: ["2": "literal"]}, {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
 run/0: ingredient 0 is 2
 run/0: ingredient 1 is 2
 run/0: product 0 is 4
 mem/0: storing 4 in location 1
 run/0: instruction scenario_with_comment_in_mu/1
-run/0: memory-should-contain {name: "
+run/0: memory-should-contain/43 {name: "
     1 <- 4
   ", value: 0, type: 0, properties: ["
     1 <- 4
diff --git a/cpp/.traces/scenario_with_multiple_comments_in_mu b/cpp/.traces/scenario_with_multiple_comments_in_mu
index e46f5b36..55079205 100644
--- a/cpp/.traces/scenario_with_multiple_comments_in_mu
+++ b/cpp/.traces/scenario_with_multiple_comments_in_mu
@@ -20,7 +20,7 @@ after-brace/0: memory-should-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: scenario_with_multiple_comments_in_mu
 run/0: instruction scenario_with_multiple_comments_in_mu/0
-run/0: run {name: "
+run/0: run/42 {name: "
     # comment1
     # comment2
     1:integer <- add 2:literal, 2:literal
@@ -36,13 +36,13 @@ parse/0:   product: {name: "1", value: 0, type: 1, properties: ["1": "integer"]}
 after-brace/0: recipe run1001
 after-brace/0: add ...
 run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- add {name: "2", value: 2, type: 0, properties: ["2": "literal"]}, {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- add/2 {name: "2", value: 2, type: 0, properties: ["2": "literal"]}, {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
 run/0: ingredient 0 is 2
 run/0: ingredient 1 is 2
 run/0: product 0 is 4
 mem/0: storing 4 in location 1
 run/0: instruction scenario_with_multiple_comments_in_mu/1
-run/0: memory-should-contain {name: "
+run/0: memory-should-contain/43 {name: "
     1 <- 4
   ", value: 0, type: 0, properties: ["
     1 <- 4
diff --git a/cpp/.traces/scheduler b/cpp/.traces/scheduler
index a2124020..ea78689e 100644
--- a/cpp/.traces/scheduler
+++ b/cpp/.traces/scheduler
@@ -14,15 +14,15 @@ after-brace/0: copy ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: f1
 run/0: instruction f1/0
-run/0: start-running {name: "f2", value: 0, type: 0, properties: ["f2": "recipe"]}
+run/0: start-running/33 {name: "f2", value: 0, type: 0, properties: ["f2": "recipe"]}
 run/0: ingredient 0 is f2
 new/0: routine allocated memory from 101000 to 201000
 run/0: instruction f1/1
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "3", value: 3, type: 0, properties: ["3": "literal"]}
 run/0: ingredient 0 is 3
 mem/0: storing 3 in location 1
 schedule/0: f2
 run/0: instruction f2/0
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "4", value: 4, type: 0, properties: ["4": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "4", value: 4, type: 0, properties: ["4": "literal"]}
 run/0: ingredient 0 is 4
 mem/0: storing 4 in location 2
diff --git a/cpp/.traces/scheduler_interleaves_routines b/cpp/.traces/scheduler_interleaves_routines
index 60b6cda4..152ef18f 100644
--- a/cpp/.traces/scheduler_interleaves_routines
+++ b/cpp/.traces/scheduler_interleaves_routines
@@ -22,27 +22,27 @@ after-brace/0: copy ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: f1
 run/0: instruction f1/0
-run/0: start-running {name: "f2", value: 0, type: 0, properties: ["f2": "recipe"]}
+run/0: start-running/33 {name: "f2", value: 0, type: 0, properties: ["f2": "recipe"]}
 run/0: ingredient 0 is f2
 new/0: routine allocated memory from 101000 to 201000
 schedule/0: f2
 run/0: instruction f2/0
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy {name: "4", value: 4, type: 0, properties: ["4": "literal"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy/1 {name: "4", value: 4, type: 0, properties: ["4": "literal"]}
 run/0: ingredient 0 is 4
 mem/0: storing 4 in location 3
 schedule/0: f1
 run/0: instruction f1/1
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 1
 schedule/0: f2
 run/0: instruction f2/1
-run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- copy {name: "4", value: 4, type: 0, properties: ["4": "literal"]}
+run/0: {name: "4", value: 4, type: 1, properties: ["4": "integer"]} <- copy/1 {name: "4", value: 4, type: 0, properties: ["4": "literal"]}
 run/0: ingredient 0 is 4
 mem/0: storing 4 in location 4
 schedule/0: f1
 run/0: instruction f1/2
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 2
 schedule/0: f2
diff --git a/cpp/.traces/scheduler_runs_single_routine b/cpp/.traces/scheduler_runs_single_routine
index 8f5d7102..2847f47c 100644
--- a/cpp/.traces/scheduler_runs_single_routine
+++ b/cpp/.traces/scheduler_runs_single_routine
@@ -10,12 +10,12 @@ after-brace/0: copy ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: f1
 run/0: instruction f1/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 1
 schedule/0: f1
 run/0: instruction f1/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 2
 schedule/0: f1
diff --git a/cpp/.traces/scheduler_skips_completed_routines b/cpp/.traces/scheduler_skips_completed_routines
index 9e609d02..b8ed33a9 100644
--- a/cpp/.traces/scheduler_skips_completed_routines
+++ b/cpp/.traces/scheduler_skips_completed_routines
@@ -18,11 +18,11 @@ after-brace/0: copy ...
 new/0: routine allocated memory from 201000 to 301000
 schedule/0: f3
 run/0: instruction f3/0
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 3
 schedule/0: f1
 run/0: instruction f1/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 1
diff --git a/cpp/.traces/scheduler_starts_at_middle_of_routines b/cpp/.traces/scheduler_starts_at_middle_of_routines
index 2c35f427..c51216fb 100644
--- a/cpp/.traces/scheduler_starts_at_middle_of_routines
+++ b/cpp/.traces/scheduler_starts_at_middle_of_routines
@@ -11,10 +11,10 @@ after-brace/0: copy ...
 new/0: routine allocated memory from 101000 to 201000
 schedule/0: f1
 run/0: instruction f1/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 1
 run/0: instruction f1/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 2
diff --git a/cpp/.traces/set_default_space b/cpp/.traces/set_default_space
index fbaa9aec..b26649b0 100644
--- a/cpp/.traces/set_default_space
+++ b/cpp/.traces/set_default_space
@@ -14,13 +14,13 @@ after-brace/0: copy ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "10", value: 10, type: 1, properties: ["10": "integer"]} <- copy {name: "5", value: 5, type: 0, properties: ["5": "literal"]}
+run/0: {name: "10", value: 10, type: 1, properties: ["10": "integer"]} <- copy/1 {name: "5", value: 5, type: 0, properties: ["5": "literal"]}
 run/0: ingredient 0 is 5
 mem/0: storing 5 in location 10
 run/0: instruction main/1
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- copy {name: "10", value: 10, type: 0, properties: ["10": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- copy/1 {name: "10", value: 10, type: 0, properties: ["10": "literal"]}
 run/0: ingredient 0 is 10
 run/0: instruction main/2
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "23", value: 23, type: 0, properties: ["23": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "23", value: 23, type: 0, properties: ["23": "literal"]}
 run/0: ingredient 0 is 23
 mem/0: storing 23 in location 12
diff --git a/cpp/.traces/store_indirect b/cpp/.traces/store_indirect
index 0bfc8cc6..7fec6492 100644
--- a/cpp/.traces/store_indirect
+++ b/cpp/.traces/store_indirect
@@ -10,11 +10,11 @@ after-brace/0: copy ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 2-1, properties: ["1": "address":"integer"]} <- copy {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
+run/0: {name: "1", value: 1, type: 2-1, properties: ["1": "address":"integer"]} <- copy/1 {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
 run/0: ingredient 0 is 2
 mem/0: storing 2 in location 1
 run/0: instruction main/1
-run/0: {name: "1", value: 1, type: 2-1, properties: ["1": "address":"integer", "deref": ]} <- copy {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "1", value: 1, type: 2-1, properties: ["1": "address":"integer", "deref": ]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 run/0: ingredient 0 is 34
 mem/0: location 1 is 2
 mem/0: storing 34 in location 2
diff --git a/cpp/.traces/string-append-1 b/cpp/.traces/string-append-1
index 85ebe32c..8b514403 100644
--- a/cpp/.traces/string-append-1
+++ b/cpp/.traces/string-append-1
@@ -22,7 +22,7 @@ after-brace/0: memory-should-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: string-append-1
 run/0: instruction string-append-1/0
-run/0: run {name: "
+run/0: run/42 {name: "
     1:address:array:character/raw <- new [hello,]
     2:address:array:character/raw <- new [ world!]
     3:address:array:character/raw <- string-append 1:address:array:character/raw, 2:address:array:character/raw
@@ -54,37 +54,37 @@ after-brace/0: new ...
 after-brace/0: string-append ...
 after-brace/0: copy ...
 run/0: instruction run1001/0
-run/0: {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]} <- new {name: "hello,", value: 0, type: 0, properties: ["hello,": "literal-string"]}
+run/0: {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]} <- new/41 {name: "hello,", value: 0, type: 0, properties: ["hello,": "literal-string"]}
 mem/0: storing 1000 in location 1
 run/0: instruction run1001/1
-run/0: {name: "2", value: 2, type: 2-5-4, properties: ["2": "address":"array":"character", "raw": ]} <- new {name: " world!", value: 0, type: 0, properties: [" world!": "literal-string"]}
+run/0: {name: "2", value: 2, type: 2-5-4, properties: ["2": "address":"array":"character", "raw": ]} <- new/41 {name: " world!", value: 0, type: 0, properties: [" world!": "literal-string"]}
 mem/0: storing 1007 in location 2
 run/0: instruction run1001/2
-run/0: {name: "3", value: 3, type: 2-5-4, properties: ["3": "address":"array":"character", "raw": ]} <- string-append {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]}, {name: "2", value: 2, type: 2-5-4, properties: ["2": "address":"array":"character", "raw": ]}
+run/0: {name: "3", value: 3, type: 2-5-4, properties: ["3": "address":"array":"character", "raw": ]} <- string-append/106 {name: "1", value: 1, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]}, {name: "2", value: 2, type: 2-5-4, properties: ["2": "address":"array":"character", "raw": ]}
 mem/0: location 1 is 1000
 mem/0: location 2 is 1007
 run/0: instruction string-append/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1015
 run/0: instruction string-append/1
-run/0: {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character"]} <- next-ingredient 
+run/0: {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character"]} <- next-ingredient/29 
 run/0: product 0 is 1000
 mem/0: storing 1000 in location 1017
 run/0: instruction string-append/2
-run/0: {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]} <- length {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
+run/0: {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]} <- length/27 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1017 is 1000
 mem/0: storing 6 in location 1018
 run/0: instruction string-append/3
-run/0: {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character"]} <- next-ingredient 
+run/0: {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character"]} <- next-ingredient/29 
 run/0: product 0 is 1007
 mem/0: storing 1007 in location 1019
 run/0: instruction string-append/4
-run/0: {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]} <- length {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
+run/0: {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]} <- length/27 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
 mem/0: location 1019 is 1007
 mem/0: storing 7 in location 1020
 run/0: instruction string-append/5
-run/0: {name: "result-len", value: 5, type: 1, properties: ["result-len": "integer"]} <- add {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
+run/0: {name: "result-len", value: 5, type: 1, properties: ["result-len": "integer"]} <- add/2 {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
 run/0: ingredient 0 is a-len
 mem/0: location 1018 is 6
 run/0: ingredient 1 is b-len
@@ -92,21 +92,21 @@ mem/0: location 1020 is 7
 run/0: product 0 is 13
 mem/0: storing 13 in location 1021
 run/0: instruction string-append/6
-run/0: {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character"]} <- new {name: "character", value: 4, type: 0, properties: ["character": "type"]}, {name: "result-len", value: 5, type: 1, properties: ["result-len": "integer"]}
+run/0: {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character"]} <- new/41 {name: "character", value: 4, type: 0, properties: ["character": "type"]}, {name: "result-len", value: 5, type: 1, properties: ["result-len": "integer"]}
 mem/0: location 1021 is 13
 mem/0: array size is 13
 mem/0: new alloc: 1046
 mem/0: storing 1046 in location 1022
 run/0: instruction string-append/7
-run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 1023
 run/0: instruction string-append/8
-run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 1024
 run/0: instruction string-append/10
-run/0: {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]} <- greater-or-equal {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
+run/0: {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 0
 run/0: ingredient 1 is a-len
@@ -114,12 +114,12 @@ mem/0: location 1018 is 6
 run/0: product 0 is 0
 mem/0: storing 0 in location 1025
 run/0: instruction string-append/11
-run/0: break-if {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1025 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction string-append/12
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character"]} <- index-address {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
+run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character"]} <- index-address/26 {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1022 is 1046
 run/0: ingredient 1 is {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
@@ -128,7 +128,7 @@ run/0: address to copy is 1047
 run/0: product 0 is 1047
 mem/0: storing 1047 in location 1026
 run/0: instruction string-append/13
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1017 is 1000
 run/0: ingredient 1 is {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
@@ -139,31 +139,31 @@ mem/0: location 1001 is 104
 run/0: product 0 is 104
 mem/0: storing 104 in location 1027
 run/0: instruction string-append/14
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy {name: "in", value: 11, type: 4, properties: ["in": "character"]}
+run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
 run/0: ingredient 0 is in
 mem/0: location 1027 is 104
 mem/0: location 1026 is 1047
 mem/0: storing 104 in location 1047
 run/0: instruction string-append/15
-run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 0
 run/0: ingredient 1 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1024
 run/0: instruction string-append/16
-run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- add {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-idx
 mem/0: location 1023 is 0
 run/0: ingredient 1 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1023
 run/0: instruction string-append/17
-run/0: loop {name: "", value: -8, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
 run/0: ingredient 0 is -8
 run/0: jumping to instruction 10
 run/0: instruction string-append/10
-run/0: {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]} <- greater-or-equal {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
+run/0: {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 1
 run/0: ingredient 1 is a-len
@@ -171,12 +171,12 @@ mem/0: location 1018 is 6
 run/0: product 0 is 0
 mem/0: storing 0 in location 1025
 run/0: instruction string-append/11
-run/0: break-if {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1025 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction string-append/12
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character"]} <- index-address {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
+run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character"]} <- index-address/26 {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1022 is 1046
 run/0: ingredient 1 is {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
@@ -185,7 +185,7 @@ run/0: address to copy is 1048
 run/0: product 0 is 1048
 mem/0: storing 1048 in location 1026
 run/0: instruction string-append/13
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1017 is 1000
 run/0: ingredient 1 is {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
@@ -196,31 +196,31 @@ mem/0: location 1002 is 101
 run/0: product 0 is 101
 mem/0: storing 101 in location 1027
 run/0: instruction string-append/14
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy {name: "in", value: 11, type: 4, properties: ["in": "character"]}
+run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
 run/0: ingredient 0 is in
 mem/0: location 1027 is 101
 mem/0: location 1026 is 1048
 mem/0: storing 101 in location 1048
 run/0: instruction string-append/15
-run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 1
 run/0: ingredient 1 is 1
 run/0: product 0 is 2
 mem/0: storing 2 in location 1024
 run/0: instruction string-append/16
-run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- add {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-idx
 mem/0: location 1023 is 1
 run/0: ingredient 1 is 1
 run/0: product 0 is 2
 mem/0: storing 2 in location 1023
 run/0: instruction string-append/17
-run/0: loop {name: "", value: -8, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
 run/0: ingredient 0 is -8
 run/0: jumping to instruction 10
 run/0: instruction string-append/10
-run/0: {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]} <- greater-or-equal {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
+run/0: {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 2
 run/0: ingredient 1 is a-len
@@ -228,12 +228,12 @@ mem/0: location 1018 is 6
 run/0: product 0 is 0
 mem/0: storing 0 in location 1025
 run/0: instruction string-append/11
-run/0: break-if {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1025 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction string-append/12
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character"]} <- index-address {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
+run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character"]} <- index-address/26 {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1022 is 1046
 run/0: ingredient 1 is {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
@@ -242,7 +242,7 @@ run/0: address to copy is 1049
 run/0: product 0 is 1049
 mem/0: storing 1049 in location 1026
 run/0: instruction string-append/13
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1017 is 1000
 run/0: ingredient 1 is {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
@@ -253,31 +253,31 @@ mem/0: location 1003 is 108
 run/0: product 0 is 108
 mem/0: storing 108 in location 1027
 run/0: instruction string-append/14
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy {name: "in", value: 11, type: 4, properties: ["in": "character"]}
+run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
 run/0: ingredient 0 is in
 mem/0: location 1027 is 108
 mem/0: location 1026 is 1049
 mem/0: storing 108 in location 1049
 run/0: instruction string-append/15
-run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 2
 run/0: ingredient 1 is 1
 run/0: product 0 is 3
 mem/0: storing 3 in location 1024
 run/0: instruction string-append/16
-run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- add {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-idx
 mem/0: location 1023 is 2
 run/0: ingredient 1 is 1
 run/0: product 0 is 3
 mem/0: storing 3 in location 1023
 run/0: instruction string-append/17
-run/0: loop {name: "", value: -8, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
 run/0: ingredient 0 is -8
 run/0: jumping to instruction 10
 run/0: instruction string-append/10
-run/0: {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]} <- greater-or-equal {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
+run/0: {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 3
 run/0: ingredient 1 is a-len
@@ -285,12 +285,12 @@ mem/0: location 1018 is 6
 run/0: product 0 is 0
 mem/0: storing 0 in location 1025
 run/0: instruction string-append/11
-run/0: break-if {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1025 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction string-append/12
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character"]} <- index-address {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
+run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character"]} <- index-address/26 {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1022 is 1046
 run/0: ingredient 1 is {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
@@ -299,7 +299,7 @@ run/0: address to copy is 1050
 run/0: product 0 is 1050
 mem/0: storing 1050 in location 1026
 run/0: instruction string-append/13
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1017 is 1000
 run/0: ingredient 1 is {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
@@ -310,31 +310,31 @@ mem/0: location 1004 is 108
 run/0: product 0 is 108
 mem/0: storing 108 in location 1027
 run/0: instruction string-append/14
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy {name: "in", value: 11, type: 4, properties: ["in": "character"]}
+run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
 run/0: ingredient 0 is in
 mem/0: location 1027 is 108
 mem/0: location 1026 is 1050
 mem/0: storing 108 in location 1050
 run/0: instruction string-append/15
-run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 3
 run/0: ingredient 1 is 1
 run/0: product 0 is 4
 mem/0: storing 4 in location 1024
 run/0: instruction string-append/16
-run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- add {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-idx
 mem/0: location 1023 is 3
 run/0: ingredient 1 is 1
 run/0: product 0 is 4
 mem/0: storing 4 in location 1023
 run/0: instruction string-append/17
-run/0: loop {name: "", value: -8, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
 run/0: ingredient 0 is -8
 run/0: jumping to instruction 10
 run/0: instruction string-append/10
-run/0: {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]} <- greater-or-equal {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
+run/0: {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 4
 run/0: ingredient 1 is a-len
@@ -342,12 +342,12 @@ mem/0: location 1018 is 6
 run/0: product 0 is 0
 mem/0: storing 0 in location 1025
 run/0: instruction string-append/11
-run/0: break-if {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1025 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction string-append/12
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character"]} <- index-address {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
+run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character"]} <- index-address/26 {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1022 is 1046
 run/0: ingredient 1 is {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
@@ -356,7 +356,7 @@ run/0: address to copy is 1051
 run/0: product 0 is 1051
 mem/0: storing 1051 in location 1026
 run/0: instruction string-append/13
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1017 is 1000
 run/0: ingredient 1 is {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
@@ -367,31 +367,31 @@ mem/0: location 1005 is 111
 run/0: product 0 is 111
 mem/0: storing 111 in location 1027
 run/0: instruction string-append/14
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy {name: "in", value: 11, type: 4, properties: ["in": "character"]}
+run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
 run/0: ingredient 0 is in
 mem/0: location 1027 is 111
 mem/0: location 1026 is 1051
 mem/0: storing 111 in location 1051
 run/0: instruction string-append/15
-run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 4
 run/0: ingredient 1 is 1
 run/0: product 0 is 5
 mem/0: storing 5 in location 1024
 run/0: instruction string-append/16
-run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- add {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-idx
 mem/0: location 1023 is 4
 run/0: ingredient 1 is 1
 run/0: product 0 is 5
 mem/0: storing 5 in location 1023
 run/0: instruction string-append/17
-run/0: loop {name: "", value: -8, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
 run/0: ingredient 0 is -8
 run/0: jumping to instruction 10
 run/0: instruction string-append/10
-run/0: {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]} <- greater-or-equal {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
+run/0: {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 5
 run/0: ingredient 1 is a-len
@@ -399,12 +399,12 @@ mem/0: location 1018 is 6
 run/0: product 0 is 0
 mem/0: storing 0 in location 1025
 run/0: instruction string-append/11
-run/0: break-if {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1025 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction string-append/12
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character"]} <- index-address {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
+run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character"]} <- index-address/26 {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1022 is 1046
 run/0: ingredient 1 is {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
@@ -413,7 +413,7 @@ run/0: address to copy is 1052
 run/0: product 0 is 1052
 mem/0: storing 1052 in location 1026
 run/0: instruction string-append/13
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1017 is 1000
 run/0: ingredient 1 is {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
@@ -424,31 +424,31 @@ mem/0: location 1006 is 44
 run/0: product 0 is 44
 mem/0: storing 44 in location 1027
 run/0: instruction string-append/14
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy {name: "in", value: 11, type: 4, properties: ["in": "character"]}
+run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
 run/0: ingredient 0 is in
 mem/0: location 1027 is 44
 mem/0: location 1026 is 1052
 mem/0: storing 44 in location 1052
 run/0: instruction string-append/15
-run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 5
 run/0: ingredient 1 is 1
 run/0: product 0 is 6
 mem/0: storing 6 in location 1024
 run/0: instruction string-append/16
-run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- add {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-idx
 mem/0: location 1023 is 5
 run/0: ingredient 1 is 1
 run/0: product 0 is 6
 mem/0: storing 6 in location 1023
 run/0: instruction string-append/17
-run/0: loop {name: "", value: -8, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
 run/0: ingredient 0 is -8
 run/0: jumping to instruction 10
 run/0: instruction string-append/10
-run/0: {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]} <- greater-or-equal {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
+run/0: {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 6
 run/0: ingredient 1 is a-len
@@ -456,17 +456,17 @@ mem/0: location 1018 is 6
 run/0: product 0 is 1
 mem/0: storing 1 in location 1025
 run/0: instruction string-append/11
-run/0: break-if {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "a-done?", value: 9, type: 3, properties: ["a-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1025 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
 run/0: jumping to instruction 18
 run/0: instruction string-append/19
-run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 1024
 run/0: instruction string-append/21
-run/0: {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]} <- greater-or-equal {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
+run/0: {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 0
 run/0: ingredient 1 is b-len
@@ -474,12 +474,12 @@ mem/0: location 1020 is 7
 run/0: product 0 is 0
 mem/0: storing 0 in location 1028
 run/0: instruction string-append/22
-run/0: break-if {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1028 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction string-append/23
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character"]} <- index-address {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
+run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character"]} <- index-address/26 {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1022 is 1046
 run/0: ingredient 1 is {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
@@ -488,7 +488,7 @@ run/0: address to copy is 1053
 run/0: product 0 is 1053
 mem/0: storing 1053 in location 1026
 run/0: instruction string-append/24
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
 mem/0: location 1019 is 1007
 run/0: ingredient 1 is {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
@@ -499,31 +499,31 @@ mem/0: location 1008 is 32
 run/0: product 0 is 32
 mem/0: storing 32 in location 1027
 run/0: instruction string-append/25
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy {name: "in", value: 11, type: 4, properties: ["in": "character"]}
+run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
 run/0: ingredient 0 is in
 mem/0: location 1027 is 32
 mem/0: location 1026 is 1053
 mem/0: storing 32 in location 1053
 run/0: instruction string-append/26
-run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 0
 run/0: ingredient 1 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1024
 run/0: instruction string-append/27
-run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- add {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-idx
 mem/0: location 1023 is 6
 run/0: ingredient 1 is 1
 run/0: product 0 is 7
 mem/0: storing 7 in location 1023
 run/0: instruction string-append/28
-run/0: loop {name: "", value: -8, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
 run/0: ingredient 0 is -8
 run/0: jumping to instruction 21
 run/0: instruction string-append/21
-run/0: {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]} <- greater-or-equal {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
+run/0: {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 1
 run/0: ingredient 1 is b-len
@@ -531,12 +531,12 @@ mem/0: location 1020 is 7
 run/0: product 0 is 0
 mem/0: storing 0 in location 1028
 run/0: instruction string-append/22
-run/0: break-if {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1028 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction string-append/23
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character"]} <- index-address {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
+run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character"]} <- index-address/26 {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1022 is 1046
 run/0: ingredient 1 is {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
@@ -545,7 +545,7 @@ run/0: address to copy is 1054
 run/0: product 0 is 1054
 mem/0: storing 1054 in location 1026
 run/0: instruction string-append/24
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
 mem/0: location 1019 is 1007
 run/0: ingredient 1 is {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
@@ -556,31 +556,31 @@ mem/0: location 1009 is 119
 run/0: product 0 is 119
 mem/0: storing 119 in location 1027
 run/0: instruction string-append/25
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy {name: "in", value: 11, type: 4, properties: ["in": "character"]}
+run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
 run/0: ingredient 0 is in
 mem/0: location 1027 is 119
 mem/0: location 1026 is 1054
 mem/0: storing 119 in location 1054
 run/0: instruction string-append/26
-run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 1
 run/0: ingredient 1 is 1
 run/0: product 0 is 2
 mem/0: storing 2 in location 1024
 run/0: instruction string-append/27
-run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- add {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-idx
 mem/0: location 1023 is 7
 run/0: ingredient 1 is 1
 run/0: product 0 is 8
 mem/0: storing 8 in location 1023
 run/0: instruction string-append/28
-run/0: loop {name: "", value: -8, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
 run/0: ingredient 0 is -8
 run/0: jumping to instruction 21
 run/0: instruction string-append/21
-run/0: {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]} <- greater-or-equal {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
+run/0: {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 2
 run/0: ingredient 1 is b-len
@@ -588,12 +588,12 @@ mem/0: location 1020 is 7
 run/0: product 0 is 0
 mem/0: storing 0 in location 1028
 run/0: instruction string-append/22
-run/0: break-if {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1028 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction string-append/23
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character"]} <- index-address {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
+run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character"]} <- index-address/26 {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1022 is 1046
 run/0: ingredient 1 is {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
@@ -602,7 +602,7 @@ run/0: address to copy is 1055
 run/0: product 0 is 1055
 mem/0: storing 1055 in location 1026
 run/0: instruction string-append/24
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
 mem/0: location 1019 is 1007
 run/0: ingredient 1 is {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
@@ -613,31 +613,31 @@ mem/0: location 1010 is 111
 run/0: product 0 is 111
 mem/0: storing 111 in location 1027
 run/0: instruction string-append/25
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy {name: "in", value: 11, type: 4, properties: ["in": "character"]}
+run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
 run/0: ingredient 0 is in
 mem/0: location 1027 is 111
 mem/0: location 1026 is 1055
 mem/0: storing 111 in location 1055
 run/0: instruction string-append/26
-run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 2
 run/0: ingredient 1 is 1
 run/0: product 0 is 3
 mem/0: storing 3 in location 1024
 run/0: instruction string-append/27
-run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- add {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-idx
 mem/0: location 1023 is 8
 run/0: ingredient 1 is 1
 run/0: product 0 is 9
 mem/0: storing 9 in location 1023
 run/0: instruction string-append/28
-run/0: loop {name: "", value: -8, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
 run/0: ingredient 0 is -8
 run/0: jumping to instruction 21
 run/0: instruction string-append/21
-run/0: {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]} <- greater-or-equal {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
+run/0: {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 3
 run/0: ingredient 1 is b-len
@@ -645,12 +645,12 @@ mem/0: location 1020 is 7
 run/0: product 0 is 0
 mem/0: storing 0 in location 1028
 run/0: instruction string-append/22
-run/0: break-if {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1028 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction string-append/23
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character"]} <- index-address {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
+run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character"]} <- index-address/26 {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1022 is 1046
 run/0: ingredient 1 is {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
@@ -659,7 +659,7 @@ run/0: address to copy is 1056
 run/0: product 0 is 1056
 mem/0: storing 1056 in location 1026
 run/0: instruction string-append/24
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
 mem/0: location 1019 is 1007
 run/0: ingredient 1 is {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
@@ -670,31 +670,31 @@ mem/0: location 1011 is 114
 run/0: product 0 is 114
 mem/0: storing 114 in location 1027
 run/0: instruction string-append/25
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy {name: "in", value: 11, type: 4, properties: ["in": "character"]}
+run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
 run/0: ingredient 0 is in
 mem/0: location 1027 is 114
 mem/0: location 1026 is 1056
 mem/0: storing 114 in location 1056
 run/0: instruction string-append/26
-run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 3
 run/0: ingredient 1 is 1
 run/0: product 0 is 4
 mem/0: storing 4 in location 1024
 run/0: instruction string-append/27
-run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- add {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-idx
 mem/0: location 1023 is 9
 run/0: ingredient 1 is 1
 run/0: product 0 is 10
 mem/0: storing 10 in location 1023
 run/0: instruction string-append/28
-run/0: loop {name: "", value: -8, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
 run/0: ingredient 0 is -8
 run/0: jumping to instruction 21
 run/0: instruction string-append/21
-run/0: {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]} <- greater-or-equal {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
+run/0: {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 4
 run/0: ingredient 1 is b-len
@@ -702,12 +702,12 @@ mem/0: location 1020 is 7
 run/0: product 0 is 0
 mem/0: storing 0 in location 1028
 run/0: instruction string-append/22
-run/0: break-if {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1028 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction string-append/23
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character"]} <- index-address {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
+run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character"]} <- index-address/26 {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1022 is 1046
 run/0: ingredient 1 is {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
@@ -716,7 +716,7 @@ run/0: address to copy is 1057
 run/0: product 0 is 1057
 mem/0: storing 1057 in location 1026
 run/0: instruction string-append/24
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
 mem/0: location 1019 is 1007
 run/0: ingredient 1 is {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
@@ -727,31 +727,31 @@ mem/0: location 1012 is 108
 run/0: product 0 is 108
 mem/0: storing 108 in location 1027
 run/0: instruction string-append/25
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy {name: "in", value: 11, type: 4, properties: ["in": "character"]}
+run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
 run/0: ingredient 0 is in
 mem/0: location 1027 is 108
 mem/0: location 1026 is 1057
 mem/0: storing 108 in location 1057
 run/0: instruction string-append/26
-run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 4
 run/0: ingredient 1 is 1
 run/0: product 0 is 5
 mem/0: storing 5 in location 1024
 run/0: instruction string-append/27
-run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- add {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-idx
 mem/0: location 1023 is 10
 run/0: ingredient 1 is 1
 run/0: product 0 is 11
 mem/0: storing 11 in location 1023
 run/0: instruction string-append/28
-run/0: loop {name: "", value: -8, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
 run/0: ingredient 0 is -8
 run/0: jumping to instruction 21
 run/0: instruction string-append/21
-run/0: {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]} <- greater-or-equal {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
+run/0: {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 5
 run/0: ingredient 1 is b-len
@@ -759,12 +759,12 @@ mem/0: location 1020 is 7
 run/0: product 0 is 0
 mem/0: storing 0 in location 1028
 run/0: instruction string-append/22
-run/0: break-if {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1028 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction string-append/23
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character"]} <- index-address {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
+run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character"]} <- index-address/26 {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1022 is 1046
 run/0: ingredient 1 is {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
@@ -773,7 +773,7 @@ run/0: address to copy is 1058
 run/0: product 0 is 1058
 mem/0: storing 1058 in location 1026
 run/0: instruction string-append/24
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
 mem/0: location 1019 is 1007
 run/0: ingredient 1 is {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
@@ -784,31 +784,31 @@ mem/0: location 1013 is 100
 run/0: product 0 is 100
 mem/0: storing 100 in location 1027
 run/0: instruction string-append/25
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy {name: "in", value: 11, type: 4, properties: ["in": "character"]}
+run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
 run/0: ingredient 0 is in
 mem/0: location 1027 is 100
 mem/0: location 1026 is 1058
 mem/0: storing 100 in location 1058
 run/0: instruction string-append/26
-run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 5
 run/0: ingredient 1 is 1
 run/0: product 0 is 6
 mem/0: storing 6 in location 1024
 run/0: instruction string-append/27
-run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- add {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-idx
 mem/0: location 1023 is 11
 run/0: ingredient 1 is 1
 run/0: product 0 is 12
 mem/0: storing 12 in location 1023
 run/0: instruction string-append/28
-run/0: loop {name: "", value: -8, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
 run/0: ingredient 0 is -8
 run/0: jumping to instruction 21
 run/0: instruction string-append/21
-run/0: {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]} <- greater-or-equal {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
+run/0: {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 6
 run/0: ingredient 1 is b-len
@@ -816,12 +816,12 @@ mem/0: location 1020 is 7
 run/0: product 0 is 0
 mem/0: storing 0 in location 1028
 run/0: instruction string-append/22
-run/0: break-if {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1028 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction string-append/23
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character"]} <- index-address {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
+run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character"]} <- index-address/26 {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character", "deref": ]}, {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
 run/0: ingredient 0 is result
 mem/0: location 1022 is 1046
 run/0: ingredient 1 is {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}
@@ -830,7 +830,7 @@ run/0: address to copy is 1059
 run/0: product 0 is 1059
 mem/0: storing 1059 in location 1026
 run/0: instruction string-append/24
-run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
+run/0: {name: "in", value: 11, type: 4, properties: ["in": "character"]} <- index/25 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
 mem/0: location 1019 is 1007
 run/0: ingredient 1 is {name: "i", value: 8, type: 1, properties: ["i": "integer"]}
@@ -841,31 +841,31 @@ mem/0: location 1014 is 33
 run/0: product 0 is 33
 mem/0: storing 33 in location 1027
 run/0: instruction string-append/25
-run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy {name: "in", value: 11, type: 4, properties: ["in": "character"]}
+run/0: {name: "out", value: 10, type: 2-4, properties: ["out": "address":"character", "deref": ]} <- copy/1 {name: "in", value: 11, type: 4, properties: ["in": "character"]}
 run/0: ingredient 0 is in
 mem/0: location 1027 is 33
 mem/0: location 1026 is 1059
 mem/0: storing 33 in location 1059
 run/0: instruction string-append/26
-run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 8, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 6
 run/0: ingredient 1 is 1
 run/0: product 0 is 7
 mem/0: storing 7 in location 1024
 run/0: instruction string-append/27
-run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- add {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]} <- add/2 {name: "result-idx", value: 7, type: 1, properties: ["result-idx": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is result-idx
 mem/0: location 1023 is 12
 run/0: ingredient 1 is 1
 run/0: product 0 is 13
 mem/0: storing 13 in location 1023
 run/0: instruction string-append/28
-run/0: loop {name: "", value: -8, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -8, type: , properties: ["": ]}
 run/0: ingredient 0 is -8
 run/0: jumping to instruction 21
 run/0: instruction string-append/21
-run/0: {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]} <- greater-or-equal {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
+run/0: {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 8, type: 1, properties: ["i": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1024 is 7
 run/0: ingredient 1 is b-len
@@ -873,18 +873,18 @@ mem/0: location 1020 is 7
 run/0: product 0 is 1
 mem/0: storing 1 in location 1028
 run/0: instruction string-append/22
-run/0: break-if {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
+run/0: break-if/11 {name: "b-done?", value: 12, type: 3, properties: ["b-done?": "boolean"]}, {name: "", value: 6, type: , properties: ["": ]}
 mem/0: location 1028 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
 run/0: jumping to instruction 29
 run/0: instruction string-append/30
-run/0: reply {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character"]}
+run/0: reply/32 {name: "result", value: 6, type: 2-5-4, properties: ["result": "address":"array":"character"]}
 mem/0: location 1022 is 1046
 run/0: result 0 is 1046
 mem/0: storing 1046 in location 3
 run/0: instruction run1001/3
-run/0: {name: "4", value: 4, type: 5-4, properties: ["4": "array":"character", "raw": ]} <- copy {name: "3", value: 3, type: 2-5-4, properties: ["3": "address":"array":"character", "raw": , "deref": ]}
+run/0: {name: "4", value: 4, type: 5-4, properties: ["4": "array":"character", "raw": ]} <- copy/1 {name: "3", value: 3, type: 2-5-4, properties: ["3": "address":"array":"character", "raw": , "deref": ]}
 run/0: ingredient 0 is 3
 mem/0: location 3 is 1046
 mem/0: location 1046 is 13
@@ -916,7 +916,7 @@ mem/0: storing 108 in location 15
 mem/0: storing 100 in location 16
 mem/0: storing 33 in location 17
 run/0: instruction string-append-1/1
-run/0: memory-should-contain {name: "
+run/0: memory-should-contain/43 {name: "
     4:string <- [hello, world!]
   ", value: 0, type: 0, properties: ["
     4:string <- [hello, world!]
diff --git a/cpp/.traces/string-equal-common-lengths-but-distinct b/cpp/.traces/string-equal-common-lengths-but-distinct
index d68b3984..de6e94aa 100644
--- a/cpp/.traces/string-equal-common-lengths-but-distinct
+++ b/cpp/.traces/string-equal-common-lengths-but-distinct
@@ -22,7 +22,7 @@ after-brace/0: memory-should-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: string-equal-common-lengths-but-distinct
 run/0: instruction string-equal-common-lengths-but-distinct/0
-run/0: run {name: "
+run/0: run/42 {name: "
     default-space:address:array:location <- new location:type, 30:literal
     x:address:array:character <- new [abc]
     y:address:array:character <- new [abd]
@@ -58,44 +58,44 @@ after-brace/0: new ...
 after-brace/0: new ...
 after-brace/0: string-equal ...
 run/0: instruction run1001/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1000
 run/0: instruction run1001/1
-run/0: {name: "x", value: 1, type: 2-5-4, properties: ["x": "address":"array":"character"]} <- new {name: "abc", value: 0, type: 0, properties: ["abc": "literal-string"]}
+run/0: {name: "x", value: 1, type: 2-5-4, properties: ["x": "address":"array":"character"]} <- new/41 {name: "abc", value: 0, type: 0, properties: ["abc": "literal-string"]}
 mem/0: storing 1031 in location 1002
 run/0: instruction run1001/2
-run/0: {name: "y", value: 2, type: 2-5-4, properties: ["y": "address":"array":"character"]} <- new {name: "abd", value: 0, type: 0, properties: ["abd": "literal-string"]}
+run/0: {name: "y", value: 2, type: 2-5-4, properties: ["y": "address":"array":"character"]} <- new/41 {name: "abd", value: 0, type: 0, properties: ["abd": "literal-string"]}
 mem/0: storing 1035 in location 1003
 run/0: instruction run1001/3
-run/0: {name: "3", value: 3, type: 3, properties: ["3": "boolean", "raw": ]} <- string-equal {name: "x", value: 1, type: 2-5-4, properties: ["x": "address":"array":"character"]}, {name: "y", value: 2, type: 2-5-4, properties: ["y": "address":"array":"character"]}
+run/0: {name: "3", value: 3, type: 3, properties: ["3": "boolean", "raw": ]} <- string-equal/100 {name: "x", value: 1, type: 2-5-4, properties: ["x": "address":"array":"character"]}, {name: "y", value: 2, type: 2-5-4, properties: ["y": "address":"array":"character"]}
 mem/0: location 1002 is 1031
 mem/0: location 1003 is 1035
 run/0: instruction string-equal/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1039
 run/0: instruction string-equal/1
-run/0: {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character"]} <- next-ingredient 
+run/0: {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1041
 run/0: instruction string-equal/2
-run/0: {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]} <- length {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
+run/0: {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]} <- length/27 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1041 is 1031
 mem/0: storing 3 in location 1042
 run/0: instruction string-equal/3
-run/0: {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character"]} <- next-ingredient 
+run/0: {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character"]} <- next-ingredient/29 
 run/0: product 0 is 1035
 mem/0: storing 1035 in location 1043
 run/0: instruction string-equal/4
-run/0: {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]} <- length {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
+run/0: {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]} <- length/27 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
 mem/0: location 1043 is 1035
 mem/0: storing 3 in location 1044
 run/0: instruction string-equal/6
-run/0: trace {name: "string-equal", value: 0, type: 0, properties: ["string-equal": "literal-string"]}, {name: "comparing lengths", value: 0, type: 0, properties: ["comparing lengths": "literal-string"]}
+run/0: trace/18 {name: "string-equal", value: 0, type: 0, properties: ["string-equal": "literal-string"]}, {name: "comparing lengths", value: 0, type: 0, properties: ["comparing lengths": "literal-string"]}
 string-equal/0: comparing lengths
 run/0: instruction string-equal/7
-run/0: {name: "length-equal?", value: 5, type: 3, properties: ["length-equal?": "boolean"]} <- equal {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
+run/0: {name: "length-equal?", value: 5, type: 3, properties: ["length-equal?": "boolean"]} <- equal/13 {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
 run/0: ingredient 0 is a-len
 mem/0: location 1042 is 3
 run/0: ingredient 1 is b-len
@@ -103,20 +103,20 @@ mem/0: location 1044 is 3
 run/0: product 0 is 1
 mem/0: storing 1 in location 1045
 run/0: instruction string-equal/8
-run/0: break-if {name: "length-equal?", value: 5, type: 3, properties: ["length-equal?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-if/11 {name: "length-equal?", value: 5, type: 3, properties: ["length-equal?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1045 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
 run/0: jumping to instruction 10
 run/0: instruction string-equal/11
-run/0: trace {name: "string-equal", value: 0, type: 0, properties: ["string-equal": "literal-string"]}, {name: "comparing characters", value: 0, type: 0, properties: ["comparing characters": "literal-string"]}
+run/0: trace/18 {name: "string-equal", value: 0, type: 0, properties: ["string-equal": "literal-string"]}, {name: "comparing characters", value: 0, type: 0, properties: ["comparing characters": "literal-string"]}
 string-equal/0: comparing characters
 run/0: instruction string-equal/12
-run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 1046
 run/0: instruction string-equal/14
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
+run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1046 is 0
 run/0: ingredient 1 is a-len
@@ -124,12 +124,12 @@ mem/0: location 1042 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1047
 run/0: instruction string-equal/15
-run/0: break-if {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 9, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 9, type: , properties: ["": ]}
 mem/0: location 1047 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction string-equal/16
-run/0: {name: "a2", value: 8, type: 4, properties: ["a2": "character"]} <- index {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
+run/0: {name: "a2", value: 8, type: 4, properties: ["a2": "character"]} <- index/25 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1041 is 1031
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
@@ -140,7 +140,7 @@ mem/0: location 1032 is 97
 run/0: product 0 is 97
 mem/0: storing 97 in location 1048
 run/0: instruction string-equal/17
-run/0: {name: "b2", value: 9, type: 4, properties: ["b2": "character"]} <- index {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
+run/0: {name: "b2", value: 9, type: 4, properties: ["b2": "character"]} <- index/25 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
 mem/0: location 1043 is 1035
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
@@ -151,7 +151,7 @@ mem/0: location 1036 is 97
 run/0: product 0 is 97
 mem/0: storing 97 in location 1049
 run/0: instruction string-equal/19
-run/0: {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]} <- equal {name: "a2", value: 8, type: 4, properties: ["a2": "character"]}, {name: "b2", value: 9, type: 4, properties: ["b2": "character"]}
+run/0: {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]} <- equal/13 {name: "a2", value: 8, type: 4, properties: ["a2": "character"]}, {name: "b2", value: 9, type: 4, properties: ["b2": "character"]}
 run/0: ingredient 0 is a2
 mem/0: location 1048 is 97
 run/0: ingredient 1 is b2
@@ -159,24 +159,24 @@ mem/0: location 1049 is 97
 run/0: product 0 is 1
 mem/0: storing 1 in location 1050
 run/0: instruction string-equal/20
-run/0: break-if {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-if/11 {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1050 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
 run/0: jumping to instruction 22
 run/0: instruction string-equal/23
-run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1046 is 0
 run/0: ingredient 1 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1046
 run/0: instruction string-equal/24
-run/0: loop {name: "", value: -11, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -11, type: , properties: ["": ]}
 run/0: ingredient 0 is -11
 run/0: jumping to instruction 14
 run/0: instruction string-equal/14
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
+run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1046 is 1
 run/0: ingredient 1 is a-len
@@ -184,12 +184,12 @@ mem/0: location 1042 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1047
 run/0: instruction string-equal/15
-run/0: break-if {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 9, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 9, type: , properties: ["": ]}
 mem/0: location 1047 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction string-equal/16
-run/0: {name: "a2", value: 8, type: 4, properties: ["a2": "character"]} <- index {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
+run/0: {name: "a2", value: 8, type: 4, properties: ["a2": "character"]} <- index/25 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1041 is 1031
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
@@ -200,7 +200,7 @@ mem/0: location 1033 is 98
 run/0: product 0 is 98
 mem/0: storing 98 in location 1048
 run/0: instruction string-equal/17
-run/0: {name: "b2", value: 9, type: 4, properties: ["b2": "character"]} <- index {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
+run/0: {name: "b2", value: 9, type: 4, properties: ["b2": "character"]} <- index/25 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
 mem/0: location 1043 is 1035
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
@@ -211,7 +211,7 @@ mem/0: location 1037 is 98
 run/0: product 0 is 98
 mem/0: storing 98 in location 1049
 run/0: instruction string-equal/19
-run/0: {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]} <- equal {name: "a2", value: 8, type: 4, properties: ["a2": "character"]}, {name: "b2", value: 9, type: 4, properties: ["b2": "character"]}
+run/0: {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]} <- equal/13 {name: "a2", value: 8, type: 4, properties: ["a2": "character"]}, {name: "b2", value: 9, type: 4, properties: ["b2": "character"]}
 run/0: ingredient 0 is a2
 mem/0: location 1048 is 98
 run/0: ingredient 1 is b2
@@ -219,24 +219,24 @@ mem/0: location 1049 is 98
 run/0: product 0 is 1
 mem/0: storing 1 in location 1050
 run/0: instruction string-equal/20
-run/0: break-if {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-if/11 {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1050 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
 run/0: jumping to instruction 22
 run/0: instruction string-equal/23
-run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1046 is 1
 run/0: ingredient 1 is 1
 run/0: product 0 is 2
 mem/0: storing 2 in location 1046
 run/0: instruction string-equal/24
-run/0: loop {name: "", value: -11, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -11, type: , properties: ["": ]}
 run/0: ingredient 0 is -11
 run/0: jumping to instruction 14
 run/0: instruction string-equal/14
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
+run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1046 is 2
 run/0: ingredient 1 is a-len
@@ -244,12 +244,12 @@ mem/0: location 1042 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1047
 run/0: instruction string-equal/15
-run/0: break-if {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 9, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 9, type: , properties: ["": ]}
 mem/0: location 1047 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction string-equal/16
-run/0: {name: "a2", value: 8, type: 4, properties: ["a2": "character"]} <- index {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
+run/0: {name: "a2", value: 8, type: 4, properties: ["a2": "character"]} <- index/25 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1041 is 1031
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
@@ -260,7 +260,7 @@ mem/0: location 1034 is 99
 run/0: product 0 is 99
 mem/0: storing 99 in location 1048
 run/0: instruction string-equal/17
-run/0: {name: "b2", value: 9, type: 4, properties: ["b2": "character"]} <- index {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
+run/0: {name: "b2", value: 9, type: 4, properties: ["b2": "character"]} <- index/25 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
 mem/0: location 1043 is 1035
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
@@ -271,7 +271,7 @@ mem/0: location 1038 is 100
 run/0: product 0 is 100
 mem/0: storing 100 in location 1049
 run/0: instruction string-equal/19
-run/0: {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]} <- equal {name: "a2", value: 8, type: 4, properties: ["a2": "character"]}, {name: "b2", value: 9, type: 4, properties: ["b2": "character"]}
+run/0: {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]} <- equal/13 {name: "a2", value: 8, type: 4, properties: ["a2": "character"]}, {name: "b2", value: 9, type: 4, properties: ["b2": "character"]}
 run/0: ingredient 0 is a2
 mem/0: location 1048 is 99
 run/0: ingredient 1 is b2
@@ -279,16 +279,16 @@ mem/0: location 1049 is 100
 run/0: product 0 is 0
 mem/0: storing 0 in location 1050
 run/0: instruction string-equal/20
-run/0: break-if {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-if/11 {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1050 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction string-equal/21
-run/0: reply {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: reply/32 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: result 0 is 0
 mem/0: storing 0 in location 3
 run/0: instruction string-equal-common-lengths-but-distinct/1
-run/0: memory-should-contain {name: "
+run/0: memory-should-contain/43 {name: "
     3 <- 0  # abc != abd
   ", value: 0, type: 0, properties: ["
     3 <- 0  # abc != abd
diff --git a/cpp/.traces/string-equal-distinct-lengths b/cpp/.traces/string-equal-distinct-lengths
index 510c4252..72b419f9 100644
--- a/cpp/.traces/string-equal-distinct-lengths
+++ b/cpp/.traces/string-equal-distinct-lengths
@@ -36,7 +36,7 @@ after-brace/0: trace-should-not-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: string-equal-distinct-lengths
 run/0: instruction string-equal-distinct-lengths/0
-run/0: run {name: "
+run/0: run/42 {name: "
     default-space:address:array:location <- new location:type, 30:literal
     x:address:array:character <- new [abc]
     y:address:array:character <- new [abcd]
@@ -72,44 +72,44 @@ after-brace/0: new ...
 after-brace/0: new ...
 after-brace/0: string-equal ...
 run/0: instruction run1001/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1000
 run/0: instruction run1001/1
-run/0: {name: "x", value: 1, type: 2-5-4, properties: ["x": "address":"array":"character"]} <- new {name: "abc", value: 0, type: 0, properties: ["abc": "literal-string"]}
+run/0: {name: "x", value: 1, type: 2-5-4, properties: ["x": "address":"array":"character"]} <- new/41 {name: "abc", value: 0, type: 0, properties: ["abc": "literal-string"]}
 mem/0: storing 1031 in location 1002
 run/0: instruction run1001/2
-run/0: {name: "y", value: 2, type: 2-5-4, properties: ["y": "address":"array":"character"]} <- new {name: "abcd", value: 0, type: 0, properties: ["abcd": "literal-string"]}
+run/0: {name: "y", value: 2, type: 2-5-4, properties: ["y": "address":"array":"character"]} <- new/41 {name: "abcd", value: 0, type: 0, properties: ["abcd": "literal-string"]}
 mem/0: storing 1035 in location 1003
 run/0: instruction run1001/3
-run/0: {name: "3", value: 3, type: 3, properties: ["3": "boolean", "raw": ]} <- string-equal {name: "x", value: 1, type: 2-5-4, properties: ["x": "address":"array":"character"]}, {name: "y", value: 2, type: 2-5-4, properties: ["y": "address":"array":"character"]}
+run/0: {name: "3", value: 3, type: 3, properties: ["3": "boolean", "raw": ]} <- string-equal/100 {name: "x", value: 1, type: 2-5-4, properties: ["x": "address":"array":"character"]}, {name: "y", value: 2, type: 2-5-4, properties: ["y": "address":"array":"character"]}
 mem/0: location 1002 is 1031
 mem/0: location 1003 is 1035
 run/0: instruction string-equal/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1040
 run/0: instruction string-equal/1
-run/0: {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character"]} <- next-ingredient 
+run/0: {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1042
 run/0: instruction string-equal/2
-run/0: {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]} <- length {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
+run/0: {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]} <- length/27 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1042 is 1031
 mem/0: storing 3 in location 1043
 run/0: instruction string-equal/3
-run/0: {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character"]} <- next-ingredient 
+run/0: {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character"]} <- next-ingredient/29 
 run/0: product 0 is 1035
 mem/0: storing 1035 in location 1044
 run/0: instruction string-equal/4
-run/0: {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]} <- length {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
+run/0: {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]} <- length/27 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
 mem/0: location 1044 is 1035
 mem/0: storing 4 in location 1045
 run/0: instruction string-equal/6
-run/0: trace {name: "string-equal", value: 0, type: 0, properties: ["string-equal": "literal-string"]}, {name: "comparing lengths", value: 0, type: 0, properties: ["comparing lengths": "literal-string"]}
+run/0: trace/18 {name: "string-equal", value: 0, type: 0, properties: ["string-equal": "literal-string"]}, {name: "comparing lengths", value: 0, type: 0, properties: ["comparing lengths": "literal-string"]}
 string-equal/0: comparing lengths
 run/0: instruction string-equal/7
-run/0: {name: "length-equal?", value: 5, type: 3, properties: ["length-equal?": "boolean"]} <- equal {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
+run/0: {name: "length-equal?", value: 5, type: 3, properties: ["length-equal?": "boolean"]} <- equal/13 {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
 run/0: ingredient 0 is a-len
 mem/0: location 1043 is 3
 run/0: ingredient 1 is b-len
@@ -117,29 +117,29 @@ mem/0: location 1045 is 4
 run/0: product 0 is 0
 mem/0: storing 0 in location 1046
 run/0: instruction string-equal/8
-run/0: break-if {name: "length-equal?", value: 5, type: 3, properties: ["length-equal?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-if/11 {name: "length-equal?", value: 5, type: 3, properties: ["length-equal?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1046 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction string-equal/9
-run/0: reply {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: reply/32 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: result 0 is 0
 mem/0: storing 0 in location 3
 run/0: instruction string-equal-distinct-lengths/1
-run/0: memory-should-contain {name: "
+run/0: memory-should-contain/43 {name: "
     3 <- 0  # abc != abcd
   ", value: 0, type: 0, properties: ["
     3 <- 0  # abc != abcd
   ": "literal-string"]}
 run/0: checking location 3
 run/0: instruction string-equal-distinct-lengths/2
-run/0: trace-should-contain {name: "
+run/0: trace-should-contain/44 {name: "
     string-equal: comparing lengths
   ", value: 0, type: 0, properties: ["
     string-equal: comparing lengths
   ": "literal-string"]}
 run/0: instruction string-equal-distinct-lengths/3
-run/0: trace-should-not-contain {name: "
+run/0: trace-should-not-contain/45 {name: "
     string-equal: comparing characters
   ", value: 0, type: 0, properties: ["
     string-equal: comparing characters
diff --git a/cpp/.traces/string-equal-identical b/cpp/.traces/string-equal-identical
index 1ece4568..254f7617 100644
--- a/cpp/.traces/string-equal-identical
+++ b/cpp/.traces/string-equal-identical
@@ -22,7 +22,7 @@ after-brace/0: memory-should-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: string-equal-identical
 run/0: instruction string-equal-identical/0
-run/0: run {name: "
+run/0: run/42 {name: "
     default-space:address:array:location <- new location:type, 30:literal
     x:address:array:character <- new [abc]
     y:address:array:character <- new [abc]
@@ -58,44 +58,44 @@ after-brace/0: new ...
 after-brace/0: new ...
 after-brace/0: string-equal ...
 run/0: instruction run1001/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1000
 run/0: instruction run1001/1
-run/0: {name: "x", value: 1, type: 2-5-4, properties: ["x": "address":"array":"character"]} <- new {name: "abc", value: 0, type: 0, properties: ["abc": "literal-string"]}
+run/0: {name: "x", value: 1, type: 2-5-4, properties: ["x": "address":"array":"character"]} <- new/41 {name: "abc", value: 0, type: 0, properties: ["abc": "literal-string"]}
 mem/0: storing 1031 in location 1002
 run/0: instruction run1001/2
-run/0: {name: "y", value: 2, type: 2-5-4, properties: ["y": "address":"array":"character"]} <- new {name: "abc", value: 0, type: 0, properties: ["abc": "literal-string"]}
+run/0: {name: "y", value: 2, type: 2-5-4, properties: ["y": "address":"array":"character"]} <- new/41 {name: "abc", value: 0, type: 0, properties: ["abc": "literal-string"]}
 mem/0: storing 1035 in location 1003
 run/0: instruction run1001/3
-run/0: {name: "3", value: 3, type: 3, properties: ["3": "boolean", "raw": ]} <- string-equal {name: "x", value: 1, type: 2-5-4, properties: ["x": "address":"array":"character"]}, {name: "y", value: 2, type: 2-5-4, properties: ["y": "address":"array":"character"]}
+run/0: {name: "3", value: 3, type: 3, properties: ["3": "boolean", "raw": ]} <- string-equal/100 {name: "x", value: 1, type: 2-5-4, properties: ["x": "address":"array":"character"]}, {name: "y", value: 2, type: 2-5-4, properties: ["y": "address":"array":"character"]}
 mem/0: location 1002 is 1031
 mem/0: location 1003 is 1035
 run/0: instruction string-equal/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1039
 run/0: instruction string-equal/1
-run/0: {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character"]} <- next-ingredient 
+run/0: {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1041
 run/0: instruction string-equal/2
-run/0: {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]} <- length {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
+run/0: {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]} <- length/27 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1041 is 1031
 mem/0: storing 3 in location 1042
 run/0: instruction string-equal/3
-run/0: {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character"]} <- next-ingredient 
+run/0: {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character"]} <- next-ingredient/29 
 run/0: product 0 is 1035
 mem/0: storing 1035 in location 1043
 run/0: instruction string-equal/4
-run/0: {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]} <- length {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
+run/0: {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]} <- length/27 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
 mem/0: location 1043 is 1035
 mem/0: storing 3 in location 1044
 run/0: instruction string-equal/6
-run/0: trace {name: "string-equal", value: 0, type: 0, properties: ["string-equal": "literal-string"]}, {name: "comparing lengths", value: 0, type: 0, properties: ["comparing lengths": "literal-string"]}
+run/0: trace/18 {name: "string-equal", value: 0, type: 0, properties: ["string-equal": "literal-string"]}, {name: "comparing lengths", value: 0, type: 0, properties: ["comparing lengths": "literal-string"]}
 string-equal/0: comparing lengths
 run/0: instruction string-equal/7
-run/0: {name: "length-equal?", value: 5, type: 3, properties: ["length-equal?": "boolean"]} <- equal {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
+run/0: {name: "length-equal?", value: 5, type: 3, properties: ["length-equal?": "boolean"]} <- equal/13 {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
 run/0: ingredient 0 is a-len
 mem/0: location 1042 is 3
 run/0: ingredient 1 is b-len
@@ -103,20 +103,20 @@ mem/0: location 1044 is 3
 run/0: product 0 is 1
 mem/0: storing 1 in location 1045
 run/0: instruction string-equal/8
-run/0: break-if {name: "length-equal?", value: 5, type: 3, properties: ["length-equal?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-if/11 {name: "length-equal?", value: 5, type: 3, properties: ["length-equal?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1045 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
 run/0: jumping to instruction 10
 run/0: instruction string-equal/11
-run/0: trace {name: "string-equal", value: 0, type: 0, properties: ["string-equal": "literal-string"]}, {name: "comparing characters", value: 0, type: 0, properties: ["comparing characters": "literal-string"]}
+run/0: trace/18 {name: "string-equal", value: 0, type: 0, properties: ["string-equal": "literal-string"]}, {name: "comparing characters", value: 0, type: 0, properties: ["comparing characters": "literal-string"]}
 string-equal/0: comparing characters
 run/0: instruction string-equal/12
-run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 1046
 run/0: instruction string-equal/14
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
+run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1046 is 0
 run/0: ingredient 1 is a-len
@@ -124,12 +124,12 @@ mem/0: location 1042 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1047
 run/0: instruction string-equal/15
-run/0: break-if {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 9, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 9, type: , properties: ["": ]}
 mem/0: location 1047 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction string-equal/16
-run/0: {name: "a2", value: 8, type: 4, properties: ["a2": "character"]} <- index {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
+run/0: {name: "a2", value: 8, type: 4, properties: ["a2": "character"]} <- index/25 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1041 is 1031
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
@@ -140,7 +140,7 @@ mem/0: location 1032 is 97
 run/0: product 0 is 97
 mem/0: storing 97 in location 1048
 run/0: instruction string-equal/17
-run/0: {name: "b2", value: 9, type: 4, properties: ["b2": "character"]} <- index {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
+run/0: {name: "b2", value: 9, type: 4, properties: ["b2": "character"]} <- index/25 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
 mem/0: location 1043 is 1035
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
@@ -151,7 +151,7 @@ mem/0: location 1036 is 97
 run/0: product 0 is 97
 mem/0: storing 97 in location 1049
 run/0: instruction string-equal/19
-run/0: {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]} <- equal {name: "a2", value: 8, type: 4, properties: ["a2": "character"]}, {name: "b2", value: 9, type: 4, properties: ["b2": "character"]}
+run/0: {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]} <- equal/13 {name: "a2", value: 8, type: 4, properties: ["a2": "character"]}, {name: "b2", value: 9, type: 4, properties: ["b2": "character"]}
 run/0: ingredient 0 is a2
 mem/0: location 1048 is 97
 run/0: ingredient 1 is b2
@@ -159,24 +159,24 @@ mem/0: location 1049 is 97
 run/0: product 0 is 1
 mem/0: storing 1 in location 1050
 run/0: instruction string-equal/20
-run/0: break-if {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-if/11 {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1050 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
 run/0: jumping to instruction 22
 run/0: instruction string-equal/23
-run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1046 is 0
 run/0: ingredient 1 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1046
 run/0: instruction string-equal/24
-run/0: loop {name: "", value: -11, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -11, type: , properties: ["": ]}
 run/0: ingredient 0 is -11
 run/0: jumping to instruction 14
 run/0: instruction string-equal/14
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
+run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1046 is 1
 run/0: ingredient 1 is a-len
@@ -184,12 +184,12 @@ mem/0: location 1042 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1047
 run/0: instruction string-equal/15
-run/0: break-if {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 9, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 9, type: , properties: ["": ]}
 mem/0: location 1047 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction string-equal/16
-run/0: {name: "a2", value: 8, type: 4, properties: ["a2": "character"]} <- index {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
+run/0: {name: "a2", value: 8, type: 4, properties: ["a2": "character"]} <- index/25 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1041 is 1031
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
@@ -200,7 +200,7 @@ mem/0: location 1033 is 98
 run/0: product 0 is 98
 mem/0: storing 98 in location 1048
 run/0: instruction string-equal/17
-run/0: {name: "b2", value: 9, type: 4, properties: ["b2": "character"]} <- index {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
+run/0: {name: "b2", value: 9, type: 4, properties: ["b2": "character"]} <- index/25 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
 mem/0: location 1043 is 1035
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
@@ -211,7 +211,7 @@ mem/0: location 1037 is 98
 run/0: product 0 is 98
 mem/0: storing 98 in location 1049
 run/0: instruction string-equal/19
-run/0: {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]} <- equal {name: "a2", value: 8, type: 4, properties: ["a2": "character"]}, {name: "b2", value: 9, type: 4, properties: ["b2": "character"]}
+run/0: {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]} <- equal/13 {name: "a2", value: 8, type: 4, properties: ["a2": "character"]}, {name: "b2", value: 9, type: 4, properties: ["b2": "character"]}
 run/0: ingredient 0 is a2
 mem/0: location 1048 is 98
 run/0: ingredient 1 is b2
@@ -219,24 +219,24 @@ mem/0: location 1049 is 98
 run/0: product 0 is 1
 mem/0: storing 1 in location 1050
 run/0: instruction string-equal/20
-run/0: break-if {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-if/11 {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1050 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
 run/0: jumping to instruction 22
 run/0: instruction string-equal/23
-run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1046 is 1
 run/0: ingredient 1 is 1
 run/0: product 0 is 2
 mem/0: storing 2 in location 1046
 run/0: instruction string-equal/24
-run/0: loop {name: "", value: -11, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -11, type: , properties: ["": ]}
 run/0: ingredient 0 is -11
 run/0: jumping to instruction 14
 run/0: instruction string-equal/14
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
+run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1046 is 2
 run/0: ingredient 1 is a-len
@@ -244,12 +244,12 @@ mem/0: location 1042 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1047
 run/0: instruction string-equal/15
-run/0: break-if {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 9, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 9, type: , properties: ["": ]}
 mem/0: location 1047 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction string-equal/16
-run/0: {name: "a2", value: 8, type: 4, properties: ["a2": "character"]} <- index {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
+run/0: {name: "a2", value: 8, type: 4, properties: ["a2": "character"]} <- index/25 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1041 is 1031
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
@@ -260,7 +260,7 @@ mem/0: location 1034 is 99
 run/0: product 0 is 99
 mem/0: storing 99 in location 1048
 run/0: instruction string-equal/17
-run/0: {name: "b2", value: 9, type: 4, properties: ["b2": "character"]} <- index {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
+run/0: {name: "b2", value: 9, type: 4, properties: ["b2": "character"]} <- index/25 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
 mem/0: location 1043 is 1035
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
@@ -271,7 +271,7 @@ mem/0: location 1038 is 99
 run/0: product 0 is 99
 mem/0: storing 99 in location 1049
 run/0: instruction string-equal/19
-run/0: {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]} <- equal {name: "a2", value: 8, type: 4, properties: ["a2": "character"]}, {name: "b2", value: 9, type: 4, properties: ["b2": "character"]}
+run/0: {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]} <- equal/13 {name: "a2", value: 8, type: 4, properties: ["a2": "character"]}, {name: "b2", value: 9, type: 4, properties: ["b2": "character"]}
 run/0: ingredient 0 is a2
 mem/0: location 1048 is 99
 run/0: ingredient 1 is b2
@@ -279,24 +279,24 @@ mem/0: location 1049 is 99
 run/0: product 0 is 1
 mem/0: storing 1 in location 1050
 run/0: instruction string-equal/20
-run/0: break-if {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-if/11 {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1050 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
 run/0: jumping to instruction 22
 run/0: instruction string-equal/23
-run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1046 is 2
 run/0: ingredient 1 is 1
 run/0: product 0 is 3
 mem/0: storing 3 in location 1046
 run/0: instruction string-equal/24
-run/0: loop {name: "", value: -11, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -11, type: , properties: ["": ]}
 run/0: ingredient 0 is -11
 run/0: jumping to instruction 14
 run/0: instruction string-equal/14
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
+run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1046 is 3
 run/0: ingredient 1 is a-len
@@ -304,17 +304,17 @@ mem/0: location 1042 is 3
 run/0: product 0 is 1
 mem/0: storing 1 in location 1047
 run/0: instruction string-equal/15
-run/0: break-if {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 9, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 9, type: , properties: ["": ]}
 mem/0: location 1047 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
 run/0: jumping to instruction 25
 run/0: instruction string-equal/26
-run/0: reply {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: reply/32 {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: result 0 is 1
 mem/0: storing 1 in location 3
 run/0: instruction string-equal-identical/1
-run/0: memory-should-contain {name: "
+run/0: memory-should-contain/43 {name: "
     3 <- 1  # abc == abc
   ", value: 0, type: 0, properties: ["
     3 <- 1  # abc == abc
diff --git a/cpp/.traces/string-equal-reflexive b/cpp/.traces/string-equal-reflexive
index 2c525b68..b8e8a7c3 100644
--- a/cpp/.traces/string-equal-reflexive
+++ b/cpp/.traces/string-equal-reflexive
@@ -20,7 +20,7 @@ after-brace/0: memory-should-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: string-equal-reflexive
 run/0: instruction string-equal-reflexive/0
-run/0: run {name: "
+run/0: run/42 {name: "
     default-space:address:array:location <- new location:type, 30:literal
     x:address:array:character <- new [abc]
     3:boolean/raw <- string-equal x:address:array:character, x:address:array:character
@@ -48,41 +48,41 @@ after-brace/0: new ...
 after-brace/0: new ...
 after-brace/0: string-equal ...
 run/0: instruction run1001/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1000
 run/0: instruction run1001/1
-run/0: {name: "x", value: 1, type: 2-5-4, properties: ["x": "address":"array":"character"]} <- new {name: "abc", value: 0, type: 0, properties: ["abc": "literal-string"]}
+run/0: {name: "x", value: 1, type: 2-5-4, properties: ["x": "address":"array":"character"]} <- new/41 {name: "abc", value: 0, type: 0, properties: ["abc": "literal-string"]}
 mem/0: storing 1031 in location 1002
 run/0: instruction run1001/2
-run/0: {name: "3", value: 3, type: 3, properties: ["3": "boolean", "raw": ]} <- string-equal {name: "x", value: 1, type: 2-5-4, properties: ["x": "address":"array":"character"]}, {name: "x", value: 1, type: 2-5-4, properties: ["x": "address":"array":"character"]}
+run/0: {name: "3", value: 3, type: 3, properties: ["3": "boolean", "raw": ]} <- string-equal/100 {name: "x", value: 1, type: 2-5-4, properties: ["x": "address":"array":"character"]}, {name: "x", value: 1, type: 2-5-4, properties: ["x": "address":"array":"character"]}
 mem/0: location 1002 is 1031
 mem/0: location 1002 is 1031
 run/0: instruction string-equal/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1035
 run/0: instruction string-equal/1
-run/0: {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character"]} <- next-ingredient 
+run/0: {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1037
 run/0: instruction string-equal/2
-run/0: {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]} <- length {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
+run/0: {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]} <- length/27 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1037 is 1031
 mem/0: storing 3 in location 1038
 run/0: instruction string-equal/3
-run/0: {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character"]} <- next-ingredient 
+run/0: {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1039
 run/0: instruction string-equal/4
-run/0: {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]} <- length {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
+run/0: {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]} <- length/27 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
 mem/0: location 1039 is 1031
 mem/0: storing 3 in location 1040
 run/0: instruction string-equal/6
-run/0: trace {name: "string-equal", value: 0, type: 0, properties: ["string-equal": "literal-string"]}, {name: "comparing lengths", value: 0, type: 0, properties: ["comparing lengths": "literal-string"]}
+run/0: trace/18 {name: "string-equal", value: 0, type: 0, properties: ["string-equal": "literal-string"]}, {name: "comparing lengths", value: 0, type: 0, properties: ["comparing lengths": "literal-string"]}
 string-equal/0: comparing lengths
 run/0: instruction string-equal/7
-run/0: {name: "length-equal?", value: 5, type: 3, properties: ["length-equal?": "boolean"]} <- equal {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
+run/0: {name: "length-equal?", value: 5, type: 3, properties: ["length-equal?": "boolean"]} <- equal/13 {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
 run/0: ingredient 0 is a-len
 mem/0: location 1038 is 3
 run/0: ingredient 1 is b-len
@@ -90,20 +90,20 @@ mem/0: location 1040 is 3
 run/0: product 0 is 1
 mem/0: storing 1 in location 1041
 run/0: instruction string-equal/8
-run/0: break-if {name: "length-equal?", value: 5, type: 3, properties: ["length-equal?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-if/11 {name: "length-equal?", value: 5, type: 3, properties: ["length-equal?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1041 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
 run/0: jumping to instruction 10
 run/0: instruction string-equal/11
-run/0: trace {name: "string-equal", value: 0, type: 0, properties: ["string-equal": "literal-string"]}, {name: "comparing characters", value: 0, type: 0, properties: ["comparing characters": "literal-string"]}
+run/0: trace/18 {name: "string-equal", value: 0, type: 0, properties: ["string-equal": "literal-string"]}, {name: "comparing characters", value: 0, type: 0, properties: ["comparing characters": "literal-string"]}
 string-equal/0: comparing characters
 run/0: instruction string-equal/12
-run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 1042
 run/0: instruction string-equal/14
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
+run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1042 is 0
 run/0: ingredient 1 is a-len
@@ -111,12 +111,12 @@ mem/0: location 1038 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1043
 run/0: instruction string-equal/15
-run/0: break-if {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 9, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 9, type: , properties: ["": ]}
 mem/0: location 1043 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction string-equal/16
-run/0: {name: "a2", value: 8, type: 4, properties: ["a2": "character"]} <- index {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
+run/0: {name: "a2", value: 8, type: 4, properties: ["a2": "character"]} <- index/25 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1037 is 1031
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
@@ -127,7 +127,7 @@ mem/0: location 1032 is 97
 run/0: product 0 is 97
 mem/0: storing 97 in location 1044
 run/0: instruction string-equal/17
-run/0: {name: "b2", value: 9, type: 4, properties: ["b2": "character"]} <- index {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
+run/0: {name: "b2", value: 9, type: 4, properties: ["b2": "character"]} <- index/25 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
 mem/0: location 1039 is 1031
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
@@ -138,7 +138,7 @@ mem/0: location 1032 is 97
 run/0: product 0 is 97
 mem/0: storing 97 in location 1045
 run/0: instruction string-equal/19
-run/0: {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]} <- equal {name: "a2", value: 8, type: 4, properties: ["a2": "character"]}, {name: "b2", value: 9, type: 4, properties: ["b2": "character"]}
+run/0: {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]} <- equal/13 {name: "a2", value: 8, type: 4, properties: ["a2": "character"]}, {name: "b2", value: 9, type: 4, properties: ["b2": "character"]}
 run/0: ingredient 0 is a2
 mem/0: location 1044 is 97
 run/0: ingredient 1 is b2
@@ -146,24 +146,24 @@ mem/0: location 1045 is 97
 run/0: product 0 is 1
 mem/0: storing 1 in location 1046
 run/0: instruction string-equal/20
-run/0: break-if {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-if/11 {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1046 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
 run/0: jumping to instruction 22
 run/0: instruction string-equal/23
-run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1042 is 0
 run/0: ingredient 1 is 1
 run/0: product 0 is 1
 mem/0: storing 1 in location 1042
 run/0: instruction string-equal/24
-run/0: loop {name: "", value: -11, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -11, type: , properties: ["": ]}
 run/0: ingredient 0 is -11
 run/0: jumping to instruction 14
 run/0: instruction string-equal/14
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
+run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1042 is 1
 run/0: ingredient 1 is a-len
@@ -171,12 +171,12 @@ mem/0: location 1038 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1043
 run/0: instruction string-equal/15
-run/0: break-if {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 9, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 9, type: , properties: ["": ]}
 mem/0: location 1043 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction string-equal/16
-run/0: {name: "a2", value: 8, type: 4, properties: ["a2": "character"]} <- index {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
+run/0: {name: "a2", value: 8, type: 4, properties: ["a2": "character"]} <- index/25 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1037 is 1031
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
@@ -187,7 +187,7 @@ mem/0: location 1033 is 98
 run/0: product 0 is 98
 mem/0: storing 98 in location 1044
 run/0: instruction string-equal/17
-run/0: {name: "b2", value: 9, type: 4, properties: ["b2": "character"]} <- index {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
+run/0: {name: "b2", value: 9, type: 4, properties: ["b2": "character"]} <- index/25 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
 mem/0: location 1039 is 1031
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
@@ -198,7 +198,7 @@ mem/0: location 1033 is 98
 run/0: product 0 is 98
 mem/0: storing 98 in location 1045
 run/0: instruction string-equal/19
-run/0: {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]} <- equal {name: "a2", value: 8, type: 4, properties: ["a2": "character"]}, {name: "b2", value: 9, type: 4, properties: ["b2": "character"]}
+run/0: {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]} <- equal/13 {name: "a2", value: 8, type: 4, properties: ["a2": "character"]}, {name: "b2", value: 9, type: 4, properties: ["b2": "character"]}
 run/0: ingredient 0 is a2
 mem/0: location 1044 is 98
 run/0: ingredient 1 is b2
@@ -206,24 +206,24 @@ mem/0: location 1045 is 98
 run/0: product 0 is 1
 mem/0: storing 1 in location 1046
 run/0: instruction string-equal/20
-run/0: break-if {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-if/11 {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1046 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
 run/0: jumping to instruction 22
 run/0: instruction string-equal/23
-run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1042 is 1
 run/0: ingredient 1 is 1
 run/0: product 0 is 2
 mem/0: storing 2 in location 1042
 run/0: instruction string-equal/24
-run/0: loop {name: "", value: -11, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -11, type: , properties: ["": ]}
 run/0: ingredient 0 is -11
 run/0: jumping to instruction 14
 run/0: instruction string-equal/14
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
+run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1042 is 2
 run/0: ingredient 1 is a-len
@@ -231,12 +231,12 @@ mem/0: location 1038 is 3
 run/0: product 0 is 0
 mem/0: storing 0 in location 1043
 run/0: instruction string-equal/15
-run/0: break-if {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 9, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 9, type: , properties: ["": ]}
 mem/0: location 1043 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction string-equal/16
-run/0: {name: "a2", value: 8, type: 4, properties: ["a2": "character"]} <- index {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
+run/0: {name: "a2", value: 8, type: 4, properties: ["a2": "character"]} <- index/25 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1037 is 1031
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
@@ -247,7 +247,7 @@ mem/0: location 1034 is 99
 run/0: product 0 is 99
 mem/0: storing 99 in location 1044
 run/0: instruction string-equal/17
-run/0: {name: "b2", value: 9, type: 4, properties: ["b2": "character"]} <- index {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
+run/0: {name: "b2", value: 9, type: 4, properties: ["b2": "character"]} <- index/25 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}, {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
 run/0: ingredient 0 is {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
 mem/0: location 1039 is 1031
 run/0: ingredient 1 is {name: "i", value: 6, type: 1, properties: ["i": "integer"]}
@@ -258,7 +258,7 @@ mem/0: location 1034 is 99
 run/0: product 0 is 99
 mem/0: storing 99 in location 1045
 run/0: instruction string-equal/19
-run/0: {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]} <- equal {name: "a2", value: 8, type: 4, properties: ["a2": "character"]}, {name: "b2", value: 9, type: 4, properties: ["b2": "character"]}
+run/0: {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]} <- equal/13 {name: "a2", value: 8, type: 4, properties: ["a2": "character"]}, {name: "b2", value: 9, type: 4, properties: ["b2": "character"]}
 run/0: ingredient 0 is a2
 mem/0: location 1044 is 99
 run/0: ingredient 1 is b2
@@ -266,24 +266,24 @@ mem/0: location 1045 is 99
 run/0: product 0 is 1
 mem/0: storing 1 in location 1046
 run/0: instruction string-equal/20
-run/0: break-if {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-if/11 {name: "chars-match?", value: 10, type: 3, properties: ["chars-match?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1046 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
 run/0: jumping to instruction 22
 run/0: instruction string-equal/23
-run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: {name: "i", value: 6, type: 1, properties: ["i": "integer"]} <- add/2 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: ingredient 0 is i
 mem/0: location 1042 is 2
 run/0: ingredient 1 is 1
 run/0: product 0 is 3
 mem/0: storing 3 in location 1042
 run/0: instruction string-equal/24
-run/0: loop {name: "", value: -11, type: , properties: ["": ]}
+run/0: loop/10 {name: "", value: -11, type: , properties: ["": ]}
 run/0: ingredient 0 is -11
 run/0: jumping to instruction 14
 run/0: instruction string-equal/14
-run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
+run/0: {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal/16 {name: "i", value: 6, type: 1, properties: ["i": "integer"]}, {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}
 run/0: ingredient 0 is i
 mem/0: location 1042 is 3
 run/0: ingredient 1 is a-len
@@ -291,17 +291,17 @@ mem/0: location 1038 is 3
 run/0: product 0 is 1
 mem/0: storing 1 in location 1043
 run/0: instruction string-equal/15
-run/0: break-if {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 9, type: , properties: ["": ]}
+run/0: break-if/11 {name: "done?", value: 7, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 9, type: , properties: ["": ]}
 mem/0: location 1043 is 1
 run/0: ingredient 0 is 1
 run/0: ingredient 1 is 
 run/0: jumping to instruction 25
 run/0: instruction string-equal/26
-run/0: reply {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
+run/0: reply/32 {name: "1", value: 1, type: 0, properties: ["1": "literal"]}
 run/0: result 0 is 1
 mem/0: storing 1 in location 3
 run/0: instruction string-equal-reflexive/1
-run/0: memory-should-contain {name: "
+run/0: memory-should-contain/43 {name: "
     3 <- 1  # x == x for all x
   ", value: 0, type: 0, properties: ["
     3 <- 1  # x == x for all x
diff --git a/cpp/.traces/string-equal-with-empty b/cpp/.traces/string-equal-with-empty
index fa1077ee..c103c72f 100644
--- a/cpp/.traces/string-equal-with-empty
+++ b/cpp/.traces/string-equal-with-empty
@@ -22,7 +22,7 @@ after-brace/0: memory-should-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: string-equal-with-empty
 run/0: instruction string-equal-with-empty/0
-run/0: run {name: "
+run/0: run/42 {name: "
     default-space:address:array:location <- new location:type, 30:literal
     x:address:array:character <- new []
     y:address:array:character <- new [abcd]
@@ -58,44 +58,44 @@ after-brace/0: new ...
 after-brace/0: new ...
 after-brace/0: string-equal ...
 run/0: instruction run1001/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1000
 run/0: instruction run1001/1
-run/0: {name: "x", value: 1, type: 2-5-4, properties: ["x": "address":"array":"character"]} <- new {name: "", value: 0, type: 0, properties: ["": "literal-string"]}
+run/0: {name: "x", value: 1, type: 2-5-4, properties: ["x": "address":"array":"character"]} <- new/41 {name: "", value: 0, type: 0, properties: ["": "literal-string"]}
 mem/0: storing 1031 in location 1002
 run/0: instruction run1001/2
-run/0: {name: "y", value: 2, type: 2-5-4, properties: ["y": "address":"array":"character"]} <- new {name: "abcd", value: 0, type: 0, properties: ["abcd": "literal-string"]}
+run/0: {name: "y", value: 2, type: 2-5-4, properties: ["y": "address":"array":"character"]} <- new/41 {name: "abcd", value: 0, type: 0, properties: ["abcd": "literal-string"]}
 mem/0: storing 1032 in location 1003
 run/0: instruction run1001/3
-run/0: {name: "3", value: 3, type: 3, properties: ["3": "boolean", "raw": ]} <- string-equal {name: "x", value: 1, type: 2-5-4, properties: ["x": "address":"array":"character"]}, {name: "y", value: 2, type: 2-5-4, properties: ["y": "address":"array":"character"]}
+run/0: {name: "3", value: 3, type: 3, properties: ["3": "boolean", "raw": ]} <- string-equal/100 {name: "x", value: 1, type: 2-5-4, properties: ["x": "address":"array":"character"]}, {name: "y", value: 2, type: 2-5-4, properties: ["y": "address":"array":"character"]}
 mem/0: location 1002 is 1031
 mem/0: location 1003 is 1032
 run/0: instruction string-equal/0
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new/41 {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]}
 mem/0: array size is 30
 mem/0: new alloc: 1037
 run/0: instruction string-equal/1
-run/0: {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character"]} <- next-ingredient 
+run/0: {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character"]} <- next-ingredient/29 
 run/0: product 0 is 1031
 mem/0: storing 1031 in location 1039
 run/0: instruction string-equal/2
-run/0: {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]} <- length {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
+run/0: {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]} <- length/27 {name: "a", value: 1, type: 2-5-4, properties: ["a": "address":"array":"character", "deref": ]}
 mem/0: location 1039 is 1031
 mem/0: storing 0 in location 1040
 run/0: instruction string-equal/3
-run/0: {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character"]} <- next-ingredient 
+run/0: {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character"]} <- next-ingredient/29 
 run/0: product 0 is 1032
 mem/0: storing 1032 in location 1041
 run/0: instruction string-equal/4
-run/0: {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]} <- length {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
+run/0: {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]} <- length/27 {name: "b", value: 3, type: 2-5-4, properties: ["b": "address":"array":"character", "deref": ]}
 mem/0: location 1041 is 1032
 mem/0: storing 4 in location 1042
 run/0: instruction string-equal/6
-run/0: trace {name: "string-equal", value: 0, type: 0, properties: ["string-equal": "literal-string"]}, {name: "comparing lengths", value: 0, type: 0, properties: ["comparing lengths": "literal-string"]}
+run/0: trace/18 {name: "string-equal", value: 0, type: 0, properties: ["string-equal": "literal-string"]}, {name: "comparing lengths", value: 0, type: 0, properties: ["comparing lengths": "literal-string"]}
 string-equal/0: comparing lengths
 run/0: instruction string-equal/7
-run/0: {name: "length-equal?", value: 5, type: 3, properties: ["length-equal?": "boolean"]} <- equal {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
+run/0: {name: "length-equal?", value: 5, type: 3, properties: ["length-equal?": "boolean"]} <- equal/13 {name: "a-len", value: 2, type: 1, properties: ["a-len": "integer"]}, {name: "b-len", value: 4, type: 1, properties: ["b-len": "integer"]}
 run/0: ingredient 0 is a-len
 mem/0: location 1040 is 0
 run/0: ingredient 1 is b-len
@@ -103,16 +103,16 @@ mem/0: location 1042 is 4
 run/0: product 0 is 0
 mem/0: storing 0 in location 1043
 run/0: instruction string-equal/8
-run/0: break-if {name: "length-equal?", value: 5, type: 3, properties: ["length-equal?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
+run/0: break-if/11 {name: "length-equal?", value: 5, type: 3, properties: ["length-equal?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]}
 mem/0: location 1043 is 0
 run/0: ingredient 0 is 0
 run/0: jump-if fell through
 run/0: instruction string-equal/9
-run/0: reply {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: reply/32 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: result 0 is 0
 mem/0: storing 0 in location 3
 run/0: instruction string-equal-with-empty/1
-run/0: memory-should-contain {name: "
+run/0: memory-should-contain/43 {name: "
     3 <- 0  # "" != abcd
   ", value: 0, type: 0, properties: ["
     3 <- 0  # "" != abcd
diff --git a/cpp/.traces/subtract b/cpp/.traces/subtract
index 328bec86..aeec0887 100644
--- a/cpp/.traces/subtract
+++ b/cpp/.traces/subtract
@@ -15,15 +15,15 @@ after-brace/0: subtract ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "23", value: 23, type: 0, properties: ["23": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "23", value: 23, type: 0, properties: ["23": "literal"]}
 run/0: ingredient 0 is 23
 mem/0: storing 23 in location 1
 run/0: instruction main/1
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 run/0: ingredient 0 is 34
 mem/0: storing 34 in location 2
 run/0: instruction main/2
-run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- subtract {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
+run/0: {name: "3", value: 3, type: 1, properties: ["3": "integer"]} <- subtract/3 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}, {name: "2", value: 2, type: 1, properties: ["2": "integer"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 23
 run/0: ingredient 1 is 2
diff --git a/cpp/.traces/subtract_literal b/cpp/.traces/subtract_literal
index 24d3d23f..9d8202ca 100644
--- a/cpp/.traces/subtract_literal
+++ b/cpp/.traces/subtract_literal
@@ -7,7 +7,7 @@ after-brace/0: subtract ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- subtract {name: "5", value: 5, type: 0, properties: ["5": "literal"]}, {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- subtract/3 {name: "5", value: 5, type: 0, properties: ["5": "literal"]}, {name: "2", value: 2, type: 0, properties: ["2": "literal"]}
 run/0: ingredient 0 is 5
 run/0: ingredient 1 is 2
 run/0: product 0 is 3
diff --git a/cpp/.traces/surrounding_space b/cpp/.traces/surrounding_space
index abba5d00..aeddde25 100644
--- a/cpp/.traces/surrounding_space
+++ b/cpp/.traces/surrounding_space
@@ -27,25 +27,25 @@ after-brace/0: copy ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: {name: "10", value: 10, type: 1, properties: ["10": "integer"]} <- copy {name: "5", value: 5, type: 0, properties: ["5": "literal"]}
+run/0: {name: "10", value: 10, type: 1, properties: ["10": "integer"]} <- copy/1 {name: "5", value: 5, type: 0, properties: ["5": "literal"]}
 run/0: ingredient 0 is 5
 mem/0: storing 5 in location 10
 run/0: instruction main/1
-run/0: {name: "20", value: 20, type: 1, properties: ["20": "integer"]} <- copy {name: "5", value: 5, type: 0, properties: ["5": "literal"]}
+run/0: {name: "20", value: 20, type: 1, properties: ["20": "integer"]} <- copy/1 {name: "5", value: 5, type: 0, properties: ["5": "literal"]}
 run/0: ingredient 0 is 5
 mem/0: storing 5 in location 20
 run/0: instruction main/2
-run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- copy {name: "10", value: 10, type: 0, properties: ["10": "literal"]}
+run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- copy/1 {name: "10", value: 10, type: 0, properties: ["10": "literal"]}
 run/0: ingredient 0 is 10
 run/0: instruction main/3
-run/0: {name: "0", value: 0, type: 2-5-1, properties: ["0": "address":"array":"location", "names": "dummy"]} <- copy {name: "20", value: 20, type: 0, properties: ["20": "literal"]}
+run/0: {name: "0", value: 0, type: 2-5-1, properties: ["0": "address":"array":"location", "names": "dummy"]} <- copy/1 {name: "20", value: 20, type: 0, properties: ["20": "literal"]}
 run/0: ingredient 0 is 20
 mem/0: storing 20 in location 11
 run/0: instruction main/4
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "32", value: 32, type: 0, properties: ["32": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "32", value: 32, type: 0, properties: ["32": "literal"]}
 run/0: ingredient 0 is 32
 mem/0: storing 32 in location 12
 run/0: instruction main/5
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer", "space": "1"]} <- copy {name: "33", value: 33, type: 0, properties: ["33": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer", "space": "1"]} <- copy/1 {name: "33", value: 33, type: 0, properties: ["33": "literal"]}
 run/0: ingredient 0 is 33
 mem/0: storing 33 in location 22
diff --git a/cpp/.traces/trace b/cpp/.traces/trace
index 50220cc0..f2c6721b 100644
--- a/cpp/.traces/trace
+++ b/cpp/.traces/trace
@@ -6,5 +6,5 @@ after-brace/0: trace ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: trace {name: "foo", value: 0, type: 0, properties: ["foo": "literal-string"]}, {name: "this is a trace in mu", value: 0, type: 0, properties: ["this is a trace in mu": "literal-string"]}
+run/0: trace/18 {name: "foo", value: 0, type: 0, properties: ["foo": "literal-string"]}, {name: "this is a trace in mu", value: 0, type: 0, properties: ["this is a trace in mu": "literal-string"]}
 foo/0: this is a trace in mu
diff --git a/cpp/.traces/trace_check_passes_silently b/cpp/.traces/trace_check_passes_silently
index c34c73d2..3ee8d037 100644
--- a/cpp/.traces/trace_check_passes_silently
+++ b/cpp/.traces/trace_check_passes_silently
@@ -16,7 +16,7 @@ after-brace/0: trace-should-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: run {name: "
+run/0: run/42 {name: "
     trace [a], [b]
   ", value: 0, type: 0, properties: ["
     trace [a], [b]
@@ -27,10 +27,10 @@ parse/0:   ingredient: {name: "b", value: 0, type: 0, properties: ["b": "literal
 after-brace/0: recipe run1001
 after-brace/0: trace ...
 run/0: instruction run1001/0
-run/0: trace {name: "a", value: 0, type: 0, properties: ["a": "literal-string"]}, {name: "b", value: 0, type: 0, properties: ["b": "literal-string"]}
+run/0: trace/18 {name: "a", value: 0, type: 0, properties: ["a": "literal-string"]}, {name: "b", value: 0, type: 0, properties: ["b": "literal-string"]}
 a/0: b
 run/0: instruction main/1
-run/0: trace-should-contain {name: "
+run/0: trace-should-contain/44 {name: "
     a: b
   ", value: 0, type: 0, properties: ["
     a: b
diff --git a/cpp/.traces/trace_check_warns_on_failure b/cpp/.traces/trace_check_warns_on_failure
index e8ea7894..244dd582 100644
--- a/cpp/.traces/trace_check_warns_on_failure
+++ b/cpp/.traces/trace_check_warns_on_failure
@@ -11,7 +11,7 @@ after-brace/0: trace-should-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: trace-should-contain {name: "
+run/0: trace-should-contain/44 {name: "
     a: b
     a: d
   ", value: 0, type: 0, properties: ["
diff --git a/cpp/.traces/trace_check_warns_on_failure_in_later_line b/cpp/.traces/trace_check_warns_on_failure_in_later_line
index 7c8c7088..edb485eb 100644
--- a/cpp/.traces/trace_check_warns_on_failure_in_later_line
+++ b/cpp/.traces/trace_check_warns_on_failure_in_later_line
@@ -18,7 +18,7 @@ after-brace/0: trace-should-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: run {name: "
+run/0: run/42 {name: "
     trace [a], [b]
   ", value: 0, type: 0, properties: ["
     trace [a], [b]
@@ -29,10 +29,10 @@ parse/0:   ingredient: {name: "b", value: 0, type: 0, properties: ["b": "literal
 after-brace/0: recipe run1001
 after-brace/0: trace ...
 run/0: instruction run1001/0
-run/0: trace {name: "a", value: 0, type: 0, properties: ["a": "literal-string"]}, {name: "b", value: 0, type: 0, properties: ["b": "literal-string"]}
+run/0: trace/18 {name: "a", value: 0, type: 0, properties: ["a": "literal-string"]}, {name: "b", value: 0, type: 0, properties: ["b": "literal-string"]}
 a/0: b
 run/0: instruction main/1
-run/0: trace-should-contain {name: "
+run/0: trace-should-contain/44 {name: "
     a: b
     a: d
   ", value: 0, type: 0, properties: ["
diff --git a/cpp/.traces/trace_negative_check_passes_silently b/cpp/.traces/trace_negative_check_passes_silently
index b572cb34..11d92333 100644
--- a/cpp/.traces/trace_negative_check_passes_silently
+++ b/cpp/.traces/trace_negative_check_passes_silently
@@ -9,7 +9,7 @@ after-brace/0: trace-should-not-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: trace-should-not-contain {name: "
+run/0: trace-should-not-contain/45 {name: "
     a: b
   ", value: 0, type: 0, properties: ["
     a: b
diff --git a/cpp/.traces/trace_negative_check_warns_on_any_unexpected_line b/cpp/.traces/trace_negative_check_warns_on_any_unexpected_line
index 95950862..372180e4 100644
--- a/cpp/.traces/trace_negative_check_warns_on_any_unexpected_line
+++ b/cpp/.traces/trace_negative_check_warns_on_any_unexpected_line
@@ -18,7 +18,7 @@ after-brace/0: trace-should-not-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: run {name: "
+run/0: run/42 {name: "
     trace [a], [d]
   ", value: 0, type: 0, properties: ["
     trace [a], [d]
@@ -29,10 +29,10 @@ parse/0:   ingredient: {name: "d", value: 0, type: 0, properties: ["d": "literal
 after-brace/0: recipe run1001
 after-brace/0: trace ...
 run/0: instruction run1001/0
-run/0: trace {name: "a", value: 0, type: 0, properties: ["a": "literal-string"]}, {name: "d", value: 0, type: 0, properties: ["d": "literal-string"]}
+run/0: trace/18 {name: "a", value: 0, type: 0, properties: ["a": "literal-string"]}, {name: "d", value: 0, type: 0, properties: ["d": "literal-string"]}
 a/0: d
 run/0: instruction main/1
-run/0: trace-should-not-contain {name: "
+run/0: trace-should-not-contain/45 {name: "
     a: b
     a: d
   ", value: 0, type: 0, properties: ["
diff --git a/cpp/.traces/trace_negative_check_warns_on_failure b/cpp/.traces/trace_negative_check_warns_on_failure
index 3e8873f8..0a8b1ed5 100644
--- a/cpp/.traces/trace_negative_check_warns_on_failure
+++ b/cpp/.traces/trace_negative_check_warns_on_failure
@@ -16,7 +16,7 @@ after-brace/0: trace-should-not-contain ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: main
 run/0: instruction main/0
-run/0: run {name: "
+run/0: run/42 {name: "
     trace [a], [b]
   ", value: 0, type: 0, properties: ["
     trace [a], [b]
@@ -27,10 +27,10 @@ parse/0:   ingredient: {name: "b", value: 0, type: 0, properties: ["b": "literal
 after-brace/0: recipe run1001
 after-brace/0: trace ...
 run/0: instruction run1001/0
-run/0: trace {name: "a", value: 0, type: 0, properties: ["a": "literal-string"]}, {name: "b", value: 0, type: 0, properties: ["b": "literal-string"]}
+run/0: trace/18 {name: "a", value: 0, type: 0, properties: ["a": "literal-string"]}, {name: "b", value: 0, type: 0, properties: ["b": "literal-string"]}
 a/0: b
 run/0: instruction main/1
-run/0: trace-should-not-contain {name: "
+run/0: trace-should-not-contain/45 {name: "
     a: b
   ", value: 0, type: 0, properties: ["
     a: b
diff --git a/cpp/.traces/wait_for_location b/cpp/.traces/wait_for_location
index 2c357378..a1409536 100644
--- a/cpp/.traces/wait_for_location
+++ b/cpp/.traces/wait_for_location
@@ -21,25 +21,25 @@ after-brace/0: copy ...
 new/0: routine allocated memory from 1000 to 101000
 schedule/0: f1
 run/0: instruction f1/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "0", value: 0, type: 0, properties: ["0": "literal"]}
 run/0: ingredient 0 is 0
 mem/0: storing 0 in location 1
 run/0: instruction f1/1
-run/0: start-running {name: "f2", value: 0, type: 0, properties: ["f2": "recipe"]}
+run/0: start-running/33 {name: "f2", value: 0, type: 0, properties: ["f2": "recipe"]}
 run/0: ingredient 0 is f2
 new/0: routine allocated memory from 101000 to 201000
 run/0: instruction f1/2
-run/0: wait-for-location {name: "1", value: 1, type: 1, properties: ["1": "integer"]}
+run/0: wait-for-location/34 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}
 run/0: waiting for 1 to change from 0
 schedule/0: f2
 run/0: instruction f2/0
-run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
+run/0: {name: "1", value: 1, type: 1, properties: ["1": "integer"]} <- copy/1 {name: "34", value: 34, type: 0, properties: ["34": "literal"]}
 run/0: ingredient 0 is 34
 mem/0: storing 34 in location 1
 schedule/0: waking up routine
 schedule/0: f1
 run/0: instruction f1/3
-run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy {name: "1", value: 1, type: 1, properties: ["1": "integer"]}
+run/0: {name: "2", value: 2, type: 1, properties: ["2": "integer"]} <- copy/1 {name: "1", value: 1, type: 1, properties: ["1": "integer"]}
 run/0: ingredient 0 is 1
 mem/0: location 1 is 34
 mem/0: storing 34 in location 2