in Alloy the "in" operator is an isomorphic operator. It express membership predicate as in "a in R", where a is an atom and R a unary relation, and subset property as in "R1 in R2", where R1 and R2 are two relations. In our logic/representation we have an explicit operator for the membership property, namely "in_x" and an explicit one for subset "subset_x".
In the current translation we translate both meanings of the Alloy "in" to our "subset_x". For "a in R" we use our "a2r" and produce "subset(a2r(a), r)". If we do not do this, and keep simple thinks simple the automatic translation can prove our file system example.
Sure one may think about a lemma like "all r: Rel, a: Atom | subset(a2r(a), r) => in(a, r)". I tried it (in a hurry) but with no success.
Improvement:
in Alloy the "in" operator is an isomorphic operator. It express membership predicate as in "a in R", where a is an atom and R a unary relation, and subset property as in "R1 in R2", where R1 and R2 are two relations. In our logic/representation we have an explicit operator for the membership property, namely "in_x" and an explicit one for subset "subset_x".
In the current translation we translate both meanings of the Alloy "in" to our "subset_x". For "a in R" we use our "a2r" and produce "subset(a2r(a), r)". If we do not do this, and keep simple thinks simple the automatic translation can prove our file system example.
Sure one may think about a lemma like "all r: Rel, a: Atom | subset(a2r(a), r) => in(a, r)". I tried it (in a hurry) but with no success.