Documentation

Mathlib.Logic.Function.Conjugate

Semiconjugate and commuting maps #

We define the following predicates:

def Function.Semiconj {α : Type u_1} {β : Type u_2} (f : α → β) (ga : α → α) (gb : β → β) :

We say that f : α → β semiconjugates ga : α → α to gb : β → β if f ∘ ga = gb ∘ f. We use ∀ x, f (ga x) = gb (f x) as the definition, so given h : Function.Semiconj f ga gb and a : α, we have h a : f (ga a) = gb (f a) and h.comp_eq : f ∘ ga = gb ∘ f.

Equations
Instances For
    theorem Function.Semiconj.comp_eq {α : Type u_1} {β : Type u_2} {f : α → β} {ga : α → α} {gb : β → β} (h : Function.Semiconj f ga gb) :
    f ∘ ga = gb ∘ f
    theorem Function.Semiconj.eq {α : Type u_1} {β : Type u_2} {f : α → β} {ga : α → α} {gb : β → β} (h : Function.Semiconj f ga gb) (x : α) :
    f (ga x) = gb (f x)
    theorem Function.Semiconj.comp_right {α : Type u_1} {β : Type u_2} {f : α → β} {ga : α → α} {ga' : α → α} {gb : β → β} {gb' : β → β} (h : Function.Semiconj f ga gb) (h' : Function.Semiconj f ga' gb') :
    Function.Semiconj f (ga ∘ ga') (gb ∘ gb')
    theorem Function.Semiconj.comp_left {α : Type u_1} {β : Type u_2} {γ : Type u_3} {fab : α → β} {fbc : β → γ} {ga : α → α} {gb : β → β} {gc : γ → γ} (hab : Function.Semiconj fab ga gb) (hbc : Function.Semiconj fbc gb gc) :
    Function.Semiconj (fbc ∘ fab) ga gc
    theorem Function.Semiconj.id_right {α : Type u_1} {β : Type u_2} {f : α → β} :
    theorem Function.Semiconj.id_left {α : Type u_1} {ga : α → α} :
    theorem Function.Semiconj.inverses_right {α : Type u_1} {β : Type u_2} {f : α → β} {ga : α → α} {ga' : α → α} {gb : β → β} {gb' : β → β} (h : Function.Semiconj f ga gb) (ha : Function.RightInverse ga' ga) (hb : Function.LeftInverse gb' gb) :
    theorem Function.Semiconj.option_map {α : Type u_1} {β : Type u_2} {f : α → β} {ga : α → α} {gb : β → β} (h : Function.Semiconj f ga gb) :
    def Function.Commute {α : Type u_1} (f : α → α) (g : α → α) :

    Two maps f g : α → α commute if f (g x) = g (f x) for all x : α. Given h : Function.commute f g and a : α, we have h a : f (g a) = g (f a) and h.comp_eq : f ∘ g = g ∘ f.

    Equations
    Instances For
      theorem Function.Semiconj.commute {α : Type u_1} {f : α → α} {g : α → α} (h : Function.Semiconj f g g) :

      Reinterpret Function.Semiconj f g g as Function.Commute f g. These two predicates are definitionally equal but have different dot-notation lemmas.

      theorem Function.Commute.semiconj {α : Type u_1} {f : α → α} {g : α → α} (h : Function.Commute f g) :

      Reinterpret Function.Commute f g as Function.Semiconj f g g. These two predicates are definitionally equal but have different dot-notation lemmas.

      theorem Function.Commute.refl {α : Type u_1} (f : α → α) :
      theorem Function.Commute.symm {α : Type u_1} {f : α → α} {g : α → α} (h : Function.Commute f g) :
      theorem Function.Commute.comp_right {α : Type u_1} {f : α → α} {g : α → α} {g' : α → α} (h : Function.Commute f g) (h' : Function.Commute f g') :
      theorem Function.Commute.comp_left {α : Type u_1} {f : α → α} {f' : α → α} {g : α → α} (h : Function.Commute f g) (h' : Function.Commute f' g) :
      theorem Function.Commute.id_right {α : Type u_1} {f : α → α} :
      theorem Function.Commute.id_left {α : Type u_1} {f : α → α} :
      theorem Function.Commute.option_map {α : Type u_1} {f : α → α} {g : α → α} :
      def Function.Semiconj₂ {α : Type u_1} {β : Type u_2} (f : α → β) (ga : α → α → α) (gb : β → β → β) :

      A map f semiconjugates a binary operation ga to a binary operation gb if for all x, y we have f (ga x y) = gb (f x) (f y). E.g., a MonoidHom semiconjugates (*) to (*).

      Equations
      Instances For
        theorem Function.Semiconj₂.eq {α : Type u_1} {β : Type u_2} {f : α → β} {ga : α → α → α} {gb : β → β → β} (h : Function.Semiconj₂ f ga gb) (x : α) (y : α) :
        f (ga x y) = gb (f x) (f y)
        theorem Function.Semiconj₂.comp_eq {α : Type u_1} {β : Type u_2} {f : α → β} {ga : α → α → α} {gb : β → β → β} (h : Function.Semiconj₂ f ga gb) :
        theorem Function.Semiconj₂.id_left {α : Type u_1} (op : α → α → α) :
        theorem Function.Semiconj₂.comp {α : Type u_1} {β : Type u_2} {γ : Type u_3} {f : α → β} {ga : α → α → α} {gb : β → β → β} {f' : β → γ} {gc : γ → γ → γ} (hf' : Function.Semiconj₂ f' gb gc) (hf : Function.Semiconj₂ f ga gb) :
        theorem Function.Semiconj₂.isAssociative_right {α : Type u_1} {β : Type u_2} {f : α → β} {ga : α → α → α} {gb : β → β → β} [IsAssociative α ga] (h : Function.Semiconj₂ f ga gb) (h_surj : Function.Surjective f) :
        theorem Function.Semiconj₂.isAssociative_left {α : Type u_1} {β : Type u_2} {f : α → β} {ga : α → α → α} {gb : β → β → β} [IsAssociative β gb] (h : Function.Semiconj₂ f ga gb) (h_inj : Function.Injective f) :
        theorem Function.Semiconj₂.isIdempotent_right {α : Type u_1} {β : Type u_2} {f : α → β} {ga : α → α → α} {gb : β → β → β} [IsIdempotent α ga] (h : Function.Semiconj₂ f ga gb) (h_surj : Function.Surjective f) :
        theorem Function.Semiconj₂.isIdempotent_left {α : Type u_1} {β : Type u_2} {f : α → β} {ga : α → α → α} {gb : β → β → β} [IsIdempotent β gb] (h : Function.Semiconj₂ f ga gb) (h_inj : Function.Injective f) :