평등 증거에 표현식을 바꾸기 :나는이 속성을 증명하기 위해 노력하고 이드리스의 연습으로 이드리스
plusDouble : (a:Nat) -> (a + a) = a*2
plusDouble a =
rewrite multCommutative a 2 in
rewrite plusZeroRightNeutral a in Refl
그래서 내가 basicall 생각 :
lemma1 : {x:Nat} -> {y:Nat} -> {z:Nat} -> (x + x) + (x * z) = (y + y) + (y * z) -> (x * (S (S z))) = (y * (S (S z)))
lemma1 {x=x} {y=y} {z=z} prf = ?todo
물론, 난 이미 입증했다 y는 (x + x)
을 (x*2)
으로 바꾼 다음 lemma1
을 증명하기 위해 배포 가능성을 호출하면됩니다. 나는이 대체 방법을 모른다. 나는 단순히
rewrite plusDouble x in ...
처럼 뭔가를 할 수하지만 교체 할 표현식이 목표에 prf
과에 있기 때문에 그것은 분명히 작동하지 않습니다 생각했다.
일반적인 접근 방법이 있습니까? 또는이 특별한 경우에 권장할만한 것이 있습니까?
"확장"이란 무슨 뜻인지 설명해 주시겠습니까? 나는 비슷한 문제가있어서 더 자세한 대답에 관심이있을 것이다. – Markus
다시 말하면, 재 작성 규칙으로 사용 된 평등의 왼쪽 부분은 어떤 의미에서 "더 복잡합니다"라는 의미입니다. 예를 들어 someProofMatchingRight에서 plusZeroRightNeutral을 다시 작성할 수 있습니다 (목표 단순화라고합니다).하지만 someProofMatchingZeroPlusRight에서 sym $ plusZeroRightNeutral을 바로 다시 작성할 수 있습니다 (이것이 목표 확장이라고합니다). 아마 더 정확한 용어 인 idk가있을 것입니다. – user1747134