Input: Property being verified |
Output: A partition of the model into non-necessarily disjoint submodels |
(1) |
(2) |
(3) for each pair of constraints in do |
(4) βif ConstraintSupport() ConstraintSupport ββthen |
(5)ββMergeInSameCluster |
(6)βend if |
(7) end for |
(8) |
(9) for each cluster of constraints Cl do |
(10)βsubModel empty model |
(11)β |
(12)βworkList Union of the ConstraintSupport of all constraints in the cluster |
(13)βwhile workList not empty do |
(14)ββ first(workList) |
(15)ββworkList |
(16)ββfor each subclass or superclass of ββdo |
(17)βββsubModel subModel |
(18)βββif was not before in the subModelββthen |
(19)ββββworkList workList |
(20)βββend if |
(21)ββend for |
(22)ββfor each class tightly coupled to ββdo |
(23)βββif = weak SATββthen |
(24)ββββsubModel subModel |
(25)βββelse if = strong SATββthen |
(26)ββββworkList workList |
(27)βββend if |
(28)ββend for |
(29)βend while |
(30) end for |