Program: 130642
Project: 130642
Buggy source:
public <X>OplInst<S2,C2,V2,Chc<OplTerm<Chc<C1,X>,V1>,Pair<Object,Map<V1,OplTerm<Chc<C1,X>,V1>>>>> eval(OplInst<S1,C1,V1,X> I0){
  if (!I0.S.equals(src)) {
    throw new RuntimeException("String_Node_Str");
  }
  Map<Chc<OplTerm<Chc<C1,X>,V1>,Pair<Object,Map<V1,OplTerm<Chc<C1,X>,V1>>>>,S2> gens=new HashMap<>();
  List<Pair<OplTerm<Chc<C2,Chc<OplTerm<Chc<C1,X>,V1>,Pair<Object,Map<V1,OplTerm<Chc<C1,X>,V1>>>>>,V2>,OplTerm<Chc<C2,Chc<OplTerm<Chc<C1,X>,V1>,Pair<Object,Map<V1,OplTerm<Chc<C1,X>,V1>>>>>,V2>>> equations=new LinkedList<>();
  OplSetInst<S1,C1,OplTerm<Chc<C1,X>,V1>> I=OplSat.saturate(I0.projEAdiscreteT());
  Map<Chc<OplTerm<Chc<C1,X>,V1>,Pair<Object,Map<V1,OplTerm<Chc<C1,X>,V1>>>>,Integer> prec=new HashMap<>();
  Set<OplTerm<Chc<C1,X>,V1>> allCopiedTerms=new HashSet<>();
  int i=10000;
  for (  S1 s1 : I0.S.projT().sorts) {
    for (    OplTerm<Chc<C1,X>,V1> x : I.sorts.get(s1)) {
      gens.put(Chc.inLeft(x),(S2)s1);
      allCopiedTerms.add(x);
      prec.put(Chc.inLeft(x),i++);
    }
  }
  for (  Pair<OplTerm<Chc<C1,X>,V1>,OplTerm<Chc<C1,X>,V1>> eq : I0.P.equations) {
    S1 t=eq.first.type(I0.P.toSig,new OplCtx<>());
    if (src.projT().sorts.contains(t)) {
      equations.add(new Pair<>(conv2(I0,allCopiedTerms,eq.first),conv2(I0,allCopiedTerms,eq.second)));
    }
  }
  for (  Object label : blocks.keySet()) {
    Pair<S2,Block<S1,C1,V1,S2,C2,V2>> xxx=blocks.get(label);
    S2 tgt=xxx.first;
    Block<S1,C1,V1,S2,C2,V2> block=xxx.second;
    Set<Map<V1,OplTerm<Chc<C1,X>,V1>>> tuples=new HashSet<>();
    tuples.add(new HashMap<>());
    Set<Pair<OplTerm<Chc<C1,X>,V1>,OplTerm<Chc<C1,X>,V1>>> where=new HashSet<>();
    for (    Pair<OplTerm<C1,V1>,OplTerm<C1,V1>> eq : block.where) {
      where.add(new Pair<>(OplSig.inject(eq.first),OplSig.inject(eq.second)));
    }
    List<V1> ordered=order(block);
    for (    V1 v : block.from.keySet()) {
      S1 s=block.from.get(v);
      Set<OplTerm<Chc<C1,X>,V1>> dom=I.sorts.get(s);
      tuples=extend(tuples,dom,v);
      tuples=filter(tuples,where,I0);
    }
    for (    Map<V1,OplTerm<Chc<C1,X>,V1>> tuple : tuples) {
      gens.put(Chc.inRight(new Pair<>(label,tuple)),tgt);
      prec.put(Chc.inRight(new Pair<>(label,tuple)),i++);
    }
    for (    C2 c2 : block.attrs.keySet()) {
      OplTerm<Chc<C1,X>,V1> e=OplSig.inject(block.attrs.get(c2));
      for (      Map<V1,OplTerm<Chc<C1,X>,V1>> tuple : tuples) {
        OplTerm<Chc<C1,X>,V1> a=e.subst(tuple);
        OplTerm<Chc<C2,Chc<OplTerm<Chc<C1,X>,V1>,Pair<Object,Map<V1,OplTerm<Chc<C1,X>,V1>>>>>,V2> lhs=new OplTerm<>(Chc.inLeft(c2),Util.singList(new OplTerm<>(Chc.inRight(Chc.inRight(new Pair<>(label,tuple))),new LinkedList<>())));
        equations.add(new Pair<>(lhs,conv2(I0,allCopiedTerms,a)));
      }
    }
    for (    C2 c2 : block.edges.keySet()) {
      Object tgt_label=block.edges.get(c2).first;
      Map<V1,OplTerm<C1,V1>> tgt_ctx=block.edges.get(c2).second;
      for (      Map<V1,OplTerm<Chc<C1,X>,V1>> tuple : tuples) {
        Map<V1,OplTerm<Chc<C1,X>,V1>> substed=new HashMap<>();
        for (        V1 v1 : tgt_ctx.keySet()) {
          OplTerm<Chc<C1,X>,V1> uuu=OplSig.inject(tgt_ctx.get(v1));
          OplTerm<Chc<C1,X>,V1> vvv=uuu.subst(tuple);
          substed.put(v1,vvv);
        }
        OplTerm<Chc<C2,Chc<OplTerm<Chc<C1,X>,V1>,Pair<Object,Map<V1,OplTerm<Chc<C1,X>,V1>>>>>,V2> lhs=new OplTerm<>(Chc.inLeft(c2),Util.singList(new OplTerm<>(Chc.inRight(Chc.inRight(new Pair<>(label,tuple))),new LinkedList<>())));
        OplTerm<Chc<C2,Chc<OplTerm<Chc<C1,X>,V1>,Pair<Object,Map<V1,OplTerm<Chc<C1,X>,V1>>>>>,V2> rhs=new OplTerm<>(Chc.inLeft(c2),Util.singList(new OplTerm<>(Chc.inRight(Chc.inRight(new Pair<>(tgt_label,substed))),new LinkedList<>())));
        equations.add(new Pair<>(lhs,rhs));
      }
    }
  }
  OplPres<S2,C2,V2,Chc<OplTerm<Chc<C1,X>,V1>,Pair<Object,Map<V1,OplTerm<Chc<C1,X>,V1>>>>> P=new OplPres<>(prec,dst.sig0,dst.sig,gens,equations);
  OplInst<S2,C2,V2,Chc<OplTerm<Chc<C1,X>,V1>,Pair<Object,Map<V1,OplTerm<Chc<C1,X>,V1>>>>> retX=new OplInst<>("String_Node_Str","String_Node_Str",I0.J0);
  retX.validate(dst,P,I0.J);
  return retX;
}

