Currently isIso simply enumerates all permutations of the truth values of the target logic, maps the source logic to the permutation, and then test if the map respects the operations. This guarantees that every n! isomorphisms are considered, which is not necessary: say a 1-1 map f of a subset of V to V' is a partial iso if f([]v) = []'(f(v)). If f fails the congruence test, ie, either for some v \in dom(f),
either []v \in \dom(f) but []'(f(v)) \notin ran(f), or []v \noitin \dom(f) but []'f(v) \in ran(f), or
f([]v) \neq []'(f(v))
then no 1-1 map expanding f to all of V can be an isomorphism. So instead of enumerating all 1-1 maps (permutations), we enumerate all partial 1-1 maps, fail if they violate the two conditions above, else add another element of v to dom(f).
Currently
isIso
simply enumerates all permutations of the truth values of the target logic, maps the source logic to the permutation, and then test if the map respects the operations. This guarantees that every n! isomorphisms are considered, which is not necessary: say a 1-1 map f of a subset of V to V' is a partial iso if f([]v) = []'(f(v)). If f fails the congruence test, ie, either for some v \in dom(f),then no 1-1 map expanding f to all of V can be an isomorphism. So instead of enumerating all 1-1 maps (permutations), we enumerate all partial 1-1 maps, fail if they violate the two conditions above, else add another element of v to dom(f).