Skip to content

Commit 15bf010

Browse files
Fix TPTP parsing of atomic formula
1 parent dd21c0f commit 15bf010

File tree

1 file changed

+25
-5
lines changed

1 file changed

+25
-5
lines changed

lisa-utils/src/main/scala/lisa/utils/tptp/KernelParser.scala

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,12 @@ object KernelParser {
3535
*/
3636
def convertToKernel(formula: FOF.Formula): K.Formula = {
3737
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+
)
3944
case FOF.QuantifiedFormula(quantifier, variableList, body) =>
4045
quantifier match {
4146
case FOF.! => variableList.foldRight(convertToKernel(body))((s, f) => K.Forall(K.VariableLabel(s), f))
@@ -62,12 +67,18 @@ object KernelParser {
6267
}
6368

6469
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+
)
6576

6677
K.ConnectorFormula(
6778
K.Or,
6879
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)
7182
case CNF.Equality(left, right) => K.equality(convertTermToKernel(left), convertTermToKernel(right))
7283
case CNF.Inequality(left, right) => !K.equality(convertTermToKernel(left), convertTermToKernel(right))
7384
}
@@ -79,7 +90,12 @@ object KernelParser {
7990
* @return the same term in LISA
8091
*/
8192
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+
)
8399
case CNF.Variable(name) => K.VariableTerm(K.VariableLabel(name))
84100
case CNF.DistinctObject(name) => ???
85101
}
@@ -90,7 +106,11 @@ object KernelParser {
90106
*/
91107
def convertTermToKernel(term: FOF.Term): K.Term = term match {
92108
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+
)
94114
case FOF.Variable(name) => K.VariableTerm(K.VariableLabel(name))
95115
case FOF.DistinctObject(name) => ???
96116
case FOF.NumberTerm(value) => ???

0 commit comments

Comments
 (0)