docs: public ConceptMap getSubstitution(){
          if (substitution == null) {
              Set<Variable> varNames = getVarNames();
              Set<IdPredicate> predicates = getAtoms(IsaAtomBase.class)
                      .map(IsaAtomBase::getTypePredicate)
                      .filter(Objects::nonNull)
                      .filter(p -> varNames.contains(p.getVarName()))
                      .collect(Collectors.toSet());
              getAtoms(IdPredicate.class).forEach(predicates::add);
  
              HashMap<Variable, Concept> answerMap = new HashMap<>();
              predicates.forEach(p -> {
                  Concept concept = tx().getConcept(p.getPredicate());
                  if (concept == null) throw GraqlCheckedException.idNotFound(p.getPredicate());
                  answerMap.put(p.getVarName(), concept);
              });
              substitution = new ConceptMap(answerMap);
          }
          return substitution;
      }