initial commit
This commit is contained in:
commit
bdb30a2d62
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
build
|
||||||
|
src/build
|
15
pi.ipkg
Normal file
15
pi.ipkg
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
package pi
|
||||||
|
|
||||||
|
modules = Term
|
||||||
|
, Value
|
||||||
|
, Normalize
|
||||||
|
, Convert
|
||||||
|
, Check
|
||||||
|
, Misc
|
||||||
|
|
||||||
|
options = "-p contrib --warnpartial"
|
||||||
|
|
||||||
|
main = Main
|
||||||
|
sourcedir = "src"
|
||||||
|
|
||||||
|
executable = "addict"
|
0
src/Check.idr
Normal file
0
src/Check.idr
Normal file
0
src/Convert.idr
Normal file
0
src/Convert.idr
Normal file
4
src/Main.idr
Normal file
4
src/Main.idr
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
module Main
|
||||||
|
|
||||||
|
main : IO ()
|
||||||
|
main = pure ()
|
21
src/Misc.idr
Normal file
21
src/Misc.idr
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
module Misc
|
||||||
|
|
||||||
|
import Data.Nat
|
||||||
|
|
||||||
|
%default total
|
||||||
|
|
||||||
|
public export
|
||||||
|
Index : Type
|
||||||
|
Index = Nat
|
||||||
|
|
||||||
|
public export
|
||||||
|
Name : Type
|
||||||
|
Name = String
|
||||||
|
|
||||||
|
public export
|
||||||
|
PI : Type -> Type
|
||||||
|
PI = Maybe
|
||||||
|
|
||||||
|
public export
|
||||||
|
lteTransp : LTE a b -> a = c -> b = d -> LTE c d
|
||||||
|
lteTransp p Refl Refl = p
|
3
src/Normalize.idr
Normal file
3
src/Normalize.idr
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
module Normalize
|
||||||
|
|
||||||
|
%default total
|
58
src/Term.idr
Normal file
58
src/Term.idr
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
module Term
|
||||||
|
|
||||||
|
import Data.Nat
|
||||||
|
|
||||||
|
import Misc
|
||||||
|
|
||||||
|
%default total
|
||||||
|
|
||||||
|
{-
|
||||||
|
The type of terms is indexed by the size of the environment in which
|
||||||
|
they are valid, that is, it is impossible to construct an ill-scoped term.
|
||||||
|
-}
|
||||||
|
public export
|
||||||
|
data Term : (_ : Index) -> Type where
|
||||||
|
TType : Term n -- The type of types (type in type)
|
||||||
|
TDef : Name -> Term n -- Axiomised term
|
||||||
|
TLam : Term n -> Term (S n) -> Term n -- Lambda abstraction (λ Type -> Scope)
|
||||||
|
TPi : Term n -> Term (S n) -> Term n -- Pi type (∏ A -> B a )
|
||||||
|
TApp : Term n -> Term n -> Term n -- Appliction
|
||||||
|
TVar : (n : Nat) -> LT n m -> Term m -- Variable
|
||||||
|
|
||||||
|
public export
|
||||||
|
weaken : {p, q : _} -> LTE p q -> Term p -> Term q
|
||||||
|
weaken _ TType = TType
|
||||||
|
weaken _ (TDef n) = TDef n
|
||||||
|
weaken p (TLam ty sc) = TLam (weaken p ty) (weaken (LTESucc p) sc)
|
||||||
|
weaken p (TPi a bx) = TLam (weaken p a ) (weaken (LTESucc p) bx)
|
||||||
|
weaken p (TApp f x) = TApp (weaken p f) (weaken p x)
|
||||||
|
{-
|
||||||
|
Getting new index
|
||||||
|
=================
|
||||||
|
|
||||||
|
New index is
|
||||||
|
|
||||||
|
old + Δctx
|
||||||
|
|
||||||
|
in this case
|
||||||
|
|
||||||
|
r + (q - p)
|
||||||
|
|
||||||
|
which since p <= q is equivalent to
|
||||||
|
|
||||||
|
(r + q) - p
|
||||||
|
|
||||||
|
|
||||||
|
Proving validity of new index
|
||||||
|
=============================
|
||||||
|
|
||||||
|
r <= p => (+mono)
|
||||||
|
r + q <= p + q => (-mono)
|
||||||
|
(r + q) - p <= (p + q) - p => (lteTransp -+)
|
||||||
|
(r + q) - p <= q ∎
|
||||||
|
|
||||||
|
-}
|
||||||
|
weaken {p = S p} {q = S q} (LTESucc p1) (TVar r p2') =
|
||||||
|
case p2' of
|
||||||
|
LTESucc p2 => TVar (minus (r + q) p)
|
||||||
|
(LTESucc (lteTransp (minusLteMonotone (plusLteMonotoneRight q r p p2)) Refl (minusPlus p)))
|
12
src/Value.idr
Normal file
12
src/Value.idr
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
module Value
|
||||||
|
|
||||||
|
import Term
|
||||||
|
import Misc
|
||||||
|
|
||||||
|
%default total
|
||||||
|
|
||||||
|
public export
|
||||||
|
data NF : Type where
|
||||||
|
NType : NF
|
||||||
|
NDef : Name -> NF
|
||||||
|
NLam : NF -> (Term 1 -> PI NF) -> NF
|
Loading…
Reference in New Issue
Block a user