저는 "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
이기 때문에 ∃
이라는 명제를 보여줌으로써 실존 적 명제를 증명할 수 있어야합니다.
왜 이사벨이 알아낼 수 없습니다, 르네을하는 데 도움이? 목표가'∃ x '형식의 명제이면. P'; 그래서 이사벨은 실존 적 도입을 자동적으로 선택해야한다. 다른 상황에서 (예를 들어, 질문 [Isabelle/Isar에서 여러 변수로 존재 론적 명제를 효율적으로 증명할 수 있습니까?]] (https://stackoverflow.com/questions/47464404)의 예제 코드에서 여기에 없습니까? –
사실로 '따라서'로 묶여 있기 때문에 '규칙'과 같은 증명 방법은 모든 묶여있는 사실을 규칙의 가정으로 통합하여 올바른 순서로 적용 할 수있는 경우에만 작동합니다. 메소드를 명시 적으로 제공하지 않는다면, Isabelle은'rule'과 유사한'standard'를 사용할 것입니다 .TL과 DR은 사실상'proof'에 연결하기를 거의하지 않습니다. 대신'show'를 사용하십시오. 여기서 '따라서'. –