module Wingman.Auto where
import Control.Monad.Reader.Class (asks)
import Control.Monad.State (gets)
import qualified Data.Set as S
import Refinery.Tactic
import Wingman.Context
import Wingman.Judgements
import Wingman.KnownStrategies
import Wingman.Machinery (tracing)
import Wingman.Tactics
import Wingman.Types
------------------------------------------------------------------------------
-- | Automatically solve a goal.
auto :: TacticsM ()
auto = do
jdg <- goal
skolems <- gets ts_skolems
gas <- asks $ cfg_auto_gas . ctxConfig
current <- getCurrentDefinitions
traceMX "goal" jdg
traceMX "ctx" current
traceMX "skolems" skolems
commit knownStrategies
. tracing "auto"
. localTactic (auto' gas)
. disallowing RecursiveCall
. S.fromList
$ fmap fst current