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>
70 lines
3.3 KiB
JSON
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)"
|
|
]
|
|
}
|
|
}
|