master > master: codego - Formulae package

This commit is contained in:
RD
2021-05-18 11:31:29 +02:00
parent 4be6896a0f
commit 2ab9b63a08
7 changed files with 549 additions and 100 deletions

View File

@@ -47,9 +47,16 @@ func Generic(name string) Formula {
}
func Negation(fml Formula) Formula {
var name string
if fml.IsAtom() {
name = fml.GetName()
}
var expr = fml.expr
expr = "!" + expr
return Formula{
kind: "not",
expr: "!" + " " + fml.expr,
name: name, // preserves name of negated atoms
expr: expr,
valence: 1,
subformulae: [](*Formula){&fml},
}
@@ -65,20 +72,26 @@ func Conjunction2(fml1 Formula, fml2 Formula) Formula {
}
func Conjunction(fmls []Formula) Formula {
switch len(fmls) {
case 0:
return Tautology
case 1:
return fmls[0]
}
var expr string = ""
var children = make([](*Formula), len(fmls))
var subFmls = make([](*Formula), len(fmls))
for i, fml := range fmls {
(func(i int, subFml Formula) { subFmls[i] = &subFml })(i, fml)
if i > 0 {
expr += " && "
}
expr += fml.expr
children[i] = &fml
}
return Formula{
kind: "and",
expr: "(" + expr + ")",
valence: len(children),
subformulae: children,
valence: len(subFmls),
subformulae: subFmls,
}
}
@@ -92,20 +105,26 @@ func Disjunction2(fml1 Formula, fml2 Formula) Formula {
}
func Disjunction(fmls []Formula) Formula {
switch len(fmls) {
case 0:
return Contradiction
case 1:
return fmls[0]
}
var expr string = ""
var children = make([](*Formula), len(fmls))
var subFmls = make([](*Formula), len(fmls))
for i, fml := range fmls {
(func(i int, subFml Formula) { subFmls[i] = &subFml })(i, fml)
if i > 0 {
expr += " || "
}
expr += fml.expr
children[i] = &fml
}
return Formula{
kind: "or",
expr: "(" + expr + ")",
valence: len(children),
subformulae: children,
valence: len(subFmls),
subformulae: subFmls,
}
}