У меня есть следующее определениеПодставив равный член в равенстве доказательство
open import Relation.Binary.PropositionalEquality
data _≅_ (A B : Set) : Set where
mkBij : (f : A → B) (g : B → A)
→ (∀ a → a ≡ g (f a))
→ (∀ b → b ≡ f (g b))
→ A ≅ B
И я пытаюсь показать транзитивность. У меня есть то, что мне нужно, но я не знаю, как их объединить, чтобы получить объект доказательства, который я хочу. До сих пор это доказательство.
transtv : ∀ {A B C} → A ≅ B → B ≅ C → A ≅ C
transtv (mkBij f₁ g₁ x y) (mkBij f₂ g₂ w z) =
mkBij (λ x₁ → f₂ (f₁ x₁)) (λ z₁ → g₁ (g₂ z₁))
(λ a → let xa = x a
wb = w (f₁ a)
in {!!})
(λ c → let zc = z c
yb = y (g₂ c)
in {!!})
В первое отверстие, у меня есть следующие: (второе отверстие идентично)
Goal: a ≡ g₁ (g₂ (f₂ (f₁ a)))
wb : f₁ a ≡ g₂ (f₂ (f₁ a))
xa : a ≡ g₁ (f₁ a)
Теперь, очевидно, что, если я заменю f₁ a
с g₂ (f₂ (f₁ a))
в xa
добраться до цели. Но я не знаю, как сделать эту замену в agda. Какую функцию или конструкцию языка мне нужно сделать?