Below is a compact map of what kinds of guarantees engineers usually want (safety, boundedness, convergence, timing, etc.), and how formal verification (FV) actually secures each one—what you write, how you prove it, and what evidence (“certificate”) you can ship.
What you state: “Always avoid a bad set.” In temporal logic: G ¬bad (globally not bad).
Typical math form: an inductive invariant I(x)I(x) such that
(i) I(x0)I(x_0) holds initially, (ii) I(x)∧step(x,x′)⇒I(x′)I(x)\wedge \text{step}(x,x') \Rightarrow I(x'), and (iii) I(x)⇒¬bad(x)I(x)\Rightarrow \neg bad(x).
How you prove: k‑induction / IC3(PDR) / model checking; abstract interpretation for code; barrier certificates (CBFs) or set‑invariance for dynamics.
Certificate you can ship: the invariant (or barrier function) itself, plus a machine‑checkable proof/UNSAT certificate.
Runtime backstop: a monitor/shield that enforces the safety predicate and switches to a fallback controller if it’s about to be violated (Simplex pattern).