I think eternal salvation and indelible mark of ordination are better illustrated by monads. Once you go through a convert : α → α Christian function, the original sin : α → β function is no longer accessible for you, only sinM : α → α Christian.
In catholicism, there’s a Priest monad: ordain : α → α Priest. A person who was ordained can be banned for administering sacraments, but if he does, they are still valid.
Since there are no demonination that has both perseverance of the saints and indelible mark of ordination doctrines, in practice there is no need for a monad transformer that combines Christian and Priest monads, but I’m pretty certain that future computational theologians will work it out.
(>>= (convert . sin)) :: Christian α → Christian β
is perfectly accessible (if you’ll forgive the Haskell syntax). If I’m following your analogy correctly, doesn’t this suggest that a Christian α can still sin? What would the bind function even mean?
That’s an artifact of late night writing. With the α →β everyone can sin indeed. Perhaps a better analogy would be that the original sin function is a α → Damned α, which you cannot use with the bind of the Christian monad.
My first hobby is computer science (which happily also pays the bills), my second hobby is the history of Judaism and Christianity (note that I am neither Jewish nor Christian)…so this is right up my alley. :)
It’s a fun thing to note that in both computer science and western theology, every single one of those example programs could be argued to be both right and wrong simultaneously (for example, there are non-Trinitarian Christians and there are programmers who would argue that the assertions in the Trinity example violate transitive identities…which they do, that’s part of the so-called mystery of the Trinity…).
EDIT: Actually, it’s funny that the JavaScript Trinity program uses == and not ===. I am amusing myself thinking of the implications.
From experience, nontrinitarianism is pretty common among (Dutch?) Mennonites, and per Wikipedia it also is, or has been, common among various other flavours of Anabaptism. Also Jehova’s Witnesses, Oneness Pentecostals, and presumably lots more flavours of Christianity besides. You’ll get even more if you start looking at the difference between (a) what is prescribed by the flavour people identify with, versus (b) what those same people say when you ask them “do you believe that [some specific doctrinal point]” – I promise you Dutch Catholics are going to give massively different answers from Argentine ones. Christianity is a super large, widespread, and varied family of religions…
I think there’s a bug in the javascript for Catholic salvation. Obviously, part of the implementation has been left out (our booleans get modified in another thread?). Assuming that the missing code is merely straightforward calls to change the value of those booleans during the course of life events, rather than some complex logic… then it appears that you only have to get Reconciled once. The rest of your mortal sins are “free”, I guess.
I think eternal salvation and indelible mark of ordination are better illustrated by monads. Once you go through a
convert : α → α Christian
function, the originalsin : α → β
function is no longer accessible for you, onlysinM : α → α Christian
.In catholicism, there’s a Priest monad:
ordain : α → α Priest
. A person who was ordained can be banned for administering sacraments, but if he does, they are still valid.Since there are no demonination that has both perseverance of the saints and indelible mark of ordination doctrines, in practice there is no need for a monad transformer that combines
Christian
andPriest
monads, but I’m pretty certain that future computational theologians will work it out.For a good intoduction to computational theology, you should read this article by Rev. Bob Harper: https://existentialtype.wordpress.com/2011/03/27/the-holy-trinity/
I’m not sure I follow the monad illustration.
If
Christian
is a monad, then(>>= (convert . sin)) :: Christian α → Christian β
is perfectly accessible (if you’ll forgive the Haskell syntax). If I’m following your analogy correctly, doesn’t this suggest that a
Christian α
can stillsin
? What would the bind function even mean?That’s an artifact of late night writing. With the
α →β
everyone can sin indeed. Perhaps a better analogy would be that the original sin function is aα → Damned α
, which you cannot use with the bind of the Christian monad.My first hobby is computer science (which happily also pays the bills), my second hobby is the history of Judaism and Christianity (note that I am neither Jewish nor Christian)…so this is right up my alley. :)
It’s a fun thing to note that in both computer science and western theology, every single one of those example programs could be argued to be both right and wrong simultaneously (for example, there are non-Trinitarian Christians and there are programmers who would argue that the assertions in the Trinity example violate transitive identities…which they do, that’s part of the so-called mystery of the Trinity…).
EDIT: Actually, it’s funny that the JavaScript Trinity program uses
==
and not===
. I am amusing myself thinking of the implications.I’d love to learn more about this. The Trinity seems fairly well-defined by the Nicene Creed, the Chalcedonian Definition, etc.
I realize that, say, Mormons reject the Trinity…but I also wouldn’t consider Mormons to be Christian
[Comment removed by author]
Some links for your enjoyment, then:
From experience, nontrinitarianism is pretty common among (Dutch?) Mennonites, and per Wikipedia it also is, or has been, common among various other flavours of Anabaptism. Also Jehova’s Witnesses, Oneness Pentecostals, and presumably lots more flavours of Christianity besides. You’ll get even more if you start looking at the difference between (a) what is prescribed by the flavour people identify with, versus (b) what those same people say when you ask them “do you believe that [some specific doctrinal point]” – I promise you Dutch Catholics are going to give massively different answers from Argentine ones. Christianity is a super large, widespread, and varied family of religions…
That’s where I also noticed most of the undefined behaviour too ;D
[Comment removed by author]
I like the idea of thinking in code. The Holy Trinity in Javascript! Who knew?
Nice article. Whatever you’re thinking about, expressing it in code is a great way of making it more logically consistent.
Came here to comment on the implications of using JavaScript’s insane type equities to represent the Holy Trinity 🤔
Actually Javascript would work for just about any kind of religion you have. Everything equals everything.
[Comment removed by author]
Python 2’s
True, False = False, True
pretty much always said everything I’d need to know about the relationship between code and theology.I think there’s a bug in the javascript for Catholic salvation. Obviously, part of the implementation has been left out (our booleans get modified in another thread?). Assuming that the missing code is merely straightforward calls to change the value of those booleans during the course of life events, rather than some complex logic… then it appears that you only have to get Reconciled once. The rest of your mortal sins are “free”, I guess.
(:
Terry Davis would be proud
This is rather whimsical. :) The only way the “immovable object” thing makes sense to me is like:
For a completely serious discussion of certain mathematicians’ fascination with theology and metaphysics, there’s an interesting paper.
Impermanence seems wrong: