Commit | Line | Data |
51650966 |
1 | vocabulary V1 { |
2 | extern vocabulary V |
3 | SourceOf(Variant): Manuscript |
4 | } |
5 | |
6 | theory T1 : V1 { |
7 | ! x : (x ~= SourceOf(VariantOf(x))) => ? y : CopiedBy(y,x) & VariantOf(y) = VariantOf(x). |
8 | } |
9 | |
10 | procedure check(sample) { |
11 | stdoptions.groundwithbounds=false |
c92f1684 |
12 | stdoptions.symmetrybreaking="static" |
51650966 |
13 | idpintern.setvocabulary(sample,V1) |
14 | return onemodel(T1,sample) |
15 | } |
16 | |
17 | procedure findGroupings(samples) { |
18 | local result = {} |
19 | for _,sample in ipairs(samples) do |
20 | -- Find out whether the sample fits the stemma. |
21 | local model = check(sample) |
22 | if model then |
23 | table.insert(result,{ getGrouping(model), true }) |
24 | else |
25 | table.insert(result,{ getGrouping(sample), false }) |
26 | end |
27 | end |
28 | return result |
29 | } |
30 | |
31 | procedure getGrouping(model) { |
32 | local grouping = {} |
33 | for tuple in tuples(model[V::VariantOf].graph.ct) do |
34 | local manuscript, variant = tuple[1], tuple[2] |
35 | if grouping[variant] == nil then |
36 | grouping[variant] = {manuscript} |
37 | else |
38 | table.insert(grouping[variant],manuscript) |
39 | end |
40 | end |
41 | return grouping |
42 | } |