1. |
for each l in [maxLevel..0] do |
2. |
for each i in [0..M.funConditions[l].length] do |
3. |
if checkCondition(M.funConditions[l][i]) == true do |
4. |
elementPairs = cartesianProduct(CurrentM.Elements[l], TargetM.Elements[l]) |
5. |
for each j in [0..elementPairs.length] |
6. |
if profTransition(M.vzLinkingFun[l][i](elementPairs[j].first, elementPairs[j].second)=true do |
7. |
M.AchievedFrom[l] = add(M.AchievedFrom[l], elementPairs[j].first) |
8. |
M.AchievedTo[l] = add(M.AchievedTo[l], elementPairs[j].first) |
9. |
M.AchievedWith[l] = add(M.AchievedWith[l], M.vzLinkingFun[l][i]) |
10. |
M.AchivedWhile[l] = add(M.AchivedWhile[l], checkCondition[l][i]) |
11. |
remove(M.NonProven[l+1], elementPairs[j].second) |
12. |
else |
13. |
M.NonProven[l]= add(M.NonProven[l], elementPairs[j].second) |
14. |
end |
15. |
if M.NonProven[l].length != 0 && maxLevel != 0 do |
16. |
FindAchievableElements(maxLevel-1, M, CurrentM, TargetM) |
17. |
end |
18. |
return M |