Constrained Horn clauses

From Wikipedia, the free encyclopedia
Jump to navigation Jump to search

Constrained Horn clauses (CHCs) model a fragment of first-order logic with applications to program verification and synthesis. They are named after the general Horn clause, which in turn is named after logician Alfred Horn. Constrained Horn clauses, specifically, can be seen as a form of constraint logic programming.[1]

Definition

[edit | edit source]

A constrained Horn clause is a formula of the form

ϕP1(𝐱1)Pn(𝐱𝐧)P(𝐱)

where ϕ is a constraint in some first-order theory, Pi are predicates, and 𝐱i are universally-quantified variables. The addition of constraint makes it a generalization of the plain Horn clause.

Decidability

[edit | edit source]

The satisfiability of constrained Horn clauses with constraints from linear integer arithmetic is undecidable.[2]

Solvers

[edit | edit source]

There are several automated solvers for CHCs,[3] including the SPACER engine of Z3.[4]

CHC-COMP is an annual competition of CHC solvers.[5] CHC-COMP has run every year since 2018.

Applications

[edit | edit source]

Constrained Horn clauses are a convenient language in which to specify problems in program verification.[6] The SeaHorn verifier for LLVM represents verification conditions as constrained Horn clauses,[7] as does the JayHorn verifier for Java.[8]

References

[edit | edit source]
  1. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
  2. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
  3. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
  4. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
  5. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
  6. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
  7. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
  8. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).