anchor.diff:                              let tyDef = ty.GetGenericTypeDefinition ()
                               let tyDefArgs = ty.GetGenericArguments ()
                               let create = mos.compositeType (Helpers.getEssenceOfCompareToType tyRelation) tyDefArgs
  -                            if   tyDef.Equals typedefof<Tuple<_>>               then create typedefof<ComparerTypes.Tuple<int,t>> 
  -                            elif tyDef.Equals typedefof<Tuple<_,_>>             then create typedefof<ComparerTypes.Tuple<int,int,t,t>> 
  -                            elif tyDef.Equals typedefof<Tuple<_,_,_>>           then create typedefof<ComparerTypes.Tuple<int,int,int,t,t,t>> 
  -                            elif tyDef.Equals typedefof<Tuple<_,_,_,_>>         then create typedefof<ComparerTypes.Tuple<int,int,int,int,t,t,t,t>> 
  -                            elif tyDef.Equals typedefof<Tuple<_,_,_,_,_>>       then create typedefof<ComparerTypes.Tuple<int,int,int,int,int,t,t,t,t,t>> 
  -                            elif tyDef.Equals typedefof<Tuple<_,_,_,_,_,_>>     then create typedefof<ComparerTypes.Tuple<int,int,int,int,int,int,t,t,t,t,t,t>> 
  -                            elif tyDef.Equals typedefof<Tuple<_,_,_,_,_,_,_>>   then create typedefof<ComparerTypes.Tuple<int,int,int,int,int,int,int,t,t,t,t,t,t,t>> 
  -                            elif tyDef.Equals typedefof<Tuple<_,_,_,_,_,_,_,_>> then create typedefof<ComparerTypes.Tuple<int,int,int,int,int,int,int,int,t,t,t,t,t,t,t,t>> 
  +                            if   tyDef.Equals typedefof<Tuple<_,_>>       then create typedefof<ComparerTypes.Tuple<int,int,t,t>> 
  +                            elif tyDef.Equals typedefof<Tuple<_,_,_>>     then create typedefof<ComparerTypes.Tuple<int,int,int,t,t,t>> 
  +                            elif tyDef.Equals typedefof<Tuple<_,_,_,_>>   then create typedefof<ComparerTypes.Tuple<int,int,int,int,t,t,t,t>> 
  +                            elif tyDef.Equals typedefof<Tuple<_,_,_,_,_>> then create typedefof<ComparerTypes.Tuple<int,int,int,int,int,t,t,t,t,t>> 
                               else null
                           else null
   
  
