(MP pr pr')    = let (asms,c) = sequent pr' in
  case sequent pr of
    (asms', p :=>: q) | p == c    -> (nub $ sort $ asms ++ asms', q)
                      | otherwise -> error ("MP: " ++ show [p :=>: q, c])
    (_, imp) -> error ("MP: " ++ show [imp, c])

-- | concl (Γ ⊢ P) yields P
concl :: (
sequent (MP pr pr')    = let (asms,c) = sequent pr' in
  case sequent pr of
    (asms', p :=>: q) | p == c    -> (nub $ sort $ asms ++ asms', q)
                      | otherwise -> error ("MP: " ++ show [p :=>: q, c])
    (_, imp) -> error ("MP: " ++ show [imp, c])

-- | concl (Γ ⊢ P) yields P
sequent (MP pr pr')    = let (asms,c) = sequent pr' in
  case sequent pr of
    (asms', p :=>: q) | p == c    -> (nub $ sort $ asms ++ asms', q)
                      | otherwise -> error ("MP: " ++ show [p :=>: q, c])
    (_, imp) -> error ("MP: " ++ show [imp, c])

-- | concl (Γ ⊢ P) yields P