{ "_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)" ] } }