You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: nortmann/DlProofEnumerator.h
+11Lines changed: 11 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -93,6 +93,17 @@ struct DlProofEnumerator {
93
93
}
94
94
95
95
private:
96
+
// The idea, for an odd number n := 'knownLimit', is to implement a pushdown automaton for a context-free grammar
97
+
// with start symbol S, nonterminals {S, A} \cup {Nx | x > 0 odd, and x <= n}, and production rules
98
+
// S -> N1 | ... | Nn | A (S produces a superset of all representative proofs.)
99
+
// A -> <production generated by proofLengthCombinations(n)>, e.g. n = 5 => A -> D N1 N5 | D N5 N1 | D N3 N3 | D N3 N5 | D N5 N3 | D N1 A | D A N1 | D N5 N5 | D N3 A | D A N3 | D N5 A | D A N5 | D A A
100
+
// N1 -> {p | p is representative proof of length 1}
101
+
// ...
102
+
// Nn -> {p | p is representative proof of length n}.
103
+
// This grammar defines a superset of all condensed-detachment proofs on top of the already known proofs of lengths up to n, where A encodes those which have
104
+
// at least length n + 2. By starting the pushdown automaton with stack [A], only the new candidates are iterated, of which invalid candidates can be skipped
105
+
// after resulting in a parse error. When providing 'wordLengthLimit' := n + 2, this means to only iterate candidates of length n + 2 in an efficient way.
106
+
// [NOTE: Sequential non-generic variants (with explicit grammars given as comments) are available at https://github.com/deontic-logic/proof-tool/blob/29dd7dfab9f373d1dd387fb99c16e82c577ec21f/nortmann/DlProofEnumerator.h?ts=4#L167-L174 and below.]
0 commit comments