When trying to prove a property over functions using list, I had to prove that the property is preserved by map
over a list. Gladly, I found this useful congruence proof in Agda's standard library (here):
map-cong : ∀ {f g : A → B} → f ≗ g → map f ≗ map g
map-cong f≗g [] = refl
map-cong f≗g (x ∷ xs) = cong₂ _∷_ (f≗g x) (map-cong f≗g xs)
I am trying to do my proof with respect to propositional equality ≡
but map-cong
proves pointwise equality ≗
. I have several questions here:
I noticed that
map-cong
was previously implemented via≡
but was generalized (I found this issue). This suggests that≗
is a generalization of≡
. Is there a way to conclude propositional equality from pointwise equality? Something like a functionf ≗ g → f ≡ g
?When looking at the implementation, point-wise equality seems to be defined as propositional equality for functions via the extensionality axiom: Two functions are equal if they yield the same results for all inputs. This is emphasized by the above definition of
map-cong
which indeed matches not only on the prooff≗g
but also on possible input arguments. Is my understanding correct? Is there any documentation or explanation on the implementation of≗
? I found the implementation in the standard library to be undocumented and rather intricate, split across several files and using multiple levels of abstraction.(Is there any way to conventiently browse the standard library except for browsing the source code (e.g., via
grep
or clicking in Github)?)