QBool.switch : ∀(a: QBool) ∀(P: ∀(x: QBool) *) ∀(t: (P QBool.true)) ∀(f: (P QBool.false)) (P a) = λa λP λt λf (~(~a P) λx (P a) λtag switch tag = tag { 0: λx (x t) +: λx (switch tag_1 = tag-1 { 0: λx (x f) +: λx (x λe (Empty.absurd e *)) }: ∀(x: ∀(x: switch tag_1 = tag_1 { 0: (P QBool.false) +: ∀(x: Empty) * }: * ) (P a) ) (P a) x ) }: ∀(x: ∀(x: switch tag = tag { 0: (P QBool.true) +: switch tag_1 = tag-1 { 0: (P QBool.false) +: ∀(x: Empty) * }: * }: * ) (P a) ) (P a) ) QBool2.switch : ∀(a: QBool2) ∀(P: ∀(x: QBool2) *) ∀(t: (P QBool2.true)) ∀(f: (P QBool2.false)) (P a) = λa λP λt λf (~a P λtag switch tag = tag { 0: t +: switch tag_1 = tag-1 { 0: f +: λe (~e λx *) }: switch tag_1 = tag_1 { 0: (P QBool2.false) +: ∀(e: Empty) * }: * }: switch tag = tag { 0: (P QBool2.true) +: switch tag_1 = tag-1 { 0: (P QBool2.false) +: ∀(e: Empty) * }: * }: * )