//既にあるかの確認
        public Boolean CanUse(InSet inSet)
        {
            inSet.CalcValue();

            //同値の項を検索
            InSet same = List_true_set.Find(x => x.pin.SequenceEqual(inSet.pin));

            //無ければ追加
            if (same == null)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
        //クワインマキラスキー計算
        public void Calc()
        {
            Boolean      keep           = true;               //計算継続の確認
            List <InSet> List_culc_next = new List <InSet>(); //計算結果格納用リスト

            OutputDebug("計算中です。。。");

            //パターンを導出
            List_calc.Clear();
            foreach (Pattern pattern in List_pattern)
            {
                if (pattern.OUT == 1)
                {
                    InSet inSet = new InSet(input_count);
                    for (int i = 0; i < input_count; i++)
                    {
                        inSet.pin[i] = pattern.Get_IN(i);
                    }
                    inSet.CalcValue();
                    List_value.Add(inSet.value);
                    List_calc.Add(inSet);
                }
            }
            List_value = List_value.Distinct().ToList();

            while (keep)
            {
                keep           = false;
                List_culc_next = new List <InSet>();
                for (int i = 0; i < List_calc.Count; i++)
                {
                    for (int j = i + 1; j < List_calc.Count; j++)
                    {
                        //比較して合成可能だったら
                        if (Comparison(List_calc[i], List_calc[j]))
                        {
                            //合成結果を格納用リストに格納
                            InSet merge = Merge(List_calc[i], List_calc[j]);
                            merge.List_value = List_calc[i].List_value;
                            merge.List_value.AddRange(List_calc[j].List_value);
                            merge.List_value = merge.List_value.Distinct().ToList();
                            merge.CalcValue();
                            List_culc_next.Add(merge);
                            List_calc[i].used = true;
                            List_calc[j].used = true;
                            keep = true;
                        }
                    }
                }
                //どれとも合成されなかった要素の継承
                for (int i = 0; i < List_calc.Count; i++)
                {
                    if (List_calc[i].used == false)
                    {
                        List_culc_next.Add(List_calc[i]);
                    }
                }
                List_calc = List_culc_next;
                List_calc = DeleteSame();
                string str = "";
                foreach (InSet inSet in List_calc)
                {
                    str += inSet.ToString() + " | ";
                }
                OutputDebug(str);
            }

            //不要項の整理
            CleanSet();

            DisplayAns();
            OutputDebug("計算完了");
        }