Nuprl Lemma : mk_monad_wf
∀[M:Type ⟶ Type]. ∀[return:⋂T:Type. (T ⟶ (M T))]. ∀[bind:⋂T,S:Type.  ((M T) ⟶ (T ⟶ (M S)) ⟶ (M S))].
  (mk_monad(M;return;bind) ∈ Monad) supposing 
     ((∀[T,S,U:Type]. ∀[m:M T]. ∀[f:T ⟶ (M S)]. ∀[g:S ⟶ (M U)].
         ((bind (bind m f) g) = (bind m (λx.(bind (f x) g))) ∈ (M U))) and 
     (∀[T:Type]. ∀[m:M T].  ((bind m return) = m ∈ (M T))) and 
     (∀[T,S:Type]. ∀[x:T].  ∀f:T ⟶ (M S). ((bind (return x) f) = (f x) ∈ (M S))))
Proof
Definitions occuring in Statement : 
mk_monad: mk_monad(M;return;bind)
, 
monad: Monad
, 
uimplies: b supposing a
, 
uall: ∀[x:A]. B[x]
, 
all: ∀x:A. B[x]
, 
member: t ∈ T
, 
apply: f a
, 
lambda: λx.A[x]
, 
isect: ⋂x:A. B[x]
, 
function: x:A ⟶ B[x]
, 
universe: Type
, 
equal: s = t ∈ T
Definitions unfolded in proof : 
uall: ∀[x:A]. B[x]
, 
uimplies: b supposing a
, 
member: t ∈ T
, 
all: ∀x:A. B[x]
, 
subtype_rel: A ⊆r B
, 
implies: P 
⇒ Q
, 
prop: ℙ
, 
mk_monad: mk_monad(M;return;bind)
, 
monad: Monad
, 
squash: ↓T
, 
true: True
, 
guard: {T}
, 
iff: P 
⇐⇒ Q
, 
and: P ∧ Q
, 
rev_implies: P 
⇐ Q
, 
so_lambda: λ2x.t[x]
, 
so_apply: x[s]
, 
exists: ∃x:A. B[x]
Lemmas referenced : 
equal_wf, 
istype-universe, 
squash_wf, 
true_wf, 
subtype_rel_self, 
iff_weakening_equal, 
trivial-equal, 
isect_subtype_rel_trivial, 
subtype_rel_wf
Rules used in proof : 
sqequalSubstitution, 
sqequalTransitivity, 
computationStep, 
sqequalReflexivity, 
isect_memberFormation_alt, 
introduction, 
cut, 
sqequalRule, 
sqequalHypSubstitution, 
axiomEquality, 
equalityTransitivity, 
hypothesis, 
equalitySymmetry, 
isectIsType, 
because_Cache, 
universeIsType, 
applyEquality, 
hypothesisEquality, 
extract_by_obid, 
isectElimination, 
thin, 
lambdaFormation_alt, 
lambdaEquality_alt, 
functionIsType, 
inhabitedIsType, 
dependent_functionElimination, 
equalityIstype, 
independent_functionElimination, 
instantiate, 
universeEquality, 
dependent_pairEquality_alt, 
isect_memberEquality_alt, 
imageElimination, 
natural_numberEquality, 
imageMemberEquality, 
baseClosed, 
independent_isectElimination, 
productElimination, 
functionEquality, 
cumulativity, 
isectEquality, 
dependent_pairFormation_alt, 
productIsType
Latex:
\mforall{}[M:Type  {}\mrightarrow{}  Type].  \mforall{}[return:\mcap{}T:Type.  (T  {}\mrightarrow{}  (M  T))].  \mforall{}[bind:\mcap{}T,S:Type.
                                                                                                                          ((M  T)  {}\mrightarrow{}  (T  {}\mrightarrow{}  (M  S))  {}\mrightarrow{}  (M  S))].
    (mk\_monad(M;return;bind)  \mmember{}  Monad)  supposing 
          ((\mforall{}[T,S,U:Type].  \mforall{}[m:M  T].  \mforall{}[f:T  {}\mrightarrow{}  (M  S)].  \mforall{}[g:S  {}\mrightarrow{}  (M  U)].
                  ((bind  (bind  m  f)  g)  =  (bind  m  (\mlambda{}x.(bind  (f  x)  g)))))  and 
          (\mforall{}[T:Type].  \mforall{}[m:M  T].    ((bind  m  return)  =  m))  and 
          (\mforall{}[T,S:Type].  \mforall{}[x:T].    \mforall{}f:T  {}\mrightarrow{}  (M  S).  ((bind  (return  x)  f)  =  (f  x))))
Date html generated:
2019_10_15-AM-10_59_27
Last ObjectModification:
2018_12_08-PM-04_47_35
Theory : monads
Home
Index