public String generateSmtForClause(AnalysisContract ac, ContractClause cc, boolean verifyOrFind) {
		// prepare for a new iteration, clean the state
		clearData();
		// handle contract clause itself first (implicitly includes traversing unknown types and properties)
		String clauseOutput = ""; 
		if (verifyOrFind)
			clauseOutput += generateSmtContractClauseVerify(cc);
		else 
			clauseOutput += generateSmtContractClauseFind(cc);    
		// process input and output to collect info about components and
		// properties
		traverseInputOutput(ac);
		// create definitions and facts
		// also populate string2int dictionary as a side effect
		String defFactOutput = psg.generateDefinitionsAndFacts(compToProp, ac, stringToIntDict);
		// apply dictionary transform to clause output
		// FIXME collisions with other names possible
		for (String str: stringToIntDict.keySet()) { 
			clauseOutput = clauseOutput.replace('$' + str + '$', String.valueOf(stringToIntDict.get(str)));
		}
		// defs and facts come come first
		return defFactOutput + clauseOutput;
	}
public String generateSmtForClause(AnalysisContract ac, ContractClause cc, boolean verifyOrFind) {
	
		clearData();
	
		String clauseOutput = ""; 
		if (verifyOrFind)
			clauseOutput += generateSmtContractClauseVerify(cc);
		else 
			clauseOutput += generateSmtContractClauseFind(cc);    
	
	
		traverseInputOutput(ac);
	
	
		String defFactOutput = psg.generateDefinitionsAndFacts(compToProp, ac, stringToIntDict);
	
	
		for (String str: stringToIntDict.keySet()) { 
			clauseOutput = clauseOutput.replace('$' + str + '$', String.valueOf(stringToIntDict.get(str)));
		}
	
		return defFactOutput + clauseOutput;
	}
public string generatesmtforclause(analysiscontract ac, contractclause cc, boolean verifyorfind) { cleardata(); string clauseoutput = ""; if (verifyorfind) clauseoutput += generatesmtcontractclauseverify(cc); else clauseoutput += generatesmtcontractclausefind(cc); traverseinputoutput(ac); string deffactoutput = psg.generatedefinitionsandfacts(comptoprop, ac, stringtointdict); for (string str: stringtointdict.keyset()) { clauseoutput = clauseoutput.replace('$' + str + '$', string.valueof(stringtointdict.get(str))); } return deffactoutput + clauseoutput; }