Функция Cast не работает в запросе Update - получение ошибки арифметического переполнения

Просто не совпадайте с шаблоном на p x:

predicate {A} {p} {xs = []} = all[]
predicate {A} {p} {x :: xs} with inspect (p x) 
predicate {A} {p} {x :: xs} | it true  pf rewrite pf = {!!}
predicate {A} {p} {x :: xs} | it false pf rewrite pf = {!!}

Обратите внимание, что идиома inspect устарела. Используйте для проверки стероидов . Вы можете найти его в стандартной библиотеке здесь .

Ваш код становится

predicate : ∀ {A : Set} {p : A -> Bool } {xs : List A } -> 
            All (satisfies p) (filter p xs)  
predicate {A} {p} {xs = []} = all[]
predicate {A} {p} {xs = x :: xs} with p x | inspect p x
predicate {A} {p} {x :: xs} | true  | [ pf ] = {!!}
predicate {A} {p} {x :: xs} | false | [ pf ] = {!!}

, когда pf находится в первом отверстии

.Data.Unit.Core.reveal (.Data.Unit.Core.hide p x) == true

, который бета-уменьшается до p x == true. То есть если у вас есть

test : ∀ {A : Set} {p : A -> Bool} {x} -> p x == true -> True
test _ = _ 

, тогда размещение test {p = p} pf в первом отверстии и ввод C-c C-d дает вам True.

0
задан marc_s 13 July 2018 в 16:03
поделиться