Set Warnings "-notation-overridden,-parsing". From Stdlib Require Export String. From LF Require Import Poly. 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 Poly. Import Check. Goal True. idtac "------------------- poly_exercises --------------------". idtac " ". idtac "#> app_nil_r". idtac "Possible points: 0.5". check_type @app_nil_r ( (forall (X : Type) (l : list X), @eq (list X) (@app X l (@nil X)) l)). idtac "Assumptions:". Abort. Print Assumptions app_nil_r. Goal True. idtac " ". idtac "#> app_assoc". idtac "Possible points: 1". check_type @app_assoc ( (forall (A : Type) (l m n : list A), @eq (list A) (@app A l (@app A m n)) (@app A (@app A l m) n))). idtac "Assumptions:". Abort. Print Assumptions app_assoc. Goal True. idtac " ". idtac "#> app_length". idtac "Possible points: 0.5". check_type @app_length ( (forall (X : Type) (l1 l2 : list X), @eq nat (@length X (@app X l1 l2)) (Nat.add (@length X l1) (@length X l2)))). idtac "Assumptions:". Abort. Print Assumptions app_length. Goal True. idtac " ". idtac "------------------- more_poly_exercises --------------------". idtac " ". idtac "#> rev_app_distr". idtac "Possible points: 1". check_type @rev_app_distr ( (forall (X : Type) (l1 l2 : list X), @eq (list X) (@rev X (@app X l1 l2)) (@app X (@rev X l2) (@rev X l1)))). idtac "Assumptions:". Abort. Print Assumptions rev_app_distr. Goal True. idtac " ". idtac "#> rev_involutive". idtac "Possible points: 1". check_type @rev_involutive ( (forall (X : Type) (l : list X), @eq (list X) (@rev X (@rev X l)) l)). idtac "Assumptions:". Abort. Print Assumptions rev_involutive. Goal True. idtac " ". idtac "------------------- split --------------------". idtac " ". idtac "#> split". idtac "Possible points: 1". check_type @split ((forall (X Y : Type) (_ : list (prod X Y)), prod (list X) (list Y))). idtac "Assumptions:". Abort. Print Assumptions split. Goal True. idtac " ". idtac "#> test_split". idtac "Possible points: 1". check_type @test_split ( (@eq (prod (list nat) (list bool)) (@split nat bool (@cons (prod nat bool) (@pair nat bool 1 false) (@cons (prod nat bool) (@pair nat bool 2 false) (@nil (prod nat bool))))) (@pair (list nat) (list bool) (@cons nat 1 (@cons nat 2 (@nil nat))) (@cons bool false (@cons bool false (@nil bool)))))). idtac "Assumptions:". Abort. Print Assumptions test_split. Goal True. idtac " ". idtac "------------------- filter_even_gt7 --------------------". idtac " ". idtac "#> test_filter_even_gt7_1". idtac "Possible points: 1". check_type @test_filter_even_gt7_1 ( (@eq (list nat) (filter_even_gt7 (@cons nat 1 (@cons nat 2 (@cons nat 6 (@cons nat 9 (@cons nat 10 (@cons nat 3 (@cons nat 12 (@cons nat 8 (@nil nat)))))))))) (@cons nat 10 (@cons nat 12 (@cons nat 8 (@nil nat)))))). idtac "Assumptions:". Abort. Print Assumptions test_filter_even_gt7_1. Goal True. idtac " ". idtac "#> test_filter_even_gt7_2". idtac "Possible points: 1". check_type @test_filter_even_gt7_2 ( (@eq (list nat) (filter_even_gt7 (@cons nat 5 (@cons nat 2 (@cons nat 6 (@cons nat 19 (@cons nat 129 (@nil nat))))))) (@nil nat))). idtac "Assumptions:". Abort. Print Assumptions test_filter_even_gt7_2. Goal True. idtac " ". idtac "------------------- partition --------------------". idtac " ". idtac "#> partition". idtac "Possible points: 1". check_type @partition ( (forall (X : Type) (_ : forall _ : X, bool) (_ : list X), prod (list X) (list X))). idtac "Assumptions:". Abort. Print Assumptions partition. Goal True. idtac " ". idtac "#> test_partition1". idtac "Possible points: 1". check_type @test_partition1 ( (@eq (prod (list nat) (list nat)) (@partition nat odd (@cons nat 1 (@cons nat 2 (@cons nat 3 (@cons nat 4 (@cons nat 5 (@nil nat))))))) (@pair (list nat) (list nat) (@cons nat 1 (@cons nat 3 (@cons nat 5 (@nil nat)))) (@cons nat 2 (@cons nat 4 (@nil nat)))))). idtac "Assumptions:". Abort. Print Assumptions test_partition1. Goal True. idtac " ". idtac "#> test_partition2". idtac "Possible points: 1". check_type @test_partition2 ( (@eq (prod (list nat) (list nat)) (@partition nat (fun _ : nat => false) (@cons nat 5 (@cons nat 9 (@cons nat 0 (@nil nat))))) (@pair (list nat) (list nat) (@nil nat) (@cons nat 5 (@cons nat 9 (@cons nat 0 (@nil nat))))))). idtac "Assumptions:". Abort. Print Assumptions test_partition2. Goal True. idtac " ". idtac "------------------- map_rev --------------------". idtac " ". idtac "#> map_rev". idtac "Possible points: 3". check_type @map_rev ( (forall (X Y : Type) (f : forall _ : X, Y) (l : list X), @eq (list Y) (@map X Y f (@rev X l)) (@rev Y (@map X Y f l)))). idtac "Assumptions:". Abort. Print Assumptions map_rev. Goal True. idtac " ". idtac "------------------- flat_map --------------------". idtac " ". idtac "#> flat_map". idtac "Possible points: 1". check_type @flat_map ( (forall (X Y : Type) (_ : forall _ : X, list Y) (_ : list X), list Y)). idtac "Assumptions:". Abort. Print Assumptions flat_map. Goal True. idtac " ". idtac "#> test_flat_map1". idtac "Possible points: 1". check_type @test_flat_map1 ( (@eq (list nat) (@flat_map nat nat (fun n : nat => @cons nat n (@cons nat n (@cons nat n (@nil nat)))) (@cons nat 1 (@cons nat 5 (@cons nat 4 (@nil nat))))) (@cons nat 1 (@cons nat 1 (@cons nat 1 (@cons nat 5 (@cons nat 5 (@cons nat 5 (@cons nat 4 (@cons nat 4 (@cons nat 4 (@nil nat)))))))))))). idtac "Assumptions:". Abort. Print Assumptions test_flat_map1. Goal True. idtac " ". idtac "------------------- fold_length --------------------". idtac " ". idtac "#> Exercises.fold_length_correct". idtac "Possible points: 2". check_type @Exercises.fold_length_correct ( (forall (X : Type) (l : list X), @eq nat (@Exercises.fold_length X l) (@length X l))). idtac "Assumptions:". Abort. Print Assumptions Exercises.fold_length_correct. Goal True. idtac " ". idtac "------------------- fold_map --------------------". idtac " ". idtac "#> Manually graded: Exercises.fold_map". idtac "Possible points: 3". print_manual_grade Exercises.manual_grade_for_fold_map. idtac " ". idtac "------------------- currying --------------------". idtac " ". idtac "#> Exercises.uncurry_curry". idtac "Advanced". idtac "Possible points: 1". check_type @Exercises.uncurry_curry ( (forall (X Y Z : Type) (f : forall (_ : X) (_ : Y), Z) (x : X) (y : Y), @eq Z (@Exercises.prod_curry X Y Z (@Exercises.prod_uncurry X Y Z f) x y) (f x y))). idtac "Assumptions:". Abort. Print Assumptions Exercises.uncurry_curry. Goal True. idtac " ". idtac "#> Exercises.curry_uncurry". idtac "Advanced". idtac "Possible points: 1". check_type @Exercises.curry_uncurry ( (forall (X Y Z : Type) (f : forall _ : prod X Y, Z) (p : prod X Y), @eq Z (@Exercises.prod_uncurry X Y Z (@Exercises.prod_curry X Y Z f) p) (f p))). idtac "Assumptions:". Abort. Print Assumptions Exercises.curry_uncurry. Goal True. idtac " ". idtac "------------------- church_scc --------------------". idtac " ". idtac "#> Exercises.Church.scc_2". idtac "Advanced". idtac "Possible points: 1". check_type @Exercises.Church.scc_2 ( (@eq Exercises.Church.cnat (Exercises.Church.scc Exercises.Church.one) Exercises.Church.two)). idtac "Assumptions:". Abort. Print Assumptions Exercises.Church.scc_2. Goal True. idtac " ". idtac "#> Exercises.Church.scc_3". idtac "Advanced". idtac "Possible points: 1". check_type @Exercises.Church.scc_3 ( (@eq Exercises.Church.cnat (Exercises.Church.scc Exercises.Church.two) Exercises.Church.three)). idtac "Assumptions:". Abort. Print Assumptions Exercises.Church.scc_3. Goal True. idtac " ". idtac "------------------- church_plus --------------------". idtac " ". idtac "#> Exercises.Church.plus_1". idtac "Advanced". idtac "Possible points: 1". check_type @Exercises.Church.plus_1 ( (@eq Exercises.Church.cnat (Exercises.Church.plus Exercises.Church.zero Exercises.Church.one) Exercises.Church.one)). idtac "Assumptions:". Abort. Print Assumptions Exercises.Church.plus_1. Goal True. idtac " ". idtac "#> Exercises.Church.plus_2". idtac "Advanced". idtac "Possible points: 1". check_type @Exercises.Church.plus_2 ( (@eq Exercises.Church.cnat (Exercises.Church.plus Exercises.Church.two Exercises.Church.three) (Exercises.Church.plus Exercises.Church.three Exercises.Church.two))). idtac "Assumptions:". Abort. Print Assumptions Exercises.Church.plus_2. Goal True. idtac " ". idtac "#> Exercises.Church.plus_3". idtac "Advanced". idtac "Possible points: 1". check_type @Exercises.Church.plus_3 ( (@eq Exercises.Church.cnat (Exercises.Church.plus (Exercises.Church.plus Exercises.Church.two Exercises.Church.two) Exercises.Church.three) (Exercises.Church.plus Exercises.Church.one (Exercises.Church.plus Exercises.Church.three Exercises.Church.three)))). idtac "Assumptions:". Abort. Print Assumptions Exercises.Church.plus_3. Goal True. idtac " ". idtac "------------------- church_mult --------------------". idtac " ". idtac "#> Exercises.Church.mult_1". idtac "Advanced". idtac "Possible points: 1". check_type @Exercises.Church.mult_1 ( (@eq Exercises.Church.cnat (Exercises.Church.mult Exercises.Church.one Exercises.Church.one) Exercises.Church.one)). idtac "Assumptions:". Abort. Print Assumptions Exercises.Church.mult_1. Goal True. idtac " ". idtac "#> Exercises.Church.mult_2". idtac "Advanced". idtac "Possible points: 1". check_type @Exercises.Church.mult_2 ( (@eq Exercises.Church.cnat (Exercises.Church.mult Exercises.Church.zero (Exercises.Church.plus Exercises.Church.three Exercises.Church.three)) Exercises.Church.zero)). idtac "Assumptions:". Abort. Print Assumptions Exercises.Church.mult_2. Goal True. idtac " ". idtac "#> Exercises.Church.mult_3". idtac "Advanced". idtac "Possible points: 1". check_type @Exercises.Church.mult_3 ( (@eq Exercises.Church.cnat (Exercises.Church.mult Exercises.Church.two Exercises.Church.three) (Exercises.Church.plus Exercises.Church.three Exercises.Church.three))). idtac "Assumptions:". Abort. Print Assumptions Exercises.Church.mult_3. Goal True. idtac " ". idtac "------------------- church_exp --------------------". idtac " ". idtac "#> Exercises.Church.exp_1". idtac "Advanced". idtac "Possible points: 1". check_type @Exercises.Church.exp_1 ( (@eq Exercises.Church.cnat (Exercises.Church.exp Exercises.Church.two Exercises.Church.two) (Exercises.Church.plus Exercises.Church.two Exercises.Church.two))). idtac "Assumptions:". Abort. Print Assumptions Exercises.Church.exp_1. Goal True. idtac " ". idtac "#> Exercises.Church.exp_2". idtac "Advanced". idtac "Possible points: 1". check_type @Exercises.Church.exp_2 ( (@eq Exercises.Church.cnat (Exercises.Church.exp Exercises.Church.three Exercises.Church.zero) Exercises.Church.one)). idtac "Assumptions:". Abort. Print Assumptions Exercises.Church.exp_2. Goal True. idtac " ". idtac "#> Exercises.Church.exp_3". idtac "Advanced". idtac "Possible points: 1". check_type @Exercises.Church.exp_3 ( (@eq Exercises.Church.cnat (Exercises.Church.exp Exercises.Church.three Exercises.Church.two) (Exercises.Church.plus (Exercises.Church.mult Exercises.Church.two (Exercises.Church.mult Exercises.Church.two Exercises.Church.two)) Exercises.Church.one))). idtac "Assumptions:". Abort. Print Assumptions Exercises.Church.exp_3. Goal True. idtac " ". idtac " ". idtac "Max points - standard: 21". idtac "Max points - advanced: 34". 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 "---------- app_nil_r ---------". Print Assumptions app_nil_r. idtac "---------- app_assoc ---------". Print Assumptions app_assoc. idtac "---------- app_length ---------". Print Assumptions app_length. idtac "---------- rev_app_distr ---------". Print Assumptions rev_app_distr. idtac "---------- rev_involutive ---------". Print Assumptions rev_involutive. idtac "---------- split ---------". Print Assumptions split. idtac "---------- test_split ---------". Print Assumptions test_split. idtac "---------- test_filter_even_gt7_1 ---------". Print Assumptions test_filter_even_gt7_1. idtac "---------- test_filter_even_gt7_2 ---------". Print Assumptions test_filter_even_gt7_2. idtac "---------- partition ---------". Print Assumptions partition. idtac "---------- test_partition1 ---------". Print Assumptions test_partition1. idtac "---------- test_partition2 ---------". Print Assumptions test_partition2. idtac "---------- map_rev ---------". Print Assumptions map_rev. idtac "---------- flat_map ---------". Print Assumptions flat_map. idtac "---------- test_flat_map1 ---------". Print Assumptions test_flat_map1. idtac "---------- Exercises.fold_length_correct ---------". Print Assumptions Exercises.fold_length_correct. idtac "---------- fold_map ---------". idtac "MANUAL". idtac "". idtac "********** Advanced **********". idtac "---------- Exercises.uncurry_curry ---------". Print Assumptions Exercises.uncurry_curry. idtac "---------- Exercises.curry_uncurry ---------". Print Assumptions Exercises.curry_uncurry. idtac "---------- Exercises.Church.scc_2 ---------". Print Assumptions Exercises.Church.scc_2. idtac "---------- Exercises.Church.scc_3 ---------". Print Assumptions Exercises.Church.scc_3. idtac "---------- Exercises.Church.plus_1 ---------". Print Assumptions Exercises.Church.plus_1. idtac "---------- Exercises.Church.plus_2 ---------". Print Assumptions Exercises.Church.plus_2. idtac "---------- Exercises.Church.plus_3 ---------". Print Assumptions Exercises.Church.plus_3. idtac "---------- Exercises.Church.mult_1 ---------". Print Assumptions Exercises.Church.mult_1. idtac "---------- Exercises.Church.mult_2 ---------". Print Assumptions Exercises.Church.mult_2. idtac "---------- Exercises.Church.mult_3 ---------". Print Assumptions Exercises.Church.mult_3. idtac "---------- Exercises.Church.exp_1 ---------". Print Assumptions Exercises.Church.exp_1. idtac "---------- Exercises.Church.exp_2 ---------". Print Assumptions Exercises.Church.exp_2. idtac "---------- Exercises.Church.exp_3 ---------". Print Assumptions Exercises.Church.exp_3. Abort. (* 2026-01-07 13:18 *) (* 2026-01-07 13:18 *)