@@ -216,13 +216,44 @@ private ModelEntailment CreateResponse(
216216 _logger .debug (String .format ("=> %s: %s" , k .rankNumber (), k .formulas ()));
217217 }
218218
219+ var finalRemovedRanking = new ModelRankCollection ();
220+ var relevantKb = ReasonerUtils .toMaterialisedKnowledgeBase (relevantRanking .getKnowledgeBase ());
221+ // _logger.debug(String.format("=> %REL: %s", relevantKb));
222+ // _logger.debug(String.format("=> %REM: %s", removedRanking.getKnowledgeBase()));
223+
224+ for (var removeRank : removedRanking ) {
225+ ModelRank rank = new ModelRank (removeRank .getRankNumber ());
226+ boolean addRank = false ;
227+
228+ for (var removeStatement : removeRank .getFormulas ()) {
229+
230+ if (relevantKb .contains (ReasonerUtils .toMaterialisedFormula (removeStatement ))) {
231+ rank .addFormula (removeStatement );
232+ addRank = true ;
233+ } else {
234+ var remainRank = remainingRanking .getRank (removeRank .getRankNumber ());
235+ if (remainRank == null ) {
236+ ModelRank newRank = new ModelRank (removeRank .getRankNumber ());
237+ newRank .addFormula (removeStatement );
238+ remainingRanking .add (newRank );
239+ } else {
240+ remainingRanking .getRank (removeRank .getRankNumber ()).addFormula (removeStatement );
241+ }
242+ }
243+ }
244+
245+ if (addRank ) {
246+ finalRemovedRanking .add (rank );
247+ }
248+ }
249+
219250 var finalTime = ReasonerUtils .ToTimeDifference (startTime , System .nanoTime ());
220251
221252 return new ModelRelevantClosureEntailment .ModelRelevantClosureEntailmentBuilder ()
222253 .withKnowledgeBase (baseRank .getKnowledgeBaseKb ())
223254 .withQueryFormula (queryFormula )
224255 .withBaseRanking (baseRank .getRanking ())
225- .withRemovedRanking (removedRanking )
256+ .withRemovedRanking (finalRemovedRanking )
226257 .withRemainingRanking (remainingRanking )
227258 .withRelevantRankCollection (relevantRanking )
228259 .withIrrelevantRankCollection (irrelevantRanking )
@@ -271,17 +302,72 @@ private ModelRelevanceResult GetRelevantRanks(
271302 KnowledgeBase miniKb = new KnowledgeBase ();
272303
273304 if (reasonerType == ReasonerType .MinimalRelevantClosure ) {
274- int counter = 0 ;
305+
306+ var allRanks = baseRankCollection .getRankingCollectonExceptInfinity ();
307+ List <Integer > justList = new ArrayList <>();
308+
309+ for (ModelRank rank : allRanks ) {
310+
311+ var rankFomulas = rank .getFormulas ();
312+
313+ _logger .debug (String .format ("=> Rel Rank %s: %s" , rank .getRankNumber (), rankFomulas ));
314+
315+ int justCounter = 0 ;
316+ for (var just : justificationCollection ) {
317+
318+ if (justList .contains (justCounter )) {
319+ continue ;
320+ }
321+
322+ var rankNumber = -1 ;
323+ _logger .debug (String .format ("=> Rel Just %s: %s" , justCounter , just .getFormulas ()));
324+
325+ for (var formula : just .getFormulas ()) {
326+
327+ var deMaterialised = ReasonerUtils .toDematerialisedFormula (formula );
328+ _logger .debug (String .format ("=> Rel Formula %s: %s IN %s" , justCounter , deMaterialised , rankFomulas ));
329+
330+ if (rankFomulas .contains (deMaterialised )) {
331+ if (rankNumber == -1 ) {
332+ rankNumber = rank .getRankNumber ();
333+ justList .add (justCounter );
334+ }
335+
336+ if (rank .getRankNumber () == rankNumber ) {
337+ miniKb .add (formula );
338+ }
339+ }
340+ }
341+
342+ justCounter ++;
343+ }
344+ }
345+
346+ _logger .debug (String .format (" Mini := %s" , miniKb .getFormulas ()));
347+
348+ /*
349+
275350 for (int i = 0; i < justificationCollection.size(); i++) {
276351
277- var rank = baseRankCollection .getRank (counter );
352+ var rank = baseRankCollection.getRank(counter);
353+
354+ if (rank == null || counter == Symbols.INFINITY_RANK_NUMBER) {
355+ counter++;
356+ continue;
357+ }
358+
359+ var rankdeMaterialised = ReasonerUtils.toMaterialisedKnowledgeBase(rank.getFormulas());
278360 var rankNumber = -1;
361+
362+ _logger.debug(String.format("=> Rel Rank %s: %s", counter, rankdeMaterialised));
279363
280364 for (var formula : justificationCollection.get(i)) {
281365
366+ _logger.debug(String.format("=> Rel Formula %s: %s", counter, formula));
367+
282368 var deMaterialised = ReasonerUtils.toDematerialisedFormula(formula);
283369
284- if (rank != null && rank . getFormulas () .contains (deMaterialised )) {
370+ if (rankdeMaterialised .contains(deMaterialised)) {
285371 if (rankNumber == -1) {
286372 rankNumber = rank.getRankNumber();
287373 }
@@ -297,8 +383,7 @@ private ModelRelevanceResult GetRelevantRanks(
297383 counter++;
298384 }
299385 }
300-
301- _logger .debug (String .format (" Mini := %s" , miniKb .getFormulas ()));
386+ */
302387 }
303388
304389 ModelRankCollection resultIncosistentRank = new ModelRankCollection ();
0 commit comments