@@ -18,6 +18,12 @@ const deepEqual = (x, y) => {
1818// Check if argument (arr) is array of objects type (cl)
1919const arrayOf = ( arr , cl ) => arr instanceof Array && arr . every ( a => a instanceof cl )
2020
21+ class Status { }
22+ class Complete extends Status { }
23+ class CompleteWithZ3 extends Status { }
24+ class Incomplete extends Status { }
25+ class Unprovable extends Status { }
26+
2127class Term {
2228 constructor ( ) {
2329 if ( new . target === Term ) {
@@ -548,6 +554,14 @@ ${rule}
548554 throw new TypeError ( `Don't know how to typeset a judgment with ${ this . premises . length } premises` )
549555 }
550556 }
557+
558+ status ( ) {
559+ let prems = this . premises . map ( p => p . status ( ) )
560+ if ( prems . some ( s => s instanceof Unprovable ) ) { return new Unprovable ( ) }
561+ if ( prems . some ( s => s instanceof Incomplete ) ) { return new Incomplete ( ) }
562+ if ( prems . some ( s => s instanceof CompleteWithZ3 ) ) { return new CompleteWithZ3 ( ) }
563+ return new Complete ( )
564+ }
551565}
552566
553567// Beginning of LK rules
@@ -1189,13 +1203,24 @@ class Z3Rule extends LKProofTree {
11891203 canvas . remove ( obj )
11901204 } )
11911205 proofs . map ( p => p . proof . draw ( ) )
1206+ refreshList ( )
11921207
11931208 } )
11941209 }
11951210
11961211 reconstructor ( ) {
11971212 return `new Z3Rule(${ this . conclusion . reconstructor ( ) } )`
11981213 }
1214+
1215+ status ( ) {
1216+ if ( this . z3Response === true ) {
1217+ return new CompleteWithZ3 ( )
1218+ } else if ( this . z3Response === false ) {
1219+ return new Unprovable ( )
1220+ } else {
1221+ return new Incomplete ( )
1222+ }
1223+ }
11991224}
12001225
12011226class LKIncomplete extends LKProofTree {
@@ -1224,6 +1249,14 @@ class LKIncomplete extends LKProofTree {
12241249 return `new LKIncomplete(${ this . conclusion . reconstructor ( ) } )`
12251250 }
12261251 }
1252+
1253+ status ( ) {
1254+ if ( this . completer ) {
1255+ return this . completer . status ( )
1256+ } else {
1257+ return new Incomplete ( )
1258+ }
1259+ }
12271260}
12281261
12291262// End of LK rules
@@ -1577,6 +1610,14 @@ ${rule}
15771610 throw new TypeError ( `Don't know how to typeset a judgment with ${ this . premises . length } premises` )
15781611 }
15791612 }
1613+
1614+ status ( ) {
1615+ let prems = this . premises . map ( p => p . status ( ) )
1616+ if ( prems . some ( s => s instanceof Unprovable ) ) { return new Unprovable ( ) }
1617+ if ( prems . some ( s => s instanceof Incomplete ) ) { return new Incomplete ( ) }
1618+ if ( prems . some ( s => s instanceof CompleteWithZ3 ) ) { return new CompleteWithZ3 ( ) }
1619+ return new Complete ( )
1620+ }
15801621}
15811622
15821623/*
@@ -1805,6 +1846,14 @@ class HoareIncomplete extends HoareProofTree {
18051846 return `new HoareIncomplete(${ this . conclusion . reconstructor ( ) } )`
18061847 }
18071848 }
1849+
1850+ status ( ) {
1851+ if ( this . completer ) {
1852+ return this . completer . status ( )
1853+ } else {
1854+ return new Incomplete ( )
1855+ }
1856+ }
18081857}
18091858
18101859// If a tree is set as toDelete, delete the tree and its premises
0 commit comments