added test file
This commit is contained in:
parent
4d983b08ad
commit
09a7875f03
1 changed files with 128 additions and 0 deletions
128
src/Test.idr
Normal file
128
src/Test.idr
Normal file
|
|
@ -0,0 +1,128 @@
|
||||||
|
module Test
|
||||||
|
|
||||||
|
import Signature
|
||||||
|
import Term
|
||||||
|
import Data.Vect
|
||||||
|
import Formula
|
||||||
|
import Context
|
||||||
|
import Proof
|
||||||
|
|
||||||
|
namespace Sig
|
||||||
|
public export
|
||||||
|
zero : FuncSym
|
||||||
|
zero = MkFuncSym "0" 0
|
||||||
|
|
||||||
|
public export
|
||||||
|
suc : FuncSym
|
||||||
|
suc = MkFuncSym "S" 1
|
||||||
|
|
||||||
|
public export
|
||||||
|
plus : FuncSym
|
||||||
|
plus = MkFuncSym "+" 2
|
||||||
|
|
||||||
|
public export
|
||||||
|
times : FuncSym
|
||||||
|
times = MkFuncSym "*" 2
|
||||||
|
|
||||||
|
public export
|
||||||
|
leq : RelSym
|
||||||
|
leq = MkRelSym "<=" 2
|
||||||
|
|
||||||
|
public export
|
||||||
|
NT : Signature 4 1
|
||||||
|
NT = MkSignature
|
||||||
|
[ zero, suc, plus, times ]
|
||||||
|
[ leq ]
|
||||||
|
|
||||||
|
s0ps0 : Term NT 0
|
||||||
|
s0ps0 = Func 2
|
||||||
|
[ Func 1 [ Func 0 [] ]
|
||||||
|
, Func 1 [ Func 0 [] ]
|
||||||
|
]
|
||||||
|
|
||||||
|
O : Term NT d
|
||||||
|
O = Func 0 []
|
||||||
|
|
||||||
|
S : Term NT d -> Term NT d
|
||||||
|
S t = Func 1 [ t ]
|
||||||
|
|
||||||
|
export infixl 8 +
|
||||||
|
(+) : Term NT d -> Term NT d -> Term NT d
|
||||||
|
s + t = Func 2 [ s, t ]
|
||||||
|
|
||||||
|
export infixl 9 *
|
||||||
|
(*) : Term NT d -> Term NT d -> Term NT d
|
||||||
|
s * t = Func 3 [ s, t ]
|
||||||
|
|
||||||
|
Y : Term NT (S d)
|
||||||
|
Y = Var 0
|
||||||
|
|
||||||
|
X : Term NT (S (S d))
|
||||||
|
X = Var 1
|
||||||
|
|
||||||
|
private infix 3 .=
|
||||||
|
(.=) : Term sig n -> Term sig n -> Formula sig n
|
||||||
|
(.=) = Equal
|
||||||
|
|
||||||
|
(<=) : Term NT n -> Term NT n -> Formula NT n
|
||||||
|
t1 <= t2 = Rel 0 [ t1, t2 ]
|
||||||
|
|
||||||
|
addComm : Formula NT 0
|
||||||
|
addComm = Forall $ Forall $ Y + X .= X + Y
|
||||||
|
|
||||||
|
private infixr 2 ==>
|
||||||
|
(==>) : Formula sig n -> Formula sig n -> Formula sig n
|
||||||
|
(==>) = Imp
|
||||||
|
|
||||||
|
Not : Formula sig n -> Formula sig n
|
||||||
|
Not phi = phi ==> Bot
|
||||||
|
|
||||||
|
(&&) : Formula sig n -> Formula sig n -> Formula sig n
|
||||||
|
phi && psi = Not (phi ==> Not psi)
|
||||||
|
|
||||||
|
(||) : Formula sig n -> Formula sig n -> Formula sig n
|
||||||
|
phi || psi = Not (Not phi && Not psi)
|
||||||
|
|
||||||
|
zeroNotSuc : Formula NT d
|
||||||
|
zeroNotSuc = Forall $ Not $ O .= S (Var 0)
|
||||||
|
|
||||||
|
sucInj : Formula NT d
|
||||||
|
sucInj = Forall $ Forall $ S (Var 0) .= S (Var 1) ==> Var 0 .= Var 1
|
||||||
|
|
||||||
|
addZeroR : Formula NT d
|
||||||
|
addZeroR = Forall $ Var 0 + O .= Var 0
|
||||||
|
|
||||||
|
addSR : Formula NT d
|
||||||
|
addSR = Forall $ Forall $ X + S Y .= S (X + Y)
|
||||||
|
|
||||||
|
mulZeroR : Formula NT d
|
||||||
|
mulZeroR = Forall $ Y * O .= O
|
||||||
|
|
||||||
|
mulSucR : Formula NT d
|
||||||
|
mulSucR = Forall $ Forall $ X * S Y .= X * Y + X
|
||||||
|
|
||||||
|
induction : {d : _} -> Formula NT (S d) -> Formula NT d
|
||||||
|
induction phi =
|
||||||
|
elimBinder O phi ==>
|
||||||
|
(Forall $ phi ==> (sub 0 (S Y) phi)) ==>
|
||||||
|
Forall phi
|
||||||
|
|
||||||
|
doubleNeg :
|
||||||
|
{d : _} -> {c : _} ->
|
||||||
|
{phi : Formula sig d} ->
|
||||||
|
Proof c (Not (Not phi)) -> Proof c phi
|
||||||
|
doubleNeg pf =
|
||||||
|
Contra $
|
||||||
|
ImpE (Weaken pf (Missing Same)) $
|
||||||
|
Hyp 0
|
||||||
|
|
||||||
|
AndI : {d : _} -> {c : _} ->
|
||||||
|
{phi, psi : Formula sig d} ->
|
||||||
|
Proof c phi -> Proof c psi ->
|
||||||
|
Proof c (phi && psi)
|
||||||
|
AndI pfPhi pfPsi =
|
||||||
|
ImpI $
|
||||||
|
ImpE
|
||||||
|
(ImpE (Hyp 0) $
|
||||||
|
Weaken pfPhi $ Missing Same)
|
||||||
|
(Weaken pfPsi $ Missing Same)
|
||||||
Loading…
Reference in a new issue