remove old typecheck stuff
This commit is contained in:
parent
e833322ebe
commit
c75332be44
1 changed files with 0 additions and 152 deletions
|
@ -1,152 +0,0 @@
|
||||||
module Quox.Typecheck
|
|
||||||
|
|
||||||
import Quox.Syntax
|
|
||||||
import Quox.Error
|
|
||||||
import Quox.Context
|
|
||||||
|
|
||||||
import Data.Nat
|
|
||||||
import Control.Monad.Reader
|
|
||||||
import Control.Monad.State
|
|
||||||
|
|
||||||
|
|
||||||
%default total
|
|
||||||
|
|
||||||
public export
|
|
||||||
DContext : Nat -> Type
|
|
||||||
DContext = Context Dim
|
|
||||||
|
|
||||||
public export
|
|
||||||
TContext : Nat -> Nat -> Type
|
|
||||||
TContext d = Context (Term d)
|
|
||||||
|
|
||||||
public export
|
|
||||||
QContext : Nat -> Type
|
|
||||||
QContext = Triangle' Qty
|
|
||||||
|
|
||||||
public export
|
|
||||||
QOutput : Nat -> Type
|
|
||||||
QOutput = Context' Qty
|
|
||||||
|
|
||||||
|
|
||||||
namespace TContext
|
|
||||||
export
|
|
||||||
pushD : TContext d n -> TContext (S d) n
|
|
||||||
pushD tel = map (/// shift 1) tel
|
|
||||||
|
|
||||||
|
|
||||||
namespace Zero
|
|
||||||
public export
|
|
||||||
data IsZero : QOutput n -> Type where
|
|
||||||
LinZ : IsZero [<]
|
|
||||||
SnocZ : IsZero qctx -> IsZero (qctx :< Zero)
|
|
||||||
|
|
||||||
export
|
|
||||||
isZeroIrrel : {qctx : _} -> (0 _ : IsZero qctx) -> IsZero qctx
|
|
||||||
isZeroIrrel {qctx = [<]} LinZ = LinZ
|
|
||||||
isZeroIrrel {qctx = _ :< _} (SnocZ x) = SnocZ $ isZeroIrrel x
|
|
||||||
|
|
||||||
export
|
|
||||||
zero : Context _ n -> Subset (QOutput n) IsZero
|
|
||||||
zero [<] = Element [<] LinZ
|
|
||||||
zero (ctx :< _) = let zeroN = zero ctx in
|
|
||||||
Element (zeroN.fst :< Zero) (SnocZ zeroN.snd)
|
|
||||||
|
|
||||||
|
|
||||||
namespace Only
|
|
||||||
public export
|
|
||||||
data IsOnly : QOutput n -> Var n -> Type where
|
|
||||||
Here : IsZero qctx -> IsOnly (qctx :< One) VZ
|
|
||||||
There : IsOnly qctx i -> IsOnly (qctx :< Zero) (VS i)
|
|
||||||
|
|
||||||
export
|
|
||||||
isOnlyIrrel : {qctx, i : _} -> (0 _ : IsOnly qctx i) -> IsOnly qctx i
|
|
||||||
isOnlyIrrel {i = VZ} (Here z) = Here $ isZeroIrrel z
|
|
||||||
isOnlyIrrel {i = (VS i)} (There o) = There $ isOnlyIrrel o
|
|
||||||
|
|
||||||
export
|
|
||||||
only : Context _ n -> (i : Var n) ->
|
|
||||||
Subset (QOutput n) (\qctx => IsOnly qctx i)
|
|
||||||
only (ctx :< _) VZ =
|
|
||||||
let zeroN = zero ctx in
|
|
||||||
Element (zeroN.fst :< One) (Here zeroN.snd)
|
|
||||||
only (ctx :< _) (VS i) =
|
|
||||||
let onlyN = only ctx i in
|
|
||||||
Element (onlyN.fst :< Zero) (There onlyN.snd)
|
|
||||||
|
|
||||||
|
|
||||||
public export
|
|
||||||
data LT : Universe -> Universe -> Type where
|
|
||||||
Fin : k `LT` l -> U k `LT` U l
|
|
||||||
Any : U _ `LT` UAny
|
|
||||||
|
|
||||||
|
|
||||||
namespace Lookup
|
|
||||||
public export
|
|
||||||
data IsLookup :
|
|
||||||
(tctx : TContext d n) ->
|
|
||||||
(i : Var n) ->
|
|
||||||
(ty : Term d from) ->
|
|
||||||
(by : Shift from n) -> Type
|
|
||||||
where
|
|
||||||
Here : IsLookup {tctx=(tctx :< ty), i=VZ, ty, by=(SS SZ)}
|
|
||||||
There : IsLookup {tctx, i, ty, by} ->
|
|
||||||
IsLookup {tctx=(tctx :< ty'), i=(VS i), ty, by=(SS by)}
|
|
||||||
|
|
||||||
public export
|
|
||||||
record Lookup {0 d, n : Nat} (0 tctx : TContext d n) (0 i : Var n) where
|
|
||||||
constructor MkLookup
|
|
||||||
qtys : QOutput n
|
|
||||||
type : Term d from
|
|
||||||
by : Shift from n
|
|
||||||
0 only : IsOnly qtys i
|
|
||||||
0 look : IsLookup tctx i type by
|
|
||||||
|
|
||||||
export
|
|
||||||
lookup : (ctx : TContext d n) -> (i : Var n) -> Lookup tctx i
|
|
||||||
lookup (ctx :< x) VZ =
|
|
||||||
?lookup_rhs_3
|
|
||||||
lookup (ctx :< x) (VS i) =
|
|
||||||
?lookup_rhs_4
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
mutual
|
|
||||||
public export
|
|
||||||
data HasTypeT :
|
|
||||||
(dctx : DContext d) ->
|
|
||||||
(tctx : TContext d n) ->
|
|
||||||
(qctx : QContext n) ->
|
|
||||||
(subj : Term d n) ->
|
|
||||||
(ty : Term d n) ->
|
|
||||||
(tmout, tyout : QOutput n) ->
|
|
||||||
Type
|
|
||||||
where
|
|
||||||
TYPE :
|
|
||||||
WfCtx {dctx, tctx, qctx} ->
|
|
||||||
k `LT` l ->
|
|
||||||
(0 _ : IsZero tmout) -> (0 _ : IsZero tyout) ->
|
|
||||||
HasTypeT {dctx, tctx, qctx, subj=(TYPE k), ty=(TYPE l), tmout, tyout}
|
|
||||||
|
|
||||||
public export
|
|
||||||
data HasTypeE :
|
|
||||||
(dctx : DContext d) ->
|
|
||||||
(tctx : TContext d n) ->
|
|
||||||
(qctx : QContext n) ->
|
|
||||||
(subj : Elim d n) ->
|
|
||||||
(ty : Term d n) ->
|
|
||||||
(tmout, tyout : QOutput n) ->
|
|
||||||
Type
|
|
||||||
where
|
|
||||||
|
|
||||||
public export
|
|
||||||
data WfCtx :
|
|
||||||
(dctx : DContext d) ->
|
|
||||||
(tctx : TContext d n) ->
|
|
||||||
(qctx : QContext n) ->
|
|
||||||
Type
|
|
||||||
where
|
|
||||||
NIL : WfCtx [<] [<] [<]
|
|
||||||
BIND :
|
|
||||||
WfCtx {dctx, tctx, qctx} ->
|
|
||||||
HasTypeT {dctx, tctx, qctx, subj=a, ty=(TYPE l), tmout, tyout} ->
|
|
||||||
WfCtx {dctx, tctx=(tctx :< a), qctx=(qctx :< tmout)}
|
|
Loading…
Reference in a new issue