Я пытаюсь понять коиндукцию (читаю книгу Санджорджи), используя Агду. Мне уже удалось доказать некоторые простые равенства между потоками, но я застрял, пытаясь доказать, что все натуральные числа (значения типа ℕ) находятся в потоке allℕ --- функция allℕisℕ. Любой совет о том, как мне поступить с этим?
open import Coinduction
open import Data.Nat
module Simple where
data Stream (A : Set) : Set where
_∷_ : A → ∞ (Stream A) → Stream A
infix 4 _∈_
data _∈_ {A : Set} : A → Stream A → Set where
here : ∀ {x xs} → x ∈ x ∷ xs
there : ∀ {x y xs} → (x ∈ ♭ xs) → x ∈ y ∷ xs
enum : ℕ → Stream ℕ
enum n = n ∷ (♯ enum (suc n))
allℕ : Stream ℕ
allℕ = enum 0
allℕisℕ : ∀ (n : ℕ) → n ∈ allℕ
allℕisℕ n = ?
cong : ∀ {m n} → n ∈ enum m → suc n ∈ enum (suc m)
. Я добавлю более подробный ответ, когда у меня будет свободная минутка. - person Vitus   schedule 21.02.2015n ∈ enum m
использоватьcong
лемму. - person Rodrigo Ribeiro   schedule 21.02.2015n
и обработка обоих случаев.cong
очень полезен для случаяsuc
. - person Vitus   schedule 22.02.2015