Skip to content

Commit 8658bfa

Browse files
committed
chore(Finsupp/Lex): syntactically better data fields in Partial/LinearOrder instances (leanprover-community#7229)
1 parent a150006 commit 8658bfa

File tree

6 files changed

+40
-35
lines changed

6 files changed

+40
-35
lines changed

Counterexamples/ZeroDivisorsInAddMonoidAlgebras.lean

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -239,9 +239,8 @@ example : ¬CovariantClass (Lex (F →₀ F)) (Lex (F →₀ F)) (· + ·) (·
239239
refine (not_lt (α := Lex (F →₀ F))).mpr (@h (Finsupp.single (0 : F) (1 : F))
240240
(Finsupp.single 1 1) (Finsupp.single 0 1) ?_) ⟨1, ?_⟩
241241
· exact Or.inr ⟨0, by simp [(by boom : ∀ j : F, j < 0 ↔ False)]⟩
242-
· simp only [(by boom : ∀ j : F, j < 1 ↔ j = 0), Function.comp, ofLex_add, toDFinsupp_add,
243-
toLex_add, ofLex_toLex, DFinsupp.coe_add, toDFinsupp_coe, Pi.toLex_apply, Pi.add_apply,
244-
forall_eq, f010, f1, f110, add_zero, f011, f111, zero_add, and_self]
242+
· simp only [(by boom : ∀ j : F, j < 1 ↔ j = 0), ofLex_add, coe_add, Pi.add_apply, forall_eq,
243+
f010, f1, f110, add_zero, f011, f111, zero_add, and_self]
245244

246245
example {α} [Ring α] [Nontrivial α] : ∃ f g : AddMonoidAlgebra α F, f ≠ 0 ∧ g ≠ 0 ∧ f * g = 0 :=
247246
zero_divisors_of_periodic (1 : F) le_rfl (by simp [two_smul]) z01.ne'

Mathlib/Algebra/Order/Group/Prod.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ instance orderedCommGroup [OrderedCommGroup G] [OrderedCommGroup H] :
3434
@[to_additive]
3535
instance linearOrderedCommGroup [LinearOrderedCommGroup G] [LinearOrderedCommGroup H] :
3636
LinearOrderedCommGroup (G ×ₗ H) where
37-
__ := (inferInstance : LinearOrder (G ×ₗ H))
37+
__ : LinearOrder (G ×ₗ H) := inferInstance
3838
mul_le_mul_left _ _ := mul_le_mul_left'
3939

4040
end Lex

Mathlib/Algebra/Order/Monoid/Prod.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,8 @@ instance orderedCancelCommMonoid [OrderedCancelCommMonoid α] [OrderedCancelComm
6363
@[to_additive]
6464
instance linearOrderedCancelCommMonoid [LinearOrderedCancelCommMonoid α]
6565
[LinearOrderedCancelCommMonoid β] : LinearOrderedCancelCommMonoid (α ×ₗ β) where
66-
__ := (inferInstance : LinearOrder (α ×ₗ β))
67-
__ := (inferInstance : OrderedCancelCommMonoid (α ×ₗ β))
66+
__ : LinearOrder (α ×ₗ β) := inferInstance
67+
__ : OrderedCancelCommMonoid (α ×ₗ β) := inferInstance
6868

6969
end Lex
7070

Mathlib/Data/DFinsupp/Lex.lean

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -63,20 +63,22 @@ theorem lex_lt_of_lt [∀ i, PartialOrder (α i)] (r) [IsStrictOrder ι r] {x y
6363
exact lex_lt_of_lt_of_preorder r hlt
6464
#align dfinsupp.lex_lt_of_lt DFinsupp.lex_lt_of_lt
6565

66-
instance Lex.isStrictOrder [LinearOrder ι] [∀ i, PartialOrder (α i)] :
66+
variable [LinearOrder ι]
67+
68+
instance Lex.isStrictOrder [∀ i, PartialOrder (α i)] :
6769
IsStrictOrder (Lex (Π₀ i, α i)) (· < ·) :=
6870
let i : IsStrictOrder (Lex (∀ i, α i)) (· < ·) := Pi.Lex.isStrictOrder
6971
{ irrefl := toLex.surjective.forall.2 fun _ ↦ @irrefl _ _ i.toIsIrrefl _
7072
trans := toLex.surjective.forall₃.2 fun _ _ _ ↦ @trans _ _ i.toIsTrans _ _ _ }
7173
#align dfinsupp.lex.is_strict_order DFinsupp.Lex.isStrictOrder
7274

73-
variable [LinearOrder ι]
74-
7575
/-- The partial order on `DFinsupp`s obtained by the lexicographic ordering.
7676
See `DFinsupp.Lex.linearOrder` for a proof that this partial order is in fact linear. -/
77-
instance Lex.partialOrder [∀ i, PartialOrder (α i)] : PartialOrder (Lex (Π₀ i, α i)) :=
78-
PartialOrder.lift (fun x ↦ toLex (⇑(ofLex x)))
79-
(FunLike.coe_injective (F := DFinsupp fun i => α i))
77+
instance Lex.partialOrder [∀ i, PartialOrder (α i)] : PartialOrder (Lex (Π₀ i, α i)) where
78+
lt := (· < ·)
79+
le x y := ⇑(ofLex x) = ⇑(ofLex y) ∨ x < y
80+
__ := PartialOrder.lift (fun x : Lex (Π₀ i, α i) ↦ toLex (⇑(ofLex x)))
81+
(FunLike.coe_injective (F := DFinsupp α))
8082
#align dfinsupp.lex.partial_order DFinsupp.Lex.partialOrder
8183

8284
section LinearOrder
@@ -100,7 +102,7 @@ private def lt_trichotomy_rec {P : Lex (Π₀ i, α i) → Lex (Π₀ i, α i)
100102
/-- The less-or-equal relation for the lexicographic ordering is decidable. -/
101103
irreducible_def Lex.decidableLE : @DecidableRel (Lex (Π₀ i, α i)) (· ≤ ·) :=
102104
lt_trichotomy_rec (fun h ↦ isTrue <| Or.inr h)
103-
(fun h ↦ isTrue <| Or.inl <| congr_arg _ <| congr_arg _ h)
105+
(fun h ↦ isTrue <| Or.inl <| congr_arg _ h)
104106
fun h ↦ isFalse fun h' ↦ lt_irrefl _ (h.trans_le h')
105107
#align dfinsupp.lex.decidable_le DFinsupp.Lex.decidableLE
106108

@@ -111,16 +113,16 @@ irreducible_def Lex.decidableLT : @DecidableRel (Lex (Π₀ i, α i)) (· < ·)
111113

112114
-- Porting note: Added `DecidableEq` for `LinearOrder`.
113115
instance : DecidableEq (Lex (Π₀ i, α i)) :=
114-
lt_trichotomy_rec (fun h ↦ isFalse fun h' => h'.not_lt h) (fun h ↦ isTrue h)
115-
fun h ↦ isFalse fun h' => h'.symm.not_lt h
116+
lt_trichotomy_rec (fun h ↦ isFalse fun h' h'.not_lt h) isTrue
117+
fun h ↦ isFalse fun h' h'.symm.not_lt h
116118

117119
/-- The linear order on `DFinsupp`s obtained by the lexicographic ordering. -/
118-
instance Lex.linearOrder : LinearOrder (Lex (Π₀ i, α i)) :=
119-
{ Lex.partialOrder with
120-
le_total := lt_trichotomy_rec (fun h ↦ Or.inl h.le) (fun h ↦ Or.inl h.le) fun h ↦ Or.inr h.le
121-
decidableLT := decidableLT
122-
decidableLE := decidableLE
123-
decidableEq := inferInstance }
120+
instance Lex.linearOrder : LinearOrder (Lex (Π₀ i, α i)) where
121+
__ := Lex.partialOrder
122+
le_total := lt_trichotomy_rec (fun h ↦ Or.inl h.le) (fun h ↦ Or.inl h.le) fun h ↦ Or.inr h.le
123+
decidableLT := decidableLT
124+
decidableLE := decidableLE
125+
decidableEq := inferInstance
124126
#align dfinsupp.lex.linear_order DFinsupp.Lex.linearOrder
125127

126128
end LinearOrder
@@ -208,12 +210,12 @@ instance Lex.orderedAddCommGroup [∀ i, OrderedAddCommGroup (α i)] :
208210
instance Lex.linearOrderedCancelAddCommMonoid
209211
[∀ i, LinearOrderedCancelAddCommMonoid (α i)] :
210212
LinearOrderedCancelAddCommMonoid (Lex (Π₀ i, α i)) where
211-
__ := (inferInstance : LinearOrder (Lex (Π₀ i, α i)))
212-
__ := (inferInstance : OrderedCancelAddCommMonoid (Lex (Π₀ i, α i)))
213+
__ : LinearOrder (Lex (Π₀ i, α i)) := inferInstance
214+
__ : OrderedCancelAddCommMonoid (Lex (Π₀ i, α i)) := inferInstance
213215

214216
instance Lex.linearOrderedAddCommGroup [∀ i, LinearOrderedAddCommGroup (α i)] :
215217
LinearOrderedAddCommGroup (Lex (Π₀ i, α i)) where
216-
__ := (inferInstance : LinearOrder (Lex (Π₀ i, α i)))
218+
__ : LinearOrder (Lex (Π₀ i, α i)) := inferInstance
217219
add_le_add_left _ _ := add_le_add_left
218220

219221
end OrderedAddMonoid

Mathlib/Data/Finsupp/Lex.lean

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -73,14 +73,18 @@ variable [LinearOrder α]
7373

7474
/-- The partial order on `Finsupp`s obtained by the lexicographic ordering.
7575
See `Finsupp.Lex.linearOrder` for a proof that this partial order is in fact linear. -/
76-
instance Lex.partialOrder [PartialOrder N] : PartialOrder (Lex (α →₀ N)) :=
77-
PartialOrder.lift (fun x ↦ toLex (⇑(ofLex x))) (FunLike.coe_injective (F := Finsupp α N))
76+
instance Lex.partialOrder [PartialOrder N] : PartialOrder (Lex (α →₀ N)) where
77+
lt := (· < ·)
78+
le x y := ⇑(ofLex x) = ⇑(ofLex y) ∨ x < y
79+
__ := PartialOrder.lift (fun x : Lex (α →₀ N) ↦ toLex (⇑(ofLex x)))
80+
(FunLike.coe_injective (F := Finsupp α N))
7881
#align finsupp.lex.partial_order Finsupp.Lex.partialOrder
7982

8083
/-- The linear order on `Finsupp`s obtained by the lexicographic ordering. -/
81-
instance Lex.linearOrder [LinearOrder N] : LinearOrder (Lex (α →₀ N)) :=
82-
{ @Lex.partialOrder α N _ _ _, -- Porting note: Added types to avoid typeclass inference problem.
83-
LinearOrder.lift' (toLex ∘ toDFinsupp ∘ ofLex) finsuppEquivDFinsupp.injective with }
84+
instance Lex.linearOrder [LinearOrder N] : LinearOrder (Lex (α →₀ N)) where
85+
lt := (· < ·)
86+
le := (· ≤ ·)
87+
__ := LinearOrder.lift' (toLex ∘ toDFinsupp ∘ ofLex) finsuppEquivDFinsupp.injective
8488
#align finsupp.lex.linear_order Finsupp.Lex.linearOrder
8589

8690
variable [PartialOrder N]
@@ -162,12 +166,12 @@ noncomputable instance Lex.orderedAddCommGroup [OrderedAddCommGroup N] :
162166

163167
noncomputable instance Lex.linearOrderedCancelAddCommMonoid [LinearOrderedCancelAddCommMonoid N] :
164168
LinearOrderedCancelAddCommMonoid (Lex (α →₀ N)) where
165-
__ := (inferInstance : LinearOrder (Lex (α →₀ N)))
166-
__ := (inferInstance: OrderedCancelAddCommMonoid (Lex (α →₀ N)))
169+
__ : LinearOrder (Lex (α →₀ N)) := inferInstance
170+
__ : OrderedCancelAddCommMonoid (Lex (α →₀ N)) := inferInstance
167171

168172
noncomputable instance Lex.linearOrderedAddCommGroup [LinearOrderedAddCommGroup N] :
169173
LinearOrderedAddCommGroup (Lex (α →₀ N)) where
170-
__ := (inferInstance : LinearOrder (Lex (α →₀ N)))
174+
__ : LinearOrder (Lex (α →₀ N)) := inferInstance
171175
add_le_add_left _ _ := add_le_add_left
172176

173177
end OrderedAddMonoid

Mathlib/Data/Pi/Lex.lean

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -245,14 +245,14 @@ instance Lex.orderedCommGroup [∀ i, OrderedCommGroup (β i)] :
245245
noncomputable instance Lex.linearOrderedCancelCommMonoid [IsWellOrder ι (· < ·)]
246246
[∀ i, LinearOrderedCancelCommMonoid (β i)] :
247247
LinearOrderedCancelCommMonoid (Lex (∀ i, β i)) where
248-
__ := (inferInstance : LinearOrder (Lex (∀ i, β i)))
249-
__ := (inferInstance: OrderedCancelCommMonoid (Lex (∀ i, β i)))
248+
__ : LinearOrder (Lex (∀ i, β i)) := inferInstance
249+
__ : OrderedCancelCommMonoid (Lex (∀ i, β i)) := inferInstance
250250

251251
@[to_additive]
252252
noncomputable instance Lex.linearOrderedCommGroup [IsWellOrder ι (· < ·)]
253253
[∀ i, LinearOrderedCommGroup (β i)] :
254254
LinearOrderedCommGroup (Lex (∀ i, β i)) where
255-
__ := (inferInstance : LinearOrder (Lex (∀ i, β i)))
255+
__ : LinearOrder (Lex (∀ i, β i)) := inferInstance
256256
mul_le_mul_left _ _ := mul_le_mul_left'
257257

258258
end OrderedMonoid

0 commit comments

Comments
 (0)