Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Hauptstudiumsprüfungen » Lehrstuhl 8 » semprog_ss16 (Übersicht)
Examiners: Tadeusz Litak, Christoph Rauch
The atmosphere was super relaxed and friendly, all of us had a few laughs. Several minor hickups and uncertainty of some details didn't matter at all.
Q: Does `contradiction` solve the following goal?
Theorem x : true = false -> False. Proof. intros.
Q: Which tactic does solve it?
Q: Another one?
Q: What is the difference between `induction` and `inversion`?
Q: What does `induction` do that `inversion` doesn't?
Q: Is the following code correct?
Inductive no_repeats : (l : list) -> Prop := | nor_once : forall x l, appears_not_in x l -> no_repeats l -> no_repeats (x::l) | nor_forgot : forall x l, no_repeats l -> no_repeats (x::l)
[The second constructor might have been different, I can't remember the details]
`appears_not_in` was also defined and did what it sounds like.
Q: What is a hoare triple, what does it assert?
Q: Write down some hoare rules.
Q: [after writing down the sequence rule] Something more interesting?
Q: [after writing down the assignment rule] How about the rule for `while`?
Q: We talked about the simply-typed lambda calculus. What is the difference between our notions of terms in normal form and values?
Q: Which theorem connects types, normal forms and stuckness?
Q: [after stating a form of the progress theorem] We had another theorem involving types and reduction.
Q: Alright, that's the preservation theorem. Next, I have some new reduction/typing rules, choose one and state if determinism, preservation and progress are preserved.
1.
---------------- (ST_Foo1) ------------- (ST_Foo2) (\x. x) => foo foo => true
2.
--------------------------------- (ST_IfTrue') if true then t0 else t1 => true
3. can't recall, something involving a typing rule
Q: [after elaborating on the first ruleset] Choose one more.
Q: Oh, I asked you about these additional rules, but I didn't even ask you about the basic ones. Show me the rules for abstraction and application.
Q: I'm not sure what more to ask you. Can you write down an annotated version of the swap program using only two variables?
We stopped after I backwards-reasoned one instance of the assignment rule (which took several attempts).
The text below has been written by a student from the future different from the author of the exam protocol above!
Here is some working Coq code for the no_repeats inductive question:
Fixpoint appears_not_in {X: Type} (x: X) (l: list X): Prop := match l with | nil => True | cons y ys => (x <> y) /\ (appears_not_in x ys) end. Inductive no_repeats {X: Type} : list X -> Prop := | nor_empty: no_repeats nil | nor_cons: forall x l, appears_not_in x l -> no_repeats l -> no_repeats (x::l).