m4lvin / modal-tableau-interpolation

Modal Tableau with Interpolation in Haskell
https://w4eg.de/malvin/illc/tapdleau
GNU General Public License v3.0
2 stars 0 forks source link
formal-verification haskell logic tableau

Modal Tableau with Interpolation

Goal: a tableau prover for propositional logic, the basic modal logic K and propositional dynamic logic (PDL). The prover should also find interpolants, following the method described by Manfred Borzechowski in 1988. See https://malv.in/2020/borzechowski-pdl/ for the original German text and an English translation.

Notes and Examples

Propositional Logic

There are two different provers: one based on lists. and a proper tableau.

Interpolation is also implemented twice: once replacing atoms by constants as described in Wikipedia: Craig interpolation, and using the tableaux.

Basic modal logic K

stack ghci src/Logic/BasicModal/Prove/Tree.hs
λ> provable (Box (p --> q) --> (Box p --> Box q))
True
λ> provable (p --> Box p)
False

stack ghci src/Logic/BasicModal/Interpolation/ProofTree.hs
λ> let (f,g) = ( Box ((At 'p') --> (At 'q')) , (Neg (Box ((At 's') --> (At 'q')))) --> (Neg (Box (At 'p'))) )
λ> mapM_ (putStrLn .ppForm) [f, g]
☐¬(p & ¬q)
¬(¬☐¬(s & ¬q) & ¬¬☐p)
λ> interpolateShow (f,g)
Showing tableau with GraphViz ...
Interpolant: ☐¬(¬¬p & ¬¬¬q)
Simplified interpolant: ☐¬(p & ¬q)

The last command will also show this tableau:

See the test file for more examples, including interpolation and consistency checks.

PDL

Public web interface: https://w4eg.de/malvin/illc/tapdleau/

To run the web interface locally do stack build and then stack exec tapdleau. For developing you can recompile and restart the web interface on any code changes Like this:

stack build --file-watch --exec "bash -c \"pkill tapdleau; stack exec tapdleau &\""

Automated Tests

Use stack test to run all tests from the test folder.

For PDL we also use the files formulae_exp_unsat.txt and formulae_exp_sat.txt from http://users.cecs.anu.edu.au/~rpg/PDLComparisonBenchmarks/. Note: The files have been modified to use star as a postfix operator.

TODO list

PDL

Prover:

Interpolation:

Bonus Information:

These are not needed to define interpolants, but part of the proof the definition is correct.

Testing:

Semantics:

Nice to have:

See also

Related work