public bool SuyDien(List <string> left, List <string> right)
        {
            List <Luat> mangLuat = new List <Luat>();

            mangLuat = binLuat;
            List <string> KL = right;
            List <string> TG = left;

            TimTapSat(TG, mangLuat);
            while (SAT.Count > 0 && CheckIn(KL, TG) == false)
            {
                //lay luat r cuoi cung ra ap dung
                Luat r = SAT.ElementAt(0);
                mangLuat.Remove(r);
                SAT.RemoveAt(0);
                //them cai chua co vao TG
                foreach (string tg in r.vePhai)
                {
                    if (!TG.Contains(tg))
                    {
                        TG.Add(tg);
                        Console.WriteLine(tg);
                    }
                }

                TimTapSat(TG, mangLuat);
            }

            if (CheckIn(KL, TG) == false)
            {
                return(false);
            }
            else
            {
                return(true);
            }
        }
        public void DocLuat()
        {
            // lấy ra tất cả bản ghi luật từ bảng tập luật
            string qr = "select LUAT from tb_luat";

            // đẩy dữ liệu get ra vào datatable
            DataTable tbLuat = kn.TaoBang(qr);

            // duyệt list datatable vừa get ra
            for (int i = 0; i < tbLuat.Rows.Count; i++)
            {
                // lấy ra dữ liệu theo từng dòng của datatable và chuyển nó về dạng string
                string buff = tbLuat.Rows[i][0].ToString();

                Luat luatTG = new Luat();
                // khởi tạo biến là ký tự cần loại bỏ khỏi chuỗi string
                char[] delimiterChars = { '>' };
                // loại bỏ ký tự được khởi tạo bên trên khỏi chuỗi string
                string[] tg = buff.Split(delimiterChars);

                // xét dữ liệu tập luật truyền vào bên trái

                // khởi tạo biến là ký tự cần loại bỏ khỏi chuỗi string
                char[] delimiterChars1 = { '^' };
                // loại bỏ ký tự được cấu hình ở phần tử đầu tiên của chuỗi
                string[] left = tg[0].Split(delimiterChars1);

                int    j     = 0;
                string buff1 = left[0];
                while (buff1 != null)
                {
                    luatTG.veTrai.Add(buff1);
                    j++;
                    try
                    {
                        buff1 = left[j];
                    }
                    catch { buff1 = null; };
                }

                j = 0;


                //ben phai
                char[]   delimiterChars2 = { ',' };// cho nay thay , bang ^
                string[] right           = tg[1].Split(delimiterChars2);

                buff1 = right[0];
                while (buff1 != null)
                {
                    luatTG.vePhai.Add(buff1);
                    j++;
                    try
                    {
                        buff1 = right[j];
                    }
                    catch { buff1 = null; };
                }

                binLuat.Add(luatTG);
                demLuat++;
            }
        }