remove old files
This commit is contained in:
3
Makefile
3
Makefile
@@ -47,3 +47,6 @@ profile: .PHONY
|
||||
clean:
|
||||
rm newt*.js iife.js min.js min.js.gz
|
||||
|
||||
audit: .PHONY
|
||||
(cd playground && npm audit)
|
||||
(cd newt-vscode && npm audit)
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
module Debug
|
||||
|
||||
data Unit : U where
|
||||
MkUnit : Unit
|
||||
|
||||
infixr 7 _::_
|
||||
data List : U -> U where
|
||||
Nil : {A : U} -> List A
|
||||
_::_ : {A : U} -> A -> List A -> List A
|
||||
|
||||
-- prj/menagerie/papers/combinatory
|
||||
|
||||
infixr 6 _~>_
|
||||
data Type : U where
|
||||
ι : Type
|
||||
_~>_ : Type -> Type -> Type
|
||||
|
||||
A : U
|
||||
A = Unit
|
||||
|
||||
Val : Type -> U
|
||||
Val ι = A
|
||||
Val (x ~> y) = Val x -> Val y
|
||||
|
||||
-- can't get Val to expand here.
|
||||
#check (\ x => \ y => \ z => (Val (x ~> y ~> z))) : Type -> Type -> Type -> U
|
||||
|
||||
foo : {σ τ ξ : Type} → Val (σ ~> (τ ~> σ))
|
||||
foo {σ} {τ} {σ} = \ x => \ y => x
|
||||
|
||||
@@ -1,73 +0,0 @@
|
||||
module DepEq
|
||||
|
||||
-- https://mathstodon.xyz/@MartinEscardo/114751459092567654
|
||||
-- see also https://martinescardo.github.io/dependent-equality-lecture/DependentEquality.html
|
||||
|
||||
infixr 5 _≡_
|
||||
infixl 6 _+_
|
||||
infixl 6 _++_
|
||||
infixr 7 _::_
|
||||
infixr 5 _≡⟨_⟩_
|
||||
|
||||
data _≡_ : ∀ a. a → a → U where
|
||||
Refl : ∀ a. {x : a} → x ≡ x
|
||||
|
||||
cong : ∀ X Y. (f : X → Y) → {x₀ x₁ : X} → x₀ ≡ x₁ → f x₀ ≡ f x₁
|
||||
cong f Refl = Refl
|
||||
|
||||
data ℕ : U where
|
||||
S : ℕ → ℕ
|
||||
Z : ℕ
|
||||
|
||||
_+_ : ℕ → ℕ → ℕ
|
||||
Z + m = m
|
||||
S k + m = S (k + m)
|
||||
|
||||
+-assoc : (l m n : ℕ ) → l + (m + n) ≡ (l + m) + n
|
||||
+-assoc Z m n = Refl
|
||||
+-assoc (S k) m n = cong S (+-assoc k m n)
|
||||
|
||||
|
||||
|
||||
_≡⟨_⟩_ : {0 A : U} → {0 B : A → U } → {0 x₀ x₁ : A} → B x₀ → x₀ ≡ x₁ → B x₁ → U
|
||||
b₀ ≡⟨ Refl ⟩ b₁ = b₀ ≡ b₁
|
||||
|
||||
congd : {0 A : U} → {0 B : A → U} → (f : (a : A) → B a) → {0 a₀ a₁ : A} →
|
||||
(p : a₀ ≡ a₁) →
|
||||
_≡⟨_⟩_ {_} {B} (f a₀) p (f a₁)
|
||||
congd f Refl = Refl
|
||||
|
||||
data Vect : U → ℕ → U where
|
||||
Nil : ∀ a. Vect a Z
|
||||
_::_ : ∀ a n . a → Vect a n → Vect a (S n)
|
||||
|
||||
_++_ : ∀ a n m. Vect a n → Vect a m → Vect a (n + m)
|
||||
Nil ++ ys = ys
|
||||
(x :: xs) ++ ys = x :: (xs ++ ys)
|
||||
|
||||
-- REVIEW - make sure we're freezing metas at the end of a typesig / def
|
||||
cong-cons : ∀ a n m. (x : a) → {xs : Vect a n} → {ys : Vect a m} → (p : n ≡ m) →
|
||||
_≡⟨_⟩_ {_} {Vect a} xs p ys → _≡⟨_⟩_ {_} {Vect a} (x :: xs) (cong S p) (x :: ys)
|
||||
-- This is failing because the type doesn't reduce. We need to process arg2 first, after determining that
|
||||
-- TODO the type of the second argument is not useful to split until the first one is split
|
||||
-- need to check the type when we decide to split on an argument
|
||||
-- cong-cons _ Refl Refl = ?
|
||||
|
||||
-- and this one was having some trouble on the RHS, which turned out to `cong`
|
||||
-- being undefined.
|
||||
cong-cons _ Refl x = case x of Refl => Refl
|
||||
|
||||
-- Idris' complaint about B is more readable:
|
||||
|
||||
-- Error: While processing type of appAssoc. Can't solve constraint
|
||||
-- between: Vec ?a ((?l + ?n) + ?m) and ?b ((?l + ?n) + ?m).
|
||||
|
||||
++-assoc : ∀ a l n m. (xs : Vect a l) → (ys : Vect a n) → (zs : Vect a m) →
|
||||
-- TODO newt + idris have trouble sorting out B
|
||||
_≡⟨_⟩_ {_} {Vect a} (xs ++ (ys ++ zs)) (+-assoc l n m) ((xs ++ ys) ++ zs)
|
||||
++-assoc Nil ys zs = Refl
|
||||
-- TODO need rhs hole to look more like this in newt:
|
||||
-- hole : DepEq (x :: (xs ++ (ys ++ zs))) (cong S (plusAssoc k n m)) (x :: ((xs ++ ys) ++ zs))
|
||||
++-assoc {a} {S k} {n} {m} (x :: xs) ys zs = cong-cons x (+-assoc k n m) (++-assoc xs ys zs)
|
||||
|
||||
|
||||
@@ -1,42 +0,0 @@
|
||||
module Equality1
|
||||
|
||||
-- Leibniz equality
|
||||
Eq : {A : U} -> A -> A -> U
|
||||
Eq = \ x y => (P : A -> U) -> P x -> P y
|
||||
|
||||
refl : {A : U} {x : A} -> Eq x x
|
||||
refl = \ P Px => Px
|
||||
|
||||
trans : {A : U} {x y z : A} -> Eq x y -> Eq y z -> Eq x z
|
||||
trans = \ Exy Eyz => Eyz (\ w => Eq x w) Exy
|
||||
|
||||
sym : {A : U} {x y : A} -> Eq x y -> Eq y x
|
||||
sym = \ Exy => Exy (\ z => Eq z x) refl
|
||||
|
||||
id : {A} -> A -> A
|
||||
id = \ x => x
|
||||
|
||||
coerce : {A B : U} -> Eq A B -> A -> B
|
||||
coerce = \ EqAB a => EqAB id a
|
||||
|
||||
-- pi-forall's formulation
|
||||
-- J : {A : U} ->
|
||||
-- (x y : A) ->
|
||||
-- (p : Eq x y) ->
|
||||
-- {C : (z : A) -> Eq z y -> U} ->
|
||||
-- (b : C y refl) ->
|
||||
-- C x p
|
||||
-- -- doesn't really work because we have refl and some Eq y y
|
||||
-- J = \ x y eq {C} b => eq (\z => (q : Eq z y) -> C z q) (\ _ => b)
|
||||
|
||||
-- I don't think this is going to happen, maybe with funext?
|
||||
-- anyway, could be useful case to improve error messages.
|
||||
-- (add names)
|
||||
|
||||
J : {A : U} ->
|
||||
{C : (x y : A) -> Eq x y -> U} ->
|
||||
(c : (x : _) -> C x x refl) ->
|
||||
(x y : A) ->
|
||||
(p : Eq x y) ->
|
||||
C x y p
|
||||
J = \ c x y eq => eq (\ z => (q : Eq x z) -> C x z q) (\ _ => c x) eq
|
||||
@@ -1,51 +0,0 @@
|
||||
module Fix
|
||||
|
||||
-- from piforall Fix.pi
|
||||
Type: U
|
||||
Type = U
|
||||
|
||||
-- TODO piforall makes the A in scope for the constructors
|
||||
-- and has it on the let of the :
|
||||
-- I think we want that for parameters?
|
||||
data D : (A : Type) -> Type where
|
||||
F : {A : Type} -> (D A -> D A) -> D A
|
||||
V : {A : Type} -> A -> D A
|
||||
|
||||
|
||||
-- Here we have two A in play, so y is type of the
|
||||
-- A in V and the expected return value is the other.
|
||||
-- We do need to sort this out
|
||||
|
||||
unV : { A : U} -> D A -> A
|
||||
unV (V y) = y
|
||||
unV (F f) = ? -- was TRUSTME
|
||||
|
||||
|
||||
|
||||
-- And here we have D A:4 and D A:1
|
||||
unF : {A : Type} -> D A -> D A -> D A
|
||||
unF = \ {A} v x =>
|
||||
case v of
|
||||
F f => f x
|
||||
V y => ? -- was TRUSTME
|
||||
|
||||
-- fix : {A : U} -> (A -> A) -> A
|
||||
-- fix = \ {A} g =>
|
||||
-- -- RLet is not yet implemented...
|
||||
-- let omega = -- : D A -> D A =
|
||||
-- (\ x => V (g (unv {A} (unF {A} x x))))
|
||||
-- in unV {A} (omega (F omega))
|
||||
|
||||
-- data Nat : Type where
|
||||
-- Zero : Nat
|
||||
-- Succ : Nat -> Nat
|
||||
|
||||
-- fix_add : Nat -> Nat -> Nat
|
||||
-- fix_add = fix [Nat -> Nat -> Nat]
|
||||
-- \radd. \x. \y.
|
||||
-- case x of
|
||||
-- Zero -> y
|
||||
-- Succ n -> Succ (radd n y)
|
||||
|
||||
-- test : fix_add 5 2 = 7
|
||||
-- test = Refl
|
||||
@@ -1,18 +0,0 @@
|
||||
-- foo
|
||||
module Foo
|
||||
|
||||
id : (a : U) -> a -> a
|
||||
id = \ a => \ x => x
|
||||
|
||||
-- if I put foo here, it fails with 'extra toks' at "module"
|
||||
-- errors aren't cutting to the top
|
||||
-- I think we need the errors to be fatal if anything is consumed (since the nearest alt)
|
||||
|
||||
List : U -> U
|
||||
List = \ A => (L : U) -> L -> (A -> L -> L) -> L
|
||||
|
||||
nil : (A : U) -> List A
|
||||
nil = \ A L n f => n
|
||||
|
||||
Bool : U
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
module JSLib
|
||||
|
||||
|
||||
|
||||
|
||||
infixl 4 _+_
|
||||
infixl 5 _*_
|
||||
|
||||
pfunc _+_ : Int -> Int -> Int := `(x,y) => x + y`
|
||||
pfunc _*_ : Int -> Int -> Int := `(x,y) => x * y`
|
||||
|
||||
ptype JVoid
|
||||
|
||||
-- REVIEW - maybe we only have body, use names from the pi-type and generate
|
||||
-- the arrow (or inline?) ourselves
|
||||
pfunc log : String -> JVoid := `x => console.log(x)`
|
||||
pfunc debug : {a : U} -> String -> a -> JVoid := `(_,x,a) => console.log(x,a)`
|
||||
@@ -1,36 +0,0 @@
|
||||
module Order
|
||||
|
||||
data Nat : U where
|
||||
Z : Nat
|
||||
S : Nat -> Nat
|
||||
|
||||
plus : Nat -> Nat -> Nat
|
||||
plus Z y = y
|
||||
plus (S x) y = S (plus x y)
|
||||
|
||||
data Pair : U -> U -> U where
|
||||
_,_ : {A B : U} -> A -> B -> Pair A B
|
||||
|
||||
infix 1 _,_
|
||||
|
||||
foo : Pair Nat Nat
|
||||
-- vscode plugin issue: Without the space the info is rendered on Z...
|
||||
foo = (Z , S Z)
|
||||
|
||||
-- So I was going to force a (a + b, a) =?= (3,0) unification problem
|
||||
-- as an example of needing _dynamic_ pattern unification
|
||||
data Eq : {A : U} -> A -> A -> U where
|
||||
Refl : {A : U} -> {x : A} -> Eq x x
|
||||
|
||||
-- but hold up here. This doesn't solve either.
|
||||
-- Oh, because I can't reduce case.
|
||||
-- And the FC is useless.
|
||||
-- these go into caseeval.newt test
|
||||
two : Eq (plus Z (S (S Z))) (S (S Z))
|
||||
two = Refl
|
||||
|
||||
two' : Eq (plus (S Z) (S Z)) (S (S Z))
|
||||
two' = Refl {Nat} {S (S Z)}
|
||||
|
||||
three : Eq (plus (S Z) (S (S Z))) (plus (S (S Z)) (S Z))
|
||||
three = Refl {Nat} {S (S (S Z))}
|
||||
@@ -1 +0,0 @@
|
||||
../src/Prelude.newt
|
||||
@@ -1,15 +0,0 @@
|
||||
-- Files begin with a module declaration, modules not implemented yet
|
||||
module Tutorial
|
||||
|
||||
|
||||
-- import Prelude not implemented yet
|
||||
|
||||
-- declare a primitive type
|
||||
|
||||
|
||||
-- declare a more complex primitive type
|
||||
ptype Array : U -> U
|
||||
|
||||
-- declare a primitive function
|
||||
pfunc alength : {a : U} -> Array a -> Int := `(x) => x.length`
|
||||
|
||||
Reference in New Issue
Block a user