1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- module Forcing3 where
- open import Common.Nat renaming (zero to Z; suc to S)
- open import Common.IO
- open import Common.Unit
- data _×_ (A B : Set) : Set where
- _,_ : A → B → A × B
- data P {A B : Set} : A × B → Set where
- _,_ : (x : A) (y : B) → P (x , y)
- data Q {A : Set} : A × A → Set where
- [_] : (x : A) → Q (x , x)
- test : let t : Set
- t = (Nat × Nat) × Nat
- in (q : t × t) → Q q → Nat
- test ._ [ (Z , Z ) , Z ] = Z
- test ._ [ (Z , S l) , m ] = S l + m
- test ._ [ (S Z , Z ) , m ] = S m
- test ._ [ (S Z , S l) , m ] = S Z + m + l
- test ._ [ (S (S n) , l ) , m ] = S (S n) + m + l
- test ._ [ (n , l ) , m ] = m
- main : IO Unit
- main = let tTyp : Set
- tTyp = (Nat × Nat) × Nat
- t0 : tTyp
- t0 = (0 , 0) , 0
- t1 : tTyp
- t1 = (0 , 1) , 2
- t2 : tTyp
- t2 = (1 , 0) , 3
- t3 : tTyp
- t3 = (1 , 4) , 5
- t4 : tTyp
- t4 = (3 , 2) , 10
- t5 : tTyp
- t5 = (0 , 0) , 4
- pn : tTyp → IO Unit
- pn t = printNat (test (t , t) [ t ])
- in pn t0 ,, -- 0
- pn t1 ,, -- 3
- pn t2 ,, -- 4
- pn t3 ,, -- 9
- pn t4 ,, -- 15
- pn t5 ,, -- 4
- return unit
|