autoproof-0.0.0.0: Propositional logic library
Copyright(c) Artem Mavrin 2021
LicenseBSD3
Maintainerartemvmavrin@gmail.com
Stabilityexperimental
PortabilityPOSIX
Safe HaskellSafe
LanguageHaskell2010

AutoProof.Internal.Intuitionistic.Proof.Search

Description

Proof search algorithms.

Synopsis

Proof search for judgements and formulas

prove :: Ord a => Judgement a -> Maybe (Proof a) Source #

Find an intuitionistic proof of a judgement, if a proof exists.

proveTautology :: Ord a => Formula a -> Maybe (Proof a) Source #

Find an intuitionistic proof of a formula, if a proof exists.

Specific proof search algorithms

proveStatman :: Ord a => Judgement a -> Maybe (Proof a) Source #

Find an intuitionistic proof of a judgement, if one exists, using Statman's algorithm.

  • Richard Statman (1979) "Intuitionistic propositional logic is polynomial-space complete." Theoretical Computer Science, Volume 9, Issue 1, pp. 67–72. DOI.

The judgement to be proved is converted to an implicational judgement as described in toImp and proved (if possible) using proveImp. The resulting proof is then converted into a proof of the original judgement.

proveImp :: Ord a => Judgement a -> Maybe (Proof a) Source #

(proveImp (g |- a)) finds an intuitionistic proof of a judgement \(g \vdash a\) in the implicational fragment of propositional logic, if such a proof exists.

The algorithm is adapted from section 2.4 of

  • Samuel Mimram (2020) PROGRAM = PROOF.

Examples

Expand
>>> proveImp $ [Var 'a', Imp (Var 'a') (Var 'b')] |- Var 'b'
Just (ImpElim ([Var 'a',Imp (Var 'a') (Var 'b')] |- Var 'b') (Axiom ([Var 'a',Imp (Var 'a') (Var 'b')] |- Imp (Var 'a') (Var 'b'))) (Axiom ([Var 'a',Imp (Var 'a') (Var 'b')] |- Var 'a')))
>>> proveImp $ [Imp (Var 'a') (Var 'b'), Imp (Var 'b') (Var 'a')] |- Var 'a'
Nothing