Example #1
0
        public Proposition TryInfer(bool?[] Arguements)
        {
            if (this.Single | !(Operation == Operations.Implication | Operation == Operations.Biconditional))
            {
                return(null);
            }
            Proposition CurrentProp = new Proposition();

            if ((_ARef != null) && (_ARef.IsTrue(Arguements) == true))
            {
                if (_BRef != null)
                {
                    return(_BRef);
                }
                else
                {
                    CurrentProp.setA(_B);
                    return(CurrentProp);
                }
            }
            else if (Arguements[0] == true && _ARef == null)
            {
                if (_BRef != null)
                {
                    return(_BRef);
                }
                else
                {
                    CurrentProp.setA(_B);
                    return(CurrentProp);
                }
            }
            return(null);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="left"></param>
        /// <param name="oper"></param>
        /// <param name="right">If right is null make a single prop</param>
        /// <returns></returns>
        private Proposition SetProp(string[] left, Operations oper, string[] right)
        {
            Proposition returnProp = new Proposition();


            if (left.Length == 1)
            {
                if (left[0][0] == '~') // "~A"
                {
                    left[0]            = left[0].Substring(1);
                    returnProp.ANotted = true;
                }
                returnProp.setA(String2Symbol(left[0]));
            }
            else
            {
                returnProp.setA(generateProp(left));
            }

            if (right != null) // multi argument prop
            {
                if (right.Length == 1)
                {
                    if (right[0][0] == '~') // "~A"
                    {
                        right[0]           = right[0].Substring(1);
                        returnProp.BNotted = true;
                    }
                    returnProp.setB(String2Symbol(right[0]));
                }
                else
                {
                    returnProp.setB(generateProp(right));
                }
                returnProp.Operation = oper;
            }



            return(returnProp);
        }