using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;

namespace CategoryTheory
{
    /// <summary>
    /// Category with direct product
    /// </summary>
    public interface IDirectProductCategory : ICategory
    {

        /// <summary>
        /// Gets direct product
        /// </summary>
        /// <param name="source">Source</param>
        /// <param name="product">Direct product</param>
        /// <param name="arrows">Arrows to product components</param>
        /// <returns>Direct product</returns>
        ICategoryObject GetDirectProduct(ArrayList objects, ArrayList arrows);

        /// <summary>
        /// Gets arrow to direct product
        /// </summary>
        /// <param name="source">Source</param>
        /// <param name="product">Direct product</param>
        /// <param name="arrows">Arrows to product components</param>
        /// <returns>Arrow to product</returns>
        ICategoryArrow GetArrowToDirectProduct(ICategoryObject source, ICategoryObject product, ArrayList arrows);
    }

}
