0b9630d477108bb1aadeb7fcd5907cdadef52260
[scpubgit/stemmatology.git] / analysis / idp_server / findSources.idp
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
16   stdoptions.symmetrybreaking='static'
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