packages feed

MiniAgda-0.2022.3.11: test/succeed/wkStream.golden

MiniAgda by Andreas Abel and Karl Mehltretter
--- opening "wkStream.ma" ---
--- scope checking ---
--- type checking ---
type  Nat : Set
term  Nat.zero : < Nat.zero : Nat >
term  Nat.succ : ^(x : Nat) -> < Nat.succ x : Nat >
term  add : Nat -> Nat -> Nat
{ add x Nat.zero = x
; add x (Nat.succ y) = Nat.succ (add x y)
}
term  one : Nat
term  one = Nat.succ Nat.zero
type  Stream : ^(A : Set) -> - Size -> Set
term  Stream.cons : .[A : Set] -> .[i : Size] -> ^(y1 : A) -> ^(y2 : Stream A i) -> < Stream.cons i y1 y2 : Stream A $i >
term  zeroes : .[i : Size] -> Stream Nat i
{ zeroes $[i < #] = Stream.cons [i] Nat.zero (zeroes [i])
}
term  ones : .[i : Size] -> Stream Nat i
{ ones $[i < #] = Stream.cons [i] one (ones [i])
}
term  ones' : Stream Nat #
term  ones' = ones [#]
term  map : .[A : Set] -> .[B : Set] -> .[i : Size] -> (A -> B) -> Stream A # -> Stream B i
{ map [A] [B] $[i < #] f (Stream.cons [.#] a as) = Stream.cons [i] (f a) (map [A] [B] [i] f as)
}
term  twos : Stream Nat #
term  twos = map [Nat] [Nat] [#] (\ x -> Nat.succ x) ones'
term  tail : .[A : Set] -> Stream A # -> Stream A #
{ tail [A] (Stream.cons [.#] a as) = as
}
term  twos' : Stream Nat #
term  twos' = tail [Nat] twos
term  head : .[A : Set] -> Stream A # -> A
{ head [A] (Stream.cons [.#] a as) = a
}
term  two : Nat
term  two = head [Nat] twos
term  two' : Nat
term  two' = head [Nat] twos'
term  twos2 : Stream Nat #
term  twos2 = map [Nat] [Nat] [#] (\ y -> Nat.succ y) ones'
term  twos2' : Stream Nat #
term  twos2' = tail [Nat] twos2
term  zipWith : .[A : Set] -> .[B : Set] -> .[C : Set] -> .[i : Size] -> (A -> B -> C) -> Stream A # -> Stream B # -> Stream C i
{ zipWith [A] [B] [C] $[i < #] f (Stream.cons [.#] a as) (Stream.cons [.#] b bs) = Stream.cons [i] (f a b) (zipWith [A] [B] [C] [i] f as bs)
}
term  nth : Nat -> Stream Nat # -> Nat
{ nth Nat.zero ns = head [Nat] ns
; nth (Nat.succ x) ns = nth x (tail [Nat] ns)
}
term  fours : Stream Nat #
term  fours = zipWith [Nat] [Nat] [Nat] [#] add twos twos
term  four : Nat
term  four = head [Nat] fours
term  fib : (x : Nat) -> (y : Nat) -> .[i : Size] -> Stream Nat i
{ fib x y $[i < #] = Stream.cons [$i] x (Stream.cons [i] y (fib y (add x y) [i]))
}
term  fib' : Stream Nat #
term  fib' = tail [Nat] (fib Nat.zero Nat.zero [#])
term  fib8 : Nat
term  fib8 = nth (add four four) (fib Nat.zero Nat.zero [#])
term  fib2 : Nat
term  fib2 = head [Nat] (tail [Nat] (fib Nat.zero Nat.zero [#]))
term  nats : .[i : Size] -> Nat -> Stream Nat i
{ nats $[i < #] x = Stream.cons [i] x (nats [i] (Nat.succ x))
}
term  nats' : Stream Nat #
term  nats' = tail [Nat] (nats [#] Nat.zero)
term  wkStream : .[A : Set] -> .[i : Size] -> Stream A $i -> Stream A i
term  wkStream = [\ A ->] [\ i ->] \ s -> s
term  wkStream_ok : .[A : Set] -> .[i : Size] -> Stream A $i -> Stream A i
{ wkStream_ok [A] $[i < #] (Stream.cons [.$i] x xs) = Stream.cons [i] x (wkStream [A] [i] xs)
}
--- evaluating ---
one has whnf (succ zero)
one evaluates to succ zero
ones' has whnf (ones #)
ones' evaluates to Stream.cons # (Nat.succ Nat.zero) (Stream.cons # (Nat.succ Nat.zero) (Stream.cons # (Nat.succ Nat.zero) (Stream.cons # (Nat.succ Nat.zero) (Stream.cons # (Nat.succ Nat.zero) (ones #)))))
twos has whnf (map Nat Nat # (\ x -> succ x) ones')
twos evaluates to Stream.cons # (succ (Nat.succ Nat.zero)) (Stream.cons # (succ (Nat.succ Nat.zero)) (Stream.cons # (succ (Nat.succ Nat.zero)) (Stream.cons # (succ (Nat.succ Nat.zero)) (Stream.cons # (succ (Nat.succ Nat.zero)) (map Nat Nat # (\ x~0 -> succ ~0) (ones #))))))
twos' has whnf (map Nat Nat # (\x -> Nat.succ x) (ones #))
twos' evaluates to Stream.cons # (Nat.succ (Nat.succ Nat.zero)) (Stream.cons # (Nat.succ (Nat.succ Nat.zero)) (Stream.cons # (Nat.succ (Nat.succ Nat.zero)) (Stream.cons # (Nat.succ (Nat.succ Nat.zero)) (Stream.cons # (Nat.succ (Nat.succ Nat.zero)) (map Nat Nat # (\ x~0 -> Nat.succ ~0) (ones #))))))
two has whnf Nat.succ{x = Nat.succ{x = Nat.zero{}}}
two evaluates to Nat.succ (Nat.succ Nat.zero)
two' has whnf Nat.succ{x = Nat.succ{x = Nat.zero{}}}
two' evaluates to Nat.succ (Nat.succ Nat.zero)
twos2 has whnf (map Nat Nat # succ ones')
twos2 evaluates to Stream.cons # (succ (Nat.succ Nat.zero)) (Stream.cons # (succ (Nat.succ Nat.zero)) (Stream.cons # (succ (Nat.succ Nat.zero)) (Stream.cons # (succ (Nat.succ Nat.zero)) (Stream.cons # (succ (Nat.succ Nat.zero)) (map Nat Nat # succ (ones #))))))
twos2' has whnf (map Nat Nat # (\y -> Nat.succ y) (ones #))
twos2' evaluates to Stream.cons # (Nat.succ (Nat.succ Nat.zero)) (Stream.cons # (Nat.succ (Nat.succ Nat.zero)) (Stream.cons # (Nat.succ (Nat.succ Nat.zero)) (Stream.cons # (Nat.succ (Nat.succ Nat.zero)) (Stream.cons # (Nat.succ (Nat.succ Nat.zero)) (map Nat Nat # (\ y~0 -> Nat.succ ~0) (ones #))))))
fours has whnf (zipWith Nat Nat Nat # add twos twos)
fours evaluates to Stream.cons # (Nat.succ (Nat.succ (Nat.succ (Nat.succ Nat.zero)))) (Stream.cons # (Nat.succ (Nat.succ (Nat.succ (Nat.succ Nat.zero)))) (Stream.cons # (Nat.succ (Nat.succ (Nat.succ (Nat.succ Nat.zero)))) (Stream.cons # (Nat.succ (Nat.succ (Nat.succ (Nat.succ Nat.zero)))) (Stream.cons # (Nat.succ (Nat.succ (Nat.succ (Nat.succ Nat.zero)))) (zipWith Nat Nat Nat # (\ ~0 -> \ ~1 -> add ~0 ~1) (map Nat Nat # (\ x~0 -> Nat.succ ~0) (ones #)) (map Nat Nat # (\ x~0 -> Nat.succ ~0) (ones #)))))))
four has whnf Nat.succ{x = Nat.succ{x = Nat.succ{x = Nat.succ{x = Nat.zero{}}}}}
four evaluates to Nat.succ (Nat.succ (Nat.succ (Nat.succ Nat.zero)))
fib' has whnf Stream.cons{i = #; y1 = zero; y2 = {fib y (add x y) [i] {i = #, y = zero, x = zero}}}
fib' evaluates to Stream.cons # zero (Stream.cons # zero (Stream.cons # (add zero zero) (Stream.cons # (add zero zero) (Stream.cons # (add zero (add zero zero)) (Stream.cons # (add zero (add zero zero)) (Stream.cons # (add (add zero zero) (add zero (add zero zero))) (Stream.cons # (add (add zero zero) (add zero (add zero zero))) (Stream.cons # (add (add zero (add zero zero)) (add (add zero zero) (add zero (add zero zero)))) (Stream.cons # (add (add zero (add zero zero)) (add (add zero zero) (add zero (add zero zero)))) (Stream.cons # (add (add (add zero zero) (add zero (add zero zero))) (add (add zero (add zero zero)) (add (add zero zero) (add zero (add zero zero))))) (fib (add (add (add zero zero) (add zero (add zero zero))) (add (add zero (add zero zero)) (add (add zero zero) (add zero (add zero zero))))) (add (add (add zero (add zero zero)) (add (add zero zero) (add zero (add zero zero)))) (add (add (add zero zero) (add zero (add zero zero))) (add (add zero (add zero zero)) (add (add zero zero) (add zero (add zero zero)))))) #)))))))))))
fib8 has whnf (add (add zero zero) (add zero (add zero zero)))
fib8 evaluates to add (add zero zero) (add zero (add zero zero))
fib2 has whnf zero
fib2 evaluates to zero
nats' has whnf (nats # {Nat.succ x {x = zero, i = #}})
nats' evaluates to Stream.cons # (Nat.succ zero) (Stream.cons # (Nat.succ (Nat.succ zero)) (Stream.cons # (Nat.succ (Nat.succ (Nat.succ zero))) (Stream.cons # (Nat.succ (Nat.succ (Nat.succ (Nat.succ zero)))) (Stream.cons # (Nat.succ (Nat.succ (Nat.succ (Nat.succ (Nat.succ zero))))) (nats # (Nat.succ (Nat.succ (Nat.succ (Nat.succ (Nat.succ (Nat.succ zero)))))))))))
wkStream has whnf (\A -> \ i -> \ s -> s)
wkStream evaluates to \ A~0 -> \ i~1 -> \ s~2 -> ~2
--- closing "wkStream.ma" ---