haskhol-core-1.0.0: src/HaskHOL/Core.hs
{-|
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 -- :: HOLTypeRep ty thry =>
-- String -> ty -> HOL Theory thry ()
, newAxiom -- :: HOLTermRep tm thry =>
-- String -> tm -> HOL Theory thry HOLThm
, newBasicDefinition -- :: HOLTermRep tm thry =>
-- tm -> HOL Theory thry HOLThm
, makeOverloadable -- :: HOLTypeRep ty thry =>
-- String -> ty -> HOL Theory thry ()
, reduceInterface -- :: HOLTermRep tm thry =>
-- String -> tm -> HOL Theory thry ()
, overrideInterface -- :: HOLTermRep tm thry =>
-- String -> tm -> HOL Theory thry ()
, overloadInterface -- :: HOLTermRep tm thry =>
-- String -> tm -> HOL Theory thry ()
, prioritizeOverload -- :: HOLTypeRep ty thry => ty -> HOL Theory thry ()
, newTypeAbbrev -- :: HOLTypeRep ty thry =>
-- String -> ty -> HOL Theory thry ()
-- * 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
) where
import HaskHOL.Core.Lib
import HaskHOL.Core.Kernel
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 )
-- from state
{-|
A redefinition of 'S.newConstant' to overload it for all valid term
representations as defined by 'HOLTermRep'.
-}
newConstant :: HOLTypeRep ty thry => String -> 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 thry => String -> 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 thry => tm -> HOL Theory thry HOLThm
newBasicDefinition = S.newBasicDefinition <=< toHTm
-- from parser
{-|
A redefinition of 'P.makeOverloadable' to overload it for all valid type
representations as defined by 'HOLTypeRep'.
-}
makeOverloadable :: HOLTypeRep ty thry => String -> 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 thry => String -> 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 thry =>
String -> 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 thry => String -> 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 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 thry => String -> ty -> HOL Theory thry ()
newTypeAbbrev s = P.newTypeAbbrev s <=< toHTy