mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 17:50:22 +00:00
BSD-2-Clause: https://github.com/jscert/jscert * JSCorrectness.v * JSInterpreterExtraction.v * JSNumber.v * JSPrettyInterm.v MIT/Expat: https://github.com/clarus/coq-atm * Computation.v * Main.v * Spec.v
43 lines
1.3 KiB
Coq
43 lines
1.3 KiB
Coq
Require Import FunctionNinjas.All.
|
|
Require Import ListString.All.
|
|
Require Import Computation.
|
|
|
|
Import C.Notations.
|
|
|
|
Definition error (message : LString.t) : C.t :=
|
|
do_call! Command.ShowError message in
|
|
ret.
|
|
|
|
Definition main : C.t :=
|
|
call! card_is_valid := Command.AskCard in
|
|
if card_is_valid then
|
|
call! pin := Command.AskPIN in
|
|
match pin with
|
|
| None => error @@ LString.s "No PIN given."
|
|
| Some pin =>
|
|
call! pin_is_valid := Command.CheckPIN pin in
|
|
if pin_is_valid then
|
|
call! ask_amount := Command.AskAmount in
|
|
match ask_amount with
|
|
| None => error @@ LString.s "No amount given."
|
|
| Some amount =>
|
|
call! amount_is_valid := Command.CheckAmount amount in
|
|
if amount_is_valid then
|
|
call! card_is_given := Command.GiveCard in
|
|
if card_is_given then
|
|
call! amount_is_given := Command.GiveAmount amount in
|
|
if amount_is_given then
|
|
ret
|
|
else
|
|
error @@ LString.s "Cannot give you the amount. Please contact your bank."
|
|
else
|
|
error @@ LString.s "Cannot give you back the card. Please contact your bank."
|
|
else
|
|
error @@ LString.s "Invalid amount."
|
|
end
|
|
else
|
|
error @@ LString.s "Invalid PIN."
|
|
end
|
|
else
|
|
error @@ LString.s "Invalid card.".
|