Skip to content

Commit 5a276c2

Browse files
author
Alexander Bainczyk
committed
fixed a bug with separating words
1 parent 3fdbb86 commit 5a276c2

File tree

1 file changed

+24
-22
lines changed

1 file changed

+24
-22
lines changed

backend/src/main/java/de/learnlib/alex/learning/services/LearnerService.java

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -436,16 +436,14 @@ public List<ExecuteResult> readOutputs(
436436
* @return If the machines are different: The corresponding separating word; otherwise: ""
437437
*/
438438
public SeparatingWord separatingWord(CompactMealyMachineProxy mealy1, CompactMealyMachineProxy mealy2) {
439-
final Alphabet<String> alphabetProxy1 = mealy1.createAlphabet();
440-
final Alphabet<String> alphabetProxy2 = mealy1.createAlphabet();
441-
if (alphabetProxy1.size() != alphabetProxy2.size() || !alphabetProxy1.containsAll(alphabetProxy2)) {
442-
throw new IllegalArgumentException("The alphabets of the hypotheses are not identical!");
443-
}
439+
final Alphabet<String> alphabet1 = mealy1.createAlphabet();
440+
final Alphabet<String> alphabet2 = mealy2.createAlphabet();
441+
checkAlphabetsAreIdentical(alphabet1, alphabet2);
444442

445-
final CompactMealy<String, String> mealyMachine1 = mealy1.createMealyMachine(alphabetProxy1);
446-
final CompactMealy<String, String> mealyMachine2 = mealy2.createMealyMachine(alphabetProxy2);
443+
final CompactMealy<String, String> mealyMachine1 = mealy1.createMealyMachine(alphabet1);
444+
final CompactMealy<String, String> mealyMachine2 = mealy2.createMealyMachine(alphabet2);
447445

448-
final Word<String> separatingWord = Automata.findSeparatingWord(mealyMachine1, mealyMachine2, alphabetProxy1);
446+
final Word<String> separatingWord = Automata.findSeparatingWord(mealyMachine1, mealyMachine2, alphabet1);
449447

450448
if (separatingWord != null) {
451449
return new SeparatingWord(
@@ -469,25 +467,23 @@ public SeparatingWord separatingWord(CompactMealyMachineProxy mealy1, CompactMea
469467
*/
470468
public CompactMealy<String, String> differenceTree(
471469
final CompactMealyMachineProxy mealyProxy1,
472-
final CompactMealyMachineProxy mealyProxy2) {
473-
474-
final Alphabet<String> alphabet = mealyProxy1.createAlphabet();
475-
final Alphabet<String> alph2 = mealyProxy2.createAlphabet();
476-
if (alphabet.size() != alph2.size() || !alphabet.containsAll(alph2)) {
477-
throw new IllegalArgumentException("The alphabets of the hypotheses are not identical!");
478-
}
470+
final CompactMealyMachineProxy mealyProxy2
471+
) {
472+
final Alphabet<String> alphabet1 = mealyProxy1.createAlphabet();
473+
final Alphabet<String> alphabet2 = mealyProxy2.createAlphabet();
474+
checkAlphabetsAreIdentical(alphabet1, alphabet2);
479475

480-
final CompactMealy<String, String> hyp1 = mealyProxy1.createMealyMachine(alphabet);
481-
final CompactMealy<String, String> hyp2 = mealyProxy2.createMealyMachine(alphabet);
476+
final CompactMealy<String, String> hyp1 = mealyProxy1.createMealyMachine(alphabet1);
477+
final CompactMealy<String, String> hyp2 = mealyProxy2.createMealyMachine(alphabet1);
482478

483479
// the words where the output differs
484480
final Set<SeparatingWord> diffs = new HashSet<>();
485-
findDifferences(hyp1, hyp2, alphabet, diffs);
486-
findDifferences(hyp2, hyp1, alphabet, diffs);
481+
findDifferences(hyp1, hyp2, alphabet1, diffs);
482+
findDifferences(hyp2, hyp1, alphabet1, diffs);
487483

488484
// build tree
489485
// the tree is organized as an incomplete mealy machine
490-
final CompactMealy<String, String> diffTree = new CompactMealy<>(alphabet);
486+
final CompactMealy<String, String> diffTree = new CompactMealy<>(alphabet1);
491487
diffTree.addInitialState();
492488

493489
for (final SeparatingWord diff : diffs) {
@@ -518,8 +514,8 @@ public CompactMealy<String, String> differenceTree(
518514
}
519515

520516
// minimize the tree
521-
final CompactMealy<String, String> target = new CompactMealy<>(alphabet);
522-
Automata.minimize(diffTree, alphabet, target);
517+
final CompactMealy<String, String> target = new CompactMealy<>(alphabet1);
518+
Automata.minimize(diffTree, alphabet1, target);
523519

524520
return target;
525521
}
@@ -574,4 +570,10 @@ private void checkRunningProcesses(User user, Long projectId) {
574570
}
575571
}
576572
}
573+
574+
private void checkAlphabetsAreIdentical(Alphabet<String> a1, Alphabet<String> a2) {
575+
if (a1.size() != a2.size() || !a1.containsAll(a2)) {
576+
throw new IllegalArgumentException("The alphabets of the hypotheses are not identical.");
577+
}
578+
}
577579
}

0 commit comments

Comments
 (0)