     Enum.all?(keys, &(Keyword.fetch(opts1, &1) == Keyword.fetch(opts2, &1)))
   end
 
-  defp reject_non_fullfilled_optional(deps) do
+  defp reject_non_fulfilled_optional(deps) do
     apps = Enum.map(deps, & &1.app)
     for dep <- deps do
-      update_in dep.deps, &reject_non_fullfilled_optional(&1, apps)
-    end
-  end
-
-  defp reject_non_fullfilled_optional(children, upper_breadths) do
+      update_in dep.deps, &reject_non_fulfilled_optional(&1, apps)
+    end
+  end
+
+  defp reject_non_fulfilled_optional(children, upper_breadths) do
     Enum.reject children, fn %Mix.Dep{app: app, opts: opts} ->
       opts[:optional] && not(app in upper_breadths)
     end

        {acc, rest, lock} =
          all(t, [dep | acc], upper_breadths, current_breadths, callback, rest, lock, env, cache)

        deps = reject_non_fullfilled_optional(dep.deps, Enum.map(acc, & &1.app))
        new_breadths = Enum.map(deps, &(&1.app)) ++ current_breadths
        all(deps, acc, current_breadths, new_breadths, callback, rest, lock, env, cache)
    end

          end
        end)

      {reject_non_fulfilled_optional(deps), rest, lock}
    else
      {reject_non_fulfilled_optional(deps), rest, lock}
    end
  end

