Execution of `ChurchBool.pkore`
ayberkt opened this issue · comments
Ayberk Tosun commented
Consider the following program
foo :: Integer
foo =
let true = (\x -> \y -> x)
false = (\x -> \y -> y)
not p = p false true
in (not true) 1 2
which results in 2
.
The generated K/PKore representation is the following.
let(nonRec(tmVar([type omitted], name(false)), lam(tyVar([type omitted], name(t)), lam(tyVar([type omitted], name(t)), lam(tmVar([type omitted], name(x)), lam(tmVar([type omitted], name(y)), var(tmVar([type omitted], name(y)))))))), let(nonRec(tmVar([type omitted], name(true)), lam(tyVar([type omitted], name(t)), lam(tyVar([type omitted], name(t)), lam(tmVar([type omitted], name(x)), lam(tmVar([type omitted], name(y)), var(tmVar([type omitted], name(x)))))))), app(app(app(app(app(app(app(app(lam(tyVar([type omitted], name(t)), lam(tyVar([type omitted], name(t)), lam(tyVar([type omitted], name(t)), lam(tyVar([type omitted], name(t)), lam(tyVar([type omitted], name(t)), lam(tmVar([type omitted], name(p)), app(app(var(tmVar([type omitted], name(p))), app(app(var(tmVar([type omitted], name(false))), type([type omitted])), type([type omitted]))), app(app(var(tmVar([type omitted], name(true))), type([type omitted])), type([type omitted]))))))))), type([type omitted])), type([type omitted])), type([type omitted])), type([type omitted])), type([type omitted])), app(app(var(tmVar([type omitted], name(true))), type([type omitted])), type([type omitted]))), lit(litInt(1, [type omitted]))), lit(litInt(2, [type omitted])))))
krun
ing this, however, gets stuck at:
<k>
var ( tmVar ( [type omitted] , name ( true ) ) )
~> #freezerapp(_,_)1 ( type ( [type omitted] ) )
~> #freezerapp(_,_)1 ( type ( [type omitted] ) )
~> #freezerupdate1 ( 9 )
~> restoreEnv ( name ( false ) |-> 1 name ( p ) |-> 9 name ( true ) |-> 2 )
~> var ( tmVar ( [type omitted] , name ( p ) ) )
~> #freezerapp(_,_)1 ( app ( app ( var ( tmVar ( [type omitted] , name ( false ) ) ) , type ( [type omitted] ) ) , type ( [type omitted] ) ) )
~> #freezerapp(_,_)1 ( app ( app ( var ( tmVar ( [type omitted] , name ( true ) ) ) , type ( [type omitted] ) ) , type ( [type omitted] ) ) ) ~> restoreEnv ( name ( false ) |-> 1 name ( true ) |-> 2 )
~> #freezerapp(_,_)1 ( lit ( litInt ( 1 , [type omitted] ) ) )
~> #freezerapp(_,_)1 ( lit ( litInt ( 2 , [type omitted] ) ) )
~> restoreEnv ( name ( false ) |-> 1 )
~> restoreEnv ( .Map )
</k>
cc: @bmmoore @lucaspena
Ayberk Tosun commented
The sample program is added in #6. You can see the full krun
output in the Travis log.
lucaspena commented
Fixed.