System Representations and Approximations

This module defines tools to represent and manipulate dynamical systems and their approximations.

Concrete Systems

The systems we aim to control are defined using types from external packages such as:

For example, a continuous-time system might be defined as:

concrete_system = MathematicalSystems.ConstrainedBlackBoxControlContinuousSystem(
    dynamics(),  # system dynamics (function)
    n_X,         # state dimension
    n_U,         # input dimension
    _X_,         # state constraints
    _U_          # input constraints
)

Symbolic/Abstract Systems

Symbolic models (used for abstraction-based control) are constructed separately using the symbolic abstraction module, typically resulting in a SymbolicModelList.

System Approximations

To reason about the system’s behavior during abstraction, we introduce approximations of the system's evolution. These are grouped into:

Both are subtypes of SystemApproximation, and can represent either underapproximations or overapproximations of the system dynamics.

The following functions define the SystemApproximation interface:

Underapproximations

These approximations guarantee that all returned trajectories are feasible under the system dynamics.

The following function define the underapproximation interface:

Dionysos.System.get_under_approximation_mapFunction
get_under_approximation_map(approx::DiscreteTimeSystemUnderApproximation) -> Function

Returns a function that computes the underapproximation (list of points) of the system's evolution: f(rect::UT.HyperRectangle{N,T}, u::SVector{M,T}) -> SVector{N,T}[]

source
get_under_approximation_map(approx::ContinuousTimeSystemUnderApproximation) -> Function

Returns a function that computes the underapproximation (list of points) of the system's evolution: f(rect::UT.HyperRectangle{N,T}, u::SVector{M,T}, tstep::T) -> SVector{N,T}[]

source

Overapproximations

These approximations guarantee that the true system evolution is contained in the returned set, making them useful for safety and robust control.

The following function define the overapproximation interface:

Dionysos.System.get_over_approximation_mapFunction
get_over_approximation_map(approx::DiscreteTimeSystemOverApproximation) -> Function

Returns a function that computes the overapproximation of the system's evolution: f(rect::UT.HyperRectangle{N,T}, u::SVector{M,T}) -> UT.HyperRectangle{N,T}

source
get_over_approximation_map(overApprox::ContinuousTimeSystemOverApproximation) -> Function

Returns a function that computes the overapproximation of the system's evolution: f(rect::UT.HyperRectangle{N,T}, u::SVector{M,T}, tstep::T) -> UT.HyperRectangle{N,T}

source

Concrete implementations of abstract approximation types

Dionysos.System.DiscreteTimeCenteredSimulationType
DiscreteTimeCenteredSimulation <: DiscreteTimeSystemUnderApproximation

A concrete underapproximation that simulates the evolution of the center of the input set under a discrete-time system.

This approximation is very conservative, returning a single propagated point from the center of the input set.

Fields

Underapproximation Map

Returns a function of the form: f(rect::HyperRectangle, u::SVector) -> Vector{SVector} which returns a singleton list with the propagated center point.

source
Dionysos.System.ContinuousTimeCenteredSimulationType
ContinuousTimeCenteredSimulation <: ContinuousTimeSystemUnderApproximation

A concrete underapproximation of a continuous-time system using center-point simulation.

Simulates only the center of the state set under the system dynamics. Returns a single propagated point after integration over a time step.

Fields

  • system: A constrained continuous-time control system.

Underapproximation Map

Returns a function of the form: f(rect::HyperRectangle, u::SVector, tstep::Real) -> Vector{SVector} which returns a singleton list with the propagated center point.

Notes

Use discretize to convert this approximation into a discrete-time approximation suitable for use in fixed-step abstraction pipelines.

source
Dionysos.System.DiscreteTimeRandomSimulationType
DiscreteTimeRandomSimulation <: DiscreteTimeSystemUnderApproximation

A stochastic underapproximation of a discrete-time system using random sampling.

Propagates multiple randomly sampled points from the input set to provide a discrete underapproximation of reachable states.

Fields

  • system: The underlying discrete-time control system.
  • nsamples: Number of samples to draw from the input set.

Underapproximation Map

Returns a function of the form: f(rect::HyperRectangle, u::SVector) -> Vector{SVector} which returns a list of propagated samples.

source
Dionysos.System.ContinuousTimeRandomSimulationType
ContinuousTimeRandomSimulation <: ContinuousTimeSystemUnderApproximation

A stochastic underapproximation for continuous-time systems using random point sampling.

Simulates multiple samples from the input set, over a fixed time step.

Fields

  • system: The underlying continuous-time control system.
  • nsamples: Number of random samples.

Underapproximation Map

Returns a function of the form: f(rect::HyperRectangle, u::SVector, tstep::Real) -> Vector{SVector} which returns a list of propagated samples.

Notes

Use discretize to convert this approximation into a discrete-time approximation suitable for use in fixed-step abstraction pipelines.

source
Dionysos.System.DiscreteTimeOverApproximationMapType
DiscreteTimeOverApproximationMap <: DiscreteTimeSystemOverApproximation

Concrete implementation of a discrete-time overapproximation of a dynamical system.

