Jump to content

The Principia Machina/TPC-PY/vectors/zone corpus.json: Difference between revisions

From The Invariance Itself
m 1 revision imported
TPC-PY source vectors/zone_corpus.json (0.5.2), SHA-256 80179329b18cfa80; conformed TPS 0.4.0; PROPOSED, not declared (TPC-PY 0.2.0)
Line 2: Line 2:
  "meta": {
  "meta": {
   "name": "tpc_zone_corpus",
   "name": "tpc_zone_corpus",
   "version": "0.5.1",
   "version": "0.5.2",
   "status": "SELECTED D92.1, D98.1, D99.1, D100.1; units D103.1, D104.1, D105.1 (2026-09-22); the D108.1 declared form at Option 1 of every slot (2026-09-24, increment 8); D176.1 and D177.1 (2026-09-26, schema 0.5.0); values VERIFIED",
   "status": "SELECTED D92.1, D98.1, D99.1, D100.1; units D103.1, D104.1, D105.1 (2026-09-22); the D108.1 declared form at Option 1 of every slot (2026-09-24, increment 8); D176.1 and D177.1 (2026-09-26, schema 0.5.0); values VERIFIED",
   "conforms_tps": "0.1.0 revision 4 (zone schemas for TPS 2.2-2.4; per-zone digests TPS 2.5.9; successor classes TPS 2.1.5; T1 of guide 3.6); schema 0.5.0 per D176.1 and D177.1 as taken 2026-09-26 (TPS revision 6 text pending)",
   "conforms_tps": "0.1.0 revision 4 (zone schemas for TPS 2.2-2.4; per-zone digests TPS 2.5.9; successor classes TPS 2.1.5; T1 of guide 3.6); schema 0.5.0 per D176.1 and D177.1 as taken 2026-09-26 (TPS revision 6 text pending)",
   "module": "tpc_zone 0.5.0 (proposed), schema 0.5.0 (tpc_units 0.1.1, tpc_form 0.2.0 unreleased, with D177.1)",
   "module": "tpc_zone 0.5.1 (proposed with TPC-PY 0.2.0), schema 0.5.0 (tpc_units 0.1.1, tpc_form 0.2.1, with D177.1)",
   "note": "Validator, dimension and successor expectations are hand-derived. Digest cases carry their preimage; expect = SHA-256(preimage), auditable with an external sha256sum. preimage/tms-minimal-hand-built was written by hand and matched byte for byte. The toy TFK is a mass on a linear spring with motion confined to z = 0 (C_NOZ carries UNIT m from schema 0.3.0); under schema 0.4.0 every zone digest moved once more, by the version tag; the spring with its forms adds a DOF t, an entry E_t and the declared forms (increment 8). Both are test fixtures, not physics under research. Both residences MUST reproduce every expect. 0.4.1 (S15) adds, and changes no earlier case: a DIMENSION whose repeated bases sum past -9999..9999 is refused, its canonical form lying outside the grammar; the canonical token is bounded to four digits; no admitted zone's digest moves. 0.5.0 (schema 0.5.0; D176.1, D177.1): ROLE on every LAW (required) and ROLE INPUT on a DOF (optional); the TPK PARAMETERS part with D_VARIABLES ONE or SEVERAL, ONE when absent and serialized ONE; STRUCTURE_CHECK in the TMS PARAMETERS, ON when absent and serialized ON; T1's D-variable rules. Every zone digest moved once, by the version tag and the new fields; every fixture LAW carries a ROLE chosen by its physics. 0.5.1 (S33, 2026-09-26): a LAW restating the motion of a FIXed DOF (the toy's and the spring's FREE_Z, corner_fix_t's EOM_Z) carries ROLE CONSTRAINT, not EOM(z); the toy's and the spring's D(TPK) and D(TFK) move once more; successor/s050-law-role-changed now changes FREE_Z back to EOM(z). No other answer moves."
   "note": "Validator, dimension and successor expectations are hand-derived. Digest cases carry their preimage; expect = SHA-256(preimage), auditable with an external sha256sum. preimage/tms-minimal-hand-built was written by hand and matched byte for byte. The toy TFK is a mass on a linear spring with motion confined to z = 0 (C_NOZ carries UNIT m from schema 0.3.0); under schema 0.4.0 every zone digest moved once more, by the version tag; the spring with its forms adds a DOF t, an entry E_t and the declared forms (increment 8). Both are test fixtures, not physics under research. Both residences MUST reproduce every expect. 0.4.1 (S15) adds, and changes no earlier case: a DIMENSION whose repeated bases sum past -9999..9999 is refused, its canonical form lying outside the grammar; the canonical token is bounded to four digits; no admitted zone's digest moves. 0.5.0 (schema 0.5.0; D176.1, D177.1): ROLE on every LAW (required) and ROLE INPUT on a DOF (optional); the TPK PARAMETERS part with D_VARIABLES ONE or SEVERAL, ONE when absent and serialized ONE; STRUCTURE_CHECK in the TMS PARAMETERS, ON when absent and serialized ON; T1's D-variable rules. Every zone digest moved once, by the version tag and the new fields; every fixture LAW carries a ROLE chosen by its physics. 0.5.1 (S33, 2026-09-26): a LAW restating the motion of a FIXed DOF (the toy's and the spring's FREE_Z, corner_fix_t's EOM_Z) carries ROLE CONSTRAINT, not EOM(z); the toy's and the spring's D(TPK) and D(TFK) move once more; successor/s050-law-role-changed now changes FREE_Z back to EOM(z). No other answer moves. 0.5.2 (C-MS-5, increment 11, 2026-09-28): 34 decode/ cases, each a JSON {} where a list is read, a JSON [] where an object is read, an object keyed 0 read as a list, or a valid empty object; TPC-PHP now reads the JSON as written (tpc_zone 0.5.1). No earlier answer moves."
  },
  },
  "cases": [
  "cases": [
Line 32,388: Line 32,388:
   "note": "a DOF's ROLE enters after its DIMENSION; a DOF without ROLE serializes as under 0.4.0",
   "note": "a DOF's ROLE enters after its DIMENSION; a DOF without ROLE serializes as under 0.4.0",
   "expect": "l4:sTPK6:s0.5.040:l11:sPARAMETERS22:l12:sD_VARIABLES4:sONE130:l4:sDOF119:l34:l5:sNAME2:sv10:sDIMENSION7:sL1 T-130:l5:sNAME2:sx10:sDIMENSION3:sL145:l5:sNAME2:sz10:sDIMENSION3:sL15:sROLE6:sINPUT174:l9:sCONSTANT158:l36:l5:sNAME4:sk_s10:sDIMENSION7:sM1 T-230:l5:sNAME2:sm10:sDIMENSION3:sM182:l5:sNAME6:sx_max10:sDIMENSION3:sL16:sVALUE5:s5e-25:sUNIT2:sm12:sUNCERTAINTY5:s1e-3266:l4:sLAW255:l80:l5:sNAME7:sFREE_Z10:sSTATEMENT12:sd2z/dt2 = 05:sREFS5:l2:sz5:sROLE11:sCONSTRAINT74:l5:sNAME4:sKIN10:sSTATEMENT10:sdx/dt = v5:sREFS9:l2:sv2:sx5:sROLE7:sEOM(x)91:l5:sNAME3:sN210:sSTATEMENT17:sm dv/dt = -k_s x5:sREFS19:l4:sk_s2:sm2:sv2:sx5:sROLE7:sEOM(v)122:l11:sASSUMPTION103:l99:l5:sNAME6:sA_lin12:sPROPOSITION51:sthe restoring force is linear in x (Hooke r\u00e9gime)5:sREFS5:l2:sx132:l11:sCONSTRAINT113:l108:l5:sNAME6:sC_NOZ7:sTARGET2:sz7:sACTION4:sFIX10:sSTATEMENT25:smotion confined to z = 06:sVALUE2:s05:sUNIT2:sm88:l9:sBOUNDARY73:l69:l5:sNAME8:sB_small10:sPREDICATE12:s|x| < x_max5:sREFS13:l2:sx6:sx_max"
   "expect": "l4:sTPK6:s0.5.040:l11:sPARAMETERS22:l12:sD_VARIABLES4:sONE130:l4:sDOF119:l34:l5:sNAME2:sv10:sDIMENSION7:sL1 T-130:l5:sNAME2:sx10:sDIMENSION3:sL145:l5:sNAME2:sz10:sDIMENSION3:sL15:sROLE6:sINPUT174:l9:sCONSTANT158:l36:l5:sNAME4:sk_s10:sDIMENSION7:sM1 T-230:l5:sNAME2:sm10:sDIMENSION3:sM182:l5:sNAME6:sx_max10:sDIMENSION3:sL16:sVALUE5:s5e-25:sUNIT2:sm12:sUNCERTAINTY5:s1e-3266:l4:sLAW255:l80:l5:sNAME7:sFREE_Z10:sSTATEMENT12:sd2z/dt2 = 05:sREFS5:l2:sz5:sROLE11:sCONSTRAINT74:l5:sNAME4:sKIN10:sSTATEMENT10:sdx/dt = v5:sREFS9:l2:sv2:sx5:sROLE7:sEOM(x)91:l5:sNAME3:sN210:sSTATEMENT17:sm dv/dt = -k_s x5:sREFS19:l4:sk_s2:sm2:sv2:sx5:sROLE7:sEOM(v)122:l11:sASSUMPTION103:l99:l5:sNAME6:sA_lin12:sPROPOSITION51:sthe restoring force is linear in x (Hooke r\u00e9gime)5:sREFS5:l2:sx132:l11:sCONSTRAINT113:l108:l5:sNAME6:sC_NOZ7:sTARGET2:sz7:sACTION4:sFIX10:sSTATEMENT25:smotion confined to z = 06:sVALUE2:s05:sUNIT2:sm88:l9:sBOUNDARY73:l69:l5:sNAME8:sB_small10:sPREDICATE12:s|x| < x_max5:sREFS13:l2:sx6:sx_max"
  },
  {
  "id": "decode/t1-tpk-list",
  "fn": "t1_well_formed",
  "input": {
    "tpk": []
  },
  "note": "a JSON [] is not a TPK (it read as an empty TPK and passed T1)",
  "expect": "[false,[TPK: zone is not an object]]"
  },
  {
  "id": "decode/t1-tpk-empty-object",
  "fn": "t1_well_formed",
  "input": {
    "tpk": {}
  },
  "note": "a JSON {} is the empty TPK: every kind absent",
  "expect": "[true,[]]"
  },
  {
  "id": "decode/t1-kind-object",
  "fn": "t1_well_formed",
  "input": {
    "tpk": {
    "DOF": {}
    }
  },
  "expect": "[false,[TPK kind DOF is not a list]]"
  },
  {
  "id": "decode/t1-kind-zero-keyed",
  "fn": "t1_well_formed",
  "input": {
    "tpk": {
    "DOF": {
      "0": {
      "NAME": "x",
      "DIMENSION": "L1"
      }
    }
    }
  },
  "note": "an object keyed 0 is not a list",
  "expect": "[false,[TPK kind DOF is not a list]]"
  },
  {
  "id": "decode/t1-entry-list",
  "fn": "t1_well_formed",
  "input": {
    "tpk": {
    "DOF": [
      []
    ]
    }
  },
  "expect": "[false,[TPK kind DOF: entry is not an object]]"
  },
  {
  "id": "decode/t1-entry-empty-object",
  "fn": "t1_well_formed",
  "input": {
    "tpk": {
    "DOF": [
      {}
    ]
    }
  },
  "expect": "[false,[DOF:?: missing field DIMENSION,DOF:?: missing field NAME]]"
  },
  {
  "id": "decode/t1-parameters-list",
  "fn": "t1_well_formed",
  "input": {
    "tpk": {
    "PARAMETERS": []
    }
  },
  "expect": "[false,[TPK: PARAMETERS is not an object]]"
  },
  {
  "id": "decode/t1-parameters-empty-object",
  "fn": "t1_well_formed",
  "input": {
    "tpk": {
    "PARAMETERS": {}
    }
  },
  "note": "an empty PARAMETERS part is valid: D_VARIABLES is optional",
  "expect": "[true,[]]"
  },
  {
  "id": "decode/t1-parameters-zero-keyed",
  "fn": "t1_well_formed",
  "input": {
    "tpk": {
    "PARAMETERS": {
      "0": "ONE"
    }
    }
  },
  "expect": "[false,[TPK PARAMETERS: unknown field 0]]"
  },
  {
  "id": "decode/t1-unknown-kind-zero",
  "fn": "t1_well_formed",
  "input": {
    "tpk": {
    "0": [],
    "DOF": [
      {
      "NAME": "x",
      "DIMENSION": "L1"
      }
    ]
    }
  },
  "note": "a key 0 beside named keys; the name is echoed as written",
  "expect": "[false,[TPK: unknown kind 0]]"
  },
  {
  "id": "decode/t1-refs-object",
  "fn": "t1_well_formed",
  "input": {
    "tpk": {
    "DOF": [
      {
      "NAME": "x",
      "DIMENSION": "L1"
      }
    ],
    "LAW": [
      {
      "NAME": "L",
      "STATEMENT": "x is free",
      "REFS": {},
      "ROLE": "DEFINITION"
      }
    ]
    }
  },
  "note": "REFS {} is not a list of names",
  "expect": "[false,[LAW:L: field REFS has the wrong type]]"
  },
  {
  "id": "decode/t1-refs-zero-keyed",
  "fn": "t1_well_formed",
  "input": {
    "tpk": {
    "DOF": [
      {
      "NAME": "x",
      "DIMENSION": "L1"
      }
    ],
    "LAW": [
      {
      "NAME": "L",
      "STATEMENT": "x is free",
      "REFS": {
        "0": "x"
      },
      "ROLE": "DEFINITION"
      }
    ]
    }
  },
  "expect": "[false,[LAW:L: field REFS has the wrong type]]"
  },
  {
  "id": "decode/trm-list",
  "fn": "trm_well_formed",
  "input": {
    "trm": [],
    "tpk": {
    "DOF": [
      {
      "NAME": "x",
      "DIMENSION": "L1"
      }
    ]
    }
  },
  "expect": "[false,[TrM: zone is not an object]]"
  },
  {
  "id": "decode/trm-header-list",
  "fn": "trm_well_formed",
  "input": {
    "trm": {
    "HEADER": [],
    "ENTRIES": []
    },
    "tpk": {
    "DOF": [
      {
      "NAME": "x",
      "DIMENSION": "L1"
      }
    ]
    }
  },
  "expect": "[false,[TrM: HEADER is not an object]]"
  },
  {
  "id": "decode/trm-header-empty-object",
  "fn": "trm_well_formed",
  "input": {
    "trm": {
    "HEADER": {},
    "ENTRIES": []
    },
    "tpk": {
    "DOF": [
      {
      "NAME": "x",
      "DIMENSION": "L1"
      }
    ]
    }
  },
  "expect": "[false,[TrM HEADER: missing part ENVIRONMENT_INVENTORY,TrM HEADER: missing part SIGNATURE,TrM HEADER: missing part TRANSFORMATIONS]]"
  },
  {
  "id": "decode/trm-entries-object",
  "fn": "trm_well_formed",
  "input": {
    "trm": {
    "HEADER": {
      "ENVIRONMENT_INVENTORY": [],
      "SIGNATURE": [],
      "TRANSFORMATIONS": []
    },
    "ENTRIES": {}
    },
    "tpk": {
    "DOF": [
      {
      "NAME": "x",
      "DIMENSION": "L1"
      }
    ]
    }
  },
  "expect": "[false,[TrM ENTRIES is not a list]]"
  },
  {
  "id": "decode/trm-inventory-zero-keyed",
  "fn": "trm_well_formed",
  "input": {
    "trm": {
    "HEADER": {
      "ENVIRONMENT_INVENTORY": {
      "0": {
        "ENVIRONMENT_QUANTITY": "position",
        "DIMENSION": "L1"
      }
      },
      "SIGNATURE": [],
      "TRANSFORMATIONS": []
    },
    "ENTRIES": []
    },
    "tpk": {
    "DOF": [
      {
      "NAME": "x",
      "DIMENSION": "L1"
      }
    ]
    }
  },
  "expect": "[false,[TrM ENVIRONMENT_INVENTORY is not a list]]"
  },
  {
  "id": "decode/trm-over-object",
  "fn": "trm_well_formed",
  "input": {
    "trm": {
    "HEADER": {
      "ENVIRONMENT_INVENTORY": [],
      "SIGNATURE": [
      {
        "NAME": "s",
        "OVER": {},
        "IMAGE": "i"
      }
      ],
      "TRANSFORMATIONS": []
    },
    "ENTRIES": []
    },
    "tpk": {
    "DOF": [
      {
      "NAME": "x",
      "DIMENSION": "L1"
      }
    ]
    }
  },
  "expect": "[false,[SIGNATURE:s: field OVER has the wrong type]]"
  },
  {
  "id": "decode/trm-valid-x",
  "fn": "trm_well_formed",
  "input": {
    "trm": {
    "HEADER": {
      "ENVIRONMENT_INVENTORY": [
      {
        "ENVIRONMENT_QUANTITY": "position",
        "DIMENSION": "L1"
      }
      ],
      "SIGNATURE": [],
      "TRANSFORMATIONS": []
    },
    "ENTRIES": [
      {
      "NAME": "E_x",
      "DOF": "x",
      "DOMAIN": "always",
      "ENVIRONMENT_QUANTITY": "position",
      "IDENTIFICATION": "x is the position",
      "FALSIFIER": "a measured position off x",
      "FALSIFIER_CLASS": "F2",
      "BEARS": [],
      "DIMENSION": "L1"
      }
    ]
    },
    "tpk": {
    "DOF": [
      {
      "NAME": "x",
      "DIMENSION": "L1"
      }
    ]
    }
  },
  "note": "the one-entry TrM the next case reads against a TPK whose DOF kind is not a list",
  "expect": "[true,[]]"
  },
  {
  "id": "decode/trm-tpk-kind-zero-keyed",
  "fn": "trm_well_formed",
  "input": {
    "trm": {
    "HEADER": {
      "ENVIRONMENT_INVENTORY": [
      {
        "ENVIRONMENT_QUANTITY": "position",
        "DIMENSION": "L1"
      }
      ],
      "SIGNATURE": [],
      "TRANSFORMATIONS": []
    },
    "ENTRIES": [
      {
      "NAME": "E_x",
      "DOF": "x",
      "DOMAIN": "always",
      "ENVIRONMENT_QUANTITY": "position",
      "IDENTIFICATION": "x is the position",
      "FALSIFIER": "a measured position off x",
      "FALSIFIER_CLASS": "F2",
      "BEARS": [],
      "DIMENSION": "L1"
      }
    ]
    },
    "tpk": {
    "DOF": {
      "0": {
      "NAME": "x",
      "DIMENSION": "L1"
      }
    }
    }
  },
  "note": "the TPK's DOF kind is not a list, so the TPK declares no DOF (it read as the list [x])",
  "expect": "[false,[ENTRY:E_x: DOF x is not a TPK DOF]]"
  },
  {
  "id": "decode/tms-valid-minimal",
  "fn": "tms_well_formed",
  "input": {
    "tms": {
    "PARAMETERS": {
      "STEP_CONVENTION": "x",
      "K": "2",
      "N_X": 2,
      "S_MAX": 1
    }
    }
  },
  "expect": "[true,[]]"
  },
  {
  "id": "decode/tms-list",
  "fn": "tms_well_formed",
  "input": {
    "tms": []
  },
  "expect": "[false,[TMS: zone is not an object]]"
  },
  {
  "id": "decode/tms-parameters-list",
  "fn": "tms_well_formed",
  "input": {
    "tms": {
    "PARAMETERS": []
    }
  },
  "expect": "[false,[TMS: PARAMETERS is not an object]]"
  },
  {
  "id": "decode/tms-parameters-empty-object",
  "fn": "tms_well_formed",
  "input": {
    "tms": {
    "PARAMETERS": {}
    }
  },
  "expect": "[false,[PARAMETERS: missing field K,PARAMETERS: missing field N_X,PARAMETERS: missing field STEP_CONVENTION,PARAMETERS: missing field S_MAX]]"
  },
  {
  "id": "decode/tms-parameters-zero-keyed",
  "fn": "tms_well_formed",
  "input": {
    "tms": {
    "PARAMETERS": {
      "0": "x"
    }
    }
  },
  "expect": "[false,[PARAMETERS: missing field K,PARAMETERS: missing field N_X,PARAMETERS: missing field STEP_CONVENTION,PARAMETERS: missing field S_MAX,PARAMETERS: unknown field 0]]"
  },
  {
  "id": "decode/tms-yardsticks-object",
  "fn": "tms_well_formed",
  "input": {
    "tms": {
    "PARAMETERS": {
      "STEP_CONVENTION": "x",
      "K": "2",
      "N_X": 2,
      "S_MAX": 1
    },
    "YARDSTICKS": {}
    }
  },
  "note": "it read as no yardstick and passed",
  "expect": "[false,[TMS YARDSTICKS is not a list]]"
  },
  {
  "id": "decode/tms-constants-zero-keyed",
  "fn": "tms_well_formed",
  "input": {
    "tms": {
    "PARAMETERS": {
      "STEP_CONVENTION": "x",
      "K": "2",
      "N_X": 2,
      "S_MAX": 1
    },
    "CONSTANTS": {
      "0": {
      "NAME": "w",
      "VALUE": "1"
      }
    }
    }
  },
  "expect": "[false,[TMS CONSTANTS is not a list]]"
  },
  {
  "id": "decode/tms-yardstick-valid",
  "fn": "tms_well_formed",
  "input": {
    "tms": {
    "PARAMETERS": {
      "STEP_CONVENTION": "x",
      "K": "2",
      "N_X": 2,
      "S_MAX": 1
    },
    "YARDSTICKS": [
      {
      "NAME": "y",
      "KEY": [
        "SR1"
      ],
      "LIMITING": []
      }
    ]
    }
  },
  "expect": "[true,[]]"
  },
  {
  "id": "decode/tms-limiting-object",
  "fn": "tms_well_formed",
  "input": {
    "tms": {
    "PARAMETERS": {
      "STEP_CONVENTION": "x",
      "K": "2",
      "N_X": 2,
      "S_MAX": 1
    },
    "YARDSTICKS": [
      {
      "NAME": "y",
      "KEY": [
        "SR1"
      ],
      "LIMITING": {}
      }
    ]
    }
  },
  "expect": "[false,[YARDSTICK:y: field LIMITING has the wrong type]]"
  },
  {
  "id": "decode/tms-limiting-entry-list",
  "fn": "tms_well_formed",
  "input": {
    "tms": {
    "PARAMETERS": {
      "STEP_CONVENTION": "x",
      "K": "2",
      "N_X": 2,
      "S_MAX": 1
    },
    "YARDSTICKS": [
      {
      "NAME": "y",
      "KEY": [
        "SR1"
      ],
      "LIMITING": [
        []
      ]
      }
    ]
    }
  },
  "note": "a limiting case [] is not an object",
  "expect": "[false,[YARDSTICK:y: field LIMITING has the wrong type]]"
  },
  {
  "id": "decode/tms-limiting-entry-empty-object",
  "fn": "tms_well_formed",
  "input": {
    "tms": {
    "PARAMETERS": {
      "STEP_CONVENTION": "x",
      "K": "2",
      "N_X": 2,
      "S_MAX": 1
    },
    "YARDSTICKS": [
      {
      "NAME": "y",
      "KEY": [
        "SR1"
      ],
      "LIMITING": [
        {}
      ]
      }
    ]
    }
  },
  "expect": "[false,[YARDSTICK:y LIMITING ?: missing field DOMAIN,YARDSTICK:y LIMITING ?: missing field KEY]]"
  },
  {
  "id": "decode/tms-key-object",
  "fn": "tms_well_formed",
  "input": {
    "tms": {
    "PARAMETERS": {
      "STEP_CONVENTION": "x",
      "K": "2",
      "N_X": 2,
      "S_MAX": 1
    },
    "YARDSTICKS": [
      {
      "NAME": "y",
      "KEY": {},
      "LIMITING": []
      }
    ]
    }
  },
  "expect": "[false,[YARDSTICK:y: field KEY has the wrong type]]"
  },
  {
  "id": "decode/digest-tpk-parameters-empty-object",
  "fn": "d_tpk",
  "input": {
    "tpk": {
    "PARAMETERS": {},
    "DOF": [
      {
      "NAME": "x",
      "DIMENSION": "L1"
      }
    ]
    }
  },
  "preimage": "l4:sTPK6:s0.5.040:l11:sPARAMETERS22:l12:sD_VARIABLES4:sONE44:l4:sDOF34:l30:l5:sNAME2:sx10:sDIMENSION3:sL115:l9:sCONSTANT1:l10:l4:sLAW1:l18:l11:sASSUMPTION1:l18:l11:sCONSTRAINT1:l15:l9:sBOUNDARY1:l",
  "note": "a valid empty PARAMETERS object digests as the hand-built minimal TPK",
  "expect": "6851d16e1532b08843089d65cc7b20376756839c3d5f309351c52e8a585079ca"
  },
  {
  "id": "decode/preimage-tpk-empty-object",
  "fn": "zone_preimage",
  "input": {
    "zone": "TPK",
    "value": {}
  },
  "note": "the empty TPK: PARAMETERS serialized with D_VARIABLES ONE and six empty kinds (hand-built)",
  "expect": "l4:sTPK6:s0.5.040:l11:sPARAMETERS22:l12:sD_VARIABLES4:sONE10:l4:sDOF1:l15:l9:sCONSTANT1:l10:l4:sLAW1:l18:l11:sASSUMPTION1:l18:l11:sCONSTRAINT1:l15:l9:sBOUNDARY1:l"
   }
   }
  ]
  ]
}
}



Revision as of 02:10, 30 September 2026

