//項目の比較
        private Boolean Comparison(InSet inSet1, InSet inSet2)
        {
            int count = 0;

            if (inSet1.count - inSet2.count != 1 && inSet2.count - inSet1.count != 1)
            {
                return(false);
            }

            for (int i = 0; i < input_count; i++)
            {
                //異なったら
                if (inSet1.pin[i] != inSet2.pin[i])
                {
                    count++;
                    if (count > 1)
                    {
                        return(false);
                    }
                }
            }
            //異なるのが1か所だったらTrue
            if (count == 1)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
        private void UpdateInputCount()
        {
            bool success = false;   //成功判定

            try
            {
                int input = int.Parse(Input_text.Text);
                if (input >= 2)
                {
                    success     = true;
                    input_count = input;
                }
                else
                {
                    OutputDebug("入力端子数は、2以上の整数値で入力してください。");
                }
                Input_text.Text = input_count.ToString();
            }
            catch (FormatException)
            {
                OutputDebug("入力端子数は、半角数字で入力してください。");
            }

            if (success)
            {
                OutputDebug("入力端子準備中…");
                InItInputPanel();
                InitPatternTable();
                current_set = new InSet(input_count);
                UpdateSetText();
                OutputDebug("入力端子準備完了-加法標準形か真理値表を入力して、算出ボタンをクリックしてください。");
                OutputDebug("入力パネルから加法標準形の式を入力できます。");
                OutputDebug("真理値表の出力値をクリックすることで、出力値を切り替えられます。");
            }
        }
        //重複要素の削除
        public List <InSet> DeleteSame()
        {
            List <InSet> new_List = new List <InSet>();

            foreach (InSet inSet in List_calc)
            {
                InSet same = new_List.Find(x => x.pin.SequenceEqual(inSet.pin));
                if (same == null)
                {
                    new_List.Add(inSet);
                }
            }

            return(new_List);
        }
        //既にあるかの確認
        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);
            }
        }
 //加算
 private void Add_Button_Click(object sender, RoutedEventArgs e)
 {
     if (CanUse(current_set))
     {
         if (List_true_set.Count > 0)
         {
             Form_text.Text = Form_text.Text + " +";
         }
         Form_text.Text = Form_text.Text + set_text.Text;
         List_true_set.Add(current_set);
         current_set = new InSet(input_count);
     }
     else
     {
         OutputDebug("その項目はすでに追加されています。");
     }
 }
        //項目の合成
        private InSet Merge(InSet inSet1, InSet inSet2)
        {
            InSet after = new InSet(input_count);

            for (int i = 0; i < input_count; i++)
            {
                //異なったら
                if (inSet1.pin[i] != inSet2.pin[i])
                {
                    after.pin[i] = -1;
                }
                //同じだったら
                else
                {
                    after.pin[i] = inSet1.pin[i];
                }
            }

            return(after);
        }
        //クワインマキラスキー計算
        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("計算完了");
        }