PWR-HYBRID-3/fret-pipeline/.archive/specs/lpc_synthesis_config.json
Dane Sabo cebf8c167a Initial umbrella repo: thesis + FRET pipeline + plant model with first controllers
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>
2026-04-16 16:24:11 -04:00

70 lines
3.3 KiB
JSON

{
"_comment": "Boolean abstraction of LPC lift-mode controller. Assumes -> Guarantees form.",
"spec_name": "LPC_mini",
"source_file": "specs/LPC_mini_reqts_and_vars.json",
"inputs": [
"r_a",
"r_b",
"r_c",
"r_d",
"r_e",
"r_f"
],
"outputs": [
"m_tb",
"m_stb",
"m_swb",
"m_wb"
],
"assumptions": [
"G((r_a | r_b | r_c | r_d | r_e | r_f) & (!r_a | !r_b) & (!r_a | !r_c) & (!r_a | !r_d) & (!r_a | !r_e) & (!r_a | !r_f) & (!r_b | !r_c) & (!r_b | !r_d) & (!r_b | !r_e) & (!r_b | !r_f) & (!r_c | !r_d) & (!r_c | !r_e) & (!r_c | !r_f) & (!r_d | !r_e) & (!r_d | !r_f) & (!r_e | !r_f))",
"r_f",
"G(r_a -> (X(r_a) | X(r_b)))",
"G(r_b -> (X(r_a) | X(r_b) | X(r_c)))",
"G(r_c -> (X(r_b) | X(r_c) | X(r_d)))",
"G(r_d -> (X(r_c) | X(r_d) | X(r_e)))",
"G(r_e -> (X(r_d) | X(r_e) | X(r_f)))",
"G(r_f -> (X(r_e) | X(r_f)))"
],
"guarantees": [
"G((m_tb | m_stb | m_swb | m_wb) & (!m_tb | !m_stb) & (!m_tb | !m_swb) & (!m_tb | !m_wb) & (!m_stb | !m_swb) & (!m_stb | !m_wb) & (!m_swb | !m_wb))",
"m_wb",
"G((m_wb & (r_e | r_f)) -> X(m_wb))",
"G((m_wb & (r_a | r_b | r_c | r_d)) -> X(m_swb))",
"G((m_swb & (r_d | r_e)) -> X(m_swb))",
"G((m_swb & r_f) -> X(m_wb))",
"G((m_swb & (r_a | r_b)) -> X(m_stb))",
"G((m_stb & (r_b | r_c)) -> X(m_stb))",
"G((m_stb & (r_d | r_e | r_f)) -> X(m_swb))",
"G((m_stb & r_a) -> X(m_tb))",
"G((m_tb & r_a) -> X(m_tb))",
"G((m_tb & !r_a) -> X(m_stb))"
],
"conjoined_ltl": "((G((r_a | r_b | r_c | r_d | r_e | r_f) & (!r_a | !r_b) & (!r_a | !r_c) & (!r_a | !r_d) & (!r_a | !r_e) & (!r_a | !r_f) & (!r_b | !r_c) & (!r_b | !r_d) & (!r_b | !r_e) & (!r_b | !r_f) & (!r_c | !r_d) & (!r_c | !r_e) & (!r_c | !r_f) & (!r_d | !r_e) & (!r_d | !r_f) & (!r_e | !r_f))) & (r_f) & (G(r_a -> (X(r_a) | X(r_b)))) & (G(r_b -> (X(r_a) | X(r_b) | X(r_c)))) & (G(r_c -> (X(r_b) | X(r_c) | X(r_d)))) & (G(r_d -> (X(r_c) | X(r_d) | X(r_e)))) & (G(r_e -> (X(r_d) | X(r_e) | X(r_f)))) & (G(r_f -> (X(r_e) | X(r_f))))) -> ((G((m_tb | m_stb | m_swb | m_wb) & (!m_tb | !m_stb) & (!m_tb | !m_swb) & (!m_tb | !m_wb) & (!m_stb | !m_swb) & (!m_stb | !m_wb) & (!m_swb | !m_wb))) & (m_wb) & (G((m_wb & (r_e | r_f)) -> X(m_wb))) & (G((m_wb & (r_a | r_b | r_c | r_d)) -> X(m_swb))) & (G((m_swb & (r_d | r_e)) -> X(m_swb))) & (G((m_swb & r_f) -> X(m_wb))) & (G((m_swb & (r_a | r_b)) -> X(m_stb))) & (G((m_stb & (r_b | r_c)) -> X(m_stb))) & (G((m_stb & (r_d | r_e | r_f)) -> X(m_swb))) & (G((m_stb & r_a) -> X(m_tb))) & (G((m_tb & r_a) -> X(m_tb))) & (G((m_tb & !r_a) -> X(m_stb))))",
"abstraction_notes": {
"speed_regions": {
"r_a": "speed <= 20 (hover zone)",
"r_b": "20 < speed <= 30",
"r_c": "30 < speed <= 40",
"r_d": "40 < speed <= 90",
"r_e": "90 < speed <= 100",
"r_f": "speed > 100"
},
"modes": {
"m_tb": "thrust_borne",
"m_stb": "semi_thrust_borne",
"m_swb": "semi_wing_borne",
"m_wb": "wing_borne"
},
"skipped_requirements": [
"LPC_REACH_HOVER_06 (bounded temporal F[0,6])",
"LPC_REACH_HOVER_12 (bounded temporal F[0,12])",
"LPC_KIAS_DERIVATIVE (absorbed into adjacency constraint)",
"LPC_KIAS_KGS (absorbed - single speed variable)",
"LPC_INIT_KIAS (absorbed into initial region)",
"LPC_KIAS_0 (trivially satisfied)",
"LPC_INIT_HOVER_MODE (absorbed - hover = region A)"
]
}
}