{
  "alphabet": [
    "a",
    "b"
  ],
  "sorts": {
    "W": 1,
    "S": 1,
    "K": 2,
    "E": 1,
    "N": 1,
    "P": 1
  },
  "constructors": {
    "Empty": {
      "sort": "W",
      "children": [],
      "meaning": [
        []
      ]
    },
    "A": {
      "sort": "W",
      "children": [],
      "meaning": [
        [
          "a"
        ]
      ]
    },
    "B": {
      "sort": "W",
      "children": [],
      "meaning": [
        [
          "b"
        ]
      ]
    },
    "Cat": {
      "sort": "W",
      "children": [
        "W",
        "W"
      ],
      "meaning": [
        [
          [
            0,
            0
          ],
          [
            1,
            0
          ]
        ]
      ]
    },
    "Small": {
      "sort": "W",
      "children": [
        "W"
      ],
      "meaning": [
        [
          [
            0,
            0
          ]
        ]
      ]
    },
    "Plug": {
      "sort": "W",
      "children": [
        "K",
        "W"
      ],
      "meaning": [
        [
          [
            0,
            0
          ],
          [
            1,
            0
          ],
          [
            0,
            1
          ]
        ]
      ]
    },
    "Nil": {
      "sort": "S",
      "children": [],
      "meaning": [
        []
      ]
    },
    "ConsA": {
      "sort": "S",
      "children": [
        "S"
      ],
      "meaning": [
        [
          "a",
          [
            0,
            0
          ]
        ]
      ]
    },
    "ConsB": {
      "sort": "S",
      "children": [
        "S"
      ],
      "meaning": [
        [
          "b",
          [
            0,
            0
          ]
        ]
      ]
    },
    "Hole": {
      "sort": "K",
      "children": [],
      "meaning": [
        [],
        []
      ]
    },
    "Frame": {
      "sort": "K",
      "children": [
        "W",
        "K",
        "W"
      ],
      "meaning": [
        [
          [
            0,
            0
          ],
          [
            1,
            0
          ]
        ],
        [
          [
            1,
            1
          ],
          [
            2,
            0
          ]
        ]
      ]
    },
    "Compose": {
      "sort": "K",
      "children": [
        "K",
        "K"
      ],
      "meaning": [
        [
          [
            0,
            0
          ],
          [
            1,
            0
          ]
        ],
        [
          [
            1,
            1
          ],
          [
            0,
            1
          ]
        ]
      ]
    },
    "Zero": {
      "sort": "E",
      "children": [],
      "meaning": [
        []
      ]
    },
    "JoinZero": {
      "sort": "E",
      "children": [
        "E",
        "E"
      ],
      "meaning": [
        [
          [
            0,
            0
          ],
          [
            1,
            0
          ]
        ]
      ]
    },
    "Pair": {
      "sort": "P",
      "children": [
        "W",
        "W"
      ],
      "meaning": [
        [
          [
            0,
            0
          ],
          [
            1,
            0
          ]
        ]
      ]
    },
    "Left": {
      "sort": "N",
      "children": [
        "W",
        "W",
        "P"
      ],
      "meaning": [
        [
          [
            0,
            0
          ],
          [
            1,
            0
          ],
          [
            2,
            0
          ]
        ]
      ]
    }
  },
  "operations": [
    {
      "name": "rope_concat",
      "inputs": [
        "W",
        "W"
      ],
      "outputs": [
        "W"
      ],
      "budget": {
        "r": 0,
        "A": 1
      },
      "contracts": {
        "ok": [
          [
            [
              {
                "post": [
                  0,
                  0
                ]
              }
            ],
            [
              {
                "pre": [
                  0,
                  0
                ]
              },
              {
                "pre": [
                  1,
                  0
                ]
              }
            ]
          ]
        ]
      },
      "rules": [
        {
          "name": "join",
          "patterns": [
            {
              "var": "x",
              "sort": "W"
            },
            {
              "var": "y",
              "sort": "W"
            }
          ],
          "fresh": [
            {
              "id": "out",
              "ctor": "Cat",
              "args": [
                "x",
                "y"
              ]
            }
          ],
          "roots": [
            "out"
          ],
          "tag": "ok"
        }
      ],
      "expected": {
        "status": "accepted"
      }
    },
    {
      "name": "rope_duplicate",
      "inputs": [
        "W"
      ],
      "outputs": [
        "W"
      ],
      "budget": {
        "r": 0,
        "A": 1
      },
      "contracts": {
        "ok": [
          [
            [
              {
                "post": [
                  0,
                  0
                ]
              }
            ],
            [
              {
                "pre": [
                  0,
                  0
                ]
              },
              {
                "pre": [
                  0,
                  0
                ]
              }
            ]
          ]
        ]
      },
      "rules": [
        {
          "name": "share",
          "patterns": [
            {
              "var": "x",
              "sort": "W"
            }
          ],
          "fresh": [
            {
              "id": "out",
              "ctor": "Cat",
              "args": [
                "x",
                "x"
              ]
            }
          ],
          "roots": [
            "out"
          ],
          "tag": "ok"
        }
      ],
      "expected": {
        "status": "accepted"
      }
    },
    {
      "name": "rope_rotate",
      "inputs": [
        "W"
      ],
      "outputs": [
        "W"
      ],
      "budget": {
        "r": 2,
        "A": 2
      },
      "contracts": {
        "ok": [
          [
            [
              {
                "post": [
                  0,
                  0
                ]
              }
            ],
            [
              {
                "pre": [
                  0,
                  0
                ]
              }
            ]
          ]
        ]
      },
      "rules": [
        {
          "name": "rotate",
          "patterns": [
            {
              "ctor": "Cat",
              "args": [
                {
                  "ctor": "Cat",
                  "args": [
                    {
                      "var": "x",
                      "sort": "W"
                    },
                    {
                      "var": "y",
                      "sort": "W"
                    }
                  ]
                },
                {
                  "var": "z",
                  "sort": "W"
                }
              ]
            }
          ],
          "fresh": [
            {
              "id": "yz",
              "ctor": "Cat",
              "args": [
                "y",
                "z"
              ]
            },
            {
              "id": "out",
              "ctor": "Cat",
              "args": [
                "x",
                "yz"
              ]
            }
          ],
          "roots": [
            "out"
          ],
          "tag": "ok"
        },
        {
          "name": "top_Empty",
          "patterns": [
            {
              "ctor": "Empty",
              "args": [],
              "as": "old"
            }
          ],
          "fresh": [],
          "roots": [
            "old"
          ],
          "tag": "ok"
        },
        {
          "name": "top_A",
          "patterns": [
            {
              "ctor": "A",
              "args": [],
              "as": "old"
            }
          ],
          "fresh": [],
          "roots": [
            "old"
          ],
          "tag": "ok"
        },
        {
          "name": "top_B",
          "patterns": [
            {
              "ctor": "B",
              "args": [],
              "as": "old"
            }
          ],
          "fresh": [],
          "roots": [
            "old"
          ],
          "tag": "ok"
        },
        {
          "name": "left_Empty",
          "patterns": [
            {
              "ctor": "Cat",
              "args": [
                {
                  "ctor": "Empty",
                  "args": []
                },
                {
                  "var": "z",
                  "sort": "W"
                }
              ],
              "as": "old"
            }
          ],
          "fresh": [],
          "roots": [
            "old"
          ],
          "tag": "ok"
        },
        {
          "name": "left_A",
          "patterns": [
            {
              "ctor": "Cat",
              "args": [
                {
                  "ctor": "A",
                  "args": []
                },
                {
                  "var": "z",
                  "sort": "W"
                }
              ],
              "as": "old"
            }
          ],
          "fresh": [],
          "roots": [
            "old"
          ],
          "tag": "ok"
        },
        {
          "name": "left_B",
          "patterns": [
            {
              "ctor": "Cat",
              "args": [
                {
                  "ctor": "B",
                  "args": []
                },
                {
                  "var": "z",
                  "sort": "W"
                }
              ],
              "as": "old"
            }
          ],
          "fresh": [],
          "roots": [
            "old"
          ],
          "tag": "ok"
        },
        {
          "name": "left_Small",
          "patterns": [
            {
              "ctor": "Cat",
              "args": [
                {
                  "ctor": "Small",
                  "args": [
                    {
                      "var": "u0",
                      "sort": "W"
                    }
                  ]
                },
                {
                  "var": "z",
                  "sort": "W"
                }
              ],
              "as": "old"
            }
          ],
          "fresh": [],
          "roots": [
            "old"
          ],
          "tag": "ok"
        },
        {
          "name": "left_Plug",
          "patterns": [
            {
              "ctor": "Cat",
              "args": [
                {
                  "ctor": "Plug",
                  "args": [
                    {
                      "var": "u0",
                      "sort": "K"
                    },
                    {
                      "var": "u1",
                      "sort": "W"
                    }
                  ]
                },
                {
                  "var": "z",
                  "sort": "W"
                }
              ],
              "as": "old"
            }
          ],
          "fresh": [],
          "roots": [
            "old"
          ],
          "tag": "ok"
        },
        {
          "name": "top_Small",
          "patterns": [
            {
              "ctor": "Small",
              "args": [
                {
                  "var": "u0",
                  "sort": "W"
                }
              ],
              "as": "old"
            }
          ],
          "fresh": [],
          "roots": [
            "old"
          ],
          "tag": "ok"
        },
        {
          "name": "top_Plug",
          "patterns": [
            {
              "ctor": "Plug",
              "args": [
                {
                  "var": "u0",
                  "sort": "K"
                },
                {
                  "var": "u1",
                  "sort": "W"
                }
              ],
              "as": "old"
            }
          ],
          "fresh": [],
          "roots": [
            "old"
          ],
          "tag": "ok"
        }
      ],
      "expected": {
        "status": "accepted"
      }
    },
    {
      "name": "stack_init",
      "inputs": [],
      "outputs": [
        "S"
      ],
      "budget": {
        "r": 0,
        "A": 1
      },
      "contracts": {
        "ok": [
          [
            [
              {
                "post": [
                  0,
                  0
                ]
              }
            ],
            []
          ]
        ]
      },
      "rules": [
        {
          "name": "init",
          "patterns": [],
          "fresh": [
            {
              "id": "out",
              "ctor": "Nil",
              "args": []
            }
          ],
          "roots": [
            "out"
          ],
          "tag": "ok"
        }
      ],
      "expected": {
        "status": "accepted"
      }
    },
    {
      "name": "stack_push_a",
      "inputs": [
        "S"
      ],
      "outputs": [
        "S"
      ],
      "budget": {
        "r": 0,
        "A": 1
      },
      "contracts": {
        "ok": [
          [
            [
              {
                "post": [
                  0,
                  0
                ]
              }
            ],
            [
              "a",
              {
                "pre": [
                  0,
                  0
                ]
              }
            ]
          ]
        ]
      },
      "rules": [
        {
          "name": "push",
          "patterns": [
            {
              "var": "x",
              "sort": "S"
            }
          ],
          "fresh": [
            {
              "id": "out",
              "ctor": "ConsA",
              "args": [
                "x"
              ]
            }
          ],
          "roots": [
            "out"
          ],
          "tag": "ok"
        }
      ],
      "expected": {
        "status": "accepted"
      }
    },
    {
      "name": "stack_push_b",
      "inputs": [
        "S"
      ],
      "outputs": [
        "S"
      ],
      "budget": {
        "r": 0,
        "A": 1
      },
      "contracts": {
        "ok": [
          [
            [
              {
                "post": [
                  0,
                  0
                ]
              }
            ],
            [
              "b",
              {
                "pre": [
                  0,
                  0
                ]
              }
            ]
          ]
        ]
      },
      "rules": [
        {
          "name": "push",
          "patterns": [
            {
              "var": "x",
              "sort": "S"
            }
          ],
          "fresh": [
            {
              "id": "out",
              "ctor": "ConsB",
              "args": [
                "x"
              ]
            }
          ],
          "roots": [
            "out"
          ],
          "tag": "ok"
        }
      ],
      "expected": {
        "status": "accepted"
      }
    },
    {
      "name": "stack_pop",
      "inputs": [
        "S"
      ],
      "outputs": [
        "S"
      ],
      "budget": {
        "r": 1,
        "A": 0
      },
      "contracts": {
        "empty": [
          [
            [
              {
                "pre": [
                  0,
                  0
                ]
              }
            ],
            []
          ],
          [
            [
              {
                "post": [
                  0,
                  0
                ]
              }
            ],
            []
          ]
        ],
        "a": [
          [
            [
              {
                "pre": [
                  0,
                  0
                ]
              }
            ],
            [
              "a",
              {
                "post": [
                  0,
                  0
                ]
              }
            ]
          ]
        ],
        "b": [
          [
            [
              {
                "pre": [
                  0,
                  0
                ]
              }
            ],
            [
              "b",
              {
                "post": [
                  0,
                  0
                ]
              }
            ]
          ]
        ]
      },
      "rules": [
        {
          "name": "nil",
          "patterns": [
            {
              "ctor": "Nil",
              "args": [],
              "as": "old"
            }
          ],
          "fresh": [],
          "roots": [
            "old"
          ],
          "tag": "empty"
        },
        {
          "name": "a",
          "patterns": [
            {
              "ctor": "ConsA",
              "args": [
                {
                  "var": "x",
                  "sort": "S"
                }
              ]
            }
          ],
          "fresh": [],
          "roots": [
            "x"
          ],
          "tag": "a"
        },
        {
          "name": "b",
          "patterns": [
            {
              "ctor": "ConsB",
              "args": [
                {
                  "var": "x",
                  "sort": "S"
                }
              ]
            }
          ],
          "fresh": [],
          "roots": [
            "x"
          ],
          "tag": "b"
        }
      ],
      "expected": {
        "status": "accepted"
      }
    },
    {
      "name": "context_compose",
      "inputs": [
        "K",
        "K"
      ],
      "outputs": [
        "K"
      ],
      "budget": {
        "r": 0,
        "A": 1
      },
      "contracts": {
        "ok": [
          [
            [
              {
                "post": [
                  0,
                  0
                ]
              }
            ],
            [
              {
                "pre": [
                  0,
                  0
                ]
              },
              {
                "pre": [
                  1,
                  0
                ]
              }
            ]
          ],
          [
            [
              {
                "post": [
                  0,
                  1
                ]
              }
            ],
            [
              {
                "pre": [
                  1,
                  1
                ]
              },
              {
                "pre": [
                  0,
                  1
                ]
              }
            ]
          ]
        ]
      },
      "rules": [
        {
          "name": "compose",
          "patterns": [
            {
              "var": "k",
              "sort": "K"
            },
            {
              "var": "l",
              "sort": "K"
            }
          ],
          "fresh": [
            {
              "id": "out",
              "ctor": "Compose",
              "args": [
                "k",
                "l"
              ]
            }
          ],
          "roots": [
            "out"
          ],
          "tag": "ok"
        }
      ],
      "expected": {
        "status": "accepted"
      }
    },
    {
      "name": "context_plug",
      "inputs": [
        "K",
        "W"
      ],
      "outputs": [
        "W"
      ],
      "budget": {
        "r": 0,
        "A": 1
      },
      "contracts": {
        "ok": [
          [
            [
              {
                "post": [
                  0,
                  0
                ]
              }
            ],
            [
              {
                "pre": [
                  0,
                  0
                ]
              },
              {
                "pre": [
                  1,
                  0
                ]
              },
              {
                "pre": [
                  0,
                  1
                ]
              }
            ]
          ]
        ]
      },
      "rules": [
        {
          "name": "plug",
          "patterns": [
            {
              "var": "k",
              "sort": "K"
            },
            {
              "var": "w",
              "sort": "W"
            }
          ],
          "fresh": [
            {
              "id": "out",
              "ctor": "Plug",
              "args": [
                "k",
                "w"
              ]
            }
          ],
          "roots": [
            "out"
          ],
          "tag": "ok"
        }
      ],
      "expected": {
        "status": "accepted"
      }
    },
    {
      "name": "concat_boundary_algebra_only",
      "inputs": [
        "W",
        "W",
        "W",
        "W",
        "W"
      ],
      "outputs": [
        "N"
      ],
      "budget": {
        "r": 0,
        "A": 4
      },
      "contracts": {
        "ok": [
          [
            [
              {
                "post": [
                  0,
                  0
                ]
              }
            ],
            [
              {
                "pre": [
                  0,
                  0
                ]
              },
              {
                "pre": [
                  1,
                  0
                ]
              },
              {
                "pre": [
                  2,
                  0
                ]
              },
              {
                "pre": [
                  3,
                  0
                ]
              },
              {
                "pre": [
                  4,
                  0
                ]
              }
            ]
          ]
        ]
      },
      "rules": [
        {
          "name": "move_suffix_to_child",
          "patterns": [
            {
              "var": "p",
              "sort": "W"
            },
            {
              "var": "c",
              "sort": "W"
            },
            {
              "var": "s",
              "sort": "W"
            },
            {
              "var": "y",
              "sort": "W"
            },
            {
              "var": "z",
              "sort": "W"
            }
          ],
          "fresh": [
            {
              "id": "stored",
              "ctor": "Small",
              "args": [
                "s"
              ]
            },
            {
              "id": "child",
              "ctor": "Cat",
              "args": [
                "c",
                "stored"
              ]
            },
            {
              "id": "pair",
              "ctor": "Pair",
              "args": [
                "y",
                "z"
              ]
            },
            {
              "id": "out",
              "ctor": "Left",
              "args": [
                "p",
                "child",
                "pair"
              ]
            }
          ],
          "roots": [
            "out"
          ],
          "tag": "ok"
        }
      ],
      "expected": {
        "status": "accepted"
      }
    },
    {
      "name": "wrong_concat_order",
      "inputs": [
        "W",
        "W"
      ],
      "outputs": [
        "W"
      ],
      "budget": {
        "r": 0,
        "A": 1
      },
      "contracts": {
        "ok": [
          [
            [
              {
                "post": [
                  0,
                  0
                ]
              }
            ],
            [
              {
                "pre": [
                  0,
                  0
                ]
              },
              {
                "pre": [
                  1,
                  0
                ]
              }
            ]
          ]
        ]
      },
      "rules": [
        {
          "name": "join",
          "patterns": [
            {
              "var": "x",
              "sort": "W"
            },
            {
              "var": "y",
              "sort": "W"
            }
          ],
          "fresh": [
            {
              "id": "out",
              "ctor": "Cat",
              "args": [
                "y",
                "x"
              ]
            }
          ],
          "roots": [
            "out"
          ],
          "tag": "ok"
        }
      ],
      "expected": {
        "status": "rejected",
        "stage": "equation"
      }
    },
    {
      "name": "allocation_understated",
      "inputs": [
        "W",
        "W"
      ],
      "outputs": [
        "W"
      ],
      "budget": {
        "r": 0,
        "A": 0
      },
      "contracts": {
        "ok": [
          [
            [
              {
                "post": [
                  0,
                  0
                ]
              }
            ],
            [
              {
                "pre": [
                  0,
                  0
                ]
              },
              {
                "pre": [
                  1,
                  0
                ]
              }
            ]
          ]
        ]
      },
      "rules": [
        {
          "name": "join",
          "patterns": [
            {
              "var": "x",
              "sort": "W"
            },
            {
              "var": "y",
              "sort": "W"
            }
          ],
          "fresh": [
            {
              "id": "out",
              "ctor": "Cat",
              "args": [
                "x",
                "y"
              ]
            }
          ],
          "roots": [
            "out"
          ],
          "tag": "ok"
        }
      ],
      "expected": {
        "status": "rejected",
        "stage": "resource"
      }
    },
    {
      "name": "fresh_cycle",
      "inputs": [
        "W",
        "W"
      ],
      "outputs": [
        "W"
      ],
      "budget": {
        "r": 0,
        "A": 1
      },
      "contracts": {
        "ok": [
          [
            [
              {
                "post": [
                  0,
                  0
                ]
              }
            ],
            [
              {
                "pre": [
                  0,
                  0
                ]
              },
              {
                "pre": [
                  1,
                  0
                ]
              }
            ]
          ]
        ]
      },
      "rules": [
        {
          "name": "join",
          "patterns": [
            {
              "var": "x",
              "sort": "W"
            },
            {
              "var": "y",
              "sort": "W"
            }
          ],
          "fresh": [
            {
              "id": "out",
              "ctor": "Cat",
              "args": [
                "out",
                "x"
              ]
            }
          ],
          "roots": [
            "out"
          ],
          "tag": "ok"
        }
      ],
      "expected": {
        "status": "rejected",
        "stage": "shape"
      }
    },
    {
      "name": "missing_pop_branch",
      "inputs": [
        "S"
      ],
      "outputs": [
        "S"
      ],
      "budget": {
        "r": 1,
        "A": 0
      },
      "contracts": {
        "empty": [
          [
            [
              {
                "pre": [
                  0,
                  0
                ]
              }
            ],
            []
          ],
          [
            [
              {
                "post": [
                  0,
                  0
                ]
              }
            ],
            []
          ]
        ],
        "a": [
          [
            [
              {
                "pre": [
                  0,
                  0
                ]
              }
            ],
            [
              "a",
              {
                "post": [
                  0,
                  0
                ]
              }
            ]
          ]
        ],
        "b": [
          [
            [
              {
                "pre": [
                  0,
                  0
                ]
              }
            ],
            [
              "b",
              {
                "post": [
                  0,
                  0
                ]
              }
            ]
          ]
        ]
      },
      "rules": [
        {
          "name": "nil",
          "patterns": [
            {
              "ctor": "Nil",
              "args": [],
              "as": "old"
            }
          ],
          "fresh": [],
          "roots": [
            "old"
          ],
          "tag": "empty"
        },
        {
          "name": "a",
          "patterns": [
            {
              "ctor": "ConsA",
              "args": [
                {
                  "var": "x",
                  "sort": "S"
                }
              ]
            }
          ],
          "fresh": [],
          "roots": [
            "x"
          ],
          "tag": "a"
        }
      ],
      "expected": {
        "status": "rejected",
        "stage": "coverage"
      }
    },
    {
      "name": "overlapping_pop_rules",
      "inputs": [
        "S"
      ],
      "outputs": [
        "S"
      ],
      "budget": {
        "r": 1,
        "A": 0
      },
      "contracts": {
        "empty": [
          [
            [
              {
                "pre": [
                  0,
                  0
                ]
              }
            ],
            []
          ],
          [
            [
              {
                "post": [
                  0,
                  0
                ]
              }
            ],
            []
          ]
        ],
        "a": [
          [
            [
              {
                "pre": [
                  0,
                  0
                ]
              }
            ],
            [
              "a",
              {
                "post": [
                  0,
                  0
                ]
              }
            ]
          ]
        ],
        "b": [
          [
            [
              {
                "pre": [
                  0,
                  0
                ]
              }
            ],
            [
              "b",
              {
                "post": [
                  0,
                  0
                ]
              }
            ]
          ]
        ]
      },
      "rules": [
        {
          "name": "nil",
          "patterns": [
            {
              "ctor": "Nil",
              "args": [],
              "as": "old"
            }
          ],
          "fresh": [],
          "roots": [
            "old"
          ],
          "tag": "empty"
        },
        {
          "name": "a",
          "patterns": [
            {
              "ctor": "ConsA",
              "args": [
                {
                  "var": "x",
                  "sort": "S"
                }
              ]
            }
          ],
          "fresh": [],
          "roots": [
            "x"
          ],
          "tag": "a"
        },
        {
          "name": "b",
          "patterns": [
            {
              "ctor": "ConsB",
              "args": [
                {
                  "var": "x",
                  "sort": "S"
                }
              ]
            }
          ],
          "fresh": [],
          "roots": [
            "x"
          ],
          "tag": "b"
        },
        {
          "name": "nil",
          "patterns": [
            {
              "ctor": "Nil",
              "args": [],
              "as": "old"
            }
          ],
          "fresh": [],
          "roots": [
            "old"
          ],
          "tag": "empty"
        }
      ],
      "expected": {
        "status": "rejected",
        "stage": "coverage"
      }
    },
    {
      "name": "radius_understated",
      "inputs": [
        "S"
      ],
      "outputs": [
        "S"
      ],
      "budget": {
        "r": 0,
        "A": 0
      },
      "contracts": {
        "empty": [
          [
            [
              {
                "pre": [
                  0,
                  0
                ]
              }
            ],
            []
          ],
          [
            [
              {
                "post": [
                  0,
                  0
                ]
              }
            ],
            []
          ]
        ],
        "a": [
          [
            [
              {
                "pre": [
                  0,
                  0
                ]
              }
            ],
            [
              "a",
              {
                "post": [
                  0,
                  0
                ]
              }
            ]
          ]
        ],
        "b": [
          [
            [
              {
                "pre": [
                  0,
                  0
                ]
              }
            ],
            [
              "b",
              {
                "post": [
                  0,
                  0
                ]
              }
            ]
          ]
        ]
      },
      "rules": [
        {
          "name": "nil",
          "patterns": [
            {
              "ctor": "Nil",
              "args": [],
              "as": "old"
            }
          ],
          "fresh": [],
          "roots": [
            "old"
          ],
          "tag": "empty"
        },
        {
          "name": "a",
          "patterns": [
            {
              "ctor": "ConsA",
              "args": [
                {
                  "var": "x",
                  "sort": "S"
                }
              ]
            }
          ],
          "fresh": [],
          "roots": [
            "x"
          ],
          "tag": "a"
        },
        {
          "name": "b",
          "patterns": [
            {
              "ctor": "ConsB",
              "args": [
                {
                  "var": "x",
                  "sort": "S"
                }
              ]
            }
          ],
          "fresh": [],
          "roots": [
            "x"
          ],
          "tag": "b"
        }
      ],
      "expected": {
        "status": "rejected",
        "stage": "resource"
      }
    },
    {
      "name": "pop_retains_head",
      "inputs": [
        "S"
      ],
      "outputs": [
        "S"
      ],
      "budget": {
        "r": 1,
        "A": 0
      },
      "contracts": {
        "empty": [
          [
            [
              {
                "pre": [
                  0,
                  0
                ]
              }
            ],
            []
          ],
          [
            [
              {
                "post": [
                  0,
                  0
                ]
              }
            ],
            []
          ]
        ],
        "a": [
          [
            [
              {
                "pre": [
                  0,
                  0
                ]
              }
            ],
            [
              "a",
              {
                "post": [
                  0,
                  0
                ]
              }
            ]
          ]
        ],
        "b": [
          [
            [
              {
                "pre": [
                  0,
                  0
                ]
              }
            ],
            [
              "b",
              {
                "post": [
                  0,
                  0
                ]
              }
            ]
          ]
        ]
      },
      "rules": [
        {
          "name": "nil",
          "patterns": [
            {
              "ctor": "Nil",
              "args": [],
              "as": "old"
            }
          ],
          "fresh": [],
          "roots": [
            "old"
          ],
          "tag": "empty"
        },
        {
          "name": "a",
          "patterns": [
            {
              "ctor": "ConsA",
              "args": [
                {
                  "var": "x",
                  "sort": "S"
                }
              ],
              "as": "old"
            }
          ],
          "fresh": [],
          "roots": [
            "old"
          ],
          "tag": "a"
        },
        {
          "name": "b",
          "patterns": [
            {
              "ctor": "ConsB",
              "args": [
                {
                  "var": "x",
                  "sort": "S"
                }
              ]
            }
          ],
          "fresh": [],
          "roots": [
            "x"
          ],
          "tag": "b"
        }
      ],
      "expected": {
        "status": "rejected",
        "stage": "equation"
      }
    },
    {
      "name": "wrong_context_order",
      "inputs": [
        "K",
        "K"
      ],
      "outputs": [
        "K"
      ],
      "budget": {
        "r": 0,
        "A": 1
      },
      "contracts": {
        "ok": [
          [
            [
              {
                "post": [
                  0,
                  0
                ]
              }
            ],
            [
              {
                "pre": [
                  0,
                  0
                ]
              },
              {
                "pre": [
                  1,
                  0
                ]
              }
            ]
          ],
          [
            [
              {
                "post": [
                  0,
                  1
                ]
              }
            ],
            [
              {
                "pre": [
                  1,
                  1
                ]
              },
              {
                "pre": [
                  0,
                  1
                ]
              }
            ]
          ]
        ]
      },
      "rules": [
        {
          "name": "compose",
          "patterns": [
            {
              "var": "k",
              "sort": "K"
            },
            {
              "var": "l",
              "sort": "K"
            }
          ],
          "fresh": [
            {
              "id": "out",
              "ctor": "Compose",
              "args": [
                "l",
                "k"
              ]
            }
          ],
          "roots": [
            "out"
          ],
          "tag": "ok"
        }
      ],
      "expected": {
        "status": "rejected",
        "stage": "equation"
      }
    },
    {
      "name": "valid_but_not_certified_erasure",
      "inputs": [
        "E"
      ],
      "outputs": [
        "E"
      ],
      "budget": {
        "r": 0,
        "A": 1
      },
      "contracts": {
        "ok": [
          [
            [
              {
                "post": [
                  0,
                  0
                ]
              }
            ],
            [
              {
                "pre": [
                  0,
                  0
                ]
              }
            ]
          ]
        ]
      },
      "rules": [
        {
          "name": "erase",
          "patterns": [
            {
              "var": "x",
              "sort": "E"
            }
          ],
          "fresh": [
            {
              "id": "out",
              "ctor": "Zero",
              "args": []
            }
          ],
          "roots": [
            "out"
          ],
          "tag": "ok"
        }
      ],
      "expected": {
        "status": "rejected",
        "stage": "equation"
      }
    }
  ]
}
