public Instance getInstance(Identifier id, Concept concept) {
    reasoner.deRegisterOntology((IRI) (state.getIdentifier()));
    try {
      reasoner.registerOntology(state);
    } catch (InconsistencyException e) {
      logger.warn("Ontology registration failed.", e);
    }
    Set<Instance> instances = reasoner.getInstances((IRI) state.getIdentifier(), concept);
    Instance instance = null;
    for (Instance i : instances) if (i.getIdentifier().equals(id)) instance = i;
    for (Entry<Molecule, Axiom> e : axioms.entrySet()) {
      if (e.getKey() instanceof AttributeValueMolecule) {
        AttributeValueMolecule avm = (AttributeValueMolecule) e.getKey();
        Axiom axiom = e.getValue();

        if (avm.getLeftParameter().equals(instance.getIdentifier())) {
          try {
            instance.addAttributeValue((IRI) avm.getAttribute(), (Value) avm.getRightParameter());
          } catch (Exception e2) {
            logger.warn("Failed to pseudo-reason.", e2);
          }
        }
      }
    }

    return instance;
  }
 public CompoundFact copy(CompoundFact fact) throws ParserException {
   // FIXME reliance on toString()
   MembershipMolecule mm = null;
   MoleculeFact mf = (MoleculeFact) fact; // FIXME handle relation facts);
   if (mf.listMembershipMolecules().size() > 0)
     mm =
         (MembershipMolecule)
             leFactory.createLogicalExpression(
                 mf.listMembershipMolecules().iterator().next().toString());
   Set<AttributeValueMolecule> avms = new HashSet<AttributeValueMolecule>();
   for (AttributeValueMolecule avm : mf.listAttributeValueMolecules()) {
     avms.add((AttributeValueMolecule) leFactory.createLogicalExpression(avm.toString()));
   }
   // TODO write this more elegant once factory convenience creators are fixed
   Set<MembershipMolecule> mms = new HashSet<MembershipMolecule>();
   if (mf.listMembershipMolecules().size() > 0) mms.add(mm);
   return cFactory.facts.createMoleculeFact(mms, avms);
 }