<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:at="http://www.sixapart.com/ns/at"
    xmlns:icbm="http://postneo.com/icbm"
    xmlns:rvw="http://purl.org/NET/RVW/0.2/"
    xmlns:media="http://search.yahoo.com/mrss">
    <channel>
        <title>vagston’s blog</title>
        <link>http://vagston.vox.com/library/posts/page/1/</link>
        <description></description>
        <language>en</language>
        <generator>Vox</generator>
        <lastBuildDate>Thu, 09 Jul 2009 01:55:39 -0700</lastBuildDate>
        <copyright>Copyright 2009</copyright>
        <docs>http://blogs.law.harvard.edu/tech/rss</docs>  
 
        <item>
            <title>Tiny proof assistant in Clean without Curry-Howard Isomorphism</title>
            <link>http://vagston.vox.com/library/post/tiny-proof-assistant-in-clean-without-curry-howard-isomorphism.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(vagston)</author>
            <comments>http://vagston.vox.com/library/post/tiny-proof-assistant-in-clean-without-curry-howard-isomorphism.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://vagston.vox.com/library/post/tiny-proof-assistant-in-clean-without-curry-howard-isomorphism.html?_c=feed-rss-full</guid> 
            <pubDate>Thu, 09 Jul 2009 01:55:39 -0700</pubDate>         
            
            <description>    &lt;pre&gt;&lt;pre&gt;&lt;br /&gt;module tst&lt;br /&gt;&lt;br /&gt;import StdGeneric, GenEq, StdMisc&lt;br /&gt;from StdEnv import&lt;br /&gt; instance == {#Char}, instance == Int, instance == Real,&lt;br /&gt; &amp;amp;&amp;amp;, class == (..), instance == [a] | == a&lt;br /&gt;&lt;br /&gt;Start = let p = pvar &amp;quot;P&amp;quot; in [notI2 p,notE2_nc p,notE3 p,notE3_nc p,errNotE2 p]&lt;br /&gt;where&lt;br /&gt; impOpen r p = impE r (assum p)&lt;br /&gt; mix a b&lt;br /&gt;  # r = andI a b&lt;br /&gt;  # r = andE r&lt;br /&gt;  = r&lt;br /&gt; mix` a b&lt;br /&gt;  # r = andI a b&lt;br /&gt;  # r = andE` r&lt;br /&gt;  = r&lt;br /&gt; /*&lt;br /&gt;        p, p -&amp;gt; _|_ |- _|_&lt;br /&gt;  -----------------------------&lt;br /&gt;   p |- (p -&amp;gt; _|_) -&amp;gt; _|_&lt;br /&gt; */&lt;br /&gt; notI2 p&lt;br /&gt;  # a = assum p&lt;br /&gt;  # b = assum (p --&amp;gt; B)&lt;br /&gt;  # r = mix` a b&lt;br /&gt;  # r = impOpen r p&lt;br /&gt;  # r = impI r (p --&amp;gt; B)&lt;br /&gt;  = r&lt;br /&gt;&lt;br /&gt; /*&lt;br /&gt;  ~p,~~p |- ~p /\ ~~p&lt;br /&gt;  --------------- assum(~p),assum(~~p),andI,contra,absurd(p)&lt;br /&gt;   ~p&lt;br /&gt; */&lt;br /&gt; notE2_nc p // !!!!!! [!] !!!!!!!&lt;br /&gt;  # np = ~ p&lt;br /&gt;  # nnp = ~ np&lt;br /&gt;  # a = assum np&lt;br /&gt;  # b = assum nnp&lt;br /&gt;  # r = contra a b&lt;br /&gt;  # r = absurd r p&lt;br /&gt;  = r&lt;br /&gt;&lt;br /&gt; /*&lt;br /&gt;   P |- (P --&amp;gt; _|_) --&amp;gt; _|_&lt;br /&gt;   ((P --&amp;gt; _|_) --&amp;gt; _|_) --&amp;gt; _|_ |- ((P --&amp;gt; _|_) --&amp;gt; _|_) --&amp;gt; _|_&lt;br /&gt;   ((P --&amp;gt; _|_) --&amp;gt; _|_) --&amp;gt; _|_, P |- _|_&lt;br /&gt;  -------------------------------------------------&lt;br /&gt;   ((P --&amp;gt; _|_) --&amp;gt; _|_) --&amp;gt; _|_ |- P --&amp;gt; _|_&lt;br /&gt; */&lt;br /&gt; notE3 p&lt;br /&gt;  # n3 = ((p --&amp;gt; B) --&amp;gt; B) --&amp;gt; B&lt;br /&gt;  # a = notI2 p&lt;br /&gt;  # b = assum n3&lt;br /&gt;  # r = contra a b&lt;br /&gt;  # r = impI r p&lt;br /&gt;  = r&lt;br /&gt;&lt;br /&gt; notE3_nc p&lt;br /&gt;  # np = ~ p&lt;br /&gt;  # nnp = ~ np&lt;br /&gt;  # nnnp = ~ nnp&lt;br /&gt;  # a = assum nnp&lt;br /&gt;  # b = assum nnnp&lt;br /&gt;  # r = contra a b&lt;br /&gt;  # r = absurd r np&lt;br /&gt;  = r&lt;br /&gt;&lt;br /&gt; /* doubleNot:&lt;br /&gt;  ~~~p,p,... |- q /\ ~q&lt;br /&gt;  ------------- weak(p),contra,notI3,absurd&lt;br /&gt;   p |- ~~p&lt;br /&gt; */&lt;br /&gt; errNotE2 p&lt;br /&gt;  # np = ~ p&lt;br /&gt;  # nnp = ~ np&lt;br /&gt;  # nnnp = ~ nnp&lt;br /&gt;  # r = assum (nnp /\ nnnp)&lt;br /&gt;  # a = andE r&lt;br /&gt;  # b = andE` r&lt;br /&gt;  # r = contra a b&lt;br /&gt;  // r = absurd r nnp&lt;br /&gt;  = r&lt;br /&gt;&lt;br /&gt;pvar a = PV a&lt;br /&gt;tvar a = TV a&lt;br /&gt;&lt;br /&gt;/* ----------------- TCB (so must be in separate module with ::Deduced as abstract type ----------------------- */&lt;br /&gt;&lt;br /&gt;start =&amp;gt; EMPTY |- T&lt;br /&gt;assum p =&amp;gt; p$ EMPTY WITH p |- p&lt;br /&gt;weak (v |- p) q =&amp;gt; q$ v WITH q |- p&lt;br /&gt;impI (v |- p) q | q IN v =&amp;gt; q$ v WITHOUT q |- q --&amp;gt; p&lt;br /&gt;impE (v |- p --&amp;gt; q) (w |- p`) | p == p` =&amp;gt; v AND w |- q&lt;br /&gt;andI (v |- p) (w |- q) =&amp;gt; v AND w |- p /\ q&lt;br /&gt;andE (v |- p /\ q) =&amp;gt; v |- p&lt;br /&gt;andE` (v |- p /\ q) =&amp;gt; v |- q&lt;br /&gt;orI (v |- p) q =&amp;gt; p$ v |- p \/ q&lt;br /&gt;orI` (v |- p) q =&amp;gt; q$ v |- q \/ p&lt;br /&gt;orE (v |- r) (w |- r`) (y |- p /\ q) | r == r` &amp;amp;&amp;amp; p IN v &amp;amp;&amp;amp; q IN w =&amp;gt; (v WITHOUT p) AND (w WITHOUT q) AND y |- r&lt;br /&gt;//notI (v |- p) =&amp;gt; v |- ~ (~ p)&lt;br /&gt;contra (v |- p) (w |- ~p`) | p == p` =&amp;gt; v AND w |- B&lt;br /&gt;contra (v |- p) (w |- p` --&amp;gt; B) | p == p` =&amp;gt; v AND w |- B&lt;br /&gt;/* --------- NONCONSTRUCTIVE PART --------------- */&lt;br /&gt;absurd (v |- B) p | ~p IN v =&amp;gt; p$ v WITHOUT ~p |- p&lt;br /&gt;botE (v |- B) p =&amp;gt; p$ v |- p&lt;br /&gt;midE p =&amp;gt; p$ EMPTY |- p \/ ~p&lt;br /&gt;&lt;br /&gt;:: Deduced&lt;br /&gt; = (|-) infix 1 (Set Prop) Prop&lt;br /&gt;&lt;br /&gt;/* -------------------------------------------- END OF TCB ------------------------------------- */&lt;br /&gt;&lt;br /&gt;:: Prop&lt;br /&gt; = (====) infix 4 Term Term | (&amp;lt;) infix 4 Term Term | (&amp;gt;) infix 4 Term Term&lt;br /&gt; | (=&amp;lt;) infix 4 Term Term | (&amp;gt;=) infix 4 Term Term | (--&amp;gt;) infix 5 Prop Prop&lt;br /&gt;    | (&amp;lt;--) infix 5 Prop Prop | (&amp;lt;-&amp;gt;) infix 5 Prop Prop | (\/) infixr 6 Prop Prop&lt;br /&gt;    | (/\) infixr 6 Prop Prop | ~ Prop | A [String] Prop | E [String] Prop&lt;br /&gt;    | B /* bottom */ | T /* truth */ | PV String&lt;br /&gt;&lt;br /&gt;derive gEq Prop ; instance == Prop where (==) a b = gEq{|*|} a b&lt;br /&gt;&lt;br /&gt;:: Term&lt;br /&gt; = I Int | F Real | S String | C String | TV String | (+) infixl 6 Term Term&lt;br /&gt; | (-) infixl 6 Term Term | (*) infixl 7 Term Term | (/) infixl 7 Term Term&lt;br /&gt; | (%) infixl 9 Term Term | (++) infixr 5 Term Term | (^) infixr 8 Term Term&lt;br /&gt;&lt;br /&gt;derive gEq Term ; instance == Term where (==) a b = gEq{|*|} a b&lt;br /&gt;&lt;br /&gt;:: Set a :== [a]&lt;br /&gt;&lt;br /&gt;EMPTY = []&lt;br /&gt;(WITH) infixl 3 :: [Prop] Prop -&amp;gt; [Prop]&lt;br /&gt;(WITH) w p = [p:w WITHOUT p]&lt;br /&gt;(WITHOUT) infixl 3 :: [Prop] Prop -&amp;gt; [Prop]&lt;br /&gt;(WITHOUT) [w:ws] p | w == p = ws ; = [w:ws WITHOUT p]&lt;br /&gt;(WITHOUT) [] _ = []&lt;br /&gt;(AND) infixl 2 :: [Prop] [Prop] -&amp;gt; [Prop]&lt;br /&gt;(AND) w [v:vs] = (w WITH v) AND vs // remove pars?&lt;br /&gt;(AND) w [] = w&lt;br /&gt;(IN) infix 9 :: Prop [Prop] -&amp;gt; Bool&lt;br /&gt;(IN) p [w:ws] | w == p = True ; = p IN ws&lt;br /&gt;(IN) _ [] = False&lt;br /&gt;&lt;br /&gt;($) infixr 0 :: Prop a -&amp;gt; a&lt;br /&gt;($) p r | valid p = r ; = abort &amp;quot;SYNTAX&amp;quot;&lt;br /&gt;valid a = True&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/pre&gt;    &lt;p style=&quot;clear:both;&quot;&gt; 
    &lt;a href=&quot;http://vagston.vox.com/library/post/tiny-proof-assistant-in-clean-without-curry-howard-isomorphism.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00f48ce578ab00020110162b24aa860b?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description>   
        </item> 
 
        <item>
            <title>Tiny proof assistant in Clean using Curry-Howard Isomorphism</title>
            <link>http://vagston.vox.com/library/post/tiny-proof-assistant-in-clean-using-curry-howard-isomorphism-1.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(vagston)</author>
            <comments>http://vagston.vox.com/library/post/tiny-proof-assistant-in-clean-using-curry-howard-isomorphism-1.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://vagston.vox.com/library/post/tiny-proof-assistant-in-clean-using-curry-howard-isomorphism-1.html?_c=feed-rss-full</guid> 
            <pubDate>Thu, 09 Jul 2009 01:51:15 -0700</pubDate>         
            
            <description>    &lt;pre&gt;&lt;br /&gt;module CHI&lt;br /&gt;&lt;br /&gt;Start = notE3 (|- (((P --&amp;gt; Bot) --&amp;gt; Bot) --&amp;gt; Bot)) (Wff P)&amp;#160; //notI2 (|- P) (Wff P)&lt;br /&gt;where&lt;br /&gt;&amp;#160;&amp;#160; &amp;#160;notE3 n3 wff_p = impI (hlp1 n3) wff_p&lt;br /&gt;&amp;#160;&amp;#160; &amp;#160;where&lt;br /&gt;&amp;#160;&amp;#160; &amp;#160;&amp;#160;&amp;#160; &amp;#160;hlp1 n3 p = nd_contra (notI2 p wff_p) n3&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160; &amp;#160;notI2 p wff_p = impI (hlp p) (nd_not wff_p)&lt;br /&gt;&amp;#160;&amp;#160; &amp;#160;where&lt;br /&gt;&amp;#160;&amp;#160; &amp;#160;&amp;#160;&amp;#160; &amp;#160;hlp p pb = impE pb p&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160; &amp;#160;nd_contra p pb = contra p (nd_not_def` pb)&lt;br /&gt;&amp;#160;&amp;#160; &amp;#160;nd_not wff_p = wff_imp wff_p wff_bot&lt;br /&gt;&lt;br /&gt;/* ======================== TCB ========================== */&lt;br /&gt;&lt;br /&gt;/* must be hidden in separate module */&lt;br /&gt;&lt;br /&gt;/* ------- SYNTAX --------- */&lt;br /&gt;&lt;br /&gt;wff_a :: Wff CstA ; wff_a = Wff A ; wff_b :: Wff CstB ; wff_b = Wff B ; wff_p :: Wff CstP ; wff_p = Wff P&lt;br /&gt;wff_c :: Wff CstC ; wff_c = Wff C ; wff_d :: Wff CstD ; wff_d = Wff D ; wff_q :: Wff CstQ ; wff_q = Wff Q&lt;br /&gt;&lt;br /&gt;wff_bot :: Wff Bot&lt;br /&gt;wff_bot = Wff Bot&lt;br /&gt;&lt;br /&gt;wff_true :: Wff TRUE&lt;br /&gt;wff_true = Wff TRUE&lt;br /&gt;&lt;br /&gt;wff_not :: (Wff p) -&amp;gt; Wff (Not p)&lt;br /&gt;wff_not (Wff p) =&amp;gt; Wff (~ p)&lt;br /&gt;&lt;br /&gt;wff_and :: (Wff p) (Wff q) -&amp;gt; Wff (And p q)&lt;br /&gt;wff_and (Wff p) (Wff q) =&amp;gt; Wff (p /\ q)&lt;br /&gt;&lt;br /&gt;wff_or :: (Wff p) (Wff q) -&amp;gt; Wff (Or p q)&lt;br /&gt;wff_or (Wff p) (Wff q) =&amp;gt; Wff (p \/ q)&lt;br /&gt;&lt;br /&gt;wff_imp :: (Wff p) (Wff q) -&amp;gt; Wff (Imp p q)&lt;br /&gt;wff_imp (Wff p) (Wff q) =&amp;gt; Wff (p --&amp;gt; q)&lt;br /&gt;&lt;br /&gt;/* ----------- CONSTRUCTIVE ---------- */&lt;br /&gt;&lt;br /&gt;impI :: ((Deduced p) -&amp;gt; Deduced q) (Wff p) -&amp;gt; Deduced (Imp p q)&lt;br /&gt;impI f (Wff p) =&amp;gt; case f (|- p) of |- q -&amp;gt; |- (p --&amp;gt; q)&lt;br /&gt;&lt;br /&gt;impE :: (Deduced (Imp p q)) (Deduced p) -&amp;gt; Deduced q&lt;br /&gt;impE (|- (p --&amp;gt; q)) (|- p`) =&amp;gt; |- q&lt;br /&gt;&lt;br /&gt;andI :: (Deduced p) (Deduced q) -&amp;gt; Deduced (And p q)&lt;br /&gt;andI (|- p) (|- q) =&amp;gt; |- (p /\ q)&lt;br /&gt;&lt;br /&gt;andE :: (Deduced (And p q)) -&amp;gt; Deduced p&lt;br /&gt;andE (|- (p /\ q)) =&amp;gt; |- p&lt;br /&gt;&lt;br /&gt;andE` :: (Deduced (And p q)) -&amp;gt; Deduced q&lt;br /&gt;andE` (|- (p /\ q)) =&amp;gt; |- q&lt;br /&gt;&lt;br /&gt;orI :: (Deduced p) (Wff q) -&amp;gt; Deduced (Or p q)&lt;br /&gt;orI (|- p) (Wff q) =&amp;gt; |- (p \/ q)&lt;br /&gt;&lt;br /&gt;orI` :: (Deduced p) (Wff q) -&amp;gt; Deduced (Or p q)&lt;br /&gt;orI` (|- p) (Wff q) =&amp;gt; |- (p \/ q)&lt;br /&gt;&lt;br /&gt;contra :: (Deduced p) (Deduced (Not p)) -&amp;gt; Deduced Bot&lt;br /&gt;contra (|- p) (|- (~ q)) =&amp;gt; |- Bot&lt;br /&gt;&lt;br /&gt;mp p q = impE p q&lt;br /&gt;nd_not_def (|- (~ p) ) = |- (p --&amp;gt; Bot)&lt;br /&gt;nd_not_def` (|- (p --&amp;gt; Bot)) = |- (~ p)&lt;br /&gt;&lt;br /&gt;/* ----------- NONCONSTRUCTIVE (move to separate module) --------- */&lt;br /&gt;&lt;br /&gt;absurd :: ((Deduced (Not p)) -&amp;gt; Deduced Bot) (Wff p) -&amp;gt; Deduced p&lt;br /&gt;absurd _ (Wff p) =&amp;gt; |- p&lt;br /&gt;&lt;br /&gt;bottom_complete :: (Deduced Bot) (Wff p) -&amp;gt; Deduced p&lt;br /&gt;bottom_complete (|- Bot) (Wff p) =&amp;gt; |- p&lt;br /&gt;&lt;br /&gt;tertium :: (Wff p) -&amp;gt; Deduced (Or p (Not p))&lt;br /&gt;tertium (Wff p) =&amp;gt; |- (p \/ ~ p)&lt;br /&gt;&lt;br /&gt;:: Deduced p = |- p /* *MUST* be abstract type! */&lt;br /&gt;&lt;br /&gt;:: Wff a = Wff a /* *MUST* be abstract type! */&lt;br /&gt;&lt;br /&gt;/* ======================== END OF TCB ========================== */&lt;br /&gt;&lt;br /&gt;:: CstA = A ; :: CstB = B ; :: CstC = C ; :: CstD = D ; :: CstE = E ; :: CstP = P ; :: CstQ = Q&lt;br /&gt;:: Not a = ~ a&lt;br /&gt;:: Imp a b = (--&amp;gt;) infix 5 a b&lt;br /&gt;:: And a b = (/\) infixr 6 a b&lt;br /&gt;:: Or a b = (\/) infixr 6 a b&lt;br /&gt;:: Bot = Bot&lt;br /&gt;:: TRUE = TRUE&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;     &lt;p style=&quot;clear:both;&quot;&gt; 
    &lt;a href=&quot;http://vagston.vox.com/library/post/tiny-proof-assistant-in-clean-using-curry-howard-isomorphism-1.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00f48ce578ab00020110184a76f8860f?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description>   
        </item> 
 
        <item>
            <title>Tiny proof assistant in Clean using Curry-Howard Isomorphism</title>
            <link>http://vagston.vox.com/library/post/tiny-proof-assistant-in-clean-using-curry-howard-isomorphism.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(vagston)</author>
            <comments>http://vagston.vox.com/library/post/tiny-proof-assistant-in-clean-using-curry-howard-isomorphism.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://vagston.vox.com/library/post/tiny-proof-assistant-in-clean-using-curry-howard-isomorphism.html?_c=feed-rss-full</guid> 
            <pubDate>Thu, 09 Jul 2009 01:50:48 -0700</pubDate>         
            
            <description>    &lt;p&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;module CHI&lt;/p&gt;&lt;p&gt;Start = notE3 (|- (((P --&amp;gt; Bot) --&amp;gt; Bot) --&amp;gt; Bot)) (Wff P)&amp;#160; //notI2 (|- P) (Wff P)&lt;br /&gt;where&lt;br /&gt;&amp;#160;&amp;#160; &amp;#160;notE3 n3 wff_p = impI (hlp1 n3) wff_p&lt;br /&gt;&amp;#160;&amp;#160; &amp;#160;where&lt;br /&gt;&amp;#160;&amp;#160; &amp;#160;&amp;#160;&amp;#160; &amp;#160;hlp1 n3 p = nd_contra (notI2 p wff_p) n3&lt;/p&gt;&lt;p&gt;&amp;#160;&amp;#160; &amp;#160;notI2 p wff_p = impI (hlp p) (nd_not wff_p)&lt;br /&gt;&amp;#160;&amp;#160; &amp;#160;where&lt;br /&gt;&amp;#160;&amp;#160; &amp;#160;&amp;#160;&amp;#160; &amp;#160;hlp p pb = impE pb p&lt;/p&gt;&lt;p&gt;&amp;#160;&amp;#160; &amp;#160;nd_contra p pb = contra p (nd_not_def` pb)&lt;br /&gt;&amp;#160;&amp;#160; &amp;#160;nd_not wff_p = wff_imp wff_p wff_bot&lt;/p&gt;&lt;p&gt;/* ======================== TCB ========================== */&lt;/p&gt;&lt;p&gt;/* must be hidden in separate module */&lt;/p&gt;&lt;p&gt;/* ------- SYNTAX --------- */&lt;/p&gt;&lt;p&gt;wff_a :: Wff CstA ; wff_a = Wff A ; wff_b :: Wff CstB ; wff_b = Wff B ; wff_p :: Wff CstP ; wff_p = Wff P&lt;br /&gt;wff_c :: Wff CstC ; wff_c = Wff C ; wff_d :: Wff CstD ; wff_d = Wff D ; wff_q :: Wff CstQ ; wff_q = Wff Q&lt;/p&gt;&lt;p&gt;wff_bot :: Wff Bot&lt;br /&gt;wff_bot = Wff Bot&lt;/p&gt;&lt;p&gt;wff_true :: Wff TRUE&lt;br /&gt;wff_true = Wff TRUE&lt;/p&gt;&lt;p&gt;wff_not :: (Wff p) -&amp;gt; Wff (Not p)&lt;br /&gt;wff_not (Wff p) =&amp;gt; Wff (~ p)&lt;/p&gt;&lt;p&gt;wff_and :: (Wff p) (Wff q) -&amp;gt; Wff (And p q)&lt;br /&gt;wff_and (Wff p) (Wff q) =&amp;gt; Wff (p /\ q)&lt;/p&gt;&lt;p&gt;wff_or :: (Wff p) (Wff q) -&amp;gt; Wff (Or p q)&lt;br /&gt;wff_or (Wff p) (Wff q) =&amp;gt; Wff (p \/ q)&lt;/p&gt;&lt;p&gt;wff_imp :: (Wff p) (Wff q) -&amp;gt; Wff (Imp p q)&lt;br /&gt;wff_imp (Wff p) (Wff q) =&amp;gt; Wff (p --&amp;gt; q)&lt;/p&gt;&lt;p&gt;/* ----------- CONSTRUCTIVE ---------- */&lt;/p&gt;&lt;p&gt;impI :: ((Deduced p) -&amp;gt; Deduced q) (Wff p) -&amp;gt; Deduced (Imp p q)&lt;br /&gt;impI f (Wff p) =&amp;gt; case f (|- p) of |- q -&amp;gt; |- (p --&amp;gt; q)&lt;/p&gt;&lt;p&gt;impE :: (Deduced (Imp p q)) (Deduced p) -&amp;gt; Deduced q&lt;br /&gt;impE (|- (p --&amp;gt; q)) (|- p`) =&amp;gt; |- q&lt;/p&gt;&lt;p&gt;andI :: (Deduced p) (Deduced q) -&amp;gt; Deduced (And p q)&lt;br /&gt;andI (|- p) (|- q) =&amp;gt; |- (p /\ q)&lt;/p&gt;&lt;p&gt;andE :: (Deduced (And p q)) -&amp;gt; Deduced p&lt;br /&gt;andE (|- (p /\ q)) =&amp;gt; |- p&lt;/p&gt;&lt;p&gt;andE` :: (Deduced (And p q)) -&amp;gt; Deduced q&lt;br /&gt;andE` (|- (p /\ q)) =&amp;gt; |- q&lt;/p&gt;&lt;p&gt;orI :: (Deduced p) (Wff q) -&amp;gt; Deduced (Or p q)&lt;br /&gt;orI (|- p) (Wff q) =&amp;gt; |- (p \/ q)&lt;/p&gt;&lt;p&gt;orI` :: (Deduced p) (Wff q) -&amp;gt; Deduced (Or p q)&lt;br /&gt;orI` (|- p) (Wff q) =&amp;gt; |- (p \/ q)&lt;/p&gt;&lt;p&gt;contra :: (Deduced p) (Deduced (Not p)) -&amp;gt; Deduced Bot&lt;br /&gt;contra (|- p) (|- (~ q)) =&amp;gt; |- Bot&lt;/p&gt;&lt;p&gt;mp p q = impE p q&lt;br /&gt;nd_not_def (|- (~ p) ) = |- (p --&amp;gt; Bot)&lt;br /&gt;nd_not_def` (|- (p --&amp;gt; Bot)) = |- (~ p)&lt;/p&gt;&lt;p&gt;/* ----------- NONCONSTRUCTIVE (move to separate module) --------- */&lt;/p&gt;&lt;p&gt;absurd :: ((Deduced (Not p)) -&amp;gt; Deduced Bot) (Wff p) -&amp;gt; Deduced p&lt;br /&gt;absurd _ (Wff p) =&amp;gt; |- p&lt;/p&gt;&lt;p&gt;bottom_complete :: (Deduced Bot) (Wff p) -&amp;gt; Deduced p&lt;br /&gt;bottom_complete (|- Bot) (Wff p) =&amp;gt; |- p&lt;/p&gt;&lt;p&gt;tertium :: (Wff p) -&amp;gt; Deduced (Or p (Not p))&lt;br /&gt;tertium (Wff p) =&amp;gt; |- (p \/ ~ p)&lt;/p&gt;&lt;p&gt;:: Deduced p = |- p /* *MUST* be abstract type! */&lt;/p&gt;&lt;p&gt;:: Wff a = Wff a /* *MUST* be abstract type! */&lt;/p&gt;&lt;p&gt;/* ======================== END OF TCB ========================== */&lt;/p&gt;&lt;p&gt;:: CstA = A ; :: CstB = B ; :: CstC = C ; :: CstD = D ; :: CstE = E ; :: CstP = P ; :: CstQ = Q&lt;br /&gt;:: Not a = ~ a&lt;br /&gt;:: Imp a b = (--&amp;gt;) infix 5 a b&lt;br /&gt;:: And a b = (/\) infixr 6 a b&lt;br /&gt;:: Or a b = (\/) infixr 6 a b&lt;br /&gt;:: Bot = Bot&lt;br /&gt;:: TRUE = TRUE&lt;/p&gt;&lt;p&gt;&amp;lt;/pre&amp;gt; &lt;/p&gt;    &lt;p style=&quot;clear:both;&quot;&gt; 
    &lt;a href=&quot;http://vagston.vox.com/library/post/tiny-proof-assistant-in-clean-using-curry-howard-isomorphism.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00f48ce578ab00020110162b242b860b?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description>   
        </item> 
 
        <item>
            <title>Read Only Graph Builder In Functional Language</title>
            <link>http://vagston.vox.com/library/post/read-only-graph-builder-in-functional-language.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(vagston)</author>
            <comments>http://vagston.vox.com/library/post/read-only-graph-builder-in-functional-language.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://vagston.vox.com/library/post/read-only-graph-builder-in-functional-language.html?_c=feed-rss-full</guid> 
            <pubDate>Tue, 03 Mar 2009 02:05:10 -0800</pubDate>         
            
            <description>    &lt;pre&gt;&lt;br /&gt;&lt;br /&gt;:: ROGraph a = ROGraph a [ROGraph a]&lt;br /&gt;:: RODGraph a = RODGraph a [RODGraph a] [RODGraph a]&lt;br /&gt;&lt;br /&gt;buildROGraph :: (a b (c,[b])) -&amp;gt; Map b (ROGraph c) | Lookup MapOnList b &amp;amp; UpdateDefault MapOnList b &amp;amp; Pairs a&lt;br /&gt;buildROGraph m = buildGraph m \ id val fws bws = ROGraph val fws&lt;br /&gt;buildRODGraph m = buildGraph m \ id val fws bws = RODGraph val fws bws&lt;br /&gt;&lt;br /&gt;buildGraph rawGraph constructor = futureIndex&lt;br /&gt;where&lt;br /&gt;&amp;#160;&amp;#160; &amp;#160;raw = pairs rawGraph&lt;br /&gt;&amp;#160;&amp;#160; &amp;#160;forwards = buildFastMap $ flip map raw \ (id,(a,fws)) = (id,fws)&lt;br /&gt;&amp;#160;&amp;#160; &amp;#160;backwards = buildBackwards forwards&lt;br /&gt;&amp;#160;&amp;#160; &amp;#160;futureIndex = buildFastMap $ flip map raw \ (id,(a,fws)) = (id,build id a fws)&lt;br /&gt;&amp;#160;&amp;#160; &amp;#160;fromFuture ids = map (fromJustXXX o lookup futureIndex) ids&lt;br /&gt;&amp;#160;&amp;#160; &amp;#160;build nodeId contents forwards&lt;br /&gt;&amp;#160;&amp;#160; &amp;#160;&amp;#160;&amp;#160; &amp;#160;# backwards = case lookup backwards nodeId of Just x -&amp;gt; x ; _ -&amp;gt; []&lt;br /&gt;&amp;#160;&amp;#160; &amp;#160;&amp;#160;&amp;#160; &amp;#160;= constructor nodeId contents (fromFuture forwards) (fromFuture backwards)&lt;br /&gt;&lt;br /&gt;buildBackwards :: (a b [c]) -&amp;gt; a c [b] | Empty (a c [b]) &amp;amp; Pairs a &amp;amp; UpdateDefault a c&lt;br /&gt;buildBackwards graph = seqMap processNode (pairs graph) empty&lt;br /&gt;where&lt;br /&gt;&amp;#160;&amp;#160; &amp;#160;processNode (id,forwards) = seqMapLFA forwards \ fr m = snd $ updateDefault fr (cons id) [] m&lt;br /&gt;&lt;br /&gt;testGraph :: Map Int (Int,[Int])&lt;br /&gt;testGraph = fromPairs [ @1 [2,3,4], @2 [4,1], @3 [1,2], @4 [3,4] ]&lt;br /&gt;where&lt;br /&gt;&amp;#160;&amp;#160; &amp;#160;@ a b = (a,(a,b))&lt;br /&gt;&lt;br /&gt;Start = printRODGraph $ fromJust $ lookup (buildRODGraph testGraph) 1&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;     &lt;p style=&quot;clear:both;&quot;&gt; 
    &lt;a href=&quot;http://vagston.vox.com/library/post/read-only-graph-builder-in-functional-language.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00f48ce578ab00020110166d3f34860d?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description>   
        </item> 
 
        <item>
            <title>Adding Pluggable Search Strategies to Your Favourite Functional Programming Language</title>
            <link>http://vagston.vox.com/library/post/adding-pluggable-search-strategies-to-your-favourite-functional-programming-language.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(vagston)</author>
            <comments>http://vagston.vox.com/library/post/adding-pluggable-search-strategies-to-your-favourite-functional-programming-language.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://vagston.vox.com/library/post/adding-pluggable-search-strategies-to-your-favourite-functional-programming-language.html?_c=feed-rss-full</guid> 
            <pubDate>Sat, 17 Jan 2009 17:57:55 -0800</pubDate>         
            
            <description>    &lt;p&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(0, 0, 0); font-family: -webkit-monospace; white-space: pre-wrap; &quot;&gt;&amp;lt;pre&amp;gt;
search3 :: !Bool !(u:a -&amp;gt; .(v:([u:a] -&amp;gt; w:[.b]) -&amp;gt; x:[.b])) u:a -&amp;gt; y:[.b], [v &amp;lt;= u,x v &amp;lt;= w,x v &amp;lt;= y]
search3 kind explorer root
	| kind = do_all_depth [root] []
	= do_all_breadth [root] []
where
	do_all_depth [] t = t
	do_all_depth [v:vs] t = explorer v \ vs` = do_all_depth vs` (do_all_depth vs t)
				
	do_all_breadth [] t = t
	do_all_breadth [v:vs] t = explorer v \ vs` = do_all_breadth vs (do_all_breadth vs` t)
