2017-11-24 27 views
0

저는 "4.6 Isabelle/HOL에서의 프로그래밍과 증명"에서 Exercise 4.6을 풀려고합니다. 목록을 집합으로 변환하고 보조 정리 "x ∈ elems xs ⟹ ∃ ys zs . xs = ys @ x # zs ∧ x ∉ elems ys"을 증명하는 함수 elems :: "'a list ⇒ 'a set"을 정의 할 것을 요구합니다. 지금까지, 나는 지금까지 온 :이 시점에서"4.6 Isabelle/HOL에서의 프로그래밍과 증명"의 연습 4.6에있는 보조 정리를 증명하려면 어떻게해야합니까?

fun elems :: "'a list ⇒ 'a set" where 
    "elems [] = {}" | 
    "elems (x # xs) = {x} ∪ elems xs" 

lemma first_occ: "x ∈ elems xs ⟹ ∃ ys zs . xs = ys @ x # zs ∧ x ∉ elems ys" 
proof (induction xs) 
    case Nil 
    thus ?case by simp 
next 
    case (Cons u us) 
    show ?case 
    proof cases 
    assume "x = u" 
    thus ?case 
    proof 
    ⟨…⟩ 

, 나는 "초기 증거 방법을 적용 할 수 없습니다"라는 오류 메시지가 표시됩니다. 목표는 ?case이고 제안은 ∃ ys zs . u # us = ys @ x # zs ∧ x ∉ elems ys이기 때문에 이라는 명제를 보여줌으로써 실존 적 명제를 증명할 수 있어야합니다.

답변

0

라인의 문제점 proofproof은 일부 기본 규칙을 적용하기위한 것입니다. 위의 증거에서, 이사벨은 당신이 실존 적 도입을 수행하기를 원한다는 것을 알 수 없습니다. 따라서 예를 들어 proof (intro exI)과 같은 이름을 계속 사용하여 시스템에 명시 적으로 알리고 싶을 수 있습니다. 나는 희망

,이

+0

왜 이사벨이 알아낼 수 없습니다, 르네을하는 데 도움이? 목표가'∃ x '형식의 명제이면. P'; 그래서 이사벨은 실존 적 도입을 자동적으로 선택해야한다. 다른 상황에서 (예를 들어, 질문 [Isabelle/Isar에서 여러 변수로 존재 론적 명제를 효율적으로 증명할 수 있습니까?]] (https://stackoverflow.com/questions/47464404)의 예제 코드에서 여기에 없습니까? –

+0

사실로 '따라서'로 묶여 있기 때문에 '규칙'과 같은 증명 방법은 모든 묶여있는 사실을 규칙의 가정으로 통합하여 올바른 순서로 적용 할 수있는 경우에만 작동합니다. 메소드를 명시 적으로 제공하지 않는다면, Isabelle은'rule'과 유사한'standard'를 사용할 것입니다 .TL과 DR은 사실상'proof'에 연결하기를 거의하지 않습니다. 대신'show'를 사용하십시오. 여기서 '따라서'. –