Tôi đang cố gắng để sử dụng bình đẳng heterogenous để chứng minh tuyên bố liên quan đến kiểu dữ liệu được lập chỉ mục này:tương đẳng cho bình đẳng heterogenous
data Counter : ℕ → Set where
cut : (i j : ℕ) → Counter (suc i + j)
tôi đã có thể viết bằng chứng của tôi sử dụng Relation.Binary.HeterogenousEquality.≅-Lý luận, nhưng chỉ bằng cách giả sử các tài sản tương đẳng sau:
Counter-cong : ∀ {n n′} {k : Counter n} {k′ : Counter n′} →
{A : ℕ → Set} → (f : ∀{n} → Counter n → A n) →
k ≅ k′ → f k ≅ f k′
Counter-cong f k≅k′ = {!!}
Tuy nhiên, tôi không thể mô hình phù hợp trên k≅k′
là refl
mà không nhận được thông báo lỗi sau từ trình kiểm tra loại:
Refuse to solve heterogeneous constraint
k : Counter n =?= k′ : Counter n′
và nếu tôi cố gắng phân tích trường hợp theo số k≅k′
(tức là bằng cách sử dụng C-c C-c
từ front-end Emacs) để đảm bảo tất cả các đối số ngầm được kết hợp đúng cách đối với những hạn chế của họ áp đặt bởi refl
với, tôi nhận được
Cannot decide whether there should be a case for the constructor
refl, since the unification gets stuck on unifying the
inferred indices
[{.Level.zero}, {Counter n}, k]
with the expected indices
[{.Level.zero}, {Counter n′}, k′]
(nếu bạn quan tâm, đây là một số không phù hợp nền: Eliminating subst to prove equality)
Để giải quyết sự cố, tôi hiện đang sử dụng loại được thay thế thay vì chỉ mục được lập chỉ mục: 'bộ đếm dữ liệu (n: ℕ): Đặt nơi cắt: (ij: ℕ) → (i + j + 1 = n: suc (i + j) ≡ n) → Số lượt truy cập n' – Cactus