&amp;lt;/pre&amp;gt;&lt;/span&gt; &lt;/p&gt;    &lt;p style=&quot;clear:both;&quot;&gt; 
    &lt;a href=&quot;http://vagston.vox.com/library/post/adding-pluggable-search-strategies-to-your-favourite-functional-programming-language.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00f48ce578ab00020109815f41af000d?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description>   
        </item> 
 
        <item>
            <title>Purely Functional Queue with Constant Operation Times (Credits to Okasaki)</title>
            <link>http://vagston.vox.com/library/post/purely-functional-queue-with-constant-operation-times-credits-to-okasaki.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(vagston)</author>
            <comments>http://vagston.vox.com/library/post/purely-functional-queue-with-constant-operation-times-credits-to-okasaki.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://vagston.vox.com/library/post/purely-functional-queue-with-constant-operation-times-credits-to-okasaki.html?_c=feed-rss-full</guid> 
            <pubDate>Thu, 15 Jan 2009 20:00:47 -0800</pubDate>         
            
            <description>    &lt;p&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: -webkit-monospace; font-size: 11px; white-space: pre-wrap; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; &quot;&gt;&amp;lt;pre&amp;gt;
:: Queue a = Queue !Int !.[a] !Int !.[.[a]] /* enqLen enqList deqLen deqList */

