@Override
  public W<DeltaPair<Delta,Delta>> delta(DC obj)
  { if(obj instanceof Pair)
    { Pair that=(Pair)obj;
      if(this.s.instanceOf(that.s) && this.t.instanceOf(that.t))
      { W ws=this.s.delta(that.s);
        W wt=this.t.delta(that.t);
        
        if(ws.equa().getValue() && wt.equa().getValue())
        { return new W(new Equality(true), new Similarity(0.0), new DeltaPair.Id(this));
              
        }
        else
        {return new W(
                       new Equality(false),
                       new Similarity(0.5*(ws.simi().getValue()+wt.simi().getValue())),
                       new DeltaPair(ws.diff(),wt.diff())
                     );
        }  
      }  
      else
      { throw new RuntimeException("The fst element in the fst pair s1="+this.s+
                                   "\nThe fst element in the snd pair s2="+that.s+" they should be the same type. "+
                                   "\nThe snd element in the fst pair t1="+this.t+
                                   "\nThe snd element in the snd pair t2="+that.t+" they should be the same type.");
      } 
    }
    else
    { throw new RuntimeException(obj+" is NOT of Pair type?");
    }  
  }