haskhol-core-1.1.0: src/HaskHOL/Core.hs
{-# LANGUAGE FlexibleContexts #-}
{-|
Module: HaskHOL.Core
Copyright: (c) The University of Kansas 2013
LICENSE: BSD3
Maintainer: ecaustin@ittc.ku.edu
Stability: unstable
Portability: unknown
This module is the one to import for users looking to include the entirety of
the core of the HaskHOL proof system. It re-exports all of the core
sub-modules in addition to a number of overloaded functions that work with
'HOLTermRep' and 'HOLTypeRep' representations for convenience reasons.
-}
module HaskHOL.Core
( -- * 'HOLTermRep' and 'HOLTypeRep' Overloads
newConstant
, newAxiom
, newBasicDefinition
, makeOverloadable
, reduceInterface
, overrideInterface
, overloadInterface
, prioritizeOverload
, newTypeAbbrev
-- * Library and Utility Functions
, module HaskHOL.Core.Lib
-- * Logical Kernel
, module HaskHOL.Core.Kernel
-- * Stateful Primitives
, module HaskHOL.Core.State
-- * Basic Derived Type and Term Functions
, module HaskHOL.Core.Basics
-- * HaskHOL Parsers
, module HaskHOL.Core.Parser
-- * HaskHOL Pretty Printers
, module HaskHOL.Core.Printer
-- * HaskHOL Core Extensions
, module HaskHOL.Core.Ext
, Constraint -- | A re-export of 'Constraint' from @GHC.Prim@.
) where
import HaskHOL.Core.Lib
import HaskHOL.Core.Kernel hiding (axiomThm, newDefinedConst, newDefinedTypeOp)
import HaskHOL.Core.State hiding ( newConstant, newAxiom, newBasicDefinition )
import HaskHOL.Core.Basics
import HaskHOL.Core.Parser hiding ( makeOverloadable, reduceInterface
, overrideInterface, overloadInterface
, prioritizeOverload, newTypeAbbrev )
import HaskHOL.Core.Printer
import HaskHOL.Core.Ext
import qualified HaskHOL.Core.State as S ( newConstant, newAxiom
, newBasicDefinition )
import qualified HaskHOL.Core.Parser as P ( makeOverloadable, reduceInterface
, overrideInterface, overloadInterface
, prioritizeOverload, newTypeAbbrev )
-- This re-export has to exist at the top-most module for some reason?
import GHC.Prim (Constraint)
-- from state
{-|
A redefinition of 'S.newConstant' to overload it for all valid term
representations as defined by 'HOLTermRep'.
-}
newConstant :: HOLTypeRep ty Theory thry => Text -> ty -> HOL Theory thry ()
newConstant s = S.newConstant s <=< toHTy
{-|
A redefinition of 'S.newAxiom' to overload it for all valid term
representations as defined by 'HOLTermRep'.
-}
newAxiom :: HOLTermRep tm Theory thry => Text -> tm -> HOL Theory thry HOLThm
newAxiom s = S.newAxiom s <=< toHTm
{-|
A redefinition of 'S.newBasicDefinition' to overload it for all valid term
representations as defined by 'HOLTermRep'.
-}
newBasicDefinition :: HOLTermRep tm Theory thry => Text -> tm
-> HOL Theory thry HOLThm
newBasicDefinition lbl = S.newBasicDefinition lbl <=< toHTm
-- from parser
{-|
A redefinition of 'P.makeOverloadable' to overload it for all valid type
representations as defined by 'HOLTypeRep'.
-}
makeOverloadable :: HOLTypeRep ty Theory thry => Text -> ty
-> HOL Theory thry ()
makeOverloadable s = P.makeOverloadable s <=< toHTy
{-|
A redefinition of 'P.reduceInterface' to overload it for all valid term
representations as defined by 'HOLTermRep'.
-}
reduceInterface :: HOLTermRep tm Theory thry => Text -> tm
-> HOL Theory thry ()
reduceInterface s = P.reduceInterface s <=< toHTm
{-|
A redefinition of 'P.overrideInterface' to overload it for all valid term
representations as defined by 'HOLTermRep'.
-}
overrideInterface :: HOLTermRep tm Theory thry => Text -> tm
-> HOL Theory thry ()
overrideInterface s = P.overrideInterface s <=< toHTm
{-|
A redefinition of 'P.overloadInterface' to overload it for all valid term
representations as defined by 'HOLTermRep'.
-}
overloadInterface :: HOLTermRep tm Theory thry => Text -> tm
-> HOL Theory thry ()
overloadInterface s = P.overloadInterface s <=< toHTm
{-|
A redefinition of 'P.prioritizeOverload' to overload it for all valid type
representations as defined by 'HOLTypeRep'.
-}
prioritizeOverload :: HOLTypeRep ty Theory thry => ty -> HOL Theory thry ()
prioritizeOverload = P.prioritizeOverload <=< toHTy
{-|
A redefinition of 'P.newTypeAbbrev' to overload it for all valid type
representations as defined by 'HOLTypeRep'.
-}
newTypeAbbrev :: HOLTypeRep ty Theory thry => Text -> ty -> HOL Theory thry ()
newTypeAbbrev s = P.newTypeAbbrev s <=< toHTy