`true : β―βΊ πΈ
`true = val β¨ x β© β¨ y β© x
`false : β―βΊ πΈ
`false = val β¨ x β© β¨ y β© y
`pair : β―βΊ πΈ
`pair = val β¨ a β© β¨ b β© β¨ i β© i `Β· a `Β· b
`fst : β―βΊ πΈ
`fst = val β¨ p β© p `Β· `true
`snd : β―βΊ πΈ
`snd = val β¨ p β© p `Β· `false
abstract
`trueββ : β a β β β `true β a β
`trueββ x = subst β_β (sym (abs-Ξ²β [] ((_ , x) β· []))) (absβ _ _)
`falseββ : β a β β β `false .fst % a β
`falseββ ah = subst β_β (sym (abs-Ξ²β [] ((_ , ah) β· []))) (absβ _ _)
`false-Ξ² : β a β β β b β β `false β a β b β‘ b
`false-Ξ² {a} {b} ah bh = abs-Ξ²β [] ((b , bh) β· (a , ah) β· [])
`true-Ξ² : β a β β β b β β `true β a β b β‘ a
`true-Ξ² {a} {b} ah bh = abs-Ξ²β [] ((b , bh) β· (a , ah) β· [])
`pairββ : β a β β β b β β β `pair .fst % a % b β
`pairββ {a} {b} ah bh = subst β_β (sym (abs-Ξ²β [] ((b , bh) β· (a , ah) β· []))) (absβ _ ((b , bh) β· (a , ah) β· []))
`fst-Ξ² : β a β β β b β β `fst β (`pair β a β b) β‘ a
`fst-Ξ² {a} {b} ah bh =
`fst β (`pair β a β b) β‘β¨ abs-Ξ² _ [] (_ , `pairββ ah bh) β©
`pair β a β b β `true β‘β¨ abs-Ξ²β [] (`true β· (b , bh) β· (a , ah) β· []) β©
`true β a β b β‘β¨ `true-Ξ² ah bh β©
a β
`snd-Ξ² : β a β β β b β β `snd β (`pair β a β b) β‘ b
`snd-Ξ² {a} {b} ah bh =
`snd β (`pair β a β b) β‘β¨ abs-Ξ² _ [] (_ , `pairββ ah bh) β©
`pair β a β b β `false β‘β¨ abs-Ξ²β [] (`false β· (b , bh) β· (a , ah) β· []) β©
`false β a β b β‘β¨ `false-Ξ² ah bh β©
b β