- 
          
- 
                Notifications
    You must be signed in to change notification settings 
- Fork 11
Tutorial 4: Equivalence I
        Sven Nilsen edited this page Nov 6, 2022 
        ·
        7 revisions
      
    In the last tutorial you learned that mathematical ideas can be expressed using paths.
Adding two even integers always results in an even number.
can be expressed as:
add [even] [:] (true, true) ->| true
However, this is not the whole story!
add [even] [:]
  (true, true) ->| true
  (false, false) ->| true
  (true, false) ->| false
  (false, true) ->| false
We could write all these functions as a computation using ^ (xor) and ! (not):
add [even] [:] (X, Y) ->| ( !(X ^ Y) )
This is the same as checking the two boolean values for equality:
add [even] [:] (X, Y) ->| ( X == Y )
If an integer is even, then it is not odd and vice versa.
So, we can write:
add [odd] [:] (X, Y) ->| ( X ^ Y )
With a function xor(bool, bool) ->| bool, we can write:
add [odd] <=> xor
Now we have expressed an equivalence between two functions.
In the next tutorial we will explore further what equivalence means.