added test file

This commit is contained in:
William Ball 2025-07-27 17:44:20 -07:00
parent 4d983b08ad
commit 09a7875f03
Signed by: wball
GPG key ID: B8682D8137B70765

128
src/Test.idr Normal file
View 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)