{
 "meta": {
  "name": "tpc_zone_corpus",
  "version": "0.5.2",
  "status": "SELECTED D92.1, D98.1, D99.1, D100.1; units D103.1, D104.1, D105.1 (2026-09-22); the D108.1 declared form at Option 1 of every slot (2026-09-24, increment 8); D176.1 and D177.1 (2026-09-26, schema 0.5.0); values VERIFIED",
  "conforms_tps": "0.1.0 revision 4 (zone schemas for TPS 2.2-2.4; per-zone digests TPS 2.5.9; successor classes TPS 2.1.5; T1 of guide 3.6); schema 0.5.0 per D176.1 and D177.1 as taken 2026-09-26 (TPS revision 6 text pending)",
  "module": "tpc_zone 0.5.1 (proposed with TPC-PY 0.2.0), schema 0.5.0 (tpc_units 0.1.1, tpc_form 0.2.1, with D177.1)",
  "note": "Validator, dimension and successor expectations are hand-derived. Digest cases carry their preimage; expect = SHA-256(preimage), auditable with an external sha256sum. preimage/tms-minimal-hand-built was written by hand and matched byte for byte. The toy TFK is a mass on a linear spring with motion confined to z = 0 (C_NOZ carries UNIT m from schema 0.3.0); under schema 0.4.0 every zone digest moved once more, by the version tag; the spring with its forms adds a DOF t, an entry E_t and the declared forms (increment 8). Both are test fixtures, not physics under research. Both residences MUST reproduce every expect. 0.4.1 (S15) adds, and changes no earlier case: a DIMENSION whose repeated bases sum past -9999..9999 is refused, its canonical form lying outside the grammar; the canonical token is bounded to four digits; no admitted zone's digest moves. 0.5.0 (schema 0.5.0; D176.1, D177.1): ROLE on every LAW (required) and ROLE INPUT on a DOF (optional); the TPK PARAMETERS part with D_VARIABLES ONE or SEVERAL, ONE when absent and serialized ONE; STRUCTURE_CHECK in the TMS PARAMETERS, ON when absent and serialized ON; T1's D-variable rules. Every zone digest moved once, by the version tag and the new fields; every fixture LAW carries a ROLE chosen by its physics. 0.5.1 (S33, 2026-09-26): a LAW restating the motion of a FIXed DOF (the toy's and the spring's FREE_Z, corner_fix_t's EOM_Z) carries ROLE CONSTRAINT, not EOM(z); the toy's and the spring's D(TPK) and D(TFK) move once more; successor/s050-law-role-changed now changes FREE_Z back to EOM(z). No other answer moves. 0.5.2 (C-MS-5, increment 11, 2026-09-28): 34 decode/ cases, each a JSON {} where a list is read, a JSON [] where an object is read, an object keyed 0 read as a list, or a valid empty object; TPC-PHP now reads the JSON as written (tpc_zone 0.5.1). No earlier answer moves."
 },
 "cases": [
  {
   "id": "dim/is_canonical/1",
   "fn": "is_canonical_dimension",
   "input": {
    "s": "1"
   },
   "expect": "true"
  },
  {
   "id": "dim/is_canonical/L1_M1_T-2",
   "fn": "is_canonical_dimension",
   "input": {
    "s": "L1 M1 T-2"
   },
   "expect": "true"
  },
  {
   "id": "dim/is_canonical/TH1",
   "fn": "is_canonical_dimension",
   "input": {
    "s": "TH1"
   },
   "expect": "true"
  },
  {
   "id": "dim/is_canonical/T1_TH1",
   "fn": "is_canonical_dimension",
   "input": {
    "s": "T1 TH1"
   },
   "expect": "true"
  },
  {
   "id": "dim/is_canonical/L-1_TH1",
   "fn": "is_canonical_dimension",
   "input": {
    "s": "L-1 TH1"
   },
   "expect": "true"
  },
  {
   "id": "dim/is_canonical/M1_L1",
   "fn": "is_canonical_dimension",
   "input": {
    "s": "M1 L1"
   },
   "expect": "false"
  },
  {
   "id": "dim/is_canonical/L0",
   "fn": "is_canonical_dimension",
   "input": {
    "s": "L0"
   },
   "expect": "false"
  },
  {
   "id": "dim/is_canonical/L1__T-1",
   "fn": "is_canonical_dimension",
   "input": {
    "s": "L1  T-1"
   },
   "expect": "false"
  },
  {
   "id": "dim/is_canonical/L+1",
   "fn": "is_canonical_dimension",
   "input": {
    "s": "L+1"
   },
   "expect": "false"
  },
  {
   "id": "dim/is_canonical/L1_L2",
   "fn": "is_canonical_dimension",
   "input": {
    "s": "L1 L2"
   },
   "expect": "false"
  },
  {
   "id": "dim/is_canonical/empty",
   "fn": "is_canonical_dimension",
   "input": {
    "s": ""
   },
   "expect": "false"
  },
  {
   "id": "dim/is_canonical/l1",
   "fn": "is_canonical_dimension",
   "input": {
    "s": "l1"
   },
   "expect": "false"
  },
  {
   "id": "dim/canon/L2,M1,T-2",
   "fn": "canon_dimension",
   "input": {
    "exps": {
     "M": 1,
     "L": 2,
     "T": -2
    }
   },
   "expect": "L2 M1 T-2"
  },
  {
   "id": "dim/canon/none",
   "fn": "canon_dimension",
   "input": {
    "exps": {}
   },
   "expect": "1"
  },
  {
   "id": "dim/canon/L0",
   "fn": "canon_dimension",
   "input": {
    "exps": {
     "L": 0
    }
   },
   "expect": "1"
  },
  {
   "id": "dim/canon/L-1,TH1",
   "fn": "canon_dimension",
   "input": {
    "exps": {
     "TH": 1,
     "L": -1
    }
   },
   "expect": "L-1 TH1"
  },
  {
   "id": "dim/canon/I2,J1,N-1",
   "fn": "canon_dimension",
   "input": {
    "exps": {
     "J": 1,
     "N": -1,
     "I": 2
    }
   },
   "expect": "I2 N-1 J1"
  },
  {
   "id": "t1/toy-passes",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x"
       ],
       "ROLE": "EOM(v)"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v"
       ],
       "ROLE": "EOM(x)"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z"
       ],
       "ROLE": "CONSTRAINT"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    }
   },
   "expect": "[true,[]]"
  },
  {
   "id": "trm/toy-passes",
   "fn": "trm_well_formed",
   "input": {
    "trm": {
     "HEADER": {
      "ENVIRONMENT_INVENTORY": [
       {
        "ENVIRONMENT_QUANTITY": "position",
        "DIMENSION": "L1"
       },
       {
        "ENVIRONMENT_QUANTITY": "velocity",
        "DIMENSION": "L1 T-1"
       },
       {
        "ENVIRONMENT_QUANTITY": "height",
        "DIMENSION": "L1"
       }
      ],
      "SIGNATURE": [
       {
        "NAME": "time_derivative",
        "OVER": [
         "x",
         "v"
        ],
        "IMAGE": "d/dt maps position to velocity"
       }
      ],
      "TRANSFORMATIONS": [
       {
        "NAME": "time_translation",
        "STATEMENT": "t -> t + t0"
       }
      ]
     },
     "ENTRIES": [
      {
       "NAME": "E_x",
       "DOF": "x",
       "DOMAIN": "|x| < x_max",
       "ENVIRONMENT_QUANTITY": "position",
       "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
       "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [
        "N2",
        "KIN"
       ],
       "DIMENSION": "L1"
      },
      {
       "NAME": "E_v",
       "DOF": "v",
       "DOMAIN": "|x| < x_max",
       "ENVIRONMENT_QUANTITY": "velocity",
       "IDENTIFICATION": "v is the time derivative of x",
       "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
       "FALSIFIER_CLASS": "F2",
       "BEARS": [
        "KIN"
       ],
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "E_z",
       "DOF": "z",
       "DOMAIN": "always",
       "ENVIRONMENT_QUANTITY": "height",
       "IDENTIFICATION": "z is the height above the track",
       "FALSIFIER": "any measured z different from 0",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [
        "FREE_Z",
        "C_NOZ"
       ],
       "DIMENSION": "L1"
      }
     ]
    },
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x"
       ],
       "ROLE": "EOM(v)"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v"
       ],
       "ROLE": "EOM(x)"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z"
       ],
       "ROLE": "CONSTRAINT"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    }
   },
   "expect": "[true,[]]"
  },
  {
   "id": "tms/toy-passes",
   "fn": "tms_well_formed",
   "input": {
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
      "K": "2",
      "N_X": 2,
      "S_MAX": 10
     },
     "CONSTANTS": [
      {
       "NAME": "w_a",
       "VALUE": "1"
      },
      {
       "NAME": "w_s",
       "VALUE": "0.5"
      }
     ],
     "YARDSTICKS": [
      {
       "NAME": "combined_distance",
       "KEY": [
        "SR1",
        "WSUM:w_a*A;w_s*S",
        "S"
       ],
       "LIMITING": []
      }
     ]
    }
   },
   "expect": "[true,[]]"
  },
  {
   "id": "t1/bad-structure",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "x",
       "DIMENSION": "M1 Q1"
      }
     ],
     "LAW": [
      {
       "NAME": "N",
       "STATEMENT": "N relates x and q",
       "REFS": [
        "x",
        "q",
        "N"
       ],
       "ROLE": "CONSTITUTIVE"
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C",
       "TARGET": "N",
       "ACTION": "FIX",
       "STATEMENT": "fix N"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1",
       "VALUE": "1.5"
      }
     ],
     "BOGUS": []
    }
   },
   "expect": "[false,[CONSTANT:m: VALUE requires UNIT,CONSTRAINT:C: FIX requires UNIT,CONSTRAINT:C: FIX requires VALUE,CONSTRAINT:C: TARGET N is not a DOF,DOF:x: DIMENSION M1 Q1 is not a dimension,LAW:N: REFS q does not resolve,LAW:N: cites itself,TPK: duplicate name x,TPK: unknown kind BOGUS]]"
  },
  {
   "id": "t1/bad-fields",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "-0.1"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x"
       ],
       "ROLE": "EOM(v)"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v"
       ],
       "ROLE": "EOM(x)",
       "STATE": "OPEN",
       "COMMENT": "x"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": "z",
       "ROLE": "CONSTRAINT"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "N2"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "REMOVE",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x",
        "x_max"
       ]
      }
     ]
    }
   },
   "expect": "[false,[ASSUMPTION:A_lin: REFS N2 is a LAW, not a DOF or CONSTANT,BOUNDARY:B_small: field REFS has duplicate entries,CONSTANT:x_max: UNCERTAINTY -0.1 is negative,CONSTRAINT:C_NOZ: REMOVE forbids UNIT,CONSTRAINT:C_NOZ: REMOVE forbids VALUE,LAW:FREE_Z: field REFS has the wrong type,LAW:KIN: mutable field STATE is not permitted in the TFK,LAW:KIN: unknown field COMMENT]]"
  },
  {
   "id": "trm/bad-entry",
   "fn": "trm_well_formed",
   "input": {
    "trm": {
     "HEADER": {
      "ENVIRONMENT_INVENTORY": [
       {
        "ENVIRONMENT_QUANTITY": "position",
        "DIMENSION": "L1"
       },
       {
        "ENVIRONMENT_QUANTITY": "velocity",
        "DIMENSION": "L1 T-1"
       },
       {
        "ENVIRONMENT_QUANTITY": "height",
        "DIMENSION": "L1"
       }
      ],
      "SIGNATURE": [
       {
        "NAME": "time_derivative",
        "OVER": [
         "x",
         "v"
        ],
        "IMAGE": "d/dt maps position to velocity"
       }
      ],
      "TRANSFORMATIONS": [
       {
        "NAME": "time_translation",
        "STATEMENT": "t -> t + t0"
       }
      ]
     },
     "ENTRIES": [
      {
       "NAME": "E1",
       "DOF": "w",
       "DOMAIN": " ",
       "ENVIRONMENT_QUANTITY": "speed",
       "IDENTIFICATION": "w is a speed",
       "FALSIFIER": "none offered",
       "FALSIFIER_CLASS": "F0",
       "BEARS": [
        "N2",
        "x"
       ],
       "DIMENSION": "L1 T-1",
       "STATE": "PROPOSED"
      }
     ]
    },
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x"
       ],
       "ROLE": "EOM(v)"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v"
       ],
       "ROLE": "EOM(x)"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z"
       ],
       "ROLE": "CONSTRAINT"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    }
   },
   "expect": "[false,[ENTRY:E1: BEARS x is not a TPK LAW or CONSTRAINT,ENTRY:E1: DOF w is not a TPK DOF,ENTRY:E1: DOMAIN is empty,ENTRY:E1: ENVIRONMENT_QUANTITY speed is not in the ENVIRONMENT INVENTORY,ENTRY:E1: FALSIFIER_CLASS F0 is inadmissible,ENTRY:E1: mutable field STATE is not permitted in the TFK]]"
  },
  {
   "id": "trm/bad-header",
   "fn": "trm_well_formed",
   "input": {
    "trm": {
     "HEADER": {
      "ENVIRONMENT_INVENTORY": [
       {
        "ENVIRONMENT_QUANTITY": "position",
        "DIMENSION": "L1"
       },
       {
        "ENVIRONMENT_QUANTITY": "position",
        "DIMENSION": "T-1 L"
       }
      ],
      "SIGNATURE": [
       {
        "NAME": "time_derivative",
        "OVER": [
         "x",
         "m"
        ],
        "IMAGE": "d/dt"
       }
      ]
     },
     "ENTRIES": []
    },
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x"
       ],
       "ROLE": "EOM(v)"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v"
       ],
       "ROLE": "EOM(x)"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z"
       ],
       "ROLE": "CONSTRAINT"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    }
   },
   "expect": "[false,[ENV:position: DIMENSION T-1 L is not a dimension,SIGNATURE:time_derivative: OVER m is not a TPK DOF,TrM HEADER: missing part TRANSFORMATIONS,TrM: duplicate environment quantity position]]"
  },
  {
   "id": "tms/bad-params-and-key",
   "fn": "tms_well_formed",
   "input": {
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "x",
      "K": "0",
      "N_X": 1,
      "IC2_POLICY": "MAYBE"
     },
     "CONSTANTS": [
      {
       "NAME": "w",
       "VALUE": "abc"
      }
     ],
     "YARDSTICKS": [
      {
       "NAME": "Y",
       "KEY": [
        "A",
        "SR1",
        "WSUM:q*A",
        "BAD"
       ],
       "LIMITING": []
      }
     ]
    }
   },
   "expect": "[false,[CONSTANT:w: VALUE abc is not a decimal,PARAMETERS: IC2_POLICY MAYBE is not GAP or REJECT,PARAMETERS: K 0 is not a positive decimal in double range,PARAMETERS: N_X must be at least 2,PARAMETERS: missing field S_MAX,YARDSTICK:Y: KEY must begin with SR1,YARDSTICK:Y: SR1 may appear only as the first term,YARDSTICK:Y: constant q is not a TMS constant,YARDSTICK:Y: term BAD is not well-formed]]"
  },
  {
   "id": "tms/bad-limiting",
   "fn": "tms_well_formed",
   "input": {
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
      "K": "2",
      "N_X": 2,
      "S_MAX": 10
     },
     "CONSTANTS": [
      {
       "NAME": "w_a",
       "VALUE": "1"
      },
      {
       "NAME": "w_s",
       "VALUE": "0.5"
      }
     ],
     "YARDSTICKS": [
      {
       "NAME": "combined_distance",
       "KEY": [
        "SR1",
        "WSUM:w_a*A;w_s*S",
        "S"
       ],
       "LIMITING": []
      },
      {
       "NAME": "Z",
       "KEY": [
        "SR1",
        "A"
       ],
       "LIMITING": [
        {
         "DOMAIN": "d1",
         "KEY": [
          "SR1",
          "NEG:A"
         ]
        },
        {
         "DOMAIN": "d1",
         "KEY": [
          "A"
         ]
        }
       ]
      }
     ]
    }
   },
   "expect": "[false,[YARDSTICK:Z LIMITING d1: KEY must begin with SR1,YARDSTICK:Z: duplicate limiting DOMAIN d1]]"
  },
  {
   "id": "t1/bad-names-and-shapes",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x y",
       "DIMENSION": "L1"
      }
     ],
     "LAW": [
      {
       "NAME": "?",
       "STATEMENT": "s",
       "REFS": [
        "x y"
       ],
       "ROLE": "CONSTITUTIVE"
      }
     ],
     "ASSUMPTION": "not a list",
     "BOUNDARY": [
      42
     ]
    }
   },
   "expect": "[false,[DOF:x y: NAME x y is not an identifier,LAW:?: NAME ? is not an identifier,TPK kind ASSUMPTION is not a list,TPK kind BOUNDARY: entry is not an object]]"
  },
  {
   "id": "t1/zone-not-object",
   "fn": "t1_well_formed",
   "input": {
    "tpk": "x"
   },
   "expect": "[false,[TPK: zone is not an object]]"
  },
  {
   "id": "trm/bad-shapes",
   "fn": "trm_well_formed",
   "input": {
    "trm": {
     "HEADER": "x",
     "ENTRIES": "y",
     "EXTRA": 1
    },
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x"
       ],
       "ROLE": "EOM(v)"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v"
       ],
       "ROLE": "EOM(x)"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z"
       ],
       "ROLE": "CONSTRAINT"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    }
   },
   "expect": "[false,[TrM ENTRIES is not a list,TrM: HEADER is not an object,TrM: unknown part EXTRA]]"
  },
  {
   "id": "dim/is_canonical/trailing-newline",
   "fn": "is_canonical_dimension",
   "input": {
    "s": "L1\n"
   },
   "expect": "false"
  },
  {
   "id": "tms/k-1e-400",
   "fn": "tms_well_formed",
   "input": {
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
      "K": "1e-400",
      "N_X": 2,
      "S_MAX": 10
     },
     "CONSTANTS": [
      {
       "NAME": "w_a",
       "VALUE": "1"
      },
      {
       "NAME": "w_s",
       "VALUE": "0.5"
      }
     ],
     "YARDSTICKS": [
      {
       "NAME": "combined_distance",
       "KEY": [
        "SR1",
        "WSUM:w_a*A;w_s*S",
        "S"
       ],
       "LIMITING": []
      }
     ]
    }
   },
   "expect": "[false,[PARAMETERS: K 1e-400 is not a positive decimal in double range]]"
  },
  {
   "id": "tms/k-1e400",
   "fn": "tms_well_formed",
   "input": {
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
      "K": "1e400",
      "N_X": 2,
      "S_MAX": 10
     },
     "CONSTANTS": [
      {
       "NAME": "w_a",
       "VALUE": "1"
      },
      {
       "NAME": "w_s",
       "VALUE": "0.5"
      }
     ],
     "YARDSTICKS": [
      {
       "NAME": "combined_distance",
       "KEY": [
        "SR1",
        "WSUM:w_a*A;w_s*S",
        "S"
       ],
       "LIMITING": []
      }
     ]
    }
   },
   "expect": "[false,[PARAMETERS: K 1e400 is not a positive decimal in double range]]"
  },
  {
   "id": "tms/k-2NL",
   "fn": "tms_well_formed",
   "input": {
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
      "K": "2\n",
      "N_X": 2,
      "S_MAX": 10
     },
     "CONSTANTS": [
      {
       "NAME": "w_a",
       "VALUE": "1"
      },
      {
       "NAME": "w_s",
       "VALUE": "0.5"
      }
     ],
     "YARDSTICKS": [
      {
       "NAME": "combined_distance",
       "KEY": [
        "SR1",
        "WSUM:w_a*A;w_s*S",
        "S"
       ],
       "LIMITING": []
      }
     ]
    }
   },
   "expect": "[false,[PARAMETERS: K 2\n is not a decimal]]"
  },
  {
   "id": "tms/k-1e-300",
   "fn": "tms_well_formed",
   "input": {
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
      "K": "1e-300",
      "N_X": 2,
      "S_MAX": 10
     },
     "CONSTANTS": [
      {
       "NAME": "w_a",
       "VALUE": "1"
      },
      {
       "NAME": "w_s",
       "VALUE": "0.5"
      }
     ],
     "YARDSTICKS": [
      {
       "NAME": "combined_distance",
       "KEY": [
        "SR1",
        "WSUM:w_a*A;w_s*S",
        "S"
       ],
       "LIMITING": []
      }
     ]
    }
   },
   "expect": "[true,[]]"
  },
  {
   "id": "tms/limiting-nfc-duplicate-and-empty",
   "fn": "tms_well_formed",
   "input": {
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
      "K": "2",
      "N_X": 2,
      "S_MAX": 10
     },
     "CONSTANTS": [
      {
       "NAME": "w_a",
       "VALUE": "1"
      },
      {
       "NAME": "w_s",
       "VALUE": "0.5"
      }
     ],
     "YARDSTICKS": [
      {
       "NAME": "combined_distance",
       "KEY": [
        "SR1",
        "WSUM:w_a*A;w_s*S",
        "S"
       ],
       "LIMITING": []
      },
      {
       "NAME": "Z",
       "KEY": [
        "SR1"
       ],
       "LIMITING": [
        {
         "DOMAIN": "r\u00e9gime",
         "KEY": [
          "SR1"
         ]
        },
        {
         "DOMAIN": "re\u0301gime",
         "KEY": [
          "SR1",
          "A"
         ]
        },
        {
         "DOMAIN": " ",
         "KEY": [
          "SR1"
         ]
        }
       ]
      }
     ]
    }
   },
   "expect": "[false,[YARDSTICK:Z LIMITING  : DOMAIN is empty,YARDSTICK:Z: duplicate limiting DOMAIN r\u00e9gime]]"
  },
  {
   "id": "trm/nbsp-domain-is-blank",
   "fn": "trm_well_formed",
   "input": {
    "trm": {
     "HEADER": {
      "ENVIRONMENT_INVENTORY": [
       {
        "ENVIRONMENT_QUANTITY": "position",
        "DIMENSION": "L1"
       },
       {
        "ENVIRONMENT_QUANTITY": "velocity",
        "DIMENSION": "L1 T-1"
       },
       {
        "ENVIRONMENT_QUANTITY": "height",
        "DIMENSION": "L1"
       }
      ],
      "SIGNATURE": [
       {
        "NAME": "time_derivative",
        "OVER": [
         "x",
         "v"
        ],
        "IMAGE": "d/dt maps position to velocity"
       }
      ],
      "TRANSFORMATIONS": [
       {
        "NAME": "time_translation",
        "STATEMENT": "t -> t + t0"
       }
      ]
     },
     "ENTRIES": [
      {
       "NAME": "E_x",
       "DOF": "x",
       "DOMAIN": "\u00a0\t",
       "ENVIRONMENT_QUANTITY": "position",
       "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
       "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [
        "N2",
        "KIN"
       ],
       "DIMENSION": "L1"
      },
      {
       "NAME": "E_v",
       "DOF": "v",
       "DOMAIN": "|x| < x_max",
       "ENVIRONMENT_QUANTITY": "velocity",
       "IDENTIFICATION": "v is the time derivative of x",
       "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
       "FALSIFIER_CLASS": "F2",
       "BEARS": [
        "KIN"
       ],
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "E_z",
       "DOF": "z",
       "DOMAIN": "always",
       "ENVIRONMENT_QUANTITY": "height",
       "IDENTIFICATION": "z is the height above the track",
       "FALSIFIER": "any measured z different from 0",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [
        "FREE_Z",
        "C_NOZ"
       ],
       "DIMENSION": "L1"
      }
     ]
    },
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x"
       ],
       "ROLE": "EOM(v)"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v"
       ],
       "ROLE": "EOM(x)"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z"
       ],
       "ROLE": "CONSTRAINT"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    }
   },
   "expect": "[false,[ENTRY:E_x: DOMAIN is empty]]"
  },
  {
   "id": "tms/ideographic-space-step-convention-is-blank",
   "fn": "tms_well_formed",
   "input": {
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "\u3000",
      "K": "2",
      "N_X": 2,
      "S_MAX": 10
     },
     "CONSTANTS": [
      {
       "NAME": "w_a",
       "VALUE": "1"
      },
      {
       "NAME": "w_s",
       "VALUE": "0.5"
      }
     ],
     "YARDSTICKS": [
      {
       "NAME": "combined_distance",
       "KEY": [
        "SR1",
        "WSUM:w_a*A;w_s*S",
        "S"
       ],
       "LIMITING": []
      }
     ]
    }
   },
   "expect": "[false,[PARAMETERS: STEP_CONVENTION is empty]]"
  },
  {
   "id": "tms/zero-width-space-is-refused",
   "fn": "tms_well_formed",
   "input": {
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "\u200b",
      "K": "2",
      "N_X": 2,
      "S_MAX": 10
     },
     "CONSTANTS": [
      {
       "NAME": "w_a",
       "VALUE": "1"
      },
      {
       "NAME": "w_s",
       "VALUE": "0.5"
      }
     ],
     "YARDSTICKS": [
      {
       "NAME": "combined_distance",
       "KEY": [
        "SR1",
        "WSUM:w_a*A;w_s*S",
        "S"
       ],
       "LIMITING": []
      }
     ]
    }
   },
   "note": "U+200B is general category Cf: refused as invisible text (tpm_zone_schemas 0.2.0 section 6)",
   "expect": "[false,[PARAMETERS: field STEP_CONVENTION contains disallowed character U+200B]]"
  },
  {
   "id": "dim/normalize/1",
   "fn": "normalize_dimension",
   "input": {
    "s": "1"
   },
   "expect": "1"
  },
  {
   "id": "dim/normalize/L1_T-1",
   "fn": "normalize_dimension",
   "input": {
    "s": "L1 T-1"
   },
   "expect": "L1 T-1"
  },
  {
   "id": "dim/normalize/T-1_L1",
   "fn": "normalize_dimension",
   "input": {
    "s": "T-1 L1"
   },
   "expect": "L1 T-1"
  },
  {
   "id": "dim/normalize/L1_L-1",
   "fn": "normalize_dimension",
   "input": {
    "s": "L1 L-1"
   },
   "expect": "1"
  },
  {
   "id": "dim/normalize/L0",
   "fn": "normalize_dimension",
   "input": {
    "s": "L0"
   },
   "expect": "1"
  },
  {
   "id": "dim/normalize/M1_L1_M1",
   "fn": "normalize_dimension",
   "input": {
    "s": "M1 L1 M1"
   },
   "expect": "L1 M2"
  },
  {
   "id": "dim/normalize/L01",
   "fn": "normalize_dimension",
   "input": {
    "s": "L01"
   },
   "expect": "L1"
  },
  {
   "id": "dim/normalize/TH-2_J1_T3",
   "fn": "normalize_dimension",
   "input": {
    "s": "TH-2 J1 T3"
   },
   "expect": "T3 TH-2 J1"
  },
  {
   "id": "dim/normalize/L",
   "fn": "normalize_dimension",
   "input": {
    "s": "L"
   },
   "expect": "null"
  },
  {
   "id": "dim/normalize/L1__T-1",
   "fn": "normalize_dimension",
   "input": {
    "s": "L1  T-1"
   },
   "expect": "null"
  },
  {
   "id": "dim/normalize/L12345",
   "fn": "normalize_dimension",
   "input": {
    "s": "L12345"
   },
   "expect": "null"
  },
  {
   "id": "dim/normalize/empty",
   "fn": "normalize_dimension",
   "input": {
    "s": ""
   },
   "expect": "null"
  },
  {
   "id": "dim/normalize/1_L1",
   "fn": "normalize_dimension",
   "input": {
    "s": "1 L1"
   },
   "expect": "null"
  },
  {
   "id": "dim/normalize/L1NL",
   "fn": "normalize_dimension",
   "input": {
    "s": "L1\n"
   },
   "expect": "null"
  },
  {
   "id": "dim/normalize/Q1",
   "fn": "normalize_dimension",
   "input": {
    "s": "Q1"
   },
   "expect": "null"
  },
  {
   "id": "dec/canon/0.05",
   "fn": "canon_decimal",
   "input": {
    "s": "0.05"
   },
   "expect": "5e-2"
  },
  {
   "id": "dec/canon/0.050",
   "fn": "canon_decimal",
   "input": {
    "s": "0.050"
   },
   "expect": "5e-2"
  },
  {
   "id": "dec/canon/5e-2",
   "fn": "canon_decimal",
   "input": {
    "s": "5e-2"
   },
   "expect": "5e-2"
  },
  {
   "id": "dec/canon/1500",
   "fn": "canon_decimal",
   "input": {
    "s": "1500"
   },
   "expect": "15e2"
  },
  {
   "id": "dec/canon/-0",
   "fn": "canon_decimal",
   "input": {
    "s": "-0"
   },
   "expect": "0"
  },
  {
   "id": "dec/canon/0.0",
   "fn": "canon_decimal",
   "input": {
    "s": "0.0"
   },
   "expect": "0"
  },
  {
   "id": "dec/canon/2",
   "fn": "canon_decimal",
   "input": {
    "s": "2"
   },
   "expect": "2"
  },
  {
   "id": "dec/canon/2.0",
   "fn": "canon_decimal",
   "input": {
    "s": "2.0"
   },
   "expect": "2"
  },
  {
   "id": "dec/canon/6.02214076e23",
   "fn": "canon_decimal",
   "input": {
    "s": "6.02214076e23"
   },
   "expect": "602214076e15"
  },
  {
   "id": "dec/canon/007.10",
   "fn": "canon_decimal",
   "input": {
    "s": "007.10"
   },
   "expect": "71e-1"
  },
  {
   "id": "dec/canon/-1.5E+3",
   "fn": "canon_decimal",
   "input": {
    "s": "-1.5E+3"
   },
   "expect": "-15e2"
  },
  {
   "id": "dec/canon/1e-400",
   "fn": "canon_decimal",
   "input": {
    "s": "1e-400"
   },
   "expect": "1e-400"
  },
  {
   "id": "dec/canon/10",
   "fn": "canon_decimal",
   "input": {
    "s": "10"
   },
   "expect": "1e1"
  },
  {
   "id": "dec/canon/.5",
   "fn": "canon_decimal",
   "input": {
    "s": ".5"
   },
   "expect": "null"
  },
  {
   "id": "dec/canon/5.",
   "fn": "canon_decimal",
   "input": {
    "s": "5."
   },
   "expect": "null"
  },
  {
   "id": "dec/canon/1e12345",
   "fn": "canon_decimal",
   "input": {
    "s": "1e12345"
   },
   "expect": "null"
  },
  {
   "id": "dec/canon/0.5NL",
   "fn": "canon_decimal",
   "input": {
    "s": "0.5\n"
   },
   "expect": "null"
  },
  {
   "id": "dec/canon/+1",
   "fn": "canon_decimal",
   "input": {
    "s": "+1"
   },
   "expect": "null"
  },
  {
   "id": "dec/canon/1,5",
   "fn": "canon_decimal",
   "input": {
    "s": "1,5"
   },
   "expect": "null"
  },
  {
   "id": "dec/canon/empty",
   "fn": "canon_decimal",
   "input": {
    "s": ""
   },
   "expect": "null"
  },
  {
   "id": "term/canon/SR1",
   "fn": "canonical_term",
   "input": {
    "t": "SR1"
   },
   "expect": "SR1"
  },
  {
   "id": "term/canon/WSUM:w_s*S;w_a*A",
   "fn": "canonical_term",
   "input": {
    "t": "WSUM:w_s*S;w_a*A"
   },
   "expect": "WSUM:w_a*A;w_s*S"
  },
  {
   "id": "term/canon/NEG:NEG:A",
   "fn": "canonical_term",
   "input": {
    "t": "NEG:NEG:A"
   },
   "expect": "A"
  },
  {
   "id": "term/canon/NEG:NEG:NEG:S",
   "fn": "canonical_term",
   "input": {
    "t": "NEG:NEG:NEG:S"
   },
   "expect": "NEG:S"
  },
  {
   "id": "term/canon/NEG:WSUM:b*S;a*A",
   "fn": "canonical_term",
   "input": {
    "t": "NEG:WSUM:b*S;a*A"
   },
   "expect": "NEG:WSUM:a*A;b*S"
  },
  {
   "id": "term/canon/WSUM:a*FIELD:z;b*A",
   "fn": "canonical_term",
   "input": {
    "t": "WSUM:a*FIELD:z;b*A"
   },
   "expect": "WSUM:b*A;a*FIELD:z"
  },
  {
   "id": "term/canon/WSUM:a*A;b*A",
   "fn": "canonical_term",
   "input": {
    "t": "WSUM:a*A;b*A"
   },
   "expect": "WSUM:a*A;b*A"
  },
  {
   "id": "term/canon/FIELD:dof_count",
   "fn": "canonical_term",
   "input": {
    "t": "FIELD:dof_count"
   },
   "expect": "FIELD:dof_count"
  },
  {
   "id": "tms/yardstick-grammar-and-static-c2",
   "fn": "tms_well_formed",
   "input": {
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
      "K": "2",
      "N_X": 2,
      "S_MAX": 10
     },
     "CONSTANTS": [
      {
       "NAME": "w_a",
       "VALUE": "1"
      },
      {
       "NAME": "w_s",
       "VALUE": "0.5"
      },
      {
       "NAME": "w_neg",
       "VALUE": "-1"
      },
      {
       "NAME": "w_zero",
       "VALUE": "0.0"
      }
     ],
     "YARDSTICKS": [
      {
       "NAME": "Y1",
       "KEY": [
        "SR1",
        "NEG:A",
        "S"
       ],
       "LIMITING": []
      },
      {
       "NAME": "Y2",
       "KEY": [
        "SR1",
        "WSUM:w_neg*A;w_s*S"
       ],
       "LIMITING": []
      },
      {
       "NAME": "Y3",
       "KEY": [
        "SR1",
        "WSUM:w_zero*A",
        "A"
       ],
       "LIMITING": [
        {
         "DOMAIN": "|x| << x_max",
         "KEY": [
          "SR1",
          "NEG:A"
         ]
        }
       ]
      },
      {
       "NAME": "Y4",
       "KEY": [
        "SR1",
        "WSUM:w_s*A;w_s*A"
       ],
       "LIMITING": []
      },
      {
       "NAME": "Y5",
       "KEY": [
        "SR1",
        "NEG:SR1"
       ],
       "LIMITING": []
      },
      {
       "NAME": "Y6",
       "KEY": [
        "SR1",
        "FIELD:1bad"
       ],
       "LIMITING": []
      },
      {
       "NAME": "Y7",
       "KEY": [
        "SR1",
        "S",
        "NEG:NEG:A"
       ],
       "LIMITING": []
      },
      {
       "NAME": "Y8",
       "KEY": [
        "SR1",
        "S",
        "NEG:NEG:NEG:A"
       ],
       "LIMITING": []
      }
     ]
    }
   },
   "note": "Y3: the first A-moving term is the plain A, since w_zero is 0; its limiting KEY inverts A inside its declared DOMAIN and is exempt from C2 there. Y7: NEG:NEG:A is A.",
   "expect": "[false,[YARDSTICK:Y1: KEY ranks a record higher when an assumption is added (SR9 C2),YARDSTICK:Y2: KEY ranks a record higher when an assumption is added (SR9 C2),YARDSTICK:Y4: term WSUM:w_s*A;w_s*A is not well-formed,YARDSTICK:Y5: SR1 may appear only as the first term,YARDSTICK:Y6: term FIELD:1bad is not well-formed,YARDSTICK:Y8: KEY ranks a record higher when an assumption is added (SR9 C2)]]"
  },
  {
   "id": "text/bidi-override-in-statement",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x \u202e",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x"
       ],
       "ROLE": "EOM(v)"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v"
       ],
       "ROLE": "EOM(x)"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z"
       ],
       "ROLE": "CONSTRAINT"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    }
   },
   "expect": "[false,[LAW:N2: field STATEMENT contains disallowed character U+202E]]"
  },
  {
   "id": "text/tag-character-in-proposition",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x"
       ],
       "ROLE": "EOM(v)"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v"
       ],
       "ROLE": "EOM(x)"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z"
       ],
       "ROLE": "CONSTRAINT"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "linear\udb40\udc41\udb40\udc42 force",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    }
   },
   "expect": "[false,[ASSUMPTION:A_lin: field PROPOSITION contains disallowed character U+E0041]]"
  },
  {
   "id": "text/nul-in-falsifier",
   "fn": "trm_well_formed",
   "input": {
    "trm": {
     "HEADER": {
      "ENVIRONMENT_INVENTORY": [
       {
        "ENVIRONMENT_QUANTITY": "position",
        "DIMENSION": "L1"
       },
       {
        "ENVIRONMENT_QUANTITY": "velocity",
        "DIMENSION": "L1 T-1"
       },
       {
        "ENVIRONMENT_QUANTITY": "height",
        "DIMENSION": "L1"
       }
      ],
      "SIGNATURE": [
       {
        "NAME": "time_derivative",
        "OVER": [
         "x",
         "v"
        ],
        "IMAGE": "d/dt maps position to velocity"
       }
      ],
      "TRANSFORMATIONS": [
       {
        "NAME": "time_translation",
        "STATEMENT": "t -> t + t0"
       }
      ]
     },
     "ENTRIES": [
      {
       "NAME": "E_x",
       "DOF": "x",
       "DOMAIN": "|x| < x_max",
       "ENVIRONMENT_QUANTITY": "position",
       "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
       "FALSIFIER": "a\u0000b",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [
        "N2",
        "KIN"
       ],
       "DIMENSION": "L1"
      },
      {
       "NAME": "E_v",
       "DOF": "v",
       "DOMAIN": "|x| < x_max",
       "ENVIRONMENT_QUANTITY": "velocity",
       "IDENTIFICATION": "v is the time derivative of x",
       "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
       "FALSIFIER_CLASS": "F2",
       "BEARS": [
        "KIN"
       ],
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "E_z",
       "DOF": "z",
       "DOMAIN": "always",
       "ENVIRONMENT_QUANTITY": "height",
       "IDENTIFICATION": "z is the height above the track",
       "FALSIFIER": "any measured z different from 0",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [
        "FREE_Z",
        "C_NOZ"
       ],
       "DIMENSION": "L1"
      }
     ]
    },
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x"
       ],
       "ROLE": "EOM(v)"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v"
       ],
       "ROLE": "EOM(x)"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z"
       ],
       "ROLE": "CONSTRAINT"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    }
   },
   "expect": "[false,[ENTRY:E_x: field FALSIFIER contains disallowed character U+0000]]"
  },
  {
   "id": "text/private-use-in-image",
   "fn": "trm_well_formed",
   "input": {
    "trm": {
     "HEADER": {
      "ENVIRONMENT_INVENTORY": [
       {
        "ENVIRONMENT_QUANTITY": "position",
        "DIMENSION": "L1"
       },
       {
        "ENVIRONMENT_QUANTITY": "velocity",
        "DIMENSION": "L1 T-1"
       },
       {
        "ENVIRONMENT_QUANTITY": "height",
        "DIMENSION": "L1"
       }
      ],
      "SIGNATURE": [
       {
        "NAME": "time_derivative",
        "OVER": [
         "x",
         "v"
        ],
        "IMAGE": "d/dt \ue000"
       }
      ],
      "TRANSFORMATIONS": [
       {
        "NAME": "time_translation",
        "STATEMENT": "t -> t + t0"
       }
      ]
     },
     "ENTRIES": [
      {
       "NAME": "E_x",
       "DOF": "x",
       "DOMAIN": "|x| < x_max",
       "ENVIRONMENT_QUANTITY": "position",
       "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
       "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [
        "N2",
        "KIN"
       ],
       "DIMENSION": "L1"
      },
      {
       "NAME": "E_v",
       "DOF": "v",
       "DOMAIN": "|x| < x_max",
       "ENVIRONMENT_QUANTITY": "velocity",
       "IDENTIFICATION": "v is the time derivative of x",
       "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
       "FALSIFIER_CLASS": "F2",
       "BEARS": [
        "KIN"
       ],
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "E_z",
       "DOF": "z",
       "DOMAIN": "always",
       "ENVIRONMENT_QUANTITY": "height",
       "IDENTIFICATION": "z is the height above the track",
       "FALSIFIER": "any measured z different from 0",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [
        "FREE_Z",
        "C_NOZ"
       ],
       "DIMENSION": "L1"
      }
     ]
    },
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x"
       ],
       "ROLE": "EOM(v)"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v"
       ],
       "ROLE": "EOM(x)"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z"
       ],
       "ROLE": "CONSTRAINT"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    }
   },
   "expect": "[false,[SIGNATURE:time_derivative: field IMAGE contains disallowed character U+E000]]"
  },
  {
   "id": "text/line-separator-in-step-convention",
   "fn": "tms_well_formed",
   "input": {
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "one rule\u2028one step",
      "K": "2",
      "N_X": 2,
      "S_MAX": 10
     },
     "CONSTANTS": [
      {
       "NAME": "w_a",
       "VALUE": "1"
      },
      {
       "NAME": "w_s",
       "VALUE": "0.5"
      }
     ],
     "YARDSTICKS": [
      {
       "NAME": "combined_distance",
       "KEY": [
        "SR1",
        "WSUM:w_a*A;w_s*S",
        "S"
       ],
       "LIMITING": []
      }
     ]
    }
   },
   "expect": "[false,[PARAMETERS: field STEP_CONVENTION contains disallowed character U+2028]]"
  },
  {
   "id": "text/noncharacter-escaped-in-message",
   "fn": "tms_well_formed",
   "input": {
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
      "K": "2",
      "N_X": 2,
      "S_MAX": 10
     },
     "CONSTANTS": [
      {
       "NAME": "w_a",
       "VALUE": "1"
      },
      {
       "NAME": "w_s",
       "VALUE": "0.5"
      }
     ],
     "YARDSTICKS": [
      {
       "NAME": "combined_distance",
       "KEY": [
        "SR1",
        "WSUM:w_a*A;w_s*S",
        "S"
       ],
       "LIMITING": []
      },
      {
       "NAME": "Z",
       "KEY": [
        "SR1"
       ],
       "LIMITING": [
        {
         "DOMAIN": "\ufffe",
         "KEY": [
          "SR1"
         ]
        }
       ]
      }
     ]
    }
   },
   "note": "the tag echoes the DOMAIN; the message shows the code point, never the character",
   "expect": "[false,[YARDSTICK:Z LIMITING <U+FFFE>: field DOMAIN contains disallowed character U+FFFE]]"
  },
  {
   "id": "text/unknown-field-name-escaped",
   "fn": "trm_well_formed",
   "input": {
    "trm": {
     "HEADER": {
      "ENVIRONMENT_INVENTORY": [
       {
        "ENVIRONMENT_QUANTITY": "position",
        "DIMENSION": "L1"
       },
       {
        "ENVIRONMENT_QUANTITY": "velocity",
        "DIMENSION": "L1 T-1"
       },
       {
        "ENVIRONMENT_QUANTITY": "height",
        "DIMENSION": "L1"
       }
      ],
      "SIGNATURE": [
       {
        "NAME": "time_derivative",
        "OVER": [
         "x",
         "v"
        ],
        "IMAGE": "d/dt maps position to velocity"
       }
      ],
      "TRANSFORMATIONS": [
       {
        "NAME": "time_translation",
        "STATEMENT": "t -> t + t0"
       }
      ]
     },
     "ENTRIES": [
      {
       "NAME": "E_x",
       "DOF": "x",
       "DOMAIN": "|x| < x_max",
       "ENVIRONMENT_QUANTITY": "position",
       "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
       "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [
        "N2",
        "KIN"
       ],
       "DIMENSION": "L1"
      },
      {
       "NAME": "E_v",
       "DOF": "v",
       "DOMAIN": "|x| < x_max",
       "ENVIRONMENT_QUANTITY": "velocity",
       "IDENTIFICATION": "v is the time derivative of x",
       "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
       "FALSIFIER_CLASS": "F2",
       "BEARS": [
        "KIN"
       ],
       "DIMENSION": "L1 T-1",
       "NOTE\u202e": "x"
      },
      {
       "NAME": "E_z",
       "DOF": "z",
       "DOMAIN": "always",
       "ENVIRONMENT_QUANTITY": "height",
       "IDENTIFICATION": "z is the height above the track",
       "FALSIFIER": "any measured z different from 0",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [
        "FREE_Z",
        "C_NOZ"
       ],
       "DIMENSION": "L1"
      }
     ]
    },
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x"
       ],
       "ROLE": "EOM(v)"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v"
       ],
       "ROLE": "EOM(x)"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z"
       ],
       "ROLE": "CONSTRAINT"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    }
   },
   "expect": "[false,[ENTRY:E_v: unknown field NOTE<U+202E>]]"
  },
  {
   "id": "term/canon/deep-neg-5000",
   "fn": "canonical_term",
   "input": {
    "t": "NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:A"
   },
   "note": "counted, not recursed: no input depth exhausts the stack",
   "expect": "A"
  },
  {
   "id": "term/canon/deep-neg-5001",
   "fn": "canonical_term",
   "input": {
    "t": "NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:A"
   },
   "expect": "NEG:A"
  },
  {
   "id": "tms/deep-neg-key-static-c2",
   "fn": "tms_well_formed",
   "input": {
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
      "K": "2",
      "N_X": 2,
      "S_MAX": 10
     },
     "CONSTANTS": [
      {
       "NAME": "w_a",
       "VALUE": "1"
      },
      {
       "NAME": "w_s",
       "VALUE": "0.5"
      }
     ],
     "YARDSTICKS": [
      {
       "NAME": "combined_distance",
       "KEY": [
        "SR1",
        "NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:NEG:A"
       ],
       "LIMITING": []
      }
     ]
    }
   },
   "expect": "[false,[YARDSTICK:combined_distance: KEY ranks a record higher when an assumption is added (SR9 C2)]]"
  },
  {
   "id": "tms/int-cap",
   "fn": "tms_well_formed",
   "input": {
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
      "K": "2",
      "N_X": 1000001,
      "S_MAX": 1000001
     },
     "CONSTANTS": [
      {
       "NAME": "w_a",
       "VALUE": "1"
      },
      {
       "NAME": "w_s",
       "VALUE": "0.5"
      }
     ],
     "YARDSTICKS": [
      {
       "NAME": "combined_distance",
       "KEY": [
        "SR1",
        "WSUM:w_a*A;w_s*S",
        "S"
       ],
       "LIMITING": []
      }
     ]
    }
   },
   "expect": "[false,[PARAMETERS: N_X must be at most 1000000,PARAMETERS: S_MAX must be at most 1000000]]"
  },
  {
   "id": "tms/int-cap-edge-accepted",
   "fn": "tms_well_formed",
   "input": {
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
      "K": "2",
      "N_X": 1000000,
      "S_MAX": 1000000
     },
     "CONSTANTS": [
      {
       "NAME": "w_a",
       "VALUE": "1"
      },
      {
       "NAME": "w_s",
       "VALUE": "0.5"
      }
     ],
     "YARDSTICKS": [
      {
       "NAME": "combined_distance",
       "KEY": [
        "SR1",
        "WSUM:w_a*A;w_s*S",
        "S"
       ],
       "LIMITING": []
      }
     ]
    }
   },
   "expect": "[true,[]]"
  },
  {
   "id": "tms/promotion-floor-F0",
   "fn": "tms_well_formed",
   "input": {
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
      "K": "2",
      "N_X": 2,
      "S_MAX": 10,
      "PROMOTION_FLOOR": "F0"
     },
     "CONSTANTS": [
      {
       "NAME": "w_a",
       "VALUE": "1"
      },
      {
       "NAME": "w_s",
       "VALUE": "0.5"
      }
     ],
     "YARDSTICKS": [
      {
       "NAME": "combined_distance",
       "KEY": [
        "SR1",
        "WSUM:w_a*A;w_s*S",
        "S"
       ],
       "LIMITING": []
      }
     ]
    }
   },
   "expect": "[false,[PARAMETERS: PROMOTION_FLOOR F0 is not F1, F2 or F3]]"
  },
  {
   "id": "tms/promotion-floor-F1",
   "fn": "tms_well_formed",
   "input": {
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
      "K": "2",
      "N_X": 2,
      "S_MAX": 10,
      "PROMOTION_FLOOR": "F1"
     },
     "CONSTANTS": [
      {
       "NAME": "w_a",
       "VALUE": "1"
      },
      {
       "NAME": "w_s",
       "VALUE": "0.5"
      }
     ],
     "YARDSTICKS": [
      {
       "NAME": "combined_distance",
       "KEY": [
        "SR1",
        "WSUM:w_a*A;w_s*S",
        "S"
       ],
       "LIMITING": []
      }
     ]
    }
   },
   "expect": "[true,[]]"
  },
  {
   "id": "tms/promotion-floor-F3",
   "fn": "tms_well_formed",
   "input": {
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
      "K": "2",
      "N_X": 2,
      "S_MAX": 10,
      "PROMOTION_FLOOR": "F3"
     },
     "CONSTANTS": [
      {
       "NAME": "w_a",
       "VALUE": "1"
      },
      {
       "NAME": "w_s",
       "VALUE": "0.5"
      }
     ],
     "YARDSTICKS": [
      {
       "NAME": "combined_distance",
       "KEY": [
        "SR1",
        "WSUM:w_a*A;w_s*S",
        "S"
       ],
       "LIMITING": []
      }
     ]
    }
   },
   "expect": "[true,[]]"
  },
  {
   "id": "tms/promotion-floor-f2",
   "fn": "tms_well_formed",
   "input": {
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
      "K": "2",
      "N_X": 2,
      "S_MAX": 10,
      "PROMOTION_FLOOR": "f2"
     },
     "CONSTANTS": [
      {
       "NAME": "w_a",
       "VALUE": "1"
      },
      {
       "NAME": "w_s",
       "VALUE": "0.5"
      }
     ],
     "YARDSTICKS": [
      {
       "NAME": "combined_distance",
       "KEY": [
        "SR1",
        "WSUM:w_a*A;w_s*S",
        "S"
       ],
       "LIMITING": []
      }
     ]
    }
   },
   "expect": "[false,[PARAMETERS: PROMOTION_FLOOR f2 is not F1, F2 or F3]]"
  },
  {
   "id": "t1/unit-not-a-unit",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "furlong",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x"
       ],
       "ROLE": "EOM(v)"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v"
       ],
       "ROLE": "EOM(x)"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z"
       ],
       "ROLE": "CONSTRAINT"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    }
   },
   "expect": "[false,[CONSTANT:x_max: UNIT furlong: furlong is not a unit symbol]]"
  },
  {
   "id": "t1/unit-wrong-dimension",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "cm2",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x"
       ],
       "ROLE": "EOM(v)"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v"
       ],
       "ROLE": "EOM(x)"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z"
       ],
       "ROLE": "CONSTRAINT"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    }
   },
   "expect": "[false,[CONSTANT:x_max: UNIT cm2 has dimension L2, not L1]]"
  },
  {
   "id": "t1/unit-refused-celsius",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "degC",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x"
       ],
       "ROLE": "EOM(v)"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v"
       ],
       "ROLE": "EOM(x)"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z"
       ],
       "ROLE": "CONSTRAINT"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    }
   },
   "expect": "[false,[CONSTANT:x_max: UNIT degC: degC is refused, an offset scale, not a ratio]]"
  },
  {
   "id": "t1/unit-prefixed-accepted",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "cm",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x"
       ],
       "ROLE": "EOM(v)"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v"
       ],
       "ROLE": "EOM(x)"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z"
       ],
       "ROLE": "CONSTRAINT"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    }
   },
   "expect": "[true,[]]"
  },
  {
   "id": "t1/unit-bidi-control",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m\u202e",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x"
       ],
       "ROLE": "EOM(v)"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v"
       ],
       "ROLE": "EOM(x)"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z"
       ],
       "ROLE": "CONSTRAINT"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    }
   },
   "expect": "[false,[CONSTANT:x_max: UNIT m<U+202E> is not a unit,CONSTANT:x_max: field UNIT contains disallowed character U+202E]]"
  },
  {
   "id": "t1/fix-requires-unit",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x"
       ],
       "ROLE": "EOM(v)"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v"
       ],
       "ROLE": "EOM(x)"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z"
       ],
       "ROLE": "CONSTRAINT"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    }
   },
   "expect": "[false,[CONSTRAINT:C_NOZ: FIX requires UNIT]]"
  },
  {
   "id": "t1/fix-unit-wrong-dimension",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x"
       ],
       "ROLE": "EOM(v)"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v"
       ],
       "ROLE": "EOM(x)"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z"
       ],
       "ROLE": "CONSTRAINT"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "s",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    }
   },
   "expect": "[false,[CONSTRAINT:C_NOZ: UNIT s has dimension T1, not L1 of TARGET z]]"
  },
  {
   "id": "t1/angle-is-dimensionless",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "theta",
       "DIMENSION": "1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      },
      {
       "NAME": "theta_0",
       "DIMENSION": "1",
       "VALUE": "0.1",
       "UNIT": "rad"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x"
       ],
       "ROLE": "EOM(v)"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v"
       ],
       "ROLE": "EOM(x)"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z"
       ],
       "ROLE": "CONSTRAINT"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      },
      {
       "NAME": "C_TH",
       "TARGET": "theta",
       "ACTION": "FIX",
       "VALUE": "5",
       "UNIT": "deg",
       "STATEMENT": "theta held at 5 degrees"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    }
   },
   "note": "rad and deg are commensurable with DIMENSION 1 (the SI treats angle as one)",
   "expect": "[true,[]]"
  },
  {
   "id": "t1/forms-pass",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "note": "the spring with its forms: EQUATION on every LAW, CONDITION on the BOUNDARY, a DOF t of T1 (S3)",
   "expect": "[true,[]]"
  },
  {
   "id": "trm/forms-pass",
   "fn": "trm_well_formed",
   "input": {
    "trm": {
     "HEADER": {
      "ENVIRONMENT_INVENTORY": [
       {
        "ENVIRONMENT_QUANTITY": "position",
        "DIMENSION": "L1"
       },
       {
        "ENVIRONMENT_QUANTITY": "velocity",
        "DIMENSION": "L1 T-1"
       },
       {
        "ENVIRONMENT_QUANTITY": "height",
        "DIMENSION": "L1"
       },
       {
        "ENVIRONMENT_QUANTITY": "time",
        "DIMENSION": "T1"
       }
      ],
      "SIGNATURE": [
       {
        "NAME": "time_derivative",
        "OVER": [
         "x",
         "v",
         "t"
        ],
        "IMAGE": "d/dt maps position to velocity",
        "FORM": "D(x, t) = v",
        "IMAGE_FORM": "D(position, time) = velocity"
       }
      ],
      "TRANSFORMATIONS": [
       {
        "NAME": "time_translation",
        "STATEMENT": "t -> t + t0"
       }
      ]
     },
     "ENTRIES": [
      {
       "NAME": "E_x",
       "DOF": "x",
       "DOMAIN": "|x| < x_max",
       "ENVIRONMENT_QUANTITY": "position",
       "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
       "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [
        "N2",
        "KIN"
       ],
       "DIMENSION": "L1"
      },
      {
       "NAME": "E_v",
       "DOF": "v",
       "DOMAIN": "|x| < x_max",
       "ENVIRONMENT_QUANTITY": "velocity",
       "IDENTIFICATION": "v is the time derivative of x",
       "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
       "FALSIFIER_CLASS": "F2",
       "BEARS": [
        "KIN"
       ],
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "E_z",
       "DOF": "z",
       "DOMAIN": "always",
       "ENVIRONMENT_QUANTITY": "height",
       "IDENTIFICATION": "z is the height above the track",
       "FALSIFIER": "any measured z different from 0",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [
        "FREE_Z",
        "C_NOZ"
       ],
       "DIMENSION": "L1"
      },
      {
       "NAME": "E_t",
       "DOF": "t",
       "DOMAIN": "always",
       "ENVIRONMENT_QUANTITY": "time",
       "IDENTIFICATION": "t is the laboratory clock reading",
       "FALSIFIER": "two laboratory clocks that disagree beyond their stated uncertainty",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [],
       "DIMENSION": "T1"
      }
     ]
    },
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[true,[]]"
  },
  {
   "id": "t1/equation-does-not-parse",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) ="
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[LAW:N2: EQUATION does not parse: unexpected end]]"
  },
  {
   "id": "t1/equation-names-nonmember",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[LAW:KIN: EQUATION names t, which is not in REFS]]"
  },
  {
   "id": "t1/refs-member-unnamed",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t",
        "z"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[LAW:N2: REFS z is not named in EQUATION]]"
  },
  {
   "id": "t1/condition-names-nonmember",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[BOUNDARY:B_small: CONDITION names x_max, which is not in REFS]]"
  },
  {
   "id": "t1/condition-does-not-parse",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "|x| < x_max"
      }
     ]
    }
   },
   "expect": "[false,[BOUNDARY:B_small: CONDITION does not parse: unexpected character | at 1]]"
  },
  {
   "id": "t1/equation-hidden-character",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x\u202e"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[LAW:N2: EQUATION does not parse: unexpected character <U+202E> at 23,LAW:N2: field EQUATION contains disallowed character U+202E]]"
  },
  {
   "id": "t1/equation-wrong-type",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": 7
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[LAW:N2: field EQUATION has the wrong type]]"
  },
  {
   "id": "t1/equation-on-boundary-unknown",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max",
       "EQUATION": "x = 0"
      }
     ]
    }
   },
   "expect": "[false,[BOUNDARY:B_small: unknown field EQUATION]]"
  },
  {
   "id": "t1/condition-on-law-unknown",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x",
       "CONDITION": "x < 0"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[LAW:N2: unknown field CONDITION]]"
  },
  {
   "id": "trm/form-requires-image-form",
   "fn": "trm_well_formed",
   "input": {
    "trm": {
     "HEADER": {
      "ENVIRONMENT_INVENTORY": [
       {
        "ENVIRONMENT_QUANTITY": "position",
        "DIMENSION": "L1"
       },
       {
        "ENVIRONMENT_QUANTITY": "velocity",
        "DIMENSION": "L1 T-1"
       },
       {
        "ENVIRONMENT_QUANTITY": "height",
        "DIMENSION": "L1"
       },
       {
        "ENVIRONMENT_QUANTITY": "time",
        "DIMENSION": "T1"
       }
      ],
      "SIGNATURE": [
       {
        "NAME": "time_derivative",
        "OVER": [
         "x",
         "v",
         "t"
        ],
        "IMAGE": "d/dt maps position to velocity",
        "FORM": "D(x, t) = v"
       }
      ],
      "TRANSFORMATIONS": [
       {
        "NAME": "time_translation",
        "STATEMENT": "t -> t + t0"
       }
      ]
     },
     "ENTRIES": [
      {
       "NAME": "E_x",
       "DOF": "x",
       "DOMAIN": "|x| < x_max",
       "ENVIRONMENT_QUANTITY": "position",
       "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
       "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [
        "N2",
        "KIN"
       ],
       "DIMENSION": "L1"
      },
      {
       "NAME": "E_v",
       "DOF": "v",
       "DOMAIN": "|x| < x_max",
       "ENVIRONMENT_QUANTITY": "velocity",
       "IDENTIFICATION": "v is the time derivative of x",
       "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
       "FALSIFIER_CLASS": "F2",
       "BEARS": [
        "KIN"
       ],
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "E_z",
       "DOF": "z",
       "DOMAIN": "always",
       "ENVIRONMENT_QUANTITY": "height",
       "IDENTIFICATION": "z is the height above the track",
       "FALSIFIER": "any measured z different from 0",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [
        "FREE_Z",
        "C_NOZ"
       ],
       "DIMENSION": "L1"
      },
      {
       "NAME": "E_t",
       "DOF": "t",
       "DOMAIN": "always",
       "ENVIRONMENT_QUANTITY": "time",
       "IDENTIFICATION": "t is the laboratory clock reading",
       "FALSIFIER": "two laboratory clocks that disagree beyond their stated uncertainty",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [],
       "DIMENSION": "T1"
      }
     ]
    },
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[SIGNATURE:time_derivative: FORM requires IMAGE_FORM]]"
  },
  {
   "id": "trm/image-form-requires-form",
   "fn": "trm_well_formed",
   "input": {
    "trm": {
     "HEADER": {
      "ENVIRONMENT_INVENTORY": [
       {
        "ENVIRONMENT_QUANTITY": "position",
        "DIMENSION": "L1"
       },
       {
        "ENVIRONMENT_QUANTITY": "velocity",
        "DIMENSION": "L1 T-1"
       },
       {
        "ENVIRONMENT_QUANTITY": "height",
        "DIMENSION": "L1"
       },
       {
        "ENVIRONMENT_QUANTITY": "time",
        "DIMENSION": "T1"
       }
      ],
      "SIGNATURE": [
       {
        "NAME": "time_derivative",
        "OVER": [
         "x",
         "v",
         "t"
        ],
        "IMAGE": "d/dt maps position to velocity",
        "IMAGE_FORM": "D(position, time) = velocity"
       }
      ],
      "TRANSFORMATIONS": [
       {
        "NAME": "time_translation",
        "STATEMENT": "t -> t + t0"
       }
      ]
     },
     "ENTRIES": [
      {
       "NAME": "E_x",
       "DOF": "x",
       "DOMAIN": "|x| < x_max",
       "ENVIRONMENT_QUANTITY": "position",
       "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
       "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [
        "N2",
        "KIN"
       ],
       "DIMENSION": "L1"
      },
      {
       "NAME": "E_v",
       "DOF": "v",
       "DOMAIN": "|x| < x_max",
       "ENVIRONMENT_QUANTITY": "velocity",
       "IDENTIFICATION": "v is the time derivative of x",
       "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
       "FALSIFIER_CLASS": "F2",
       "BEARS": [
        "KIN"
       ],
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "E_z",
       "DOF": "z",
       "DOMAIN": "always",
       "ENVIRONMENT_QUANTITY": "height",
       "IDENTIFICATION": "z is the height above the track",
       "FALSIFIER": "any measured z different from 0",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [
        "FREE_Z",
        "C_NOZ"
       ],
       "DIMENSION": "L1"
      },
      {
       "NAME": "E_t",
       "DOF": "t",
       "DOMAIN": "always",
       "ENVIRONMENT_QUANTITY": "time",
       "IDENTIFICATION": "t is the laboratory clock reading",
       "FALSIFIER": "two laboratory clocks that disagree beyond their stated uncertainty",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [],
       "DIMENSION": "T1"
      }
     ]
    },
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[SIGNATURE:time_derivative: IMAGE_FORM requires FORM]]"
  },
  {
   "id": "trm/form-names-nonmember",
   "fn": "trm_well_formed",
   "input": {
    "trm": {
     "HEADER": {
      "ENVIRONMENT_INVENTORY": [
       {
        "ENVIRONMENT_QUANTITY": "position",
        "DIMENSION": "L1"
       },
       {
        "ENVIRONMENT_QUANTITY": "velocity",
        "DIMENSION": "L1 T-1"
       },
       {
        "ENVIRONMENT_QUANTITY": "height",
        "DIMENSION": "L1"
       },
       {
        "ENVIRONMENT_QUANTITY": "time",
        "DIMENSION": "T1"
       }
      ],
      "SIGNATURE": [
       {
        "NAME": "time_derivative",
        "OVER": [
         "x",
         "v"
        ],
        "IMAGE": "d/dt maps position to velocity",
        "FORM": "D(x, t) = v",
        "IMAGE_FORM": "D(position, time) = velocity"
       }
      ],
      "TRANSFORMATIONS": [
       {
        "NAME": "time_translation",
        "STATEMENT": "t -> t + t0"
       }
      ]
     },
     "ENTRIES": [
      {
       "NAME": "E_x",
       "DOF": "x",
       "DOMAIN": "|x| < x_max",
       "ENVIRONMENT_QUANTITY": "position",
       "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
       "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [
        "N2",
        "KIN"
       ],
       "DIMENSION": "L1"
      },
      {
       "NAME": "E_v",
       "DOF": "v",
       "DOMAIN": "|x| < x_max",
       "ENVIRONMENT_QUANTITY": "velocity",
       "IDENTIFICATION": "v is the time derivative of x",
       "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
       "FALSIFIER_CLASS": "F2",
       "BEARS": [
        "KIN"
       ],
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "E_z",
       "DOF": "z",
       "DOMAIN": "always",
       "ENVIRONMENT_QUANTITY": "height",
       "IDENTIFICATION": "z is the height above the track",
       "FALSIFIER": "any measured z different from 0",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [
        "FREE_Z",
        "C_NOZ"
       ],
       "DIMENSION": "L1"
      },
      {
       "NAME": "E_t",
       "DOF": "t",
       "DOMAIN": "always",
       "ENVIRONMENT_QUANTITY": "time",
       "IDENTIFICATION": "t is the laboratory clock reading",
       "FALSIFIER": "two laboratory clocks that disagree beyond their stated uncertainty",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [],
       "DIMENSION": "T1"
      }
     ]
    },
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[SIGNATURE:time_derivative: FORM names t, which is not in OVER]]"
  },
  {
   "id": "trm/over-member-unnamed",
   "fn": "trm_well_formed",
   "input": {
    "trm": {
     "HEADER": {
      "ENVIRONMENT_INVENTORY": [
       {
        "ENVIRONMENT_QUANTITY": "position",
        "DIMENSION": "L1"
       },
       {
        "ENVIRONMENT_QUANTITY": "velocity",
        "DIMENSION": "L1 T-1"
       },
       {
        "ENVIRONMENT_QUANTITY": "height",
        "DIMENSION": "L1"
       },
       {
        "ENVIRONMENT_QUANTITY": "time",
        "DIMENSION": "T1"
       }
      ],
      "SIGNATURE": [
       {
        "NAME": "time_derivative",
        "OVER": [
         "x",
         "v",
         "t",
         "z"
        ],
        "IMAGE": "d/dt maps position to velocity",
        "FORM": "D(x, t) = v",
        "IMAGE_FORM": "D(position, time) = velocity"
       }
      ],
      "TRANSFORMATIONS": [
       {
        "NAME": "time_translation",
        "STATEMENT": "t -> t + t0"
       }
      ]
     },
     "ENTRIES": [
      {
       "NAME": "E_x",
       "DOF": "x",
       "DOMAIN": "|x| < x_max",
       "ENVIRONMENT_QUANTITY": "position",
       "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
       "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [
        "N2",
        "KIN"
       ],
       "DIMENSION": "L1"
      },
      {
       "NAME": "E_v",
       "DOF": "v",
       "DOMAIN": "|x| < x_max",
       "ENVIRONMENT_QUANTITY": "velocity",
       "IDENTIFICATION": "v is the time derivative of x",
       "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
       "FALSIFIER_CLASS": "F2",
       "BEARS": [
        "KIN"
       ],
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "E_z",
       "DOF": "z",
       "DOMAIN": "always",
       "ENVIRONMENT_QUANTITY": "height",
       "IDENTIFICATION": "z is the height above the track",
       "FALSIFIER": "any measured z different from 0",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [
        "FREE_Z",
        "C_NOZ"
       ],
       "DIMENSION": "L1"
      },
      {
       "NAME": "E_t",
       "DOF": "t",
       "DOMAIN": "always",
       "ENVIRONMENT_QUANTITY": "time",
       "IDENTIFICATION": "t is the laboratory clock reading",
       "FALSIFIER": "two laboratory clocks that disagree beyond their stated uncertainty",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [],
       "DIMENSION": "T1"
      }
     ]
    },
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[SIGNATURE:time_derivative: OVER z is not named in FORM]]"
  },
  {
   "id": "trm/image-form-names-non-quantity",
   "fn": "trm_well_formed",
   "input": {
    "trm": {
     "HEADER": {
      "ENVIRONMENT_INVENTORY": [
       {
        "ENVIRONMENT_QUANTITY": "position",
        "DIMENSION": "L1"
       },
       {
        "ENVIRONMENT_QUANTITY": "velocity",
        "DIMENSION": "L1 T-1"
       },
       {
        "ENVIRONMENT_QUANTITY": "height",
        "DIMENSION": "L1"
       },
       {
        "ENVIRONMENT_QUANTITY": "time",
        "DIMENSION": "T1"
       }
      ],
      "SIGNATURE": [
       {
        "NAME": "time_derivative",
        "OVER": [
         "x",
         "v",
         "t"
        ],
        "IMAGE": "d/dt maps position to velocity",
        "FORM": "D(x, t) = v",
        "IMAGE_FORM": "D(position, time) = speed"
       }
      ],
      "TRANSFORMATIONS": [
       {
        "NAME": "time_translation",
        "STATEMENT": "t -> t + t0"
       }
      ]
     },
     "ENTRIES": [
      {
       "NAME": "E_x",
       "DOF": "x",
       "DOMAIN": "|x| < x_max",
       "ENVIRONMENT_QUANTITY": "position",
       "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
       "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [
        "N2",
        "KIN"
       ],
       "DIMENSION": "L1"
      },
      {
       "NAME": "E_v",
       "DOF": "v",
       "DOMAIN": "|x| < x_max",
       "ENVIRONMENT_QUANTITY": "velocity",
       "IDENTIFICATION": "v is the time derivative of x",
       "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
       "FALSIFIER_CLASS": "F2",
       "BEARS": [
        "KIN"
       ],
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "E_z",
       "DOF": "z",
       "DOMAIN": "always",
       "ENVIRONMENT_QUANTITY": "height",
       "IDENTIFICATION": "z is the height above the track",
       "FALSIFIER": "any measured z different from 0",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [
        "FREE_Z",
        "C_NOZ"
       ],
       "DIMENSION": "L1"
      },
      {
       "NAME": "E_t",
       "DOF": "t",
       "DOMAIN": "always",
       "ENVIRONMENT_QUANTITY": "time",
       "IDENTIFICATION": "t is the laboratory clock reading",
       "FALSIFIER": "two laboratory clocks that disagree beyond their stated uncertainty",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [],
       "DIMENSION": "T1"
      }
     ]
    },
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[SIGNATURE:time_derivative: IMAGE_FORM names speed, which is not in the ENVIRONMENT INVENTORY]]"
  },
  {
   "id": "trm/form-does-not-parse",
   "fn": "trm_well_formed",
   "input": {
    "trm": {
     "HEADER": {
      "ENVIRONMENT_INVENTORY": [
       {
        "ENVIRONMENT_QUANTITY": "position",
        "DIMENSION": "L1"
       },
       {
        "ENVIRONMENT_QUANTITY": "velocity",
        "DIMENSION": "L1 T-1"
       },
       {
        "ENVIRONMENT_QUANTITY": "height",
        "DIMENSION": "L1"
       },
       {
        "ENVIRONMENT_QUANTITY": "time",
        "DIMENSION": "T1"
       }
      ],
      "SIGNATURE": [
       {
        "NAME": "time_derivative",
        "OVER": [
         "x",
         "v",
         "t"
        ],
        "IMAGE": "d/dt maps position to velocity",
        "FORM": "D(x, t) = v =",
        "IMAGE_FORM": "D(position, time) = velocity"
       }
      ],
      "TRANSFORMATIONS": [
       {
        "NAME": "time_translation",
        "STATEMENT": "t -> t + t0"
       }
      ]
     },
     "ENTRIES": [
      {
       "NAME": "E_x",
       "DOF": "x",
       "DOMAIN": "|x| < x_max",
       "ENVIRONMENT_QUANTITY": "position",
       "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
       "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [
        "N2",
        "KIN"
       ],
       "DIMENSION": "L1"
      },
      {
       "NAME": "E_v",
       "DOF": "v",
       "DOMAIN": "|x| < x_max",
       "ENVIRONMENT_QUANTITY": "velocity",
       "IDENTIFICATION": "v is the time derivative of x",
       "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
       "FALSIFIER_CLASS": "F2",
       "BEARS": [
        "KIN"
       ],
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "E_z",
       "DOF": "z",
       "DOMAIN": "always",
       "ENVIRONMENT_QUANTITY": "height",
       "IDENTIFICATION": "z is the height above the track",
       "FALSIFIER": "any measured z different from 0",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [
        "FREE_Z",
        "C_NOZ"
       ],
       "DIMENSION": "L1"
      },
      {
       "NAME": "E_t",
       "DOF": "t",
       "DOMAIN": "always",
       "ENVIRONMENT_QUANTITY": "time",
       "IDENTIFICATION": "t is the laboratory clock reading",
       "FALSIFIER": "two laboratory clocks that disagree beyond their stated uncertainty",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [],
       "DIMENSION": "T1"
      }
     ]
    },
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[SIGNATURE:time_derivative: FORM does not parse: unexpected token = at 13]]"
  },
  {
   "id": "preimage/tms-minimal-hand-built",
   "fn": "zone_preimage",
   "input": {
    "zone": "TMS",
    "value": {
     "PARAMETERS": {
      "STEP_CONVENTION": "x",
      "K": "2",
      "N_X": 2,
      "S_MAX": 1
     },
     "CONSTANTS": [],
     "YARDSTICKS": []
    }
   },
   "note": "schema 0.5.0: STRUCTURE_CHECK enters after PROMOTION_FLOOR; absent, it serializes as ON",
   "expect": "l4:sTMS6:s0.5.0141:l11:sPARAMETERS122:l16:sSTEP_CONVENTION2:sx2:sK2:s24:sN_X2:i26:sS_MAX2:i111:sIC2_POLICY4:sGAP16:sPROMOTION_FLOOR3:sF216:sSTRUCTURE_CHECK3:sON17:l10:sCONSTANTS1:l18:l11:sYARDSTICKS1:l"
  },
  {
   "id": "digest/tms-minimal",
   "fn": "d_tms",
   "input": {
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "x",
      "K": "2",
      "N_X": 2,
      "S_MAX": 1
     },
     "CONSTANTS": [],
     "YARDSTICKS": []
    }
   },
   "preimage": "l4:sTMS6:s0.5.0141:l11:sPARAMETERS122:l16:sSTEP_CONVENTION2:sx2:sK2:s24:sN_X2:i26:sS_MAX2:i111:sIC2_POLICY4:sGAP16:sPROMOTION_FLOOR3:sF216:sSTRUCTURE_CHECK3:sON17:l10:sCONSTANTS1:l18:l11:sYARDSTICKS1:l",
   "expect": "c64664bc8563144132dfec1a9df79bb4f58a136990a1cb09d4567d254bb52c72"
  },
  {
   "id": "preimage/tms-minimal-K-respelled",
   "fn": "zone_preimage",
   "input": {
    "zone": "TMS",
    "value": {
     "PARAMETERS": {
      "STEP_CONVENTION": "x",
      "K": "20e-1",
      "N_X": 2,
      "S_MAX": 1
     },
     "CONSTANTS": [],
     "YARDSTICKS": []
    }
   },
   "note": "K 20e-1 normalizes to 2: the same hand-built preimage",
   "expect": "l4:sTMS6:s0.5.0141:l11:sPARAMETERS122:l16:sSTEP_CONVENTION2:sx2:sK2:s24:sN_X2:i26:sS_MAX2:i111:sIC2_POLICY4:sGAP16:sPROMOTION_FLOOR3:sF216:sSTRUCTURE_CHECK3:sON17:l10:sCONSTANTS1:l18:l11:sYARDSTICKS1:l"
  },
  {
   "id": "preimage/tms-minimal-IC2-explicit-GAP",
   "fn": "zone_preimage",
   "input": {
    "zone": "TMS",
    "value": {
     "PARAMETERS": {
      "STEP_CONVENTION": "x",
      "K": "2",
      "N_X": 2,
      "S_MAX": 1,
      "IC2_POLICY": "GAP"
     },
     "CONSTANTS": [],
     "YARDSTICKS": []
    }
   },
   "note": "an absent IC2_POLICY serializes as GAP (TPS 2.3.7): the same hand-built preimage",
   "expect": "l4:sTMS6:s0.5.0141:l11:sPARAMETERS122:l16:sSTEP_CONVENTION2:sx2:sK2:s24:sN_X2:i26:sS_MAX2:i111:sIC2_POLICY4:sGAP16:sPROMOTION_FLOOR3:sF216:sSTRUCTURE_CHECK3:sON17:l10:sCONSTANTS1:l18:l11:sYARDSTICKS1:l"
  },
  {
   "id": "preimage/tms-minimal-PROMOTION-FLOOR-explicit-F2",
   "fn": "zone_preimage",
   "input": {
    "zone": "TMS",
    "value": {
     "PARAMETERS": {
      "STEP_CONVENTION": "x",
      "K": "2",
      "N_X": 2,
      "S_MAX": 1,
      "PROMOTION_FLOOR": "F2"
     },
     "CONSTANTS": [],
     "YARDSTICKS": []
    }
   },
   "note": "an absent PROMOTION_FLOOR serializes as F2 (D92.1): the same hand-built preimage",
   "expect": "l4:sTMS6:s0.5.0141:l11:sPARAMETERS122:l16:sSTEP_CONVENTION2:sx2:sK2:s24:sN_X2:i26:sS_MAX2:i111:sIC2_POLICY4:sGAP16:sPROMOTION_FLOOR3:sF216:sSTRUCTURE_CHECK3:sON17:l10:sCONSTANTS1:l18:l11:sYARDSTICKS1:l"
  },
  {
   "id": "preimage/tms-minimal-STRUCTURE-CHECK-explicit-ON",
   "fn": "zone_preimage",
   "input": {
    "zone": "TMS",
    "value": {
     "PARAMETERS": {
      "STEP_CONVENTION": "x",
      "K": "2",
      "N_X": 2,
      "S_MAX": 1,
      "STRUCTURE_CHECK": "ON"
     },
     "CONSTANTS": [],
     "YARDSTICKS": []
    }
   },
   "note": "an absent STRUCTURE_CHECK serializes as ON (D176.1): the same hand-built preimage",
   "expect": "l4:sTMS6:s0.5.0141:l11:sPARAMETERS122:l16:sSTEP_CONVENTION2:sx2:sK2:s24:sN_X2:i26:sS_MAX2:i111:sIC2_POLICY4:sGAP16:sPROMOTION_FLOOR3:sF216:sSTRUCTURE_CHECK3:sON17:l10:sCONSTANTS1:l18:l11:sYARDSTICKS1:l"
  },
  {
   "id": "digest/tms-minimal-STRUCTURE-CHECK-explicit-ON",
   "fn": "d_tms",
   "input": {
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "x",
      "K": "2",
      "N_X": 2,
      "S_MAX": 1,
      "STRUCTURE_CHECK": "ON"
     },
     "CONSTANTS": [],
     "YARDSTICKS": []
    }
   },
   "preimage": "l4:sTMS6:s0.5.0141:l11:sPARAMETERS122:l16:sSTEP_CONVENTION2:sx2:sK2:s24:sN_X2:i26:sS_MAX2:i111:sIC2_POLICY4:sGAP16:sPROMOTION_FLOOR3:sF216:sSTRUCTURE_CHECK3:sON17:l10:sCONSTANTS1:l18:l11:sYARDSTICKS1:l",
   "note": "declaring the default and saying nothing give one digest",
   "expect": "c64664bc8563144132dfec1a9df79bb4f58a136990a1cb09d4567d254bb52c72"
  },
  {
   "id": "preimage/tms-minimal-STRUCTURE-CHECK-OFF-hand-built",
   "fn": "zone_preimage",
   "input": {
    "zone": "TMS",
    "value": {
     "PARAMETERS": {
      "STEP_CONVENTION": "x",
      "K": "2",
      "N_X": 2,
      "S_MAX": 1,
      "STRUCTURE_CHECK": "OFF"
     },
     "CONSTANTS": [],
     "YARDSTICKS": []
    }
   },
   "expect": "l4:sTMS6:s0.5.0142:l11:sPARAMETERS123:l16:sSTEP_CONVENTION2:sx2:sK2:s24:sN_X2:i26:sS_MAX2:i111:sIC2_POLICY4:sGAP16:sPROMOTION_FLOOR3:sF216:sSTRUCTURE_CHECK4:sOFF17:l10:sCONSTANTS1:l18:l11:sYARDSTICKS1:l"
  },
  {
   "id": "digest/tms-minimal-STRUCTURE-CHECK-OFF",
   "fn": "d_tms",
   "input": {
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "x",
      "K": "2",
      "N_X": 2,
      "S_MAX": 1,
      "STRUCTURE_CHECK": "OFF"
     },
     "CONSTANTS": [],
     "YARDSTICKS": []
    }
   },
   "preimage": "l4:sTMS6:s0.5.0142:l11:sPARAMETERS123:l16:sSTEP_CONVENTION2:sx2:sK2:s24:sN_X2:i26:sS_MAX2:i111:sIC2_POLICY4:sGAP16:sPROMOTION_FLOOR3:sF216:sSTRUCTURE_CHECK4:sOFF17:l10:sCONSTANTS1:l18:l11:sYARDSTICKS1:l",
   "expect": "e1c8572d727b8ba027488d11868e13f6615603e31916b741816b3d33845a4c7c"
  },
  {
   "id": "t1/tpk-minimal-passes",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      }
     ]
    }
   },
   "note": "the hand-built TPK below passes T1, so its digest is defined",
   "expect": "[true,[]]"
  },
  {
   "id": "preimage/tpk-minimal-hand-built",
   "fn": "zone_preimage",
   "input": {
    "zone": "TPK",
    "value": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      }
     ]
    }
   },
   "note": "schema 0.5.0: the PARAMETERS part enters ahead of the six kinds; absent, it serializes as D_VARIABLES ONE",
   "expect": "l4:sTPK6:s0.5.040:l11:sPARAMETERS22:l12:sD_VARIABLES4:sONE44:l4:sDOF34:l30:l5:sNAME2:sx10:sDIMENSION3:sL115:l9:sCONSTANT1:l10:l4:sLAW1:l18:l11:sASSUMPTION1:l18:l11:sCONSTRAINT1:l15:l9:sBOUNDARY1:l"
  },
  {
   "id": "digest/tpk-minimal",
   "fn": "d_tpk",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      }
     ]
    }
   },
   "preimage": "l4:sTPK6:s0.5.040:l11:sPARAMETERS22:l12:sD_VARIABLES4:sONE44:l4:sDOF34:l30:l5:sNAME2:sx10:sDIMENSION3:sL115:l9:sCONSTANT1:l10:l4:sLAW1:l18:l11:sASSUMPTION1:l18:l11:sCONSTRAINT1:l15:l9:sBOUNDARY1:l",
   "expect": "6851d16e1532b08843089d65cc7b20376756839c3d5f309351c52e8a585079ca"
  },
  {
   "id": "preimage/tpk-minimal-PARAMETERS-empty",
   "fn": "zone_preimage",
   "input": {
    "zone": "TPK",
    "value": {
     "PARAMETERS": {},
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      }
     ]
    }
   },
   "note": "an absent PARAMETERS or an absent D_VARIABLES serializes as ONE (D177.1): the same hand-built preimage",
   "expect": "l4:sTPK6:s0.5.040:l11:sPARAMETERS22:l12:sD_VARIABLES4:sONE44:l4:sDOF34:l30:l5:sNAME2:sx10:sDIMENSION3:sL115:l9:sCONSTANT1:l10:l4:sLAW1:l18:l11:sASSUMPTION1:l18:l11:sCONSTRAINT1:l15:l9:sBOUNDARY1:l"
  },
  {
   "id": "digest/tpk-minimal-PARAMETERS-empty",
   "fn": "d_tpk",
   "input": {
    "tpk": {
     "PARAMETERS": {},
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      }
     ]
    }
   },
   "preimage": "l4:sTPK6:s0.5.040:l11:sPARAMETERS22:l12:sD_VARIABLES4:sONE44:l4:sDOF34:l30:l5:sNAME2:sx10:sDIMENSION3:sL115:l9:sCONSTANT1:l10:l4:sLAW1:l18:l11:sASSUMPTION1:l18:l11:sCONSTRAINT1:l15:l9:sBOUNDARY1:l",
   "expect": "6851d16e1532b08843089d65cc7b20376756839c3d5f309351c52e8a585079ca"
  },
  {
   "id": "preimage/tpk-minimal-PARAMETERS-explicit-ONE",
   "fn": "zone_preimage",
   "input": {
    "zone": "TPK",
    "value": {
     "PARAMETERS": {
      "D_VARIABLES": "ONE"
     },
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      }
     ]
    }
   },
   "note": "an absent PARAMETERS or an absent D_VARIABLES serializes as ONE (D177.1): the same hand-built preimage",
   "expect": "l4:sTPK6:s0.5.040:l11:sPARAMETERS22:l12:sD_VARIABLES4:sONE44:l4:sDOF34:l30:l5:sNAME2:sx10:sDIMENSION3:sL115:l9:sCONSTANT1:l10:l4:sLAW1:l18:l11:sASSUMPTION1:l18:l11:sCONSTRAINT1:l15:l9:sBOUNDARY1:l"
  },
  {
   "id": "digest/tpk-minimal-PARAMETERS-explicit-ONE",
   "fn": "d_tpk",
   "input": {
    "tpk": {
     "PARAMETERS": {
      "D_VARIABLES": "ONE"
     },
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      }
     ]
    }
   },
   "preimage": "l4:sTPK6:s0.5.040:l11:sPARAMETERS22:l12:sD_VARIABLES4:sONE44:l4:sDOF34:l30:l5:sNAME2:sx10:sDIMENSION3:sL115:l9:sCONSTANT1:l10:l4:sLAW1:l18:l11:sASSUMPTION1:l18:l11:sCONSTRAINT1:l15:l9:sBOUNDARY1:l",
   "expect": "6851d16e1532b08843089d65cc7b20376756839c3d5f309351c52e8a585079ca"
  },
  {
   "id": "preimage/tpk-minimal-SEVERAL-hand-built",
   "fn": "zone_preimage",
   "input": {
    "zone": "TPK",
    "value": {
     "PARAMETERS": {
      "D_VARIABLES": "SEVERAL"
     },
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      }
     ]
    }
   },
   "expect": "l4:sTPK6:s0.5.044:l11:sPARAMETERS26:l12:sD_VARIABLES8:sSEVERAL44:l4:sDOF34:l30:l5:sNAME2:sx10:sDIMENSION3:sL115:l9:sCONSTANT1:l10:l4:sLAW1:l18:l11:sASSUMPTION1:l18:l11:sCONSTRAINT1:l15:l9:sBOUNDARY1:l"
  },
  {
   "id": "digest/tpk-minimal-SEVERAL",
   "fn": "d_tpk",
   "input": {
    "tpk": {
     "PARAMETERS": {
      "D_VARIABLES": "SEVERAL"
     },
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      }
     ]
    }
   },
   "preimage": "l4:sTPK6:s0.5.044:l11:sPARAMETERS26:l12:sD_VARIABLES8:sSEVERAL44:l4:sDOF34:l30:l5:sNAME2:sx10:sDIMENSION3:sL115:l9:sCONSTANT1:l10:l4:sLAW1:l18:l11:sASSUMPTION1:l18:l11:sCONSTRAINT1:l15:l9:sBOUNDARY1:l",
   "expect": "50605f6f7479663436f8fdd50198835d75629e6db33dfbc0e877ae3d0d9b5fad"
  },
  {
   "id": "preimage/toy-TPK",
   "fn": "zone_preimage",
   "input": {
    "zone": "TPK",
    "value": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x"
       ],
       "ROLE": "EOM(v)"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v"
       ],
       "ROLE": "EOM(x)"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z"
       ],
       "ROLE": "CONSTRAINT"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    }
   },
   "expect": "l4:sTPK6:s0.5.040:l11:sPARAMETERS22:l12:sD_VARIABLES4:sONE115:l4:sDOF104:l34:l5:sNAME2:sv10:sDIMENSION7:sL1 T-130:l5:sNAME2:sx10:sDIMENSION3:sL130:l5:sNAME2:sz10:sDIMENSION3:sL1174:l9:sCONSTANT158:l36:l5:sNAME4:sk_s10:sDIMENSION7:sM1 T-230:l5:sNAME2:sm10:sDIMENSION3:sM182:l5:sNAME6:sx_max10:sDIMENSION3:sL16:sVALUE5:s5e-25:sUNIT2:sm12:sUNCERTAINTY5:s1e-3266:l4:sLAW255:l80:l5:sNAME7:sFREE_Z10:sSTATEMENT12:sd2z/dt2 = 05:sREFS5:l2:sz5:sROLE11:sCONSTRAINT74:l5:sNAME4:sKIN10:sSTATEMENT10:sdx/dt = v5:sREFS9:l2:sv2:sx5:sROLE7:sEOM(x)91:l5:sNAME3:sN210:sSTATEMENT17:sm dv/dt = -k_s x5:sREFS19:l4:sk_s2:sm2:sv2:sx5:sROLE7:sEOM(v)122:l11:sASSUMPTION103:l99:l5:sNAME6:sA_lin12:sPROPOSITION51:sthe restoring force is linear in x (Hooke r\u00e9gime)5:sREFS5:l2:sx132:l11:sCONSTRAINT113:l108:l5:sNAME6:sC_NOZ7:sTARGET2:sz7:sACTION4:sFIX10:sSTATEMENT25:smotion confined to z = 06:sVALUE2:s05:sUNIT2:sm88:l9:sBOUNDARY73:l69:l5:sNAME8:sB_small10:sPREDICATE12:s|x| < x_max5:sREFS13:l2:sx6:sx_max"
  },
  {
   "id": "digest/toy-TPK",
   "fn": "d_tpk",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x"
       ],
       "ROLE": "EOM(v)"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v"
       ],
       "ROLE": "EOM(x)"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z"
       ],
       "ROLE": "CONSTRAINT"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    }
   },
   "preimage": "l4:sTPK6:s0.5.040:l11:sPARAMETERS22:l12:sD_VARIABLES4:sONE115:l4:sDOF104:l34:l5:sNAME2:sv10:sDIMENSION7:sL1 T-130:l5:sNAME2:sx10:sDIMENSION3:sL130:l5:sNAME2:sz10:sDIMENSION3:sL1174:l9:sCONSTANT158:l36:l5:sNAME4:sk_s10:sDIMENSION7:sM1 T-230:l5:sNAME2:sm10:sDIMENSION3:sM182:l5:sNAME6:sx_max10:sDIMENSION3:sL16:sVALUE5:s5e-25:sUNIT2:sm12:sUNCERTAINTY5:s1e-3266:l4:sLAW255:l80:l5:sNAME7:sFREE_Z10:sSTATEMENT12:sd2z/dt2 = 05:sREFS5:l2:sz5:sROLE11:sCONSTRAINT74:l5:sNAME4:sKIN10:sSTATEMENT10:sdx/dt = v5:sREFS9:l2:sv2:sx5:sROLE7:sEOM(x)91:l5:sNAME3:sN210:sSTATEMENT17:sm dv/dt = -k_s x5:sREFS19:l4:sk_s2:sm2:sv2:sx5:sROLE7:sEOM(v)122:l11:sASSUMPTION103:l99:l5:sNAME6:sA_lin12:sPROPOSITION51:sthe restoring force is linear in x (Hooke r\u00e9gime)5:sREFS5:l2:sx132:l11:sCONSTRAINT113:l108:l5:sNAME6:sC_NOZ7:sTARGET2:sz7:sACTION4:sFIX10:sSTATEMENT25:smotion confined to z = 06:sVALUE2:s05:sUNIT2:sm88:l9:sBOUNDARY73:l69:l5:sNAME8:sB_small10:sPREDICATE12:s|x| < x_max5:sREFS13:l2:sx6:sx_max",
   "expect": "f3a2a5ac2c2413183a4da94b73da34d7cd5c408a01397262417c424298a40d90"
  },
  {
   "id": "preimage/toy-TrM",
   "fn": "zone_preimage",
   "input": {
    "zone": "TrM",
    "value": {
     "HEADER": {
      "ENVIRONMENT_INVENTORY": [
       {
        "ENVIRONMENT_QUANTITY": "position",
        "DIMENSION": "L1"
       },
       {
        "ENVIRONMENT_QUANTITY": "velocity",
        "DIMENSION": "L1 T-1"
       },
       {
        "ENVIRONMENT_QUANTITY": "height",
        "DIMENSION": "L1"
       }
      ],
      "SIGNATURE": [
       {
        "NAME": "time_derivative",
        "OVER": [
         "x",
         "v"
        ],
        "IMAGE": "d/dt maps position to velocity"
       }
      ],
      "TRANSFORMATIONS": [
       {
        "NAME": "time_translation",
        "STATEMENT": "t -> t + t0"
       }
      ]
     },
     "ENTRIES": [
      {
       "NAME": "E_x",
       "DOF": "x",
       "DOMAIN": "|x| < x_max",
       "ENVIRONMENT_QUANTITY": "position",
       "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
       "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [
        "N2",
        "KIN"
       ],
       "DIMENSION": "L1"
      },
      {
       "NAME": "E_v",
       "DOF": "v",
       "DOMAIN": "|x| < x_max",
       "ENVIRONMENT_QUANTITY": "velocity",
       "IDENTIFICATION": "v is the time derivative of x",
       "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
       "FALSIFIER_CLASS": "F2",
       "BEARS": [
        "KIN"
       ],
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "E_z",
       "DOF": "z",
       "DOMAIN": "always",
       "ENVIRONMENT_QUANTITY": "height",
       "IDENTIFICATION": "z is the height above the track",
       "FALSIFIER": "any measured z different from 0",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [
        "FREE_Z",
        "C_NOZ"
       ],
       "DIMENSION": "L1"
      }
     ]
    }
   },
   "expect": "l4:sTrM6:s0.5.0416:l7:sHEADER204:l22:sENVIRONMENT_INVENTORY174:l52:l21:sENVIRONMENT_QUANTITY7:sheight10:sDIMENSION3:sL154:l21:sENVIRONMENT_QUANTITY9:sposition10:sDIMENSION3:sL158:l21:sENVIRONMENT_QUANTITY9:svelocity10:sDIMENSION7:sL1 T-1108:l10:sSIGNATURE91:l87:l5:sNAME16:stime_derivative5:sOVER9:l2:sv2:sx6:sIMAGE31:sd/dt maps position to velocity83:l16:sTRANSFORMATIONS60:l56:l5:sNAME17:stime_translation10:sSTATEMENT12:st -> t + t0861:l8:sENTRIES846:l273:l5:sNAME4:sE_v4:sDOF2:sv7:sDOMAIN12:s|x| < x_max21:sENVIRONMENT_QUANTITY9:svelocity15:sIDENTIFICATION30:sv is the time derivative of x10:sFALSIFIER60:sa measured velocity differing from dx/dt beyond uncertainty16:sFALSIFIER_CLASS3:sF26:sBEARS7:l4:sKIN10:sDIMENSION7:sL1 T-1313:l5:sNAME4:sE_x4:sDOF2:sx7:sDOMAIN12:s|x| < x_max21:sENVIRONMENT_QUANTITY9:sposition15:sIDENTIFICATION61:sx is the displacement from equilibrium along the spring axis10:sFALSIFIER67:sa measured restoring force not proportional to x inside the domain16:sFALSIFIER_CLASS3:sF36:sBEARS12:l4:sKIN3:sN210:sDIMENSION3:sL1247:l5:sNAME4:sE_z4:sDOF2:sz7:sDOMAIN7:salways21:sENVIRONMENT_QUANTITY7:sheight15:sIDENTIFICATION32:sz is the height above the track10:sFALSIFIER32:sany measured z different from 016:sFALSIFIER_CLASS3:sF36:sBEARS18:l6:sC_NOZ7:sFREE_Z10:sDIMENSION3:sL1"
  },
  {
   "id": "digest/toy-TrM",
   "fn": "d_trm",
   "input": {
    "trm": {
     "HEADER": {
      "ENVIRONMENT_INVENTORY": [
       {
        "ENVIRONMENT_QUANTITY": "position",
        "DIMENSION": "L1"
       },
       {
        "ENVIRONMENT_QUANTITY": "velocity",
        "DIMENSION": "L1 T-1"
       },
       {
        "ENVIRONMENT_QUANTITY": "height",
        "DIMENSION": "L1"
       }
      ],
      "SIGNATURE": [
       {
        "NAME": "time_derivative",
        "OVER": [
         "x",
         "v"
        ],
        "IMAGE": "d/dt maps position to velocity"
       }
      ],
      "TRANSFORMATIONS": [
       {
        "NAME": "time_translation",
        "STATEMENT": "t -> t + t0"
       }
      ]
     },
     "ENTRIES": [
      {
       "NAME": "E_x",
       "DOF": "x",
       "DOMAIN": "|x| < x_max",
       "ENVIRONMENT_QUANTITY": "position",
       "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
       "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [
        "N2",
        "KIN"
       ],
       "DIMENSION": "L1"
      },
      {
       "NAME": "E_v",
       "DOF": "v",
       "DOMAIN": "|x| < x_max",
       "ENVIRONMENT_QUANTITY": "velocity",
       "IDENTIFICATION": "v is the time derivative of x",
       "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
       "FALSIFIER_CLASS": "F2",
       "BEARS": [
        "KIN"
       ],
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "E_z",
       "DOF": "z",
       "DOMAIN": "always",
       "ENVIRONMENT_QUANTITY": "height",
       "IDENTIFICATION": "z is the height above the track",
       "FALSIFIER": "any measured z different from 0",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [
        "FREE_Z",
        "C_NOZ"
       ],
       "DIMENSION": "L1"
      }
     ]
    }
   },
   "preimage": "l4:sTrM6:s0.5.0416:l7:sHEADER204:l22:sENVIRONMENT_INVENTORY174:l52:l21:sENVIRONMENT_QUANTITY7:sheight10:sDIMENSION3:sL154:l21:sENVIRONMENT_QUANTITY9:sposition10:sDIMENSION3:sL158:l21:sENVIRONMENT_QUANTITY9:svelocity10:sDIMENSION7:sL1 T-1108:l10:sSIGNATURE91:l87:l5:sNAME16:stime_derivative5:sOVER9:l2:sv2:sx6:sIMAGE31:sd/dt maps position to velocity83:l16:sTRANSFORMATIONS60:l56:l5:sNAME17:stime_translation10:sSTATEMENT12:st -> t + t0861:l8:sENTRIES846:l273:l5:sNAME4:sE_v4:sDOF2:sv7:sDOMAIN12:s|x| < x_max21:sENVIRONMENT_QUANTITY9:svelocity15:sIDENTIFICATION30:sv is the time derivative of x10:sFALSIFIER60:sa measured velocity differing from dx/dt beyond uncertainty16:sFALSIFIER_CLASS3:sF26:sBEARS7:l4:sKIN10:sDIMENSION7:sL1 T-1313:l5:sNAME4:sE_x4:sDOF2:sx7:sDOMAIN12:s|x| < x_max21:sENVIRONMENT_QUANTITY9:sposition15:sIDENTIFICATION61:sx is the displacement from equilibrium along the spring axis10:sFALSIFIER67:sa measured restoring force not proportional to x inside the domain16:sFALSIFIER_CLASS3:sF36:sBEARS12:l4:sKIN3:sN210:sDIMENSION3:sL1247:l5:sNAME4:sE_z4:sDOF2:sz7:sDOMAIN7:salways21:sENVIRONMENT_QUANTITY7:sheight15:sIDENTIFICATION32:sz is the height above the track10:sFALSIFIER32:sany measured z different from 016:sFALSIFIER_CLASS3:sF36:sBEARS18:l6:sC_NOZ7:sFREE_Z10:sDIMENSION3:sL1",
   "expect": "4a92a302ba3b4701b3058c3985ce6a250c29d98d3abe15e19bd04ba56c9bca23"
  },
  {
   "id": "preimage/toy-TMS",
   "fn": "zone_preimage",
   "input": {
    "zone": "TMS",
    "value": {
     "PARAMETERS": {
      "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
      "K": "2",
      "N_X": 2,
      "S_MAX": 10
     },
     "CONSTANTS": [
      {
       "NAME": "w_a",
       "VALUE": "1"
      },
      {
       "NAME": "w_s",
       "VALUE": "0.5"
      }
     ],
     "YARDSTICKS": [
      {
       "NAME": "combined_distance",
       "KEY": [
        "SR1",
        "WSUM:w_a*A;w_s*S",
        "S"
       ],
       "LIMITING": []
      }
     ]
    }
   },
   "expect": "l4:sTMS6:s0.5.0212:l11:sPARAMETERS193:l16:sSTEP_CONVENTION71:sone application of an inference rule or algebraic identity is one step2:sK2:s24:sN_X2:i26:sS_MAX3:i1011:sIC2_POLICY4:sGAP16:sPROMOTION_FLOOR3:sF216:sSTRUCTURE_CHECK3:sON79:l10:sCONSTANTS62:l26:l5:sNAME4:sw_a6:sVALUE2:s129:l5:sNAME4:sw_s6:sVALUE5:s5e-1105:l11:sYARDSTICKS87:l83:l5:sNAME18:scombined_distance4:sKEY31:l4:sSR117:sWSUM:w_a*A;w_s*S2:sS9:sLIMITING1:l"
  },
  {
   "id": "digest/toy-TMS",
   "fn": "d_tms",
   "input": {
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
      "K": "2",
      "N_X": 2,
      "S_MAX": 10
     },
     "CONSTANTS": [
      {
       "NAME": "w_a",
       "VALUE": "1"
      },
      {
       "NAME": "w_s",
       "VALUE": "0.5"
      }
     ],
     "YARDSTICKS": [
      {
       "NAME": "combined_distance",
       "KEY": [
        "SR1",
        "WSUM:w_a*A;w_s*S",
        "S"
       ],
       "LIMITING": []
      }
     ]
    }
   },
   "preimage": "l4:sTMS6:s0.5.0212:l11:sPARAMETERS193:l16:sSTEP_CONVENTION71:sone application of an inference rule or algebraic identity is one step2:sK2:s24:sN_X2:i26:sS_MAX3:i1011:sIC2_POLICY4:sGAP16:sPROMOTION_FLOOR3:sF216:sSTRUCTURE_CHECK3:sON79:l10:sCONSTANTS62:l26:l5:sNAME4:sw_a6:sVALUE2:s129:l5:sNAME4:sw_s6:sVALUE5:s5e-1105:l11:sYARDSTICKS87:l83:l5:sNAME18:scombined_distance4:sKEY31:l4:sSR117:sWSUM:w_a*A;w_s*S2:sS9:sLIMITING1:l",
   "expect": "7a962e2297d6798801fa2593be9cd92995cc3a5f9c817cc8a19335c625784128"
  },
  {
   "id": "digest/toy-TFK",
   "fn": "d_tfk_of",
   "input": {
    "tfk": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    }
   },
   "note": "combine_digests of the three toy zone digests above (D97.1)",
   "expect": "31a356815ab76ffb69c016c4e163c1862ec84aca6590c6083b6859727dfee335"
  },
  {
   "id": "preimage/spring-forms-TPK",
   "fn": "zone_preimage",
   "input": {
    "zone": "TPK",
    "value": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "note": "ROLE enters after REFS; EQUATION and CONDITION after it in their canonical spelling",
   "expect": "l4:sTPK6:s0.5.040:l11:sPARAMETERS22:l12:sD_VARIABLES4:sONE148:l4:sDOF137:l30:l5:sNAME2:st10:sDIMENSION3:sT134:l5:sNAME2:sv10:sDIMENSION7:sL1 T-130:l5:sNAME2:sx10:sDIMENSION3:sL130:l5:sNAME2:sz10:sDIMENSION3:sL1174:l9:sCONSTANT158:l36:l5:sNAME4:sk_s10:sDIMENSION7:sM1 T-230:l5:sNAME2:sm10:sDIMENSION3:sM182:l5:sNAME6:sx_max10:sDIMENSION3:sL16:sVALUE5:s5e-25:sUNIT2:sm12:sUNCERTAINTY5:s1e-3359:l4:sLAW348:l109:l5:sNAME7:sFREE_Z10:sSTATEMENT12:sd2z/dt2 = 05:sREFS9:l2:st2:sz5:sROLE11:sCONSTRAINT9:sEQUATION11:sD(z,t,2)=0101:l5:sNAME4:sKIN10:sSTATEMENT10:sdx/dt = v5:sREFS13:l2:st2:sv2:sx5:sROLE7:sEOM(x)9:sEQUATION9:sD(x,t)=v125:l5:sNAME3:sN210:sSTATEMENT17:sm dv/dt = -k_s x5:sREFS23:l4:sk_s2:sm2:st2:sv2:sx5:sROLE7:sEOM(v)9:sEQUATION16:sm*D(v,t)=-k_s*x122:l11:sASSUMPTION103:l99:l5:sNAME6:sA_lin12:sPROPOSITION51:sthe restoring force is linear in x (Hooke r\u00e9gime)5:sREFS5:l2:sx132:l11:sCONSTRAINT113:l108:l5:sNAME6:sC_NOZ7:sTARGET2:sz7:sACTION4:sFIX10:sSTATEMENT25:smotion confined to z = 06:sVALUE2:s05:sUNIT2:sm118:l9:sBOUNDARY102:l98:l5:sNAME8:sB_small10:sPREDICATE12:s|x| < x_max5:sREFS13:l2:sx6:sx_max10:sCONDITION13:sabs(x)<x_max"
  },
  {
   "id": "digest/spring-forms-TPK",
   "fn": "d_tpk",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "preimage": "l4:sTPK6:s0.5.040:l11:sPARAMETERS22:l12:sD_VARIABLES4:sONE148:l4:sDOF137:l30:l5:sNAME2:st10:sDIMENSION3:sT134:l5:sNAME2:sv10:sDIMENSION7:sL1 T-130:l5:sNAME2:sx10:sDIMENSION3:sL130:l5:sNAME2:sz10:sDIMENSION3:sL1174:l9:sCONSTANT158:l36:l5:sNAME4:sk_s10:sDIMENSION7:sM1 T-230:l5:sNAME2:sm10:sDIMENSION3:sM182:l5:sNAME6:sx_max10:sDIMENSION3:sL16:sVALUE5:s5e-25:sUNIT2:sm12:sUNCERTAINTY5:s1e-3359:l4:sLAW348:l109:l5:sNAME7:sFREE_Z10:sSTATEMENT12:sd2z/dt2 = 05:sREFS9:l2:st2:sz5:sROLE11:sCONSTRAINT9:sEQUATION11:sD(z,t,2)=0101:l5:sNAME4:sKIN10:sSTATEMENT10:sdx/dt = v5:sREFS13:l2:st2:sv2:sx5:sROLE7:sEOM(x)9:sEQUATION9:sD(x,t)=v125:l5:sNAME3:sN210:sSTATEMENT17:sm dv/dt = -k_s x5:sREFS23:l4:sk_s2:sm2:st2:sv2:sx5:sROLE7:sEOM(v)9:sEQUATION16:sm*D(v,t)=-k_s*x122:l11:sASSUMPTION103:l99:l5:sNAME6:sA_lin12:sPROPOSITION51:sthe restoring force is linear in x (Hooke r\u00e9gime)5:sREFS5:l2:sx132:l11:sCONSTRAINT113:l108:l5:sNAME6:sC_NOZ7:sTARGET2:sz7:sACTION4:sFIX10:sSTATEMENT25:smotion confined to z = 06:sVALUE2:s05:sUNIT2:sm118:l9:sBOUNDARY102:l98:l5:sNAME8:sB_small10:sPREDICATE12:s|x| < x_max5:sREFS13:l2:sx6:sx_max10:sCONDITION13:sabs(x)<x_max",
   "expect": "3281bc7890cb913b7dbda5a190c72f38a993cffd0d27a73a361dbbd70291686c"
  },
  {
   "id": "preimage/spring-forms-TrM",
   "fn": "zone_preimage",
   "input": {
    "zone": "TrM",
    "value": {
     "HEADER": {
      "ENVIRONMENT_INVENTORY": [
       {
        "ENVIRONMENT_QUANTITY": "position",
        "DIMENSION": "L1"
       },
       {
        "ENVIRONMENT_QUANTITY": "velocity",
        "DIMENSION": "L1 T-1"
       },
       {
        "ENVIRONMENT_QUANTITY": "height",
        "DIMENSION": "L1"
       },
       {
        "ENVIRONMENT_QUANTITY": "time",
        "DIMENSION": "T1"
       }
      ],
      "SIGNATURE": [
       {
        "NAME": "time_derivative",
        "OVER": [
         "x",
         "v",
         "t"
        ],
        "IMAGE": "d/dt maps position to velocity",
        "FORM": "D(x, t) = v",
        "IMAGE_FORM": "D(position, time) = velocity"
       }
      ],
      "TRANSFORMATIONS": [
       {
        "NAME": "time_translation",
        "STATEMENT": "t -> t + t0"
       }
      ]
     },
     "ENTRIES": [
      {
       "NAME": "E_x",
       "DOF": "x",
       "DOMAIN": "|x| < x_max",
       "ENVIRONMENT_QUANTITY": "position",
       "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
       "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [
        "N2",
        "KIN"
       ],
       "DIMENSION": "L1"
      },
      {
       "NAME": "E_v",
       "DOF": "v",
       "DOMAIN": "|x| < x_max",
       "ENVIRONMENT_QUANTITY": "velocity",
       "IDENTIFICATION": "v is the time derivative of x",
       "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
       "FALSIFIER_CLASS": "F2",
       "BEARS": [
        "KIN"
       ],
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "E_z",
       "DOF": "z",
       "DOMAIN": "always",
       "ENVIRONMENT_QUANTITY": "height",
       "IDENTIFICATION": "z is the height above the track",
       "FALSIFIER": "any measured z different from 0",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [
        "FREE_Z",
        "C_NOZ"
       ],
       "DIMENSION": "L1"
      },
      {
       "NAME": "E_t",
       "DOF": "t",
       "DOMAIN": "always",
       "ENVIRONMENT_QUANTITY": "time",
       "IDENTIFICATION": "t is the laboratory clock reading",
       "FALSIFIER": "two laboratory clocks that disagree beyond their stated uncertainty",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [],
       "DIMENSION": "T1"
      }
     ]
    }
   },
   "note": "FORM and IMAGE_FORM enter after IMAGE in their canonical spelling",
   "expect": "l4:sTrM6:s0.5.0537:l7:sHEADER257:l22:sENVIRONMENT_INVENTORY227:l52:l21:sENVIRONMENT_QUANTITY7:sheight10:sDIMENSION3:sL154:l21:sENVIRONMENT_QUANTITY9:sposition10:sDIMENSION3:sL150:l21:sENVIRONMENT_QUANTITY5:stime10:sDIMENSION3:sT158:l21:sENVIRONMENT_QUANTITY9:svelocity10:sDIMENSION7:sL1 T-1176:l10:sSIGNATURE158:l153:l5:sNAME16:stime_derivative5:sOVER13:l2:st2:sv2:sx6:sIMAGE31:sd/dt maps position to velocity5:sFORM9:sD(x,t)=v11:sIMAGE_FORM26:sD(position,time)=velocity83:l16:sTRANSFORMATIONS60:l56:l5:sNAME17:stime_translation10:sSTATEMENT12:st -> t + t01131:l8:sENTRIES1115:l265:l5:sNAME4:sE_t4:sDOF2:st7:sDOMAIN7:salways21:sENVIRONMENT_QUANTITY5:stime15:sIDENTIFICATION34:st is the laboratory clock reading10:sFALSIFIER68:stwo laboratory clocks that disagree beyond their stated uncertainty16:sFALSIFIER_CLASS3:sF36:sBEARS1:l10:sDIMENSION3:sT1273:l5:sNAME4:sE_v4:sDOF2:sv7:sDOMAIN12:s|x| < x_max21:sENVIRONMENT_QUANTITY9:svelocity15:sIDENTIFICATION30:sv is the time derivative of x10:sFALSIFIER60:sa measured velocity differing from dx/dt beyond uncertainty16:sFALSIFIER_CLASS3:sF26:sBEARS7:l4:sKIN10:sDIMENSION7:sL1 T-1313:l5:sNAME4:sE_x4:sDOF2:sx7:sDOMAIN12:s|x| < x_max21:sENVIRONMENT_QUANTITY9:sposition15:sIDENTIFICATION61:sx is the displacement from equilibrium along the spring axis10:sFALSIFIER67:sa measured restoring force not proportional to x inside the domain16:sFALSIFIER_CLASS3:sF36:sBEARS12:l4:sKIN3:sN210:sDIMENSION3:sL1247:l5:sNAME4:sE_z4:sDOF2:sz7:sDOMAIN7:salways21:sENVIRONMENT_QUANTITY7:sheight15:sIDENTIFICATION32:sz is the height above the track10:sFALSIFIER32:sany measured z different from 016:sFALSIFIER_CLASS3:sF36:sBEARS18:l6:sC_NOZ7:sFREE_Z10:sDIMENSION3:sL1"
  },
  {
   "id": "digest/spring-forms-TrM",
   "fn": "d_trm",
   "input": {
    "trm": {
     "HEADER": {
      "ENVIRONMENT_INVENTORY": [
       {
        "ENVIRONMENT_QUANTITY": "position",
        "DIMENSION": "L1"
       },
       {
        "ENVIRONMENT_QUANTITY": "velocity",
        "DIMENSION": "L1 T-1"
       },
       {
        "ENVIRONMENT_QUANTITY": "height",
        "DIMENSION": "L1"
       },
       {
        "ENVIRONMENT_QUANTITY": "time",
        "DIMENSION": "T1"
       }
      ],
      "SIGNATURE": [
       {
        "NAME": "time_derivative",
        "OVER": [
         "x",
         "v",
         "t"
        ],
        "IMAGE": "d/dt maps position to velocity",
        "FORM": "D(x, t) = v",
        "IMAGE_FORM": "D(position, time) = velocity"
       }
      ],
      "TRANSFORMATIONS": [
       {
        "NAME": "time_translation",
        "STATEMENT": "t -> t + t0"
       }
      ]
     },
     "ENTRIES": [
      {
       "NAME": "E_x",
       "DOF": "x",
       "DOMAIN": "|x| < x_max",
       "ENVIRONMENT_QUANTITY": "position",
       "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
       "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [
        "N2",
        "KIN"
       ],
       "DIMENSION": "L1"
      },
      {
       "NAME": "E_v",
       "DOF": "v",
       "DOMAIN": "|x| < x_max",
       "ENVIRONMENT_QUANTITY": "velocity",
       "IDENTIFICATION": "v is the time derivative of x",
       "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
       "FALSIFIER_CLASS": "F2",
       "BEARS": [
        "KIN"
       ],
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "E_z",
       "DOF": "z",
       "DOMAIN": "always",
       "ENVIRONMENT_QUANTITY": "height",
       "IDENTIFICATION": "z is the height above the track",
       "FALSIFIER": "any measured z different from 0",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [
        "FREE_Z",
        "C_NOZ"
       ],
       "DIMENSION": "L1"
      },
      {
       "NAME": "E_t",
       "DOF": "t",
       "DOMAIN": "always",
       "ENVIRONMENT_QUANTITY": "time",
       "IDENTIFICATION": "t is the laboratory clock reading",
       "FALSIFIER": "two laboratory clocks that disagree beyond their stated uncertainty",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [],
       "DIMENSION": "T1"
      }
     ]
    }
   },
   "preimage": "l4:sTrM6:s0.5.0537:l7:sHEADER257:l22:sENVIRONMENT_INVENTORY227:l52:l21:sENVIRONMENT_QUANTITY7:sheight10:sDIMENSION3:sL154:l21:sENVIRONMENT_QUANTITY9:sposition10:sDIMENSION3:sL150:l21:sENVIRONMENT_QUANTITY5:stime10:sDIMENSION3:sT158:l21:sENVIRONMENT_QUANTITY9:svelocity10:sDIMENSION7:sL1 T-1176:l10:sSIGNATURE158:l153:l5:sNAME16:stime_derivative5:sOVER13:l2:st2:sv2:sx6:sIMAGE31:sd/dt maps position to velocity5:sFORM9:sD(x,t)=v11:sIMAGE_FORM26:sD(position,time)=velocity83:l16:sTRANSFORMATIONS60:l56:l5:sNAME17:stime_translation10:sSTATEMENT12:st -> t + t01131:l8:sENTRIES1115:l265:l5:sNAME4:sE_t4:sDOF2:st7:sDOMAIN7:salways21:sENVIRONMENT_QUANTITY5:stime15:sIDENTIFICATION34:st is the laboratory clock reading10:sFALSIFIER68:stwo laboratory clocks that disagree beyond their stated uncertainty16:sFALSIFIER_CLASS3:sF36:sBEARS1:l10:sDIMENSION3:sT1273:l5:sNAME4:sE_v4:sDOF2:sv7:sDOMAIN12:s|x| < x_max21:sENVIRONMENT_QUANTITY9:svelocity15:sIDENTIFICATION30:sv is the time derivative of x10:sFALSIFIER60:sa measured velocity differing from dx/dt beyond uncertainty16:sFALSIFIER_CLASS3:sF26:sBEARS7:l4:sKIN10:sDIMENSION7:sL1 T-1313:l5:sNAME4:sE_x4:sDOF2:sx7:sDOMAIN12:s|x| < x_max21:sENVIRONMENT_QUANTITY9:sposition15:sIDENTIFICATION61:sx is the displacement from equilibrium along the spring axis10:sFALSIFIER67:sa measured restoring force not proportional to x inside the domain16:sFALSIFIER_CLASS3:sF36:sBEARS12:l4:sKIN3:sN210:sDIMENSION3:sL1247:l5:sNAME4:sE_z4:sDOF2:sz7:sDOMAIN7:salways21:sENVIRONMENT_QUANTITY7:sheight15:sIDENTIFICATION32:sz is the height above the track10:sFALSIFIER32:sany measured z different from 016:sFALSIFIER_CLASS3:sF36:sBEARS18:l6:sC_NOZ7:sFREE_Z10:sDIMENSION3:sL1",
   "expect": "8a883cf8c7712125f71ec1286951553205d9d00699af82e079ace3a2f7eb4087"
  },
  {
   "id": "digest/spring-forms-TFK",
   "fn": "d_tfk_of",
   "input": {
    "tfk": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       },
       {
        "NAME": "t",
        "DIMENSION": "T1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x",
         "t"
        ],
        "ROLE": "EOM(v)",
        "EQUATION": "m * D(v, t) = -k_s * x"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v",
         "t"
        ],
        "ROLE": "EOM(x)",
        "EQUATION": "D(x, t) = v"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z",
         "t"
        ],
        "ROLE": "CONSTRAINT",
        "EQUATION": "D(z, t, 2) = 0"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ],
        "CONDITION": "abs(x) < x_max"
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "time",
         "DIMENSION": "T1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v",
          "t"
         ],
         "IMAGE": "d/dt maps position to velocity",
         "FORM": "D(x, t) = v",
         "IMAGE_FORM": "D(position, time) = velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_t",
        "DOF": "t",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "time",
        "IDENTIFICATION": "t is the laboratory clock reading",
        "FALSIFIER": "two laboratory clocks that disagree beyond their stated uncertainty",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [],
        "DIMENSION": "T1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    }
   },
   "note": "the tutorial's spring with its forms and ROLEs under schema 0.5.0",
   "expect": "78334d466495e9a98c92176244c2d79f7662be724bb478aa8dabcbe523394067"
  },
  {
   "id": "invariance/reordered-TPK-same-digest",
   "fn": "d_tpk",
   "input": {
    "tpk": {
     "BOUNDARY": [
      {
       "REFS": [
        "x_max",
        "x"
       ],
       "PREDICATE": "|x| < x_max",
       "NAME": "B_small"
      }
     ],
     "CONSTRAINT": [
      {
       "STATEMENT": "motion confined to z = 0",
       "UNIT": "m",
       "VALUE": "0",
       "ACTION": "FIX",
       "TARGET": "z",
       "NAME": "C_NOZ"
      }
     ],
     "ASSUMPTION": [
      {
       "REFS": [
        "x"
       ],
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "NAME": "A_lin"
      }
     ],
     "LAW": [
      {
       "ROLE": "CONSTRAINT",
       "REFS": [
        "z"
       ],
       "STATEMENT": "d2z/dt2 = 0",
       "NAME": "FREE_Z"
      },
      {
       "ROLE": "EOM(x)",
       "REFS": [
        "v",
        "x"
       ],
       "STATEMENT": "dx/dt = v",
       "NAME": "KIN"
      },
      {
       "ROLE": "EOM(v)",
       "REFS": [
        "x",
        "k_s",
        "v",
        "m"
       ],
       "STATEMENT": "m dv/dt = -k_s x",
       "NAME": "N2"
      }
     ],
     "CONSTANT": [
      {
       "UNCERTAINTY": "0.001",
       "UNIT": "m",
       "VALUE": "0.05",
       "DIMENSION": "L1",
       "NAME": "x_max"
      },
      {
       "DIMENSION": "M1 T-2",
       "NAME": "k_s"
      },
      {
       "DIMENSION": "M1",
       "NAME": "m"
      }
     ],
     "DOF": [
      {
       "DIMENSION": "L1",
       "NAME": "z"
      },
      {
       "DIMENSION": "L1 T-1",
       "NAME": "v"
      },
      {
       "DIMENSION": "L1",
       "NAME": "x"
      }
     ]
    }
   },
   "expect": "f3a2a5ac2c2413183a4da94b73da34d7cd5c408a01397262417c424298a40d90"
  },
  {
   "id": "invariance/reordered-TrM-same-digest",
   "fn": "d_trm",
   "input": {
    "trm": {
     "ENTRIES": [
      {
       "DIMENSION": "L1",
       "BEARS": [
        "C_NOZ",
        "FREE_Z"
       ],
       "FALSIFIER_CLASS": "F3",
       "FALSIFIER": "any measured z different from 0",
       "IDENTIFICATION": "z is the height above the track",
       "ENVIRONMENT_QUANTITY": "height",
       "DOMAIN": "always",
       "DOF": "z",
       "NAME": "E_z"
      },
      {
       "DIMENSION": "L1 T-1",
       "BEARS": [
        "KIN"
       ],
       "FALSIFIER_CLASS": "F2",
       "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
       "IDENTIFICATION": "v is the time derivative of x",
       "ENVIRONMENT_QUANTITY": "velocity",
       "DOMAIN": "|x| < x_max",
       "DOF": "v",
       "NAME": "E_v"
      },
      {
       "DIMENSION": "L1",
       "BEARS": [
        "KIN",
        "N2"
       ],
       "FALSIFIER_CLASS": "F3",
       "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
       "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
       "ENVIRONMENT_QUANTITY": "position",
       "DOMAIN": "|x| < x_max",
       "DOF": "x",
       "NAME": "E_x"
      }
     ],
     "HEADER": {
      "TRANSFORMATIONS": [
       {
        "STATEMENT": "t -> t + t0",
        "NAME": "time_translation"
       }
      ],
      "SIGNATURE": [
       {
        "IMAGE": "d/dt maps position to velocity",
        "OVER": [
         "v",
         "x"
        ],
        "NAME": "time_derivative"
       }
      ],
      "ENVIRONMENT_INVENTORY": [
       {
        "DIMENSION": "L1",
        "ENVIRONMENT_QUANTITY": "height"
       },
       {
        "DIMENSION": "L1 T-1",
        "ENVIRONMENT_QUANTITY": "velocity"
       },
       {
        "DIMENSION": "L1",
        "ENVIRONMENT_QUANTITY": "position"
       }
      ]
     }
    }
   },
   "expect": "4a92a302ba3b4701b3058c3985ce6a250c29d98d3abe15e19bd04ba56c9bca23"
  },
  {
   "id": "invariance/reordered-TMS-same-digest",
   "fn": "d_tms",
   "input": {
    "tms": {
     "YARDSTICKS": [
      {
       "LIMITING": [],
       "KEY": [
        "SR1",
        "WSUM:w_a*A;w_s*S",
        "S"
       ],
       "NAME": "combined_distance"
      }
     ],
     "CONSTANTS": [
      {
       "VALUE": "0.5",
       "NAME": "w_s"
      },
      {
       "VALUE": "1",
       "NAME": "w_a"
      }
     ],
     "PARAMETERS": {
      "S_MAX": 10,
      "N_X": 2,
      "K": "2",
      "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step"
     }
    }
   },
   "expect": "7a962e2297d6798801fa2593be9cd92995cc3a5f9c817cc8a19335c625784128"
  },
  {
   "id": "invariance/NFD-text-same-digest",
   "fn": "d_tpk",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x"
       ],
       "ROLE": "EOM(v)"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v"
       ],
       "ROLE": "EOM(x)"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z"
       ],
       "ROLE": "CONSTRAINT"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke re\u0301gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    }
   },
   "expect": "f3a2a5ac2c2413183a4da94b73da34d7cd5c408a01397262417c424298a40d90"
  },
  {
   "id": "successor/reordered",
   "fn": "classify_successor",
   "input": {
    "a": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    },
    "b": {
     "TMS": {
      "YARDSTICKS": [
       {
        "LIMITING": [],
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "NAME": "combined_distance"
       }
      ],
      "CONSTANTS": [
       {
        "VALUE": "0.5",
        "NAME": "w_s"
       },
       {
        "VALUE": "1",
        "NAME": "w_a"
       }
      ],
      "PARAMETERS": {
       "S_MAX": 10,
       "N_X": 2,
       "K": "2",
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step"
      }
     },
     "TrM": {
      "ENTRIES": [
       {
        "DIMENSION": "L1",
        "BEARS": [
         "C_NOZ",
         "FREE_Z"
        ],
        "FALSIFIER_CLASS": "F3",
        "FALSIFIER": "any measured z different from 0",
        "IDENTIFICATION": "z is the height above the track",
        "ENVIRONMENT_QUANTITY": "height",
        "DOMAIN": "always",
        "DOF": "z",
        "NAME": "E_z"
       },
       {
        "DIMENSION": "L1 T-1",
        "BEARS": [
         "KIN"
        ],
        "FALSIFIER_CLASS": "F2",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "IDENTIFICATION": "v is the time derivative of x",
        "ENVIRONMENT_QUANTITY": "velocity",
        "DOMAIN": "|x| < x_max",
        "DOF": "v",
        "NAME": "E_v"
       },
       {
        "DIMENSION": "L1",
        "BEARS": [
         "KIN",
         "N2"
        ],
        "FALSIFIER_CLASS": "F3",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "ENVIRONMENT_QUANTITY": "position",
        "DOMAIN": "|x| < x_max",
        "DOF": "x",
        "NAME": "E_x"
       }
      ],
      "HEADER": {
       "TRANSFORMATIONS": [
        {
         "STATEMENT": "t -> t + t0",
         "NAME": "time_translation"
        }
       ],
       "SIGNATURE": [
        {
         "IMAGE": "d/dt maps position to velocity",
         "OVER": [
          "v",
          "x"
         ],
         "NAME": "time_derivative"
        }
       ],
       "ENVIRONMENT_INVENTORY": [
        {
         "DIMENSION": "L1",
         "ENVIRONMENT_QUANTITY": "height"
        },
        {
         "DIMENSION": "L1 T-1",
         "ENVIRONMENT_QUANTITY": "velocity"
        },
        {
         "DIMENSION": "L1",
         "ENVIRONMENT_QUANTITY": "position"
        }
       ]
      }
     },
     "TPK": {
      "BOUNDARY": [
       {
        "REFS": [
         "x_max",
         "x"
        ],
        "PREDICATE": "|x| < x_max",
        "NAME": "B_small"
       }
      ],
      "CONSTRAINT": [
       {
        "STATEMENT": "motion confined to z = 0",
        "UNIT": "m",
        "VALUE": "0",
        "ACTION": "FIX",
        "TARGET": "z",
        "NAME": "C_NOZ"
       }
      ],
      "ASSUMPTION": [
       {
        "REFS": [
         "x"
        ],
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "NAME": "A_lin"
       }
      ],
      "LAW": [
       {
        "ROLE": "CONSTRAINT",
        "REFS": [
         "z"
        ],
        "STATEMENT": "d2z/dt2 = 0",
        "NAME": "FREE_Z"
       },
       {
        "ROLE": "EOM(x)",
        "REFS": [
         "v",
         "x"
        ],
        "STATEMENT": "dx/dt = v",
        "NAME": "KIN"
       },
       {
        "ROLE": "EOM(v)",
        "REFS": [
         "x",
         "k_s",
         "v",
         "m"
        ],
        "STATEMENT": "m dv/dt = -k_s x",
        "NAME": "N2"
       }
      ],
      "CONSTANT": [
       {
        "UNCERTAINTY": "0.001",
        "UNIT": "m",
        "VALUE": "0.05",
        "DIMENSION": "L1",
        "NAME": "x_max"
       },
       {
        "DIMENSION": "M1 T-2",
        "NAME": "k_s"
       },
       {
        "DIMENSION": "M1",
        "NAME": "m"
       }
      ],
      "DOF": [
       {
        "DIMENSION": "L1",
        "NAME": "z"
       },
       {
        "DIMENSION": "L1 T-1",
        "NAME": "v"
       },
       {
        "DIMENSION": "L1",
        "NAME": "x"
       }
      ]
     }
    }
   },
   "expect": "IDENTICAL"
  },
  {
   "id": "successor/nfd",
   "fn": "classify_successor",
   "input": {
    "a": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    },
    "b": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke re\u0301gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    }
   },
   "expect": "IDENTICAL"
  },
  {
   "id": "successor/falsifier-class-changed",
   "fn": "classify_successor",
   "input": {
    "a": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    },
    "b": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    }
   },
   "expect": "CORRESPONDENCE_CHANGED"
  },
  {
   "id": "successor/header-changed",
   "fn": "classify_successor",
   "input": {
    "a": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    },
    "b": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0, t0 real"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    }
   },
   "expect": "CORRESPONDENCE_CHANGED"
  },
  {
   "id": "successor/k-changed",
   "fn": "classify_successor",
   "input": {
    "a": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    },
    "b": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "3",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    }
   },
   "expect": "YARDSTICK_ONLY"
  },
  {
   "id": "successor/ic2-tightened-to-reject",
   "fn": "classify_successor",
   "input": {
    "a": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    },
    "b": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10,
       "IC2_POLICY": "REJECT"
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    }
   },
   "expect": "YARDSTICK_ONLY"
  },
  {
   "id": "successor/promotion-floor-raised",
   "fn": "classify_successor",
   "input": {
    "a": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    },
    "b": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10,
       "PROMOTION_FLOOR": "F3"
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    }
   },
   "expect": "YARDSTICK_ONLY"
  },
  {
   "id": "successor/promotion-floor-explicit-default",
   "fn": "classify_successor",
   "input": {
    "a": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    },
    "b": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10,
       "PROMOTION_FLOOR": "F2"
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    }
   },
   "expect": "IDENTICAL"
  },
  {
   "id": "successor/crlf-is-lf",
   "fn": "classify_successor",
   "input": {
    "a": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt\n= v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    },
    "b": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt\r\n= v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    }
   },
   "expect": "IDENTICAL"
  },
  {
   "id": "successor/lone-cr-is-lf",
   "fn": "classify_successor",
   "input": {
    "a": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt\n= v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    },
    "b": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt\r= v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    }
   },
   "expect": "IDENTICAL"
  },
  {
   "id": "t1/crlf-and-tab-are-accepted",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt\r\n\t= -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x"
       ],
       "ROLE": "EOM(v)"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v"
       ],
       "ROLE": "EOM(x)"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z"
       ],
       "ROLE": "CONSTRAINT"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    }
   },
   "expect": "[true,[]]"
  },
  {
   "id": "successor/key-order-changed",
   "fn": "classify_successor",
   "input": {
    "a": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    },
    "b": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "S",
         "WSUM:w_a*A;w_s*S"
        ],
        "LIMITING": []
       }
      ]
     }
    }
   },
   "expect": "YARDSTICK_ONLY"
  },
  {
   "id": "successor/key-terms-respelled",
   "fn": "classify_successor",
   "input": {
    "a": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    },
    "b": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_s*S;w_a*A",
         "NEG:NEG:S"
        ],
        "LIMITING": []
       }
      ]
     }
    }
   },
   "expect": "IDENTICAL"
  },
  {
   "id": "successor/decimals-respelled",
   "fn": "classify_successor",
   "input": {
    "a": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    },
    "b": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "5e-2",
        "UNIT": "m",
        "UNCERTAINTY": "0.0010"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "-0.0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2.0",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "5E-1"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    }
   },
   "expect": "IDENTICAL"
  },
  {
   "id": "successor/tpk-dimensions-respelled",
   "fn": "classify_successor",
   "input": {
    "a": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    },
    "b": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "T-1 L1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "T-1 M1 T-1 L0"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    }
   },
   "expect": "IDENTICAL"
  },
  {
   "id": "successor/trm-dimensions-respelled",
   "fn": "classify_successor",
   "input": {
    "a": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    },
    "b": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L2 T-1 L-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "T-1 L1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    }
   },
   "expect": "IDENTICAL"
  },
  {
   "id": "successor/law-statement-changed",
   "fn": "classify_successor",
   "input": {
    "a": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    },
    "b": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v + 0",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    }
   },
   "expect": "KERNEL_CHANGED"
  },
  {
   "id": "successor/kernel-and-correspondence-changed",
   "fn": "classify_successor",
   "input": {
    "a": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    },
    "b": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-2"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-2"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    }
   },
   "expect": "KERNEL_CHANGED"
  },
  {
   "id": "successor/limiting-reordered",
   "fn": "classify_successor",
   "input": {
    "a": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": [
         {
          "DOMAIN": "b_dom",
          "KEY": [
           "SR1",
           "NEG:A"
          ]
         },
         {
          "DOMAIN": "a_dom",
          "KEY": [
           "SR1",
           "S"
          ]
         }
        ]
       }
      ]
     }
    },
    "b": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": [
         {
          "DOMAIN": "a_dom",
          "KEY": [
           "SR1",
           "S"
          ]
         },
         {
          "DOMAIN": "b_dom",
          "KEY": [
           "SR1",
           "NEG:A"
          ]
         }
        ]
       }
      ]
     }
    }
   },
   "expect": "IDENTICAL"
  },
  {
   "id": "successor/unit-respelled",
   "fn": "classify_successor",
   "input": {
    "a": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2",
        "VALUE": "40",
        "UNIT": "kg s-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    },
    "b": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2",
        "VALUE": "40",
        "UNIT": "s-2 kg1"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    }
   },
   "note": "the preimage carries the canonical spelling kg s-2 (D104.1)",
   "expect": "IDENTICAL"
  },
  {
   "id": "successor/same-quantity-other-unit",
   "fn": "classify_successor",
   "input": {
    "a": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    },
    "b": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "5",
        "UNIT": "cm",
        "UNCERTAINTY": "0.1"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    }
   },
   "expect": "KERNEL_CHANGED"
  },
  {
   "id": "successor/fix-unit-changed",
   "fn": "classify_successor",
   "input": {
    "a": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    },
    "b": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "mm",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    }
   },
   "expect": "KERNEL_CHANGED"
  },
  {
   "id": "successor/forms-respelled",
   "fn": "classify_successor",
   "input": {
    "a": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       },
       {
        "NAME": "t",
        "DIMENSION": "T1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x",
         "t"
        ],
        "ROLE": "EOM(v)",
        "EQUATION": "m * D(v, t) = -k_s * x"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v",
         "t"
        ],
        "ROLE": "EOM(x)",
        "EQUATION": "D(x, t) = v"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z",
         "t"
        ],
        "ROLE": "CONSTRAINT",
        "EQUATION": "D(z, t, 2) = 0"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ],
        "CONDITION": "abs(x) < x_max"
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "time",
         "DIMENSION": "T1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v",
          "t"
         ],
         "IMAGE": "d/dt maps position to velocity",
         "FORM": "D(x, t) = v",
         "IMAGE_FORM": "D(position, time) = velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_t",
        "DOF": "t",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "time",
        "IDENTIFICATION": "t is the laboratory clock reading",
        "FALSIFIER": "two laboratory clocks that disagree beyond their stated uncertainty",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [],
        "DIMENSION": "T1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    },
    "b": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       },
       {
        "NAME": "t",
        "DIMENSION": "T1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x",
         "t"
        ],
        "ROLE": "EOM(v)",
        "EQUATION": "m*D(v,t,1)=((-k_s*x))"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v",
         "t"
        ],
        "ROLE": "EOM(x)",
        "EQUATION": "D(x, t) = v"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z",
         "t"
        ],
        "ROLE": "CONSTRAINT",
        "EQUATION": "D(z, t, 2) = 0"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ],
        "CONDITION": "(abs((x))<x_max)"
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "time",
         "DIMENSION": "T1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v",
          "t"
         ],
         "IMAGE": "d/dt maps position to velocity",
         "FORM": "D( x , t ) = ( v )",
         "IMAGE_FORM": "D(position, time) = velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_t",
        "DOF": "t",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "time",
        "IDENTIFICATION": "t is the laboratory clock reading",
        "FALSIFIER": "two laboratory clocks that disagree beyond their stated uncertainty",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [],
        "DIMENSION": "T1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    }
   },
   "note": "whitespace, D(x,t,1) and redundant enclosing parentheses: one canonical spelling (S10)",
   "expect": "IDENTICAL"
  },
  {
   "id": "successor/form-operands-reordered",
   "fn": "classify_successor",
   "input": {
    "a": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       },
       {
        "NAME": "t",
        "DIMENSION": "T1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x",
         "t"
        ],
        "ROLE": "EOM(v)",
        "EQUATION": "m * D(v, t) = -k_s * x"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v",
         "t"
        ],
        "ROLE": "EOM(x)",
        "EQUATION": "D(x, t) = v"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z",
         "t"
        ],
        "ROLE": "CONSTRAINT",
        "EQUATION": "D(z, t, 2) = 0"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ],
        "CONDITION": "abs(x) < x_max"
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "time",
         "DIMENSION": "T1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v",
          "t"
         ],
         "IMAGE": "d/dt maps position to velocity",
         "FORM": "D(x, t) = v",
         "IMAGE_FORM": "D(position, time) = velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_t",
        "DOF": "t",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "time",
        "IDENTIFICATION": "t is the laboratory clock reading",
        "FALSIFIER": "two laboratory clocks that disagree beyond their stated uncertainty",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [],
        "DIMENSION": "T1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    },
    "b": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       },
       {
        "NAME": "t",
        "DIMENSION": "T1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x",
         "t"
        ],
        "ROLE": "EOM(v)",
        "EQUATION": "D(v, t) * m = -k_s * x"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v",
         "t"
        ],
        "ROLE": "EOM(x)",
        "EQUATION": "D(x, t) = v"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z",
         "t"
        ],
        "ROLE": "CONSTRAINT",
        "EQUATION": "D(z, t, 2) = 0"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ],
        "CONDITION": "abs(x) < x_max"
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "time",
         "DIMENSION": "T1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v",
          "t"
         ],
         "IMAGE": "d/dt maps position to velocity",
         "FORM": "D(x, t) = v",
         "IMAGE_FORM": "D(position, time) = velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_t",
        "DOF": "t",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "time",
        "IDENTIFICATION": "t is the laboratory clock reading",
        "FALSIFIER": "two laboratory clocks that disagree beyond their stated uncertainty",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [],
        "DIMENSION": "T1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    }
   },
   "note": "only spelling is canonical: m*D(v,t) and D(v,t)*m are different statements",
   "expect": "KERNEL_CHANGED"
  },
  {
   "id": "successor/form-removed",
   "fn": "classify_successor",
   "input": {
    "a": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       },
       {
        "NAME": "t",
        "DIMENSION": "T1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x",
         "t"
        ],
        "ROLE": "EOM(v)",
        "EQUATION": "m * D(v, t) = -k_s * x"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v",
         "t"
        ],
        "ROLE": "EOM(x)",
        "EQUATION": "D(x, t) = v"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z",
         "t"
        ],
        "ROLE": "CONSTRAINT",
        "EQUATION": "D(z, t, 2) = 0"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ],
        "CONDITION": "abs(x) < x_max"
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "time",
         "DIMENSION": "T1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v",
          "t"
         ],
         "IMAGE": "d/dt maps position to velocity",
         "FORM": "D(x, t) = v",
         "IMAGE_FORM": "D(position, time) = velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_t",
        "DOF": "t",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "time",
        "IDENTIFICATION": "t is the laboratory clock reading",
        "FALSIFIER": "two laboratory clocks that disagree beyond their stated uncertainty",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [],
        "DIMENSION": "T1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    },
    "b": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       },
       {
        "NAME": "t",
        "DIMENSION": "T1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x",
         "t"
        ],
        "ROLE": "EOM(v)",
        "EQUATION": "m * D(v, t) = -k_s * x"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v",
         "t"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z",
         "t"
        ],
        "ROLE": "CONSTRAINT",
        "EQUATION": "D(z, t, 2) = 0"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ],
        "CONDITION": "abs(x) < x_max"
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "time",
         "DIMENSION": "T1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v",
          "t"
         ],
         "IMAGE": "d/dt maps position to velocity",
         "FORM": "D(x, t) = v",
         "IMAGE_FORM": "D(position, time) = velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_t",
        "DOF": "t",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "time",
        "IDENTIFICATION": "t is the laboratory clock reading",
        "FALSIFIER": "two laboratory clocks that disagree beyond their stated uncertainty",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [],
        "DIMENSION": "T1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    }
   },
   "expect": "KERNEL_CHANGED"
  },
  {
   "id": "successor/image-form-respelled",
   "fn": "classify_successor",
   "input": {
    "a": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       },
       {
        "NAME": "t",
        "DIMENSION": "T1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x",
         "t"
        ],
        "ROLE": "EOM(v)",
        "EQUATION": "m * D(v, t) = -k_s * x"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v",
         "t"
        ],
        "ROLE": "EOM(x)",
        "EQUATION": "D(x, t) = v"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z",
         "t"
        ],
        "ROLE": "CONSTRAINT",
        "EQUATION": "D(z, t, 2) = 0"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ],
        "CONDITION": "abs(x) < x_max"
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "time",
         "DIMENSION": "T1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v",
          "t"
         ],
         "IMAGE": "d/dt maps position to velocity",
         "FORM": "D(x, t) = v",
         "IMAGE_FORM": "D(position, time) = velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_t",
        "DOF": "t",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "time",
        "IDENTIFICATION": "t is the laboratory clock reading",
        "FALSIFIER": "two laboratory clocks that disagree beyond their stated uncertainty",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [],
        "DIMENSION": "T1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    },
    "b": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       },
       {
        "NAME": "t",
        "DIMENSION": "T1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x",
         "t"
        ],
        "ROLE": "EOM(v)",
        "EQUATION": "m * D(v, t) = -k_s * x"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v",
         "t"
        ],
        "ROLE": "EOM(x)",
        "EQUATION": "D(x, t) = v"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z",
         "t"
        ],
        "ROLE": "CONSTRAINT",
        "EQUATION": "D(z, t, 2) = 0"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ],
        "CONDITION": "abs(x) < x_max"
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "time",
         "DIMENSION": "T1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v",
          "t"
         ],
         "IMAGE": "d/dt maps position to velocity",
         "FORM": "D(x, t) = v",
         "IMAGE_FORM": "D(position,time)=(velocity)"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_t",
        "DOF": "t",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "time",
        "IDENTIFICATION": "t is the laboratory clock reading",
        "FALSIFIER": "two laboratory clocks that disagree beyond their stated uncertainty",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [],
        "DIMENSION": "T1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    }
   },
   "expect": "IDENTICAL"
  },
  {
   "id": "successor/signature-form-removed",
   "fn": "classify_successor",
   "input": {
    "a": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       },
       {
        "NAME": "t",
        "DIMENSION": "T1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x",
         "t"
        ],
        "ROLE": "EOM(v)",
        "EQUATION": "m * D(v, t) = -k_s * x"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v",
         "t"
        ],
        "ROLE": "EOM(x)",
        "EQUATION": "D(x, t) = v"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z",
         "t"
        ],
        "ROLE": "CONSTRAINT",
        "EQUATION": "D(z, t, 2) = 0"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ],
        "CONDITION": "abs(x) < x_max"
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "time",
         "DIMENSION": "T1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v",
          "t"
         ],
         "IMAGE": "d/dt maps position to velocity",
         "FORM": "D(x, t) = v",
         "IMAGE_FORM": "D(position, time) = velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_t",
        "DOF": "t",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "time",
        "IDENTIFICATION": "t is the laboratory clock reading",
        "FALSIFIER": "two laboratory clocks that disagree beyond their stated uncertainty",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [],
        "DIMENSION": "T1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    },
    "b": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       },
       {
        "NAME": "t",
        "DIMENSION": "T1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x",
         "t"
        ],
        "ROLE": "EOM(v)",
        "EQUATION": "m * D(v, t) = -k_s * x"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v",
         "t"
        ],
        "ROLE": "EOM(x)",
        "EQUATION": "D(x, t) = v"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z",
         "t"
        ],
        "ROLE": "CONSTRAINT",
        "EQUATION": "D(z, t, 2) = 0"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ],
        "CONDITION": "abs(x) < x_max"
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "time",
         "DIMENSION": "T1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v",
          "t"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_t",
        "DOF": "t",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "time",
        "IDENTIFICATION": "t is the laboratory clock reading",
        "FALSIFIER": "two laboratory clocks that disagree beyond their stated uncertainty",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [],
        "DIMENSION": "T1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    }
   },
   "expect": "CORRESPONDENCE_CHANGED"
  },
  {
   "id": "successor/schema-0.4.0-toy-under-0.5.0",
   "fn": "d_tfk_of",
   "input": {
    "tfk": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    }
   },
   "note": "the toy without forms under schema 0.5.0, its LAWs carrying ROLE: its D(TFK) under 0.4.0 (no ROLE) was 09a229d76bbf580abe7d7c10985fc804ef842f733a331f2a14fc92c12d664798, under 0.3.0 3e92bae72f437acac87d3f6a0683978cf629e61df17bed2ceb5e9da3c8c352b1; the version tag moves every zone digest",
   "expect": "31a356815ab76ffb69c016c4e163c1862ec84aca6590c6083b6859727dfee335"
  },
  {
   "id": "dim/normalize/s15-L9999",
   "fn": "normalize_dimension",
   "input": {
    "s": "L9999"
   },
   "expect": "L9999"
  },
  {
   "id": "dim/normalize/s15-L-9999",
   "fn": "normalize_dimension",
   "input": {
    "s": "L-9999"
   },
   "expect": "L-9999"
  },
  {
   "id": "dim/normalize/s15-L9999_L1",
   "fn": "normalize_dimension",
   "input": {
    "s": "L9999 L1"
   },
   "expect": "null"
  },
  {
   "id": "dim/normalize/s15-L9999_L9999",
   "fn": "normalize_dimension",
   "input": {
    "s": "L9999 L9999"
   },
   "expect": "null"
  },
  {
   "id": "dim/normalize/s15-L-9999_L-1",
   "fn": "normalize_dimension",
   "input": {
    "s": "L-9999 L-1"
   },
   "expect": "null"
  },
  {
   "id": "dim/normalize/s15-L5000_L4999",
   "fn": "normalize_dimension",
   "input": {
    "s": "L5000 L4999"
   },
   "expect": "L9999"
  },
  {
   "id": "dim/normalize/s15-L9999_L-1_L1",
   "fn": "normalize_dimension",
   "input": {
    "s": "L9999 L-1 L1"
   },
   "expect": "L9999"
  },
  {
   "id": "dim/normalize/s15-L9999_L9999_L-9999",
   "fn": "normalize_dimension",
   "input": {
    "s": "L9999 L9999 L-9999"
   },
   "expect": "L9999"
  },
  {
   "id": "dim/normalize/s15-T9999_TH9999_TH1",
   "fn": "normalize_dimension",
   "input": {
    "s": "T9999 TH9999 TH1"
   },
   "expect": "null"
  },
  {
   "id": "dim/normalize/s15-M1_M-1_L9999_L1_L-1",
   "fn": "normalize_dimension",
   "input": {
    "s": "M1 M-1 L9999 L1 L-1"
   },
   "expect": "L9999"
  },
  {
   "id": "dim/normalize/s15-L9999_L1_Q1",
   "fn": "normalize_dimension",
   "input": {
    "s": "L9999 L1 Q1"
   },
   "expect": "null"
  },
  {
   "id": "dim/is_canonical/s15-L9999",
   "fn": "is_canonical_dimension",
   "input": {
    "s": "L9999"
   },
   "expect": "true"
  },
  {
   "id": "dim/is_canonical/s15-L-9999",
   "fn": "is_canonical_dimension",
   "input": {
    "s": "L-9999"
   },
   "expect": "true"
  },
  {
   "id": "dim/is_canonical/s15-L10000",
   "fn": "is_canonical_dimension",
   "input": {
    "s": "L10000"
   },
   "note": "tpc_zone 0.4.0 answered true: its canonical token had no digit bound",
   "expect": "false"
  },
  {
   "id": "dim/is_canonical/s15-L-10000",
   "fn": "is_canonical_dimension",
   "input": {
    "s": "L-10000"
   },
   "note": "tpc_zone 0.4.0 answered true: its canonical token had no digit bound",
   "expect": "false"
  },
  {
   "id": "dim/is_canonical/s15-L1_T-10000",
   "fn": "is_canonical_dimension",
   "input": {
    "s": "L1 T-10000"
   },
   "note": "tpc_zone 0.4.0 answered true: its canonical token had no digit bound",
   "expect": "false"
  },
  {
   "id": "t1/s15-dof-dimension-out-of-range",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L9999 L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x"
       ],
       "ROLE": "EOM(v)"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v"
       ],
       "ROLE": "EOM(x)"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z"
       ],
       "ROLE": "CONSTRAINT"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    }
   },
   "note": "tpc_zone 0.4.0 admitted it as L10000, a DIMENSION its own grammar refuses",
   "expect": "[false,[DOF:x: DIMENSION L9999 L1: an exponent is out of range]]"
  },
  {
   "id": "t1/s15-dof-dimension-sum-at-bound",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L5000 L-4999"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x"
       ],
       "ROLE": "EOM(v)"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v"
       ],
       "ROLE": "EOM(x)"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z"
       ],
       "ROLE": "CONSTRAINT"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    }
   },
   "note": "the sum is L1: accepted, spelled L1",
   "expect": "[true,[]]"
  },
  {
   "id": "t1/s15-constant-with-unit",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L9999 L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x"
       ],
       "ROLE": "EOM(v)"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v"
       ],
       "ROLE": "EOM(x)"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z"
       ],
       "ROLE": "CONSTRAINT"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    }
   },
   "note": "the UNIT check stays silent on a DIMENSION that does not parse",
   "expect": "[false,[CONSTANT:x_max: DIMENSION L9999 L1: an exponent is out of range]]"
  },
  {
   "id": "t1/s15-fix-target",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L-9999 L-1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x"
       ],
       "ROLE": "EOM(v)"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v"
       ],
       "ROLE": "EOM(x)"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z"
       ],
       "ROLE": "CONSTRAINT"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    }
   },
   "expect": "[false,[DOF:z: DIMENSION L-9999 L-1: an exponent is out of range]]"
  },
  {
   "id": "t1/s15-bad-token-first",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L9999 L1 Q1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x"
       ],
       "ROLE": "EOM(v)"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v"
       ],
       "ROLE": "EOM(x)"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z"
       ],
       "ROLE": "CONSTRAINT"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    }
   },
   "note": "a token that does not parse is reported as before",
   "expect": "[false,[DOF:x: DIMENSION L9999 L1 Q1 is not a dimension]]"
  },
  {
   "id": "trm/s15-env-dimension-out-of-range",
   "fn": "trm_well_formed",
   "input": {
    "trm": {
     "HEADER": {
      "ENVIRONMENT_INVENTORY": [
       {
        "ENVIRONMENT_QUANTITY": "position",
        "DIMENSION": "L9999 L1"
       },
       {
        "ENVIRONMENT_QUANTITY": "velocity",
        "DIMENSION": "L1 T-1"
       },
       {
        "ENVIRONMENT_QUANTITY": "height",
        "DIMENSION": "L1"
       }
      ],
      "SIGNATURE": [
       {
        "NAME": "time_derivative",
        "OVER": [
         "x",
         "v"
        ],
        "IMAGE": "d/dt maps position to velocity"
       }
      ],
      "TRANSFORMATIONS": [
       {
        "NAME": "time_translation",
        "STATEMENT": "t -> t + t0"
       }
      ]
     },
     "ENTRIES": [
      {
       "NAME": "E_x",
       "DOF": "x",
       "DOMAIN": "|x| < x_max",
       "ENVIRONMENT_QUANTITY": "position",
       "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
       "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [
        "N2",
        "KIN"
       ],
       "DIMENSION": "L1"
      },
      {
       "NAME": "E_v",
       "DOF": "v",
       "DOMAIN": "|x| < x_max",
       "ENVIRONMENT_QUANTITY": "velocity",
       "IDENTIFICATION": "v is the time derivative of x",
       "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
       "FALSIFIER_CLASS": "F2",
       "BEARS": [
        "KIN"
       ],
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "E_z",
       "DOF": "z",
       "DOMAIN": "always",
       "ENVIRONMENT_QUANTITY": "height",
       "IDENTIFICATION": "z is the height above the track",
       "FALSIFIER": "any measured z different from 0",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [
        "FREE_Z",
        "C_NOZ"
       ],
       "DIMENSION": "L1"
      }
     ]
    },
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x"
       ],
       "ROLE": "EOM(v)"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v"
       ],
       "ROLE": "EOM(x)"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z"
       ],
       "ROLE": "CONSTRAINT"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    }
   },
   "expect": "[false,[ENV:position: DIMENSION L9999 L1: an exponent is out of range]]"
  },
  {
   "id": "trm/s15-entry-dimension-out-of-range",
   "fn": "trm_well_formed",
   "input": {
    "trm": {
     "HEADER": {
      "ENVIRONMENT_INVENTORY": [
       {
        "ENVIRONMENT_QUANTITY": "position",
        "DIMENSION": "L1"
       },
       {
        "ENVIRONMENT_QUANTITY": "velocity",
        "DIMENSION": "L1 T-1"
       },
       {
        "ENVIRONMENT_QUANTITY": "height",
        "DIMENSION": "L1"
       }
      ],
      "SIGNATURE": [
       {
        "NAME": "time_derivative",
        "OVER": [
         "x",
         "v"
        ],
        "IMAGE": "d/dt maps position to velocity"
       }
      ],
      "TRANSFORMATIONS": [
       {
        "NAME": "time_translation",
        "STATEMENT": "t -> t + t0"
       }
      ]
     },
     "ENTRIES": [
      {
       "NAME": "E_x",
       "DOF": "x",
       "DOMAIN": "|x| < x_max",
       "ENVIRONMENT_QUANTITY": "position",
       "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
       "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [
        "N2",
        "KIN"
       ],
       "DIMENSION": "T9999 TH9999 TH1"
      },
      {
       "NAME": "E_v",
       "DOF": "v",
       "DOMAIN": "|x| < x_max",
       "ENVIRONMENT_QUANTITY": "velocity",
       "IDENTIFICATION": "v is the time derivative of x",
       "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
       "FALSIFIER_CLASS": "F2",
       "BEARS": [
        "KIN"
       ],
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "E_z",
       "DOF": "z",
       "DOMAIN": "always",
       "ENVIRONMENT_QUANTITY": "height",
       "IDENTIFICATION": "z is the height above the track",
       "FALSIFIER": "any measured z different from 0",
       "FALSIFIER_CLASS": "F3",
       "BEARS": [
        "FREE_Z",
        "C_NOZ"
       ],
       "DIMENSION": "L1"
      }
     ]
    },
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x"
       ],
       "ROLE": "EOM(v)"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v"
       ],
       "ROLE": "EOM(x)"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z"
       ],
       "ROLE": "CONSTRAINT"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    }
   },
   "expect": "[false,[ENTRY:E_x: DIMENSION T9999 TH9999 TH1: an exponent is out of range]]"
  },
  {
   "id": "invariance/s15-dimension-sum-within-bound-same-digest",
   "fn": "d_tpk",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L5000 L-4999"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x"
       ],
       "ROLE": "EOM(v)"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v"
       ],
       "ROLE": "EOM(x)"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z"
       ],
       "ROLE": "CONSTRAINT"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    }
   },
   "note": "an admitted respelling keeps the toy's D(TPK)",
   "expect": "f3a2a5ac2c2413183a4da94b73da34d7cd5c408a01397262417c424298a40d90"
  },
  {
   "id": "successor/s15-dimension-sum-within-bound",
   "fn": "classify_successor",
   "input": {
    "a": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    },
    "b": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L5000 L-4999"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    }
   },
   "expect": "IDENTICAL"
  },
  {
   "id": "t1/s050-law-role-CONSTRAINT",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[true,[]]"
  },
  {
   "id": "t1/s050-law-role-CONSTITUTIVE",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTITUTIVE",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[true,[]]"
  },
  {
   "id": "t1/s050-law-role-INVARIANT",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "INVARIANT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[true,[]]"
  },
  {
   "id": "t1/s050-law-role-DEFINITION",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "DEFINITION",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[true,[]]"
  },
  {
   "id": "t1/s050-law-role-EOM(z)",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "EOM(z)",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[true,[]]"
  },
  {
   "id": "t1/s050-law-role-EOM(x)",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "note": "EOM of the D variable, or of a second law's DOF, passes T1: any other consistency of a ROLE is the structure check's finding (S31)",
   "expect": "[true,[]]"
  },
  {
   "id": "t1/s050-law-role-EOM(t)",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "EOM(t)",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "note": "EOM of the D variable, or of a second law's DOF, passes T1: any other consistency of a ROLE is the structure check's finding (S31)",
   "expect": "[true,[]]"
  },
  {
   "id": "t1/s050-law-role-refused-lower-eom",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "eom(z)",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[LAW:FREE_Z: ROLE eom(z) is not EOM(<DOF>), CONSTRAINT, CONSTITUTIVE, INVARIANT or DEFINITION]]"
  },
  {
   "id": "t1/s050-law-role-refused-space-before-paren",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "EOM (z)",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[LAW:FREE_Z: ROLE EOM (z) is not EOM(<DOF>), CONSTRAINT, CONSTITUTIVE, INVARIANT or DEFINITION]]"
  },
  {
   "id": "t1/s050-law-role-refused-space-inside-left",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "EOM( z)",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[LAW:FREE_Z: ROLE EOM( z) is not EOM(<DOF>), CONSTRAINT, CONSTITUTIVE, INVARIANT or DEFINITION]]"
  },
  {
   "id": "t1/s050-law-role-refused-space-inside-right",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "EOM(z )",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[LAW:FREE_Z: ROLE EOM(z ) is not EOM(<DOF>), CONSTRAINT, CONSTITUTIVE, INVARIANT or DEFINITION]]"
  },
  {
   "id": "t1/s050-law-role-refused-unclosed",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "EOM(z",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[LAW:FREE_Z: ROLE EOM(z is not EOM(<DOF>), CONSTRAINT, CONSTITUTIVE, INVARIANT or DEFINITION]]"
  },
  {
   "id": "t1/s050-law-role-refused-empty-name",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "EOM()",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[LAW:FREE_Z: ROLE EOM() is not EOM(<DOF>), CONSTRAINT, CONSTITUTIVE, INVARIANT or DEFINITION]]"
  },
  {
   "id": "t1/s050-law-role-refused-name-not-identifier",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "EOM(1z)",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[LAW:FREE_Z: ROLE EOM(1z) is not EOM(<DOF>), CONSTRAINT, CONSTITUTIVE, INVARIANT or DEFINITION]]"
  },
  {
   "id": "t1/s050-law-role-refused-two-names",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "EOM(z,t)",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[LAW:FREE_Z: ROLE EOM(z,t) is not EOM(<DOF>), CONSTRAINT, CONSTITUTIVE, INVARIANT or DEFINITION]]"
  },
  {
   "id": "t1/s050-law-role-refused-bare-EOM",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "EOM",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[LAW:FREE_Z: ROLE EOM is not EOM(<DOF>), CONSTRAINT, CONSTITUTIVE, INVARIANT or DEFINITION]]"
  },
  {
   "id": "t1/s050-law-role-refused-lower-word",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "constraint",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[LAW:FREE_Z: ROLE constraint is not EOM(<DOF>), CONSTRAINT, CONSTITUTIVE, INVARIANT or DEFINITION]]"
  },
  {
   "id": "t1/s050-law-role-refused-mixed-case-word",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "Constraint",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[LAW:FREE_Z: ROLE Constraint is not EOM(<DOF>), CONSTRAINT, CONSTITUTIVE, INVARIANT or DEFINITION]]"
  },
  {
   "id": "t1/s050-law-role-refused-trailing-space",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT ",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[LAW:FREE_Z: ROLE CONSTRAINT  is not EOM(<DOF>), CONSTRAINT, CONSTITUTIVE, INVARIANT or DEFINITION]]"
  },
  {
   "id": "t1/s050-law-role-refused-leading-space",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": " CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[LAW:FREE_Z: ROLE  CONSTRAINT is not EOM(<DOF>), CONSTRAINT, CONSTITUTIVE, INVARIANT or DEFINITION]]"
  },
  {
   "id": "t1/s050-law-role-refused-empty",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[LAW:FREE_Z: ROLE  is not EOM(<DOF>), CONSTRAINT, CONSTITUTIVE, INVARIANT or DEFINITION]]"
  },
  {
   "id": "t1/s050-law-role-refused-dof-role-on-law",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "INPUT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[LAW:FREE_Z: ROLE INPUT is not EOM(<DOF>), CONSTRAINT, CONSTITUTIVE, INVARIANT or DEFINITION]]"
  },
  {
   "id": "t1/s050-law-role-refused-trailing-newline",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "EOM(z)\n",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[LAW:FREE_Z: ROLE EOM(z)\n is not EOM(<DOF>), CONSTRAINT, CONSTITUTIVE, INVARIANT or DEFINITION]]"
  },
  {
   "id": "t1/s050-law-role-refused-brackets",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "EOM[z]",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[LAW:FREE_Z: ROLE EOM[z] is not EOM(<DOF>), CONSTRAINT, CONSTITUTIVE, INVARIANT or DEFINITION]]"
  },
  {
   "id": "t1/s050-law-role-refused-plural",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "DEFINITIONS",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[LAW:FREE_Z: ROLE DEFINITIONS is not EOM(<DOF>), CONSTRAINT, CONSTITUTIVE, INVARIANT or DEFINITION]]"
  },
  {
   "id": "t1/s050-law-role-hidden-character",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "EOM(z)\u202e",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[LAW:FREE_Z: ROLE EOM(z)<U+202E> is not EOM(<DOF>), CONSTRAINT, CONSTITUTIVE, INVARIANT or DEFINITION,LAW:FREE_Z: field ROLE contains disallowed character U+202E]]"
  },
  {
   "id": "t1/s050-law-role-eom-not-a-dof-constant",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "EOM(k_s)",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[LAW:FREE_Z: ROLE EOM(k_s) names k_s, which is not a DOF]]"
  },
  {
   "id": "t1/s050-law-role-eom-not-a-dof-unresolved",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "EOM(q)",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[LAW:FREE_Z: ROLE EOM(q) names q, which is not a DOF]]"
  },
  {
   "id": "t1/s050-law-role-eom-not-a-dof-law",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "EOM(KIN)",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[LAW:FREE_Z: ROLE EOM(KIN) names KIN, which is not a DOF]]"
  },
  {
   "id": "t1/s050-law-role-eom-not-a-dof-constraint",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "EOM(C_NOZ)",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[LAW:FREE_Z: ROLE EOM(C_NOZ) names C_NOZ, which is not a DOF]]"
  },
  {
   "id": "t1/s050-law-role-eom-not-a-dof-environment-quantity",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "EOM(position)",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[LAW:FREE_Z: ROLE EOM(position) names position, which is not a DOF]]"
  },
  {
   "id": "t1/s050-law-role-eom-not-a-dof-itself",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "EOM(FREE_Z)",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[LAW:FREE_Z: ROLE EOM(FREE_Z) names FREE_Z, which is not a DOF]]"
  },
  {
   "id": "t1/s050-law-role-missing",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "note": "ROLE is required on every LAW under schema 0.5.0",
   "expect": "[false,[LAW:FREE_Z: missing field ROLE]]"
  },
  {
   "id": "t1/s050-law-role-missing-toy",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x"
       ],
       "ROLE": "EOM(v)"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v"
       ]
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z"
       ],
       "ROLE": "CONSTRAINT"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    }
   },
   "note": "a law without a form still carries a ROLE",
   "expect": "[false,[LAW:KIN: missing field ROLE]]"
  },
  {
   "id": "t1/s050-law-role-wrong-type-integer",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": 7,
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[LAW:FREE_Z: field ROLE has the wrong type]]"
  },
  {
   "id": "t1/s050-law-role-wrong-type-list",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": [
        "EOM(z)"
       ],
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[LAW:FREE_Z: field ROLE has the wrong type]]"
  },
  {
   "id": "t1/s050-law-role-wrong-type-null",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": null,
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[LAW:FREE_Z: field ROLE has the wrong type]]"
  },
  {
   "id": "t1/s050-dof-role-INPUT",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1",
       "ROLE": "INPUT"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "note": "an INPUT DOF named in EOM(x) passes T1: the structure check lists the ROLE MISMATCH (S31)",
   "expect": "[true,[]]"
  },
  {
   "id": "t1/s050-dof-role-refused-lower",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1",
       "ROLE": "input"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[DOF:x: ROLE input is not INPUT]]"
  },
  {
   "id": "t1/s050-dof-role-refused-eom",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1",
       "ROLE": "EOM(x)"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[DOF:x: ROLE EOM(x) is not INPUT]]"
  },
  {
   "id": "t1/s050-dof-role-refused-empty",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1",
       "ROLE": ""
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[DOF:x: ROLE  is not INPUT]]"
  },
  {
   "id": "t1/s050-dof-role-refused-trailing-space",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1",
       "ROLE": "INPUT "
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[DOF:x: ROLE INPUT  is not INPUT]]"
  },
  {
   "id": "t1/s050-dof-role-refused-law-word",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1",
       "ROLE": "CONSTRAINT"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[DOF:x: ROLE CONSTRAINT is not INPUT]]"
  },
  {
   "id": "t1/s050-dof-role-refused-plural",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1",
       "ROLE": "INPUTS"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[DOF:x: ROLE INPUTS is not INPUT]]"
  },
  {
   "id": "t1/s050-dof-role-wrong-type",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1",
       "ROLE": 1
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[DOF:x: field ROLE has the wrong type]]"
  },
  {
   "id": "t1/s050-parameters-empty",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "PARAMETERS": {},
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[true,[]]"
  },
  {
   "id": "t1/s050-parameters-ONE",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "PARAMETERS": {
      "D_VARIABLES": "ONE"
     },
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[true,[]]"
  },
  {
   "id": "t1/s050-parameters-SEVERAL",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "PARAMETERS": {
      "D_VARIABLES": "SEVERAL"
     },
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[true,[]]"
  },
  {
   "id": "t1/s050-parameters-refused-lower",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "PARAMETERS": {
      "D_VARIABLES": "one"
     },
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[TPK PARAMETERS: D_VARIABLES one is not ONE or SEVERAL]]"
  },
  {
   "id": "t1/s050-parameters-refused-TWO",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "PARAMETERS": {
      "D_VARIABLES": "TWO"
     },
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[TPK PARAMETERS: D_VARIABLES TWO is not ONE or SEVERAL]]"
  },
  {
   "id": "t1/s050-parameters-refused-empty",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "PARAMETERS": {
      "D_VARIABLES": ""
     },
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[TPK PARAMETERS: D_VARIABLES  is not ONE or SEVERAL]]"
  },
  {
   "id": "t1/s050-parameters-refused-trailing-space",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "PARAMETERS": {
      "D_VARIABLES": "SEVERAL "
     },
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[TPK PARAMETERS: D_VARIABLES SEVERAL  is not ONE or SEVERAL]]"
  },
  {
   "id": "t1/s050-parameters-hidden-character",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "PARAMETERS": {
      "D_VARIABLES": "ONE\u202e"
     },
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[TPK PARAMETERS: D_VARIABLES ONE<U+202E> is not ONE or SEVERAL,TPK PARAMETERS: field D_VARIABLES contains disallowed character U+202E]]"
  },
  {
   "id": "t1/s050-parameters-wrong-type",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "PARAMETERS": {
      "D_VARIABLES": 2
     },
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[TPK PARAMETERS: field D_VARIABLES has the wrong type]]"
  },
  {
   "id": "t1/s050-parameters-unknown-field",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "PARAMETERS": {
      "D_VARIABLES": "ONE",
      "STRUCTURE_CHECK": "ON"
     },
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "note": "STRUCTURE_CHECK is the TMS's, not the TPK's",
   "expect": "[false,[TPK PARAMETERS: unknown field STRUCTURE_CHECK]]"
  },
  {
   "id": "t1/s050-parameters-mutable-field",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "PARAMETERS": {
      "STATE": "OPEN"
     },
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[TPK PARAMETERS: mutable field STATE is not permitted in the TFK]]"
  },
  {
   "id": "t1/s050-parameters-string",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "PARAMETERS": "ONE",
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[TPK: PARAMETERS is not an object]]"
  },
  {
   "id": "t1/s050-parameters-list",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "PARAMETERS": [
      "ONE"
     ],
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[TPK: PARAMETERS is not an object]]"
  },
  {
   "id": "t1/s050-parameters-lower-part-unknown",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ],
     "parameters": {
      "D_VARIABLES": "ONE"
     }
    }
   },
   "note": "the part's name is spelled exactly",
   "expect": "[false,[TPK: unknown kind parameters]]"
  },
  {
   "id": "t1/s050-dvar-one-second-variable",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      },
      {
       "NAME": "tau",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "tau"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, tau) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "note": "absent PARAMETERS means ONE: a second distinct D variable is T1's refusal",
   "expect": "[false,[TPK: D_VARIABLES is ONE (ONE when absent), but the forms use D variables t (LAW:FREE_Z, LAW:N2), tau (LAW:KIN)]]"
  },
  {
   "id": "t1/s050-dvar-explicit-one-second-variable",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "PARAMETERS": {
      "D_VARIABLES": "ONE"
     },
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      },
      {
       "NAME": "tau",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "tau"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, tau) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[TPK: D_VARIABLES is ONE (ONE when absent), but the forms use D variables t (LAW:FREE_Z, LAW:N2), tau (LAW:KIN)]]"
  },
  {
   "id": "t1/s050-dvar-several-admits-second-variable",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "PARAMETERS": {
      "D_VARIABLES": "SEVERAL"
     },
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      },
      {
       "NAME": "tau",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "tau"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, tau) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[true,[]]"
  },
  {
   "id": "t1/s050-dvar-malformed-switch-no-count",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "PARAMETERS": {
      "D_VARIABLES": "TWO"
     },
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      },
      {
       "NAME": "tau",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "tau"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, tau) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "note": "a D_VARIABLES that is neither ONE nor SEVERAL is refused as a field; the count rule is not applied under it",
   "expect": "[false,[TPK PARAMETERS: D_VARIABLES TWO is not ONE or SEVERAL]]"
  },
  {
   "id": "t1/s050-dvar-constant",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "PARAMETERS": {
      "D_VARIABLES": "SEVERAL"
     },
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "m"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, m) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "note": "a CONSTANT is not a D variable (D177.1); T1's DIMENSION T1 requirement is removed",
   "expect": "[false,[LAW:KIN: EQUATION's D variable m is not a DOF]]"
  },
  {
   "id": "t1/s050-dvar-constant-under-one",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "m"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, m) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[LAW:KIN: EQUATION's D variable m is not a DOF,TPK: D_VARIABLES is ONE (ONE when absent), but the forms use D variables m (LAW:KIN), t (LAW:FREE_Z, LAW:N2)]]"
  },
  {
   "id": "t1/s050-dvar-unresolved",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "PARAMETERS": {
      "D_VARIABLES": "SEVERAL"
     },
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "q"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, q) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[LAW:KIN: EQUATION's D variable q is not a DOF,LAW:KIN: REFS q does not resolve]]"
  },
  {
   "id": "t1/s050-dvar-fix-target",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      },
      {
       "NAME": "C_T",
       "TARGET": "t",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "s",
       "STATEMENT": "t = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "note": "a FIXed clock is no D variable (D177.1)",
   "expect": "[false,[LAW:FREE_Z: EQUATION's D variable t is the TARGET of CONSTRAINT:C_T,LAW:KIN: EQUATION's D variable t is the TARGET of CONSTRAINT:C_T,LAW:N2: EQUATION's D variable t is the TARGET of CONSTRAINT:C_T]]"
  },
  {
   "id": "t1/s050-dvar-remove-target",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      },
      {
       "NAME": "C_TR",
       "TARGET": "t",
       "ACTION": "REMOVE",
       "STATEMENT": "no t"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[LAW:FREE_Z: EQUATION's D variable t is the TARGET of CONSTRAINT:C_TR,LAW:KIN: EQUATION's D variable t is the TARGET of CONSTRAINT:C_TR,LAW:N2: EQUATION's D variable t is the TARGET of CONSTRAINT:C_TR]]"
  },
  {
   "id": "t1/s050-dvar-two-targets",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x"
       ],
       "ROLE": "EOM(v)"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_T2",
       "TARGET": "t",
       "ACTION": "REMOVE",
       "STATEMENT": "no t"
      },
      {
       "NAME": "C_T1",
       "TARGET": "t",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "s",
       "STATEMENT": "t = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "note": "each CONSTRAINT that targets the D variable is named; a law without a form uses no D variable",
   "expect": "[false,[LAW:KIN: EQUATION's D variable t is the TARGET of CONSTRAINT:C_T1,LAW:KIN: EQUATION's D variable t is the TARGET of CONSTRAINT:C_T2]]"
  },
  {
   "id": "t1/s050-dvar-corner-fix-t",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "t",
       "DIMENSION": "T1"
      },
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "EOM_X",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "EOM_Z",
       "STATEMENT": "m d2z/dt2 = 0",
       "REFS": [
        "m",
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "m * D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_kpos",
       "PROPOSITION": "k_s is positive",
       "REFS": [
        "k_s"
       ]
      },
      {
       "NAME": "A_mpos",
       "PROPOSITION": "m is positive",
       "REFS": [
        "m"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "only motion on the spring axis is described: z = 0"
      },
      {
       "NAME": "C_T",
       "TARGET": "t",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "s",
       "STATEMENT": "t = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "note": "out/D/examples/corner_fix_t.json with ROLEs added; T1 passed it under schema 0.4.0 (E-N7)",
   "expect": "[false,[LAW:EOM_X: EQUATION's D variable t is the TARGET of CONSTRAINT:C_T,LAW:EOM_Z: EQUATION's D variable t is the TARGET of CONSTRAINT:C_T,LAW:KIN: EQUATION's D variable t is the TARGET of CONSTRAINT:C_T]]"
  },
  {
   "id": "t1/s050-dvar-scaled-time-A21",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "X",
       "DIMENSION": "1"
      },
      {
       "NAME": "V",
       "DIMENSION": "1"
      },
      {
       "NAME": "tau",
       "DIMENSION": "1"
      }
     ],
     "LAW": [
      {
       "NAME": "KIN",
       "STATEMENT": "dX/dtau = V",
       "REFS": [
        "X",
        "V",
        "tau"
       ],
       "ROLE": "EOM(X)",
       "EQUATION": "D(X, tau) = V"
      },
      {
       "NAME": "N2",
       "STATEMENT": "dV/dtau = -X",
       "REFS": [
        "X",
        "V",
        "tau"
       ],
       "ROLE": "EOM(V)",
       "EQUATION": "D(V, tau) = -X"
      }
     ]
    }
   },
   "note": "out/A/suite/A21 with ROLEs added: the D variable is a DOF of DIMENSION 1, admitted (D177.1)",
   "expect": "[true,[]]"
  },
  {
   "id": "t1/s050-dvar-unparsed-form-uses-none",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "PARAMETERS": {
      "D_VARIABLES": "ONE"
     },
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) ="
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "note": "a form that does not parse uses no D variable; its refusal is reported once",
   "expect": "[false,[LAW:KIN: EQUATION does not parse: unexpected end]]"
  },
  {
   "id": "t1/s050-dvar-hidden-form-uses-none",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      },
      {
       "NAME": "tau",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "tau"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, tau) = v\u202e"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "expect": "[false,[LAW:KIN: EQUATION does not parse: unexpected character <U+202E> at 14,LAW:KIN: field EQUATION contains disallowed character U+202E]]"
  },
  {
   "id": "t1/s050-dvar-input-dof",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1",
       "ROLE": "INPUT"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x",
        "t"
       ],
       "ROLE": "EOM(v)",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "EOM(x)",
       "EQUATION": "D(x, t) = v"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "EQUATION": "D(z, t, 2) = 0"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "note": "a D variable that carries ROLE INPUT passes T1",
   "expect": "[true,[]]"
  },
  {
   "id": "tms/s050-structure-check-ON",
   "fn": "tms_well_formed",
   "input": {
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
      "K": "2",
      "N_X": 2,
      "S_MAX": 10,
      "STRUCTURE_CHECK": "ON"
     },
     "CONSTANTS": [
      {
       "NAME": "w_a",
       "VALUE": "1"
      },
      {
       "NAME": "w_s",
       "VALUE": "0.5"
      }
     ],
     "YARDSTICKS": [
      {
       "NAME": "combined_distance",
       "KEY": [
        "SR1",
        "WSUM:w_a*A;w_s*S",
        "S"
       ],
       "LIMITING": []
      }
     ]
    }
   },
   "expect": "[true,[]]"
  },
  {
   "id": "tms/s050-structure-check-OFF",
   "fn": "tms_well_formed",
   "input": {
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
      "K": "2",
      "N_X": 2,
      "S_MAX": 10,
      "STRUCTURE_CHECK": "OFF"
     },
     "CONSTANTS": [
      {
       "NAME": "w_a",
       "VALUE": "1"
      },
      {
       "NAME": "w_s",
       "VALUE": "0.5"
      }
     ],
     "YARDSTICKS": [
      {
       "NAME": "combined_distance",
       "KEY": [
        "SR1",
        "WSUM:w_a*A;w_s*S",
        "S"
       ],
       "LIMITING": []
      }
     ]
    }
   },
   "expect": "[true,[]]"
  },
  {
   "id": "tms/s050-structure-check-refused-lower",
   "fn": "tms_well_formed",
   "input": {
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
      "K": "2",
      "N_X": 2,
      "S_MAX": 10,
      "STRUCTURE_CHECK": "on"
     },
     "CONSTANTS": [
      {
       "NAME": "w_a",
       "VALUE": "1"
      },
      {
       "NAME": "w_s",
       "VALUE": "0.5"
      }
     ],
     "YARDSTICKS": [
      {
       "NAME": "combined_distance",
       "KEY": [
        "SR1",
        "WSUM:w_a*A;w_s*S",
        "S"
       ],
       "LIMITING": []
      }
     ]
    }
   },
   "expect": "[false,[PARAMETERS: STRUCTURE_CHECK on is not ON or OFF]]"
  },
  {
   "id": "tms/s050-structure-check-refused-YES",
   "fn": "tms_well_formed",
   "input": {
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
      "K": "2",
      "N_X": 2,
      "S_MAX": 10,
      "STRUCTURE_CHECK": "YES"
     },
     "CONSTANTS": [
      {
       "NAME": "w_a",
       "VALUE": "1"
      },
      {
       "NAME": "w_s",
       "VALUE": "0.5"
      }
     ],
     "YARDSTICKS": [
      {
       "NAME": "combined_distance",
       "KEY": [
        "SR1",
        "WSUM:w_a*A;w_s*S",
        "S"
       ],
       "LIMITING": []
      }
     ]
    }
   },
   "expect": "[false,[PARAMETERS: STRUCTURE_CHECK YES is not ON or OFF]]"
  },
  {
   "id": "tms/s050-structure-check-refused-empty",
   "fn": "tms_well_formed",
   "input": {
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
      "K": "2",
      "N_X": 2,
      "S_MAX": 10,
      "STRUCTURE_CHECK": ""
     },
     "CONSTANTS": [
      {
       "NAME": "w_a",
       "VALUE": "1"
      },
      {
       "NAME": "w_s",
       "VALUE": "0.5"
      }
     ],
     "YARDSTICKS": [
      {
       "NAME": "combined_distance",
       "KEY": [
        "SR1",
        "WSUM:w_a*A;w_s*S",
        "S"
       ],
       "LIMITING": []
      }
     ]
    }
   },
   "expect": "[false,[PARAMETERS: STRUCTURE_CHECK  is not ON or OFF]]"
  },
  {
   "id": "tms/s050-structure-check-refused-trailing-space",
   "fn": "tms_well_formed",
   "input": {
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
      "K": "2",
      "N_X": 2,
      "S_MAX": 10,
      "STRUCTURE_CHECK": "OFF "
     },
     "CONSTANTS": [
      {
       "NAME": "w_a",
       "VALUE": "1"
      },
      {
       "NAME": "w_s",
       "VALUE": "0.5"
      }
     ],
     "YARDSTICKS": [
      {
       "NAME": "combined_distance",
       "KEY": [
        "SR1",
        "WSUM:w_a*A;w_s*S",
        "S"
       ],
       "LIMITING": []
      }
     ]
    }
   },
   "expect": "[false,[PARAMETERS: STRUCTURE_CHECK OFF  is not ON or OFF]]"
  },
  {
   "id": "tms/s050-structure-check-boolean",
   "fn": "tms_well_formed",
   "input": {
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
      "K": "2",
      "N_X": 2,
      "S_MAX": 10,
      "STRUCTURE_CHECK": true
     },
     "CONSTANTS": [
      {
       "NAME": "w_a",
       "VALUE": "1"
      },
      {
       "NAME": "w_s",
       "VALUE": "0.5"
      }
     ],
     "YARDSTICKS": [
      {
       "NAME": "combined_distance",
       "KEY": [
        "SR1",
        "WSUM:w_a*A;w_s*S",
        "S"
       ],
       "LIMITING": []
      }
     ]
    }
   },
   "expect": "[false,[PARAMETERS: field STRUCTURE_CHECK has the wrong type]]"
  },
  {
   "id": "invariance/s050-parameters-empty-same-digest",
   "fn": "d_tpk",
   "input": {
    "tpk": {
     "PARAMETERS": {},
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x"
       ],
       "ROLE": "EOM(v)"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v"
       ],
       "ROLE": "EOM(x)"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z"
       ],
       "ROLE": "CONSTRAINT"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    }
   },
   "expect": "f3a2a5ac2c2413183a4da94b73da34d7cd5c408a01397262417c424298a40d90"
  },
  {
   "id": "invariance/s050-parameters-explicit-ONE-same-digest",
   "fn": "d_tpk",
   "input": {
    "tpk": {
     "PARAMETERS": {
      "D_VARIABLES": "ONE"
     },
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x"
       ],
       "ROLE": "EOM(v)"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v"
       ],
       "ROLE": "EOM(x)"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z"
       ],
       "ROLE": "CONSTRAINT"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    }
   },
   "expect": "f3a2a5ac2c2413183a4da94b73da34d7cd5c408a01397262417c424298a40d90"
  },
  {
   "id": "invariance/s050-structure-check-explicit-ON-same-digest",
   "fn": "d_tms",
   "input": {
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
      "K": "2",
      "N_X": 2,
      "S_MAX": 10,
      "STRUCTURE_CHECK": "ON"
     },
     "CONSTANTS": [
      {
       "NAME": "w_a",
       "VALUE": "1"
      },
      {
       "NAME": "w_s",
       "VALUE": "0.5"
      }
     ],
     "YARDSTICKS": [
      {
       "NAME": "combined_distance",
       "KEY": [
        "SR1",
        "WSUM:w_a*A;w_s*S",
        "S"
       ],
       "LIMITING": []
      }
     ]
    }
   },
   "expect": "7a962e2297d6798801fa2593be9cd92995cc3a5f9c817cc8a19335c625784128"
  },
  {
   "id": "successor/s050-parameters-explicit-ONE",
   "fn": "classify_successor",
   "input": {
    "a": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    },
    "b": {
     "TPK": {
      "PARAMETERS": {
       "D_VARIABLES": "ONE"
      },
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    }
   },
   "expect": "IDENTICAL"
  },
  {
   "id": "successor/s050-parameters-SEVERAL",
   "fn": "classify_successor",
   "input": {
    "a": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    },
    "b": {
     "TPK": {
      "PARAMETERS": {
       "D_VARIABLES": "SEVERAL"
      },
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    }
   },
   "expect": "KERNEL_CHANGED"
  },
  {
   "id": "successor/s050-structure-check-explicit-ON",
   "fn": "classify_successor",
   "input": {
    "a": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    },
    "b": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10,
       "STRUCTURE_CHECK": "ON"
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    }
   },
   "expect": "IDENTICAL"
  },
  {
   "id": "successor/s050-structure-check-OFF",
   "fn": "classify_successor",
   "input": {
    "a": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    },
    "b": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10,
       "STRUCTURE_CHECK": "OFF"
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    }
   },
   "expect": "YARDSTICK_ONLY"
  },
  {
   "id": "successor/s050-law-role-changed",
   "fn": "classify_successor",
   "input": {
    "a": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    },
    "b": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "EOM(z)"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    }
   },
   "expect": "KERNEL_CHANGED"
  },
  {
   "id": "successor/s050-dof-role-INPUT-added",
   "fn": "classify_successor",
   "input": {
    "a": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    },
    "b": {
     "TPK": {
      "DOF": [
       {
        "NAME": "x",
        "DIMENSION": "L1"
       },
       {
        "NAME": "v",
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "z",
        "DIMENSION": "L1",
        "ROLE": "INPUT"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "m",
        "DIMENSION": "M1"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2"
       },
       {
        "NAME": "x_max",
        "DIMENSION": "L1",
        "VALUE": "0.05",
        "UNIT": "m",
        "UNCERTAINTY": "0.001"
       }
      ],
      "LAW": [
       {
        "NAME": "N2",
        "STATEMENT": "m dv/dt = -k_s x",
        "REFS": [
         "m",
         "v",
         "k_s",
         "x"
        ],
        "ROLE": "EOM(v)"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v"
        ],
        "ROLE": "EOM(x)"
       },
       {
        "NAME": "FREE_Z",
        "STATEMENT": "d2z/dt2 = 0",
        "REFS": [
         "z"
        ],
        "ROLE": "CONSTRAINT"
       }
      ],
      "ASSUMPTION": [
       {
        "NAME": "A_lin",
        "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
        "REFS": [
         "x"
        ]
       }
      ],
      "CONSTRAINT": [
       {
        "NAME": "C_NOZ",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m",
        "STATEMENT": "motion confined to z = 0"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_small",
        "PREDICATE": "|x| < x_max",
        "REFS": [
         "x",
         "x_max"
        ]
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "position",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "velocity",
         "DIMENSION": "L1 T-1"
        },
        {
         "ENVIRONMENT_QUANTITY": "height",
         "DIMENSION": "L1"
        }
       ],
       "SIGNATURE": [
        {
         "NAME": "time_derivative",
         "OVER": [
          "x",
          "v"
         ],
         "IMAGE": "d/dt maps position to velocity"
        }
       ],
       "TRANSFORMATIONS": [
        {
         "NAME": "time_translation",
         "STATEMENT": "t -> t + t0"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_x",
        "DOF": "x",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "position",
        "IDENTIFICATION": "x is the displacement from equilibrium along the spring axis",
        "FALSIFIER": "a measured restoring force not proportional to x inside the domain",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "N2",
         "KIN"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_v",
        "DOF": "v",
        "DOMAIN": "|x| < x_max",
        "ENVIRONMENT_QUANTITY": "velocity",
        "IDENTIFICATION": "v is the time derivative of x",
        "FALSIFIER": "a measured velocity differing from dx/dt beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN"
        ],
        "DIMENSION": "L1 T-1"
       },
       {
        "NAME": "E_z",
        "DOF": "z",
        "DOMAIN": "always",
        "ENVIRONMENT_QUANTITY": "height",
        "IDENTIFICATION": "z is the height above the track",
        "FALSIFIER": "any measured z different from 0",
        "FALSIFIER_CLASS": "F3",
        "BEARS": [
         "FREE_Z",
         "C_NOZ"
        ],
        "DIMENSION": "L1"
       }
      ]
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "one application of an inference rule or algebraic identity is one step",
       "K": "2",
       "N_X": 2,
       "S_MAX": 10
      },
      "CONSTANTS": [
       {
        "NAME": "w_a",
        "VALUE": "1"
       },
       {
        "NAME": "w_s",
        "VALUE": "0.5"
       }
      ],
      "YARDSTICKS": [
       {
        "NAME": "combined_distance",
        "KEY": [
         "SR1",
         "WSUM:w_a*A;w_s*S",
         "S"
        ],
        "LIMITING": []
       }
      ]
     }
    }
   },
   "expect": "KERNEL_CHANGED"
  },
  {
   "id": "preimage/s050-dof-role-INPUT",
   "fn": "zone_preimage",
   "input": {
    "zone": "TPK",
    "value": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1",
       "ROLE": "INPUT"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "m",
       "DIMENSION": "M1"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2"
      },
      {
       "NAME": "x_max",
       "DIMENSION": "L1",
       "VALUE": "0.05",
       "UNIT": "m",
       "UNCERTAINTY": "0.001"
      }
     ],
     "LAW": [
      {
       "NAME": "N2",
       "STATEMENT": "m dv/dt = -k_s x",
       "REFS": [
        "m",
        "v",
        "k_s",
        "x"
       ],
       "ROLE": "EOM(v)"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v"
       ],
       "ROLE": "EOM(x)"
      },
      {
       "NAME": "FREE_Z",
       "STATEMENT": "d2z/dt2 = 0",
       "REFS": [
        "z"
       ],
       "ROLE": "CONSTRAINT"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_NOZ",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "motion confined to z = 0"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    }
   },
   "note": "a DOF's ROLE enters after its DIMENSION; a DOF without ROLE serializes as under 0.4.0",
   "expect": "l4:sTPK6:s0.5.040:l11:sPARAMETERS22:l12:sD_VARIABLES4:sONE130:l4:sDOF119:l34:l5:sNAME2:sv10:sDIMENSION7:sL1 T-130:l5:sNAME2:sx10:sDIMENSION3:sL145:l5:sNAME2:sz10:sDIMENSION3:sL15:sROLE6:sINPUT174:l9:sCONSTANT158:l36:l5:sNAME4:sk_s10:sDIMENSION7:sM1 T-230:l5:sNAME2:sm10:sDIMENSION3:sM182:l5:sNAME6:sx_max10:sDIMENSION3:sL16:sVALUE5:s5e-25:sUNIT2:sm12:sUNCERTAINTY5:s1e-3266:l4:sLAW255:l80:l5:sNAME7:sFREE_Z10:sSTATEMENT12:sd2z/dt2 = 05:sREFS5:l2:sz5:sROLE11:sCONSTRAINT74:l5:sNAME4:sKIN10:sSTATEMENT10:sdx/dt = v5:sREFS9:l2:sv2:sx5:sROLE7:sEOM(x)91:l5:sNAME3:sN210:sSTATEMENT17:sm dv/dt = -k_s x5:sREFS19:l4:sk_s2:sm2:sv2:sx5:sROLE7:sEOM(v)122:l11:sASSUMPTION103:l99:l5:sNAME6:sA_lin12:sPROPOSITION51:sthe restoring force is linear in x (Hooke r\u00e9gime)5:sREFS5:l2:sx132:l11:sCONSTRAINT113:l108:l5:sNAME6:sC_NOZ7:sTARGET2:sz7:sACTION4:sFIX10:sSTATEMENT25:smotion confined to z = 06:sVALUE2:s05:sUNIT2:sm88:l9:sBOUNDARY73:l69:l5:sNAME8:sB_small10:sPREDICATE12:s|x| < x_max5:sREFS13:l2:sx6:sx_max"
  },
  {
   "id": "decode/t1-tpk-list",
   "fn": "t1_well_formed",
   "input": {
    "tpk": []
   },
   "note": "a JSON [] is not a TPK (it read as an empty TPK and passed T1)",
   "expect": "[false,[TPK: zone is not an object]]"
  },
  {
   "id": "decode/t1-tpk-empty-object",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {}
   },
   "note": "a JSON {} is the empty TPK: every kind absent",
   "expect": "[true,[]]"
  },
  {
   "id": "decode/t1-kind-object",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": {}
    }
   },
   "expect": "[false,[TPK kind DOF is not a list]]"
  },
  {
   "id": "decode/t1-kind-zero-keyed",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": {
      "0": {
       "NAME": "x",
       "DIMENSION": "L1"
      }
     }
    }
   },
   "note": "an object keyed 0 is not a list",
   "expect": "[false,[TPK kind DOF is not a list]]"
  },
  {
   "id": "decode/t1-entry-list",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      []
     ]
    }
   },
   "expect": "[false,[TPK kind DOF: entry is not an object]]"
  },
  {
   "id": "decode/t1-entry-empty-object",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {}
     ]
    }
   },
   "expect": "[false,[DOF:?: missing field DIMENSION,DOF:?: missing field NAME]]"
  },
  {
   "id": "decode/t1-parameters-list",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "PARAMETERS": []
    }
   },
   "expect": "[false,[TPK: PARAMETERS is not an object]]"
  },
  {
   "id": "decode/t1-parameters-empty-object",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "PARAMETERS": {}
    }
   },
   "note": "an empty PARAMETERS part is valid: D_VARIABLES is optional",
   "expect": "[true,[]]"
  },
  {
   "id": "decode/t1-parameters-zero-keyed",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "PARAMETERS": {
      "0": "ONE"
     }
    }
   },
   "expect": "[false,[TPK PARAMETERS: unknown field 0]]"
  },
  {
   "id": "decode/t1-unknown-kind-zero",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "0": [],
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      }
     ]
    }
   },
   "note": "a key 0 beside named keys; the name is echoed as written",
   "expect": "[false,[TPK: unknown kind 0]]"
  },
  {
   "id": "decode/t1-refs-object",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      }
     ],
     "LAW": [
      {
       "NAME": "L",
       "STATEMENT": "x is free",
       "REFS": {},
       "ROLE": "DEFINITION"
      }
     ]
    }
   },
   "note": "REFS {} is not a list of names",
   "expect": "[false,[LAW:L: field REFS has the wrong type]]"
  },
  {
   "id": "decode/t1-refs-zero-keyed",
   "fn": "t1_well_formed",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      }
     ],
     "LAW": [
      {
       "NAME": "L",
       "STATEMENT": "x is free",
       "REFS": {
        "0": "x"
       },
       "ROLE": "DEFINITION"
      }
     ]
    }
   },
   "expect": "[false,[LAW:L: field REFS has the wrong type]]"
  },
  {
   "id": "decode/trm-list",
   "fn": "trm_well_formed",
   "input": {
    "trm": [],
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      }
     ]
    }
   },
   "expect": "[false,[TrM: zone is not an object]]"
  },
  {
   "id": "decode/trm-header-list",
   "fn": "trm_well_formed",
   "input": {
    "trm": {
     "HEADER": [],
     "ENTRIES": []
    },
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      }
     ]
    }
   },
   "expect": "[false,[TrM: HEADER is not an object]]"
  },
  {
   "id": "decode/trm-header-empty-object",
   "fn": "trm_well_formed",
   "input": {
    "trm": {
     "HEADER": {},
     "ENTRIES": []
    },
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      }
     ]
    }
   },
   "expect": "[false,[TrM HEADER: missing part ENVIRONMENT_INVENTORY,TrM HEADER: missing part SIGNATURE,TrM HEADER: missing part TRANSFORMATIONS]]"
  },
  {
   "id": "decode/trm-entries-object",
   "fn": "trm_well_formed",
   "input": {
    "trm": {
     "HEADER": {
      "ENVIRONMENT_INVENTORY": [],
      "SIGNATURE": [],
      "TRANSFORMATIONS": []
     },
     "ENTRIES": {}
    },
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      }
     ]
    }
   },
   "expect": "[false,[TrM ENTRIES is not a list]]"
  },
  {
   "id": "decode/trm-inventory-zero-keyed",
   "fn": "trm_well_formed",
   "input": {
    "trm": {
     "HEADER": {
      "ENVIRONMENT_INVENTORY": {
       "0": {
        "ENVIRONMENT_QUANTITY": "position",
        "DIMENSION": "L1"
       }
      },
      "SIGNATURE": [],
      "TRANSFORMATIONS": []
     },
     "ENTRIES": []
    },
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      }
     ]
    }
   },
   "expect": "[false,[TrM ENVIRONMENT_INVENTORY is not a list]]"
  },
  {
   "id": "decode/trm-over-object",
   "fn": "trm_well_formed",
   "input": {
    "trm": {
     "HEADER": {
      "ENVIRONMENT_INVENTORY": [],
      "SIGNATURE": [
       {
        "NAME": "s",
        "OVER": {},
        "IMAGE": "i"
       }
      ],
      "TRANSFORMATIONS": []
     },
     "ENTRIES": []
    },
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      }
     ]
    }
   },
   "expect": "[false,[SIGNATURE:s: field OVER has the wrong type]]"
  },
  {
   "id": "decode/trm-valid-x",
   "fn": "trm_well_formed",
   "input": {
    "trm": {
     "HEADER": {
      "ENVIRONMENT_INVENTORY": [
       {
        "ENVIRONMENT_QUANTITY": "position",
        "DIMENSION": "L1"
       }
      ],
      "SIGNATURE": [],
      "TRANSFORMATIONS": []
     },
     "ENTRIES": [
      {
       "NAME": "E_x",
       "DOF": "x",
       "DOMAIN": "always",
       "ENVIRONMENT_QUANTITY": "position",
       "IDENTIFICATION": "x is the position",
       "FALSIFIER": "a measured position off x",
       "FALSIFIER_CLASS": "F2",
       "BEARS": [],
       "DIMENSION": "L1"
      }
     ]
    },
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      }
     ]
    }
   },
   "note": "the one-entry TrM the next case reads against a TPK whose DOF kind is not a list",
   "expect": "[true,[]]"
  },
  {
   "id": "decode/trm-tpk-kind-zero-keyed",
   "fn": "trm_well_formed",
   "input": {
    "trm": {
     "HEADER": {
      "ENVIRONMENT_INVENTORY": [
       {
        "ENVIRONMENT_QUANTITY": "position",
        "DIMENSION": "L1"
       }
      ],
      "SIGNATURE": [],
      "TRANSFORMATIONS": []
     },
     "ENTRIES": [
      {
       "NAME": "E_x",
       "DOF": "x",
       "DOMAIN": "always",
       "ENVIRONMENT_QUANTITY": "position",
       "IDENTIFICATION": "x is the position",
       "FALSIFIER": "a measured position off x",
       "FALSIFIER_CLASS": "F2",
       "BEARS": [],
       "DIMENSION": "L1"
      }
     ]
    },
    "tpk": {
     "DOF": {
      "0": {
       "NAME": "x",
       "DIMENSION": "L1"
      }
     }
    }
   },
   "note": "the TPK's DOF kind is not a list, so the TPK declares no DOF (it read as the list [x])",
   "expect": "[false,[ENTRY:E_x: DOF x is not a TPK DOF]]"
  },
  {
   "id": "decode/tms-valid-minimal",
   "fn": "tms_well_formed",
   "input": {
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "x",
      "K": "2",
      "N_X": 2,
      "S_MAX": 1
     }
    }
   },
   "expect": "[true,[]]"
  },
  {
   "id": "decode/tms-list",
   "fn": "tms_well_formed",
   "input": {
    "tms": []
   },
   "expect": "[false,[TMS: zone is not an object]]"
  },
  {
   "id": "decode/tms-parameters-list",
   "fn": "tms_well_formed",
   "input": {
    "tms": {
     "PARAMETERS": []
    }
   },
   "expect": "[false,[TMS: PARAMETERS is not an object]]"
  },
  {
   "id": "decode/tms-parameters-empty-object",
   "fn": "tms_well_formed",
   "input": {
    "tms": {
     "PARAMETERS": {}
    }
   },
   "expect": "[false,[PARAMETERS: missing field K,PARAMETERS: missing field N_X,PARAMETERS: missing field STEP_CONVENTION,PARAMETERS: missing field S_MAX]]"
  },
  {
   "id": "decode/tms-parameters-zero-keyed",
   "fn": "tms_well_formed",
   "input": {
    "tms": {
     "PARAMETERS": {
      "0": "x"
     }
    }
   },
   "expect": "[false,[PARAMETERS: missing field K,PARAMETERS: missing field N_X,PARAMETERS: missing field STEP_CONVENTION,PARAMETERS: missing field S_MAX,PARAMETERS: unknown field 0]]"
  },
  {
   "id": "decode/tms-yardsticks-object",
   "fn": "tms_well_formed",
   "input": {
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "x",
      "K": "2",
      "N_X": 2,
      "S_MAX": 1
     },
     "YARDSTICKS": {}
    }
   },
   "note": "it read as no yardstick and passed",
   "expect": "[false,[TMS YARDSTICKS is not a list]]"
  },
  {
   "id": "decode/tms-constants-zero-keyed",
   "fn": "tms_well_formed",
   "input": {
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "x",
      "K": "2",
      "N_X": 2,
      "S_MAX": 1
     },
     "CONSTANTS": {
      "0": {
       "NAME": "w",
       "VALUE": "1"
      }
     }
    }
   },
   "expect": "[false,[TMS CONSTANTS is not a list]]"
  },
  {
   "id": "decode/tms-yardstick-valid",
   "fn": "tms_well_formed",
   "input": {
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "x",
      "K": "2",
      "N_X": 2,
      "S_MAX": 1
     },
     "YARDSTICKS": [
      {
       "NAME": "y",
       "KEY": [
        "SR1"
       ],
       "LIMITING": []
      }
     ]
    }
   },
   "expect": "[true,[]]"
  },
  {
   "id": "decode/tms-limiting-object",
   "fn": "tms_well_formed",
   "input": {
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "x",
      "K": "2",
      "N_X": 2,
      "S_MAX": 1
     },
     "YARDSTICKS": [
      {
       "NAME": "y",
       "KEY": [
        "SR1"
       ],
       "LIMITING": {}
      }
     ]
    }
   },
   "expect": "[false,[YARDSTICK:y: field LIMITING has the wrong type]]"
  },
  {
   "id": "decode/tms-limiting-entry-list",
   "fn": "tms_well_formed",
   "input": {
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "x",
      "K": "2",
      "N_X": 2,
      "S_MAX": 1
     },
     "YARDSTICKS": [
      {
       "NAME": "y",
       "KEY": [
        "SR1"
       ],
       "LIMITING": [
        []
       ]
      }
     ]
    }
   },
   "note": "a limiting case [] is not an object",
   "expect": "[false,[YARDSTICK:y: field LIMITING has the wrong type]]"
  },
  {
   "id": "decode/tms-limiting-entry-empty-object",
   "fn": "tms_well_formed",
   "input": {
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "x",
      "K": "2",
      "N_X": 2,
      "S_MAX": 1
     },
     "YARDSTICKS": [
      {
       "NAME": "y",
       "KEY": [
        "SR1"
       ],
       "LIMITING": [
        {}
       ]
      }
     ]
    }
   },
   "expect": "[false,[YARDSTICK:y LIMITING ?: missing field DOMAIN,YARDSTICK:y LIMITING ?: missing field KEY]]"
  },
  {
   "id": "decode/tms-key-object",
   "fn": "tms_well_formed",
   "input": {
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "x",
      "K": "2",
      "N_X": 2,
      "S_MAX": 1
     },
     "YARDSTICKS": [
      {
       "NAME": "y",
       "KEY": {},
       "LIMITING": []
      }
     ]
    }
   },
   "expect": "[false,[YARDSTICK:y: field KEY has the wrong type]]"
  },
  {
   "id": "decode/digest-tpk-parameters-empty-object",
   "fn": "d_tpk",
   "input": {
    "tpk": {
     "PARAMETERS": {},
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      }
     ]
    }
   },
   "preimage": "l4:sTPK6:s0.5.040:l11:sPARAMETERS22:l12:sD_VARIABLES4:sONE44:l4:sDOF34:l30:l5:sNAME2:sx10:sDIMENSION3:sL115:l9:sCONSTANT1:l10:l4:sLAW1:l18:l11:sASSUMPTION1:l18:l11:sCONSTRAINT1:l15:l9:sBOUNDARY1:l",
   "note": "a valid empty PARAMETERS object digests as the hand-built minimal TPK",
   "expect": "6851d16e1532b08843089d65cc7b20376756839c3d5f309351c52e8a585079ca"
  },
  {
   "id": "decode/preimage-tpk-empty-object",
   "fn": "zone_preimage",
   "input": {
    "zone": "TPK",
    "value": {}
   },
   "note": "the empty TPK: PARAMETERS serialized with D_VARIABLES ONE and six empty kinds (hand-built)",
   "expect": "l4:sTPK6:s0.5.040:l11:sPARAMETERS22:l12:sD_VARIABLES4:sONE10:l4:sDOF1:l15:l9:sCONSTANT1:l10:l4:sLAW1:l18:l11:sASSUMPTION1:l18:l11:sCONSTRAINT1:l15:l9:sBOUNDARY1:l"
  }
 ]
}