packages feed

liquid-fixpoint-0.1.0.0: external/fixpoint/fixConfig.mli

(* This module deals with top-level parsing of fq files and such *)

(*
exception UnmappedKvar of Ast.Symbol.t
*)
type solbind = Ast.Symbol.t * ((Ast.Symbol.t * (Ast.expr list)) list)
type deft = Srt of Ast.Sort.t 
          | Axm of Ast.pred 
          | Cst of FixConstraint.t
          | Wfc of FixConstraint.wf
          | Con of Ast.Symbol.t * Ast.Sort.t
          | Sol of solbind
          | Qul of Qualifier.t
          | Dep of FixConstraint.dep
          | Kut of Ast.Symbol.t
          | IBind of int * Ast.Symbol.t * FixConstraint.reft  

type 'bind cfg = { 
   a     : int                               (* Tag arity                            *)
 ; ts    : Ast.Sort.t list                   (* New sorts, now = []                  *)
 ; ps    : Ast.pred list                     (* New axioms, now = []                 *)
 ; cs    : FixConstraint.t list              (* Implication Constraints              *)
 ; ws    : FixConstraint.wf list             (* Well-formedness Constraints          *)
 ; ds    : FixConstraint.dep list            (* Constraint Dependencies              *)
 ; qs    : Qualifier.t list                  (* Qualifiers                           *)
 ; kuts  : Ast.Symbol.t list                 (* "Cut"-Kvars, which break cycles      *)
 ; bm    : 'bind Ast.Symbol.SMap.t           (* Initial Sol Bindings                 *)
 ; uops  : Ast.Sort.t Ast.Symbol.SMap.t      (* Globals: measures + distinct consts) *)
 ; cons  : Ast.Symbol.t list                 (* Distinct Constants, defined in uops  *)
 ; assm  : FixConstraint.soln                (* Seed Solution -- must be a fixpoint over constraints *)
}




module type SIMPLIFIER = sig
  val simplify_ts: FixConstraint.t list -> FixConstraint.t list
end

val empty     : 'a cfg 
val create    : deft list -> (Qualifier.t list) cfg
val print     : Format.formatter -> 'a cfg -> unit
val create_raw:  Ast.Sort.t list 
              -> Ast.Sort.t Ast.Symbol.SMap.t 
              -> Ast.pred list 
              -> int 
              -> FixConstraint.dep list 
              -> FixConstraint.t list 
              -> FixConstraint.wf list 
              -> Qualifier.t list
              -> Ast.Symbol.t list
              -> FixConstraint.soln 
              -> 'a cfg