Is Autofac magical - part II

Now that you've read part I perhaps you can answer this.

What does this code do?

    class FO : IEnumerable
    {

        public IEnumerator GetEnumerator()
        {
            throw new NotImplementedException();
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var cb = new ContainerBuilder();
            cb.Register(ctx => new FO()).As<IEnumerable>().InstancePerLifetimeScope();
            cb.Register<Func<FO>>(ctx => { return () => new FO(); }).As<Func<IEnumerable>>();
            var x = cb.Build();
            using (var s = x.BeginLifetimeScope())
            {
                var f = s.Resolve<Func<IEnumerable>>();
                var i1 = f();
                var i2 = f();
                var ie = x.Resolve<IEnumerable>();
            }
        }
    }

In particular

Are i1, i2, and ie distinct?

What if you comment out the line cb.Register<Func<FO>>(ctx => { return () => new FO(); }).As<Func<IEnumerable>>();?