Set Warnings "-notation-overridden,-parsing". From Stdlib Require Export String. From LF Require Import Imp. Parameter MISSING: Type. Module Check. Ltac check_type A B := match type of A with | context[MISSING] => idtac "Missing:" A | ?T => first [unify T B; idtac "Type: ok" | idtac "Type: wrong - should be (" B ")"] end. Ltac print_manual_grade A := match eval compute in A with | Some (_ ?S ?C) => idtac "Score:" S; match eval compute in C with | ""%string => idtac "Comment: None" | _ => idtac "Comment:" C end | None => idtac "Score: Ungraded"; idtac "Comment: None" end. End Check. From LF Require Import Imp. Import Check. Goal True. idtac "------------------- optimize_0plus_b_sound --------------------". idtac " ". idtac "#> AExp.optimize_0plus_b_test1". idtac "Possible points: 0.5". check_type @AExp.optimize_0plus_b_test1 ( (@eq AExp.bexp (AExp.optimize_0plus_b (AExp.BNot (AExp.BGt (AExp.APlus (AExp.ANum 0) (AExp.ANum 4)) (AExp.ANum 8)))) (AExp.BNot (AExp.BGt (AExp.ANum 4) (AExp.ANum 8))))). idtac "Assumptions:". Abort. Print Assumptions AExp.optimize_0plus_b_test1. Goal True. idtac " ". idtac "#> AExp.optimize_0plus_b_test2". idtac "Possible points: 0.5". check_type @AExp.optimize_0plus_b_test2 ( (@eq AExp.bexp (AExp.optimize_0plus_b (AExp.BAnd (AExp.BLe (AExp.APlus (AExp.ANum 0) (AExp.ANum 4)) (AExp.ANum 5)) AExp.BTrue)) (AExp.BAnd (AExp.BLe (AExp.ANum 4) (AExp.ANum 5)) AExp.BTrue))). idtac "Assumptions:". Abort. Print Assumptions AExp.optimize_0plus_b_test2. Goal True. idtac " ". idtac "#> AExp.optimize_0plus_b_sound". idtac "Possible points: 2". check_type @AExp.optimize_0plus_b_sound ( (forall b : AExp.bexp, @eq bool (AExp.beval (AExp.optimize_0plus_b b)) (AExp.beval b))). idtac "Assumptions:". Abort. Print Assumptions AExp.optimize_0plus_b_sound. Goal True. idtac " ". idtac "------------------- bevalR --------------------". idtac " ". idtac "#> AExp.bevalR_iff_beval". idtac "Possible points: 3". check_type @AExp.bevalR_iff_beval ( (forall (b : AExp.bexp) (bv : bool), iff (AExp.bevalR b bv) (@eq bool (AExp.beval b) bv))). idtac "Assumptions:". Abort. Print Assumptions AExp.bevalR_iff_beval. Goal True. idtac " ". idtac "------------------- ceval_example2 --------------------". idtac " ". idtac "#> ceval_example2". idtac "Possible points: 2". check_type @ceval_example2 ( (ceval (CSeq (CAsgn X (ANum 0)) (CSeq (CAsgn Y (ANum 1)) (CAsgn Z (ANum 2)))) empty_st (@Maps.t_update nat (@Maps.t_update nat (@Maps.t_update nat empty_st X 0) Y 1) Z 2))). idtac "Assumptions:". Abort. Print Assumptions ceval_example2. Goal True. idtac " ". idtac "------------------- loop_never_stops --------------------". idtac " ". idtac "#> loop_never_stops". idtac "Possible points: 3". check_type @loop_never_stops ((forall st st' : state, not (ceval loop st st'))). idtac "Assumptions:". Abort. Print Assumptions loop_never_stops. Goal True. idtac " ". idtac "------------------- no_whiles_eqv --------------------". idtac " ". idtac "#> no_whiles_eqv". idtac "Possible points: 3". check_type @no_whiles_eqv ( (forall c : com, iff (@eq bool (no_whiles c) true) (no_whilesR c))). idtac "Assumptions:". Abort. Print Assumptions no_whiles_eqv. Goal True. idtac " ". idtac "------------------- no_whiles_terminating --------------------". idtac " ". idtac "#> Manually graded: no_whiles_terminating". idtac "Possible points: 6". print_manual_grade manual_grade_for_no_whiles_terminating. idtac " ". idtac "------------------- stack_compiler --------------------". idtac " ". idtac "#> s_execute1". idtac "Possible points: 1". check_type @s_execute1 ( (@eq (list nat) (s_execute empty_st (@nil nat) (@cons sinstr (SPush 5) (@cons sinstr (SPush 3) (@cons sinstr (SPush 1) (@cons sinstr SMinus (@nil sinstr)))))) (@cons nat 2 (@cons nat 5 (@nil nat))))). idtac "Assumptions:". Abort. Print Assumptions s_execute1. Goal True. idtac " ". idtac "#> s_execute2". idtac "Possible points: 0.5". check_type @s_execute2 ( (@eq (list nat) (s_execute (@Maps.t_update nat empty_st X 3) (@cons nat 3 (@cons nat 4 (@nil nat))) (@cons sinstr (SPush 4) (@cons sinstr (SLoad X) (@cons sinstr SMult (@cons sinstr SPlus (@nil sinstr)))))) (@cons nat 15 (@cons nat 4 (@nil nat))))). idtac "Assumptions:". Abort. Print Assumptions s_execute2. Goal True. idtac " ". idtac "#> s_compile1". idtac "Possible points: 1.5". check_type @s_compile1 ( (@eq (list sinstr) (s_compile (AMinus (AId X) (AMult (ANum 2) (AId Y)))) (@cons sinstr (SLoad X) (@cons sinstr (SPush 2) (@cons sinstr (SLoad Y) (@cons sinstr SMult (@cons sinstr SMinus (@nil sinstr)))))))). idtac "Assumptions:". Abort. Print Assumptions s_compile1. Goal True. idtac " ". idtac "------------------- execute_app --------------------". idtac " ". idtac "#> execute_app". idtac "Possible points: 3". check_type @execute_app ( (forall (st : state) (p1 p2 : list sinstr) (stack : list nat), @eq (list nat) (s_execute st stack (@app sinstr p1 p2)) (s_execute st (s_execute st stack p1) p2))). idtac "Assumptions:". Abort. Print Assumptions execute_app. Goal True. idtac " ". idtac "------------------- stack_compiler_correct --------------------". idtac " ". idtac "#> s_compile_correct_aux". idtac "Possible points: 2.5". check_type @s_compile_correct_aux ( (forall (st : state) (e : aexp) (stack : list nat), @eq (list nat) (s_execute st stack (s_compile e)) (@cons nat (aeval st e) stack))). idtac "Assumptions:". Abort. Print Assumptions s_compile_correct_aux. Goal True. idtac " ". idtac "#> s_compile_correct". idtac "Possible points: 0.5". check_type @s_compile_correct ( (forall (st : state) (e : aexp), @eq (list nat) (s_execute st (@nil nat) (s_compile e)) (@cons nat (aeval st e) (@nil nat)))). idtac "Assumptions:". Abort. Print Assumptions s_compile_correct. Goal True. idtac " ". idtac " ". idtac "Max points - standard: 29". idtac "Max points - advanced: 29". idtac "". idtac "Allowed Axioms:". idtac "functional_extensionality". idtac "FunctionalExtensionality.functional_extensionality_dep". idtac "plus_le". idtac "le_trans". idtac "le_plus_l". idtac "add_le_cases". idtac "Sn_le_Sm__n_le_m". idtac "O_le_n". idtac "". idtac "". idtac "********** Summary **********". idtac "". idtac "Below is a summary of the automatically graded exercises that are incomplete.". idtac "". idtac "The output for each exercise can be any of the following:". idtac " - 'Closed under the global context', if it is complete". idtac " - 'MANUAL', if it is manually graded". idtac " - A list of pending axioms, containing unproven assumptions. In this case". idtac " the exercise is considered complete, if the axioms are all allowed.". idtac "". idtac "********** Standard **********". idtac "---------- AExp.optimize_0plus_b_test1 ---------". Print Assumptions AExp.optimize_0plus_b_test1. idtac "---------- AExp.optimize_0plus_b_test2 ---------". Print Assumptions AExp.optimize_0plus_b_test2. idtac "---------- AExp.optimize_0plus_b_sound ---------". Print Assumptions AExp.optimize_0plus_b_sound. idtac "---------- AExp.bevalR_iff_beval ---------". Print Assumptions AExp.bevalR_iff_beval. idtac "---------- ceval_example2 ---------". Print Assumptions ceval_example2. idtac "---------- loop_never_stops ---------". Print Assumptions loop_never_stops. idtac "---------- no_whiles_eqv ---------". Print Assumptions no_whiles_eqv. idtac "---------- no_whiles_terminating ---------". idtac "MANUAL". idtac "---------- s_execute1 ---------". Print Assumptions s_execute1. idtac "---------- s_execute2 ---------". Print Assumptions s_execute2. idtac "---------- s_compile1 ---------". Print Assumptions s_compile1. idtac "---------- execute_app ---------". Print Assumptions execute_app. idtac "---------- s_compile_correct_aux ---------". Print Assumptions s_compile_correct_aux. idtac "---------- s_compile_correct ---------". Print Assumptions s_compile_correct. idtac "". idtac "********** Advanced **********". Abort. (* 2026-01-07 13:18 *) (* 2026-01-07 13:18 *)