0
에 붙어 있습니다. 아래에 표시된 접미어과 같은 유도 관계가 있습니다. 나는 관련 theorem suffix_app을 증명하려고 노력하고 있습니다. 내 일반적인 생각은 xs가 ys와 같거나 몇 가지 일련의 요소임을 나타내는 접미사 xs ys이라는 사실을 사용하는 것입니다. cons '무한 반전 루프 Coq
Require Import Coq.Lists.List.
Import ListNotations.
Inductive suffix {X : Type} : list X -> list X -> Prop :=
| suffix_end : forall xs,
suffix xs xs
| suffix_step : forall x xs ys,
suffix xs ys ->
suffix (x :: xs) ys.
Theorem suffix_app : forall (X: Type) (x:X) (xs ys: list X),
suffix xs ys ->
exists ws, xs = ws ++ ys.
Proof.
intros.
inversion H.
- exists []. reflexivity.
-
그러나 내가 반전을 사용할 때 실제로 ys와 같은 용어에 "도달"할 수는 없습니다. 따라서 나는 현재 코드에서 볼 수있는 지점에 갇혀있다.
Theorem suffix_app (X: Type) (xs ys: list X) :
suffix xs ys -> exists ws, xs = ws ++ ys.
Proof.
induction 1 as [|x xsp ysp hs [zs zeq]]; [now exists []|].
now exists (x :: zs); rewrite zeq.
Qed.
당신이 접미사의 다른 전산 버전을 사용할 수 있습니다 thou를 실제 이유 :
안녕하십니까. 응답이 늦어서 죄송합니다. 실제로 이것은 작동합니다. 그러나 왜 가설 zeq를 얻기 위해 as 절과 함께 유도 1을 호출해야합니까? 나는 as 절없이 실험을하고 있었고 Zeq (Coq에서 자동으로 생성 된 이름으로)를 찾을 것으로 예상되는 곳에서는 그런 가설이 없었기 때문에 as 절로 풀이 할 수 없었다. 죄송합니다. Coq의 이러한 측면을 잘 이해하지 못합니다. –
필자가 잘 모르겠다면,'as' 절을 사용하든 그렇지 않든 동일한 결과를 얻어야합니다. 당신이 옳은 일에 유도를 부르고 있는지 확인하십시오! 자동 생성 된 이름을 사용하는 경우 Coq에서 이름 지정 체계를 변경하려고하므로 모든 증명이 더 이상 유효하지 않다고 결정할 때 많은 어려움을 겪을 것입니다. – ejgallego