#import "@preview/prooftrees:0.1.0": * = 1 #tree( axi[$d in [a =_A b]$], uni[$"inv"(d) in ["symm"("symm"(d)) =_[a =_A b] d]$], ) Defined by: $ "inv"(d) equiv "idpeel"(d, (x) id(id(x))) $ Derivation tree: #tree( axi[], uni[$A "set"$], ) = 2 ``` d∈[a=A b] e∈[b=A c] ------------------- trans(d, e) ∈ [a =A c] trans(d,e) ≡ apply(idpeel(d,(x)λy.y),e) ``` ``` trans (trans e f) g == trans e (trans f g) apply(idpeel( apply(idpeel(e, (x)\y.y), f), (x)\y.y, ), g) ``` = 3 #tree( axi[$d in [a =_A b]$], uni[$"unitl"(a, d) ∈ ["trans"(id(a), d) =_[a =_A b] d]$] ) --- Simplifying the output type: $ "trans"(id(a), d) &=_[a =_A b] d \ "apply"("idpeel"(id(a), (x)lambda y.y), d) &=_[a =_A b] d \ "apply"(((x)lambda y.y)(a), d) &=_[a =_A b] d \ "apply"((lambda y.y), d) &=_[a =_A b] d \ d &=_[a =_A b] d \ $ This is just a reflexive equality so can be satisfied by $"id"$: $ "unitl"(a, d) equiv id(d) $ = 4 #tree( axi[$d in [a =_A b]$], uni[$"unitr"(d, b) in ["trans"(d, id(b)) =_[a =_A b] d]$], ) $ "unitr"(d, b) equiv "idpeel"(d, (x)id(id(x))) \ $