논문에서 증명을 할 때, 연관성과 을 누른 다음 왼쪽 신원은 신원 관계의 과대 키 속성을 사용합니다 - 전이성. 즉, p : x ≡ y
과 q : y ≡ z
의 증명이있는 경우이를 trans p q : x ≡ z
의 단일 증명으로 결합 할 수 있습니다. trans
기능은 이미 표준 라이브러리 (Relation.Binary.PropositionalEquality
모듈)의 일부이지만, 그 구현은 어쨌든 매우 간단하다 : 나는 monoids 및 그룹의 약간 다른 프리젠 테이션을 사용하고
trans : {A : Set} {i j k : A} → i ≡ j → j ≡ k → i ≡ k
trans refl eq = eq
,하지만 당신은 쉽게 증거를 적용 할 수 있습니다 귀하의 시나리오에.
open import Function
open import Relation.Binary.PropositionalEquality
Op₁ : Set → Set
Op₁ A = A → A
Op₂ : Set → Set
Op₂ A = A → A → A
record IsMonoid {A : Set}
(_∙_ : Op₂ A) (ε : A) : Set where
field
right-id : ∀ x → x ∙ ε ≡ x
left-id : ∀ x → ε ∙ x ≡ x
assoc : ∀ x y z → x ∙ (y ∙ z) ≡ (x ∙ y) ∙ z
record IsGroup {A : Set}
(_∙_ : Op₂ A) (ε : A) (_⁻¹ : Op₁ A) : Set where
field
monoid : IsMonoid _∙_ ε
right-inv : ∀ x → x ∙ x ⁻¹ ≡ ε
left-inv : ∀ x → x ⁻¹ ∙ x ≡ ε
open IsMonoid monoid public
(간단하게하기 위하여, 들여 쓰기 코드가 IsGroup
기록의 일부로서 기록된다). 이 목표 (x ⁻¹ ∙ x) ∙ y ≡ y
우리 잎, 즉 assoc (x ⁻¹) x y
입니다
lemma : ∀ x y → x ⁻¹ ∙ (x ∙ y) ≡ y
lemma x y = ?
첫 번째 단계는 연관성을 사용하는 것입니다 - 우리가 증명되면 우리가 함께 trans
를 사용하여이 두 부분을 병합 할 수 있습니다 : 우리는 것을 증명하고 싶습니다 :
lemma x y =
trans (assoc (x ⁻¹) x y) ?
오른쪽 역 특성을 적용해야하지만 유형이 적합하지 않은 것 같습니다. 우리는 left-inv x : x ⁻¹ ∙ x ≡ ε
이 있고 여분의 것을 어떻게 처리해야합니까? y
. 이것은 정체성의 또 다른 속성이 작용할 때입니다.
일반 기능은 신원을 보존합니다. f
함수와 p : x ≡ y
증명이있는 경우 x
및 y
에 f
을 적용 할 수 있으며 증명은 여전히 유효해야합니다 즉 cong f p : f x ≡ f y
이어야합니다. 다시 말하지만 구현은 이미 표준 라이브러리에 있지만 여기에있는 내용은 다음과 같습니다.
cong : {A : Set} {B : Set}
(f : A → B) {x y} → x ≡ y → f x ≡ f y
cong f refl = refl
어떤 기능을 적용해야합니까? 좋은 후보자는 λ z → z ∙ y
인데, 이는 누락 된 y
부분을 추가합니다. 그래서 우리는이 :
cong (λ z → z ∙ y) (left-inv x) : (x ⁻¹ ∙ x) ∙ y ≡ ε ∙ y
다시 말하지만, 우리가 ε ∙ y ≡ y
것을 증명해야하고 우리는 다음 trans
를 사용하는 함께 조각들을 수 있습니다. 하지만이 마지막 부동산은 쉽습니다. 단지 left-id y
입니다.모두 함께 퍼팅, 우리가 얻을 :
lemma : ∀ x y → x ⁻¹ ∙ (x ∙ y) ≡ y
lemma x y =
trans (assoc (x ⁻¹) x y) $
trans (cong (λ z → z ∙ y) (left-inv x)) $
(left-id y)
표준 라이브러리이 우리에게 어떤 좋은 문법 설탕을 제공합니다
장면 뒤에
open ≡-Reasoning
lemma′ : ∀ x y → x ⁻¹ ∙ (x ∙ y) ≡ y
lemma′ x y = begin
x ⁻¹ ∙ (x ∙ y) ≡⟨ assoc (x ⁻¹) x y ⟩
(x ⁻¹ ∙ x) ∙ y ≡⟨ cong (λ z → z ∙ y) (left-inv x) ⟩
ε ∙ y ≡⟨ left-id y ⟩
y ∎
, ≡⟨ ⟩
그 증거를 병합 정확하게 trans
를 사용합니다. 유형은 선택 사항입니다 (교정 자체는 그에 대한 충분한 정보를 가지고 있습니다).
는 원래 Group
기록을 얻으려면, 우리는 같은 것을 수행 할 수 있습니다
record Group : Set₁ where
field
Carrier : Set
_∙_ : Op₂ Carrier
ε : Carrier
_⁻¹ : Op₁ Carrier
isGroup : IsGroup _∙_ ε _⁻¹
open IsGroup isGroup public
가 .. 자세한 답변을 주셔서 너무 감사 나는 당신의 노력 – ymmagdi
또 하나의 점에 감사를하는 $ 것입니다 당신은 '보조 정리'기능을 추가 했습니까? – ymmagdi
@ymmagdi : 괄호의 수를 줄이는 연산자 인'f $ x'는 단지'fx'이므로'f (g x)'대신'f $ g x'를 쓸 수 있습니다. – Vitus