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