Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Frontull Samuel
alpha
Commits
2edf668e
Commit
2edf668e
authored
Aug 08, 2021
by
Frontull Samuel
Browse files
SKI, true as K
parent
7b4c4de1
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
61 additions
and
5 deletions
+61
-5
pcp/lambda.hs
pcp/lambda.hs
+61
-5
No files found.
pcp/lambda.hs
View file @
2edf668e
...
...
@@ -154,6 +154,10 @@ ttran (App x y) = App (ttran x) (ttran y)
ttran
(
Abs
x
(
Var
y
))
=
if
x
==
y
then
I
else
App
K
(
Var
y
)
-- translate \xy.x to K not to S (K K) I
ttran
(
Abs
x
(
Abs
y
(
Var
z
)))
=
if
x
==
z
then
K
else
App
K
(
ttran
(
Abs
y
(
Var
z
)))
ttran
(
Abs
x
(
Abs
y
e1
))
=
let
f
=
elem
x
(
fvs
e1
)
in
if
f
then
ttran
(
Abs
x
(
ttran
(
Abs
y
e1
)))
...
...
@@ -166,19 +170,71 @@ ttran (Abs x (App e1 e2)) =
ttran
(
Abs
x
ski
)
=
App
K
(
ttran
ski
)
ttran
x
=
x
true
::
Term
true
=
Abs
"x"
(
Abs
"y"
(
Var
"x"
))
false
::
Term
false
=
Abs
"x"
(
Abs
"y"
(
Var
"y"
))
ite
::
Term
at
=
Abs
"x"
true
af
=
Abs
"x"
false
ite
=
Abs
"c"
(
Abs
"a"
(
Abs
"b"
(
App
(
App
(
Var
"c"
)
(
Var
"a"
))
(
Var
"b"
))))
land
::
Term
land
=
Abs
"x"
(
Abs
"y"
(
App
(
App
(
Var
"x"
)
(
Var
"y"
))
false
))
lor
::
Term
lor
=
Abs
"x"
(
Abs
"y"
(
App
(
App
(
Var
"x"
)
true
)
(
Var
"y"
)))
pair
=
Abs
"a"
(
Abs
"b"
(
Abs
"c"
(
App
(
App
(
Var
"c"
)
(
Var
"a"
))
(
Var
"b"
))))
first
=
Abs
"p"
(
App
(
Var
"p"
)
true
)
second
=
Abs
"p"
(
App
(
Var
"p"
)
false
)
ycomb
=
Abs
"f"
(
App
(
Abs
"x"
(
App
(
Var
"f"
)
(
App
(
Var
"x"
)
(
Var
"x"
))))
(
Abs
"x"
(
App
(
Var
"f"
)
(
App
(
Var
"x"
)
(
Var
"x"
)))))
empty
=
Abs
"a"
(
Abs
"b"
(
Abs
"x"
(
Var
"x"
)))
a
=
Abs
"a"
(
Abs
"b"
(
Abs
"x"
(
App
(
Var
"a"
)
(
Var
"x"
))))
b
=
Abs
"a"
(
Abs
"b"
(
Abs
"x"
(
App
(
Var
"b"
)
(
Var
"x"
))))
ab
=
Abs
"a"
(
Abs
"b"
(
Abs
"x"
(
App
(
Var
"a"
)
(
App
(
Var
"b"
)
(
Var
"x"
)))))
bba
=
Abs
"a"
(
Abs
"b"
(
Abs
"x"
(
App
(
Var
"b"
)
(
App
(
Var
"b"
)
(
App
(
Var
"a"
)
(
Var
"x"
))))))
isempty
=
Abs
"s"
(
App
(
App
(
App
(
Var
"s"
)
af
)
af
)
true
)
conc
=
Abs
"y"
(
Abs
"z"
(
Abs
"a"
(
Abs
"b"
(
Abs
"x"
(
App
(
App
(
App
(
Var
"y"
)
(
Var
"a"
))
(
Var
"b"
))
(
App
(
App
(
App
(
Var
"z"
)
(
Var
"a"
))
(
Var
"b"
))
(
Var
"x"
)))))))
prep_a
=
Abs
"s"
(
Abs
"a"
(
Abs
"b"
(
Abs
"x"
(
App
(
Var
"a"
)
(
App
(
App
(
App
(
Var
"s"
)
(
Var
"a"
))
(
Var
"b"
))
(
Var
"x"
))))))
prep_b
=
Abs
"s"
(
Abs
"a"
(
Abs
"b"
(
Abs
"x"
(
App
(
Var
"b"
)
(
App
(
App
(
App
(
Var
"s"
)
(
Var
"a"
))
(
Var
"b"
))
(
Var
"x"
))))))
hd_a
=
Abs
"s"
(
App
(
App
(
App
(
Var
"s"
)
at
)
af
)
false
)
hd_b
=
Abs
"s"
(
App
(
App
(
App
(
Var
"s"
)
af
)
at
)
false
)
hd_eq
=
Abs
"x"
(
Abs
"y"
(
App
(
App
lor
(
App
(
App
land
(
App
hd_a
(
Var
"x"
)))
(
App
hd_a
(
Var
"y"
))))
(
App
(
App
land
(
App
hd_b
(
Var
"x"
)))
(
App
hd_b
(
Var
"y"
)))))
next_a
=
Abs
"x"
(
App
(
App
pair
(
App
prep_a
(
App
first
(
Var
"x"
))))
(
App
first
(
Var
"x"
)))
next_b
=
Abs
"x"
(
App
(
App
pair
(
App
prep_b
(
App
first
(
Var
"x"
))))
(
App
first
(
Var
"x"
)))
tl_str
=
Abs
"s"
(
App
second
(
App
(
App
(
App
(
Var
"s"
)
next_a
)
next_b
)
(
App
(
App
pair
empty
)
empty
)))
eq
=
App
ycomb
(
Abs
"f"
(
Abs
"x"
(
Abs
"y"
(
App
(
App
(
App
ite
(
App
(
App
lor
(
App
isempty
(
Var
"x"
)))
(
App
isempty
(
Var
"y"
))))
(
App
(
App
land
(
App
isempty
(
Var
"x"
)))
(
App
isempty
(
Var
"y"
))))
(
App
(
App
land
(
App
(
App
hd_eq
(
Var
"x"
))
(
Var
"y"
)))
(
App
(
App
(
Var
"f"
)
(
App
tl_str
(
Var
"x"
)))
(
App
tl_str
(
Var
"y"
))))))))
prefix
=
App
ycomb
(
Abs
"f"
(
Abs
"x"
(
Abs
"y"
(
App
(
App
(
App
ite
(
App
isempty
(
Var
"x"
)))
true
)
(
App
(
App
land
(
App
(
App
hd_eq
(
Var
"x"
))
(
Var
"y"
)))
(
App
(
App
(
Var
"f"
)
(
App
tl_str
(
Var
"x"
)))
(
App
tl_str
(
Var
"y"
))))))))
nil
=
Abs
"c"
(
Abs
"n"
(
Var
"n"
))
cons
=
Abs
"h"
(
Abs
"t"
(
Abs
"c"
(
Abs
"n"
(
App
(
App
(
Var
"c"
)
(
Var
"h"
))
(
App
(
App
(
Var
"t"
)
(
Var
"c"
))
(
Var
"n"
))))))
is_nil
=
Abs
"l"
(
App
(
App
(
Var
"l"
)
(
Abs
"h"
(
Abs
"t"
false
)))
true
)
hd_l
=
Abs
"l"
(
App
(
App
(
App
(
Var
"l"
)
(
Abs
"h"
(
Abs
"t"
(
Abs
"u"
(
Var
"h"
)))))
(
Abs
"u"
(
App
ycomb
(
Abs
"x"
(
Var
"x"
)))))
nil
)
next_l
=
Abs
"x"
(
Abs
"p"
(
App
(
App
pair
(
App
(
App
cons
(
Var
"x"
))
(
App
first
(
Var
"x"
))))
(
App
first
(
Var
"p"
))))
tl_l
=
Abs
"l"
(
App
second
(
App
(
App
(
Var
"l"
)
next_l
)
(
App
(
App
pair
nil
)
nil
)))
append
=
Abs
"x"
(
Abs
"y"
(
Abs
"c"
(
Abs
"n"
(
App
(
App
(
Var
"x"
)
(
Var
"c"
))
(
App
(
App
(
Var
"y"
)
(
Var
"c"
))
(
Var
"n"
))))))
p1
=
App
(
App
pair
bba
)
b
p2
=
App
(
App
pair
b
)
ab
p3
=
App
(
App
pair
a
)
bba
pairs
=
App
(
App
cons
p1
)
(
App
(
App
cons
p2
)
(
App
(
App
cons
p3
)
nil
))
simp
=
Abs
"p"
(
App
(
App
(
App
ycomb
(
Abs
"f"
(
Abs
"x"
(
Abs
"y"
(
App
(
App
(
App
ite
(
App
(
App
lor
(
App
isempty
(
Var
"x"
)))
(
App
isempty
(
Var
"y"
))))
(
App
(
App
pair
(
Var
"x"
))
(
Var
"y"
)))
(
App
(
App
(
Var
"f"
)
(
App
tl_str
(
Var
"x"
)))
(
App
tl_str
(
Var
"y"
))))))))
(
App
first
(
Var
"p"
)))
(
App
second
(
Var
"p"
)))
pvalid
=
Abs
"p"
(
App
(
App
lor
(
App
(
App
prefix
(
App
first
(
Var
"p"
)))
(
App
second
(
Var
"p"
))))
(
App
(
App
prefix
(
App
second
(
Var
"p"
)))
(
App
first
(
Var
"p"
))))
find_eq
=
App
ycomb
()
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment