Die Agda-Standardbibliothek enthält einige Module Relation.Binary.*.(Non)StrictLex
(derzeit nur für Product
und List
). Wir können diese Module verwenden, um leicht eine Instanz von beispielsweise IsStrictTotalOrder
für Paare von natürlichen Zahlen zu konstruieren (d. H. ℕ × ℕ
).Lexikographische Anordnung von Paaren/Listen in Agda mit der Standardbibliothek
open import Data.Nat as ℕ using (ℕ; _<_)
open import Data.Nat.Properties as ℕ
open import Relation.Binary using (module StrictTotalOrder; IsStrictTotalOrder)
open import Relation.Binary.PropositionalEquality using (_≡_)
open import Relation.Binary.Product.StrictLex using (×-Lex; _×-isStrictTotalOrder_)
open import Relation.Binary.Product.Pointwise using (_×-Rel_)
ℕ-isSTO : IsStrictTotalOrder _≡_ _<_
ℕ-isSTO = StrictTotalOrder.isStrictTotalOrder ℕ.strictTotalOrder
ℕ×ℕ-isSTO : IsStrictTotalOrder (_≡_ ×-Rel _≡_) (×-Lex _≡_ _<_ _<_)
ℕ×ℕ-isSTO = ℕ-isSTO ×-isStrictTotalOrder ℕ-isSTO
Dies erzeugt eine Instanz mit der punktuellen Gleichheit _≡_ ×-Rel _≡_
. Im Fall der propositionalen Gleichheit sollte dies gleichbedeutend mit der Verwendung von aussagengleichheit sein.
Gibt es eine einfache Möglichkeit, die obige Instanz in eine Instanz des Typs IsStrictTotalOrder _≡_ (×-Lex _≡_ _<_ _<_)
zu konvertieren, wobei die normale propositionale Gleichheit verwendet wird?