union_adt_reduce
[T1:TYPE,
T2:TYPE,
range:TYPE]
:
THEORY
BEGIN
reduce((inl?_fun:[T1-
>
range]),
(inr?_fun:[T2-
>
range]))
:
RECURSIVE
[union-
>
range]
=
LAMBDA
(union_adtvar:union)
:
LET
(red:[union-
>
range])
=
reduce(inl?_fun,
inr?_fun)
IN
CASES
union_adtvar
OF
inl(inl1_var):
inl?_fun(inl1_var),
inr(inr1_var):
inr?_fun(inr1_var)
ENDCASES
;
REDUCE((inl?_fun:[[T1,
union]-
>
range]),
(inr?_fun:[[T2,
union]-
>
range]))
:
RECURSIVE
[union-
>
range]
=
LAMBDA
(union_adtvar:union)
:
LET
(red:[union-
>
range])
=
REDUCE(inl?_fun,
inr?_fun)
IN
CASES
union_adtvar
OF
inl(inl1_var):
inl?_fun(inl1_var,
union_adtvar),
inr(inr1_var):
inr?_fun(inr1_var,
union_adtvar)
ENDCASES
;
END
union_adt_reduce