Skip to content

lyapunov_stability() does not verify P positive definite or Q positive semidefinite #2

@mzargham

Description

@mzargham

Summary

lyapunov_stability() in symproof/library/control.py (lines 175–237) only verifies the Lyapunov equation residual but does not check the definiteness conditions its docstring requires.

Problem

The docstring (line 198) states the theorem requires P positive definite and Q positive semidefinite. The implementation only verifies that every entry of A^T P + P A + Q equals zero. It does not verify:

  • P ≻ 0 (positive definite)
  • Q ⪰ 0 (positive semidefinite)

Without these checks, the sealed bundle certifies that a matrix equation holds but not the stability conclusion the docstring claims.

lyapunov_from_system() (lines 500–612) partially addresses this by checking P positive definite via Sylvester's criterion (lines 593–609), which is correct there since it uses Q.positive (strict). However, it still does not verify Q ⪰ 0.

Suggested fix

  • Add leading principal minor checks for P ≻ 0 (Sylvester, strict positivity) to lyapunov_stability()
  • Add principal minor checks for Q ⪰ 0 to both functions (or document the omission as an explicit limitation)

Files

  • symproof/library/control.py:175-237lyapunov_stability()
  • symproof/library/control.py:500-612lyapunov_from_system()

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions