1
module tests.Forcing2 where
3
open import Prelude.Nat
5
open import Prelude.Unit
7
data _**_ (A B : Set) : Set where
10
data P {A B : Set} : A ** B -> Set where
11
_,_ : (x : A)(y : B) -> P (x , y)
13
data Q {A : Set} : A ** A -> Set where
14
[_] : (x : A) -> Q (x , x)
16
test1 : (p : Nat ** Nat) -> P p -> Nat
17
test1 .(x , y) (x , y) = x + y
19
test2 : (q : Nat ** Nat) -> Q q -> Nat
20
test2 .(x , x) [ x ] = ((S (S Z)) * x) + 1
23
test3 : (q : (Nat ** Nat) ** (Nat ** Nat)) -> Q q -> Nat
24
test3 .((Z , Z) , (Z , Z)) [ Z , Z ] = Z
25
test3 .((S n , m) , (S n , m)) [ S n , m ] = S n + m
26
test3 .((Z , m) , (Z , m)) [ Z , m ] = m
29
printNat (test1 (5 , 8) (5 , 8)) ,,
30
printNat (test2 (1 , 1) [ 1 ]) ,,
31
printNat (test3 ( (3 , 4) , (3 , 4) ) [ 3 , 4 ]) ,,