master > master: codego - Formulae package
This commit is contained in:
@@ -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,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user