Slightly more informative closing message
[scpubgit/stemmatology.git] / analysis / idp_server / findGroupings.idp
CommitLineData
51650966 1vocabulary V1 {
2 extern vocabulary V
3 SourceOf(Variant): Manuscript
4}
5
6theory T1 : V1 {
7 ! x : (x ~= SourceOf(VariantOf(x))) => ? y : CopiedBy(y,x) & VariantOf(y) = VariantOf(x).
8}
9
10procedure check(sample) {
11 stdoptions.groundwithbounds=false
c92f1684 12 stdoptions.symmetrybreaking="static"
51650966 13 idpintern.setvocabulary(sample,V1)
14 return onemodel(T1,sample)
15}
16
17procedure 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
31procedure 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}