jonaprieto / athena Goto Github PK
View Code? Open in Web Editor NEWTranslates Metis ATP proofs to the Agda code
License: MIT License
Translates Metis ATP proofs to the Agda code
License: MIT License
Instead of propositional logic with equality.
Metis 2.4 was released. Is this version of Metis supported?
The bug is with this problem:
$ cat /test/prop-pack/problems/implication/impl-3.tstp
fof(a1, axiom, (p => q)).
fof(a2, axiom, (q => r)).
fof(goal, conjecture, (p => r)).
fof(subgoal_0, plain, (p => r), inference(strip, [], [goal])).
fof(negate_0_0, plain, (~ (p => r)), inference(negate, [], [subgoal_0])).
fof(normalize_0_0, plain, (~ q | r), inference(canonicalize, [], [a2])).
fof(normalize_0_1, plain, (~ p | q), inference(canonicalize, [], [a1])).
fof(normalize_0_2, plain, (~ r & p),
inference(canonicalize, [], [negate_0_0])).
fof(normalize_0_3, plain, (p), inference(conjunct, [], [normalize_0_2])).
fof(normalize_0_4, plain, (~ r), inference(conjunct, [], [normalize_0_2])).
cnf(refute_0_0, plain, (~ q | r),
inference(canonicalize, [], [normalize_0_0])).
cnf(refute_0_1, plain, (~ p | q),
inference(canonicalize, [], [normalize_0_1])).
cnf(refute_0_2, plain, (p), inference(canonicalize, [], [normalize_0_3])).
cnf(refute_0_3, plain, (q),
inference(resolve, [$cnf(p)], [refute_0_2, refute_0_1])).
cnf(refute_0_4, plain, (r),
inference(resolve, [$cnf(q)], [refute_0_3, refute_0_0])).
cnf(refute_0_5, plain, (~ r),
inference(canonicalize, [], [normalize_0_4])).
cnf(refute_0_6, plain, ($false),
inference(resolve, [$cnf(r)], [refute_0_4, refute_0_5])).
As you can see, there is no more than one subgoal, in spite of that, its agda code have 4 proofs!! using 4 subgoals that obviously they don't exist. So, big mistake!
$ cat /test/prop-pack/problems/implication/impl-3.agda
------------------------------------------------------------------------------
-- Athena version 0.1-e9f0f55.
-- TSTP file: impl-3.tstp.
------------------------------------------------------------------------------
module impl-3 where
------------------------------------------------------------------------------
open import ATP.Metis 3 public
open import Data.Prop 3 public
------------------------------------------------------------------------------
-- Variables.
p : Prop
p = Var (# 0)
q : Prop
q = Var (# 1)
r : Prop
r = Var (# 2)
-- Axioms.
a₁ : Prop
a₁ = (p ⇒ q)
a₂ : Prop
a₂ = (q ⇒ r)
-- Premises.
Γ : Ctxt
Γ = ∅ , a₁ , a₂
-- Conjecture.
goal : Prop
goal = (p ⇒ r)
-- Subgoal.
subgoal₀ : Prop
subgoal₀ = (p ⇒ r)
------------------------------------------------------------------------------
-- Proof.
------------------------------------------------------------------------------
proof₀ : Γ ⊢ subgoal₀
proof₀ =
(RAA
(atp-canonicalize
(atp-canonicalize
(weaken (atp-negate subgoal₀)
(assume {Γ = [ a₁ ]} a₂)))))
proof₁ : Γ ⊢ subgoal₁
proof₁ =
(RAA
(atp-canonicalize
(atp-canonicalize
(weaken-Δ₁
(∅ , a₂ , atp-negate subgoal₁)
(assume {Γ = ∅} a₁)))))
proof₂ : Γ ⊢ subgoal₂
proof₂ =
(RAA
(atp-canonicalize
(atp-conjunct (p)
(atp-canonicalize
(atp-strip
(assume {Γ = Γ}
(atp-negate subgoal₂)))))))
proof₃ : Γ ⊢ subgoal₃
proof₃ =
(RAA
(atp-resolve₄ (p)
(atp-canonicalize
(atp-conjunct (p)
(atp-canonicalize
(atp-strip
(assume {Γ = Γ}
(atp-negate subgoal₃))))))
(atp-canonicalize
(atp-canonicalize
(weaken-Δ₁
(∅ , a₂ , atp-negate subgoal₃)
(assume {Γ = ∅} a₁))))))
proof₄ : Γ ⊢ subgoal₄
proof₄ =
(RAA
(atp-resolve₄ (q)
(atp-resolve₄ (p)
(atp-canonicalize
(atp-conjunct (p)
(atp-canonicalize
(atp-strip
(assume {Γ = Γ}
(atp-negate subgoal₄))))))
(atp-canonicalize
(atp-canonicalize
(weaken-Δ₁
(∅ , a₂ , atp-negate subgoal₄)
(assume {Γ = ∅} a₁)))))
(atp-canonicalize
(atp-canonicalize
(weaken (atp-negate subgoal₄)
(assume {Γ = [ a₁ ]} a₂))))))
proof₅ : Γ ⊢ subgoal₅
proof₅ =
(RAA
(atp-canonicalize
(atp-conjunct ((¬ r))
(atp-canonicalize
(atp-strip
(assume {Γ = Γ}
(atp-negate subgoal₅)))))))
proof₆ : Γ ⊢ subgoal₆
proof₆ =
(RAA
(id -- resolve 4. (r)
(atp-canonicalize
(atp-conjunct ((¬ r))
(atp-canonicalize
(atp-strip
(assume {Γ = Γ}
(atp-negate subgoal₆))))))
(atp-resolve₄ (q)
(atp-resolve₄ (p)
(atp-canonicalize
(atp-conjunct (p)
(atp-canonicalize
(atp-strip
(assume {Γ = Γ}
(atp-negate subgoal₆))))))
(atp-canonicalize
(atp-canonicalize
(weaken-Δ₁
(∅ , a₂ , atp-negate subgoal₆)
(assume {Γ = ∅} a₁)))))
(atp-canonicalize
(atp-canonicalize
(weaken (atp-negate subgoal₆)
(assume {Γ = [ a₁ ]} a₂)))))))
proof : Γ ⊢ goal
proof =
⇒-elim
atp-splitGoal
proof₀
The paper says Metis 2.3 (release 20170822) but the README says Metis 2.3 (release 20170810). Please fix the paper or the README.
I'm using Agda 2.5.4. Following the instructions here I run
make install-libraries
but the version installed of the standard library (version 0.14) isn't compatible with Agda 2.5.4.
Andrés, @asr
I forgot when you said something about using the standard library of Agda with Athena, it was to fix travis.
...
/basic-3.agda
/home/travis/agda-stdlib/src/Data/Empty.agda:13,5-5
/home/travis/agda-stdlib/src/Data/Empty.agda:13,5: Parse error
FOREIGN<ERROR>
GHC data AgdaEmpty #-}
...
Was about installing Agda using cabal?
In some parts of Athena, Agda-Metis or Agda-Prop you say they support Agda 2.5.3, 2.5.3+ or 2.5.4. I suggest only support 2.5.4 and fix the information.
I'm getting the following error:
$ make check
...
===================================================================
================== Type-checking Agda files =======================
===================================================================
[!] AGDA_DIR=<PATH>/athena/lib/.agda
-------------------------------------------------------------------
test/prop-pack/problems/basic/basic-04.agda
Can't exec "49m": No such file or directory at $HOME/bin/timeout line 100.
$ agda test/prop-pack/problems/prop-metis/prop-20.agda
...
¬ (¬ (p ⇔ q) ⇔ r) ∧ (p ∧ q) != ¬ (¬ (p ⇔ q) ⇔ r) of type
PropFormula
when checking that the expression
∧-intro (∧-intro (∧-intro proof₀ proof₁) proof₂)
(∧-intro proof₃ (∧-intro proof₄ proof₅))
has type Γ ⊢ split xorassoc
There are some shift/reduce problems. I'm still getting this:
$ happy src/Athena/TSTP/Parser.y --info=output.txt
shift/reduce conflicts: 2
$ cat output.txt | more
-----------------------------------------------------------------------------
Info file generated by Happy Version 1.19.5 from src/Athena/TSTP/Parser.y
-----------------------------------------------------------------------------
state 245 contains 1 shift/reduce conflicts.
state 288 contains 1 shift/reduce conflicts.
...
CC'ing @asr
$ make clean
Makefile:30: *** extraneous 'endif'. Stop.
Missing the explanation of the formulation of uh functio, Eq (4)
$ athena --version
Athena version 0.1-7017694
$ agda --library=test test/prop-pack/problems/implication/impl-09.agda
<PATH>/test/prop-pack/problems/implication/impl-09.agda:53,6-58,39
Var (# 1) != ⊥ of type PropFormula
when checking that the expression
simplify-thm ⊥
(canonicalize-thm q (weaken (¬ subgoal₀) (assume {Γ = ∅} a₁)))
(canonicalize-thm (¬ r ∧ (¬ q ∨ r)) (assume {Γ = Γ} (¬ subgoal₀)))
has type
_Γ_16 , .Data.PropFormula.Theorems.Classical.¬ _φ_17 ⊢
.Data.PropFormula.Theorems.Classical.⊥
We want to avoid some steps in the proof that come from unnecessary application of inference rules when they do not change the formula at all. To begin with something, we have these cases:
$ cat test/prop-pack/problems/implication/impl-7.tstp
...
fof(normalize_0_2, plain, ($false),
inference(simplify, [], [normalize_0_0, normalize_0_1])).
cnf(refute_0_0, plain, ($false),
inference(canonicalize, [], [normalize_0_2])).
and
$ cat test/prop-pack/problems/implication/impl-18.tstp
fof(normalize_1_0, plain, ($false),
inference(canonicalize, [], [negate_1_0])).
cnf(refute_1_0, plain, ($false),
inference(canonicalize, [], [normalize_1_0])).
Use \enspace
I'm getting the following error:
$ make check
...
[!] To complete the installation, please set the AGDA_DIR variable:
$ export AGDA_DIR=<SOME_PATH>/athena/lib/.agda
...
===================================================================
================== Type-checking Agda files =======================
===================================================================
[!] AGDA_DIR=<SOME_PATH>/athena/lib/.agda
-------------------------------------------------------------------
test/prop-pack/problems/basic/basic-3.agda
<SOME_PATH>/athena/test/prop-pack/problems/basic/basic-3.agda:11,13-22
Failed to find source of module Data.Prop in any of the following
locations:
<SOME_PATH>/athena/Data/Prop.agda
<SOME_PATH>/athena/Data/Prop.lagda
<SOME_PATH>/athena/lib/agda-stdlib/src/Data/Prop.agda
<SOME_PATH>/athena/lib/agda-stdlib/src/Data/Prop.lagda
<SOME_PATH>/athena/test/prop-pack/Data/Prop.agda
<SOME_PATH>/athena/test/prop-pack/Data/Prop.lagda
<SOME_PATH>/athena/test/prop-pack/problems/Data/Prop.agda
<SOME_PATH>/athena/test/prop-pack/problems/Data/Prop.lagda
...
when scope checking the declaration
import Data.Prop as .#Data.Prop-13550926825803052228
So, I export the AGDA_DIR
variable
$ export AGDA_DIR=<SOME_PATH>/athena/lib/.agda
but I get the same error running make check
again.
The Reconstructing-Propositional-Proofs-in-Type-Theory.pdf
file shouldn't be in the repo. Please remove it.
$ pwd
test/prop-pack/problems/disjunction
$ cat disj-4.tptp
fof(a1, axiom, (p | q) | (r | p1)).
fof(goal, conjecture, (p | p1) | (r | q)).
$ metis --show proof disj-4.tptp
fof(a1, axiom, ((p | q) | r | p1)).
fof(goal, conjecture, ((p | p1) | r | q)).
....
Base on the above example, Metis is right associative. Then Athena is printing wrongly, it is printing left associative.
$ athena disj-4.tstp
$ cat disj-4.tptp
...
a₁ : Prop
a₁ = (((p ∨ q) ∨ r) ∨ p₁)
...
goal : Prop
goal = (((p ∨ p₁) ∨ r) ∨ q)
CC'ing @asr
Athena generates an Agda file with an unsolved meta (note the question mark in the last line):
$ cat bug.fof
fof(t, conjecture, a => a).
$ athena bug.fof
$ cat bug.agda
------------------------------------------------------------------------------
-- Athena version 0.1.
-- TSTP file: bug.fof.
------------------------------------------------------------------------------
module bug where
------------------------------------------------------------------------------
open import ATP.Metis 1 public
open import Data.PropFormula 1 public
------------------------------------------------------------------------------
-- Variable.
a : PropFormula
a = Var (# 0)
-- Premise.
Γ : Ctxt
Γ = ∅
-- Conjecture.
t : PropFormula
t = (a ⇒ a)
------------------------------------------------------------------------------
-- Proof.
------------------------------------------------------------------------------
proof : Γ ⊢ t
proof =
⇒-elim
atp-split
?
It is helpful to know what version (possibly the commit) of the agda-prop and the agda-metis
in the Agda File, same as we did with the Athena version.
@asr some idea, what could happen? Do you have the same result?
$ make check
...
===================================================================
================== Type-checking Agda files =======================
===================================================================
[!] AGDA_DIR=/Users/jonaprieto/athena/lib/.agda
-------------------------------------------------------------------
test/prop-pack/problems/basic/basic-01.agda
/Users/jonaprieto/athena/test/prop-pack/problems/basic/basic-01.agda:6,8-16
The name of the top level module does not match the file name. The
module basic-01 should be defined in one of the following files:
/Users/jonaprieto/src/basic-01.agda
/Users/jonaprieto/src/basic-01.lagda
/Users/jonaprieto/.cabal/share/x86_64-osx-ghc-8.0.2/Agda-2.5.3/lib/prim/basic-01.agda
/Users/jonaprieto/.cabal/share/x86_64-osx-ghc-8.0.2/Agda-2.5.3/lib/prim/basic-01.lagda
Command exited with non-zero status 1
user = 0.06, system = 0.07, elapsed = 0:00.20, mem=0, cpu=69%
Taking into consideration for along time, atp-negate
just negate the formula.
Better
proof₁ : Γ ⊢ subgoal₁
proof₁ =
(RAA
(atp-canonicalize
(assume {Γ = Γ}
¬ (strip goal to subgoal₁))))
instead of
proof₁ : Γ ⊢ subgoal₁
proof₁ =
(RAA
(atp-canonicalize
(assume {Γ = Γ}
(atp-negate
(strip goal to subgoal₁)))))
I'm getting various errors of this type:
$ make reconstruct
...
===================================================================
============== Generating Agda files of TSTP proofs ===============
===================================================================
...
test/prop-pack/problems/conjunction/conj-5.tstp
athena: lexical error at line 2, column 18
CallStack (from HasCallStack):
error, called at templates/wrappers.hs:451:61 in main:Athena.TSTP.Lexer
The problem is:
$ cat test/prop-pack/problems/prop-metis/prop-20.tstp
---------------------------------------------------------------------------
SZS status Theorem for test/prop-pack/problems/prop-metis/prop-20.tptp
SZS output start CNFRefutation for test/prop-pack/problems/prop-metis/prop-20.tptp
fof(xor_assoc, conjecture,
(~ (~ (p <=> q) <=> r) <=> ~ (p <=> ~ (q <=> r)))).
fof(subgoal_0, plain, ((~ (~ (p <=> q) <=> r) & p & q) => r),
inference(strip, [], [xor_assoc])).
fof(subgoal_1, plain, ((~ (~ (p <=> q) <=> r) & p & r) => q),
inference(strip, [], [xor_assoc])).
fof(subgoal_2, plain, ((~ (~ (p <=> q) <=> r) & ~ ~ (q <=> r)) => p),
inference(strip, [], [xor_assoc])).
fof(subgoal_3, plain, ((~ (p <=> ~ (q <=> r)) & ~ (p <=> q)) => ~ r),
inference(strip, [], [xor_assoc])).
fof(subgoal_4, plain, ((~ (p <=> ~ (q <=> r)) & ~ r & p) => ~ q),
inference(strip, [], [xor_assoc])).
fof(subgoal_5, plain, ((~ (p <=> ~ (q <=> r)) & ~ r & ~ q) => p),
inference(strip, [], [xor_assoc])).
and we reconstruct in Agda:
...
xorassoc : Prop
xorassoc = ((¬ ((¬ (p ⇔ q)) ⇔ r)) ⇔ (¬ (p ⇔ (¬ (q ⇔ r)))))
-- Subgoals.
subgoal₀ : Prop
subgoal₀ = (((¬ ((¬ (p ⇔ q)) ⇔ r)) ∧ (p ∧ q)) ⇒ r)
subgoal₁ : Prop
subgoal₁ = (((¬ ((¬ (p ⇔ q)) ⇔ r)) ∧ (p ∧ r)) ⇒ q)
subgoal₂ : Prop
subgoal₂ = (((¬ ((¬ (p ⇔ q)) ⇔ r)) ∧ (¬ (¬ (q ⇔ r)))) ⇒ p)
subgoal₃ : Prop
subgoal₃ = (((¬ (p ⇔ (¬ (q ⇔ r)))) ∧ (¬ (p ⇔ q))) ⇒ (¬ r))
subgoal₄ : Prop
subgoal₄ = (((¬ (p ⇔ (¬ (q ⇔ r)))) ∧ ((¬ r) ∧ p)) ⇒ (¬ q))
subgoal₅ : Prop
subgoal₅ = (((¬ (p ⇔ (¬ (q ⇔ r)))) ∧ ((¬ r) ∧ (¬ q))) ⇒ p)
...
proof : Γ ⊢ xorassoc
proof =
⇒-elim
atp-split
(∧-intro
(∧-intro
)
(∧-intro
(∧-intro
)))
@jonaprieto, can you reproduce the following error
$ make check
...
===================================================================
============== Generating Agda files of TSTP proofs ===============
===================================================================
...
test/prop-pack/problems/conjunction/conj-03.tstp
athena: Couldn't find a conjecture, or it was not unique
CallStack (from HasCallStack):
error, called at src/Athena/Translation/Core.hs:58:10 in main:Athena.Translation.Core
test/prop-pack/problems/conjunction/conj-01.tstp
?
Following the instructions in the README I got the following error:
$ agda problem
...
tmp/athena/problem.agda:61,11-17
((φ : PropFormula) → _Γ_22 , φ ⊢ φ) !=< (_Γ_20 ⊢ _φ_21) of type Set
when checking that the expression assume has type _Γ_20 ⊢ _φ_21
I agree the example in the README should be an easy one, but the current example is too trivial.
For instance, on the first call...
$ make install-libraries
===================================================================
===== Downloading Agda Standard Library v2.5.2.20170816 ========
===================================================================
warning: Could not find remote branch v2.5.2.20170816 to clone.
fatal: Remote branch v2.5.2.20170816 not found in upstream origin
Note that v2.5.2.20170816
is not a branch but a tag.
You can use version 0.14 available in the Agda wiki (due to a problem with Agda mailing list server this version hasn't been announced yet).
Which is your output of running the following command:
$ time agda test/prop-pack/problems/prop-metis/prop-21.agda
In my case, after 4 hours of running
$ time agda -v20 test/prop-pack/problems/prop-metis/prop-21.agda
the process continued running (and htop
didn't showed any significant change).
Consider the following example from the test folder.
$ cat test/prop-pack/problems/prop-metis/prop-13.tptp
...
fof('PROP_13', conjecture, ((p | (q & r)) <=> ((p | q) & (p | r)))).
fof(subgoal_0, plain, (((p | (q & r)) & ~ p) => q),
inference(strip, [], ['PROP_13'])).
...
The problem comes with 'PROP_13'
.
$ athena prop-13.tstp
athena: Maybe.fromJust: Nothing
CC'ing @asr
When run LaTeX on the paper I'm getting various warnings of the form:
Package hyperref Warning: Token not allowed in a PDF string (PDFDocEncoding):
(hyperref) removing `math shift' on input line 163.
Please, fix these warnings.
I'm getting the following error (with GHC 8.2.1):
$ cabal install
...
dist/build/athena/athena-tmp/Athena/TSTP/Parser.hs:932:16: error:
Ambiguous occurrence ‘map’
It could refer to either ‘L.map’,
imported from ‘Data.List’ at dist/build/athena/athena-tmp/Athena/TSTP/Parser.hs:25:1-21
(and originally defined in ‘GHC.Base’)
or ‘S.map’,
imported from ‘Data.Set’ at dist/build/athena/athena-tmp/Athena/TSTP/Parser.hs:27:1-20
(and originally defined in ‘Data.Set.Internal’
The tree of the proof has some branches that appear in different locations in the tree.
We don't take into account about this fact and it could improve the timing of the type-checking.
One example:
$ athena --script test/prop-pack/problems/basic/basic-04.tstp
$ agda --library=test test/prop-pack/problems/basic/basic-04.agda
$ cat test/prop-pack/problems/basic/basic-04.agda
normalize₀₁ : Γ , ¬ subgoal₀ ⊢ p
normalize₀₁ = canonicalize-thm p a₁
Where it should be:
...
normalize₀₁ : Γ , ¬ subgoal₀ ⊢ p
normalize₀₁ = canonicalize-thm p (weaken (¬ subgoal₀) (assume {Γ = ∅} a₁))
...
I'm getting the following error:
/tmp/athena/lib/agda-metis/src/ATP/Metis/Rules/Simplify.agda:89,37-44
Not in scope:
¬⊤-to-⊥
at /tmp/athena/lib/agda-metis/src/ATP/Metis/Rules/Simplify.agda:89,37-44
when scope checking ¬⊤-to-⊥
it seems athena
is using an old-dated version of agda-metis
.
Based on the Juan Carlos comments,
we should include why our reconstruction approach works,
and why the type-checking should work fine.
In the recent version of Athena, to introduce the negation of a subgoal, we first negate the subgoal and later apply the strip theorem, atp-strip. Unfortunately, this procedure is wrong. We actually should follow the same way as Metis does, that is, strip the formula and later, negate the result.
This is how should look like:
...
proof₀ : Γ ⊢ subgoal₀
proof₀ =
(RAA
(atp-canonicalize
(atp-canonicalize
(assume {Γ = Γ}
(atp-negate (strip subgoal₀))))))
...
but this is how we are doing nowadays:
...
proof₀ : Γ ⊢ subgoal₀
proof₀ =
(RAA
(atp-canonicalize
(atp-canonicalize
(atp-strip
(assume {Γ = Γ}
(atp-negate subgoal₀))))))
...
Using online-atps to get the TSTP file, I am getting this
$ cd athena/test/prop-prack/problems/basic
$ online-atps --atp=metis basic-1.tptp > basic-1.tstp
$ athena basic-1.tstp
athena basic-2.tstp
athena: Parse error, pos: [CommentToken "% SZS start RequiredInformation",CommentToken "% Congratulations - you have become a registered power user of SystemOnTPTP, at IP address 200.12.190.157.",CommentToken "% Please consider donating to the TPTP project - see www.tptp.org for details.",CommentToken "% When you donate this message will disappear.",CommentToken "% If you do not donate a random delay might be added to your processing time.",CommentToken "% SZS end RequiredInformation",CommentToken "% START OF SYSTEM OUTPUT",LowerWord "fof",LP,LowerWord "goal",Comma,LowerWord "conjecture",Comma,LP,Oper "~",DollarWord "$false",RP,RP,Dot,LowerWord "fof",LP,LowerWord "subgoal_0",Comma,LowerWord "plain",Comma]
CallStack (from HasCallStack):
error, called at dist/build/athena/athena-tmp/Athena/TSTP/Parser.hs:3003:27 in main:Athena.TSTP.Parser
The problem are the comments.
Using this travis fails (something related with cabal-install)
include:
- env: TEST=MAIN GHC_VER=8.2.1 BUILD=CABAL CABAL_VER=1.24
addons:
apt:
packages:
- alex-3.1.7
- cabal-install-1.24
- ghc-8.2.1
- happy-1.19.5
- texlive-binaries
sources:
- hvr-ghc
The above version is the latest released version of Metis. Is this version supported? If so, please update the paper and the README.
In the README you say you tested Athena with GHC 8.4.3 (good!) and Cabal 1.24.0. Since GHC 8.4.3 requires cabal-install ≥ 2.2.0.0, please fix the Cabal version.
$ make check-asr
...
test/prop-pack/problems/implication/impl-10.agda
/<some-path>/athena-master/test/prop-pack/problems/implication/impl-10.agda:48,6-66,48
¬ r != ⊥ of type PropFormula
when checking that the expression
simplify-thm ⊥
(conjunct-thm (¬ r)
(canonicalize-thm (¬ r ∧ (p ∧ (¬ p ∨ q ∧ (¬ p ∨ (¬ q ∨ r)))))
(assume {Γ = Γ} (¬ subgoal₀))))
(simplify-thm ⊥
(simplify-thm q
(conjunct-thm (¬ p ∨ q)
(canonicalize-thm (¬ r ∧ (p ∧ (¬ p ∨ q ∧ (¬ p ∨ (¬ q ∨ r)))))
(assume {Γ = Γ} (¬ subgoal₀))))
(conjunct-thm p
(canonicalize-thm (¬ r ∧ (p ∧ (¬ p ∨ q ∧ (¬ p ∨ (¬ q ∨ r)))))
(assume {Γ = Γ} (¬ subgoal₀)))))
(simplify-thm ⊥
(conjunct-thm (¬ p ∨ (¬ q ∨ r))
(canonicalize-thm (¬ r ∧ (p ∧ (¬ p ∨ q ∧ (¬ p ∨ (¬ q ∨ r)))))
(assume {Γ = Γ} (¬ subgoal₀))))
(conjunct-thm p
(canonicalize-thm (¬ r ∧ (p ∧ (¬ p ∨ q ∧ (¬ p ∨ (¬ q ∨ r)))))
(assume {Γ = Γ} (¬ subgoal₀))))))
has type
_Γ_13 , .Data.PropFormula.Theorems.Classical.¬ _φ_14 ⊢
.Data.PropFormula.Theorems.Classical.⊥
Makefile:517: recipe for target 'check-asr' failed
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.