Jump to content

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

From The Invariance Itself
m 1 revision imported
TPC-PY source vectors/tests_corpus.json (0.3.2), SHA-256 ee73b339d58f2c9c; conformed TPS 0.4.0; PROPOSED, not declared (TPC-PY 0.2.0)
Line 2: Line 2:
  "meta": {
  "meta": {
   "name": "tpc_tests_corpus",
   "name": "tpc_tests_corpus",
   "version": "0.3.1",
   "version": "0.3.2",
   "status": "SELECTED D106.1, D107.1, D108.1 (2026-09-22); increment 8 at Option 1 of every slot (2026-09-24); schema 0.5.0 and the D variable, D176.1 and D177.1 (2026-09-26); VERIFIED (both residences)",
   "status": "SELECTED D106.1, D107.1, D108.1 (2026-09-22); increment 8 at Option 1 of every slot (2026-09-24); schema 0.5.0 and the D variable, D176.1 and D177.1 (2026-09-26); VERIFIED (both residences)",
   "conforms_tps": "0.1.0 revision 4 (kernel tests of TPS 2.2.3 and guide 3.6; isomorphism checks of TPS 2.3.7-2.3.14 and guide 4.6)",
   "conforms_tps": "0.1.0 revision 4 (kernel tests of TPS 2.2.3 and guide 3.6; isomorphism checks of TPS 2.3.7-2.3.14 and guide 4.6)",
   "module": "tpc_tests 0.2.0 (tpc_zone 0.5.0 proposed, schema 0.5.0; tpc_form 0.2.0 unreleased, with D177.1; tpc_units 0.1.1; tpc_strike 0.2.0 proposed)",
   "module": "tpc_tests 0.2.1 (tpc_zone 0.5.1, schema 0.5.0; tpc_form 0.2.1, with D177.1; tpc_units 0.1.1; tpc_strike 0.2.1), proposed with TPC-PY 0.2.0",
   "note": "Every expectation is hand-derived. The toy TFK is the zone corpus's: a mass on a linear spring with z fixed at 0; 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.3.0 (schema 0.5.0; D176.1, D177.1): every fixture LAW carries a ROLE chosen by its physics, no earlier expectation changed; added, the research drafts A21 (scaled time), A10a (the heat equation, under ONE and SEVERAL) and corner_fix_t (a FIXed clock) with ROLEs added, a static beam whose D variable is its arc length, and the TMS switch at the final pass. 0.3.1 (S33, 2026-09-26): a LAW restating the motion of a FIXed or REMOVEd DOF carries ROLE CONSTRAINT (the toy's and the spring's FREE_Z, corner_fix_t's EOM_Z, N2 and KIN of the FIX fixture); a variant whose constraints leave z free gives FREE_Z EOM(z). No expectation moves."
   "note": "Every expectation is hand-derived. The toy TFK is the zone corpus's: a mass on a linear spring with z fixed at 0; 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.3.0 (schema 0.5.0; D176.1, D177.1): every fixture LAW carries a ROLE chosen by its physics, no earlier expectation changed; added, the research drafts A21 (scaled time), A10a (the heat equation, under ONE and SEVERAL) and corner_fix_t (a FIXed clock) with ROLEs added, a static beam whose D variable is its arc length, and the TMS switch at the final pass. 0.3.1 (S33, 2026-09-26): a LAW restating the motion of a FIXed or REMOVEd DOF carries ROLE CONSTRAINT (the toy's and the spring's FREE_Z, corner_fix_t's EOM_Z, N2 and KIN of the FIX fixture); a variant whose constraints leave z free gives FREE_Z EOM(z). No expectation moves. 0.3.2 (C-MS-5, increment 11, 2026-09-28): 16 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. No earlier expectation moves."
  },
  },
  "cases": [
  "cases": [
Line 10,452: Line 10,452:
   },
   },
   "expect": "[PASS,[],[]]"
   "expect": "[PASS,[],[]]"
  },
  {
  "id": "decode/kernel-tests-tpk-list",
  "fn": "kernel_tests",
  "input": {
    "tpk": []
  },
  "expect": "[false,[[T1,false,[TPK: zone is not an object]],[T2,NOT_RUN,[]],[T5,NOT_RUN,[]],[T4,NOT_RUN,[]],[T6,NOT_RUN,[]]],[]]"
  },
  {
  "id": "decode/kernel-tests-kind-object",
  "fn": "kernel_tests",
  "input": {
    "tpk": {
    "LAW": {}
    }
  },
  "expect": "[false,[[T1,false,[TPK kind LAW is not a list]],[T2,NOT_RUN,[]],[T5,NOT_RUN,[]],[T4,NOT_RUN,[]],[T6,NOT_RUN,[]]],[]]"
  },
  {
  "id": "decode/kernel-tests-parameters-empty-object",
  "fn": "kernel_tests",
  "input": {
    "tpk": {
    "PARAMETERS": {}
    }
  },
  "note": "the empty TPK with an empty PARAMETERS part passes; no law or boundary, so T4 and T6 read NO FORM",
  "expect": "[true,[[T1,true,[]],[T2,true,[]],[T5,true,[]],[T4,NO FORM,[]],[T6,NO FORM,[]]],[]]"
  },
  {
  "id": "decode/t5-kind-zero-keyed",
  "fn": "t5_dof_yield",
  "input": {
    "tpk": {
    "DOF": {
      "0": {
      "NAME": "x",
      "DIMENSION": "L1"
      }
    }
    }
  },
  "note": "the DOF kind is not a list, so T5 reads no DOF (it read x and found it idle)",
  "expect": "[true,[]]"
  },
  {
  "id": "decode/t5-kind-object",
  "fn": "t5_dof_yield",
  "input": {
    "tpk": {
    "DOF": [
      {
      "NAME": "x",
      "DIMENSION": "L1"
      }
    ],
    "LAW": {}
    }
  },
  "note": "LAW {} holds no law, so x is idle",
  "expect": "[false,[DOF:x: named by no LAW (T5 c)]]"
  },
  {
  "id": "decode/t2-kind-zero-keyed",
  "fn": "t2_atomicity",
  "input": {
    "tpk": {
    "ASSUMPTION": {
      "0": {
      "NAME": "A",
      "PROPOSITION": "a holds and b holds",
      "REFS": []
      }
    }
    }
  },
  "note": "the ASSUMPTION kind is not a list: no proposition is read",
  "expect": "[true,[]]"
  },
  {
  "id": "decode/t3-constraints-list",
  "fn": "t3_consistency",
  "input": {
    "tpk": {
    "DOF": [
      {
      "NAME": "z",
      "DIMENSION": "L1"
      }
    ],
    "CONSTRAINT": [
      {
      "NAME": "C1",
      "TARGET": "z",
      "ACTION": "REMOVE",
      "STATEMENT": "z removed"
      },
      {
      "NAME": "C2",
      "TARGET": "z",
      "ACTION": "FIX",
      "VALUE": "0",
      "UNIT": "m",
      "STATEMENT": "z fixed"
      }
    ]
    },
    "tms": {
    "PARAMETERS": {
      "STEP_CONVENTION": "x",
      "K": "2",
      "N_X": 2,
      "S_MAX": 1
    }
    }
  },
  "note": "the pair below as a list: T3 finds it",
  "expect": "[false,[CONSTRAINT:C1 and CONSTRAINT:C2: z is both removed and fixed (T3)]]"
  },
  {
  "id": "decode/t3-constraints-zero-keyed",
  "fn": "t3_consistency",
  "input": {
    "tpk": {
    "DOF": [
      {
      "NAME": "z",
      "DIMENSION": "L1"
      }
    ],
    "CONSTRAINT": {
      "0": {
      "NAME": "C1",
      "TARGET": "z",
      "ACTION": "REMOVE",
      "STATEMENT": "z removed"
      },
      "1": {
      "NAME": "C2",
      "TARGET": "z",
      "ACTION": "FIX",
      "VALUE": "0",
      "UNIT": "m",
      "STATEMENT": "z fixed"
      }
    }
    },
    "tms": {
    "PARAMETERS": {
      "STEP_CONVENTION": "x",
      "K": "2",
      "N_X": 2,
      "S_MAX": 1
    }
    }
  },
  "note": "the CONSTRAINT kind is not a list: T3 reads no constraint (T1 refuses the kind)",
  "expect": "[true,[]]"
  },
  {
  "id": "decode/t3-tms-parameters-zero-keyed",
  "fn": "t3_consistency",
  "input": {
    "tpk": {},
    "tms": {
    "PARAMETERS": {
      "0": 1
    }
    }
  },
  "expect": "[false,[T3: S_MAX is not a declared depth of at least 1]]"
  },
  {
  "id": "decode/ic-checks-tpk-list",
  "fn": "ic_checks",
  "input": {
    "trm": {
    "HEADER": {},
    "ENTRIES": []
    },
    "tpk": []
  },
  "expect": "[NOT_RUN,[IC: the TPK does not pass T1],[]]"
  },
  {
  "id": "decode/ic-checks-entries-object",
  "fn": "ic_checks",
  "input": {
    "trm": {
    "HEADER": {
      "ENVIRONMENT_INVENTORY": [],
      "SIGNATURE": [],
      "TRANSFORMATIONS": []
    },
    "ENTRIES": {}
    },
    "tpk": {
    "DOF": [
      {
      "NAME": "x",
      "DIMENSION": "L1"
      }
    ]
    }
  },
  "note": "ENTRIES {} is not a list (it read as no entry, and x as an untied DOF)",
  "expect": "[NOT_RUN,[IC: the TrM is not well-formed],[]]"
  },
  {
  "id": "decode/ic-checks-empty-trm-gap",
  "fn": "ic_checks",
  "input": {
    "trm": {
    "HEADER": {
      "ENVIRONMENT_INVENTORY": [],
      "SIGNATURE": [],
      "TRANSFORMATIONS": []
    },
    "ENTRIES": []
    },
    "tpk": {
    "DOF": [
      {
      "NAME": "x",
      "DIMENSION": "L1"
      }
    ]
    }
  },
  "note": "the same with ENTRIES []: x is a named gap",
  "expect": "[GAP,[],[IC2: DOF x is untied]]"
  },
  {
  "id": "decode/final-tfk-list",
  "fn": "final_checks",
  "input": {
    "tfk": []
  },
  "expect": "[NOT_RUN,[final pass: the TFK is not an object],[]]"
  },
  {
  "id": "decode/final-empty-kernel-passes",
  "fn": "final_checks",
  "input": {
    "tfk": {
    "TPK": {
      "PARAMETERS": {}
    },
    "TrM": {
      "HEADER": {
      "ENVIRONMENT_INVENTORY": [],
      "SIGNATURE": [],
      "TRANSFORMATIONS": []
      },
      "ENTRIES": []
    },
    "TMS": {
      "PARAMETERS": {
      "STEP_CONVENTION": "x",
      "K": "2",
      "N_X": 2,
      "S_MAX": 1
      }
    }
    }
  },
  "note": "the empty TPK with an empty PARAMETERS object, an empty TrM and a minimal TMS",
  "expect": "[PASS,[],[]]"
  },
  {
  "id": "decode/final-yardsticks-object",
  "fn": "final_checks",
  "input": {
    "tfk": {
    "TPK": {
      "PARAMETERS": {}
    },
    "TrM": {
      "HEADER": {
      "ENVIRONMENT_INVENTORY": [],
      "SIGNATURE": [],
      "TRANSFORMATIONS": []
      },
      "ENTRIES": []
    },
    "TMS": {
      "PARAMETERS": {
      "STEP_CONVENTION": "x",
      "K": "2",
      "N_X": 2,
      "S_MAX": 1
      },
      "YARDSTICKS": {}
    }
    }
  },
  "note": "YARDSTICKS {} is not a list",
  "expect": "[NOT_RUN,[final pass: the TMS is not well-formed],[]]"
  },
  {
  "id": "decode/final-tpk-kind-object",
  "fn": "final_checks",
  "input": {
    "tfk": {
    "TPK": {
      "DOF": {}
    },
    "TrM": {
      "HEADER": {
      "ENVIRONMENT_INVENTORY": [],
      "SIGNATURE": [],
      "TRANSFORMATIONS": []
      },
      "ENTRIES": []
    },
    "TMS": {
      "PARAMETERS": {
      "STEP_CONVENTION": "x",
      "K": "2",
      "N_X": 2,
      "S_MAX": 1
      }
    }
    }
  },
  "expect": "[NOT_RUN,[final pass: the TPK does not pass T1, T2, T5, T4 and T6],[]]"
   }
   }
  ]
  ]
}
}



