```
{-# OPTIONS --cubical-compatible #-}
module Padova2025.Explorations.Uncountability.Impossible.Toy where
```

```
open import Padova2025.ProgrammingBasics.Booleans
open import Padova2025.ProgrammingBasics.Naturals.Base
open import Padova2025.ProgrammingBasics.Lists
open import Padova2025.ProgrammingBasics.HigherOrder
open import Padova2025.ProvingBasics.Termination.Gas
open import Padova2025.Explorations.Uncountability.Applications

_◂_ : Bool  Cantor  Cantor
x  xs = λ { zero  x ; (succ n)  xs n }

{-# NON_TERMINATING #-}
ε : (Cantor  Bool)  Cantor
ε P = x  ε (P  (x ◂_))
  where
  x : Bool
  x = P (false  ε (P  (false ◂_)))

has-root? : (Cantor  Bool)  Bool
has-root? P = not (P (ε P))

root : (Cantor  Bool)  Maybe (List Bool)
root P with P (ε P)
... | false = just (map (ε P) (zero  one  two  three  four  []))
... | true  = nothing

_≡?_ : (Cantor  Bool)  (Cantor  Bool)  Bool
P ≡? Q = not (has-root?  xs  not (xor (P xs) (Q xs))))
  where
  xor : Bool  Bool  Bool
  xor false false = false
  xor false true  = true
  xor true  false = true
  xor true  true  = false
```