1
module PruningNonMillerPattern where
3
data _≡_ {A : Set}(a : A) : A -> Set where
10
test : let X : Nat -> Nat -> Nat
15
(({x y : Nat} -> X x x ≡ suc (Y x y)) ->
16
({x y : Nat} -> Y x x ≡ x) ->
17
({x y : Nat} -> X (Y x y) y ≡ X x x) -> C) -> C
18
test C k = k refl refl refl
19
{- none of these equations is immediately solvable. However,
20
from 1. we deduce that Y does not depend on its second argument, thus
21
from 2. we solve Y x y = x, and then
22
eqn. 3. simplifies to X x y = X x x, thus, X does not depend on its second arg,
23
we can then solve using 1. X x y = suc x
26
test' : let X : Nat -> Nat -> Nat
31
(({x y : Nat} -> X x (suc x) ≡ suc (Y x y)) -> -- non-pattern lhs
32
({x y : Nat} -> Y x x ≡ x) ->
33
({x y : Nat} -> X (Y x y) y ≡ X x x) -> C) -> C
34
test' C k = k refl refl refl
37
data Sing {A : Set} : A → Set where
38
sing : (x : A) -> Sing x
40
test2 : let X : Nat -> Nat -> Nat
45
(({x y : Nat} -> X x x ≡ suc (Y x (Sing (suc y)))) ->
46
({x y : Nat} -> Y x (Sing x) ≡ x) ->
47
({x y : Nat} -> X (Y x (Sing y)) y ≡ X x x) -> C) -> C
48
test2 C k = k refl refl refl
54
test3 : let X : Nat -> Nat -> Nat
59
(({x y : Nat} -> X x x ≡ suc (Y x (T y -> T y))) ->
60
({x y : Nat} -> Y x (Sing x) ≡ x) ->
61
({x y : Nat} -> X (Y x (Sing y)) y ≡ X x x) -> C) -> C
62
test3 C k = k refl refl refl
64
test4 : let X : Nat -> Nat -> Nat
66
Y : Nat → (Nat → Nat) -> Nat
69
((∀ {x : Nat} {y : Nat → Nat} -> X x x ≡ suc (Y x (λ k → y zero))) ->
70
(∀ {x : Nat} {y : Nat → Nat} -> Y x (λ k → y zero) ≡ x) ->
71
(∀ {x : Nat} {y : Nat } -> X (Y x (λ k → y)) y ≡ X x x) -> C) -> C
72
test4 C k = k refl refl refl
74
test5 : let X : Nat -> Nat -> Nat
76
Y : Nat -> .Nat -> Nat
79
(({x y : Nat} -> X x (suc x) ≡ suc (Y x (suc y))) -> -- non-pattern lhs
80
({x y : Nat} -> Y x x ≡ x) ->
81
({x y : Nat} -> X (Y x (suc y)) y ≡ X x x) -> C) -> C
82
test5 C k = k refl refl refl