03/11/2016
If we want to support functions ...
Why differentiate between predicates and functions?
Predicate = Function to Bool
Using this we can easily recover FO
QuantForm(forall,+,x)
BoolForm(disjunctive,+)
PredForm(-,P)
PredForm(+,Q)
VarTerm
Var(X,Type)
VarTerm
Var(X,Type)
QuantForm(forall,+,x)
BoolForm(disjunctive,+)
PredForm(-,P)
PredForm(+,Q)
VarTerm
Ap
Forall
Lambda
Ap
Implies
Ap
Ap
Ap
P
Var(0)
Q
Var(0)
Var(X,Type)
VarTerm
Var(X,Type)
Ap
And
Ap
P
And
Ap
Q
Ap
R
Ap
And
Ap
[]
Ap
P
:
Ap
Q
:
Ap
Ap
R
:
Ap
Tentative list construction
Case-construct
case x of (a,b) -> a + b
Could be simulated as
Define-construct
let { p () = q () q () = p () z () = p () || q () }
let { transCl e (x,y) = e (x,y) || exists (\z ->
e (x,z) && transCl e (z,y)
}
Let? (easily simulated internally using abstraction)