adjust :: !u:(Queue .a) -&amp;gt; v:(Queue .a), [u &amp;lt;= v]
adjust q=:(Queue enqLen enqList deqLen deqList)
	| enqLen &amp;gt; 3 &amp;amp;&amp;amp; enqLen &amp;gt;= deqLen = Queue 0 [] (enqLen + deqLen) (deqList ++ [reverse enqList])
	| otherwise = q

enq :: .a !u:(Queue .a) -&amp;gt; v:(Queue .a), [u &amp;lt;= v]
enq a (Queue enqLen enqList deqLen deqList)
	= adjust (Queue (enqLen + 1) [a:enqList] deqLen deqList)

deq :: !u:(Queue .a) -&amp;gt; (.a, !v:(Queue .a)), [u &amp;lt;= v]

deq (Queue enqLen enqList deqLen [[]:deqList])
	= deq (Queue enqLen enqList deqLen deqList)

deq (Queue enqLen enqList deqLen [[a:as]:deqList])
	= (a, adjust (Queue enqLen enqList (deqLen - 1) [as:deqList]))

deq (Queue enqLen enqList 0 deqList)
	= deq (Queue 0 [] enqLen [reverse enqList])

newq :: .(Queue .a)
newq = Queue 0 [] 0 []

emptyq :: !.(Queue .a) -&amp;gt; .Bool
emptyq (Queue 0 _ 0 _) = True
emptyq _ = False
&amp;lt;/pre&amp;gt;&lt;/span&gt; &lt;/p&gt;    &lt;p style=&quot;clear:both;&quot;&gt; 
    &lt;a href=&quot;http://vagston.vox.com/library/post/purely-functional-queue-with-constant-operation-times-credits-to-okasaki.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00f48ce578ab00020109d07d0372000e?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description>   
        </item> 
 
        <item>
            <title>Introductory Course In Applied Math: No Background Needed</title>
            <link>http://vagston.vox.com/library/post/introductory-course-to-applied-math-no-background-needed.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(vagston)</author>
            <comments>http://vagston.vox.com/library/post/introductory-course-to-applied-math-no-background-needed.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://vagston.vox.com/library/post/introductory-course-to-applied-math-no-background-needed.html?_c=feed-rss-full</guid> 
            <pubDate>Tue, 11 Nov 2008 00:43:17 -0800</pubDate>         
            
            <description>    &lt;p&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(0, 0, 0); font-family: -webkit-monospace; white-space: pre-wrap; &quot;&gt;1. Notion of representation
2. Notion of encoding
3. Requirements to glyphs: equality, recognisability, one might always realise where one ends and another begins
4. Deductive apparatus, mathematical theories
5. Interpretations of mathematical theories, constants
6. Variables, historic excursion into prop calc, difference between variables and constants; quantors; variable substitution and its pitfalls
7. Soundness, completeness, consistency
8. Proof theory
9. Model theory
10. What is Existence
11. What is Truth
12. Art of proof

(12 lessons, first two or three are short and may be conducted together)&lt;/span&gt; &lt;/p&gt;    &lt;p style=&quot;clear:both;&quot;&gt; 
    &lt;a href=&quot;http://vagston.vox.com/library/post/introductory-course-to-applied-math-no-background-needed.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00f48ce578ab0002010980b57c50000b?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description>   
        </item> 
 
        <item>
            <title>Monadic Arithmetics</title>
            <link>http://vagston.vox.com/library/post/monadic-arithmetics.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(vagston)</author>
            <comments>http://vagston.vox.com/library/post/monadic-arithmetics.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://vagston.vox.com/library/post/monadic-arithmetics.html?_c=feed-rss-full</guid> 
            <pubDate>Tue, 11 Nov 2008 00:42:31 -0800</pubDate>         
            
            <description>    &lt;p&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Georgia; line-height: 20px; &quot;&gt;&lt;pre&gt;/* Stop &amp;gt;&amp;gt;= \a -&amp;gt; &amp;gt;&amp;gt;= \b insane! */&lt;br /&gt;&lt;br /&gt;instance + (m a) | + a &amp;amp; Monad m&lt;br /&gt;where&lt;br /&gt; (+) ma mb = ma &amp;gt;&amp;gt;= \a -&amp;gt; mb &amp;gt;&amp;gt;= \b -&amp;gt; return $! a + b&lt;br /&gt;&lt;br /&gt;instance - (m a) | - a &amp;amp; Monad m&lt;br /&gt;where&lt;br /&gt; (-) ma mb = ma &amp;gt;&amp;gt;= \a -&amp;gt; mb &amp;gt;&amp;gt;= \b -&amp;gt; return $! a - b&lt;br /&gt;&lt;br /&gt;instance * (m a) | * a &amp;amp; Monad m&lt;br /&gt;where&lt;br /&gt; (*) ma mb = ma &amp;gt;&amp;gt;= \a -&amp;gt; mb &amp;gt;&amp;gt;= \b -&amp;gt; return $! a * b&lt;br /&gt;&lt;br /&gt;instance / (m a) | / a &amp;amp; Monad m&lt;br /&gt;where&lt;br /&gt; (/) ma mb = ma &amp;gt;&amp;gt;= \a -&amp;gt; mb &amp;gt;&amp;gt;= \b -&amp;gt; return $! a / b&lt;br /&gt;&lt;br /&gt;instance mod (m a) | mod a &amp;amp; Monad m&lt;br /&gt;where&lt;br /&gt; (mod) ma mb = ma &amp;gt;&amp;gt;= \a -&amp;gt; mb &amp;gt;&amp;gt;= \b -&amp;gt; return $! a mod b&lt;br /&gt;&lt;br /&gt;instance rem (m a) | rem a &amp;amp; Monad m&lt;br /&gt;where&lt;br /&gt; (rem) ma mb = ma &amp;gt;&amp;gt;= \a -&amp;gt; mb &amp;gt;&amp;gt;= \b -&amp;gt; return $! a rem b&lt;br /&gt;&lt;br /&gt;/* http://hpaste.org/10673 */&lt;/pre&gt;&lt;/span&gt; &lt;/p&gt;    &lt;p style=&quot;clear:both;&quot;&gt; 
    &lt;a href=&quot;http://vagston.vox.com/library/post/monadic-arithmetics.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00f48ce578ab0002010980b57c46000b?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description>   
        </item> 
 
        <item>
            <title>My Desktop 2008</title>
            <link>http://vagston.vox.com/library/post/my-desktop-2008.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(vagston)</author>
            <comments>http://vagston.vox.com/library/post/my-desktop-2008.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://vagston.vox.com/library/post/my-desktop-2008.html?_c=feed-rss-full</guid> 
            <pubDate>Thu, 24 Jul 2008 10:10:55 -0700</pubDate>         
            
            <description>    
    
    
    

    
    
    
&lt;div at:enclosure=&quot;asset&quot; at:xid=&quot;6a00f48ce578ab000200fa968a72a50002&quot; at:format=&quot;medium&quot; at:align=&quot;center&quot;
    class=&quot;enclosure enclosure-center enclosure-medium photo-enclosure&quot; 
     style=&quot;text-align: center;&quot;&gt;
&lt;div class=&quot;enclosure-inner&quot;
    
        style=&quot;padding: 9px; border: 1px solid; width: px; margin: 10px auto;&quot;
    &gt;
    &lt;div class=&quot;enclosure-list&quot;&gt;
        &lt;div class=&quot;enclosure-item photo-asset last&quot;&gt;
    
            &lt;div class=&quot;enclosure-image&quot;&gt;
        
                &lt;a href=&quot;http://vagston.vox.com/library/photo/6a00f48ce578ab000200fa968a72a50002.html&quot;&gt;&lt;img src=&quot;http://a5.vox.com/6a00f48ce578ab000200fa968a72a50002-200pi&quot; alt=&quot;MyDesktop&quot; title=&quot;MyDesktop&quot; /&gt;&lt;/a&gt;
        
            &lt;/div&gt;
            &lt;div class=&quot;enclosure-meta&quot;&gt;
                &lt;div class=&quot;enclosure-asset-name&quot;&gt;&lt;a href=&quot;http://vagston.vox.com/library/photo/6a00f48ce578ab000200fa968a72a50002.html&quot; title=&quot;MyDesktop&quot;&gt;MyDesktop&lt;/a&gt;&lt;/div&gt;
            &lt;/div&gt;
    
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;!-- end enclosure --&gt;

 &lt;div&gt;&lt;br /&gt;&lt;/div&gt;    &lt;p style=&quot;clear:both;&quot;&gt; 
    &lt;a href=&quot;http://vagston.vox.com/library/post/my-desktop-2008.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00f48ce578ab00020100a7eb78d5000e?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description>    
        </item> 
 
        <item>
            <title>Fascinating excursion in monads history</title>
            <link>http://vagston.vox.com/library/post/fascinating-excursion-in-monads-history.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(vagston)</author>
            <comments>http://vagston.vox.com/library/post/fascinating-excursion-in-monads-history.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://vagston.vox.com/library/post/fascinating-excursion-in-monads-history.html?_c=feed-rss-full</guid> 
            <pubDate>Tue, 03 Jun 2008 15:30:02 -0700</pubDate>         
            
            <description>    &lt;h3 class=&quot;post-title entry-title&quot;&gt;
&lt;a href=&quot;http://vagston.blogspot.com/2008/05/fascinating-excursion-in-monads-history.html&quot;&gt;Fascinating excursion in monads history&lt;/a&gt;
&lt;/h3&gt;


&lt;p&gt;The notion of monad comes from category theory. It first arose in
the area of homological algebra, but later was recognised (due to the
work of Kleisli and of Eilenberg and Moore) to have much wider
applications.&lt;/p&gt;&lt;p&gt;Its importance emerged slowly: in early days, it
was not even given a proper name, but called simply a &amp;quot;standard
construction&amp;quot; or a &amp;quot;triple&amp;quot;. The formulation used here is due to
Kleisli.&lt;/p&gt;&lt;p&gt;Eugenio Moggi proposed that monads provide a useful
structuring tool for denotational semantics. He showed how lambda
calculus could be given call-by-value and call-by-name semantics in an
arbitrary monad, and how monads could encapsulate&lt;br /&gt;a wide variety of programming language features such as state, exception handling, and continuations.&lt;/p&gt;&lt;p&gt;Independent
of Moggi, but at about the same time, Michael Spivey proposed that
monads provide a useful structuring tool for exception handling in pure
functional languages, and demonstrated this thesis with an elegant
program for term rewriting. He showed how monads could treat exceptions
and non-deterministic choice in a common framework, thus capturing
precisely a notion that I had groped towards years earlier.&lt;/p&gt;&lt;p&gt;Inspired
byMoggi and Spivey, I proposed monads as a general technique for
structuring functional programs. My early proposals were based on a
special syntax for monads, that generalised list comprehensions. This
was unfortunate, in that it led many to think a special syntax was
needed.&lt;/p&gt;&lt;p&gt;This new presentation is designed to convey that monads
can be profitably applied to structure programs today with existing
languages.&lt;/p&gt;&lt;p&gt;A key observation of Moggi&amp;#39;s was that values and
computations should be assigned different types: the value type a is
distinct from the computation type M a. In a call-by-value language,
functions take values into computations (as in a -&amp;gt; M b); in a
call-by-name language, functions take computations into computations
(as in M a -&amp;gt; M b).&lt;/p&gt;&lt;p&gt;John Reynolds made exactly the same point
a decade ago. The essence of Algol, according to Reynolds, is a
programming language that distinguishes data types from phrase types.
In his work data types (such as int) play the roles of values, and
phrase types (such as int exp) play the role of computations, and the
same distinction between call-by-value and call-by-name appears. These
ideas form the basis for the design of Forsythe. But the vital unitM
and bindM operations do not appear in Reynolds&amp;#39; work.&lt;/p&gt;&lt;p&gt;This is
not the only time that John Reynolds has been a decade ahead of the
rest of us. Among other things, he was an early promoter of
continuation-passing style and the first to apply category theory to
language design. One intriguing aspect of his recent work is the use of
intersection types, so perhaps we should expect an upsurge of interest
in that topic early in the next millenium.&lt;/p&gt;&lt;p&gt;-- &amp;quot;The essence of functional programming&amp;quot;, Philip Wadler, University of Glasgow.&lt;/p&gt;     &lt;p style=&quot;clear:both;&quot;&gt; 
    &lt;a href=&quot;http://vagston.vox.com/library/post/fascinating-excursion-in-monads-history.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00f48ce578ab000200fa967bc1ee0003?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description>   
        </item> 
    </channel>
</rss>

