Typeclass for lawful monad lifting functions #
This module provides a typeclass LawfulMonadLiftFunction f that asserts that a function f
mapping values from one monad to another monad commutes with pure and bind. This equivalent to
the requirement that the MonadLift(T) instance induced by f admits a
LawfulMonadLift(T) instance.
instance Std.Internal.instLawfulMonadLiftFunctionId {m : Type u → Type v} [Monad m] :
LawfulMonadLiftFunction fun ⦃α : Type u⦄ => id
instance Std.Internal.instLawfulMonadLiftFunctionMonadLiftOfLawfulMonadLiftT {m : Type u → Type v} [Monad m] {n : Type u → Type w} [Monad n] [MonadLiftT m n] [LawfulMonadLiftT m n] :
LawfulMonadLiftFunction fun ⦃α : Type u⦄ => monadLift
theorem Std.Internal.LawfulMonadLiftFunction.lift_map {m : Type u → Type v} {n : Type u → Type w} [Monad m] [Monad n] {lift : ⦃α : Type u⦄ → m α → n α} {α β : Type u} [LawfulMonad m] [LawfulMonad n] [LawfulMonadLiftFunction lift] (f : α → β) (ma : m α) :
theorem Std.Internal.LawfulMonadLiftFunction.lift_seq {m : Type u → Type v} {n : Type u → Type w} [Monad m] [Monad n] {lift : ⦃α : Type u⦄ → m α → n α} {α β : Type u} [LawfulMonad m] [LawfulMonad n] [LawfulMonadLiftFunction lift] (mf : m (α → β)) (ma : m α) :
theorem Std.Internal.LawfulMonadLiftFunction.lift_seqLeft {m : Type u → Type v} {n : Type u → Type w} [Monad m] [Monad n] {lift : ⦃α : Type u⦄ → m α → n α} {α β : Type u} [LawfulMonad m] [LawfulMonad n] [LawfulMonadLiftFunction lift] (x : m α) (y : m β) :
theorem Std.Internal.LawfulMonadLiftFunction.lift_seqRight {m : Type u → Type v} {n : Type u → Type w} [Monad m] [Monad n] {lift : ⦃α : Type u⦄ → m α → n α} {α β : Type u} [LawfulMonad m] [LawfulMonad n] [LawfulMonadLiftFunction lift] (x : m α) (y : m β) :
theorem Std.Internal.LawfulMonadLiftFunction.idToMonad {m : Type u → Type v} [Monad m] [LawfulMonad m] :
instance Std.Internal.instLawfulMonadLiftOfLawfulMonadLiftFunction {m : Type u → Type v} {n : Type u → Type w} [Monad m] [Monad n] {lift : ⦃α : Type u⦄ → m α → n α} [LawfulMonadLiftFunction lift] :
LawfulMonadLift m n
instance Std.Internal.instLawfulMonadLiftFunctionOfLawfulMonadLiftBindFunctionBindOfLawfulMonad {m : Type u → Type v} {n : Type u → Type w} [Monad m] [Monad n] {lift : ⦃α : Type u⦄ → m α → n α} [LawfulMonadLiftBindFunction fun (x x_1 : Type u) (f : x → n x_1) (x_2 : m x) => lift x_2 >>= f] [LawfulMonad n] :
theorem Std.Internal.LawfulMonadLiftBindFunction.id {m : Type u → Type v} [Monad m] [LawfulMonad m] :
LawfulMonadLiftBindFunction fun (x : Type u_1) (x_1 : Type u) (f : x → m x_1) (x_2 : Id x) => f x_2.run
instance Std.Internal.instLawfulMonadLiftBindFunctionBindMonadLiftOfLawfulMonadLiftTOfLawfulMonad {m : Type u → Type v} [Monad m] {n : Type u → Type w} [Monad n] [MonadLiftT m n] [LawfulMonadLiftT m n] [LawfulMonad n] :
LawfulMonadLiftBindFunction fun (γ δ : Type u) (f : γ → n δ) (x : m γ) => monadLift x >>= f
instance Std.Internal.instLawfulMonadLiftBindFunctionIdRunOfLawfulMonad {n : Type u → Type w} [Monad n] [LawfulMonad n] :
LawfulMonadLiftBindFunction fun (γ : Type u_1) (δ : Type u) (f : γ → n δ) (x : Id γ) => f x.run
instance Std.Internal.instLawfulMonadLiftBindFunctionFlipForallBindOfLawfulMonad {m : Type u → Type v} [Monad m] [LawfulMonad m] :
LawfulMonadLiftBindFunction fun (x x_1 : Type u) => flip bind