copilot-theorem-3.2.1: src/Copilot/Theorem/Tactics.hs
{-# LANGUAGE Safe #-}
-- | Utility functions to help write proof tactics.
module Copilot.Theorem.Tactics
( instantiate, assume, admit
) where
import Copilot.Theorem.Prove
import Control.Monad.Writer
-- | Instantiate a universal proof into an existential proof.
instantiate :: Proof Universal -> Proof Existential
instantiate (Proof p) = Proof p
-- | Assume that a property, given by reference, holds.
assume :: PropRef Universal -> Proof a
assume (PropRef p) = Proof $ tell [Assume p]
-- | Assume that the current goal holds.
admit :: Proof a
admit = Proof $ tell [Admit]