anchor.diff:  ﻿module IR
   
  -open CGraph
  -open Common.Error
  -
  -type CounterExample = 
  -    | NoPathForRouters of Set<string>
  -    | InconsistentPrefs of CgState * CgState
  -    | UncontrollableEnter of string
  -    | UncontrollablePeerPreference of string
   
   type Match = 
       | Peer of string 
  
positive.code: /// 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;
  
negative.code:     {Originates: bool;
       Filters: Filter list}
  
  type AggregationSafetyResult = (int * string * string * Prefix.T * Prefix.T) option
  
  
  /// Result from compiling the entire policy
  
  