Properties of list canonicalization #
This file contains lemmas about list canonicalization.
insertCanonical #
theorem
List.insertCanonical_singleton
{β : Type u_1}
{α : Type u_2}
[LT β]
[DecidableLT β]
(f : α → β)
(x : α)
:
theorem
List.insertCanonical_not_nil
{β : Type u_1}
{α : Type u_2}
[DecidableEq β]
[LT β]
[DecidableLT β]
(f : α → β)
(x : α)
(xs : List α)
:
theorem
List.insertCanonical_mem
{β : Type u_1}
{α : Type u_2}
[LT β]
[Cedar.Data.StrictLT β]
[DecidableLT β]
{f : α → β}
{xs : List α}
(x : α)
:
@[irreducible]
theorem
List.insertCanonical_find?
{β : Type u_1}
{α : Type u_2}
[LT β]
[Cedar.Data.StrictLT β]
[DecidableLT β]
[BEq β]
[LawfulBEq β]
{f : α → β}
{xs : List α}
(x : α)
:
@[irreducible]
theorem
List.insertCanonical_preserves_find_other_element
{α : Type u_1}
{β : Type u_2}
[LT α]
[DecidableLT α]
[BEq α]
[Cedar.Data.StrictLT α]
(k : α)
(x : α × β)
(xs : List (α × β))
:
theorem
List.insertCanonical_sortedBy
{β : Type u_1}
{α : Type u_2}
[LT β]
[Cedar.Data.StrictLT β]
[DecidableLT β]
{f : α → β}
{xs : List α}
(x : α)
:
SortedBy f xs → SortedBy f (insertCanonical f x xs)
theorem
List.insertCanonical_subset
{β : Type u_1}
{α : Type u_2}
[LT β]
[DecidableLT β]
(f : α → β)
(x : α)
(xs : List α)
:
theorem
List.insertCanonical_equiv
{α : Type u_1}
[LT α]
[Cedar.Data.StrictLT α]
[DecidableLT α]
(x : α)
(xs : List α)
:
theorem
List.insertCanonical_preserves_forallᵥ
{α : Type u_1}
{β : Type u_2}
{γ : Type u_3}
[LT α]
[Cedar.Data.StrictLT α]
[DecidableLT α]
{p : β → γ → Prop}
{kv₁ : α × β}
{kv₂ : α × γ}
{kvs₁ : List (α × β)}
{kvs₂ : List (α × γ)}
(h₁ : kv₁.fst = kv₂.fst ∧ p kv₁.snd kv₂.snd)
(h₂ : Forallᵥ p kvs₁ kvs₂)
:
Forallᵥ p (insertCanonical Prod.fst kv₁ kvs₁) (insertCanonical Prod.fst kv₂ kvs₂)
theorem
List.insertCanonical_map_fst
{α : Type u_1}
{β : Type u_2}
{γ : Type u_3}
[LT α]
[Cedar.Data.StrictLT α]
[DecidableLT α]
(xs : List (α × β))
(f : β → γ)
(x : α × β)
:
theorem
List.insertCanonical_map_fst_canonicalize
{α : Type u_1}
{β : Type u_2}
{γ : Type u_3}
[LT α]
[Cedar.Data.StrictLT α]
[DecidableLT α]
(xs : List (α × β))
(f : β → γ)
(x : α × β)
:
insertCanonical Prod.fst (Prod.map id f x) (canonicalize Prod.fst (map (Prod.map id f) xs)) = map (Prod.map id f) (insertCanonical Prod.fst x (canonicalize Prod.fst xs))
canonicalize #
theorem
List.canonicalize_nil'
{β : Type u_1}
{α : Type u_2}
[DecidableEq β]
[LT β]
[DecidableLT β]
(f : α → β)
(xs : List α)
:
theorem
List.canonicalize_not_nil
{β : Type u_1}
{α : Type u_2}
[DecidableEq β]
[LT β]
[DecidableLT β]
(f : α → β)
(xs : List α)
:
theorem
List.canonicalize_cons
{β : Type u_1}
{α : Type u_2}
{ys : List α}
[LT β]
[DecidableLT β]
(f : α → β)
(xs : List α)
(a : α)
:
canonicalize f xs = canonicalize f ys → canonicalize f (a :: xs) = canonicalize f (a :: ys)
theorem
List.canonicalize_singleton
{β : Type u_1}
{α : Type u_2}
[LT β]
[DecidableLT β]
(f : α → β)
(x : α)
:
theorem
List.canonicalize_sortedBy
{β : Type u_1}
{α : Type u_2}
[LT β]
[Cedar.Data.StrictLT β]
[DecidableLT β]
(f : α → β)
(xs : List α)
:
SortedBy f (canonicalize f xs)
theorem
List.sortedBy_implies_canonicalize_eq
{β : Type u_1}
{α : Type u_2}
[LT β]
[Cedar.Data.StrictLT β]
[DecidableLT β]
{f : α → β}
{xs : List α}
:
SortedBy f xs → canonicalize f xs = xs
theorem
List.canonicalize_subseteq
{β : Type u_1}
{α : Type u_2}
[LT β]
[Cedar.Data.StrictLT β]
[DecidableLT β]
(f : α → β)
(xs : List α)
:
theorem
List.in_canonicalize_in_list
{β : Type u_1}
{α : Type u_2}
[LT β]
[Cedar.Data.StrictLT β]
[DecidableLT β]
{f : α → β}
{x : α}
{xs : List α}
:
x ∈ canonicalize f xs → x ∈ xs
Corollary of canonicalize_subseteq
theorem
List.canonicalize_equiv
{α : Type u_1}
[LT α]
[Cedar.Data.StrictLT α]
[DecidableLT α]
(xs : List α)
:
theorem
List.equiv_implies_canonical_eq
{α : Type u_1}
[LT α]
[Cedar.Data.StrictLT α]
[DecidableLT α]
(xs ys : List α)
:
xs ≡ ys → canonicalize id xs = canonicalize id ys
theorem
List.canonicalize_idempotent
{α : Type u_1}
{β : Type u_2}
[LT β]
[Cedar.Data.StrictLT β]
[DecidableLT β]
(f : α → β)
(xs : List α)
:
theorem
List.canonicalize_id_filter
{α : Type u_1}
[LT α]
[Cedar.Data.StrictLT α]
[DecidableLT α]
(p : α → Bool)
(xs : List α)
:
theorem
List.canonicalize_preserves_forallᵥ
{α : Type u_1}
{β : Type u_2}
{γ : Type u_3}
[LT α]
[Cedar.Data.StrictLT α]
[DecidableLT α]
(p : β → γ → Prop)
(kvs₁ : List (α × β))
(kvs₂ : List (α × γ))
:
Forallᵥ p kvs₁ kvs₂ → Forallᵥ p (canonicalize Prod.fst kvs₁) (canonicalize Prod.fst kvs₂)
theorem
List.canonicalize_of_map_fst
{α : Type u_1}
{β : Type u_2}
{γ : Type u_3}
[LT α]
[Cedar.Data.StrictLT α]
[DecidableLT α]
(xs : List (α × β))
(f : β → γ)
: