TestPrinter with ParserImpl I Type: T1->T1 Lambda: \x1.x1 DeBruijn: \1 DAG: I Combinat: I K Type: T1->T2->T1 Lambda: \x1x2.x1 DeBruijn: \\2 DAG: K Combinat: K F Type: T1->T2->T2 Lambda: \x1x2.x2 DeBruijn: \\1 DAG: F Combinat: KI S Type: (T1->T2->T3)->(T1->T2)->T1->T3 Lambda: \x1x2x3.x1x3(x2x3) DeBruijn: \\\31(21) DAG: S Combinat: S B Type: (T1->T2)->(T3->T1)->T3->T2 Lambda: \x1x2x3.x1(x2x3) DeBruijn: \\\3(21) DAG: B Combinat: B C Type: (T1->T2->T3)->T2->T1->T3 Lambda: \x1x2x3.x1x3x2 DeBruijn: \\\312 DAG: C Combinat: C Y Type: null Lambda: \x1.(\x2.x1(x2x2))(\x2.x1(x2x2)) DeBruijn: \(\2(11))(\2(11)) DAG: Y Combinat: S(C(BBI)(SII))(C(BBI)(SII)) D Type: null Lambda: \x1.x1x1 DeBruijn: \11 DAG: \x1.x1x1 Combinat: SII O Type: null Lambda: (\x1.x1x1)(\x1.x1x1) DeBruijn: (\11)(\11) DAG: (\x1.x1x1)(\x1.x1x1) Combinat: SII(SII) V Type: null Lambda: \x1x2.x2(x1x1x2) DeBruijn: \\1(221) DAG: \x1x2.x2(x1x1x2) Combinat: B(SI)(C(BB(SII))I) T Type: null Lambda: (\x1x2.x2(x1x1x2))(\x1x2.x2(x1x1x2)) DeBruijn: (\\1(221))(\\1(221)) DAG: (\x1x2.x2(x1x1x2))(\x1x2.x2(x1x1x2)) Combinat: B(SI)(C(BB(SII))I)(B(SI)(C(BB(SII))I)) N20 Type: T1->T2->T3->T1 Lambda: \x1x2x3.x1 DeBruijn: \\\3 DAG: (1/3) Combinat: BK(BKI) N33 Type: T1->T2->T3->T4->T4 Lambda: \x1x2x3x4.x4 DeBruijn: \\\\1 DAG: (4/4) Combinat: K(K(KI)) [I,K] Type: ((T1->T1)->(T2->T3->T2)->T4)->T4 Lambda: \x1.x1(\x2.x2)(\x2x3.x2) DeBruijn: \1(\1)(\\2) DAG: [I,K] Combinat: C(CII)K pair Type: T1->T2->(T1->T2->T3)->T3 Lambda: \x1x2x3.x3x1x2 DeBruijn: \\\132 DAG: \x1x2x3.x3x1x2 Combinat: C(BB(BC(B(CI)I)))I fst Type: ((T1->T2->T2)->T3)->T3 Lambda: \x1.x1(\x2x3.x3) DeBruijn: \1(\\1) DAG: [F] Combinat: CI(KI) snd Type: ((T1->T2->T1)->T3)->T3 Lambda: \x1.x1(\x2x3.x2) DeBruijn: \1(\\2) DAG: [K] Combinat: CIK J Type: T1->T1 Lambda: J DeBruijn: J DAG: J Combinat: null J T Type: T1->T1->T1 Lambda: J(T) DeBruijn: J(T) DAG: JT Combinat: null P Type: (T1->T1)->T1 Lambda: P DeBruijn: P DAG: P Combinat: null P I Type: T1 Lambda: P(\x1.x1) DeBruijn: P(\1) DAG: PI Combinat: null P T Type: null Lambda: P(T) DeBruijn: P(T) DAG: PT Combinat: null T Type: T1->T1->T1 Lambda: T DeBruijn: T DAG: T Combinat: null Z Type: T1->T1->T1 Lambda: Z DeBruijn: Z DAG: Z Combinat: null [T,Z] Type: ((T1->T1->T1)->(T2->T2->T2)->T3)->T3 Lambda: \x1.x1(T)(Z) DeBruijn: \1(T)(Z) DAG: [T,Z] Combinat: null T P Type: ((T1->T1)->T1)->(T1->T1)->T1 Lambda: T(P) DeBruijn: T(P) DAG: TP Combinat: null E1 Type: T1->T1->T1->T1 Lambda: (E1) DeBruijn: (E1) DAG: (E1) Combinat: null E1 P Type: ((T1->T1)->T1)->((T1->T1)->T1)->(T1->T1)->T1 Lambda: (E1)(P) DeBruijn: (E1)(P) DAG: (E1)P Combinat: null E1 Z T Type: (T1->T1->T1)->T1->T1->T1 Lambda: (E1)(Z)(T) DeBruijn: (E1)(Z)(T) DAG: (E1)ZT Combinat: null M (T Z T) Type: T1->T1->T1 Lambda: M(T(Z)(T)) DeBruijn: M(T(Z)(T)) DAG: M(TZT) Combinat: null TestPrinter with ChurchNumberCoding #isZero Type: ((T1->T2->T3->T3)->(T4->T5->T4)->T6)->T6 Lambda: \x1.x1(\x2x3x4.x4)(\x2x3.x2) DeBruijn: \1(\\\1)(\\2) DAG: (#isZero) Combinat: C(CI(K(KI)))K #succ Type: ((T1->T2)->T3->T1)->(T1->T2)->T3->T2 Lambda: \x1x2x3.x2(x1x2x3) DeBruijn: \\\2(321) DAG: (#succ) Combinat: B(S(BBI))(C(BC(B(BB)(C(BBI)I)))I) #pred Type: (((T1->T2)->(T2->T3)->T3)->(T4->T5)->(T6->T6)->T7)->T1->T5->T7 Lambda: \x1x2x3.x1(\x4x5.x5(x4x2))(\x4.x3)(\x4.x4) DeBruijn: \\\3(\\1(24))(\2)(\1) DAG: (#pred) Combinat: C(BC(B(BC)(C(BC(B(BB)(C(BBI)(B(B(CI))(B(CI)I)))))K)))I #add Type: (T1->T2->T3)->(T1->T4->T2)->T1->T4->T3 Lambda: \x1x2x3x4.x1x3(x2x3x4) DeBruijn: \\\\42(321) DAG: (#add) Combinat: C(BB(BS(B(BB)(C(BBI)I))))(C(BC(B(BB)(C(BBI)I)))I) #mult Type: (T1->T2)->(T2->T3)->T1->T3 Lambda: \x1x2x3.x2(x1x3) DeBruijn: \\\2(31) DAG: (#mult) Combinat: B(C(BBI))(C(BBI)I) #power Type: T1->(T1->T2)->T2 Lambda: \x1x2.x2x1 DeBruijn: \\12 DAG: (#power) Combinat: B(CI)I #1 Type: (T1->T2)->T1->T2 Lambda: \x1x2.x1x2 DeBruijn: \\21 DAG: #1 Combinat: C(BBI)I #2 Type: (T1->T1)->T1->T1 Lambda: \x1x2.x1(x1x2) DeBruijn: \\2(21) DAG: #2 Combinat: S(BBI)(C(BBI)I) TestPrinter with ScottNumberCoding @isZero Type: ((T1->T2->T1)->(T3->T4->T5->T5)->T6)->T6 Lambda: \x1.x1(\x2x3.x2)(\x2x3x4.x4) DeBruijn: \1(\\2)(\\\1) DAG: (@isZero) Combinat: C(CIK)(K(KI)) @succ Type: T1->T2->(T1->T3)->T3 Lambda: \x1x2x3.x3x1 DeBruijn: \\\13 DAG: (@succ) Combinat: BK(B(CI)I) @pred Type: ((T1->T2->T1)->(T3->T3)->T4)->T4 Lambda: \x1.x1(\x2x3.x2)(\x2.x2) DeBruijn: \1(\\2)(\1) DAG: (@pred) Combinat: C(CIK)I @1 Type: T1->((T2->T3->T2)->T4)->T4 Lambda: \x1x2.x2(\x3x4.x3) DeBruijn: \\1(\\2) DAG: (@1) Combinat: K(CIK) @2 Type: T1->((T2->((T3->T4->T3)->T5)->T5)->T6)->T6 Lambda: \x1x2.x2(\x3x4.x4(\x5x6.x5)) DeBruijn: \\1(\\1(\\2)) DAG: (@2) Combinat: K(CI(K(CIK))) @fromChurch Type: ((T1->T2->(T1->T3)->T3)->(T4->T5->T4)->T6)->T6 Lambda: \x1.x1(\x2x3x4.x4x2)(\x2x3.x2) DeBruijn: \1(\\\13)(\\2) DAG: (@fromChurch) Combinat: C(CI(BK(B(CI)I)))K @toChurch Type: null Lambda: (\x1.(\x2.x1(x2x2))(\x2.x1(x2x2)))(\x1x2.(\x3.x3(\x4x5.x4)(\x4x5x6.x6))x2(\x3x4.x4)((\x3x4x5.x4(x3x4x5))(x1(x2(\x3.x3)(\x3.x3))))) DeBruijn: (\(\2(11))(\2(11)))(\\(\1(\\2)(\\\1))1(\\1)((\\\2(321))(2(1(\1)(\1))))) DAG: Y(@toChurch) Combinat: S(C(BBI)(SII))(C(BBI)(SII))(B(S(C(B(C(CIK)(K(KI)))I)(KI)))(B(B(B(S(BBI))(C(BC(B(BB)(C(BBI)I)))I)))(C(BBI)(C(CII)I)))) TestPrinter with BinaryNumberCoding $isZero Type: null Lambda: \x1.x1(\x2x3x4.x4)(\x2x3.x3)(x1(\x2x3x4.x2)) DeBruijn: \1(\\\1)(\\1)(1(\\\3)) DAG: ($isZero) Combinat: S(C(CI(K(KI)))(KI))(CI(BK(BKI))) $succ Type: null Lambda: (\x1.(\x2.x1(x2x2))(\x2.x1(x2x2)))(\x1x2.x2(\x3x4x5.x5)(x2(\x3x4x5.x3)(\x3.x3(\x4x5.x5)(\x4.x4(\x5x6.x5)(\x5.x5)(\x5x6.x5))(\x4x5.x5))(\x3.x3(\x4x5.x5)(x1(x2(\x4x5x6.x5)))(\x4x5.x5)))(\x3.x3(x2(\x4x5x6.x4))(x2(\x4x5x6.x5))(\x4x5.x4))) DeBruijn: (\(\2(11))(\2(11)))(\\1(\\\1)(1(\\\3)(\1(\\1)(\1(\\2)(\1)(\\2))(\\1))(\1(\\1)(3(2(\\\2)))(\\1)))(\1(2(\\\3))(2(\\\2))(\\2))) DAG: Y($succ) Combinat: S(C(BBI)(SII))(C(BBI)(SII))(C(BS(B(S(CI(K(KI))))(B(S(C(CI(BK(BKI)))(C(C(CI(KI))(C(C(CIK)I)K))(KI))))(C(BC(B(BC)(B(B(C(CI(KI))))(C(BBI)(CI(KK))))))(KI)))))(C(BC(S(BC(B(CI)(CI(BK(BKI)))))(CI(KK))))K)) $add Type: null Lambda: (\x1.(\x2.x1(x2x2))(\x2.x1(x2x2)))(\x1x2x3.x2(\x4x5x6.x4)(x2(\x4x5x6.x6)((\x4.(\x5.x4(x5x5))(\x5.x4(x5x5)))(\x4x5.x5(\x6x7x8.x8)(x5(\x6x7x8.x6)(\x6.x6(\x7x8.x8)(\x7.x7(\x8x9.x8)(\x8.x8)(\x8x9.x8))(\x7x8.x8))(\x6.x6(\x7x8.x8)(x4(x5(\x7x8x9.x8)))(\x7x8.x8)))(\x6.x6(x5(\x7x8x9.x7))(x5(\x7x8x9.x8))(\x7x8.x7)))x3)x3)(x3(\x4x5x6.x4)(x3(\x4x5x6.x6)((\x4.(\x5.x4(x5x5))(\x5.x4(x5x5)))(\x4x5.x5(\x6x7x8.x8)(x5(\x6x7x8.x6)(\x6.x6(\x7x8.x8)(\x7.x7(\x8x9.x8)(\x8.x8)(\x8x9.x8))(\x7x8.x8))(\x6.x6(\x7x8.x8)(x4(x5(\x7x8x9.x8)))(\x7x8.x8)))(\x6.x6(x5(\x7x8x9.x7))(x5(\x7x8x9.x8))(\x7x8.x7)))x2)x2)(x2(\x4x5x6.x6)(x3(\x4x5x6.x6)(\x4.x4(\x5x6.x6)((\x5.(\x6.x5(x6x6))(\x6.x5(x6x6)))(\x5x6.x6(\x7x8x9.x9)(x6(\x7x8x9.x7)(\x7.x7(\x8x9.x9)(\x8.x8(\x9x10.x9)(\x9.x9)(\x9x10.x9))(\x8x9.x9))(\x7.x7(\x8x9.x9)(x5(x6(\x8x9x10.x9)))(\x8x9.x9)))(\x7.x7(x6(\x8x9x10.x8))(x6(\x8x9x10.x9))(\x8x9.x8)))(x1(x2(\x5x6x7.x6))(x3(\x5x6x7.x6))))(\x5x6.x6))(\x4.x4(\x5x6.x6)(x1(x2(\x5x6x7.x6))(x3(\x5x6x7.x6)))(\x5x6.x5)))(x3(\x4x5x6.x6)(\x4.x4(\x5x6.x6)(x1(x2(\x5x6x7.x6))(x3(\x5x6x7.x6)))(\x5x6.x5))(\x4.x4(\x5x6.x6)(x1(x2(\x5x6x7.x6))(x3(\x5x6x7.x6)))(\x5x6.x6)))))) DeBruijn: (\(\2(11))(\2(11)))(\\\2(\\\3)(2(\\\1)((\(\2(11))(\2(11)))(\\1(\\\1)(1(\\\3)(\1(\\1)(\1(\\2)(\1)(\\2))(\\1))(\1(\\1)(3(2(\\\2)))(\\1)))(\1(2(\\\3))(2(\\\2))(\\2)))1)1)(1(\\\3)(1(\\\1)((\(\2(11))(\2(11)))(\\1(\\\1)(1(\\\3)(\1(\\1)(\1(\\2)(\1)(\\2))(\\1))(\1(\\1)(3(2(\\\2)))(\\1)))(\1(2(\\\3))(2(\\\2))(\\2)))2)2)(2(\\\1)(1(\\\1)(\1(\\1)((\(\2(11))(\2(11)))(\\1(\\\1)(1(\\\3)(\1(\\1)(\1(\\2)(\1)(\\2))(\\1))(\1(\\1)(3(2(\\\2)))(\\1)))(\1(2(\\\3))(2(\\\2))(\\2)))(4(3(\\\2))(2(\\\2))))(\\1))(\1(\\1)(4(3(\\\2))(2(\\\2)))(\\2)))(1(\\\1)(\1(\\1)(4(3(\\\2))(2(\\\2)))(\\2))(\1(\\1)(4(3(\\\2))(2(\\\2)))(\\1)))))) DAG: Y($add) Combinat: S(C(BBI)(SII))(C(BBI)(SII))(B(S(BS(S(BB(CI(BK(BKI))))(C(BS(C(BB(CI(K(KI))))(B(S(C(BBI)(SII))(C(BBI)(SII))(C(BS(B(S(CI(K(KI))))(B(S(C(CI(BK(BKI)))(C(C(CI(KI))(C(C(CIK)I)K))(KI))))(C(BC(B(BC)(B(B(C(CI(KI))))(C(BBI)(CI(KK))))))(KI)))))(C(BC(S(BC(B(CI)(CI(BK(BKI)))))(CI(KK))))K)))I)))I))))(B(S(BS(B(S(CI(BK(BKI))))(S(BC(B(C(CI(K(KI))))(B(S(C(BBI)(SII))(C(BBI)(SII))(C(BS(B(S(CI(K(KI))))(B(S(C(CI(BK(BKI)))(C(C(CI(KI))(C(C(CIK)I)K))(KI))))(C(BC(B(BC)(B(B(C(CI(KI))))(C(BBI)(CI(KK))))))(KI)))))(C(BC(S(BC(B(CI)(CI(BK(BKI)))))(CI(KK))))K)))I)))I))))(S(BS(B(BS)(B(S(BB(CI(K(KI)))))(S(BS(B(BS)(B(B(S(CI(K(KI)))))(C(BC(B(BC)(B(B(BC))(B(B(B(C(CI(KI)))))(B(B(B(S(C(BBI)(SII))(C(BBI)(SII))(C(BS(B(S(CI(K(KI))))(B(S(C(CI(BK(BKI)))(C(C(CI(KI))(C(C(CIK)I)K))(KI))))(C(BC(B(BC)(B(B(C(CI(KI))))(C(BBI)(CI(KK))))))(KI)))))(C(BC(S(BC(B(CI)(CI(BK(BKI)))))(CI(KK))))K)))))(C(BC(B(BB)(C(BBI)(CI(KK)))))(CI(KK))))))))(KI)))))(C(BC(B(BC)(B(B(BC))(B(B(B(C(CI(KI)))))(C(BC(B(BB)(C(BBI)(CI(KK)))))(CI(KK)))))))K)))))(S(BS(B(BS)(B(B(S(CI(K(KI)))))(C(BC(B(BC)(B(B(BC))(B(B(B(C(CI(KI)))))(C(BC(B(BB)(C(BBI)(CI(KK)))))(CI(KK)))))))K))))(C(BC(B(BC)(B(B(BC))(B(B(B(C(CI(KI)))))(C(BC(B(BB)(C(BBI)(CI(KK)))))(CI(KK)))))))(KI)))))) $mult Type: null Lambda: (\x1.(\x2.x1(x2x2))(\x2.x1(x2x2)))(\x1x2x3.x2(\x4x5x6.x4)(x2(\x4x5x6.x6)x3(\x4.x4(\x5x6.x5)(\x5.x5)(\x5x6.x6)))(x2(\x4x5x6.x6)((\x4.(\x5.x4(x5x5))(\x5.x4(x5x5)))(\x4x5x6.x5(\x7x8x9.x7)(x5(\x7x8x9.x9)((\x7.(\x8.x7(x8x8))(\x8.x7(x8x8)))(\x7x8.x8(\x9x10x11.x11)(x8(\x9x10x11.x9)(\x9.x9(\x10x11.x11)(\x10.x10(\x11x12.x11)(\x11.x11)(\x11x12.x11))(\x10x11.x11))(\x9.x9(\x10x11.x11)(x7(x8(\x10x11x12.x11)))(\x10x11.x11)))(\x9.x9(x8(\x10x11x12.x10))(x8(\x10x11x12.x11))(\x10x11.x10)))x6)x6)(x6(\x7x8x9.x7)(x6(\x7x8x9.x9)((\x7.(\x8.x7(x8x8))(\x8.x7(x8x8)))(\x7x8.x8(\x9x10x11.x11)(x8(\x9x10x11.x9)(\x9.x9(\x10x11.x11)(\x10.x10(\x11x12.x11)(\x11.x11)(\x11x12.x11))(\x10x11.x11))(\x9.x9(\x10x11.x11)(x7(x8(\x10x11x12.x11)))(\x10x11.x11)))(\x9.x9(x8(\x10x11x12.x10))(x8(\x10x11x12.x11))(\x10x11.x10)))x5)x5)(x5(\x7x8x9.x9)(x6(\x7x8x9.x9)(\x7.x7(\x8x9.x9)((\x8.(\x9.x8(x9x9))(\x9.x8(x9x9)))(\x8x9.x9(\x10x11x12.x12)(x9(\x10x11x12.x10)(\x10.x10(\x11x12.x12)(\x11.x11(\x12x13.x12)(\x12.x12)(\x12x13.x12))(\x11x12.x12))(\x10.x10(\x11x12.x12)(x8(x9(\x11x12x13.x12)))(\x11x12.x12)))(\x10.x10(x9(\x11x12x13.x11))(x9(\x11x12x13.x12))(\x11x12.x11)))(x4(x5(\x8x9x10.x9))(x6(\x8x9x10.x9))))(\x8x9.x9))(\x7.x7(\x8x9.x9)(x4(x5(\x8x9x10.x9))(x6(\x8x9x10.x9)))(\x8x9.x8)))(x6(\x7x8x9.x9)(\x7.x7(\x8x9.x9)(x4(x5(\x8x9x10.x9))(x6(\x8x9x10.x9)))(\x8x9.x8))(\x7.x7(\x8x9.x9)(x4(x5(\x8x9x10.x9))(x6(\x8x9x10.x9)))(\x8x9.x9))))))(\x4.x4(\x5x6.x6)(x1(x2(\x5x6x7.x6))x3)(\x5x6.x6))x3)(\x4.x4(\x5x6.x6)(x1(x2(\x5x6x7.x6))x3)(\x5x6.x6)))) DeBruijn: (\(\2(11))(\2(11)))(\\\2(\\\3)(2(\\\1)1(\1(\\2)(\1)(\\1)))(2(\\\1)((\(\2(11))(\2(11)))(\\\2(\\\3)(2(\\\1)((\(\2(11))(\2(11)))(\\1(\\\1)(1(\\\3)(\1(\\1)(\1(\\2)(\1)(\\2))(\\1))(\1(\\1)(3(2(\\\2)))(\\1)))(\1(2(\\\3))(2(\\\2))(\\2)))1)1)(1(\\\3)(1(\\\1)((\(\2(11))(\2(11)))(\\1(\\\1)(1(\\\3)(\1(\\1)(\1(\\2)(\1)(\\2))(\\1))(\1(\\1)(3(2(\\\2)))(\\1)))(\1(2(\\\3))(2(\\\2))(\\2)))2)2)(2(\\\1)(1(\\\1)(\1(\\1)((\(\2(11))(\2(11)))(\\1(\\\1)(1(\\\3)(\1(\\1)(\1(\\2)(\1)(\\2))(\\1))(\1(\\1)(3(2(\\\2)))(\\1)))(\1(2(\\\3))(2(\\\2))(\\2)))(4(3(\\\2))(2(\\\2))))(\\1))(\1(\\1)(4(3(\\\2))(2(\\\2)))(\\2)))(1(\\\1)(\1(\\1)(4(3(\\\2))(2(\\\2)))(\\2))(\1(\\1)(4(3(\\\2))(2(\\\2)))(\\1))))))(\1(\\1)(4(3(\\\2))2)(\\1))1)(\1(\\1)(4(3(\\\2))2)(\\1)))) DAG: Y($mult) Combinat: S(C(BBI)(SII))(C(BBI)(SII))(B(S(BS(S(BB(CI(BK(BKI))))(C(BC(C(BB(CI(K(KI))))I))(C(C(CIK)I)(KI))))))(S(BS(B(BS)(B(S(BB(CI(K(KI)))))(C(BC(B(BS)(B(B(B(S(C(BBI)(SII))(C(BBI)(SII))(B(S(BS(S(BB(CI(BK(BKI))))(C(BS(C(BB(CI(K(KI))))(B(S(C(BBI)(SII))(C(BBI)(SII))(C(BS(B(S(CI(K(KI))))(B(S(C(CI(BK(BKI)))(C(C(CI(KI))(C(C(CIK)I)K))(KI))))(C(BC(B(BC)(B(B(C(CI(KI))))(C(BBI)(CI(KK))))))(KI)))))(C(BC(S(BC(B(CI)(CI(BK(BKI)))))(CI(KK))))K)))I)))I))))(B(S(BS(B(S(CI(BK(BKI))))(S(BC(B(C(CI(K(KI))))(B(S(C(BBI)(SII))(C(BBI)(SII))(C(BS(B(S(CI(K(KI))))(B(S(C(CI(BK(BKI)))(C(C(CI(KI))(C(C(CIK)I)K))(KI))))(C(BC(B(BC)(B(B(C(CI(KI))))(C(BBI)(CI(KK))))))(KI)))))(C(BC(S(BC(B(CI)(CI(BK(BKI)))))(CI(KK))))K)))I)))I))))(S(BS(B(BS)(B(S(BB(CI(K(KI)))))(S(BS(B(BS)(B(B(S(CI(K(KI)))))(C(BC(B(BC)(B(B(BC))(B(B(B(C(CI(KI)))))(B(B(B(S(C(BBI)(SII))(C(BBI)(SII))(C(BS(B(S(CI(K(KI))))(B(S(C(CI(BK(BKI)))(C(C(CI(KI))(C(C(CIK)I)K))(KI))))(C(BC(B(BC)(B(B(C(CI(KI))))(C(BBI)(CI(KK))))))(KI)))))(C(BC(S(BC(B(CI)(CI(BK(BKI)))))(CI(KK))))K)))))(C(BC(B(BB)(C(BBI)(CI(KK)))))(CI(KK))))))))(KI)))))(C(BC(B(BC)(B(B(BC))(B(B(B(C(CI(KI)))))(C(BC(B(BB)(C(BBI)(CI(KK)))))(CI(KK)))))))K)))))(S(BS(B(BS)(B(B(S(CI(K(KI)))))(C(BC(B(BC)(B(B(BC))(B(B(B(C(CI(KI)))))(C(BC(B(BB)(C(BBI)(CI(KK)))))(CI(KK)))))))K))))(C(BC(B(BC)(B(B(BC))(B(B(B(C(CI(KI)))))(C(BC(B(BB)(C(BBI)(CI(KK)))))(CI(KK)))))))(KI)))))))))(C(BC(B(BC)(B(B(BC))(B(B(B(C(CI(KI)))))(C(BC(B(BB)(C(BBI)(CI(KK)))))I)))))(KI)))))I))))(C(BC(B(BC)(B(B(BC))(B(B(B(C(CI(KI)))))(C(BC(B(BB)(C(BBI)(CI(KK)))))I)))))(KI)))) $1 Type: ((T1->T2->T1)->(T3->T3)->(T4->T5->T4)->T6)->T6 Lambda: \x1.x1(\x2x3.x2)(\x2.x2)(\x2x3.x2) DeBruijn: \1(\\2)(\1)(\\2) DAG: ($1) Combinat: C(C(CIK)I)K $2 Type: ((T1->T2->T2)->(((T3->T4->T3)->(T5->T5)->(T6->T7->T6)->T8)->T8)->(T9->T10->T10)->T11)->T11 Lambda: \x1.x1(\x2x3.x3)(\x2.x2(\x3x4.x3)(\x3.x3)(\x3x4.x3))(\x2x3.x3) DeBruijn: \1(\\1)(\1(\\2)(\1)(\\2))(\\1) DAG: ($2) Combinat: C(C(CI(KI))(C(C(CIK)I)K))(KI) $fromChurch Type: null Lambda: (\x1.(\x2.x1(x2x2))(\x2.x1(x2x2)))(\x1x2.(\x3.(\x4.x4(\x5x6x7.x7)(\x5x6.x5))(x3(\x4x5.x4))(\x4.x4(\x5x6.x5)(\x5.x5)(x3(\x5x6.x6)))(\x4.x4(\x5x6.x6)(x1(x3(\x5x6.x5)))(x3(\x5x6.x6))))((\x3.x3(\x4.x4(\x5x6.x6)(\x5.x5((\x6x7x8.x7(x6x7x8))(x4(\x6x7.x6)))(\x6x7.x7))(\x5.x5(x4(\x6x7.x6))(\x6x7.x6)))(\x4.x4(\x5x6.x6)(\x5x6.x6)))x2)) DeBruijn: (\(\2(11))(\2(11)))(\\(\(\1(\\\1)(\\2))(1(\\2))(\1(\\2)(\1)(2(\\1)))(\1(\\1)(4(2(\\2)))(2(\\1))))((\1(\1(\\1)(\1((\\\2(321))(2(\\2)))(\\1))(\1(2(\\2))(\\2)))(\1(\\1)(\\1)))1)) DAG: Y($fromChurch) Combinat: S(C(BBI)(SII))(C(BBI)(SII))(C(BB(B(S(S(B(C(CI(K(KI)))K)(CIK))(B(C(C(CIK)I))(CI(KI)))))(C(BS(B(BC)(B(B(C(CI(KI))))(C(BBI)(CIK)))))(CI(KI)))))(B(C(CI(S(S(CI(KI))(C(BC(B(CI)(B(B(S(BBI))(C(BC(B(BB)(C(BBI)I)))I))(CIK))))(KI)))(C(BC(B(CI)(CIK)))K)))(C(CI(KI))(KI)))I)) $toChurch Type: null Lambda: (\x1.(\x2.x1(x2x2))(\x2.x1(x2x2)))(\x1x2.x2(\x3x4x5.x3)(x2(\x3x4x5.x5)(\x3x4.x3x4)(\x3x4.x4))(x2(\x3x4x5.x5)((\x3x4x5.x4(x3x4x5))((\x3x4x5x6.x3x5(x4x5x6))(x1(x2(\x3x4x5.x4)))(x1(x2(\x3x4x5.x4)))))((\x3x4x5x6.x3x5(x4x5x6))(x1(x2(\x3x4x5.x4)))(x1(x2(\x3x4x5.x4)))))) DeBruijn: (\(\2(11))(\2(11)))(\\1(\\\3)(1(\\\1)(\\21)(\\1))(1(\\\1)((\\\2(321))((\\\\42(321))(2(1(\\\2)))(2(1(\\\2)))))((\\\\42(321))(2(1(\\\2)))(2(1(\\\2)))))) DAG: Y($toChurch) Combinat: S(C(BBI)(SII))(C(BBI)(SII))(B(S(S(CI(BK(BKI)))(C(C(CI(K(KI)))(C(BBI)I))(KI))))(S(BS(B(S(CI(K(KI))))(B(B(B(S(BBI))(C(BC(B(BB)(C(BBI)I)))I)))(S(BS(B(B(C(BB(BS(B(BB)(C(BBI)I))))(C(BC(B(BB)(C(BBI)I)))I)))(C(BBI)(CI(KK)))))(C(BBI)(CI(KK)))))))(S(BS(B(B(C(BB(BS(B(BB)(C(BBI)I))))(C(BC(B(BB)(C(BBI)I)))I)))(C(BBI)(CI(KK)))))(C(BBI)(CI(KK)))))) TestPrinter with IntNumberCoding _isZero Type: Z->T1->T1->T1 Lambda: (_isZero) DeBruijn: (_isZero) DAG: (_isZero) Combinat: null _succ Type: Z->Z Lambda: (_succ) DeBruijn: (_succ) DAG: (_succ) Combinat: null _pred Type: Z->Z Lambda: (_pred) DeBruijn: (_pred) DAG: (_pred) Combinat: null _add Type: Z->Z->Z Lambda: (_add) DeBruijn: (_add) DAG: (_add) Combinat: null _sub Type: Z->Z->Z Lambda: (_sub) DeBruijn: (_sub) DAG: (_sub) Combinat: null _mult Type: Z->Z->Z Lambda: (_mult) DeBruijn: (_mult) DAG: (_mult) Combinat: null _div Type: Z->Z->Z Lambda: (_div) DeBruijn: (_div) DAG: (_div) Combinat: null _mod Type: Z->Z->Z Lambda: (_mod) DeBruijn: (_mod) DAG: (_mod) Combinat: null _1 Type: Z Lambda: (_1) DeBruijn: (_1) DAG: (_1) Combinat: null _2 Type: Z Lambda: (_2) DeBruijn: (_2) DAG: (_2) Combinat: null _add _2 Type: Z->Z Lambda: (_add)((_2)) DeBruijn: (_add)((_2)) DAG: (_add)((_2)) Combinat: null TestPrinter with FloatNumberCoding £add Type: R->R->R Lambda: (£add) DeBruijn: (£add) DAG: (£add) Combinat: null £sub Type: R->R->R Lambda: (£sub) DeBruijn: (£sub) DAG: (£sub) Combinat: null £mult Type: R->R->R Lambda: (£mult) DeBruijn: (£mult) DAG: (£mult) Combinat: null £div Type: R->R->R Lambda: (£div) DeBruijn: (£div) DAG: (£div) Combinat: null £1 Type: R Lambda: (£1.0) DeBruijn: (£1.0) DAG: (£1.0) Combinat: null £2 Type: R Lambda: (£2.0) DeBruijn: (£2.0) DAG: (£2.0) Combinat: null £mult £2 Type: R->R Lambda: (£mult)((£2.0)) DeBruijn: (£mult)((£2.0)) DAG: (£mult)((£2.0)) Combinat: null TestType #0 : (T1->T1)->T1->T1 #1 : (T1->T1)->T1->T1 #2 : (T1->T1)->T1->T1 #succ : ((T1->T1)->T1->T1)->(T1->T1)->T1->T1 #pred : ((((T1->T1)->T1)->(T1->T1)->T1)->((T1->T1)->T1)->(T1->T1)->T1)->(T1->T1)->T1->T1 #add : ((T1->T1)->T1->T1)->((T1->T1)->T1->T1)->(T1->T1)->T1->T1 #mult : ((T1->T1)->T1->T1)->((T1->T1)->T1->T1)->(T1->T1)->T1->T1 #power : null _0 : Z _1 : Z _2 : Z _succ : Z->Z _pred : Z->Z _add : Z->Z->Z _mult : Z->Z->Z £0 : R £1 : R £2 : R £ln : R->R £exp : R->R £add : R->R->R £mult : R->R->R TestReducer II II -* 001--b-> I KKF KKF -* 001--b-> (\x1.K)F -------* 002--b-> K FKF FKF -* 001--b-> IF -* 002--b-> F Combi[pair] C(BB(BC(B(CI)I)))I --**************- 001--b-> (\x1x2.BB(BC(B(CI)I))x2x1)I --------------------------* 002--b-> \x1.BB(BC(B(CI)I))x1I -* 003--b-> \x1.(\x2x3.B(x2x3))(BC(B(CI)I))x1I ----------------**********- 004--b-> \x1.(\x2.B(BC(B(CI)I)x2))x1I ---------------------** 005--b-> \x1.B(BC(B(CI)I)x1)I --************- 006--b-> \x1.(\x2x3.BC(B(CI)I)x1(x2x3))I --------------------------* 007--b-> \x1x2.BC(B(CI)I)x1(Ix2) -* 008--b-> \x1x2.(\x3x4.C(x3x4))(B(CI)I)x1(Ix2) ----------------******- 009--b-> \x1x2.(\x3.C(B(CI)Ix3))x1(Ix2) -----------------** 010--b-> \x1x2.C(B(CI)Ix1)(Ix2) --********- 011--b-> \x1x2.(\x3x4.B(CI)Ix1x4x3)(Ix2) ---------------------***- 012--b-> \x1x2x3.B(CI)Ix1x3(Ix2) --**- 013--b-> \x1x2x3.(\x4x5.CI(x4x5))Ix1x3(Ix2) ----------------* 014--b-> \x1x2x3.(\x4.CI(Ix4))x1x3(Ix2) -------------** 015--b-> \x1x2x3.CI(Ix1)x3(Ix2) -* 016--b-> \x1x2x3.(\x4x5.Ix5x4)(Ix1)x3(Ix2) --------------***- 017--b-> \x1x2x3.(\x4.Ix4(Ix1))x3(Ix2) --------------** 018--b-> \x1x2x3.Ix3(Ix1)(Ix2) -** 019--b-> \x1x2x3.x3(Ix1)(Ix2) -** 020--b-> \x1x2x3.x3x1(Ix2) -** 021--b-> \x1x2x3.x3x1x2 #2 #2 #2#2 --** 001--b-> \x1.A1(A1x1) A1=#2 ---****- 002--b-> \x1x2.A1(A1x2) A1=#2x1 -- -- --** 003--b-> \x1x2.A1(A1x2) A1=\x3.x1(x1x3) ---****- 004--b-> \x1x2.x1(x1((\x3.x1(x1x3))x2)) --------------** 005--b-> #4 #4 #2 #4#2 --** 001--b-> \x1.A1(A1(A1(A1x1))) A1=#2 ---************- 002--b-> \x1x2.A1(A1x2) A1=A2(A2(A2x1)) A2=#2 -- -- ---********- 003--b-> \x1x2.A1(A1x2) A1=\x3.A2(A2x3) A2=A3(A3x1) A3=#2 ---****- 004--b-> \x1x2.A1(A1((\x3.A1(A1x3))x2)) A1=A2(A2x1) A2=#2 -- -- -- -- ---****- 005--b-> \x1x2.A1(A1((\x3.A1(A1x3))x2)) A1=\x3.A2(A2x3) A2=#2x1 ---********************- 006--b-> \x1x2.A1(A1(A2((\x3.A2(A2x3))x2))) A1=#2x1 A2=\x3.A1(A1x3) -- -- --** -- -- 007--b-> \x1x2.A1(A1(A2((\x3.A2(A2x3))x2))) A1=\x3.x1(x1x3) A2=\x3.A1(A1x3) ---************************- 008--b-> \x1x2.x1(x1(A1(A2((\x3.A2(A2x3))x2)))) A1=\x3.x1(x1x3) A2=\x3.A1(A1x3) ---********************- 009--b-> \x1x2.x1(x1(x1(x1(A1((\x3.A1(A1x3))x2))))) A1=\x3.A2(A2x3) A2=\x4.x1(x1x4) ---****************- 010--b-> \x1x2.x1(x1(x1(x1(A1(A1((\x3.A2(A2x3))x2)))))) A1=\x3.x1(x1x3) A2=\x4.A3(A3x4) A3=\x5.x1(x1x5) ---********************- 011--b-> \x1x2.x1(x1(x1(x1(x1(x1((\x3.x1(x1x3))((\x3.A1(A1x3))x2))))))) A1=\x4.A2(A2x4) A2=\x5.x1(x1x5) ---------------****************- 012--b-> \x1x2.x1(x1(x1(x1(x1(x1(x1(x1((\x3.A1(A1x3))x2)))))))) A1=\x4.A2(A2x4) A2=\x5.x1(x1x5) --------------** 013--b-> \x1x2.x1(x1(x1(x1(x1(x1(x1(x1(A1(A1x2))))))))) A1=\x3.A2(A2x3) A2=\x4.x1(x1x4) ---****- 014--b-> \x1x2.x1(x1(x1(x1(x1(x1(x1(x1(A1(A1((\x3.A2(A2x3))x2)))))))))) A1=\x3.x1(x1x3) A2=\x4.x1(x1x4) ---********************- 015--b-> \x1x2.x1(x1(x1(x1(x1(x1(x1(x1(x1(x1((\x3.x1(x1x3))((\x3.A1(A1x3))x2))))))))))) A1=\x4.x1(x1x4) ---------------****************- 016--b-> \x1x2.x1(x1(x1(x1(x1(x1(x1(x1(x1(x1(x1(x1((\x3.A1(A1x3))x2)))))))))))) A1=\x4.x1(x1x4) --------------** 017--b-> \x1x2.x1(x1(x1(x1(x1(x1(x1(x1(x1(x1(x1(x1(A1(A1x2))))))))))))) A1=\x3.x1(x1x3) ---****- 018--b-> \x1x2.x1(x1(x1(x1(x1(x1(x1(x1(x1(x1(x1(x1(x1(x1((\x3.x1(x1x3))x2)))))))))))))) --------------** 019--b-> #16 #isZero #2 (#isZero)#2 ---------** 001--b-> #2(\x1.F)K ---*****- 002--b-> (\x1.A1(A1x1))K A1=\x2.F --------------* 003--b-> A1(A1K) A1=\x1.F ---***- 004--b-> F @isZero @2 (@isZero)(@2) ---------**** 001--b-> (@2)K(\x1.F) ----* 002--b-> ([(@1)])(\x1.F) ---------*****- 003--b-> (\x1.F)(@1) -------**** 004--b-> F $isZero $2 ($isZero)($2) ---------**** 001--b-> A1(3/3)F(A1(1/3)) A1=($2) --***** 002--b-> (3/3)FA1FF(($2)(1/3)) A1=($1) -----* 003--b-> FA1FF(($2)(1/3)) A1=($1) -** 004--b-> IFF(($2)(1/3)) -* 005--b-> FF(($2)(1/3)) -* 006--b-> I(($2)(1/3)) --*********- 007--b-> ($2)(1/3) ----***** 008--b-> (1/3)F($1)F -----* 009--b-> (\x1x2.F)($1)F ---------**** 010--b-> (\x1.F)F -------* 011--b-> F #Ssucc #-1 (#Ssucc)(#-1) --------***** 001--b-> A1K([K,(#succ)(A1F)])((#normSign)([F,(#pred)(A1F)])) A1=(#-1) --* 002--b-> KFA1([K,(#succ)(A2F)])((#normSign)([F,(#pred)(A2F)])) A1=#1 A2=(#-1) -* 003--b-> (\x1.F)A1([K,(#succ)(A2F)])((#normSign)([F,(#pred)(A2F)])) A1=#1 A2=(#-1) -------** 004--b-> F([K,(#succ)(A1F)])((#normSign)([F,(#pred)(A1F)])) A1=(#-1) --****************- 005--b-> I((#normSign)([F,(#pred)((#-1)F)])) --********************************- 006--b-> (#normSign)([F,(#pred)((#-1)F)]) ------------*******************- 007--b-> (#SisZero)A1(#+0)A1 A1=[F,(#pred)((#-1)F)] ----------** 008--b-> (#isZero)(A1F)(#+0)A1 A1=[F,(#pred)((#-1)F)] ----------***- 009--b-> A1F(\x1.F)K(#+0)A1 A1=[F,(#pred)((#-1)F)] --* 010--b-> FFA1(\x1.F)K(#+0)([F,A1]) A1=(#pred)((#-1)F) -* 011--b-> IA1(\x1.F)K(#+0)([F,A1]) A1=(#pred)((#-1)F) -** 012--b-> A1(\x1.F)K(#+0)([F,A1]) A1=(#pred)((#-1)F) -- -- --------******- 013--b-> A1(\x1.F)K(#+0)([F,A1]) A1=\x1x2.(#-1)F(\x3x4.x4(x3x1))(\x3.x2)I ---*****- 014--b-> (\x1.A1(\x2x3.x3(x2(\x4.F)))(\x2.x1)I)K(#+0)([F,\x1x2.A1(\x3x4.x4(x3x1))(\x3.x2)I]) A1=(#-1)F --------------------------------------* 015--b-> A1(\x1x2.x2(x1(\x3.F)))(\x1.K)I(#+0)([F,\x1x2.A1(\x3x4.x4(x3x1))(\x3.x2)I]) A1=(#-1)F -- -- -----* 016--b-> A1(\x1x2.x2(x1(\x3.F)))(\x1.K)I(#+0)([F,\x1x2.A1(\x3x4.x4(x3x1))(\x3.x2)I]) A1=FF#1 -* 017--b-> A1(\x1x2.x2(x1(\x3.F)))(\x1.K)I(#+0)([F,\x1x2.A1(\x3x4.x4(x3x1))(\x3.x2)I]) A1=I#1 -- -- -** 018--b-> A1(\x1x2.x2(x1(\x3.F)))(\x1.K)I(#+0)([F,\x1x2.A1(\x3x4.x4(x3x1))(\x3.x2)I]) A1=#1 ---*******************- 019--b-> (\x1.(\x2x3.x3(x2(\x4.F)))x1)(\x1.K)I(#+0)([F,\x1x2.#1(\x3x4.x4(x3x1))(\x3.x2)I]) ------------------------------*****- 020--b-> (\x1x2.x2(x1(\x3.F)))(\x1.K)I(#+0)([F,\x1x2.#1(\x3x4.x4(x3x1))(\x3.x2)I]) ----------------------*****- 021--b-> ([(\x1.K)(\x1.F)])I(#+0)([F,\x1x2.#1(\x3x4.x4(x3x1))(\x3.x2)I]) ------------------* 022--b-> I((\x1.K)(\x1.F))(#+0)([F,\x1x2.#1(\x3x4.x4(x3x1))(\x3.x2)I]) --**************- 023--b-> (\x1.K)(\x1.F)(#+0)([F,\x1x2.#1(\x3x4.x4(x3x1))(\x3.x2)I]) --------*****- 024--b-> K(#+0)([F,\x1x2.#1(\x3x4.x4(x3x1))(\x3.x2)I]) -***** 025--b-> (\x1.(#+0))([F,\x1x2.#1(\x3x4.x4(x3x1))(\x3.x2)I]) ------------*************************************- 026--b-> (#+0) @pred @3 (@pred)(@3) -------**** 001--b-> (@3)KI ----* 002--b-> ([(@2)])I --------* 003--b-> I(@2) -**** 004--b-> (@2) TKF TKF -* 001--d-> TF -* 002--d-> K ZKF ZKF -* 001--d-> JF -* 002--d-> F _isZero _2 (_isZero)((_2)) ----------****- 001--d-> Z _pred _3 (_pred)((_3)) --------****- 001--d-> (_2) _add _2 _3 (_add)((_2))((_3)) -------****- 001--d-> (_add.)((_3)) --------****- 002--d-> (_5) _mult _3 _4 (_mult)((_3))((_4)) --------****- 001--d-> (_mult.)((_4)) ---------****- 002--d-> (_12) E1ZTT (E1)ZTT ----* 001--d-> (E1.)TT -----* 002--d-> (E1..)T ------* 003--d-> Z £mult £3 £4 (£mult)((£3.0))((£4.0)) --------******- 001--d-> (£mult.)((£4.0)) ---------******- 002--d-> (£12.0) £mult (£mult £3 £2) £4 (£mult)((£mult)((£3.0))((£2.0)))((£4.0)) --------******- 001--d-> (£mult)((£mult.)((£2.0)))((£4.0)) ---------******- 002--d-> (£mult)((£6.0))((£4.0)) --------******- 003--d-> (£mult.)((£4.0)) ---------******- 004--d-> (£24.0) TestCalculus II (1) -> I using 1 ms #isZero #2 (4) -> F using 0 ms #succ #3 (3) -> #4 using 0 ms #pred #5 (15) -> #4 using 2 ms #add #5 #3 (6) -> #8 using 0 ms #mult #5 #3 (7) -> #15 using 3 ms #Ssucc #-7 (46) -> [F,#6] using 32 ms #Spred #+1 (26) -> [K,F] using 1 ms #Spred #+0 (15) -> [F,#1] using 42 ms #Spred #-1 (12) -> [F,#2] using 2 ms #Smult #+5 #-3 (37) -> [F,#15] using 5 ms @isZero @2 (4) -> F using 0 ms @succ @3 (1) -> \x1x2.x2(@3) using 0 ms @pred @4 (4) -> (@3) using 0 ms @Ssucc @-4 (24) -> [F,(@3)] using 1 ms @Spred @+1 (23) -> [K,K] using 0 ms @Spred @+0 (15) -> [F,(@1)] using 2 ms @Spred @-1 (10) -> [F,\x1x2.x2(@1)] using 1 ms @fromChurch #2 (5) -> \x1x2.x2(\x3x4.x4K) using 0 ms @toChurch @3 (54) -> #3 using 5 ms $isZero $2 (11) -> F using 0 ms $succ $3 (35) -> [F,($2),F] using 10 ms $pred $4 (51) -> [F,($1),K] using 2 ms $add $2 $3 (69) -> [F,($2),K] using 3 ms $mult $3 $3 (131) -> [F,[F,($2),F],K] using 9 ms $fromChurch #2 (68) -> [F,[K,I,K],F] using 4 ms $toChurch $3 (44) -> #3 using 1 ms #divByTwo #9 (96) -> [#4,K] using 3 ms #syracuse \x.x#0K (18) -> #2 using 1 ms #syracuse \x.x#1F (9) -> #1 using 0 ms #syracuseStepCount #1 (25) -> F using 0 ms #syracuseStepCount #7 (1709) -> #11 using 88 ms $syracuse $1 (7) -> ($1) using 0 ms $syracuse $3 (102) -> [F,($2),K] using 3 ms $syracuseStepCount $1 (10) -> F using 0 ms $syracuseStepCount $7 (1686) -> #11 using 112 ms _fromChurch #2 (1) -> (_2) using 0 ms _toChurch _3 (1) -> #3 using 0 ms _fromBinary $2 (1) -> (_2) using 0 ms _toBinary _3 (1) -> ($3) using 0 ms _syracuse _7 (1) -> (_11) using 0 ms _syracuseStepCount _1 (7) -> (_0) using 1 ms _syracuseStepCount _7 (106) -> (_11) using 2 ms _syracuseStepCount _27 (637) -> (_70) using 30 ms _succ (_succ _7) (2) -> (_9) using 0 ms £mult £113 (£mult £4 (£atan £1)) (5) -> (£354.9999698556466) using 0 ms Statistics Variables free : 0 living : 0 consumed : 23804 reusable : 3308 Constants(2) living : 0 consumed : 36 reusable : 2 Constants(3) living : 0 consumed : 4 reusable : 1 Abstractions living : 0 consumed : 23804 reusable : 3308 Applications living : 0 consumed : 29709 reusable : 3206 Total uses 979 ms