anchor.diff:                                  Specializations.FlaconOfEquals<'a, 'eq1>.Instance.Ensorcel (ec, x.Item1, y.Item1)
   
                   [<Struct; NoComparison; NoEquality>]
  -                type TupleEssenceOfGetHashCode<'a,
  -                                                 'ghc1
  -                                                    when 'ghc1 :> Specializations.IEssenceOfGetHashCode<'a> and 'ghc1 : (new : unit -> 'ghc1)> =
  -                    interface Specializations.IEssenceOfGetHashCode<System.Tuple<'a>> with
  -                        member __.Ensorcel (iec:IEqualityComparer, x:System.Tuple<'a>) =
  -                            let a = Specializations.FlaconOfGetHashCode<'a,'ghc1>.Instance.Ensorcel (iec, x.Item1)
  -                            eliminate_tail_call_int a
  -
  -                [<Struct; NoComparison; NoEquality>]
                   type TupleEssenceOfEquals<'a,'b,
                                                'eq1,'eq2
                                                   when 'eq1 :> Specializations.IEssenceOfEquals<'a> and 'eq1 : (new : unit -> 'eq1)
  
positive.code:                             let e = Specializations.FlaconOfGetHashCode<'e,'ghc5>.Instance.Ensorcel (iec, x.Item5)
                              eliminate_tail_call_int (cth (cth (cth a b) (cth c d)) e)
  
                  type TupleEREqualityComparer<'a,'b,'c,'d,'e,'f>() =
                      member __.Equals (_:IEqualityComparer, x:System.Tuple<'a,'b,'c,'d,'e,'f>, y:System.Tuple<'a,'b,'c,'d,'e,'f>) = 
                          match x, y with
                          | null, null -> true
                          | null, _ | _, null -> false
                          | _, _ ->
                              match GenericEqualityERIntrinsic_inline x.Item1 y.Item1 with
                              | false -> false
                              | _ ->
                              match GenericEqualityERIntrinsic_inline x.Item2 y.Item2 with
                              | false -> false
                              | _ ->
                              match GenericEqualityERIntrinsic_inline x.Item3 y.Item3 with
                              | false -> false
                              | _ ->
                              match GenericEqualityERIntrinsic_inline x.Item4 y.Item4 with
                              | false -> false
                              | _ ->
                              match GenericEqualityERIntrinsic_inline x.Item5 y.Item5 with
                              | false -> false
                              | _ ->
                              GenericEqualityERIntrinsic_inline x.Item6 y.Item6
  
                      member __.GetHashCode (iec:IEqualityComparer, x:System.Tuple<'a,'b,'c,'d,'e,'f>) =
                          let a = GenericHashWithComparerIntrinsic_inline iec x.Item1
                          let b = GenericHashWithComparerIntrinsic_inline iec x.Item2 
                          let c = GenericHashWithComparerIntrinsic_inline iec x.Item3
                          let d = GenericHashWithComparerIntrinsic_inline iec x.Item4 
                          let e = GenericHashWithComparerIntrinsic_inline iec x.Item5
                          let f = GenericHashWithComparerIntrinsic_inline iec x.Item6
                          eliminate_tail_call_int (cth (cth (cth a b) (cth c d)) (cth e f))
  
                  type TupleEREqualityComparer<'a,'b,'c,'d,'e,'f,'g>() =
                      member __.Equals (_:IEqualityComparer, 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 -> true
                          | null, _ | _, null -> false
                          | _, _ ->
                              match GenericEqualityERIntrinsic_inline x.Item1 y.Item1 with
                              | false -> false
                              | _ ->
                              match GenericEqualityERIntrinsic_inline x.Item2 y.Item2 with
                              | false -> false
                              | _ ->
                              match GenericEqualityERIntrinsic_inline x.Item3 y.Item3 with
                              | false -> false
                              | _ ->
                              match GenericEqualityERIntrinsic_inline x.Item4 y.Item4 with
                              | false -> false
                              | _ ->
                              match GenericEqualityERIntrinsic_inline x.Item5 y.Item5 with
                              | false -> false
                              | _ ->
                              match GenericEqualityERIntrinsic_inline x.Item6 y.Item6 with
                              | false -> false
                              | _ ->
                              GenericEqualityERIntrinsic_inline x.Item7 y.Item7
  
                      member __.GetHashCode (iec:IEqualityComparer, x:System.Tuple<'a,'b,'c,'d,'e,'f,'g>) =
                          let a = GenericHashWithComparerIntrinsic_inline iec x.Item1
                          let b = GenericHashWithComparerIntrinsic_inline iec x.Item2 
                          let c = GenericHashWithComparerIntrinsic_inline iec x.Item3
                          let d = GenericHashWithComparerIntrinsic_inline iec x.Item4 
                          let e = GenericHashWithComparerIntrinsic_inline iec x.Item5
                          let f = GenericHashWithComparerIntrinsic_inline iec x.Item6
                          let g = GenericHashWithComparerIntrinsic_inline iec x.Item7
                          eliminate_tail_call_int (cth (cth (cth a b) (cth c d)) (cth (cth e f) g))
  
                  type TupleEREqualityComparer<'a,'b,'c,'d,'e,'f,'g,'h>() =
                      member __.Equals (_:IEqualityComparer, 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 -> true
                          | null, _ | _, null -> false
                          | _, _ ->
                              match GenericEqualityERIntrinsic_inline x.Item1 y.Item1 with
                              | false -> false
                              | _ ->
                              match GenericEqualityERIntrinsic_inline x.Item2 y.Item2 with
                              | false -> false
                              | _ ->
                              match GenericEqualityERIntrinsic_inline x.Item3 y.Item3 with
                              | false -> false
                              | _ ->
                              match GenericEqualityERIntrinsic_inline x.Item4 y.Item4 with
                              | false -> false
                              | _ ->
                              match GenericEqualityERIntrinsic_inline x.Item5 y.Item5 with
                              | false -> false
                              | _ ->
                              match GenericEqualityERIntrinsic_inline x.Item6 y.Item6 with
                              | false -> false
                              | _ ->
                              match GenericEqualityERIntrinsic_inline x.Item7 y.Item7 with
                              | false -> false
                              | _ ->
                              GenericEqualityERIntrinsic_inline x.Rest y.Rest
  
                      member __.GetHashCode (iec:IEqualityComparer, x:System.Tuple<'a,'b,'c,'d,'e,'f,'g,'h>) =
                          let a = GenericHashWithComparerIntrinsic_inline iec x.Item1
                          let b = GenericHashWithComparerIntrinsic_inline iec x.Item2 
                          let c = GenericHashWithComparerIntrinsic_inline iec x.Item3
                          let d = GenericHashWithComparerIntrinsic_inline iec x.Item4 
                          let e = GenericHashWithComparerIntrinsic_inline iec x.Item5
                          let f = GenericHashWithComparerIntrinsic_inline iec x.Item6
                          let g = GenericHashWithComparerIntrinsic_inline iec x.Item7
                          let h = GenericHashWithComparerIntrinsic_inline iec x.Rest
                          eliminate_tail_call_int (cth (cth (cth a b) (cth c d)) (cth (cth e f) (cth g h)))
  (*
                  let makeTupleEqualityComparerDelegate (ty:Type) (types:array<Type>) (def:Type) =
                      let concrete = def.MakeGenericType types
                      let instance = Activator.CreateInstance concrete
                      box (Delegate.CreateDelegate (GenericSpecializeEquals.makeEqualsReturnType ty, instance, "Equals"))
  
                  let tuplesEquals (tyRelation:Type) (ty:Type) : obj =
                      match tyRelation with
                      | r when r.Equals typeof<EquivalenceRelation> ->
                          if ty.IsGenericType then
                              let tyDef = ty.GetGenericTypeDefinition ()
                              let tyDefArgs = ty.GetGenericArguments ()
                              if   tyDef.Equals typedefof<Tuple<_>>               then makeTupleEqualityComparerDelegate ty tyDefArgs typedefof<TupleEREqualityComparer<_>>
                              elif tyDef.Equals typedefof<Tuple<_,_>>             then makeTupleEqualityComparerDelegate ty tyDefArgs typedefof<TupleEREqualityComparer<_,_>>
                              elif tyDef.Equals typedefof<Tuple<_,_,_>>           then makeTupleEqualityComparerDelegate ty tyDefArgs typedefof<TupleEREqualityComparer<_,_,_>>
                              elif tyDef.Equals typedefof<Tuple<_,_,_,_>>         then makeTupleEqualityComparerDelegate ty tyDefArgs typedefof<TupleEREqualityComparer<_,_,_,_>>
                              elif tyDef.Equals typedefof<Tuple<_,_,_,_,_>>       then makeTupleEqualityComparerDelegate ty tyDefArgs typedefof<TupleEREqualityComparer<_,_,_,_,_>>
                              elif tyDef.Equals typedefof<Tuple<_,_,_,_,_,_>>     then makeTupleEqualityComparerDelegate ty tyDefArgs typedefof<TupleEREqualityComparer<_,_,_,_,_,_>>
                              elif tyDef.Equals typedefof<Tuple<_,_,_,_,_,_,_>>   then makeTupleEqualityComparerDelegate ty tyDefArgs typedefof<TupleEREqualityComparer<_,_,_,_,_,_,_>>
                              elif tyDef.Equals typedefof<Tuple<_,_,_,_,_,_,_,_>> then makeTupleEqualityComparerDelegate ty tyDefArgs typedefof<TupleEREqualityComparer<_,_,_,_,_,_,_,_>>
                              else null
                          else null
                      | r when r.Equals typeof<PartialEquivalenceRelation> -> null
                      | _ ->
                          System.Console.WriteLine ("{0}", tyRelation)
                          raise (Exception "invalid logic")
  
                  let makeTupleGetHashCodeDelegate (ty:Type) (types:array<Type>) (def:Type) =
                      let concrete = def.MakeGenericType types
                      let instance = Activator.CreateInstance concrete
                      box (Delegate.CreateDelegate (GenericSpecializeHash.makeGetHashCodeReturnType ty, instance, "GetHashCode"))
  
                  let tuplesGetHashCode (ty:Type) : obj =
                      if ty.IsGenericType then
                          let tyDef = ty.GetGenericTypeDefinition ()
                          let tyDefArgs = ty.GetGenericArguments ()
                          if   tyDef.Equals typedefof<Tuple<_>>               then makeTupleGetHashCodeDelegate ty tyDefArgs typedefof<TupleEREqualityComparer<_>>
                          elif tyDef.Equals typedefof<Tuple<_,_>>             then makeTupleGetHashCodeDelegate ty tyDefArgs typedefof<TupleEREqualityComparer<_,_>>
                          elif tyDef.Equals typedefof<Tuple<_,_,_>>           then makeTupleGetHashCodeDelegate ty tyDefArgs typedefof<TupleEREqualityComparer<_,_,_>>
                          elif tyDef.Equals typedefof<Tuple<_,_,_,_>>         then makeTupleGetHashCodeDelegate ty tyDefArgs typedefof<TupleEREqualityComparer<_,_,_,_>>
                          elif tyDef.Equals typedefof<Tuple<_,_,_,_,_>>       then makeTupleGetHashCodeDelegate ty tyDefArgs typedefof<TupleEREqualityComparer<_,_,_,_,_>>
                          elif tyDef.Equals typedefof<Tuple<_,_,_,_,_,_>>     then makeTupleGetHashCodeDelegate ty tyDefArgs typedefof<TupleEREqualityComparer<_,_,_,_,_,_>>
                          elif tyDef.Equals typedefof<Tuple<_,_,_,_,_,_,_>>   then makeTupleGetHashCodeDelegate ty tyDefArgs typedefof<TupleEREqualityComparer<_,_,_,_,_,_,_>>
                          elif tyDef.Equals typedefof<Tuple<_,_,_,_,_,_,_,_>> then makeTupleGetHashCodeDelegate ty tyDefArgs typedefof<TupleEREqualityComparer<_,_,_,_,_,_,_,_>>
                          else null
                      else null
  *)
                  
                  let getEssenceOfGetHashCodeType ty =
                      let x = typedefof<GenericSpecializeHash.Function<_>>
  
negative.code:                     | _ -> raise (Exception "invalid logic")
  
                  type t = Specializations.GetHashCodeTypes.Int32
                  let tuplesGetHashCode (ty:Type) : obj =
                      if ty.IsGenericType then
                          let tyDef = ty.GetGenericTypeDefinition ()
                          let tyDefArgs = ty.GetGenericArguments ()
                          let create = mos.compositeCreator getEssenceOfGetHashCodeType tyDefArgs
                          if   tyDef.Equals typedefof<Tuple<_>>               then create typedefof<TupleEssenceOfGetHashCode<int,t>>
                          elif tyDef.Equals typedefof<Tuple<_,_>>             then create typedefof<TupleEssenceOfGetHashCode<int,int,t,t>>
                          elif tyDef.Equals typedefof<Tuple<_,_,_>>           then create typedefof<TupleEssenceOfGetHashCode<int,int,int,t,t,t>>
                          elif tyDef.Equals typedefof<Tuple<_,_,_,_>>         then create typedefof<TupleEssenceOfGetHashCode<int,int,int,int,t,t,t,t>>
                          elif tyDef.Equals typedefof<Tuple<_,_,_,_,_>>       then create typedefof<TupleEssenceOfGetHashCode<int,int,int,int,int,t,t,t,t,t>>
                          elif tyDef.Equals typedefof<Tuple<_,_,_,_,_,_>>     then create typedefof<TupleEssenceOfGetHashCode<int,int,int,int,int,int,t,t,t,t,t,t>>
                          elif tyDef.Equals typedefof<Tuple<_,_,_,_,_,_,_>>   then create typedefof<TupleEssenceOfGetHashCode<int,int,int,int,int,int,int,t,t,t,t,t,t,t>>
                          elif tyDef.Equals typedefof<Tuple<_,_,_,_,_,_,_,_>> then create typedefof<TupleEssenceOfGetHashCode<int,int,int,int,int,int,int,int,t,t,t,t,t,t,t,t>>
                          else null
                      else null
  
                  type u = Specializations.EqualsTypes.Int32
                  let tuplesEquals (_relation:Type) (ty:Type) : obj =
                      if ty.IsGenericType && _relation.Equals typeof<EquivalenceRelation> then
                          let tyDef = ty.GetGenericTypeDefinition ()
                          let tyDefArgs = ty.GetGenericArguments ()
                          let create = mos.compositeCreator getEssenceOfEqualsType tyDefArgs
                          if   tyDef.Equals typedefof<Tuple<_>>               then create typedefof<TupleEssenceOfEquals<int,u>>
                          elif tyDef.Equals typedefof<Tuple<_,_>>             then create typedefof<TupleEssenceOfEquals<int,int,u,u>>
                          elif tyDef.Equals typedefof<Tuple<_,_,_>>           then create typedefof<TupleEssenceOfEquals<int,int,int,u,u,u>>
                          elif tyDef.Equals typedefof<Tuple<_,_,_,_>>         then create typedefof<TupleEssenceOfEquals<int,int,int,int,u,u,u,u>>
                          elif tyDef.Equals typedefof<Tuple<_,_,_,_,_>>       then create typedefof<TupleEssenceOfEquals<int,int,int,int,int,u,u,u,u,u>>
                          elif tyDef.Equals typedefof<Tuple<_,_,_,_,_,_>>     then create typedefof<TupleEssenceOfEquals<int,int,int,int,int,int,u,u,u,u,u,u>>
                          elif tyDef.Equals typedefof<Tuple<_,_,_,_,_,_,_>>   then create typedefof<TupleEssenceOfEquals<int,int,int,int,int,int,int,u,u,u,u,u,u,u>>
                          elif tyDef.Equals typedefof<Tuple<_,_,_,_,_,_,_,_>> then create typedefof<TupleEssenceOfEquals<int,int,int,int,int,int,int,int,u,u,u,u,u,u,u,u>>
                          else null
                      else null
  
  