Folds three previously-separate pieces into one preliminary-example repo for the HAHACS thesis: - thesis/ (submodule) → gitea Thesis.git — the PhD proposal - fret-pipeline/ — FRET requirements to AIGER controller (was ~/Documents/fret_processing/; prior single-commit history abandoned per user decision) - plant-model/ — 10-state PKE + lumped T/H PWR model (was ~/Documents/PKE_Playground/; never version-controlled before) - presentations/2026DICE/ (submodule) → gitea 2026DICE.git - reachability/, hardware/ — empty placeholders for Thrust 3 and HIL - docs/architecture.md — how the discrete and continuous layers compose - claude_memory/ — session notes and scratch knowledge pattern Plant model refactored to thesis naming (x, plant, u, ref); pke_th_rhs now takes u as an explicit arg instead of reading rho_ext from the params struct. First two controllers built to the contract u = ctrl_<mode>(t, x, plant, ref): ctrl_null (baseline) and ctrl_operation (stabilizing, proportional on T_avg). Validated under a 100% -> 80% Q_sg step: ctrl_operation reduces steady-state T_avg drift ~47% vs. the unforced plant. Root CLAUDE.md emphasizes that CLAUDE.md files are living documents and that any knowledge not captured before a session ends is lost forever; claude_memory/ holds the session-level notes that haven't stabilized enough to graduate into a CLAUDE.md. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
154 lines
11 KiB
JSON
154 lines
11 KiB
JSON
{
|
|
"_comment": "Generated from FRET JSON export. Ready for ltlsynt synthesis.",
|
|
"spec_name": "PWR_Hybrid_DRC",
|
|
"source_file": "specs/fretRequirementsVariables.json",
|
|
"inputs": [
|
|
"startup",
|
|
"t_dot_exceeded",
|
|
"t_max_exceeded",
|
|
"t_power_min"
|
|
],
|
|
"outputs": [
|
|
"cold_shutdown",
|
|
"heatup",
|
|
"load_follow",
|
|
"op_mode",
|
|
"scram"
|
|
],
|
|
"requirements": [
|
|
{
|
|
"req_id": "PWR-0100",
|
|
"fulltext": "If SCRAM DRC shall immediately satisfy !OP_MODE",
|
|
"project": "PWR_Hybrid",
|
|
"component": "DRC",
|
|
"ltl": "((G (((! scram) & (X scram)) -> (X (! op_mode)))) & (scram -> (! op_mode)))",
|
|
"ltl_original": "((G (((! SCRAM) & (X SCRAM)) -> (X (! OP_MODE)))) & (SCRAM -> (! OP_MODE)))",
|
|
"variables": [
|
|
"SCRAM",
|
|
"OP_MODE"
|
|
]
|
|
},
|
|
{
|
|
"req_id": "PWR-0202",
|
|
"fulltext": "While !OP_MODE DRC shall always satisfy (Heatup | Load_Follow)",
|
|
"project": "PWR_Hybrid",
|
|
"component": "DRC",
|
|
"ltl": "(G ((! op_mode) -> (heatup | load_follow)))",
|
|
"ltl_original": "(G ((! OP_MODE) -> (Heatup | Load_Follow)))",
|
|
"variables": [
|
|
"OP_MODE",
|
|
"Heatup",
|
|
"Load_Follow"
|
|
]
|
|
},
|
|
{
|
|
"req_id": "PWR-0201",
|
|
"fulltext": "When OP_MODE DRC shall always satisfy (Heatup | Load_Follow) & !(!Heatup & !Load_Follow) & !(SCRAM | Cold_Shutdown)",
|
|
"project": "PWR_Hybrid",
|
|
"component": "DRC",
|
|
"ltl": "((G (((! op_mode) & (X op_mode)) -> (X (G ((heatup | load_follow) & (! (scram | cold_shutdown))))))) & (op_mode -> (G ((heatup | load_follow) & (! (scram | cold_shutdown))))))",
|
|
"ltl_original": "((G (((! OP_MODE) & (X OP_MODE)) -> (X (G ((Heatup | Load_Follow) & (! (SCRAM | Cold_Shutdown))))))) & (OP_MODE -> (G ((Heatup | Load_Follow) & (! (SCRAM | Cold_Shutdown))))))",
|
|
"variables": [
|
|
"OP_MODE",
|
|
"Heatup",
|
|
"Load_Follow",
|
|
"SCRAM",
|
|
"Cold_Shutdown"
|
|
]
|
|
},
|
|
{
|
|
"req_id": "PWR-0200",
|
|
"fulltext": "While OP_MODE DRC shall always satisfy Heatup | Load_Follow",
|
|
"project": "PWR_Hybrid",
|
|
"component": "DRC",
|
|
"ltl": "(G (op_mode -> (heatup | load_follow)))",
|
|
"ltl_original": "(G (OP_MODE -> (Heatup | Load_Follow)))",
|
|
"variables": [
|
|
"OP_MODE",
|
|
"Heatup",
|
|
"Load_Follow"
|
|
]
|
|
},
|
|
{
|
|
"req_id": "PWR-3002",
|
|
"fulltext": "if t_max_exceeded DRC shall at the next timepoint satisfy SCRAM",
|
|
"project": "PWR_Hybrid",
|
|
"component": "DRC",
|
|
"ltl": "((G (((! t_max_exceeded) & (X t_max_exceeded)) -> (X (X scram)))) & (t_max_exceeded -> (X scram)))",
|
|
"ltl_original": "((G (((! t_max_exceeded) & (X t_max_exceeded)) -> (X (X SCRAM)))) & (t_max_exceeded -> (X SCRAM)))",
|
|
"variables": [
|
|
"t_max_exceeded",
|
|
"SCRAM"
|
|
]
|
|
},
|
|
{
|
|
"req_id": "PWR-3001",
|
|
"fulltext": "While Heatup if t_dot_exceeded DRC shall at the next timepoint satisfy SCRAM",
|
|
"project": "PWR_Hybrid",
|
|
"component": "DRC",
|
|
"ltl": "((G ((! ((! heatup) & (X heatup))) | (X (((heatup & (X (! heatup))) V (((! t_dot_exceeded) & ((X t_dot_exceeded) & (! (heatup & (X (! heatup)))))) -> ((X ((heatup & (X (! heatup))) | (X scram))) & (! (heatup & (X (! heatup))))))) & (t_dot_exceeded -> ((heatup & (X (! heatup))) | (X scram))))))) & (heatup -> (((heatup & (X (! heatup))) V (((! t_dot_exceeded) & ((X t_dot_exceeded) & (! (heatup & (X (! heatup)))))) -> ((X ((heatup & (X (! heatup))) | (X scram))) & (! (heatup & (X (! heatup))))))) & (t_dot_exceeded -> ((heatup & (X (! heatup))) | (X scram))))))",
|
|
"ltl_original": "((G ((! ((! Heatup) & (X Heatup))) | (X (((Heatup & (X (! Heatup))) V (((! t_dot_exceeded) & ((X t_dot_exceeded) & (! (Heatup & (X (! Heatup)))))) -> ((X ((Heatup & (X (! Heatup))) | (X SCRAM))) & (! (Heatup & (X (! Heatup))))))) & (t_dot_exceeded -> ((Heatup & (X (! Heatup))) | (X SCRAM))))))) & (Heatup -> (((Heatup & (X (! Heatup))) V (((! t_dot_exceeded) & ((X t_dot_exceeded) & (! (Heatup & (X (! Heatup)))))) -> ((X ((Heatup & (X (! Heatup))) | (X SCRAM))) & (! (Heatup & (X (! Heatup))))))) & (t_dot_exceeded -> ((Heatup & (X (! Heatup))) | (X SCRAM))))))",
|
|
"variables": [
|
|
"Heatup",
|
|
"t_dot_exceeded",
|
|
"SCRAM"
|
|
]
|
|
},
|
|
{
|
|
"req_id": "PWR-2001",
|
|
"fulltext": "While !SCRAM If Cold_Shutdown & STARTUP DRC shall at the next timepoint satisfy OP_MODE & Heatup",
|
|
"project": "PWR_Hybrid",
|
|
"component": "DRC",
|
|
"ltl": "((G ((! (scram & (X (! scram)))) | (X ((((! scram) & (X scram)) V (((! (cold_shutdown & startup)) & ((X (cold_shutdown & startup)) & (! ((! scram) & (X scram))))) -> ((X (((! scram) & (X scram)) | (X (op_mode & heatup)))) & (! ((! scram) & (X scram)))))) & ((cold_shutdown & startup) -> (((! scram) & (X scram)) | (X (op_mode & heatup)))))))) & ((! scram) -> ((((! scram) & (X scram)) V (((! (cold_shutdown & startup)) & ((X (cold_shutdown & startup)) & (! ((! scram) & (X scram))))) -> ((X (((! scram) & (X scram)) | (X (op_mode & heatup)))) & (! ((! scram) & (X scram)))))) & ((cold_shutdown & startup) -> (((! scram) & (X scram)) | (X (op_mode & heatup)))))))",
|
|
"ltl_original": "((G ((! (SCRAM & (X (! SCRAM)))) | (X ((((! SCRAM) & (X SCRAM)) V (((! (Cold_Shutdown & STARTUP)) & ((X (Cold_Shutdown & STARTUP)) & (! ((! SCRAM) & (X SCRAM))))) -> ((X (((! SCRAM) & (X SCRAM)) | (X (OP_MODE & Heatup)))) & (! ((! SCRAM) & (X SCRAM)))))) & ((Cold_Shutdown & STARTUP) -> (((! SCRAM) & (X SCRAM)) | (X (OP_MODE & Heatup)))))))) & ((! SCRAM) -> ((((! SCRAM) & (X SCRAM)) V (((! (Cold_Shutdown & STARTUP)) & ((X (Cold_Shutdown & STARTUP)) & (! ((! SCRAM) & (X SCRAM))))) -> ((X (((! SCRAM) & (X SCRAM)) | (X (OP_MODE & Heatup)))) & (! ((! SCRAM) & (X SCRAM)))))) & ((Cold_Shutdown & STARTUP) -> (((! SCRAM) & (X SCRAM)) | (X (OP_MODE & Heatup)))))))",
|
|
"variables": [
|
|
"SCRAM",
|
|
"Cold_Shutdown",
|
|
"STARTUP",
|
|
"OP_MODE",
|
|
"Heatup"
|
|
]
|
|
},
|
|
{
|
|
"req_id": "PWR-3003",
|
|
"fulltext": "While Heatup if t_power_min DRC shall at the next timepoint satisfy (Load_Follow & !Heatup)",
|
|
"project": "PWR_Hybrid",
|
|
"component": "DRC",
|
|
"ltl": "((G ((! ((! heatup) & (X heatup))) | (X (((heatup & (X (! heatup))) V (((! t_power_min) & ((X t_power_min) & (! (heatup & (X (! heatup)))))) -> ((X ((heatup & (X (! heatup))) | (X (load_follow & (! heatup))))) & (! (heatup & (X (! heatup))))))) & (t_power_min -> ((heatup & (X (! heatup))) | (X (load_follow & (! heatup))))))))) & (heatup -> (((heatup & (X (! heatup))) V (((! t_power_min) & ((X t_power_min) & (! (heatup & (X (! heatup)))))) -> ((X ((heatup & (X (! heatup))) | (X (load_follow & (! heatup))))) & (! (heatup & (X (! heatup))))))) & (t_power_min -> ((heatup & (X (! heatup))) | (X (load_follow & (! heatup))))))))",
|
|
"ltl_original": "((G ((! ((! Heatup) & (X Heatup))) | (X (((Heatup & (X (! Heatup))) V (((! t_power_min) & ((X t_power_min) & (! (Heatup & (X (! Heatup)))))) -> ((X ((Heatup & (X (! Heatup))) | (X (Load_Follow & (! Heatup))))) & (! (Heatup & (X (! Heatup))))))) & (t_power_min -> ((Heatup & (X (! Heatup))) | (X (Load_Follow & (! Heatup))))))))) & (Heatup -> (((Heatup & (X (! Heatup))) V (((! t_power_min) & ((X t_power_min) & (! (Heatup & (X (! Heatup)))))) -> ((X ((Heatup & (X (! Heatup))) | (X (Load_Follow & (! Heatup))))) & (! (Heatup & (X (! Heatup))))))) & (t_power_min -> ((Heatup & (X (! Heatup))) | (X (Load_Follow & (! Heatup))))))))",
|
|
"variables": [
|
|
"Heatup",
|
|
"t_power_min",
|
|
"Load_Follow"
|
|
]
|
|
},
|
|
{
|
|
"req_id": "PWR-0000",
|
|
"fulltext": "DRC shall initially satisfy (Cold_Shutdown & !SCRAM)",
|
|
"project": "PWR_Hybrid",
|
|
"component": "DRC",
|
|
"ltl": "(cold_shutdown & (! scram))",
|
|
"ltl_original": "(Cold_Shutdown & (! SCRAM))",
|
|
"variables": [
|
|
"Cold_Shutdown",
|
|
"SCRAM"
|
|
]
|
|
},
|
|
{
|
|
"req_id": "PWR-0102",
|
|
"fulltext": "If SCRAM DRC shall always satisfy SCRAM",
|
|
"project": "PWR_Hybrid",
|
|
"component": "DRC",
|
|
"ltl": "((G (((! scram) & (X scram)) -> (X (G scram)))) & (scram -> (G scram)))",
|
|
"ltl_original": "((G (((! SCRAM) & (X SCRAM)) -> (X (G SCRAM)))) & (SCRAM -> (G SCRAM)))",
|
|
"variables": [
|
|
"SCRAM"
|
|
]
|
|
}
|
|
],
|
|
"liveness_constraints": [
|
|
"F(heatup)"
|
|
],
|
|
"conjoined_ltl": "(((G (((! scram) & (X scram)) -> (X (! op_mode)))) & (scram -> (! op_mode)))) & ((G ((! op_mode) -> (heatup | load_follow)))) & (((G (((! op_mode) & (X op_mode)) -> (X (G ((heatup | load_follow) & (! (scram | cold_shutdown))))))) & (op_mode -> (G ((heatup | load_follow) & (! (scram | cold_shutdown))))))) & ((G (op_mode -> (heatup | load_follow)))) & (((G (((! t_max_exceeded) & (X t_max_exceeded)) -> (X (X scram)))) & (t_max_exceeded -> (X scram)))) & (((G ((! ((! heatup) & (X heatup))) | (X (((heatup & (X (! heatup))) V (((! t_dot_exceeded) & ((X t_dot_exceeded) & (! (heatup & (X (! heatup)))))) -> ((X ((heatup & (X (! heatup))) | (X scram))) & (! (heatup & (X (! heatup))))))) & (t_dot_exceeded -> ((heatup & (X (! heatup))) | (X scram))))))) & (heatup -> (((heatup & (X (! heatup))) V (((! t_dot_exceeded) & ((X t_dot_exceeded) & (! (heatup & (X (! heatup)))))) -> ((X ((heatup & (X (! heatup))) | (X scram))) & (! (heatup & (X (! heatup))))))) & (t_dot_exceeded -> ((heatup & (X (! heatup))) | (X scram))))))) & (((G ((! (scram & (X (! scram)))) | (X ((((! scram) & (X scram)) V (((! (cold_shutdown & startup)) & ((X (cold_shutdown & startup)) & (! ((! scram) & (X scram))))) -> ((X (((! scram) & (X scram)) | (X (op_mode & heatup)))) & (! ((! scram) & (X scram)))))) & ((cold_shutdown & startup) -> (((! scram) & (X scram)) | (X (op_mode & heatup)))))))) & ((! scram) -> ((((! scram) & (X scram)) V (((! (cold_shutdown & startup)) & ((X (cold_shutdown & startup)) & (! ((! scram) & (X scram))))) -> ((X (((! scram) & (X scram)) | (X (op_mode & heatup)))) & (! ((! scram) & (X scram)))))) & ((cold_shutdown & startup) -> (((! scram) & (X scram)) | (X (op_mode & heatup)))))))) & (((G ((! ((! heatup) & (X heatup))) | (X (((heatup & (X (! heatup))) V (((! t_power_min) & ((X t_power_min) & (! (heatup & (X (! heatup)))))) -> ((X ((heatup & (X (! heatup))) | (X (load_follow & (! heatup))))) & (! (heatup & (X (! heatup))))))) & (t_power_min -> ((heatup & (X (! heatup))) | (X (load_follow & (! heatup))))))))) & (heatup -> (((heatup & (X (! heatup))) V (((! t_power_min) & ((X t_power_min) & (! (heatup & (X (! heatup)))))) -> ((X ((heatup & (X (! heatup))) | (X (load_follow & (! heatup))))) & (! (heatup & (X (! heatup))))))) & (t_power_min -> ((heatup & (X (! heatup))) | (X (load_follow & (! heatup))))))))) & ((cold_shutdown & (! scram))) & (((G (((! scram) & (X scram)) -> (X (G scram)))) & (scram -> (G scram)))) & (F(heatup))"
|
|
}
|