@@ -35,7 +35,12 @@ object KernelParser {
35
35
*/
36
36
def convertToKernel (formula : FOF .Formula ): K .Formula = {
37
37
formula match {
38
- case FOF .AtomicFormula (f, args) => K .AtomicFormula (K .ConstantAtomicLabel (cleanVarname(f), args.size), args map convertTermToKernel)
38
+ case FOF .AtomicFormula (f, args) =>
39
+ K .AtomicFormula (
40
+ if args.isEmpty then K .VariableFormulaLabel (cleanVarname(f))
41
+ else K .SchematicPredicateLabel (cleanVarname(f), args.size),
42
+ args map convertTermToKernel
43
+ )
39
44
case FOF .QuantifiedFormula (quantifier, variableList, body) =>
40
45
quantifier match {
41
46
case FOF .! => variableList.foldRight(convertToKernel(body))((s, f) => K .Forall (K .VariableLabel (s), f))
@@ -62,12 +67,18 @@ object KernelParser {
62
67
}
63
68
64
69
def convertToKernel (formula : CNF .Formula ): K .Formula = {
70
+ def atomicFormulaToKernel (formula : CNF .AtomicFormula ): K .Formula =
71
+ K .AtomicFormula (
72
+ if formula.args.isEmpty then K .VariableFormulaLabel (cleanVarname(formula.f))
73
+ else K .SchematicPredicateLabel (cleanVarname(formula.f), formula.args.size),
74
+ formula.args.map(convertTermToKernel).toList
75
+ )
65
76
66
77
K .ConnectorFormula (
67
78
K .Or ,
68
79
formula.map {
69
- case CNF .PositiveAtomic (formula) => K . AtomicFormula ( K . ConstantAtomicLabel (cleanVarname( formula.f), formula.args.size), formula.args.map(convertTermToKernel).toList )
70
- case CNF .NegativeAtomic (formula) => ! K . AtomicFormula ( K . ConstantAtomicLabel (cleanVarname( formula.f), formula.args.size), formula.args.map(convertTermToKernel).toList )
80
+ case CNF .PositiveAtomic (formula) => atomicFormulaToKernel( formula)
81
+ case CNF .NegativeAtomic (formula) => ! atomicFormulaToKernel( formula)
71
82
case CNF .Equality (left, right) => K .equality(convertTermToKernel(left), convertTermToKernel(right))
72
83
case CNF .Inequality (left, right) => ! K .equality(convertTermToKernel(left), convertTermToKernel(right))
73
84
}
@@ -79,7 +90,12 @@ object KernelParser {
79
90
* @return the same term in LISA
80
91
*/
81
92
def convertTermToKernel (term : CNF .Term ): K .Term = term match {
82
- case CNF .AtomicTerm (f, args) => K .Term (K .ConstantFunctionLabel (cleanVarname(f), args.size), args map convertTermToKernel)
93
+ case CNF .AtomicTerm (f, args) =>
94
+ K .Term (
95
+ if args.isEmpty then K .VariableLabel (cleanVarname(f))
96
+ else K .SchematicFunctionLabel (cleanVarname(f), args.size),
97
+ args map convertTermToKernel
98
+ )
83
99
case CNF .Variable (name) => K .VariableTerm (K .VariableLabel (name))
84
100
case CNF .DistinctObject (name) => ???
85
101
}
@@ -90,7 +106,11 @@ object KernelParser {
90
106
*/
91
107
def convertTermToKernel (term : FOF .Term ): K .Term = term match {
92
108
case FOF .AtomicTerm (f, args) =>
93
- K .Term (K .ConstantFunctionLabel (cleanVarname(f), args.size), args map convertTermToKernel)
109
+ K .Term (
110
+ if args.isEmpty then K .VariableLabel (cleanVarname(f))
111
+ else K .SchematicFunctionLabel (cleanVarname(f), args.size),
112
+ args map convertTermToKernel
113
+ )
94
114
case FOF .Variable (name) => K .VariableTerm (K .VariableLabel (name))
95
115
case FOF .DistinctObject (name) => ???
96
116
case FOF .NumberTerm (value) => ???
0 commit comments