0 | module Core.Termination.References
2 | import Core.Context.Log
4 | import Libraries.Data.NameMap
8 | totRefs : {auto c : Ref Ctxt Defs} ->
9 | Defs -> List Name -> Core Terminating
10 | totRefs defs [] = pure IsTerminating
11 | totRefs defs (n :: ns)
12 | = do rest <- totRefs defs ns
13 | Just d <- lookupCtxtExact n (gamma defs)
14 | | Nothing => pure rest
15 | case isTerminating (totality d) of
16 | IsTerminating => pure rest
18 | logC "totality" 20 $
do pure $
"Totality unchecked for " ++ show !(toFullNames n)
21 | NotTerminating (BadCall ns)
22 | => toFullNames $
NotTerminating (BadCall (n :: ns))
23 | _ => toFullNames $
NotTerminating (BadCall [n])
26 | totRefsIn : {auto c : Ref Ctxt Defs} ->
27 | Defs -> Term vars -> Core Terminating
28 | totRefsIn defs ty = totRefs defs (keys (getRefs (Resolved (-
1)) ty))