anchor.diff:  
   type [<StructuralEquality; NoComparison>] Subquery =
       | Eq of Term
  -    | Gt of Number
  -    | Ge of Number
  -    | Lt of Number
  -    | Le of Number
  +    | Gt of Term
  +    | Ge of Term
  +    | Lt of Term
  +    | Le of Term
       | Not of Subquery
       | And of Subquery list
       | Or of Subquery list
  
positive.code: // TODO: 3D: remove any incidental allocation.
  // TODO: 3D: make sure to use proper collection comparer for string keys.
  
  type [<StructuralEquality; NoComparison>] Number =
      | Z of int
      | R of single
  
  type [<StructuralEquality; NoComparison>] Term =
      | Tag of string
      | Entity of uint64
      | Number of Number
      | Terms of Term list
      static member equals (this : Term) (that : Term) = this.Equals that
      static member equalsMany (lefts : Dictionary<string, Term>) (rights : Dictionary<string, Term>) =
  
negative.code:         match (term, term2) with
          | (Tag tag, Tag tag2) -> strEq tag tag2
          | (Entity entityId, Entity entityId2) -> entityId = entityId2
          | (Z i, Z i2) -> i = i2
          | (R i, R i2) -> i = i2
          | (Terms terms, Terms terms2) ->
              if terms.Length = terms2.Length
              then List.forall2 Subquery.equalTo terms terms2
  