Commit | Line | Data |
51650966 |
1 | vocabulary V2 { |
2 | extern vocabulary V |
3 | IsSource(Manuscript) |
4 | } |
5 | |
6 | theory T2 : V2 { |
7 | ! x : (~IsSource(x)) => ? y : CopiedBy(y,x) & VariantOf(y) = VariantOf(x). |
8 | } |
9 | |
10 | term NbOfSources : V2 { |
11 | #{ x : IsSource(x) } |
12 | } |
13 | |
14 | procedure minSources(sample) { |
15 | stdoptions.groundwithbounds=false |
c92f1684 |
16 | stdoptions.symmetrybreaking="static" |
51650966 |
17 | idpintern.setvocabulary(sample,V2) |
18 | return minimize(T2, sample, NbOfSources)[1] |
19 | } |
20 | |
21 | procedure findSources(samples) { |
22 | local result = {} |
23 | for _,sample in ipairs(samples) do |
24 | local model = minSources(sample) |
25 | if model then |
26 | table.insert(result,{ getGrouping(model), getSources(model) }) |
27 | else |
28 | table.insert(result,{ getGrouping(sample), {} }) |
29 | end |
30 | end |
31 | return result |
32 | } |
33 | |
34 | procedure getSources(model) { |
35 | local sources = {} |
36 | for tuple in tuples(model[V2::IsSource].ct) do |
37 | local manuscript = tuple[1] |
38 | table.insert(sources,manuscript) |
39 | end |
40 | return sources |
41 | } |
42 | |
43 | |