Documentation

LeanPool.Brouwer.Primitive

Primitive sets and the slack-vector form of Scarf's lemma #

This file reformulates rooms and doors of an IndexedLOrder in terms of primitive sets over the enlarged good set T ⊕ I, the "slack-vector" language of Scarf's algorithm. It relates the room/door combinatorics developed in Scarf to this primitive-set picture used by the path-following termination argument.

@[reducible, inline]
abbrev IndexedLOrder.ExtendedGoods (T : Type u_3) (I : Type u_4) :
Type (max u_3 u_4)

The abstract enlargement T ∪ I used for Scarf's slack-vector language.

Equations
Instances For
    def IndexedLOrder.toPrimitiveSet {T : Type u_1} {I : Type u_2} [Fintype I] [DecidableEq T] [DecidableEq I] (σ : Finset T) (C : Finset I) :

    Turn a room (σ, C) into the corresponding primitive set σ ∪ (I \ C).

    Equations
    Instances For
      def IndexedLOrder.toAlmostPrimitive {T : Type u_1} {I : Type u_2} [Fintype I] [DecidableEq T] [DecidableEq I] (τ : Finset T) (D : Finset I) :

      Turn a door (τ, D) into the corresponding almost primitive set τ ∪ (I \ D).

      Equations
      Instances For
        def IndexedLOrder.fromGoods {T : Type u_1} {I : Type u_2} [Fintype T] [DecidableEq T] [DecidableEq I] (X : Finset (ExtendedGoods T I)) :

        The goods part of a subset of T ∪ I.

        Equations
        Instances For
          def IndexedLOrder.fromMissing {T : Type u_1} {I : Type u_2} [Fintype I] [DecidableEq T] [DecidableEq I] (X : Finset (ExtendedGoods T I)) :

          The indices whose slack vectors are missing from a subset of T ∪ I.

          Equations
          Instances For
            def IndexedLOrder.associatedCell {T : Type u_1} {I : Type u_2} [Fintype T] [Fintype I] [DecidableEq T] [DecidableEq I] (X : Finset (ExtendedGoods T I)) :
            GiCell T I

            The room/door cell associated to a subset of T ∪ I.

            Equations
            Instances For
              @[simp]
              @[simp]
              theorem IndexedLOrder.mem_toPrimitiveSet_inl {T : Type u_1} {I : Type u_2} [Fintype I] [DecidableEq T] [DecidableEq I] {σ : Finset T} {C : Finset I} {t : T} :
              @[simp]
              theorem IndexedLOrder.mem_toPrimitiveSet_inr {T : Type u_1} {I : Type u_2} [Inhabited T] [Fintype I] [DecidableEq T] [DecidableEq I] {σ : Finset T} {C : Finset I} {i : I} :
              Sum.inr i toPrimitiveSet σ C iC
              @[simp]
              theorem IndexedLOrder.mem_toAlmostPrimitive_inl {T : Type u_1} {I : Type u_2} [Fintype I] [DecidableEq T] [DecidableEq I] {τ : Finset T} {D : Finset I} {t : T} :
              @[simp]
              theorem IndexedLOrder.mem_toAlmostPrimitive_inr {T : Type u_1} {I : Type u_2} [Inhabited T] [Fintype I] [DecidableEq T] [DecidableEq I] {τ : Finset T} {D : Finset I} {i : I} :
              @[simp]
              theorem IndexedLOrder.mem_fromGoods {T : Type u_1} {I : Type u_2} [Fintype T] [DecidableEq T] [DecidableEq I] {X : Finset (ExtendedGoods T I)} {t : T} :
              @[simp]
              theorem IndexedLOrder.mem_fromMissing {T : Type u_1} {I : Type u_2} [Fintype I] [DecidableEq T] [DecidableEq I] {X : Finset (ExtendedGoods T I)} {i : I} :
              @[simp]
              theorem IndexedLOrder.fromGoods_toPrimitiveSet {T : Type u_1} {I : Type u_2} [Fintype T] [Fintype I] [DecidableEq T] [DecidableEq I] (σ : Finset T) (C : Finset I) :
              @[simp]
              @[simp]
              theorem IndexedLOrder.fromGoods_toAlmostPrimitive {T : Type u_1} {I : Type u_2} [Fintype T] [Fintype I] [DecidableEq T] [DecidableEq I] (τ : Finset T) (D : Finset I) :
              theorem IndexedLOrder.card_toPrimitiveSet {T : Type u_1} {I : Type u_2} [Fintype I] [DecidableEq T] [DecidableEq I] (σ : Finset T) (C : Finset I) :
              theorem IndexedLOrder.card_toPrimitiveSet_of_room {T : Type u_1} {I : Type u_2} [Fintype I] [DecidableEq T] [DecidableEq I] [IST : IndexedLOrder I T] {σ : Finset T} {C : Finset I} (hRoom : isRoom σ C) :
              theorem IndexedLOrder.card_toAlmostPrimitive_of_door {T : Type u_1} {I : Type u_2} [Fintype I] [DecidableEq T] [DecidableEq I] [IST : IndexedLOrder I T] {τ : Finset T} {D : Finset I} (hDoor : isDoor τ D) :
              theorem IndexedLOrder.exists_insert_eq_of_subset_card_eq_succ {α : Type u_3} [DecidableEq α] {s t : Finset α} (hsub : s t) (hcard : t.card = s.card + 1) :
              xs, insert x s = t
              def IndexedLOrder.isRoomPrimitive {T : Type u_1} {I : Type u_2} [Fintype I] [DecidableEq T] [DecidableEq I] [IST : IndexedLOrder I T] (X : Finset (ExtendedGoods T I)) :

              Primitive sets stated through the equivalent room language.

              Equations
              Instances For
                def IndexedLOrder.isPrimitive {T : Type u_1} {I : Type u_2} [Fintype T] [Fintype I] [DecidableEq T] [DecidableEq I] [IST : IndexedLOrder I T] (X : Finset (ExtendedGoods T I)) :

                Scarf primitive sets in the paper's native dominance form, using the characterization X primitive iff XT is dominant with respect to the missing slack indices.

                Equations
                Instances For
                  @[reducible, inline]
                  abbrev IndexedLOrder.isPrimitiveNative {T : Type u_1} {I : Type u_2} [Fintype T] [Fintype I] [DecidableEq T] [DecidableEq I] [IST : IndexedLOrder I T] (X : Finset (ExtendedGoods T I)) :

                  Backwards-compatible name for the paper's native primitive definition.

                  Equations
                  Instances For
                    def IndexedLOrder.isAlmostPrimitive {T : Type u_1} {I : Type u_2} [Fintype I] [DecidableEq T] [DecidableEq I] [IST : IndexedLOrder I T] (Y : Finset (ExtendedGoods T I)) :

                    Almost primitive sets, stated through the equivalent door language.

                    Equations
                    Instances For

                      Almost primitive sets in the paper's native form: an (n-1)-face contained in a primitive set.

                      Equations
                      Instances For
                        theorem IndexedLOrder.room_to_roomPrimitive {T : Type u_1} {I : Type u_2} [Fintype I] [DecidableEq T] [DecidableEq I] [IST : IndexedLOrder I T] {σ : Finset T} {C : Finset I} (h : isRoom σ C) :

                        A room gives the equivalent room-language primitive set.

                        theorem IndexedLOrder.primitive_to_room {T : Type u_1} {I : Type u_2} [Fintype T] [Fintype I] [DecidableEq T] [DecidableEq I] [IST : IndexedLOrder I T] {X : Finset (ExtendedGoods T I)} (h : isPrimitive X) :

                        Extract the room corresponding to a primitive set.

                        theorem IndexedLOrder.room_to_primitive {T : Type u_1} {I : Type u_2} [Inhabited T] [Fintype T] [Fintype I] [DecidableEq T] [DecidableEq I] [IST : IndexedLOrder I T] {σ : Finset T} {C : Finset I} (h : isRoom σ C) :

                        A room gives a primitive set in the paper's native sense.

                        For sets written in room coordinates, being primitive is exactly being a room. This is the cardinality condition implicit in the paper's comparison between dominant sets and primitive sets.

                        A room recovered from a primitive set is again primitive.

                        theorem IndexedLOrder.door_to_almostPrimitive {T : Type u_1} {I : Type u_2} [Fintype I] [DecidableEq T] [DecidableEq I] [IST : IndexedLOrder I T] {τ σ : Finset T} {D C : Finset I} (h : isDoorof τ D σ C) :

                        A door of a room gives an almost primitive set.

                        Recover the door represented by an almost primitive set.

                        theorem IndexedLOrder.almostPrimitive_incident_room {T : Type u_1} {I : Type u_2} [Inhabited T] [Fintype T] [Fintype I] [DecidableEq T] [DecidableEq I] [IST : IndexedLOrder I T] {Y : Finset (ExtendedGoods T I)} (h : isAlmostPrimitive Y) :
                        ∃ (σ : Finset T) (C : Finset I), isDoorof (fromGoods Y) (fromMissing Y) σ C

                        Recover a room incident to an almost primitive set.

                        theorem IndexedLOrder.doorof_toAlmost_subset_toPrimitive {T : Type u_1} {I : Type u_2} [Inhabited T] [Fintype I] [DecidableEq T] [DecidableEq I] [IST : IndexedLOrder I T] {τ σ : Finset T} {D C : Finset I} (h : isDoorof τ D σ C) :

                        Incidence of doors and rooms becomes subset inclusion of the corresponding sets.

                        A useful packaged form of the door/primitive-set incidence correspondence.

                        theorem IndexedLOrder.subset_toPrimitive_toAlmost_doorof {T : Type u_1} {I : Type u_2} [Inhabited T] [Fintype I] [DecidableEq T] [DecidableEq I] [IST : IndexedLOrder I T] {τ σ : Finset T} {D C : Finset I} (hDoor : isDoor τ D) (hRoom : isRoom σ C) (hsub : toAlmostPrimitive τ D toPrimitiveSet σ C) :
                        isDoorof τ D σ C
                        theorem IndexedLOrder.internal_almostPrimitive_two_incident_primitives {T : Type u_1} {I : Type u_2} [Inhabited T] [Fintype T] [Fintype I] [DecidableEq T] [DecidableEq I] [IST : IndexedLOrder I T] {Y : Finset (ExtendedGoods T I)} (hY : isAlmostPrimitive Y) (hInternal : (fromGoods Y).Nonempty) :
                        ∃ (X₁ : Finset (ExtendedGoods T I)) (X₂ : Finset (ExtendedGoods T I)), X₁ X₂ isPrimitive X₁ isPrimitive X₂ Y X₁ Y X₂

                        Scarf's main lemma for internal almost primitive sets, in the room/door language: an internal almost primitive face is contained in two distinct primitive sets.

                        theorem IndexedLOrder.internal_almostPrimitive_exactly_two_incident_primitives {T : Type u_1} {I : Type u_2} [Inhabited T] [Fintype T] [Fintype I] [DecidableEq T] [DecidableEq I] [IST : IndexedLOrder I T] {Y : Finset (ExtendedGoods T I)} (hY : isAlmostPrimitive Y) (hInternal : (fromGoods Y).Nonempty) :
                        ∃ (X₁ : Finset (ExtendedGoods T I)) (X₂ : Finset (ExtendedGoods T I)), X₁ X₂ isPrimitive X₁ isPrimitive X₂ Y X₁ Y X₂ ∀ (X : Finset (ExtendedGoods T I)), isPrimitive XY XX = X₁ X = X₂
                        theorem IndexedLOrder.native_internal_almostPrimitive_exactly_two_incident_primitives {T : Type u_1} {I : Type u_2} [Inhabited T] [Fintype T] [Fintype I] [DecidableEq T] [DecidableEq I] [IST : IndexedLOrder I T] {Y : Finset (ExtendedGoods T I)} (hY : isAlmostPrimitiveNative Y) (hInternal : (fromGoods Y).Nonempty) :
                        ∃ (X₁ : Finset (ExtendedGoods T I)) (X₂ : Finset (ExtendedGoods T I)), X₁ X₂ isPrimitiveNative X₁ isPrimitiveNative X₂ Y X₁ Y X₂ ∀ (X : Finset (ExtendedGoods T I)), isPrimitiveNative XY XX = X₁ X = X₂

                        Native Scarf main lemma in the "remove one point" form: after removing a point from a primitive set, either the resulting face lies in the slack boundary, or there is a unique other primitive set containing that face.

                        Scarf's main lemma in the paper's replacement form: after removing x from a primitive set X, either only slack vectors remain, or there is a unique new element yX such that X - x + y is primitive.

                        def IndexedLOrder.slackBoundary {T : Type u_1} {I : Type u_2} [Fintype I] [DecidableEq T] [DecidableEq I] (i : I) :

                        The boundary almost primitive set made only of slacks, missing i.

                        Equations
                        Instances For

                          Each slack boundary is an almost primitive set.

                          theorem IndexedLOrder.boundary_almostPrimitive_eq_slackBoundary {T : Type u_1} {I : Type u_2} [Inhabited T] [Fintype T] [Fintype I] [DecidableEq T] [DecidableEq I] [IST : IndexedLOrder I T] {Y : Finset (ExtendedGoods T I)} (hY : isAlmostPrimitive Y) (hBoundary : ¬(fromGoods Y).Nonempty) :
                          ∃ (i : I), Y = slackBoundary i

                          Every almost primitive face made only of slack vectors is one of the boundary faces I - i.

                          Boundary almost primitive faces are incident to exactly one primitive set.

                          theorem IndexedLOrder.almostPrimitive_incident_primitives_boundary_or_internal {T : Type u_1} {I : Type u_2} [Inhabited T] [Fintype T] [Fintype I] [DecidableEq T] [DecidableEq I] [IST : IndexedLOrder I T] {Y : Finset (ExtendedGoods T I)} (hY : isAlmostPrimitive Y) :
                          (¬(fromGoods Y).Nonempty ∃! X : Finset (ExtendedGoods T I), isPrimitive X Y X) (fromGoods Y).Nonempty ∃ (X₁ : Finset (ExtendedGoods T I)) (X₂ : Finset (ExtendedGoods T I)), X₁ X₂ isPrimitive X₁ isPrimitive X₂ Y X₁ Y X₂ ∀ (X : Finset (ExtendedGoods T I)), isPrimitive XY XX = X₁ X = X₂

                          The full Scarf incidence dichotomy for almost primitive faces: a boundary face is incident to one primitive set, while an internal face is incident to exactly two primitive sets.

                          Incidence between an almost primitive face and a primitive set is exactly the old room-door incidence after translating both sides back to (goods, indices).

                          A Scarf replacement step: two primitive sets are adjacent if they share an almost primitive face. This is the primitive-set version of walking through a door from one room to another.

                          Equations
                          • One or more equations did not get rendered due to their size.
                          Instances For
                            theorem IndexedLOrder.common_door_gives_replacementStep {T : Type u_1} {I : Type u_2} [Inhabited T] [Fintype T] [Fintype I] [DecidableEq T] [DecidableEq I] [IST : IndexedLOrder I T] {τ : Finset T} {D : Finset I} {σ₁ σ₂ : Finset T} {C₁ C₂ : Finset I} (hDoor₁ : isDoorof τ D σ₁ C₁) (hDoor₂ : isDoorof τ D σ₂ C₂) (hNe : (σ₁, C₁) (σ₂, C₂)) :
                            theorem IndexedLOrder.internal_almostPrimitive_replacementStep {T : Type u_1} {I : Type u_2} [Inhabited T] [Fintype T] [Fintype I] [DecidableEq T] [DecidableEq I] [IST : IndexedLOrder I T] {Y : Finset (ExtendedGoods T I)} (hY : isAlmostPrimitive Y) (hInternal : (fromGoods Y).Nonempty) :
                            ∃ (X₁ : Finset (ExtendedGoods T I)) (X₂ : Finset (ExtendedGoods T I)), primitiveReplacementStep X₁ X₂ Y X₁ Y X₂
                            def IndexedLOrder.extendedColoring {T : Type u_1} {I : Type u_2} (c : TI) :
                            ExtendedGoods T II

                            Extend a coloring of goods by coloring each slack vector by its own index.

                            Equations
                            Instances For
                              @[simp]
                              theorem IndexedLOrder.extendedColoring_inl {T : Type u_1} {I : Type u_2} (c : TI) (t : T) :
                              @[simp]
                              theorem IndexedLOrder.extendedColoring_inr {T : Type u_1} {I : Type u_2} (c : TI) (i : I) :
                              theorem IndexedLOrder.full_color_primitive_iff_colorful_room {T : Type u_1} {I : Type u_2} [Inhabited T] [Fintype I] [DecidableEq T] [DecidableEq I] [IST : IndexedLOrder I T] (c : TI) {σ : Finset T} {C : Finset I} (hRoom : isRoom σ C) :

                              For a room, Scarf's statement that a primitive set has all colors is exactly the Section 1 statement that the corresponding room is colorful.

                              def IndexedLOrder.isFullyColoredPrimitive {T : Type u_1} {I : Type u_2} [Fintype T] [Fintype I] [DecidableEq T] [DecidableEq I] [IST : IndexedLOrder I T] (c : TI) (X : Finset (ExtendedGoods T I)) :

                              Scarf's primitive-set coloring condition c(X) = I.

                              Equations
                              Instances For

                                For an arbitrary primitive set, Scarf's condition c(X) = I is exactly the colorful-room condition for the associated room (X ∩ T, I \ X).

                                theorem IndexedLOrder.slackBoundary_GiDoorVertex {T : Type u_1} {I : Type u_2} [Inhabited T] [Fintype T] [Fintype I] [DecidableEq T] [DecidableEq I] [IST : IndexedLOrder I T] (c : TI) (i : I) :
                                theorem IndexedLOrder.fullyColoredPrimitive_GiRoomVertex {T : Type u_1} {I : Type u_2} [Inhabited T] [Fintype T] [Fintype I] [DecidableEq T] [DecidableEq I] [IST : IndexedLOrder I T] {c : TI} {i : I} {X : Finset (ExtendedGoods T I)} (hX : isFullyColoredPrimitive c X) :
                                theorem IndexedLOrder.allButColorPrimitive_GiRoomVertex {T : Type u_1} {I : Type u_2} [Inhabited T] [Fintype T] [Fintype I] [DecidableEq T] [DecidableEq I] [IST : IndexedLOrder I T] {c : TI} {i : I} {X : Finset (ExtendedGoods T I)} (hPrim : isPrimitive X) (hColor : Finset.image (extendedColoring c) X = Finset.univ.erase i) :
                                def IndexedLOrder.scarfSplitReplacementStep {T : Type u_1} {I : Type u_2} [Fintype T] [Fintype I] [DecidableEq T] [DecidableEq I] [IST : IndexedLOrder I T] (c : TI) (i : I) (X Y X' : Finset (ExtendedGoods T I)) :

                                A split Scarf replacement step, matching §3: an all-but-i primitive set moves through an all-but-i almost primitive face to another primitive set, which is either still all-but-i or already fully colored.

                                Equations
                                • One or more equations did not get rendered due to their size.
                                Instances For
                                  theorem IndexedLOrder.scarfSplitReplacementStep_replacementStep {T : Type u_1} {I : Type u_2} [Fintype T] [Fintype I] [DecidableEq T] [DecidableEq I] [IST : IndexedLOrder I T] {c : TI} {i : I} {X Y X' : Finset (ExtendedGoods T I)} (h : scarfSplitReplacementStep c i X Y X') :
                                  theorem IndexedLOrder.scarfSplitReplacementStep_GiEdges {T : Type u_1} {I : Type u_2} [Inhabited T] [Fintype T] [Fintype I] [DecidableEq T] [DecidableEq I] [IST : IndexedLOrder I T] {c : TI} {i : I} {X Y X' : Finset (ExtendedGoods T I)} (h : scarfSplitReplacementStep c i X Y X') :
                                  def IndexedLOrder.scarfSplitReplacementStepWalk {T : Type u_1} {I : Type u_2} [Inhabited T] [Fintype T] [Fintype I] [DecidableEq T] [DecidableEq I] [IST : IndexedLOrder I T] {c : TI} {i : I} {X Y X' : Finset (ExtendedGoods T I)} (h : scarfSplitReplacementStep c i X Y X') :

                                  The graph-walk segment represented by one split Scarf replacement step: X → Y → X'.

                                  Equations
                                  Instances For
                                    theorem IndexedLOrder.initial_scarf_step_walk {T : Type u_1} {I : Type u_2} [Inhabited T] [Fintype T] [Fintype I] [DecidableEq T] [DecidableEq I] [IST : IndexedLOrder I T] (c : TI) (i : I) :

                                    The first graph-walk segment of Scarf's algorithm, from I - i into the building.

                                    structure IndexedLOrder.ScarfAlgorithmTrace {T : Type u_1} {I : Type u_2} [Fintype T] [Fintype I] [DecidableEq T] [DecidableEq I] [IST : IndexedLOrder I T] (c : TI) (i : I) :
                                    Type (max u_1 u_2)

                                    A complete primitive-language Scarf algorithm trace of type i. It starts at the boundary face I - i, follows G_i, and terminates at a fully colored primitive set. The local lemmas above build such walks from initial and split replacement segments.

                                    Instances For
                                      theorem IndexedLOrder.ScarfAlgorithmTrace.terminal_colorful_room {T : Type u_1} {I : Type u_2} [Inhabited T] [Fintype T] [Fintype I] [DecidableEq T] [DecidableEq I] [IST : IndexedLOrder I T] {c : TI} {i : I} (trace : ScarfAlgorithmTrace c i) :

                                      A reachable fully colored primitive set gives a complete Scarf trace.

                                      It is enough to find a fully colored primitive set in the connected component of the outside door. This is the component-level form of the path-following argument in §3.

                                      Existence of a complete Scarf trace is equivalent to finding a fully colored primitive set in the connected component of the outside door. This isolates the remaining graph-theoretic endpoint argument from the primitive-set translation.

                                      theorem IndexedLOrder.outsideDoor_endpoint_cell_eq_slackBoundary {T : Type u_1} {I : Type u_2} [Inhabited T] [Fintype T] [Fintype I] [DecidableEq T] [DecidableEq I] [IST : IndexedLOrder I T] {c : TI} {i : I} {v : GiCell T I} (hDoor : GiDoorVertex c i v) (hOutside : isOutsideDoor v.1 v.2) :
                                      theorem IndexedLOrder.giVertex_of_GiDegree_eq_one {T : Type u_1} {I : Type u_2} [Fintype T] [Fintype I] [DecidableEq T] [DecidableEq I] [IST : IndexedLOrder I T] {c : TI} {i : I} {v : GiCell T I} (hdeg : GiDegree c i v = 1) :
                                      GiVertex c i v
                                      def IndexedLOrder.reachableComponentGraph {α : Type u_3} (G : SimpleGraph α) (v₀ : α) :
                                      SimpleGraph { v : α // G.Reachable v₀ v }

                                      The induced subgraph on the vertices reachable from a fixed base vertex.

                                      Equations
                                      Instances For
                                        theorem IndexedLOrder.reachableComponentGraph_degree_eq {α : Type u_3} [Fintype α] (G : SimpleGraph α) (v₀ : α) (x : { v : α // G.Reachable v₀ v }) :
                                        theorem IndexedLOrder.scarfAlgorithmTrace_exists {T : Type u_1} {I : Type u_2} [Inhabited T] [Fintype T] [Fintype I] [DecidableEq T] [DecidableEq I] [IST : IndexedLOrder I T] [Inhabited I] (c : TI) (i : I) :

                                        Scarf's combinatorial theorem in the primitive-set language from §3: after extending a coloring by the identity on slack vectors, some primitive set has all colors, obtained by following the Scarf trace from the boundary door.

                                        theorem IndexedLOrder.scarf_fullyColoredPrimitive_exists {T : Type u_1} {I : Type u_2} [Inhabited T] [Fintype T] [Fintype I] [DecidableEq T] [DecidableEq I] [IST : IndexedLOrder I T] [Inhabited I] (c : TI) :

                                        Scarf's combinatorial theorem in the primitive-set language from §3. The proof is routed through the path-following trace, matching the narrative of the paper.

                                        The unique primitive set incident to the boundary face I - i, in the same language used to start Scarf's replacement path.

                                        Splitting a replacement step gives exactly the alternating primitive / almost-primitive pattern described in §3.

                                        structure IndexedLOrder.UtilityRealization {T : Type u_1} {I : Type u_2} [IST : IndexedLOrder I T] (u : IT) :

                                        Utility functions realize the abstract preference orders when they preserve and reflect each indexed strict order.

                                        • order_iff (i : I) (x y : T) : x < y u i x < u i y
                                        Instances For
                                          structure IndexedLOrder.PositiveUtilityRealization {T : Type u_1} {I : Type u_2} [IST : IndexedLOrder I T] (u : IT) extends IndexedLOrder.UtilityRealization u :

                                          Positive utility functions, matching the economic convention in §3.

                                          • order_iff (i : I) (x y : T) : x < y u i x < u i y
                                          • positive (i : I) (x : T) : 0 < u i x
                                          Instances For
                                            noncomputable def IndexedLOrder.orderLowerSet {T : Type u_1} {I : Type u_2} [Fintype T] [IST : IndexedLOrder I T] (i : I) (x : T) :

                                            The lower contour set of x in the order indexed by i.

                                            Equations
                                            Instances For
                                              noncomputable def IndexedLOrder.orderUtility {T : Type u_1} {I : Type u_2} [Fintype T] [IST : IndexedLOrder I T] (i : I) (x : T) :

                                              The finite rank utility associated to an indexed order. Adding 1 makes it positive, matching the economic convention in the paper.

                                              Equations
                                              Instances For
                                                theorem IndexedLOrder.orderUtility_positive {T : Type u_1} {I : Type u_2} [Fintype T] [IST : IndexedLOrder I T] (i : I) (x : T) :
                                                theorem IndexedLOrder.orderUtility_order_iff {T : Type u_1} {I : Type u_2} [Fintype T] [IST : IndexedLOrder I T] (i : I) (x y : T) :
                                                theorem IndexedLOrder.orderUtility_realization {T : Type u_1} {I : Type u_2} [Fintype T] [IST : IndexedLOrder I T] :
                                                UtilityRealization fun (i : I) (x : T) => orderUtility i x
                                                def IndexedLOrder.utilityVector {T : Type u_1} {I : Type u_2} (u : IT) (x : T) :
                                                I

                                                A utility vector embeds a good into ℝ^I.

                                                Equations
                                                Instances For
                                                  noncomputable def IndexedLOrder.utilityImage {T : Type u_1} {I : Type u_2} [Fintype T] [Fintype I] (u : IT) :
                                                  Finset (I)

                                                  The finite coordinate image u(T) used when identifying goods with utility vectors.

                                                  Equations
                                                  Instances For
                                                    noncomputable def IndexedLOrder.utilityImageEquiv {T : Type u_1} {I : Type u_2} [Fintype T] [Fintype I] [IST : IndexedLOrder I T] [Inhabited I] (u : IT) (hu : UtilityRealization u) :
                                                    T (utilityImage u)

                                                    The paper's "identify T with its image u(T)" step, formalized as an equivalence once the utility realization separates points.

                                                    Equations
                                                    • One or more equations did not get rendered due to their size.
                                                    Instances For
                                                      def IndexedLOrder.slackVector {I : Type u_2} [DecidableEq I] (M : I) (i : I) :
                                                      I

                                                      The coordinate model of Scarf's slack vector for face i: the ith coordinate is zero and all other coordinates are the chosen large value M i.

                                                      Equations
                                                      Instances For
                                                        def IndexedLOrder.extendedCoordinatePoint {T : Type u_1} {I : Type u_2} [DecidableEq I] (u : IT) (M : I) :
                                                        ExtendedGoods T II

                                                        Interpret the enlarged set T ∪ I as points in ℝ^I.

                                                        Equations
                                                        Instances For
                                                          def IndexedLOrder.uniformSlackHeight {T : Type u_1} {I : Type u_2} [Fintype T] :
                                                          I

                                                          A uniform choice of slack heights for a finite utility realization.

                                                          Equations
                                                          Instances For
                                                            @[simp]
                                                            theorem IndexedLOrder.slackVector_self {I : Type u_2} [DecidableEq I] (M : I) (i : I) :
                                                            slackVector M i i = 0
                                                            @[simp]
                                                            theorem IndexedLOrder.slackVector_of_ne {I : Type u_2} [DecidableEq I] (M : I) {i j : I} (h : j i) :
                                                            slackVector M i j = M i
                                                            theorem IndexedLOrder.slackVector_other_coordinate_gt {I : Type u_2} [DecidableEq I] {M : I} {i j : I} (hji : j i) {r : } (hr : r < M i) :
                                                            r < slackVector M i j
                                                            def IndexedLOrder.SlackHeightsDominateGoodsCoordinates {T : Type u_1} {I : Type u_2} (u : IT) (M : I) :

                                                            Slack-height condition for Scarf's slack vectors: the nonzero coordinate coord of the slack vector s(slack) is above the corresponding coordinate of every good. Since s(slack) coord = M slack when coord ≠ slack, this is the condition needed for the coordinate model to match the abstract room/primitive-set model.

                                                            Equations
                                                            Instances For
                                                              @[reducible, inline]
                                                              abbrev IndexedLOrder.SlackBounds {T : Type u_1} {I : Type u_2} (u : IT) (M : I) :

                                                              Backwards-compatible short name for the slack-height condition.

                                                              Equations
                                                              Instances For
                                                                theorem IndexedLOrder.slackBounds_iff_heights_gt_coordinates {T : Type u_1} {I : Type u_2} {u : IT} {M : I} :
                                                                SlackBounds u M ∀ (i j : I) (x : T), j iu j x < M i
                                                                theorem IndexedLOrder.slackBounds_of_global_coordinate_bound {T : Type u_1} {I : Type u_2} {u : IT} {M : I} {B : } (hGoods : ∀ (coord : I) (x : T), u coord x < B) (hHeights : ∀ (slack : I), B M slack) :
                                                                noncomputable def IndexedLOrder.slackImage {I : Type u_2} [Fintype I] [DecidableEq I] (M : I) :
                                                                Finset (I)

                                                                The finite set of Scarf slack vectors.

                                                                Equations
                                                                Instances For
                                                                  noncomputable def IndexedLOrder.coordinateEnlargedSet {T : Type u_1} {I : Type u_2} [Fintype T] [Fintype I] [DecidableEq I] (u : IT) (M : I) :
                                                                  Finset (I)

                                                                  The actual coordinate enlarged set u(T) ∪ {s(i) | i ∈ I} from §3.

                                                                  Equations
                                                                  Instances For
                                                                    theorem IndexedLOrder.slackVector_injective_of_bounds {T : Type u_1} {I : Type u_2} [Inhabited T] [DecidableEq I] [IST : IndexedLOrder I T] {u : IT} {M : I} (hu : PositiveUtilityRealization u) (hM : SlackBounds u M) :
                                                                    theorem IndexedLOrder.utilityVector_ne_slackVector_of_positive {T : Type u_1} {I : Type u_2} [DecidableEq I] [IST : IndexedLOrder I T] {u : IT} {M : I} (hu : PositiveUtilityRealization u) (x : T) (i : I) :
                                                                    theorem IndexedLOrder.coordinateEnlargedSet_exists_preimage {T : Type u_1} {I : Type u_2} [Fintype T] [Fintype I] [DecidableEq I] (u : IT) (M : I) {v : I} (hv : v coordinateEnlargedSet u M) :
                                                                    ∃ (z : ExtendedGoods T I), extendedCoordinatePoint u M z = v
                                                                    noncomputable def IndexedLOrder.extendedCoordinateEquivCoordinateEnlargedSet {T : Type u_1} {I : Type u_2} [Inhabited T] [Fintype T] [Fintype I] [DecidableEq I] [IST : IndexedLOrder I T] [Inhabited I] {u : IT} {M : I} (hu : PositiveUtilityRealization u) (hM : SlackBounds u M) :

                                                                    The abstract T ∪ I representation is equivalent to the actual coordinate enlarged set u(T) ∪ {s(i)} under the paper's positivity/slack hypotheses.

                                                                    Equations
                                                                    • One or more equations did not get rendered due to their size.
                                                                    Instances For
                                                                      @[simp]
                                                                      theorem IndexedLOrder.extendedCoordinatePoint_good {T : Type u_1} {I : Type u_2} [DecidableEq I] (u : IT) (M : I) (x : T) :
                                                                      @[simp]
                                                                      theorem IndexedLOrder.extendedCoordinatePoint_slack {T : Type u_1} {I : Type u_2} [DecidableEq I] (u : IT) (M : I) (i : I) :
                                                                      theorem IndexedLOrder.slackBounds_lt_slack_coordinate {T : Type u_1} {I : Type u_2} [DecidableEq I] {u : IT} {M : I} (hM : SlackBounds u M) {i j : I} (hji : j i) (x : T) :
                                                                      theorem IndexedLOrder.orderUtility_slackBounds {T : Type u_1} {I : Type u_2} [Fintype T] [IST : IndexedLOrder I T] :
                                                                      SlackBounds (fun (i : I) (x : T) => orderUtility i x) uniformSlackHeight
                                                                      def IndexedLOrder.extendedCoordinateLt {T : Type u_1} {I : Type u_2} [DecidableEq I] (u : IT) (M : I) (i : I) (x y : ExtendedGoods T I) :

                                                                      The coordinate-induced strict relation on T ∪ I: one point is smaller exactly when its ith coordinate is smaller. To match the paper, linearity is kept as an explicit hypothesis below rather than enforced by a tie-breaker.

                                                                      Equations
                                                                      Instances For
                                                                        def IndexedLOrder.CoordinateValuesDefineLinearOrders {T : Type u_1} {I : Type u_2} [DecidableEq I] (u : IT) (M : I) :

                                                                        The paper assumes, after perturbing if necessary, that coordinate values define linear orders on the enlarged set.

                                                                        Equations
                                                                        Instances For

                                                                          The paper's "the M_i are pairwise different" assumption.

                                                                          Equations
                                                                          Instances For
                                                                            noncomputable def IndexedLOrder.utilityCoordinateValues {T : Type u_1} {I : Type u_2} [Fintype T] [Fintype I] (u : IT) :

                                                                            All utility coordinates, as a finite set of real numbers.

                                                                            Equations
                                                                            Instances For
                                                                              noncomputable def IndexedLOrder.utilityCoordinateBound {T : Type u_1} {I : Type u_2} [Inhabited T] [Fintype T] [Fintype I] [Inhabited I] (u : IT) :

                                                                              A strict upper bound for all utility coordinates. This packages the finite maximum used to make the slack heights dominate the goods coordinates.

                                                                              Equations
                                                                              Instances For
                                                                                theorem IndexedLOrder.utility_lt_utilityCoordinateBound {T : Type u_1} {I : Type u_2} [Inhabited T] [Fintype T] [Fintype I] [Inhabited I] (u : IT) (j : I) (x : T) :
                                                                                noncomputable def IndexedLOrder.perturbedSlackHeight {T : Type u_1} {I : Type u_2} [Inhabited T] [Fintype T] [Fintype I] [Inhabited I] (u : IT) :
                                                                                I

                                                                                An explicit version of the paper's "perturb the slack heights" step: start above every utility coordinate and then add the finite index of each trader.

                                                                                Equations
                                                                                Instances For
                                                                                  theorem IndexedLOrder.utility_coordinate_injective {T : Type u_1} {I : Type u_2} [IST : IndexedLOrder I T] {u : IT} (hu : UtilityRealization u) (i : I) :
                                                                                  Function.Injective fun (x : T) => u i x
                                                                                  theorem IndexedLOrder.extendedCoordinatePoint_coordinate_injective {T : Type u_1} {I : Type u_2} [Inhabited T] [DecidableEq I] [IST : IndexedLOrder I T] {u : IT} {M : I} (hu : PositiveUtilityRealization u) (hM : SlackBounds u M) (hM_inj : SlackHeightsPairwiseDistinct M) (i : I) :

                                                                                  Under the hypotheses stated in §3 (positive utilities realizing the preferences, slack bounds, and pairwise different slack heights), coordinate values themselves define linear orders on T ∪ I.

                                                                                  The fully formalized perturbation step from §3: for every positive utility realization on a finite, nonempty index set, there are slack heights that dominate all goods coordinates, are pairwise distinct, and therefore make coordinate comparison into linear orders on T ∪ I.

                                                                                  The §3 utility-and-perturbation passage as a single existence statement: starting only from the abstract indexed linear orders, choose positive utility functions realizing the orders and pairwise distinct slack heights large enough to make coordinate comparison linear on the enlarged set.

                                                                                  @[reducible]
                                                                                  noncomputable def IndexedLOrder.coordinateIndexedLOrder {T : Type u_1} {I : Type u_2} [DecidableEq I] (u : IT) (M : I) (hCoord : CoordinateValuesDefineLinearOrders u M) :

                                                                                  The indexed family of coordinate-induced orders on the enlarged set.

                                                                                  Equations
                                                                                  Instances For
                                                                                    theorem IndexedLOrder.extendedCoordinateLt_of_coord_lt {T : Type u_1} {I : Type u_2} [DecidableEq I] {u : IT} {M : I} {i : I} {x y : ExtendedGoods T I} (h : extendedCoordinatePoint u M x i < extendedCoordinatePoint u M y i) :
                                                                                    theorem IndexedLOrder.extendedCoordinateLt_goods_of_original_lt {T : Type u_1} {I : Type u_2} [DecidableEq I] [IST : IndexedLOrder I T] {u : IT} {M : I} (hu : UtilityRealization u) {i : I} {x y : T} (hxy : x < y) :
                                                                                    theorem IndexedLOrder.original_lt_of_extendedCoordinateLt_goods {T : Type u_1} {I : Type u_2} [DecidableEq I] [IST : IndexedLOrder I T] {u : IT} {M : I} (hu : UtilityRealization u) {i : I} {x y : T} (hxy : extendedCoordinateLt u M i (Sum.inl x) (Sum.inl y)) :
                                                                                    x < y
                                                                                    theorem IndexedLOrder.extendedCoordinateLt_goods_iff {T : Type u_1} {I : Type u_2} [DecidableEq I] [IST : IndexedLOrder I T] {u : IT} {M : I} (hu : UtilityRealization u) (i : I) (x y : T) :
                                                                                    theorem IndexedLOrder.coordinateGoods_le_of_original_le {T : Type u_1} {I : Type u_2} [DecidableEq I] [IST : IndexedLOrder I T] {u : IT} {M : I} (hCoord : CoordinateValuesDefineLinearOrders u M) (hu : UtilityRealization u) {i : I} {x y : T} (hxy : x y) :
                                                                                    theorem IndexedLOrder.original_le_of_coordinateGoods_le {T : Type u_1} {I : Type u_2} [DecidableEq I] [IST : IndexedLOrder I T] {u : IT} {M : I} (hCoord : CoordinateValuesDefineLinearOrders u M) (hu : UtilityRealization u) {i : I} {x y : T} (hxy : Sum.inl x Sum.inl y) :
                                                                                    x y
                                                                                    theorem IndexedLOrder.coordinateGood_lt_slack_of_ne {T : Type u_1} {I : Type u_2} [DecidableEq I] {u : IT} {M : I} (hM : SlackBounds u M) {i k : I} (hik : i k) (x : T) :
                                                                                    theorem IndexedLOrder.coordinateSlack_lt_good {T : Type u_1} {I : Type u_2} [DecidableEq I] [IST : IndexedLOrder I T] {u : IT} {M : I} (hu : PositiveUtilityRealization u) (i : I) (x : T) :
                                                                                    theorem IndexedLOrder.coordinateSlack_lt_slack_of_ne {T : Type u_1} {I : Type u_2} [Inhabited T] [DecidableEq I] [IST : IndexedLOrder I T] {u : IT} {M : I} (hu : PositiveUtilityRealization u) (hM : SlackBounds u M) {i k : I} (hik : i k) :
                                                                                    def IndexedLOrder.isCoordinatePrimitive {T : Type u_1} {I : Type u_2} [Fintype I] [DecidableEq I] (u : IT) (M : I) (hCoord : CoordinateValuesDefineLinearOrders u M) (X : Finset (ExtendedGoods T I)) :

                                                                                    The literal coordinate-dominance primitive definition on the enlarged ordered set.

                                                                                    Equations
                                                                                    Instances For
                                                                                      theorem IndexedLOrder.nativePrimitive_to_coordinatePrimitive {T : Type u_1} {I : Type u_2} [Inhabited T] [Fintype T] [Fintype I] [DecidableEq T] [DecidableEq I] [IST : IndexedLOrder I T] {u : IT} {M : I} {hCoord : CoordinateValuesDefineLinearOrders u M} (hu : PositiveUtilityRealization u) (hM : SlackBounds u M) {X : Finset (ExtendedGoods T I)} (hX : isPrimitiveNative X) :
                                                                                      theorem IndexedLOrder.coordinatePrimitive_to_nativePrimitive {T : Type u_1} {I : Type u_2} [Fintype T] [Fintype I] [DecidableEq T] [DecidableEq I] [IST : IndexedLOrder I T] {u : IT} {M : I} {hCoord : CoordinateValuesDefineLinearOrders u M} (hu : PositiveUtilityRealization u) {X : Finset (ExtendedGoods T I)} (hX : isCoordinatePrimitive u M hCoord X) :
                                                                                      theorem IndexedLOrder.coordinatePrimitive_iff_native {T : Type u_1} {I : Type u_2} [Inhabited T] [Fintype T] [Fintype I] [DecidableEq T] [DecidableEq I] [IST : IndexedLOrder I T] {u : IT} {M : I} {hCoord : CoordinateValuesDefineLinearOrders u M} (hu : PositiveUtilityRealization u) (hM : SlackBounds u M) {X : Finset (ExtendedGoods T I)} :
                                                                                      theorem IndexedLOrder.coordinatePrimitive_erase_replacement_mainLemma {T : Type u_1} {I : Type u_2} [Inhabited T] [Fintype T] [Fintype I] [DecidableEq T] [DecidableEq I] [IST : IndexedLOrder I T] {u : IT} {M : I} {hCoord : CoordinateValuesDefineLinearOrders u M} (hu : PositiveUtilityRealization u) (hM : SlackBounds u M) {X : Finset (ExtendedGoods T I)} (hX : isCoordinatePrimitive u M hCoord X) {x : ExtendedGoods T I} (hx : x X) :

                                                                                      Scarf's main lemma for the literal coordinate-dominance definition of primitive sets on T ∪ I.