Nuprl Definition : map-sig

map-sig{i:l}(Key;Value) ==
  "map":{m:Type| (valueall-type(m)) supposing (valueall-type(Value) and valueall-type(Key))} 
  "eqKey":EqDecider(Key)
  "find":Key ─→ self."map" ─→ (Value?)
  "inDom":{f:Key ─→ self."map" ─→ 𝔹| ∀k:Key. ∀m:self."map".  (↑(f m) ⇐⇒ ↑isl(self."find" m))} 
  "empty":{m:self."map"| ∀k:Key. (¬↑(self."inDom" m))} 
  "isEmpty":{f:self."map" ─→ 𝔹| ∀m:self."map". (↑(f m) ⇐⇒ ∀k:Key. (¬↑(self."inDom" m)))} 
  "update":{f:Key ─→ Value ─→ self."map" ─→ self."map"| 
            ∀m:self."map". ∀k1,k2:Key. ∀v:Value.
              ((self."find" k1 (f k2 m)) if self."eqKey" k1 k2 then inl else self."find" k1 fi  ∈ (Value?))} 
  "add":{f:Key ─→ Value ─→ self."map" ─→ self."map"| 
         ∀m:self."map". ∀k1,k2:Key. ∀v:Value.
           ((self."find" k1 (f k2 m))
           if (self."eqKey" k1 k2) ∧b b(self."inDom" k2 m)) then inl else self."find" k1 fi 
           ∈ (Value?))} 
  "remove":{f:Key ─→ self."map" ─→ self."map"| 
            ∀m:self."map". ∀k1,k2:Key.
              ((self."find" k1 (f k2 m)) if self."eqKey" k1 k2 then inr ⋅  else self."find" k1 fi  ∈ (Value?))} 



Definitions occuring in Statement :  deq: EqDecider(T) band: p ∧b q valueall-type: valueall-type(T) bnot: ¬bb assert: b ifthenelse: if then else fi  isl: isl(x) bool: 𝔹 it: uimplies: supposing a top: Top all: x:A. B[x] iff: ⇐⇒ Q not: ¬A unit: Unit set: {x:A| B[x]}  apply: a function: x:A ─→ B[x] inr: inr  inl: inl x union: left right token: "$token" universe: Type equal: t ∈ T record-select: r.x record+: record+ record: record(x.T[x])
FDL editor aliases :  map-sig
map-sig\{i:l\}(Key;Value)  ==
    "map":\{m:Type|  (valueall-type(m))  supposing  (valueall-type(Value)  and  valueall-type(Key))\} 
    "eqKey":EqDecider(Key)
    "find":Key  {}\mrightarrow{}  self."map"  {}\mrightarrow{}  (Value?)
    "inDom":\{f:Key  {}\mrightarrow{}  self."map"  {}\mrightarrow{}  \mBbbB{}|  \mforall{}k:Key.  \mforall{}m:self."map".    (\muparrow{}(f  k  m)  \mLeftarrow{}{}\mRightarrow{}  \muparrow{}isl(self."find"  k  m))\} 
    "empty":\{m:self."map"|  \mforall{}k:Key.  (\mneg{}\muparrow{}(self."inDom"  k  m))\} 
    "isEmpty":\{f:self."map"  {}\mrightarrow{}  \mBbbB{}|  \mforall{}m:self."map".  (\muparrow{}(f  m)  \mLeftarrow{}{}\mRightarrow{}  \mforall{}k:Key.  (\mneg{}\muparrow{}(self."inDom"  k  m)))\} 
    "update":\{f:Key  {}\mrightarrow{}  Value  {}\mrightarrow{}  self."map"  {}\mrightarrow{}  self."map"| 
                        \mforall{}m:self."map".  \mforall{}k1,k2:Key.  \mforall{}v:Value.
                            ((self."find"  k1  (f  k2  v  m))
                            =  if  self."eqKey"  k1  k2  then  inl  v  else  self."find"  k1  m  fi  )\} 
    "add":\{f:Key  {}\mrightarrow{}  Value  {}\mrightarrow{}  self."map"  {}\mrightarrow{}  self."map"| 
                  \mforall{}m:self."map".  \mforall{}k1,k2:Key.  \mforall{}v:Value.
                      ((self."find"  k1  (f  k2  v  m))
                      =  if  (self."eqKey"  k1  k2)  \mwedge{}\msubb{}  (\mneg{}\msubb{}(self."inDom"  k2  m))
                          then  inl  v
                          else  self."find"  k1  m
                          fi  )\} 
    "remove":\{f:Key  {}\mrightarrow{}  self."map"  {}\mrightarrow{}  self."map"| 
                        \mforall{}m:self."map".  \mforall{}k1,k2:Key.
                            ((self."find"  k1  (f  k2  m))
                            =  if  self."eqKey"  k1  k2  then  inr  \mcdot{}    else  self."find"  k1  m  fi  )\} 



Date html generated: 2015_07_17-AM-08_21_59
Last ObjectModification: 2014_07_30-PM-02_34_34

Home Index