CurryInfo: contract-prover-4.0.0 / Curry2SMT.funcs2SMT

definition:
 
funcs2SMT :: Options -> IORef VState -> [QName]
          -> IO (Command, [TAFuncDecl], [(QName,Bool)])
funcs2SMT opts vstref qns = do
  funs <- getAllFunctions vstref (nub qns)
  unless (null funs) $ printWhenAll opts $ unlines $
    "Operations to be axiomatized in SMT:" :
    map (showCurryFuncDecl snd snd . unAnnFuncDecl) funs
  let ndinfo = nondetOfFuncDecls funs
      choicePlan = (TCons (pre "Choice") [],
                    pre "choose", pre "lchoice", pre "rchoice")
      tfuns  = map (addChoiceFuncDecl ndinfo choicePlan) funs
  unless (null ndinfo) $ printWhenAll opts $
    "Non-determinism status of these operations:\n" ++
    unlines ((map showND) ndinfo)
  unless (null tfuns) $ printWhenAll opts $ unlines $
    "Transformed operations to be axiomatized in SMT:" :
    map (showCurryFuncDecl snd snd . unAnnFuncDecl) tfuns
  return (DefineSigsRec (map fun2SMT tfuns), tfuns, ndinfo)
 where
  showND ((_,n),nd) = n ++ ": " ++ if nd then "NONDET" else "DET"
demand:
 no demanded arguments
deterministic:
 deterministic operation
documentation:
 
Translates a list of operations specified by their qualified name
(together with all operations on which these operation depend on)
into an SMT string that axiomatizes their semantics.
Non-deterministic operations are axiomatized by the "planned choice"
translation (see module `FlatCurry.Typed.NonDet2Det`).
In order to call them correctly, a list of qualified operation names
together with their non-determinism status (`True` means non-deterministic)
is also returned.
failfree:
 <FAILING>
indeterministic:
 referentially transparent operation
infix:
 no fixity defined
iotype:
 {(_,_,_) |-> _}
name:
 funcs2SMT
precedence:
 no precedence defined
result-values:
 _
signature:
 ToolOptions.Options -> Data.IORef.IORef VerifierState.VState
-> [(String, String)]
-> Prelude.IO (ESMT.Command, [FlatCurry.Annotated.Types.AFuncDecl FlatCurry.Types.TypeExpr], [((String, String), Prelude.Bool)])
solution-complete:
 operation might suspend on free variables
terminating:
 possibly non-terminating
totally-defined:
 possibly non-reducible on same data term