Advertisement
Guest User

Untitled

a guest
Nov 18th, 2019
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import Type.Proposition
  2. import Data.List
  3.  
  4. derive :: Bool -> Sequent -> Derivation
  5. derive mode s@(Sequent sx xd)
  6. derive :: Sequent -> Derivation
  7. derive s@(Sequent sx xd)
  8.     | TTrue `elem` xd    = Axiom s "ax-tt"
  9.     | FFalse `elem` sx   = Axiom s "ax-⊥"
  10.     | compareList sx xd  = Axiom s "ax-id"
  11.     | not $ allAtomTTrueFFalseOrNull sx = case sh of
  12.         Not a      -> NormalDerivation s [derive mode (Sequent (tail sx) (a:xd))]                                       (if mode then "$ \neg -S$"       else "¬-S")
  13.         And a b    -> NormalDerivation s [derive mode (Sequent (a:b:tail sx) xd)]                                       (if mode then "$ and -S$"         else "&-S")
  14.         Or a b     -> NormalDerivation s [derive mode (Sequent (a:tail sx) xd), derive mode (Sequent (b:tail sx) xd)]   "∨-S"
  15.         Imply a b  -> NormalDerivation s [derive mode (Sequent (tail sx) (a:xd)), derive mode (Sequent (b:tail sx) xd)] (if mode then "$ \rightarrow -S$" else "→-S")
  16.         a@(Atom _) -> NormalDerivation s [derive mode (Sequent (tail sx ++ [a]) xd)]                                    "sc-S"
  17.         Not a      -> NormalDerivation s [derive (Sequent (tail sx) (a:xd))]                                  $ Action LLeft Negate
  18.         And a b    -> NormalDerivation s [derive (Sequent (a:b:tail sx) xd)]                                  $ Action LLeft Anded
  19.         Or a b     -> NormalDerivation s [derive (Sequent (a:tail sx) xd), derive (Sequent (b:tail sx) xd)]   $ Action LLeft Ored
  20.         Imply a b  -> NormalDerivation s [derive (Sequent (tail sx) (a:xd)), derive (Sequent (b:tail sx) xd)] $ Action LLeft Implied
  21.         a@(Atom _) -> NormalDerivation s [derive (Sequent (tail sx ++ [a]) xd)]                               $ Action LLeft Swap
  22.     | not $ allAtomTTrueFFalseOrNull xd = case dh of
  23.         Not a      -> NormalDerivation s [derive mode (Sequent (a:sx) (tail xd))]                                       (if mode then "$ \neg -D$"       else "¬-D")
  24.         And a b    -> NormalDerivation s [derive mode (Sequent sx (a:tail xd)), derive mode (Sequent sx (b:tail xd))]   (if mode then "$ and -D$"         else "&-D")
  25.         Or a b     -> NormalDerivation s [derive mode (Sequent sx (a:b:tail xd))]                                       "∨-D"
  26.         Imply a b  -> NormalDerivation s [derive mode (Sequent (a:sx) (b:tail xd))]                                     (if mode then "$ \rightarrow -D$" else "→-D")
  27.         a@(Atom _) -> NormalDerivation s [derive mode (Sequent sx (tail xd ++ [a]))]                                    "sc-D"
  28.         Not a      -> NormalDerivation s [derive (Sequent (a:sx) (tail xd))]                                  $ Action RRight Negate
  29.         And a b    -> NormalDerivation s [derive (Sequent sx (a:tail xd)), derive (Sequent sx (b:tail xd))]   $ Action RRight Anded
  30.         Or a b     -> NormalDerivation s [derive (Sequent sx (a:b:tail xd))]                                  $ Action RRight Ored
  31.         Imply a b  -> NormalDerivation s [derive (Sequent (a:sx) (b:tail xd))]                                $ Action RRight Implied
  32.         a@(Atom _) -> NormalDerivation s [derive (Sequent sx (tail xd ++ [a]))]                               $ Action RRight Swap
  33.     | otherwise = NotDerivable s
  34.     where
  35.       sh = head sx
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement