@@ -29,7 +29,7 @@ be satisfied by itself and all stricter types.
29
29
* `complete_lattice_hom_class`
30
30
-/
31
31
32
- open function
32
+ open function order_dual
33
33
34
34
variables {F α β γ δ : Type *} {ι : Sort *} {κ : ι → Sort *}
35
35
@@ -149,6 +149,13 @@ instance complete_lattice_hom_class.to_bounded_lattice_hom_class [complete_latti
149
149
bounded_lattice_hom_class F α β :=
150
150
{ ..Sup_hom_class.to_bot_hom_class, ..Inf_hom_class.to_top_hom_class }
151
151
152
+ @[priority 100 ] -- See note [lower instance priority]
153
+ instance order_iso.complete_lattice_hom_class [complete_lattice α] [complete_lattice β] :
154
+ complete_lattice_hom_class (α ≃o β) α β :=
155
+ { map_Sup := λ f s, (f.map_Sup s).trans Sup_image.symm,
156
+ map_Inf := λ f s, (f.map_Inf s).trans Inf_image.symm,
157
+ ..rel_iso.rel_hom_class }
158
+
152
159
instance [has_Sup α] [has_Sup β] [Sup_hom_class F α β] : has_coe_t F (Sup_hom α β) :=
153
160
⟨λ f, ⟨f, map_Sup f⟩⟩
154
161
@@ -325,6 +332,26 @@ instance : order_top (Inf_hom α β) := ⟨⊤, λ f a, le_top⟩
325
332
326
333
end Inf_hom
327
334
335
+ /-- Reinterpret a `⨆`-homomorphism as an `⨅`-homomorphism between the dual orders. -/
336
+ @[simps] protected def Sup_hom.dual [has_Sup α] [has_Sup β] :
337
+ Sup_hom α β ≃ Inf_hom (order_dual α) (order_dual β) :=
338
+ { to_fun := λ f, { to_fun := to_dual ∘ f ∘ of_dual,
339
+ map_Inf' := λ _, congr_arg to_dual (map_Sup f _) },
340
+ inv_fun := λ f, { to_fun := of_dual ∘ f ∘ to_dual,
341
+ map_Sup' := λ _, congr_arg of_dual (map_Inf f _) },
342
+ left_inv := λ f, Sup_hom.ext $ λ a, rfl,
343
+ right_inv := λ f, Inf_hom.ext $ λ a, rfl }
344
+
345
+ /-- Reinterpret an `⨅`-homomorphism as a `⨆`-homomorphism between the dual orders. -/
346
+ @[simps] protected def Inf_hom.dual [has_Inf α] [has_Inf β] :
347
+ Inf_hom α β ≃ Sup_hom (order_dual α) (order_dual β) :=
348
+ { to_fun := λ f, { to_fun := to_dual ∘ f ∘ of_dual,
349
+ map_Sup' := λ _, congr_arg to_dual (map_Inf f _) },
350
+ inv_fun := λ f, { to_fun := of_dual ∘ f ∘ to_dual,
351
+ map_Inf' := λ _, congr_arg of_dual (map_Sup f _) },
352
+ left_inv := λ f, Inf_hom.ext $ λ a, rfl,
353
+ right_inv := λ f, Sup_hom.ext $ λ a, rfl }
354
+
328
355
/-! ### Frame homomorphisms -/
329
356
330
357
namespace frame_hom
@@ -413,6 +440,9 @@ instance : complete_lattice_hom_class (complete_lattice_hom α β) α β :=
413
440
map_Sup := λ f, f.map_Sup',
414
441
map_Inf := λ f, f.map_Inf' }
415
442
443
+ /-- Reinterpret a `complete_lattice_hom` as a `bounded_lattice_hom`. -/
444
+ def to_bounded_lattice_hom (f : complete_lattice_hom α β) : bounded_lattice_hom α β := f
445
+
416
446
/-- Helper instance for when there's too many metavariables to apply `fun_like.has_coe_to_fun`
417
447
directly. -/
418
448
instance : has_coe_to_fun (complete_lattice_hom α β) (λ _, α → β) := ⟨λ f, f.to_fun⟩
@@ -466,4 +496,14 @@ lemma cancel_left {g : complete_lattice_hom β γ} {f₁ f₂ : complete_lattice
466
496
g.comp f₁ = g.comp f₂ ↔ f₁ = f₂ :=
467
497
⟨λ h, ext $ λ a, hg $ by rw [←comp_apply, h, comp_apply], congr_arg _⟩
468
498
499
+ /-- Reinterpret a lattice homomorphism as a lattice homomorphism between the dual lattices. -/
500
+ @[simps] protected def dual :
501
+ complete_lattice_hom α β ≃ complete_lattice_hom (order_dual α) (order_dual β) :=
502
+ { to_fun := λ f, { to_Sup_hom := f.to_Inf_hom.dual,
503
+ map_Inf' := λ _, congr_arg to_dual (map_Sup f _) },
504
+ inv_fun := λ f, { to_Sup_hom := f.to_Inf_hom.dual,
505
+ map_Inf' := λ _, congr_arg of_dual (map_Sup f _) },
506
+ left_inv := λ f, ext $ λ a, rfl,
507
+ right_inv := λ f, ext $ λ a, rfl }
508
+
469
509
end complete_lattice_hom
0 commit comments