Revision as of 02:10, 30 September 2026

{
 "meta": {
  "name": "tpc_tests_corpus",
  "version": "0.3.2",
  "status": "SELECTED D106.1, D107.1, D108.1 (2026-09-22); increment 8 at Option 1 of every slot (2026-09-24); schema 0.5.0 and the D variable, D176.1 and D177.1 (2026-09-26); VERIFIED (both residences)",
  "conforms_tps": "0.1.0 revision 4 (kernel tests of TPS 2.2.3 and guide 3.6; isomorphism checks of TPS 2.3.7-2.3.14 and guide 4.6)",
  "module": "tpc_tests 0.2.1 (tpc_zone 0.5.1, schema 0.5.0; tpc_form 0.2.1, with D177.1; tpc_units 0.1.1; tpc_strike 0.2.1), proposed with TPC-PY 0.2.0",
  "note": "Every expectation is hand-derived. The toy TFK is the zone corpus's: a mass on a linear spring with z fixed at 0; 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.3.0 (schema 0.5.0; D176.1, D177.1): every fixture LAW carries a ROLE chosen by its physics, no earlier expectation changed; added, the research drafts A21 (scaled time), A10a (the heat equation, under ONE and SEVERAL) and corner_fix_t (a FIXed clock) with ROLEs added, a static beam whose D variable is its arc length, and the TMS switch at the final pass. 0.3.1 (S33, 2026-09-26): a LAW restating the motion of a FIXed or REMOVEd DOF carries ROLE CONSTRAINT (the toy's and the spring's FREE_Z, corner_fix_t's EOM_Z, N2 and KIN of the FIX fixture); a variant whose constraints leave z free gives FREE_Z EOM(z). No expectation moves. 0.3.2 (C-MS-5, increment 11, 2026-09-28): 16 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. No earlier expectation moves."
 },
 "cases": [
  {
   "id": "t2/pass-toy",
   "fn": "t2_findings",
   "input": {
    "prop": "the restoring force is linear in x (Hooke r\u00e9gime)"
   },
   "expect": "[]"
  },
  {
   "id": "t2/and",
   "fn": "t2_findings",
   "input": {
    "prop": "friction is negligible and the table is level"
   },
   "expect": "[joins claims with \"and\"]"
  },
  {
   "id": "t2/and-enclosed",
   "fn": "t2_findings",
   "input": {
    "prop": "(friction is negligible and the table is level)"
   },
   "expect": "[joins claims with \"and\"]"
  },
  {
   "id": "t2/AND-double-enclosed",
   "fn": "t2_findings",
   "input": {
    "prop": "((A holds AND B holds))"
   },
   "expect": "[joins claims with \"and\"]"
  },
  {
   "id": "t2/and-in-brackets",
   "fn": "t2_findings",
   "input": {
    "prop": "(a and b) holds"
   },
   "expect": "[]"
  },
  {
   "id": "t2/limit-between",
   "fn": "t2_findings",
   "input": {
    "prop": "x lies between 0 and 1"
   },
   "expect": "[joins claims with \"and\"]"
  },
  {
   "id": "t2/word-boundary",
   "fn": "t2_findings",
   "input": {
    "prop": "Andrew's law holds"
   },
   "expect": "[]"
  },
  {
   "id": "t2/word-boundary-inner",
   "fn": "t2_findings",
   "input": {
    "prop": "sand and band"
   },
   "expect": "[joins claims with \"and\"]"
  },
  {
   "id": "t2/ampersand",
   "fn": "t2_findings",
   "input": {
    "prop": "x & y hold"
   },
   "expect": "[joins claims with \"&\"]"
  },
  {
   "id": "t2/logical-and",
   "fn": "t2_findings",
   "input": {
    "prop": "x \u2227 y"
   },
   "expect": "[joins claims with U+2227]"
  },
  {
   "id": "t2/as-well-as",
   "fn": "t2_findings",
   "input": {
    "prop": "mass as well as charge is conserved"
   },
   "expect": "[joins claims with \"as well as\"]"
  },
  {
   "id": "t2/but",
   "fn": "t2_findings",
   "input": {
    "prop": "it is linear, but it saturates"
   },
   "expect": "[joins claims with \"but\"]"
  },
  {
   "id": "t2/whereas",
   "fn": "t2_findings",
   "input": {
    "prop": "x rises whereas y falls"
   },
   "expect": "[joins claims with \"whereas\"]"
  },
  {
   "id": "t2/semicolon",
   "fn": "t2_findings",
   "input": {
    "prop": "A holds; B holds"
   },
   "expect": "[has a semicolon]"
  },
  {
   "id": "t2/two-sentences",
   "fn": "t2_findings",
   "input": {
    "prop": "It holds. Then it fails"
   },
   "expect": "[has more than one sentence]"
  },
  {
   "id": "t2/two-sentences-bang",
   "fn": "t2_findings",
   "input": {
    "prop": "Ohm's law holds! It is linear"
   },
   "expect": "[has more than one sentence]"
  },
  {
   "id": "t2/abbreviation",
   "fn": "t2_findings",
   "input": {
    "prop": "linear e.g. in x"
   },
   "expect": "[]"
  },
  {
   "id": "t2/decimal",
   "fn": "t2_findings",
   "input": {
    "prop": "x = 0.5 m exactly"
   },
   "expect": "[]"
  },
  {
   "id": "t2/list-hyphen",
   "fn": "t2_findings",
   "input": {
    "prop": "linear in x.\n- quadratic in y"
   },
   "expect": "[is a list]"
  },
  {
   "id": "t2/list-number",
   "fn": "t2_findings",
   "input": {
    "prop": "first claim\n2. second claim"
   },
   "expect": "[is a list]"
  },
  {
   "id": "t2/quoted",
   "fn": "t2_findings",
   "input": {
    "prop": "the word \"and\" is quoted"
   },
   "expect": "[]"
  },
  {
   "id": "t2/curly-quoted",
   "fn": "t2_findings",
   "input": {
    "prop": "the claim \u201cA and B\u201d is quoted"
   },
   "expect": "[]"
  },
  {
   "id": "t2/semicolon-in-brackets",
   "fn": "t2_findings",
   "input": {
    "prop": "x holds and (y holds; z holds)"
   },
   "expect": "[joins claims with \"and\"]"
  },
  {
   "id": "t2/two-findings",
   "fn": "t2_findings",
   "input": {
    "prop": "one; two and three"
   },
   "expect": "[has a semicolon,joins claims with \"and\"]"
  },
  {
   "id": "t2/unmatched-closer",
   "fn": "t2_findings",
   "input": {
    "prop": "a) and b"
   },
   "expect": "[joins claims with \"and\"]"
  },
  {
   "id": "t2/unclosed-bracket",
   "fn": "t2_findings",
   "input": {
    "prop": "(A and B"
   },
   "expect": "[joins claims with \"and\"]"
  },
  {
   "id": "t2/unclosed-quote",
   "fn": "t2_findings",
   "input": {
    "prop": "he said \"A and B"
   },
   "expect": "[joins claims with \"and\"]"
  },
  {
   "id": "t2/mismatched-brackets",
   "fn": "t2_findings",
   "input": {
    "prop": "(A and B]"
   },
   "expect": "[joins claims with \"and\"]"
  },
  {
   "id": "t2/enclosed-with-space",
   "fn": "t2_findings",
   "input": {
    "prop": "  [A and B]  "
   },
   "expect": "[joins claims with \"and\"]"
  },
  {
   "id": "t2/two-groups",
   "fn": "t2_findings",
   "input": {
    "prop": "(A) and (B)"
   },
   "expect": "[joins claims with \"and\"]"
  },
  {
   "id": "t2/nested-in-unclosed",
   "fn": "t2_findings",
   "input": {
    "prop": "(A (x) and B"
   },
   "expect": "[joins claims with \"and\"]"
  },
  {
   "id": "t2/crlf-list",
   "fn": "t2_findings",
   "input": {
    "prop": "first\r\n- second"
   },
   "expect": "[is a list]"
  },
  {
   "id": "t2a/toy",
   "fn": "t2_atomicity",
   "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": "t2a/and",
   "fn": "t2_atomicity",
   "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": "friction is negligible and the table is level",
       "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: PROPOSITION joins claims with \"and\" (T2)]]"
  },
  {
   "id": "t2a/two",
   "fn": "t2_atomicity",
   "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_1",
       "PROPOSITION": "x; y",
       "REFS": [
        "x"
       ]
      },
      {
       "NAME": "A_2",
       "PROPOSITION": "It holds. It fails",
       "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_1: PROPOSITION has a semicolon (T2),ASSUMPTION:A_2: PROPOSITION has more than one sentence (T2)]]"
  },
  {
   "id": "t2a/malformed-left-to-T1",
   "fn": "t2_atomicity",
   "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": 7,
       "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": "t2a/hidden-left-to-T1",
   "fn": "t2_atomicity",
   "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": "a \u202e and b",
       "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": "t2a/not-an-object",
   "fn": "t2_atomicity",
   "input": {
    "tpk": "x"
   },
   "expect": "[true,[]]"
  },
  {
   "id": "t3/toy",
   "fn": "t3_consistency",
   "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"
       ]
      }
     ]
    },
    "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": "t3/same-value",
   "fn": "t3_consistency",
   "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"
      },
      {
       "NAME": "C_Z2",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "cm",
       "STATEMENT": "z = 0 cm"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    },
    "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": "t3/same-value-other-unit",
   "fn": "t3_consistency",
   "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.05",
       "UNIT": "m",
       "STATEMENT": "z = 0.05 m"
      },
      {
       "NAME": "C_Z2",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "5",
       "UNIT": "cm",
       "STATEMENT": "z = 5 cm"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    },
    "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": "t3/two-values",
   "fn": "t3_consistency",
   "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"
      },
      {
       "NAME": "C_Z2",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "1",
       "UNIT": "m",
       "STATEMENT": "z = 1 m"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    },
    "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": "[false,[CONSTRAINT:C_NOZ and CONSTRAINT:C_Z2: z fixed at 0 m and at 1 m (T3)]]"
  },
  {
   "id": "t3/removed-and-fixed",
   "fn": "t3_consistency",
   "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"
      },
      {
       "NAME": "C_ZR",
       "TARGET": "z",
       "ACTION": "REMOVE",
       "STATEMENT": "no z"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    },
    "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": "[false,[CONSTRAINT:C_NOZ and CONSTRAINT:C_ZR: z is both removed and fixed (T3)]]"
  },
  {
   "id": "t3/removed-twice",
   "fn": "t3_consistency",
   "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_R1",
       "TARGET": "z",
       "ACTION": "REMOVE",
       "STATEMENT": "no z"
      },
      {
       "NAME": "C_R2",
       "TARGET": "z",
       "ACTION": "REMOVE",
       "STATEMENT": "no z"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    },
    "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": "t3/angle-equal",
   "fn": "t3_consistency",
   "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"
      }
     ],
     "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_A",
       "TARGET": "theta",
       "ACTION": "FIX",
       "VALUE": "90",
       "UNIT": "deg",
       "STATEMENT": "theta = 90 deg"
      },
      {
       "NAME": "C_B",
       "TARGET": "theta",
       "ACTION": "FIX",
       "VALUE": "1.5707963267949",
       "UNIT": "rad",
       "STATEMENT": "theta = 1.5707963267949 rad"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    },
    "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": "t3/angle-unequal",
   "fn": "t3_consistency",
   "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"
      }
     ],
     "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_A",
       "TARGET": "theta",
       "ACTION": "FIX",
       "VALUE": "90",
       "UNIT": "deg",
       "STATEMENT": "theta = 90 deg"
      },
      {
       "NAME": "C_B",
       "TARGET": "theta",
       "ACTION": "FIX",
       "VALUE": "1.5708",
       "UNIT": "rad",
       "STATEMENT": "theta = 1.5708 rad"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    },
    "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": "[false,[CONSTRAINT:C_A and CONSTRAINT:C_B: theta fixed at 90 deg and at 1.5708 rad (T3)]]"
  },
  {
   "id": "t3/kind-differs",
   "fn": "t3_consistency",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "f",
       "DIMENSION": "T-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": "EOM(z)"
      }
     ],
     "ASSUMPTION": [
      {
       "NAME": "A_lin",
       "PROPOSITION": "the restoring force is linear in x (Hooke r\u00e9gime)",
       "REFS": [
        "x"
       ]
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C_F1",
       "TARGET": "f",
       "ACTION": "FIX",
       "VALUE": "1",
       "UNIT": "Hz",
       "STATEMENT": "f = 1 Hz"
      },
      {
       "NAME": "C_F2",
       "TARGET": "f",
       "ACTION": "FIX",
       "VALUE": "6.283185307179586",
       "UNIT": "rad s-1",
       "STATEMENT": "f = 6.283185307179586 rad s-1"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    },
    "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": "[false,[CONSTRAINT:C_F1 and CONSTRAINT:C_F2: the two FIX values of f cannot be compared: units of different kind: Hz1 and rad1 (T3)]]"
  },
  {
   "id": "t3/three",
   "fn": "t3_consistency",
   "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_A",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "z = 0 m"
      },
      {
       "NAME": "C_B",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "1",
       "UNIT": "m",
       "STATEMENT": "z = 1 m"
      },
      {
       "NAME": "C_C",
       "TARGET": "z",
       "ACTION": "REMOVE",
       "STATEMENT": "no z"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    },
    "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": "[false,[CONSTRAINT:C_A and CONSTRAINT:C_B: z fixed at 0 m and at 1 m (T3),CONSTRAINT:C_A and CONSTRAINT:C_C: z is both removed and fixed (T3),CONSTRAINT:C_B and CONSTRAINT:C_C: z is both removed and fixed (T3)]]"
  },
  {
   "id": "t3/overflow",
   "fn": "t3_consistency",
   "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"
      },
      {
       "NAME": "C_ZH",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "1e9999",
       "UNIT": "m",
       "STATEMENT": "z = 1e9999 m"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    },
    "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": "[false,[CONSTRAINT:C_NOZ and CONSTRAINT:C_ZH: the two FIX values of z cannot be compared (T3)]]"
  },
  {
   "id": "t3/no-depth",
   "fn": "t3_consistency",
   "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"
       ]
      }
     ]
    },
    "tms": {
     "PARAMETERS": {
      "S_MAX": 0
     }
    }
   },
   "expect": "[false,[T3: S_MAX is not a declared depth of at least 1]]"
  },
  {
   "id": "t3/depth-bool",
   "fn": "t3_consistency",
   "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"
       ]
      }
     ]
    },
    "tms": {
     "PARAMETERS": {
      "S_MAX": true
     }
    }
   },
   "expect": "[false,[T3: S_MAX is not a declared depth of at least 1]]"
  },
  {
   "id": "t5/toy",
   "fn": "t5_dof_yield",
   "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": "t5/idle-dof",
   "fn": "t5_dof_yield",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "w",
       "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,[DOF:w: named by no LAW (T5 c)]]"
  },
  {
   "id": "t5/boundary-is-not-a-law",
   "fn": "t5_dof_yield",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "w",
       "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"
       ]
      },
      {
       "NAME": "B_w",
       "PREDICATE": "w > 0",
       "REFS": [
        "w"
       ]
      }
     ]
    }
   },
   "expect": "[false,[DOF:w: named by no LAW (T5 c)]]"
  },
  {
   "id": "t5/void-constraint",
   "fn": "t5_dof_yield",
   "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)"
      }
     ],
     "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,[CONSTRAINT:C_NOZ: TARGET z is named by no LAW, so no law leaves it free (T5 b),DOF:z: named by no LAW (T5 c)]]"
  },
  {
   "id": "kt/toy",
   "fn": "kernel_tests",
   "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"
       ]
      }
     ]
    }
   },
   "note": "the OPTIONAL rule as a vector (V8): a TPK without any form passes as at increment 7; T4 and T6 read NO FORM and the inspections owed are listed",
   "expect": "[true,[[T1,true,[]],[T2,true,[]],[T5,true,[]],[T4,NO FORM,[]],[T6,NO FORM,[]]],[BOUNDARY:B_small: no CONDITION; T6 totality by inspection,LAW:FREE_Z: no EQUATION; T4 and T3 over this law by inspection,LAW:KIN: no EQUATION; T4 and T3 over this law by inspection,LAW:N2: no EQUATION; T4 and T3 over this law by inspection]]"
  },
  {
   "id": "kt/T1-stops",
   "fn": "kernel_tests",
   "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",
        "q"
       ],
       "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,[[T1,false,[LAW:KIN: REFS q does not resolve]],[T2,NOT_RUN,[]],[T5,NOT_RUN,[]],[T4,NOT_RUN,[]],[T6,NOT_RUN,[]]],[]]"
  },
  {
   "id": "kt/T2-T5",
   "fn": "kernel_tests",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      },
      {
       "NAME": "v",
       "DIMENSION": "L1 T-1"
      },
      {
       "NAME": "z",
       "DIMENSION": "L1"
      },
      {
       "NAME": "w",
       "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": "friction is negligible and the table is level",
       "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,[[T1,true,[]],[T2,false,[ASSUMPTION:A_lin: PROPOSITION joins claims with \"and\" (T2)]],[T5,false,[DOF:w: named by no LAW (T5 c)]],[T4,NO FORM,[]],[T6,NO FORM,[]]],[BOUNDARY:B_small: no CONDITION; T6 totality by inspection,LAW:FREE_Z: no EQUATION; T4 and T3 over this law by inspection,LAW:KIN: no EQUATION; T4 and T3 over this law by inspection,LAW:N2: no EQUATION; T4 and T3 over this law by inspection]]"
  },
  {
   "id": "kt/forms-pass",
   "fn": "kernel_tests",
   "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,[[T1,true,[]],[T2,true,[]],[T5,true,[]],[T4,true,[]],[T6,true,[]]],[]]"
  },
  {
   "id": "kt/T4-fails",
   "fn": "kernel_tests",
   "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 * 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,[[T1,true,[]],[T2,true,[]],[T5,true,[]],[T4,false,[LAW:N2: EQUATION sides have dimensions L1 M1 T-2 and L2 M1 T-2 (T4)]],[T6,true,[]]],[]]"
  },
  {
   "id": "kt/T6-fails",
   "fn": "kernel_tests",
   "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 < 1"
      }
     ]
    }
   },
   "expect": "[false,[[T1,true,[]],[T2,true,[]],[T5,true,[]],[T4,true,[]],[T6,false,[BOUNDARY:B_small: CONDITION uses / on x_max with no guard x_max != 0 (T6)]]],[]]"
  },
  {
   "id": "kt/partial-forms",
   "fn": "kernel_tests",
   "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)"
      },
      {
       "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 law without a form is listed, never silently passed (kernel tests 12.3)",
   "expect": "[true,[[T1,true,[]],[T2,true,[]],[T5,true,[]],[T4,true,[]],[T6,true,[]]],[LAW:KIN: no EQUATION; T4 and T3 over this law by inspection]]"
  },
  {
   "id": "kt/T1-names",
   "fn": "kernel_tests",
   "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,[[T1,false,[LAW:KIN: EQUATION names t, which is not in REFS]],[T2,NOT_RUN,[]],[T5,NOT_RUN,[]],[T4,NOT_RUN,[]],[T6,NOT_RUN,[]]],[]]"
  },
  {
   "id": "t3/laws-ground-fragment",
   "fn": "t3_consistency",
   "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",
       "VALUE": "2",
       "UNIT": "kg"
      },
      {
       "NAME": "k_s",
       "DIMENSION": "M1 T-2",
       "VALUE": "3",
       "UNIT": "N m-1"
      },
      {
       "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": "CONSTRAINT",
       "EQUATION": "m * D(v, t) = -k_s * x"
      },
      {
       "NAME": "KIN",
       "STATEMENT": "dx/dt = v",
       "REFS": [
        "x",
        "v",
        "t"
       ],
       "ROLE": "CONSTRAINT",
       "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_X",
       "TARGET": "x",
       "ACTION": "FIX",
       "VALUE": "0.1",
       "UNIT": "m",
       "STATEMENT": "x = 0.1 m"
      },
      {
       "NAME": "C_V",
       "TARGET": "v",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m s-1",
       "STATEMENT": "v = 0 m s-1"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    },
    "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": "every identifier of N2 is bound; D(v,t) of the FIXed v is 0; KIN and FREE_Z evaluate 0 = 0",
   "expect": "[false,[LAW:N2 and CONSTRAINT:C_V and CONSTRAINT:C_X: N2 evaluates 0 = -0.3 under the fixed values (T3)]]"
  },
  {
   "id": "t3/laws-nothing-claimed",
   "fn": "t3_consistency",
   "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"
      }
     ]
    },
    "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": "ic/forms-pass",
   "fn": "ic_checks",
   "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": "[PASS,[],[]]"
  },
  {
   "id": "ic/IC4a-fails",
   "fn": "ic_checks",
   "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) = position"
       }
      ],
      "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": "[REJECT,[IC4(a): SIGNATURE:time_derivative: FORM under the entries reads D(position,time)=velocity, not IMAGE_FORM D(position,time)=position],[]]"
  },
  {
   "id": "ic/IC4a-undecided-is-IC2-gap",
   "fn": "ic_checks",
   "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",
         "t"
        ],
        "IMAGE": "d/dt maps position to velocity",
        "FORM": "D(x, t) = v",
        "IMAGE_FORM": "D(position, height) = 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": [],
       "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": [],
       "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": [
        "C_NOZ"
       ],
       "DIMENSION": "L1"
      }
     ]
    },
    "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": "a DOF in OVER with no entry is IC2's gap, not IC4's failure (S8): the signature is undecided, not rejected",
   "expect": "[GAP,[],[IC2: DOF t is untied]]"
  },
  {
   "id": "fp/forms-pass",
   "fn": "final_checks",
   "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": []
       }
      ]
     }
    }
   },
   "expect": "[PASS,[],[]]"
  },
  {
   "id": "fp/T3-laws",
   "fn": "final_checks",
   "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",
        "VALUE": "2",
        "UNIT": "kg"
       },
       {
        "NAME": "k_s",
        "DIMENSION": "M1 T-2",
        "VALUE": "3",
        "UNIT": "N m-1"
       },
       {
        "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": "CONSTRAINT",
        "EQUATION": "m * D(v, t) = -k_s * x"
       },
       {
        "NAME": "KIN",
        "STATEMENT": "dx/dt = v",
        "REFS": [
         "x",
         "v",
         "t"
        ],
        "ROLE": "CONSTRAINT",
        "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_X",
        "TARGET": "x",
        "ACTION": "FIX",
        "VALUE": "0.1",
        "UNIT": "m",
        "STATEMENT": "x = 0.1 m"
       },
       {
        "NAME": "C_V",
        "TARGET": "v",
        "ACTION": "FIX",
        "VALUE": "0",
        "UNIT": "m s-1",
        "STATEMENT": "v = 0 m s-1"
       }
      ],
      "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": "[REJECT,[LAW:N2 and CONSTRAINT:C_V and CONSTRAINT:C_X: N2 evaluates 0 = -0.3 under the fixed values (T3)],[]]"
  },
  {
   "id": "ic/toy",
   "fn": "ic_checks",
   "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": "[PASS,[],[]]"
  },
  {
   "id": "ic/gap",
   "fn": "ic_checks",
   "input": {
    "trm": {
     "HEADER": {
      "ENVIRONMENT_INVENTORY": [
       {
        "ENVIRONMENT_QUANTITY": "position",
        "DIMENSION": "L1"
       },
       {
        "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": [],
       "DIMENSION": "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"
      }
     ]
    },
    "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": "[GAP,[],[IC2: DOF v is untied]]"
  },
  {
   "id": "ic/gap-borne-law",
   "fn": "ic_checks",
   "input": {
    "trm": {
     "HEADER": {
      "ENVIRONMENT_INVENTORY": [
       {
        "ENVIRONMENT_QUANTITY": "position",
        "DIMENSION": "L1"
       },
       {
        "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_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": "[REJECT,[IC4(c): ENTRY:E_x: BEARS LAW:KIN, which names DOF v that no entry identifies,IC4(c): ENTRY:E_x: BEARS LAW:N2, which names DOF v that no entry identifies],[IC2: DOF v is untied]]"
  },
  {
   "id": "ic/IC1",
   "fn": "ic_checks",
   "input": {
    "trm": {
     "HEADER": {
      "ENVIRONMENT_INVENTORY": [
       {
        "ENVIRONMENT_QUANTITY": "position",
        "DIMENSION": "L1"
       },
       {
        "ENVIRONMENT_QUANTITY": "velocity",
        "DIMENSION": "L1 T-1"
       },
       {
        "ENVIRONMENT_QUANTITY": "height",
        "DIMENSION": "L1"
       },
       {
        "ENVIRONMENT_QUANTITY": "acceleration",
        "DIMENSION": "L1 T-2"
       }
      ],
      "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": "[REJECT,[IC1: environment quantity acceleration is identified by no entry],[]]"
  },
  {
   "id": "ic/codomain",
   "fn": "ic_checks",
   "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": "REMOVE",
       "STATEMENT": "no z"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    }
   },
   "expect": "[REJECT,[CODOMAIN: ENTRY:E_z identifies DOF z, which CONSTRAINT:C_NOZ removes,IC4(c): ENTRY:E_z: BEARS CONSTRAINT:C_NOZ, whose TARGET z no entry identifies,IC4(c): ENTRY:E_z: BEARS LAW:FREE_Z, which names DOF z that no entry identifies],[]]"
  },
  {
   "id": "ic/removed-needs-no-entry",
   "fn": "ic_checks",
   "input": {
    "trm": {
     "HEADER": {
      "ENVIRONMENT_INVENTORY": [
       {
        "ENVIRONMENT_QUANTITY": "position",
        "DIMENSION": "L1"
       },
       {
        "ENVIRONMENT_QUANTITY": "velocity",
        "DIMENSION": "L1 T-1"
       }
      ],
      "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"
      }
     ]
    },
    "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": "REMOVE",
       "STATEMENT": "no z"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ]
      }
     ]
    }
   },
   "expect": "[PASS,[],[]]"
  },
  {
   "id": "ic/IC3-dof",
   "fn": "ic_checks",
   "input": {
    "trm": {
     "HEADER": {
      "ENVIRONMENT_INVENTORY": [
       {
        "ENVIRONMENT_QUANTITY": "position",
        "DIMENSION": "L1"
       },
       {
        "ENVIRONMENT_QUANTITY": "velocity",
        "DIMENSION": "L1 T-1"
       },
       {
        "ENVIRONMENT_QUANTITY": "height",
        "DIMENSION": "L1"
       },
       {
        "ENVIRONMENT_QUANTITY": "extension",
        "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"
      },
      {
       "NAME": "E_x2",
       "DOF": "x",
       "DOMAIN": "always",
       "ENVIRONMENT_QUANTITY": "extension",
       "IDENTIFICATION": "x is extension",
       "FALSIFIER": "a measured extension unlike x",
       "FALSIFIER_CLASS": "F2",
       "BEARS": [],
       "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": "[REJECT,[IC3: DOF x is identified with inequivalent quantities extension, position (ENTRY:E_x, ENTRY:E_x2)],[]]"
  },
  {
   "id": "ic/IC3-both",
   "fn": "ic_checks",
   "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"
      },
      {
       "NAME": "E_h2",
       "DOF": "x",
       "DOMAIN": "always",
       "ENVIRONMENT_QUANTITY": "height",
       "IDENTIFICATION": "x is height",
       "FALSIFIER": "a measured height unlike x",
       "FALSIFIER_CLASS": "F2",
       "BEARS": [],
       "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": "[REJECT,[IC3: DOF x is identified with inequivalent quantities height, position (ENTRY:E_h2, ENTRY:E_x),IC3: environment quantity height is identified with DOF x, z (ENTRY:E_h2, ENTRY:E_z)],[]]"
  },
  {
   "id": "ic/IC4b-both-sides",
   "fn": "ic_checks",
   "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"
      },
      {
       "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": "[REJECT,[IC4(b): ENTRY:E_v: DIMENSION L1 differs from DOF v's L1 T-1,IC4(b): ENTRY:E_v: DIMENSION L1 differs from environment quantity velocity's L1 T-1],[]]"
  },
  {
   "id": "ic/IC4b-environment",
   "fn": "ic_checks",
   "input": {
    "trm": {
     "HEADER": {
      "ENVIRONMENT_INVENTORY": [
       {
        "ENVIRONMENT_QUANTITY": "position",
        "DIMENSION": "L1"
       },
       {
        "ENVIRONMENT_QUANTITY": "velocity",
        "DIMENSION": "L1 T-2"
       },
       {
        "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": "[REJECT,[IC4(b): ENTRY:E_v: DIMENSION L1 T-1 differs from environment quantity velocity's L1 T-2],[]]"
  },
  {
   "id": "ic/IC4b-respelled",
   "fn": "ic_checks",
   "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": "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"
      }
     ]
    },
    "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": "[PASS,[],[]]"
  },
  {
   "id": "ic/not-run-trm",
   "fn": "ic_checks",
   "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"
       }
      ]
     }
    },
    "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": "[NOT_RUN,[IC: the TrM is not well-formed],[]]"
  },
  {
   "id": "ic/not-run-tpk",
   "fn": "ic_checks",
   "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",
        "q"
       ],
       "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": "[NOT_RUN,[IC: the TPK does not pass T1],[]]"
  },
  {
   "id": "fp/toy",
   "fn": "final_checks",
   "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": []
       }
      ]
     }
    }
   },
   "expect": "[PASS,[],[]]"
  },
  {
   "id": "fp/gap",
   "fn": "final_checks",
   "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": "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": [],
        "DIMENSION": "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": "[GAP,[],[IC2: DOF v is untied]]"
  },
  {
   "id": "fp/gap-rejected",
   "fn": "final_checks",
   "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": "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": [],
        "DIMENSION": "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,
       "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": "[REJECT,[IC2: DOF v is untied and IC2_POLICY is REJECT],[IC2: DOF v is untied]]"
  },
  {
   "id": "fp/T3",
   "fn": "final_checks",
   "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"
       },
       {
        "NAME": "C_Z2",
        "TARGET": "z",
        "ACTION": "FIX",
        "VALUE": "1",
        "UNIT": "m",
        "STATEMENT": "z = 1 m"
       }
      ],
      "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": "[REJECT,[CONSTRAINT:C_NOZ and CONSTRAINT:C_Z2: z fixed at 0 m and at 1 m (T3)],[]]"
  },
  {
   "id": "fp/not-run-kernel",
   "fn": "final_checks",
   "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": "friction is negligible and the table is level",
        "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": "[NOT_RUN,[final pass: the TPK does not pass T1, T2, T5, T4 and T6],[]]"
  },
  {
   "id": "fp/not-run-trm",
   "fn": "final_checks",
   "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"
        },
        {
         "ENVIRONMENT_QUANTITY": "acceleration",
         "DIMENSION": "L1 T-2"
        }
       ],
       "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": "[NOT_RUN,[final pass: the TrM does not pass IC1-IC4],[]]"
  },
  {
   "id": "fp/not-run-tms",
   "fn": "final_checks",
   "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": 0
      },
      "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": "[NOT_RUN,[final pass: the TMS is not well-formed],[]]"
  },
  {
   "id": "fp/not-an-object",
   "fn": "final_checks",
   "input": {
    "tfk": "x"
   },
   "expect": "[NOT_RUN,[final pass: the TFK is not an object],[]]"
  },
  {
   "id": "kt/s050-scaled-time-A21",
   "fn": "kernel_tests",
   "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: D(X,tau) of X and tau of DIMENSION 1 is 1 (D177.1); the DIMENSION T1 requirement refused it before",
   "expect": "[true,[[T1,true,[]],[T2,true,[]],[T5,true,[]],[T4,true,[]],[T6,NO FORM,[]]],[]]"
  },
  {
   "id": "fp/s050-scaled-time-A21",
   "fn": "final_checks",
   "input": {
    "tfk": {
     "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"
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "env_X",
         "DIMENSION": "1"
        },
        {
         "ENVIRONMENT_QUANTITY": "env_V",
         "DIMENSION": "1"
        },
        {
         "ENVIRONMENT_QUANTITY": "env_tau",
         "DIMENSION": "1"
        }
       ],
       "SIGNATURE": [],
       "TRANSFORMATIONS": [
        {
         "NAME": "unit_rescaling",
         "STATEMENT": "a change of units rescales each value"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_X",
        "DOF": "X",
        "DOMAIN": "inside every declared boundary",
        "ENVIRONMENT_QUANTITY": "env_X",
        "IDENTIFICATION": "X is identified with the measured env_X",
        "FALSIFIER": "a measured env_X outside the kernel's prediction beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN",
         "N2"
        ],
        "DIMENSION": "1"
       },
       {
        "NAME": "E_V",
        "DOF": "V",
        "DOMAIN": "inside every declared boundary",
        "ENVIRONMENT_QUANTITY": "env_V",
        "IDENTIFICATION": "V is identified with the measured env_V",
        "FALSIFIER": "a measured env_V outside the kernel's prediction beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN",
         "N2"
        ],
        "DIMENSION": "1"
       },
       {
        "NAME": "E_tau",
        "DOF": "tau",
        "DOMAIN": "inside every declared boundary",
        "ENVIRONMENT_QUANTITY": "env_tau",
        "IDENTIFICATION": "tau is identified with the measured env_tau",
        "FALSIFIER": "a measured env_tau outside the kernel's prediction beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "KIN",
         "N2"
        ],
        "DIMENSION": "1"
       }
      ]
     },
     "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": "[PASS,[],[]]"
  },
  {
   "id": "kt/s050-corner-fix-t",
   "fn": "kernel_tests",
   "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: a FIXed clock is no D variable (D177.1); under schema 0.4.0 it passed every check (E-N7)",
   "expect": "[false,[[T1,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]],[T2,NOT_RUN,[]],[T5,NOT_RUN,[]],[T4,NOT_RUN,[]],[T6,NOT_RUN,[]]],[]]"
  },
  {
   "id": "kt/s050-corner-fix-t-unfixed",
   "fn": "kernel_tests",
   "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"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_small",
       "PREDICATE": "|x| < x_max",
       "REFS": [
        "x",
        "x_max"
       ],
       "CONDITION": "abs(x) < x_max"
      }
     ]
    }
   },
   "note": "the same kernel without C_T: t is a D variable again",
   "expect": "[true,[[T1,true,[]],[T2,true,[]],[T5,true,[]],[T4,true,[]],[T6,true,[]]],[]]"
  },
  {
   "id": "kt/s050-heat-under-one",
   "fn": "kernel_tests",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "u",
       "DIMENSION": "TH1"
      },
      {
       "NAME": "X",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "alpha_d",
       "DIMENSION": "L2 T-1"
      },
      {
       "NAME": "L_rod",
       "DIMENSION": "L1"
      }
     ],
     "LAW": [
      {
       "NAME": "HEAT",
       "STATEMENT": "du/dt = alpha d2u/dX2",
       "REFS": [
        "u",
        "t",
        "alpha_d",
        "X"
       ],
       "ROLE": "EOM(u)",
       "EQUATION": "D(u, t) = alpha_d * D(u, X, 2)"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_rod",
       "PREDICATE": "0 <= X <= L_rod",
       "REFS": [
        "X",
        "L_rod"
       ],
       "CONDITION": "0 <= X and X <= L_rod"
      }
     ]
    }
   },
   "note": "out/A/suite/A10a with ROLE EOM(u): two D variables under ONE, the default, are T1's refusal",
   "expect": "[false,[[T1,false,[TPK: D_VARIABLES is ONE (ONE when absent), but the forms use D variables X (LAW:HEAT), t (LAW:HEAT)]],[T2,NOT_RUN,[]],[T5,NOT_RUN,[]],[T4,NOT_RUN,[]],[T6,NOT_RUN,[]]],[]]"
  },
  {
   "id": "kt/s050-heat-under-several",
   "fn": "kernel_tests",
   "input": {
    "tpk": {
     "PARAMETERS": {
      "D_VARIABLES": "SEVERAL"
     },
     "DOF": [
      {
       "NAME": "u",
       "DIMENSION": "TH1"
      },
      {
       "NAME": "X",
       "DIMENSION": "L1"
      },
      {
       "NAME": "t",
       "DIMENSION": "T1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "alpha_d",
       "DIMENSION": "L2 T-1"
      },
      {
       "NAME": "L_rod",
       "DIMENSION": "L1"
      }
     ],
     "LAW": [
      {
       "NAME": "HEAT",
       "STATEMENT": "du/dt = alpha d2u/dX2",
       "REFS": [
        "u",
        "t",
        "alpha_d",
        "X"
       ],
       "ROLE": "EOM(u)",
       "EQUATION": "D(u, t) = alpha_d * D(u, X, 2)"
      }
     ],
     "BOUNDARY": [
      {
       "NAME": "B_rod",
       "PREDICATE": "0 <= X <= L_rod",
       "REFS": [
        "X",
        "L_rod"
       ],
       "CONDITION": "0 <= X and X <= L_rod"
      }
     ]
    }
   },
   "note": "SEVERAL admits the partial derivatives; T4: D(u,X,2) is TH1 L-2 and alpha_d times it TH1 T-1, as D(u,t)",
   "expect": "[true,[[T1,true,[]],[T2,true,[]],[T5,true,[]],[T4,true,[]],[T6,true,[]]],[]]"
  },
  {
   "id": "fp/s050-heat-under-several",
   "fn": "final_checks",
   "input": {
    "tfk": {
     "TPK": {
      "PARAMETERS": {
       "D_VARIABLES": "SEVERAL"
      },
      "DOF": [
       {
        "NAME": "u",
        "DIMENSION": "TH1"
       },
       {
        "NAME": "X",
        "DIMENSION": "L1"
       },
       {
        "NAME": "t",
        "DIMENSION": "T1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "alpha_d",
        "DIMENSION": "L2 T-1"
       },
       {
        "NAME": "L_rod",
        "DIMENSION": "L1"
       }
      ],
      "LAW": [
       {
        "NAME": "HEAT",
        "STATEMENT": "du/dt = alpha d2u/dX2",
        "REFS": [
         "u",
         "t",
         "alpha_d",
         "X"
        ],
        "ROLE": "EOM(u)",
        "EQUATION": "D(u, t) = alpha_d * D(u, X, 2)"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_rod",
        "PREDICATE": "0 <= X <= L_rod",
        "REFS": [
         "X",
         "L_rod"
        ],
        "CONDITION": "0 <= X and X <= L_rod"
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "env_u",
         "DIMENSION": "TH1"
        },
        {
         "ENVIRONMENT_QUANTITY": "env_X",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "env_t",
         "DIMENSION": "T1"
        }
       ],
       "SIGNATURE": [],
       "TRANSFORMATIONS": [
        {
         "NAME": "unit_rescaling",
         "STATEMENT": "a change of units rescales each value"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_u",
        "DOF": "u",
        "DOMAIN": "inside every declared boundary",
        "ENVIRONMENT_QUANTITY": "env_u",
        "IDENTIFICATION": "u is identified with the measured env_u",
        "FALSIFIER": "a measured env_u outside the kernel's prediction beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "HEAT"
        ],
        "DIMENSION": "TH1"
       },
       {
        "NAME": "E_X",
        "DOF": "X",
        "DOMAIN": "inside every declared boundary",
        "ENVIRONMENT_QUANTITY": "env_X",
        "IDENTIFICATION": "X is identified with the measured env_X",
        "FALSIFIER": "a measured env_X outside the kernel's prediction beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "HEAT"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_t",
        "DOF": "t",
        "DOMAIN": "inside every declared boundary",
        "ENVIRONMENT_QUANTITY": "env_t",
        "IDENTIFICATION": "t is identified with the measured env_t",
        "FALSIFIER": "a measured env_t outside the kernel's prediction beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "HEAT"
        ],
        "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": "[PASS,[],[]]"
  },
  {
   "id": "fp/s050-heat-under-one",
   "fn": "final_checks",
   "input": {
    "tfk": {
     "TPK": {
      "DOF": [
       {
        "NAME": "u",
        "DIMENSION": "TH1"
       },
       {
        "NAME": "X",
        "DIMENSION": "L1"
       },
       {
        "NAME": "t",
        "DIMENSION": "T1"
       }
      ],
      "CONSTANT": [
       {
        "NAME": "alpha_d",
        "DIMENSION": "L2 T-1"
       },
       {
        "NAME": "L_rod",
        "DIMENSION": "L1"
       }
      ],
      "LAW": [
       {
        "NAME": "HEAT",
        "STATEMENT": "du/dt = alpha d2u/dX2",
        "REFS": [
         "u",
         "t",
         "alpha_d",
         "X"
        ],
        "ROLE": "EOM(u)",
        "EQUATION": "D(u, t) = alpha_d * D(u, X, 2)"
       }
      ],
      "BOUNDARY": [
       {
        "NAME": "B_rod",
        "PREDICATE": "0 <= X <= L_rod",
        "REFS": [
         "X",
         "L_rod"
        ],
        "CONDITION": "0 <= X and X <= L_rod"
       }
      ]
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [
        {
         "ENVIRONMENT_QUANTITY": "env_u",
         "DIMENSION": "TH1"
        },
        {
         "ENVIRONMENT_QUANTITY": "env_X",
         "DIMENSION": "L1"
        },
        {
         "ENVIRONMENT_QUANTITY": "env_t",
         "DIMENSION": "T1"
        }
       ],
       "SIGNATURE": [],
       "TRANSFORMATIONS": [
        {
         "NAME": "unit_rescaling",
         "STATEMENT": "a change of units rescales each value"
        }
       ]
      },
      "ENTRIES": [
       {
        "NAME": "E_u",
        "DOF": "u",
        "DOMAIN": "inside every declared boundary",
        "ENVIRONMENT_QUANTITY": "env_u",
        "IDENTIFICATION": "u is identified with the measured env_u",
        "FALSIFIER": "a measured env_u outside the kernel's prediction beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "HEAT"
        ],
        "DIMENSION": "TH1"
       },
       {
        "NAME": "E_X",
        "DOF": "X",
        "DOMAIN": "inside every declared boundary",
        "ENVIRONMENT_QUANTITY": "env_X",
        "IDENTIFICATION": "X is identified with the measured env_X",
        "FALSIFIER": "a measured env_X outside the kernel's prediction beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "HEAT"
        ],
        "DIMENSION": "L1"
       },
       {
        "NAME": "E_t",
        "DOF": "t",
        "DOMAIN": "inside every declared boundary",
        "ENVIRONMENT_QUANTITY": "env_t",
        "IDENTIFICATION": "t is identified with the measured env_t",
        "FALSIFIER": "a measured env_t outside the kernel's prediction beyond uncertainty",
        "FALSIFIER_CLASS": "F2",
        "BEARS": [
         "HEAT"
        ],
        "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": "[NOT_RUN,[final pass: the TPK does not pass T1, T2, T5, T4 and T6],[]]"
  },
  {
   "id": "kt/s050-beam-arc-length",
   "fn": "kernel_tests",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "w",
       "DIMENSION": "L1"
      },
      {
       "NAME": "s",
       "DIMENSION": "L1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "M_b",
       "DIMENSION": "L2 M1 T-2"
      },
      {
       "NAME": "E_y",
       "DIMENSION": "L-1 M1 T-2"
      },
      {
       "NAME": "I_a",
       "DIMENSION": "L4"
      }
     ],
     "LAW": [
      {
       "NAME": "BEAM",
       "STATEMENT": "d2w/ds2 = M_b / (E_y I_a)",
       "REFS": [
        "w",
        "s",
        "M_b",
        "E_y",
        "I_a"
       ],
       "ROLE": "EOM(w)",
       "EQUATION": "D(w, s, 2) = M_b / (E_y * I_a)"
      }
     ]
    }
   },
   "note": "T4 on a non-time D variable: D(w,s,2) is L1 less 2 x L1 = L-1, as M_b/(E_y*I_a)",
   "expect": "[true,[[T1,true,[]],[T2,true,[]],[T5,true,[]],[T4,true,[]],[T6,NO FORM,[]]],[]]"
  },
  {
   "id": "kt/s050-beam-T4-fails",
   "fn": "kernel_tests",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "w",
       "DIMENSION": "L1"
      },
      {
       "NAME": "s",
       "DIMENSION": "L1"
      }
     ],
     "CONSTANT": [
      {
       "NAME": "M_b",
       "DIMENSION": "L2 M1 T-2"
      },
      {
       "NAME": "E_y",
       "DIMENSION": "L-1 M1 T-2"
      }
     ],
     "LAW": [
      {
       "NAME": "BEAM",
       "STATEMENT": "d2w/ds2 = M_b / E_y",
       "REFS": [
        "w",
        "s",
        "M_b",
        "E_y"
       ],
       "ROLE": "EOM(w)",
       "EQUATION": "D(w, s, 2) = M_b / E_y"
      }
     ]
    }
   },
   "note": "dim(w) less 2 dim(s) is L-1; M_b/E_y is L3",
   "expect": "[false,[[T1,true,[]],[T2,true,[]],[T5,true,[]],[T4,false,[LAW:BEAM: EQUATION sides have dimensions L-1 and L3 (T4)]],[T6,NO FORM,[]]],[]]"
  },
  {
   "id": "fp/s050-structure-check-off",
   "fn": "final_checks",
   "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,
       "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": []
       }
      ]
     }
    }
   },
   "note": "STRUCTURE_CHECK OFF is a well-formed TMS; T3 and IC2's disposition read nothing of it",
   "expect": "[PASS,[],[]]"
  },
  {
   "id": "fp/s050-structure-check-refused",
   "fn": "final_checks",
   "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,
       "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": "[NOT_RUN,[final pass: the TMS is not well-formed],[]]"
  },
  {
   "id": "fp/s050-explicit-one",
   "fn": "final_checks",
   "input": {
    "tfk": {
     "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"
       }
      ]
     },
     "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": "[PASS,[],[]]"
  },
  {
   "id": "decode/kernel-tests-tpk-list",
   "fn": "kernel_tests",
   "input": {
    "tpk": []
   },
   "expect": "[false,[[T1,false,[TPK: zone is not an object]],[T2,NOT_RUN,[]],[T5,NOT_RUN,[]],[T4,NOT_RUN,[]],[T6,NOT_RUN,[]]],[]]"
  },
  {
   "id": "decode/kernel-tests-kind-object",
   "fn": "kernel_tests",
   "input": {
    "tpk": {
     "LAW": {}
    }
   },
   "expect": "[false,[[T1,false,[TPK kind LAW is not a list]],[T2,NOT_RUN,[]],[T5,NOT_RUN,[]],[T4,NOT_RUN,[]],[T6,NOT_RUN,[]]],[]]"
  },
  {
   "id": "decode/kernel-tests-parameters-empty-object",
   "fn": "kernel_tests",
   "input": {
    "tpk": {
     "PARAMETERS": {}
    }
   },
   "note": "the empty TPK with an empty PARAMETERS part passes; no law or boundary, so T4 and T6 read NO FORM",
   "expect": "[true,[[T1,true,[]],[T2,true,[]],[T5,true,[]],[T4,NO FORM,[]],[T6,NO FORM,[]]],[]]"
  },
  {
   "id": "decode/t5-kind-zero-keyed",
   "fn": "t5_dof_yield",
   "input": {
    "tpk": {
     "DOF": {
      "0": {
       "NAME": "x",
       "DIMENSION": "L1"
      }
     }
    }
   },
   "note": "the DOF kind is not a list, so T5 reads no DOF (it read x and found it idle)",
   "expect": "[true,[]]"
  },
  {
   "id": "decode/t5-kind-object",
   "fn": "t5_dof_yield",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      }
     ],
     "LAW": {}
    }
   },
   "note": "LAW {} holds no law, so x is idle",
   "expect": "[false,[DOF:x: named by no LAW (T5 c)]]"
  },
  {
   "id": "decode/t2-kind-zero-keyed",
   "fn": "t2_atomicity",
   "input": {
    "tpk": {
     "ASSUMPTION": {
      "0": {
       "NAME": "A",
       "PROPOSITION": "a holds and b holds",
       "REFS": []
      }
     }
    }
   },
   "note": "the ASSUMPTION kind is not a list: no proposition is read",
   "expect": "[true,[]]"
  },
  {
   "id": "decode/t3-constraints-list",
   "fn": "t3_consistency",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "z",
       "DIMENSION": "L1"
      }
     ],
     "CONSTRAINT": [
      {
       "NAME": "C1",
       "TARGET": "z",
       "ACTION": "REMOVE",
       "STATEMENT": "z removed"
      },
      {
       "NAME": "C2",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "z fixed"
      }
     ]
    },
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "x",
      "K": "2",
      "N_X": 2,
      "S_MAX": 1
     }
    }
   },
   "note": "the pair below as a list: T3 finds it",
   "expect": "[false,[CONSTRAINT:C1 and CONSTRAINT:C2: z is both removed and fixed (T3)]]"
  },
  {
   "id": "decode/t3-constraints-zero-keyed",
   "fn": "t3_consistency",
   "input": {
    "tpk": {
     "DOF": [
      {
       "NAME": "z",
       "DIMENSION": "L1"
      }
     ],
     "CONSTRAINT": {
      "0": {
       "NAME": "C1",
       "TARGET": "z",
       "ACTION": "REMOVE",
       "STATEMENT": "z removed"
      },
      "1": {
       "NAME": "C2",
       "TARGET": "z",
       "ACTION": "FIX",
       "VALUE": "0",
       "UNIT": "m",
       "STATEMENT": "z fixed"
      }
     }
    },
    "tms": {
     "PARAMETERS": {
      "STEP_CONVENTION": "x",
      "K": "2",
      "N_X": 2,
      "S_MAX": 1
     }
    }
   },
   "note": "the CONSTRAINT kind is not a list: T3 reads no constraint (T1 refuses the kind)",
   "expect": "[true,[]]"
  },
  {
   "id": "decode/t3-tms-parameters-zero-keyed",
   "fn": "t3_consistency",
   "input": {
    "tpk": {},
    "tms": {
     "PARAMETERS": {
      "0": 1
     }
    }
   },
   "expect": "[false,[T3: S_MAX is not a declared depth of at least 1]]"
  },
  {
   "id": "decode/ic-checks-tpk-list",
   "fn": "ic_checks",
   "input": {
    "trm": {
     "HEADER": {},
     "ENTRIES": []
    },
    "tpk": []
   },
   "expect": "[NOT_RUN,[IC: the TPK does not pass T1],[]]"
  },
  {
   "id": "decode/ic-checks-entries-object",
   "fn": "ic_checks",
   "input": {
    "trm": {
     "HEADER": {
      "ENVIRONMENT_INVENTORY": [],
      "SIGNATURE": [],
      "TRANSFORMATIONS": []
     },
     "ENTRIES": {}
    },
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      }
     ]
    }
   },
   "note": "ENTRIES {} is not a list (it read as no entry, and x as an untied DOF)",
   "expect": "[NOT_RUN,[IC: the TrM is not well-formed],[]]"
  },
  {
   "id": "decode/ic-checks-empty-trm-gap",
   "fn": "ic_checks",
   "input": {
    "trm": {
     "HEADER": {
      "ENVIRONMENT_INVENTORY": [],
      "SIGNATURE": [],
      "TRANSFORMATIONS": []
     },
     "ENTRIES": []
    },
    "tpk": {
     "DOF": [
      {
       "NAME": "x",
       "DIMENSION": "L1"
      }
     ]
    }
   },
   "note": "the same with ENTRIES []: x is a named gap",
   "expect": "[GAP,[],[IC2: DOF x is untied]]"
  },
  {
   "id": "decode/final-tfk-list",
   "fn": "final_checks",
   "input": {
    "tfk": []
   },
   "expect": "[NOT_RUN,[final pass: the TFK is not an object],[]]"
  },
  {
   "id": "decode/final-empty-kernel-passes",
   "fn": "final_checks",
   "input": {
    "tfk": {
     "TPK": {
      "PARAMETERS": {}
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [],
       "SIGNATURE": [],
       "TRANSFORMATIONS": []
      },
      "ENTRIES": []
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "x",
       "K": "2",
       "N_X": 2,
       "S_MAX": 1
      }
     }
    }
   },
   "note": "the empty TPK with an empty PARAMETERS object, an empty TrM and a minimal TMS",
   "expect": "[PASS,[],[]]"
  },
  {
   "id": "decode/final-yardsticks-object",
   "fn": "final_checks",
   "input": {
    "tfk": {
     "TPK": {
      "PARAMETERS": {}
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [],
       "SIGNATURE": [],
       "TRANSFORMATIONS": []
      },
      "ENTRIES": []
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "x",
       "K": "2",
       "N_X": 2,
       "S_MAX": 1
      },
      "YARDSTICKS": {}
     }
    }
   },
   "note": "YARDSTICKS {} is not a list",
   "expect": "[NOT_RUN,[final pass: the TMS is not well-formed],[]]"
  },
  {
   "id": "decode/final-tpk-kind-object",
   "fn": "final_checks",
   "input": {
    "tfk": {
     "TPK": {
      "DOF": {}
     },
     "TrM": {
      "HEADER": {
       "ENVIRONMENT_INVENTORY": [],
       "SIGNATURE": [],
       "TRANSFORMATIONS": []
      },
      "ENTRIES": []
     },
     "TMS": {
      "PARAMETERS": {
       "STEP_CONVENTION": "x",
       "K": "2",
       "N_X": 2,
       "S_MAX": 1
      }
     }
    }
   },
   "expect": "[NOT_RUN,[final pass: the TPK does not pass T1, T2, T5, T4 and T6],[]]"
  }
 ]
}