This type wraps a constrained discrete-time system along with an overapproximation map that, given a set of states and a control input, returns a conservative reachable set.

Fields

  • system: The underlying ConstrainedBlackBoxControlDiscreteSystem from MathematicalSystems.jl.
  • over_approximation_map: A function of the form f(rect::HyperRectangle, u::SVector) -> HyperRectangle which returns an overapproximated successor set.
source
Dionysos.System.ContinuousTimeSystemOverApproximationMapType
ContinuousTimeSystemOverApproximationMap <: ContinuousTimeSystemOverApproximation

Concrete implementation of a continuous-time overapproximation of a control system.

This type stores a constrained continuous-time system and an overapproximation function that simulates or bounds the system’s behavior over a given time step.

Fields

  • system: The underlying ConstrainedBlackBoxControlContinuousSystem from MathematicalSystems.jl.
  • over_approximation_map: A function of the form f(rect::HyperRectangle, u::SVector, tstep::Real) -> HyperRectangle which returns an overapproximated reachable set over the given time interval.

Notes

Use discretize to convert this approximation into a discrete-time overapproximation suitable for use in fixed-step abstraction pipelines.

source
Dionysos.System.DiscreteTimeGrowthBoundType
DiscreteTimeGrowthBound <: DiscreteTimeSystemOverApproximation

A discrete-time overapproximation based on growth bounds.

Given a system and a growthbound_map, this approximation inflates the center trajectory by a radius that depends on the current state set's size and the input.

Fields

  • system: A ConstrainedBlackBoxControlDiscreteSystem from MathematicalSystems.jl.
  • growthbound_map: A function f(radius::SVector, u::SVector) -> SVector that computes how uncertainty in state evolves under the system.

Overapproximation Map

Returns a function of the form: f(rect::HyperRectangle, u::SVector) -> HyperRectangle This function simulates the image of the center and inflates it using the computed growth bound.

source
Dionysos.System.ContinuousTimeGrowthBoundType
ContinuousTimeGrowthBound <: ContinuousTimeSystemOverApproximation

A continuous-time overapproximation based on growth bounds for reachable set propagation.

It estimates how uncertainty evolves through time using a growthbound_map which depends on the radius, input, and time step.

Fields

  • system: A ConstrainedBlackBoxControlContinuousSystem from MathematicalSystems.jl.
  • growthbound_map: A function f(radius::SVector, u::SVector, tstep::Real) -> SVector that estimates how uncertainty grows over a time step.

Overapproximation Map

Returns a function of the form: f(rect::HyperRectangle, u::SVector, tstep::Real) -> HyperRectangle This function simulates the image of the center and inflates it using the computed growth bound.

source
Dionysos.System.DiscreteTimeLinearizedType
DiscreteTimeLinearized <: DiscreteTimeSystemOverApproximation

A discrete-time overapproximation based on linearization of the system dynamics.

This model approximates system behavior by propagating the linearized dynamics around the center of the state set and bounding the resulting error.

Fields

  • system: A ConstrainedBlackBoxControlDiscreteSystem from MathematicalSystems.jl.
  • linsys_map: A function (x, dx, u) -> (Fx, DFx) returning the linearized next state Fx and its Jacobian DFx around perturbation dx.
  • error_map: A function (radius, u) -> Δ returning a bound on the linearization error based on the set radius.

Overapproximation Map

Returns a function of the form: f(rect::HyperRectangle, u::SVector) -> HyperRectangle It evaluates the system at the center, adds linearized spread based on Jacobian, and inflates with the error bound.

source
Dionysos.System.ContinuousTimeLinearizedType
ContinuousTimeLinearized <: ContinuousTimeSystemOverApproximation

A continuous-time overapproximation based on Runge-Kutta linearization of the system dynamics.

The method propagates both the nominal trajectory and its linearized sensitivity over a time step using a 4th-order Runge-Kutta scheme, while bounding the second-order remainder error.

Fields

  • system: A ConstrainedBlackBoxControlContinuousSystem from MathematicalSystems.jl.
  • linsys_map: A function (x, dx, u, tstep) -> (Fx, DFx) simulating a linearized trajectory and its Jacobian.
  • error_map: A function (r, u, tstep) -> Δ computing a bound on the nonlinearity-induced error over time.

Overapproximation Map

Returns a function of the form: f(rect::HyperRectangle, u::SVector, tstep::Real) -> HyperRectangle The result is a conservative reachable set from the center using linearization + second-order error correction.

source

Controller

So far, the abstraction-based methods that we use define either piecewise-constant or piecewise-affine controllers.

Trajectories

Dionysos.System.ContinuousTrajectoryType
ContinuousTrajectory{T, XVT<:AbstractVector{T}, UVT<:AbstractVector{T}}

x is a sequence of points in the state space and u is a sequence of points in the input space.

source
Dionysos.System.HybridTrajectoryType
HybridTrajectory{T, TT, XVT <: AbstractVector{T}, UVT <: AbstractVector{T}}

discrete is the discrete trajectory of type DiscreteTrajectory and continuous is a the continuous trajectory of type ContinuousTrajectory.

source