2017-11-06 2 views
2

例えば、我々は2 + 2 != 5を証明している:不条理なパターンが見込まれると、パターンを生成するためにagda2-modeをどのように使用できますか?

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()))が発生することにしたいです。それを達成する方法はありますか?

私はagda2モードでEmacs 25を使用しています。

+0

[issue](https://github.com/agda/agda/issues/2069#issuecomment-330351186)と多少類似しています。この機能を使うと '2 + 2≠5(snsN())'と書くことができます。ここで 'snsN'は適切な数の' sns'を生成します。しかし、それほどオートメーションはありません。 – user3237465

答えて

3

オクラホマので、あなたはこの構成から始めましょう:

2+2≠5 : 2 + 2 ≡ 5 → ⊥ 
2+2≠5 h = {!!} 

この場合hに照合することによって生成されたサブ用語はまた、hという名前になりますので、あなたがEmacsのkeyboard macrosを使用することができます。そう使用:

  • <f3>(マクロの記録を開始)
  • C-c C-f(ホールに移動)
  • C-c C-c h REThに一致)
  • <f4>(マクロを記録する)

あなたは "最初のゴールへのマッチング"のアクションを記録しました。あなたは不条理なケースに達するまで<f4>を押し続けることができます。

+0

これは素晴らしいです!より良いアプローチが1日に表示されない場合、私はあなたの答えを受け入れられるように設定します:D – ice1000

関連する問題