anchor.diff:              maxOpt (getIntIntermediate v x) (getIntIntermediate v y)
           | BEq (x, y) ->
               maxOpt (getIntermediate v x) (getIntermediate v y)
  +        // TODO(CaptainHayashi): need to convince myself this is correct.
  +        | BIdx (_, _, arr, idx) ->
  +            maxOpt (getArrayIntermediate v arr) (getIntIntermediate v idx)
           | _ -> None
   
       /// Gets the highest intermediate number for some variable in a given
  
positive.code:             Seq.fold maxOpt None <| (Seq.map (getIntIntermediate v) <| xs)
          | IDiv (x, y) | IMod (x, y) ->
              maxOpt (getIntIntermediate v x) (getIntIntermediate v y)
          // Is this correct?
          | IIdx (_, _, arr, idx) ->
              maxOpt (getArrayIntermediate v arr) (getIntIntermediate v idx)
          | _ -> None
  
negative.code:         | AVar (Reg (Intermediate (n, name))) when name = v -> Some n
          | AVar (Sym { Params = xs } ) ->
              Seq.fold maxOpt None <| (Seq.map (getIntermediate v) <| xs)
          // TODO(CaptainHayashi): need to convince myself this is correct.
          | AIdx (_, _, arr, idx) ->
              maxOpt (getArrayIntermediate v arr) (getIntIntermediate v idx)
          | AVar _ -> None
  