Documentation

AbstractInterpretation.GaloisConnection

structure GaloisConnection {L : Type u_1} {M : Type u_2} [Poset L] [Poset M] (alpha : LM) (gamma : ML) :
Instances For
    structure Adjunction {L : Type u_1} {M : Type u_2} [Poset L] [Poset M] (alpha : LM) (gamma : ML) :
    Instances For
      theorem galois_to_adjunction {L : Type u_1} {M : Type u_2} [Poset L] [Poset M] {alpha : LM} {gamma : ML} (gc : GaloisConnection alpha gamma) :
      Adjunction alpha gamma
      theorem adjunction_to_unit {L : Type u_1} {M : Type u_2} [Poset L] [Poset M] {alpha : LM} {gamma : ML} (adj : Adjunction alpha gamma) (l : L) :
      Poset.le l (gamma (alpha l))
      theorem adjunction_to_counit {L : Type u_1} {M : Type u_2} [Poset L] [Poset M] {alpha : LM} {gamma : ML} (adj : Adjunction alpha gamma) (m : M) :
      Poset.le (alpha (gamma m)) m
      theorem adjunction_to_galois {L : Type u_1} {M : Type u_2} [Poset L] [Poset M] {alpha : LM} {gamma : ML} (adj : Adjunction alpha gamma) :
      GaloisConnection alpha gamma
      theorem adjunction_iff_galois {L : Type u_1} {M : Type u_2} [Poset L] [Poset M] {alpha : LM} {gamma : ML} :
      Adjunction alpha gamma GaloisConnection alpha gamma
      theorem galois_alpha_idem {L : Type u_1} {M : Type u_2} [Poset L] [Poset M] {alpha : LM} {gamma : ML} (gc : GaloisConnection alpha gamma) (l : L) :
      alpha (gamma (alpha l)) = alpha l
      theorem galois_gamma_idem {L : Type u_1} {M : Type u_2} [Poset L] [Poset M] {alpha : LM} {gamma : ML} (gc : GaloisConnection alpha gamma) (m : M) :
      gamma (alpha (gamma m)) = gamma m
      theorem alpha_preserve_ub {L : Type u_1} {M : Type u_2} [CompleteLattice L] [CompleteLattice M] {alpha : LM} {gamma : ML} (gc : GaloisConnection alpha gamma) (ub : M) (L' : Set L) :
      Poset.le (alpha (L')) ub Poset.le (alpha '' L') ub
      theorem galois_to_alpha_is_additive {L : Type u_1} {M : Type u_2} [CompleteLattice L] [CompleteLattice M] {alpha : LM} {gamma : ML} (gc : GaloisConnection alpha gamma) (L' : Set L) :
      alpha (L') = (alpha '' L')
      theorem galois_gamma_uniqueness {L : Type u_1} {M : Type u_2} [Poset L] [Poset M] {alpha : LM} {gamma1 gamma2 : ML} (gc1 : GaloisConnection alpha gamma1) (gc2 : GaloisConnection alpha gamma2) (m : M) :
      gamma1 m = gamma2 m
      def gamma_by_alpha {L : Type u_1} {M : Type u_2} [CompleteLattice L] [CompleteLattice M] (alpha : LM) :
      ML
      Equations
      Instances For
        theorem gamma_by_alpha_mono {L : Type u_1} {M : Type u_2} [CompleteLattice L] [CompleteLattice M] (alpha : LM) :
        theorem gamma_by_alpha_unit {L : Type u_1} {M : Type u_2} [CompleteLattice L] [CompleteLattice M] (alpha : LM) (l : L) :
        Poset.le l (gamma_by_alpha alpha (alpha l))
        def determine_gamma_by_alpha {L : Type u_1} {M : Type u_2} [CompleteLattice L] [CompleteLattice M] {alpha : LM} {gamma : ML} (gc : GaloisConnection alpha gamma) :
        Equations
        • =
        Instances For
          theorem galois_gamma_by_alpha {L : Type u_1} {M : Type u_2} [CompleteLattice L] [CompleteLattice M] {alpha : LM} {gamma : ML} (gc : GaloisConnection alpha gamma) (m : M) :
          gamma m = gamma_by_alpha alpha m
          theorem alpha_additive_to_galois {L : Type u_1} {M : Type u_2} [CompleteLattice L] [CompleteLattice M] {alpha : LM} (alpha_additive : ∀ (L' : Set L), alpha (L') = (alpha '' L')) :
          theorem galois_exists_if_alpha_is_additive {L : Type u_1} {M : Type u_2} [CompleteLattice L] [CompleteLattice M] {alpha : LM} (alpha_additive : ∀ (L' : Set L), alpha (L') = (alpha '' L')) :
          (gamma : ML), GaloisConnection alpha gamma
          theorem galois_iff_alpha_is_additive {L : Type u_1} {M : Type u_2} [CompleteLattice L] [CompleteLattice M] {alpha : LM} :
          ( (gamma : ML), GaloisConnection alpha gamma) ∀ (L' : Set L), alpha (L') = (alpha '' L')
          theorem galois_connection_dual {L : Type u_1} {M : Type u_2} [instL : Poset L] [instM : Poset M] {alpha : LM} {gamma : ML} (gc : GaloisConnection alpha gamma) :
          have instL' := { le := fun (x y : L) => Poset.le y x, le_refl := , le_trans := , le_antisym := }; have instM' := { le := fun (x y : M) => Poset.le y x, le_refl := , le_trans := , le_antisym := }; GaloisConnection gamma alpha