Fixed version (ground truth):
public <X>OplInst<S2,C2,V2,Chc<OplTerm<Chc<C1,X>,V1>,Pair<Object,Map<V1,OplTerm<Chc<C1,X>,V1>>>>> eval(OplInst<S1,C1,V1,X> I0){
  if (!I0.S.equals(src)) {
    throw new RuntimeException("String_Node_Str");
  }
  Map<Chc<OplTerm<Chc<C1,X>,V1>,Pair<Object,Map<V1,OplTerm<Chc<C1,X>,V1>>>>,S2> gens=new HashMap<>();
  List<Pair<OplTerm<Chc<C2,Chc<OplTerm<Chc<C1,X>,V1>,Pair<Object,Map<V1,OplTerm<Chc<C1,X>,V1>>>>>,V2>,OplTerm<Chc<C2,Chc<OplTerm<Chc<C1,X>,V1>,Pair<Object,Map<V1,OplTerm<Chc<C1,X>,V1>>>>>,V2>>> equations=new LinkedList<>();
  OplSetInst<S1,C1,OplTerm<Chc<C1,X>,V1>> I=OplSat.saturate(I0.projEA());
  Map<Chc<OplTerm<Chc<C1,X>,V1>,Pair<Object,Map<V1,OplTerm<Chc<C1,X>,V1>>>>,Integer> prec=new HashMap<>();
  Set<OplTerm<Chc<C1,X>,V1>> allCopiedTerms=new HashSet<>();
  int i=10000;
  for (  S1 s1 : I0.S.projT().sorts) {
    for (    OplTerm<Chc<C1,X>,V1> x : I.sorts.get(s1)) {
      gens.put(Chc.inLeft(x),(S2)s1);
      allCopiedTerms.add(x);
      prec.put(Chc.inLeft(x),i++);
    }
  }
  for (  Pair<OplTerm<Chc<C1,X>,V1>,OplTerm<Chc<C1,X>,V1>> eq : I0.P.equations) {
    S1 t=eq.first.type(I0.P.toSig(),new OplCtx<>());
    if (src.projT().sorts.contains(t)) {
      equations.add(new Pair<>(conv2(I0,allCopiedTerms,eq.first),conv2(I0,allCopiedTerms,eq.second)));
    }
  }
  for (  Object label : blocks.keySet()) {
    Pair<S2,Block<S1,C1,V1,S2,C2,V2>> xxx=blocks.get(label);
    S2 tgt=xxx.first;
    Block<S1,C1,V1,S2,C2,V2> block=xxx.second;
    Set<Map<V1,OplTerm<Chc<C1,X>,V1>>> tuples=new HashSet<>();
    tuples.add(new HashMap<>());
    Set<Pair<OplTerm<Chc<C1,X>,V1>,OplTerm<Chc<C1,X>,V1>>> where=new HashSet<>();
    for (    Pair<OplTerm<C1,V1>,OplTerm<C1,V1>> eq : block.where) {
      where.add(new Pair<>(OplSig.inject(eq.first),OplSig.inject(eq.second)));
    }
    List<V1> ordered=order(block);
    for (    V1 v : block.from.keySet()) {
      S1 s=block.from.get(v);
      Set<OplTerm<Chc<C1,X>,V1>> dom=I.sorts.get(s);
      tuples=extend(tuples,dom,v);
      tuples=filter(tuples,where,I0);
    }
    if (block.from.keySet().isEmpty()) {
      tuples=filter(tuples,where,I0);
    }
    for (    Map<V1,OplTerm<Chc<C1,X>,V1>> tuple : tuples) {
      gens.put(Chc.inRight(new Pair<>(label,tuple)),tgt);
      prec.put(Chc.inRight(new Pair<>(label,tuple)),i++);
    }
    for (    C2 c2 : block.attrs.keySet()) {
      OplTerm<Chc<C1,X>,V1> e=OplSig.inject(block.attrs.get(c2));
      for (      Map<V1,OplTerm<Chc<C1,X>,V1>> tuple : tuples) {
        OplTerm<Chc<C1,X>,V1> a=e.subst(tuple);
        OplTerm<Chc<C2,Chc<OplTerm<Chc<C1,X>,V1>,Pair<Object,Map<V1,OplTerm<Chc<C1,X>,V1>>>>>,V2> lhs=new OplTerm<>(Chc.inLeft(c2),Util.singList(new OplTerm<>(Chc.inRight(Chc.inRight(new Pair<>(label,tuple))),new LinkedList<>())));
        equations.add(new Pair<>(lhs,conv2(I0,allCopiedTerms,a)));
      }
    }
    for (    C2 c2 : block.edges.keySet()) {
      Object tgt_label=block.edges.get(c2).first;
      Map<V1,OplTerm<C1,V1>> tgt_ctx=block.edges.get(c2).second;
      for (      Map<V1,OplTerm<Chc<C1,X>,V1>> tuple : tuples) {
        Map<V1,OplTerm<Chc<C1,X>,V1>> substed=new HashMap<>();
        for (        V1 v1 : tgt_ctx.keySet()) {
          OplTerm<Chc<C1,X>,V1> uuu=OplSig.inject(tgt_ctx.get(v1));
          OplTerm<Chc<C1,X>,V1> vvv=uuu.subst(tuple);
          substed.put(v1,vvv);
        }
        OplTerm<Chc<C2,Chc<OplTerm<Chc<C1,X>,V1>,Pair<Object,Map<V1,OplTerm<Chc<C1,X>,V1>>>>>,V2> lhs=new OplTerm<>(Chc.inLeft(c2),Util.singList(new OplTerm<>(Chc.inRight(Chc.inRight(new Pair<>(label,tuple))),new LinkedList<>())));
        OplTerm<Chc<C2,Chc<OplTerm<Chc<C1,X>,V1>,Pair<Object,Map<V1,OplTerm<Chc<C1,X>,V1>>>>>,V2> rhs=new OplTerm<>(Chc.inLeft(c2),Util.singList(new OplTerm<>(Chc.inRight(Chc.inRight(new Pair<>(tgt_label,substed))),new LinkedList<>())));
        equations.add(new Pair<>(lhs,rhs));
      }
    }
  }
  OplPres<S2,C2,V2,Chc<OplTerm<Chc<C1,X>,V1>,Pair<Object,Map<V1,OplTerm<Chc<C1,X>,V1>>>>> P=new OplPres<>(prec,dst.sig0,dst.sig,gens,equations);
  OplInst<S2,C2,V2,Chc<OplTerm<Chc<C1,X>,V1>,Pair<Object,Map<V1,OplTerm<Chc<C1,X>,V1>>>>> retX=new OplInst<>("String_Node_Str","String_Node_Str",I0.J0);
  retX.validate(dst,P,I0.J);
  return retX;
}