anchor.diff:  /// Debug config output
   val format: T -> string
   
  -/// Generate the BGP match/action rules that are guaranteed to 
  -/// implement the user policy under all possible failure scenarios for a given prefix. 
  -/// This function returns either an intermediate representation (IR) 
  -/// for BGP policies, or a counterexample indicating why compilation will not work.
  -val compileToIR: string -> int -> Predicate.T -> Map<string, DeviceAggregates> -> Regex.REBuilder -> Regex.T list -> CompileResult
  -
  -/// Compile to an intermediate representation for a given prefix. 
  -/// Gives a counterexample and quits the program if compilation is not possible.
  -val compileForSinglePrefix: string -> int -> Map<string, DeviceAggregates> -> Ast.PolicyPair -> PrefixResult
  -
   type Stats = 
       {NumPrefixes: int;
        SizeRaw: int;
  
positive.code:     {Originates: bool;
       Filters: Filter list}
  
  type PredConfig = Predicate.T * Map<string, DeviceConfig>
  
  type AggregationSafetyResult = (int * string * string * Prefix.T * Prefix.T) option
  
  type PrefixResult =
      {K: AggregationSafetyResult;
       BuildTime: int64;
       MinimizeTime: int64;
       OrderingTime: int64;
       ConfigTime: int64;
       CompressSizeInit: int;
       CompressSizeFinal: int;
       Config: PredConfig}
  
  type CompileResult = Result<PrefixResult, CounterExample>
  
  /// Result from compiling the entire policy
  
  
negative.code: ﻿module IR
  
  
  type Match = 
      | Peer of string 
  