Documentation

Matroid.ForMathlib.Data.Set.IndexedPartition

structure Set.IndexedPartition {α : Type u_2} (s : Set α) (ι : Type u_3) :
Type (max u_2 u_3)
Instances For
    @[implicit_reducible]
    instance Set.IndexedPartition.instFunLike {α : Type u_1} {s : Set α} {ι : Type u_2} :
    Equations
    @[simp]
    theorem Set.IndexedPartition.toFun_eq_coe {α : Type u_1} {s : Set α} {ι : Type u_2} (P : s.IndexedPartition ι) :
    P.toFun = P
    @[simp]
    theorem Set.IndexedPartition.mk_apply {α : Type u_1} {s : Set α} {ι : Type u_2} (f : ιSet α) (dj : Pairwise (Function.onFun Disjoint f)) (hu : ⋃ (i : ι), f i = s) (i : ι) :
    { toFun := f, pairwise_disjoint' := dj, iUnion_eq' := hu } i = f i
    theorem Set.IndexedPartition.ext {α : Type u_1} {s : Set α} {ι : Type u_2} {P Q : s.IndexedPartition ι} (h : ∀ (i : ι), P i = Q i) :
    P = Q
    theorem Set.IndexedPartition.disjoint {α : Type u_1} {s : Set α} {ι : Type u_2} {i j : ι} (P : s.IndexedPartition ι) (hij : i j) :
    Disjoint (P i) (P j)
    theorem Set.IndexedPartition.iUnion_eq {α : Type u_1} {s : Set α} {ι : Type u_2} (P : s.IndexedPartition ι) :
    ⋃ (i : ι), P i = s
    @[simp]
    theorem Set.IndexedPartition.subset {α : Type u_1} {s : Set α} {ι : Type u_2} (P : s.IndexedPartition ι) {i : ι} :
    P i s
    @[simp]
    theorem Set.IndexedPartition.inter_ground_left {α : Type u_1} {s : Set α} {ι : Type u_2} (P : s.IndexedPartition ι) (i : ι) :
    P i s = P i
    @[simp]
    theorem Set.IndexedPartition.inter_ground_right {α : Type u_1} {s : Set α} {ι : Type u_2} (P : s.IndexedPartition ι) (i : ι) :
    s P i = P i
    theorem Set.IndexedPartition.exists_mem {α : Type u_1} {s : Set α} {ι : Type u_2} (P : s.IndexedPartition ι) {a : α} (ha : a s) :
    ∃ (i : ι), a P i
    theorem Set.IndexedPartition.eq_of_mem_of_mem {α : Type u_1} {s : Set α} {ι : Type u_2} {i j : ι} {P : s.IndexedPartition ι} {a : α} (hi : a P i) (hj : a P j) :
    i = j
    theorem Set.IndexedPartition.single_eq_diff_iUnion {α : Type u_1} {s : Set α} {ι : Type u_2} (P : s.IndexedPartition ι) (i : ι) :
    P i = s \ ⋃ (j : ι), ⋃ (_ : j i), P j
    theorem Set.IndexedPartition.ext' {α : Type u_1} {s : Set α} {ι : Type u_2} {P Q : s.IndexedPartition ι} {j : ι} (h : ∀ (i : ι), i jP i = Q i) :
    P = Q
    def Set.IndexedPartition.copy {α : Type u_1} {s t : Set α} {ι : Type u_2} (P : s.IndexedPartition ι) (h_eq : s = t) :

    Transfer a partition across a set equality.

    Equations
    • P.copy h_eq = { toFun := P.toFun, pairwise_disjoint' := , iUnion_eq' := }
    Instances For
      @[simp]
      theorem Set.IndexedPartition.copy_apply {α : Type u_1} {s t : Set α} {ι : Type u_2} (P : s.IndexedPartition ι) (h_eq : s = t) (i : ι) :
      (P.copy h_eq) i = P i
      def Set.IndexedPartition.copyEquiv {α : Type u_1} {s t : Set α} {ι : Type u_2} (h_eq : s = t) :
      Equations
      Instances For
        @[simp]
        theorem Set.IndexedPartition.copyEquiv_apply {α : Type u_1} {s t : Set α} {ι : Type u_2} (h_eq : s = t) (P : s.IndexedPartition ι) :
        @[simp]
        theorem Set.IndexedPartition.copyEquiv_symm_apply {α : Type u_1} {s t : Set α} {ι : Type u_2} (h_eq : s = t) (P : t.IndexedPartition ι) :
        def Set.IndexedPartition.induce {α : Type u_1} {s t : Set α} {ι : Type u_2} (P : s.IndexedPartition ι) (hts : t s) :

        Intersect a partition with a smaller set

        Equations
        • P.induce hts = { toFun := fun (i : ι) => P i t, pairwise_disjoint' := , iUnion_eq' := }
        Instances For
          @[simp]
          theorem Set.IndexedPartition.induce_apply {α : Type u_1} {s t : Set α} {ι : Type u_2} {P : s.IndexedPartition ι} {hts : t s} {i : ι} :
          (P.induce hts) i = P i t
          @[simp]
          theorem Set.IndexedPartition.induce_induce {α : Type u_1} {r s t : Set α} {ι : Type u_2} (P : s.IndexedPartition ι) (hts : t s) (hrt : r t) :
          (P.induce hts).induce hrt = P.induce
          @[simp]
          theorem Set.IndexedPartition.induce_rfl {α : Type u_1} {s : Set α} {ι : Type u_2} (P : s.IndexedPartition ι) (h : s s := ) :
          P.induce h = P
          def Set.IndexedPartition.LE {α : Type u_1} {s t : Set α} {ι : Type u_2} (P : s.IndexedPartition ι) (Q : t.IndexedPartition ι) :

          IndexedPartition.LE P Q, written P ≤ Q, means that every cell of P is contained in the corresponding cell of Q.

          Equations
          • P.LE Q = ∀ (i : ι), P i Q i
          Instances For
            Equations
            • One or more equations did not get rendered due to their size.
            Instances For
              theorem Set.IndexedPartition.le_iff {α : Type u_1} {s t : Set α} {ι : Type u_2} {P : s.IndexedPartition ι} {Q : t.IndexedPartition ι} :
              P.LE Q ∀ (i : ι), P i Q i
              theorem Set.IndexedPartition.LE.trans {α : Type u_1} {r s t : Set α} {ι : Type u_2} {P : r.IndexedPartition ι} {Q : s.IndexedPartition ι} (R : t.IndexedPartition ι) (hPQ : P.LE Q) (hQR : Q.LE R) :
              P.LE R
              theorem Set.IndexedPartition.LE.subset {α : Type u_1} {s t : Set α} {ι : Type u_2} {P : s.IndexedPartition ι} {Q : t.IndexedPartition ι} (hPQ : P.LE Q) :
              s t
              theorem Set.IndexedPartition.LE.disjoint_of_ne {α : Type u_1} {s t : Set α} {ι : Type u_2} {i j : ι} {P : s.IndexedPartition ι} {Q : t.IndexedPartition ι} (hPQ : P.LE Q) (hij : i j) :
              Disjoint (P i) (Q j)
              theorem Set.IndexedPartition.LE.eq_induce {α : Type u_1} {s t : Set α} {ι : Type u_2} {P : s.IndexedPartition ι} {Q : t.IndexedPartition ι} (hPQ : P.LE Q) :
              P = Q.induce
              theorem Set.IndexedPartition.LE.eq {α : Type u_1} {s : Set α} {ι : Type u_2} {P Q : s.IndexedPartition ι} (hPQ : P.LE Q) :
              P = Q
              @[simp]
              theorem Set.IndexedPartition.le_refl {α : Type u_1} {s : Set α} {ι : Type u_2} (P : s.IndexedPartition ι) :
              P.LE P
              theorem Set.IndexedPartition.induce_le {α : Type u_1} {s t : Set α} {ι : Type u_2} (P : s.IndexedPartition ι) (hts : t s) :
              (P.induce hts).LE P
              def Set.IndexedPartition.union {α : Type u_1} {s t : Set α} {ι : Type u_2} (P : s.IndexedPartition ι) (Q : t.IndexedPartition ι) (h : Disjoint s t) :
              Equations
              • P.union Q h = { toFun := fun (i : ι) => P i Q i, pairwise_disjoint' := , iUnion_eq' := }
              Instances For
                @[simp]
                theorem Set.IndexedPartition.union_apply {α : Type u_1} {s t : Set α} {ι : Type u_2} {i : ι} (P : s.IndexedPartition ι) (Q : t.IndexedPartition ι) {hdj : Disjoint s t} :
                (P.union Q hdj) i = P i Q i
                def Set.IndexedPartition.single {α : Type u_1} {ι : Type u_2} [DecidableEq ι] (s : Set α) (i : ι) :

                The partition of s with part i equal to s and the other parts empty.

                Equations
                Instances For
                  @[simp]
                  theorem Set.IndexedPartition.single_apply {α : Type u_1} {ι : Type u_2} [DecidableEq ι] (s : Set α) (i : ι) :
                  theorem Set.IndexedPartition.single_apply_of_ne {α : Type u_1} {ι : Type u_2} {i j : ι} [DecidableEq ι] (s : Set α) (hne : j i) :
                  def Set.IndexedPartition.shift {α : Type u_1} {s : Set α} {ι : Type u_2} [DecidableEq ι] (P : s.IndexedPartition ι) (t : Set α) (i : ι) :

                  Turn a partition of s into a partition of t by intersecting each part with t, then adding the elements of t \ s into part i.

                  Equations
                  Instances For
                    @[simp]
                    theorem Set.IndexedPartition.shift_apply {α : Type u_1} {s : Set α} {ι : Type u_2} [DecidableEq ι] (P : s.IndexedPartition ι) (t : Set α) (i : ι) :
                    (P.shift t i) i = P i t t \ s
                    theorem Set.IndexedPartition.shift_apply_of_ne {α : Type u_1} {s : Set α} {ι : Type u_2} {i j : ι} [DecidableEq ι] (P : s.IndexedPartition ι) {t : Set α} (hne : j i) :
                    (P.shift t i) j = P j t
                    theorem Set.IndexedPartition.shift_apply_eq_ite {α : Type u_1} {s : Set α} {ι : Type u_2} {j : ι} [DecidableEq ι] (P : s.IndexedPartition ι) (t : Set α) (i : ι) :
                    (P.shift t i) j = if j = i then P j t t \ s else P j t
                    @[simp]
                    theorem Set.IndexedPartition.shift_copy {α : Type u_1} {s t : Set α} {ι : Type u_2} [DecidableEq ι] (P : s.IndexedPartition ι) {t' : Set α} (h : t = t') (i : ι) :
                    (P.shift t i).copy h = P.shift t' i
                    @[simp]
                    theorem Set.IndexedPartition.copy_shift {α : Type u_1} {s t : Set α} {ι : Type u_2} [DecidableEq ι] (P : s.IndexedPartition ι) {s' : Set α} (h : s = s') (i : ι) :
                    (P.copy h).shift t i = P.shift t i
                    def Set.IndexedPartition.expand {α : Type u_1} {s t : Set α} {ι : Type u_2} [DecidableEq ι] (P : s.IndexedPartition ι) :
                    s t(i : ι) → t.IndexedPartition ι

                    A version of shift where the new ground set is required to be a superset. Has better simp lemmas than shift.

                    Equations
                    Instances For
                      theorem Set.IndexedPartition.expand_apply {α : Type u_1} {s t : Set α} {ι : Type u_2} [DecidableEq ι] (P : s.IndexedPartition ι) (h : s t) (i j : ι) :
                      (P.expand h i) j = if j = i then P j t \ s else P j
                      @[simp]
                      theorem Set.IndexedPartition.expand_apply_self {α : Type u_1} {s t : Set α} {ι : Type u_2} [DecidableEq ι] (P : s.IndexedPartition ι) (h : s t) (i : ι) :
                      (P.expand h i) i = P i t \ s
                      theorem Set.IndexedPartition.expand_apply_of_ne {α : Type u_1} {s t : Set α} {ι : Type u_2} {i j : ι} [DecidableEq ι] (P : s.IndexedPartition ι) (h : s t) (hne : j i) :
                      (P.expand h i) j = P j
                      @[simp]
                      theorem Set.IndexedPartition.expand_copy {α : Type u_1} {s t : Set α} {ι : Type u_2} [DecidableEq ι] (P : s.IndexedPartition ι) {t' : Set α} (hst : s t) (h : t = t') (i : ι) :
                      (P.expand hst i).copy h = P.expand i
                      @[simp]
                      theorem Set.IndexedPartition.copy_expand {α : Type u_1} {s t : Set α} {ι : Type u_2} [DecidableEq ι] (P : s.IndexedPartition ι) {s' : Set α} (h : s = s') (hst : s' t) (i : ι) :
                      (P.copy h).expand hst i = P.expand i
                      @[simp]
                      theorem Set.IndexedPartition.expand_induce {α : Type u_1} {s t : Set α} {ι : Type u_2} [DecidableEq ι] (P : s.IndexedPartition ι) (h : s t) (i : ι) :
                      (P.expand h i).induce h = P
                      theorem Set.IndexedPartition.le_expand {α : Type u_1} {s t : Set α} {ι : Type u_2} [DecidableEq ι] (P : s.IndexedPartition ι) (h : s t) (i : ι) :
                      P.LE (P.expand h i)
                      def Set.IndexedPartition.diff {α : Type u_1} {s : Set α} {ι : Type u_2} (P : s.IndexedPartition ι) (t : Set α) :

                      Remove the elements of t from each cell of a partition of s to get a partition of s \ t.

                      Equations
                      Instances For
                        @[simp]
                        theorem Set.IndexedPartition.diff_apply {α : Type u_1} {s : Set α} {ι : Type u_2} (P : s.IndexedPartition ι) (t : Set α) (i : ι) :
                        (P.diff t) i = P i \ t
                        @[simp]
                        theorem Set.IndexedPartition.subset_of_diff {α : Type u_1} {s t : Set α} {ι : Type u_2} (P : (s \ t).IndexedPartition ι) (i : ι) :
                        P i s
                        @[simp]
                        theorem Set.IndexedPartition.disjoint_of_diff {α : Type u_1} {s t : Set α} {ι : Type u_2} (P : (s \ t).IndexedPartition ι) (i : ι) :
                        Disjoint (P i) t
                        def Set.IndexedPartition.Trivial {α : Type u_1} {s : Set α} {ι : Type u_2} (P : s.IndexedPartition ι) :

                        A partition is Trivial if it has at most one nonempty cell.

                        Equations
                        Instances For
                          theorem Set.IndexedPartition.trivial_def {α : Type u_1} {s : Set α} {ι : Type u_2} {P : s.IndexedPartition ι} :
                          P.Trivial ∃ (i : ι), P i = s
                          theorem Set.IndexedPartition.Trivial.exists_eq_single {α : Type u_1} {s : Set α} {ι : Type u_2} {P : s.IndexedPartition ι} [DecidableEq ι] (h : P.Trivial) :
                          ∃ (i : ι), P = IndexedPartition.single s i
                          theorem Set.IndexedPartition.trivial_of_subsingleton {α : Type u_1} {s : Set α} {ι : Type u_2} [Nonempty ι] (P : s.IndexedPartition ι) (h : s.Subsingleton) :
                          structure Set.IndexedPartition.Nontrivial {α : Type u_1} {s : Set α} {ι : Type u_2} (P : s.IndexedPartition ι) :

                          A partition is nontrivial if all cells are nonempty. If there are at least three indices, this is not the negation of Partition.Trivial. Better name?

                          Instances For
                            theorem Set.IndexedPartition.nontrivial_iff {α : Type u_1} {s : Set α} {ι : Type u_2} (P : s.IndexedPartition ι) :
                            P.Nontrivial ∀ (i : ι), (P i).Nonempty
                            theorem Set.IndexedPartition.Nontrivial.ssubset {α : Type u_1} {s : Set α} {ι : Type u_2} {P : s.IndexedPartition ι} [Nontrivial ι] (h : P.Nontrivial) {i : ι} :
                            P i s
                            def Set.IndexedPartition.prod {α : Type u_1} {s : Set α} {ι η : Type} (P : s.IndexedPartition ι) (Q : s.IndexedPartition η) :
                            Equations
                            • P.prod Q = { toFun := fun (i : ι × η) => P i.1 Q i.2, pairwise_disjoint' := , iUnion_eq' := }
                            Instances For
                              @[simp]
                              theorem Set.IndexedPartition.prod_apply {α : Type u_1} {s : Set α} {ι η : Type} (P : s.IndexedPartition ι) (Q : s.IndexedPartition η) (i : ι × η) :
                              (P.prod Q) i = P i.1 Q i.2
                              def Set.IndexedPartition.comp {α : Type u_1} {s : Set α} {ι : Type u_2} {η : Type u_3} (P : s.IndexedPartition ι) (f : ιη) :
                              Equations
                              • P.comp f = { toFun := fun (i : η) => ⋃ (j : ι), ⋃ (_ : f j = i), P j, pairwise_disjoint' := , iUnion_eq' := }
                              Instances For
                                @[simp]
                                theorem Set.IndexedPartition.comp_apply {α : Type u_1} {s : Set α} {ι : Type u_2} {η : Type u_3} (P : s.IndexedPartition ι) (f : ιη) (i : η) :
                                (P.comp f) i = ⋃ (j : ι), ⋃ (_ : f j = i), P j
                                theorem Set.IndexedPartition.comp_comp {α : Type u_1} {s : Set α} {ι : Type u_2} {η : Type u_4} {ξ : Type u_5} (P : s.IndexedPartition ι) (f : ιη) (g : ηξ) :
                                (P.comp f).comp g = P.comp (g f)
                                theorem Set.IndexedPartition.comp_apply_equiv {α : Type u_1} {s : Set α} {ι : Type u_2} {η : Type u_3} (P : s.IndexedPartition ι) (f : ι η) (i : η) :
                                (P.comp f) i = P (f.symm i)
                                theorem Set.IndexedPartition.ext_bool' {α : Type u_1} {s : Set α} {P P' : s.IndexedPartition Bool} (i : Bool) (h : P i = P' i) :
                                P = P'
                                theorem Set.IndexedPartition.ext_bool {α : Type u_1} {s : Set α} {P P' : s.IndexedPartition Bool} (h : P true = P' true) :
                                P = P'
                                theorem Set.IndexedPartition.ext_iff {α : Type u_1} {s : Set α} {P P' : s.IndexedPartition Bool} (b : Bool) :
                                P = P' P b = P' b
                                @[simp]
                                theorem Set.IndexedPartition.union_eq' {α : Type u_1} {s : Set α} {P : s.IndexedPartition Bool} :
                                P false P true = s
                                @[simp]
                                theorem Set.IndexedPartition.union_eq {α : Type u_1} {s : Set α} {P : s.IndexedPartition Bool} :
                                P true P false = s
                                @[simp]
                                theorem Set.IndexedPartition.union_bool_eq {α : Type u_1} {s : Set α} {P : s.IndexedPartition Bool} (b : Bool) :
                                (P b P !b) = s
                                @[simp]
                                theorem Set.IndexedPartition.union_bool_eq' {α : Type u_1} {s : Set α} {P : s.IndexedPartition Bool} (b : Bool) :
                                (P !b) P b = s
                                @[simp]
                                @[simp]
                                @[simp]
                                theorem Set.IndexedPartition.disjoint_bool {α : Type u_1} {s : Set α} {P : s.IndexedPartition Bool} (b : Bool) :
                                Disjoint (P b) (P !b)
                                @[simp]
                                theorem Set.IndexedPartition.compl_eq {α : Type u_1} {s : Set α} (P : s.IndexedPartition Bool) (b : Bool) :
                                s \ P b = P !b
                                theorem Set.IndexedPartition.compl_not_eq {α : Type u_1} {s : Set α} (P : s.IndexedPartition Bool) (b : Bool) :
                                (s \ P !b) = P b
                                def Set.Disjoint.toIndexedPartition {α : Type u_1} {r s t : Set α} (disjoint : Disjoint r s) (union_eq : r s = t) :
                                Equations
                                Instances For
                                  @[simp]
                                  theorem Set.Disjoint.toIndexedPartition_true {α : Type u_1} {r s t : Set α} {disjoint : Disjoint r s} {union_eq : r s = t} :
                                  (Disjoint.toIndexedPartition disjoint union_eq) true = r
                                  @[simp]
                                  theorem Set.Disjoint.toBipartition_false {α : Type u_1} {r s t : Set α} {disjoint : Disjoint r s} {union_eq : r s = t} :
                                  (Disjoint.toIndexedPartition disjoint union_eq) false = s
                                  theorem Set.IndexedPartition.mem_or_mem {α : Type u_1} {s : Set α} (P : s.IndexedPartition Bool) {a : α} (ha : a s) :
                                  a P true a P false
                                  Equations
                                  • P.symm = { toFun := fun (b : Bool) => P !b, pairwise_disjoint' := , iUnion_eq' := }
                                  Instances For
                                    @[simp]
                                    theorem Set.IndexedPartition.symm_apply {α : Type u_1} {s : Set α} (P : s.IndexedPartition Bool) (b : Bool) :
                                    P.symm b = P !b
                                    @[simp]
                                    theorem Set.IndexedPartition.symm_symm {α : Type u_1} {s : Set α} (P : s.IndexedPartition Bool) :
                                    P.symm.symm = P

                                    If b is true, then P.symm, otherwise P.

                                    Equations
                                    Instances For
                                      @[simp]
                                      theorem Set.IndexedPartition.bSymm_apply {α : Type u_1} {s : Set α} (P : s.IndexedPartition Bool) (b i : Bool) :
                                      (P.bSymm b) i = P (i != b)
                                      @[simp]
                                      theorem Set.IndexedPartition.bSymm_false {α : Type u_1} {s : Set α} (P : s.IndexedPartition Bool) :
                                      @[simp]
                                      theorem Set.IndexedPartition.bSymm_true {α : Type u_1} {s : Set α} (P : s.IndexedPartition Bool) :
                                      @[simp]
                                      theorem Set.IndexedPartition.bSymm_bSymm {α : Type u_1} {s : Set α} (P : s.IndexedPartition Bool) (b c : Bool) :
                                      (P.bSymm b).bSymm c = P.bSymm (b != c)
                                      theorem Set.IndexedPartition.compl_true {α : Type u_1} {s : Set α} (P : s.IndexedPartition Bool) :
                                      s \ P true = P false
                                      @[simp]
                                      theorem Set.IndexedPartition.compl_false {α : Type u_1} {s : Set α} (P : s.IndexedPartition Bool) :
                                      s \ P false = P true
                                      theorem Set.IndexedPartition.trivial_of_eq {α : Type u_1} {s : Set α} {P : s.IndexedPartition Bool} {i : Bool} (h : P i = s) :
                                      theorem Set.IndexedPartition.trivial_of_eq_empty {α : Type u_1} {s : Set α} {P : s.IndexedPartition Bool} {i : Bool} (h : P i = ) :
                                      theorem Set.IndexedPartition.trivial_def_bool {α : Type u_1} {s : Set α} {P : s.IndexedPartition Bool} (i : Bool) :
                                      P.Trivial P i = (P !i) =
                                      theorem Set.IndexedPartition.trivial_def_bool' {α : Type u_1} {s : Set α} {P : s.IndexedPartition Bool} (i : Bool) :
                                      P.Trivial P i = s (P !i) = s
                                      theorem Set.IndexedPartition.Trivial.exists_eq {α : Type u_1} {s : Set α} {P : s.IndexedPartition Bool} (h : P.Trivial) :
                                      ∃ (b : Bool), P b = s
                                      theorem Set.IndexedPartition.Trivial.exists_eq_empty {α : Type u_1} {s : Set α} {P : s.IndexedPartition Bool} (h : P.Trivial) :
                                      ∃ (b : Bool), P b =
                                      theorem Set.IndexedPartition.Trivial.exists_eq_eq {α : Type u_1} {s : Set α} {P : s.IndexedPartition Bool} (h : P.Trivial) :
                                      ∃ (b : Bool), P b = (P !b) = s
                                      @[simp]
                                      theorem Set.IndexedPartition.induce_symm {α : Type u_1} {s t : Set α} (P : s.IndexedPartition Bool) (h : t s) :
                                      (P.induce h).symm = P.symm.induce h
                                      @[simp]
                                      theorem Set.IndexedPartition.expand_apply_not {α : Type u_1} {s t : Set α} (P : s.IndexedPartition Bool) (h : s t) (i : Bool) :
                                      ((P.expand h i) !i) = P !i
                                      @[simp]
                                      theorem Set.IndexedPartition.expand_not_apply {α : Type u_1} {s t : Set α} (P : s.IndexedPartition Bool) (h : s t) (i : Bool) :
                                      (P.expand h !i) i = P i
                                      @[simp]
                                      theorem Set.IndexedPartition.expand_false_true {α : Type u_1} {s t : Set α} (P : s.IndexedPartition Bool) (h : s t) :
                                      @[simp]
                                      theorem Set.IndexedPartition.expand_true_false {α : Type u_1} {s t : Set α} (P : s.IndexedPartition Bool) (h : s t) :
                                      @[simp]
                                      theorem Set.IndexedPartition.expand_symm {α : Type u_1} {s t : Set α} (P : s.IndexedPartition Bool) (h : s t) (i : Bool) :
                                      (P.expand h i).symm = P.symm.expand h !i
                                      def Set.IndexedPartition.ofSubset {α : Type u_1} {s t : Set α} (hst : s t) (i : Bool) :

                                      The bipartition of t with a subset s on side i, and t \ s on side !i.

                                      Equations
                                      Instances For
                                        @[simp]
                                        theorem Set.IndexedPartition.ofSubset_apply {α : Type u_1} {s t : Set α} (hst : s t) (i j : Bool) :
                                        (IndexedPartition.ofSubset hst i) j = bif j == i then s else t \ s
                                        theorem Set.IndexedPartition.ofSubset_apply_self {α : Type u_1} {s t : Set α} (hst : s t) (i : Bool) :
                                        theorem Set.IndexedPartition.ofSubset_apply_not {α : Type u_1} {s t : Set α} (hst : s t) (i : Bool) :
                                        theorem Set.IndexedPartition.ofSubset_not_apply {α : Type u_1} {s t : Set α} (hst : s t) (i : Bool) :
                                        @[simp]
                                        theorem Set.IndexedPartition.ofSubset_copy {α : Type u_1} {r s t : Set α} {i : Bool} (hst : s t) (htr : t = r) :
                                        def Set.IndexedPartition.cross {α : Type u_1} {s : Set α} (P Q : s.IndexedPartition Bool) (b c i : Bool) :

                                        The bipartition whose i side is P b ∩ Q c and whose (!i) side is P !b ∪ Q !c. Varying b, c and i give the eight possible bipartitions arising from the 2x2 grid given by P and Q.

                                        Equations
                                        Instances For
                                          @[simp]
                                          theorem Set.IndexedPartition.cross_apply_self {α : Type u_1} {s : Set α} {i b c : Bool} (P Q : s.IndexedPartition Bool) :
                                          (P.cross Q b c i) i = P b Q c
                                          @[simp]
                                          theorem Set.IndexedPartition.cross_apply_not {α : Type u_1} {s : Set α} {i b c : Bool} (P Q : s.IndexedPartition Bool) :
                                          ((P.cross Q b c i) !i) = (P !b) Q !c
                                          @[simp]
                                          theorem Set.IndexedPartition.cross_not_apply {α : Type u_1} {s : Set α} {i b c : Bool} (P Q : s.IndexedPartition Bool) :
                                          (P.cross Q b c !i) i = (P !b) Q !c
                                          theorem Set.IndexedPartition.cross_apply {α : Type u_1} {s : Set α} {i j b c : Bool} (P Q : s.IndexedPartition Bool) :
                                          (P.cross Q b c i) j = bif j == i then P b Q c else (P !b) Q !c
                                          @[simp]
                                          theorem Set.IndexedPartition.cross_symm {α : Type u_1} {s : Set α} (P Q : s.IndexedPartition Bool) (b c i : Bool) :
                                          (P.cross Q b c i).symm = P.cross Q b c !i
                                          @[simp]
                                          theorem Set.IndexedPartition.cross_symm_left {α : Type u_1} {s : Set α} (P Q : s.IndexedPartition Bool) (b c i : Bool) :
                                          P.symm.cross Q b c i = P.cross Q (!b) c i
                                          @[simp]
                                          theorem Set.IndexedPartition.cross_symm_right {α : Type u_1} {s : Set α} (P Q : s.IndexedPartition Bool) (b c i : Bool) :
                                          P.cross Q.symm b c i = P.cross Q b (!c) i
                                          @[simp]
                                          theorem Set.IndexedPartition.cross_bSymm_left {α : Type u_1} {s : Set α} (P Q : s.IndexedPartition Bool) (b b' c i : Bool) :
                                          (P.bSymm b').cross Q b c i = P.cross Q (b != b') c i
                                          @[simp]
                                          theorem Set.IndexedPartition.cross_bSymm_right {α : Type u_1} {s : Set α} (P Q : s.IndexedPartition Bool) (b c c' i : Bool) :
                                          P.cross (Q.bSymm c') b c i = P.cross Q b (c != c') i
                                          @[simp]
                                          theorem Set.IndexedPartition.cross_bSymm {α : Type u_1} {s : Set α} (P Q : s.IndexedPartition Bool) (b c i j : Bool) :
                                          (P.cross Q b c i).bSymm j = P.cross Q b c (i != j)
                                          theorem Set.IndexedPartition.cross_comm {α : Type u_1} {s : Set α} {i : Bool} (P Q : s.IndexedPartition Bool) (b c : Bool) :
                                          P.cross Q b c i = Q.cross P c b i
                                          theorem Set.IndexedPartition.Nontrivial.cross_trivial_iff {α : Type u_1} {s : Set α} {P Q : s.IndexedPartition Bool} (hP : P.Nontrivial) (b c i : Bool) :
                                          (P.cross Q b c i).Trivial P b Q !c Q c P !b
                                          theorem Set.IndexedPartition.cross_trivial_iff {α : Type u_1} {s : Set α} {i : Bool} (P Q : s.IndexedPartition Bool) (b c : Bool) :
                                          (P.cross Q b c i).Trivial P b Q !c Q c P !b P b = s Q c = s

                                          The bipartition whose true side is P true ∩ Q true and whose false side is P false ∪ Q false

                                          Equations
                                          Instances For

                                            The bipartition whose true side is P true ∪ Q true and whose false side is P false ∩ Q false

                                            Equations
                                            Instances For
                                              @[simp]
                                              theorem Set.IndexedPartition.disjoint_inter_right {α : Type u_1} {r s t : Set α} (P : s.IndexedPartition Bool) :
                                              Disjoint (P true t) (P false r)
                                              @[simp]
                                              theorem Set.IndexedPartition.disjoint_inter_left {α : Type u_1} {r s t : Set α} (P : s.IndexedPartition Bool) :
                                              Disjoint (t P true) (r P false)
                                              @[simp]
                                              theorem Set.IndexedPartition.disjoint_bool_inter_right {α : Type u_1} {r s t : Set α} (P : s.IndexedPartition Bool) (i : Bool) :
                                              Disjoint (P i t) ((P !i) r)
                                              @[simp]
                                              theorem Set.IndexedPartition.disjoint_bool_inter_left {α : Type u_1} {r s t : Set α} (P : s.IndexedPartition Bool) (i : Bool) :
                                              Disjoint (t P i) (r P !i)
                                              @[simp]
                                              theorem Set.IndexedPartition.disjoint_bool_inter_right' {α : Type u_1} {r s t : Set α} (P : s.IndexedPartition Bool) (i : Bool) :
                                              Disjoint ((P !i) t) (P i r)
                                              @[simp]
                                              theorem Set.IndexedPartition.disjoint_bool_inter_left' {α : Type u_1} {r s t : Set α} (P : s.IndexedPartition Bool) (i : Bool) :
                                              Disjoint (t P !i) (r P i)
                                              @[simp]
                                              theorem Set.IndexedPartition.inter_ground_eq {α : Type u_1} {s : Set α} (P : s.IndexedPartition Bool) (b : Bool) :
                                              P b s = P b
                                              theorem Set.IndexedPartition.union_inter_right' {α : Type u_1} {s : Set α} (P : s.IndexedPartition Bool) (X : Set α) (b : Bool) :
                                              P b X (P !b) X = X s
                                              theorem Set.IndexedPartition.union_inter_left' {α : Type u_1} {s : Set α} (P : s.IndexedPartition Bool) (X : Set α) (b : Bool) :
                                              (X P b X P !b) = X s
                                              theorem Set.IndexedPartition.union_inter_right {α : Type u_1} {s t : Set α} (P : s.IndexedPartition Bool) (h : t s) (b : Bool) :
                                              P b t (P !b) t = t
                                              theorem Set.IndexedPartition.union_inter_left {α : Type u_1} {s t : Set α} (P : s.IndexedPartition Bool) (h : t s) (b : Bool) :
                                              (t P b t P !b) = t