code: public boolean requiresMaterialisation(Atom parentAtom){
          if (requiresMaterialisation == null) {
              requiresMaterialisation = parentAtom.requiresMaterialisation()
                      || getHead().getAtom().requiresMaterialisation()
                      || hasDisconnectedHead();
          }
          return requiresMaterialisation;
      }
docs: rule requires materialisation in the context of resolving parent atom
  if parent atom requires materialisation, head atom requires materialisation or if the head contains only fresh variables
  
  @return true if the rule needs to be materialised