2017-04-26 12 views
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를 실제 이유 :

답변

1

귀하의 증거는 단순히 예를 들어, 임의의 구조에 유도에 의해 다음과 같습니다.

+0

안녕하십니까. 응답이 늦어서 죄송합니다. 실제로 이것은 작동합니다. 그러나 왜 가설 zeq를 얻기 위해 as 절과 함께 유도 1을 호출해야합니까? 나는 as 절없이 실험을하고 있었고 Zeq (Coq에서 자동으로 생성 된 이름으로)를 찾을 것으로 예상되는 곳에서는 그런 가설이 없었기 때문에 as 절로 풀이 할 수 없었다. 죄송합니다. Coq의 이러한 측면을 잘 이해하지 못합니다. –

+1

필자가 잘 모르겠다면,'as' 절을 사용하든 그렇지 않든 동일한 결과를 얻어야합니다. 당신이 옳은 일에 유도를 부르고 있는지 확인하십시오! 자동 생성 된 이름을 사용하는 경우 Coq에서 이름 지정 체계를 변경하려고하므로 모든 증명이 더 이상 유효하지 않다고 결정할 때 많은 어려움을 겪을 것입니다. – ejgallego