sig
  type ntl_spl_il_label = string
  type point = Nts_spl_intermediate_language_types.ntl_spl_il_label
  type ntl_spl_il_instruction =
      NS_Skip
    | NS_Halt
    | NS_Fail
    | NS_Assume
    | NS_If of Nts_types.nts_gen_relation *
        Nts_spl_intermediate_language_types.ntl_spl_il_label *
        Nts_spl_intermediate_language_types.ntl_spl_il_label option
    | NS_Goto of Nts_spl_intermediate_language_types.ntl_spl_il_label
    | NS_Call of Nts_types.nts_var list option * string *
        Nts_types.nts_genrel_arithm_exp list
    | NS_local of bool * Nts_types.nts_var list *
        Nts_spl_intermediate_language_types.ntl_spl_block
  and ntl_spl_il_instr = {
    ns_insturction :
      Nts_spl_intermediate_language_types.ntl_spl_il_instruction option;
    ns_ipoint : Nts_spl_intermediate_language_types.point;
  }
  and ntl_spl_block = {
    ns_bpoint : Nts_spl_intermediate_language_types.point;
    ns_instrs : Nts_spl_intermediate_language_types.ntl_spl_il_instr list;
  }
  type nts_spl_il_procedure = {
    ns_pname : string;
    ns_pinput : Nts_types.nts_var list;
    ns_poutput : Nts_types.nts_var list;
    ns_pcode : Nts_spl_intermediate_language_types.ntl_spl_block;
  }
  type nts_spl_il_program = {
    ns_global : Nts_types.nts_var list;
    ns_initial : Nts_types.nts_genrel_arithm_exp;
    ns_final : Nts_types.nts_genrel_arithm_exp;
    ns_procedures :
      (string * Nts_spl_intermediate_language_types.nts_spl_il_procedure)
      list;
    ns_threads : string list;
  }
end