次のモデルでverifyingUndefinedFieldsアサーションを確認しようとしています:
module Tests
open law6_withStaticSemantic
assert verifyingUndefinedFields {
some fa:FieldAccess | fa.pExp in newCreator && fa.id_fieldInvoked !in fa.pExp.((id_cf.(*extend)).fields)
}
check verifyingUndefinedFields
次に提示されたモデルは、law6_withStaticSemantic という別のモデルを使用しています。以下は、このモデルの非常に簡略化されたバージョンです。
module TestWithStaticSemantic
open javametamodel_withStaticSemantic
sig Left,Right extends Class{}
one sig ARight, BRight, CRight extends Right{}
one sig ALeft, BLeft, CLeft extends Left{}
pred law6RightToLeft[] {
twoClassesDeclarationInHierarchy[]
mirroringOfTwoClassesDeclarationsExceptForTheFieldMoved[]
law6[]
}
pred twoClassesDeclarationInHierarchy[] {...}
pred mirroringOfTwoClassesDeclarationsExceptForTheFieldMoved[] {...}
...
run law6RightToLeft for 10 but 10 Id, exactly 2 FieldAccess, exactly 11 Type, 4 Method, exactly 1 Field, 4 SequentialComposition, 8 Expression, 4 Block, exactly 1 LiteralValue
2 番目のモデル (law6_withStaticSemantic) は、定義された述語に従ってインスタンスを生成します。ただし、最初のモデルでアサーションを実行すると、生成された反例は、2 番目のモデルの述語で定義された条件に従いません。以前のモデルの述語を考慮して反例をチェックするアサーションを構築/実行するにはどうすればよいですか?
モデルについては、以前に次の質問で詳しく説明しました。