Variable or compound expression - Unification algorithm:
Here some things to note regarding this method are:
(i) There if really trying to match a constant to a different constant fails this means that they are not equal, neither is a variable or compound expression or in list also. However if we considered none of the cases in unify_internal is true to must return failure.
(ii) In case 1 and 2 in unify_variable(var,x,my) check and finds neither inputs have already been substituted. However if we considered if x already has a substitution value and var, rather than x and var so there it does similarly if var already has a substitution.
(iii) In case 3 we see that in unify_variable is called as the occurs-check case or occur-check. However if we considered this is important to visualize we got to the stage when to complete a unification if we required to substitute X into say, f(X,Y). However if we considered we would write f(X,Y) instead of X. After than this still has an X in it! Thus we would use to substitute X by f(X,Y) and again giving us as: f(f(X,Y),Y) so it is obvious why we should never have tried this substitution in the first placeis means that this process will never end. However the occurs check makes sure this isn't going to happen before case 4 returns a substitution. But in realty the rule is:; that you cannot substitute a compound for a variable so such variable appears in the compound already that you will never get rid of the variable.
(iv) However if we considered unify_internal(op(x),op(y),mu)) a part of case 5 in unify_internal checks whether the operators of the two compound expressions are the same. Just because of it will return false if, considered an example where it tries to unify two predicates into different names or a with symbol.