positive.code:                                 | _ ->
                                  eliminate_tail_call_int (phantom<'comp5>.Ensorcel (comparer, x.Item5, y.Item5))
  
                  [<Struct; NoComparison; NoEquality>]
                  type Tuple<'a,'b,'c,'d,'e,'f,
                              'comp1,'comp2,'comp3,'comp4,'comp5,'comp6
                                  when 'comp1 :> IEssenceOfCompareTo<'a> and 'comp1 : (new : unit -> 'comp1) and 'comp1 : struct
                                      and 'comp2 :> IEssenceOfCompareTo<'b> and 'comp2 : (new : unit -> 'comp2) and 'comp2 : struct
                                      and 'comp3 :> IEssenceOfCompareTo<'c> and 'comp3 : (new : unit -> 'comp3) and 'comp3 : struct
                                      and 'comp4 :> IEssenceOfCompareTo<'d> and 'comp4 : (new : unit -> 'comp4) and 'comp4 : struct
                                      and 'comp5 :> IEssenceOfCompareTo<'e> and 'comp5 : (new : unit -> 'comp5) and 'comp5 : struct
                                      and 'comp6 :> IEssenceOfCompareTo<'f> and 'comp6 : (new : unit -> 'comp6) and 'comp6 : struct
                                                                                                                                      > =
                      interface IEssenceOfCompareTo<System.Tuple<'a,'b,'c,'d,'e,'f>> with
                          member __.Ensorcel (comparer:IComparer, x:System.Tuple<'a,'b,'c,'d,'e,'f>, y:System.Tuple<'a,'b,'c,'d,'e,'f>) = 
                              match x, y with
                              | null, null -> 0
                              | null, _ -> -1
                              | _, null -> +1
                              | _, _ ->
                                  match phantom<'comp1>.Ensorcel (comparer, x.Item1, y.Item1) with
                                  | x when x <> 0 -> x
                                  | _ ->
                                  match phantom<'comp2>.Ensorcel (comparer, x.Item2, y.Item2) with
                                  | x when x <> 0 -> x
                                  | _ ->
                                  match phantom<'comp3>.Ensorcel (comparer, x.Item3, y.Item3) with
                                  | x when x <> 0 -> x
                                  | _ ->
                                  match phantom<'comp4>.Ensorcel (comparer, x.Item4, y.Item4) with
                                  | x when x <> 0 -> x
                                  | _ ->
                                  match phantom<'comp5>.Ensorcel (comparer, x.Item5, y.Item5) with
                                  | x when x <> 0 -> x
                                  | _ ->
                                  eliminate_tail_call_int (phantom<'comp6>.Ensorcel (comparer, x.Item6, y.Item6))
  
                  [<Struct; NoComparison; NoEquality>]
                  type Tuple<'a,'b,'c,'d,'e,'f,'g,
                              'comp1,'comp2,'comp3,'comp4,'comp5,'comp6,'comp7
                                  when 'comp1 :> IEssenceOfCompareTo<'a> and 'comp1 : (new : unit -> 'comp1) and 'comp1 : struct
                                      and 'comp2 :> IEssenceOfCompareTo<'b> and 'comp2 : (new : unit -> 'comp2) and 'comp2 : struct
                                      and 'comp3 :> IEssenceOfCompareTo<'c> and 'comp3 : (new : unit -> 'comp3) and 'comp3 : struct
                                      and 'comp4 :> IEssenceOfCompareTo<'d> and 'comp4 : (new : unit -> 'comp4) and 'comp4 : struct
                                      and 'comp5 :> IEssenceOfCompareTo<'e> and 'comp5 : (new : unit -> 'comp5) and 'comp5 : struct
                                      and 'comp6 :> IEssenceOfCompareTo<'f> and 'comp6 : (new : unit -> 'comp6) and 'comp6 : struct
                                      and 'comp7 :> IEssenceOfCompareTo<'g> and 'comp7 : (new : unit -> 'comp7) and 'comp7 : struct
                                                                                                                                      > =
                      interface IEssenceOfCompareTo<System.Tuple<'a,'b,'c,'d,'e,'f,'g>> with
                          member __.Ensorcel (comparer:IComparer, x:System.Tuple<'a,'b,'c,'d,'e,'f,'g>, y:System.Tuple<'a,'b,'c,'d,'e,'f,'g>) = 
                              match x, y with
                              | null, null -> 0
                              | null, _ -> -1
                              | _, null -> +1
                              | _, _ ->
                                  match phantom<'comp1>.Ensorcel (comparer, x.Item1, y.Item1) with
                                  | x when x <> 0 -> x
                                  | _ ->
                                  match phantom<'comp2>.Ensorcel (comparer, x.Item2, y.Item2) with
                                  | x when x <> 0 -> x
                                  | _ ->
                                  match phantom<'comp3>.Ensorcel (comparer, x.Item3, y.Item3) with
                                  | x when x <> 0 -> x
                                  | _ ->
                                  match phantom<'comp4>.Ensorcel (comparer, x.Item4, y.Item4) with
                                  | x when x <> 0 -> x
                                  | _ ->
                                  match phantom<'comp5>.Ensorcel (comparer, x.Item5, y.Item5) with
                                  | x when x <> 0 -> x
                                  | _ ->
                                  match phantom<'comp6>.Ensorcel (comparer, x.Item6, y.Item6) with
                                  | x when x <> 0 -> x
                                  | _ ->
                                  eliminate_tail_call_int (phantom<'comp7>.Ensorcel (comparer, x.Item7, y.Item7))
  
                  [<Struct; NoComparison; NoEquality>]
                  type Tuple<'a,'b,'c,'d,'e,'f,'g,'h,
                              'comp1,'comp2,'comp3,'comp4,'comp5,'comp6,'comp7,'comp8
                                  when 'comp1 :> IEssenceOfCompareTo<'a> and 'comp1 : (new : unit -> 'comp1) and 'comp1 : struct
                                      and 'comp2 :> IEssenceOfCompareTo<'b> and 'comp2 : (new : unit -> 'comp2) and 'comp2 : struct
                                      and 'comp3 :> IEssenceOfCompareTo<'c> and 'comp3 : (new : unit -> 'comp3) and 'comp3 : struct
                                      and 'comp4 :> IEssenceOfCompareTo<'d> and 'comp4 : (new : unit -> 'comp4) and 'comp4 : struct
                                      and 'comp5 :> IEssenceOfCompareTo<'e> and 'comp5 : (new : unit -> 'comp5) and 'comp5 : struct
                                      and 'comp6 :> IEssenceOfCompareTo<'f> and 'comp6 : (new : unit -> 'comp6) and 'comp6 : struct
                                      and 'comp7 :> IEssenceOfCompareTo<'g> and 'comp7 : (new : unit -> 'comp7) and 'comp7 : struct
                                      and 'comp8 :> IEssenceOfCompareTo<'h> and 'comp8 : (new : unit -> 'comp8) and 'comp8 : struct
                                                                                                                                      > =
                      interface IEssenceOfCompareTo<System.Tuple<'a,'b,'c,'d,'e,'f,'g,'h>> with
                          member __.Ensorcel (comparer:IComparer, x:System.Tuple<'a,'b,'c,'d,'e,'f,'g,'h>, y:System.Tuple<'a,'b,'c,'d,'e,'f,'g,'h>) = 
                              match x, y with
                              | null, null -> 0
                              | null, _ -> -1
                              | _, null -> +1
                              | _, _ ->
                                  match phantom<'comp1>.Ensorcel (comparer, x.Item1, y.Item1) with
                                  | x when x <> 0 -> x
                                  | _ ->
                                  match phantom<'comp2>.Ensorcel (comparer, x.Item2, y.Item2) with
                                  | x when x <> 0 -> x
                                  | _ ->
                                  match phantom<'comp3>.Ensorcel (comparer, x.Item3, y.Item3) with
                                  | x when x <> 0 -> x
                                  | _ ->
                                  match phantom<'comp4>.Ensorcel (comparer, x.Item4, y.Item4) with
                                  | x when x <> 0 -> x
                                  | _ ->
                                  match phantom<'comp5>.Ensorcel (comparer, x.Item5, y.Item5) with
                                  | x when x <> 0 -> x
                                  | _ ->
                                  match phantom<'comp6>.Ensorcel (comparer, x.Item6, y.Item6) with
                                  | x when x <> 0 -> x
                                  | _ ->
                                  match phantom<'comp7>.Ensorcel (comparer, x.Item7, y.Item7) with
                                  | x when x <> 0 -> x
                                  | _ ->
                                  eliminate_tail_call_int (phantom<'comp8>.Ensorcel (comparer, x.Rest, y.Rest))
  
                  module Nullable =
                      [<Struct; NoComparison; NoEquality>]
                      type StructuralComparable<'a when 'a : struct and 'a : (new : unit ->  'a) and 'a :> ValueType and 'a :> IStructuralComparable> =
  
negative.code:                             let tyDef = ty.GetGenericTypeDefinition ()
                              let tyDefArgs = ty.GetGenericArguments ()
                              let create = mos.compositeType (Helpers.getEssenceOfEqualsType tyRelation) tyDefArgs
                              if   tyDef.Equals typedefof<Tuple<_,_>>       then create typedefof<EqualsTypes.Tuple<int,int,u,u>>
                              elif tyDef.Equals typedefof<Tuple<_,_,_>>     then create typedefof<EqualsTypes.Tuple<int,int,int,u,u,u>>
                              elif tyDef.Equals typedefof<Tuple<_,_,_,_>>   then create typedefof<EqualsTypes.Tuple<int,int,int,int,u,u,u,u>>
                              elif tyDef.Equals typedefof<Tuple<_,_,_,_,_>> then create typedefof<EqualsTypes.Tuple<int,int,int,int,int,u,u,u,u,u>>
                              else null
                          else null
  
  