data Nat = Zero | Succ Nat
type Predicate = (Nat -> Bool)
-- forAllNat p = (p n) for every finite defined n :: Nat
implies :: Bool -> Bool -> Bool
implies p q = (not p) || q
basecase :: Predicate -> Bool
basecase p = p Zero
jump :: Predicate -> Predicate
jump p n = implies (p n) (p (Succ n))
indstep :: Predicate -> Bool
indstep p = forallnat (jump p)
質問:
basecase p
であることを証明してくださいindstep p
。forAllNat p
私が理解していないのは、 ifbasecase p
と、もちろんindstep p
そうforAllNat p
あるべきだということです。True
私basecase p
はそれP(0)
が真実であると
indstep p
言い、P(Succ n)
どちらが真実であると言い、それが真実であるかP(n+1)
を証明する必要があると思いP(n)
ます。私は正しいですか?これを行う方法について何か提案はありますか?