1
module tests.Forcing4 where
3
open import Prelude.Nat
4
open import Prelude.Fin
6
open import Prelude.String
8
open import Prelude.Unit
11
toNat : {n : Nat} → Fin n → Nat
13
toNat (suc _ i) = suc (toNat i)
16
Rel : (X : Set) -> Set1
19
data _<=_ : Rel Nat where
21
s<=s : ∀ m n (m<=n : m <= n) → S m <= S n
27
fromℕ≤ : ∀ {m n} → m ℕ< n → Fin n
28
fromℕ≤ (s<=s .0 n (z<=n .n)) = fz {n}
29
fromℕ≤ (s<=s .(S m) .(S n) (s<=s m n m<=n)) = fs {S n} (fromℕ≤ (s<=s m n m<=n))
32
fromℕ≤-toℕ : ∀ m (i : Fin m) (i<m : forget i ℕ< m) → fromℕ≤ i<m == i
33
fromℕ≤-toℕ .(S n) (fz {n}) (s<=s .0 .n (z<=n .n)) = refl
34
fromℕ≤-toℕ .(S (S n)) (fs .{S n} y) (s<=s .(S (forget y)) .(S n) (s<=s .(forget y) n m≤n)) = cong (\ n -> fs n) (fromℕ≤-toℕ (S n) y (s<=s (forget y) n m≤n))
39
[ S (S n) /2] = S [ n /2]
41
[1/2]-mono : (m n : Nat) -> m <= n -> [ m /2] <= [ n /2]
42
[1/2]-mono .0 .n (z<=n n) = z<=n [ n /2]
43
[1/2]-mono .1 .(S n) (s<=s .0 .n (z<=n n)) = z<=n [ S n /2]
44
[1/2]-mono .(S (S m)) .(S (S n)) (s<=s .(S m) .(S n) (s<=s m n m<=n)) = s<=s [ m /2] [ n /2] ([1/2]-mono m n m<=n)
46
showEq : {X : Set}{A : X} -> A == A -> String
49
show<= : {m n : Nat} -> m <= n -> String
50
show<= (z<=n n) = "0 <= " +S+ natToString n
51
show<= (s<=s m n m<=n) = natToString (S m) +S+ " <= " +S+ natToString (S n)
54
foo : (n : Nat) -> S n <= n -> Bot
55
foo .(S n) (s<=s .(S n) n le) = foo n le
58
main = putStrLn (showEq (fromℕ≤-toℕ 3 (inc (inject 1)) le)) ,,
59
putStrLn (show<= ([1/2]-mono 4 6 le'))
62
le = s<=s _ _ (s<=s _ _ (z<=n _))
64
le' = s<=s _ _ (s<=s _ _ (s<=s _ _ (s<=s _ _ (z<=n _))))