Как я могу использовать agda2-mode для генерации паттернов, когда ожидаю увидеть абсурдный паттерн?
Например, мы доказываем 2 + 2 != 5
:
data _+_≡_ : ℕ → ℕ → ℕ → Set where
znn : ∀ {n} → zero + n ≡ n
sns : ∀ {m n k} → m + n ≡ k → suc m + n ≡ suc k
И я могу доказать это вручную:
2+2≠5 : 2 + 2 ≡ 5 → ⊥
2+2≠5 (sns (sns ()))
Но я хочу шаблон (sns (sns ()))
быть сгенерированным (так же, как заполнение дыры). Есть ли способы добиться этого?
Я использую Emacs 25 с agda2-режимом.
1 ответ
Решение
Итак, допустим, вы начинаете с этой конфигурации:
2+2≠5 : 2 + 2 ≡ 5 → ⊥
2+2≠5 h = {!!}
В этом случае вы можете использовать макросы клавиатуры emacs, потому что подстрок генерируется путем сопоставления с h
также будет назван h
, Итак, используя:
<f3>
(начать запись макроса)C-c C-f
(перейти к отверстию)C-c C-c h RET
(матч наh
)<f4>
(запишите макрос)
Вы записали действие "переход к первой цели, совпадающей на h". Теперь вы можете продолжать нажимать <f4>
пока вы не дойдете до абсурда.