predicates.json is the single source of truth for concretizing the
FRET-spec predicates (t_avg_above_min, t_avg_in_range, p_above_crit,
inv1_holds, inv2_holds) as polytopes {x : A x <= b}. Until now these
were abstract booleans in the synthesis spec; reach analysis
re-invented ad-hoc thresholds that weren't tied to the spec. Closes
the Thrust-1-meets-Thrust-3 seam.
T_standby now defined as T_c0 - 60 F = 275 C (from user review).
Replaces the earlier simplification where shutdown IC held all temps
at T_cold0. 275 C is inside the model's +/-50 C trust region around
operating point and above coolant saturation at reduced pressure.
load_predicates.m in MATLAB reads the JSON and resolves rhs_expr
strings (which reference plant-derived constants like T_c0, T_cold0,
T_standby) into numeric bounds. Returns per-predicate (A_poly, b_poly)
plus a constants struct.
main_mode_sweep.m now pulls T_standby from predicates and uses it
for shutdown + heatup ICs. Heatup horizon extended to 90 min to
cover the wider 60 F -> operating range at 28 C/hr tech-spec limit.
reach_operation.m reads delta_safe_Tc from the t_avg_in_range
halfspace instead of hardcoding +/-5 K. Current concretization is
+/-2.78 C (~5 F); LQR reach still shows 28x margin.
inv1_holds and inv2_holds are marked PLACEHOLDER in the JSON —
engineering best guesses, not derived from a specific plant's tech
specs or a DNBR correlation. Revisit before thesis defense.
Hacker-Split: single-source concretization for FRET predicates,
end seam with reach.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
90 lines
4.6 KiB
JSON
90 lines
4.6 KiB
JSON
{
|
|
"_comment": [
|
|
"Concretization of the FRET-spec predicates as numerical halfspaces.",
|
|
"This file is the single source of truth — all reach-analysis code loads",
|
|
"from here, and any future predicate changes happen here first.",
|
|
"",
|
|
"Each predicate in fret-pipeline/pwr_hybrid_3.json (t_avg_above_min,",
|
|
"t_avg_in_range, p_above_crit, inv1_holds, inv2_holds) lives here as a",
|
|
"polytope over the 10-state vector x = [n, C1..C6, T_f, T_c, T_cold].",
|
|
"A polytope is {x : A_poly * x <= b_poly}, with units noted per entry."
|
|
],
|
|
"_units": {
|
|
"temperatures": "degrees Celsius (SI, internal model units)",
|
|
"n": "normalized power, 1.0 = full power",
|
|
"_display_note": "Figures and prints show Fahrenheit; predicates stored in C."
|
|
},
|
|
"references": {
|
|
"T_c0": "308.35 °C — full-power avg coolant (from pke_params.m)",
|
|
"T_f0": "328.35 °C — full-power fuel",
|
|
"T_cold0": "290.0 °C — full-power cold leg",
|
|
"T_standby": "275.02 °C — hot standby T_avg, defined as T_c0 - 33.33 C (= T_c0 - 60 F)"
|
|
},
|
|
"derived": {
|
|
"T_standby_offset_F": -60.0,
|
|
"T_standby_offset_C": -33.333333333,
|
|
"t_avg_in_range_halfwidth_F": 5.0,
|
|
"t_avg_in_range_halfwidth_C": 2.777777,
|
|
"t_avg_above_min_margin_F": 10.0,
|
|
"t_avg_above_min_margin_C": 5.555555,
|
|
"p_above_crit_threshold_n": 1.0e-4
|
|
},
|
|
"predicates": {
|
|
"t_avg_above_min": {
|
|
"meaning": "Coolant has been warmed above a cold-start threshold; shutdown may transition to heatup.",
|
|
"concretization": "T_c >= T_standby + 5.556 C (= hot-standby + 10 F margin)",
|
|
"halfspaces": [
|
|
{ "state_index": 9, "coeff": -1.0, "rhs_expr": "-(T_standby + 5.556)",
|
|
"comment": "-T_c <= -(T_standby+5.556) i.e. T_c >= T_standby+5.556" }
|
|
]
|
|
},
|
|
"t_avg_in_range": {
|
|
"meaning": "Average coolant temperature is inside the operating band.",
|
|
"concretization": "|T_c - T_c0| <= 2.778 C (= 5 F tech-spec-like deadband)",
|
|
"halfspaces": [
|
|
{ "state_index": 9, "coeff": 1.0, "rhs_expr": "T_c0 + 2.778" },
|
|
{ "state_index": 9, "coeff": -1.0, "rhs_expr": "-(T_c0 - 2.778)" }
|
|
]
|
|
},
|
|
"p_above_crit": {
|
|
"meaning": "Reactor power is in the 'power range' instrumentation regime, above source/intermediate.",
|
|
"concretization": "n >= 1e-4 (0.01% of rated)",
|
|
"halfspaces": [
|
|
{ "state_index": 1, "coeff": -1.0, "rhs_expr": "-1.0e-4",
|
|
"comment": "n >= 1e-4" }
|
|
]
|
|
},
|
|
"inv1_holds": {
|
|
"meaning": "Heatup safety invariant — fuel not overheated, coolant subcooled, ramp rate nominal.",
|
|
"concretization": "(T_f <= 1200 C) AND (T_cold >= T_standby - 10 C) AND (dT_avg/dt <= 28 C/hr placeholder)",
|
|
"halfspaces": [
|
|
{ "state_index": 8, "coeff": 1.0, "rhs_expr": "1200.0",
|
|
"comment": "T_f <= 1200 C (fuel design limit; placeholder)" },
|
|
{ "state_index": 10, "coeff": -1.0, "rhs_expr": "-(T_standby - 10.0)",
|
|
"comment": "T_cold >= T_standby - 10 (minimal subcooling proxy)" }
|
|
],
|
|
"_status": "PLACEHOLDER — ramp-rate constraint not expressible as a state halfspace without augmentation; DNBR not modeled."
|
|
},
|
|
"inv2_holds": {
|
|
"meaning": "Operation safety invariant — power range, T_avg band, coolant subcooling.",
|
|
"concretization": "(n in [0.2, 1.1]) AND (T_c in [T_c0 - 8.33, T_c0 + 8.33] C) AND (T_cold in [T_cold0 - 20, T_cold0 + 10] C)",
|
|
"halfspaces": [
|
|
{ "state_index": 1, "coeff": 1.0, "rhs_expr": "1.1", "comment": "n <= 1.1" },
|
|
{ "state_index": 1, "coeff": -1.0, "rhs_expr": "-0.2", "comment": "n >= 0.2" },
|
|
{ "state_index": 9, "coeff": 1.0, "rhs_expr": "T_c0 + 8.33", "comment": "T_c <= T_c0 + 15 F" },
|
|
{ "state_index": 9, "coeff": -1.0, "rhs_expr": "-(T_c0 - 8.33)", "comment": "T_c >= T_c0 - 15 F" },
|
|
{ "state_index": 10, "coeff": 1.0, "rhs_expr": "T_cold0 + 10", "comment": "T_cold <= T_cold0 + 10" },
|
|
{ "state_index": 10, "coeff": -1.0, "rhs_expr": "-(T_cold0 - 20)", "comment": "T_cold >= T_cold0 - 20" }
|
|
],
|
|
"_status": "PLACEHOLDER — DNBR not modeled; bands chosen to match typical PWR tech-spec deadbands but not calibrated against a specific plant."
|
|
}
|
|
},
|
|
"_placeholder_warning": [
|
|
"The halfspace numbers for inv1_holds and inv2_holds are engineering",
|
|
"placeholders, not derived from a specific plant's tech specs or DNBR",
|
|
"correlation. They are the authors' best guess at the shape such",
|
|
"invariants should take and should be revised before the thesis defense.",
|
|
"The t_avg_* and p_above_crit predicates are defensible for the demo."
|
|
]
|
|
}
|