if (! s2.equals(((StructureTerm)a4).functor()))
return engine.fail();
Term[] args = ((StructureTerm)a4).args();
if (! a2.unify(args[0], engine.trail))
return engine.fail();
if (! a1.unify(args[1], engine.trail))
return engine.fail();
} else if (a4.isVariable()){
Term[] args = {a2, a1};
((VariableTerm) a4).bind(new StructureTerm(s2, args), engine.trail);
} else {