
function main() {
    type object = {left: bool, right: bool};
    
    var goat: object;
    var cabbage: object;
    var wolf: object;
    var ferryman: bool;
    var carry: string;
    
    var initial_state = {goat: {left: true, right: false}, cabbage: {left: true, right: false}, wolf: {left: true, right: false}, ferryman: true, carry: ""};
    
    var goal_state = {goat: {left: false, right: true}, cabbage: {left: false, right: true}, wolf: {left: false, right: true}, ferryman: false, carry: ""};
    
    var transition = {pre: initial_state, post: goal_state};
    
    var init = state();
    var goal = state();
    
    assume(transition(pre(init)));
    
    assert(validation());
    
    prove();
}