Agda 证明中的替代项
Substitute terms in Agda proofs
我是 Agda 的初学者,我在这里的证明中遇到了一个漏洞:
import Relation.Binary.PropositionalEquality as Eq
open Eq using (_≡_; refl; cong; sym; subst; trans)
open Eq.≡-Reasoning using (begin_; _≡⟨⟩_; step-≡; _∎)
data Tile : Set where
-- 90° rotation
postulate cw : Tile → Tile
-- -90° rotation
postulate ccw : Tile → Tile
postulate cw/cw/cw/cw : ∀ (t : Tile) → cw (cw (cw (cw t))) ≡ t
postulate ccw/cw : ∀ (t : Tile) → ccw (cw t) ≡ t
postulate cw/ccw : ∀ (t : Tile) → cw (ccw t) ≡ t
cw/cw/cw/ccw : ∀ (t : Tile) → ccw t ≡ cw (cw (cw t))
cw/cw/cw/ccw t =
begin
ccw t
≡⟨ cong ccw ( sym (cw/cw/cw/cw t)) ⟩
ccw ( cw ( cw ( cw ( cw t))))
≡⟨ {!!} ⟩
cw (cw (cw t))
∎
我只需要证明给定 ccw/cw
假设,
ccw (cw (cw (cw (cw t)))) ≡ cw (cw (cw t))
找到了:我需要把它放进洞里:(ccw/cw ( cw ( cw ( cw t))))
产生这个:ccw (cw ( cw ( cw ( cw t)))) ≡ ( cw ( cw ( cw t)))
,
基本上用 ( cw ( cw ( cw t)))
替换 t
我是 Agda 的初学者,我在这里的证明中遇到了一个漏洞:
import Relation.Binary.PropositionalEquality as Eq
open Eq using (_≡_; refl; cong; sym; subst; trans)
open Eq.≡-Reasoning using (begin_; _≡⟨⟩_; step-≡; _∎)
data Tile : Set where
-- 90° rotation
postulate cw : Tile → Tile
-- -90° rotation
postulate ccw : Tile → Tile
postulate cw/cw/cw/cw : ∀ (t : Tile) → cw (cw (cw (cw t))) ≡ t
postulate ccw/cw : ∀ (t : Tile) → ccw (cw t) ≡ t
postulate cw/ccw : ∀ (t : Tile) → cw (ccw t) ≡ t
cw/cw/cw/ccw : ∀ (t : Tile) → ccw t ≡ cw (cw (cw t))
cw/cw/cw/ccw t =
begin
ccw t
≡⟨ cong ccw ( sym (cw/cw/cw/cw t)) ⟩
ccw ( cw ( cw ( cw ( cw t))))
≡⟨ {!!} ⟩
cw (cw (cw t))
∎
我只需要证明给定 ccw/cw
假设,
ccw (cw (cw (cw (cw t)))) ≡ cw (cw (cw t))
找到了:我需要把它放进洞里:(ccw/cw ( cw ( cw ( cw t))))
产生这个:ccw (cw ( cw ( cw ( cw t)))) ≡ ( cw ( cw ( cw t)))
,
基本上用 ( cw ( cw ( cw t)))
t